From dd3c4df48be1557e179551369475e2c6cc170546 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Tue, 27 Apr 2021 10:34:02 +0100
Subject: [PATCH 01/64] [ADD] resource_booking: new app to manage bookings This
 module adds a new app to allow you to book resource combinations in given
 schedules.

Example use cases:

* Management of consultations in a clinic.
* Salesman appointments.
* Classroom and projector reservations.
* Hotel room booking.

Among the things you can do:

* Specify the type of booking, which includes a calendar of availability.
* Specify which resources can be booked together. All of them must be free to be booked.
* Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot.
* Partners can do that from their portals.
* If a partner has no user, he can still do the same via a tokenized URL.
* Backend users can also do that from the backend.
* Booking lifecycle with computed states.
* Automatic meeting creation and deletion.
* Automatic conflict detection.
* Deadline to block modifications.

@Tecnativa TT28201
---
 resource_booking/README.rst                   |   204 +
 resource_booking/__init__.py                  |     2 +
 resource_booking/__manifest__.py              |    43 +
 resource_booking/controllers/__init__.py      |     1 +
 resource_booking/controllers/portal.py        |   139 +
 resource_booking/demo/res_users_demo.xml      |    11 +
 resource_booking/i18n/es.po                   |  1181 +
 resource_booking/i18n/resource_booking.pot    |  1086 +
 resource_booking/models/__init__.py           |     7 +
 resource_booking/models/calendar_event.py     |    53 +
 resource_booking/models/resource_booking.py   |   514 +
 .../models/resource_booking_combination.py    |   101 +
 .../models/resource_booking_type.py           |   186 +
 .../resource_booking_type_combination_rel.py  |    28 +
 resource_booking/models/resource_calendar.py  |    97 +
 resource_booking/models/resource_resource.py  |    16 +
 resource_booking/readme/CONFIGURE.rst         |    32 +
 resource_booking/readme/CONTRIBUTORS.rst      |     1 +
 resource_booking/readme/DESCRIPTION.rst       |    22 +
 resource_booking/readme/INSTALL.rst           |    13 +
 resource_booking/readme/ROADMAP.rst           |     4 +
 resource_booking/readme/USAGE.rst             |    37 +
 resource_booking/security/ir.model.access.csv |    11 +
 .../security/resource_booking_security.xml    |    55 +
 resource_booking/static/description/icon.png  |   Bin 0 -> 4337 bytes
 resource_booking/static/description/icon.svg  | 22828 ++++++++++++++++
 .../static/description/index.html             |   548 +
 resource_booking/static/src/css/portal.scss   |     8 +
 resource_booking/templates/assets.xml         |    12 +
 resource_booking/templates/portal.xml         |   410 +
 resource_booking/tests/__init__.py            |     2 +
 resource_booking/tests/common.py              |   105 +
 resource_booking/tests/test_backend.py        |   306 +
 resource_booking/tests/test_portal.py         |   244 +
 .../views/calendar_event_views.xml            |    18 +
 resource_booking/views/menus.xml              |    30 +
 .../resource_booking_combination_views.xml    |    75 +
 .../views/resource_booking_type_views.xml     |   100 +
 .../views/resource_booking_views.xml          |   129 +
 39 files changed, 28659 insertions(+)
 create mode 100644 resource_booking/README.rst
 create mode 100644 resource_booking/__init__.py
 create mode 100644 resource_booking/__manifest__.py
 create mode 100644 resource_booking/controllers/__init__.py
 create mode 100644 resource_booking/controllers/portal.py
 create mode 100644 resource_booking/demo/res_users_demo.xml
 create mode 100644 resource_booking/i18n/es.po
 create mode 100644 resource_booking/i18n/resource_booking.pot
 create mode 100644 resource_booking/models/__init__.py
 create mode 100644 resource_booking/models/calendar_event.py
 create mode 100644 resource_booking/models/resource_booking.py
 create mode 100644 resource_booking/models/resource_booking_combination.py
 create mode 100644 resource_booking/models/resource_booking_type.py
 create mode 100644 resource_booking/models/resource_booking_type_combination_rel.py
 create mode 100644 resource_booking/models/resource_calendar.py
 create mode 100644 resource_booking/models/resource_resource.py
 create mode 100644 resource_booking/readme/CONFIGURE.rst
 create mode 100644 resource_booking/readme/CONTRIBUTORS.rst
 create mode 100644 resource_booking/readme/DESCRIPTION.rst
 create mode 100644 resource_booking/readme/INSTALL.rst
 create mode 100644 resource_booking/readme/ROADMAP.rst
 create mode 100644 resource_booking/readme/USAGE.rst
 create mode 100644 resource_booking/security/ir.model.access.csv
 create mode 100644 resource_booking/security/resource_booking_security.xml
 create mode 100644 resource_booking/static/description/icon.png
 create mode 100644 resource_booking/static/description/icon.svg
 create mode 100644 resource_booking/static/description/index.html
 create mode 100644 resource_booking/static/src/css/portal.scss
 create mode 100644 resource_booking/templates/assets.xml
 create mode 100644 resource_booking/templates/portal.xml
 create mode 100644 resource_booking/tests/__init__.py
 create mode 100644 resource_booking/tests/common.py
 create mode 100644 resource_booking/tests/test_backend.py
 create mode 100644 resource_booking/tests/test_portal.py
 create mode 100644 resource_booking/views/calendar_event_views.xml
 create mode 100644 resource_booking/views/menus.xml
 create mode 100644 resource_booking/views/resource_booking_combination_views.xml
 create mode 100644 resource_booking/views/resource_booking_type_views.xml
 create mode 100644 resource_booking/views/resource_booking_views.xml

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
new file mode 100644
index 00000000..3b4cb174
--- /dev/null
+++ b/resource_booking/README.rst
@@ -0,0 +1,204 @@
+================
+Resource booking
+================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+    :target: https://odoo-community.org/page/development-status
+    :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+    :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github
+    :target: https://github.com/OCA/calendar/tree/12.0/resource_booking
+    :alt: OCA/calendar
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/calendar-12-0/calendar-12-0-resource_booking
+    :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+    :target: https://runbot.odoo-community.org/runbot/279/12.0
+    :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5| 
+
+This module adds a new app to allow you to book resource combinations in given
+schedules.
+
+Example use cases:
+
+* Management of consultations in a clinic.
+* Salesman appointments.
+* Classroom and projector reservations.
+* Hotel room booking.
+
+Among the things you can do:
+
+* Specify the type of booking, which includes a calendar of availability.
+* Specify which resources can be booked together. All of them must be free to be booked.
+* Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot.
+* Partners can do that from their portals.
+* If a partner has no user, he can still do the same via a tokenized URL.
+* Backend users can also do that from the backend.
+* Booking lifecycle with computed states.
+* Automatic meeting creation and deletion.
+* Automatic conflict detection.
+* Deadline to block modifications.
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Installation
+============
+
+To install this module, you need to install these dependencies:
+
+#. `freezegun <https://github.com/spulec/freezegun>`__
+#. `web_calendar_slot_duration <https://odoo-community.org/shop/product/calendar-slot-duration-6202>`__
+
+When someone is a manager, he will have access to *Resource Bookings >
+Configuration*, where he will be able to configure resources, leaves and
+schedules. This menu is just provided as a commodity. However, if you want to
+manage that stuff more comfortably:
+
+* To manage human resources, install `hr <https://apps.odoo.com/app/employees>`__.
+* To manage their leaves, install `hr_holidays <https://apps.odoo.com/app/time-off>`__.
+* To manage work centers, install `mrp <https://apps.odoo.com/app/manufacturing>`__.
+
+Configuration
+=============
+
+To let some backend user to book resources:
+
+#. Go to *Settings > Users & Companies > Users*.
+#. Pick or create one.
+#. Assign *Resource Booking > User*.
+
+To let some backend user to configure types and combinations, and to be able to
+modify overdue bookings:
+
+#. Go to *Settings > Users & Companies > Users*.
+#. Pick or create one.
+#. Assign *Resource Booking > Manager*.
+
+To configure one booking type:
+
+#. Go to *Resource Bookings > Types*.
+#. Create one.
+#. Give it a *name*.
+#. Set the *Duration*, to know the time assigned to each calendar slot.
+#. Set the *Modifications Deadline*, to forbid non-managers to alter dates of
+   a booking when it's too late.
+#. Choose one *Availability Calendar*. No bookings will exist outside of it.
+#. Under *Meeting defaults*, you will be able to fill some values that will
+   be used by default on calendar meetings. These will appear in the global
+   calendar when some booking is reserved.
+#. Choose some *Available resource combinations*. All combinations in the same
+   line must be free to be booked together; otherwise the booking will not be
+   able to be scheduled. You can sort them.
+#. Pick up one *Combination Assignment*. If you choose *Sorted*, then the order
+   of the combinations you chose will indicate the one that is selected first.
+   Of course, it must be free to be selected.
+#. Save.
+
+Usage
+=====
+
+This module installs a new app, "Resource bookings".
+
+Bookings may involve you:
+
+* Maybe because you requested to book something.
+* Maybe because you are one of the booked resources, if a booking represents
+  some kind of appointment.
+
+To see which bookings involve you:
+
+#. Go to *Resource Bookings > Bookings*.
+#. You can switch to the list view if you need to see also the pending ones.
+#. You can remove the "Involving me" filter if you want to see others' bookings.
+
+To book some resources:
+
+#. Go to *Resource Bookings > Types*.
+#. Pick the type of booking you want.
+#. Click on *Booking Count*.
+#. Click on a free slot.
+#. Fill the *Requester*, which may or not be yourself.
+#. Pick one *Resources combination*, in case the one assigned automatically
+   isn't the one you want.
+
+To invite someone to book a resource combination from the portal:
+
+#. Go to *Resource Bookings > Types*.
+#. Pick the type of booking you want.
+#. Click on *Booking Count*.
+#. Click on the list view icon.
+#. Click on *Create*.
+#. Fill the *Requester*.
+#. Pick one *Resources combination*, if you want that the requester is assigned
+   to that combination. Otherwise, leave it empty, and some free combination
+   will be assigned automatically when the requester picks a free slot.
+#. Click on *Share > Send*.
+#. The requester will receive an email to select a calendar slot from his portal.
+
+Known issues / Roadmap
+======================
+
+* Allow combination auto-assignment based on least used combination.
+* Allow customer to choose combination.
+* Some error messages would be a bit more helpful if they specify the schedule
+  impossibility reason, but that should be done without affecting performance.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+* Jairo Llopis <jairo.llopis@tecnativa.com> (https://www.tecnativa.com/)
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-Yajo| image:: https://github.com/Yajo.png?size=40px
+    :target: https://github.com/Yajo
+    :alt: Yajo
+
+Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
+
+|maintainer-Yajo| 
+
+This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/12.0/resource_booking>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/resource_booking/__init__.py b/resource_booking/__init__.py
new file mode 100644
index 00000000..f7209b17
--- /dev/null
+++ b/resource_booking/__init__.py
@@ -0,0 +1,2 @@
+from . import models
+from . import controllers
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
new file mode 100644
index 00000000..41d8e5e8
--- /dev/null
+++ b/resource_booking/__manifest__.py
@@ -0,0 +1,43 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+{
+    "name": "Resource booking",
+    "summary": "Manage appointments and resource booking",
+    "version": "12.0.1.0.0",
+    "development_status": "Beta",
+    "category": "Appointments",
+    "website": "https://github.com/OCA/calendar",
+    "author": "Tecnativa, Odoo Community Association (OCA)",
+    "maintainers": ["Yajo"],
+    "license": "AGPL-3",
+    "application": True,
+    "installable": True,
+    "external_dependencies": {
+        "python": [
+            "cssselect",  # Used implicitly
+            "freezegun",  # Only for tests
+        ],
+    },
+    "depends": [
+        "calendar",
+        "mail",
+        "portal",
+        "resource",
+        "web_calendar_slot_duration",
+    ],
+    "data": [
+        "security/resource_booking_security.xml",
+        "security/ir.model.access.csv",
+        "templates/assets.xml",
+        "templates/portal.xml",
+        "views/calendar_event_views.xml",
+        "views/resource_booking_combination_views.xml",
+        "views/resource_booking_type_views.xml",
+        "views/resource_booking_views.xml",
+        "views/menus.xml",
+    ],
+    "demo": [
+        "demo/res_users_demo.xml",
+    ],
+}
diff --git a/resource_booking/controllers/__init__.py b/resource_booking/controllers/__init__.py
new file mode 100644
index 00000000..8c3feb6f
--- /dev/null
+++ b/resource_booking/controllers/__init__.py
@@ -0,0 +1 @@
+from . import portal
diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
new file mode 100644
index 00000000..11da8785
--- /dev/null
+++ b/resource_booking/controllers/portal.py
@@ -0,0 +1,139 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from datetime import datetime
+from urllib.parse import quote_plus
+
+from dateutil.parser import isoparse
+from odoo.addons.portal.controllers import portal
+from odoo.exceptions import AccessError, MissingError, ValidationError
+from odoo.http import request, route
+from odoo.tests.common import Form
+
+
+class CustomerPortal(portal.CustomerPortal):
+    def _get_booking_sudo(self, booking_id, access_token):
+        """Get sudoed booking record from its ID."""
+        booking_sudo = self._document_check_access(
+            "resource.booking", booking_id, access_token
+        )
+        return booking_sudo.with_context(
+            using_portal=True, tz=booking_sudo.type_id.resource_calendar_id.tz
+        )
+
+    def _prepare_portal_layout_values(self):
+        """Compute values for multi-booking portal views."""
+        values = super(CustomerPortal, self)._prepare_portal_layout_values()
+        booking_count = request.env["resource.booking"].search_count([])
+        values.update({"booking_count": booking_count})
+        return values
+
+    def _booking_get_page_view_values(self, booking_sudo, access_token, **kwargs):
+        """Compute values for single-booking portal views."""
+        return self._get_page_view_values(
+            booking_sudo,
+            access_token,
+            {"page_name": "booking", "booking_sudo": booking_sudo},
+            "my_bookings_history",
+            False,
+            **kwargs
+        )
+
+    @route(
+        ["/my/bookings", "/my/bookings/page/<int:page>"],
+        auth="user",
+        type="http",
+        website=True,
+    )
+    def portal_my_bookings(self, page=1, **kwargs):
+        """List bookings that I can access."""
+        Booking = request.env["resource.booking"]
+        values = self._prepare_portal_layout_values()
+        pager = portal.pager(
+            url="/my/bookings",
+            total=values["booking_count"],
+            page=page,
+            step=self._items_per_page,
+        )
+        bookings = Booking.search(
+            [], limit=self._items_per_page, offset=pager["offset"]
+        )
+        request.session["my_bookings_history"] = bookings.ids
+        values.update({"bookings": bookings, "pager": pager, "page_name": "bookings"})
+        return request.render("resource_booking.portal_my_bookings", values)
+
+    @route(["/my/bookings/<int:booking_id>"], type="http", auth="public", website=True)
+    def portal_booking_page(self, booking_id, access_token=None, **kwargs):
+        """Portal booking form."""
+        try:
+            booking_sudo = self._get_booking_sudo(booking_id, access_token)
+        except (AccessError, MissingError):
+            return request.redirect("/my")
+        # ensure attachment are accessible with access token inside template
+        for attachment in booking_sudo.mapped("message_ids.attachment_ids"):
+            attachment.generate_access_token()
+        values = self._booking_get_page_view_values(
+            booking_sudo, access_token, **kwargs
+        )
+        return request.render("resource_booking.resource_booking_portal_form", values)
+
+    @route(
+        [
+            "/my/bookings/<int:booking_id>/schedule",
+            "/my/bookings/<int:booking_id>/schedule/<int:year>/<int:month>",
+        ],
+        auth="public",
+        type="http",
+        website=True,
+    )
+    def portal_booking_schedule(
+        self, booking_id, access_token=None, year=None, month=None, error=None, **kwargs
+    ):
+        """Portal booking scheduling."""
+        try:
+            booking_sudo = self._get_booking_sudo(booking_id, access_token)
+        except (AccessError, MissingError):
+            return request.redirect("/my")
+        values = self._booking_get_page_view_values(
+            booking_sudo, access_token, **kwargs
+        )
+        values.update(booking_sudo._get_calendar_context(year, month))
+        values.update({"error": error, "page_name": "booking_schedule"})
+        return request.render(
+            "resource_booking.resource_booking_portal_schedule", values
+        )
+
+    @route(
+        ["/my/bookings/<int:booking_id>/cancel"],
+        auth="public",
+        type="http",
+        website=True,
+    )
+    def portal_booking_cancel(self, booking_id, access_token=None, **kwargs):
+        """Cancel the booking."""
+        booking_sudo = self._get_booking_sudo(booking_id, access_token)
+        booking_sudo.action_cancel()
+        return request.redirect("/my")
+
+    @route(
+        ["/my/bookings/<int:booking_id>/confirm"],
+        auth="public",
+        type="http",
+        website=True,
+    )
+    def portal_booking_confirm(self, booking_id, access_token, when, **kwargs):
+        """Confirm a booking in a given datetime."""
+        booking_sudo = self._get_booking_sudo(booking_id, access_token)
+        when_tz_aware = isoparse(when)
+        when_naive = datetime.utcfromtimestamp(when_tz_aware.timestamp())
+        try:
+            with Form(booking_sudo) as booking_form:
+                booking_form.start = when_naive
+        except ValidationError as error:
+            url = booking_sudo.get_portal_url(
+                suffix="/schedule/{0:%Y/%m}".format(when_tz_aware),
+                query_string="&error={}".format(quote_plus(error.name)),
+            )
+            return request.redirect(url)
+        booking_sudo.action_confirm()
+        return request.redirect(booking_sudo.get_portal_url())
diff --git a/resource_booking/demo/res_users_demo.xml b/resource_booking/demo/res_users_demo.xml
new file mode 100644
index 00000000..5bfa5eed
--- /dev/null
+++ b/resource_booking/demo/res_users_demo.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<data>
+
+    <record id="base.user_demo" model="res.users">
+        <field name="groups_id" eval="[(4, ref('group_user'))]" />
+    </record>
+
+</data>
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
new file mode 100644
index 00000000..d581310f
--- /dev/null
+++ b/resource_booking/i18n/es.po
@@ -0,0 +1,1181 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#       * resource_booking
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-04-26 06:31+0000\n"
+"PO-Revision-Date: 2021-04-26 07:35+0100\n"
+"Last-Translator: Jairo Llopis <jairo.llopis@tecnativa.com>\n"
+"Language-Team: \n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.2\n"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:359
+#, python-format
+msgid "%(partner)s - %(type)s"
+msgstr "%(partner)s - %(type)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:358
+#, python-format
+msgid "%(partner)s - %(type)s - %(time)s"
+msgstr "%(partner)s - %(type)s - %(time)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:57
+#, python-format
+msgid "%(resources)s"
+msgstr "%(resources)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:55
+#, python-format
+msgid "%(resources)s (using calendar %(calendar)s)"
+msgstr "%(resources)s (usando el calendario %(calendar)s)"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid ""
+"<br/>\n"
+"                        Error details:"
+msgstr ""
+"<br/>\n"
+"                        Detalles del error:"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Reschedule"
+msgstr ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Reagendar"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Schedule"
+msgstr ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Agendar"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Comentarios"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                                Cancel this booking"
+msgstr ""
+"<i class=\"fa fa-times\"/>\n"
+"                                Cancelar esta reserva/cita"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                            Cancel"
+msgstr ""
+"<i class=\"fa fa-times\"/>\n"
+"                            Cancelar"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "<small class=\"text-right\">State:</small>"
+msgstr "<small class=\"text-right\">Estado:</small>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "<span>Preview</span>"
+msgstr "<span>Previsualizar</span>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Advice:</strong>"
+msgstr "<strong>Aviso:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Booked resources:</strong>"
+msgstr "<strong>Recursos reservados:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Dates:</strong>"
+msgstr "<strong>Fechas:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Location:</strong>"
+msgstr "<strong>Ubicación:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Requested by:</strong>"
+msgstr "<strong>Solicitado por:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid "<strong>The chosen schedule is no longer available.</strong>"
+msgstr "<strong>El horario escogido ya no está disponible.</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Type:</strong>"
+msgstr "<strong>Tipo:</strong>"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_warning
+msgid "Access warning"
+msgstr "Alerta de acceso"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
+msgid "Action Needed"
+msgstr "Acción necesaria"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__active
+msgid "Active"
+msgstr "Activo"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
+msgid "Activities"
+msgstr "Actividades"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
+msgid "Activity State"
+msgstr "Estado de la actividad"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "All times are displayed using this timezone:"
+msgstr "Todos los horarios se muestran usando esta zona horaria:"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Are you sure?"
+msgstr "¿Está seguro/a?"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_attachment_count
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_attachment_count
+msgid "Attachment Count"
+msgstr "Nº adjuntos"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Availability Calendar"
+msgstr "Calendario de disponibilidad"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Available resource combinations"
+msgstr "Combinaciones de recursos disponibles"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_combination
+msgid "Bookable resource combinations"
+msgstr "Combinaciones de recursos reservables"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Booking #"
+msgstr "Reserva/cita nº"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_count
+msgid "Booking Count"
+msgstr "Cuenta de reservas/citas"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_count
+msgid "Booking count"
+msgstr "Cuenta de reservas/citas"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Booking ref."
+msgstr "Ref. reserva/cita"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:97
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
+#, python-format
+msgid "Booking types"
+msgstr "Tipos de reserva/cita"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:87
+#: code:addons/resource_booking/models/resource_booking_type.py:182
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_action
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
+#: model:ir.ui.menu,name:resource_booking.resource_booking_menu
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_home
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_calendar
+#, python-format
+msgid "Bookings"
+msgstr "Reservas/citas"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__booking_ids
+msgid "Bookings available for this type"
+msgstr "Reservas/citas disponibles para este tipo"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: resource_booking
+#: selection:resource.booking,state:0
+msgid "Canceled"
+msgstr "Cancelado"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:263
+#, python-format
+msgid ""
+"Cannot schedule these bookings because no resources are selected for them:\n"
+"\n"
+"- %s"
+msgstr ""
+"No se pueden agendar estas reservas/citas porque no se les han seleccionado "
+"recursos:\n"
+"\n"
+"- %s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:285
+#, python-format
+msgid ""
+"Cannot schedule these bookings because they do not fit in their type or "
+"resources calendars, or because all resources are busy:\n"
+"\n"
+"- %s"
+msgstr ""
+"No se pueden agendar estas reservas/citas porque no encajan en los "
+"calendarios de sus tipos o recursos, o porque todos sus recursos están "
+"ocupados:\n"
+"\n"
+"- %s"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
+msgid ""
+"Choose how to auto-assign resource combinations. It has no effect if assiged "
+"manually."
+msgstr ""
+"Escoja cómo autoasignar combinaciones de recursos. No tendrá efecto si se "
+"asigna manualmente."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Close"
+msgstr "Cerrar"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__combination_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Combination"
+msgstr "Combinación"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_assignment
+msgid "Combination Assignment"
+msgstr "Asignación de combinaciones"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_combination_menu
+msgid "Combinations"
+msgstr "Combinaciones"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__company_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+msgid "Company"
+msgstr "Compañía"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__company_id
+msgid "Company where this booking type is available."
+msgstr "Compañía en la que este tipo de reservas/citas está disponible."
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_configuration_menu
+msgid "Configuration"
+msgstr "Configuración"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Confirm booking"
+msgstr "Confirmar reserva/cita"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"Confirm that the requesting partner and yourself will attend the scheduled "
+"meeting."
+msgstr ""
+"Confirmar que el solicitante y usted mismo asistirán a la reunión agendada."
+
+#. module: resource_booking
+#: selection:resource.booking,state:0
+msgid "Confirmed"
+msgstr "Confirmado"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_date
+msgid "Created on"
+msgstr "Creado en"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Current state of this booking"
+msgstr "Estado actual de esta reserva/cita"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__access_url
+msgid "Customer Portal URL"
+msgstr "URL del portal de cliente"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Date"
+msgstr "Fecha"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Default reminders"
+msgstr "Recordatorios por defecto"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__categ_ids
+msgid "Default tags"
+msgstr "Etiquetas por defecto"
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid "Define bookable resource combinations."
+msgstr "Defina las combinaciones de recursos reservables."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid "Define resource booking types."
+msgstr "Defina los tipos de reservas/citas de recursos."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid "Define resource bookings."
+msgstr "Defina las reservas/citas de recursos."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
+msgid "Duration"
+msgstr "Duración"
+
+#. module: resource_booking
+#: sql_constraint:resource.booking.type:0
+msgid "Duration must be positive."
+msgstr "La duración debe ser positiva."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Duration:"
+msgstr "Duración:"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid "Establish each interval's duration."
+msgstr "Establezca la duración de cada intervalo."
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Event"
+msgstr "Evento"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
+msgid "Followers"
+msgstr "Seguidores"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Seguidores (canales)"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Seguidores (contactos)"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Force a specific calendar, instead of combining the resources'."
+msgstr ""
+"Forzar un calendario específico, en lugar de combinar los de los recursos."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Forced calendar"
+msgstr "Calendario forzado"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Go back"
+msgstr "Volver"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Group By"
+msgstr "Agrupar por"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+msgid "ID"
+msgstr "ID"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
+msgid "If checked new messages require your attention."
+msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+msgid "If checked, new messages require your attention."
+msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+msgid "If checked, some messages have a delivery error."
+msgstr "Si está marcado, algunos mensajes no se pudieron entregar."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "If you cancel this booking:"
+msgstr "Si cancela esta reserva/cita:"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Invite requesting partner to portal."
+msgstr "Invitar al solicitante al portal."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__involves_me
+msgid "Involves Me"
+msgstr "Me corresponde"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Involving me"
+msgstr "Me corresponden"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_is_follower
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_is_follower
+msgid "Is Follower"
+msgstr "Es un seguidor"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_modifiable
+msgid "Is Modifiable"
+msgstr "Es modificable"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_overdue
+msgid "Is Overdue"
+msgstr "Está vencida"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will be unscheduled."
+msgstr "Se desagendará."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will disappear from your bookings list."
+msgstr "Desaparecerá de su lista de reservas/citas."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+msgid "Last Modified on"
+msgstr "Última modificación en"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización de"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_date
+msgid "Last Updated on"
+msgstr "Última actualización en"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
+msgid "Location"
+msgstr "Ubicación"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_main_attachment_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Adjunto principal"
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_manager
+msgid "Manager"
+msgstr "Responsable"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Meeting"
+msgstr "Reunión"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
+msgid "Meeting confirmed for this booking."
+msgstr "Reunión confirmada para esta reserva/cita."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Meeting defaults"
+msgstr "Valores por defecto para la reunión"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Meetings will be created with these reminders by default."
+msgstr "Las reuniones se crearán con estos recordatorios por defecto."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__categ_ids
+msgid "Meetings will be created with these tags by default."
+msgstr "Las reuniones se crearán con estas etiquetas por defecto."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error
+msgid "Message Delivery error"
+msgstr "Error de entrega de mensaje"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Message and communication history"
+msgstr "Historial de mensajes y comunicaciones"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_ids
+msgid "Messages"
+msgstr "Mensajes"
+
+#. module: resource_booking
+#: sql_constraint:resource.booking:0
+msgid "Missing resource booking combination."
+msgstr "Falta la combinación de reserva de recursos."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__modifications_deadline
+msgid "Modifications Deadline"
+msgstr "Fecha límite para modificaciones"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_name
+msgid "Name"
+msgstr "Nombre"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "Fecha límite de siguiente actividad"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_summary
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_summary
+msgid "Next Activity Summary"
+msgstr "Resumen de siguiente actividad"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_id
+msgid "Next Activity Type"
+msgstr "Tipo de siguiente actividad"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Next month"
+msgstr "Siguiente mes"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "No free slots found this month."
+msgstr "No quedan huecos libres este mes."
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:390
+#, python-format
+msgid "No resource combinations available on %s"
+msgstr "No hay combinaciones de recursos disponibles en %s"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Número de acciones"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of error"
+msgstr "Número de errores"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Número de mensajes que requieren una acción"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "Número de mensajes con error de entrega"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Número de mensajes no leídos"
+
+#. module: resource_booking
+#: sql_constraint:resource.booking:0
+msgid "Only one event per resource booking can exist."
+msgstr "Solo puede existir un evento por reserva de recursos."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Open a calendar to schedule a meeting for this booking request."
+msgstr ""
+"Abrir un calendario para agendar una reunión para esta solicitud de reserva/"
+"cita."
+
+#. module: resource_booking
+#: selection:resource.booking,activity_state:0
+#: selection:resource.booking.type,activity_state:0
+msgid "Overdue"
+msgstr "Atrasado"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+#: selection:resource.booking,state:0
+msgid "Pending"
+msgstr "Pendiente"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__state
+msgid ""
+"Pending: No meeting scheduled.\n"
+"Scheduled: The requester has not confirmed attendance yet.\n"
+"Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
+"Canceled: Meeting removed, booking archived."
+msgstr ""
+"Pendiente: No se ha agendado ninguna reunión.\n"
+"Agendada: El solicitante todavía no ha confirmado su asistencia.\n"
+"Confirmada: La reunión ha sido agendada, y el solicitante ha confirmado su "
+"asistencia.\n"
+"Cancelada: La reunión se ha borrado y la reserva/cita se ha archivado."
+
+#. module: resource_booking
+#: selection:resource.booking,activity_state:0
+#: selection:resource.booking.type,activity_state:0
+msgid "Planned"
+msgstr "Planificado"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Please confirm this is really what you want."
+msgstr "Por favor, confirme que esto es lo que de verdad quiere hacer."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_url
+msgid "Portal Access URL"
+msgstr "URL de acceso al portal"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Previous month"
+msgstr "Mes anterior"
+
+#. module: resource_booking
+#: selection:resource.booking.type,combination_assignment:0
+msgid "Randomly: order is not important"
+msgstr "Aleatoria: el orden no es importante"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_id
+msgid "Requester"
+msgstr "Solicitante"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__requester_advice
+msgid "Requester Advice"
+msgstr "Aviso al solicitante"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:445
+#, python-format
+msgid "Requesting partner"
+msgstr "Solicitante"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking
+#: model:ir.module.category,name:resource_booking.category_resource_booking
+msgid "Resource Booking"
+msgstr "Reserva de recursos"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type
+msgid "Resource Booking Type"
+msgstr "Tipo de reserva de recursos"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_main_menu
+msgid "Resource Bookings"
+msgstr "Reservas de recursos"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
+msgid "Resource Leaves"
+msgstr "Ausencias del recurso"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_calendar
+msgid "Resource Working Time"
+msgstr "Horario de trabajo del recurso"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+msgid "Resource booking"
+msgstr "Reserva de recursos"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type_combination_rel
+msgid "Resource booking type relation with combinations"
+msgstr "Relación del tipo de reservas de recursos con sus combinaciones"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types"
+msgstr "Tipos de reserva de recursos"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types where this combination is available."
+msgstr "Tipos de reserva de recursos donde esta combinación está disponible."
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_combination_action
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Resource combinations"
+msgstr "Combinaciones de recursos"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Resource combinations available for this type of bookings."
+msgstr ""
+"Combinaciones de recursos disponibles para este tipo de reservas/citas."
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_resource
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__resource_ids
+#: model:ir.ui.menu,name:resource_booking.menu_resource_resource
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Resources"
+msgstr "Recursos"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_id
+msgid "Resources combination"
+msgstr "Combinación de recursos"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__resource_ids
+msgid "Resources that must be free to be booked together."
+msgstr "Recursos que deben estar libres para reservarse juntos."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_user_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_user_id
+msgid "Responsible User"
+msgstr "Usuario responsable"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Restrict bookings to this schedule."
+msgstr "Restringir reservas/citas a este horario."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Schedule"
+msgstr "Horario"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:465
+#, python-format
+msgid "Schedule booking"
+msgstr "Agendar reserva/cita"
+
+#. module: resource_booking
+#: selection:resource.booking,state:0
+msgid "Scheduled"
+msgstr "Planificado"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Scheduled or confirmed"
+msgstr "Agendada o confirmada"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_token
+msgid "Security Token"
+msgstr "Token de seguridad"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__sequence
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set pending"
+msgstr "Hacer pendiente"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set to pending"
+msgstr "Establecer como pendiente"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Settings"
+msgstr "Ajustes"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Share"
+msgstr "Compartir"
+
+#. module: resource_booking
+#: selection:resource.booking.type,combination_assignment:0
+msgid "Sorted: pick the first one that is free"
+msgstr "Ordenada: escoger el primero que esté libre"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+msgid "Start"
+msgstr "Iniciar"
+
+#. module: resource_booking
+#: sql_constraint:resource.booking:0
+msgid "Start and stop must be filled or emptied together."
+msgstr "El inicio y el fin deben rellenarse o vaciarse simultáneamente."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Start:"
+msgstr "Inicio:"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__state
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "State"
+msgstr "Estado"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+"Estado basado en actividades\n"
+"Vencida: la fecha tope ya ha pasado\n"
+"Hoy: La fecha tope es hoy\n"
+"Planificada: futuras actividades."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__stop
+msgid "Stop"
+msgstr "Parar"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__categ_ids
+msgid "Tags"
+msgstr "Etiquetas"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
+msgid ""
+"Text that will appear by default in portal invitation emails and in calendar "
+"views for scheduling."
+msgstr ""
+"Texto que aparecerá por defecto en los correos electrónicos de invitación al "
+"portal y en las vistas de calendario para agendar."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "There are currently no bookings for your account."
+msgstr "Actualmente no hay reservas/citas en su cuenta."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid ""
+"These records categorize resource bookings and apply restrictions to them, "
+"such as available resource combinations, availability schedules and interval "
+"duration."
+msgstr ""
+"Estos registros categorizan las reservas/citas de recursos y les aplican "
+"restricciones, como combinaciones de recursos disponibles, horarios de "
+"disponibilidad y duración de los intervalos."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid ""
+"These records define resource combinations that can be booked together in "
+"specified schedules and intervals."
+msgstr ""
+"Estos registros definen combinaciones de recursos que se pueden reservar "
+"juntas en horarios e intervalos especificados."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "This booking exceeded its modifications deadline."
+msgstr "Esta reserva/cita ha sobrepasado su fecha límite para modificaciones."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"This will remove the associated meeting to unschedule the booking. Are you "
+"sure?"
+msgstr ""
+"Esto eliminará la reunión asociada para desagendar esta reserva/cita. ¿Está "
+"seguro?"
+
+#. module: resource_booking
+#: selection:resource.booking,activity_state:0
+#: selection:resource.booking.type,activity_state:0
+msgid "Today"
+msgstr "Hoy"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid ""
+"Try next month\n"
+"                    <i class=\"fa fa-chevron-right\"/>"
+msgstr ""
+"Intentar el mes siguiente\n"
+"                    <i class=\"fa fa-chevron-right\"/>"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Type"
+msgstr "Tipo"
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
+msgid "Types"
+msgstr "Tipos"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread
+msgid "Unread Messages"
+msgstr "Mensajes por leer"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Contador de mensajes sin leer"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule"
+msgstr "Desagendar"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking and archive it."
+msgstr "Desagendar esta reserva/cita y archivarla."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking."
+msgstr "Desagendar esta reserva/cita."
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_user
+msgid "User"
+msgstr "Usuario"
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_user
+msgid "Users allowed to book resources"
+msgstr "Usuarios que pueden reservar recursos"
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_manager
+msgid "Users allowed to manage resource booking configurations."
+msgstr ""
+"Usuarios que pueden gestionar la configuración de las reservas de recursos."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website Messages"
+msgstr "Mensajes del sitio web"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website communication history"
+msgstr "Historial de comunicaciones del sitio web"
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid ""
+"When scheduled, resources will be blocked. When pending, it means the "
+"requester didn't place the booking yet."
+msgstr ""
+"Cuando esté agendada, los recursos estarán bloqueados. Cuando esté "
+"pendiente, significa que el solicitante todavía no ha agendado su reserva/"
+"cita."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
+msgid ""
+"When this deadline has been exceeded, if a booking was not yet confirmed, it "
+"will be canceled automatically. Also, only booking managers will be able to "
+"unschedule or reschedule them. The value is expressed in hours."
+msgstr ""
+"Cuando esta fecha límite se haya sobrepasado, si una reserva/cita todavía no "
+"se había confirmado, será cancelada automáticamente. También, solo los "
+"responsables de reservas/citas podrán desagendarla o reagendarla. El valor "
+"se expresa en horas."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
+msgid "Who requested this booking?"
+msgstr "¿Quién solicitó esta reserva/cita?"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
+msgid "Working Times"
+msgstr "Tiempos de Trabajo"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "You are about to confirm this booking:"
+msgstr "Está a punto de confirmar esta reserva/cita:"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/calendar_event.py:32
+#, python-format
+msgid ""
+"You are not allowed to alter these bookings because they exceeded their "
+"modification deadlines:\n"
+"\n"
+"- %s"
+msgstr ""
+"No puede alterar estas reservas/citas porque han sobrepasado su fecha límite "
+"de modificaciones:\n"
+"\n"
+"- %s"
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
new file mode 100644
index 00000000..bef30b9b
--- /dev/null
+++ b/resource_booking/i18n/resource_booking.pot
@@ -0,0 +1,1086 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* resource_booking
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:359
+#, python-format
+msgid "%(partner)s - %(type)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:358
+#, python-format
+msgid "%(partner)s - %(type)s - %(time)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:57
+#, python-format
+msgid "%(resources)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:55
+#, python-format
+msgid "%(resources)s (using calendar %(calendar)s)"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid "<br/>\n"
+"                        Error details:"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<i class=\"fa fa-calendar\"/>\n"
+"                            Reschedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<i class=\"fa fa-calendar\"/>\n"
+"                            Schedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<i class=\"fa fa-times\"/>\n"
+"                                Cancel this booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<i class=\"fa fa-times\"/>\n"
+"                            Cancel"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "<small class=\"text-right\">State:</small>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "<span>Preview</span>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Advice:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Booked resources:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Dates:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Location:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Requested by:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid "<strong>The chosen schedule is no longer available.</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Type:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_warning
+msgid "Access warning"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__active
+msgid "Active"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "All times are displayed using this timezone:"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Are you sure?"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_attachment_count
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Availability Calendar"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Available resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_combination
+msgid "Bookable resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Booking #"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_count
+msgid "Booking Count"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_count
+msgid "Booking count"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Booking ref."
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:97
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
+#, python-format
+msgid "Booking types"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:87
+#: code:addons/resource_booking/models/resource_booking_type.py:182
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_action
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
+#: model:ir.ui.menu,name:resource_booking.resource_booking_menu
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_home
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_calendar
+#, python-format
+msgid "Bookings"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__booking_ids
+msgid "Bookings available for this type"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Cancel"
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking,state:0
+msgid "Canceled"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:263
+#, python-format
+msgid "Cannot schedule these bookings because no resources are selected for them:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:285
+#, python-format
+msgid "Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
+msgid "Choose how to auto-assign resource combinations. It has no effect if assiged manually."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Close"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__combination_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Combination"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_assignment
+msgid "Combination Assignment"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_combination_menu
+msgid "Combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__company_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+msgid "Company"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__company_id
+msgid "Company where this booking type is available."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_configuration_menu
+msgid "Configuration"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Confirm"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Confirm booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Confirm that the requesting partner and yourself will attend the scheduled meeting."
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Current state of this booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__access_url
+msgid "Customer Portal URL"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Date"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Default reminders"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__categ_ids
+msgid "Default tags"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid "Define bookable resource combinations."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid "Define resource booking types."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid "Define resource bookings."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
+msgid "Duration"
+msgstr ""
+
+#. module: resource_booking
+#: sql_constraint:resource.booking.type:0
+msgid "Duration must be positive."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Duration:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid "Establish each interval's duration."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Event"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Force a specific calendar, instead of combining the resources'."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Forced calendar"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Go back"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Group By"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+msgid "ID"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "If you cancel this booking:"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Invite requesting partner to portal."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__involves_me
+msgid "Involves Me"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Involving me"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_is_follower
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_modifiable
+msgid "Is Modifiable"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_overdue
+msgid "Is Overdue"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will be unscheduled."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will disappear from your bookings list."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
+msgid "Location"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_main_attachment_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_manager
+msgid "Manager"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Meeting"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
+msgid "Meeting confirmed for this booking."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Meeting defaults"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Meetings will be created with these reminders by default."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__categ_ids
+msgid "Meetings will be created with these tags by default."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Message and communication history"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: resource_booking
+#: sql_constraint:resource.booking:0
+msgid "Missing resource booking combination."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__modifications_deadline
+msgid "Modifications Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_name
+msgid "Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_summary
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Next month"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "No free slots found this month."
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:390
+#, python-format
+msgid "No resource combinations available on %s"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of error"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: resource_booking
+#: sql_constraint:resource.booking:0
+msgid "Only one event per resource booking can exist."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Open a calendar to schedule a meeting for this booking request."
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking,activity_state:0
+#: selection:resource.booking.type,activity_state:0
+msgid "Overdue"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+#: selection:resource.booking,state:0
+msgid "Pending"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__state
+msgid "Pending: No meeting scheduled.\n"
+"Scheduled: The requester has not confirmed attendance yet.\n"
+"Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
+"Canceled: Meeting removed, booking archived."
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking,activity_state:0
+#: selection:resource.booking.type,activity_state:0
+msgid "Planned"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Please confirm this is really what you want."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_url
+msgid "Portal Access URL"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Previous month"
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking.type,combination_assignment:0
+msgid "Randomly: order is not important"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_id
+msgid "Requester"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__requester_advice
+msgid "Requester Advice"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:445
+#, python-format
+msgid "Requesting partner"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking
+#: model:ir.module.category,name:resource_booking.category_resource_booking
+msgid "Resource Booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type
+msgid "Resource Booking Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_main_menu
+msgid "Resource Bookings"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
+msgid "Resource Leaves"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_calendar
+msgid "Resource Working Time"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+msgid "Resource booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type_combination_rel
+msgid "Resource booking type relation with combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types where this combination is available."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_combination_action
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Resource combinations available for this type of bookings."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_resource
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__resource_ids
+#: model:ir.ui.menu,name:resource_booking.menu_resource_resource
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Resources"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_id
+msgid "Resources combination"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__resource_ids
+msgid "Resources that must be free to be booked together."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_user_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Restrict bookings to this schedule."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Schedule"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:465
+#, python-format
+msgid "Schedule booking"
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking,state:0
+msgid "Scheduled"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Scheduled or confirmed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_token
+msgid "Security Token"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set pending"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set to pending"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Settings"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Share"
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking.type,combination_assignment:0
+msgid "Sorted: pick the first one that is free"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+msgid "Start"
+msgstr ""
+
+#. module: resource_booking
+#: sql_constraint:resource.booking:0
+msgid "Start and stop must be filled or emptied together."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Start:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__state
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "State"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_state
+msgid "Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__stop
+msgid "Stop"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__categ_ids
+msgid "Tags"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
+msgid "Text that will appear by default in portal invitation emails and in calendar views for scheduling."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "There are currently no bookings for your account."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid "These records categorize resource bookings and apply restrictions to them, such as available resource combinations, availability schedules and interval duration."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid "These records define resource combinations that can be booked together in specified schedules and intervals."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "This booking exceeded its modifications deadline."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "This will remove the associated meeting to unschedule the booking. Are you sure?"
+msgstr ""
+
+#. module: resource_booking
+#: selection:resource.booking,activity_state:0
+#: selection:resource.booking.type,activity_state:0
+msgid "Today"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Try next month\n"
+"                    <i class=\"fa fa-chevron-right\"/>"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
+msgid "Types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking and archive it."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking."
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_user
+msgid "User"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_user
+msgid "Users allowed to book resources"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_manager
+msgid "Users allowed to manage resource booking configurations."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid "When scheduled, resources will be blocked. When pending, it means the requester didn't place the booking yet."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
+msgid "When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
+msgid "Who requested this booking?"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
+msgid "Working Times"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "You are about to confirm this booking:"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/calendar_event.py:32
+#, python-format
+msgid "You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"\n"
+"- %s"
+msgstr ""
+
diff --git a/resource_booking/models/__init__.py b/resource_booking/models/__init__.py
new file mode 100644
index 00000000..38ad3480
--- /dev/null
+++ b/resource_booking/models/__init__.py
@@ -0,0 +1,7 @@
+from . import calendar_event
+from . import resource_booking
+from . import resource_booking_combination
+from . import resource_booking_type
+from . import resource_booking_type_combination_rel
+from . import resource_calendar
+from . import resource_resource
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
new file mode 100644
index 00000000..a14e6721
--- /dev/null
+++ b/resource_booking/models/calendar_event.py
@@ -0,0 +1,53 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class CalendarEvent(models.Model):
+    _name = "calendar.event"
+    _inherit = "calendar.event"
+
+    # One2one field, actually
+    resource_booking_ids = fields.One2many(
+        comodel_name="resource.booking",
+        inverse_name="meeting_id",
+        string="Resource booking",
+    )
+
+    @api.constrains("resource_booking_ids", "start", "stop")
+    def _check_bookings_scheduling(self):
+        """Scheduled bookings must have no conflicts."""
+        bookings = self.mapped("resource_booking_ids")
+        return bookings._check_scheduling()
+
+    def _validate_booking_modifications(self):
+        """Make sure you can cancel a booking meeting."""
+        bookings = self.mapped("resource_booking_ids")
+        modifiable = bookings.filtered("is_modifiable")
+        frozen = bookings - modifiable
+        if frozen:
+            raise ValidationError(
+                _(
+                    "You are not allowed to alter these bookings because "
+                    "they exceeded their modification deadlines:\n\n- %s"
+                )
+                % "\n- ".join(frozen.mapped("display_name"))
+            )
+
+    def unlink(self):
+        """Check you're allowed to unschedule it."""
+        self._validate_booking_modifications()
+        return super().unlink()
+
+    def write(self, vals):
+        """Check you're allowed to reschedule it."""
+        before = [(one.start, one.stop) for one in self]
+        result = super().write(vals)
+        rescheduled = self
+        for (old_start, old_stop), new in zip(before, self):
+            if old_start == new.start and old_stop == new.stop:
+                rescheduled -= new
+        rescheduled._validate_booking_modifications()
+        return result
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
new file mode 100644
index 00000000..11bac403
--- /dev/null
+++ b/resource_booking/models/resource_booking.py
@@ -0,0 +1,514 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+import calendar
+
+from datetime import datetime, timedelta
+from contextlib import suppress
+
+from dateutil.relativedelta import relativedelta
+
+from odoo import _, api, fields, models
+from odoo.addons.resource.models.resource import Intervals
+from odoo.exceptions import ValidationError
+from odoo.osv.expression import NEGATIVE_TERM_OPERATORS
+
+
+class ResourceBooking(models.Model):
+    _name = "resource.booking"
+    _inherit = ["mail.thread", "mail.activity.mixin", "portal.mixin"]
+    _description = "Resource Booking"
+    _order = "start DESC"
+    _sql_constraints = [
+        (
+            "combination_required_if_event",
+            "CHECK(meeting_id IS NULL OR combination_id IS NOT NULL)",
+            "Missing resource booking combination.",
+        ),
+        (
+            "start_stop_together",
+            """CHECK(
+                (start IS NULL AND stop IS NULL) OR
+                (start IS NOT NULL AND stop IS NOT NULL)
+            )""",
+            "Start and stop must be filled or emptied together.",
+        ),
+        (
+            "unique_meeting_id",
+            "UNIQUE(meeting_id)",
+            "Only one event per resource booking can exist.",
+        ),
+    ]
+
+    active = fields.Boolean(index=True, default=True)
+    meeting_id = fields.Many2one(
+        comodel_name="calendar.event",
+        string="Meeting",
+        auto_join=True,
+        context={"default_res_id": False, "default_res_model": False},
+        copy=False,
+        index=True,
+        ondelete="set null",
+        help="Meeting confirmed for this booking.",
+    )
+    categ_ids = fields.Many2many(
+        string="Tags",
+        comodel_name="calendar.event.type",
+    )
+    combination_id = fields.Many2one(
+        comodel_name="resource.booking.combination",
+        string="Resources combination",
+        copy=False,
+        domain="[('type_rel_ids.type_id', 'in', [type_id])]",
+        index=True,
+        states={"scheduled": [("required", True)], "confirmed": [("required", True)]},
+        track_visibility="onchange",
+    )
+    name = fields.Char(compute="_compute_name")
+    partner_id = fields.Many2one(
+        "res.partner",
+        string="Requester",
+        index=True,
+        ondelete="cascade",
+        required=True,
+        track_visibility="onchange",
+        help="Who requested this booking?",
+    )
+    requester_advice = fields.Text(
+        related="type_id.requester_advice", readonly=True
+    )
+    involves_me = fields.Boolean(
+        compute="_compute_involves_me", search="_search_involves_me"
+    )
+    is_modifiable = fields.Boolean(compute="_compute_overdue")
+    is_overdue = fields.Boolean(compute="_compute_overdue")
+    state = fields.Selection(
+        [
+            ("pending", "Pending"),
+            ("scheduled", "Scheduled"),
+            ("confirmed", "Confirmed"),
+            ("canceled", "Canceled"),
+        ],
+        compute="_compute_state",
+        store=True,
+        default="pending",
+        index=True,
+        track_visibility="onchange",
+        help=(
+            "Pending: No meeting scheduled.\n"
+            "Scheduled: The requester has not confirmed attendance yet.\n"
+            "Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
+            "Canceled: Meeting removed, booking archived."
+        ),
+    )
+    start = fields.Datetime(
+        compute="_compute_dates",
+        copy=False,
+        index=True,
+        inverse="_inverse_dates",
+        store=True,
+        track_sequence=200,
+        track_visibility="onchange",
+    )
+    stop = fields.Datetime(
+        compute="_compute_dates",
+        copy=False,
+        index=True,
+        inverse="_inverse_dates",
+        store=True,
+        track_sequence=210,
+        track_visibility="onchange",
+    )
+    type_id = fields.Many2one(
+        comodel_name="resource.booking.type",
+        string="Type",
+        index=True,
+        ondelete="cascade",
+        required=True,
+        track_visibility="onchange",
+    )
+
+    def _compute_access_url(self):
+        result = super()._compute_access_url()
+        for one in self:
+            one.access_url = "/my/bookings/%d" % one.id
+        return result
+
+    @api.depends("combination_id", "partner_id")
+    def _compute_involves_me(self):
+        """Indicate if the booking involves you."""
+        mine = self.search([("involves_me", "=", True)])
+        alien = self - mine
+        alien.update({"involves_me": False})
+        mine.update({"involves_me": True})
+
+    def _search_involves_me(self, operator, value):
+        """Fast search of own bookings."""
+        me = self.env.user.partner_id
+        if operator in NEGATIVE_TERM_OPERATORS:
+            value = not value
+        domain = [
+            "|",
+            "|",
+            ("partner_id", "=", me.id),
+            ("meeting_id.attendee_ids.partner_id", "in", me.ids),
+            ("combination_id.resource_ids.user_id.partner_id", "in", me.ids),
+        ]
+        if value:
+            return domain
+        return ["!"] + domain
+
+    @api.depends("start")
+    def _compute_overdue(self):
+        """Indicate if booking is overdue and modifiable."""
+        is_manager = self.env.user.has_group(
+            "resource_booking.group_manager"
+        ) and not self.env.context.get("using_portal")
+        now = fields.Datetime.now()
+        for one in self:
+            # You can always modify it if there's no meeting yet
+            if not one.start:
+                one.is_overdue = False
+                one.is_modifiable = True
+                continue
+            anticipation = timedelta(hours=one.type_id.modifications_deadline)
+            deadline = one.start - anticipation
+            one.is_overdue = now > deadline
+            # Managers can always modify bookings
+            one.is_modifiable = is_manager or not one.is_overdue
+
+    @api.depends("partner_id", "type_id", "meeting_id")
+    def _compute_name(self):
+        """Show a helpful name."""
+        for one in self:
+            one.name = self._get_name_formatted(
+                one.partner_id, one.type_id, one.meeting_id
+            )
+
+    @api.depends("active", "meeting_id.attendee_ids.state")
+    def _compute_state(self):
+        """Obtain request state."""
+        for one in self:
+            if not one.active:
+                one.state = "canceled"
+                continue
+            confirmed = False
+            for attendee in one.meeting_id.attendee_ids:
+                if attendee.partner_id == one.partner_id:
+                    confirmed = attendee.state == "accepted"
+                    break
+            if confirmed:
+                one.state = "confirmed"
+                continue
+            one.state = "scheduled" if one.meeting_id else "pending"
+
+    @api.depends("meeting_id.start", "meeting_id.stop")
+    def _compute_dates(self):
+        for one in self:
+            # You're creating a new record; calendar view sends proper context
+            # defaults that at this point are lost; restoring them
+            if one.env.in_onchange and not one.id:
+                one.update(one.default_get(["start", "stop"]))
+                continue
+            # Get values from related meeting, if any; just like a related field
+            one.start = one.meeting_id.start
+            one.stop = one.meeting_id.stop
+
+    def _inverse_dates(self):
+        """Lazy-create or destroy calendar.event."""
+        # Notify changed dates to attendees
+        _self = self.with_context(from_ui=self.env.context.get("from_ui", True))
+        to_create, to_delete = [], _self.env["calendar.event"]
+        for one in _self:
+            if one.start and one.stop:
+                resource_partners = one.combination_id.resource_ids.filtered(
+                    lambda res: res.resource_type == "user"
+                ).mapped("user_id.partner_id")
+                meeting_vals = dict(
+                    one.type_id._event_defaults(),
+                    categ_ids=[(6, 0, one.categ_ids.ids)],
+                    name=one._get_name_formatted(one.partner_id, one.type_id),
+                    partner_ids=[
+                        (4, partner.id, 0)
+                        for partner in one.partner_id | resource_partners
+                    ],
+                    resource_booking_ids=[(6, 0, one.ids)],
+                    start=one.start,
+                    stop=one.stop,
+                    # These 2 avoid creating event as activity
+                    res_model_id=False,
+                    res_id=False,
+                )
+                if one.meeting_id:
+                    one.meeting_id.write(meeting_vals)
+                else:
+                    to_create.append(meeting_vals)
+            else:
+                to_delete |= one.meeting_id
+        to_delete.unlink()
+        _self.env["calendar.event"].create(to_create)
+
+    @api.constrains("combination_id", "meeting_id", "type_id")
+    def _check_scheduling(self):
+        """Scheduled bookings must have no conflicts."""
+        # Nothing to do if no bookings are scheduled
+        has_meeting = self.filtered("meeting_id")
+        if not has_meeting:
+            return
+        # Ensure all scheduled bookings have booked some resources
+        has_rbc = self.filtered("combination_id.resource_ids")
+        missing_rbc = has_meeting - has_rbc
+        if missing_rbc:
+            raise ValidationError(
+                _(
+                    "Cannot schedule these bookings because no resources "
+                    "are selected for them:\n\n- %s"
+                )
+                % ("\n- ".join(missing_rbc.mapped("display_name")))
+            )
+        # Ensure all bookings fit in their type and resources calendars
+        unfitting_bookings = has_meeting
+        for booking in has_meeting:
+            meeting_dates = tuple(
+                fields.Datetime.context_timestamp(self, booking[field])
+                for field in ("start", "stop")
+            )
+            available_intervals = booking._get_intervals(*meeting_dates)
+            if (
+                len(available_intervals) == 1
+                and available_intervals._items[0][:2] == meeting_dates
+            ):
+                unfitting_bookings -= booking
+        # Explain which bookings failed validation
+        if unfitting_bookings:
+            raise ValidationError(
+                _(
+                    "Cannot schedule these bookings because they do not fit "
+                    "in their type or resources calendars, or because "
+                    "all resources are busy:\n\n- %s"
+                )
+                % "\n- ".join(unfitting_bookings.mapped("display_name"))
+            )
+
+    @api.onchange("start")
+    def _onchange_start_fill_stop(self):
+        """Apply default stop when changing start."""
+        # When creating a new record by clicking on the calendar view, don't
+        # alter stop the 1st time
+        if not self.id:
+            defaults = self.default_get(["start", "stop"])
+            with suppress(KeyError):
+                if self.start == fields.Datetime.to_datetime(defaults["start"]):
+                    self.stop = defaults["stop"]
+                    return
+        # In the general use case, stop is start + duration
+        self.stop = self.start and self.start + timedelta(hours=self.type_id.duration)
+
+    @api.onchange("type_id")
+    def _onchange_type_fill_tags(self):
+        """Copy default tags from RBT when changing it."""
+        if self.type_id:
+            self.categ_ids = self.type_id.categ_ids
+
+    @api.onchange("start", "stop", "type_id")
+    def _onchange_dates_pick_combination(self):
+        """Select best combination candidate when changing booking dates."""
+        # Useless without the interval
+        if not (self.start and self.stop):
+            return
+        self.combination_id = self._get_best_combination()
+
+    def _get_calendar_context(self, year=None, month=None, now=None):
+        """Get the required context for the calendar view in the portal.
+
+        See the `resource_booking.scheduling_calendar` view.
+
+        :param int year: Year of the calendar to be displayed.
+        :param int month: Month of the calendar to be displayed.
+        :param datetime now: Represents the current datetime.
+        """
+        month1 = relativedelta(months=1)
+        now = now or fields.Datetime.now()
+        year = year or now.year
+        month = month or now.month
+        start = datetime(year, month, 1)
+        start, now = (
+            fields.Datetime.context_timestamp(self, dt) for dt in (start, now)
+        )
+        start = start.replace(hour=0, minute=0, second=0, microsecond=0)
+        lang = self.env["res.lang"]._lang_get(self.env.lang or self.env.user.lang)
+        weekday_names = dict(lang.fields_get(["week_start"])["week_start"]["selection"])
+        slots = self._get_available_slots(start, start + month1)
+        return {
+            "booking": self,
+            "calendar": calendar.Calendar(lang.week_start - 1),
+            "now": now,
+            "res_lang": lang,
+            "slots": slots,
+            "start": start,
+            "weekday_names": weekday_names,
+        }
+
+    @api.model
+    def _get_name_formatted(self, partner, type_, meeting=None):
+        """Produce a beautifully formatted name."""
+        values = {"partner": partner.display_name, "type": type_.display_name}
+        if meeting:
+            values["time"] = meeting.display_time
+            return _("%(partner)s - %(type)s - %(time)s") % values
+        return _("%(partner)s - %(type)s") % values
+
+    def _get_best_combination(self):
+        """Pick best combination based on current booking state."""
+        # No dates? Then return whatever is already selected (can be empty)
+        if not (self.start and self.stop):
+            return self.combination_id
+        # If there's a combination already, put it 1st (highest priority)
+        sorted_combinations = self.combination_id + (
+            self.type_id._get_combinations_priorized() - self.combination_id
+        )
+        desired_interval = tuple(
+            fields.Datetime.context_timestamp(self, dt)
+            for dt in (self.start, self.stop)
+        )
+        # Get 1st combination available in the desired interval
+        for combination in sorted_combinations:
+            availability = self._get_intervals(*desired_interval, combination)
+            if (
+                len(availability) == 1
+                and availability._items[0][:2] == desired_interval
+            ):
+                return combination
+        # TODO In v13 experiment failing always. In v12, datetime widget
+        # triggers onchange on every click, and renders fail=True unusable, but
+        # it would be nice to warn users when they're selecting dates where
+        # nobody is available
+        if self.env.context.get("using_portal"):
+            # Tell user there's no combination available
+            hours = (self.stop - self.start).total_seconds() / 3600
+            raise ValidationError(
+                _("No resource combinations available on %s")
+                % self.env["calendar.event"]._get_display_time(
+                    self.start, self.stop, hours, False
+                )
+            )
+
+    def _get_available_slots(self, start_dt, end_dt):
+        """Return available slots for scheduling current booking."""
+        result = {}
+        now = fields.Datetime.context_timestamp(self, fields.Datetime.now())
+        duration = timedelta(hours=self.type_id.duration)
+        current = max(
+            start_dt, now + timedelta(hours=self.type_id.modifications_deadline)
+        )
+        available_intervals = self._get_intervals(current, end_dt)
+        while current and current < end_dt:
+            slot_start = self.type_id._get_next_slot_start(current)
+            if current != slot_start:
+                current = slot_start
+                continue
+            current_interval = Intervals([(current, current + duration, self)])
+            for start, end, _meta in available_intervals & current_interval:
+                if end - start == duration:
+                    result.setdefault(current.date(), [])
+                    result[current.date()].append(current)
+                # I actually only care about the 1st interval, if any
+                break
+            current += duration
+        return result
+
+    def _get_intervals(self, start_dt, end_dt, combination=None):
+        """Get available intervals for this booking."""
+        # Get all intervals except those from current booking
+        try:
+            booking_id = self.id or self._origin.id or -1
+        except AttributeError:
+            booking_id = -1
+        booking = self.with_context(analyzing_booking=booking_id)
+        # RBT calendar uses no resources to restrict bookings
+        result = booking.type_id.resource_calendar_id._work_intervals(start_dt, end_dt)
+        # Restrict with the chosen combination, or to at least one of the
+        # available ones
+        combinations = (
+            combination
+            or booking.combination_id
+            or booking.mapped("type_id.combination_rel_ids.combination_id")
+        ).with_context(analyzing_booking=booking_id)
+        result &= combinations._get_intervals(start_dt, end_dt)
+        return result
+
+    def message_get_suggested_recipients(self):
+        recipients = super().message_get_suggested_recipients()
+        for one in self:
+            if one.partner_id:
+                one._message_add_suggested_recipient(
+                    recipients, partner=one.partner_id, reason=_("Requesting partner")
+                )
+        return recipients
+
+    def action_schedule(self):
+        """Redirect user to a simpler way to schedule this booking."""
+        FloatTimeParser = self.env["ir.qweb.field.float_time"]
+        return {
+            "context": dict(
+                self.env.context,
+                # These 2 avoid creating event as activity
+                default_res_model_id=False,
+                default_res_id=False,
+                # Context used by web_calendar_slot_duration module
+                calendar_slot_duration=FloatTimeParser.value_to_html(
+                    self.type_id.duration, False
+                ),
+                default_resource_booking_ids=[(6, 0, self.ids)],
+                default_name=self.name,
+            ),
+            "name": _("Schedule booking"),
+            "res_model": "calendar.event",
+            "target": "self",
+            "type": "ir.actions.act_window",
+            "view_mode": "calendar,tree,form",
+        }
+
+    def action_confirm(self):
+        """Confirm own and requesting partner's attendance."""
+        attendees_to_confirm = self.env["calendar.attendee"]
+        confirm_always = self.env["res.partner"]
+        if self.env.context.get("confirm_own_attendance"):
+            confirm_always |= self.env.user.partner_id
+        # Avoid wasted state recomputes
+        with self.env.norecompute():
+            for booking in self:
+                if not booking.meeting_id:
+                    continue
+                # Make sure requester and user resources are meeting attendees
+                booking.meeting_id.partner_ids |= booking.partner_id | booking.mapped(
+                    "combination_id.resource_ids.user_id.partner_id"
+                )
+                # Find meeting attendees that should be confirmed
+                partners_to_confirm = confirm_always | booking.partner_id
+                for attendee in booking.meeting_id.attendee_ids:
+                    if attendee.partner_id & partners_to_confirm:
+                        # attendee.state='accepted'
+                        attendees_to_confirm |= attendee
+            attendees_to_confirm.write({"state": "accepted"})
+        self.recompute()
+
+    def action_unschedule(self):
+        """Remove associated meetings."""
+        self.mapped("meeting_id").unlink()
+        # Force recomputing, in case meeting_id is not visible in the form
+        self.write({"meeting_id": False})
+
+    def action_cancel(self):
+        """Cancel this booking."""
+        # Remove related meeting
+        self.action_unschedule()
+        # Archive and reset access token
+        self.write({"active": False, "access_token": False})
+
+    def action_open_portal(self):
+        return {
+            "target": "self",
+            "type": "ir.actions.act_url",
+            "url": self.get_portal_url(),
+        }
diff --git a/resource_booking/models/resource_booking_combination.py b/resource_booking/models/resource_booking_combination.py
new file mode 100644
index 00000000..752c1172
--- /dev/null
+++ b/resource_booking/models/resource_booking_combination.py
@@ -0,0 +1,101 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, fields, models
+from odoo.addons.resource.models.resource import Intervals
+
+
+class ResourceBookingCombination(models.Model):
+    _name = "resource.booking.combination"
+    _description = "Bookable resource combinations"
+
+    active = fields.Boolean(index=True, default=True)
+    booking_count = fields.Integer(
+        compute="_compute_booking_count", string="Booking count"
+    )
+    booking_ids = fields.One2many(
+        comodel_name="resource.booking",
+        inverse_name="combination_id",
+        string="Bookings",
+    )
+    forced_calendar_id = fields.Many2one(
+        comodel_name="resource.calendar",
+        string="Forced calendar",
+        index=True,
+        help="Force a specific calendar, instead of combining the resources'.",
+    )
+    name = fields.Char(compute="_compute_name", store=True)
+    type_count = fields.Integer(compute="_compute_type_count", string="Booking types")
+    type_rel_ids = fields.One2many(
+        comodel_name="resource.booking.type.combination.rel",
+        inverse_name="combination_id",
+        string="Resource booking types",
+        help="Resource booking types where this combination is available.",
+    )
+    resource_ids = fields.Many2many(
+        string="Resources",
+        comodel_name="resource.resource",
+        required=True,
+        help="Resources that must be free to be booked together.",
+    )
+
+    @api.depends("booking_ids")
+    def _compute_booking_count(self):
+        for one in self:
+            one.booking_count = len(one.booking_ids)
+
+    @api.depends("resource_ids.name", "forced_calendar_id.name")
+    def _compute_name(self):
+        for one in self:
+            data = {
+                "resources": " + ".join(sorted(one.resource_ids.mapped("name"))),
+                "calendar": one.forced_calendar_id.name,
+            }
+            if one.forced_calendar_id:
+                one.name = _("%(resources)s (using calendar %(calendar)s)") % data
+            else:
+                one.name = _("%(resources)s") % data
+
+    @api.depends("type_rel_ids")
+    def _compute_type_count(self):
+        for one in self:
+            one.type_count = len(one.type_rel_ids)
+
+    @api.constrains("booking_ids", "forced_calendar_id", "resource_ids")
+    def _check_bookings_scheduling(self):
+        """Scheduled bookings must have no conflicts."""
+        bookings = self.mapped("booking_ids")
+        return bookings._check_scheduling()
+
+    def _get_intervals(self, start_dt, end_dt):
+        """Get available intervals for this booking combination."""
+        base = Intervals([(start_dt, end_dt, self)])
+        result = Intervals([])
+        for combination in self:
+            combination_intervals = base
+            for res in combination.resource_ids:
+                if not combination_intervals:
+                    break  # Can't restrict more
+                calendar = combination.forced_calendar_id or res.calendar_id
+                combination_intervals &= calendar._work_intervals(start_dt, end_dt, res)
+            result |= combination_intervals
+        return result
+
+    def action_open_bookings(self):
+        return {
+            "domain": [("combination_id", "in", self.ids)],
+            "name": _("Bookings"),
+            "res_model": "resource.booking",
+            "type": "ir.actions.act_window",
+            "view_mode": "calendar,tree,form",
+        }
+
+    def action_open_resource_booking_types(self):
+        return {
+            "context": self.env.context,
+            "domain": [("combination_rel_ids.combination_id", "in", self.ids)],
+            "name": _("Booking types"),
+            "res_model": "resource.booking.type",
+            "type": "ir.actions.act_window",
+            "view_mode": "tree,form",
+        }
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
new file mode 100644
index 00000000..6a99bc45
--- /dev/null
+++ b/resource_booking/models/resource_booking_type.py
@@ -0,0 +1,186 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from datetime import timedelta
+from odoo import _, api, fields, models
+from math import ceil
+from random import random
+
+
+class ResourceBookingType(models.Model):
+    _name = "resource.booking.type"
+    _inherit = ["mail.thread", "mail.activity.mixin"]
+    _description = "Resource Booking Type"
+    _sql_constraints = [
+        ("duration_positive", "CHECK(duration > 0)", "Duration must be positive."),
+    ]
+
+    active = fields.Boolean(index=True, default=True)
+    alarm_ids = fields.Many2many(
+        string="Default reminders",
+        comodel_name="calendar.alarm",
+        help="Meetings will be created with these reminders by default.",
+    )
+    booking_count = fields.Integer(compute="_compute_booking_count")
+    categ_ids = fields.Many2many(
+        string="Default tags",
+        comodel_name="calendar.event.type",
+        help="Meetings will be created with these tags by default.",
+    )
+    combination_assignment = fields.Selection(
+        [
+            ("sorted", "Sorted: pick the first one that is free"),
+            ("random", "Randomly: order is not important"),
+        ],
+        required=True,
+        default="random",
+        help=(
+            "Choose how to auto-assign resource combinations. "
+            "It has no effect if assiged manually."
+        ),
+    )
+    combination_rel_ids = fields.One2many(
+        comodel_name="resource.booking.type.combination.rel",
+        inverse_name="type_id",
+        string="Available resource combinations",
+        help="Resource combinations available for this type of bookings.",
+    )
+    company_id = fields.Many2one(
+        comodel_name="res.company",
+        default=lambda self: self._default_company(),
+        index=True,
+        readonly=False,
+        store=True,
+        string="Company",
+        help="Company where this booking type is available.",
+    )
+    duration = fields.Float(
+        required=True,
+        default=0.5,  # 30 minutes
+        help="Establish each interval's duration.",
+    )
+    location = fields.Char()
+    modifications_deadline = fields.Float(
+        required=True,
+        default=24,
+        help=(
+            "When this deadline has been exceeded, if a booking was not yet "
+            "confirmed, it will be canceled automatically. Also, only booking "
+            "managers will be able to unschedule or reschedule them. "
+            "The value is expressed in hours."
+        ),
+    )
+    name = fields.Char(index=True, translate=True, required=True)
+    booking_ids = fields.One2many(
+        "resource.booking",
+        "type_id",
+        string="Bookings",
+        help="Bookings available for this type",
+    )
+    resource_calendar_id = fields.Many2one(
+        comodel_name="resource.calendar",
+        default=lambda self: self._default_resource_calendar(),
+        index=True,
+        required=True,
+        ondelete="restrict",
+        string="Availability Calendar",
+        help="Restrict bookings to this schedule.",
+    )
+    requester_advice = fields.Text(
+        translate=True,
+        help=(
+            "Text that will appear by default in portal invitation emails "
+            "and in calendar views for scheduling."
+        ),
+    )
+
+    @api.model
+    def _default_company(self):
+        return self.env["res.company"]._company_default_get()
+
+    @api.model
+    def _default_resource_calendar(self):
+        return self._default_company().resource_calendar_id
+
+    @api.depends("booking_ids")
+    def _compute_booking_count(self):
+        for one in self:
+            one.booking_count = len(one.booking_ids)
+
+    @api.constrains("booking_ids", "resource_calendar_id", "combination_rel_ids")
+    def _check_bookings_scheduling(self):
+        """Scheduled bookings must have no conflicts."""
+        bookings = self.mapped("booking_ids")
+        return bookings._check_scheduling()
+
+    def _event_defaults(self, prefix=""):
+        """Get field names that should fill default values in meetings."""
+        return {
+            prefix + "alarm_ids": [(6, 0, self.alarm_ids.ids)],
+            prefix + "description": self.requester_advice,
+            prefix + "duration": self.duration,
+            prefix + "location": self.location,
+        }
+
+    def _get_combinations_priorized(self):
+        """Gets all combinations sorted by the chosen assignment method."""
+        if not self.combination_assignment:
+            return self.combination_rel_ids.mapped("combination_id")
+        keys = {"sorted": "sequence", "random": lambda *a: random()}
+        rels = self.combination_rel_ids.sorted(keys[self.combination_assignment])
+        combinations = rels.mapped("combination_id")
+        return combinations
+
+    def _get_next_slot_start(self, start_dt):
+        """Slot start as it would come from the beginning of work hours.
+
+        Returns a `datetime` object indicating the next slot start (which could
+        be the same as `start_dt` if it matches), or `False` if no slot is
+        found in the next 2 weeks.
+
+        If the RBT doesn't have a calendar, it returns `start_dt`, unaltered,
+        because there's no way to know when a slot would start.
+        """
+        duration_delta = timedelta(hours=self.duration)
+        end_dt = start_dt + duration_delta
+        workday_min = start_dt.replace(hour=0, minute=0, second=0, microsecond=0)
+        attendance_intervals = self.resource_calendar_id._attendance_intervals(
+            workday_min, end_dt
+        )
+        try:
+            workday_start, valid_end, _meta = attendance_intervals._items[-1]
+            if valid_end != end_dt:
+                # Inteval found, but without enough time; same as no interval
+                raise IndexError
+        except IndexError:
+            try:
+                # Returns `False` if no slot is found in the next 2 weeks
+                return (
+                    self.resource_calendar_id.plan_hours(
+                        self.duration, end_dt, compute_leaves=True
+                    )
+                    - duration_delta
+                )
+            except TypeError:
+                return False
+        time_passed = valid_end - duration_delta - workday_start
+        return workday_start + duration_delta * ceil(time_passed / duration_delta)
+
+    def action_open_bookings(self):
+        FloatTimeParser = self.env["ir.qweb.field.float_time"]
+        return {
+            "context": dict(
+                self.env.context,
+                # Context used by web_calendar_slot_duration module
+                calendar_slot_duration=FloatTimeParser.value_to_html(
+                    self.duration, False
+                ),
+                default_type_id=self.id,
+                **self._event_defaults(prefix="default_"),
+            ),
+            "domain": [("type_id", "=", self.id)],
+            "name": _("Bookings"),
+            "res_model": "resource.booking",
+            "type": "ir.actions.act_window",
+            "view_mode": "calendar,tree,form",
+        }
diff --git a/resource_booking/models/resource_booking_type_combination_rel.py b/resource_booking/models/resource_booking_type_combination_rel.py
new file mode 100644
index 00000000..51330088
--- /dev/null
+++ b/resource_booking/models/resource_booking_type_combination_rel.py
@@ -0,0 +1,28 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class ResourceBookingCombinationRel(models.Model):
+    _name = "resource.booking.type.combination.rel"
+    _description = "Resource booking type relation with combinations"
+    _order = "sequence"
+    _rec_name = "combination_id"
+
+    sequence = fields.Integer(index=True, required=True, default=100)
+    combination_id = fields.Many2one(
+        "resource.booking.combination",
+        string="Combination",
+        index=True,
+        required=True,
+        ondelete="cascade",
+    )
+    type_id = fields.Many2one(
+        "resource.booking.type",
+        string="Type",
+        index=True,
+        required=True,
+        ondelete="cascade",
+    )
+    type_name = fields.Char(related="type_id.name")
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
new file mode 100644
index 00000000..3b0b6032
--- /dev/null
+++ b/resource_booking/models/resource_calendar.py
@@ -0,0 +1,97 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from pytz import UTC
+from odoo import api, fields, models
+from odoo.addons.resource.models.resource import Intervals
+from odoo.addons.calendar.models.calendar import calendar_id2real_id
+
+
+class Busy(Exception):
+    pass  # This is not a real exception, just a helper
+
+
+class ResourceCalendar(models.Model):
+    _inherit = "resource.calendar"
+
+    @api.constrains("attendance_ids", "global_leave_ids", "leave_ids", "tz")
+    def _check_bookings_scheduling(self):
+        """Scheduled bookings must have no conflicts."""
+        bookings = self.env["resource.booking"].search(
+            [
+                "|",
+                ("combination_id.forced_calendar_id", "in", self.ids),
+                ("combination_id.resource_ids.calendar_id", "in", self.ids),
+            ]
+        )
+        return bookings._check_scheduling()
+
+    @api.model
+    def _calendar_event_busy_intervals(
+        self, start_dt, end_dt, resource, analyzed_booking_id
+    ):
+        """Get busy meeting intervals."""
+        assert start_dt.tzinfo
+        assert end_dt.tzinfo
+        start_dt, end_dt = (
+            fields.Datetime.to_string(dt.astimezone(UTC)) for dt in (start_dt, end_dt)
+        )
+        intervals = []
+        resource_user = (
+            resource.resource_type == "user"
+            and resource.user_id.active
+            and resource.user_id
+        )
+        # Simple domain to get all possibly conflicting events in a single
+        # query; this reduces DB calls and helps the underlying recurring
+        # system (in calendar.event) to work smoothly
+        all_events = (
+            self.env["calendar.event"]
+            .with_context(active_test=True)
+            .search([("start", "<=", end_dt), ("stop", ">=", start_dt)])
+        )
+        for event in all_events:
+            real_event = self.env["calendar.event"].browse(
+                calendar_id2real_id(event.id), all_events._prefetch
+            )
+            # Is the event the same one we're currently checking?
+            if real_event.resource_booking_ids.id == analyzed_booking_id:
+                continue
+            try:
+                # Is the event not booking our resource?
+                if resource & real_event.mapped(
+                    "resource_booking_ids.combination_id.resource_ids"
+                ):
+                    raise Busy
+                # Special cases when the booked resource is a person
+                if resource_user:
+                    # Is it a busy event belonging to the resource?
+                    if event.user_id == resource_user and event.show_as == "busy":
+                        raise Busy
+                    # ... or is he invited to this event?
+                    for attendee in event.attendee_ids:
+                        if (
+                            attendee.partner_id == resource_user.partner_id
+                            and attendee.state != "declined"
+                        ):
+                            raise Busy
+            except Busy:
+                # Add the matched event as a busy interval
+                intervals.append(
+                    (
+                        fields.Datetime.context_timestamp(event, event.start),
+                        fields.Datetime.context_timestamp(event, event.stop),
+                        event,
+                    )
+                )
+        return Intervals(intervals)
+
+    # TODO Override _leave_intervals_batch in v13
+    def _leave_intervals(self, start_dt, end_dt, resource=None, domain=None):
+        """Count busy meetings as leaves if required by context."""
+        result = super()._leave_intervals(start_dt, end_dt, resource, domain)
+        if resource and self.env.context.get("analyzing_booking"):
+            result |= self._calendar_event_busy_intervals(
+                start_dt, end_dt, resource, self.env.context["analyzing_booking"]
+            )
+        return result
diff --git a/resource_booking/models/resource_resource.py b/resource_booking/models/resource_resource.py
new file mode 100644
index 00000000..b2e11615
--- /dev/null
+++ b/resource_booking/models/resource_resource.py
@@ -0,0 +1,16 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import api, models
+
+
+class ResourceResource(models.Model):
+    _inherit = "resource.resource"
+
+    @api.constrains("calendar_id", "resource_type", "tz", "user_id")
+    def _check_bookings_scheduling(self):
+        """Scheduled bookings must have no conflicts."""
+        bookings = self.env["resource.booking"].search(
+            [("combination_id.resource_ids", "in", self.ids)]
+        )
+        return bookings._check_scheduling()
diff --git a/resource_booking/readme/CONFIGURE.rst b/resource_booking/readme/CONFIGURE.rst
new file mode 100644
index 00000000..8f1675bb
--- /dev/null
+++ b/resource_booking/readme/CONFIGURE.rst
@@ -0,0 +1,32 @@
+To let some backend user to book resources:
+
+#. Go to *Settings > Users & Companies > Users*.
+#. Pick or create one.
+#. Assign *Resource Booking > User*.
+
+To let some backend user to configure types and combinations, and to be able to
+modify overdue bookings:
+
+#. Go to *Settings > Users & Companies > Users*.
+#. Pick or create one.
+#. Assign *Resource Booking > Manager*.
+
+To configure one booking type:
+
+#. Go to *Resource Bookings > Types*.
+#. Create one.
+#. Give it a *name*.
+#. Set the *Duration*, to know the time assigned to each calendar slot.
+#. Set the *Modifications Deadline*, to forbid non-managers to alter dates of
+   a booking when it's too late.
+#. Choose one *Availability Calendar*. No bookings will exist outside of it.
+#. Under *Meeting defaults*, you will be able to fill some values that will
+   be used by default on calendar meetings. These will appear in the global
+   calendar when some booking is reserved.
+#. Choose some *Available resource combinations*. All combinations in the same
+   line must be free to be booked together; otherwise the booking will not be
+   able to be scheduled. You can sort them.
+#. Pick up one *Combination Assignment*. If you choose *Sorted*, then the order
+   of the combinations you chose will indicate the one that is selected first.
+   Of course, it must be free to be selected.
+#. Save.
diff --git a/resource_booking/readme/CONTRIBUTORS.rst b/resource_booking/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000..7ee45dc9
--- /dev/null
+++ b/resource_booking/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Jairo Llopis <jairo.llopis@tecnativa.com> (https://www.tecnativa.com/)
diff --git a/resource_booking/readme/DESCRIPTION.rst b/resource_booking/readme/DESCRIPTION.rst
new file mode 100644
index 00000000..1ac3b12a
--- /dev/null
+++ b/resource_booking/readme/DESCRIPTION.rst
@@ -0,0 +1,22 @@
+This module adds a new app to allow you to book resource combinations in given
+schedules.
+
+Example use cases:
+
+* Management of consultations in a clinic.
+* Salesman appointments.
+* Classroom and projector reservations.
+* Hotel room booking.
+
+Among the things you can do:
+
+* Specify the type of booking, which includes a calendar of availability.
+* Specify which resources can be booked together. All of them must be free to be booked.
+* Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot.
+* Partners can do that from their portals.
+* If a partner has no user, he can still do the same via a tokenized URL.
+* Backend users can also do that from the backend.
+* Booking lifecycle with computed states.
+* Automatic meeting creation and deletion.
+* Automatic conflict detection.
+* Deadline to block modifications.
diff --git a/resource_booking/readme/INSTALL.rst b/resource_booking/readme/INSTALL.rst
new file mode 100644
index 00000000..45b8c178
--- /dev/null
+++ b/resource_booking/readme/INSTALL.rst
@@ -0,0 +1,13 @@
+To install this module, you need to install these dependencies:
+
+#. `freezegun <https://github.com/spulec/freezegun>`__
+#. `web_calendar_slot_duration <https://odoo-community.org/shop/product/calendar-slot-duration-6202>`__
+
+When someone is a manager, he will have access to *Resource Bookings >
+Configuration*, where he will be able to configure resources, leaves and
+schedules. This menu is just provided as a commodity. However, if you want to
+manage that stuff more comfortably:
+
+* To manage human resources, install `hr <https://apps.odoo.com/app/employees>`__.
+* To manage their leaves, install `hr_holidays <https://apps.odoo.com/app/time-off>`__.
+* To manage work centers, install `mrp <https://apps.odoo.com/app/manufacturing>`__.
diff --git a/resource_booking/readme/ROADMAP.rst b/resource_booking/readme/ROADMAP.rst
new file mode 100644
index 00000000..d3ea9f1b
--- /dev/null
+++ b/resource_booking/readme/ROADMAP.rst
@@ -0,0 +1,4 @@
+* Allow combination auto-assignment based on least used combination.
+* Allow customer to choose combination.
+* Some error messages would be a bit more helpful if they specify the schedule
+  impossibility reason, but that should be done without affecting performance.
diff --git a/resource_booking/readme/USAGE.rst b/resource_booking/readme/USAGE.rst
new file mode 100644
index 00000000..da908d65
--- /dev/null
+++ b/resource_booking/readme/USAGE.rst
@@ -0,0 +1,37 @@
+This module installs a new app, "Resource bookings".
+
+Bookings may involve you:
+
+* Maybe because you requested to book something.
+* Maybe because you are one of the booked resources, if a booking represents
+  some kind of appointment.
+
+To see which bookings involve you:
+
+#. Go to *Resource Bookings > Bookings*.
+#. You can switch to the list view if you need to see also the pending ones.
+#. You can remove the "Involving me" filter if you want to see others' bookings.
+
+To book some resources:
+
+#. Go to *Resource Bookings > Types*.
+#. Pick the type of booking you want.
+#. Click on *Booking Count*.
+#. Click on a free slot.
+#. Fill the *Requester*, which may or not be yourself.
+#. Pick one *Resources combination*, in case the one assigned automatically
+   isn't the one you want.
+
+To invite someone to book a resource combination from the portal:
+
+#. Go to *Resource Bookings > Types*.
+#. Pick the type of booking you want.
+#. Click on *Booking Count*.
+#. Click on the list view icon.
+#. Click on *Create*.
+#. Fill the *Requester*.
+#. Pick one *Resources combination*, if you want that the requester is assigned
+   to that combination. Otherwise, leave it empty, and some free combination
+   will be assigned automatically when the requester picks a free slot.
+#. Click on *Share > Send*.
+#. The requester will receive an email to select a calendar slot from his portal.
diff --git a/resource_booking/security/ir.model.access.csv b/resource_booking/security/ir.model.access.csv
new file mode 100644
index 00000000..3f55dc84
--- /dev/null
+++ b/resource_booking/security/ir.model.access.csv
@@ -0,0 +1,11 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+resource_booking_combination_user,Permission to read resource booking combinations,model_resource_booking_combination,group_user,1,0,0,0
+resource_booking_combination_manager,Permission to write resource booking combinations,model_resource_booking_combination,group_manager,1,1,1,1
+resource_booking_type_user,Permission to read resource booking types,model_resource_booking_type,group_user,1,0,0,0
+resource_booking_type_manager,Permission to write resource booking types,model_resource_booking_type,group_manager,1,1,1,1
+resource_booking_portal,Resource bookings for portal,model_resource_booking,base.group_portal,1,0,0,0
+resource_booking_user,Resource bookings for users,model_resource_booking,group_user,1,1,1,0
+resource_booking_manager,Resource bookings for managers,model_resource_booking,group_manager,1,1,1,1
+resource_resource_manager,Permission to write resources,resource.model_resource_resource,group_manager,1,1,1,1
+resource_booking_type_combination_rel_user,Permission to read resource booking type combination relations for users,model_resource_booking_type_combination_rel,group_user,1,0,0,0
+resource_booking_type_combination_rel_manager,Permission to read resource booking type combination relations for managers,model_resource_booking_type_combination_rel,group_manager,1,1,1,1
diff --git a/resource_booking/security/resource_booking_security.xml b/resource_booking/security/resource_booking_security.xml
new file mode 100644
index 00000000..1f3af9a0
--- /dev/null
+++ b/resource_booking/security/resource_booking_security.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<data>
+
+    <record id="category_resource_booking" model="ir.module.category">
+        <field name="name">Resource Booking</field>
+    </record>
+
+    <record id="group_user" model="res.groups">
+        <field name="name">User</field>
+        <field name="category_id" ref="category_resource_booking" />
+        <field name="comment">Users allowed to book resources</field>
+    </record>
+
+    <record id="group_manager" model="res.groups">
+        <field name="name">Manager</field>
+        <field name="category_id" ref="category_resource_booking" />
+        <field name="implied_ids" eval="[(4, ref('group_user'))]" />
+        <field name="comment">Users allowed to manage resource booking configurations.</field>
+        <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]" />
+    </record>
+
+    <data noupdate="1">
+        <record id="rule_resource_booking_type_company" model="ir.rule">
+            <field name="name">Resource booking type multi company rule</field>
+            <field name="model_id" ref="model_resource_booking_type" />
+            <field name="global" eval="True" />
+            <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', user.company_id.ids)]</field>
+        </record>
+
+        <record id="rule_resource_booking_portal" model="ir.rule">
+            <field name="name">Resource booking portal rule</field>
+            <field name="model_id" ref="model_resource_booking" />
+            <field name="groups" eval="[(4, ref('base.group_portal'))]" />
+            <field name="domain_force">['|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids)]</field>
+        </record>
+
+        <record id="rule_resource_booking_user" model="ir.rule">
+            <field name="name">Resource booking user rule</field>
+            <field name="model_id" ref="model_resource_booking" />
+            <field name="groups" eval="[(4, ref('group_user'))]" />
+            <field name="domain_force">['|', '|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids), ('combination_id.resource_ids.user_id', 'in', user.ids)]</field>
+        </record>
+
+        <record id="rule_resource_booking_manager" model="ir.rule">
+            <field name="name">Resource booking manager rule</field>
+            <field name="model_id" ref="model_resource_booking" />
+            <field name="groups" eval="[(4, ref('group_manager'))]" />
+            <field name="domain_force">[(1, '=', 1)]</field>
+        </record>
+    </data>
+
+</data>
diff --git a/resource_booking/static/description/icon.png b/resource_booking/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f27a772eb46cb0c35783d004b5bf8e9b86791717
GIT binary patch
literal 4337
zcmV<N5DxE&P)<h;3K|Lk000e1NJLTq005Ez005E*1^@s6u6vV?00009a7bBm0017s
z0017s0dCNBJ^%m!8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H15PnHS
zK~#90?VWva9OZq-zt6KP>14g%i{uvxV;jkq;+K$QAaRYuThoMw&d?-~0Cot5H0TBB
zw6u^;ThBBh6JqiLrk;`xHV$-JLY)brgqcidT00FTP?!?h27~;HC1kzc?MZjKz1{5}
zr<HW4yS;sXxqCh{{K4+C`}}nG@$Y%teU6}jYY!b-7o*%?#-h<{>grdm<|u70ECT?f
z*g?-R5ml*6JpBV549es!Bw3D&iaa_pIsMYPap93y@4tJj<ZVBH@X&#-_SgX5+#J$V
zACt*R{3nx&3?=p3(GR})v%R-}bHy!hKX~Y0I@WaDKpPr!g=HBNb90zUrIC>&r(!aJ
z#Tt!%Kd$_NHV5TE%(Wbc=DIqxH?9IlC;(u1Z0womZ@+cVVwG2a=Lh>QU)%oId?W%{
zmT_`&67Nh*LX;$3G5J#_jWSFo{bdT^DMe2tf}ThiJf(Q!^yvqG@zuM&O?nO-i1yWl
z&UJ6vRG*e*{Kwhzn4V9$5tBujOkT+Z0Ii`Ac6N1w5~N>v=eL*AtVHgn^`ZJKfM1?D
zhv`&m#YKva8|x`!FBYRJb;{^*Td_GP2fw(PbQ&klo&!f{C{|N<50xqTEUgRS?XfY;
zq|>=l^1^@a#AE>`lb13HnGD_<yNI@i#?Mlspl4oDaB6D0>>Zg*I;*oxaAZ0&GXp~C
z1_~fDK9_>5sCQa+N0yn)S7(`E$fN+6$;`J>03@z9X{GMSWHMKsWr87-kjYRAC?)2J
zm`tXR+lv2X%19C@0LY45q6m}8^l@A9w@k94<V4cGl6AmMAGZ~M%S7}4S4U8+18%-L
z%lKC&zW9~JraMa=*K<~X88h7W;T`zH5A`BkUth9}DCL%ZzV&a%aUmh-i^}Lnv2c7{
za}yrA>MC?cBB<qPk%Bp<(`g+0-~Yoi|NU0UGPVU}^mYcz6cI^hP-<49MbBD^$q<)C
z!q|V^HM;J(G28}8mT}*UKi40XiSO;tckRNbyDuvnPghF|wsmyimGkdocxtL_c}qb#
zEEBamUAo!K(PR?cJZDJEP2q5fGuE3qlFfpfn82o{Cf)H60Gq;Xy2~35s_b!nr^}V0
z<|_BT&qU@k;HD<Qi&;b0aa2n?Ycg?@6QD@}oWYc<K9*q||H#DWm#~m7Ww_SN(b-wh
zq)@(~DNHnT*(|t39Aw4Bt{eEHnd8frun?3JGSPGj+~kCTE6iX_CVqSzWZnyjRJ@m|
zNKW-{Ge=W%pz*lQ(pGCM-^>w70*%jjERl-0&7ApBo37(}&gv^eQz>xc<7Mt*1dCBA
z05|plh?uc4CaZXtnKXKN{>e-<owg|x>8-I$8Ce2N#C;}_iZ_|5L`GVE7jH8Yot<^K
zPh>DEMFBrH3L=UQ#$*-uGn0;Sr+1l&WadE}8=V!au}m3R22Bb+mq^9k%v2^LEx(Jq
zQv-BX05@r5w%01<{#7cd`CtUd20<bf_cD`Ck!%P`r%ao|VO+hw3zvpM2(K!=cBZnr
zwY6-S<*aFH!s9pozM*TN0LY5E`$R@#y7MC+#tl8?msF<aQaBrr<KNGmHL#@Oj!b03
zBL@slGFyCQh891&wWA#m?!F42xTMQiI919k=ikS-Py7;ZU%aUE3TIz+GBG!AZ`-Q?
zxMkZ`JpZLzm_!EnL{}$%e9ISb^VSdPyu#T&lYyqK@Gd6PWx-PepWD)dhd*__xiG4n
z8ji!m*Ix$!c<$~0(Q$=y&79fQLfBz=Z(}1K{`Bve4}k#y*niE{xUA$;4TU(9nJkE8
zrt+oZ{7f8wwreM9IL=xK4AgQQ9@w?hz!mn(WKkqDl`G&A39N>U-F>~*t7iZJuHCp1
z?F|hEuCP}o8$>czIhTloOHAW;wrmC=?r%L&sSp4=4G&iAlgTEL^i|F!X22(MYi6C1
zh<#Nv003RhMK{+ggFQ0YD3W&NydZ#2Bo>dftXgGn)eN+0y!@bzb(w4ysdyz^JOM5~
zlV34w)@;YxXKGC*2Sm!RgclOvg}6pQ4F6zWCWl1IRl+CY;MC`cm`4G@oJ@|1#3coA
z%lbrMO<902F{PvHnGS<+i8%N~;d4YRB?Sv(%O-U3oK0{-vWP^CV4^=W@p<PgW~Snq
zh!Je`WhT1foJlxAU=md<I@V5$o->%4_=Es1VgFkmZ=F4dU%&gV?e`5LS9Et{`}#{f
zj6gdx6@MPdfJ~g=j6?wN+I#Qe(VxBO$i0KcpZ>v(9*YEM$wbXQIRF5BA_3l!_stmo
zMQg3igiN_iv@lP^=7{`*E3+(GYi$N(;)H@sq_8<6U*UmF`bKTbj&p(lKAu=O%mnf+
zF3YrXi9|!D!c0V*T&iPO$3>Znn^3YjORPM>@HZ~Wq-)g13yHjk(ilF)!U)_dWk+qC
zAb>K7f`dmgX^z_Xq>y{Yn)RuJg$FW~9JS@1C(3oK+1no0XsD}mzfzZFD!SIj%@*{D
z6vde>`zxIGmKHp|?@nxAe+mBeH^0F{&;A31l#BaKntT)63@b)$T*2EOfc=$L1JULt
zJT-97;`-Qi+qU7z;DGyY&$yJC@<ig20{A3bJG08_)>b@w-@Vw>(UEt&ud@?R4ct?a
zGA)X<^tK1X3aeXN@$}FDE{R5qo_Aa(n_uhK3k8&1$2!S|_*Pld)`p|^4wjTirLVIS
zPk!yIXsQo66Nm>gQ7$Qf7iP+rWN5NB+=in=1L)HED*E>I>+y{*ebKpqT$YLQLISKe
zZH;x|Fpdrl8s5*~`t93MS7UOoGd;K{69w2)AXey%L~wLy5bJbrbhX55?+s(#;IBIw
z#wD330GR%jrz)o_62Z}-0jxFgduu00M)AjokJuknF<g*|Wh9fV3x{!dupevMj7u~;
zHimtN4q<wB*5;@*zDS2<a<GA}T-L{8I5OC8ct33*C(#`TpTLA;uWo5fTN|C}HZTLu
z8a0EgkHzrx(11@RQgJ^sRdhz$ap`*8ymKes8y&@uj-NnQk}TbCLwh@p4ECeFrN!{I
zCr3u{l_&ldQ^};I81&<AW~x|`uG_X1-}}lPi@WCT?(4-pPyRj9CV!A-V@ErV3=SY>
zVtYOJB~o!uriyIZcK7w-yLWs!Z|mic_w?Y2yZ4!zx7pC%j>7}}rX*53*6vHB;!ZPH
zaU$*R>&4^y?nEuWQkb2aH{;-4#$?*q(T=Bw223?)?)8bv;k-;0C6bmzD!aC9!DDx7
zmr=3OocTv06=!9t7?F1OZNb62_URI2cV90K?A-&7mj3g5)~><Pp&`?KqP>qD^pQj=
z&dF2}B5{=9kv)41{T#*b?%0m+?7h9HOq<uP#o>W|M4B26$KqYbS})GXQ~@F>AcSgW
zmr{J@^2_n9+iuOfcFVf8I6T;oaAQy<(lha6zf1uaDK{p~N)o>D{4ppd)_QLI*hld<
zU%UmB5cGDg!{LE`v>EzMj~xDxNX31b0z8kDKe6%C*Iq+oD1^WG+)akxdb#P!E6@<C
z!<F6Lrk-5%mqaRh);H{%X9}oD#s8XTPn>`#WwHO}FBq2TQ#*E;isaPTMUUr+v~W+R
z05)yfAI@{XdIkHR`?0BJ&M2qGF5=4v{Wv;Xjyug<07WXFY21)07!s*CFH?X-GA4zS
zG6hQ_6=!7%h)CvM4Ru1MU`nLooJ;`_$=dtHcFGiNiBz1CDF7l_f5XKNnJPmf75ilh
zfJpXWMW)J<NX1^6szxNhoJ^G|k&1mXRh3A9F_|h`A{BdNsydMXeKJ*tL@L&0s!EXn
zZJDY|A{A>gRjo)sPNs*C{UlGOcSlFD=ds7DOd=KYG6i(e);^v&egad;B=&ytlQ=m#
zf=6F?5%IY>ufy^Xa|^vyFA@N}^v0Wb>5VtN4#P(nm#M0oHij0)nmHyCLj(OXF_9Q$
z&?gfUiJ^n?GBJ@DI?<MiiNr7fn~-GKMsb;#NDLFKl*!j3HPzQ!xZ3%*NZh1(m6gxJ
z3GzQ*&t|r>vRt;zO;=ulXmb-XS%<d}_BpjYkE?on%a#+R@}H@_EX{6vCeoBpeo?fB
z<8bZPtu91U8BEO0S$x9X47nOTYuZj-yy#Wc70d9{6aX(8bq^;bUwP*wM2nk)GM30l
z5`J~={Nn$+Et6*=CDUpA^MAhTRrM9eKfd)gW;2<*V{Xdio=8RhswZB48Iyt^H(v-A
z6LWJoSmGb0TQa#PQjwY_5(4gf>ag=a>{7wZXS3*k;YCbpJdEdtOzw$PVr2SXr%vJ4
z@BaX!)6=enQYnll61eT3p2O=GM#`3TS|%=f<;V8}W`~UWuOhT`+3`dI$6oz40HAyI
zYSh)#n2M%a5K<}p==gEm|MOqq^s;@K^n4pmO%0GO_uj9VpL-y%+jWjoT)trgx}p(;
z8ygL8m{qALih`+R66Yr-@#g8%NQYyPL!lLIidQoE?wM^#mht-VFkT-X_Bs^bl8JUe
z2^If6T#I|OnZ`eBZ5Hxk<+GIa#b`T}P~Flg87umq7GHNXg?~gM_BWH20|7uFMx(jr
z48V%d%43=QBN9UsG1d+_RJh}=e`I1J1pqM;g<Mx#;;cVpvLuqinj*&$qcO;f&t)0i
zNnOub{bjVUBogZyI|)H18e7&UQqduk2OV(MwD}Q2AV$Oaqq98xmzkJIeuDsFBn&xZ
zwmI`AGcl3;1i``(zwr5N3o;o#tG~>0m`J{XER4>I&sh6CGwBk^e5aa?>hwV%#v(;J
z)`eKiOb*JVOC<9;uyLIp#Ark#6BXi5nOM{2B?Kjg_~r1QOiU!tAP~b*jUj$H{M7+x
zB6)-ujX<t9nu!YWPY0Zd<N>0o=ByO{$V^Nm7f}cx#$u37H)kd9Z2q`SnaMtp*dwt;
zSXkCp6o3HPXcTgt-4ZR;W$Cy@nJ8e>Al-%EkPRLr_t_GHOe6}q)~@EP6yC|inl=~6
zM59pDc_PREy?G-O)nA-p1~D32l1RnxG8sCXV?iX=zj1<WBnG**M4!mdGMVUrv!=}<
zve6hMwPS5A5!irxnTY~`qGR_ohJM6I6jEU(3ZhIpGm|3A3nEqd)_Qg#wrPycf+&-Y
zvx+FnQ~@BRQZ@utjV$#o6%dHwWi!_Hes?zDTxL?z^OKYS$j;3bWF@V?ignDFP(LRE
zu`RN4vayn60*cC{WV3)GouUL#peRV^?diy5(T}={Z&Py?Fq!5rybrFS;iputsePI9
z95OT0$gn+%3_>7=BN{I+E>NK|i4zl0Bq=$sG(1V)dGwJRYQs?lgdjCKg7o;fUC~xN
zneg)FtjxDxNir!4GNU8Nj9frnSJwj<zCJj)*oJlA{YOgj%xOSTK<h#XMWf)Gnm{O<
zYFYsSGOdvk%~_dlL8;S5kK2a+iWNzM6pte_ItoRW5bECi*tx%Y=)M)DyZZ;_)W`)Q
zsk?v?0$N)O%JUi(Ru>8Ysi_%?=B{#;BGUr00wtS;JU<UWK~4K=p>|#817{xmlfNr@
zhb{g6Cl%1kva_>9nxBW9nYTUcAd_usfl^zhPh<t($wUA`Kx%6yY5l5Gd`s&w5vzW9
f;p>Bw%S-(~Qa{Mh4t?E700000NkvXXu0mjf25~x^

literal 0
HcmV?d00001

diff --git a/resource_booking/static/description/icon.svg b/resource_booking/static/description/icon.svg
new file mode 100644
index 00000000..f0361814
--- /dev/null
+++ b/resource_booking/static/description/icon.svg
@@ -0,0 +1,22828 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   width="52.5pt"
+   height="52.5pt"
+   viewBox="0 0 52.5 52.5"
+   version="1.2"
+   id="svg20851">
+  <metadata
+     id="metadata20855">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10422">
+    <g
+       id="g200">
+      <symbol
+         overflow="visible"
+         id="glyph0-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path2" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-1">
+        <path
+           style="stroke:none"
+           d="m 27.34375,-26.25 c 0.914062,0 1.691406,0.320312 2.328125,0.953125 0.632813,0.636719 0.953125,1.414063 0.953125,2.328125 v 24.0625 c 0,0.914062 -0.320312,1.691406 -0.953125,2.328125 C 29.035156,4.054688 28.257812,4.375 27.34375,4.375 H 3.28125 C 2.375,4.375 1.597656,4.054688 0.953125,3.421875 0.316406,2.785156 0,2.007812 0,1.09375 v -24.0625 c 0,-0.914062 0.316406,-1.691406 0.953125,-2.328125 C 1.597656,-25.929688 2.375,-26.25 3.28125,-26.25 H 6.5625 v -3.5625 c 0,-0.539062 0.273438,-0.8125 0.828125,-0.8125 H 10.125 c 0.539062,0 0.8125,0.273438 0.8125,0.8125 v 3.5625 h 8.75 v -3.5625 c 0,-0.539062 0.273438,-0.8125 0.828125,-0.8125 H 23.25 c 0.539062,0 0.8125,0.273438 0.8125,0.8125 V -26.25 Z M 26.9375,1.09375 c 0.269531,0 0.40625,-0.136719 0.40625,-0.40625 v -20.375 H 3.28125 v 20.375 c 0,0.269531 0.132812,0.40625 0.40625,0.40625 z m -3.625,-13.734375 -9.703125,9.703125 c -0.417969,0.367188 -0.808594,0.339844 -1.171875,-0.078125 l -5.125,-5.125 c -0.40625,-0.40625 -0.40625,-0.789063 0,-1.15625 L 8.890625,-10.875 c 0.363281,-0.363281 0.75,-0.363281 1.15625,0 l 3.015625,3.078125 7.578125,-7.515625 c 0.363281,-0.40625 0.753906,-0.40625 1.171875,0 l 1.5,1.5 c 0.40625,0.417969 0.40625,0.808594 0,1.171875 z m 0,0"
+           id="path5" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-2">
+        <path
+           style="stroke:none"
+           d="m 29.5,-1.125 c -3.304688,3.300781 -7.304688,4.953125 -12,4.953125 -4.699219,0 -8.699219,-1.652344 -12,-4.953125 -3.304688,-3.300781 -4.953125,-7.300781 -4.953125,-12 0,-4.695312 1.648437,-8.695312 4.953125,-12 3.300781,-3.300781 7.300781,-4.953125 12,-4.953125 4.695312,0 8.695312,1.652344 12,4.953125 3.300781,3.304688 4.953125,7.304688 4.953125,12 0,4.699219 -1.652344,8.699219 -4.953125,12 z M 10.453125,-1.4375 c 2.144531,1.324219 4.492187,1.984375 7.046875,1.984375 2.550781,0 4.898438,-0.660156 7.046875,-1.984375 l -3.625,-3.625 c -2.28125,0.960938 -4.5625,0.960938 -6.84375,0 z m 10.90625,-7.828125 c 1.070313,-1.070313 1.609375,-2.359375 1.609375,-3.859375 0,-1.5 -0.539062,-2.785156 -1.609375,-3.859375 C 20.285156,-18.054688 19,-18.59375 17.5,-18.59375 c -1.5,0 -2.789062,0.539062 -3.859375,1.609375 -1.074219,1.074219 -1.609375,2.359375 -1.609375,3.859375 0,1.5 0.535156,2.789062 1.609375,3.859375 C 14.710938,-8.191406 16,-7.65625 17.5,-7.65625 c 1.5,0 2.785156,-0.535156 3.859375,-1.609375 z m 7.828125,3.1875 c 1.320312,-2.144531 1.984375,-4.492187 1.984375,-7.046875 0,-2.550781 -0.664063,-4.898438 -1.984375,-7.046875 l -3.625,3.625 c 0.957031,2.28125 0.957031,4.5625 0,6.84375 z M 24.546875,-24.8125 c -2.148437,-1.320312 -4.496094,-1.984375 -7.046875,-1.984375 -2.554688,0 -4.902344,0.664063 -7.046875,1.984375 l 3.625,3.625 c 2.28125,-0.957031 4.5625,-0.957031 6.84375,0 z M 5.8125,-20.171875 c -1.324219,2.148437 -1.984375,4.496094 -1.984375,7.046875 0,2.554688 0.660156,4.902344 1.984375,7.046875 l 3.625,-3.625 c -0.960938,-2.28125 -0.960938,-4.5625 0,-6.84375 z m 0,0"
+           id="path8" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path11" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-1">
+        <path
+           style="stroke:none"
+           d="m 22.359375,-14.765625 h -1.03125 v 3.28125 h 1.03125 c 0.40625,0 0.609375,0.203125 0.609375,0.609375 v 2.0625 c 0,0.40625 -0.203125,0.609375 -0.609375,0.609375 h -1.03125 v 3.28125 h 1.03125 c 0.40625,0 0.609375,0.203125 0.609375,0.609375 V -2.25 c 0,0.40625 -0.203125,0.609375 -0.609375,0.609375 h -1.03125 v 2.46875 c 0,0.675781 -0.242187,1.253906 -0.71875,1.734375 C 20.128906,3.039062 19.550781,3.28125 18.875,3.28125 H 2.46875 c -0.6875,0 -1.273438,-0.242188 -1.75,-0.71875 C 0.238281,2.082031 0,1.503906 0,0.828125 v -21.34375 c 0,-0.675781 0.238281,-1.253906 0.71875,-1.734375 0.476562,-0.476562 1.0625,-0.71875 1.75,-0.71875 H 18.875 c 0.675781,0 1.253906,0.242188 1.734375,0.71875 0.476563,0.480469 0.71875,1.058594 0.71875,1.734375 v 2.46875 h 1.03125 c 0.40625,0 0.609375,0.203125 0.609375,0.609375 v 2.0625 c 0,0.40625 -0.203125,0.609375 -0.609375,0.609375 z M 18.875,0.828125 v -21.34375 H 2.46875 V 0.828125 Z M 12.96875,-10.8125 c -0.648438,0.648438 -1.417969,0.96875 -2.3125,0.96875 -0.886719,0 -1.652344,-0.320312 -2.296875,-0.96875 -0.648437,-0.65625 -0.96875,-1.425781 -0.96875,-2.3125 0,-0.882812 0.320313,-1.648438 0.96875,-2.296875 0.644531,-0.65625 1.410156,-0.984375 2.296875,-0.984375 0.894531,0 1.664062,0.328125 2.3125,0.984375 0.65625,0.648437 0.984375,1.414063 0.984375,2.296875 0,0.886719 -0.328125,1.65625 -0.984375,2.3125 z M 6.046875,-3.28125 C 5.742188,-3.28125 5.476562,-3.375 5.25,-3.5625 5.03125,-3.75 4.921875,-3.976562 4.921875,-4.25 v -0.984375 c 0,-0.8125 0.332031,-1.507813 1,-2.09375 0.664063,-0.582031 1.476563,-0.875 2.4375,-0.875 0.132813,0 0.421875,0.070313 0.859375,0.203125 0.445312,0.136719 0.929688,0.203125 1.453125,0.203125 0.507813,0 0.984375,-0.066406 1.421875,-0.203125 0.445312,-0.132812 0.738281,-0.203125 0.875,-0.203125 0.957031,0 1.769531,0.292969 2.4375,0.875 0.664062,0.585937 1,1.28125 1,2.09375 V -4.25 c 0,0.273438 -0.117188,0.5 -0.34375,0.6875 -0.21875,0.1875 -0.480469,0.28125 -0.78125,0.28125 z m 0,0"
+           id="path14" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-2">
+        <path
+           style="stroke:none"
+           d="M 26.609375,-16.40625 H 32.8125 v 13.125 h -3.28125 c -0.449219,0 -0.835938,-0.160156 -1.15625,-0.484375 -0.324219,-0.320313 -0.484375,-0.707031 -0.484375,-1.15625 h -2.96875 c -0.105469,0.449219 -0.292969,0.839844 -0.5625,1.171875 l -1.34375,1.640625 C 22.609375,-1.585938 22.101562,-1.25 21.5,-1.09375 20.90625,-0.945312 20.316406,-0.992188 19.734375,-1.234375 19.085938,-0.410156 18.253906,0 17.234375,0 16.472656,0 15.769531,-0.273438 15.125,-0.828125 14.34375,-0.242188 13.445312,0.03125 12.4375,0 11.425781,-0.03125 10.523438,-0.375 9.734375,-1.03125 l -4.34375,-3.890625 h -0.46875 c 0,0.3125 -0.078125,0.589844 -0.234375,0.828125 -0.15625,0.230469 -0.355469,0.421875 -0.59375,0.578125 -0.230469,0.15625 -0.5,0.234375 -0.8125,0.234375 H 0 v -13.125 h 6.046875 l 2.46875,-2.46875 c 0.539063,-0.539062 1.207031,-0.8125 2,-0.8125 H 22.15625 c 0.78125,0 1.460938,0.273438 2.046875,0.8125 z M 1.875,-5.171875 c 0.15625,0.167969 0.347656,0.25 0.578125,0.25 0.238281,0 0.4375,-0.082031 0.59375,-0.25 0.15625,-0.175781 0.234375,-0.375 0.234375,-0.59375 0,-0.21875 -0.078125,-0.40625 -0.234375,-0.5625 -0.15625,-0.15625 -0.355469,-0.234375 -0.59375,-0.234375 -0.230469,0 -0.421875,0.078125 -0.578125,0.234375 -0.15625,0.15625 -0.234375,0.34375 -0.234375,0.5625 0,0.21875 0.078125,0.417969 0.234375,0.59375 z M 22.453125,-5.28125 c 0.175781,-0.238281 0.160156,-0.441406 -0.04687,-0.609375 L 16.875,-10.359375 16.40625,-10 c -0.617188,0.585938 -1.308594,0.902344 -2.078125,0.953125 -0.773437,0.054687 -1.40625,-0.046875 -1.90625,-0.296875 -0.492187,-0.257812 -0.886719,-0.546875 -1.1875,-0.859375 -0.6875,-0.75 -1.015625,-1.628906 -0.984375,-2.640625 0.03906,-1.007812 0.4375,-1.875 1.1875,-2.59375 l 2,-1.796875 h -2.921875 c -0.04297,0 -0.08984,0.02344 -0.140625,0.0625 -0.04297,0.03125 -0.08594,0.04687 -0.125,0.04687 l -3.171875,3.171875 h -2.15625 v 6.5625 h 1.4375 l 4.96875,4.515625 c 0.414063,0.34375 0.90625,0.484375 1.46875,0.421875 0.5625,-0.070313 1.015625,-0.332031 1.359375,-0.78125 l 0.8125,-0.96875 1.90625,1.640625 c 0.300781,0.242188 0.609375,0.1875 0.921875,-0.15625 l 1.53125,-1.84375 1.234375,0.96875 c 0.195312,0.179688 0.382812,0.164062 0.5625,-0.046875 z m 5.4375,-2.109375 v -6.5625 h -2.3125 l -3.125,-3.171875 C 22.347656,-17.195312 22.25,-17.234375 22.15625,-17.234375 h -4.3125 c -0.511719,0 -0.976562,0.195313 -1.390625,0.578125 l -3.328125,3.0625 c -0.273438,0.210938 -0.40625,0.484375 -0.40625,0.828125 0,0.34375 0.117188,0.652344 0.359375,0.921875 0.195313,0.242188 0.472656,0.355469 0.828125,0.34375 0.363281,-0.01953 0.664062,-0.132812 0.90625,-0.34375 l 2.828125,-2.609375 c 0.40625,-0.375 0.796875,-0.359375 1.171875,0.04687 l 0.5625,0.609375 c 0.375,0.417969 0.359375,0.796875 -0.04687,1.140625 l -0.671875,0.609375 5.28125,4.25 c 0.132812,0.136719 0.273438,0.273437 0.421875,0.40625 z m 1.875,2.21875 c 0.15625,0.167969 0.347656,0.25 0.578125,0.25 0.238281,0 0.4375,-0.082031 0.59375,-0.25 0.15625,-0.175781 0.234375,-0.375 0.234375,-0.59375 0,-0.21875 -0.07813,-0.40625 -0.234375,-0.5625 -0.15625,-0.15625 -0.355469,-0.234375 -0.59375,-0.234375 -0.230469,0 -0.421875,0.078125 -0.578125,0.234375 -0.15625,0.15625 -0.234375,0.34375 -0.234375,0.5625 0,0.21875 0.07813,0.417969 0.234375,0.59375 z m 0,0"
+           id="path17" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-3">
+        <path
+           style="stroke:none"
+           d="m 27.078125,-21.328125 c 0.4375,0 0.84375,0.117187 1.21875,0.34375 0.375,0.21875 0.671875,0.515625 0.890625,0.890625 0.226562,0.375 0.34375,0.78125 0.34375,1.21875 v 18.046875 c 0,0.6875 -0.242188,1.269531 -0.71875,1.75 -0.480469,0.476563 -1.058594,0.71875 -1.734375,0.71875 H 2.46875 c -0.6875,0 -1.273438,-0.242187 -1.75,-0.71875 C 0.238281,0.441406 0,-0.140625 0,-0.828125 V -18.875 c 0,-0.675781 0.238281,-1.253906 0.71875,-1.734375 0.476562,-0.476563 1.0625,-0.71875 1.75,-0.71875 z M 2.765625,-18.875 c -0.199219,0 -0.296875,0.105469 -0.296875,0.3125 v 2.15625 h 24.609375 v -2.15625 c 0,-0.207031 -0.105469,-0.3125 -0.3125,-0.3125 z m 24,18.046875 c 0.207031,0 0.3125,-0.097656 0.3125,-0.296875 V -9.84375 H 2.46875 V -1.125 c 0,0.199219 0.097656,0.296875 0.296875,0.296875 z m -16.921875,-5.125 v 2.0625 c 0,0.40625 -0.203125,0.609375 -0.609375,0.609375 H 5.53125 c -0.40625,0 -0.609375,-0.203125 -0.609375,-0.609375 v -2.0625 c 0,-0.40625 0.203125,-0.609375 0.609375,-0.609375 h 3.703125 c 0.40625,0 0.609375,0.203125 0.609375,0.609375 z m 9.84375,0 v 2.0625 c 0,0.40625 -0.203125,0.609375 -0.609375,0.609375 H 12.09375 c -0.40625,0 -0.609375,-0.203125 -0.609375,-0.609375 v -2.0625 c 0,-0.40625 0.203125,-0.609375 0.609375,-0.609375 h 6.984375 c 0.40625,0 0.609375,0.203125 0.609375,0.609375 z m 0,0"
+           id="path20" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-4">
+        <path
+           style="stroke:none"
+           d="m 22.609375,-22.65625 c 0.882813,-0.476562 1.753906,-0.4375 2.609375,0.125 0.851562,0.5625 1.210938,1.355469 1.078125,2.375 L 23.21875,-0.25 c -0.136719,0.78125 -0.546875,1.359375 -1.234375,1.734375 -0.375,0.207031 -0.765625,0.3125 -1.171875,0.3125 -0.34375,0 -0.667969,-0.054687 -0.96875,-0.15625 l -5.75,-2.359375 -2.203125,3.03125 C 11.410156,2.882812 10.820312,3.207031 10.125,3.28125 9.425781,3.351562 8.800781,3.148438 8.25,2.671875 7.707031,2.191406 7.4375,1.578125 7.4375,0.828125 v -4.3125 l -5.859375,-2.46875 c -0.949219,-0.375 -1.460937,-1.070313 -1.53125,-2.09375 -0.0703125,-1.03125 0.335937,-1.800781 1.234375,-2.3125 z M 9.890625,0.828125 11.78125,-1.75 9.890625,-2.515625 Z m 10.921875,-1.5 3.03125,-19.84375 -21.328125,12.3125 5.53125,2.3125 10.8125,-9.484375 c 0.375,-0.3125 0.738281,-0.304688 1.09375,0.01563 0.363281,0.324219 0.410156,0.695313 0.140625,1.109375 l -7.171875,10.359375 z m 0,0"
+           id="path23" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph2-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path26" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph2-1">
+        <path
+           style="stroke:none"
+           d="m 33.90625,-4.375 c 0.320312,0 0.582031,0.105469 0.78125,0.3125 C 34.894531,-3.863281 35,-3.601562 35,-3.28125 v 2.1875 c 0,0.324219 -0.105469,0.589844 -0.3125,0.796875 C 34.488281,-0.0976562 34.226562,0 33.90625,0 H 2.1875 C 1.59375,0 1.078125,-0.210938 0.640625,-0.640625 0.210938,-1.078125 0,-1.59375 0,-2.1875 v -22.96875 c 0,-0.320312 0.0976562,-0.582031 0.296875,-0.78125 0.207031,-0.207031 0.472656,-0.3125 0.796875,-0.3125 h 2.1875 c 0.320312,0 0.582031,0.105469 0.78125,0.3125 0.207031,0.199219 0.3125,0.460938 0.3125,0.78125 V -4.375 Z m -2.1875,-19.6875 c 0.320312,0 0.582031,0.105469 0.78125,0.3125 0.207031,0.199219 0.3125,0.460938 0.3125,0.78125 v 8.0625 c 0,0.730469 -0.34375,1.234375 -1.03125,1.515625 -0.679688,0.273437 -1.265625,0.15625 -1.765625,-0.34375 l -2.1875,-2.1875 -6.5625,6.5625 C 20.804688,-8.953125 20.28125,-8.75 19.6875,-8.75 c -0.59375,0 -1.121094,-0.203125 -1.578125,-0.609375 l -4.984375,-5.0625 -3.140625,3.140625 c -0.5,0.554688 -1.027344,0.554688 -1.578125,0 l -1.5,-1.5 c -0.554688,-0.550781 -0.554688,-1.078125 0,-1.578125 l 4.640625,-4.71875 c 0.457031,-0.40625 0.984375,-0.609375 1.578125,-0.609375 0.59375,0 1.117188,0.203125 1.578125,0.609375 l 4.984375,5.0625 4.984375,-5.0625 -2.1875,-2.1875 c -0.5,-0.5 -0.617187,-1.085937 -0.34375,-1.765625 0.28125,-0.6875 0.785156,-1.03125 1.515625,-1.03125 z m 0,0"
+           id="path29" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph2-2">
+        <path
+           style="stroke:none"
+           d="m 4.953125,-25.125 c 3.300781,-3.300781 7.300781,-4.953125 12,-4.953125 4.695313,0 8.695313,1.652344 12,4.953125 3.300781,3.304688 4.953125,7.304688 4.953125,12 0,4.699219 -1.652344,8.699219 -4.953125,12 -3.304687,3.300781 -7.304687,4.953125 -12,4.953125 -4.699219,0 -8.699219,-1.652344 -12,-4.953125 C 1.648438,-4.425781 0,-8.425781 0,-13.125 c 0,-4.695312 1.648438,-8.695312 4.953125,-12 z M 22.5625,-5.609375 c 0.632812,-0.632813 0.953125,-1.382813 0.953125,-2.25 0,-0.59375 -0.203125,-1.09375 -0.609375,-1.5 l -0.96875,-0.96875 c -0.40625,-0.40625 -0.90625,-0.609375 -1.5,-0.609375 h -4.578125 c -0.179687,-0.09375 -0.523437,-0.476562 -1.03125,-1.15625 -0.5,-0.6875 -0.886719,-1.03125 -1.15625,-1.03125 -0.730469,0 -1.414063,-0.160156 -2.046875,-0.484375 l -0.75,-0.40625 c -0.324219,-0.132813 -0.484375,-0.363281 -0.484375,-0.6875 0,-0.40625 0.179687,-0.675781 0.546875,-0.8125 l 2.125,-0.6875 c 0.132812,-0.03906 0.25,-0.0625 0.34375,-0.0625 0.269531,0 0.519531,0.08984 0.75,0.265625 l 0.609375,0.546875 c 0.09375,0.09375 0.207031,0.140625 0.34375,0.140625 h 0.40625 c 0.226563,0 0.390625,-0.08594 0.484375,-0.265625 0.09375,-0.1875 0.09375,-0.375 0,-0.5625 L 14.96875,-18.25 c -0.04297,-0.05078 -0.0625,-0.117188 -0.0625,-0.203125 0,-0.1875 0.04687,-0.328125 0.140625,-0.421875 l 0.671875,-0.671875 c 0.09375,-0.09375 0.234375,-0.140625 0.421875,-0.140625 H 16.75 c 0.132812,0 0.25,-0.04687 0.34375,-0.140625 L 17.640625,-20.375 c 0.269531,-0.269531 0.269531,-0.539062 0,-0.8125 l -0.28125,-0.28125 c -0.273437,-0.269531 -0.273437,-0.539062 0,-0.8125 l 1.03125,-1.03125 c 0.5,-0.5 0.5,-1 0,-1.5 l -1.984375,-1.984375 c -0.542969,0.04297 -1.089844,0.109375 -1.640625,0.203125 v 0.75 c 0,0.417969 -0.171875,0.730469 -0.515625,0.9375 -0.34375,0.199219 -0.699219,0.203125 -1.0625,0.01563 l -1.640625,-0.8125 c -3.230469,1.417969 -5.574219,3.742187 -7.03125,6.96875 1.132813,1.730469 1.910156,2.890625 2.328125,3.484375 0.363281,0.554688 0.769531,1.03125 1.21875,1.4375 l 0.078125,0.07813 c 0.675781,0.585937 1.40625,1.085937 2.1875,1.5 0.8125,0.40625 1.925781,1 3.34375,1.78125 0.726563,0.40625 1.09375,1.042969 1.09375,1.90625 v 2.1875 c 0,0.59375 0.203125,1.09375 0.609375,1.5 0.507812,0.5 0.910156,1.105469 1.203125,1.8125 0.289063,0.710937 0.414063,1.292969 0.375,1.75 v 1.84375 c 0.957031,0 1.9375,-0.117187 2.9375,-0.34375 l 1.171875,-3.21875 c 0.03906,-0.082031 0.148438,-0.445313 0.328125,-1.09375 0.05078,-0.3125 0.191406,-0.5625 0.421875,-0.75 0.132812,-0.132813 0.382812,-0.382813 0.75,-0.75 z m 5.9375,-6.28125 1.984375,0.546875 c 0.09375,-0.6875 0.140625,-1.28125 0.140625,-1.78125 0,-2.144531 -0.480469,-4.171875 -1.4375,-6.078125 l -0.890625,0.40625 C 28.023438,-18.660156 27.800781,-18.476562 27.625,-18.25 l -1.3125,2.046875 c -0.179688,0.273437 -0.265625,0.570313 -0.265625,0.890625 0,0.324219 0.08594,0.621094 0.265625,0.890625 l 1.234375,1.84375 c 0.226563,0.367187 0.546875,0.59375 0.953125,0.6875 z m 0,0"
+           id="path32" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph2-3">
+        <path
+           style="stroke:none"
+           d="M 24.328125,-25.21875 C 27.109375,-23.082031 28.5,-20.507812 28.5,-17.5 c 0,3.011719 -1.390625,5.589844 -4.171875,7.734375 -2.78125,2.136719 -6.132813,3.203125 -10.046875,3.203125 -2.730469,0 -5.261719,-0.566406 -7.59375,-1.703125 -1.960938,1.136719 -3.984375,1.703125 -6.078125,1.703125 -0.09375,0 -0.1875,-0.03125 -0.28125,-0.09375 C 0.242188,-6.726562 0.175781,-6.8125 0.125,-6.90625 0.0390625,-7.132812 0.0664062,-7.335938 0.203125,-7.515625 1.160156,-8.429688 1.976562,-9.664062 2.65625,-11.21875 0.925781,-13.082031 0.0625,-15.175781 0.0625,-17.5 c 0,-3.007812 1.390625,-5.582031 4.171875,-7.71875 2.78125,-2.144531 6.128906,-3.21875 10.046875,-3.21875 3.914062,0 7.265625,1.074219 10.046875,3.21875 z m 12.515625,22.75 c 0.675781,1.554688 1.492188,2.785156 2.453125,3.703125 0.132813,0.175781 0.15625,0.378906 0.0625,0.609375 -0.08594,0.226562 -0.242187,0.34375 -0.46875,0.34375 -2.09375,0 -4.121094,-0.570312 -6.078125,-1.703125 -2.324219,1.132813 -4.855469,1.703125 -7.59375,1.703125 -2.917969,0 -5.5625,-0.617188 -7.9375,-1.84375 -2.367188,-1.226562 -4.09375,-2.847656 -5.1875,-4.859375 0.820312,0.09375 1.550781,0.140625 2.1875,0.140625 4.507812,0 8.367188,-1.285156 11.578125,-3.859375 3.21875,-2.570313 4.828125,-5.660156 4.828125,-9.265625 0,-0.5 -0.02344,-0.957031 -0.0625,-1.375 2.59375,0.824219 4.707031,2.164062 6.34375,4.015625 1.644531,1.84375 2.46875,3.882813 2.46875,6.109375 0,2.324219 -0.867188,4.417969 -2.59375,6.28125 z m 0,0"
+           id="path35" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph2-4">
+        <path
+           style="stroke:none"
+           d="m 33.296875,-9.03125 c 0.40625,0.1875 0.539063,0.511719 0.40625,0.96875 -0.773437,2.417969 -2.027344,4.558594 -3.765625,6.421875 C 29.664062,-1.316406 29.347656,-1.25 28.984375,-1.4375 l -2.9375,-1.703125 C 24.816406,-2.097656 23.425781,-1.300781 21.875,-0.75 v 3.34375 c 0,0.457031 -0.203125,0.734375 -0.609375,0.828125 -2.511719,0.539063 -4.996094,0.539063 -7.453125,0 C 13.351562,3.328125 13.125,3.050781 13.125,2.59375 V -0.75 C 11.570312,-1.300781 10.179688,-2.097656 8.953125,-3.140625 l -2.875,1.703125 C 5.671875,-1.25 5.332031,-1.316406 5.0625,-1.640625 3.332031,-3.503906 2.078125,-5.644531 1.296875,-8.0625 c -0.136719,-0.414062 0,-0.738281 0.40625,-0.96875 l 2.875,-1.703125 C 4.441406,-11.503906 4.375,-12.300781 4.375,-13.125 c 0,-0.820312 0.066406,-1.617188 0.203125,-2.390625 l -2.875,-1.71875 c -0.40625,-0.175781 -0.542969,-0.492187 -0.40625,-0.953125 0.78125,-2.414062 2.035156,-4.554688 3.765625,-6.421875 0.269531,-0.320313 0.609375,-0.367187 1.015625,-0.140625 l 2.875,1.640625 C 10.179688,-24.148438 11.570312,-24.945312 13.125,-25.5 v -3.34375 c 0,-0.457031 0.203125,-0.734375 0.609375,-0.828125 2.507813,-0.539063 5.019531,-0.539063 7.53125,0 0.40625,0.09375 0.609375,0.371094 0.609375,0.828125 V -25.5 c 1.550781,0.554688 2.941406,1.351562 4.171875,2.390625 l 2.875,-1.703125 c 0.40625,-0.1875 0.742187,-0.117188 1.015625,0.203125 1.738281,1.867187 2.992188,4.007813 3.765625,6.421875 0.132813,0.460938 0,0.777344 -0.40625,0.953125 l -2.875,1.71875 c 0.269531,1.59375 0.269531,3.1875 0,4.78125 z M 13.640625,-9.265625 C 14.710938,-8.191406 16,-7.65625 17.5,-7.65625 c 1.5,0 2.785156,-0.535156 3.859375,-1.609375 1.070313,-1.070313 1.609375,-2.359375 1.609375,-3.859375 0,-1.5 -0.539062,-2.785156 -1.609375,-3.859375 C 20.285156,-18.054688 19,-18.59375 17.5,-18.59375 c -1.5,0 -2.789062,0.539062 -3.859375,1.609375 -1.074219,1.074219 -1.609375,2.359375 -1.609375,3.859375 0,1.5 0.535156,2.789062 1.609375,3.859375 z m 0,0"
+           id="path38" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph3-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path41" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph3-1">
+        <path
+           style="stroke:none"
+           d="m 21.890625,-9.84375 c 0.238281,0 0.457031,-0.035156 0.65625,-0.109375 l 7.03125,-2 V -2.8125 c 0,0.375 -0.121094,0.710938 -0.359375,1 -0.242188,0.28125 -0.53125,0.476562 -0.875,0.578125 l -11.125,2.765625 c -0.511719,0.144531 -1.039062,0.144531 -1.578125,0 L 4.5625,-1.234375 C 4.21875,-1.335938 3.925781,-1.53125 3.6875,-1.8125 c -0.242188,-0.289062 -0.359375,-0.625 -0.359375,-1 v -9.140625 l 7.03125,2 c 0.195313,0.074219 0.414063,0.109375 0.65625,0.109375 0.957031,0 1.675781,-0.390625 2.15625,-1.171875 l 3.28125,-5.5 3.28125,5.5 c 0.476563,0.78125 1.195313,1.171875 2.15625,1.171875 z m 10.859375,-5.75 c 0.144531,0.242188 0.164062,0.480469 0.0625,0.71875 -0.105469,0.242188 -0.292969,0.398438 -0.5625,0.46875 l -10.15625,2.875 c -0.40625,0.136719 -0.714844,0.01563 -0.921875,-0.359375 l -4.71875,-7.796875 12.8125,-1.640625 c 0.414063,-0.03125 0.707031,0.125 0.875,0.46875 z M 2.765625,-20.859375 c 0.164063,-0.34375 0.457031,-0.5 0.875,-0.46875 l 12.8125,1.640625 -4.71875,7.796875 c -0.210937,0.375 -0.515625,0.496094 -0.921875,0.359375 l -10.15625,-2.875 c -0.273438,-0.07031 -0.460938,-0.226562 -0.5625,-0.46875 -0.1015625,-0.238281 -0.0859375,-0.476562 0.0625,-0.71875 z m 0,0"
+           id="path44" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph3-2">
+        <path
+           style="stroke:none"
+           d="m 26.609375,-8.15625 c 0.613281,0 1.148437,0.167969 1.609375,0.5 0.46875,0.324219 0.800781,0.734375 1,1.234375 0.207031,0.492187 0.3125,1.027344 0.3125,1.609375 0,0.917969 -0.25,1.679688 -0.75,2.28125 -0.492188,0.59375 -1.179688,0.890625 -2.0625,0.890625 -0.6875,0 -1.453125,-0.304687 -2.296875,-0.921875 -0.835937,-0.613281 -1.542969,-0.921875 -2.125,-0.921875 -0.574219,0 -1.015625,0.214844 -1.328125,0.640625 -0.304688,0.429688 -0.464844,0.945312 -0.484375,1.546875 -0.02344,0.59375 0,1.1875 0.0625,1.78125 0.07031,0.601563 0.160156,1.125 0.265625,1.5625 l 0.15625,0.625 c -0.34375,0 -0.796875,0.03125 -1.359375,0.09375 -0.5625,0.070313 -1.121094,0.132813 -1.671875,0.1875 C 17.394531,3.003906 16.816406,3.0625 16.203125,3.125 c -0.617187,0.070312 -1.1875,0.085938 -1.71875,0.046875 -0.53125,-0.03125 -1.011719,-0.101563 -1.4375,-0.203125 -0.429687,-0.105469 -0.761719,-0.292969 -1,-0.5625 C 11.804688,2.132812 11.6875,1.773438 11.6875,1.328125 c 0,-0.574219 0.304688,-1.2734375 0.921875,-2.09375 0.613281,-0.820313 0.921875,-1.59375 0.921875,-2.3125 0,-0.851563 -0.304688,-1.523437 -0.90625,-2.015625 -0.59375,-0.5 -1.351562,-0.75 -2.265625,-0.75 -0.585937,0 -1.125,0.105469 -1.625,0.3125 C 8.242188,-5.332031 7.851562,-5.007812 7.5625,-4.5625 7.269531,-4.113281 7.125,-3.582031 7.125,-2.96875 c 0,0.617188 0.171875,1.1875 0.515625,1.71875 0.34375,0.523438 0.679687,0.980469 1.015625,1.375 C 9,0.519531 9.171875,0.867188 9.171875,1.171875 9.171875,1.859375 8.851562,2.375 8.21875,2.71875 7.59375,3.0625 6.828125,3.238281 5.921875,3.25 5.015625,3.269531 4.113281,3.242188 3.21875,3.171875 2.332031,3.109375 1.566406,3.007812 0.921875,2.875 L 0,2.671875 V -14.40625 c 0,0 1.09375,0.171875 3.28125,0.515625 3.832031,0.375 5.75,-0.289063 5.75,-2 0,-0.3125 -0.277344,-0.894531 -0.828125,-1.75 -0.542969,-0.851563 -0.8125,-1.671875 -0.8125,-2.453125 0,-0.894531 0.328125,-1.597656 0.984375,-2.109375 0.664062,-0.507813 1.476562,-0.765625 2.4375,-0.765625 0.894531,0 1.640625,0.25 2.234375,0.75 0.601563,0.492188 0.90625,1.179688 0.90625,2.0625 0,0.6875 -0.3125,1.445312 -0.9375,2.265625 -0.617187,0.824219 -0.921875,1.542969 -0.921875,2.15625 0,0.574219 0.175781,1.015625 0.53125,1.328125 0.363281,0.304688 0.84375,0.480469 1.4375,0.53125 0.601562,0.05469 1.265625,0.04687 1.984375,-0.01563 0.71875,-0.07031 1.4375,-0.207031 2.15625,-0.40625 0.71875,-0.207031 1.363281,-0.40625 1.9375,-0.59375 0.582031,-0.1875 1.0625,-0.347656 1.4375,-0.484375 l 0.578125,-0.21875 c 0,0 -0.292969,1.183594 -0.875,3.546875 C 20.625,-8.390625 21,-6.5625 22.40625,-6.5625 c 0.300781,0 0.878906,-0.265625 1.734375,-0.796875 0.863281,-0.53125 1.6875,-0.796875 2.46875,-0.796875 z m 0,0"
+           id="path47" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph3-3">
+        <path
+           style="stroke:none"
+           d="m 6.5625,-14.765625 h 16.40625 v 9.84375 H 6.5625 Z m 21.21875,3.171875 c -0.46875,0.480469 -0.703125,1.0625 -0.703125,1.75 0,0.6875 0.234375,1.273438 0.703125,1.75 0.476562,0.46875 1.0625,0.703125 1.75,0.703125 v 4.921875 c 0,0.6875 -0.242188,1.273438 -0.71875,1.75 C 28.332031,-0.238281 27.753906,0 27.078125,0 H 2.46875 C 1.78125,0 1.195312,-0.238281 0.71875,-0.71875 0.238281,-1.195312 0,-1.78125 0,-2.46875 v -4.921875 c 0.6875,0 1.269531,-0.234375 1.75,-0.703125 0.476562,-0.476562 0.71875,-1.0625 0.71875,-1.75 0,-0.6875 -0.242188,-1.269531 -0.71875,-1.75 C 1.269531,-12.070312 0.6875,-12.3125 0,-12.3125 v -4.921875 c 0,-0.675781 0.238281,-1.253906 0.71875,-1.734375 0.476562,-0.476562 1.0625,-0.71875 1.75,-0.71875 h 24.609375 c 0.675781,0 1.253906,0.242188 1.734375,0.71875 0.476562,0.480469 0.71875,1.058594 0.71875,1.734375 v 4.921875 c -0.6875,0 -1.273438,0.242188 -1.75,0.71875 z m -3.171875,-3.578125 c 0,-0.34375 -0.121094,-0.632813 -0.359375,-0.875 -0.242188,-0.238281 -0.53125,-0.359375 -0.875,-0.359375 H 6.15625 c -0.34375,0 -0.636719,0.121094 -0.875,0.359375 -0.242188,0.242187 -0.359375,0.53125 -0.359375,0.875 v 10.65625 c 0,0.34375 0.117187,0.636719 0.359375,0.875 0.238281,0.242187 0.53125,0.359375 0.875,0.359375 H 23.375 c 0.34375,0 0.632812,-0.117188 0.875,-0.359375 0.238281,-0.238281 0.359375,-0.53125 0.359375,-0.875 z m 0,0"
+           id="path50" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph3-4">
+        <path
+           style="stroke:none"
+           d="m 7.21875,-12.453125 c -0.648438,0.648437 -1.414062,0.96875 -2.296875,0.96875 -0.886719,0 -1.65625,-0.320313 -2.3125,-0.96875 -0.648437,-0.65625 -0.96875,-1.425781 -0.96875,-2.3125 0,-0.882813 0.320313,-1.648437 0.96875,-2.296875 0.65625,-0.65625 1.425781,-0.984375 2.3125,-0.984375 0.882813,0 1.648437,0.328125 2.296875,0.984375 0.65625,0.648438 0.984375,1.414062 0.984375,2.296875 0,0.886719 -0.328125,1.65625 -0.984375,2.3125 z m 22.96875,0 c -0.648438,0.648437 -1.414062,0.96875 -2.296875,0.96875 -0.886719,0 -1.65625,-0.320313 -2.3125,-0.96875 -0.648437,-0.65625 -0.96875,-1.425781 -0.96875,-2.3125 0,-0.882813 0.320313,-1.648437 0.96875,-2.296875 0.65625,-0.65625 1.425781,-0.984375 2.3125,-0.984375 0.882813,0 1.648437,0.328125 2.296875,0.984375 0.65625,0.648438 0.984375,1.414062 0.984375,2.296875 0,0.886719 -0.328125,1.65625 -0.984375,2.3125 z m -0.65625,2.609375 c 0.882812,0 1.648438,0.328125 2.296875,0.984375 0.65625,0.648437 0.984375,1.414063 0.984375,2.296875 v 1.640625 c 0,0.449219 -0.164062,0.835937 -0.484375,1.15625 -0.324219,0.324219 -0.710937,0.484375 -1.15625,0.484375 H 27.78125 C 27.6875,-4.0625 27.46875,-4.8125 27.125,-5.53125 26.78125,-6.25 26.332031,-6.890625 25.78125,-7.453125 25.238281,-8.023438 24.625,-8.5 23.9375,-8.875 24.59375,-9.519531 25.363281,-9.84375 26.25,-9.84375 Z m -9.078125,-1.6875 c -1.125,1.125 -2.476563,1.6875 -4.046875,1.6875 -1.574219,0 -2.921875,-0.5625 -4.046875,-1.6875 -1.125,-1.132812 -1.6875,-2.484375 -1.6875,-4.046875 0,-1.570313 0.5625,-2.921875 1.6875,-4.046875 1.125,-1.132812 2.472656,-1.703125 4.046875,-1.703125 1.570312,0 2.921875,0.570313 4.046875,1.703125 1.132813,1.125 1.703125,2.476562 1.703125,4.046875 0,1.5625 -0.570312,2.914063 -1.703125,4.046875 z m -0.09375,3.328125 c 1.632813,0 3.023437,0.574219 4.171875,1.71875 1.144531,1.148437 1.71875,2.539063 1.71875,4.171875 v 1.484375 c 0,0.6875 -0.242188,1.269531 -0.71875,1.75 -0.480469,0.476563 -1.058594,0.71875 -1.734375,0.71875 H 9.03125 c -0.6875,0 -1.273438,-0.242187 -1.75,-0.71875 -0.480469,-0.480469 -0.71875,-1.0625 -0.71875,-1.75 V -2.3125 c 0,-1.632812 0.570312,-3.023438 1.71875,-4.171875 1.144531,-1.144531 2.535156,-1.71875 4.171875,-1.71875 h 0.46875 c 1.125,0.542969 2.285156,0.8125 3.484375,0.8125 1.195312,0 2.359375,-0.269531 3.484375,-0.8125 z M 8.875,-8.875 C 7.84375,-8.320312 6.984375,-7.550781 6.296875,-6.5625 5.617188,-5.570312 5.195312,-4.476562 5.03125,-3.28125 H 1.640625 c -0.449219,0 -0.835937,-0.160156 -1.15625,-0.484375 C 0.160156,-4.085938 0,-4.472656 0,-4.921875 V -6.5625 C 0,-7.445312 0.320312,-8.210938 0.96875,-8.859375 1.625,-9.515625 2.394531,-9.84375 3.28125,-9.84375 H 6.5625 c 0.882812,0 1.65625,0.324219 2.3125,0.96875 z m 0,0"
+           id="path53" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph3-5">
+        <path
+           style="stroke:none"
+           d="m 16.125,-11.765625 c -1.28125,1.28125 -2.828125,1.921875 -4.640625,1.921875 -1.8125,0 -3.359375,-0.640625 -4.640625,-1.921875 -1.28125,-1.28125 -1.921875,-2.828125 -1.921875,-4.640625 0,-1.8125 0.640625,-3.359375 1.921875,-4.640625 1.28125,-1.28125 2.828125,-1.921875 4.640625,-1.921875 1.8125,0 3.359375,0.640625 4.640625,1.921875 1.28125,1.28125 1.921875,2.828125 1.921875,4.640625 0,1.8125 -0.640625,3.359375 -1.921875,4.640625 z m -0.03125,3.5625 c 1.882812,0 3.5,0.679687 4.84375,2.03125 1.351562,1.34375 2.03125,2.960937 2.03125,4.84375 v 2.15625 c 0,0.675781 -0.242188,1.253906 -0.71875,1.734375 -0.480469,0.476562 -1.058594,0.71875 -1.734375,0.71875 H 2.46875 c -0.6875,0 -1.273438,-0.242188 -1.75,-0.71875 C 0.238281,2.082031 0,1.503906 0,0.828125 v -2.15625 c 0,-1.882813 0.671875,-3.5 2.015625,-4.84375 1.351563,-1.351563 2.972656,-2.03125 4.859375,-2.03125 h 0.859375 c 1.195313,0.542969 2.445313,0.8125 3.75,0.8125 1.300781,0 2.550781,-0.269531 3.75,-0.8125 z m 16.5625,-6.5625 c 0.269531,0.273437 0.253906,0.542969 -0.04687,0.8125 L 25.375,-6.71875 c -0.273438,0.273438 -0.5625,0.257812 -0.875,-0.046875 l -4.140625,-4.203125 c -0.3125,-0.269531 -0.3125,-0.5625 0,-0.875 l 1.4375,-1.390625 c 0.269531,-0.300781 0.554687,-0.300781 0.859375,0 l 2.3125,2.3125 5.390625,-5.328125 c 0.300781,-0.269531 0.585937,-0.253906 0.859375,0.04687 z m 0,0"
+           id="path56" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph4-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path59" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph4-1">
+        <path
+           style="stroke:none"
+           d="m 23.25,-20.921875 c -0.15625,-0.132813 -0.335938,-0.238281 -0.53125,-0.3125 -0.199219,-0.08203 -0.398438,-0.125 -0.59375,-0.125 -0.02344,0 -0.04297,0 -0.0625,0 -0.01172,0 -0.02734,0 -0.04687,0 0,0 -0.01172,0.0078 -0.03125,0.01563 -0.01172,0.01172 -0.03125,0.01563 -0.0625,0.01563 -0.02344,0 -0.04687,0 -0.07813,0 -0.02344,0 -0.05469,0 -0.09375,0 -0.04297,0 -0.08984,0 -0.140625,0 -0.04297,0 -0.08984,0 -0.140625,0 -0.04297,0 -0.08984,0 -0.140625,0 -1.230469,0 -2.324219,-0.117187 -3.28125,-0.359375 -0.5,-0.113281 -1.03125,-0.347656 -1.59375,-0.703125 -0.5625,-0.363281 -1.105469,-0.765625 -1.625,-1.203125 -0.523437,-0.4375 -0.808594,-0.671875 -0.859375,-0.703125 -0.273438,-0.1875 -0.574219,-0.28125 -0.90625,-0.28125 -0.167969,0 -0.328125,0.02344 -0.484375,0.0625 -0.15625,0.04297 -0.304687,0.117187 -0.4375,0.21875 0,0 -0.04297,0.04297 -0.125,0.125 -0.08594,0.08594 -0.199219,0.195313 -0.34375,0.328125 -0.148437,0.125 -0.3125,0.277344 -0.5,0.453125 -0.1875,0.167969 -0.402344,0.335937 -0.640625,0.5 -0.242188,0.167969 -0.484375,0.328125 -0.734375,0.484375 -0.25,0.15625 -0.515625,0.296875 -0.796875,0.421875 -0.28125,0.125 -0.558594,0.226563 -0.828125,0.296875 -0.960937,0.242188 -2.0625,0.359375 -3.3125,0.359375 -0.0625,0 -0.136719,0 -0.21875,0 -0.074219,0 -0.136719,0 -0.1875,0 -0.054687,0 -0.101563,0 -0.140625,0 -0.042969,0 -0.074219,-0.0039 -0.09375,-0.01563 -0.011719,-0.0078 -0.027344,-0.01563 -0.046875,-0.01563 -0.023437,0 -0.042969,0 -0.0625,0 -0.011719,0 -0.023437,0 -0.03125,0 -0.210937,0 -0.414063,0.04297 -0.609375,0.125 -0.199219,0.07422 -0.375,0.1875 -0.53125,0.34375 -0.335938,0.324219 -0.5,0.714844 -0.5,1.171875 v 4.109375 c 0,2.0625 0.1875,3.96875 0.5625,5.71875 0.375,1.742187 0.835938,3.179687 1.390625,4.3125 C 4.941406,-4.441406 5.601562,-3.414062 6.375,-2.5 c 0.769531,0.917969 1.476562,1.609375 2.125,2.078125 0.65625,0.46875 1.335938,0.875 2.046875,1.21875 0.707031,0.34375 1.207031,0.550781 1.5,0.625 0.289063,0.070313 0.53125,0.128906 0.71875,0.171875 0.05078,0.00781 0.09766,0.015625 0.140625,0.015625 0.05078,0 0.101562,0 0.15625,0 0.09375,0 0.1875,-0.00781 0.28125,-0.015625 C 13.46875,1.570312 13.625,1.535156 13.8125,1.484375 14,1.429688 14.335938,1.3125 14.828125,1.125 15.316406,0.9375 15.789062,0.71875 16.25,0.46875 16.707031,0.226562 17.242188,-0.128906 17.859375,-0.609375 18.472656,-1.085938 19.039062,-1.625 19.5625,-2.21875 20.082031,-2.8125 20.609375,-3.550781 21.140625,-4.4375 21.671875,-5.320312 22.125,-6.285156 22.5,-7.328125 c 0.375,-1.039063 0.675781,-2.273437 0.90625,-3.703125 0.238281,-1.425781 0.359375,-2.953125 0.359375,-4.578125 v -4.109375 c 0,-0.476562 -0.171875,-0.878906 -0.515625,-1.203125 z m -1.125,5.3125 c 0,6.105469 -1.640625,10.574219 -4.921875,13.40625 -1.386719,1.15625 -2.765625,1.882813 -4.140625,2.171875 -0.136719,-0.0078125 -0.3125,-0.046875 -0.53125,-0.109375 -0.210938,-0.0625 -0.625,-0.238281 -1.25,-0.53125 C 10.65625,-0.972656 10.0625,-1.332031 9.5,-1.75 8.9375,-2.175781 8.304688,-2.796875 7.609375,-3.609375 c -0.6875,-0.820313 -1.28125,-1.75 -1.78125,-2.78125 -0.492187,-1.039063 -0.90625,-2.359375 -1.25,-3.953125 -0.335937,-1.59375 -0.5,-3.347656 -0.5,-5.265625 v -4.109375 c 0.00781,0 0.023437,0.0078 0.046875,0.01563 0.03125,0.01172 0.0625,0.01563 0.09375,0.01563 0.039062,0 0.082031,0 0.125,0 0.050781,0 0.101562,0 0.15625,0 0.050781,0 0.109375,0 0.171875,0 0.0625,0 0.125,0 0.1875,0 1.375,0 2.613281,-0.132812 3.71875,-0.40625 0.664063,-0.15625 1.367187,-0.472656 2.109375,-0.953125 0.75,-0.476563 1.335938,-0.914063 1.765625,-1.3125 L 13.0625,-22.9375 c 0.175781,0.167969 0.410156,0.386719 0.703125,0.65625 0.300781,0.261719 0.851563,0.652344 1.65625,1.171875 0.800781,0.523437 1.535156,0.859375 2.203125,1.015625 1.113281,0.273438 2.347656,0.40625 3.703125,0.40625 0.132813,0 0.269531,0 0.40625,0 0.132813,0 0.238281,-0.0078 0.3125,-0.03125 H 22.125 c 0,0.367188 0,1.734375 0,4.109375 z m -5.546875,-0.125 c -0.167969,-0.15625 -0.367187,-0.234375 -0.59375,-0.234375 -0.21875,0 -0.414063,0.07813 -0.578125,0.234375 l -2.3125,2.328125 -2.328125,-2.328125 c -0.15625,-0.15625 -0.351563,-0.234375 -0.578125,-0.234375 -0.230469,0 -0.421875,0.07813 -0.578125,0.234375 -0.105469,0.09375 -0.179687,0.214844 -0.21875,0.359375 -0.03125,0.148438 -0.03125,0.292969 0,0.4375 0.039063,0.136719 0.113281,0.25 0.21875,0.34375 L 11.9375,-12.25 9.609375,-9.921875 c -0.15625,0.15625 -0.234375,0.34375 -0.234375,0.5625 0,0.21875 0.078125,0.414063 0.234375,0.578125 0.15625,0.167969 0.347656,0.25 0.578125,0.25 0.226562,0 0.421875,-0.078125 0.578125,-0.234375 l 2.328125,-2.328125 2.3125,2.328125 c 0.164062,0.15625 0.359375,0.234375 0.578125,0.234375 0.226563,0 0.425781,-0.078125 0.59375,-0.234375 0.289063,-0.3125 0.332031,-0.644531 0.125,-1 -0.05469,-0.070313 -0.09375,-0.125 -0.125,-0.15625 L 14.25,-12.25 l 2.328125,-2.34375 c 0.101563,-0.09375 0.171875,-0.207031 0.203125,-0.34375 0.03906,-0.144531 0.03906,-0.289062 0,-0.4375 -0.03125,-0.144531 -0.101562,-0.265625 -0.203125,-0.359375 z m 0,0"
+           id="path62" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph5-0">
+        <path
+           style="stroke:none"
+           d="M 0.859375,0 V -17.484375 H 7.75 V 0 Z m 0.84375,-0.859375 h 5.1875 v -15.78125 h -5.1875 z m 0,0"
+           id="path65" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph5-1">
+        <path
+           style="stroke:none"
+           d="m 3.015625,-21.328125 c 0,-0.394531 0.140625,-0.765625 0.421875,-1.109375 0.289062,-0.351562 0.644531,-0.53125 1.0625,-0.53125 h 16.828125 c 0.457031,0 0.84375,0.164062 1.15625,0.484375 0.320313,0.3125 0.484375,0.699219 0.484375,1.15625 0,0.460937 -0.164062,0.851563 -0.484375,1.171875 -0.3125,0.3125 -0.699219,0.46875 -1.15625,0.46875 H 19.6875 v 4.625 c 3.101562,5.886719 4.921875,9.265625 5.453125,10.140625 C 25.878906,-3.722656 26.25,-2.5625 26.25,-1.4375 c 0,1.3554688 -0.449219,2.476562 -1.34375,3.375 H 24.8125 C 23.863281,2.832031 22.769531,3.28125 21.53125,3.28125 H 4.71875 C 3.363281,3.28125 2.238281,2.832031 1.34375,1.9375 0.445312,1.039062 0,-0.0820312 0,-1.4375 0,-2.5625 0.367188,-3.722656 1.109375,-4.921875 1.640625,-5.796875 3.457031,-9.175781 6.5625,-15.0625 v -4.625 H 4.921875 c -0.023437,0 -0.070313,0.0078 -0.140625,0.01563 -0.0625,0.01172 -0.105469,0.01563 -0.125,0.01563 -0.460938,0 -0.851562,-0.160156 -1.171875,-0.484375 -0.3125,-0.332031 -0.46875,-0.726563 -0.46875,-1.1875 z M 16.40625,-19.6875 h -6.5625 v 5.3125 l -0.203125,0.328125 C 8.265625,-11.359375 6.96875,-8.863281 5.75,-6.5625 H 20.515625 L 16.609375,-14.046875 16.40625,-14.375 Z m 0,0"
+           id="path68" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph6-0">
+        <path
+           style="stroke:none"
+           d="M 0.59375,0 V -11.984375 H 5.375 V 0 Z M 1.203125,-0.59375 H 4.78125 V -11.390625 H 1.203125 Z m 0,0"
+           id="path71" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph6-1">
+        <path
+           style="stroke:none"
+           d="M 10.65625,-7.34375 13.5,-13.5 7.34375,-10.65625 4.5,-4.5 Z m -6.953125,-6.9375 C 5.171875,-15.75 6.9375,-16.484375 9,-16.484375 c 2.0625,0 3.820312,0.734375 5.28125,2.203125 1.46875,1.460938 2.203125,3.21875 2.203125,5.28125 0,2.0625 -0.734375,3.828125 -2.203125,5.296875 -1.460938,1.460937 -3.21875,2.1875 -5.28125,2.1875 -2.0625,0 -3.828125,-0.726563 -5.296875,-2.1875 C 2.242188,-5.171875 1.515625,-6.9375 1.515625,-9 c 0,-2.0625 0.726563,-3.820312 2.1875,-5.28125 z m 4.71875,4.703125 C 8.578125,-9.734375 8.769531,-9.8125 9,-9.8125 c 0.238281,0 0.429688,0.078125 0.578125,0.234375 C 9.734375,-9.429688 9.8125,-9.238281 9.8125,-9 c 0,0.230469 -0.078125,0.421875 -0.234375,0.578125 C 9.429688,-8.265625 9.238281,-8.1875 9,-8.1875 8.769531,-8.1875 8.578125,-8.265625 8.421875,-8.421875 8.265625,-8.578125 8.1875,-8.769531 8.1875,-9 c 0,-0.238281 0.078125,-0.429688 0.234375,-0.578125 z m 0,0"
+           id="path74" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph7-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path77" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph7-1">
+        <path
+           style="stroke:none"
+           d="m 13.09375,-21.859375 c -5.335938,0 -8.0625,0.01563 -8.1875,0.04687 -0.125,0.02344 -0.257812,0.04687 -0.390625,0.07813 -0.136719,0.03125 -0.277344,0.08594 -0.421875,0.15625 -0.136719,0.07422 -0.289062,0.15625 -0.453125,0.25 -0.15625,0.09375 -0.324219,0.234375 -0.5,0.421875 -0.167969,0.1875 -0.296875,0.351562 -0.390625,0.484375 -0.085938,0.125 -0.164062,0.261719 -0.234375,0.40625 -0.0625,0.136719 -0.121094,0.273437 -0.171875,0.40625 -0.042969,0.136719 -0.078125,0.265625 -0.109375,0.390625 -0.023437,0.09375 -0.03125,0.445312 -0.03125,1.046875 l -0.03125,4.890625 c 0,3.792969 0.00781,5.777344 0.03125,5.953125 0.019531,0.179687 0.050781,0.355469 0.09375,0.53125 0.039063,0.179687 0.113281,0.371094 0.21875,0.578125 0.101563,0.210938 0.207031,0.382812 0.3125,0.515625 0.113281,0.125 0.242187,0.265625 0.390625,0.421875 0.144531,0.148438 0.28125,0.265625 0.40625,0.359375 0.132812,0.085937 0.28125,0.167969 0.4375,0.25 0.164062,0.074219 0.328125,0.132813 0.484375,0.171875 0.15625,0.042969 0.296875,0.074219 0.421875,0.09375 0.132812,0.011719 1.21875,0.015625 3.25,0.015625 l 3.015625,-0.015625 0.1875,-0.078125 c 0.132813,-0.070313 0.238281,-0.148437 0.3125,-0.234375 0.07031,-0.09375 0.132813,-0.191406 0.1875,-0.296875 C 11.972656,-5.117188 12,-5.25 12,-5.40625 c 0.0078,-0.15625 0,-0.28125 -0.03125,-0.375 -0.02344,-0.101562 -0.07031,-0.207031 -0.140625,-0.3125 -0.0625,-0.101562 -0.148437,-0.1875 -0.25,-0.25 -0.09375,-0.070312 -0.1875,-0.117188 -0.28125,-0.140625 -0.09375,-0.03125 -0.28125,-0.054687 -0.5625,-0.078125 H 8.25 c -1.929688,0 -2.945312,-0.00781 -3.046875,-0.03125 C 5.109375,-6.625 5.023438,-6.65625 4.953125,-6.6875 4.890625,-6.726562 4.820312,-6.78125 4.75,-6.84375 4.675781,-6.90625 4.613281,-6.972656 4.5625,-7.046875 4.507812,-7.128906 4.46875,-7.222656 4.4375,-7.328125 L 4.390625,-7.484375 4.40625,-18.875 4.484375,-19.03125 c 0.050781,-0.125 0.113281,-0.226562 0.1875,-0.3125 0.082031,-0.09375 0.164063,-0.160156 0.25,-0.203125 0.09375,-0.03906 0.175781,-0.06641 0.25,-0.07813 0.082031,-0.01953 0.570313,-0.03906 1.46875,-0.0625 H 13.125 c 5.164062,0 7.789062,0.01172 7.875,0.03125 0.08203,0.01172 0.164062,0.04297 0.25,0.09375 0.09375,0.04297 0.175781,0.09375 0.25,0.15625 0.07031,0.0625 0.132812,0.136719 0.1875,0.21875 0.05078,0.07422 0.09375,0.164062 0.125,0.265625 l 0.04687,0.15625 V -7.40625 l -0.09375,0.1875 c -0.05469,0.125 -0.109375,0.226562 -0.171875,0.296875 -0.0625,0.0625 -0.15625,0.136719 -0.28125,0.21875 -0.125,0.074219 -0.21875,0.152344 -0.28125,0.234375 -0.05469,0.074219 -0.105469,0.15625 -0.15625,0.25 -0.04297,0.085938 -0.0625,0.152344 -0.0625,0.203125 0,0.042969 0,0.132813 0,0.265625 0,0.125 0,0.210938 0,0.25 0,0.042969 0.02344,0.117188 0.07813,0.21875 0.05078,0.105469 0.117187,0.203125 0.203125,0.296875 0.09375,0.085937 0.195312,0.152344 0.3125,0.203125 0.113281,0.054688 0.242188,0.085938 0.390625,0.09375 0.15625,0.011719 0.285156,0 0.390625,-0.03125 0.113281,-0.039062 0.25,-0.109375 0.40625,-0.203125 0.164062,-0.09375 0.332031,-0.234375 0.5,-0.421875 0.175781,-0.1875 0.304688,-0.34375 0.390625,-0.46875 0.09375,-0.132812 0.171875,-0.269531 0.234375,-0.40625 0.07031,-0.144531 0.132812,-0.300781 0.1875,-0.46875 0.0625,-0.164062 0.101562,-0.304688 0.125,-0.421875 0.03125,-0.125 0.04687,-2.140625 0.04687,-6.046875 l -0.03125,-4.984375 c 0,-0.59375 -0.01172,-0.941406 -0.03125,-1.046875 -0.03125,-0.15625 -0.07422,-0.300781 -0.125,-0.4375 -0.04297,-0.144531 -0.105469,-0.300781 -0.1875,-0.46875 -0.08594,-0.164062 -0.183594,-0.3125 -0.296875,-0.4375 -0.105469,-0.132812 -0.230469,-0.273438 -0.375,-0.421875 -0.148438,-0.15625 -0.289062,-0.273437 -0.421875,-0.359375 -0.125,-0.09375 -0.25,-0.164062 -0.375,-0.21875 -0.125,-0.0625 -0.265625,-0.117188 -0.421875,-0.171875 -0.15625,-0.05078 -0.304688,-0.08594 -0.4375,-0.109375 -0.117188,-0.01953 -0.636719,-0.03516 -1.5625,-0.04687 z m 0,4.34375 c -4.4375,0 -6.703125,0.01563 -6.796875,0.04687 -0.085937,0.02344 -0.171875,0.05859 -0.265625,0.109375 -0.085938,0.04297 -0.167969,0.105469 -0.25,0.1875 -0.074219,0.07422 -0.136719,0.164063 -0.1875,0.265625 -0.054688,0.105469 -0.089844,0.214844 -0.109375,0.328125 -0.023437,0.117187 -0.023437,0.230469 0,0.34375 0.019531,0.117187 0.054687,0.226563 0.109375,0.328125 0.050781,0.105469 0.113281,0.199219 0.1875,0.28125 0.082031,0.07422 0.171875,0.136719 0.265625,0.1875 0.09375,0.05469 0.1875,0.08984 0.28125,0.109375 0.101563,0.02344 2.367187,0.03125 6.796875,0.03125 4.425781,0 6.6875,-0.0078 6.78125,-0.03125 0.101562,-0.01953 0.195312,-0.05078 0.28125,-0.09375 0.08203,-0.03906 0.164062,-0.101563 0.25,-0.1875 0.09375,-0.09375 0.164062,-0.191406 0.21875,-0.296875 0.05078,-0.101562 0.08594,-0.210938 0.109375,-0.328125 0.01953,-0.113281 0.01953,-0.226563 0,-0.34375 -0.02344,-0.113281 -0.05859,-0.222656 -0.109375,-0.328125 -0.05469,-0.101562 -0.125,-0.195312 -0.21875,-0.28125 -0.08594,-0.09375 -0.167969,-0.160156 -0.25,-0.203125 -0.08594,-0.03906 -0.179688,-0.07031 -0.28125,-0.09375 -0.09375,-0.01953 -2.367188,-0.03125 -6.8125,-0.03125 z m -4.90625,3.28125 c -1.15625,0 -1.78125,0.01563 -1.875,0.04687 -0.09375,0.02344 -0.1875,0.05859 -0.28125,0.109375 -0.085938,0.04297 -0.167969,0.105469 -0.25,0.1875 -0.074219,0.07422 -0.136719,0.164063 -0.1875,0.265625 -0.054688,0.105469 -0.089844,0.214844 -0.109375,0.328125 -0.023437,0.117187 -0.023437,0.230469 0,0.34375 0.019531,0.117187 0.054687,0.226563 0.109375,0.328125 0.050781,0.105469 0.113281,0.199219 0.1875,0.28125 0.082031,0.07422 0.171875,0.136719 0.265625,0.1875 0.09375,0.05469 0.1875,0.08984 0.28125,0.109375 0.101563,0.02344 0.726563,0.03125 1.875,0.03125 1.144531,0 1.765625,-0.0078 1.859375,-0.03125 0.101562,-0.01953 0.195312,-0.05078 0.28125,-0.09375 0.08203,-0.03906 0.164062,-0.101563 0.25,-0.1875 0.09375,-0.09375 0.164062,-0.191406 0.21875,-0.296875 0.05078,-0.101562 0.08594,-0.210938 0.109375,-0.328125 0.01953,-0.113281 0.01953,-0.226563 0,-0.34375 -0.02344,-0.113281 -0.05859,-0.222656 -0.109375,-0.328125 -0.05469,-0.101562 -0.125,-0.195312 -0.21875,-0.28125 -0.08594,-0.09375 -0.167969,-0.160156 -0.25,-0.203125 -0.08594,-0.03906 -0.179688,-0.07031 -0.28125,-0.09375 -0.09375,-0.01953 -0.71875,-0.03125 -1.875,-0.03125 z m 8.1875,0 c -0.136719,0 -0.28125,0.01172 -0.4375,0.03125 -0.148438,0.02344 -0.296875,0.05469 -0.453125,0.09375 -0.15625,0.03125 -0.3125,0.07422 -0.46875,0.125 -0.15625,0.05469 -0.328125,0.121094 -0.515625,0.203125 -0.179688,0.08594 -0.367188,0.1875 -0.5625,0.3125 -0.1875,0.125 -0.398438,0.308594 -0.625,0.546875 -0.230469,0.230469 -0.414062,0.449219 -0.546875,0.65625 -0.125,0.199219 -0.230469,0.375 -0.3125,0.53125 -0.07422,0.15625 -0.136719,0.320313 -0.1875,0.484375 -0.05469,0.167969 -0.101563,0.328125 -0.140625,0.484375 -0.03125,0.15625 -0.05859,0.351563 -0.07813,0.578125 -0.02344,0.230469 -0.02344,0.460938 0,0.6875 0.01953,0.230469 0.04687,0.421875 0.07813,0.578125 0.03906,0.15625 0.08594,0.320313 0.140625,0.484375 0.05078,0.167969 0.113281,0.328125 0.1875,0.484375 0.08203,0.15625 0.179687,0.320313 0.296875,0.484375 0.113281,0.167969 0.203125,0.292969 0.265625,0.375 L 13.125,-6.953125 v 4.609375 c 0.01953,0.25 0.03906,0.421875 0.0625,0.515625 0.03125,0.09375 0.07813,0.195313 0.140625,0.296875 0.07031,0.09375 0.160156,0.179688 0.265625,0.25 0.101562,0.0625 0.203125,0.109375 0.296875,0.140625 0.101563,0.023437 0.234375,0.03125 0.390625,0.03125 0.15625,-0.00781 0.273438,-0.03125 0.359375,-0.0625 0.09375,-0.039063 0.40625,-0.257813 0.9375,-0.65625 0.53125,-0.394531 0.804687,-0.59375 0.828125,-0.59375 0.01953,0 0.296875,0.199219 0.828125,0.59375 0.53125,0.398437 0.835937,0.617187 0.921875,0.65625 0.09375,0.03125 0.21875,0.054687 0.375,0.0625 0.15625,0 0.28125,-0.00781 0.375,-0.03125 0.101562,-0.03125 0.207031,-0.078125 0.3125,-0.140625 0.101562,-0.070312 0.1875,-0.15625 0.25,-0.25 0.07031,-0.101562 0.117188,-0.203125 0.140625,-0.296875 0.03125,-0.09375 0.05469,-0.265625 0.07813,-0.515625 v -4.609375 l 0.109375,-0.140625 c 0.0625,-0.0625 0.144531,-0.171875 0.25,-0.328125 0.113281,-0.164063 0.210937,-0.335937 0.296875,-0.515625 0.08203,-0.1875 0.148438,-0.359375 0.203125,-0.515625 0.05078,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.03906,-0.15625 0.07031,-0.347656 0.09375,-0.578125 0.01953,-0.226562 0.01953,-0.457031 0,-0.6875 -0.02344,-0.226562 -0.05469,-0.421875 -0.09375,-0.578125 -0.03125,-0.15625 -0.07422,-0.316406 -0.125,-0.484375 -0.05469,-0.164062 -0.121094,-0.328125 -0.203125,-0.484375 -0.07422,-0.15625 -0.179688,-0.332031 -0.3125,-0.53125 -0.125,-0.207031 -0.308594,-0.425781 -0.546875,-0.65625 -0.230469,-0.238281 -0.449219,-0.421875 -0.65625,-0.546875 -0.199219,-0.132812 -0.382813,-0.238281 -0.546875,-0.3125 -0.167969,-0.08203 -0.339844,-0.15625 -0.515625,-0.21875 -0.167969,-0.0625 -0.328125,-0.101562 -0.484375,-0.125 -0.148438,-0.03125 -0.296875,-0.05469 -0.453125,-0.07813 -0.15625,-0.01953 -0.308594,-0.03125 -0.453125,-0.03125 z m 0,2.21875 c -0.15625,0 -0.296875,0.01563 -0.421875,0.04687 -0.117187,0.02344 -0.242187,0.05859 -0.375,0.109375 -0.136719,0.05469 -0.257813,0.117187 -0.359375,0.1875 -0.105469,0.0625 -0.214844,0.148437 -0.328125,0.25 -0.117187,0.105469 -0.214844,0.226563 -0.296875,0.359375 -0.08594,0.125 -0.152344,0.257812 -0.203125,0.390625 -0.05469,0.136719 -0.09375,0.273437 -0.125,0.40625 -0.02344,0.125 -0.03125,0.265625 -0.03125,0.421875 0,0.15625 0.0078,0.304688 0.03125,0.4375 0.03125,0.125 0.07031,0.257812 0.125,0.390625 0.05078,0.136719 0.117187,0.273437 0.203125,0.40625 0.08203,0.125 0.179688,0.242187 0.296875,0.34375 0.113281,0.105469 0.222656,0.195313 0.328125,0.265625 0.101562,0.0625 0.222656,0.121094 0.359375,0.171875 0.132813,0.054687 0.269531,0.09375 0.40625,0.125 0.144531,0.023437 0.316406,0.03125 0.515625,0.03125 0.195312,-0.00781 0.347656,-0.023437 0.453125,-0.046875 0.101563,-0.03125 0.222656,-0.078125 0.359375,-0.140625 0.132812,-0.0625 0.253906,-0.128906 0.359375,-0.203125 0.113281,-0.082031 0.21875,-0.171875 0.3125,-0.265625 0.101563,-0.101563 0.179687,-0.195313 0.234375,-0.28125 0.05078,-0.082031 0.109375,-0.1875 0.171875,-0.3125 0.0625,-0.125 0.101563,-0.242187 0.125,-0.359375 0.03125,-0.125 0.04687,-0.3125 0.04687,-0.5625 0,-0.25 -0.01563,-0.429688 -0.04687,-0.546875 -0.02344,-0.125 -0.0625,-0.25 -0.125,-0.375 -0.0625,-0.125 -0.136719,-0.238281 -0.21875,-0.34375 -0.07422,-0.101563 -0.164063,-0.207031 -0.265625,-0.3125 -0.105469,-0.101563 -0.210938,-0.1875 -0.3125,-0.25 -0.105469,-0.07031 -0.226562,-0.132813 -0.359375,-0.1875 -0.136719,-0.05078 -0.273437,-0.08594 -0.40625,-0.109375 -0.125,-0.03125 -0.277344,-0.04687 -0.453125,-0.04687 z m -8.734375,1.0625 c -0.804687,0 -1.25,0.01563 -1.34375,0.04687 -0.085937,0.02344 -0.171875,0.05859 -0.265625,0.109375 -0.085938,0.04297 -0.167969,0.105469 -0.25,0.1875 -0.074219,0.07422 -0.136719,0.164063 -0.1875,0.265625 -0.054688,0.105469 -0.089844,0.214844 -0.109375,0.328125 -0.023437,0.117187 -0.023437,0.230469 0,0.34375 0.019531,0.117187 0.054687,0.226563 0.109375,0.328125 0.050781,0.105469 0.113281,0.199219 0.1875,0.28125 0.082031,0.074219 0.171875,0.136719 0.265625,0.1875 0.09375,0.054688 0.1875,0.089844 0.28125,0.109375 0.101563,0.023437 0.539063,0.03125 1.3125,0.03125 0.78125,0 1.21875,-0.00781 1.3125,-0.03125 0.101563,-0.019531 0.195313,-0.050781 0.28125,-0.09375 0.09375,-0.039063 0.1875,-0.109375 0.28125,-0.203125 0.09375,-0.101562 0.164063,-0.210938 0.21875,-0.328125 0.050781,-0.070313 0.078125,-0.132813 0.078125,-0.1875 0,-0.050781 0.00391,-0.140625 0.015625,-0.265625 0.00781,-0.125 0.00781,-0.210938 0,-0.265625 -0.011719,-0.05078 -0.042969,-0.113281 -0.09375,-0.1875 -0.054687,-0.113281 -0.125,-0.21875 -0.21875,-0.3125 -0.09375,-0.101563 -0.1875,-0.175781 -0.28125,-0.21875 -0.085937,-0.03906 -0.179687,-0.07031 -0.28125,-0.09375 -0.09375,-0.01953 -0.53125,-0.03125 -1.3125,-0.03125 z M 15.375,-5.59375 h -0.07813 v 0.578125 c 0,0.40625 0.0078,0.609375 0.03125,0.609375 0.01953,0 0.113281,-0.0625 0.28125,-0.1875 0.175781,-0.132812 0.316406,-0.21875 0.421875,-0.25 0.113281,-0.039062 0.238281,-0.0625 0.375,-0.0625 0.132812,0 0.253906,0.023438 0.359375,0.0625 0.113281,0.03125 0.253906,0.117188 0.421875,0.25 0.175781,0.125 0.273438,0.1875 0.296875,0.1875 0.01953,0 0.03125,-0.203125 0.03125,-0.609375 V -5.59375 l -0.40625,0.078125 c -0.15625,0.023437 -0.398437,0.03125 -0.71875,0.03125 -0.324219,0 -0.554687,-0.00781 -0.6875,-0.03125 z m 0,0"
+           id="path80" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph8-0">
+        <path
+           style="stroke:none"
+           d="M 0.875,0 V -17.5 H 7.84375 V 0 Z M 1.75,-0.875 h 5.21875 v -15.75 H 1.75 Z m 0,0"
+           id="path83" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph8-1">
+        <path
+           style="stroke:none"
+           d="m 0.015625,-11.828125 c 0,-1.363281 0.265625,-2.660156 0.796875,-3.890625 0.53125,-1.238281 1.242188,-2.300781 2.140625,-3.1875 0.894531,-0.894531 1.957031,-1.609375 3.1875,-2.140625 1.238281,-0.53125 2.53125,-0.796875 3.875,-0.796875 1.363281,0 2.660156,0.265625 3.890625,0.796875 1.238281,0.53125 2.300781,1.246094 3.1875,2.140625 0.894531,0.886719 1.609375,1.949219 2.140625,3.1875 0.53125,1.230469 0.796875,2.527344 0.796875,3.890625 0,2.210937 -0.65625,4.183594 -1.96875,5.921875 -1.3125,1.742188 -3,2.933594 -5.0625,3.578125 v 4.5 H 7.203125 V -2.28125 c -2.117187,-0.613281 -3.84375,-1.800781 -5.1875,-3.5625 -1.335937,-1.757812 -2,-3.753906 -2,-5.984375 z m 2.203125,0 c 0,2.117187 0.769531,3.933594 2.3125,5.453125 1.519531,1.53125 3.347656,2.296875 5.484375,2.296875 1.414063,0 2.722656,-0.34375 3.921875,-1.03125 1.195312,-0.695313 2.144531,-1.640625 2.84375,-2.828125 0.707031,-1.195312 1.0625,-2.492188 1.0625,-3.890625 0,-1.050781 -0.210938,-2.054687 -0.625,-3.015625 -0.417969,-0.96875 -0.976562,-1.796875 -1.671875,-2.484375 -0.699219,-0.695313 -1.53125,-1.253906 -2.5,-1.671875 -0.96875,-0.414062 -1.980469,-0.625 -3.03125,-0.625 C 8.972656,-19.625 7.96875,-19.414062 7,-19 c -0.960938,0.417969 -1.792969,0.976562 -2.5,1.671875 -0.699219,0.6875 -1.257812,1.515625 -1.671875,2.484375 -0.40625,0.960938 -0.609375,1.964844 -0.609375,3.015625 z m 0.796875,0.484375 v -0.984375 H 5.96875 v 0.984375 z M 4.5,-16.171875 5.21875,-16.875 7.296875,-14.796875 6.59375,-14.09375 Z M 7.953125,-9.4375 c 0,-0.570312 0.195313,-1.066406 0.59375,-1.484375 0.40625,-0.414063 0.894531,-0.632813 1.46875,-0.65625 l 3.71875,-6.140625 0.90625,0.484375 -2.765625,6.59375 c 0.238281,0.34375 0.359375,0.746094 0.359375,1.203125 0,0.605469 -0.210937,1.117188 -0.625,1.53125 C 11.191406,-7.5 10.6875,-7.296875 10.09375,-7.296875 9.5,-7.296875 8.992188,-7.5 8.578125,-7.90625 8.160156,-8.320312 7.953125,-8.832031 7.953125,-9.4375 Z M 9.75,-15.8125 v -2.96875 h 0.953125 v 2.96875 z m 4.015625,4.453125 V -12.375 h 2.96875 v 1.015625 z m 0,0"
+           id="path86" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph9-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path89" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph9-1">
+        <path
+           style="stroke:none"
+           d="m 4.90625,-23.015625 v 7.53125 l 11.546875,11.546875 7.4375,-7.53125 -11.46875,-11.546875 z m -1.578125,0 c 0,-0.40625 0.144531,-0.769531 0.4375,-1.09375 0.289063,-0.320313 0.671875,-0.484375 1.140625,-0.484375 h 7.515625 c 0.46875,0 0.847656,0.148438 1.140625,0.4375 l 11.546875,11.46875 c 0.289063,0.355469 0.4375,0.765625 0.4375,1.234375 0,0.460937 -0.148437,0.835937 -0.4375,1.125 l -7.515625,7.53125 c -0.355469,0.292969 -0.75,0.4375 -1.1875,0.4375 -0.4375,0 -0.835938,-0.144531 -1.1875,-0.4375 L 3.765625,-14.265625 c -0.292969,-0.34375 -0.46875,-0.75 -0.53125,-1.21875 v -7.53125 z m 5.6875,4.984375 c -0.242187,0 -0.433594,-0.08203 -0.578125,-0.25 -0.148438,-0.175781 -0.21875,-0.378906 -0.21875,-0.609375 0,-0.238281 0.070312,-0.429687 0.21875,-0.578125 0.144531,-0.144531 0.332031,-0.21875 0.5625,-0.21875 0.238281,0 0.445312,0.07422 0.625,0.21875 0.175781,0.148438 0.25,0.339844 0.21875,0.578125 -0.03125,0.230469 -0.121094,0.433594 -0.265625,0.609375 -0.148437,0.167969 -0.335937,0.25 -0.5625,0.25 z m 0,1.578125 c 0.695313,0.0625 1.28125,-0.148437 1.75,-0.640625 0.46875,-0.5 0.703125,-1.082031 0.703125,-1.75 0,-0.675781 -0.234375,-1.257812 -0.703125,-1.75 -0.46875,-0.5 -1.054687,-0.75 -1.75,-0.75 -0.699219,0 -1.28125,0.25 -1.75,0.75 -0.46875,0.492188 -0.703125,1.074219 -0.703125,1.75 0,0.667969 0.234375,1.234375 0.703125,1.703125 0.46875,0.460937 1.050781,0.6875 1.75,0.6875 z m -7.359375,1.84375 c 0,0.46875 0.144531,0.851563 0.4375,1.140625 l 12.25,12.25 -0.07813,0.078125 c -0.292969,0.292969 -0.671875,0.4375 -1.140625,0.4375 -0.46875,0 -0.851562,-0.144531 -1.140625,-0.4375 L 0.4375,-12.6875 C 0.144531,-12.976562 0,-13.359375 0,-13.828125 v -7.515625 c 0,-0.46875 0.160156,-0.863281 0.484375,-1.1875 0.320313,-0.320312 0.710937,-0.484375 1.171875,-0.484375 z m 0,0"
+           id="path92" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph10-0">
+        <path
+           style="stroke:none"
+           d="m 0.875,0 v -17.5 h 7 V 0 Z M 1.75,-0.875 H 7 v -15.75 H 1.75 Z m 0,0"
+           id="path95" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph10-1">
+        <path
+           style="stroke:none"
+           d="m 14.203125,-20.765625 c 0.695313,-1 1.492187,-1.757813 2.390625,-2.28125 0.894531,-0.53125 1.78125,-0.8125 2.65625,-0.84375 0.875,-0.03125 1.738281,0.121094 2.59375,0.453125 0.851562,0.324219 1.597656,0.792969 2.234375,1.40625 0.644531,0.605469 1.164063,1.339844 1.5625,2.203125 0.394531,0.855469 0.59375,1.746094 0.59375,2.671875 0,0.835938 -0.246094,1.695312 -0.734375,2.578125 -0.492188,0.886719 -1.179688,1.796875 -2.0625,2.734375 -0.886719,0.929688 -1.808594,1.855469 -2.765625,2.78125 -0.960937,0.929688 -2.054687,2.042969 -3.28125,3.34375 -1.230469,1.292969 -2.292969,2.558594 -3.1875,3.796875 -0.90625,-1.238281 -1.96875,-2.503906 -3.1875,-3.796875 -1.21875,-1.300781 -2.3125,-2.414062 -3.28125,-3.34375 -0.960937,-0.925781 -1.882813,-1.851562 -2.765625,-2.78125 -0.875,-0.9375 -1.558594,-1.847656 -2.046875,-2.734375 C 2.429688,-15.460938 2.1875,-16.320312 2.1875,-17.15625 c 0,-0.925781 0.203125,-1.816406 0.609375,-2.671875 0.40625,-0.863281 0.9375,-1.597656 1.59375,-2.203125 0.65625,-0.613281 1.414063,-1.082031 2.28125,-1.40625 0.875,-0.332031 1.742187,-0.484375 2.609375,-0.453125 0.875,0.03125 1.75,0.3125 2.625,0.84375 0.882812,0.53125 1.648438,1.292969 2.296875,2.28125 z m 0,0"
+           id="path98" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph11-0">
+        <path
+           style="stroke:none"
+           d=""
+           id="path101" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph11-1">
+        <path
+           style="stroke:none"
+           d="m 13.125,-24.0625 c 1.976562,0 3.816406,0.496094 5.515625,1.484375 1.644531,0.980469 2.957031,2.292969 3.9375,3.9375 0.988281,1.699219 1.484375,3.539063 1.484375,5.515625 0,1.980469 -0.496094,3.820312 -1.484375,5.515625 -0.980469,1.648437 -2.292969,2.960937 -3.9375,3.9375 -1.699219,0.992187 -3.539063,1.484375 -5.515625,1.484375 -1.980469,0 -3.820312,-0.492188 -5.515625,-1.484375 -1.648437,-0.976563 -2.960937,-2.289063 -3.9375,-3.9375 C 2.679688,-9.304688 2.1875,-11.144531 2.1875,-13.125 c 0,-1.976562 0.492188,-3.816406 1.484375,-5.515625 0.976563,-1.644531 2.289063,-2.957031 3.9375,-3.9375 1.695313,-0.988281 3.535156,-1.484375 5.515625,-1.484375 z m 0,2.1875 c -1.59375,0 -3.070312,0.402344 -4.421875,1.203125 -1.3125,0.773437 -2.355469,1.8125 -3.125,3.125 C 4.773438,-16.191406 4.375,-14.71875 4.375,-13.125 c 0,1.59375 0.398438,3.070312 1.203125,4.421875 0.769531,1.3125 1.8125,2.355469 3.125,3.125 1.351563,0.804687 2.828125,1.203125 4.421875,1.203125 1.59375,0 3.066406,-0.398438 4.421875,-1.203125 1.3125,-0.769531 2.351563,-1.8125 3.125,-3.125 0.800781,-1.351563 1.203125,-2.828125 1.203125,-4.421875 0,-1.59375 -0.402344,-3.066406 -1.203125,-4.421875 -0.773437,-1.3125 -1.8125,-2.351563 -3.125,-3.125 C 16.191406,-21.472656 14.71875,-21.875 13.125,-21.875 Z m 0,1.09375 c 1.09375,0 2.132812,0.21875 3.125,0.65625 l -1.703125,1.703125 c -0.46875,-0.113281 -0.945313,-0.171875 -1.421875,-0.171875 -0.992188,0 -1.90625,0.246094 -2.75,0.734375 -0.835938,0.492187 -1.496094,1.15625 -1.984375,2 -0.492187,0.835937 -0.734375,1.746094 -0.734375,2.734375 0,0.742188 0.140625,1.445312 0.421875,2.109375 C 8.367188,-10.347656 8.757812,-9.757812 9.25,-9.25 L 7.71875,-7.71875 7.546875,-7.890625 c -0.65625,-0.6875 -1.167969,-1.476563 -1.53125,-2.375 C 5.648438,-11.179688 5.46875,-12.132812 5.46875,-13.125 c 0,-1.382812 0.347656,-2.675781 1.046875,-3.875 0.675781,-1.144531 1.585937,-2.054688 2.734375,-2.734375 1.195312,-0.695313 2.488281,-1.046875 3.875,-1.046875 z m 7,4.53125 c 0.4375,0.992188 0.65625,2.03125 0.65625,3.125 0,1.03125 -0.203125,2.023438 -0.609375,2.96875 -0.386719,0.929688 -0.933594,1.746094 -1.640625,2.453125 L 17,-9.25 c 0.488281,-0.507812 0.875,-1.097656 1.15625,-1.765625 0.289062,-0.664063 0.4375,-1.367187 0.4375,-2.109375 0,-0.476562 -0.07031,-0.953125 -0.203125,-1.421875 z m -2.359375,-3.0625 1.546875,1.546875 -4.0625,4.078125 c 0.03906,0.1875 0.0625,0.375 0.0625,0.5625 0,0.59375 -0.21875,1.109375 -0.65625,1.546875 -0.429688,0.429687 -0.9375,0.640625 -1.53125,0.640625 -0.59375,0 -1.109375,-0.210938 -1.546875,-0.640625 -0.429687,-0.4375 -0.640625,-0.953125 -0.640625,-1.546875 0,-0.59375 0.210938,-1.101562 0.640625,-1.53125 0.4375,-0.4375 0.953125,-0.65625 1.546875,-0.65625 0.1875,0 0.375,0.02344 0.5625,0.0625 z m 0,0"
+           id="path104" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-0">
+        <path
+           style="stroke:none"
+           d="m 0.328125,0 v -6.65625 h 2.65625 V 0 Z M 0.65625,-0.328125 h 2 v -6 h -2 z m 0,0"
+           id="path107" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-1">
+        <path
+           style="stroke:none"
+           d="M 7.046875,-1.9375 C 6.835938,-1.257812 6.476562,-0.738281 5.96875,-0.375 5.707031,-0.207031 5.414062,-0.0820312 5.09375,0 4.78125,0.09375 4.429688,0.140625 4.046875,0.140625 3.578125,0.140625 3.132812,0.0625 2.71875,-0.09375 2.300781,-0.28125 1.941406,-0.519531 1.640625,-0.8125 1.273438,-1.1875 1,-1.601562 0.8125,-2.0625 0.644531,-2.539062 0.5625,-3.066406 0.5625,-3.640625 0.5625,-4.773438 0.882812,-5.6875 1.53125,-6.375 2.1875,-7.070312 3.050781,-7.421875 4.125,-7.421875 c 0.414062,0 0.84375,0.054687 1.28125,0.15625 0.425781,0.09375 0.90625,0.25 1.4375,0.46875 v 1.6875 H 6.296875 c -0.117187,-0.625 -0.355469,-1.070313 -0.71875,-1.34375 -0.355469,-0.300781 -0.867187,-0.453125 -1.53125,-0.453125 -0.78125,0 -1.371094,0.28125 -1.765625,0.84375 -0.398438,0.554688 -0.59375,1.359375 -0.59375,2.421875 0,1.0625 0.195312,1.875 0.59375,2.4375 0.195312,0.273437 0.441406,0.480469 0.734375,0.625 0.300781,0.136719 0.644531,0.203125 1.03125,0.203125 0.539063,0 0.992187,-0.128906 1.359375,-0.390625 0.351562,-0.269531 0.601562,-0.660156 0.75,-1.171875 z m 0,0"
+           id="path110" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-2">
+        <path
+           style="stroke:none"
+           d="m 5.515625,-2.59375 c 0,0.8125 -0.226563,1.476562 -0.671875,1.984375 -0.460938,0.5 -1.070312,0.75 -1.828125,0.75 -0.761719,0 -1.371094,-0.25 -1.828125,-0.75 -0.230469,-0.25 -0.402344,-0.539063 -0.515625,-0.875 C 0.554688,-1.816406 0.5,-2.1875 0.5,-2.59375 c 0,-0.832031 0.226562,-1.492188 0.6875,-1.984375 0.457031,-0.5 1.066406,-0.75 1.828125,-0.75 0.757813,0 1.367187,0.25 1.828125,0.75 0.445312,0.492187 0.671875,1.152344 0.671875,1.984375 z m -1.046875,0 c 0,-0.75 -0.125,-1.3125 -0.375,-1.6875 -0.25,-0.375 -0.617188,-0.5625 -1.09375,-0.5625 -0.46875,0 -0.828125,0.1875 -1.078125,0.5625 -0.25,0.375 -0.375,0.9375 -0.375,1.6875 0,0.742188 0.125,1.296875 0.375,1.671875 0.25,0.386719 0.613281,0.578125 1.09375,0.578125 0.46875,0 0.828125,-0.1875 1.078125,-0.5625 0.25,-0.375 0.375,-0.9375 0.375,-1.6875 z m 0,0"
+           id="path113" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-3">
+        <path
+           style="stroke:none"
+           d="m 4.34375,-2.34375 v -0.5 c 0,-0.613281 -0.121094,-1.09375 -0.359375,-1.4375 -0.242187,-0.320312 -0.585937,-0.484375 -1.03125,-0.484375 -0.460937,0 -0.808594,0.183594 -1.046875,0.546875 -0.242188,0.367188 -0.359375,0.90625 -0.359375,1.625 0,0.699219 0.113281,1.234375 0.34375,1.609375 0.238281,0.375 0.59375,0.5625 1.0625,0.5625 0.445313,0 0.789063,-0.160156 1.03125,-0.484375 0.238281,-0.332031 0.359375,-0.8125 0.359375,-1.4375 z M 6.109375,0 H 4.34375 V -0.8125 C 4.175781,-0.476562 3.957031,-0.238281 3.6875,-0.09375 3.550781,-0.0195312 3.394531,0.0351562 3.21875,0.078125 3.050781,0.117188 2.867188,0.140625 2.671875,0.140625 2.023438,0.140625 1.5,-0.113281 1.09375,-0.625 0.695312,-1.125 0.5,-1.78125 0.5,-2.59375 c 0,-0.8125 0.195312,-1.472656 0.59375,-1.984375 0.414062,-0.5 0.941406,-0.75 1.578125,-0.75 0.394531,0 0.734375,0.078125 1.015625,0.234375 0.269531,0.148438 0.488281,0.386719 0.65625,0.71875 V -7.078125 H 3.5 V -7.59375 h 1.75 v 7.078125 h 0.859375 z m 0,0"
+           id="path116" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-4">
+        <path
+           style="stroke:none"
+           d="m 4.359375,-3.015625 c -0.023437,-0.601563 -0.148437,-1.0625 -0.375,-1.375 -0.242187,-0.300781 -0.585937,-0.453125 -1.03125,-0.453125 -0.417969,0 -0.742187,0.15625 -0.96875,0.46875 -0.242187,0.304688 -0.386719,0.757812 -0.4375,1.359375 z M 5.421875,-2.5 h -3.875 v 0.046875 c 0,0.699219 0.128906,1.226563 0.390625,1.578125 0.269531,0.355469 0.660156,0.53125 1.171875,0.53125 0.394531,0 0.71875,-0.101562 0.96875,-0.3125 0.25,-0.207031 0.425781,-0.507812 0.53125,-0.90625 h 0.71875 C 5.191406,-1 4.929688,-0.578125 4.546875,-0.296875 c -0.199219,0.15625 -0.429687,0.265625 -0.6875,0.328125 -0.25,0.070312 -0.53125,0.109375 -0.84375,0.109375 -0.761719,0 -1.371094,-0.25 -1.828125,-0.75 -0.230469,-0.25 -0.402344,-0.539063 -0.515625,-0.875 C 0.554688,-1.816406 0.5,-2.1875 0.5,-2.59375 c 0,-0.8125 0.226562,-1.472656 0.6875,-1.984375 0.445312,-0.5 1.035156,-0.75 1.765625,-0.75 0.789063,0 1.394531,0.246094 1.8125,0.734375 0.425781,0.480469 0.644531,1.179688 0.65625,2.09375 z m 0,0"
+           id="path119" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-5">
+        <path
+           style="stroke:none"
+           d="m 6.375,-5.234375 c 0,0.625 -0.214844,1.125 -0.640625,1.5 C 5.285156,-3.367188 4.707031,-3.1875 4,-3.1875 H 2.46875 v 2.671875 h 1.125 V 0 H 0.546875 v -0.515625 h 0.9375 v -6.25 h -0.9375 v -0.53125 H 4 c 0.707031,0 1.285156,0.1875 1.734375,0.5625 0.425781,0.375 0.640625,0.875 0.640625,1.5 z m -1.125,0 c 0,-0.5 -0.125,-0.878906 -0.375,-1.140625 C 4.625,-6.632812 4.253906,-6.765625 3.765625,-6.765625 H 2.46875 v 3.0625 H 3.765625 C 4.253906,-3.703125 4.625,-3.832031 4.875,-4.09375 5.125,-4.375 5.25,-4.753906 5.25,-5.234375 Z m 0,0"
+           id="path122" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-6">
+        <path
+           style="stroke:none"
+           d="M 6.15625,0 H 3.6875 v -0.515625 h 0.765625 v -2.5 c 0,-0.632813 -0.078125,-1.066406 -0.234375,-1.296875 -0.148438,-0.25 -0.417969,-0.375 -0.8125,-0.375 -0.417969,0 -0.734375,0.15625 -0.953125,0.46875 C 2.234375,-3.914062 2.125,-3.472656 2.125,-2.890625 v 2.375 H 2.90625 V 0 h -2.5 v -0.515625 h 0.8125 v -4.15625 H 0.359375 V -5.1875 H 2.125 v 0.921875 C 2.289062,-4.628906 2.503906,-4.894531 2.765625,-5.0625 3.023438,-5.238281 3.332031,-5.328125 3.6875,-5.328125 c 0.582031,0 1.003906,0.164063 1.265625,0.484375 0.269531,0.34375 0.40625,0.859375 0.40625,1.546875 v 2.78125 H 6.15625 Z m 0,0"
+           id="path125" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-7">
+        <path
+           style="stroke:none"
+           d=""
+           id="path128" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-8">
+        <path
+           style="stroke:none"
+           d="m 6.375,-6.328125 c 0.707031,0.636719 1.0625,1.527344 1.0625,2.671875 0,1.148438 -0.355469,2.046875 -1.0625,2.703125 -0.136719,0.125 -0.289062,0.242187 -0.453125,0.34375 C 5.765625,-0.503906 5.59375,-0.414062 5.40625,-0.34375 5.21875,-0.269531 5.019531,-0.207031 4.8125,-0.15625 4.613281,-0.101562 4.398438,-0.0625 4.171875,-0.03125 3.941406,-0.0078125 3.703125,0 3.453125,0 h -2.90625 v -0.515625 h 0.9375 v -6.25 h -0.9375 v -0.53125 h 2.90625 c 1.25,0 2.222656,0.324219 2.921875,0.96875 z m -0.8125,5 c 0.5,-0.53125 0.75,-1.300781 0.75,-2.3125 0,-1.019531 -0.25,-1.789063 -0.75,-2.3125 -0.511719,-0.539063 -1.242188,-0.8125 -2.1875,-0.8125 H 2.46875 v 6.25 H 3.375 c 0.945312,0 1.675781,-0.269531 2.1875,-0.8125 z m 0,0"
+           id="path131" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-9">
+        <path
+           style="stroke:none"
+           d="M 9.203125,0 H 6.71875 V -0.515625 H 7.5 v -2.6875 c 0,-0.53125 -0.078125,-0.910156 -0.234375,-1.140625 -0.148437,-0.21875 -0.40625,-0.328125 -0.78125,-0.328125 -0.40625,0 -0.710937,0.152344 -0.90625,0.453125 -0.210937,0.304688 -0.3125,0.746094 -0.3125,1.328125 v 2.375 h 0.78125 V 0 h -2.46875 v -0.515625 h 0.78125 v -2.71875 C 4.359375,-3.753906 4.28125,-4.125 4.125,-4.34375 3.976562,-4.5625 3.71875,-4.671875 3.34375,-4.671875 c -0.40625,0 -0.710938,0.152344 -0.90625,0.453125 -0.210938,0.304688 -0.3125,0.746094 -0.3125,1.328125 v 2.375 H 2.90625 V 0 h -2.5 v -0.515625 h 0.8125 V -4.6875 H 0.359375 v -0.5 H 2.125 v 0.921875 c 0.164062,-0.351563 0.378906,-0.617187 0.640625,-0.796875 0.25,-0.175781 0.535156,-0.265625 0.859375,-0.265625 0.40625,0 0.742188,0.101563 1.015625,0.296875 0.269531,0.199219 0.453125,0.480469 0.546875,0.84375 0.164062,-0.363281 0.382812,-0.648438 0.65625,-0.859375 0.28125,-0.1875 0.59375,-0.28125 0.9375,-0.28125 0.539062,0 0.945312,0.171875 1.21875,0.515625 0.269531,0.324219 0.40625,0.828125 0.40625,1.515625 v 2.78125 h 0.796875 z m 0,0"
+           id="path134" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-10">
+        <path
+           style="stroke:none"
+           d="M 6.15625,0 H 3.6875 v -0.515625 h 0.765625 v -2.5 C 4.453125,-3.648438 4.375,-4.082031 4.21875,-4.3125 4.0625,-4.550781 3.789062,-4.671875 3.40625,-4.671875 c -0.417969,0 -0.734375,0.152344 -0.953125,0.453125 C 2.234375,-3.914062 2.125,-3.472656 2.125,-2.890625 v 2.375 H 2.90625 V 0 h -2.5 v -0.515625 h 0.8125 v -6.5625 H 0.359375 V -7.59375 H 2.125 v 3.328125 C 2.289062,-4.628906 2.503906,-4.894531 2.765625,-5.0625 3.023438,-5.238281 3.332031,-5.328125 3.6875,-5.328125 c 0.582031,0 1.003906,0.164063 1.265625,0.484375 0.269531,0.34375 0.40625,0.859375 0.40625,1.546875 v 2.78125 H 6.15625 Z m 0,0"
+           id="path137" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-11">
+        <path
+           style="stroke:none"
+           d="M 3.9375,-1.21875 C 3.914062,-0.75 3.789062,-0.40625 3.5625,-0.1875 3.3125,0.03125 2.957031,0.140625 2.5,0.140625 1.976562,0.140625 1.613281,0.0234375 1.40625,-0.203125 1.1875,-0.441406 1.078125,-0.832031 1.078125,-1.375 V -4.671875 H 0.296875 V -5.1875 h 0.78125 v -1.609375 h 0.90625 V -5.1875 h 1.6875 v 0.515625 h -1.6875 V -1.375 c 0,0.449219 0.039063,0.734375 0.125,0.859375 0.082031,0.117187 0.238281,0.171875 0.46875,0.171875 0.226563,0 0.398437,-0.066406 0.515625,-0.203125 C 3.1875,-0.679688 3.242188,-0.90625 3.265625,-1.21875 Z m 0,0"
+           id="path140" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-12">
+        <path
+           style="stroke:none"
+           d="m 5.296875,-4.578125 c 0.40625,0.511719 0.609375,1.171875 0.609375,1.984375 0,0.8125 -0.203125,1.46875 -0.609375,1.96875 -0.136719,0.167969 -0.289063,0.308594 -0.453125,0.421875 -0.15625,0.1171875 -0.328125,0.19921875 -0.515625,0.25 -0.1875,0.0625 -0.386719,0.09375 -0.59375,0.09375 C 3.328125,0.140625 2.988281,0.0625 2.71875,-0.09375 2.4375,-0.238281 2.210938,-0.476562 2.046875,-0.8125 v 2.375 H 2.90625 V 2.078125 H 0.296875 V 1.5625 H 1.15625 V -4.671875 H 0.296875 V -5.1875 h 1.75 V -4.375 C 2.210938,-4.707031 2.4375,-4.945312 2.71875,-5.09375 2.988281,-5.25 3.328125,-5.328125 3.734375,-5.328125 c 0.632813,0 1.15625,0.25 1.5625,0.75 z M 4.5,-0.96875 c 0.226562,-0.375 0.34375,-0.914062 0.34375,-1.625 0,-0.71875 -0.117188,-1.257812 -0.34375,-1.625 -0.242188,-0.363281 -0.589844,-0.546875 -1.046875,-0.546875 -0.449219,0 -0.796875,0.164063 -1.046875,0.484375 -0.242188,0.34375 -0.359375,0.824219 -0.359375,1.4375 v 0.5 c 0,0.625 0.117187,1.105469 0.359375,1.4375 0.238281,0.324219 0.585938,0.484375 1.046875,0.484375 0.457031,0 0.804687,-0.179687 1.046875,-0.546875 z m 0,0"
+           id="path143" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-13">
+        <path
+           style="stroke:none"
+           d="m 4.625,-1.4375 c 0,0.492188 -0.1875,0.875 -0.5625,1.15625 C 3.675781,0 3.15625,0.140625 2.5,0.140625 2.175781,0.140625 1.847656,0.101562 1.515625,0.03125 1.210938,-0.03125 0.894531,-0.140625 0.5625,-0.296875 V -1.5 h 0.515625 c 0.00781,0.375 0.128906,0.667969 0.359375,0.875 0.25,0.1875 0.585938,0.28125 1.015625,0.28125 0.40625,0 0.710937,-0.070312 0.921875,-0.21875 0.21875,-0.15625 0.328125,-0.378906 0.328125,-0.671875 0,-0.21875 -0.078125,-0.398437 -0.234375,-0.546875 C 3.320312,-1.914062 2.992188,-2.066406 2.484375,-2.234375 L 1.84375,-2.453125 C 1.40625,-2.585938 1.082031,-2.765625 0.875,-2.984375 0.664062,-3.203125 0.5625,-3.476562 0.5625,-3.8125 c 0,-0.488281 0.175781,-0.859375 0.53125,-1.109375 0.332031,-0.269531 0.816406,-0.40625 1.453125,-0.40625 0.289063,0 0.578125,0.039063 0.859375,0.109375 0.269531,0.054688 0.582031,0.15625 0.9375,0.3125 v 1.125 H 3.8125 C 3.800781,-4.125 3.6875,-4.382812 3.46875,-4.5625 3.257812,-4.75 2.957031,-4.84375 2.5625,-4.84375 c -0.375,0 -0.664062,0.070312 -0.859375,0.203125 -0.1875,0.125 -0.28125,0.324219 -0.28125,0.59375 0,0.210937 0.070313,0.386719 0.21875,0.53125 0.164063,0.136719 0.457031,0.265625 0.875,0.390625 l 0.71875,0.21875 c 0.5,0.15625 0.851563,0.355469 1.0625,0.59375 0.21875,0.21875 0.328125,0.511719 0.328125,0.875 z m 0,0"
+           id="path146" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-14">
+        <path
+           style="stroke:none"
+           d="m 2.15625,-4.15625 c 0.125,0.136719 0.1875,0.292969 0.1875,0.46875 0,0.179688 -0.0625,0.335938 -0.1875,0.46875 -0.125,0.117188 -0.28125,0.171875 -0.46875,0.171875 -0.179688,0 -0.328125,-0.0625 -0.453125,-0.1875 -0.125,-0.125 -0.1875,-0.273437 -0.1875,-0.453125 0,-0.175781 0.0625,-0.328125 0.1875,-0.453125 0.125,-0.132813 0.273437,-0.203125 0.453125,-0.203125 0.175781,0 0.332031,0.0625 0.46875,0.1875 z m -0.015625,3.1875 c 0.132813,0.125 0.203125,0.28125 0.203125,0.46875 0,0.179688 -0.0625,0.328125 -0.1875,0.453125 C 2.09375,0.015625 2.019531,0.0625 1.9375,0.09375 1.863281,0.125 1.78125,0.140625 1.6875,0.140625 1.5,0.140625 1.34375,0.078125 1.21875,-0.046875 1.101562,-0.171875 1.046875,-0.320312 1.046875,-0.5 c 0,-0.1875 0.0625,-0.34375 0.1875,-0.46875 0.125,-0.125 0.273437,-0.1875 0.453125,-0.1875 0.175781,0 0.328125,0.0625 0.453125,0.1875 z m 0,0"
+           id="path149" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-15">
+        <path
+           style="stroke:none"
+           d="M 3.71875,-6.96875 1.453125,1.46875 H 0.796875 L 3.0625,-6.96875 Z m 0,0"
+           id="path152" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-16">
+        <path
+           style="stroke:none"
+           d="M 5.140625,-1.5625 C 5.003906,-0.988281 4.757812,-0.566406 4.40625,-0.296875 4.226562,-0.148438 4.019531,-0.0390625 3.78125,0.03125 3.550781,0.101562 3.296875,0.140625 3.015625,0.140625 c -0.761719,0 -1.371094,-0.25 -1.828125,-0.75 -0.230469,-0.25 -0.402344,-0.539063 -0.515625,-0.875 C 0.554688,-1.816406 0.5,-2.1875 0.5,-2.59375 c 0,-0.84375 0.226562,-1.507812 0.6875,-2 0.457031,-0.488281 1.066406,-0.734375 1.828125,-0.734375 0.300781,0 0.625,0.039063 0.96875,0.109375 0.300781,0.074219 0.628906,0.1875 0.984375,0.34375 v 1.328125 H 4.453125 C 4.378906,-3.984375 4.226562,-4.316406 4,-4.546875 3.757812,-4.742188 3.429688,-4.84375 3.015625,-4.84375 c -0.480469,0 -0.84375,0.1875 -1.09375,0.5625 -0.25,0.367188 -0.375,0.929688 -0.375,1.6875 0,0.75 0.125,1.3125 0.375,1.6875 0.25,0.375 0.613281,0.5625 1.09375,0.5625 0.394531,0 0.703125,-0.097656 0.921875,-0.296875 0.226562,-0.195313 0.390625,-0.503906 0.484375,-0.921875 z m 0,0"
+           id="path155" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-17">
+        <path
+           style="stroke:none"
+           d="m 2.046875,-0.96875 c 0.125,0.125 0.1875,0.28125 0.1875,0.46875 0,0.179688 -0.0625,0.328125 -0.1875,0.453125 C 1.984375,0.015625 1.914062,0.0625 1.84375,0.09375 1.769531,0.125 1.6875,0.140625 1.59375,0.140625 1.40625,0.140625 1.25,0.078125 1.125,-0.046875 1,-0.171875 0.9375,-0.320312 0.9375,-0.5 0.9375,-0.6875 1,-0.84375 1.125,-0.96875 c 0.125,-0.125 0.28125,-0.1875 0.46875,-0.1875 0.175781,0 0.328125,0.0625 0.453125,0.1875 z m 0,0"
+           id="path158" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-18">
+        <path
+           style="stroke:none"
+           d="M 2.96875,0 H 0.359375 V -0.515625 H 1.21875 v -4.15625 H 0.359375 V -5.1875 H 2.125 v 4.671875 H 2.96875 Z M 2.078125,-6.796875 c 0,0.15625 -0.054687,0.289063 -0.15625,0.390625 C 1.816406,-6.300781 1.6875,-6.25 1.53125,-6.25 1.375,-6.25 1.242188,-6.300781 1.140625,-6.40625 1.023438,-6.507812 0.96875,-6.640625 0.96875,-6.796875 c 0,-0.15625 0.054688,-0.285156 0.171875,-0.390625 0.101563,-0.113281 0.234375,-0.171875 0.390625,-0.171875 0.132812,0 0.265625,0.054687 0.390625,0.15625 0.101563,0.125 0.15625,0.261719 0.15625,0.40625 z m 0,0"
+           id="path161" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-19">
+        <path
+           style="stroke:none"
+           d="M 4.78125,-3.90625 H 4.265625 c -0.011719,-0.25 -0.085937,-0.441406 -0.21875,-0.578125 -0.125,-0.125 -0.3125,-0.1875 -0.5625,-0.1875 -0.449219,0 -0.78125,0.15625 -1,0.46875 -0.242187,0.3125 -0.359375,0.75 -0.359375,1.3125 v 2.375 H 3.15625 V 0 h -2.75 v -0.515625 h 0.8125 V -4.6875 H 0.359375 v -0.5 H 2.125 v 0.921875 C 2.289062,-4.628906 2.515625,-4.894531 2.796875,-5.0625 3.066406,-5.238281 3.40625,-5.328125 3.8125,-5.328125 c 0.144531,0 0.296875,0.011719 0.453125,0.03125 l 0.515625,0.09375 z m 0,0"
+           id="path164" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-20">
+        <path
+           style="stroke:none"
+           d="M 5.6875,0 H 3.984375 v -0.5625 c -0.210937,0.25 -0.4375,0.429688 -0.6875,0.53125 -0.136719,0.0507812 -0.28125,0.09375 -0.4375,0.125 C 2.710938,0.125 2.550781,0.140625 2.375,0.140625 1.800781,0.140625 1.347656,-0.0078125 1.015625,-0.3125 0.671875,-0.625 0.5,-1.039062 0.5,-1.5625 0.5,-2.101562 0.691406,-2.519531 1.078125,-2.8125 1.472656,-3.101562 2.019531,-3.25 2.71875,-3.25 h 1.265625 v -0.359375 c 0,-0.394531 -0.121094,-0.695313 -0.359375,-0.90625 -0.242188,-0.21875 -0.578125,-0.328125 -1.015625,-0.328125 -0.375,0 -0.65625,0.085938 -0.84375,0.25 -0.21875,0.15625 -0.355469,0.398438 -0.40625,0.71875 H 0.90625 V -4.9375 C 1.195312,-5.0625 1.5,-5.160156 1.8125,-5.234375 c 0.269531,-0.0625 0.554688,-0.09375 0.859375,-0.09375 0.707031,0 1.253906,0.179687 1.640625,0.53125 0.375,0.355469 0.5625,0.875 0.5625,1.5625 v 2.71875 H 5.6875 Z M 3.984375,-1.625 V -2.734375 H 2.8125 c -0.4375,0 -0.773438,0.101563 -1,0.296875 C 1.601562,-2.25 1.5,-1.957031 1.5,-1.5625 c 0,0.367188 0.109375,0.652344 0.328125,0.859375 0.226563,0.21875 0.53125,0.328125 0.90625,0.328125 0.363281,0 0.664063,-0.113281 0.90625,-0.34375 0.226563,-0.25 0.34375,-0.550781 0.34375,-0.90625 z m 0,0"
+           id="path167" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-21">
+        <path
+           style="stroke:none"
+           d="M 2.90625,0 H 0.296875 V -0.515625 H 1.15625 v -6.5625 H 0.296875 V -7.59375 h 1.75 v 7.078125 H 2.90625 Z m 0,0"
+           id="path170" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-22">
+        <path
+           style="stroke:none"
+           d="m 4.5,-0.96875 c 0.226562,-0.375 0.34375,-0.914062 0.34375,-1.625 0,-0.71875 -0.117188,-1.257812 -0.34375,-1.625 -0.242188,-0.363281 -0.589844,-0.546875 -1.046875,-0.546875 -0.449219,0 -0.796875,0.164063 -1.046875,0.484375 -0.242188,0.34375 -0.359375,0.824219 -0.359375,1.4375 v 0.5 c 0,0.625 0.117187,1.105469 0.359375,1.4375 0.238281,0.324219 0.585938,0.484375 1.046875,0.484375 0.457031,0 0.804687,-0.179687 1.046875,-0.546875 z m 0.796875,-3.609375 c 0.40625,0.511719 0.609375,1.171875 0.609375,1.984375 0,0.8125 -0.203125,1.46875 -0.609375,1.96875 -0.136719,0.167969 -0.289063,0.308594 -0.453125,0.421875 -0.15625,0.1171875 -0.328125,0.19921875 -0.515625,0.25 -0.1875,0.0625 -0.386719,0.09375 -0.59375,0.09375 C 3.328125,0.140625 2.988281,0.0625 2.71875,-0.09375 2.4375,-0.238281 2.210938,-0.476562 2.046875,-0.8125 V 0 h -1.75 V -0.515625 H 1.15625 v -6.5625 H 0.296875 V -7.59375 h 1.75 V -4.375 C 2.210938,-4.707031 2.4375,-4.945312 2.71875,-5.09375 2.988281,-5.25 3.328125,-5.328125 3.734375,-5.328125 c 0.632813,0 1.15625,0.25 1.5625,0.75 z m 0,0"
+           id="path173" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-23">
+        <path
+           style="stroke:none"
+           d="M 5.515625,0 H 3.125 V -0.515625 H 3.78125 L 2.65625,-2.0625 1.515625,-0.515625 H 2.1875 V 0 H 0.21875 v -0.515625 h 0.6875 l 1.4375,-1.96875 -1.578125,-2.1875 H 0.125 V -5.1875 h 2.3125 v 0.515625 h -0.625 l 1.09375,1.5 1.09375,-1.5 H 3.296875 V -5.1875 h 2 v 0.515625 h -0.6875 L 3.21875,-2.75 l 1.625,2.234375 h 0.671875 z m 0,0"
+           id="path176" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-24">
+        <path
+           style="stroke:none"
+           d="M 4.875,-5.484375 C 4.875,-4.878906 4.695312,-4.382812 4.34375,-4 3.976562,-3.625 3.429688,-3.351562 2.703125,-3.1875 v 1.25 h -0.59375 v -1.609375 c 0.570313,-0.132813 1.003906,-0.363281 1.296875,-0.6875 0.289062,-0.351563 0.4375,-0.773437 0.4375,-1.265625 0,-0.445312 -0.121094,-0.800781 -0.359375,-1.0625 -0.242187,-0.25 -0.5625,-0.375 -0.96875,-0.375 -0.367187,0 -0.671875,0.105469 -0.921875,0.3125 -0.21875,0.210938 -0.367188,0.515625 -0.4375,0.921875 H 0.6875 V -6.96875 c 0.375,-0.15625 0.695312,-0.269531 0.96875,-0.34375 0.332031,-0.070312 0.628906,-0.109375 0.890625,-0.109375 0.71875,0 1.285156,0.171875 1.703125,0.515625 0.414062,0.355469 0.625,0.828125 0.625,1.421875 z m -2,4.515625 C 3,-0.84375 3.0625,-0.6875 3.0625,-0.5 3.0625,-0.320312 3,-0.171875 2.875,-0.046875 2.800781,0.015625 2.726562,0.0625 2.65625,0.09375 2.582031,0.125 2.5,0.140625 2.40625,0.140625 c -0.1875,0 -0.34375,-0.0625 -0.46875,-0.1875 C 1.820312,-0.171875 1.765625,-0.320312 1.765625,-0.5 c 0,-0.1875 0.054687,-0.34375 0.171875,-0.46875 0.125,-0.125 0.28125,-0.1875 0.46875,-0.1875 0.1875,0 0.34375,0.0625 0.46875,0.1875 z m 0,0"
+           id="path179" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-25">
+        <path
+           style="stroke:none"
+           d="M 6.125,0 H 3.5625 v -0.515625 h 0.75 L 2.765625,-2.65625 2.046875,-1.984375 v 1.46875 h 0.8125 V 0 H 0.34375 v -0.515625 h 0.8125 v -6.5625 H 0.296875 V -7.59375 h 1.75 v 4.9375 l 2.1875,-2.015625 h -0.75 V -5.1875 H 5.84375 v 0.515625 H 4.953125 l -1.546875,1.4375 1.96875,2.71875 h 0.75 z m 0,0"
+           id="path182" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-26">
+        <path
+           style="stroke:none"
+           d="M 5.625,-4.671875 H 5.046875 L 2.65625,1.171875 C 2.507812,1.566406 2.332031,1.84375 2.125,2 1.925781,2.144531 1.644531,2.21875 1.28125,2.21875 1.101562,2.21875 0.945312,2.207031 0.8125,2.1875 0.59375,2.144531 0.425781,2.101562 0.3125,2.0625 V 1.078125 H 0.78125 C 0.800781,1.296875 0.859375,1.457031 0.953125,1.5625 1.046875,1.65625 1.1875,1.703125 1.375,1.703125 c 0.175781,0 0.320312,-0.054687 0.4375,-0.15625 0.113281,-0.117187 0.226562,-0.3125 0.34375,-0.59375 L 2.5,0.09375 0.5625,-4.671875 H -0.03125 V -5.1875 h 2.390625 v 0.515625 H 1.53125 l 1.453125,3.578125 1.46875,-3.578125 H 3.671875 V -5.1875 H 5.625 Z m 0,0"
+           id="path185" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-27">
+        <path
+           style="stroke:none"
+           d="M 4.9375,0 H 1.421875 V -0.515625 H 2.6875 v -6.0625 L 1.21875,-5.625 V -6.265625 L 3,-7.421875 h 0.671875 v 6.90625 H 4.9375 Z m 0,0"
+           id="path188" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-28">
+        <path
+           style="stroke:none"
+           d="m 5.734375,-2.296875 c 0,0.730469 -0.230469,1.324219 -0.6875,1.78125 -0.148437,0.148437 -0.3125,0.265625 -0.5,0.359375 C 4.359375,-0.0625 4.15625,0.0078125 3.9375,0.0625 3.71875,0.113281 3.484375,0.140625 3.234375,0.140625 c -0.835937,0 -1.46875,-0.304687 -1.90625,-0.921875 -0.4375,-0.613281 -0.65625,-1.488281 -0.65625,-2.625 0,-1.28125 0.257813,-2.269531 0.78125,-2.96875 0.519531,-0.695312 1.257813,-1.046875 2.21875,-1.046875 0.28125,0 0.550781,0.027344 0.8125,0.078125 0.300781,0.054688 0.585937,0.125 0.859375,0.21875 v 1.1875 H 4.796875 c -0.042969,-0.332031 -0.167969,-0.582031 -0.375,-0.75 -0.210937,-0.164062 -0.496094,-0.25 -0.859375,-0.25 -0.636719,0 -1.105469,0.242188 -1.40625,0.71875 C 1.851562,-5.75 1.695312,-5.015625 1.6875,-4.015625 1.894531,-4.253906 2.144531,-4.4375 2.4375,-4.5625 2.707031,-4.675781 3.019531,-4.734375 3.375,-4.734375 c 0.726562,0 1.300781,0.21875 1.71875,0.65625 0.425781,0.429687 0.640625,1.023437 0.640625,1.78125 z m -1.40625,1.453125 c 0.25,-0.332031 0.375,-0.816406 0.375,-1.453125 0,-0.644531 -0.125,-1.132813 -0.375,-1.46875 -0.25,-0.332031 -0.605469,-0.5 -1.0625,-0.5 -0.46875,0 -0.824219,0.167969 -1.0625,0.5 -0.242187,0.324219 -0.359375,0.792969 -0.359375,1.40625 0,0.648437 0.117188,1.148437 0.359375,1.5 0.257813,0.34375 0.613281,0.515625 1.0625,0.515625 0.457031,0 0.8125,-0.164062 1.0625,-0.5 z m 0,0"
+           id="path191" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-29">
+        <path
+           style="stroke:none"
+           d="m 5.625,-1.96875 c 0,0.679688 -0.230469,1.199219 -0.6875,1.5625 -0.460938,0.3671875 -1.121094,0.546875 -1.984375,0.546875 -0.367187,0 -0.734375,-0.0429688 -1.109375,-0.125 C 1.46875,-0.0546875 1.109375,-0.175781 0.765625,-0.34375 V -1.765625 H 1.3125 c 0.019531,0.460937 0.175781,0.8125 0.46875,1.0625 0.289062,0.242187 0.691406,0.359375 1.203125,0.359375 0.5,0 0.890625,-0.144531 1.171875,-0.4375 0.289062,-0.28125 0.4375,-0.671875 0.4375,-1.171875 0,-0.570313 -0.152344,-1.007813 -0.453125,-1.3125 -0.292969,-0.289063 -0.726563,-0.4375 -1.296875,-0.4375 H 2.375 v -0.5 h 0.25 c 0.550781,0 0.976562,-0.117187 1.28125,-0.359375 0.28125,-0.226562 0.421875,-0.582031 0.421875,-1.0625 0,-0.414062 -0.117187,-0.738281 -0.34375,-0.96875 C 3.753906,-6.820312 3.414062,-6.9375 2.96875,-6.9375 c -0.449219,0 -0.792969,0.105469 -1.03125,0.3125 -0.242188,0.210938 -0.382812,0.515625 -0.421875,0.921875 H 0.96875 v -1.28125 c 0.394531,-0.144531 0.757812,-0.25 1.09375,-0.3125 0.351562,-0.082031 0.679688,-0.125 0.984375,-0.125 0.71875,0 1.273437,0.15625 1.671875,0.46875 0.394531,0.304687 0.59375,0.726563 0.59375,1.265625 0,0.449219 -0.136719,0.820312 -0.40625,1.109375 -0.273438,0.292969 -0.664062,0.492187 -1.171875,0.59375 0.601563,0.09375 1.066406,0.320313 1.390625,0.671875 0.332031,0.335938 0.5,0.78125 0.5,1.34375 z m 0,0"
+           id="path194" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph12-30">
+        <path
+           style="stroke:none"
+           d="M 5.375,0 H 0.6875 V -0.53125 L 2.890625,-2.734375 C 3.359375,-3.203125 3.707031,-3.648438 3.9375,-4.078125 4.144531,-4.515625 4.25,-4.945312 4.25,-5.375 4.25,-5.875 4.117188,-6.253906 3.859375,-6.515625 3.609375,-6.796875 3.257812,-6.9375 2.8125,-6.9375 c -0.46875,0 -0.828125,0.117188 -1.078125,0.34375 -0.25,0.230469 -0.402344,0.578125 -0.453125,1.046875 H 0.734375 V -6.84375 c 0.332031,-0.1875 0.679687,-0.332031 1.046875,-0.4375 0.351562,-0.09375 0.695312,-0.140625 1.03125,-0.140625 0.769531,0 1.375,0.183594 1.8125,0.546875 0.4375,0.375 0.65625,0.875 0.65625,1.5 0,0.71875 -0.5,1.574219 -1.5,2.5625 -0.085938,0.074219 -0.140625,0.132812 -0.171875,0.171875 l -1.84375,1.84375 H 4.8125 v -0.90625 H 5.375 Z m 0,0"
+           id="path197" />
+      </symbol>
+    </g>
+    <clipPath
+       id="clip1">
+      <path
+         d="m 67.5625,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path202" />
+    </clipPath>
+    <clipPath
+       id="clip2">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path205" />
+    </clipPath>
+    <linearGradient
+       id="linear0"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.00050000002"
+       y1="105.0005"
+       x2="104.9995"
+       y2="0.00050000002"
+       gradientTransform="matrix(0.5,0,0,0.5,67.5625,49.125)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(12.940979%,52.548218%,53.72467%);stop-opacity:1;"
+         id="stop208" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(13.002014%,52.706909%,53.883362%);stop-opacity:1;"
+         id="stop210" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(13.124084%,53.025818%,54.202271%);stop-opacity:1;"
+         id="stop212" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(13.246155%,53.344727%,54.521179%);stop-opacity:1;"
+         id="stop214" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(13.369751%,53.662109%,54.838562%);stop-opacity:1;"
+         id="stop216" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(13.491821%,53.981018%,55.157471%);stop-opacity:1;"
+         id="stop218" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(13.613892%,54.299927%,55.476379%);stop-opacity:1;"
+         id="stop220" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(13.737488%,54.618835%,55.795288%);stop-opacity:1;"
+         id="stop222" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.859558%,54.937744%,56.114197%);stop-opacity:1;"
+         id="stop224" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.981628%,55.256653%,56.433105%);stop-opacity:1;"
+         id="stop226" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(14.042664%,55.415344%,56.591797%);stop-opacity:1;"
+         id="stop228" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(14.103699%,55.574036%,56.750488%);stop-opacity:1;"
+         id="stop230" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(14.227295%,55.892944%,57.069397%);stop-opacity:1;"
+         id="stop232" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(14.349365%,56.211853%,57.388306%);stop-opacity:1;"
+         id="stop234" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(14.471436%,56.530762%,57.707214%);stop-opacity:1;"
+         id="stop236" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(14.595032%,56.84967%,58.026123%);stop-opacity:1;"
+         id="stop238" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(14.717102%,57.167053%,58.343506%);stop-opacity:1;"
+         id="stop240" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(14.839172%,57.485962%,58.662415%);stop-opacity:1;"
+         id="stop242" />
+    </linearGradient>
+    <clipPath
+       id="clip3">
+      <path
+         d="M 67.5625,96 H 68 v 5.625 h -0.4375 z m 0,0"
+         id="path245" />
+    </clipPath>
+    <clipPath
+       id="clip4">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path248" />
+    </clipPath>
+    <clipPath
+       id="clip5">
+      <path
+         d="M 67.5625,95 H 68 v 6.625 h -0.4375 z m 0,0"
+         id="path251" />
+    </clipPath>
+    <clipPath
+       id="clip6">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path254" />
+    </clipPath>
+    <clipPath
+       id="clip7">
+      <path
+         d="M 67.5625,94 H 69 v 7.625 h -1.4375 z m 0,0"
+         id="path257" />
+    </clipPath>
+    <clipPath
+       id="clip8">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path260" />
+    </clipPath>
+    <clipPath
+       id="clip9">
+      <path
+         d="M 67.5625,93 H 70 v 8.625 h -2.4375 z m 0,0"
+         id="path263" />
+    </clipPath>
+    <clipPath
+       id="clip10">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path266" />
+    </clipPath>
+    <clipPath
+       id="clip11">
+      <path
+         d="M 67.5625,93 H 71 v 8.625 h -3.4375 z m 0,0"
+         id="path269" />
+    </clipPath>
+    <clipPath
+       id="clip12">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path272" />
+    </clipPath>
+    <clipPath
+       id="clip13">
+      <path
+         d="M 67.5625,92 H 71 v 9.625 h -3.4375 z m 0,0"
+         id="path275" />
+    </clipPath>
+    <clipPath
+       id="clip14">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path278" />
+    </clipPath>
+    <clipPath
+       id="clip15">
+      <path
+         d="M 67.5625,91 H 72 v 10.625 h -4.4375 z m 0,0"
+         id="path281" />
+    </clipPath>
+    <clipPath
+       id="clip16">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path284" />
+    </clipPath>
+    <clipPath
+       id="clip17">
+      <path
+         d="M 67.5625,90 H 73 v 11.625 h -5.4375 z m 0,0"
+         id="path287" />
+    </clipPath>
+    <clipPath
+       id="clip18">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path290" />
+    </clipPath>
+    <clipPath
+       id="clip19">
+      <path
+         d="M 67.5625,90 H 74 v 11.625 h -6.4375 z m 0,0"
+         id="path293" />
+    </clipPath>
+    <clipPath
+       id="clip20">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path296" />
+    </clipPath>
+    <clipPath
+       id="clip21">
+      <path
+         d="M 67.5625,89 H 74 v 12.625 h -6.4375 z m 0,0"
+         id="path299" />
+    </clipPath>
+    <clipPath
+       id="clip22">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path302" />
+    </clipPath>
+    <clipPath
+       id="clip23">
+      <path
+         d="M 67.5625,88 H 75 v 13.625 h -7.4375 z m 0,0"
+         id="path305" />
+    </clipPath>
+    <clipPath
+       id="clip24">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path308" />
+    </clipPath>
+    <clipPath
+       id="clip25">
+      <path
+         d="M 67.5625,87 H 76 v 14.625 h -8.4375 z m 0,0"
+         id="path311" />
+    </clipPath>
+    <clipPath
+       id="clip26">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path314" />
+    </clipPath>
+    <clipPath
+       id="clip27">
+      <path
+         d="M 67.5625,87 H 77 v 14.625 h -9.4375 z m 0,0"
+         id="path317" />
+    </clipPath>
+    <clipPath
+       id="clip28">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path320" />
+    </clipPath>
+    <clipPath
+       id="clip29">
+      <path
+         d="M 67.5625,86 H 77 v 15.625 h -9.4375 z m 0,0"
+         id="path323" />
+    </clipPath>
+    <clipPath
+       id="clip30">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path326" />
+    </clipPath>
+    <clipPath
+       id="clip31">
+      <path
+         d="M 67.5625,85 H 78 v 16.625 H 67.5625 Z m 0,0"
+         id="path329" />
+    </clipPath>
+    <clipPath
+       id="clip32">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path332" />
+    </clipPath>
+    <clipPath
+       id="clip33">
+      <path
+         d="M 67.5625,84 H 79 v 17.625 H 67.5625 Z m 0,0"
+         id="path335" />
+    </clipPath>
+    <clipPath
+       id="clip34">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path338" />
+    </clipPath>
+    <clipPath
+       id="clip35">
+      <path
+         d="M 67.5625,84 H 80 v 17.625 H 67.5625 Z m 0,0"
+         id="path341" />
+    </clipPath>
+    <clipPath
+       id="clip36">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path344" />
+    </clipPath>
+    <clipPath
+       id="clip37">
+      <path
+         d="M 67.5625,83 H 80 v 18.625 H 67.5625 Z m 0,0"
+         id="path347" />
+    </clipPath>
+    <clipPath
+       id="clip38">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path350" />
+    </clipPath>
+    <clipPath
+       id="clip39">
+      <path
+         d="M 67.5625,82 H 81 v 19.625 H 67.5625 Z m 0,0"
+         id="path353" />
+    </clipPath>
+    <clipPath
+       id="clip40">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path356" />
+    </clipPath>
+    <clipPath
+       id="clip41">
+      <path
+         d="M 67.5625,81 H 82 v 20.625 H 67.5625 Z m 0,0"
+         id="path359" />
+    </clipPath>
+    <clipPath
+       id="clip42">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path362" />
+    </clipPath>
+    <clipPath
+       id="clip43">
+      <path
+         d="M 67.5625,81 H 83 v 20.625 H 67.5625 Z m 0,0"
+         id="path365" />
+    </clipPath>
+    <clipPath
+       id="clip44">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path368" />
+    </clipPath>
+    <clipPath
+       id="clip45">
+      <path
+         d="M 67.5625,80 H 83 v 21.625 H 67.5625 Z m 0,0"
+         id="path371" />
+    </clipPath>
+    <clipPath
+       id="clip46">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path374" />
+    </clipPath>
+    <clipPath
+       id="clip47">
+      <path
+         d="M 67.5625,79 H 84 v 22.625 H 67.5625 Z m 0,0"
+         id="path377" />
+    </clipPath>
+    <clipPath
+       id="clip48">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path380" />
+    </clipPath>
+    <clipPath
+       id="clip49">
+      <path
+         d="M 67.5625,78 H 85 v 23.625 H 67.5625 Z m 0,0"
+         id="path383" />
+    </clipPath>
+    <clipPath
+       id="clip50">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path386" />
+    </clipPath>
+    <clipPath
+       id="clip51">
+      <path
+         d="M 67.5625,78 H 86 v 23.625 H 67.5625 Z m 0,0"
+         id="path389" />
+    </clipPath>
+    <clipPath
+       id="clip52">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path392" />
+    </clipPath>
+    <clipPath
+       id="clip53">
+      <path
+         d="M 67.5625,77 H 86 v 24.625 H 67.5625 Z m 0,0"
+         id="path395" />
+    </clipPath>
+    <clipPath
+       id="clip54">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path398" />
+    </clipPath>
+    <clipPath
+       id="clip55">
+      <path
+         d="M 67.5625,76 H 87 v 25.625 H 67.5625 Z m 0,0"
+         id="path401" />
+    </clipPath>
+    <clipPath
+       id="clip56">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path404" />
+    </clipPath>
+    <clipPath
+       id="clip57">
+      <path
+         d="M 67.5625,75 H 88 v 26.625 H 67.5625 Z m 0,0"
+         id="path407" />
+    </clipPath>
+    <clipPath
+       id="clip58">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path410" />
+    </clipPath>
+    <clipPath
+       id="clip59">
+      <path
+         d="M 67.5625,75 H 89 v 26.625 H 67.5625 Z m 0,0"
+         id="path413" />
+    </clipPath>
+    <clipPath
+       id="clip60">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path416" />
+    </clipPath>
+    <clipPath
+       id="clip61">
+      <path
+         d="M 67.5625,74 H 89 v 27.625 H 67.5625 Z m 0,0"
+         id="path419" />
+    </clipPath>
+    <clipPath
+       id="clip62">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path422" />
+    </clipPath>
+    <clipPath
+       id="clip63">
+      <path
+         d="M 67.5625,73 H 90 v 28.625 H 67.5625 Z m 0,0"
+         id="path425" />
+    </clipPath>
+    <clipPath
+       id="clip64">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path428" />
+    </clipPath>
+    <clipPath
+       id="clip65">
+      <path
+         d="M 67.5625,72 H 91 v 29.625 H 67.5625 Z m 0,0"
+         id="path431" />
+    </clipPath>
+    <clipPath
+       id="clip66">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path434" />
+    </clipPath>
+    <clipPath
+       id="clip67">
+      <path
+         d="M 67.5625,72 H 92 v 29.625 H 67.5625 Z m 0,0"
+         id="path437" />
+    </clipPath>
+    <clipPath
+       id="clip68">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path440" />
+    </clipPath>
+    <clipPath
+       id="clip69">
+      <path
+         d="M 67.5625,71 H 92 v 30.625 H 67.5625 Z m 0,0"
+         id="path443" />
+    </clipPath>
+    <clipPath
+       id="clip70">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path446" />
+    </clipPath>
+    <clipPath
+       id="clip71">
+      <path
+         d="M 67.5625,70 H 93 v 31.625 H 67.5625 Z m 0,0"
+         id="path449" />
+    </clipPath>
+    <clipPath
+       id="clip72">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path452" />
+    </clipPath>
+    <clipPath
+       id="clip73">
+      <path
+         d="M 67.5625,69 H 94 v 32.625 H 67.5625 Z m 0,0"
+         id="path455" />
+    </clipPath>
+    <clipPath
+       id="clip74">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path458" />
+    </clipPath>
+    <clipPath
+       id="clip75">
+      <path
+         d="M 67.5625,69 H 95 v 32.625 H 67.5625 Z m 0,0"
+         id="path461" />
+    </clipPath>
+    <clipPath
+       id="clip76">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path464" />
+    </clipPath>
+    <clipPath
+       id="clip77">
+      <path
+         d="M 67.5625,68 H 95 v 33.625 H 67.5625 Z m 0,0"
+         id="path467" />
+    </clipPath>
+    <clipPath
+       id="clip78">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path470" />
+    </clipPath>
+    <clipPath
+       id="clip79">
+      <path
+         d="M 67.5625,67 H 96 v 34.625 H 67.5625 Z m 0,0"
+         id="path473" />
+    </clipPath>
+    <clipPath
+       id="clip80">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path476" />
+    </clipPath>
+    <clipPath
+       id="clip81">
+      <path
+         d="M 67.5625,66 H 97 v 35.625 H 67.5625 Z m 0,0"
+         id="path479" />
+    </clipPath>
+    <clipPath
+       id="clip82">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path482" />
+    </clipPath>
+    <clipPath
+       id="clip83">
+      <path
+         d="M 67.5625,66 H 98 v 35.625 H 67.5625 Z m 0,0"
+         id="path485" />
+    </clipPath>
+    <clipPath
+       id="clip84">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path488" />
+    </clipPath>
+    <clipPath
+       id="clip85">
+      <path
+         d="M 67.5625,65 H 98 v 36 H 67.5625 Z m 0,0"
+         id="path491" />
+    </clipPath>
+    <clipPath
+       id="clip86">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path494" />
+    </clipPath>
+    <clipPath
+       id="clip87">
+      <path
+         d="m 68,64 h 31 v 36 H 68 Z m 0,0"
+         id="path497" />
+    </clipPath>
+    <clipPath
+       id="clip88">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path500" />
+    </clipPath>
+    <clipPath
+       id="clip89">
+      <path
+         d="m 68,63 h 32 V 99 H 68 Z m 0,0"
+         id="path503" />
+    </clipPath>
+    <clipPath
+       id="clip90">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path506" />
+    </clipPath>
+    <clipPath
+       id="clip91">
+      <path
+         d="m 69,63 h 32 V 99 H 69 Z m 0,0"
+         id="path509" />
+    </clipPath>
+    <clipPath
+       id="clip92">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path512" />
+    </clipPath>
+    <clipPath
+       id="clip93">
+      <path
+         d="m 70,62 h 31 V 98 H 70 Z m 0,0"
+         id="path515" />
+    </clipPath>
+    <clipPath
+       id="clip94">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path518" />
+    </clipPath>
+    <clipPath
+       id="clip95">
+      <path
+         d="m 71,61 h 31 V 97 H 71 Z m 0,0"
+         id="path521" />
+    </clipPath>
+    <clipPath
+       id="clip96">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path524" />
+    </clipPath>
+    <clipPath
+       id="clip97">
+      <path
+         d="m 71,60 h 32 V 96 H 71 Z m 0,0"
+         id="path527" />
+    </clipPath>
+    <clipPath
+       id="clip98">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path530" />
+    </clipPath>
+    <clipPath
+       id="clip99">
+      <path
+         d="m 72,60 h 32 V 96 H 72 Z m 0,0"
+         id="path533" />
+    </clipPath>
+    <clipPath
+       id="clip100">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path536" />
+    </clipPath>
+    <clipPath
+       id="clip101">
+      <path
+         d="m 73,59 h 31 V 95 H 73 Z m 0,0"
+         id="path539" />
+    </clipPath>
+    <clipPath
+       id="clip102">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path542" />
+    </clipPath>
+    <clipPath
+       id="clip103">
+      <path
+         d="m 74,58 h 31 V 94 H 74 Z m 0,0"
+         id="path545" />
+    </clipPath>
+    <clipPath
+       id="clip104">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path548" />
+    </clipPath>
+    <clipPath
+       id="clip105">
+      <path
+         d="m 74,57 h 32 V 93 H 74 Z m 0,0"
+         id="path551" />
+    </clipPath>
+    <clipPath
+       id="clip106">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path554" />
+    </clipPath>
+    <clipPath
+       id="clip107">
+      <path
+         d="m 75,57 h 32 V 93 H 75 Z m 0,0"
+         id="path557" />
+    </clipPath>
+    <clipPath
+       id="clip108">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path560" />
+    </clipPath>
+    <clipPath
+       id="clip109">
+      <path
+         d="m 76,56 h 31 V 92 H 76 Z m 0,0"
+         id="path563" />
+    </clipPath>
+    <clipPath
+       id="clip110">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path566" />
+    </clipPath>
+    <clipPath
+       id="clip111">
+      <path
+         d="m 77,55 h 31 V 91 H 77 Z m 0,0"
+         id="path569" />
+    </clipPath>
+    <clipPath
+       id="clip112">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path572" />
+    </clipPath>
+    <clipPath
+       id="clip113">
+      <path
+         d="m 77,54 h 32 V 90 H 77 Z m 0,0"
+         id="path575" />
+    </clipPath>
+    <clipPath
+       id="clip114">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path578" />
+    </clipPath>
+    <clipPath
+       id="clip115">
+      <path
+         d="m 78,54 h 32 V 90 H 78 Z m 0,0"
+         id="path581" />
+    </clipPath>
+    <clipPath
+       id="clip116">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path584" />
+    </clipPath>
+    <clipPath
+       id="clip117">
+      <path
+         d="m 68,49.125 h 52 v 52.5 H 68 Z m 0,0"
+         id="path587" />
+    </clipPath>
+    <clipPath
+       id="clip118">
+      <path
+         d="m 70.5625,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path590" />
+    </clipPath>
+    <clipPath
+       id="clip119">
+      <path
+         d="M 70.5,49 H 117 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 70.5 c -1.65625,0 -3,-1.34375 -3,-3 V 52 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path593" />
+    </clipPath>
+    <clipPath
+       id="clip120">
+      <path
+         d="m 149.23828,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path596" />
+    </clipPath>
+    <clipPath
+       id="clip121">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path599" />
+    </clipPath>
+    <linearGradient
+       id="linear1"
+       gradientUnits="userSpaceOnUse"
+       x1="0.000497"
+       y1="104.9995"
+       x2="105.0005"
+       y2="-0.000497"
+       gradientTransform="matrix(0.5,0,0,0.5,149.2375,49.125)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(12.940979%,52.548218%,53.72467%);stop-opacity:1;"
+         id="stop602" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(13.002014%,52.706909%,53.883362%);stop-opacity:1;"
+         id="stop604" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(13.124084%,53.025818%,54.202271%);stop-opacity:1;"
+         id="stop606" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(13.246155%,53.344727%,54.521179%);stop-opacity:1;"
+         id="stop608" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(13.369751%,53.662109%,54.840088%);stop-opacity:1;"
+         id="stop610" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(13.491821%,53.981018%,55.157471%);stop-opacity:1;"
+         id="stop612" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(13.613892%,54.299927%,55.476379%);stop-opacity:1;"
+         id="stop614" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(13.737488%,54.618835%,55.795288%);stop-opacity:1;"
+         id="stop616" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.859558%,54.937744%,56.114197%);stop-opacity:1;"
+         id="stop618" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(13.981628%,55.256653%,56.433105%);stop-opacity:1;"
+         id="stop620" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(14.103699%,55.574036%,56.750488%);stop-opacity:1;"
+         id="stop622" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(14.227295%,55.892944%,57.069397%);stop-opacity:1;"
+         id="stop624" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(14.349365%,56.211853%,57.388306%);stop-opacity:1;"
+         id="stop626" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(14.471436%,56.530762%,57.707214%);stop-opacity:1;"
+         id="stop628" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(14.595032%,56.84967%,58.026123%);stop-opacity:1;"
+         id="stop630" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(14.717102%,57.167053%,58.343506%);stop-opacity:1;"
+         id="stop632" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(14.839172%,57.485962%,58.662415%);stop-opacity:1;"
+         id="stop634" />
+    </linearGradient>
+    <clipPath
+       id="clip122">
+      <path
+         d="M 149.23828,97 H 150 v 4.625 h -0.76172 z m 0,0"
+         id="path637" />
+    </clipPath>
+    <clipPath
+       id="clip123">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path640" />
+    </clipPath>
+    <clipPath
+       id="clip124">
+      <path
+         d="M 149.23828,96 H 151 v 5.625 h -1.76172 z m 0,0"
+         id="path643" />
+    </clipPath>
+    <clipPath
+       id="clip125">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path646" />
+    </clipPath>
+    <clipPath
+       id="clip126">
+      <path
+         d="M 149.23828,95 H 151 v 6.625 h -1.76172 z m 0,0"
+         id="path649" />
+    </clipPath>
+    <clipPath
+       id="clip127">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path652" />
+    </clipPath>
+    <clipPath
+       id="clip128">
+      <path
+         d="M 149.23828,94 H 152 v 7.625 h -2.76172 z m 0,0"
+         id="path655" />
+    </clipPath>
+    <clipPath
+       id="clip129">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path658" />
+    </clipPath>
+    <clipPath
+       id="clip130">
+      <path
+         d="M 149.23828,94 H 153 v 7.625 h -3.76172 z m 0,0"
+         id="path661" />
+    </clipPath>
+    <clipPath
+       id="clip131">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path664" />
+    </clipPath>
+    <clipPath
+       id="clip132">
+      <path
+         d="M 149.23828,93 H 154 v 8.625 h -4.76172 z m 0,0"
+         id="path667" />
+    </clipPath>
+    <clipPath
+       id="clip133">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path670" />
+    </clipPath>
+    <clipPath
+       id="clip134">
+      <path
+         d="M 149.23828,92 H 154 v 9.625 h -4.76172 z m 0,0"
+         id="path673" />
+    </clipPath>
+    <clipPath
+       id="clip135">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path676" />
+    </clipPath>
+    <clipPath
+       id="clip136">
+      <path
+         d="M 149.23828,91 H 155 v 10.625 h -5.76172 z m 0,0"
+         id="path679" />
+    </clipPath>
+    <clipPath
+       id="clip137">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path682" />
+    </clipPath>
+    <clipPath
+       id="clip138">
+      <path
+         d="M 149.23828,91 H 156 v 10.625 h -6.76172 z m 0,0"
+         id="path685" />
+    </clipPath>
+    <clipPath
+       id="clip139">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path688" />
+    </clipPath>
+    <clipPath
+       id="clip140">
+      <path
+         d="M 149.23828,90 H 157 v 11.625 h -7.76172 z m 0,0"
+         id="path691" />
+    </clipPath>
+    <clipPath
+       id="clip141">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path694" />
+    </clipPath>
+    <clipPath
+       id="clip142">
+      <path
+         d="M 149.23828,89 H 157 v 12.625 h -7.76172 z m 0,0"
+         id="path697" />
+    </clipPath>
+    <clipPath
+       id="clip143">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path700" />
+    </clipPath>
+    <clipPath
+       id="clip144">
+      <path
+         d="M 149.23828,88 H 158 v 13.625 h -8.76172 z m 0,0"
+         id="path703" />
+    </clipPath>
+    <clipPath
+       id="clip145">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path706" />
+    </clipPath>
+    <clipPath
+       id="clip146">
+      <path
+         d="M 149.23828,88 H 159 v 13.625 h -9.76172 z m 0,0"
+         id="path709" />
+    </clipPath>
+    <clipPath
+       id="clip147">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path712" />
+    </clipPath>
+    <clipPath
+       id="clip148">
+      <path
+         d="M 149.23828,87 H 160 v 14.625 h -10.76172 z m 0,0"
+         id="path715" />
+    </clipPath>
+    <clipPath
+       id="clip149">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path718" />
+    </clipPath>
+    <clipPath
+       id="clip150">
+      <path
+         d="M 149.23828,86 H 160 v 15.625 h -10.76172 z m 0,0"
+         id="path721" />
+    </clipPath>
+    <clipPath
+       id="clip151">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path724" />
+    </clipPath>
+    <clipPath
+       id="clip152">
+      <path
+         d="M 149.23828,85 H 161 v 16.625 h -11.76172 z m 0,0"
+         id="path727" />
+    </clipPath>
+    <clipPath
+       id="clip153">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path730" />
+    </clipPath>
+    <clipPath
+       id="clip154">
+      <path
+         d="M 149.23828,85 H 162 v 16.625 h -12.76172 z m 0,0"
+         id="path733" />
+    </clipPath>
+    <clipPath
+       id="clip155">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path736" />
+    </clipPath>
+    <clipPath
+       id="clip156">
+      <path
+         d="M 149.23828,84 H 163 v 17.625 h -13.76172 z m 0,0"
+         id="path739" />
+    </clipPath>
+    <clipPath
+       id="clip157">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path742" />
+    </clipPath>
+    <clipPath
+       id="clip158">
+      <path
+         d="M 149.23828,83 H 163 v 18.625 h -13.76172 z m 0,0"
+         id="path745" />
+    </clipPath>
+    <clipPath
+       id="clip159">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path748" />
+    </clipPath>
+    <clipPath
+       id="clip160">
+      <path
+         d="M 149.23828,82 H 164 v 19.625 h -14.76172 z m 0,0"
+         id="path751" />
+    </clipPath>
+    <clipPath
+       id="clip161">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path754" />
+    </clipPath>
+    <clipPath
+       id="clip162">
+      <path
+         d="M 149.23828,82 H 165 v 19.625 h -15.76172 z m 0,0"
+         id="path757" />
+    </clipPath>
+    <clipPath
+       id="clip163">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path760" />
+    </clipPath>
+    <clipPath
+       id="clip164">
+      <path
+         d="M 149.23828,81 H 166 v 20.625 h -16.76172 z m 0,0"
+         id="path763" />
+    </clipPath>
+    <clipPath
+       id="clip165">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path766" />
+    </clipPath>
+    <clipPath
+       id="clip166">
+      <path
+         d="M 149.23828,80 H 166 v 21.625 h -16.76172 z m 0,0"
+         id="path769" />
+    </clipPath>
+    <clipPath
+       id="clip167">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path772" />
+    </clipPath>
+    <clipPath
+       id="clip168">
+      <path
+         d="M 149.23828,79 H 167 v 22.625 h -17.76172 z m 0,0"
+         id="path775" />
+    </clipPath>
+    <clipPath
+       id="clip169">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path778" />
+    </clipPath>
+    <clipPath
+       id="clip170">
+      <path
+         d="M 149.23828,79 H 168 v 22.625 h -18.76172 z m 0,0"
+         id="path781" />
+    </clipPath>
+    <clipPath
+       id="clip171">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path784" />
+    </clipPath>
+    <clipPath
+       id="clip172">
+      <path
+         d="M 149.23828,78 H 169 v 23.625 h -19.76172 z m 0,0"
+         id="path787" />
+    </clipPath>
+    <clipPath
+       id="clip173">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path790" />
+    </clipPath>
+    <clipPath
+       id="clip174">
+      <path
+         d="M 149.23828,77 H 169 v 24.625 h -19.76172 z m 0,0"
+         id="path793" />
+    </clipPath>
+    <clipPath
+       id="clip175">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path796" />
+    </clipPath>
+    <clipPath
+       id="clip176">
+      <path
+         d="M 149.23828,76 H 170 v 25.625 h -20.76172 z m 0,0"
+         id="path799" />
+    </clipPath>
+    <clipPath
+       id="clip177">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path802" />
+    </clipPath>
+    <clipPath
+       id="clip178">
+      <path
+         d="M 149.23828,76 H 171 v 25.625 h -21.76172 z m 0,0"
+         id="path805" />
+    </clipPath>
+    <clipPath
+       id="clip179">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path808" />
+    </clipPath>
+    <clipPath
+       id="clip180">
+      <path
+         d="M 149.23828,75 H 172 v 26.625 h -22.76172 z m 0,0"
+         id="path811" />
+    </clipPath>
+    <clipPath
+       id="clip181">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path814" />
+    </clipPath>
+    <clipPath
+       id="clip182">
+      <path
+         d="M 149.23828,74 H 172 v 27 h -22.76172 z m 0,0"
+         id="path817" />
+    </clipPath>
+    <clipPath
+       id="clip183">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path820" />
+    </clipPath>
+    <clipPath
+       id="clip184">
+      <path
+         d="M 149.23828,73 H 173 v 28 h -23.76172 z m 0,0"
+         id="path823" />
+    </clipPath>
+    <clipPath
+       id="clip185">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path826" />
+    </clipPath>
+    <clipPath
+       id="clip186">
+      <path
+         d="m 150,73 h 24 v 27 h -24 z m 0,0"
+         id="path829" />
+    </clipPath>
+    <clipPath
+       id="clip187">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path832" />
+    </clipPath>
+    <clipPath
+       id="clip188">
+      <path
+         d="m 151,72 h 24 v 27 h -24 z m 0,0"
+         id="path835" />
+    </clipPath>
+    <clipPath
+       id="clip189">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path838" />
+    </clipPath>
+    <clipPath
+       id="clip190">
+      <path
+         d="m 152,71 h 23 v 27 h -23 z m 0,0"
+         id="path841" />
+    </clipPath>
+    <clipPath
+       id="clip191">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path844" />
+    </clipPath>
+    <clipPath
+       id="clip192">
+      <path
+         d="m 152,70 h 24 v 28 h -24 z m 0,0"
+         id="path847" />
+    </clipPath>
+    <clipPath
+       id="clip193">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path850" />
+    </clipPath>
+    <clipPath
+       id="clip194">
+      <path
+         d="m 153,70 h 24 v 27 h -24 z m 0,0"
+         id="path853" />
+    </clipPath>
+    <clipPath
+       id="clip195">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path856" />
+    </clipPath>
+    <clipPath
+       id="clip196">
+      <path
+         d="m 154,69 h 24 v 27 h -24 z m 0,0"
+         id="path859" />
+    </clipPath>
+    <clipPath
+       id="clip197">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path862" />
+    </clipPath>
+    <clipPath
+       id="clip198">
+      <path
+         d="m 155,68 h 23 v 27 h -23 z m 0,0"
+         id="path865" />
+    </clipPath>
+    <clipPath
+       id="clip199">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path868" />
+    </clipPath>
+    <clipPath
+       id="clip200">
+      <path
+         d="m 155,67 h 24 v 28 h -24 z m 0,0"
+         id="path871" />
+    </clipPath>
+    <clipPath
+       id="clip201">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path874" />
+    </clipPath>
+    <clipPath
+       id="clip202">
+      <path
+         d="m 156,67 h 24 v 27 h -24 z m 0,0"
+         id="path877" />
+    </clipPath>
+    <clipPath
+       id="clip203">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path880" />
+    </clipPath>
+    <clipPath
+       id="clip204">
+      <path
+         d="m 157,66 h 24 v 27 h -24 z m 0,0"
+         id="path883" />
+    </clipPath>
+    <clipPath
+       id="clip205">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path886" />
+    </clipPath>
+    <clipPath
+       id="clip206">
+      <path
+         d="m 158,65 h 23 v 27 h -23 z m 0,0"
+         id="path889" />
+    </clipPath>
+    <clipPath
+       id="clip207">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path892" />
+    </clipPath>
+    <clipPath
+       id="clip208">
+      <path
+         d="m 158,64 h 24 v 28 h -24 z m 0,0"
+         id="path895" />
+    </clipPath>
+    <clipPath
+       id="clip209">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path898" />
+    </clipPath>
+    <clipPath
+       id="clip210">
+      <path
+         d="m 159,64 h 24 v 27 h -24 z m 0,0"
+         id="path901" />
+    </clipPath>
+    <clipPath
+       id="clip211">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path904" />
+    </clipPath>
+    <clipPath
+       id="clip212">
+      <path
+         d="m 160,63 h 24 v 27 h -24 z m 0,0"
+         id="path907" />
+    </clipPath>
+    <clipPath
+       id="clip213">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path910" />
+    </clipPath>
+    <clipPath
+       id="clip214">
+      <path
+         d="m 161,62 h 23 v 27 h -23 z m 0,0"
+         id="path913" />
+    </clipPath>
+    <clipPath
+       id="clip215">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path916" />
+    </clipPath>
+    <clipPath
+       id="clip216">
+      <path
+         d="m 161,61 h 24 v 28 h -24 z m 0,0"
+         id="path919" />
+    </clipPath>
+    <clipPath
+       id="clip217">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path922" />
+    </clipPath>
+    <clipPath
+       id="clip218">
+      <path
+         d="m 162,61 h 24 v 27 h -24 z m 0,0"
+         id="path925" />
+    </clipPath>
+    <clipPath
+       id="clip219">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path928" />
+    </clipPath>
+    <clipPath
+       id="clip220">
+      <path
+         d="m 163,60 h 24 v 27 h -24 z m 0,0"
+         id="path931" />
+    </clipPath>
+    <clipPath
+       id="clip221">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path934" />
+    </clipPath>
+    <clipPath
+       id="clip222">
+      <path
+         d="m 164,59 h 23 v 27 h -23 z m 0,0"
+         id="path937" />
+    </clipPath>
+    <clipPath
+       id="clip223">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path940" />
+    </clipPath>
+    <clipPath
+       id="clip224">
+      <path
+         d="m 149.23828,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path943" />
+    </clipPath>
+    <clipPath
+       id="clip225">
+      <path
+         d="m 152.23828,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path946" />
+    </clipPath>
+    <clipPath
+       id="clip226">
+      <path
+         d="m 152,49 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 152 c -1.65625,0 -3,-1.34375 -3,-3 V 52 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path949" />
+    </clipPath>
+    <clipPath
+       id="clip227">
+      <path
+         d="m 230.91406,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path952" />
+    </clipPath>
+    <clipPath
+       id="clip228">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path955" />
+    </clipPath>
+    <linearGradient
+       id="linear2"
+       gradientUnits="userSpaceOnUse"
+       x1="0.001494"
+       y1="104.9985"
+       x2="105.0015"
+       y2="-0.001494"
+       gradientTransform="matrix(0.5,0,0,0.5,230.91251,49.125)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(38.430786%,39.607239%,51.763916%);stop-opacity:1;"
+         id="stop958" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(38.500977%,39.680481%,51.864624%);stop-opacity:1;"
+         id="stop960" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(38.641357%,39.826965%,52.067566%);stop-opacity:1;"
+         id="stop962" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(38.783264%,39.974976%,52.268982%);stop-opacity:1;"
+         id="stop964" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(38.923645%,40.12146%,52.471924%);stop-opacity:1;"
+         id="stop966" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(39.064026%,40.267944%,52.67334%);stop-opacity:1;"
+         id="stop968" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(39.205933%,40.415955%,52.876282%);stop-opacity:1;"
+         id="stop970" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(39.346313%,40.562439%,53.077698%);stop-opacity:1;"
+         id="stop972" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(39.48822%,40.710449%,53.28064%);stop-opacity:1;"
+         id="stop974" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(39.628601%,40.856934%,53.482056%);stop-opacity:1;"
+         id="stop976" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(39.768982%,41.003418%,53.684998%);stop-opacity:1;"
+         id="stop978" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(39.910889%,41.151428%,53.886414%);stop-opacity:1;"
+         id="stop980" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(40.05127%,41.297913%,54.089355%);stop-opacity:1;"
+         id="stop982" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(40.19165%,41.444397%,54.290771%);stop-opacity:1;"
+         id="stop984" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(40.333557%,41.592407%,54.493713%);stop-opacity:1;"
+         id="stop986" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(40.473938%,41.738892%,54.695129%);stop-opacity:1;"
+         id="stop988" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(40.614319%,41.886902%,54.898071%);stop-opacity:1;"
+         id="stop990" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(40.756226%,42.033386%,55.099487%);stop-opacity:1;"
+         id="stop992" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(40.896606%,42.179871%,55.302429%);stop-opacity:1;"
+         id="stop994" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(41.036987%,42.327881%,55.503845%);stop-opacity:1;"
+         id="stop996" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(41.178894%,42.474365%,55.706787%);stop-opacity:1;"
+         id="stop998" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(41.319275%,42.62085%,55.908203%);stop-opacity:1;"
+         id="stop1000" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(41.461182%,42.76886%,56.111145%);stop-opacity:1;"
+         id="stop1002" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(41.601562%,42.915344%,56.314087%);stop-opacity:1;"
+         id="stop1004" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(41.741943%,43.063354%,56.515503%);stop-opacity:1;"
+         id="stop1006" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(41.88385%,43.209839%,56.718445%);stop-opacity:1;"
+         id="stop1008" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(42.024231%,43.356323%,56.919861%);stop-opacity:1;"
+         id="stop1010" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(42.164612%,43.504333%,57.122803%);stop-opacity:1;"
+         id="stop1012" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(42.306519%,43.650818%,57.324219%);stop-opacity:1;"
+         id="stop1014" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(42.446899%,43.798828%,57.527161%);stop-opacity:1;"
+         id="stop1016" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(42.58728%,43.945312%,57.728577%);stop-opacity:1;"
+         id="stop1018" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(42.729187%,44.091797%,57.931519%);stop-opacity:1;"
+         id="stop1020" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(42.869568%,44.239807%,58.132935%);stop-opacity:1;"
+         id="stop1022" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(43.011475%,44.386292%,58.335876%);stop-opacity:1;"
+         id="stop1024" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(43.151855%,44.532776%,58.537292%);stop-opacity:1;"
+         id="stop1026" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(43.292236%,44.680786%,58.740234%);stop-opacity:1;"
+         id="stop1028" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(43.434143%,44.827271%,58.94165%);stop-opacity:1;"
+         id="stop1030" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(43.574524%,44.975281%,59.144592%);stop-opacity:1;"
+         id="stop1032" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(43.714905%,45.121765%,59.346008%);stop-opacity:1;"
+         id="stop1034" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(43.856812%,45.26825%,59.54895%);stop-opacity:1;"
+         id="stop1036" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(43.997192%,45.41626%,59.750366%);stop-opacity:1;"
+         id="stop1038" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(44.137573%,45.562744%,59.953308%);stop-opacity:1;"
+         id="stop1040" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(44.27948%,45.709229%,60.154724%);stop-opacity:1;"
+         id="stop1042" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(44.419861%,45.857239%,60.357666%);stop-opacity:1;"
+         id="stop1044" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(44.560242%,46.003723%,60.559082%);stop-opacity:1;"
+         id="stop1046" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(44.702148%,46.151733%,60.762024%);stop-opacity:1;"
+         id="stop1048" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(44.842529%,46.298218%,60.96344%);stop-opacity:1;"
+         id="stop1050" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(44.984436%,46.444702%,61.166382%);stop-opacity:1;"
+         id="stop1052" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(45.124817%,46.592712%,61.367798%);stop-opacity:1;"
+         id="stop1054" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(45.265198%,46.739197%,61.57074%);stop-opacity:1;"
+         id="stop1056" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(45.407104%,46.885681%,61.773682%);stop-opacity:1;"
+         id="stop1058" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(45.547485%,47.033691%,61.975098%);stop-opacity:1;"
+         id="stop1060" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(45.687866%,47.180176%,62.17804%);stop-opacity:1;"
+         id="stop1062" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(45.829773%,47.328186%,62.379456%);stop-opacity:1;"
+         id="stop1064" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(45.970154%,47.47467%,62.582397%);stop-opacity:1;"
+         id="stop1066" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(46.110535%,47.621155%,62.783813%);stop-opacity:1;"
+         id="stop1068" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(46.252441%,47.769165%,62.986755%);stop-opacity:1;"
+         id="stop1070" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(46.392822%,47.915649%,63.188171%);stop-opacity:1;"
+         id="stop1072" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(46.534729%,48.062134%,63.391113%);stop-opacity:1;"
+         id="stop1074" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(46.67511%,48.210144%,63.592529%);stop-opacity:1;"
+         id="stop1076" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(46.815491%,48.356628%,63.795471%);stop-opacity:1;"
+         id="stop1078" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(46.957397%,48.504639%,63.996887%);stop-opacity:1;"
+         id="stop1080" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(47.097778%,48.651123%,64.199829%);stop-opacity:1;"
+         id="stop1082" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(47.238159%,48.797607%,64.401245%);stop-opacity:1;"
+         id="stop1084" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(47.380066%,48.945618%,64.604187%);stop-opacity:1;"
+         id="stop1086" />
+    </linearGradient>
+    <clipPath
+       id="clip229">
+      <path
+         d="M 230.91406,101 H 235 v 0.625 h -4.08594 z m 0,0"
+         id="path1089" />
+    </clipPath>
+    <clipPath
+       id="clip230">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1092" />
+    </clipPath>
+    <clipPath
+       id="clip231">
+      <path
+         d="M 230.91406,101 H 236 v 0.625 h -5.08594 z m 0,0"
+         id="path1095" />
+    </clipPath>
+    <clipPath
+       id="clip232">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1098" />
+    </clipPath>
+    <clipPath
+       id="clip233">
+      <path
+         d="M 230.91406,100 H 237 v 1.625 h -6.08594 z m 0,0"
+         id="path1101" />
+    </clipPath>
+    <clipPath
+       id="clip234">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1104" />
+    </clipPath>
+    <clipPath
+       id="clip235">
+      <path
+         d="M 230.91406,99 H 237 v 2.625 h -6.08594 z m 0,0"
+         id="path1107" />
+    </clipPath>
+    <clipPath
+       id="clip236">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1110" />
+    </clipPath>
+    <clipPath
+       id="clip237">
+      <path
+         d="M 230.91406,98 H 238 v 3.625 h -7.08594 z m 0,0"
+         id="path1113" />
+    </clipPath>
+    <clipPath
+       id="clip238">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1116" />
+    </clipPath>
+    <clipPath
+       id="clip239">
+      <path
+         d="M 230.91406,98 H 239 v 3.625 h -8.08594 z m 0,0"
+         id="path1119" />
+    </clipPath>
+    <clipPath
+       id="clip240">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1122" />
+    </clipPath>
+    <clipPath
+       id="clip241">
+      <path
+         d="M 230.91406,97 H 240 v 4.625 h -9.08594 z m 0,0"
+         id="path1125" />
+    </clipPath>
+    <clipPath
+       id="clip242">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1128" />
+    </clipPath>
+    <clipPath
+       id="clip243">
+      <path
+         d="M 230.91406,96 H 240 v 5.625 h -9.08594 z m 0,0"
+         id="path1131" />
+    </clipPath>
+    <clipPath
+       id="clip244">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1134" />
+    </clipPath>
+    <clipPath
+       id="clip245">
+      <path
+         d="M 230.91406,95 H 241 v 6.625 h -10.08594 z m 0,0"
+         id="path1137" />
+    </clipPath>
+    <clipPath
+       id="clip246">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1140" />
+    </clipPath>
+    <clipPath
+       id="clip247">
+      <path
+         d="M 230.91406,95 H 242 v 6.625 h -11.08594 z m 0,0"
+         id="path1143" />
+    </clipPath>
+    <clipPath
+       id="clip248">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1146" />
+    </clipPath>
+    <clipPath
+       id="clip249">
+      <path
+         d="M 230.91406,94 H 243 v 7.625 h -12.08594 z m 0,0"
+         id="path1149" />
+    </clipPath>
+    <clipPath
+       id="clip250">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1152" />
+    </clipPath>
+    <clipPath
+       id="clip251">
+      <path
+         d="M 230.91406,93 H 243 v 8.625 h -12.08594 z m 0,0"
+         id="path1155" />
+    </clipPath>
+    <clipPath
+       id="clip252">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1158" />
+    </clipPath>
+    <clipPath
+       id="clip253">
+      <path
+         d="M 230.91406,92 H 244 v 9.625 h -13.08594 z m 0,0"
+         id="path1161" />
+    </clipPath>
+    <clipPath
+       id="clip254">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1164" />
+    </clipPath>
+    <clipPath
+       id="clip255">
+      <path
+         d="M 230.91406,92 H 245 v 9.625 h -14.08594 z m 0,0"
+         id="path1167" />
+    </clipPath>
+    <clipPath
+       id="clip256">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1170" />
+    </clipPath>
+    <clipPath
+       id="clip257">
+      <path
+         d="M 230.91406,91 H 246 v 10.625 h -15.08594 z m 0,0"
+         id="path1173" />
+    </clipPath>
+    <clipPath
+       id="clip258">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1176" />
+    </clipPath>
+    <clipPath
+       id="clip259">
+      <path
+         d="M 230.91406,90 H 246 v 11.625 h -15.08594 z m 0,0"
+         id="path1179" />
+    </clipPath>
+    <clipPath
+       id="clip260">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1182" />
+    </clipPath>
+    <clipPath
+       id="clip261">
+      <path
+         d="M 230.91406,89 H 247 v 12.625 h -16.08594 z m 0,0"
+         id="path1185" />
+    </clipPath>
+    <clipPath
+       id="clip262">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1188" />
+    </clipPath>
+    <clipPath
+       id="clip263">
+      <path
+         d="M 230.91406,89 H 248 v 12.625 h -17.08594 z m 0,0"
+         id="path1191" />
+    </clipPath>
+    <clipPath
+       id="clip264">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1194" />
+    </clipPath>
+    <clipPath
+       id="clip265">
+      <path
+         d="M 230.91406,88 H 249 v 13.625 h -18.08594 z m 0,0"
+         id="path1197" />
+    </clipPath>
+    <clipPath
+       id="clip266">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1200" />
+    </clipPath>
+    <clipPath
+       id="clip267">
+      <path
+         d="M 230.91406,87 H 249 v 14.625 h -18.08594 z m 0,0"
+         id="path1203" />
+    </clipPath>
+    <clipPath
+       id="clip268">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1206" />
+    </clipPath>
+    <clipPath
+       id="clip269">
+      <path
+         d="M 230.91406,86 H 250 v 15.625 h -19.08594 z m 0,0"
+         id="path1209" />
+    </clipPath>
+    <clipPath
+       id="clip270">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1212" />
+    </clipPath>
+    <clipPath
+       id="clip271">
+      <path
+         d="M 230.91406,86 H 251 v 15.625 h -20.08594 z m 0,0"
+         id="path1215" />
+    </clipPath>
+    <clipPath
+       id="clip272">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1218" />
+    </clipPath>
+    <clipPath
+       id="clip273">
+      <path
+         d="M 230.91406,85 H 252 v 16.625 h -21.08594 z m 0,0"
+         id="path1221" />
+    </clipPath>
+    <clipPath
+       id="clip274">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1224" />
+    </clipPath>
+    <clipPath
+       id="clip275">
+      <path
+         d="M 230.91406,84 H 252 v 17.625 h -21.08594 z m 0,0"
+         id="path1227" />
+    </clipPath>
+    <clipPath
+       id="clip276">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1230" />
+    </clipPath>
+    <clipPath
+       id="clip277">
+      <path
+         d="M 230.91406,83 H 253 v 18.625 h -22.08594 z m 0,0"
+         id="path1233" />
+    </clipPath>
+    <clipPath
+       id="clip278">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1236" />
+    </clipPath>
+    <clipPath
+       id="clip279">
+      <path
+         d="M 230.91406,83 H 254 v 18.625 h -23.08594 z m 0,0"
+         id="path1239" />
+    </clipPath>
+    <clipPath
+       id="clip280">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1242" />
+    </clipPath>
+    <clipPath
+       id="clip281">
+      <path
+         d="M 230.91406,82 H 255 v 19.625 h -24.08594 z m 0,0"
+         id="path1245" />
+    </clipPath>
+    <clipPath
+       id="clip282">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1248" />
+    </clipPath>
+    <clipPath
+       id="clip283">
+      <path
+         d="M 230.91406,81 H 255 v 20.625 h -24.08594 z m 0,0"
+         id="path1251" />
+    </clipPath>
+    <clipPath
+       id="clip284">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1254" />
+    </clipPath>
+    <clipPath
+       id="clip285">
+      <path
+         d="M 230.91406,80 H 256 v 21 h -25.08594 z m 0,0"
+         id="path1257" />
+    </clipPath>
+    <clipPath
+       id="clip286">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1260" />
+    </clipPath>
+    <clipPath
+       id="clip287">
+      <path
+         d="M 230.91406,80 H 257 v 20 h -26.08594 z m 0,0"
+         id="path1263" />
+    </clipPath>
+    <clipPath
+       id="clip288">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1266" />
+    </clipPath>
+    <clipPath
+       id="clip289">
+      <path
+         d="M 230.91406,79 H 258 v 21 h -27.08594 z m 0,0"
+         id="path1269" />
+    </clipPath>
+    <clipPath
+       id="clip290">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1272" />
+    </clipPath>
+    <clipPath
+       id="clip291">
+      <path
+         d="M 230.91406,78 H 258 v 21 h -27.08594 z m 0,0"
+         id="path1275" />
+    </clipPath>
+    <clipPath
+       id="clip292">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1278" />
+    </clipPath>
+    <clipPath
+       id="clip293">
+      <path
+         d="M 230.91406,77 H 259 v 21 h -28.08594 z m 0,0"
+         id="path1281" />
+    </clipPath>
+    <clipPath
+       id="clip294">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1284" />
+    </clipPath>
+    <clipPath
+       id="clip295">
+      <path
+         d="M 230.91406,77 H 260 v 20 h -29.08594 z m 0,0"
+         id="path1287" />
+    </clipPath>
+    <clipPath
+       id="clip296">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1290" />
+    </clipPath>
+    <clipPath
+       id="clip297">
+      <path
+         d="M 230.91406,76 H 261 v 21 h -30.08594 z m 0,0"
+         id="path1293" />
+    </clipPath>
+    <clipPath
+       id="clip298">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1296" />
+    </clipPath>
+    <clipPath
+       id="clip299">
+      <path
+         d="M 230.91406,75 H 261 v 21 h -30.08594 z m 0,0"
+         id="path1299" />
+    </clipPath>
+    <clipPath
+       id="clip300">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1302" />
+    </clipPath>
+    <clipPath
+       id="clip301">
+      <path
+         d="M 230.91406,74 H 262 v 21 h -31.08594 z m 0,0"
+         id="path1305" />
+    </clipPath>
+    <clipPath
+       id="clip302">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1308" />
+    </clipPath>
+    <clipPath
+       id="clip303">
+      <path
+         d="M 230.91406,74 H 263 v 20 h -32.08594 z m 0,0"
+         id="path1311" />
+    </clipPath>
+    <clipPath
+       id="clip304">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1314" />
+    </clipPath>
+    <clipPath
+       id="clip305">
+      <path
+         d="M 230.91406,73 H 264 v 21 h -33.08594 z m 0,0"
+         id="path1317" />
+    </clipPath>
+    <clipPath
+       id="clip306">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1320" />
+    </clipPath>
+    <clipPath
+       id="clip307">
+      <path
+         d="m 231,72 h 33 v 21 h -33 z m 0,0"
+         id="path1323" />
+    </clipPath>
+    <clipPath
+       id="clip308">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1326" />
+    </clipPath>
+    <clipPath
+       id="clip309">
+      <path
+         d="m 231,71 h 34 v 21 h -34 z m 0,0"
+         id="path1329" />
+    </clipPath>
+    <clipPath
+       id="clip310">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1332" />
+    </clipPath>
+    <clipPath
+       id="clip311">
+      <path
+         d="m 232,71 h 34 v 20 h -34 z m 0,0"
+         id="path1335" />
+    </clipPath>
+    <clipPath
+       id="clip312">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1338" />
+    </clipPath>
+    <clipPath
+       id="clip313">
+      <path
+         d="m 233,70 h 34 v 21 h -34 z m 0,0"
+         id="path1341" />
+    </clipPath>
+    <clipPath
+       id="clip314">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1344" />
+    </clipPath>
+    <clipPath
+       id="clip315">
+      <path
+         d="m 234,69 h 33 v 21 h -33 z m 0,0"
+         id="path1347" />
+    </clipPath>
+    <clipPath
+       id="clip316">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1350" />
+    </clipPath>
+    <clipPath
+       id="clip317">
+      <path
+         d="m 234,68 h 34 v 21 h -34 z m 0,0"
+         id="path1353" />
+    </clipPath>
+    <clipPath
+       id="clip318">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1356" />
+    </clipPath>
+    <clipPath
+       id="clip319">
+      <path
+         d="m 235,68 h 34 v 20 h -34 z m 0,0"
+         id="path1359" />
+    </clipPath>
+    <clipPath
+       id="clip320">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1362" />
+    </clipPath>
+    <clipPath
+       id="clip321">
+      <path
+         d="m 236,67 h 34 v 21 h -34 z m 0,0"
+         id="path1365" />
+    </clipPath>
+    <clipPath
+       id="clip322">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1368" />
+    </clipPath>
+    <clipPath
+       id="clip323">
+      <path
+         d="m 237,66 h 33 v 21 h -33 z m 0,0"
+         id="path1371" />
+    </clipPath>
+    <clipPath
+       id="clip324">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1374" />
+    </clipPath>
+    <clipPath
+       id="clip325">
+      <path
+         d="m 237,65 h 34 v 21 h -34 z m 0,0"
+         id="path1377" />
+    </clipPath>
+    <clipPath
+       id="clip326">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1380" />
+    </clipPath>
+    <clipPath
+       id="clip327">
+      <path
+         d="m 238,65 h 34 v 20 h -34 z m 0,0"
+         id="path1383" />
+    </clipPath>
+    <clipPath
+       id="clip328">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1386" />
+    </clipPath>
+    <clipPath
+       id="clip329">
+      <path
+         d="m 239,64 h 34 v 21 h -34 z m 0,0"
+         id="path1389" />
+    </clipPath>
+    <clipPath
+       id="clip330">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1392" />
+    </clipPath>
+    <clipPath
+       id="clip331">
+      <path
+         d="m 240,63 h 33 v 21 h -33 z m 0,0"
+         id="path1395" />
+    </clipPath>
+    <clipPath
+       id="clip332">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1398" />
+    </clipPath>
+    <clipPath
+       id="clip333">
+      <path
+         d="m 240,62 h 34 v 21 h -34 z m 0,0"
+         id="path1401" />
+    </clipPath>
+    <clipPath
+       id="clip334">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1404" />
+    </clipPath>
+    <clipPath
+       id="clip335">
+      <path
+         d="m 231,49.125 h 52.41406 v 52.5 H 231 Z m 0,0"
+         id="path1407" />
+    </clipPath>
+    <clipPath
+       id="clip336">
+      <path
+         d="m 233.91406,49.125 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1410" />
+    </clipPath>
+    <clipPath
+       id="clip337">
+      <path
+         d="m 234,49 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 234 c -1.65625,0 -3,-1.34375 -3,-3 V 52 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1413" />
+    </clipPath>
+    <clipPath
+       id="clip338">
+      <path
+         d="m 312.58594,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path1416" />
+    </clipPath>
+    <clipPath
+       id="clip339">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1419" />
+    </clipPath>
+    <linearGradient
+       id="linear3"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.001494"
+       y1="105.0015"
+       x2="104.9985"
+       y2="0.001494"
+       gradientTransform="matrix(0.5,0,0,0.5,312.58749,49.125)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(79.998779%,43.920898%,22.3526%);stop-opacity:1;"
+         id="stop1422" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(80.041504%,44.033813%,22.505188%);stop-opacity:1;"
+         id="stop1424" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(80.126953%,44.259644%,22.810364%);stop-opacity:1;"
+         id="stop1426" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(80.213928%,44.487%,23.117065%);stop-opacity:1;"
+         id="stop1428" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(80.299377%,44.714355%,23.423767%);stop-opacity:1;"
+         id="stop1430" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(80.384827%,44.940186%,23.730469%);stop-opacity:1;"
+         id="stop1432" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(80.470276%,45.167542%,24.035645%);stop-opacity:1;"
+         id="stop1434" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(80.557251%,45.393372%,24.342346%);stop-opacity:1;"
+         id="stop1436" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(80.6427%,45.620728%,24.649048%);stop-opacity:1;"
+         id="stop1438" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(80.728149%,45.846558%,24.95575%);stop-opacity:1;"
+         id="stop1440" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(80.813599%,46.073914%,25.262451%);stop-opacity:1;"
+         id="stop1442" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(80.899048%,46.30127%,25.567627%);stop-opacity:1;"
+         id="stop1444" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(80.986023%,46.5271%,25.874329%);stop-opacity:1;"
+         id="stop1446" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(81.071472%,46.754456%,26.18103%);stop-opacity:1;"
+         id="stop1448" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(81.156921%,46.980286%,26.487732%);stop-opacity:1;"
+         id="stop1450" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(81.242371%,47.207642%,26.794434%);stop-opacity:1;"
+         id="stop1452" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(81.329346%,47.434998%,27.099609%);stop-opacity:1;"
+         id="stop1454" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(81.414795%,47.660828%,27.406311%);stop-opacity:1;"
+         id="stop1456" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(81.500244%,47.888184%,27.713013%);stop-opacity:1;"
+         id="stop1458" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(81.585693%,48.114014%,28.019714%);stop-opacity:1;"
+         id="stop1460" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(81.671143%,48.34137%,28.32489%);stop-opacity:1;"
+         id="stop1462" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(81.758118%,48.5672%,28.631592%);stop-opacity:1;"
+         id="stop1464" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(81.843567%,48.794556%,28.938293%);stop-opacity:1;"
+         id="stop1466" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(81.929016%,49.021912%,29.244995%);stop-opacity:1;"
+         id="stop1468" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(82.014465%,49.247742%,29.551697%);stop-opacity:1;"
+         id="stop1470" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(82.10144%,49.475098%,29.856873%);stop-opacity:1;"
+         id="stop1472" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(82.18689%,49.700928%,30.163574%);stop-opacity:1;"
+         id="stop1474" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(82.272339%,49.928284%,30.470276%);stop-opacity:1;"
+         id="stop1476" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(82.357788%,50.154114%,30.776978%);stop-opacity:1;"
+         id="stop1478" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(82.443237%,50.38147%,31.082153%);stop-opacity:1;"
+         id="stop1480" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(82.530212%,50.608826%,31.388855%);stop-opacity:1;"
+         id="stop1482" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(82.615662%,50.834656%,31.695557%);stop-opacity:1;"
+         id="stop1484" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(82.701111%,51.062012%,32.002258%);stop-opacity:1;"
+         id="stop1486" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(82.78656%,51.287842%,32.30896%);stop-opacity:1;"
+         id="stop1488" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(82.872009%,51.515198%,32.614136%);stop-opacity:1;"
+         id="stop1490" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(82.958984%,51.742554%,32.920837%);stop-opacity:1;"
+         id="stop1492" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(83.044434%,51.968384%,33.227539%);stop-opacity:1;"
+         id="stop1494" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(83.129883%,52.19574%,33.534241%);stop-opacity:1;"
+         id="stop1496" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(83.215332%,52.42157%,33.840942%);stop-opacity:1;"
+         id="stop1498" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(83.302307%,52.648926%,34.146118%);stop-opacity:1;"
+         id="stop1500" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(83.387756%,52.874756%,34.45282%);stop-opacity:1;"
+         id="stop1502" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(83.473206%,53.102112%,34.759521%);stop-opacity:1;"
+         id="stop1504" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(83.558655%,53.329468%,35.066223%);stop-opacity:1;"
+         id="stop1506" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(83.644104%,53.555298%,35.371399%);stop-opacity:1;"
+         id="stop1508" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(83.731079%,53.782654%,35.678101%);stop-opacity:1;"
+         id="stop1510" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(83.816528%,54.008484%,35.984802%);stop-opacity:1;"
+         id="stop1512" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(83.901978%,54.23584%,36.291504%);stop-opacity:1;"
+         id="stop1514" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(83.987427%,54.463196%,36.598206%);stop-opacity:1;"
+         id="stop1516" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(84.074402%,54.689026%,36.903381%);stop-opacity:1;"
+         id="stop1518" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(84.159851%,54.916382%,37.210083%);stop-opacity:1;"
+         id="stop1520" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(84.2453%,55.142212%,37.516785%);stop-opacity:1;"
+         id="stop1522" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(84.33075%,55.369568%,37.823486%);stop-opacity:1;"
+         id="stop1524" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(84.416199%,55.595398%,38.130188%);stop-opacity:1;"
+         id="stop1526" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(84.503174%,55.822754%,38.435364%);stop-opacity:1;"
+         id="stop1528" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(84.588623%,56.05011%,38.742065%);stop-opacity:1;"
+         id="stop1530" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(84.674072%,56.27594%,39.048767%);stop-opacity:1;"
+         id="stop1532" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(84.759521%,56.503296%,39.355469%);stop-opacity:1;"
+         id="stop1534" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(84.846497%,56.729126%,39.660645%);stop-opacity:1;"
+         id="stop1536" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(84.931946%,56.956482%,39.967346%);stop-opacity:1;"
+         id="stop1538" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(85.017395%,57.182312%,40.274048%);stop-opacity:1;"
+         id="stop1540" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(85.102844%,57.409668%,40.58075%);stop-opacity:1;"
+         id="stop1542" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(85.188293%,57.637024%,40.887451%);stop-opacity:1;"
+         id="stop1544" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(85.275269%,57.862854%,41.192627%);stop-opacity:1;"
+         id="stop1546" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(85.360718%,58.09021%,41.499329%);stop-opacity:1;"
+         id="stop1548" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(85.446167%,58.31604%,41.80603%);stop-opacity:1;"
+         id="stop1550" />
+    </linearGradient>
+    <clipPath
+       id="clip340">
+      <path
+         d="M 312.58594,101 H 314 v 0.625 h -1.41406 z m 0,0"
+         id="path1553" />
+    </clipPath>
+    <clipPath
+       id="clip341">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1556" />
+    </clipPath>
+    <clipPath
+       id="clip342">
+      <path
+         d="M 312.58594,100 H 315 v 1.625 h -2.41406 z m 0,0"
+         id="path1559" />
+    </clipPath>
+    <clipPath
+       id="clip343">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1562" />
+    </clipPath>
+    <clipPath
+       id="clip344">
+      <path
+         d="M 312.58594,99 H 316 v 2.625 h -3.41406 z m 0,0"
+         id="path1565" />
+    </clipPath>
+    <clipPath
+       id="clip345">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1568" />
+    </clipPath>
+    <clipPath
+       id="clip346">
+      <path
+         d="M 312.58594,98 H 317 v 3.625 h -4.41406 z m 0,0"
+         id="path1571" />
+    </clipPath>
+    <clipPath
+       id="clip347">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1574" />
+    </clipPath>
+    <clipPath
+       id="clip348">
+      <path
+         d="M 312.58594,97 H 318 v 4.625 h -5.41406 z m 0,0"
+         id="path1577" />
+    </clipPath>
+    <clipPath
+       id="clip349">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1580" />
+    </clipPath>
+    <clipPath
+       id="clip350">
+      <path
+         d="M 312.58594,96 H 319 v 5.625 h -6.41406 z m 0,0"
+         id="path1583" />
+    </clipPath>
+    <clipPath
+       id="clip351">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1586" />
+    </clipPath>
+    <clipPath
+       id="clip352">
+      <path
+         d="M 312.58594,95 H 320 v 6.625 h -7.41406 z m 0,0"
+         id="path1589" />
+    </clipPath>
+    <clipPath
+       id="clip353">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1592" />
+    </clipPath>
+    <clipPath
+       id="clip354">
+      <path
+         d="M 312.58594,94 H 321 v 7.625 h -8.41406 z m 0,0"
+         id="path1595" />
+    </clipPath>
+    <clipPath
+       id="clip355">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1598" />
+    </clipPath>
+    <clipPath
+       id="clip356">
+      <path
+         d="M 312.58594,93 H 322 v 8.625 h -9.41406 z m 0,0"
+         id="path1601" />
+    </clipPath>
+    <clipPath
+       id="clip357">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1604" />
+    </clipPath>
+    <clipPath
+       id="clip358">
+      <path
+         d="M 312.58594,92 H 323 v 9.625 h -10.41406 z m 0,0"
+         id="path1607" />
+    </clipPath>
+    <clipPath
+       id="clip359">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1610" />
+    </clipPath>
+    <clipPath
+       id="clip360">
+      <path
+         d="M 312.58594,91 H 324 v 10.625 h -11.41406 z m 0,0"
+         id="path1613" />
+    </clipPath>
+    <clipPath
+       id="clip361">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1616" />
+    </clipPath>
+    <clipPath
+       id="clip362">
+      <path
+         d="M 312.58594,90 H 325 v 11.625 h -12.41406 z m 0,0"
+         id="path1619" />
+    </clipPath>
+    <clipPath
+       id="clip363">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1622" />
+    </clipPath>
+    <clipPath
+       id="clip364">
+      <path
+         d="M 312.58594,89 H 326 v 12.625 h -13.41406 z m 0,0"
+         id="path1625" />
+    </clipPath>
+    <clipPath
+       id="clip365">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1628" />
+    </clipPath>
+    <clipPath
+       id="clip366">
+      <path
+         d="M 312.58594,88 H 327 v 13.625 h -14.41406 z m 0,0"
+         id="path1631" />
+    </clipPath>
+    <clipPath
+       id="clip367">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1634" />
+    </clipPath>
+    <clipPath
+       id="clip368">
+      <path
+         d="M 312.58594,87 H 328 v 14.625 h -15.41406 z m 0,0"
+         id="path1637" />
+    </clipPath>
+    <clipPath
+       id="clip369">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1640" />
+    </clipPath>
+    <clipPath
+       id="clip370">
+      <path
+         d="M 312.58594,86 H 329 v 15.625 h -16.41406 z m 0,0"
+         id="path1643" />
+    </clipPath>
+    <clipPath
+       id="clip371">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1646" />
+    </clipPath>
+    <clipPath
+       id="clip372">
+      <path
+         d="M 312.58594,85 H 330 v 16.625 h -17.41406 z m 0,0"
+         id="path1649" />
+    </clipPath>
+    <clipPath
+       id="clip373">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1652" />
+    </clipPath>
+    <clipPath
+       id="clip374">
+      <path
+         d="M 312.58594,84 H 331 v 17.625 h -18.41406 z m 0,0"
+         id="path1655" />
+    </clipPath>
+    <clipPath
+       id="clip375">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1658" />
+    </clipPath>
+    <clipPath
+       id="clip376">
+      <path
+         d="M 312.58594,83 H 332 v 18.625 h -19.41406 z m 0,0"
+         id="path1661" />
+    </clipPath>
+    <clipPath
+       id="clip377">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1664" />
+    </clipPath>
+    <clipPath
+       id="clip378">
+      <path
+         d="M 312.58594,82 H 333 v 19.625 h -20.41406 z m 0,0"
+         id="path1667" />
+    </clipPath>
+    <clipPath
+       id="clip379">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1670" />
+    </clipPath>
+    <clipPath
+       id="clip380">
+      <path
+         d="M 312.58594,81 H 334 v 20.625 h -21.41406 z m 0,0"
+         id="path1673" />
+    </clipPath>
+    <clipPath
+       id="clip381">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1676" />
+    </clipPath>
+    <clipPath
+       id="clip382">
+      <path
+         d="M 312.58594,80 H 335 v 21.625 h -22.41406 z m 0,0"
+         id="path1679" />
+    </clipPath>
+    <clipPath
+       id="clip383">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1682" />
+    </clipPath>
+    <clipPath
+       id="clip384">
+      <path
+         d="M 312.58594,79 H 336 v 22.625 h -23.41406 z m 0,0"
+         id="path1685" />
+    </clipPath>
+    <clipPath
+       id="clip385">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1688" />
+    </clipPath>
+    <clipPath
+       id="clip386">
+      <path
+         d="M 312.58594,78 H 337 v 23.625 h -24.41406 z m 0,0"
+         id="path1691" />
+    </clipPath>
+    <clipPath
+       id="clip387">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1694" />
+    </clipPath>
+    <clipPath
+       id="clip388">
+      <path
+         d="M 312.58594,77 H 338 v 24.625 h -25.41406 z m 0,0"
+         id="path1697" />
+    </clipPath>
+    <clipPath
+       id="clip389">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1700" />
+    </clipPath>
+    <clipPath
+       id="clip390">
+      <path
+         d="M 312.58594,76 H 339 v 25.625 h -26.41406 z m 0,0"
+         id="path1703" />
+    </clipPath>
+    <clipPath
+       id="clip391">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1706" />
+    </clipPath>
+    <clipPath
+       id="clip392">
+      <path
+         d="M 312.58594,75 H 340 v 26.625 h -27.41406 z m 0,0"
+         id="path1709" />
+    </clipPath>
+    <clipPath
+       id="clip393">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1712" />
+    </clipPath>
+    <clipPath
+       id="clip394">
+      <path
+         d="M 312.58594,74 H 341 v 27 h -28.41406 z m 0,0"
+         id="path1715" />
+    </clipPath>
+    <clipPath
+       id="clip395">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1718" />
+    </clipPath>
+    <clipPath
+       id="clip396">
+      <path
+         d="M 312.58594,73 H 342 v 27 h -29.41406 z m 0,0"
+         id="path1721" />
+    </clipPath>
+    <clipPath
+       id="clip397">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1724" />
+    </clipPath>
+    <clipPath
+       id="clip398">
+      <path
+         d="M 312.58594,72 H 343 v 28 h -30.41406 z m 0,0"
+         id="path1727" />
+    </clipPath>
+    <clipPath
+       id="clip399">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1730" />
+    </clipPath>
+    <clipPath
+       id="clip400">
+      <path
+         d="M 312.58594,72 H 343 v 27 h -30.41406 z m 0,0"
+         id="path1733" />
+    </clipPath>
+    <clipPath
+       id="clip401">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1736" />
+    </clipPath>
+    <clipPath
+       id="clip402">
+      <path
+         d="M 312.58594,71 H 344 v 27 h -31.41406 z m 0,0"
+         id="path1739" />
+    </clipPath>
+    <clipPath
+       id="clip403">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1742" />
+    </clipPath>
+    <clipPath
+       id="clip404">
+      <path
+         d="M 312.58594,70 H 345 v 27 h -32.41406 z m 0,0"
+         id="path1745" />
+    </clipPath>
+    <clipPath
+       id="clip405">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1748" />
+    </clipPath>
+    <clipPath
+       id="clip406">
+      <path
+         d="M 312.58594,69 H 346 v 28 h -33.41406 z m 0,0"
+         id="path1751" />
+    </clipPath>
+    <clipPath
+       id="clip407">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1754" />
+    </clipPath>
+    <clipPath
+       id="clip408">
+      <path
+         d="M 312.58594,69 H 346 v 27 h -33.41406 z m 0,0"
+         id="path1757" />
+    </clipPath>
+    <clipPath
+       id="clip409">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1760" />
+    </clipPath>
+    <clipPath
+       id="clip410">
+      <path
+         d="M 312.58594,68 H 347 v 27 h -34.41406 z m 0,0"
+         id="path1763" />
+    </clipPath>
+    <clipPath
+       id="clip411">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1766" />
+    </clipPath>
+    <clipPath
+       id="clip412">
+      <path
+         d="M 312.58594,67 H 348 v 27 h -35.41406 z m 0,0"
+         id="path1769" />
+    </clipPath>
+    <clipPath
+       id="clip413">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1772" />
+    </clipPath>
+    <clipPath
+       id="clip414">
+      <path
+         d="m 313,66 h 36 v 28 h -36 z m 0,0"
+         id="path1775" />
+    </clipPath>
+    <clipPath
+       id="clip415">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1778" />
+    </clipPath>
+    <clipPath
+       id="clip416">
+      <path
+         d="m 313,66 h 36 v 27 h -36 z m 0,0"
+         id="path1781" />
+    </clipPath>
+    <clipPath
+       id="clip417">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1784" />
+    </clipPath>
+    <clipPath
+       id="clip418">
+      <path
+         d="m 314,65 h 36 v 27 h -36 z m 0,0"
+         id="path1787" />
+    </clipPath>
+    <clipPath
+       id="clip419">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1790" />
+    </clipPath>
+    <clipPath
+       id="clip420">
+      <path
+         d="m 315,64 h 36 v 27 h -36 z m 0,0"
+         id="path1793" />
+    </clipPath>
+    <clipPath
+       id="clip421">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1796" />
+    </clipPath>
+    <clipPath
+       id="clip422">
+      <path
+         d="m 316,63 h 36 v 28 h -36 z m 0,0"
+         id="path1799" />
+    </clipPath>
+    <clipPath
+       id="clip423">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1802" />
+    </clipPath>
+    <clipPath
+       id="clip424">
+      <path
+         d="m 316,63 h 36 v 27 h -36 z m 0,0"
+         id="path1805" />
+    </clipPath>
+    <clipPath
+       id="clip425">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1808" />
+    </clipPath>
+    <clipPath
+       id="clip426">
+      <path
+         d="m 317,62 h 36 v 27 h -36 z m 0,0"
+         id="path1811" />
+    </clipPath>
+    <clipPath
+       id="clip427">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1814" />
+    </clipPath>
+    <clipPath
+       id="clip428">
+      <path
+         d="m 318,61 h 36 v 27 h -36 z m 0,0"
+         id="path1817" />
+    </clipPath>
+    <clipPath
+       id="clip429">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1820" />
+    </clipPath>
+    <clipPath
+       id="clip430">
+      <path
+         d="m 319,60 h 36 v 28 h -36 z m 0,0"
+         id="path1823" />
+    </clipPath>
+    <clipPath
+       id="clip431">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1826" />
+    </clipPath>
+    <clipPath
+       id="clip432">
+      <path
+         d="m 319,60 h 36 v 27 h -36 z m 0,0"
+         id="path1829" />
+    </clipPath>
+    <clipPath
+       id="clip433">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1832" />
+    </clipPath>
+    <clipPath
+       id="clip434">
+      <path
+         d="m 320,59 h 36 v 27 h -36 z m 0,0"
+         id="path1835" />
+    </clipPath>
+    <clipPath
+       id="clip435">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1838" />
+    </clipPath>
+    <clipPath
+       id="clip436">
+      <path
+         d="m 321,58 h 36 v 27 h -36 z m 0,0"
+         id="path1841" />
+    </clipPath>
+    <clipPath
+       id="clip437">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1844" />
+    </clipPath>
+    <clipPath
+       id="clip438">
+      <path
+         d="m 313,49.125 h 52 v 52.5 h -52 z m 0,0"
+         id="path1847" />
+    </clipPath>
+    <clipPath
+       id="clip439">
+      <path
+         d="m 315.58594,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path1850" />
+    </clipPath>
+    <clipPath
+       id="clip440">
+      <path
+         d="M 315.5,49 H 362 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 V 52 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1853" />
+    </clipPath>
+    <clipPath
+       id="clip441">
+      <path
+         d="m 394.26172,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path1856" />
+    </clipPath>
+    <clipPath
+       id="clip442">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1859" />
+    </clipPath>
+    <linearGradient
+       id="linear4"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.000512"
+       y1="105.00051"
+       x2="104.99949"
+       y2="0.000512"
+       gradientTransform="matrix(0.5,0,0,0.5,394.26251,49.125)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(79.998779%,43.920898%,22.3526%);stop-opacity:1;"
+         id="stop1862" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(80.041504%,44.033813%,22.505188%);stop-opacity:1;"
+         id="stop1864" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(80.128479%,44.259644%,22.810364%);stop-opacity:1;"
+         id="stop1866" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(80.213928%,44.487%,23.117065%);stop-opacity:1;"
+         id="stop1868" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(80.299377%,44.714355%,23.423767%);stop-opacity:1;"
+         id="stop1870" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(80.384827%,44.940186%,23.730469%);stop-opacity:1;"
+         id="stop1872" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(80.470276%,45.167542%,24.03717%);stop-opacity:1;"
+         id="stop1874" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(80.557251%,45.393372%,24.342346%);stop-opacity:1;"
+         id="stop1876" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(80.6427%,45.620728%,24.649048%);stop-opacity:1;"
+         id="stop1878" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(80.728149%,45.848083%,24.95575%);stop-opacity:1;"
+         id="stop1880" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(80.813599%,46.073914%,25.262451%);stop-opacity:1;"
+         id="stop1882" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(80.899048%,46.30127%,25.567627%);stop-opacity:1;"
+         id="stop1884" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(80.986023%,46.5271%,25.874329%);stop-opacity:1;"
+         id="stop1886" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(81.071472%,46.754456%,26.18103%);stop-opacity:1;"
+         id="stop1888" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(81.156921%,46.980286%,26.487732%);stop-opacity:1;"
+         id="stop1890" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(81.242371%,47.207642%,26.794434%);stop-opacity:1;"
+         id="stop1892" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(81.329346%,47.434998%,27.099609%);stop-opacity:1;"
+         id="stop1894" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(81.414795%,47.660828%,27.406311%);stop-opacity:1;"
+         id="stop1896" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(81.500244%,47.888184%,27.713013%);stop-opacity:1;"
+         id="stop1898" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(81.585693%,48.114014%,28.019714%);stop-opacity:1;"
+         id="stop1900" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(81.671143%,48.34137%,28.326416%);stop-opacity:1;"
+         id="stop1902" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(81.758118%,48.568726%,28.631592%);stop-opacity:1;"
+         id="stop1904" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(81.843567%,48.794556%,28.938293%);stop-opacity:1;"
+         id="stop1906" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(81.929016%,49.021912%,29.244995%);stop-opacity:1;"
+         id="stop1908" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(82.014465%,49.247742%,29.551697%);stop-opacity:1;"
+         id="stop1910" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(82.10144%,49.475098%,29.856873%);stop-opacity:1;"
+         id="stop1912" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(82.18689%,49.700928%,30.163574%);stop-opacity:1;"
+         id="stop1914" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(82.272339%,49.928284%,30.470276%);stop-opacity:1;"
+         id="stop1916" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(82.357788%,50.15564%,30.776978%);stop-opacity:1;"
+         id="stop1918" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(82.443237%,50.38147%,31.083679%);stop-opacity:1;"
+         id="stop1920" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(82.530212%,50.608826%,31.388855%);stop-opacity:1;"
+         id="stop1922" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(82.615662%,50.834656%,31.695557%);stop-opacity:1;"
+         id="stop1924" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(82.701111%,51.062012%,32.002258%);stop-opacity:1;"
+         id="stop1926" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(82.78656%,51.287842%,32.30896%);stop-opacity:1;"
+         id="stop1928" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(82.830811%,51.402283%,32.463074%);stop-opacity:1;"
+         id="stop1930" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(82.873535%,51.515198%,32.615662%);stop-opacity:1;"
+         id="stop1932" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(82.958984%,51.742554%,32.920837%);stop-opacity:1;"
+         id="stop1934" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(83.044434%,51.968384%,33.227539%);stop-opacity:1;"
+         id="stop1936" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(83.129883%,52.19574%,33.534241%);stop-opacity:1;"
+         id="stop1938" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(83.215332%,52.42157%,33.840942%);stop-opacity:1;"
+         id="stop1940" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(83.302307%,52.648926%,34.146118%);stop-opacity:1;"
+         id="stop1942" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(83.387756%,52.876282%,34.45282%);stop-opacity:1;"
+         id="stop1944" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(83.473206%,53.102112%,34.759521%);stop-opacity:1;"
+         id="stop1946" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(83.558655%,53.329468%,35.066223%);stop-opacity:1;"
+         id="stop1948" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(83.64563%,53.555298%,35.372925%);stop-opacity:1;"
+         id="stop1950" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(83.731079%,53.782654%,35.678101%);stop-opacity:1;"
+         id="stop1952" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(83.816528%,54.008484%,35.984802%);stop-opacity:1;"
+         id="stop1954" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(83.901978%,54.23584%,36.291504%);stop-opacity:1;"
+         id="stop1956" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(83.987427%,54.463196%,36.598206%);stop-opacity:1;"
+         id="stop1958" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(84.074402%,54.689026%,36.904907%);stop-opacity:1;"
+         id="stop1960" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(84.159851%,54.916382%,37.210083%);stop-opacity:1;"
+         id="stop1962" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(84.2453%,55.142212%,37.516785%);stop-opacity:1;"
+         id="stop1964" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(84.33075%,55.369568%,37.823486%);stop-opacity:1;"
+         id="stop1966" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(84.416199%,55.596924%,38.130188%);stop-opacity:1;"
+         id="stop1968" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(84.503174%,55.822754%,38.435364%);stop-opacity:1;"
+         id="stop1970" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(84.588623%,56.05011%,38.742065%);stop-opacity:1;"
+         id="stop1972" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(84.674072%,56.27594%,39.048767%);stop-opacity:1;"
+         id="stop1974" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(84.759521%,56.503296%,39.355469%);stop-opacity:1;"
+         id="stop1976" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(84.846497%,56.729126%,39.66217%);stop-opacity:1;"
+         id="stop1978" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(84.931946%,56.956482%,39.967346%);stop-opacity:1;"
+         id="stop1980" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(85.017395%,57.183838%,40.274048%);stop-opacity:1;"
+         id="stop1982" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(85.102844%,57.409668%,40.58075%);stop-opacity:1;"
+         id="stop1984" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(85.188293%,57.637024%,40.887451%);stop-opacity:1;"
+         id="stop1986" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(85.275269%,57.862854%,41.194153%);stop-opacity:1;"
+         id="stop1988" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(85.360718%,58.09021%,41.499329%);stop-opacity:1;"
+         id="stop1990" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(85.446167%,58.31604%,41.80603%);stop-opacity:1;"
+         id="stop1992" />
+    </linearGradient>
+    <clipPath
+       id="clip443">
+      <path
+         d="M 394.26172,97 H 395 v 4.625 h -0.73828 z m 0,0"
+         id="path1995" />
+    </clipPath>
+    <clipPath
+       id="clip444">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path1998" />
+    </clipPath>
+    <clipPath
+       id="clip445">
+      <path
+         d="M 394.26172,96 H 396 v 5.625 h -1.73828 z m 0,0"
+         id="path2001" />
+    </clipPath>
+    <clipPath
+       id="clip446">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2004" />
+    </clipPath>
+    <clipPath
+       id="clip447">
+      <path
+         d="M 394.26172,96 H 397 v 5.625 h -2.73828 z m 0,0"
+         id="path2007" />
+    </clipPath>
+    <clipPath
+       id="clip448">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2010" />
+    </clipPath>
+    <clipPath
+       id="clip449">
+      <path
+         d="M 394.26172,95 H 397 v 6.625 h -2.73828 z m 0,0"
+         id="path2013" />
+    </clipPath>
+    <clipPath
+       id="clip450">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2016" />
+    </clipPath>
+    <clipPath
+       id="clip451">
+      <path
+         d="M 394.26172,94 H 398 v 7.625 h -3.73828 z m 0,0"
+         id="path2019" />
+    </clipPath>
+    <clipPath
+       id="clip452">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2022" />
+    </clipPath>
+    <clipPath
+       id="clip453">
+      <path
+         d="M 394.26172,93 H 399 v 8.625 h -4.73828 z m 0,0"
+         id="path2025" />
+    </clipPath>
+    <clipPath
+       id="clip454">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2028" />
+    </clipPath>
+    <clipPath
+       id="clip455">
+      <path
+         d="M 394.26172,93 H 400 v 8.625 h -5.73828 z m 0,0"
+         id="path2031" />
+    </clipPath>
+    <clipPath
+       id="clip456">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2034" />
+    </clipPath>
+    <clipPath
+       id="clip457">
+      <path
+         d="M 394.26172,92 H 400 v 9.625 h -5.73828 z m 0,0"
+         id="path2037" />
+    </clipPath>
+    <clipPath
+       id="clip458">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2040" />
+    </clipPath>
+    <clipPath
+       id="clip459">
+      <path
+         d="M 394.26172,91 H 401 v 10.625 h -6.73828 z m 0,0"
+         id="path2043" />
+    </clipPath>
+    <clipPath
+       id="clip460">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2046" />
+    </clipPath>
+    <clipPath
+       id="clip461">
+      <path
+         d="M 394.26172,90 H 402 v 11.625 h -7.73828 z m 0,0"
+         id="path2049" />
+    </clipPath>
+    <clipPath
+       id="clip462">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2052" />
+    </clipPath>
+    <clipPath
+       id="clip463">
+      <path
+         d="M 394.26172,90 H 403 v 11.625 h -8.73828 z m 0,0"
+         id="path2055" />
+    </clipPath>
+    <clipPath
+       id="clip464">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2058" />
+    </clipPath>
+    <clipPath
+       id="clip465">
+      <path
+         d="M 394.26172,89 H 403 v 12.625 h -8.73828 z m 0,0"
+         id="path2061" />
+    </clipPath>
+    <clipPath
+       id="clip466">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2064" />
+    </clipPath>
+    <clipPath
+       id="clip467">
+      <path
+         d="M 394.26172,88 H 404 v 13.625 h -9.73828 z m 0,0"
+         id="path2067" />
+    </clipPath>
+    <clipPath
+       id="clip468">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2070" />
+    </clipPath>
+    <clipPath
+       id="clip469">
+      <path
+         d="M 394.26172,87 H 405 v 14.625 h -10.73828 z m 0,0"
+         id="path2073" />
+    </clipPath>
+    <clipPath
+       id="clip470">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2076" />
+    </clipPath>
+    <clipPath
+       id="clip471">
+      <path
+         d="M 394.26172,87 H 406 v 14.625 h -11.73828 z m 0,0"
+         id="path2079" />
+    </clipPath>
+    <clipPath
+       id="clip472">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2082" />
+    </clipPath>
+    <clipPath
+       id="clip473">
+      <path
+         d="M 394.26172,86 H 406 v 15.625 h -11.73828 z m 0,0"
+         id="path2085" />
+    </clipPath>
+    <clipPath
+       id="clip474">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2088" />
+    </clipPath>
+    <clipPath
+       id="clip475">
+      <path
+         d="M 394.26172,85 H 407 v 16.625 h -12.73828 z m 0,0"
+         id="path2091" />
+    </clipPath>
+    <clipPath
+       id="clip476">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2094" />
+    </clipPath>
+    <clipPath
+       id="clip477">
+      <path
+         d="M 394.26172,84 H 408 v 17.625 h -13.73828 z m 0,0"
+         id="path2097" />
+    </clipPath>
+    <clipPath
+       id="clip478">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2100" />
+    </clipPath>
+    <clipPath
+       id="clip479">
+      <path
+         d="M 394.26172,84 H 409 v 17.625 h -14.73828 z m 0,0"
+         id="path2103" />
+    </clipPath>
+    <clipPath
+       id="clip480">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2106" />
+    </clipPath>
+    <clipPath
+       id="clip481">
+      <path
+         d="M 394.26172,83 H 409 v 18.625 h -14.73828 z m 0,0"
+         id="path2109" />
+    </clipPath>
+    <clipPath
+       id="clip482">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2112" />
+    </clipPath>
+    <clipPath
+       id="clip483">
+      <path
+         d="M 394.26172,82 H 410 v 19.625 h -15.73828 z m 0,0"
+         id="path2115" />
+    </clipPath>
+    <clipPath
+       id="clip484">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2118" />
+    </clipPath>
+    <clipPath
+       id="clip485">
+      <path
+         d="M 394.26172,81 H 411 v 20.625 h -16.73828 z m 0,0"
+         id="path2121" />
+    </clipPath>
+    <clipPath
+       id="clip486">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2124" />
+    </clipPath>
+    <clipPath
+       id="clip487">
+      <path
+         d="M 394.26172,81 H 412 v 20.625 h -17.73828 z m 0,0"
+         id="path2127" />
+    </clipPath>
+    <clipPath
+       id="clip488">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2130" />
+    </clipPath>
+    <clipPath
+       id="clip489">
+      <path
+         d="M 394.26172,80 H 412 v 21.625 h -17.73828 z m 0,0"
+         id="path2133" />
+    </clipPath>
+    <clipPath
+       id="clip490">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2136" />
+    </clipPath>
+    <clipPath
+       id="clip491">
+      <path
+         d="M 394.26172,79 H 413 v 22.625 h -18.73828 z m 0,0"
+         id="path2139" />
+    </clipPath>
+    <clipPath
+       id="clip492">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2142" />
+    </clipPath>
+    <clipPath
+       id="clip493">
+      <path
+         d="M 394.26172,78 H 414 v 23.625 h -19.73828 z m 0,0"
+         id="path2145" />
+    </clipPath>
+    <clipPath
+       id="clip494">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2148" />
+    </clipPath>
+    <clipPath
+       id="clip495">
+      <path
+         d="M 394.26172,78 H 415 v 23.625 h -20.73828 z m 0,0"
+         id="path2151" />
+    </clipPath>
+    <clipPath
+       id="clip496">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2154" />
+    </clipPath>
+    <clipPath
+       id="clip497">
+      <path
+         d="M 394.26172,77 H 415 v 24.625 h -20.73828 z m 0,0"
+         id="path2157" />
+    </clipPath>
+    <clipPath
+       id="clip498">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2160" />
+    </clipPath>
+    <clipPath
+       id="clip499">
+      <path
+         d="M 394.26172,76 H 416 v 25.625 h -21.73828 z m 0,0"
+         id="path2163" />
+    </clipPath>
+    <clipPath
+       id="clip500">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2166" />
+    </clipPath>
+    <clipPath
+       id="clip501">
+      <path
+         d="M 394.26172,75 H 417 v 26.625 h -22.73828 z m 0,0"
+         id="path2169" />
+    </clipPath>
+    <clipPath
+       id="clip502">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2172" />
+    </clipPath>
+    <clipPath
+       id="clip503">
+      <path
+         d="M 394.26172,75 H 418 v 26.625 h -23.73828 z m 0,0"
+         id="path2175" />
+    </clipPath>
+    <clipPath
+       id="clip504">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2178" />
+    </clipPath>
+    <clipPath
+       id="clip505">
+      <path
+         d="M 394.26172,74 H 418 v 27.625 h -23.73828 z m 0,0"
+         id="path2181" />
+    </clipPath>
+    <clipPath
+       id="clip506">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2184" />
+    </clipPath>
+    <clipPath
+       id="clip507">
+      <path
+         d="M 394.26172,73 H 419 v 28.625 h -24.73828 z m 0,0"
+         id="path2187" />
+    </clipPath>
+    <clipPath
+       id="clip508">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2190" />
+    </clipPath>
+    <clipPath
+       id="clip509">
+      <path
+         d="M 394.26172,72 H 420 v 29.625 h -25.73828 z m 0,0"
+         id="path2193" />
+    </clipPath>
+    <clipPath
+       id="clip510">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2196" />
+    </clipPath>
+    <clipPath
+       id="clip511">
+      <path
+         d="M 394.26172,72 H 421 v 29.625 h -26.73828 z m 0,0"
+         id="path2199" />
+    </clipPath>
+    <clipPath
+       id="clip512">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2202" />
+    </clipPath>
+    <clipPath
+       id="clip513">
+      <path
+         d="M 394.26172,71 H 421 v 30.625 h -26.73828 z m 0,0"
+         id="path2205" />
+    </clipPath>
+    <clipPath
+       id="clip514">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2208" />
+    </clipPath>
+    <clipPath
+       id="clip515">
+      <path
+         d="M 394.26172,70 H 422 v 31.625 h -27.73828 z m 0,0"
+         id="path2211" />
+    </clipPath>
+    <clipPath
+       id="clip516">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2214" />
+    </clipPath>
+    <clipPath
+       id="clip517">
+      <path
+         d="M 394.26172,69 H 423 v 32.625 h -28.73828 z m 0,0"
+         id="path2217" />
+    </clipPath>
+    <clipPath
+       id="clip518">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2220" />
+    </clipPath>
+    <clipPath
+       id="clip519">
+      <path
+         d="M 394.26172,69 H 424 v 32.625 h -29.73828 z m 0,0"
+         id="path2223" />
+    </clipPath>
+    <clipPath
+       id="clip520">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2226" />
+    </clipPath>
+    <clipPath
+       id="clip521">
+      <path
+         d="M 394.26172,68 H 424 v 33.625 h -29.73828 z m 0,0"
+         id="path2229" />
+    </clipPath>
+    <clipPath
+       id="clip522">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2232" />
+    </clipPath>
+    <clipPath
+       id="clip523">
+      <path
+         d="M 394.26172,67 H 425 v 34.625 h -30.73828 z m 0,0"
+         id="path2235" />
+    </clipPath>
+    <clipPath
+       id="clip524">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2238" />
+    </clipPath>
+    <clipPath
+       id="clip525">
+      <path
+         d="M 394.26172,66 H 426 v 35 h -31.73828 z m 0,0"
+         id="path2241" />
+    </clipPath>
+    <clipPath
+       id="clip526">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2244" />
+    </clipPath>
+    <clipPath
+       id="clip527">
+      <path
+         d="M 394.26172,66 H 427 v 34 h -32.73828 z m 0,0"
+         id="path2247" />
+    </clipPath>
+    <clipPath
+       id="clip528">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2250" />
+    </clipPath>
+    <clipPath
+       id="clip529">
+      <path
+         d="M 394.26172,65 H 427 v 35 h -32.73828 z m 0,0"
+         id="path2253" />
+    </clipPath>
+    <clipPath
+       id="clip530">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2256" />
+    </clipPath>
+    <clipPath
+       id="clip531">
+      <path
+         d="M 394.26172,64 H 428 v 35 h -33.73828 z m 0,0"
+         id="path2259" />
+    </clipPath>
+    <clipPath
+       id="clip532">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2262" />
+    </clipPath>
+    <clipPath
+       id="clip533">
+      <path
+         d="M 394.26172,63 H 429 v 35 h -34.73828 z m 0,0"
+         id="path2265" />
+    </clipPath>
+    <clipPath
+       id="clip534">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2268" />
+    </clipPath>
+    <clipPath
+       id="clip535">
+      <path
+         d="m 395,63 h 35 v 34 h -35 z m 0,0"
+         id="path2271" />
+    </clipPath>
+    <clipPath
+       id="clip536">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2274" />
+    </clipPath>
+    <clipPath
+       id="clip537">
+      <path
+         d="m 396,62 h 34 v 35 h -34 z m 0,0"
+         id="path2277" />
+    </clipPath>
+    <clipPath
+       id="clip538">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2280" />
+    </clipPath>
+    <clipPath
+       id="clip539">
+      <path
+         d="m 396,61 h 35 v 35 h -35 z m 0,0"
+         id="path2283" />
+    </clipPath>
+    <clipPath
+       id="clip540">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2286" />
+    </clipPath>
+    <clipPath
+       id="clip541">
+      <path
+         d="m 397,60 h 35 v 35 h -35 z m 0,0"
+         id="path2289" />
+    </clipPath>
+    <clipPath
+       id="clip542">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2292" />
+    </clipPath>
+    <clipPath
+       id="clip543">
+      <path
+         d="m 398,60 h 35 v 34 h -35 z m 0,0"
+         id="path2295" />
+    </clipPath>
+    <clipPath
+       id="clip544">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2298" />
+    </clipPath>
+    <clipPath
+       id="clip545">
+      <path
+         d="m 399,59 h 34 v 35 h -34 z m 0,0"
+         id="path2301" />
+    </clipPath>
+    <clipPath
+       id="clip546">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2304" />
+    </clipPath>
+    <clipPath
+       id="clip547">
+      <path
+         d="m 399,58 h 35 v 35 h -35 z m 0,0"
+         id="path2307" />
+    </clipPath>
+    <clipPath
+       id="clip548">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2310" />
+    </clipPath>
+    <clipPath
+       id="clip549">
+      <path
+         d="m 400,57 h 35 v 35 h -35 z m 0,0"
+         id="path2313" />
+    </clipPath>
+    <clipPath
+       id="clip550">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2316" />
+    </clipPath>
+    <clipPath
+       id="clip551">
+      <path
+         d="m 401,57 h 35 v 34 h -35 z m 0,0"
+         id="path2319" />
+    </clipPath>
+    <clipPath
+       id="clip552">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2322" />
+    </clipPath>
+    <clipPath
+       id="clip553">
+      <path
+         d="m 402,56 h 34 v 35 h -34 z m 0,0"
+         id="path2325" />
+    </clipPath>
+    <clipPath
+       id="clip554">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2328" />
+    </clipPath>
+    <clipPath
+       id="clip555">
+      <path
+         d="m 402,55 h 35 v 35 h -35 z m 0,0"
+         id="path2331" />
+    </clipPath>
+    <clipPath
+       id="clip556">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2334" />
+    </clipPath>
+    <clipPath
+       id="clip557">
+      <path
+         d="m 403,54 h 35 v 35 h -35 z m 0,0"
+         id="path2337" />
+    </clipPath>
+    <clipPath
+       id="clip558">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2340" />
+    </clipPath>
+    <clipPath
+       id="clip559">
+      <path
+         d="m 394.26172,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path2343" />
+    </clipPath>
+    <clipPath
+       id="clip560">
+      <path
+         d="m 397.26172,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2346" />
+    </clipPath>
+    <clipPath
+       id="clip561">
+      <path
+         d="M 397.5,49 H 444 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 V 52 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2349" />
+    </clipPath>
+    <clipPath
+       id="clip562">
+      <path
+         d="m 475.9375,49.125 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path2352" />
+    </clipPath>
+    <clipPath
+       id="clip563">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2355" />
+    </clipPath>
+    <linearGradient
+       id="linear5"
+       gradientUnits="userSpaceOnUse"
+       x1="0.00050000002"
+       y1="104.9995"
+       x2="105.0005"
+       y2="-0.00050000002"
+       gradientTransform="matrix(0.5,0,0,0.5,475.9375,49.125)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(79.214478%,32.548523%,46.665955%);stop-opacity:1;"
+         id="stop2358" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(79.223633%,32.655334%,46.742249%);stop-opacity:1;"
+         id="stop2360" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(79.241943%,32.868958%,46.894836%);stop-opacity:1;"
+         id="stop2362" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(79.260254%,33.084106%,47.04895%);stop-opacity:1;"
+         id="stop2364" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(79.278564%,33.299255%,47.201538%);stop-opacity:1;"
+         id="stop2366" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(79.296875%,33.512878%,47.355652%);stop-opacity:1;"
+         id="stop2368" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(79.316711%,33.728027%,47.50824%);stop-opacity:1;"
+         id="stop2370" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(79.335022%,33.94165%,47.660828%);stop-opacity:1;"
+         id="stop2372" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(79.353333%,34.156799%,47.814941%);stop-opacity:1;"
+         id="stop2374" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(79.371643%,34.370422%,47.967529%);stop-opacity:1;"
+         id="stop2376" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(79.389954%,34.585571%,48.121643%);stop-opacity:1;"
+         id="stop2378" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(79.408264%,34.799194%,48.274231%);stop-opacity:1;"
+         id="stop2380" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(79.426575%,35.014343%,48.426819%);stop-opacity:1;"
+         id="stop2382" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(79.444885%,35.227966%,48.580933%);stop-opacity:1;"
+         id="stop2384" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(79.463196%,35.443115%,48.733521%);stop-opacity:1;"
+         id="stop2386" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(79.481506%,35.658264%,48.887634%);stop-opacity:1;"
+         id="stop2388" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(79.499817%,35.871887%,49.040222%);stop-opacity:1;"
+         id="stop2390" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(79.518127%,36.087036%,49.19281%);stop-opacity:1;"
+         id="stop2392" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(79.536438%,36.300659%,49.346924%);stop-opacity:1;"
+         id="stop2394" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(79.554749%,36.515808%,49.499512%);stop-opacity:1;"
+         id="stop2396" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(79.573059%,36.729431%,49.6521%);stop-opacity:1;"
+         id="stop2398" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(79.59137%,36.94458%,49.806213%);stop-opacity:1;"
+         id="stop2400" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(79.60968%,37.158203%,49.958801%);stop-opacity:1;"
+         id="stop2402" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(79.627991%,37.373352%,50.112915%);stop-opacity:1;"
+         id="stop2404" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(79.646301%,37.586975%,50.265503%);stop-opacity:1;"
+         id="stop2406" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(79.664612%,37.802124%,50.418091%);stop-opacity:1;"
+         id="stop2408" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(79.682922%,38.017273%,50.572205%);stop-opacity:1;"
+         id="stop2410" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(79.702759%,38.230896%,50.724792%);stop-opacity:1;"
+         id="stop2412" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(79.721069%,38.446045%,50.878906%);stop-opacity:1;"
+         id="stop2414" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(79.73938%,38.659668%,51.031494%);stop-opacity:1;"
+         id="stop2416" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(79.75769%,38.874817%,51.184082%);stop-opacity:1;"
+         id="stop2418" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(79.776001%,39.08844%,51.338196%);stop-opacity:1;"
+         id="stop2420" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(79.794312%,39.303589%,51.490784%);stop-opacity:1;"
+         id="stop2422" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(79.803467%,39.4104%,51.568604%);stop-opacity:1;"
+         id="stop2424" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(79.812622%,39.517212%,51.644897%);stop-opacity:1;"
+         id="stop2426" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(79.821777%,39.625549%,51.721191%);stop-opacity:1;"
+         id="stop2428" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(79.830933%,39.732361%,51.797485%);stop-opacity:1;"
+         id="stop2430" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(79.849243%,39.94751%,51.950073%);stop-opacity:1;"
+         id="stop2432" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(79.867554%,40.161133%,52.104187%);stop-opacity:1;"
+         id="stop2434" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(79.885864%,40.376282%,52.256775%);stop-opacity:1;"
+         id="stop2436" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(79.904175%,40.589905%,52.410889%);stop-opacity:1;"
+         id="stop2438" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(79.922485%,40.805054%,52.563477%);stop-opacity:1;"
+         id="stop2440" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(79.940796%,41.018677%,52.716064%);stop-opacity:1;"
+         id="stop2442" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(79.959106%,41.233826%,52.870178%);stop-opacity:1;"
+         id="stop2444" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(79.977417%,41.447449%,53.022766%);stop-opacity:1;"
+         id="stop2446" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(79.995728%,41.662598%,53.175354%);stop-opacity:1;"
+         id="stop2448" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(80.014038%,41.876221%,53.329468%);stop-opacity:1;"
+         id="stop2450" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(80.032349%,42.09137%,53.482056%);stop-opacity:1;"
+         id="stop2452" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(80.050659%,42.306519%,53.636169%);stop-opacity:1;"
+         id="stop2454" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(80.06897%,42.520142%,53.788757%);stop-opacity:1;"
+         id="stop2456" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(80.088806%,42.735291%,53.941345%);stop-opacity:1;"
+         id="stop2458" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(80.107117%,42.948914%,54.095459%);stop-opacity:1;"
+         id="stop2460" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(80.125427%,43.164062%,54.248047%);stop-opacity:1;"
+         id="stop2462" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(80.143738%,43.377686%,54.402161%);stop-opacity:1;"
+         id="stop2464" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(80.162048%,43.592834%,54.554749%);stop-opacity:1;"
+         id="stop2466" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(80.180359%,43.806458%,54.707336%);stop-opacity:1;"
+         id="stop2468" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(80.198669%,44.021606%,54.86145%);stop-opacity:1;"
+         id="stop2470" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(80.21698%,44.236755%,55.014038%);stop-opacity:1;"
+         id="stop2472" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(80.235291%,44.450378%,55.168152%);stop-opacity:1;"
+         id="stop2474" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(80.253601%,44.665527%,55.32074%);stop-opacity:1;"
+         id="stop2476" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(80.271912%,44.87915%,55.473328%);stop-opacity:1;"
+         id="stop2478" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(80.290222%,45.094299%,55.627441%);stop-opacity:1;"
+         id="stop2480" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(80.308533%,45.307922%,55.780029%);stop-opacity:1;"
+         id="stop2482" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(80.326843%,45.523071%,55.934143%);stop-opacity:1;"
+         id="stop2484" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(80.345154%,45.736694%,56.086731%);stop-opacity:1;"
+         id="stop2486" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(80.363464%,45.951843%,56.239319%);stop-opacity:1;"
+         id="stop2488" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(80.381775%,46.165466%,56.393433%);stop-opacity:1;"
+         id="stop2490" />
+    </linearGradient>
+    <clipPath
+       id="clip564">
+      <path
+         d="M 475.9375,98 H 476 v 3.625 h -0.0625 z m 0,0"
+         id="path2493" />
+    </clipPath>
+    <clipPath
+       id="clip565">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2496" />
+    </clipPath>
+    <clipPath
+       id="clip566">
+      <path
+         d="M 475.9375,97 H 477 v 4.625 h -1.0625 z m 0,0"
+         id="path2499" />
+    </clipPath>
+    <clipPath
+       id="clip567">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2502" />
+    </clipPath>
+    <clipPath
+       id="clip568">
+      <path
+         d="M 475.9375,96 H 478 v 5.625 h -2.0625 z m 0,0"
+         id="path2505" />
+    </clipPath>
+    <clipPath
+       id="clip569">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2508" />
+    </clipPath>
+    <clipPath
+       id="clip570">
+      <path
+         d="M 475.9375,95 H 479 v 6.625 h -3.0625 z m 0,0"
+         id="path2511" />
+    </clipPath>
+    <clipPath
+       id="clip571">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2514" />
+    </clipPath>
+    <clipPath
+       id="clip572">
+      <path
+         d="M 475.9375,94 H 480 v 7.625 h -4.0625 z m 0,0"
+         id="path2517" />
+    </clipPath>
+    <clipPath
+       id="clip573">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2520" />
+    </clipPath>
+    <clipPath
+       id="clip574">
+      <path
+         d="M 475.9375,93 H 481 v 8.625 h -5.0625 z m 0,0"
+         id="path2523" />
+    </clipPath>
+    <clipPath
+       id="clip575">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2526" />
+    </clipPath>
+    <clipPath
+       id="clip576">
+      <path
+         d="M 475.9375,92 H 482 v 9.625 h -6.0625 z m 0,0"
+         id="path2529" />
+    </clipPath>
+    <clipPath
+       id="clip577">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2532" />
+    </clipPath>
+    <clipPath
+       id="clip578">
+      <path
+         d="M 475.9375,91 H 483 v 10.625 h -7.0625 z m 0,0"
+         id="path2535" />
+    </clipPath>
+    <clipPath
+       id="clip579">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2538" />
+    </clipPath>
+    <clipPath
+       id="clip580">
+      <path
+         d="M 475.9375,90 H 484 v 11.625 h -8.0625 z m 0,0"
+         id="path2541" />
+    </clipPath>
+    <clipPath
+       id="clip581">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2544" />
+    </clipPath>
+    <clipPath
+       id="clip582">
+      <path
+         d="M 475.9375,89 H 485 v 12.625 h -9.0625 z m 0,0"
+         id="path2547" />
+    </clipPath>
+    <clipPath
+       id="clip583">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2550" />
+    </clipPath>
+    <clipPath
+       id="clip584">
+      <path
+         d="M 475.9375,88 H 486 v 13.625 h -10.0625 z m 0,0"
+         id="path2553" />
+    </clipPath>
+    <clipPath
+       id="clip585">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2556" />
+    </clipPath>
+    <clipPath
+       id="clip586">
+      <path
+         d="M 475.9375,87 H 487 v 14.625 h -11.0625 z m 0,0"
+         id="path2559" />
+    </clipPath>
+    <clipPath
+       id="clip587">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2562" />
+    </clipPath>
+    <clipPath
+       id="clip588">
+      <path
+         d="M 475.9375,86 H 488 v 15.625 h -12.0625 z m 0,0"
+         id="path2565" />
+    </clipPath>
+    <clipPath
+       id="clip589">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2568" />
+    </clipPath>
+    <clipPath
+       id="clip590">
+      <path
+         d="M 475.9375,85 H 489 v 16.625 h -13.0625 z m 0,0"
+         id="path2571" />
+    </clipPath>
+    <clipPath
+       id="clip591">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2574" />
+    </clipPath>
+    <clipPath
+       id="clip592">
+      <path
+         d="M 475.9375,84 H 490 v 17.625 h -14.0625 z m 0,0"
+         id="path2577" />
+    </clipPath>
+    <clipPath
+       id="clip593">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2580" />
+    </clipPath>
+    <clipPath
+       id="clip594">
+      <path
+         d="M 475.9375,83 H 491 v 18.625 h -15.0625 z m 0,0"
+         id="path2583" />
+    </clipPath>
+    <clipPath
+       id="clip595">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2586" />
+    </clipPath>
+    <clipPath
+       id="clip596">
+      <path
+         d="M 475.9375,82 H 492 v 19.625 h -16.0625 z m 0,0"
+         id="path2589" />
+    </clipPath>
+    <clipPath
+       id="clip597">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2592" />
+    </clipPath>
+    <clipPath
+       id="clip598">
+      <path
+         d="M 475.9375,81 H 493 v 20.625 h -17.0625 z m 0,0"
+         id="path2595" />
+    </clipPath>
+    <clipPath
+       id="clip599">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2598" />
+    </clipPath>
+    <clipPath
+       id="clip600">
+      <path
+         d="M 475.9375,80 H 494 v 21.625 h -18.0625 z m 0,0"
+         id="path2601" />
+    </clipPath>
+    <clipPath
+       id="clip601">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2604" />
+    </clipPath>
+    <clipPath
+       id="clip602">
+      <path
+         d="M 475.9375,79 H 495 v 22.625 h -19.0625 z m 0,0"
+         id="path2607" />
+    </clipPath>
+    <clipPath
+       id="clip603">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2610" />
+    </clipPath>
+    <clipPath
+       id="clip604">
+      <path
+         d="M 475.9375,78 H 496 v 23.625 h -20.0625 z m 0,0"
+         id="path2613" />
+    </clipPath>
+    <clipPath
+       id="clip605">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2616" />
+    </clipPath>
+    <clipPath
+       id="clip606">
+      <path
+         d="M 475.9375,77 H 497 v 24.625 h -21.0625 z m 0,0"
+         id="path2619" />
+    </clipPath>
+    <clipPath
+       id="clip607">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2622" />
+    </clipPath>
+    <clipPath
+       id="clip608">
+      <path
+         d="M 475.9375,76 H 498 v 25.625 h -22.0625 z m 0,0"
+         id="path2625" />
+    </clipPath>
+    <clipPath
+       id="clip609">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2628" />
+    </clipPath>
+    <clipPath
+       id="clip610">
+      <path
+         d="M 475.9375,75 H 499 v 26.625 h -23.0625 z m 0,0"
+         id="path2631" />
+    </clipPath>
+    <clipPath
+       id="clip611">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2634" />
+    </clipPath>
+    <clipPath
+       id="clip612">
+      <path
+         d="M 475.9375,74 H 500 v 27.625 h -24.0625 z m 0,0"
+         id="path2637" />
+    </clipPath>
+    <clipPath
+       id="clip613">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2640" />
+    </clipPath>
+    <clipPath
+       id="clip614">
+      <path
+         d="M 475.9375,73 H 501 v 28.625 h -25.0625 z m 0,0"
+         id="path2643" />
+    </clipPath>
+    <clipPath
+       id="clip615">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2646" />
+    </clipPath>
+    <clipPath
+       id="clip616">
+      <path
+         d="M 475.9375,72 H 502 v 29.625 h -26.0625 z m 0,0"
+         id="path2649" />
+    </clipPath>
+    <clipPath
+       id="clip617">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2652" />
+    </clipPath>
+    <clipPath
+       id="clip618">
+      <path
+         d="M 475.9375,71 H 503 v 30.625 h -27.0625 z m 0,0"
+         id="path2655" />
+    </clipPath>
+    <clipPath
+       id="clip619">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2658" />
+    </clipPath>
+    <clipPath
+       id="clip620">
+      <path
+         d="M 475.9375,70 H 504 v 31.625 h -28.0625 z m 0,0"
+         id="path2661" />
+    </clipPath>
+    <clipPath
+       id="clip621">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2664" />
+    </clipPath>
+    <clipPath
+       id="clip622">
+      <path
+         d="M 475.9375,69 H 505 v 32.625 h -29.0625 z m 0,0"
+         id="path2667" />
+    </clipPath>
+    <clipPath
+       id="clip623">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2670" />
+    </clipPath>
+    <clipPath
+       id="clip624">
+      <path
+         d="M 475.9375,68 H 506 v 33.625 h -30.0625 z m 0,0"
+         id="path2673" />
+    </clipPath>
+    <clipPath
+       id="clip625">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2676" />
+    </clipPath>
+    <clipPath
+       id="clip626">
+      <path
+         d="M 475.9375,67 H 507 v 34.625 h -31.0625 z m 0,0"
+         id="path2679" />
+    </clipPath>
+    <clipPath
+       id="clip627">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2682" />
+    </clipPath>
+    <clipPath
+       id="clip628">
+      <path
+         d="M 475.9375,66 H 508 v 35 h -32.0625 z m 0,0"
+         id="path2685" />
+    </clipPath>
+    <clipPath
+       id="clip629">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2688" />
+    </clipPath>
+    <clipPath
+       id="clip630">
+      <path
+         d="M 475.9375,66 H 508 v 34 h -32.0625 z m 0,0"
+         id="path2691" />
+    </clipPath>
+    <clipPath
+       id="clip631">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2694" />
+    </clipPath>
+    <clipPath
+       id="clip632">
+      <path
+         d="M 475.9375,65 H 509 v 35 h -33.0625 z m 0,0"
+         id="path2697" />
+    </clipPath>
+    <clipPath
+       id="clip633">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2700" />
+    </clipPath>
+    <clipPath
+       id="clip634">
+      <path
+         d="M 475.9375,64 H 510 v 35 h -34.0625 z m 0,0"
+         id="path2703" />
+    </clipPath>
+    <clipPath
+       id="clip635">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2706" />
+    </clipPath>
+    <clipPath
+       id="clip636">
+      <path
+         d="m 476,63 h 35 v 35 h -35 z m 0,0"
+         id="path2709" />
+    </clipPath>
+    <clipPath
+       id="clip637">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2712" />
+    </clipPath>
+    <clipPath
+       id="clip638">
+      <path
+         d="m 476,63 h 35 v 34 h -35 z m 0,0"
+         id="path2715" />
+    </clipPath>
+    <clipPath
+       id="clip639">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2718" />
+    </clipPath>
+    <clipPath
+       id="clip640">
+      <path
+         d="m 477,62 h 35 v 35 h -35 z m 0,0"
+         id="path2721" />
+    </clipPath>
+    <clipPath
+       id="clip641">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2724" />
+    </clipPath>
+    <clipPath
+       id="clip642">
+      <path
+         d="m 478,61 h 35 v 35 h -35 z m 0,0"
+         id="path2727" />
+    </clipPath>
+    <clipPath
+       id="clip643">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2730" />
+    </clipPath>
+    <clipPath
+       id="clip644">
+      <path
+         d="m 479,60 h 35 v 35 h -35 z m 0,0"
+         id="path2733" />
+    </clipPath>
+    <clipPath
+       id="clip645">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2736" />
+    </clipPath>
+    <clipPath
+       id="clip646">
+      <path
+         d="m 479,60 h 35 v 34 h -35 z m 0,0"
+         id="path2739" />
+    </clipPath>
+    <clipPath
+       id="clip647">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2742" />
+    </clipPath>
+    <clipPath
+       id="clip648">
+      <path
+         d="m 480,59 h 35 v 35 h -35 z m 0,0"
+         id="path2745" />
+    </clipPath>
+    <clipPath
+       id="clip649">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2748" />
+    </clipPath>
+    <clipPath
+       id="clip650">
+      <path
+         d="m 481,58 h 35 v 35 h -35 z m 0,0"
+         id="path2751" />
+    </clipPath>
+    <clipPath
+       id="clip651">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2754" />
+    </clipPath>
+    <clipPath
+       id="clip652">
+      <path
+         d="m 482,57 h 35 v 35 h -35 z m 0,0"
+         id="path2757" />
+    </clipPath>
+    <clipPath
+       id="clip653">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2760" />
+    </clipPath>
+    <clipPath
+       id="clip654">
+      <path
+         d="m 482,57 h 35 v 34 h -35 z m 0,0"
+         id="path2763" />
+    </clipPath>
+    <clipPath
+       id="clip655">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2766" />
+    </clipPath>
+    <clipPath
+       id="clip656">
+      <path
+         d="m 483,56 h 35 v 35 h -35 z m 0,0"
+         id="path2769" />
+    </clipPath>
+    <clipPath
+       id="clip657">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2772" />
+    </clipPath>
+    <clipPath
+       id="clip658">
+      <path
+         d="m 484,55 h 35 v 35 h -35 z m 0,0"
+         id="path2775" />
+    </clipPath>
+    <clipPath
+       id="clip659">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2778" />
+    </clipPath>
+    <clipPath
+       id="clip660">
+      <path
+         d="m 485,54 h 35 v 35 h -35 z m 0,0"
+         id="path2781" />
+    </clipPath>
+    <clipPath
+       id="clip661">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2784" />
+    </clipPath>
+    <clipPath
+       id="clip662">
+      <path
+         d="m 476,49.125 h 52.4375 v 52.5 H 476 Z m 0,0"
+         id="path2787" />
+    </clipPath>
+    <clipPath
+       id="clip663">
+      <path
+         d="m 478.9375,49.125 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2790" />
+    </clipPath>
+    <clipPath
+       id="clip664">
+      <path
+         d="m 479,49 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 479 c -1.65625,0 -3,-1.34375 -3,-3 V 52 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2793" />
+    </clipPath>
+    <clipPath
+       id="clip665">
+      <path
+         d="m 67.5625,132.875 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path2796" />
+    </clipPath>
+    <clipPath
+       id="clip666">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2799" />
+    </clipPath>
+    <linearGradient
+       id="linear6"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.00050000002"
+       y1="105.0005"
+       x2="104.9995"
+       y2="0.00050000002"
+       gradientTransform="matrix(0.5,0,0,0.5,67.5625,132.875)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(41.567993%,61.959839%,72.940063%);stop-opacity:1;"
+         id="stop2802" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(41.696167%,62.033081%,72.982788%);stop-opacity:1;"
+         id="stop2804" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(41.954041%,62.179565%,73.068237%);stop-opacity:1;"
+         id="stop2806" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(42.210388%,62.327576%,73.155212%);stop-opacity:1;"
+         id="stop2808" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(42.468262%,62.47406%,73.240662%);stop-opacity:1;"
+         id="stop2810" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(42.724609%,62.62207%,73.326111%);stop-opacity:1;"
+         id="stop2812" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(42.982483%,62.768555%,73.41156%);stop-opacity:1;"
+         id="stop2814" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(43.240356%,62.915039%,73.498535%);stop-opacity:1;"
+         id="stop2816" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(43.496704%,63.063049%,73.583984%);stop-opacity:1;"
+         id="stop2818" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(43.754578%,63.209534%,73.669434%);stop-opacity:1;"
+         id="stop2820" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(44.012451%,63.356018%,73.754883%);stop-opacity:1;"
+         id="stop2822" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(44.268799%,63.504028%,73.840332%);stop-opacity:1;"
+         id="stop2824" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(44.526672%,63.650513%,73.927307%);stop-opacity:1;"
+         id="stop2826" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(44.784546%,63.798523%,74.012756%);stop-opacity:1;"
+         id="stop2828" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(45.040894%,63.945007%,74.098206%);stop-opacity:1;"
+         id="stop2830" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(45.298767%,64.091492%,74.183655%);stop-opacity:1;"
+         id="stop2832" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(45.556641%,64.239502%,74.27063%);stop-opacity:1;"
+         id="stop2834" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(45.812988%,64.385986%,74.356079%);stop-opacity:1;"
+         id="stop2836" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(46.070862%,64.533997%,74.441528%);stop-opacity:1;"
+         id="stop2838" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(46.328735%,64.680481%,74.526978%);stop-opacity:1;"
+         id="stop2840" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(46.585083%,64.826965%,74.612427%);stop-opacity:1;"
+         id="stop2842" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(46.842957%,64.974976%,74.699402%);stop-opacity:1;"
+         id="stop2844" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(47.10083%,65.12146%,74.784851%);stop-opacity:1;"
+         id="stop2846" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(47.357178%,65.267944%,74.8703%);stop-opacity:1;"
+         id="stop2848" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(47.615051%,65.415955%,74.95575%);stop-opacity:1;"
+         id="stop2850" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(47.872925%,65.562439%,75.041199%);stop-opacity:1;"
+         id="stop2852" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(48.129272%,65.710449%,75.128174%);stop-opacity:1;"
+         id="stop2854" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(48.387146%,65.856934%,75.213623%);stop-opacity:1;"
+         id="stop2856" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(48.64502%,66.003418%,75.299072%);stop-opacity:1;"
+         id="stop2858" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(48.901367%,66.151428%,75.384521%);stop-opacity:1;"
+         id="stop2860" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(49.159241%,66.297913%,75.471497%);stop-opacity:1;"
+         id="stop2862" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(49.417114%,66.444397%,75.556946%);stop-opacity:1;"
+         id="stop2864" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(49.673462%,66.592407%,75.642395%);stop-opacity:1;"
+         id="stop2866" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(49.931335%,66.738892%,75.727844%);stop-opacity:1;"
+         id="stop2868" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(50.061035%,66.81366%,75.770569%);stop-opacity:1;"
+         id="stop2870" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(50.189209%,66.886902%,75.813293%);stop-opacity:1;"
+         id="stop2872" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(50.445557%,67.033386%,75.900269%);stop-opacity:1;"
+         id="stop2874" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(50.70343%,67.179871%,75.985718%);stop-opacity:1;"
+         id="stop2876" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(50.961304%,67.327881%,76.071167%);stop-opacity:1;"
+         id="stop2878" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(51.217651%,67.474365%,76.156616%);stop-opacity:1;"
+         id="stop2880" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(51.475525%,67.62085%,76.243591%);stop-opacity:1;"
+         id="stop2882" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(51.733398%,67.76886%,76.329041%);stop-opacity:1;"
+         id="stop2884" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(51.989746%,67.915344%,76.41449%);stop-opacity:1;"
+         id="stop2886" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(52.24762%,68.063354%,76.499939%);stop-opacity:1;"
+         id="stop2888" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(52.505493%,68.209839%,76.585388%);stop-opacity:1;"
+         id="stop2890" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(52.761841%,68.356323%,76.672363%);stop-opacity:1;"
+         id="stop2892" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(53.019714%,68.504333%,76.757812%);stop-opacity:1;"
+         id="stop2894" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(53.276062%,68.650818%,76.843262%);stop-opacity:1;"
+         id="stop2896" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(53.533936%,68.797302%,76.928711%);stop-opacity:1;"
+         id="stop2898" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(53.791809%,68.945312%,77.015686%);stop-opacity:1;"
+         id="stop2900" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(54.048157%,69.091797%,77.101135%);stop-opacity:1;"
+         id="stop2902" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(54.30603%,69.239807%,77.186584%);stop-opacity:1;"
+         id="stop2904" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(54.563904%,69.386292%,77.272034%);stop-opacity:1;"
+         id="stop2906" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(54.820251%,69.532776%,77.357483%);stop-opacity:1;"
+         id="stop2908" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(55.078125%,69.680786%,77.444458%);stop-opacity:1;"
+         id="stop2910" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(55.335999%,69.827271%,77.529907%);stop-opacity:1;"
+         id="stop2912" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(55.592346%,69.973755%,77.615356%);stop-opacity:1;"
+         id="stop2914" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(55.85022%,70.121765%,77.700806%);stop-opacity:1;"
+         id="stop2916" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(56.108093%,70.26825%,77.787781%);stop-opacity:1;"
+         id="stop2918" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(56.364441%,70.41626%,77.87323%);stop-opacity:1;"
+         id="stop2920" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(56.622314%,70.562744%,77.958679%);stop-opacity:1;"
+         id="stop2922" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(56.880188%,70.709229%,78.044128%);stop-opacity:1;"
+         id="stop2924" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(57.136536%,70.857239%,78.129578%);stop-opacity:1;"
+         id="stop2926" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(57.394409%,71.003723%,78.216553%);stop-opacity:1;"
+         id="stop2928" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(57.652283%,71.150208%,78.302002%);stop-opacity:1;"
+         id="stop2930" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(57.90863%,71.298218%,78.387451%);stop-opacity:1;"
+         id="stop2932" />
+    </linearGradient>
+    <clipPath
+       id="clip667">
+      <path
+         d="M 67.5625,185 H 69 v 0.375 h -1.4375 z m 0,0"
+         id="path2935" />
+    </clipPath>
+    <clipPath
+       id="clip668">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2938" />
+    </clipPath>
+    <clipPath
+       id="clip669">
+      <path
+         d="M 67.5625,184 H 69 v 1.375 h -1.4375 z m 0,0"
+         id="path2941" />
+    </clipPath>
+    <clipPath
+       id="clip670">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2944" />
+    </clipPath>
+    <clipPath
+       id="clip671">
+      <path
+         d="M 67.5625,183 H 70 v 2.375 h -2.4375 z m 0,0"
+         id="path2947" />
+    </clipPath>
+    <clipPath
+       id="clip672">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2950" />
+    </clipPath>
+    <clipPath
+       id="clip673">
+      <path
+         d="M 67.5625,183 H 71 v 2.375 h -3.4375 z m 0,0"
+         id="path2953" />
+    </clipPath>
+    <clipPath
+       id="clip674">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2956" />
+    </clipPath>
+    <clipPath
+       id="clip675">
+      <path
+         d="M 67.5625,182 H 72 v 3.375 h -4.4375 z m 0,0"
+         id="path2959" />
+    </clipPath>
+    <clipPath
+       id="clip676">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2962" />
+    </clipPath>
+    <clipPath
+       id="clip677">
+      <path
+         d="M 67.5625,181 H 72 v 4.375 h -4.4375 z m 0,0"
+         id="path2965" />
+    </clipPath>
+    <clipPath
+       id="clip678">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2968" />
+    </clipPath>
+    <clipPath
+       id="clip679">
+      <path
+         d="M 67.5625,180 H 73 v 5.375 h -5.4375 z m 0,0"
+         id="path2971" />
+    </clipPath>
+    <clipPath
+       id="clip680">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2974" />
+    </clipPath>
+    <clipPath
+       id="clip681">
+      <path
+         d="M 67.5625,180 H 74 v 5.375 h -6.4375 z m 0,0"
+         id="path2977" />
+    </clipPath>
+    <clipPath
+       id="clip682">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2980" />
+    </clipPath>
+    <clipPath
+       id="clip683">
+      <path
+         d="M 67.5625,179 H 75 v 6.375 h -7.4375 z m 0,0"
+         id="path2983" />
+    </clipPath>
+    <clipPath
+       id="clip684">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2986" />
+    </clipPath>
+    <clipPath
+       id="clip685">
+      <path
+         d="M 67.5625,178 H 75 v 7.375 h -7.4375 z m 0,0"
+         id="path2989" />
+    </clipPath>
+    <clipPath
+       id="clip686">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2992" />
+    </clipPath>
+    <clipPath
+       id="clip687">
+      <path
+         d="M 67.5625,177 H 76 v 8.375 h -8.4375 z m 0,0"
+         id="path2995" />
+    </clipPath>
+    <clipPath
+       id="clip688">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path2998" />
+    </clipPath>
+    <clipPath
+       id="clip689">
+      <path
+         d="M 67.5625,177 H 77 v 8.375 h -9.4375 z m 0,0"
+         id="path3001" />
+    </clipPath>
+    <clipPath
+       id="clip690">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3004" />
+    </clipPath>
+    <clipPath
+       id="clip691">
+      <path
+         d="M 67.5625,176 H 78 v 9.375 H 67.5625 Z m 0,0"
+         id="path3007" />
+    </clipPath>
+    <clipPath
+       id="clip692">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3010" />
+    </clipPath>
+    <clipPath
+       id="clip693">
+      <path
+         d="M 67.5625,175 H 78 v 10.375 H 67.5625 Z m 0,0"
+         id="path3013" />
+    </clipPath>
+    <clipPath
+       id="clip694">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3016" />
+    </clipPath>
+    <clipPath
+       id="clip695">
+      <path
+         d="M 67.5625,174 H 79 v 11.375 H 67.5625 Z m 0,0"
+         id="path3019" />
+    </clipPath>
+    <clipPath
+       id="clip696">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3022" />
+    </clipPath>
+    <clipPath
+       id="clip697">
+      <path
+         d="M 67.5625,174 H 80 v 11.375 H 67.5625 Z m 0,0"
+         id="path3025" />
+    </clipPath>
+    <clipPath
+       id="clip698">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3028" />
+    </clipPath>
+    <clipPath
+       id="clip699">
+      <path
+         d="M 67.5625,173 H 81 v 12.375 H 67.5625 Z m 0,0"
+         id="path3031" />
+    </clipPath>
+    <clipPath
+       id="clip700">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3034" />
+    </clipPath>
+    <clipPath
+       id="clip701">
+      <path
+         d="M 67.5625,172 H 81 v 13.375 H 67.5625 Z m 0,0"
+         id="path3037" />
+    </clipPath>
+    <clipPath
+       id="clip702">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3040" />
+    </clipPath>
+    <clipPath
+       id="clip703">
+      <path
+         d="M 67.5625,171 H 82 v 14.375 H 67.5625 Z m 0,0"
+         id="path3043" />
+    </clipPath>
+    <clipPath
+       id="clip704">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3046" />
+    </clipPath>
+    <clipPath
+       id="clip705">
+      <path
+         d="M 67.5625,171 H 83 v 14.375 H 67.5625 Z m 0,0"
+         id="path3049" />
+    </clipPath>
+    <clipPath
+       id="clip706">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3052" />
+    </clipPath>
+    <clipPath
+       id="clip707">
+      <path
+         d="M 67.5625,170 H 84 v 15.375 H 67.5625 Z m 0,0"
+         id="path3055" />
+    </clipPath>
+    <clipPath
+       id="clip708">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3058" />
+    </clipPath>
+    <clipPath
+       id="clip709">
+      <path
+         d="M 67.5625,169 H 84 v 16.375 H 67.5625 Z m 0,0"
+         id="path3061" />
+    </clipPath>
+    <clipPath
+       id="clip710">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3064" />
+    </clipPath>
+    <clipPath
+       id="clip711">
+      <path
+         d="M 67.5625,168 H 85 v 17.375 H 67.5625 Z m 0,0"
+         id="path3067" />
+    </clipPath>
+    <clipPath
+       id="clip712">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3070" />
+    </clipPath>
+    <clipPath
+       id="clip713">
+      <path
+         d="M 67.5625,168 H 86 v 17.375 H 67.5625 Z m 0,0"
+         id="path3073" />
+    </clipPath>
+    <clipPath
+       id="clip714">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3076" />
+    </clipPath>
+    <clipPath
+       id="clip715">
+      <path
+         d="M 67.5625,167 H 87 v 18.375 H 67.5625 Z m 0,0"
+         id="path3079" />
+    </clipPath>
+    <clipPath
+       id="clip716">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3082" />
+    </clipPath>
+    <clipPath
+       id="clip717">
+      <path
+         d="M 67.5625,166 H 87 v 19.375 H 67.5625 Z m 0,0"
+         id="path3085" />
+    </clipPath>
+    <clipPath
+       id="clip718">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3088" />
+    </clipPath>
+    <clipPath
+       id="clip719">
+      <path
+         d="M 67.5625,165 H 88 v 20.375 H 67.5625 Z m 0,0"
+         id="path3091" />
+    </clipPath>
+    <clipPath
+       id="clip720">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3094" />
+    </clipPath>
+    <clipPath
+       id="clip721">
+      <path
+         d="M 67.5625,165 H 89 v 20.375 H 67.5625 Z m 0,0"
+         id="path3097" />
+    </clipPath>
+    <clipPath
+       id="clip722">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3100" />
+    </clipPath>
+    <clipPath
+       id="clip723">
+      <path
+         d="M 67.5625,164 H 90 v 21.375 H 67.5625 Z m 0,0"
+         id="path3103" />
+    </clipPath>
+    <clipPath
+       id="clip724">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3106" />
+    </clipPath>
+    <clipPath
+       id="clip725">
+      <path
+         d="M 67.5625,163 H 90 v 22.375 H 67.5625 Z m 0,0"
+         id="path3109" />
+    </clipPath>
+    <clipPath
+       id="clip726">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3112" />
+    </clipPath>
+    <clipPath
+       id="clip727">
+      <path
+         d="M 67.5625,162 H 91 v 23.375 H 67.5625 Z m 0,0"
+         id="path3115" />
+    </clipPath>
+    <clipPath
+       id="clip728">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3118" />
+    </clipPath>
+    <clipPath
+       id="clip729">
+      <path
+         d="M 67.5625,162 H 92 v 23.375 H 67.5625 Z m 0,0"
+         id="path3121" />
+    </clipPath>
+    <clipPath
+       id="clip730">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3124" />
+    </clipPath>
+    <clipPath
+       id="clip731">
+      <path
+         d="M 67.5625,161 H 93 v 24 H 67.5625 Z m 0,0"
+         id="path3127" />
+    </clipPath>
+    <clipPath
+       id="clip732">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3130" />
+    </clipPath>
+    <clipPath
+       id="clip733">
+      <path
+         d="M 67.5625,160 H 93 v 24 H 67.5625 Z m 0,0"
+         id="path3133" />
+    </clipPath>
+    <clipPath
+       id="clip734">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3136" />
+    </clipPath>
+    <clipPath
+       id="clip735">
+      <path
+         d="M 67.5625,159 H 94 v 24 H 67.5625 Z m 0,0"
+         id="path3139" />
+    </clipPath>
+    <clipPath
+       id="clip736">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3142" />
+    </clipPath>
+    <clipPath
+       id="clip737">
+      <path
+         d="M 67.5625,159 H 95 v 24 H 67.5625 Z m 0,0"
+         id="path3145" />
+    </clipPath>
+    <clipPath
+       id="clip738">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3148" />
+    </clipPath>
+    <clipPath
+       id="clip739">
+      <path
+         d="M 67.5625,158 H 96 v 24 H 67.5625 Z m 0,0"
+         id="path3151" />
+    </clipPath>
+    <clipPath
+       id="clip740">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3154" />
+    </clipPath>
+    <clipPath
+       id="clip741">
+      <path
+         d="M 67.5625,157 H 96 v 24 H 67.5625 Z m 0,0"
+         id="path3157" />
+    </clipPath>
+    <clipPath
+       id="clip742">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3160" />
+    </clipPath>
+    <clipPath
+       id="clip743">
+      <path
+         d="M 67.5625,156 H 97 v 24 H 67.5625 Z m 0,0"
+         id="path3163" />
+    </clipPath>
+    <clipPath
+       id="clip744">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3166" />
+    </clipPath>
+    <clipPath
+       id="clip745">
+      <path
+         d="M 67.5625,156 H 98 v 24 H 67.5625 Z m 0,0"
+         id="path3169" />
+    </clipPath>
+    <clipPath
+       id="clip746">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3172" />
+    </clipPath>
+    <clipPath
+       id="clip747">
+      <path
+         d="m 68,155 h 31 v 24 H 68 Z m 0,0"
+         id="path3175" />
+    </clipPath>
+    <clipPath
+       id="clip748">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3178" />
+    </clipPath>
+    <clipPath
+       id="clip749">
+      <path
+         d="m 69,154 h 30 v 24 H 69 Z m 0,0"
+         id="path3181" />
+    </clipPath>
+    <clipPath
+       id="clip750">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3184" />
+    </clipPath>
+    <clipPath
+       id="clip751">
+      <path
+         d="m 70,153 h 30 v 24 H 70 Z m 0,0"
+         id="path3187" />
+    </clipPath>
+    <clipPath
+       id="clip752">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3190" />
+    </clipPath>
+    <clipPath
+       id="clip753">
+      <path
+         d="m 70,153 h 31 v 24 H 70 Z m 0,0"
+         id="path3193" />
+    </clipPath>
+    <clipPath
+       id="clip754">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3196" />
+    </clipPath>
+    <clipPath
+       id="clip755">
+      <path
+         d="m 71,152 h 31 v 24 H 71 Z m 0,0"
+         id="path3199" />
+    </clipPath>
+    <clipPath
+       id="clip756">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3202" />
+    </clipPath>
+    <clipPath
+       id="clip757">
+      <path
+         d="m 72,151 h 30 v 24 H 72 Z m 0,0"
+         id="path3205" />
+    </clipPath>
+    <clipPath
+       id="clip758">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3208" />
+    </clipPath>
+    <clipPath
+       id="clip759">
+      <path
+         d="m 73,150 h 30 v 24 H 73 Z m 0,0"
+         id="path3211" />
+    </clipPath>
+    <clipPath
+       id="clip760">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3214" />
+    </clipPath>
+    <clipPath
+       id="clip761">
+      <path
+         d="m 73,150 h 31 v 24 H 73 Z m 0,0"
+         id="path3217" />
+    </clipPath>
+    <clipPath
+       id="clip762">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3220" />
+    </clipPath>
+    <clipPath
+       id="clip763">
+      <path
+         d="m 74,149 h 31 v 24 H 74 Z m 0,0"
+         id="path3223" />
+    </clipPath>
+    <clipPath
+       id="clip764">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3226" />
+    </clipPath>
+    <clipPath
+       id="clip765">
+      <path
+         d="m 75,148 h 30 v 24 H 75 Z m 0,0"
+         id="path3229" />
+    </clipPath>
+    <clipPath
+       id="clip766">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3232" />
+    </clipPath>
+    <clipPath
+       id="clip767">
+      <path
+         d="m 76,147 h 30 v 24 H 76 Z m 0,0"
+         id="path3235" />
+    </clipPath>
+    <clipPath
+       id="clip768">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3238" />
+    </clipPath>
+    <clipPath
+       id="clip769">
+      <path
+         d="m 76,147 h 31 v 24 H 76 Z m 0,0"
+         id="path3241" />
+    </clipPath>
+    <clipPath
+       id="clip770">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3244" />
+    </clipPath>
+    <clipPath
+       id="clip771">
+      <path
+         d="m 77,146 h 31 v 24 H 77 Z m 0,0"
+         id="path3247" />
+    </clipPath>
+    <clipPath
+       id="clip772">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3250" />
+    </clipPath>
+    <clipPath
+       id="clip773">
+      <path
+         d="m 78,145 h 30 v 24 H 78 Z m 0,0"
+         id="path3253" />
+    </clipPath>
+    <clipPath
+       id="clip774">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3256" />
+    </clipPath>
+    <clipPath
+       id="clip775">
+      <path
+         d="m 79,144 h 30 v 24 H 79 Z m 0,0"
+         id="path3259" />
+    </clipPath>
+    <clipPath
+       id="clip776">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3262" />
+    </clipPath>
+    <clipPath
+       id="clip777">
+      <path
+         d="m 68,133 h 52 v 52 H 68 Z m 0,0"
+         id="path3265" />
+    </clipPath>
+    <clipPath
+       id="clip778">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3268" />
+    </clipPath>
+    <clipPath
+       id="clip779">
+      <path
+         d="M 70.5,133 H 117 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 70.5 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3271" />
+    </clipPath>
+    <clipPath
+       id="clip780">
+      <path
+         d="m 68,133 h 52 v 52.375 H 68 Z m 0,0"
+         id="path3274" />
+    </clipPath>
+    <clipPath
+       id="clip781">
+      <path
+         d="m 70.5625,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3277" />
+    </clipPath>
+    <clipPath
+       id="clip782">
+      <path
+         d="M 70.5,133 H 117 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 70.5 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3280" />
+    </clipPath>
+    <clipPath
+       id="clip783">
+      <path
+         d="m 149.23828,132.875 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path3283" />
+    </clipPath>
+    <clipPath
+       id="clip784">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3286" />
+    </clipPath>
+    <linearGradient
+       id="linear7"
+       gradientUnits="userSpaceOnUse"
+       x1="0.000497"
+       y1="104.9995"
+       x2="105.0005"
+       y2="-0.000497"
+       gradientTransform="matrix(0.5,0,0,0.5,149.2375,132.875)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(48.626709%,21.960449%,21.960449%);stop-opacity:1;"
+         id="stop3289" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(48.7854%,22.085571%,22.085571%);stop-opacity:1;"
+         id="stop3291" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(49.104309%,22.335815%,22.335815%);stop-opacity:1;"
+         id="stop3293" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(49.423218%,22.587585%,22.587585%);stop-opacity:1;"
+         id="stop3295" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(49.742126%,22.839355%,22.839355%);stop-opacity:1;"
+         id="stop3297" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(50.059509%,23.0896%,23.0896%);stop-opacity:1;"
+         id="stop3299" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(50.378418%,23.34137%,23.34137%);stop-opacity:1;"
+         id="stop3301" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(50.697327%,23.59314%,23.59314%);stop-opacity:1;"
+         id="stop3303" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(51.016235%,23.843384%,23.843384%);stop-opacity:1;"
+         id="stop3305" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(51.335144%,24.095154%,24.095154%);stop-opacity:1;"
+         id="stop3307" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(51.652527%,24.346924%,24.346924%);stop-opacity:1;"
+         id="stop3309" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(51.971436%,24.597168%,24.597168%);stop-opacity:1;"
+         id="stop3311" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(52.290344%,24.848938%,24.848938%);stop-opacity:1;"
+         id="stop3313" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(52.609253%,25.099182%,25.099182%);stop-opacity:1;"
+         id="stop3315" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(52.928162%,25.350952%,25.350952%);stop-opacity:1;"
+         id="stop3317" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(53.245544%,25.602722%,25.602722%);stop-opacity:1;"
+         id="stop3319" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(53.564453%,25.852966%,25.852966%);stop-opacity:1;"
+         id="stop3321" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(53.883362%,26.104736%,26.104736%);stop-opacity:1;"
+         id="stop3323" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(54.202271%,26.356506%,26.356506%);stop-opacity:1;"
+         id="stop3325" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(54.521179%,26.60675%,26.60675%);stop-opacity:1;"
+         id="stop3327" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(54.840088%,26.858521%,26.858521%);stop-opacity:1;"
+         id="stop3329" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(55.157471%,27.110291%,27.110291%);stop-opacity:1;"
+         id="stop3331" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(55.476379%,27.360535%,27.360535%);stop-opacity:1;"
+         id="stop3333" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(55.795288%,27.612305%,27.612305%);stop-opacity:1;"
+         id="stop3335" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(56.114197%,27.864075%,27.864075%);stop-opacity:1;"
+         id="stop3337" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(56.433105%,28.114319%,28.114319%);stop-opacity:1;"
+         id="stop3339" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(56.750488%,28.366089%,28.366089%);stop-opacity:1;"
+         id="stop3341" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(57.069397%,28.616333%,28.616333%);stop-opacity:1;"
+         id="stop3343" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(57.388306%,28.868103%,28.868103%);stop-opacity:1;"
+         id="stop3345" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(57.707214%,29.119873%,29.119873%);stop-opacity:1;"
+         id="stop3347" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(58.026123%,29.370117%,29.370117%);stop-opacity:1;"
+         id="stop3349" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(58.345032%,29.621887%,29.621887%);stop-opacity:1;"
+         id="stop3351" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(58.662415%,29.873657%,29.873657%);stop-opacity:1;"
+         id="stop3353" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(58.981323%,30.123901%,30.123901%);stop-opacity:1;"
+         id="stop3355" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(59.300232%,30.375671%,30.375671%);stop-opacity:1;"
+         id="stop3357" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(59.619141%,30.627441%,30.627441%);stop-opacity:1;"
+         id="stop3359" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(59.938049%,30.877686%,30.877686%);stop-opacity:1;"
+         id="stop3361" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(60.255432%,31.129456%,31.129456%);stop-opacity:1;"
+         id="stop3363" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(60.574341%,31.381226%,31.381226%);stop-opacity:1;"
+         id="stop3365" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(60.89325%,31.63147%,31.63147%);stop-opacity:1;"
+         id="stop3367" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(61.212158%,31.88324%,31.88324%);stop-opacity:1;"
+         id="stop3369" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(61.531067%,32.133484%,32.133484%);stop-opacity:1;"
+         id="stop3371" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(61.849976%,32.385254%,32.385254%);stop-opacity:1;"
+         id="stop3373" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(62.167358%,32.637024%,32.637024%);stop-opacity:1;"
+         id="stop3375" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(62.486267%,32.887268%,32.887268%);stop-opacity:1;"
+         id="stop3377" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(62.805176%,33.139038%,33.139038%);stop-opacity:1;"
+         id="stop3379" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(63.124084%,33.390808%,33.390808%);stop-opacity:1;"
+         id="stop3381" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(63.442993%,33.641052%,33.641052%);stop-opacity:1;"
+         id="stop3383" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(63.760376%,33.892822%,33.892822%);stop-opacity:1;"
+         id="stop3385" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(64.079285%,34.144592%,34.144592%);stop-opacity:1;"
+         id="stop3387" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(64.398193%,34.394836%,34.394836%);stop-opacity:1;"
+         id="stop3389" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(64.717102%,34.646606%,34.646606%);stop-opacity:1;"
+         id="stop3391" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(65.036011%,34.898376%,34.898376%);stop-opacity:1;"
+         id="stop3393" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(65.353394%,35.148621%,35.148621%);stop-opacity:1;"
+         id="stop3395" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(65.672302%,35.400391%,35.400391%);stop-opacity:1;"
+         id="stop3397" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(65.991211%,35.650635%,35.650635%);stop-opacity:1;"
+         id="stop3399" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(66.31012%,35.902405%,35.902405%);stop-opacity:1;"
+         id="stop3401" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(66.629028%,36.154175%,36.154175%);stop-opacity:1;"
+         id="stop3403" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(66.947937%,36.404419%,36.404419%);stop-opacity:1;"
+         id="stop3405" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(67.26532%,36.656189%,36.656189%);stop-opacity:1;"
+         id="stop3407" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(67.584229%,36.907959%,36.907959%);stop-opacity:1;"
+         id="stop3409" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(67.903137%,37.158203%,37.158203%);stop-opacity:1;"
+         id="stop3411" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(68.222046%,37.409973%,37.409973%);stop-opacity:1;"
+         id="stop3413" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(68.540955%,37.661743%,37.661743%);stop-opacity:1;"
+         id="stop3415" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(68.858337%,37.911987%,37.911987%);stop-opacity:1;"
+         id="stop3417" />
+    </linearGradient>
+    <clipPath
+       id="clip785">
+      <path
+         d="M 149.23828,185 H 152 v 0.375 h -2.76172 z m 0,0"
+         id="path3420" />
+    </clipPath>
+    <clipPath
+       id="clip786">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3423" />
+    </clipPath>
+    <clipPath
+       id="clip787">
+      <path
+         d="M 149.23828,184 H 153 v 1.375 h -3.76172 z m 0,0"
+         id="path3426" />
+    </clipPath>
+    <clipPath
+       id="clip788">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3429" />
+    </clipPath>
+    <clipPath
+       id="clip789">
+      <path
+         d="M 149.23828,183 H 153 v 2.375 h -3.76172 z m 0,0"
+         id="path3432" />
+    </clipPath>
+    <clipPath
+       id="clip790">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3435" />
+    </clipPath>
+    <clipPath
+       id="clip791">
+      <path
+         d="M 149.23828,183 H 154 v 2.375 h -4.76172 z m 0,0"
+         id="path3438" />
+    </clipPath>
+    <clipPath
+       id="clip792">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3441" />
+    </clipPath>
+    <clipPath
+       id="clip793">
+      <path
+         d="M 149.23828,182 H 155 v 3.375 h -5.76172 z m 0,0"
+         id="path3444" />
+    </clipPath>
+    <clipPath
+       id="clip794">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3447" />
+    </clipPath>
+    <clipPath
+       id="clip795">
+      <path
+         d="M 149.23828,181 H 156 v 4.375 h -6.76172 z m 0,0"
+         id="path3450" />
+    </clipPath>
+    <clipPath
+       id="clip796">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3453" />
+    </clipPath>
+    <clipPath
+       id="clip797">
+      <path
+         d="M 149.23828,180 H 156 v 5.375 h -6.76172 z m 0,0"
+         id="path3456" />
+    </clipPath>
+    <clipPath
+       id="clip798">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3459" />
+    </clipPath>
+    <clipPath
+       id="clip799">
+      <path
+         d="M 149.23828,180 H 157 v 5.375 h -7.76172 z m 0,0"
+         id="path3462" />
+    </clipPath>
+    <clipPath
+       id="clip800">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3465" />
+    </clipPath>
+    <clipPath
+       id="clip801">
+      <path
+         d="M 149.23828,179 H 158 v 6.375 h -8.76172 z m 0,0"
+         id="path3468" />
+    </clipPath>
+    <clipPath
+       id="clip802">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3471" />
+    </clipPath>
+    <clipPath
+       id="clip803">
+      <path
+         d="M 149.23828,178 H 159 v 7.375 h -9.76172 z m 0,0"
+         id="path3474" />
+    </clipPath>
+    <clipPath
+       id="clip804">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3477" />
+    </clipPath>
+    <clipPath
+       id="clip805">
+      <path
+         d="M 149.23828,177 H 159 v 8.375 h -9.76172 z m 0,0"
+         id="path3480" />
+    </clipPath>
+    <clipPath
+       id="clip806">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3483" />
+    </clipPath>
+    <clipPath
+       id="clip807">
+      <path
+         d="M 149.23828,177 H 160 v 8.375 h -10.76172 z m 0,0"
+         id="path3486" />
+    </clipPath>
+    <clipPath
+       id="clip808">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3489" />
+    </clipPath>
+    <clipPath
+       id="clip809">
+      <path
+         d="M 149.23828,176 H 161 v 9.375 h -11.76172 z m 0,0"
+         id="path3492" />
+    </clipPath>
+    <clipPath
+       id="clip810">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3495" />
+    </clipPath>
+    <clipPath
+       id="clip811">
+      <path
+         d="M 149.23828,175 H 162 v 10.375 h -12.76172 z m 0,0"
+         id="path3498" />
+    </clipPath>
+    <clipPath
+       id="clip812">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3501" />
+    </clipPath>
+    <clipPath
+       id="clip813">
+      <path
+         d="M 149.23828,174 H 162 v 11.375 h -12.76172 z m 0,0"
+         id="path3504" />
+    </clipPath>
+    <clipPath
+       id="clip814">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3507" />
+    </clipPath>
+    <clipPath
+       id="clip815">
+      <path
+         d="M 149.23828,174 H 163 v 11.375 h -13.76172 z m 0,0"
+         id="path3510" />
+    </clipPath>
+    <clipPath
+       id="clip816">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3513" />
+    </clipPath>
+    <clipPath
+       id="clip817">
+      <path
+         d="M 149.23828,173 H 164 v 12.375 h -14.76172 z m 0,0"
+         id="path3516" />
+    </clipPath>
+    <clipPath
+       id="clip818">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3519" />
+    </clipPath>
+    <clipPath
+       id="clip819">
+      <path
+         d="M 149.23828,172 H 165 v 13.375 h -15.76172 z m 0,0"
+         id="path3522" />
+    </clipPath>
+    <clipPath
+       id="clip820">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3525" />
+    </clipPath>
+    <clipPath
+       id="clip821">
+      <path
+         d="M 149.23828,171 H 165 v 14.375 h -15.76172 z m 0,0"
+         id="path3528" />
+    </clipPath>
+    <clipPath
+       id="clip822">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3531" />
+    </clipPath>
+    <clipPath
+       id="clip823">
+      <path
+         d="M 149.23828,171 H 166 v 14.375 h -16.76172 z m 0,0"
+         id="path3534" />
+    </clipPath>
+    <clipPath
+       id="clip824">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3537" />
+    </clipPath>
+    <clipPath
+       id="clip825">
+      <path
+         d="M 149.23828,170 H 167 v 15.375 h -17.76172 z m 0,0"
+         id="path3540" />
+    </clipPath>
+    <clipPath
+       id="clip826">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3543" />
+    </clipPath>
+    <clipPath
+       id="clip827">
+      <path
+         d="M 149.23828,169 H 168 v 16.375 h -18.76172 z m 0,0"
+         id="path3546" />
+    </clipPath>
+    <clipPath
+       id="clip828">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3549" />
+    </clipPath>
+    <clipPath
+       id="clip829">
+      <path
+         d="M 149.23828,168 H 168 v 17.375 h -18.76172 z m 0,0"
+         id="path3552" />
+    </clipPath>
+    <clipPath
+       id="clip830">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3555" />
+    </clipPath>
+    <clipPath
+       id="clip831">
+      <path
+         d="M 149.23828,168 H 169 v 17.375 h -19.76172 z m 0,0"
+         id="path3558" />
+    </clipPath>
+    <clipPath
+       id="clip832">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3561" />
+    </clipPath>
+    <clipPath
+       id="clip833">
+      <path
+         d="M 149.23828,167 H 170 v 18.375 h -20.76172 z m 0,0"
+         id="path3564" />
+    </clipPath>
+    <clipPath
+       id="clip834">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3567" />
+    </clipPath>
+    <clipPath
+       id="clip835">
+      <path
+         d="M 149.23828,166 H 171 v 19.375 h -21.76172 z m 0,0"
+         id="path3570" />
+    </clipPath>
+    <clipPath
+       id="clip836">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3573" />
+    </clipPath>
+    <clipPath
+       id="clip837">
+      <path
+         d="M 149.23828,165 H 171 v 20.375 h -21.76172 z m 0,0"
+         id="path3576" />
+    </clipPath>
+    <clipPath
+       id="clip838">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3579" />
+    </clipPath>
+    <clipPath
+       id="clip839">
+      <path
+         d="M 149.23828,165 H 172 v 20.375 h -22.76172 z m 0,0"
+         id="path3582" />
+    </clipPath>
+    <clipPath
+       id="clip840">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3585" />
+    </clipPath>
+    <clipPath
+       id="clip841">
+      <path
+         d="M 149.23828,164 H 173 v 21.375 h -23.76172 z m 0,0"
+         id="path3588" />
+    </clipPath>
+    <clipPath
+       id="clip842">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3591" />
+    </clipPath>
+    <clipPath
+       id="clip843">
+      <path
+         d="M 149.23828,163 H 174 v 22.375 h -24.76172 z m 0,0"
+         id="path3594" />
+    </clipPath>
+    <clipPath
+       id="clip844">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3597" />
+    </clipPath>
+    <clipPath
+       id="clip845">
+      <path
+         d="M 149.23828,162 H 174 v 23.375 h -24.76172 z m 0,0"
+         id="path3600" />
+    </clipPath>
+    <clipPath
+       id="clip846">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3603" />
+    </clipPath>
+    <clipPath
+       id="clip847">
+      <path
+         d="M 149.23828,162 H 175 v 23.375 h -25.76172 z m 0,0"
+         id="path3606" />
+    </clipPath>
+    <clipPath
+       id="clip848">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3609" />
+    </clipPath>
+    <clipPath
+       id="clip849">
+      <path
+         d="M 149.23828,161 H 176 v 24 h -26.76172 z m 0,0"
+         id="path3612" />
+    </clipPath>
+    <clipPath
+       id="clip850">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3615" />
+    </clipPath>
+    <clipPath
+       id="clip851">
+      <path
+         d="M 149.23828,160 H 177 v 24 h -27.76172 z m 0,0"
+         id="path3618" />
+    </clipPath>
+    <clipPath
+       id="clip852">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3621" />
+    </clipPath>
+    <clipPath
+       id="clip853">
+      <path
+         d="M 149.23828,159 H 177 v 24 h -27.76172 z m 0,0"
+         id="path3624" />
+    </clipPath>
+    <clipPath
+       id="clip854">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3627" />
+    </clipPath>
+    <clipPath
+       id="clip855">
+      <path
+         d="M 149.23828,159 H 178 v 24 h -28.76172 z m 0,0"
+         id="path3630" />
+    </clipPath>
+    <clipPath
+       id="clip856">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3633" />
+    </clipPath>
+    <clipPath
+       id="clip857">
+      <path
+         d="M 149.23828,158 H 179 v 24 h -29.76172 z m 0,0"
+         id="path3636" />
+    </clipPath>
+    <clipPath
+       id="clip858">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3639" />
+    </clipPath>
+    <clipPath
+       id="clip859">
+      <path
+         d="M 149.23828,157 H 180 v 24 h -30.76172 z m 0,0"
+         id="path3642" />
+    </clipPath>
+    <clipPath
+       id="clip860">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3645" />
+    </clipPath>
+    <clipPath
+       id="clip861">
+      <path
+         d="M 149.23828,156 H 180 v 24 h -30.76172 z m 0,0"
+         id="path3648" />
+    </clipPath>
+    <clipPath
+       id="clip862">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3651" />
+    </clipPath>
+    <clipPath
+       id="clip863">
+      <path
+         d="M 149.23828,156 H 181 v 24 h -31.76172 z m 0,0"
+         id="path3654" />
+    </clipPath>
+    <clipPath
+       id="clip864">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3657" />
+    </clipPath>
+    <clipPath
+       id="clip865">
+      <path
+         d="M 149.23828,155 H 182 v 24 h -32.76172 z m 0,0"
+         id="path3660" />
+    </clipPath>
+    <clipPath
+       id="clip866">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3663" />
+    </clipPath>
+    <clipPath
+       id="clip867">
+      <path
+         d="M 149.23828,154 H 183 v 24 h -33.76172 z m 0,0"
+         id="path3666" />
+    </clipPath>
+    <clipPath
+       id="clip868">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3669" />
+    </clipPath>
+    <clipPath
+       id="clip869">
+      <path
+         d="m 150,153 h 33 v 24 h -33 z m 0,0"
+         id="path3672" />
+    </clipPath>
+    <clipPath
+       id="clip870">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3675" />
+    </clipPath>
+    <clipPath
+       id="clip871">
+      <path
+         d="m 150,153 h 34 v 24 h -34 z m 0,0"
+         id="path3678" />
+    </clipPath>
+    <clipPath
+       id="clip872">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3681" />
+    </clipPath>
+    <clipPath
+       id="clip873">
+      <path
+         d="m 151,152 h 34 v 24 h -34 z m 0,0"
+         id="path3684" />
+    </clipPath>
+    <clipPath
+       id="clip874">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3687" />
+    </clipPath>
+    <clipPath
+       id="clip875">
+      <path
+         d="m 152,151 h 34 v 24 h -34 z m 0,0"
+         id="path3690" />
+    </clipPath>
+    <clipPath
+       id="clip876">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3693" />
+    </clipPath>
+    <clipPath
+       id="clip877">
+      <path
+         d="m 153,150 h 33 v 24 h -33 z m 0,0"
+         id="path3696" />
+    </clipPath>
+    <clipPath
+       id="clip878">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3699" />
+    </clipPath>
+    <clipPath
+       id="clip879">
+      <path
+         d="m 153,150 h 34 v 24 h -34 z m 0,0"
+         id="path3702" />
+    </clipPath>
+    <clipPath
+       id="clip880">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3705" />
+    </clipPath>
+    <clipPath
+       id="clip881">
+      <path
+         d="m 154,149 h 34 v 24 h -34 z m 0,0"
+         id="path3708" />
+    </clipPath>
+    <clipPath
+       id="clip882">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3711" />
+    </clipPath>
+    <clipPath
+       id="clip883">
+      <path
+         d="m 155,148 h 34 v 24 h -34 z m 0,0"
+         id="path3714" />
+    </clipPath>
+    <clipPath
+       id="clip884">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3717" />
+    </clipPath>
+    <clipPath
+       id="clip885">
+      <path
+         d="m 156,147 h 33 v 24 h -33 z m 0,0"
+         id="path3720" />
+    </clipPath>
+    <clipPath
+       id="clip886">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3723" />
+    </clipPath>
+    <clipPath
+       id="clip887">
+      <path
+         d="m 156,147 h 34 v 24 h -34 z m 0,0"
+         id="path3726" />
+    </clipPath>
+    <clipPath
+       id="clip888">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3729" />
+    </clipPath>
+    <clipPath
+       id="clip889">
+      <path
+         d="m 157,146 h 34 v 24 h -34 z m 0,0"
+         id="path3732" />
+    </clipPath>
+    <clipPath
+       id="clip890">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3735" />
+    </clipPath>
+    <clipPath
+       id="clip891">
+      <path
+         d="m 158,145 h 34 v 24 h -34 z m 0,0"
+         id="path3738" />
+    </clipPath>
+    <clipPath
+       id="clip892">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3741" />
+    </clipPath>
+    <clipPath
+       id="clip893">
+      <path
+         d="m 159,144 h 33 v 24 h -33 z m 0,0"
+         id="path3744" />
+    </clipPath>
+    <clipPath
+       id="clip894">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3747" />
+    </clipPath>
+    <clipPath
+       id="clip895">
+      <path
+         d="m 149.23828,133 h 52.5 v 52 h -52.5 z m 0,0"
+         id="path3750" />
+    </clipPath>
+    <clipPath
+       id="clip896">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3753" />
+    </clipPath>
+    <clipPath
+       id="clip897">
+      <path
+         d="m 152,133 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 152 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3756" />
+    </clipPath>
+    <clipPath
+       id="clip898">
+      <path
+         d="m 149.23828,133 h 52.5 v 52.375 h -52.5 z m 0,0"
+         id="path3759" />
+    </clipPath>
+    <clipPath
+       id="clip899">
+      <path
+         d="m 152.23828,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3762" />
+    </clipPath>
+    <clipPath
+       id="clip900">
+      <path
+         d="m 152,133 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 152 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3765" />
+    </clipPath>
+    <clipPath
+       id="clip901">
+      <path
+         d="m 230.91406,132.875 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path3768" />
+    </clipPath>
+    <clipPath
+       id="clip902">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3771" />
+    </clipPath>
+    <linearGradient
+       id="linear8"
+       gradientUnits="userSpaceOnUse"
+       x1="0.001494"
+       y1="104.9985"
+       x2="105.0015"
+       y2="-0.001494"
+       gradientTransform="matrix(0.5,0,0,0.5,230.91251,132.875)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(38.430786%,39.607239%,51.763916%);stop-opacity:1;"
+         id="stop3774" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(38.500977%,39.680481%,51.864624%);stop-opacity:1;"
+         id="stop3776" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(38.641357%,39.826965%,52.067566%);stop-opacity:1;"
+         id="stop3778" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(38.783264%,39.974976%,52.268982%);stop-opacity:1;"
+         id="stop3780" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(38.923645%,40.12146%,52.471924%);stop-opacity:1;"
+         id="stop3782" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(39.064026%,40.267944%,52.67334%);stop-opacity:1;"
+         id="stop3784" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(39.205933%,40.415955%,52.876282%);stop-opacity:1;"
+         id="stop3786" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(39.346313%,40.562439%,53.077698%);stop-opacity:1;"
+         id="stop3788" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(39.48822%,40.710449%,53.28064%);stop-opacity:1;"
+         id="stop3790" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(39.628601%,40.856934%,53.482056%);stop-opacity:1;"
+         id="stop3792" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(39.768982%,41.003418%,53.684998%);stop-opacity:1;"
+         id="stop3794" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(39.910889%,41.151428%,53.886414%);stop-opacity:1;"
+         id="stop3796" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(40.05127%,41.297913%,54.089355%);stop-opacity:1;"
+         id="stop3798" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(40.19165%,41.444397%,54.290771%);stop-opacity:1;"
+         id="stop3800" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(40.333557%,41.592407%,54.493713%);stop-opacity:1;"
+         id="stop3802" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(40.473938%,41.738892%,54.695129%);stop-opacity:1;"
+         id="stop3804" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(40.614319%,41.886902%,54.898071%);stop-opacity:1;"
+         id="stop3806" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(40.756226%,42.033386%,55.099487%);stop-opacity:1;"
+         id="stop3808" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(40.896606%,42.179871%,55.302429%);stop-opacity:1;"
+         id="stop3810" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(41.036987%,42.327881%,55.503845%);stop-opacity:1;"
+         id="stop3812" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(41.178894%,42.474365%,55.706787%);stop-opacity:1;"
+         id="stop3814" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(41.319275%,42.62085%,55.908203%);stop-opacity:1;"
+         id="stop3816" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(41.461182%,42.76886%,56.111145%);stop-opacity:1;"
+         id="stop3818" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(41.601562%,42.915344%,56.314087%);stop-opacity:1;"
+         id="stop3820" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(41.741943%,43.063354%,56.515503%);stop-opacity:1;"
+         id="stop3822" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(41.88385%,43.209839%,56.718445%);stop-opacity:1;"
+         id="stop3824" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(42.024231%,43.356323%,56.919861%);stop-opacity:1;"
+         id="stop3826" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(42.164612%,43.504333%,57.122803%);stop-opacity:1;"
+         id="stop3828" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(42.306519%,43.650818%,57.324219%);stop-opacity:1;"
+         id="stop3830" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(42.446899%,43.798828%,57.527161%);stop-opacity:1;"
+         id="stop3832" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(42.58728%,43.945312%,57.728577%);stop-opacity:1;"
+         id="stop3834" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(42.729187%,44.091797%,57.931519%);stop-opacity:1;"
+         id="stop3836" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(42.869568%,44.239807%,58.132935%);stop-opacity:1;"
+         id="stop3838" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(43.011475%,44.386292%,58.335876%);stop-opacity:1;"
+         id="stop3840" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(43.151855%,44.532776%,58.537292%);stop-opacity:1;"
+         id="stop3842" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(43.292236%,44.680786%,58.740234%);stop-opacity:1;"
+         id="stop3844" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(43.434143%,44.827271%,58.94165%);stop-opacity:1;"
+         id="stop3846" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(43.574524%,44.975281%,59.144592%);stop-opacity:1;"
+         id="stop3848" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(43.714905%,45.121765%,59.346008%);stop-opacity:1;"
+         id="stop3850" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(43.856812%,45.26825%,59.54895%);stop-opacity:1;"
+         id="stop3852" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(43.997192%,45.41626%,59.750366%);stop-opacity:1;"
+         id="stop3854" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(44.137573%,45.562744%,59.953308%);stop-opacity:1;"
+         id="stop3856" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(44.27948%,45.709229%,60.154724%);stop-opacity:1;"
+         id="stop3858" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(44.419861%,45.857239%,60.357666%);stop-opacity:1;"
+         id="stop3860" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(44.560242%,46.003723%,60.559082%);stop-opacity:1;"
+         id="stop3862" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(44.702148%,46.151733%,60.762024%);stop-opacity:1;"
+         id="stop3864" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(44.842529%,46.298218%,60.96344%);stop-opacity:1;"
+         id="stop3866" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(44.984436%,46.444702%,61.166382%);stop-opacity:1;"
+         id="stop3868" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(45.124817%,46.592712%,61.367798%);stop-opacity:1;"
+         id="stop3870" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(45.265198%,46.739197%,61.57074%);stop-opacity:1;"
+         id="stop3872" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(45.407104%,46.885681%,61.773682%);stop-opacity:1;"
+         id="stop3874" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(45.547485%,47.033691%,61.975098%);stop-opacity:1;"
+         id="stop3876" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(45.687866%,47.180176%,62.17804%);stop-opacity:1;"
+         id="stop3878" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(45.829773%,47.328186%,62.379456%);stop-opacity:1;"
+         id="stop3880" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(45.970154%,47.47467%,62.582397%);stop-opacity:1;"
+         id="stop3882" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(46.110535%,47.621155%,62.783813%);stop-opacity:1;"
+         id="stop3884" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(46.252441%,47.769165%,62.986755%);stop-opacity:1;"
+         id="stop3886" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(46.392822%,47.915649%,63.188171%);stop-opacity:1;"
+         id="stop3888" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(46.534729%,48.062134%,63.391113%);stop-opacity:1;"
+         id="stop3890" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(46.67511%,48.210144%,63.592529%);stop-opacity:1;"
+         id="stop3892" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(46.815491%,48.356628%,63.795471%);stop-opacity:1;"
+         id="stop3894" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(46.957397%,48.504639%,63.996887%);stop-opacity:1;"
+         id="stop3896" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(47.097778%,48.651123%,64.199829%);stop-opacity:1;"
+         id="stop3898" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(47.238159%,48.797607%,64.401245%);stop-opacity:1;"
+         id="stop3900" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(47.380066%,48.945618%,64.604187%);stop-opacity:1;"
+         id="stop3902" />
+    </linearGradient>
+    <clipPath
+       id="clip903">
+      <path
+         d="M 230.91406,184 H 231 v 1.375 h -0.0859 z m 0,0"
+         id="path3905" />
+    </clipPath>
+    <clipPath
+       id="clip904">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3908" />
+    </clipPath>
+    <clipPath
+       id="clip905">
+      <path
+         d="M 230.91406,183 H 232 v 2.375 h -1.08594 z m 0,0"
+         id="path3911" />
+    </clipPath>
+    <clipPath
+       id="clip906">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3914" />
+    </clipPath>
+    <clipPath
+       id="clip907">
+      <path
+         d="M 230.91406,183 H 233 v 2.375 h -2.08594 z m 0,0"
+         id="path3917" />
+    </clipPath>
+    <clipPath
+       id="clip908">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3920" />
+    </clipPath>
+    <clipPath
+       id="clip909">
+      <path
+         d="M 230.91406,182 H 233 v 3.375 h -2.08594 z m 0,0"
+         id="path3923" />
+    </clipPath>
+    <clipPath
+       id="clip910">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3926" />
+    </clipPath>
+    <clipPath
+       id="clip911">
+      <path
+         d="M 230.91406,181 H 234 v 4.375 h -3.08594 z m 0,0"
+         id="path3929" />
+    </clipPath>
+    <clipPath
+       id="clip912">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3932" />
+    </clipPath>
+    <clipPath
+       id="clip913">
+      <path
+         d="M 230.91406,180 H 235 v 5.375 h -4.08594 z m 0,0"
+         id="path3935" />
+    </clipPath>
+    <clipPath
+       id="clip914">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3938" />
+    </clipPath>
+    <clipPath
+       id="clip915">
+      <path
+         d="M 230.91406,180 H 236 v 5.375 h -5.08594 z m 0,0"
+         id="path3941" />
+    </clipPath>
+    <clipPath
+       id="clip916">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3944" />
+    </clipPath>
+    <clipPath
+       id="clip917">
+      <path
+         d="M 230.91406,179 H 236 v 6.375 h -5.08594 z m 0,0"
+         id="path3947" />
+    </clipPath>
+    <clipPath
+       id="clip918">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3950" />
+    </clipPath>
+    <clipPath
+       id="clip919">
+      <path
+         d="M 230.91406,178 H 237 v 7.375 h -6.08594 z m 0,0"
+         id="path3953" />
+    </clipPath>
+    <clipPath
+       id="clip920">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3956" />
+    </clipPath>
+    <clipPath
+       id="clip921">
+      <path
+         d="M 230.91406,177 H 238 v 8.375 h -7.08594 z m 0,0"
+         id="path3959" />
+    </clipPath>
+    <clipPath
+       id="clip922">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3962" />
+    </clipPath>
+    <clipPath
+       id="clip923">
+      <path
+         d="M 230.91406,177 H 239 v 8.375 h -8.08594 z m 0,0"
+         id="path3965" />
+    </clipPath>
+    <clipPath
+       id="clip924">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3968" />
+    </clipPath>
+    <clipPath
+       id="clip925">
+      <path
+         d="M 230.91406,176 H 239 v 9.375 h -8.08594 z m 0,0"
+         id="path3971" />
+    </clipPath>
+    <clipPath
+       id="clip926">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3974" />
+    </clipPath>
+    <clipPath
+       id="clip927">
+      <path
+         d="M 230.91406,175 H 240 v 10.375 h -9.08594 z m 0,0"
+         id="path3977" />
+    </clipPath>
+    <clipPath
+       id="clip928">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3980" />
+    </clipPath>
+    <clipPath
+       id="clip929">
+      <path
+         d="M 230.91406,174 H 241 v 11.375 h -10.08594 z m 0,0"
+         id="path3983" />
+    </clipPath>
+    <clipPath
+       id="clip930">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3986" />
+    </clipPath>
+    <clipPath
+       id="clip931">
+      <path
+         d="M 230.91406,174 H 242 v 11.375 h -11.08594 z m 0,0"
+         id="path3989" />
+    </clipPath>
+    <clipPath
+       id="clip932">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3992" />
+    </clipPath>
+    <clipPath
+       id="clip933">
+      <path
+         d="M 230.91406,173 H 242 v 12.375 h -11.08594 z m 0,0"
+         id="path3995" />
+    </clipPath>
+    <clipPath
+       id="clip934">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path3998" />
+    </clipPath>
+    <clipPath
+       id="clip935">
+      <path
+         d="M 230.91406,172 H 243 v 13.375 h -12.08594 z m 0,0"
+         id="path4001" />
+    </clipPath>
+    <clipPath
+       id="clip936">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4004" />
+    </clipPath>
+    <clipPath
+       id="clip937">
+      <path
+         d="M 230.91406,171 H 244 v 14.375 h -13.08594 z m 0,0"
+         id="path4007" />
+    </clipPath>
+    <clipPath
+       id="clip938">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4010" />
+    </clipPath>
+    <clipPath
+       id="clip939">
+      <path
+         d="M 230.91406,171 H 245 v 14.375 h -14.08594 z m 0,0"
+         id="path4013" />
+    </clipPath>
+    <clipPath
+       id="clip940">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4016" />
+    </clipPath>
+    <clipPath
+       id="clip941">
+      <path
+         d="M 230.91406,170 H 245 v 15.375 h -14.08594 z m 0,0"
+         id="path4019" />
+    </clipPath>
+    <clipPath
+       id="clip942">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4022" />
+    </clipPath>
+    <clipPath
+       id="clip943">
+      <path
+         d="M 230.91406,169 H 246 v 16.375 h -15.08594 z m 0,0"
+         id="path4025" />
+    </clipPath>
+    <clipPath
+       id="clip944">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4028" />
+    </clipPath>
+    <clipPath
+       id="clip945">
+      <path
+         d="M 230.91406,168 H 247 v 17.375 h -16.08594 z m 0,0"
+         id="path4031" />
+    </clipPath>
+    <clipPath
+       id="clip946">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4034" />
+    </clipPath>
+    <clipPath
+       id="clip947">
+      <path
+         d="M 230.91406,168 H 248 v 17.375 h -17.08594 z m 0,0"
+         id="path4037" />
+    </clipPath>
+    <clipPath
+       id="clip948">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4040" />
+    </clipPath>
+    <clipPath
+       id="clip949">
+      <path
+         d="M 230.91406,167 H 248 v 18.375 h -17.08594 z m 0,0"
+         id="path4043" />
+    </clipPath>
+    <clipPath
+       id="clip950">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4046" />
+    </clipPath>
+    <clipPath
+       id="clip951">
+      <path
+         d="M 230.91406,166 H 249 v 19.375 h -18.08594 z m 0,0"
+         id="path4049" />
+    </clipPath>
+    <clipPath
+       id="clip952">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4052" />
+    </clipPath>
+    <clipPath
+       id="clip953">
+      <path
+         d="M 230.91406,165 H 250 v 20.375 h -19.08594 z m 0,0"
+         id="path4055" />
+    </clipPath>
+    <clipPath
+       id="clip954">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4058" />
+    </clipPath>
+    <clipPath
+       id="clip955">
+      <path
+         d="M 230.91406,165 H 251 v 20.375 h -20.08594 z m 0,0"
+         id="path4061" />
+    </clipPath>
+    <clipPath
+       id="clip956">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4064" />
+    </clipPath>
+    <clipPath
+       id="clip957">
+      <path
+         d="M 230.91406,164 H 251 v 21.375 h -20.08594 z m 0,0"
+         id="path4067" />
+    </clipPath>
+    <clipPath
+       id="clip958">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4070" />
+    </clipPath>
+    <clipPath
+       id="clip959">
+      <path
+         d="M 230.91406,163 H 252 v 22.375 h -21.08594 z m 0,0"
+         id="path4073" />
+    </clipPath>
+    <clipPath
+       id="clip960">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4076" />
+    </clipPath>
+    <clipPath
+       id="clip961">
+      <path
+         d="M 230.91406,162 H 253 v 23.375 h -22.08594 z m 0,0"
+         id="path4079" />
+    </clipPath>
+    <clipPath
+       id="clip962">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4082" />
+    </clipPath>
+    <clipPath
+       id="clip963">
+      <path
+         d="M 230.91406,162 H 254 v 23.375 h -23.08594 z m 0,0"
+         id="path4085" />
+    </clipPath>
+    <clipPath
+       id="clip964">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4088" />
+    </clipPath>
+    <clipPath
+       id="clip965">
+      <path
+         d="M 230.91406,161 H 254 v 24.375 h -23.08594 z m 0,0"
+         id="path4091" />
+    </clipPath>
+    <clipPath
+       id="clip966">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4094" />
+    </clipPath>
+    <clipPath
+       id="clip967">
+      <path
+         d="M 230.91406,160 H 255 v 25.375 h -24.08594 z m 0,0"
+         id="path4097" />
+    </clipPath>
+    <clipPath
+       id="clip968">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4100" />
+    </clipPath>
+    <clipPath
+       id="clip969">
+      <path
+         d="M 230.91406,159 H 256 v 26.375 h -25.08594 z m 0,0"
+         id="path4103" />
+    </clipPath>
+    <clipPath
+       id="clip970">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4106" />
+    </clipPath>
+    <clipPath
+       id="clip971">
+      <path
+         d="M 230.91406,159 H 257 v 26.375 h -26.08594 z m 0,0"
+         id="path4109" />
+    </clipPath>
+    <clipPath
+       id="clip972">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4112" />
+    </clipPath>
+    <clipPath
+       id="clip973">
+      <path
+         d="M 230.91406,158 H 257 v 27 h -26.08594 z m 0,0"
+         id="path4115" />
+    </clipPath>
+    <clipPath
+       id="clip974">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4118" />
+    </clipPath>
+    <clipPath
+       id="clip975">
+      <path
+         d="M 230.91406,157 H 258 v 27 h -27.08594 z m 0,0"
+         id="path4121" />
+    </clipPath>
+    <clipPath
+       id="clip976">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4124" />
+    </clipPath>
+    <clipPath
+       id="clip977">
+      <path
+         d="M 230.91406,156 H 259 v 28 h -28.08594 z m 0,0"
+         id="path4127" />
+    </clipPath>
+    <clipPath
+       id="clip978">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4130" />
+    </clipPath>
+    <clipPath
+       id="clip979">
+      <path
+         d="M 230.91406,156 H 260 v 27 h -29.08594 z m 0,0"
+         id="path4133" />
+    </clipPath>
+    <clipPath
+       id="clip980">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4136" />
+    </clipPath>
+    <clipPath
+       id="clip981">
+      <path
+         d="M 230.91406,155 H 260 v 27 h -29.08594 z m 0,0"
+         id="path4139" />
+    </clipPath>
+    <clipPath
+       id="clip982">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4142" />
+    </clipPath>
+    <clipPath
+       id="clip983">
+      <path
+         d="m 231,154 h 30 v 27 h -30 z m 0,0"
+         id="path4145" />
+    </clipPath>
+    <clipPath
+       id="clip984">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4148" />
+    </clipPath>
+    <clipPath
+       id="clip985">
+      <path
+         d="m 231,153 h 31 v 28 h -31 z m 0,0"
+         id="path4151" />
+    </clipPath>
+    <clipPath
+       id="clip986">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4154" />
+    </clipPath>
+    <clipPath
+       id="clip987">
+      <path
+         d="m 232,153 h 31 v 27 h -31 z m 0,0"
+         id="path4157" />
+    </clipPath>
+    <clipPath
+       id="clip988">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4160" />
+    </clipPath>
+    <clipPath
+       id="clip989">
+      <path
+         d="m 233,152 h 30 v 27 h -30 z m 0,0"
+         id="path4163" />
+    </clipPath>
+    <clipPath
+       id="clip990">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4166" />
+    </clipPath>
+    <clipPath
+       id="clip991">
+      <path
+         d="m 234,151 h 30 v 27 h -30 z m 0,0"
+         id="path4169" />
+    </clipPath>
+    <clipPath
+       id="clip992">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4172" />
+    </clipPath>
+    <clipPath
+       id="clip993">
+      <path
+         d="m 234,150 h 31 v 28 h -31 z m 0,0"
+         id="path4175" />
+    </clipPath>
+    <clipPath
+       id="clip994">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4178" />
+    </clipPath>
+    <clipPath
+       id="clip995">
+      <path
+         d="m 235,150 h 31 v 27 h -31 z m 0,0"
+         id="path4181" />
+    </clipPath>
+    <clipPath
+       id="clip996">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4184" />
+    </clipPath>
+    <clipPath
+       id="clip997">
+      <path
+         d="m 236,149 h 30 v 27 h -30 z m 0,0"
+         id="path4187" />
+    </clipPath>
+    <clipPath
+       id="clip998">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4190" />
+    </clipPath>
+    <clipPath
+       id="clip999">
+      <path
+         d="m 237,148 h 30 v 27 h -30 z m 0,0"
+         id="path4193" />
+    </clipPath>
+    <clipPath
+       id="clip1000">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4196" />
+    </clipPath>
+    <clipPath
+       id="clip1001">
+      <path
+         d="m 237,147 h 31 v 28 h -31 z m 0,0"
+         id="path4199" />
+    </clipPath>
+    <clipPath
+       id="clip1002">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4202" />
+    </clipPath>
+    <clipPath
+       id="clip1003">
+      <path
+         d="m 238,147 h 31 v 27 h -31 z m 0,0"
+         id="path4205" />
+    </clipPath>
+    <clipPath
+       id="clip1004">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4208" />
+    </clipPath>
+    <clipPath
+       id="clip1005">
+      <path
+         d="m 239,146 h 30 v 27 h -30 z m 0,0"
+         id="path4211" />
+    </clipPath>
+    <clipPath
+       id="clip1006">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4214" />
+    </clipPath>
+    <clipPath
+       id="clip1007">
+      <path
+         d="m 240,145 h 30 v 27 h -30 z m 0,0"
+         id="path4217" />
+    </clipPath>
+    <clipPath
+       id="clip1008">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4220" />
+    </clipPath>
+    <clipPath
+       id="clip1009">
+      <path
+         d="m 240,144 h 31 v 28 h -31 z m 0,0"
+         id="path4223" />
+    </clipPath>
+    <clipPath
+       id="clip1010">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4226" />
+    </clipPath>
+    <clipPath
+       id="clip1011">
+      <path
+         d="m 241,144 h 31 v 27 h -31 z m 0,0"
+         id="path4229" />
+    </clipPath>
+    <clipPath
+       id="clip1012">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4232" />
+    </clipPath>
+    <clipPath
+       id="clip1013">
+      <path
+         d="m 242,143 h 30 v 27 h -30 z m 0,0"
+         id="path4235" />
+    </clipPath>
+    <clipPath
+       id="clip1014">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4238" />
+    </clipPath>
+    <clipPath
+       id="clip1015">
+      <path
+         d="m 231,133 h 52.41406 v 52 H 231 Z m 0,0"
+         id="path4241" />
+    </clipPath>
+    <clipPath
+       id="clip1016">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4244" />
+    </clipPath>
+    <clipPath
+       id="clip1017">
+      <path
+         d="m 234,133 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 234 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4247" />
+    </clipPath>
+    <clipPath
+       id="clip1018">
+      <path
+         d="m 231,133 h 52.41406 v 52.375 H 231 Z m 0,0"
+         id="path4250" />
+    </clipPath>
+    <clipPath
+       id="clip1019">
+      <path
+         d="m 233.91406,132.875 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4253" />
+    </clipPath>
+    <clipPath
+       id="clip1020">
+      <path
+         d="m 234,133 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 234 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4256" />
+    </clipPath>
+    <clipPath
+       id="clip1021">
+      <path
+         d="m 312.58594,132.875 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path4259" />
+    </clipPath>
+    <clipPath
+       id="clip1022">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4262" />
+    </clipPath>
+    <linearGradient
+       id="linear9"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.001494"
+       y1="105.0015"
+       x2="104.9985"
+       y2="0.001494"
+       gradientTransform="matrix(0.5,0,0,0.5,312.58749,132.875)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(32.940674%,33.332825%,32.940674%);stop-opacity:1;"
+         id="stop4265" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(33.053589%,33.451843%,33.053589%);stop-opacity:1;"
+         id="stop4267" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(33.279419%,33.68988%,33.279419%);stop-opacity:1;"
+         id="stop4269" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(33.506775%,33.929443%,33.506775%);stop-opacity:1;"
+         id="stop4271" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(33.732605%,34.169006%,33.732605%);stop-opacity:1;"
+         id="stop4273" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(33.959961%,34.407043%,33.959961%);stop-opacity:1;"
+         id="stop4275" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(34.187317%,34.646606%,34.187317%);stop-opacity:1;"
+         id="stop4277" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(34.413147%,34.884644%,34.413147%);stop-opacity:1;"
+         id="stop4279" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(34.640503%,35.124207%,34.640503%);stop-opacity:1;"
+         id="stop4281" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(34.866333%,35.36377%,34.866333%);stop-opacity:1;"
+         id="stop4283" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(35.093689%,35.601807%,35.093689%);stop-opacity:1;"
+         id="stop4285" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(35.321045%,35.84137%,35.321045%);stop-opacity:1;"
+         id="stop4287" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(35.546875%,36.079407%,35.546875%);stop-opacity:1;"
+         id="stop4289" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(35.774231%,36.31897%,35.774231%);stop-opacity:1;"
+         id="stop4291" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(36.000061%,36.558533%,36.000061%);stop-opacity:1;"
+         id="stop4293" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(36.227417%,36.79657%,36.227417%);stop-opacity:1;"
+         id="stop4295" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(36.453247%,37.036133%,36.453247%);stop-opacity:1;"
+         id="stop4297" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(36.680603%,37.27417%,36.680603%);stop-opacity:1;"
+         id="stop4299" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(36.907959%,37.513733%,36.907959%);stop-opacity:1;"
+         id="stop4301" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(37.133789%,37.753296%,37.133789%);stop-opacity:1;"
+         id="stop4303" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(37.361145%,37.991333%,37.361145%);stop-opacity:1;"
+         id="stop4305" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(37.586975%,38.230896%,37.586975%);stop-opacity:1;"
+         id="stop4307" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(37.814331%,38.470459%,37.814331%);stop-opacity:1;"
+         id="stop4309" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(38.040161%,38.708496%,38.040161%);stop-opacity:1;"
+         id="stop4311" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(38.267517%,38.948059%,38.267517%);stop-opacity:1;"
+         id="stop4313" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(38.494873%,39.186096%,38.494873%);stop-opacity:1;"
+         id="stop4315" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(38.720703%,39.425659%,38.720703%);stop-opacity:1;"
+         id="stop4317" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(38.948059%,39.665222%,38.948059%);stop-opacity:1;"
+         id="stop4319" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(39.173889%,39.903259%,39.173889%);stop-opacity:1;"
+         id="stop4321" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(39.401245%,40.142822%,39.401245%);stop-opacity:1;"
+         id="stop4323" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(39.628601%,40.380859%,39.628601%);stop-opacity:1;"
+         id="stop4325" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(39.854431%,40.620422%,39.854431%);stop-opacity:1;"
+         id="stop4327" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(40.081787%,40.859985%,40.081787%);stop-opacity:1;"
+         id="stop4329" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(40.307617%,41.098022%,40.307617%);stop-opacity:1;"
+         id="stop4331" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(40.534973%,41.337585%,40.534973%);stop-opacity:1;"
+         id="stop4333" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(40.760803%,41.575623%,40.760803%);stop-opacity:1;"
+         id="stop4335" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(40.988159%,41.815186%,40.988159%);stop-opacity:1;"
+         id="stop4337" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(41.215515%,42.054749%,41.215515%);stop-opacity:1;"
+         id="stop4339" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(41.441345%,42.292786%,41.441345%);stop-opacity:1;"
+         id="stop4341" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(41.668701%,42.532349%,41.668701%);stop-opacity:1;"
+         id="stop4343" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(41.894531%,42.771912%,41.894531%);stop-opacity:1;"
+         id="stop4345" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(42.121887%,43.009949%,42.121887%);stop-opacity:1;"
+         id="stop4347" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(42.349243%,43.249512%,42.349243%);stop-opacity:1;"
+         id="stop4349" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(42.575073%,43.487549%,42.575073%);stop-opacity:1;"
+         id="stop4351" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(42.802429%,43.727112%,42.802429%);stop-opacity:1;"
+         id="stop4353" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(43.028259%,43.966675%,43.028259%);stop-opacity:1;"
+         id="stop4355" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(43.255615%,44.204712%,43.255615%);stop-opacity:1;"
+         id="stop4357" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(43.481445%,44.444275%,43.481445%);stop-opacity:1;"
+         id="stop4359" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(43.708801%,44.682312%,43.708801%);stop-opacity:1;"
+         id="stop4361" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(43.936157%,44.921875%,43.936157%);stop-opacity:1;"
+         id="stop4363" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(44.161987%,45.161438%,44.161987%);stop-opacity:1;"
+         id="stop4365" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(44.389343%,45.399475%,44.389343%);stop-opacity:1;"
+         id="stop4367" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(44.615173%,45.639038%,44.615173%);stop-opacity:1;"
+         id="stop4369" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(44.842529%,45.878601%,44.842529%);stop-opacity:1;"
+         id="stop4371" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(45.068359%,46.116638%,45.068359%);stop-opacity:1;"
+         id="stop4373" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(45.295715%,46.356201%,45.295715%);stop-opacity:1;"
+         id="stop4375" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(45.523071%,46.594238%,45.523071%);stop-opacity:1;"
+         id="stop4377" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(45.748901%,46.833801%,45.748901%);stop-opacity:1;"
+         id="stop4379" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(45.976257%,47.073364%,45.976257%);stop-opacity:1;"
+         id="stop4381" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(46.202087%,47.311401%,46.202087%);stop-opacity:1;"
+         id="stop4383" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(46.429443%,47.550964%,46.429443%);stop-opacity:1;"
+         id="stop4385" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(46.656799%,47.789001%,46.656799%);stop-opacity:1;"
+         id="stop4387" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(46.882629%,48.028564%,46.882629%);stop-opacity:1;"
+         id="stop4389" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(47.109985%,48.268127%,47.109985%);stop-opacity:1;"
+         id="stop4391" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(47.335815%,48.506165%,47.335815%);stop-opacity:1;"
+         id="stop4393" />
+    </linearGradient>
+    <clipPath
+       id="clip1023">
+      <path
+         d="M 312.58594,182 H 313 v 3.375 h -0.41406 z m 0,0"
+         id="path4396" />
+    </clipPath>
+    <clipPath
+       id="clip1024">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4399" />
+    </clipPath>
+    <clipPath
+       id="clip1025">
+      <path
+         d="M 312.58594,181 H 314 v 4.375 h -1.41406 z m 0,0"
+         id="path4402" />
+    </clipPath>
+    <clipPath
+       id="clip1026">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4405" />
+    </clipPath>
+    <clipPath
+       id="clip1027">
+      <path
+         d="M 312.58594,180 H 315 v 5.375 h -2.41406 z m 0,0"
+         id="path4408" />
+    </clipPath>
+    <clipPath
+       id="clip1028">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4411" />
+    </clipPath>
+    <clipPath
+       id="clip1029">
+      <path
+         d="M 312.58594,179 H 316 v 6.375 h -3.41406 z m 0,0"
+         id="path4414" />
+    </clipPath>
+    <clipPath
+       id="clip1030">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4417" />
+    </clipPath>
+    <clipPath
+       id="clip1031">
+      <path
+         d="M 312.58594,178 H 317 v 7.375 h -4.41406 z m 0,0"
+         id="path4420" />
+    </clipPath>
+    <clipPath
+       id="clip1032">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4423" />
+    </clipPath>
+    <clipPath
+       id="clip1033">
+      <path
+         d="M 312.58594,177 H 318 v 8.375 h -5.41406 z m 0,0"
+         id="path4426" />
+    </clipPath>
+    <clipPath
+       id="clip1034">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4429" />
+    </clipPath>
+    <clipPath
+       id="clip1035">
+      <path
+         d="M 312.58594,176 H 319 v 9.375 h -6.41406 z m 0,0"
+         id="path4432" />
+    </clipPath>
+    <clipPath
+       id="clip1036">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4435" />
+    </clipPath>
+    <clipPath
+       id="clip1037">
+      <path
+         d="M 312.58594,175 H 320 v 10.375 h -7.41406 z m 0,0"
+         id="path4438" />
+    </clipPath>
+    <clipPath
+       id="clip1038">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4441" />
+    </clipPath>
+    <clipPath
+       id="clip1039">
+      <path
+         d="M 312.58594,174 H 321 v 11.375 h -8.41406 z m 0,0"
+         id="path4444" />
+    </clipPath>
+    <clipPath
+       id="clip1040">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4447" />
+    </clipPath>
+    <clipPath
+       id="clip1041">
+      <path
+         d="M 312.58594,173 H 322 v 12.375 h -9.41406 z m 0,0"
+         id="path4450" />
+    </clipPath>
+    <clipPath
+       id="clip1042">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4453" />
+    </clipPath>
+    <clipPath
+       id="clip1043">
+      <path
+         d="M 312.58594,172 H 323 v 13.375 h -10.41406 z m 0,0"
+         id="path4456" />
+    </clipPath>
+    <clipPath
+       id="clip1044">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4459" />
+    </clipPath>
+    <clipPath
+       id="clip1045">
+      <path
+         d="M 312.58594,171 H 324 v 14.375 h -11.41406 z m 0,0"
+         id="path4462" />
+    </clipPath>
+    <clipPath
+       id="clip1046">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4465" />
+    </clipPath>
+    <clipPath
+       id="clip1047">
+      <path
+         d="M 312.58594,170 H 325 v 15.375 h -12.41406 z m 0,0"
+         id="path4468" />
+    </clipPath>
+    <clipPath
+       id="clip1048">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4471" />
+    </clipPath>
+    <clipPath
+       id="clip1049">
+      <path
+         d="M 312.58594,169 H 326 v 16.375 h -13.41406 z m 0,0"
+         id="path4474" />
+    </clipPath>
+    <clipPath
+       id="clip1050">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4477" />
+    </clipPath>
+    <clipPath
+       id="clip1051">
+      <path
+         d="M 312.58594,168 H 327 v 17.375 h -14.41406 z m 0,0"
+         id="path4480" />
+    </clipPath>
+    <clipPath
+       id="clip1052">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4483" />
+    </clipPath>
+    <clipPath
+       id="clip1053">
+      <path
+         d="M 312.58594,167 H 328 v 18.375 h -15.41406 z m 0,0"
+         id="path4486" />
+    </clipPath>
+    <clipPath
+       id="clip1054">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4489" />
+    </clipPath>
+    <clipPath
+       id="clip1055">
+      <path
+         d="M 312.58594,166 H 329 v 19.375 h -16.41406 z m 0,0"
+         id="path4492" />
+    </clipPath>
+    <clipPath
+       id="clip1056">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4495" />
+    </clipPath>
+    <clipPath
+       id="clip1057">
+      <path
+         d="M 312.58594,165 H 330 v 20.375 h -17.41406 z m 0,0"
+         id="path4498" />
+    </clipPath>
+    <clipPath
+       id="clip1058">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4501" />
+    </clipPath>
+    <clipPath
+       id="clip1059">
+      <path
+         d="M 312.58594,164 H 331 v 21.375 h -18.41406 z m 0,0"
+         id="path4504" />
+    </clipPath>
+    <clipPath
+       id="clip1060">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4507" />
+    </clipPath>
+    <clipPath
+       id="clip1061">
+      <path
+         d="M 312.58594,163 H 332 v 22.375 h -19.41406 z m 0,0"
+         id="path4510" />
+    </clipPath>
+    <clipPath
+       id="clip1062">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4513" />
+    </clipPath>
+    <clipPath
+       id="clip1063">
+      <path
+         d="M 312.58594,162 H 333 v 23.375 h -20.41406 z m 0,0"
+         id="path4516" />
+    </clipPath>
+    <clipPath
+       id="clip1064">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4519" />
+    </clipPath>
+    <clipPath
+       id="clip1065">
+      <path
+         d="M 312.58594,161 H 334 v 24.375 h -21.41406 z m 0,0"
+         id="path4522" />
+    </clipPath>
+    <clipPath
+       id="clip1066">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4525" />
+    </clipPath>
+    <clipPath
+       id="clip1067">
+      <path
+         d="M 312.58594,160 H 335 v 25.375 h -22.41406 z m 0,0"
+         id="path4528" />
+    </clipPath>
+    <clipPath
+       id="clip1068">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4531" />
+    </clipPath>
+    <clipPath
+       id="clip1069">
+      <path
+         d="M 312.58594,159 H 336 v 26.375 h -23.41406 z m 0,0"
+         id="path4534" />
+    </clipPath>
+    <clipPath
+       id="clip1070">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4537" />
+    </clipPath>
+    <clipPath
+       id="clip1071">
+      <path
+         d="M 312.58594,158 H 337 v 27.375 h -24.41406 z m 0,0"
+         id="path4540" />
+    </clipPath>
+    <clipPath
+       id="clip1072">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4543" />
+    </clipPath>
+    <clipPath
+       id="clip1073">
+      <path
+         d="M 312.58594,157 H 338 v 28 h -25.41406 z m 0,0"
+         id="path4546" />
+    </clipPath>
+    <clipPath
+       id="clip1074">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4549" />
+    </clipPath>
+    <clipPath
+       id="clip1075">
+      <path
+         d="M 312.58594,157 H 338 v 27 h -25.41406 z m 0,0"
+         id="path4552" />
+    </clipPath>
+    <clipPath
+       id="clip1076">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4555" />
+    </clipPath>
+    <clipPath
+       id="clip1077">
+      <path
+         d="M 312.58594,156 H 339 v 28 h -26.41406 z m 0,0"
+         id="path4558" />
+    </clipPath>
+    <clipPath
+       id="clip1078">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4561" />
+    </clipPath>
+    <clipPath
+       id="clip1079">
+      <path
+         d="M 312.58594,155 H 340 v 28 h -27.41406 z m 0,0"
+         id="path4564" />
+    </clipPath>
+    <clipPath
+       id="clip1080">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4567" />
+    </clipPath>
+    <clipPath
+       id="clip1081">
+      <path
+         d="m 313,154 h 28 v 28 h -28 z m 0,0"
+         id="path4570" />
+    </clipPath>
+    <clipPath
+       id="clip1082">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4573" />
+    </clipPath>
+    <clipPath
+       id="clip1083">
+      <path
+         d="m 314,154 h 27 v 27 h -27 z m 0,0"
+         id="path4576" />
+    </clipPath>
+    <clipPath
+       id="clip1084">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4579" />
+    </clipPath>
+    <clipPath
+       id="clip1085">
+      <path
+         d="m 315,153 h 27 v 28 h -27 z m 0,0"
+         id="path4582" />
+    </clipPath>
+    <clipPath
+       id="clip1086">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4585" />
+    </clipPath>
+    <clipPath
+       id="clip1087">
+      <path
+         d="m 315,152 h 28 v 28 h -28 z m 0,0"
+         id="path4588" />
+    </clipPath>
+    <clipPath
+       id="clip1088">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4591" />
+    </clipPath>
+    <clipPath
+       id="clip1089">
+      <path
+         d="m 316,151 h 28 v 28 h -28 z m 0,0"
+         id="path4594" />
+    </clipPath>
+    <clipPath
+       id="clip1090">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4597" />
+    </clipPath>
+    <clipPath
+       id="clip1091">
+      <path
+         d="m 317,151 h 27 v 27 h -27 z m 0,0"
+         id="path4600" />
+    </clipPath>
+    <clipPath
+       id="clip1092">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4603" />
+    </clipPath>
+    <clipPath
+       id="clip1093">
+      <path
+         d="m 318,150 h 27 v 28 h -27 z m 0,0"
+         id="path4606" />
+    </clipPath>
+    <clipPath
+       id="clip1094">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4609" />
+    </clipPath>
+    <clipPath
+       id="clip1095">
+      <path
+         d="m 318,149 h 28 v 28 h -28 z m 0,0"
+         id="path4612" />
+    </clipPath>
+    <clipPath
+       id="clip1096">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4615" />
+    </clipPath>
+    <clipPath
+       id="clip1097">
+      <path
+         d="m 319,148 h 28 v 28 h -28 z m 0,0"
+         id="path4618" />
+    </clipPath>
+    <clipPath
+       id="clip1098">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4621" />
+    </clipPath>
+    <clipPath
+       id="clip1099">
+      <path
+         d="m 320,148 h 27 v 27 h -27 z m 0,0"
+         id="path4624" />
+    </clipPath>
+    <clipPath
+       id="clip1100">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4627" />
+    </clipPath>
+    <clipPath
+       id="clip1101">
+      <path
+         d="m 321,147 h 27 v 28 h -27 z m 0,0"
+         id="path4630" />
+    </clipPath>
+    <clipPath
+       id="clip1102">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4633" />
+    </clipPath>
+    <clipPath
+       id="clip1103">
+      <path
+         d="m 321,146 h 28 v 28 h -28 z m 0,0"
+         id="path4636" />
+    </clipPath>
+    <clipPath
+       id="clip1104">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4639" />
+    </clipPath>
+    <clipPath
+       id="clip1105">
+      <path
+         d="m 322,145 h 28 v 28 h -28 z m 0,0"
+         id="path4642" />
+    </clipPath>
+    <clipPath
+       id="clip1106">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4645" />
+    </clipPath>
+    <clipPath
+       id="clip1107">
+      <path
+         d="m 323,145 h 27 v 27 h -27 z m 0,0"
+         id="path4648" />
+    </clipPath>
+    <clipPath
+       id="clip1108">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4651" />
+    </clipPath>
+    <clipPath
+       id="clip1109">
+      <path
+         d="m 324,144 h 27 v 28 h -27 z m 0,0"
+         id="path4654" />
+    </clipPath>
+    <clipPath
+       id="clip1110">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4657" />
+    </clipPath>
+    <clipPath
+       id="clip1111">
+      <path
+         d="m 324,143 h 28 v 28 h -28 z m 0,0"
+         id="path4660" />
+    </clipPath>
+    <clipPath
+       id="clip1112">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4663" />
+    </clipPath>
+    <clipPath
+       id="clip1113">
+      <path
+         d="m 325,142 h 28 v 28 h -28 z m 0,0"
+         id="path4666" />
+    </clipPath>
+    <clipPath
+       id="clip1114">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4669" />
+    </clipPath>
+    <clipPath
+       id="clip1115">
+      <path
+         d="m 313,133 h 52 v 52 h -52 z m 0,0"
+         id="path4672" />
+    </clipPath>
+    <clipPath
+       id="clip1116">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4675" />
+    </clipPath>
+    <clipPath
+       id="clip1117">
+      <path
+         d="M 315.5,133 H 362 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4678" />
+    </clipPath>
+    <clipPath
+       id="clip1118">
+      <path
+         d="m 313,133 h 52 v 52.375 h -52 z m 0,0"
+         id="path4681" />
+    </clipPath>
+    <clipPath
+       id="clip1119">
+      <path
+         d="m 315.58594,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path4684" />
+    </clipPath>
+    <clipPath
+       id="clip1120">
+      <path
+         d="M 315.5,133 H 362 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4687" />
+    </clipPath>
+    <clipPath
+       id="clip1121">
+      <path
+         d="m 394.26172,132.875 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path4690" />
+    </clipPath>
+    <clipPath
+       id="clip1122">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4693" />
+    </clipPath>
+    <linearGradient
+       id="linear10"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.000512"
+       y1="105.00051"
+       x2="104.99949"
+       y2="0.000512"
+       gradientTransform="matrix(0.5,0,0,0.5,394.26251,132.875)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(12.940979%,52.548218%,53.72467%);stop-opacity:1;"
+         id="stop4696" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(13.002014%,52.706909%,53.883362%);stop-opacity:1;"
+         id="stop4698" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(13.124084%,53.025818%,54.202271%);stop-opacity:1;"
+         id="stop4700" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(13.246155%,53.344727%,54.521179%);stop-opacity:1;"
+         id="stop4702" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(13.369751%,53.662109%,54.838562%);stop-opacity:1;"
+         id="stop4704" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(13.491821%,53.981018%,55.157471%);stop-opacity:1;"
+         id="stop4706" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(13.613892%,54.299927%,55.476379%);stop-opacity:1;"
+         id="stop4708" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(13.737488%,54.618835%,55.795288%);stop-opacity:1;"
+         id="stop4710" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.859558%,54.937744%,56.114197%);stop-opacity:1;"
+         id="stop4712" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.981628%,55.256653%,56.433105%);stop-opacity:1;"
+         id="stop4714" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(14.042664%,55.415344%,56.591797%);stop-opacity:1;"
+         id="stop4716" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(14.103699%,55.574036%,56.750488%);stop-opacity:1;"
+         id="stop4718" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(14.227295%,55.892944%,57.069397%);stop-opacity:1;"
+         id="stop4720" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(14.349365%,56.211853%,57.388306%);stop-opacity:1;"
+         id="stop4722" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(14.471436%,56.530762%,57.707214%);stop-opacity:1;"
+         id="stop4724" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(14.595032%,56.84967%,58.026123%);stop-opacity:1;"
+         id="stop4726" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(14.717102%,57.167053%,58.343506%);stop-opacity:1;"
+         id="stop4728" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(14.839172%,57.485962%,58.662415%);stop-opacity:1;"
+         id="stop4730" />
+    </linearGradient>
+    <clipPath
+       id="clip1123">
+      <path
+         d="M 394.26172,185 H 397 v 0.375 h -2.73828 z m 0,0"
+         id="path4733" />
+    </clipPath>
+    <clipPath
+       id="clip1124">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4736" />
+    </clipPath>
+    <clipPath
+       id="clip1125">
+      <path
+         d="M 394.26172,184 H 398 v 1.375 h -3.73828 z m 0,0"
+         id="path4739" />
+    </clipPath>
+    <clipPath
+       id="clip1126">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4742" />
+    </clipPath>
+    <clipPath
+       id="clip1127">
+      <path
+         d="M 394.26172,183 H 399 v 2.375 h -4.73828 z m 0,0"
+         id="path4745" />
+    </clipPath>
+    <clipPath
+       id="clip1128">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4748" />
+    </clipPath>
+    <clipPath
+       id="clip1129">
+      <path
+         d="M 394.26172,182 H 400 v 3.375 h -5.73828 z m 0,0"
+         id="path4751" />
+    </clipPath>
+    <clipPath
+       id="clip1130">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4754" />
+    </clipPath>
+    <clipPath
+       id="clip1131">
+      <path
+         d="M 394.26172,181 H 401 v 4.375 h -6.73828 z m 0,0"
+         id="path4757" />
+    </clipPath>
+    <clipPath
+       id="clip1132">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4760" />
+    </clipPath>
+    <clipPath
+       id="clip1133">
+      <path
+         d="M 394.26172,180 H 402 v 5.375 h -7.73828 z m 0,0"
+         id="path4763" />
+    </clipPath>
+    <clipPath
+       id="clip1134">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4766" />
+    </clipPath>
+    <clipPath
+       id="clip1135">
+      <path
+         d="M 394.26172,179 H 403 v 6.375 h -8.73828 z m 0,0"
+         id="path4769" />
+    </clipPath>
+    <clipPath
+       id="clip1136">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4772" />
+    </clipPath>
+    <clipPath
+       id="clip1137">
+      <path
+         d="M 394.26172,178 H 404 v 7.375 h -9.73828 z m 0,0"
+         id="path4775" />
+    </clipPath>
+    <clipPath
+       id="clip1138">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4778" />
+    </clipPath>
+    <clipPath
+       id="clip1139">
+      <path
+         d="M 394.26172,177 H 405 v 8.375 h -10.73828 z m 0,0"
+         id="path4781" />
+    </clipPath>
+    <clipPath
+       id="clip1140">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4784" />
+    </clipPath>
+    <clipPath
+       id="clip1141">
+      <path
+         d="M 394.26172,176 H 406 v 9.375 h -11.73828 z m 0,0"
+         id="path4787" />
+    </clipPath>
+    <clipPath
+       id="clip1142">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4790" />
+    </clipPath>
+    <clipPath
+       id="clip1143">
+      <path
+         d="M 394.26172,175 H 407 v 10.375 h -12.73828 z m 0,0"
+         id="path4793" />
+    </clipPath>
+    <clipPath
+       id="clip1144">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4796" />
+    </clipPath>
+    <clipPath
+       id="clip1145">
+      <path
+         d="M 394.26172,174 H 408 v 11.375 h -13.73828 z m 0,0"
+         id="path4799" />
+    </clipPath>
+    <clipPath
+       id="clip1146">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4802" />
+    </clipPath>
+    <clipPath
+       id="clip1147">
+      <path
+         d="M 394.26172,173 H 409 v 12.375 h -14.73828 z m 0,0"
+         id="path4805" />
+    </clipPath>
+    <clipPath
+       id="clip1148">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4808" />
+    </clipPath>
+    <clipPath
+       id="clip1149">
+      <path
+         d="M 394.26172,172 H 410 v 13.375 h -15.73828 z m 0,0"
+         id="path4811" />
+    </clipPath>
+    <clipPath
+       id="clip1150">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4814" />
+    </clipPath>
+    <clipPath
+       id="clip1151">
+      <path
+         d="M 394.26172,171 H 411 v 14.375 h -16.73828 z m 0,0"
+         id="path4817" />
+    </clipPath>
+    <clipPath
+       id="clip1152">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4820" />
+    </clipPath>
+    <clipPath
+       id="clip1153">
+      <path
+         d="M 394.26172,170 H 412 v 15.375 h -17.73828 z m 0,0"
+         id="path4823" />
+    </clipPath>
+    <clipPath
+       id="clip1154">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4826" />
+    </clipPath>
+    <clipPath
+       id="clip1155">
+      <path
+         d="M 394.26172,169 H 413 v 16.375 h -18.73828 z m 0,0"
+         id="path4829" />
+    </clipPath>
+    <clipPath
+       id="clip1156">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4832" />
+    </clipPath>
+    <clipPath
+       id="clip1157">
+      <path
+         d="M 394.26172,168 H 414 v 17.375 h -19.73828 z m 0,0"
+         id="path4835" />
+    </clipPath>
+    <clipPath
+       id="clip1158">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4838" />
+    </clipPath>
+    <clipPath
+       id="clip1159">
+      <path
+         d="M 394.26172,167 H 415 v 18.375 h -20.73828 z m 0,0"
+         id="path4841" />
+    </clipPath>
+    <clipPath
+       id="clip1160">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4844" />
+    </clipPath>
+    <clipPath
+       id="clip1161">
+      <path
+         d="M 394.26172,166 H 416 v 19.375 h -21.73828 z m 0,0"
+         id="path4847" />
+    </clipPath>
+    <clipPath
+       id="clip1162">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4850" />
+    </clipPath>
+    <clipPath
+       id="clip1163">
+      <path
+         d="M 394.26172,165 H 417 v 20 h -22.73828 z m 0,0"
+         id="path4853" />
+    </clipPath>
+    <clipPath
+       id="clip1164">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4856" />
+    </clipPath>
+    <clipPath
+       id="clip1165">
+      <path
+         d="M 394.26172,164 H 418 v 21 h -23.73828 z m 0,0"
+         id="path4859" />
+    </clipPath>
+    <clipPath
+       id="clip1166">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4862" />
+    </clipPath>
+    <clipPath
+       id="clip1167">
+      <path
+         d="M 394.26172,163 H 419 v 21 h -24.73828 z m 0,0"
+         id="path4865" />
+    </clipPath>
+    <clipPath
+       id="clip1168">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4868" />
+    </clipPath>
+    <clipPath
+       id="clip1169">
+      <path
+         d="M 394.26172,163 H 419 v 20 h -24.73828 z m 0,0"
+         id="path4871" />
+    </clipPath>
+    <clipPath
+       id="clip1170">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4874" />
+    </clipPath>
+    <clipPath
+       id="clip1171">
+      <path
+         d="M 394.26172,162 H 420 v 20 h -25.73828 z m 0,0"
+         id="path4877" />
+    </clipPath>
+    <clipPath
+       id="clip1172">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4880" />
+    </clipPath>
+    <clipPath
+       id="clip1173">
+      <path
+         d="M 394.26172,161 H 421 v 21 h -26.73828 z m 0,0"
+         id="path4883" />
+    </clipPath>
+    <clipPath
+       id="clip1174">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4886" />
+    </clipPath>
+    <clipPath
+       id="clip1175">
+      <path
+         d="M 394.26172,160 H 422 v 21 h -27.73828 z m 0,0"
+         id="path4889" />
+    </clipPath>
+    <clipPath
+       id="clip1176">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4892" />
+    </clipPath>
+    <clipPath
+       id="clip1177">
+      <path
+         d="M 394.26172,160 H 422 v 20 h -27.73828 z m 0,0"
+         id="path4895" />
+    </clipPath>
+    <clipPath
+       id="clip1178">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4898" />
+    </clipPath>
+    <clipPath
+       id="clip1179">
+      <path
+         d="M 394.26172,159 H 423 v 20 h -28.73828 z m 0,0"
+         id="path4901" />
+    </clipPath>
+    <clipPath
+       id="clip1180">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4904" />
+    </clipPath>
+    <clipPath
+       id="clip1181">
+      <path
+         d="M 394.26172,158 H 424 v 21 h -29.73828 z m 0,0"
+         id="path4907" />
+    </clipPath>
+    <clipPath
+       id="clip1182">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4910" />
+    </clipPath>
+    <clipPath
+       id="clip1183">
+      <path
+         d="M 394.26172,157 H 425 v 21 h -30.73828 z m 0,0"
+         id="path4913" />
+    </clipPath>
+    <clipPath
+       id="clip1184">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4916" />
+    </clipPath>
+    <clipPath
+       id="clip1185">
+      <path
+         d="m 395,157 h 30 v 20 h -30 z m 0,0"
+         id="path4919" />
+    </clipPath>
+    <clipPath
+       id="clip1186">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4922" />
+    </clipPath>
+    <clipPath
+       id="clip1187">
+      <path
+         d="m 395,156 h 31 v 20 h -31 z m 0,0"
+         id="path4925" />
+    </clipPath>
+    <clipPath
+       id="clip1188">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4928" />
+    </clipPath>
+    <clipPath
+       id="clip1189">
+      <path
+         d="m 396,155 h 31 v 21 h -31 z m 0,0"
+         id="path4931" />
+    </clipPath>
+    <clipPath
+       id="clip1190">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4934" />
+    </clipPath>
+    <clipPath
+       id="clip1191">
+      <path
+         d="m 397,154 h 31 v 21 h -31 z m 0,0"
+         id="path4937" />
+    </clipPath>
+    <clipPath
+       id="clip1192">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4940" />
+    </clipPath>
+    <clipPath
+       id="clip1193">
+      <path
+         d="m 398,154 h 30 v 20 h -30 z m 0,0"
+         id="path4943" />
+    </clipPath>
+    <clipPath
+       id="clip1194">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4946" />
+    </clipPath>
+    <clipPath
+       id="clip1195">
+      <path
+         d="m 398,153 h 31 v 20 h -31 z m 0,0"
+         id="path4949" />
+    </clipPath>
+    <clipPath
+       id="clip1196">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4952" />
+    </clipPath>
+    <clipPath
+       id="clip1197">
+      <path
+         d="m 399,152 h 31 v 21 h -31 z m 0,0"
+         id="path4955" />
+    </clipPath>
+    <clipPath
+       id="clip1198">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4958" />
+    </clipPath>
+    <clipPath
+       id="clip1199">
+      <path
+         d="m 400,151 h 31 v 21 h -31 z m 0,0"
+         id="path4961" />
+    </clipPath>
+    <clipPath
+       id="clip1200">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4964" />
+    </clipPath>
+    <clipPath
+       id="clip1201">
+      <path
+         d="m 401,151 h 30 v 20 h -30 z m 0,0"
+         id="path4967" />
+    </clipPath>
+    <clipPath
+       id="clip1202">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4970" />
+    </clipPath>
+    <clipPath
+       id="clip1203">
+      <path
+         d="m 401,150 h 31 v 20 h -31 z m 0,0"
+         id="path4973" />
+    </clipPath>
+    <clipPath
+       id="clip1204">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4976" />
+    </clipPath>
+    <clipPath
+       id="clip1205">
+      <path
+         d="m 402,149 h 31 v 21 h -31 z m 0,0"
+         id="path4979" />
+    </clipPath>
+    <clipPath
+       id="clip1206">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4982" />
+    </clipPath>
+    <clipPath
+       id="clip1207">
+      <path
+         d="m 403,148 h 31 v 21 h -31 z m 0,0"
+         id="path4985" />
+    </clipPath>
+    <clipPath
+       id="clip1208">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4988" />
+    </clipPath>
+    <clipPath
+       id="clip1209">
+      <path
+         d="m 404,148 h 30 v 20 h -30 z m 0,0"
+         id="path4991" />
+    </clipPath>
+    <clipPath
+       id="clip1210">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path4994" />
+    </clipPath>
+    <clipPath
+       id="clip1211">
+      <path
+         d="m 404,147 h 31 v 20 h -31 z m 0,0"
+         id="path4997" />
+    </clipPath>
+    <clipPath
+       id="clip1212">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5000" />
+    </clipPath>
+    <clipPath
+       id="clip1213">
+      <path
+         d="m 405,146 h 31 v 21 h -31 z m 0,0"
+         id="path5003" />
+    </clipPath>
+    <clipPath
+       id="clip1214">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5006" />
+    </clipPath>
+    <clipPath
+       id="clip1215">
+      <path
+         d="m 394.26172,133 h 52.5 v 52 h -52.5 z m 0,0"
+         id="path5009" />
+    </clipPath>
+    <clipPath
+       id="clip1216">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5012" />
+    </clipPath>
+    <clipPath
+       id="clip1217">
+      <path
+         d="M 397.5,133 H 444 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5015" />
+    </clipPath>
+    <clipPath
+       id="clip1218">
+      <path
+         d="m 394.26172,133 h 52.5 v 52.375 h -52.5 z m 0,0"
+         id="path5018" />
+    </clipPath>
+    <clipPath
+       id="clip1219">
+      <path
+         d="m 397.26172,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5021" />
+    </clipPath>
+    <clipPath
+       id="clip1220">
+      <path
+         d="M 397.5,133 H 444 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5024" />
+    </clipPath>
+    <clipPath
+       id="clip1221">
+      <path
+         d="m 475.9375,132.875 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path5027" />
+    </clipPath>
+    <clipPath
+       id="clip1222">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5030" />
+    </clipPath>
+    <linearGradient
+       id="linear11"
+       gradientUnits="userSpaceOnUse"
+       x1="0.00050000002"
+       y1="104.9995"
+       x2="105.0005"
+       y2="-0.00050000002"
+       gradientTransform="matrix(0.5,0,0,0.5,475.9375,132.875)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(12.940979%,52.548218%,53.72467%);stop-opacity:1;"
+         id="stop5033" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(13.002014%,52.706909%,53.883362%);stop-opacity:1;"
+         id="stop5035" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(13.124084%,53.025818%,54.202271%);stop-opacity:1;"
+         id="stop5037" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(13.246155%,53.344727%,54.521179%);stop-opacity:1;"
+         id="stop5039" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(13.369751%,53.662109%,54.840088%);stop-opacity:1;"
+         id="stop5041" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(13.491821%,53.981018%,55.157471%);stop-opacity:1;"
+         id="stop5043" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(13.613892%,54.299927%,55.476379%);stop-opacity:1;"
+         id="stop5045" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(13.737488%,54.618835%,55.795288%);stop-opacity:1;"
+         id="stop5047" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.859558%,54.937744%,56.114197%);stop-opacity:1;"
+         id="stop5049" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.920593%,55.097961%,56.274414%);stop-opacity:1;"
+         id="stop5051" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.981628%,55.256653%,56.433105%);stop-opacity:1;"
+         id="stop5053" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(14.042664%,55.415344%,56.591797%);stop-opacity:1;"
+         id="stop5055" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(14.103699%,55.574036%,56.750488%);stop-opacity:1;"
+         id="stop5057" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(14.227295%,55.892944%,57.069397%);stop-opacity:1;"
+         id="stop5059" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(14.349365%,56.211853%,57.388306%);stop-opacity:1;"
+         id="stop5061" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(14.471436%,56.530762%,57.707214%);stop-opacity:1;"
+         id="stop5063" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(14.595032%,56.84967%,58.026123%);stop-opacity:1;"
+         id="stop5065" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(14.717102%,57.167053%,58.343506%);stop-opacity:1;"
+         id="stop5067" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(14.839172%,57.485962%,58.662415%);stop-opacity:1;"
+         id="stop5069" />
+    </linearGradient>
+    <clipPath
+       id="clip1223">
+      <path
+         d="M 475.9375,185 H 479 v 0.375 h -3.0625 z m 0,0"
+         id="path5072" />
+    </clipPath>
+    <clipPath
+       id="clip1224">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5075" />
+    </clipPath>
+    <clipPath
+       id="clip1225">
+      <path
+         d="M 475.9375,184 H 479 v 1.375 h -3.0625 z m 0,0"
+         id="path5078" />
+    </clipPath>
+    <clipPath
+       id="clip1226">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5081" />
+    </clipPath>
+    <clipPath
+       id="clip1227">
+      <path
+         d="M 475.9375,183 H 480 v 2.375 h -4.0625 z m 0,0"
+         id="path5084" />
+    </clipPath>
+    <clipPath
+       id="clip1228">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5087" />
+    </clipPath>
+    <clipPath
+       id="clip1229">
+      <path
+         d="M 475.9375,183 H 481 v 2.375 h -5.0625 z m 0,0"
+         id="path5090" />
+    </clipPath>
+    <clipPath
+       id="clip1230">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5093" />
+    </clipPath>
+    <clipPath
+       id="clip1231">
+      <path
+         d="M 475.9375,182 H 482 v 3.375 h -6.0625 z m 0,0"
+         id="path5096" />
+    </clipPath>
+    <clipPath
+       id="clip1232">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5099" />
+    </clipPath>
+    <clipPath
+       id="clip1233">
+      <path
+         d="M 475.9375,181 H 482 v 4.375 h -6.0625 z m 0,0"
+         id="path5102" />
+    </clipPath>
+    <clipPath
+       id="clip1234">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5105" />
+    </clipPath>
+    <clipPath
+       id="clip1235">
+      <path
+         d="M 475.9375,180 H 483 v 5.375 h -7.0625 z m 0,0"
+         id="path5108" />
+    </clipPath>
+    <clipPath
+       id="clip1236">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5111" />
+    </clipPath>
+    <clipPath
+       id="clip1237">
+      <path
+         d="M 475.9375,180 H 484 v 5.375 h -8.0625 z m 0,0"
+         id="path5114" />
+    </clipPath>
+    <clipPath
+       id="clip1238">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5117" />
+    </clipPath>
+    <clipPath
+       id="clip1239">
+      <path
+         d="M 475.9375,179 H 485 v 6.375 h -9.0625 z m 0,0"
+         id="path5120" />
+    </clipPath>
+    <clipPath
+       id="clip1240">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5123" />
+    </clipPath>
+    <clipPath
+       id="clip1241">
+      <path
+         d="M 475.9375,178 H 485 v 7.375 h -9.0625 z m 0,0"
+         id="path5126" />
+    </clipPath>
+    <clipPath
+       id="clip1242">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5129" />
+    </clipPath>
+    <clipPath
+       id="clip1243">
+      <path
+         d="M 475.9375,177 H 486 v 8.375 h -10.0625 z m 0,0"
+         id="path5132" />
+    </clipPath>
+    <clipPath
+       id="clip1244">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5135" />
+    </clipPath>
+    <clipPath
+       id="clip1245">
+      <path
+         d="M 475.9375,177 H 487 v 8.375 h -11.0625 z m 0,0"
+         id="path5138" />
+    </clipPath>
+    <clipPath
+       id="clip1246">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5141" />
+    </clipPath>
+    <clipPath
+       id="clip1247">
+      <path
+         d="M 475.9375,176 H 488 v 9.375 h -12.0625 z m 0,0"
+         id="path5144" />
+    </clipPath>
+    <clipPath
+       id="clip1248">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5147" />
+    </clipPath>
+    <clipPath
+       id="clip1249">
+      <path
+         d="M 475.9375,175 H 488 v 10.375 h -12.0625 z m 0,0"
+         id="path5150" />
+    </clipPath>
+    <clipPath
+       id="clip1250">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5153" />
+    </clipPath>
+    <clipPath
+       id="clip1251">
+      <path
+         d="M 475.9375,174 H 489 v 11.375 h -13.0625 z m 0,0"
+         id="path5156" />
+    </clipPath>
+    <clipPath
+       id="clip1252">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5159" />
+    </clipPath>
+    <clipPath
+       id="clip1253">
+      <path
+         d="M 475.9375,174 H 490 v 11.375 h -14.0625 z m 0,0"
+         id="path5162" />
+    </clipPath>
+    <clipPath
+       id="clip1254">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5165" />
+    </clipPath>
+    <clipPath
+       id="clip1255">
+      <path
+         d="M 475.9375,173 H 491 v 12.375 h -15.0625 z m 0,0"
+         id="path5168" />
+    </clipPath>
+    <clipPath
+       id="clip1256">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5171" />
+    </clipPath>
+    <clipPath
+       id="clip1257">
+      <path
+         d="M 475.9375,172 H 491 v 13.375 h -15.0625 z m 0,0"
+         id="path5174" />
+    </clipPath>
+    <clipPath
+       id="clip1258">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5177" />
+    </clipPath>
+    <clipPath
+       id="clip1259">
+      <path
+         d="M 475.9375,171 H 492 v 14.375 h -16.0625 z m 0,0"
+         id="path5180" />
+    </clipPath>
+    <clipPath
+       id="clip1260">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5183" />
+    </clipPath>
+    <clipPath
+       id="clip1261">
+      <path
+         d="M 475.9375,171 H 493 v 14.375 h -17.0625 z m 0,0"
+         id="path5186" />
+    </clipPath>
+    <clipPath
+       id="clip1262">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5189" />
+    </clipPath>
+    <clipPath
+       id="clip1263">
+      <path
+         d="M 475.9375,170 H 494 v 15.375 h -18.0625 z m 0,0"
+         id="path5192" />
+    </clipPath>
+    <clipPath
+       id="clip1264">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5195" />
+    </clipPath>
+    <clipPath
+       id="clip1265">
+      <path
+         d="M 475.9375,169 H 494 v 16.375 h -18.0625 z m 0,0"
+         id="path5198" />
+    </clipPath>
+    <clipPath
+       id="clip1266">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5201" />
+    </clipPath>
+    <clipPath
+       id="clip1267">
+      <path
+         d="M 475.9375,168 H 495 v 17.375 h -19.0625 z m 0,0"
+         id="path5204" />
+    </clipPath>
+    <clipPath
+       id="clip1268">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5207" />
+    </clipPath>
+    <clipPath
+       id="clip1269">
+      <path
+         d="M 475.9375,168 H 496 v 17.375 h -20.0625 z m 0,0"
+         id="path5210" />
+    </clipPath>
+    <clipPath
+       id="clip1270">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5213" />
+    </clipPath>
+    <clipPath
+       id="clip1271">
+      <path
+         d="M 475.9375,167 H 497 v 18.375 h -21.0625 z m 0,0"
+         id="path5216" />
+    </clipPath>
+    <clipPath
+       id="clip1272">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5219" />
+    </clipPath>
+    <clipPath
+       id="clip1273">
+      <path
+         d="M 475.9375,166 H 497 v 19.375 h -21.0625 z m 0,0"
+         id="path5222" />
+    </clipPath>
+    <clipPath
+       id="clip1274">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5225" />
+    </clipPath>
+    <clipPath
+       id="clip1275">
+      <path
+         d="M 475.9375,165 H 498 v 20.375 h -22.0625 z m 0,0"
+         id="path5228" />
+    </clipPath>
+    <clipPath
+       id="clip1276">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5231" />
+    </clipPath>
+    <clipPath
+       id="clip1277">
+      <path
+         d="M 475.9375,165 H 499 v 20.375 h -23.0625 z m 0,0"
+         id="path5234" />
+    </clipPath>
+    <clipPath
+       id="clip1278">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5237" />
+    </clipPath>
+    <clipPath
+       id="clip1279">
+      <path
+         d="M 475.9375,164 H 500 v 21.375 h -24.0625 z m 0,0"
+         id="path5240" />
+    </clipPath>
+    <clipPath
+       id="clip1280">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5243" />
+    </clipPath>
+    <clipPath
+       id="clip1281">
+      <path
+         d="M 475.9375,163 H 500 v 22.375 h -24.0625 z m 0,0"
+         id="path5246" />
+    </clipPath>
+    <clipPath
+       id="clip1282">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5249" />
+    </clipPath>
+    <clipPath
+       id="clip1283">
+      <path
+         d="M 475.9375,162 H 501 v 23.375 h -25.0625 z m 0,0"
+         id="path5252" />
+    </clipPath>
+    <clipPath
+       id="clip1284">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5255" />
+    </clipPath>
+    <clipPath
+       id="clip1285">
+      <path
+         d="M 475.9375,162 H 502 v 23.375 h -26.0625 z m 0,0"
+         id="path5258" />
+    </clipPath>
+    <clipPath
+       id="clip1286">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5261" />
+    </clipPath>
+    <clipPath
+       id="clip1287">
+      <path
+         d="M 475.9375,161 H 503 v 24 h -27.0625 z m 0,0"
+         id="path5264" />
+    </clipPath>
+    <clipPath
+       id="clip1288">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5267" />
+    </clipPath>
+    <clipPath
+       id="clip1289">
+      <path
+         d="M 475.9375,160 H 503 v 24 h -27.0625 z m 0,0"
+         id="path5270" />
+    </clipPath>
+    <clipPath
+       id="clip1290">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5273" />
+    </clipPath>
+    <clipPath
+       id="clip1291">
+      <path
+         d="M 475.9375,159 H 504 v 24 h -28.0625 z m 0,0"
+         id="path5276" />
+    </clipPath>
+    <clipPath
+       id="clip1292">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5279" />
+    </clipPath>
+    <clipPath
+       id="clip1293">
+      <path
+         d="M 475.9375,159 H 505 v 24 h -29.0625 z m 0,0"
+         id="path5282" />
+    </clipPath>
+    <clipPath
+       id="clip1294">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5285" />
+    </clipPath>
+    <clipPath
+       id="clip1295">
+      <path
+         d="M 475.9375,158 H 506 v 24 h -30.0625 z m 0,0"
+         id="path5288" />
+    </clipPath>
+    <clipPath
+       id="clip1296">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5291" />
+    </clipPath>
+    <clipPath
+       id="clip1297">
+      <path
+         d="M 475.9375,157 H 506 v 24 h -30.0625 z m 0,0"
+         id="path5294" />
+    </clipPath>
+    <clipPath
+       id="clip1298">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5297" />
+    </clipPath>
+    <clipPath
+       id="clip1299">
+      <path
+         d="M 475.9375,156 H 507 v 24 h -31.0625 z m 0,0"
+         id="path5300" />
+    </clipPath>
+    <clipPath
+       id="clip1300">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5303" />
+    </clipPath>
+    <clipPath
+       id="clip1301">
+      <path
+         d="M 475.9375,156 H 508 v 24 h -32.0625 z m 0,0"
+         id="path5306" />
+    </clipPath>
+    <clipPath
+       id="clip1302">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5309" />
+    </clipPath>
+    <clipPath
+       id="clip1303">
+      <path
+         d="M 475.9375,155 H 509 v 24 h -33.0625 z m 0,0"
+         id="path5312" />
+    </clipPath>
+    <clipPath
+       id="clip1304">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5315" />
+    </clipPath>
+    <clipPath
+       id="clip1305">
+      <path
+         d="m 476,154 h 33 v 24 h -33 z m 0,0"
+         id="path5318" />
+    </clipPath>
+    <clipPath
+       id="clip1306">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5321" />
+    </clipPath>
+    <clipPath
+       id="clip1307">
+      <path
+         d="m 476,153 h 34 v 24 h -34 z m 0,0"
+         id="path5324" />
+    </clipPath>
+    <clipPath
+       id="clip1308">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5327" />
+    </clipPath>
+    <clipPath
+       id="clip1309">
+      <path
+         d="m 477,153 h 34 v 24 h -34 z m 0,0"
+         id="path5330" />
+    </clipPath>
+    <clipPath
+       id="clip1310">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5333" />
+    </clipPath>
+    <clipPath
+       id="clip1311">
+      <path
+         d="m 478,152 h 34 v 24 h -34 z m 0,0"
+         id="path5336" />
+    </clipPath>
+    <clipPath
+       id="clip1312">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5339" />
+    </clipPath>
+    <clipPath
+       id="clip1313">
+      <path
+         d="m 479,151 h 33 v 24 h -33 z m 0,0"
+         id="path5342" />
+    </clipPath>
+    <clipPath
+       id="clip1314">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5345" />
+    </clipPath>
+    <clipPath
+       id="clip1315">
+      <path
+         d="m 479,150 h 34 v 24 h -34 z m 0,0"
+         id="path5348" />
+    </clipPath>
+    <clipPath
+       id="clip1316">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5351" />
+    </clipPath>
+    <clipPath
+       id="clip1317">
+      <path
+         d="m 480,150 h 34 v 24 h -34 z m 0,0"
+         id="path5354" />
+    </clipPath>
+    <clipPath
+       id="clip1318">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5357" />
+    </clipPath>
+    <clipPath
+       id="clip1319">
+      <path
+         d="m 481,149 h 34 v 24 h -34 z m 0,0"
+         id="path5360" />
+    </clipPath>
+    <clipPath
+       id="clip1320">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5363" />
+    </clipPath>
+    <clipPath
+       id="clip1321">
+      <path
+         d="m 482,148 h 33 v 24 h -33 z m 0,0"
+         id="path5366" />
+    </clipPath>
+    <clipPath
+       id="clip1322">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5369" />
+    </clipPath>
+    <clipPath
+       id="clip1323">
+      <path
+         d="m 482,147 h 34 v 24 h -34 z m 0,0"
+         id="path5372" />
+    </clipPath>
+    <clipPath
+       id="clip1324">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5375" />
+    </clipPath>
+    <clipPath
+       id="clip1325">
+      <path
+         d="m 483,147 h 34 v 24 h -34 z m 0,0"
+         id="path5378" />
+    </clipPath>
+    <clipPath
+       id="clip1326">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5381" />
+    </clipPath>
+    <clipPath
+       id="clip1327">
+      <path
+         d="m 484,146 h 34 v 24 h -34 z m 0,0"
+         id="path5384" />
+    </clipPath>
+    <clipPath
+       id="clip1328">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5387" />
+    </clipPath>
+    <clipPath
+       id="clip1329">
+      <path
+         d="m 485,145 h 33 v 24 h -33 z m 0,0"
+         id="path5390" />
+    </clipPath>
+    <clipPath
+       id="clip1330">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5393" />
+    </clipPath>
+    <clipPath
+       id="clip1331">
+      <path
+         d="m 485,144 h 34 v 24 h -34 z m 0,0"
+         id="path5396" />
+    </clipPath>
+    <clipPath
+       id="clip1332">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5399" />
+    </clipPath>
+    <clipPath
+       id="clip1333">
+      <path
+         d="m 476,133 h 52.4375 v 52 H 476 Z m 0,0"
+         id="path5402" />
+    </clipPath>
+    <clipPath
+       id="clip1334">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5405" />
+    </clipPath>
+    <clipPath
+       id="clip1335">
+      <path
+         d="m 479,133 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 479 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5408" />
+    </clipPath>
+    <clipPath
+       id="clip1336">
+      <path
+         d="m 476,133 h 52.4375 v 52.375 H 476 Z m 0,0"
+         id="path5411" />
+    </clipPath>
+    <clipPath
+       id="clip1337">
+      <path
+         d="m 478.9375,132.875 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5414" />
+    </clipPath>
+    <clipPath
+       id="clip1338">
+      <path
+         d="m 479,133 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 H 479 c -1.65625,0 -3,-1.34375 -3,-3 V 136 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5417" />
+    </clipPath>
+    <clipPath
+       id="clip1339">
+      <path
+         d="m 67.5625,216.625 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path5420" />
+    </clipPath>
+    <clipPath
+       id="clip1340">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5423" />
+    </clipPath>
+    <linearGradient
+       id="linear12"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.00050000002"
+       y1="105.0005"
+       x2="104.9995"
+       y2="0.00050000002"
+       gradientTransform="matrix(0.5,0,0,0.5,67.5625,216.625)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(37.254333%,54.116821%,44.313049%);stop-opacity:1;"
+         id="stop5426" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(37.342834%,54.281616%,44.432068%);stop-opacity:1;"
+         id="stop5428" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(37.519836%,54.612732%,44.670105%);stop-opacity:1;"
+         id="stop5430" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(37.698364%,54.943848%,44.909668%);stop-opacity:1;"
+         id="stop5432" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(37.875366%,55.273438%,45.149231%);stop-opacity:1;"
+         id="stop5434" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(38.053894%,55.604553%,45.387268%);stop-opacity:1;"
+         id="stop5436" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(38.230896%,55.935669%,45.626831%);stop-opacity:1;"
+         id="stop5438" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(38.409424%,56.266785%,45.866394%);stop-opacity:1;"
+         id="stop5440" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(38.586426%,56.5979%,46.104431%);stop-opacity:1;"
+         id="stop5442" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(38.763428%,56.929016%,46.343994%);stop-opacity:1;"
+         id="stop5444" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(38.941956%,57.260132%,46.582031%);stop-opacity:1;"
+         id="stop5446" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(39.118958%,57.589722%,46.821594%);stop-opacity:1;"
+         id="stop5448" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(39.297485%,57.920837%,47.061157%);stop-opacity:1;"
+         id="stop5450" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(39.474487%,58.251953%,47.299194%);stop-opacity:1;"
+         id="stop5452" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(39.653015%,58.583069%,47.538757%);stop-opacity:1;"
+         id="stop5454" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(39.830017%,58.914185%,47.776794%);stop-opacity:1;"
+         id="stop5456" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(40.008545%,59.2453%,48.016357%);stop-opacity:1;"
+         id="stop5458" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(40.185547%,59.576416%,48.25592%);stop-opacity:1;"
+         id="stop5460" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(40.364075%,59.906006%,48.493958%);stop-opacity:1;"
+         id="stop5462" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(40.541077%,60.237122%,48.733521%);stop-opacity:1;"
+         id="stop5464" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(40.718079%,60.568237%,48.971558%);stop-opacity:1;"
+         id="stop5466" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(40.896606%,60.899353%,49.211121%);stop-opacity:1;"
+         id="stop5468" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(41.073608%,61.230469%,49.450684%);stop-opacity:1;"
+         id="stop5470" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(41.252136%,61.561584%,49.688721%);stop-opacity:1;"
+         id="stop5472" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(41.429138%,61.891174%,49.928284%);stop-opacity:1;"
+         id="stop5474" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(41.607666%,62.22229%,50.167847%);stop-opacity:1;"
+         id="stop5476" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(41.784668%,62.553406%,50.405884%);stop-opacity:1;"
+         id="stop5478" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(41.963196%,62.884521%,50.645447%);stop-opacity:1;"
+         id="stop5480" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(42.140198%,63.215637%,50.883484%);stop-opacity:1;"
+         id="stop5482" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(42.318726%,63.546753%,51.123047%);stop-opacity:1;"
+         id="stop5484" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(42.495728%,63.877869%,51.36261%);stop-opacity:1;"
+         id="stop5486" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(42.672729%,64.207458%,51.600647%);stop-opacity:1;"
+         id="stop5488" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(42.851257%,64.538574%,51.84021%);stop-opacity:1;"
+         id="stop5490" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(43.028259%,64.86969%,52.078247%);stop-opacity:1;"
+         id="stop5492" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(43.118286%,65.036011%,52.198792%);stop-opacity:1;"
+         id="stop5494" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(43.206787%,65.200806%,52.31781%);stop-opacity:1;"
+         id="stop5496" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(43.383789%,65.531921%,52.557373%);stop-opacity:1;"
+         id="stop5498" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(43.562317%,65.863037%,52.79541%);stop-opacity:1;"
+         id="stop5500" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(43.739319%,66.192627%,53.034973%);stop-opacity:1;"
+         id="stop5502" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(43.917847%,66.523743%,53.274536%);stop-opacity:1;"
+         id="stop5504" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(44.094849%,66.854858%,53.512573%);stop-opacity:1;"
+         id="stop5506" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(44.273376%,67.185974%,53.752136%);stop-opacity:1;"
+         id="stop5508" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(44.450378%,67.51709%,53.990173%);stop-opacity:1;"
+         id="stop5510" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(44.628906%,67.848206%,54.229736%);stop-opacity:1;"
+         id="stop5512" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(44.805908%,68.179321%,54.469299%);stop-opacity:1;"
+         id="stop5514" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(44.98291%,68.508911%,54.707336%);stop-opacity:1;"
+         id="stop5516" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(45.161438%,68.840027%,54.946899%);stop-opacity:1;"
+         id="stop5518" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(45.33844%,69.171143%,55.184937%);stop-opacity:1;"
+         id="stop5520" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(45.516968%,69.502258%,55.4245%);stop-opacity:1;"
+         id="stop5522" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(45.69397%,69.833374%,55.664062%);stop-opacity:1;"
+         id="stop5524" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(45.872498%,70.16449%,55.9021%);stop-opacity:1;"
+         id="stop5526" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(46.0495%,70.49408%,56.141663%);stop-opacity:1;"
+         id="stop5528" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(46.228027%,70.825195%,56.3797%);stop-opacity:1;"
+         id="stop5530" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(46.405029%,71.156311%,56.619263%);stop-opacity:1;"
+         id="stop5532" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(46.583557%,71.487427%,56.858826%);stop-opacity:1;"
+         id="stop5534" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(46.760559%,71.818542%,57.096863%);stop-opacity:1;"
+         id="stop5536" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(46.937561%,72.149658%,57.336426%);stop-opacity:1;"
+         id="stop5538" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(47.116089%,72.480774%,57.575989%);stop-opacity:1;"
+         id="stop5540" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(47.293091%,72.810364%,57.814026%);stop-opacity:1;"
+         id="stop5542" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(47.471619%,73.141479%,58.053589%);stop-opacity:1;"
+         id="stop5544" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(47.648621%,73.472595%,58.291626%);stop-opacity:1;"
+         id="stop5546" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(47.827148%,73.803711%,58.531189%);stop-opacity:1;"
+         id="stop5548" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(48.00415%,74.134827%,58.770752%);stop-opacity:1;"
+         id="stop5550" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(48.182678%,74.465942%,59.008789%);stop-opacity:1;"
+         id="stop5552" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(48.35968%,74.795532%,59.248352%);stop-opacity:1;"
+         id="stop5554" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(48.538208%,75.126648%,59.486389%);stop-opacity:1;"
+         id="stop5556" />
+    </linearGradient>
+    <clipPath
+       id="clip1341">
+      <path
+         d="M 67.5625,269 H 68 v 0.125 h -0.4375 z m 0,0"
+         id="path5559" />
+    </clipPath>
+    <clipPath
+       id="clip1342">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5562" />
+    </clipPath>
+    <clipPath
+       id="clip1343">
+      <path
+         d="M 67.5625,269 H 69 v 0.125 h -1.4375 z m 0,0"
+         id="path5565" />
+    </clipPath>
+    <clipPath
+       id="clip1344">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5568" />
+    </clipPath>
+    <clipPath
+       id="clip1345">
+      <path
+         d="M 67.5625,268 H 69 v 1.125 h -1.4375 z m 0,0"
+         id="path5571" />
+    </clipPath>
+    <clipPath
+       id="clip1346">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5574" />
+    </clipPath>
+    <clipPath
+       id="clip1347">
+      <path
+         d="M 67.5625,267 H 70 v 2.125 h -2.4375 z m 0,0"
+         id="path5577" />
+    </clipPath>
+    <clipPath
+       id="clip1348">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5580" />
+    </clipPath>
+    <clipPath
+       id="clip1349">
+      <path
+         d="M 67.5625,266 H 71 v 3.125 h -3.4375 z m 0,0"
+         id="path5583" />
+    </clipPath>
+    <clipPath
+       id="clip1350">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5586" />
+    </clipPath>
+    <clipPath
+       id="clip1351">
+      <path
+         d="M 67.5625,266 H 72 v 3.125 h -4.4375 z m 0,0"
+         id="path5589" />
+    </clipPath>
+    <clipPath
+       id="clip1352">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5592" />
+    </clipPath>
+    <clipPath
+       id="clip1353">
+      <path
+         d="M 67.5625,265 H 72 v 4.125 h -4.4375 z m 0,0"
+         id="path5595" />
+    </clipPath>
+    <clipPath
+       id="clip1354">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5598" />
+    </clipPath>
+    <clipPath
+       id="clip1355">
+      <path
+         d="M 67.5625,264 H 73 v 5.125 h -5.4375 z m 0,0"
+         id="path5601" />
+    </clipPath>
+    <clipPath
+       id="clip1356">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5604" />
+    </clipPath>
+    <clipPath
+       id="clip1357">
+      <path
+         d="M 67.5625,263 H 74 v 6.125 h -6.4375 z m 0,0"
+         id="path5607" />
+    </clipPath>
+    <clipPath
+       id="clip1358">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5610" />
+    </clipPath>
+    <clipPath
+       id="clip1359">
+      <path
+         d="M 67.5625,263 H 75 v 6.125 h -7.4375 z m 0,0"
+         id="path5613" />
+    </clipPath>
+    <clipPath
+       id="clip1360">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5616" />
+    </clipPath>
+    <clipPath
+       id="clip1361">
+      <path
+         d="M 67.5625,262 H 75 v 7.125 h -7.4375 z m 0,0"
+         id="path5619" />
+    </clipPath>
+    <clipPath
+       id="clip1362">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5622" />
+    </clipPath>
+    <clipPath
+       id="clip1363">
+      <path
+         d="M 67.5625,261 H 76 v 8.125 h -8.4375 z m 0,0"
+         id="path5625" />
+    </clipPath>
+    <clipPath
+       id="clip1364">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5628" />
+    </clipPath>
+    <clipPath
+       id="clip1365">
+      <path
+         d="M 67.5625,260 H 77 v 9.125 h -9.4375 z m 0,0"
+         id="path5631" />
+    </clipPath>
+    <clipPath
+       id="clip1366">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5634" />
+    </clipPath>
+    <clipPath
+       id="clip1367">
+      <path
+         d="M 67.5625,260 H 78 v 9.125 H 67.5625 Z m 0,0"
+         id="path5637" />
+    </clipPath>
+    <clipPath
+       id="clip1368">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5640" />
+    </clipPath>
+    <clipPath
+       id="clip1369">
+      <path
+         d="M 67.5625,259 H 78 v 10.125 H 67.5625 Z m 0,0"
+         id="path5643" />
+    </clipPath>
+    <clipPath
+       id="clip1370">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5646" />
+    </clipPath>
+    <clipPath
+       id="clip1371">
+      <path
+         d="M 67.5625,258 H 79 v 11.125 H 67.5625 Z m 0,0"
+         id="path5649" />
+    </clipPath>
+    <clipPath
+       id="clip1372">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5652" />
+    </clipPath>
+    <clipPath
+       id="clip1373">
+      <path
+         d="M 67.5625,257 H 80 v 12.125 H 67.5625 Z m 0,0"
+         id="path5655" />
+    </clipPath>
+    <clipPath
+       id="clip1374">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5658" />
+    </clipPath>
+    <clipPath
+       id="clip1375">
+      <path
+         d="M 67.5625,257 H 81 v 12.125 H 67.5625 Z m 0,0"
+         id="path5661" />
+    </clipPath>
+    <clipPath
+       id="clip1376">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5664" />
+    </clipPath>
+    <clipPath
+       id="clip1377">
+      <path
+         d="M 67.5625,256 H 81 v 13.125 H 67.5625 Z m 0,0"
+         id="path5667" />
+    </clipPath>
+    <clipPath
+       id="clip1378">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5670" />
+    </clipPath>
+    <clipPath
+       id="clip1379">
+      <path
+         d="M 67.5625,255 H 82 v 14.125 H 67.5625 Z m 0,0"
+         id="path5673" />
+    </clipPath>
+    <clipPath
+       id="clip1380">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5676" />
+    </clipPath>
+    <clipPath
+       id="clip1381">
+      <path
+         d="M 67.5625,254 H 83 v 15.125 H 67.5625 Z m 0,0"
+         id="path5679" />
+    </clipPath>
+    <clipPath
+       id="clip1382">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5682" />
+    </clipPath>
+    <clipPath
+       id="clip1383">
+      <path
+         d="M 67.5625,254 H 84 v 15.125 H 67.5625 Z m 0,0"
+         id="path5685" />
+    </clipPath>
+    <clipPath
+       id="clip1384">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5688" />
+    </clipPath>
+    <clipPath
+       id="clip1385">
+      <path
+         d="M 67.5625,253 H 84 v 16.125 H 67.5625 Z m 0,0"
+         id="path5691" />
+    </clipPath>
+    <clipPath
+       id="clip1386">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5694" />
+    </clipPath>
+    <clipPath
+       id="clip1387">
+      <path
+         d="M 67.5625,252 H 85 v 17.125 H 67.5625 Z m 0,0"
+         id="path5697" />
+    </clipPath>
+    <clipPath
+       id="clip1388">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5700" />
+    </clipPath>
+    <clipPath
+       id="clip1389">
+      <path
+         d="M 67.5625,251 H 86 v 18.125 H 67.5625 Z m 0,0"
+         id="path5703" />
+    </clipPath>
+    <clipPath
+       id="clip1390">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5706" />
+    </clipPath>
+    <clipPath
+       id="clip1391">
+      <path
+         d="M 67.5625,251 H 87 v 18.125 H 67.5625 Z m 0,0"
+         id="path5709" />
+    </clipPath>
+    <clipPath
+       id="clip1392">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5712" />
+    </clipPath>
+    <clipPath
+       id="clip1393">
+      <path
+         d="M 67.5625,250 H 87 v 19.125 H 67.5625 Z m 0,0"
+         id="path5715" />
+    </clipPath>
+    <clipPath
+       id="clip1394">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5718" />
+    </clipPath>
+    <clipPath
+       id="clip1395">
+      <path
+         d="M 67.5625,249 H 88 v 20.125 H 67.5625 Z m 0,0"
+         id="path5721" />
+    </clipPath>
+    <clipPath
+       id="clip1396">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5724" />
+    </clipPath>
+    <clipPath
+       id="clip1397">
+      <path
+         d="M 67.5625,248 H 89 v 21.125 H 67.5625 Z m 0,0"
+         id="path5727" />
+    </clipPath>
+    <clipPath
+       id="clip1398">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5730" />
+    </clipPath>
+    <clipPath
+       id="clip1399">
+      <path
+         d="M 67.5625,248 H 90 v 21.125 H 67.5625 Z m 0,0"
+         id="path5733" />
+    </clipPath>
+    <clipPath
+       id="clip1400">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5736" />
+    </clipPath>
+    <clipPath
+       id="clip1401">
+      <path
+         d="M 67.5625,247 H 90 v 22.125 H 67.5625 Z m 0,0"
+         id="path5739" />
+    </clipPath>
+    <clipPath
+       id="clip1402">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5742" />
+    </clipPath>
+    <clipPath
+       id="clip1403">
+      <path
+         d="M 67.5625,246 H 91 v 23.125 H 67.5625 Z m 0,0"
+         id="path5745" />
+    </clipPath>
+    <clipPath
+       id="clip1404">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5748" />
+    </clipPath>
+    <clipPath
+       id="clip1405">
+      <path
+         d="M 67.5625,245 H 92 v 24.125 H 67.5625 Z m 0,0"
+         id="path5751" />
+    </clipPath>
+    <clipPath
+       id="clip1406">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5754" />
+    </clipPath>
+    <clipPath
+       id="clip1407">
+      <path
+         d="M 67.5625,245 H 93 v 24.125 H 67.5625 Z m 0,0"
+         id="path5757" />
+    </clipPath>
+    <clipPath
+       id="clip1408">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5760" />
+    </clipPath>
+    <clipPath
+       id="clip1409">
+      <path
+         d="M 67.5625,244 H 93 v 25.125 H 67.5625 Z m 0,0"
+         id="path5763" />
+    </clipPath>
+    <clipPath
+       id="clip1410">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5766" />
+    </clipPath>
+    <clipPath
+       id="clip1411">
+      <path
+         d="M 67.5625,243 H 94 v 26.125 H 67.5625 Z m 0,0"
+         id="path5769" />
+    </clipPath>
+    <clipPath
+       id="clip1412">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5772" />
+    </clipPath>
+    <clipPath
+       id="clip1413">
+      <path
+         d="M 67.5625,242 H 95 v 27.125 H 67.5625 Z m 0,0"
+         id="path5775" />
+    </clipPath>
+    <clipPath
+       id="clip1414">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5778" />
+    </clipPath>
+    <clipPath
+       id="clip1415">
+      <path
+         d="M 67.5625,242 H 96 v 27 H 67.5625 Z m 0,0"
+         id="path5781" />
+    </clipPath>
+    <clipPath
+       id="clip1416">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5784" />
+    </clipPath>
+    <clipPath
+       id="clip1417">
+      <path
+         d="M 67.5625,241 H 96 v 27 H 67.5625 Z m 0,0"
+         id="path5787" />
+    </clipPath>
+    <clipPath
+       id="clip1418">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5790" />
+    </clipPath>
+    <clipPath
+       id="clip1419">
+      <path
+         d="M 67.5625,240 H 97 v 27 H 67.5625 Z m 0,0"
+         id="path5793" />
+    </clipPath>
+    <clipPath
+       id="clip1420">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5796" />
+    </clipPath>
+    <clipPath
+       id="clip1421">
+      <path
+         d="M 67.5625,239 H 98 v 28 H 67.5625 Z m 0,0"
+         id="path5799" />
+    </clipPath>
+    <clipPath
+       id="clip1422">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5802" />
+    </clipPath>
+    <clipPath
+       id="clip1423">
+      <path
+         d="M 67.5625,239 H 99 v 27 H 67.5625 Z m 0,0"
+         id="path5805" />
+    </clipPath>
+    <clipPath
+       id="clip1424">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5808" />
+    </clipPath>
+    <clipPath
+       id="clip1425">
+      <path
+         d="M 67.5625,238 H 99 v 27 H 67.5625 Z m 0,0"
+         id="path5811" />
+    </clipPath>
+    <clipPath
+       id="clip1426">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5814" />
+    </clipPath>
+    <clipPath
+       id="clip1427">
+      <path
+         d="M 67.5625,237 H 100 v 27 H 67.5625 Z m 0,0"
+         id="path5817" />
+    </clipPath>
+    <clipPath
+       id="clip1428">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5820" />
+    </clipPath>
+    <clipPath
+       id="clip1429">
+      <path
+         d="M 67.5625,236 H 101 v 28 H 67.5625 Z m 0,0"
+         id="path5823" />
+    </clipPath>
+    <clipPath
+       id="clip1430">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5826" />
+    </clipPath>
+    <clipPath
+       id="clip1431">
+      <path
+         d="m 68,236 h 34 v 27 H 68 Z m 0,0"
+         id="path5829" />
+    </clipPath>
+    <clipPath
+       id="clip1432">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5832" />
+    </clipPath>
+    <clipPath
+       id="clip1433">
+      <path
+         d="m 69,235 h 33 v 27 H 69 Z m 0,0"
+         id="path5835" />
+    </clipPath>
+    <clipPath
+       id="clip1434">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5838" />
+    </clipPath>
+    <clipPath
+       id="clip1435">
+      <path
+         d="m 69,234 h 34 v 27 H 69 Z m 0,0"
+         id="path5841" />
+    </clipPath>
+    <clipPath
+       id="clip1436">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5844" />
+    </clipPath>
+    <clipPath
+       id="clip1437">
+      <path
+         d="m 70,233 h 34 v 28 H 70 Z m 0,0"
+         id="path5847" />
+    </clipPath>
+    <clipPath
+       id="clip1438">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5850" />
+    </clipPath>
+    <clipPath
+       id="clip1439">
+      <path
+         d="m 71,233 h 34 v 27 H 71 Z m 0,0"
+         id="path5853" />
+    </clipPath>
+    <clipPath
+       id="clip1440">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5856" />
+    </clipPath>
+    <clipPath
+       id="clip1441">
+      <path
+         d="m 72,232 h 33 v 27 H 72 Z m 0,0"
+         id="path5859" />
+    </clipPath>
+    <clipPath
+       id="clip1442">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5862" />
+    </clipPath>
+    <clipPath
+       id="clip1443">
+      <path
+         d="m 72,231 h 34 v 27 H 72 Z m 0,0"
+         id="path5865" />
+    </clipPath>
+    <clipPath
+       id="clip1444">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5868" />
+    </clipPath>
+    <clipPath
+       id="clip1445">
+      <path
+         d="m 73,230 h 34 v 28 H 73 Z m 0,0"
+         id="path5871" />
+    </clipPath>
+    <clipPath
+       id="clip1446">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5874" />
+    </clipPath>
+    <clipPath
+       id="clip1447">
+      <path
+         d="m 74,230 h 34 v 27 H 74 Z m 0,0"
+         id="path5877" />
+    </clipPath>
+    <clipPath
+       id="clip1448">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5880" />
+    </clipPath>
+    <clipPath
+       id="clip1449">
+      <path
+         d="m 75,229 h 33 v 27 H 75 Z m 0,0"
+         id="path5883" />
+    </clipPath>
+    <clipPath
+       id="clip1450">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5886" />
+    </clipPath>
+    <clipPath
+       id="clip1451">
+      <path
+         d="m 75,228 h 34 v 27 H 75 Z m 0,0"
+         id="path5889" />
+    </clipPath>
+    <clipPath
+       id="clip1452">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5892" />
+    </clipPath>
+    <clipPath
+       id="clip1453">
+      <path
+         d="m 76,227 h 34 v 28 H 76 Z m 0,0"
+         id="path5895" />
+    </clipPath>
+    <clipPath
+       id="clip1454">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5898" />
+    </clipPath>
+    <clipPath
+       id="clip1455">
+      <path
+         d="m 77,227 h 34 v 27 H 77 Z m 0,0"
+         id="path5901" />
+    </clipPath>
+    <clipPath
+       id="clip1456">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5904" />
+    </clipPath>
+    <clipPath
+       id="clip1457">
+      <path
+         d="m 68,216.625 h 52 V 269 H 68 Z m 0,0"
+         id="path5907" />
+    </clipPath>
+    <clipPath
+       id="clip1458">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5910" />
+    </clipPath>
+    <clipPath
+       id="clip1459">
+      <path
+         d="M 70.5,216.5 H 117 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 70.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5913" />
+    </clipPath>
+    <clipPath
+       id="clip1460">
+      <path
+         d="m 68,217 h 52 v 52 H 68 Z m 0,0"
+         id="path5916" />
+    </clipPath>
+    <clipPath
+       id="clip1461">
+      <path
+         d="m 70.5625,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5919" />
+    </clipPath>
+    <clipPath
+       id="clip1462">
+      <path
+         d="M 70.5,216.5 H 117 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 70.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5922" />
+    </clipPath>
+    <clipPath
+       id="clip1463">
+      <path
+         d="m 149.23828,216.625 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path5925" />
+    </clipPath>
+    <clipPath
+       id="clip1464">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path5928" />
+    </clipPath>
+    <linearGradient
+       id="linear13"
+       gradientUnits="userSpaceOnUse"
+       x1="0.000497"
+       y1="104.9995"
+       x2="105.0005"
+       y2="-0.000497"
+       gradientTransform="matrix(0.5,0,0,0.5,149.2375,216.625)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(48.626709%,21.960449%,21.960449%);stop-opacity:1;"
+         id="stop5931" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(48.7854%,22.085571%,22.085571%);stop-opacity:1;"
+         id="stop5933" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(49.104309%,22.335815%,22.335815%);stop-opacity:1;"
+         id="stop5935" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(49.423218%,22.587585%,22.587585%);stop-opacity:1;"
+         id="stop5937" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(49.742126%,22.839355%,22.839355%);stop-opacity:1;"
+         id="stop5939" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(50.059509%,23.0896%,23.0896%);stop-opacity:1;"
+         id="stop5941" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(50.378418%,23.34137%,23.34137%);stop-opacity:1;"
+         id="stop5943" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(50.697327%,23.59314%,23.59314%);stop-opacity:1;"
+         id="stop5945" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(51.016235%,23.843384%,23.843384%);stop-opacity:1;"
+         id="stop5947" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(51.335144%,24.095154%,24.095154%);stop-opacity:1;"
+         id="stop5949" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(51.652527%,24.346924%,24.346924%);stop-opacity:1;"
+         id="stop5951" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(51.971436%,24.597168%,24.597168%);stop-opacity:1;"
+         id="stop5953" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(52.290344%,24.848938%,24.848938%);stop-opacity:1;"
+         id="stop5955" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(52.609253%,25.099182%,25.099182%);stop-opacity:1;"
+         id="stop5957" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(52.928162%,25.350952%,25.350952%);stop-opacity:1;"
+         id="stop5959" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(53.245544%,25.602722%,25.602722%);stop-opacity:1;"
+         id="stop5961" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(53.564453%,25.852966%,25.852966%);stop-opacity:1;"
+         id="stop5963" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(53.883362%,26.104736%,26.104736%);stop-opacity:1;"
+         id="stop5965" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(54.202271%,26.356506%,26.356506%);stop-opacity:1;"
+         id="stop5967" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(54.521179%,26.60675%,26.60675%);stop-opacity:1;"
+         id="stop5969" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(54.840088%,26.858521%,26.858521%);stop-opacity:1;"
+         id="stop5971" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(55.157471%,27.110291%,27.110291%);stop-opacity:1;"
+         id="stop5973" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(55.476379%,27.360535%,27.360535%);stop-opacity:1;"
+         id="stop5975" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(55.795288%,27.612305%,27.612305%);stop-opacity:1;"
+         id="stop5977" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(56.114197%,27.864075%,27.864075%);stop-opacity:1;"
+         id="stop5979" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(56.433105%,28.114319%,28.114319%);stop-opacity:1;"
+         id="stop5981" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(56.750488%,28.366089%,28.366089%);stop-opacity:1;"
+         id="stop5983" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(57.069397%,28.616333%,28.616333%);stop-opacity:1;"
+         id="stop5985" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(57.388306%,28.868103%,28.868103%);stop-opacity:1;"
+         id="stop5987" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(57.707214%,29.119873%,29.119873%);stop-opacity:1;"
+         id="stop5989" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(58.026123%,29.370117%,29.370117%);stop-opacity:1;"
+         id="stop5991" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(58.345032%,29.621887%,29.621887%);stop-opacity:1;"
+         id="stop5993" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(58.662415%,29.873657%,29.873657%);stop-opacity:1;"
+         id="stop5995" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(58.981323%,30.123901%,30.123901%);stop-opacity:1;"
+         id="stop5997" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(59.300232%,30.375671%,30.375671%);stop-opacity:1;"
+         id="stop5999" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(59.619141%,30.627441%,30.627441%);stop-opacity:1;"
+         id="stop6001" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(59.938049%,30.877686%,30.877686%);stop-opacity:1;"
+         id="stop6003" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(60.255432%,31.129456%,31.129456%);stop-opacity:1;"
+         id="stop6005" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(60.574341%,31.381226%,31.381226%);stop-opacity:1;"
+         id="stop6007" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(60.89325%,31.63147%,31.63147%);stop-opacity:1;"
+         id="stop6009" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(61.212158%,31.88324%,31.88324%);stop-opacity:1;"
+         id="stop6011" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(61.531067%,32.133484%,32.133484%);stop-opacity:1;"
+         id="stop6013" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(61.849976%,32.385254%,32.385254%);stop-opacity:1;"
+         id="stop6015" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(62.167358%,32.637024%,32.637024%);stop-opacity:1;"
+         id="stop6017" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(62.486267%,32.887268%,32.887268%);stop-opacity:1;"
+         id="stop6019" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(62.805176%,33.139038%,33.139038%);stop-opacity:1;"
+         id="stop6021" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(63.124084%,33.390808%,33.390808%);stop-opacity:1;"
+         id="stop6023" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(63.442993%,33.641052%,33.641052%);stop-opacity:1;"
+         id="stop6025" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(63.760376%,33.892822%,33.892822%);stop-opacity:1;"
+         id="stop6027" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(64.079285%,34.144592%,34.144592%);stop-opacity:1;"
+         id="stop6029" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(64.398193%,34.394836%,34.394836%);stop-opacity:1;"
+         id="stop6031" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(64.717102%,34.646606%,34.646606%);stop-opacity:1;"
+         id="stop6033" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(65.036011%,34.898376%,34.898376%);stop-opacity:1;"
+         id="stop6035" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(65.353394%,35.148621%,35.148621%);stop-opacity:1;"
+         id="stop6037" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(65.672302%,35.400391%,35.400391%);stop-opacity:1;"
+         id="stop6039" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(65.991211%,35.650635%,35.650635%);stop-opacity:1;"
+         id="stop6041" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(66.31012%,35.902405%,35.902405%);stop-opacity:1;"
+         id="stop6043" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(66.629028%,36.154175%,36.154175%);stop-opacity:1;"
+         id="stop6045" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(66.947937%,36.404419%,36.404419%);stop-opacity:1;"
+         id="stop6047" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(67.26532%,36.656189%,36.656189%);stop-opacity:1;"
+         id="stop6049" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(67.584229%,36.907959%,36.907959%);stop-opacity:1;"
+         id="stop6051" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(67.903137%,37.158203%,37.158203%);stop-opacity:1;"
+         id="stop6053" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(68.222046%,37.409973%,37.409973%);stop-opacity:1;"
+         id="stop6055" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(68.540955%,37.661743%,37.661743%);stop-opacity:1;"
+         id="stop6057" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(68.858337%,37.911987%,37.911987%);stop-opacity:1;"
+         id="stop6059" />
+    </linearGradient>
+    <clipPath
+       id="clip1465">
+      <path
+         d="M 149.23828,269 H 150 v 0.125 h -0.76172 z m 0,0"
+         id="path6062" />
+    </clipPath>
+    <clipPath
+       id="clip1466">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6065" />
+    </clipPath>
+    <clipPath
+       id="clip1467">
+      <path
+         d="M 149.23828,268 H 151 v 1.125 h -1.76172 z m 0,0"
+         id="path6068" />
+    </clipPath>
+    <clipPath
+       id="clip1468">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6071" />
+    </clipPath>
+    <clipPath
+       id="clip1469">
+      <path
+         d="M 149.23828,268 H 152 v 1.125 h -2.76172 z m 0,0"
+         id="path6074" />
+    </clipPath>
+    <clipPath
+       id="clip1470">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6077" />
+    </clipPath>
+    <clipPath
+       id="clip1471">
+      <path
+         d="M 149.23828,267 H 152 v 2.125 h -2.76172 z m 0,0"
+         id="path6080" />
+    </clipPath>
+    <clipPath
+       id="clip1472">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6083" />
+    </clipPath>
+    <clipPath
+       id="clip1473">
+      <path
+         d="M 149.23828,266 H 153 v 3.125 h -3.76172 z m 0,0"
+         id="path6086" />
+    </clipPath>
+    <clipPath
+       id="clip1474">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6089" />
+    </clipPath>
+    <clipPath
+       id="clip1475">
+      <path
+         d="M 149.23828,265 H 154 v 4.125 h -4.76172 z m 0,0"
+         id="path6092" />
+    </clipPath>
+    <clipPath
+       id="clip1476">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6095" />
+    </clipPath>
+    <clipPath
+       id="clip1477">
+      <path
+         d="M 149.23828,265 H 155 v 4.125 h -5.76172 z m 0,0"
+         id="path6098" />
+    </clipPath>
+    <clipPath
+       id="clip1478">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6101" />
+    </clipPath>
+    <clipPath
+       id="clip1479">
+      <path
+         d="M 149.23828,264 H 155 v 5.125 h -5.76172 z m 0,0"
+         id="path6104" />
+    </clipPath>
+    <clipPath
+       id="clip1480">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6107" />
+    </clipPath>
+    <clipPath
+       id="clip1481">
+      <path
+         d="M 149.23828,263 H 156 v 6.125 h -6.76172 z m 0,0"
+         id="path6110" />
+    </clipPath>
+    <clipPath
+       id="clip1482">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6113" />
+    </clipPath>
+    <clipPath
+       id="clip1483">
+      <path
+         d="M 149.23828,262 H 157 v 7.125 h -7.76172 z m 0,0"
+         id="path6116" />
+    </clipPath>
+    <clipPath
+       id="clip1484">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6119" />
+    </clipPath>
+    <clipPath
+       id="clip1485">
+      <path
+         d="M 149.23828,262 H 158 v 7.125 h -8.76172 z m 0,0"
+         id="path6122" />
+    </clipPath>
+    <clipPath
+       id="clip1486">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6125" />
+    </clipPath>
+    <clipPath
+       id="clip1487">
+      <path
+         d="M 149.23828,261 H 158 v 8.125 h -8.76172 z m 0,0"
+         id="path6128" />
+    </clipPath>
+    <clipPath
+       id="clip1488">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6131" />
+    </clipPath>
+    <clipPath
+       id="clip1489">
+      <path
+         d="M 149.23828,260 H 159 v 9.125 h -9.76172 z m 0,0"
+         id="path6134" />
+    </clipPath>
+    <clipPath
+       id="clip1490">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6137" />
+    </clipPath>
+    <clipPath
+       id="clip1491">
+      <path
+         d="M 149.23828,259 H 160 v 10.125 h -10.76172 z m 0,0"
+         id="path6140" />
+    </clipPath>
+    <clipPath
+       id="clip1492">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6143" />
+    </clipPath>
+    <clipPath
+       id="clip1493">
+      <path
+         d="M 149.23828,259 H 161 v 10.125 h -11.76172 z m 0,0"
+         id="path6146" />
+    </clipPath>
+    <clipPath
+       id="clip1494">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6149" />
+    </clipPath>
+    <clipPath
+       id="clip1495">
+      <path
+         d="M 149.23828,258 H 161 v 11.125 h -11.76172 z m 0,0"
+         id="path6152" />
+    </clipPath>
+    <clipPath
+       id="clip1496">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6155" />
+    </clipPath>
+    <clipPath
+       id="clip1497">
+      <path
+         d="M 149.23828,257 H 162 v 12.125 h -12.76172 z m 0,0"
+         id="path6158" />
+    </clipPath>
+    <clipPath
+       id="clip1498">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6161" />
+    </clipPath>
+    <clipPath
+       id="clip1499">
+      <path
+         d="M 149.23828,256 H 163 v 13.125 h -13.76172 z m 0,0"
+         id="path6164" />
+    </clipPath>
+    <clipPath
+       id="clip1500">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6167" />
+    </clipPath>
+    <clipPath
+       id="clip1501">
+      <path
+         d="M 149.23828,256 H 164 v 13.125 h -14.76172 z m 0,0"
+         id="path6170" />
+    </clipPath>
+    <clipPath
+       id="clip1502">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6173" />
+    </clipPath>
+    <clipPath
+       id="clip1503">
+      <path
+         d="M 149.23828,255 H 164 v 14.125 h -14.76172 z m 0,0"
+         id="path6176" />
+    </clipPath>
+    <clipPath
+       id="clip1504">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6179" />
+    </clipPath>
+    <clipPath
+       id="clip1505">
+      <path
+         d="M 149.23828,254 H 165 v 15.125 h -15.76172 z m 0,0"
+         id="path6182" />
+    </clipPath>
+    <clipPath
+       id="clip1506">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6185" />
+    </clipPath>
+    <clipPath
+       id="clip1507">
+      <path
+         d="M 149.23828,253 H 166 v 16.125 h -16.76172 z m 0,0"
+         id="path6188" />
+    </clipPath>
+    <clipPath
+       id="clip1508">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6191" />
+    </clipPath>
+    <clipPath
+       id="clip1509">
+      <path
+         d="M 149.23828,253 H 167 v 16.125 h -17.76172 z m 0,0"
+         id="path6194" />
+    </clipPath>
+    <clipPath
+       id="clip1510">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6197" />
+    </clipPath>
+    <clipPath
+       id="clip1511">
+      <path
+         d="M 149.23828,252 H 167 v 17.125 h -17.76172 z m 0,0"
+         id="path6200" />
+    </clipPath>
+    <clipPath
+       id="clip1512">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6203" />
+    </clipPath>
+    <clipPath
+       id="clip1513">
+      <path
+         d="M 149.23828,251 H 168 v 18.125 h -18.76172 z m 0,0"
+         id="path6206" />
+    </clipPath>
+    <clipPath
+       id="clip1514">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6209" />
+    </clipPath>
+    <clipPath
+       id="clip1515">
+      <path
+         d="M 149.23828,250 H 169 v 19.125 h -19.76172 z m 0,0"
+         id="path6212" />
+    </clipPath>
+    <clipPath
+       id="clip1516">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6215" />
+    </clipPath>
+    <clipPath
+       id="clip1517">
+      <path
+         d="M 149.23828,250 H 170 v 19.125 h -20.76172 z m 0,0"
+         id="path6218" />
+    </clipPath>
+    <clipPath
+       id="clip1518">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6221" />
+    </clipPath>
+    <clipPath
+       id="clip1519">
+      <path
+         d="M 149.23828,249 H 170 v 20.125 h -20.76172 z m 0,0"
+         id="path6224" />
+    </clipPath>
+    <clipPath
+       id="clip1520">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6227" />
+    </clipPath>
+    <clipPath
+       id="clip1521">
+      <path
+         d="M 149.23828,248 H 171 v 21.125 h -21.76172 z m 0,0"
+         id="path6230" />
+    </clipPath>
+    <clipPath
+       id="clip1522">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6233" />
+    </clipPath>
+    <clipPath
+       id="clip1523">
+      <path
+         d="M 149.23828,247 H 172 v 22.125 h -22.76172 z m 0,0"
+         id="path6236" />
+    </clipPath>
+    <clipPath
+       id="clip1524">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6239" />
+    </clipPath>
+    <clipPath
+       id="clip1525">
+      <path
+         d="M 149.23828,247 H 173 v 22.125 h -23.76172 z m 0,0"
+         id="path6242" />
+    </clipPath>
+    <clipPath
+       id="clip1526">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6245" />
+    </clipPath>
+    <clipPath
+       id="clip1527">
+      <path
+         d="M 149.23828,246 H 173 v 23.125 h -23.76172 z m 0,0"
+         id="path6248" />
+    </clipPath>
+    <clipPath
+       id="clip1528">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6251" />
+    </clipPath>
+    <clipPath
+       id="clip1529">
+      <path
+         d="M 149.23828,245 H 174 v 24.125 h -24.76172 z m 0,0"
+         id="path6254" />
+    </clipPath>
+    <clipPath
+       id="clip1530">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6257" />
+    </clipPath>
+    <clipPath
+       id="clip1531">
+      <path
+         d="M 149.23828,244 H 175 v 25.125 h -25.76172 z m 0,0"
+         id="path6260" />
+    </clipPath>
+    <clipPath
+       id="clip1532">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6263" />
+    </clipPath>
+    <clipPath
+       id="clip1533">
+      <path
+         d="M 149.23828,244 H 176 v 25.125 h -26.76172 z m 0,0"
+         id="path6266" />
+    </clipPath>
+    <clipPath
+       id="clip1534">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6269" />
+    </clipPath>
+    <clipPath
+       id="clip1535">
+      <path
+         d="M 149.23828,243 H 176 v 26.125 h -26.76172 z m 0,0"
+         id="path6272" />
+    </clipPath>
+    <clipPath
+       id="clip1536">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6275" />
+    </clipPath>
+    <clipPath
+       id="clip1537">
+      <path
+         d="M 149.23828,242 H 177 v 27.125 h -27.76172 z m 0,0"
+         id="path6278" />
+    </clipPath>
+    <clipPath
+       id="clip1538">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6281" />
+    </clipPath>
+    <clipPath
+       id="clip1539">
+      <path
+         d="M 149.23828,241 H 178 v 28.125 h -28.76172 z m 0,0"
+         id="path6284" />
+    </clipPath>
+    <clipPath
+       id="clip1540">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6287" />
+    </clipPath>
+    <clipPath
+       id="clip1541">
+      <path
+         d="M 149.23828,241 H 179 v 28.125 h -29.76172 z m 0,0"
+         id="path6290" />
+    </clipPath>
+    <clipPath
+       id="clip1542">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6293" />
+    </clipPath>
+    <clipPath
+       id="clip1543">
+      <path
+         d="M 149.23828,240 H 179 v 29.125 h -29.76172 z m 0,0"
+         id="path6296" />
+    </clipPath>
+    <clipPath
+       id="clip1544">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6299" />
+    </clipPath>
+    <clipPath
+       id="clip1545">
+      <path
+         d="M 149.23828,239 H 180 v 30.125 h -30.76172 z m 0,0"
+         id="path6302" />
+    </clipPath>
+    <clipPath
+       id="clip1546">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6305" />
+    </clipPath>
+    <clipPath
+       id="clip1547">
+      <path
+         d="M 149.23828,238 H 181 v 31.125 h -31.76172 z m 0,0"
+         id="path6308" />
+    </clipPath>
+    <clipPath
+       id="clip1548">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6311" />
+    </clipPath>
+    <clipPath
+       id="clip1549">
+      <path
+         d="M 149.23828,238 H 182 v 31 h -32.76172 z m 0,0"
+         id="path6314" />
+    </clipPath>
+    <clipPath
+       id="clip1550">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6317" />
+    </clipPath>
+    <clipPath
+       id="clip1551">
+      <path
+         d="M 149.23828,237 H 182 v 32 h -32.76172 z m 0,0"
+         id="path6320" />
+    </clipPath>
+    <clipPath
+       id="clip1552">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6323" />
+    </clipPath>
+    <clipPath
+       id="clip1553">
+      <path
+         d="M 149.23828,236 H 183 v 32 h -33.76172 z m 0,0"
+         id="path6326" />
+    </clipPath>
+    <clipPath
+       id="clip1554">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6329" />
+    </clipPath>
+    <clipPath
+       id="clip1555">
+      <path
+         d="M 149.23828,235 H 184 v 32 h -34.76172 z m 0,0"
+         id="path6332" />
+    </clipPath>
+    <clipPath
+       id="clip1556">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6335" />
+    </clipPath>
+    <clipPath
+       id="clip1557">
+      <path
+         d="M 149.23828,235 H 185 v 31 h -35.76172 z m 0,0"
+         id="path6338" />
+    </clipPath>
+    <clipPath
+       id="clip1558">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6341" />
+    </clipPath>
+    <clipPath
+       id="clip1559">
+      <path
+         d="M 149.23828,234 H 185 v 32 h -35.76172 z m 0,0"
+         id="path6344" />
+    </clipPath>
+    <clipPath
+       id="clip1560">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6347" />
+    </clipPath>
+    <clipPath
+       id="clip1561">
+      <path
+         d="M 149.23828,233 H 186 v 32 h -36.76172 z m 0,0"
+         id="path6350" />
+    </clipPath>
+    <clipPath
+       id="clip1562">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6353" />
+    </clipPath>
+    <clipPath
+       id="clip1563">
+      <path
+         d="M 149.23828,232 H 187 v 32 h -37.76172 z m 0,0"
+         id="path6356" />
+    </clipPath>
+    <clipPath
+       id="clip1564">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6359" />
+    </clipPath>
+    <clipPath
+       id="clip1565">
+      <path
+         d="M 149.23828,232 H 188 v 31 h -38.76172 z m 0,0"
+         id="path6362" />
+    </clipPath>
+    <clipPath
+       id="clip1566">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6365" />
+    </clipPath>
+    <clipPath
+       id="clip1567">
+      <path
+         d="M 149.23828,231 H 188 v 32 h -38.76172 z m 0,0"
+         id="path6368" />
+    </clipPath>
+    <clipPath
+       id="clip1568">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6371" />
+    </clipPath>
+    <clipPath
+       id="clip1569">
+      <path
+         d="M 149.23828,230 H 189 v 32 h -39.76172 z m 0,0"
+         id="path6374" />
+    </clipPath>
+    <clipPath
+       id="clip1570">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6377" />
+    </clipPath>
+    <clipPath
+       id="clip1571">
+      <path
+         d="M 149.23828,229 H 190 v 32 h -40.76172 z m 0,0"
+         id="path6380" />
+    </clipPath>
+    <clipPath
+       id="clip1572">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6383" />
+    </clipPath>
+    <clipPath
+       id="clip1573">
+      <path
+         d="m 150,229 h 41 v 31 h -41 z m 0,0"
+         id="path6386" />
+    </clipPath>
+    <clipPath
+       id="clip1574">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6389" />
+    </clipPath>
+    <clipPath
+       id="clip1575">
+      <path
+         d="m 151,228 h 40 v 32 h -40 z m 0,0"
+         id="path6392" />
+    </clipPath>
+    <clipPath
+       id="clip1576">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6395" />
+    </clipPath>
+    <clipPath
+       id="clip1577">
+      <path
+         d="m 152,227 h 40 v 32 h -40 z m 0,0"
+         id="path6398" />
+    </clipPath>
+    <clipPath
+       id="clip1578">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6401" />
+    </clipPath>
+    <clipPath
+       id="clip1579">
+      <path
+         d="m 152,226 h 41 v 32 h -41 z m 0,0"
+         id="path6404" />
+    </clipPath>
+    <clipPath
+       id="clip1580">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6407" />
+    </clipPath>
+    <clipPath
+       id="clip1581">
+      <path
+         d="m 153,226 h 41 v 31 h -41 z m 0,0"
+         id="path6410" />
+    </clipPath>
+    <clipPath
+       id="clip1582">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6413" />
+    </clipPath>
+    <clipPath
+       id="clip1583">
+      <path
+         d="m 154,225 h 40 v 32 h -40 z m 0,0"
+         id="path6416" />
+    </clipPath>
+    <clipPath
+       id="clip1584">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6419" />
+    </clipPath>
+    <clipPath
+       id="clip1585">
+      <path
+         d="m 155,224 h 40 v 32 h -40 z m 0,0"
+         id="path6422" />
+    </clipPath>
+    <clipPath
+       id="clip1586">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6425" />
+    </clipPath>
+    <clipPath
+       id="clip1587">
+      <path
+         d="m 155,223 h 41 v 32 h -41 z m 0,0"
+         id="path6428" />
+    </clipPath>
+    <clipPath
+       id="clip1588">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6431" />
+    </clipPath>
+    <clipPath
+       id="clip1589">
+      <path
+         d="m 149.23828,216.625 h 52.5 V 269 h -52.5 z m 0,0"
+         id="path6434" />
+    </clipPath>
+    <clipPath
+       id="clip1590">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6437" />
+    </clipPath>
+    <clipPath
+       id="clip1591">
+      <path
+         d="m 152,216.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 152 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6440" />
+    </clipPath>
+    <clipPath
+       id="clip1592">
+      <path
+         d="m 149.23828,217 h 52.5 v 52 h -52.5 z m 0,0"
+         id="path6443" />
+    </clipPath>
+    <clipPath
+       id="clip1593">
+      <path
+         d="m 152.23828,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6446" />
+    </clipPath>
+    <clipPath
+       id="clip1594">
+      <path
+         d="m 152,216.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 152 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6449" />
+    </clipPath>
+    <clipPath
+       id="clip1595">
+      <path
+         d="m 230.91406,216.625 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path6452" />
+    </clipPath>
+    <clipPath
+       id="clip1596">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6455" />
+    </clipPath>
+    <linearGradient
+       id="linear14"
+       gradientUnits="userSpaceOnUse"
+       x1="0.001494"
+       y1="104.9985"
+       x2="105.0015"
+       y2="-0.001494"
+       gradientTransform="matrix(0.5,0,0,0.5,230.91251,216.625)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(70.979309%,66.665649%,34.901428%);stop-opacity:1;"
+         id="stop6458" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(71.052551%,66.744995%,35.032654%);stop-opacity:1;"
+         id="stop6460" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(71.200562%,66.905212%,35.296631%);stop-opacity:1;"
+         id="stop6462" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(71.347046%,67.063904%,35.559082%);stop-opacity:1;"
+         id="stop6464" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(71.49353%,67.224121%,35.823059%);stop-opacity:1;"
+         id="stop6466" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(71.641541%,67.382812%,36.087036%);stop-opacity:1;"
+         id="stop6468" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(71.788025%,67.541504%,36.349487%);stop-opacity:1;"
+         id="stop6470" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(71.936035%,67.701721%,36.613464%);stop-opacity:1;"
+         id="stop6472" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(72.08252%,67.860413%,36.877441%);stop-opacity:1;"
+         id="stop6474" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(72.229004%,68.02063%,37.139893%);stop-opacity:1;"
+         id="stop6476" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(72.377014%,68.179321%,37.40387%);stop-opacity:1;"
+         id="stop6478" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(72.523499%,68.338013%,37.667847%);stop-opacity:1;"
+         id="stop6480" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(72.669983%,68.49823%,37.930298%);stop-opacity:1;"
+         id="stop6482" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(72.817993%,68.656921%,38.194275%);stop-opacity:1;"
+         id="stop6484" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(72.964478%,68.817139%,38.458252%);stop-opacity:1;"
+         id="stop6486" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(73.112488%,68.97583%,38.720703%);stop-opacity:1;"
+         id="stop6488" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(73.258972%,69.134521%,38.98468%);stop-opacity:1;"
+         id="stop6490" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(73.405457%,69.294739%,39.248657%);stop-opacity:1;"
+         id="stop6492" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(73.553467%,69.45343%,39.511108%);stop-opacity:1;"
+         id="stop6494" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(73.699951%,69.613647%,39.775085%);stop-opacity:1;"
+         id="stop6496" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(73.846436%,69.772339%,40.039062%);stop-opacity:1;"
+         id="stop6498" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(73.994446%,69.93103%,40.30304%);stop-opacity:1;"
+         id="stop6500" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(74.14093%,70.091248%,40.565491%);stop-opacity:1;"
+         id="stop6502" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(74.28894%,70.249939%,40.829468%);stop-opacity:1;"
+         id="stop6504" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(74.435425%,70.410156%,41.093445%);stop-opacity:1;"
+         id="stop6506" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(74.581909%,70.568848%,41.355896%);stop-opacity:1;"
+         id="stop6508" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(74.729919%,70.727539%,41.619873%);stop-opacity:1;"
+         id="stop6510" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(74.876404%,70.887756%,41.88385%);stop-opacity:1;"
+         id="stop6512" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(75.022888%,71.046448%,42.146301%);stop-opacity:1;"
+         id="stop6514" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(75.170898%,71.206665%,42.410278%);stop-opacity:1;"
+         id="stop6516" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(75.317383%,71.365356%,42.674255%);stop-opacity:1;"
+         id="stop6518" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(75.465393%,71.525574%,42.936707%);stop-opacity:1;"
+         id="stop6520" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(75.611877%,71.684265%,43.200684%);stop-opacity:1;"
+         id="stop6522" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(75.758362%,71.842957%,43.464661%);stop-opacity:1;"
+         id="stop6524" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(75.906372%,72.003174%,43.727112%);stop-opacity:1;"
+         id="stop6526" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(76.052856%,72.161865%,43.991089%);stop-opacity:1;"
+         id="stop6528" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(76.199341%,72.322083%,44.255066%);stop-opacity:1;"
+         id="stop6530" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(76.347351%,72.480774%,44.517517%);stop-opacity:1;"
+         id="stop6532" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(76.493835%,72.639465%,44.781494%);stop-opacity:1;"
+         id="stop6534" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(76.641846%,72.799683%,45.045471%);stop-opacity:1;"
+         id="stop6536" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(76.78833%,72.958374%,45.307922%);stop-opacity:1;"
+         id="stop6538" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(76.934814%,73.118591%,45.571899%);stop-opacity:1;"
+         id="stop6540" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(77.082825%,73.277283%,45.835876%);stop-opacity:1;"
+         id="stop6542" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(77.229309%,73.435974%,46.098328%);stop-opacity:1;"
+         id="stop6544" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(77.377319%,73.596191%,46.362305%);stop-opacity:1;"
+         id="stop6546" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(77.523804%,73.754883%,46.626282%);stop-opacity:1;"
+         id="stop6548" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(77.670288%,73.9151%,46.888733%);stop-opacity:1;"
+         id="stop6550" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(77.818298%,74.073792%,47.15271%);stop-opacity:1;"
+         id="stop6552" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(77.964783%,74.232483%,47.416687%);stop-opacity:1;"
+         id="stop6554" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(78.111267%,74.3927%,47.679138%);stop-opacity:1;"
+         id="stop6556" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(78.259277%,74.551392%,47.943115%);stop-opacity:1;"
+         id="stop6558" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(78.405762%,74.711609%,48.207092%);stop-opacity:1;"
+         id="stop6560" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(78.553772%,74.8703%,48.469543%);stop-opacity:1;"
+         id="stop6562" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(78.700256%,75.030518%,48.733521%);stop-opacity:1;"
+         id="stop6564" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(78.846741%,75.189209%,48.997498%);stop-opacity:1;"
+         id="stop6566" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(78.994751%,75.3479%,49.259949%);stop-opacity:1;"
+         id="stop6568" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(79.141235%,75.508118%,49.523926%);stop-opacity:1;"
+         id="stop6570" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(79.28772%,75.666809%,49.787903%);stop-opacity:1;"
+         id="stop6572" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(79.43573%,75.827026%,50.050354%);stop-opacity:1;"
+         id="stop6574" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(79.582214%,75.985718%,50.314331%);stop-opacity:1;"
+         id="stop6576" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(79.730225%,76.144409%,50.578308%);stop-opacity:1;"
+         id="stop6578" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(79.876709%,76.304626%,50.840759%);stop-opacity:1;"
+         id="stop6580" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(80.023193%,76.463318%,51.104736%);stop-opacity:1;"
+         id="stop6582" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(80.171204%,76.623535%,51.368713%);stop-opacity:1;"
+         id="stop6584" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(80.317688%,76.782227%,51.631165%);stop-opacity:1;"
+         id="stop6586" />
+    </linearGradient>
+    <clipPath
+       id="clip1597">
+      <path
+         d="M 230.91406,265 H 231 v 4.125 h -0.0859 z m 0,0"
+         id="path6589" />
+    </clipPath>
+    <clipPath
+       id="clip1598">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6592" />
+    </clipPath>
+    <clipPath
+       id="clip1599">
+      <path
+         d="M 230.91406,264 H 231 v 5.125 h -0.0859 z m 0,0"
+         id="path6595" />
+    </clipPath>
+    <clipPath
+       id="clip1600">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6598" />
+    </clipPath>
+    <clipPath
+       id="clip1601">
+      <path
+         d="M 230.91406,263 H 232 v 6.125 h -1.08594 z m 0,0"
+         id="path6601" />
+    </clipPath>
+    <clipPath
+       id="clip1602">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6604" />
+    </clipPath>
+    <clipPath
+       id="clip1603">
+      <path
+         d="M 230.91406,263 H 233 v 6.125 h -2.08594 z m 0,0"
+         id="path6607" />
+    </clipPath>
+    <clipPath
+       id="clip1604">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6610" />
+    </clipPath>
+    <clipPath
+       id="clip1605">
+      <path
+         d="M 230.91406,262 H 234 v 7.125 h -3.08594 z m 0,0"
+         id="path6613" />
+    </clipPath>
+    <clipPath
+       id="clip1606">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6616" />
+    </clipPath>
+    <clipPath
+       id="clip1607">
+      <path
+         d="M 230.91406,261 H 234 v 8.125 h -3.08594 z m 0,0"
+         id="path6619" />
+    </clipPath>
+    <clipPath
+       id="clip1608">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6622" />
+    </clipPath>
+    <clipPath
+       id="clip1609">
+      <path
+         d="M 230.91406,260 H 235 v 9.125 h -4.08594 z m 0,0"
+         id="path6625" />
+    </clipPath>
+    <clipPath
+       id="clip1610">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6628" />
+    </clipPath>
+    <clipPath
+       id="clip1611">
+      <path
+         d="M 230.91406,260 H 236 v 9.125 h -5.08594 z m 0,0"
+         id="path6631" />
+    </clipPath>
+    <clipPath
+       id="clip1612">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6634" />
+    </clipPath>
+    <clipPath
+       id="clip1613">
+      <path
+         d="M 230.91406,259 H 237 v 10.125 h -6.08594 z m 0,0"
+         id="path6637" />
+    </clipPath>
+    <clipPath
+       id="clip1614">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6640" />
+    </clipPath>
+    <clipPath
+       id="clip1615">
+      <path
+         d="M 230.91406,258 H 237 v 11.125 h -6.08594 z m 0,0"
+         id="path6643" />
+    </clipPath>
+    <clipPath
+       id="clip1616">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6646" />
+    </clipPath>
+    <clipPath
+       id="clip1617">
+      <path
+         d="M 230.91406,257 H 238 v 12.125 h -7.08594 z m 0,0"
+         id="path6649" />
+    </clipPath>
+    <clipPath
+       id="clip1618">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6652" />
+    </clipPath>
+    <clipPath
+       id="clip1619">
+      <path
+         d="M 230.91406,257 H 239 v 12.125 h -8.08594 z m 0,0"
+         id="path6655" />
+    </clipPath>
+    <clipPath
+       id="clip1620">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6658" />
+    </clipPath>
+    <clipPath
+       id="clip1621">
+      <path
+         d="M 230.91406,256 H 240 v 13.125 h -9.08594 z m 0,0"
+         id="path6661" />
+    </clipPath>
+    <clipPath
+       id="clip1622">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6664" />
+    </clipPath>
+    <clipPath
+       id="clip1623">
+      <path
+         d="M 230.91406,255 H 240 v 14.125 h -9.08594 z m 0,0"
+         id="path6667" />
+    </clipPath>
+    <clipPath
+       id="clip1624">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6670" />
+    </clipPath>
+    <clipPath
+       id="clip1625">
+      <path
+         d="M 230.91406,254 H 241 v 15.125 h -10.08594 z m 0,0"
+         id="path6673" />
+    </clipPath>
+    <clipPath
+       id="clip1626">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6676" />
+    </clipPath>
+    <clipPath
+       id="clip1627">
+      <path
+         d="M 230.91406,254 H 242 v 15.125 h -11.08594 z m 0,0"
+         id="path6679" />
+    </clipPath>
+    <clipPath
+       id="clip1628">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6682" />
+    </clipPath>
+    <clipPath
+       id="clip1629">
+      <path
+         d="M 230.91406,253 H 243 v 16.125 h -12.08594 z m 0,0"
+         id="path6685" />
+    </clipPath>
+    <clipPath
+       id="clip1630">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6688" />
+    </clipPath>
+    <clipPath
+       id="clip1631">
+      <path
+         d="M 230.91406,252 H 243 v 17.125 h -12.08594 z m 0,0"
+         id="path6691" />
+    </clipPath>
+    <clipPath
+       id="clip1632">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6694" />
+    </clipPath>
+    <clipPath
+       id="clip1633">
+      <path
+         d="M 230.91406,251 H 244 v 18.125 h -13.08594 z m 0,0"
+         id="path6697" />
+    </clipPath>
+    <clipPath
+       id="clip1634">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6700" />
+    </clipPath>
+    <clipPath
+       id="clip1635">
+      <path
+         d="M 230.91406,251 H 245 v 18.125 h -14.08594 z m 0,0"
+         id="path6703" />
+    </clipPath>
+    <clipPath
+       id="clip1636">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6706" />
+    </clipPath>
+    <clipPath
+       id="clip1637">
+      <path
+         d="M 230.91406,250 H 246 v 19.125 h -15.08594 z m 0,0"
+         id="path6709" />
+    </clipPath>
+    <clipPath
+       id="clip1638">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6712" />
+    </clipPath>
+    <clipPath
+       id="clip1639">
+      <path
+         d="M 230.91406,249 H 246 v 20.125 h -15.08594 z m 0,0"
+         id="path6715" />
+    </clipPath>
+    <clipPath
+       id="clip1640">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6718" />
+    </clipPath>
+    <clipPath
+       id="clip1641">
+      <path
+         d="M 230.91406,248 H 247 v 21.125 h -16.08594 z m 0,0"
+         id="path6721" />
+    </clipPath>
+    <clipPath
+       id="clip1642">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6724" />
+    </clipPath>
+    <clipPath
+       id="clip1643">
+      <path
+         d="M 230.91406,248 H 248 v 21.125 h -17.08594 z m 0,0"
+         id="path6727" />
+    </clipPath>
+    <clipPath
+       id="clip1644">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6730" />
+    </clipPath>
+    <clipPath
+       id="clip1645">
+      <path
+         d="M 230.91406,247 H 249 v 22.125 h -18.08594 z m 0,0"
+         id="path6733" />
+    </clipPath>
+    <clipPath
+       id="clip1646">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6736" />
+    </clipPath>
+    <clipPath
+       id="clip1647">
+      <path
+         d="M 230.91406,246 H 249 v 23.125 h -18.08594 z m 0,0"
+         id="path6739" />
+    </clipPath>
+    <clipPath
+       id="clip1648">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6742" />
+    </clipPath>
+    <clipPath
+       id="clip1649">
+      <path
+         d="M 230.91406,245 H 250 v 24.125 h -19.08594 z m 0,0"
+         id="path6745" />
+    </clipPath>
+    <clipPath
+       id="clip1650">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6748" />
+    </clipPath>
+    <clipPath
+       id="clip1651">
+      <path
+         d="M 230.91406,245 H 251 v 24.125 h -20.08594 z m 0,0"
+         id="path6751" />
+    </clipPath>
+    <clipPath
+       id="clip1652">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6754" />
+    </clipPath>
+    <clipPath
+       id="clip1653">
+      <path
+         d="M 230.91406,244 H 252 v 25.125 h -21.08594 z m 0,0"
+         id="path6757" />
+    </clipPath>
+    <clipPath
+       id="clip1654">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6760" />
+    </clipPath>
+    <clipPath
+       id="clip1655">
+      <path
+         d="M 230.91406,243 H 252 v 26.125 h -21.08594 z m 0,0"
+         id="path6763" />
+    </clipPath>
+    <clipPath
+       id="clip1656">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6766" />
+    </clipPath>
+    <clipPath
+       id="clip1657">
+      <path
+         d="M 230.91406,242 H 253 v 27.125 h -22.08594 z m 0,0"
+         id="path6769" />
+    </clipPath>
+    <clipPath
+       id="clip1658">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6772" />
+    </clipPath>
+    <clipPath
+       id="clip1659">
+      <path
+         d="M 230.91406,242 H 254 v 27.125 h -23.08594 z m 0,0"
+         id="path6775" />
+    </clipPath>
+    <clipPath
+       id="clip1660">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6778" />
+    </clipPath>
+    <clipPath
+       id="clip1661">
+      <path
+         d="M 230.91406,241 H 255 v 28.125 h -24.08594 z m 0,0"
+         id="path6781" />
+    </clipPath>
+    <clipPath
+       id="clip1662">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6784" />
+    </clipPath>
+    <clipPath
+       id="clip1663">
+      <path
+         d="M 230.91406,240 H 255 v 29.125 h -24.08594 z m 0,0"
+         id="path6787" />
+    </clipPath>
+    <clipPath
+       id="clip1664">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6790" />
+    </clipPath>
+    <clipPath
+       id="clip1665">
+      <path
+         d="M 230.91406,239 H 256 v 30.125 h -25.08594 z m 0,0"
+         id="path6793" />
+    </clipPath>
+    <clipPath
+       id="clip1666">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6796" />
+    </clipPath>
+    <clipPath
+       id="clip1667">
+      <path
+         d="M 230.91406,239 H 257 v 30.125 h -26.08594 z m 0,0"
+         id="path6799" />
+    </clipPath>
+    <clipPath
+       id="clip1668">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6802" />
+    </clipPath>
+    <clipPath
+       id="clip1669">
+      <path
+         d="M 230.91406,238 H 258 v 31.125 h -27.08594 z m 0,0"
+         id="path6805" />
+    </clipPath>
+    <clipPath
+       id="clip1670">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6808" />
+    </clipPath>
+    <clipPath
+       id="clip1671">
+      <path
+         d="M 230.91406,237 H 258 v 32.125 h -27.08594 z m 0,0"
+         id="path6811" />
+    </clipPath>
+    <clipPath
+       id="clip1672">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6814" />
+    </clipPath>
+    <clipPath
+       id="clip1673">
+      <path
+         d="M 230.91406,236 H 259 v 33.125 h -28.08594 z m 0,0"
+         id="path6817" />
+    </clipPath>
+    <clipPath
+       id="clip1674">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6820" />
+    </clipPath>
+    <clipPath
+       id="clip1675">
+      <path
+         d="M 230.91406,236 H 260 v 33.125 h -29.08594 z m 0,0"
+         id="path6823" />
+    </clipPath>
+    <clipPath
+       id="clip1676">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6826" />
+    </clipPath>
+    <clipPath
+       id="clip1677">
+      <path
+         d="M 230.91406,235 H 261 v 34.125 h -30.08594 z m 0,0"
+         id="path6829" />
+    </clipPath>
+    <clipPath
+       id="clip1678">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6832" />
+    </clipPath>
+    <clipPath
+       id="clip1679">
+      <path
+         d="M 230.91406,234 H 261 v 35.125 h -30.08594 z m 0,0"
+         id="path6835" />
+    </clipPath>
+    <clipPath
+       id="clip1680">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6838" />
+    </clipPath>
+    <clipPath
+       id="clip1681">
+      <path
+         d="M 230.91406,233 H 262 v 36 h -31.08594 z m 0,0"
+         id="path6841" />
+    </clipPath>
+    <clipPath
+       id="clip1682">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6844" />
+    </clipPath>
+    <clipPath
+       id="clip1683">
+      <path
+         d="M 230.91406,233 H 263 v 35 h -32.08594 z m 0,0"
+         id="path6847" />
+    </clipPath>
+    <clipPath
+       id="clip1684">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6850" />
+    </clipPath>
+    <clipPath
+       id="clip1685">
+      <path
+         d="M 230.91406,232 H 264 v 36 h -33.08594 z m 0,0"
+         id="path6853" />
+    </clipPath>
+    <clipPath
+       id="clip1686">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6856" />
+    </clipPath>
+    <clipPath
+       id="clip1687">
+      <path
+         d="m 231,231 h 33 v 36 h -33 z m 0,0"
+         id="path6859" />
+    </clipPath>
+    <clipPath
+       id="clip1688">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6862" />
+    </clipPath>
+    <clipPath
+       id="clip1689">
+      <path
+         d="m 231,230 h 34 v 36 h -34 z m 0,0"
+         id="path6865" />
+    </clipPath>
+    <clipPath
+       id="clip1690">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6868" />
+    </clipPath>
+    <clipPath
+       id="clip1691">
+      <path
+         d="m 232,230 h 34 v 35 h -34 z m 0,0"
+         id="path6871" />
+    </clipPath>
+    <clipPath
+       id="clip1692">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6874" />
+    </clipPath>
+    <clipPath
+       id="clip1693">
+      <path
+         d="m 233,229 h 34 v 36 h -34 z m 0,0"
+         id="path6877" />
+    </clipPath>
+    <clipPath
+       id="clip1694">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6880" />
+    </clipPath>
+    <clipPath
+       id="clip1695">
+      <path
+         d="m 234,228 h 33 v 36 h -33 z m 0,0"
+         id="path6883" />
+    </clipPath>
+    <clipPath
+       id="clip1696">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6886" />
+    </clipPath>
+    <clipPath
+       id="clip1697">
+      <path
+         d="m 234,227 h 34 v 36 h -34 z m 0,0"
+         id="path6889" />
+    </clipPath>
+    <clipPath
+       id="clip1698">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6892" />
+    </clipPath>
+    <clipPath
+       id="clip1699">
+      <path
+         d="m 235,227 h 34 v 35 h -34 z m 0,0"
+         id="path6895" />
+    </clipPath>
+    <clipPath
+       id="clip1700">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6898" />
+    </clipPath>
+    <clipPath
+       id="clip1701">
+      <path
+         d="m 236,226 h 34 v 36 h -34 z m 0,0"
+         id="path6901" />
+    </clipPath>
+    <clipPath
+       id="clip1702">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6904" />
+    </clipPath>
+    <clipPath
+       id="clip1703">
+      <path
+         d="m 237,225 h 33 v 36 h -33 z m 0,0"
+         id="path6907" />
+    </clipPath>
+    <clipPath
+       id="clip1704">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6910" />
+    </clipPath>
+    <clipPath
+       id="clip1705">
+      <path
+         d="m 237,224 h 34 v 36 h -34 z m 0,0"
+         id="path6913" />
+    </clipPath>
+    <clipPath
+       id="clip1706">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6916" />
+    </clipPath>
+    <clipPath
+       id="clip1707">
+      <path
+         d="m 238,224 h 34 v 35 h -34 z m 0,0"
+         id="path6919" />
+    </clipPath>
+    <clipPath
+       id="clip1708">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6922" />
+    </clipPath>
+    <clipPath
+       id="clip1709">
+      <path
+         d="m 239,223 h 34 v 36 h -34 z m 0,0"
+         id="path6925" />
+    </clipPath>
+    <clipPath
+       id="clip1710">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6928" />
+    </clipPath>
+    <clipPath
+       id="clip1711">
+      <path
+         d="m 240,222 h 33 v 36 h -33 z m 0,0"
+         id="path6931" />
+    </clipPath>
+    <clipPath
+       id="clip1712">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6934" />
+    </clipPath>
+    <clipPath
+       id="clip1713">
+      <path
+         d="m 240,221 h 34 v 36 h -34 z m 0,0"
+         id="path6937" />
+    </clipPath>
+    <clipPath
+       id="clip1714">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6940" />
+    </clipPath>
+    <clipPath
+       id="clip1715">
+      <path
+         d="m 231,216.625 h 52.41406 V 269 H 231 Z m 0,0"
+         id="path6943" />
+    </clipPath>
+    <clipPath
+       id="clip1716">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6946" />
+    </clipPath>
+    <clipPath
+       id="clip1717">
+      <path
+         d="m 234,216.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 234 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6949" />
+    </clipPath>
+    <clipPath
+       id="clip1718">
+      <path
+         d="m 231,217 h 52.41406 v 52 H 231 Z m 0,0"
+         id="path6952" />
+    </clipPath>
+    <clipPath
+       id="clip1719">
+      <path
+         d="m 233.91406,216.625 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6955" />
+    </clipPath>
+    <clipPath
+       id="clip1720">
+      <path
+         d="m 234,216.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 234 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path6958" />
+    </clipPath>
+    <clipPath
+       id="clip1721">
+      <path
+         d="m 312.58594,216.625 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path6961" />
+    </clipPath>
+    <clipPath
+       id="clip1722">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path6964" />
+    </clipPath>
+    <linearGradient
+       id="linear15"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.001494"
+       y1="105.0015"
+       x2="104.9985"
+       y2="0.001494"
+       gradientTransform="matrix(0.5,0,0,0.5,312.58749,216.625)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(79.998779%,43.920898%,22.3526%);stop-opacity:1;"
+         id="stop6967" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(80.041504%,44.033813%,22.505188%);stop-opacity:1;"
+         id="stop6969" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(80.126953%,44.259644%,22.810364%);stop-opacity:1;"
+         id="stop6971" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(80.213928%,44.487%,23.117065%);stop-opacity:1;"
+         id="stop6973" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(80.299377%,44.714355%,23.423767%);stop-opacity:1;"
+         id="stop6975" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(80.384827%,44.940186%,23.730469%);stop-opacity:1;"
+         id="stop6977" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(80.470276%,45.167542%,24.035645%);stop-opacity:1;"
+         id="stop6979" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(80.557251%,45.393372%,24.342346%);stop-opacity:1;"
+         id="stop6981" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(80.6427%,45.620728%,24.649048%);stop-opacity:1;"
+         id="stop6983" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(80.728149%,45.846558%,24.95575%);stop-opacity:1;"
+         id="stop6985" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(80.813599%,46.073914%,25.262451%);stop-opacity:1;"
+         id="stop6987" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(80.899048%,46.30127%,25.567627%);stop-opacity:1;"
+         id="stop6989" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(80.986023%,46.5271%,25.874329%);stop-opacity:1;"
+         id="stop6991" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(81.071472%,46.754456%,26.18103%);stop-opacity:1;"
+         id="stop6993" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(81.156921%,46.980286%,26.487732%);stop-opacity:1;"
+         id="stop6995" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(81.242371%,47.207642%,26.794434%);stop-opacity:1;"
+         id="stop6997" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(81.329346%,47.434998%,27.099609%);stop-opacity:1;"
+         id="stop6999" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(81.414795%,47.660828%,27.406311%);stop-opacity:1;"
+         id="stop7001" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(81.500244%,47.888184%,27.713013%);stop-opacity:1;"
+         id="stop7003" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(81.585693%,48.114014%,28.019714%);stop-opacity:1;"
+         id="stop7005" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(81.671143%,48.34137%,28.32489%);stop-opacity:1;"
+         id="stop7007" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(81.758118%,48.5672%,28.631592%);stop-opacity:1;"
+         id="stop7009" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(81.843567%,48.794556%,28.938293%);stop-opacity:1;"
+         id="stop7011" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(81.929016%,49.021912%,29.244995%);stop-opacity:1;"
+         id="stop7013" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(82.014465%,49.247742%,29.551697%);stop-opacity:1;"
+         id="stop7015" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(82.10144%,49.475098%,29.856873%);stop-opacity:1;"
+         id="stop7017" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(82.18689%,49.700928%,30.163574%);stop-opacity:1;"
+         id="stop7019" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(82.272339%,49.928284%,30.470276%);stop-opacity:1;"
+         id="stop7021" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(82.357788%,50.154114%,30.776978%);stop-opacity:1;"
+         id="stop7023" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(82.443237%,50.38147%,31.082153%);stop-opacity:1;"
+         id="stop7025" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(82.530212%,50.608826%,31.388855%);stop-opacity:1;"
+         id="stop7027" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(82.615662%,50.834656%,31.695557%);stop-opacity:1;"
+         id="stop7029" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(82.701111%,51.062012%,32.002258%);stop-opacity:1;"
+         id="stop7031" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(82.78656%,51.287842%,32.30896%);stop-opacity:1;"
+         id="stop7033" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(82.872009%,51.515198%,32.614136%);stop-opacity:1;"
+         id="stop7035" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(82.958984%,51.742554%,32.920837%);stop-opacity:1;"
+         id="stop7037" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(83.044434%,51.968384%,33.227539%);stop-opacity:1;"
+         id="stop7039" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(83.129883%,52.19574%,33.534241%);stop-opacity:1;"
+         id="stop7041" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(83.215332%,52.42157%,33.840942%);stop-opacity:1;"
+         id="stop7043" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(83.302307%,52.648926%,34.146118%);stop-opacity:1;"
+         id="stop7045" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(83.387756%,52.874756%,34.45282%);stop-opacity:1;"
+         id="stop7047" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(83.473206%,53.102112%,34.759521%);stop-opacity:1;"
+         id="stop7049" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(83.558655%,53.329468%,35.066223%);stop-opacity:1;"
+         id="stop7051" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(83.644104%,53.555298%,35.371399%);stop-opacity:1;"
+         id="stop7053" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(83.731079%,53.782654%,35.678101%);stop-opacity:1;"
+         id="stop7055" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(83.816528%,54.008484%,35.984802%);stop-opacity:1;"
+         id="stop7057" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(83.901978%,54.23584%,36.291504%);stop-opacity:1;"
+         id="stop7059" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(83.987427%,54.463196%,36.598206%);stop-opacity:1;"
+         id="stop7061" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(84.074402%,54.689026%,36.903381%);stop-opacity:1;"
+         id="stop7063" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(84.159851%,54.916382%,37.210083%);stop-opacity:1;"
+         id="stop7065" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(84.2453%,55.142212%,37.516785%);stop-opacity:1;"
+         id="stop7067" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(84.33075%,55.369568%,37.823486%);stop-opacity:1;"
+         id="stop7069" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(84.416199%,55.595398%,38.130188%);stop-opacity:1;"
+         id="stop7071" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(84.503174%,55.822754%,38.435364%);stop-opacity:1;"
+         id="stop7073" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(84.588623%,56.05011%,38.742065%);stop-opacity:1;"
+         id="stop7075" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(84.674072%,56.27594%,39.048767%);stop-opacity:1;"
+         id="stop7077" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(84.759521%,56.503296%,39.355469%);stop-opacity:1;"
+         id="stop7079" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(84.846497%,56.729126%,39.660645%);stop-opacity:1;"
+         id="stop7081" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(84.931946%,56.956482%,39.967346%);stop-opacity:1;"
+         id="stop7083" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(85.017395%,57.182312%,40.274048%);stop-opacity:1;"
+         id="stop7085" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(85.102844%,57.409668%,40.58075%);stop-opacity:1;"
+         id="stop7087" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(85.188293%,57.637024%,40.887451%);stop-opacity:1;"
+         id="stop7089" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(85.275269%,57.862854%,41.192627%);stop-opacity:1;"
+         id="stop7091" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(85.360718%,58.09021%,41.499329%);stop-opacity:1;"
+         id="stop7093" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(85.446167%,58.31604%,41.80603%);stop-opacity:1;"
+         id="stop7095" />
+    </linearGradient>
+    <clipPath
+       id="clip1723">
+      <path
+         d="M 312.58594,262 H 313 v 7.125 h -0.41406 z m 0,0"
+         id="path7098" />
+    </clipPath>
+    <clipPath
+       id="clip1724">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7101" />
+    </clipPath>
+    <clipPath
+       id="clip1725">
+      <path
+         d="M 312.58594,261 H 314 v 8.125 h -1.41406 z m 0,0"
+         id="path7104" />
+    </clipPath>
+    <clipPath
+       id="clip1726">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7107" />
+    </clipPath>
+    <clipPath
+       id="clip1727">
+      <path
+         d="M 312.58594,260 H 315 v 9.125 h -2.41406 z m 0,0"
+         id="path7110" />
+    </clipPath>
+    <clipPath
+       id="clip1728">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7113" />
+    </clipPath>
+    <clipPath
+       id="clip1729">
+      <path
+         d="M 312.58594,259 H 315 v 10.125 h -2.41406 z m 0,0"
+         id="path7116" />
+    </clipPath>
+    <clipPath
+       id="clip1730">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7119" />
+    </clipPath>
+    <clipPath
+       id="clip1731">
+      <path
+         d="M 312.58594,259 H 316 v 10.125 h -3.41406 z m 0,0"
+         id="path7122" />
+    </clipPath>
+    <clipPath
+       id="clip1732">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7125" />
+    </clipPath>
+    <clipPath
+       id="clip1733">
+      <path
+         d="M 312.58594,258 H 317 v 11.125 h -4.41406 z m 0,0"
+         id="path7128" />
+    </clipPath>
+    <clipPath
+       id="clip1734">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7131" />
+    </clipPath>
+    <clipPath
+       id="clip1735">
+      <path
+         d="M 312.58594,257 H 318 v 12.125 h -5.41406 z m 0,0"
+         id="path7134" />
+    </clipPath>
+    <clipPath
+       id="clip1736">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7137" />
+    </clipPath>
+    <clipPath
+       id="clip1737">
+      <path
+         d="M 312.58594,256 H 318 v 13.125 h -5.41406 z m 0,0"
+         id="path7140" />
+    </clipPath>
+    <clipPath
+       id="clip1738">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7143" />
+    </clipPath>
+    <clipPath
+       id="clip1739">
+      <path
+         d="M 312.58594,256 H 319 v 13.125 h -6.41406 z m 0,0"
+         id="path7146" />
+    </clipPath>
+    <clipPath
+       id="clip1740">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7149" />
+    </clipPath>
+    <clipPath
+       id="clip1741">
+      <path
+         d="M 312.58594,255 H 320 v 14.125 h -7.41406 z m 0,0"
+         id="path7152" />
+    </clipPath>
+    <clipPath
+       id="clip1742">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7155" />
+    </clipPath>
+    <clipPath
+       id="clip1743">
+      <path
+         d="M 312.58594,254 H 321 v 15.125 h -8.41406 z m 0,0"
+         id="path7158" />
+    </clipPath>
+    <clipPath
+       id="clip1744">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7161" />
+    </clipPath>
+    <clipPath
+       id="clip1745">
+      <path
+         d="M 312.58594,253 H 321 v 16.125 h -8.41406 z m 0,0"
+         id="path7164" />
+    </clipPath>
+    <clipPath
+       id="clip1746">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7167" />
+    </clipPath>
+    <clipPath
+       id="clip1747">
+      <path
+         d="M 312.58594,253 H 322 v 16.125 h -9.41406 z m 0,0"
+         id="path7170" />
+    </clipPath>
+    <clipPath
+       id="clip1748">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7173" />
+    </clipPath>
+    <clipPath
+       id="clip1749">
+      <path
+         d="M 312.58594,252 H 323 v 17.125 h -10.41406 z m 0,0"
+         id="path7176" />
+    </clipPath>
+    <clipPath
+       id="clip1750">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7179" />
+    </clipPath>
+    <clipPath
+       id="clip1751">
+      <path
+         d="M 312.58594,251 H 324 v 18.125 h -11.41406 z m 0,0"
+         id="path7182" />
+    </clipPath>
+    <clipPath
+       id="clip1752">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7185" />
+    </clipPath>
+    <clipPath
+       id="clip1753">
+      <path
+         d="M 312.58594,250 H 324 v 19.125 h -11.41406 z m 0,0"
+         id="path7188" />
+    </clipPath>
+    <clipPath
+       id="clip1754">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7191" />
+    </clipPath>
+    <clipPath
+       id="clip1755">
+      <path
+         d="M 312.58594,250 H 325 v 19.125 h -12.41406 z m 0,0"
+         id="path7194" />
+    </clipPath>
+    <clipPath
+       id="clip1756">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7197" />
+    </clipPath>
+    <clipPath
+       id="clip1757">
+      <path
+         d="M 312.58594,249 H 326 v 20.125 h -13.41406 z m 0,0"
+         id="path7200" />
+    </clipPath>
+    <clipPath
+       id="clip1758">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7203" />
+    </clipPath>
+    <clipPath
+       id="clip1759">
+      <path
+         d="M 312.58594,248 H 327 v 21.125 h -14.41406 z m 0,0"
+         id="path7206" />
+    </clipPath>
+    <clipPath
+       id="clip1760">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7209" />
+    </clipPath>
+    <clipPath
+       id="clip1761">
+      <path
+         d="M 312.58594,247 H 327 v 22.125 h -14.41406 z m 0,0"
+         id="path7212" />
+    </clipPath>
+    <clipPath
+       id="clip1762">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7215" />
+    </clipPath>
+    <clipPath
+       id="clip1763">
+      <path
+         d="M 312.58594,247 H 328 v 22.125 h -15.41406 z m 0,0"
+         id="path7218" />
+    </clipPath>
+    <clipPath
+       id="clip1764">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7221" />
+    </clipPath>
+    <clipPath
+       id="clip1765">
+      <path
+         d="M 312.58594,246 H 329 v 23.125 h -16.41406 z m 0,0"
+         id="path7224" />
+    </clipPath>
+    <clipPath
+       id="clip1766">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7227" />
+    </clipPath>
+    <clipPath
+       id="clip1767">
+      <path
+         d="M 312.58594,245 H 330 v 24.125 h -17.41406 z m 0,0"
+         id="path7230" />
+    </clipPath>
+    <clipPath
+       id="clip1768">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7233" />
+    </clipPath>
+    <clipPath
+       id="clip1769">
+      <path
+         d="M 312.58594,244 H 330 v 25.125 h -17.41406 z m 0,0"
+         id="path7236" />
+    </clipPath>
+    <clipPath
+       id="clip1770">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7239" />
+    </clipPath>
+    <clipPath
+       id="clip1771">
+      <path
+         d="M 312.58594,244 H 331 v 25.125 h -18.41406 z m 0,0"
+         id="path7242" />
+    </clipPath>
+    <clipPath
+       id="clip1772">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7245" />
+    </clipPath>
+    <clipPath
+       id="clip1773">
+      <path
+         d="M 312.58594,243 H 332 v 26.125 h -19.41406 z m 0,0"
+         id="path7248" />
+    </clipPath>
+    <clipPath
+       id="clip1774">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7251" />
+    </clipPath>
+    <clipPath
+       id="clip1775">
+      <path
+         d="M 312.58594,242 H 333 v 27 h -20.41406 z m 0,0"
+         id="path7254" />
+    </clipPath>
+    <clipPath
+       id="clip1776">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7257" />
+    </clipPath>
+    <clipPath
+       id="clip1777">
+      <path
+         d="M 312.58594,241 H 333 v 28 h -20.41406 z m 0,0"
+         id="path7260" />
+    </clipPath>
+    <clipPath
+       id="clip1778">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7263" />
+    </clipPath>
+    <clipPath
+       id="clip1779">
+      <path
+         d="M 312.58594,241 H 334 v 27 h -21.41406 z m 0,0"
+         id="path7266" />
+    </clipPath>
+    <clipPath
+       id="clip1780">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7269" />
+    </clipPath>
+    <clipPath
+       id="clip1781">
+      <path
+         d="m 313,240 h 22 v 27 h -22 z m 0,0"
+         id="path7272" />
+    </clipPath>
+    <clipPath
+       id="clip1782">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7275" />
+    </clipPath>
+    <clipPath
+       id="clip1783">
+      <path
+         d="m 313,239 h 23 v 27 h -23 z m 0,0"
+         id="path7278" />
+    </clipPath>
+    <clipPath
+       id="clip1784">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7281" />
+    </clipPath>
+    <clipPath
+       id="clip1785">
+      <path
+         d="m 314,238 h 22 v 28 h -22 z m 0,0"
+         id="path7284" />
+    </clipPath>
+    <clipPath
+       id="clip1786">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7287" />
+    </clipPath>
+    <clipPath
+       id="clip1787">
+      <path
+         d="m 315,238 h 22 v 27 h -22 z m 0,0"
+         id="path7290" />
+    </clipPath>
+    <clipPath
+       id="clip1788">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7293" />
+    </clipPath>
+    <clipPath
+       id="clip1789">
+      <path
+         d="m 316,237 h 22 v 27 h -22 z m 0,0"
+         id="path7296" />
+    </clipPath>
+    <clipPath
+       id="clip1790">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7299" />
+    </clipPath>
+    <clipPath
+       id="clip1791">
+      <path
+         d="m 316,236 h 23 v 27 h -23 z m 0,0"
+         id="path7302" />
+    </clipPath>
+    <clipPath
+       id="clip1792">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7305" />
+    </clipPath>
+    <clipPath
+       id="clip1793">
+      <path
+         d="m 317,235 h 22 v 28 h -22 z m 0,0"
+         id="path7308" />
+    </clipPath>
+    <clipPath
+       id="clip1794">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7311" />
+    </clipPath>
+    <clipPath
+       id="clip1795">
+      <path
+         d="m 318,235 h 22 v 27 h -22 z m 0,0"
+         id="path7314" />
+    </clipPath>
+    <clipPath
+       id="clip1796">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7317" />
+    </clipPath>
+    <clipPath
+       id="clip1797">
+      <path
+         d="m 319,234 h 22 v 27 h -22 z m 0,0"
+         id="path7320" />
+    </clipPath>
+    <clipPath
+       id="clip1798">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7323" />
+    </clipPath>
+    <clipPath
+       id="clip1799">
+      <path
+         d="m 319,233 h 23 v 27 h -23 z m 0,0"
+         id="path7326" />
+    </clipPath>
+    <clipPath
+       id="clip1800">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7329" />
+    </clipPath>
+    <clipPath
+       id="clip1801">
+      <path
+         d="m 320,232 h 22 v 28 h -22 z m 0,0"
+         id="path7332" />
+    </clipPath>
+    <clipPath
+       id="clip1802">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7335" />
+    </clipPath>
+    <clipPath
+       id="clip1803">
+      <path
+         d="m 321,232 h 22 v 27 h -22 z m 0,0"
+         id="path7338" />
+    </clipPath>
+    <clipPath
+       id="clip1804">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7341" />
+    </clipPath>
+    <clipPath
+       id="clip1805">
+      <path
+         d="m 322,231 h 22 v 27 h -22 z m 0,0"
+         id="path7344" />
+    </clipPath>
+    <clipPath
+       id="clip1806">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7347" />
+    </clipPath>
+    <clipPath
+       id="clip1807">
+      <path
+         d="m 322,230 h 23 v 27 h -23 z m 0,0"
+         id="path7350" />
+    </clipPath>
+    <clipPath
+       id="clip1808">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7353" />
+    </clipPath>
+    <clipPath
+       id="clip1809">
+      <path
+         d="m 323,229 h 22 v 28 h -22 z m 0,0"
+         id="path7356" />
+    </clipPath>
+    <clipPath
+       id="clip1810">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7359" />
+    </clipPath>
+    <clipPath
+       id="clip1811">
+      <path
+         d="m 324,229 h 22 v 27 h -22 z m 0,0"
+         id="path7362" />
+    </clipPath>
+    <clipPath
+       id="clip1812">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7365" />
+    </clipPath>
+    <clipPath
+       id="clip1813">
+      <path
+         d="m 325,228 h 22 v 27 h -22 z m 0,0"
+         id="path7368" />
+    </clipPath>
+    <clipPath
+       id="clip1814">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7371" />
+    </clipPath>
+    <clipPath
+       id="clip1815">
+      <path
+         d="m 325,227 h 23 v 27 h -23 z m 0,0"
+         id="path7374" />
+    </clipPath>
+    <clipPath
+       id="clip1816">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7377" />
+    </clipPath>
+    <clipPath
+       id="clip1817">
+      <path
+         d="m 326,226 h 22 v 28 h -22 z m 0,0"
+         id="path7380" />
+    </clipPath>
+    <clipPath
+       id="clip1818">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7383" />
+    </clipPath>
+    <clipPath
+       id="clip1819">
+      <path
+         d="m 327,226 h 22 v 27 h -22 z m 0,0"
+         id="path7386" />
+    </clipPath>
+    <clipPath
+       id="clip1820">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7389" />
+    </clipPath>
+    <clipPath
+       id="clip1821">
+      <path
+         d="m 328,225 h 22 v 27 h -22 z m 0,0"
+         id="path7392" />
+    </clipPath>
+    <clipPath
+       id="clip1822">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7395" />
+    </clipPath>
+    <clipPath
+       id="clip1823">
+      <path
+         d="m 313,216.625 h 52 V 269 h -52 z m 0,0"
+         id="path7398" />
+    </clipPath>
+    <clipPath
+       id="clip1824">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7401" />
+    </clipPath>
+    <clipPath
+       id="clip1825">
+      <path
+         d="M 315.5,216.5 H 362 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7404" />
+    </clipPath>
+    <clipPath
+       id="clip1826">
+      <path
+         d="m 313,217 h 52 v 52 h -52 z m 0,0"
+         id="path7407" />
+    </clipPath>
+    <clipPath
+       id="clip1827">
+      <path
+         d="m 315.58594,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path7410" />
+    </clipPath>
+    <clipPath
+       id="clip1828">
+      <path
+         d="M 315.5,216.5 H 362 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7413" />
+    </clipPath>
+    <clipPath
+       id="clip1829">
+      <path
+         d="m 394.26172,216.625 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path7416" />
+    </clipPath>
+    <clipPath
+       id="clip1830">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7419" />
+    </clipPath>
+    <linearGradient
+       id="linear16"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.000512"
+       y1="105.00051"
+       x2="104.99949"
+       y2="0.000512"
+       gradientTransform="matrix(0.5,0,0,0.5,394.26251,216.625)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(79.214478%,32.548523%,46.665955%);stop-opacity:1;"
+         id="stop7422" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(79.223633%,32.655334%,46.742249%);stop-opacity:1;"
+         id="stop7424" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(79.241943%,32.868958%,46.894836%);stop-opacity:1;"
+         id="stop7426" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(79.260254%,33.084106%,47.04895%);stop-opacity:1;"
+         id="stop7428" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(79.278564%,33.297729%,47.201538%);stop-opacity:1;"
+         id="stop7430" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(79.296875%,33.512878%,47.355652%);stop-opacity:1;"
+         id="stop7432" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(79.316711%,33.728027%,47.50824%);stop-opacity:1;"
+         id="stop7434" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(79.335022%,33.94165%,47.660828%);stop-opacity:1;"
+         id="stop7436" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(79.353333%,34.156799%,47.814941%);stop-opacity:1;"
+         id="stop7438" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(79.371643%,34.370422%,47.967529%);stop-opacity:1;"
+         id="stop7440" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(79.389954%,34.585571%,48.120117%);stop-opacity:1;"
+         id="stop7442" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(79.408264%,34.799194%,48.274231%);stop-opacity:1;"
+         id="stop7444" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(79.426575%,35.014343%,48.426819%);stop-opacity:1;"
+         id="stop7446" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(79.444885%,35.227966%,48.580933%);stop-opacity:1;"
+         id="stop7448" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(79.463196%,35.443115%,48.733521%);stop-opacity:1;"
+         id="stop7450" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(79.481506%,35.656738%,48.886108%);stop-opacity:1;"
+         id="stop7452" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(79.499817%,35.871887%,49.040222%);stop-opacity:1;"
+         id="stop7454" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(79.518127%,36.087036%,49.19281%);stop-opacity:1;"
+         id="stop7456" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(79.536438%,36.300659%,49.346924%);stop-opacity:1;"
+         id="stop7458" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(79.554749%,36.515808%,49.499512%);stop-opacity:1;"
+         id="stop7460" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(79.573059%,36.729431%,49.6521%);stop-opacity:1;"
+         id="stop7462" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(79.59137%,36.94458%,49.806213%);stop-opacity:1;"
+         id="stop7464" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(79.60968%,37.158203%,49.958801%);stop-opacity:1;"
+         id="stop7466" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(79.627991%,37.373352%,50.112915%);stop-opacity:1;"
+         id="stop7468" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(79.646301%,37.586975%,50.265503%);stop-opacity:1;"
+         id="stop7470" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(79.664612%,37.802124%,50.418091%);stop-opacity:1;"
+         id="stop7472" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(79.682922%,38.015747%,50.572205%);stop-opacity:1;"
+         id="stop7474" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(79.702759%,38.230896%,50.724792%);stop-opacity:1;"
+         id="stop7476" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(79.721069%,38.446045%,50.878906%);stop-opacity:1;"
+         id="stop7478" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(79.73938%,38.659668%,51.031494%);stop-opacity:1;"
+         id="stop7480" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(79.75769%,38.874817%,51.184082%);stop-opacity:1;"
+         id="stop7482" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(79.776001%,39.08844%,51.338196%);stop-opacity:1;"
+         id="stop7484" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(79.794312%,39.303589%,51.490784%);stop-opacity:1;"
+         id="stop7486" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(79.812622%,39.517212%,51.643372%);stop-opacity:1;"
+         id="stop7488" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(79.821777%,39.625549%,51.721191%);stop-opacity:1;"
+         id="stop7490" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(79.830933%,39.732361%,51.797485%);stop-opacity:1;"
+         id="stop7492" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(79.849243%,39.945984%,51.950073%);stop-opacity:1;"
+         id="stop7494" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(79.867554%,40.161133%,52.104187%);stop-opacity:1;"
+         id="stop7496" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(79.885864%,40.376282%,52.256775%);stop-opacity:1;"
+         id="stop7498" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(79.904175%,40.589905%,52.409363%);stop-opacity:1;"
+         id="stop7500" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(79.922485%,40.805054%,52.563477%);stop-opacity:1;"
+         id="stop7502" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(79.940796%,41.018677%,52.716064%);stop-opacity:1;"
+         id="stop7504" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(79.959106%,41.233826%,52.870178%);stop-opacity:1;"
+         id="stop7506" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(79.977417%,41.447449%,53.022766%);stop-opacity:1;"
+         id="stop7508" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(79.995728%,41.662598%,53.175354%);stop-opacity:1;"
+         id="stop7510" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(80.014038%,41.876221%,53.329468%);stop-opacity:1;"
+         id="stop7512" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(80.032349%,42.09137%,53.482056%);stop-opacity:1;"
+         id="stop7514" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(80.050659%,42.304993%,53.636169%);stop-opacity:1;"
+         id="stop7516" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(80.06897%,42.520142%,53.788757%);stop-opacity:1;"
+         id="stop7518" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(80.088806%,42.735291%,53.941345%);stop-opacity:1;"
+         id="stop7520" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(80.107117%,42.948914%,54.095459%);stop-opacity:1;"
+         id="stop7522" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(80.125427%,43.164062%,54.248047%);stop-opacity:1;"
+         id="stop7524" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(80.143738%,43.377686%,54.402161%);stop-opacity:1;"
+         id="stop7526" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(80.162048%,43.592834%,54.554749%);stop-opacity:1;"
+         id="stop7528" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(80.180359%,43.806458%,54.707336%);stop-opacity:1;"
+         id="stop7530" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(80.198669%,44.021606%,54.86145%);stop-opacity:1;"
+         id="stop7532" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(80.21698%,44.235229%,55.014038%);stop-opacity:1;"
+         id="stop7534" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(80.235291%,44.450378%,55.168152%);stop-opacity:1;"
+         id="stop7536" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(80.253601%,44.665527%,55.32074%);stop-opacity:1;"
+         id="stop7538" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(80.271912%,44.87915%,55.473328%);stop-opacity:1;"
+         id="stop7540" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(80.290222%,45.094299%,55.627441%);stop-opacity:1;"
+         id="stop7542" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(80.308533%,45.307922%,55.780029%);stop-opacity:1;"
+         id="stop7544" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(80.326843%,45.523071%,55.932617%);stop-opacity:1;"
+         id="stop7546" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(80.345154%,45.736694%,56.086731%);stop-opacity:1;"
+         id="stop7548" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(80.363464%,45.951843%,56.239319%);stop-opacity:1;"
+         id="stop7550" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(80.381775%,46.165466%,56.393433%);stop-opacity:1;"
+         id="stop7552" />
+    </linearGradient>
+    <clipPath
+       id="clip1831">
+      <path
+         d="M 394.26172,268 H 395 v 1.125 h -0.73828 z m 0,0"
+         id="path7555" />
+    </clipPath>
+    <clipPath
+       id="clip1832">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7558" />
+    </clipPath>
+    <clipPath
+       id="clip1833">
+      <path
+         d="M 394.26172,267 H 396 v 2.125 h -1.73828 z m 0,0"
+         id="path7561" />
+    </clipPath>
+    <clipPath
+       id="clip1834">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7564" />
+    </clipPath>
+    <clipPath
+       id="clip1835">
+      <path
+         d="M 394.26172,267 H 397 v 2.125 h -2.73828 z m 0,0"
+         id="path7567" />
+    </clipPath>
+    <clipPath
+       id="clip1836">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7570" />
+    </clipPath>
+    <clipPath
+       id="clip1837">
+      <path
+         d="M 394.26172,266 H 397 v 3.125 h -2.73828 z m 0,0"
+         id="path7573" />
+    </clipPath>
+    <clipPath
+       id="clip1838">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7576" />
+    </clipPath>
+    <clipPath
+       id="clip1839">
+      <path
+         d="M 394.26172,265 H 398 v 4.125 h -3.73828 z m 0,0"
+         id="path7579" />
+    </clipPath>
+    <clipPath
+       id="clip1840">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7582" />
+    </clipPath>
+    <clipPath
+       id="clip1841">
+      <path
+         d="M 394.26172,264 H 399 v 5.125 h -4.73828 z m 0,0"
+         id="path7585" />
+    </clipPath>
+    <clipPath
+       id="clip1842">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7588" />
+    </clipPath>
+    <clipPath
+       id="clip1843">
+      <path
+         d="M 394.26172,264 H 400 v 5.125 h -5.73828 z m 0,0"
+         id="path7591" />
+    </clipPath>
+    <clipPath
+       id="clip1844">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7594" />
+    </clipPath>
+    <clipPath
+       id="clip1845">
+      <path
+         d="M 394.26172,263 H 400 v 6.125 h -5.73828 z m 0,0"
+         id="path7597" />
+    </clipPath>
+    <clipPath
+       id="clip1846">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7600" />
+    </clipPath>
+    <clipPath
+       id="clip1847">
+      <path
+         d="M 394.26172,262 H 401 v 7.125 h -6.73828 z m 0,0"
+         id="path7603" />
+    </clipPath>
+    <clipPath
+       id="clip1848">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7606" />
+    </clipPath>
+    <clipPath
+       id="clip1849">
+      <path
+         d="M 394.26172,261 H 402 v 8.125 h -7.73828 z m 0,0"
+         id="path7609" />
+    </clipPath>
+    <clipPath
+       id="clip1850">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7612" />
+    </clipPath>
+    <clipPath
+       id="clip1851">
+      <path
+         d="M 394.26172,261 H 403 v 8.125 h -8.73828 z m 0,0"
+         id="path7615" />
+    </clipPath>
+    <clipPath
+       id="clip1852">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7618" />
+    </clipPath>
+    <clipPath
+       id="clip1853">
+      <path
+         d="M 394.26172,260 H 403 v 9.125 h -8.73828 z m 0,0"
+         id="path7621" />
+    </clipPath>
+    <clipPath
+       id="clip1854">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7624" />
+    </clipPath>
+    <clipPath
+       id="clip1855">
+      <path
+         d="M 394.26172,259 H 404 v 10.125 h -9.73828 z m 0,0"
+         id="path7627" />
+    </clipPath>
+    <clipPath
+       id="clip1856">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7630" />
+    </clipPath>
+    <clipPath
+       id="clip1857">
+      <path
+         d="M 394.26172,258 H 405 v 11.125 h -10.73828 z m 0,0"
+         id="path7633" />
+    </clipPath>
+    <clipPath
+       id="clip1858">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7636" />
+    </clipPath>
+    <clipPath
+       id="clip1859">
+      <path
+         d="M 394.26172,258 H 406 v 11.125 h -11.73828 z m 0,0"
+         id="path7639" />
+    </clipPath>
+    <clipPath
+       id="clip1860">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7642" />
+    </clipPath>
+    <clipPath
+       id="clip1861">
+      <path
+         d="M 394.26172,257 H 406 v 12.125 h -11.73828 z m 0,0"
+         id="path7645" />
+    </clipPath>
+    <clipPath
+       id="clip1862">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7648" />
+    </clipPath>
+    <clipPath
+       id="clip1863">
+      <path
+         d="M 394.26172,256 H 407 v 13.125 h -12.73828 z m 0,0"
+         id="path7651" />
+    </clipPath>
+    <clipPath
+       id="clip1864">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7654" />
+    </clipPath>
+    <clipPath
+       id="clip1865">
+      <path
+         d="M 394.26172,255 H 408 v 14.125 h -13.73828 z m 0,0"
+         id="path7657" />
+    </clipPath>
+    <clipPath
+       id="clip1866">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7660" />
+    </clipPath>
+    <clipPath
+       id="clip1867">
+      <path
+         d="M 394.26172,255 H 409 v 14.125 h -14.73828 z m 0,0"
+         id="path7663" />
+    </clipPath>
+    <clipPath
+       id="clip1868">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7666" />
+    </clipPath>
+    <clipPath
+       id="clip1869">
+      <path
+         d="M 394.26172,254 H 409 v 15.125 h -14.73828 z m 0,0"
+         id="path7669" />
+    </clipPath>
+    <clipPath
+       id="clip1870">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7672" />
+    </clipPath>
+    <clipPath
+       id="clip1871">
+      <path
+         d="M 394.26172,253 H 410 v 16.125 h -15.73828 z m 0,0"
+         id="path7675" />
+    </clipPath>
+    <clipPath
+       id="clip1872">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7678" />
+    </clipPath>
+    <clipPath
+       id="clip1873">
+      <path
+         d="M 394.26172,252 H 411 v 17.125 h -16.73828 z m 0,0"
+         id="path7681" />
+    </clipPath>
+    <clipPath
+       id="clip1874">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7684" />
+    </clipPath>
+    <clipPath
+       id="clip1875">
+      <path
+         d="M 394.26172,252 H 412 v 17.125 h -17.73828 z m 0,0"
+         id="path7687" />
+    </clipPath>
+    <clipPath
+       id="clip1876">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7690" />
+    </clipPath>
+    <clipPath
+       id="clip1877">
+      <path
+         d="M 394.26172,251 H 412 v 18.125 h -17.73828 z m 0,0"
+         id="path7693" />
+    </clipPath>
+    <clipPath
+       id="clip1878">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7696" />
+    </clipPath>
+    <clipPath
+       id="clip1879">
+      <path
+         d="M 394.26172,250 H 413 v 19.125 h -18.73828 z m 0,0"
+         id="path7699" />
+    </clipPath>
+    <clipPath
+       id="clip1880">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7702" />
+    </clipPath>
+    <clipPath
+       id="clip1881">
+      <path
+         d="M 394.26172,249 H 414 v 20.125 h -19.73828 z m 0,0"
+         id="path7705" />
+    </clipPath>
+    <clipPath
+       id="clip1882">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7708" />
+    </clipPath>
+    <clipPath
+       id="clip1883">
+      <path
+         d="M 394.26172,249 H 415 v 20.125 h -20.73828 z m 0,0"
+         id="path7711" />
+    </clipPath>
+    <clipPath
+       id="clip1884">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7714" />
+    </clipPath>
+    <clipPath
+       id="clip1885">
+      <path
+         d="M 394.26172,248 H 415 v 21.125 h -20.73828 z m 0,0"
+         id="path7717" />
+    </clipPath>
+    <clipPath
+       id="clip1886">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7720" />
+    </clipPath>
+    <clipPath
+       id="clip1887">
+      <path
+         d="M 394.26172,247 H 416 v 22.125 h -21.73828 z m 0,0"
+         id="path7723" />
+    </clipPath>
+    <clipPath
+       id="clip1888">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7726" />
+    </clipPath>
+    <clipPath
+       id="clip1889">
+      <path
+         d="M 394.26172,246 H 417 v 23.125 h -22.73828 z m 0,0"
+         id="path7729" />
+    </clipPath>
+    <clipPath
+       id="clip1890">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7732" />
+    </clipPath>
+    <clipPath
+       id="clip1891">
+      <path
+         d="M 394.26172,246 H 418 v 23.125 h -23.73828 z m 0,0"
+         id="path7735" />
+    </clipPath>
+    <clipPath
+       id="clip1892">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7738" />
+    </clipPath>
+    <clipPath
+       id="clip1893">
+      <path
+         d="M 394.26172,245 H 418 v 24.125 h -23.73828 z m 0,0"
+         id="path7741" />
+    </clipPath>
+    <clipPath
+       id="clip1894">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7744" />
+    </clipPath>
+    <clipPath
+       id="clip1895">
+      <path
+         d="M 394.26172,244 H 419 v 25.125 h -24.73828 z m 0,0"
+         id="path7747" />
+    </clipPath>
+    <clipPath
+       id="clip1896">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7750" />
+    </clipPath>
+    <clipPath
+       id="clip1897">
+      <path
+         d="M 394.26172,243 H 420 v 26.125 h -25.73828 z m 0,0"
+         id="path7753" />
+    </clipPath>
+    <clipPath
+       id="clip1898">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7756" />
+    </clipPath>
+    <clipPath
+       id="clip1899">
+      <path
+         d="M 394.26172,243 H 421 v 26.125 h -26.73828 z m 0,0"
+         id="path7759" />
+    </clipPath>
+    <clipPath
+       id="clip1900">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7762" />
+    </clipPath>
+    <clipPath
+       id="clip1901">
+      <path
+         d="M 394.26172,242 H 421 v 27 h -26.73828 z m 0,0"
+         id="path7765" />
+    </clipPath>
+    <clipPath
+       id="clip1902">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7768" />
+    </clipPath>
+    <clipPath
+       id="clip1903">
+      <path
+         d="m 395,241 h 27 v 27 h -27 z m 0,0"
+         id="path7771" />
+    </clipPath>
+    <clipPath
+       id="clip1904">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7774" />
+    </clipPath>
+    <clipPath
+       id="clip1905">
+      <path
+         d="m 396,240 h 27 v 28 h -27 z m 0,0"
+         id="path7777" />
+    </clipPath>
+    <clipPath
+       id="clip1906">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7780" />
+    </clipPath>
+    <clipPath
+       id="clip1907">
+      <path
+         d="m 396,240 h 28 v 27 h -28 z m 0,0"
+         id="path7783" />
+    </clipPath>
+    <clipPath
+       id="clip1908">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7786" />
+    </clipPath>
+    <clipPath
+       id="clip1909">
+      <path
+         d="m 397,239 h 27 v 27 h -27 z m 0,0"
+         id="path7789" />
+    </clipPath>
+    <clipPath
+       id="clip1910">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7792" />
+    </clipPath>
+    <clipPath
+       id="clip1911">
+      <path
+         d="m 398,238 h 27 v 27 h -27 z m 0,0"
+         id="path7795" />
+    </clipPath>
+    <clipPath
+       id="clip1912">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7798" />
+    </clipPath>
+    <clipPath
+       id="clip1913">
+      <path
+         d="m 399,237 h 27 v 28 h -27 z m 0,0"
+         id="path7801" />
+    </clipPath>
+    <clipPath
+       id="clip1914">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7804" />
+    </clipPath>
+    <clipPath
+       id="clip1915">
+      <path
+         d="m 399,237 h 28 v 27 h -28 z m 0,0"
+         id="path7807" />
+    </clipPath>
+    <clipPath
+       id="clip1916">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7810" />
+    </clipPath>
+    <clipPath
+       id="clip1917">
+      <path
+         d="m 400,236 h 27 v 27 h -27 z m 0,0"
+         id="path7813" />
+    </clipPath>
+    <clipPath
+       id="clip1918">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7816" />
+    </clipPath>
+    <clipPath
+       id="clip1919">
+      <path
+         d="m 401,235 h 27 v 27 h -27 z m 0,0"
+         id="path7819" />
+    </clipPath>
+    <clipPath
+       id="clip1920">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7822" />
+    </clipPath>
+    <clipPath
+       id="clip1921">
+      <path
+         d="m 402,234 h 27 v 28 h -27 z m 0,0"
+         id="path7825" />
+    </clipPath>
+    <clipPath
+       id="clip1922">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7828" />
+    </clipPath>
+    <clipPath
+       id="clip1923">
+      <path
+         d="m 402,234 h 28 v 27 h -28 z m 0,0"
+         id="path7831" />
+    </clipPath>
+    <clipPath
+       id="clip1924">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7834" />
+    </clipPath>
+    <clipPath
+       id="clip1925">
+      <path
+         d="m 403,233 h 27 v 27 h -27 z m 0,0"
+         id="path7837" />
+    </clipPath>
+    <clipPath
+       id="clip1926">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7840" />
+    </clipPath>
+    <clipPath
+       id="clip1927">
+      <path
+         d="m 404,232 h 27 v 27 h -27 z m 0,0"
+         id="path7843" />
+    </clipPath>
+    <clipPath
+       id="clip1928">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7846" />
+    </clipPath>
+    <clipPath
+       id="clip1929">
+      <path
+         d="m 405,231 h 27 v 28 h -27 z m 0,0"
+         id="path7849" />
+    </clipPath>
+    <clipPath
+       id="clip1930">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7852" />
+    </clipPath>
+    <clipPath
+       id="clip1931">
+      <path
+         d="m 405,231 h 28 v 27 h -28 z m 0,0"
+         id="path7855" />
+    </clipPath>
+    <clipPath
+       id="clip1932">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7858" />
+    </clipPath>
+    <clipPath
+       id="clip1933">
+      <path
+         d="m 406,230 h 27 v 27 h -27 z m 0,0"
+         id="path7861" />
+    </clipPath>
+    <clipPath
+       id="clip1934">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7864" />
+    </clipPath>
+    <clipPath
+       id="clip1935">
+      <path
+         d="m 407,229 h 27 v 27 h -27 z m 0,0"
+         id="path7867" />
+    </clipPath>
+    <clipPath
+       id="clip1936">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7870" />
+    </clipPath>
+    <clipPath
+       id="clip1937">
+      <path
+         d="m 394.26172,216.625 h 52.5 V 269 h -52.5 z m 0,0"
+         id="path7873" />
+    </clipPath>
+    <clipPath
+       id="clip1938">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7876" />
+    </clipPath>
+    <clipPath
+       id="clip1939">
+      <path
+         d="M 397.5,216.5 H 444 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7879" />
+    </clipPath>
+    <clipPath
+       id="clip1940">
+      <path
+         d="m 394.26172,217 h 52.5 v 52 h -52.5 z m 0,0"
+         id="path7882" />
+    </clipPath>
+    <clipPath
+       id="clip1941">
+      <path
+         d="m 397.26172,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7885" />
+    </clipPath>
+    <clipPath
+       id="clip1942">
+      <path
+         d="M 397.5,216.5 H 444 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7888" />
+    </clipPath>
+    <clipPath
+       id="clip1943">
+      <path
+         d="m 475.9375,216.625 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path7891" />
+    </clipPath>
+    <clipPath
+       id="clip1944">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path7894" />
+    </clipPath>
+    <linearGradient
+       id="linear17"
+       gradientUnits="userSpaceOnUse"
+       x1="0.00050000002"
+       y1="104.9995"
+       x2="105.0005"
+       y2="-0.00050000002"
+       gradientTransform="matrix(0.5,0,0,0.5,475.9375,216.625)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(32.940674%,33.332825%,32.940674%);stop-opacity:1;"
+         id="stop7897" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(33.053589%,33.451843%,33.053589%);stop-opacity:1;"
+         id="stop7899" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(33.279419%,33.68988%,33.279419%);stop-opacity:1;"
+         id="stop7901" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(33.506775%,33.929443%,33.506775%);stop-opacity:1;"
+         id="stop7903" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(33.734131%,34.169006%,33.734131%);stop-opacity:1;"
+         id="stop7905" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(33.959961%,34.407043%,33.959961%);stop-opacity:1;"
+         id="stop7907" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(34.187317%,34.646606%,34.187317%);stop-opacity:1;"
+         id="stop7909" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(34.413147%,34.886169%,34.413147%);stop-opacity:1;"
+         id="stop7911" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(34.640503%,35.124207%,34.640503%);stop-opacity:1;"
+         id="stop7913" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(34.867859%,35.36377%,34.867859%);stop-opacity:1;"
+         id="stop7915" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(35.093689%,35.601807%,35.093689%);stop-opacity:1;"
+         id="stop7917" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(35.321045%,35.84137%,35.321045%);stop-opacity:1;"
+         id="stop7919" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(35.546875%,36.080933%,35.546875%);stop-opacity:1;"
+         id="stop7921" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(35.774231%,36.31897%,35.774231%);stop-opacity:1;"
+         id="stop7923" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(36.000061%,36.558533%,36.000061%);stop-opacity:1;"
+         id="stop7925" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(36.227417%,36.79657%,36.227417%);stop-opacity:1;"
+         id="stop7927" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(36.454773%,37.036133%,36.454773%);stop-opacity:1;"
+         id="stop7929" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(36.680603%,37.275696%,36.680603%);stop-opacity:1;"
+         id="stop7931" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(36.907959%,37.513733%,36.907959%);stop-opacity:1;"
+         id="stop7933" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(37.133789%,37.753296%,37.133789%);stop-opacity:1;"
+         id="stop7935" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(37.361145%,37.991333%,37.361145%);stop-opacity:1;"
+         id="stop7937" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(37.586975%,38.230896%,37.586975%);stop-opacity:1;"
+         id="stop7939" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(37.814331%,38.470459%,37.814331%);stop-opacity:1;"
+         id="stop7941" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(38.041687%,38.708496%,38.041687%);stop-opacity:1;"
+         id="stop7943" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(38.267517%,38.948059%,38.267517%);stop-opacity:1;"
+         id="stop7945" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(38.494873%,39.187622%,38.494873%);stop-opacity:1;"
+         id="stop7947" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(38.720703%,39.425659%,38.720703%);stop-opacity:1;"
+         id="stop7949" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(38.948059%,39.665222%,38.948059%);stop-opacity:1;"
+         id="stop7951" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(39.175415%,39.903259%,39.175415%);stop-opacity:1;"
+         id="stop7953" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(39.401245%,40.142822%,39.401245%);stop-opacity:1;"
+         id="stop7955" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(39.628601%,40.382385%,39.628601%);stop-opacity:1;"
+         id="stop7957" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(39.854431%,40.620422%,39.854431%);stop-opacity:1;"
+         id="stop7959" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(40.081787%,40.859985%,40.081787%);stop-opacity:1;"
+         id="stop7961" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(40.194702%,40.979004%,40.194702%);stop-opacity:1;"
+         id="stop7963" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(40.307617%,41.098022%,40.307617%);stop-opacity:1;"
+         id="stop7965" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(40.422058%,41.218567%,40.422058%);stop-opacity:1;"
+         id="stop7967" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(40.534973%,41.337585%,40.534973%);stop-opacity:1;"
+         id="stop7969" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(40.762329%,41.577148%,40.762329%);stop-opacity:1;"
+         id="stop7971" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(40.988159%,41.815186%,40.988159%);stop-opacity:1;"
+         id="stop7973" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(41.215515%,42.054749%,41.215515%);stop-opacity:1;"
+         id="stop7975" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(41.441345%,42.294312%,41.441345%);stop-opacity:1;"
+         id="stop7977" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(41.668701%,42.532349%,41.668701%);stop-opacity:1;"
+         id="stop7979" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(41.896057%,42.771912%,41.896057%);stop-opacity:1;"
+         id="stop7981" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(42.121887%,43.009949%,42.121887%);stop-opacity:1;"
+         id="stop7983" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(42.349243%,43.249512%,42.349243%);stop-opacity:1;"
+         id="stop7985" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(42.575073%,43.489075%,42.575073%);stop-opacity:1;"
+         id="stop7987" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(42.802429%,43.727112%,42.802429%);stop-opacity:1;"
+         id="stop7989" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(43.028259%,43.966675%,43.028259%);stop-opacity:1;"
+         id="stop7991" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(43.255615%,44.204712%,43.255615%);stop-opacity:1;"
+         id="stop7993" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(43.482971%,44.444275%,43.482971%);stop-opacity:1;"
+         id="stop7995" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(43.708801%,44.683838%,43.708801%);stop-opacity:1;"
+         id="stop7997" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(43.936157%,44.921875%,43.936157%);stop-opacity:1;"
+         id="stop7999" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(44.161987%,45.161438%,44.161987%);stop-opacity:1;"
+         id="stop8001" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(44.389343%,45.399475%,44.389343%);stop-opacity:1;"
+         id="stop8003" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(44.615173%,45.639038%,44.615173%);stop-opacity:1;"
+         id="stop8005" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(44.842529%,45.878601%,44.842529%);stop-opacity:1;"
+         id="stop8007" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(45.069885%,46.116638%,45.069885%);stop-opacity:1;"
+         id="stop8009" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(45.295715%,46.356201%,45.295715%);stop-opacity:1;"
+         id="stop8011" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(45.523071%,46.595764%,45.523071%);stop-opacity:1;"
+         id="stop8013" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(45.748901%,46.833801%,45.748901%);stop-opacity:1;"
+         id="stop8015" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(45.976257%,47.073364%,45.976257%);stop-opacity:1;"
+         id="stop8017" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(46.203613%,47.311401%,46.203613%);stop-opacity:1;"
+         id="stop8019" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(46.429443%,47.550964%,46.429443%);stop-opacity:1;"
+         id="stop8021" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(46.656799%,47.790527%,46.656799%);stop-opacity:1;"
+         id="stop8023" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(46.882629%,48.028564%,46.882629%);stop-opacity:1;"
+         id="stop8025" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(47.109985%,48.268127%,47.109985%);stop-opacity:1;"
+         id="stop8027" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(47.335815%,48.506165%,47.335815%);stop-opacity:1;"
+         id="stop8029" />
+    </linearGradient>
+    <clipPath
+       id="clip1945">
+      <path
+         d="M 475.9375,268 H 476 v 1.125 h -0.0625 z m 0,0"
+         id="path8032" />
+    </clipPath>
+    <clipPath
+       id="clip1946">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8035" />
+    </clipPath>
+    <clipPath
+       id="clip1947">
+      <path
+         d="M 475.9375,267 H 476 v 2.125 h -0.0625 z m 0,0"
+         id="path8038" />
+    </clipPath>
+    <clipPath
+       id="clip1948">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8041" />
+    </clipPath>
+    <clipPath
+       id="clip1949">
+      <path
+         d="M 475.9375,266 H 477 v 3.125 h -1.0625 z m 0,0"
+         id="path8044" />
+    </clipPath>
+    <clipPath
+       id="clip1950">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8047" />
+    </clipPath>
+    <clipPath
+       id="clip1951">
+      <path
+         d="M 475.9375,265 H 478 v 4.125 h -2.0625 z m 0,0"
+         id="path8050" />
+    </clipPath>
+    <clipPath
+       id="clip1952">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8053" />
+    </clipPath>
+    <clipPath
+       id="clip1953">
+      <path
+         d="M 475.9375,265 H 479 v 4.125 h -3.0625 z m 0,0"
+         id="path8056" />
+    </clipPath>
+    <clipPath
+       id="clip1954">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8059" />
+    </clipPath>
+    <clipPath
+       id="clip1955">
+      <path
+         d="M 475.9375,264 H 479 v 5.125 h -3.0625 z m 0,0"
+         id="path8062" />
+    </clipPath>
+    <clipPath
+       id="clip1956">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8065" />
+    </clipPath>
+    <clipPath
+       id="clip1957">
+      <path
+         d="M 475.9375,263 H 480 v 6.125 h -4.0625 z m 0,0"
+         id="path8068" />
+    </clipPath>
+    <clipPath
+       id="clip1958">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8071" />
+    </clipPath>
+    <clipPath
+       id="clip1959">
+      <path
+         d="M 475.9375,262 H 481 v 7.125 h -5.0625 z m 0,0"
+         id="path8074" />
+    </clipPath>
+    <clipPath
+       id="clip1960">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8077" />
+    </clipPath>
+    <clipPath
+       id="clip1961">
+      <path
+         d="M 475.9375,262 H 482 v 7.125 h -6.0625 z m 0,0"
+         id="path8080" />
+    </clipPath>
+    <clipPath
+       id="clip1962">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8083" />
+    </clipPath>
+    <clipPath
+       id="clip1963">
+      <path
+         d="M 475.9375,261 H 482 v 8.125 h -6.0625 z m 0,0"
+         id="path8086" />
+    </clipPath>
+    <clipPath
+       id="clip1964">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8089" />
+    </clipPath>
+    <clipPath
+       id="clip1965">
+      <path
+         d="M 475.9375,260 H 483 v 9.125 h -7.0625 z m 0,0"
+         id="path8092" />
+    </clipPath>
+    <clipPath
+       id="clip1966">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8095" />
+    </clipPath>
+    <clipPath
+       id="clip1967">
+      <path
+         d="M 475.9375,259 H 484 v 10.125 h -8.0625 z m 0,0"
+         id="path8098" />
+    </clipPath>
+    <clipPath
+       id="clip1968">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8101" />
+    </clipPath>
+    <clipPath
+       id="clip1969">
+      <path
+         d="M 475.9375,259 H 485 v 10.125 h -9.0625 z m 0,0"
+         id="path8104" />
+    </clipPath>
+    <clipPath
+       id="clip1970">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8107" />
+    </clipPath>
+    <clipPath
+       id="clip1971">
+      <path
+         d="M 475.9375,258 H 485 v 11.125 h -9.0625 z m 0,0"
+         id="path8110" />
+    </clipPath>
+    <clipPath
+       id="clip1972">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8113" />
+    </clipPath>
+    <clipPath
+       id="clip1973">
+      <path
+         d="M 475.9375,257 H 486 v 12.125 h -10.0625 z m 0,0"
+         id="path8116" />
+    </clipPath>
+    <clipPath
+       id="clip1974">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8119" />
+    </clipPath>
+    <clipPath
+       id="clip1975">
+      <path
+         d="M 475.9375,256 H 487 v 13.125 h -11.0625 z m 0,0"
+         id="path8122" />
+    </clipPath>
+    <clipPath
+       id="clip1976">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8125" />
+    </clipPath>
+    <clipPath
+       id="clip1977">
+      <path
+         d="M 475.9375,256 H 488 v 13.125 h -12.0625 z m 0,0"
+         id="path8128" />
+    </clipPath>
+    <clipPath
+       id="clip1978">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8131" />
+    </clipPath>
+    <clipPath
+       id="clip1979">
+      <path
+         d="M 475.9375,255 H 488 v 14.125 h -12.0625 z m 0,0"
+         id="path8134" />
+    </clipPath>
+    <clipPath
+       id="clip1980">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8137" />
+    </clipPath>
+    <clipPath
+       id="clip1981">
+      <path
+         d="M 475.9375,254 H 489 v 15.125 h -13.0625 z m 0,0"
+         id="path8140" />
+    </clipPath>
+    <clipPath
+       id="clip1982">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8143" />
+    </clipPath>
+    <clipPath
+       id="clip1983">
+      <path
+         d="M 475.9375,253 H 490 v 16 h -14.0625 z m 0,0"
+         id="path8146" />
+    </clipPath>
+    <clipPath
+       id="clip1984">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8149" />
+    </clipPath>
+    <clipPath
+       id="clip1985">
+      <path
+         d="M 475.9375,253 H 491 v 15 h -15.0625 z m 0,0"
+         id="path8152" />
+    </clipPath>
+    <clipPath
+       id="clip1986">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8155" />
+    </clipPath>
+    <clipPath
+       id="clip1987">
+      <path
+         d="M 475.9375,252 H 491 v 16 h -15.0625 z m 0,0"
+         id="path8158" />
+    </clipPath>
+    <clipPath
+       id="clip1988">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8161" />
+    </clipPath>
+    <clipPath
+       id="clip1989">
+      <path
+         d="m 476,251 h 16 v 16 h -16 z m 0,0"
+         id="path8164" />
+    </clipPath>
+    <clipPath
+       id="clip1990">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8167" />
+    </clipPath>
+    <clipPath
+       id="clip1991">
+      <path
+         d="m 477,250 h 16 v 16 h -16 z m 0,0"
+         id="path8170" />
+    </clipPath>
+    <clipPath
+       id="clip1992">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8173" />
+    </clipPath>
+    <clipPath
+       id="clip1993">
+      <path
+         d="m 478,250 h 16 v 15 h -16 z m 0,0"
+         id="path8176" />
+    </clipPath>
+    <clipPath
+       id="clip1994">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8179" />
+    </clipPath>
+    <clipPath
+       id="clip1995">
+      <path
+         d="m 478,249 h 16 v 16 h -16 z m 0,0"
+         id="path8182" />
+    </clipPath>
+    <clipPath
+       id="clip1996">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8185" />
+    </clipPath>
+    <clipPath
+       id="clip1997">
+      <path
+         d="m 479,248 h 16 v 16 h -16 z m 0,0"
+         id="path8188" />
+    </clipPath>
+    <clipPath
+       id="clip1998">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8191" />
+    </clipPath>
+    <clipPath
+       id="clip1999">
+      <path
+         d="m 480,247 h 16 v 16 h -16 z m 0,0"
+         id="path8194" />
+    </clipPath>
+    <clipPath
+       id="clip2000">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8197" />
+    </clipPath>
+    <clipPath
+       id="clip2001">
+      <path
+         d="m 481,247 h 16 v 15 h -16 z m 0,0"
+         id="path8200" />
+    </clipPath>
+    <clipPath
+       id="clip2002">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8203" />
+    </clipPath>
+    <clipPath
+       id="clip2003">
+      <path
+         d="m 481,246 h 16 v 16 h -16 z m 0,0"
+         id="path8206" />
+    </clipPath>
+    <clipPath
+       id="clip2004">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8209" />
+    </clipPath>
+    <clipPath
+       id="clip2005">
+      <path
+         d="m 482,245 h 16 v 16 h -16 z m 0,0"
+         id="path8212" />
+    </clipPath>
+    <clipPath
+       id="clip2006">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8215" />
+    </clipPath>
+    <clipPath
+       id="clip2007">
+      <path
+         d="m 483,244 h 16 v 16 h -16 z m 0,0"
+         id="path8218" />
+    </clipPath>
+    <clipPath
+       id="clip2008">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8221" />
+    </clipPath>
+    <clipPath
+       id="clip2009">
+      <path
+         d="m 484,244 h 16 v 15 h -16 z m 0,0"
+         id="path8224" />
+    </clipPath>
+    <clipPath
+       id="clip2010">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8227" />
+    </clipPath>
+    <clipPath
+       id="clip2011">
+      <path
+         d="m 484,243 h 16 v 16 h -16 z m 0,0"
+         id="path8230" />
+    </clipPath>
+    <clipPath
+       id="clip2012">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8233" />
+    </clipPath>
+    <clipPath
+       id="clip2013">
+      <path
+         d="m 485,242 h 16 v 16 h -16 z m 0,0"
+         id="path8236" />
+    </clipPath>
+    <clipPath
+       id="clip2014">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8239" />
+    </clipPath>
+    <clipPath
+       id="clip2015">
+      <path
+         d="m 486,241 h 16 v 16 h -16 z m 0,0"
+         id="path8242" />
+    </clipPath>
+    <clipPath
+       id="clip2016">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8245" />
+    </clipPath>
+    <clipPath
+       id="clip2017">
+      <path
+         d="m 487,241 h 16 v 15 h -16 z m 0,0"
+         id="path8248" />
+    </clipPath>
+    <clipPath
+       id="clip2018">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8251" />
+    </clipPath>
+    <clipPath
+       id="clip2019">
+      <path
+         d="m 487,240 h 16 v 16 h -16 z m 0,0"
+         id="path8254" />
+    </clipPath>
+    <clipPath
+       id="clip2020">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8257" />
+    </clipPath>
+    <clipPath
+       id="clip2021">
+      <path
+         d="m 488,239 h 16 v 16 h -16 z m 0,0"
+         id="path8260" />
+    </clipPath>
+    <clipPath
+       id="clip2022">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8263" />
+    </clipPath>
+    <clipPath
+       id="clip2023">
+      <path
+         d="m 489,238 h 16 v 16 h -16 z m 0,0"
+         id="path8266" />
+    </clipPath>
+    <clipPath
+       id="clip2024">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8269" />
+    </clipPath>
+    <clipPath
+       id="clip2025">
+      <path
+         d="m 490,238 h 16 v 15 h -16 z m 0,0"
+         id="path8272" />
+    </clipPath>
+    <clipPath
+       id="clip2026">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8275" />
+    </clipPath>
+    <clipPath
+       id="clip2027">
+      <path
+         d="m 490,237 h 16 v 16 h -16 z m 0,0"
+         id="path8278" />
+    </clipPath>
+    <clipPath
+       id="clip2028">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8281" />
+    </clipPath>
+    <clipPath
+       id="clip2029">
+      <path
+         d="m 491,236 h 16 v 16 h -16 z m 0,0"
+         id="path8284" />
+    </clipPath>
+    <clipPath
+       id="clip2030">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8287" />
+    </clipPath>
+    <clipPath
+       id="clip2031">
+      <path
+         d="m 492,235 h 16 v 16 h -16 z m 0,0"
+         id="path8290" />
+    </clipPath>
+    <clipPath
+       id="clip2032">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8293" />
+    </clipPath>
+    <clipPath
+       id="clip2033">
+      <path
+         d="m 493,235 h 16 v 15 h -16 z m 0,0"
+         id="path8296" />
+    </clipPath>
+    <clipPath
+       id="clip2034">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8299" />
+    </clipPath>
+    <clipPath
+       id="clip2035">
+      <path
+         d="m 493,234 h 16 v 16 h -16 z m 0,0"
+         id="path8302" />
+    </clipPath>
+    <clipPath
+       id="clip2036">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8305" />
+    </clipPath>
+    <clipPath
+       id="clip2037">
+      <path
+         d="m 494,233 h 16 v 16 h -16 z m 0,0"
+         id="path8308" />
+    </clipPath>
+    <clipPath
+       id="clip2038">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8311" />
+    </clipPath>
+    <clipPath
+       id="clip2039">
+      <path
+         d="m 476,216.625 h 52.4375 V 269 H 476 Z m 0,0"
+         id="path8314" />
+    </clipPath>
+    <clipPath
+       id="clip2040">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8317" />
+    </clipPath>
+    <clipPath
+       id="clip2041">
+      <path
+         d="m 479,216.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 479 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8320" />
+    </clipPath>
+    <clipPath
+       id="clip2042">
+      <path
+         d="m 476,217 h 52.4375 v 52 H 476 Z m 0,0"
+         id="path8323" />
+    </clipPath>
+    <clipPath
+       id="clip2043">
+      <path
+         d="m 478.9375,216.625 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8326" />
+    </clipPath>
+    <clipPath
+       id="clip2044">
+      <path
+         d="m 479,216.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 266 c 0,1.65625 -1.34375,3 -3,3 H 479 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8329" />
+    </clipPath>
+    <clipPath
+       id="clip2045">
+      <path
+         d="m 108.39844,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path8332" />
+    </clipPath>
+    <clipPath
+       id="clip2046">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8335" />
+    </clipPath>
+    <linearGradient
+       id="linear18"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.0020020001"
+       y1="105.002"
+       x2="104.998"
+       y2="0.0020020001"
+       gradientTransform="matrix(0.5,0,0,0.5,108.4,300.375)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(12.940979%,52.548218%,53.72467%);stop-opacity:1;"
+         id="stop8338" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(13.002014%,52.706909%,53.883362%);stop-opacity:1;"
+         id="stop8340" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(13.124084%,53.025818%,54.202271%);stop-opacity:1;"
+         id="stop8342" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(13.246155%,53.344727%,54.521179%);stop-opacity:1;"
+         id="stop8344" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(13.369751%,53.662109%,54.838562%);stop-opacity:1;"
+         id="stop8346" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(13.491821%,53.981018%,55.157471%);stop-opacity:1;"
+         id="stop8348" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(13.613892%,54.299927%,55.476379%);stop-opacity:1;"
+         id="stop8350" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(13.737488%,54.618835%,55.795288%);stop-opacity:1;"
+         id="stop8352" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.859558%,54.937744%,56.114197%);stop-opacity:1;"
+         id="stop8354" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(13.981628%,55.255127%,56.43158%);stop-opacity:1;"
+         id="stop8356" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(14.042664%,55.415344%,56.591797%);stop-opacity:1;"
+         id="stop8358" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(14.103699%,55.574036%,56.750488%);stop-opacity:1;"
+         id="stop8360" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(14.227295%,55.892944%,57.069397%);stop-opacity:1;"
+         id="stop8362" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(14.349365%,56.211853%,57.388306%);stop-opacity:1;"
+         id="stop8364" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(14.471436%,56.530762%,57.707214%);stop-opacity:1;"
+         id="stop8366" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(14.595032%,56.84967%,58.026123%);stop-opacity:1;"
+         id="stop8368" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(14.717102%,57.167053%,58.343506%);stop-opacity:1;"
+         id="stop8370" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(14.839172%,57.485962%,58.662415%);stop-opacity:1;"
+         id="stop8372" />
+    </linearGradient>
+    <clipPath
+       id="clip2047">
+      <path
+         d="M 108.39844,349 H 109 v 3.875 h -0.60156 z m 0,0"
+         id="path8375" />
+    </clipPath>
+    <clipPath
+       id="clip2048">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8378" />
+    </clipPath>
+    <clipPath
+       id="clip2049">
+      <path
+         d="M 108.39844,348 H 109 v 4.875 h -0.60156 z m 0,0"
+         id="path8381" />
+    </clipPath>
+    <clipPath
+       id="clip2050">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8384" />
+    </clipPath>
+    <clipPath
+       id="clip2051">
+      <path
+         d="M 108.39844,347 H 110 v 5.875 h -1.60156 z m 0,0"
+         id="path8387" />
+    </clipPath>
+    <clipPath
+       id="clip2052">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8390" />
+    </clipPath>
+    <clipPath
+       id="clip2053">
+      <path
+         d="M 108.39844,347 H 111 v 5.875 h -2.60156 z m 0,0"
+         id="path8393" />
+    </clipPath>
+    <clipPath
+       id="clip2054">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8396" />
+    </clipPath>
+    <clipPath
+       id="clip2055">
+      <path
+         d="M 108.39844,346 H 112 v 6.875 h -3.60156 z m 0,0"
+         id="path8399" />
+    </clipPath>
+    <clipPath
+       id="clip2056">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8402" />
+    </clipPath>
+    <clipPath
+       id="clip2057">
+      <path
+         d="M 108.39844,345 H 112 v 7.875 h -3.60156 z m 0,0"
+         id="path8405" />
+    </clipPath>
+    <clipPath
+       id="clip2058">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8408" />
+    </clipPath>
+    <clipPath
+       id="clip2059">
+      <path
+         d="M 108.39844,344 H 113 v 8.875 h -4.60156 z m 0,0"
+         id="path8411" />
+    </clipPath>
+    <clipPath
+       id="clip2060">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8414" />
+    </clipPath>
+    <clipPath
+       id="clip2061">
+      <path
+         d="M 108.39844,344 H 114 v 8.875 h -5.60156 z m 0,0"
+         id="path8417" />
+    </clipPath>
+    <clipPath
+       id="clip2062">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8420" />
+    </clipPath>
+    <clipPath
+       id="clip2063">
+      <path
+         d="M 108.39844,343 H 115 v 9.875 h -6.60156 z m 0,0"
+         id="path8423" />
+    </clipPath>
+    <clipPath
+       id="clip2064">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8426" />
+    </clipPath>
+    <clipPath
+       id="clip2065">
+      <path
+         d="M 108.39844,342 H 115 v 10.875 h -6.60156 z m 0,0"
+         id="path8429" />
+    </clipPath>
+    <clipPath
+       id="clip2066">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8432" />
+    </clipPath>
+    <clipPath
+       id="clip2067">
+      <path
+         d="M 108.39844,341 H 116 v 11.875 h -7.60156 z m 0,0"
+         id="path8435" />
+    </clipPath>
+    <clipPath
+       id="clip2068">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8438" />
+    </clipPath>
+    <clipPath
+       id="clip2069">
+      <path
+         d="M 108.39844,341 H 117 v 11.875 h -8.60156 z m 0,0"
+         id="path8441" />
+    </clipPath>
+    <clipPath
+       id="clip2070">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8444" />
+    </clipPath>
+    <clipPath
+       id="clip2071">
+      <path
+         d="M 108.39844,340 H 118 v 12.875 h -9.60156 z m 0,0"
+         id="path8447" />
+    </clipPath>
+    <clipPath
+       id="clip2072">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8450" />
+    </clipPath>
+    <clipPath
+       id="clip2073">
+      <path
+         d="M 108.39844,339 H 118 v 13.875 h -9.60156 z m 0,0"
+         id="path8453" />
+    </clipPath>
+    <clipPath
+       id="clip2074">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8456" />
+    </clipPath>
+    <clipPath
+       id="clip2075">
+      <path
+         d="M 108.39844,338 H 119 v 14.875 h -10.60156 z m 0,0"
+         id="path8459" />
+    </clipPath>
+    <clipPath
+       id="clip2076">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8462" />
+    </clipPath>
+    <clipPath
+       id="clip2077">
+      <path
+         d="M 108.39844,338 H 120 v 14.875 h -11.60156 z m 0,0"
+         id="path8465" />
+    </clipPath>
+    <clipPath
+       id="clip2078">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8468" />
+    </clipPath>
+    <clipPath
+       id="clip2079">
+      <path
+         d="M 108.39844,337 H 121 v 15.875 h -12.60156 z m 0,0"
+         id="path8471" />
+    </clipPath>
+    <clipPath
+       id="clip2080">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8474" />
+    </clipPath>
+    <clipPath
+       id="clip2081">
+      <path
+         d="M 108.39844,336 H 121 v 16.875 h -12.60156 z m 0,0"
+         id="path8477" />
+    </clipPath>
+    <clipPath
+       id="clip2082">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8480" />
+    </clipPath>
+    <clipPath
+       id="clip2083">
+      <path
+         d="M 108.39844,335 H 122 v 17.875 h -13.60156 z m 0,0"
+         id="path8483" />
+    </clipPath>
+    <clipPath
+       id="clip2084">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8486" />
+    </clipPath>
+    <clipPath
+       id="clip2085">
+      <path
+         d="M 108.39844,335 H 123 v 17.875 h -14.60156 z m 0,0"
+         id="path8489" />
+    </clipPath>
+    <clipPath
+       id="clip2086">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8492" />
+    </clipPath>
+    <clipPath
+       id="clip2087">
+      <path
+         d="M 108.39844,334 H 124 v 18.875 h -15.60156 z m 0,0"
+         id="path8495" />
+    </clipPath>
+    <clipPath
+       id="clip2088">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8498" />
+    </clipPath>
+    <clipPath
+       id="clip2089">
+      <path
+         d="M 108.39844,333 H 124 v 19.875 h -15.60156 z m 0,0"
+         id="path8501" />
+    </clipPath>
+    <clipPath
+       id="clip2090">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8504" />
+    </clipPath>
+    <clipPath
+       id="clip2091">
+      <path
+         d="M 108.39844,332 H 125 v 20.875 h -16.60156 z m 0,0"
+         id="path8507" />
+    </clipPath>
+    <clipPath
+       id="clip2092">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8510" />
+    </clipPath>
+    <clipPath
+       id="clip2093">
+      <path
+         d="M 108.39844,332 H 126 v 20.875 h -17.60156 z m 0,0"
+         id="path8513" />
+    </clipPath>
+    <clipPath
+       id="clip2094">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8516" />
+    </clipPath>
+    <clipPath
+       id="clip2095">
+      <path
+         d="M 108.39844,331 H 127 v 21.875 h -18.60156 z m 0,0"
+         id="path8519" />
+    </clipPath>
+    <clipPath
+       id="clip2096">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8522" />
+    </clipPath>
+    <clipPath
+       id="clip2097">
+      <path
+         d="M 108.39844,330 H 127 v 22 h -18.60156 z m 0,0"
+         id="path8525" />
+    </clipPath>
+    <clipPath
+       id="clip2098">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8528" />
+    </clipPath>
+    <clipPath
+       id="clip2099">
+      <path
+         d="M 108.39844,329 H 128 v 22 h -19.60156 z m 0,0"
+         id="path8531" />
+    </clipPath>
+    <clipPath
+       id="clip2100">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8534" />
+    </clipPath>
+    <clipPath
+       id="clip2101">
+      <path
+         d="M 108.39844,329 H 129 v 21 h -20.60156 z m 0,0"
+         id="path8537" />
+    </clipPath>
+    <clipPath
+       id="clip2102">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8540" />
+    </clipPath>
+    <clipPath
+       id="clip2103">
+      <path
+         d="M 108.39844,328 H 130 v 22 h -21.60156 z m 0,0"
+         id="path8543" />
+    </clipPath>
+    <clipPath
+       id="clip2104">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8546" />
+    </clipPath>
+    <clipPath
+       id="clip2105">
+      <path
+         d="M 108.39844,327 H 130 v 22 h -21.60156 z m 0,0"
+         id="path8549" />
+    </clipPath>
+    <clipPath
+       id="clip2106">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8552" />
+    </clipPath>
+    <clipPath
+       id="clip2107">
+      <path
+         d="M 108.39844,326 H 131 v 22 h -22.60156 z m 0,0"
+         id="path8555" />
+    </clipPath>
+    <clipPath
+       id="clip2108">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8558" />
+    </clipPath>
+    <clipPath
+       id="clip2109">
+      <path
+         d="m 109,326 h 23 v 21 h -23 z m 0,0"
+         id="path8561" />
+    </clipPath>
+    <clipPath
+       id="clip2110">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8564" />
+    </clipPath>
+    <clipPath
+       id="clip2111">
+      <path
+         d="m 110,325 h 23 v 22 h -23 z m 0,0"
+         id="path8567" />
+    </clipPath>
+    <clipPath
+       id="clip2112">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8570" />
+    </clipPath>
+    <clipPath
+       id="clip2113">
+      <path
+         d="m 110,324 h 23 v 22 h -23 z m 0,0"
+         id="path8573" />
+    </clipPath>
+    <clipPath
+       id="clip2114">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8576" />
+    </clipPath>
+    <clipPath
+       id="clip2115">
+      <path
+         d="m 111,323 h 23 v 22 h -23 z m 0,0"
+         id="path8579" />
+    </clipPath>
+    <clipPath
+       id="clip2116">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8582" />
+    </clipPath>
+    <clipPath
+       id="clip2117">
+      <path
+         d="m 112,323 h 23 v 21 h -23 z m 0,0"
+         id="path8585" />
+    </clipPath>
+    <clipPath
+       id="clip2118">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8588" />
+    </clipPath>
+    <clipPath
+       id="clip2119">
+      <path
+         d="m 113,322 h 23 v 22 h -23 z m 0,0"
+         id="path8591" />
+    </clipPath>
+    <clipPath
+       id="clip2120">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8594" />
+    </clipPath>
+    <clipPath
+       id="clip2121">
+      <path
+         d="m 113,321 h 23 v 22 h -23 z m 0,0"
+         id="path8597" />
+    </clipPath>
+    <clipPath
+       id="clip2122">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8600" />
+    </clipPath>
+    <clipPath
+       id="clip2123">
+      <path
+         d="m 114,320 h 23 v 22 h -23 z m 0,0"
+         id="path8603" />
+    </clipPath>
+    <clipPath
+       id="clip2124">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8606" />
+    </clipPath>
+    <clipPath
+       id="clip2125">
+      <path
+         d="m 115,320 h 23 v 21 h -23 z m 0,0"
+         id="path8609" />
+    </clipPath>
+    <clipPath
+       id="clip2126">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8612" />
+    </clipPath>
+    <clipPath
+       id="clip2127">
+      <path
+         d="m 116,319 h 23 v 22 h -23 z m 0,0"
+         id="path8615" />
+    </clipPath>
+    <clipPath
+       id="clip2128">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8618" />
+    </clipPath>
+    <clipPath
+       id="clip2129">
+      <path
+         d="m 116,318 h 23 v 22 h -23 z m 0,0"
+         id="path8621" />
+    </clipPath>
+    <clipPath
+       id="clip2130">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8624" />
+    </clipPath>
+    <clipPath
+       id="clip2131">
+      <path
+         d="m 117,317 h 23 v 22 h -23 z m 0,0"
+         id="path8627" />
+    </clipPath>
+    <clipPath
+       id="clip2132">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8630" />
+    </clipPath>
+    <clipPath
+       id="clip2133">
+      <path
+         d="m 118,317 h 23 v 21 h -23 z m 0,0"
+         id="path8633" />
+    </clipPath>
+    <clipPath
+       id="clip2134">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8636" />
+    </clipPath>
+    <clipPath
+       id="clip2135">
+      <path
+         d="m 119,316 h 23 v 22 h -23 z m 0,0"
+         id="path8639" />
+    </clipPath>
+    <clipPath
+       id="clip2136">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8642" />
+    </clipPath>
+    <clipPath
+       id="clip2137">
+      <path
+         d="m 119,315 h 23 v 22 h -23 z m 0,0"
+         id="path8645" />
+    </clipPath>
+    <clipPath
+       id="clip2138">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8648" />
+    </clipPath>
+    <clipPath
+       id="clip2139">
+      <path
+         d="m 120,314 h 23 v 22 h -23 z m 0,0"
+         id="path8651" />
+    </clipPath>
+    <clipPath
+       id="clip2140">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8654" />
+    </clipPath>
+    <clipPath
+       id="clip2141">
+      <path
+         d="m 121,314 h 23 v 21 h -23 z m 0,0"
+         id="path8657" />
+    </clipPath>
+    <clipPath
+       id="clip2142">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8660" />
+    </clipPath>
+    <clipPath
+       id="clip2143">
+      <path
+         d="m 122,313 h 23 v 22 h -23 z m 0,0"
+         id="path8663" />
+    </clipPath>
+    <clipPath
+       id="clip2144">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8666" />
+    </clipPath>
+    <clipPath
+       id="clip2145">
+      <path
+         d="m 122,312 h 23 v 22 h -23 z m 0,0"
+         id="path8669" />
+    </clipPath>
+    <clipPath
+       id="clip2146">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8672" />
+    </clipPath>
+    <clipPath
+       id="clip2147">
+      <path
+         d="m 123,311 h 23 v 22 h -23 z m 0,0"
+         id="path8675" />
+    </clipPath>
+    <clipPath
+       id="clip2148">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8678" />
+    </clipPath>
+    <clipPath
+       id="clip2149">
+      <path
+         d="m 108.39844,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path8681" />
+    </clipPath>
+    <clipPath
+       id="clip2150">
+      <path
+         d="m 111.39844,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65235,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34765,-3 3,-3 z m 0,0"
+         id="path8684" />
+    </clipPath>
+    <clipPath
+       id="clip2151">
+      <path
+         d="M 111.5,300.5 H 158 c 1.65625,0 3,1.34375 3,3 V 350 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8687" />
+    </clipPath>
+    <clipPath
+       id="clip2152">
+      <path
+         d="m 190.07422,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path8690" />
+    </clipPath>
+    <clipPath
+       id="clip2153">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8693" />
+    </clipPath>
+    <linearGradient
+       id="linear19"
+       gradientUnits="userSpaceOnUse"
+       x1="-0.00099700002"
+       y1="105.001"
+       x2="104.999"
+       y2="0.00099700002"
+       gradientTransform="matrix(0.5,0,0,0.5,190.075,300.375)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(41.567993%,61.959839%,72.940063%);stop-opacity:1;"
+         id="stop8696" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(41.696167%,62.033081%,72.982788%);stop-opacity:1;"
+         id="stop8698" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(41.952515%,62.179565%,73.068237%);stop-opacity:1;"
+         id="stop8700" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(42.210388%,62.327576%,73.155212%);stop-opacity:1;"
+         id="stop8702" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(42.468262%,62.47406%,73.240662%);stop-opacity:1;"
+         id="stop8704" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(42.724609%,62.62207%,73.326111%);stop-opacity:1;"
+         id="stop8706" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(42.982483%,62.768555%,73.41156%);stop-opacity:1;"
+         id="stop8708" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(43.240356%,62.915039%,73.498535%);stop-opacity:1;"
+         id="stop8710" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(43.496704%,63.063049%,73.583984%);stop-opacity:1;"
+         id="stop8712" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(43.754578%,63.209534%,73.669434%);stop-opacity:1;"
+         id="stop8714" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(44.012451%,63.356018%,73.754883%);stop-opacity:1;"
+         id="stop8716" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(44.268799%,63.504028%,73.840332%);stop-opacity:1;"
+         id="stop8718" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(44.526672%,63.650513%,73.927307%);stop-opacity:1;"
+         id="stop8720" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(44.784546%,63.798523%,74.012756%);stop-opacity:1;"
+         id="stop8722" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(45.040894%,63.945007%,74.098206%);stop-opacity:1;"
+         id="stop8724" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(45.298767%,64.091492%,74.183655%);stop-opacity:1;"
+         id="stop8726" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(45.556641%,64.239502%,74.27063%);stop-opacity:1;"
+         id="stop8728" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(45.812988%,64.385986%,74.356079%);stop-opacity:1;"
+         id="stop8730" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(46.070862%,64.532471%,74.441528%);stop-opacity:1;"
+         id="stop8732" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(46.328735%,64.680481%,74.526978%);stop-opacity:1;"
+         id="stop8734" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(46.585083%,64.826965%,74.612427%);stop-opacity:1;"
+         id="stop8736" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(46.842957%,64.974976%,74.699402%);stop-opacity:1;"
+         id="stop8738" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(47.10083%,65.12146%,74.784851%);stop-opacity:1;"
+         id="stop8740" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(47.357178%,65.267944%,74.8703%);stop-opacity:1;"
+         id="stop8742" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(47.615051%,65.415955%,74.95575%);stop-opacity:1;"
+         id="stop8744" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(47.872925%,65.562439%,75.041199%);stop-opacity:1;"
+         id="stop8746" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(48.129272%,65.708923%,75.128174%);stop-opacity:1;"
+         id="stop8748" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(48.387146%,65.856934%,75.213623%);stop-opacity:1;"
+         id="stop8750" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(48.64502%,66.003418%,75.299072%);stop-opacity:1;"
+         id="stop8752" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(48.901367%,66.151428%,75.384521%);stop-opacity:1;"
+         id="stop8754" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(49.159241%,66.297913%,75.471497%);stop-opacity:1;"
+         id="stop8756" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(49.417114%,66.444397%,75.556946%);stop-opacity:1;"
+         id="stop8758" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(49.673462%,66.592407%,75.642395%);stop-opacity:1;"
+         id="stop8760" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(49.931335%,66.738892%,75.727844%);stop-opacity:1;"
+         id="stop8762" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(50.061035%,66.81366%,75.770569%);stop-opacity:1;"
+         id="stop8764" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(50.189209%,66.886902%,75.813293%);stop-opacity:1;"
+         id="stop8766" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(50.445557%,67.033386%,75.900269%);stop-opacity:1;"
+         id="stop8768" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(50.70343%,67.179871%,75.985718%);stop-opacity:1;"
+         id="stop8770" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(50.961304%,67.327881%,76.071167%);stop-opacity:1;"
+         id="stop8772" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(51.217651%,67.474365%,76.156616%);stop-opacity:1;"
+         id="stop8774" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(51.475525%,67.62085%,76.243591%);stop-opacity:1;"
+         id="stop8776" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(51.731873%,67.76886%,76.329041%);stop-opacity:1;"
+         id="stop8778" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(51.989746%,67.915344%,76.41449%);stop-opacity:1;"
+         id="stop8780" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(52.24762%,68.063354%,76.499939%);stop-opacity:1;"
+         id="stop8782" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(52.503967%,68.209839%,76.585388%);stop-opacity:1;"
+         id="stop8784" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(52.761841%,68.356323%,76.672363%);stop-opacity:1;"
+         id="stop8786" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(53.019714%,68.504333%,76.757812%);stop-opacity:1;"
+         id="stop8788" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(53.276062%,68.650818%,76.843262%);stop-opacity:1;"
+         id="stop8790" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(53.533936%,68.797302%,76.928711%);stop-opacity:1;"
+         id="stop8792" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(53.791809%,68.945312%,77.015686%);stop-opacity:1;"
+         id="stop8794" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(54.048157%,69.091797%,77.101135%);stop-opacity:1;"
+         id="stop8796" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(54.30603%,69.239807%,77.186584%);stop-opacity:1;"
+         id="stop8798" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(54.563904%,69.386292%,77.272034%);stop-opacity:1;"
+         id="stop8800" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(54.820251%,69.532776%,77.357483%);stop-opacity:1;"
+         id="stop8802" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(55.078125%,69.680786%,77.444458%);stop-opacity:1;"
+         id="stop8804" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(55.335999%,69.827271%,77.529907%);stop-opacity:1;"
+         id="stop8806" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(55.592346%,69.973755%,77.615356%);stop-opacity:1;"
+         id="stop8808" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(55.85022%,70.121765%,77.700806%);stop-opacity:1;"
+         id="stop8810" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(56.108093%,70.26825%,77.787781%);stop-opacity:1;"
+         id="stop8812" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(56.364441%,70.41626%,77.87323%);stop-opacity:1;"
+         id="stop8814" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(56.622314%,70.562744%,77.958679%);stop-opacity:1;"
+         id="stop8816" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(56.880188%,70.709229%,78.044128%);stop-opacity:1;"
+         id="stop8818" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(57.136536%,70.857239%,78.129578%);stop-opacity:1;"
+         id="stop8820" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(57.394409%,71.003723%,78.216553%);stop-opacity:1;"
+         id="stop8822" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(57.652283%,71.150208%,78.302002%);stop-opacity:1;"
+         id="stop8824" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(57.90863%,71.298218%,78.387451%);stop-opacity:1;"
+         id="stop8826" />
+    </linearGradient>
+    <clipPath
+       id="clip2154">
+      <path
+         d="M 190.07422,347 H 191 v 5.875 h -0.92578 z m 0,0"
+         id="path8829" />
+    </clipPath>
+    <clipPath
+       id="clip2155">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8832" />
+    </clipPath>
+    <clipPath
+       id="clip2156">
+      <path
+         d="M 190.07422,347 H 192 v 5.875 h -1.92578 z m 0,0"
+         id="path8835" />
+    </clipPath>
+    <clipPath
+       id="clip2157">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8838" />
+    </clipPath>
+    <clipPath
+       id="clip2158">
+      <path
+         d="M 190.07422,346 H 192 v 6.875 h -1.92578 z m 0,0"
+         id="path8841" />
+    </clipPath>
+    <clipPath
+       id="clip2159">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8844" />
+    </clipPath>
+    <clipPath
+       id="clip2160">
+      <path
+         d="M 190.07422,345 H 193 v 7.875 h -2.92578 z m 0,0"
+         id="path8847" />
+    </clipPath>
+    <clipPath
+       id="clip2161">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8850" />
+    </clipPath>
+    <clipPath
+       id="clip2162">
+      <path
+         d="M 190.07422,344 H 194 v 8.875 h -3.92578 z m 0,0"
+         id="path8853" />
+    </clipPath>
+    <clipPath
+       id="clip2163">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8856" />
+    </clipPath>
+    <clipPath
+       id="clip2164">
+      <path
+         d="M 190.07422,344 H 195 v 8.875 h -4.92578 z m 0,0"
+         id="path8859" />
+    </clipPath>
+    <clipPath
+       id="clip2165">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8862" />
+    </clipPath>
+    <clipPath
+       id="clip2166">
+      <path
+         d="M 190.07422,343 H 195 v 9.875 h -4.92578 z m 0,0"
+         id="path8865" />
+    </clipPath>
+    <clipPath
+       id="clip2167">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8868" />
+    </clipPath>
+    <clipPath
+       id="clip2168">
+      <path
+         d="M 190.07422,342 H 196 v 10.875 h -5.92578 z m 0,0"
+         id="path8871" />
+    </clipPath>
+    <clipPath
+       id="clip2169">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8874" />
+    </clipPath>
+    <clipPath
+       id="clip2170">
+      <path
+         d="M 190.07422,341 H 197 v 11.875 h -6.92578 z m 0,0"
+         id="path8877" />
+    </clipPath>
+    <clipPath
+       id="clip2171">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8880" />
+    </clipPath>
+    <clipPath
+       id="clip2172">
+      <path
+         d="M 190.07422,341 H 198 v 11.875 h -7.92578 z m 0,0"
+         id="path8883" />
+    </clipPath>
+    <clipPath
+       id="clip2173">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8886" />
+    </clipPath>
+    <clipPath
+       id="clip2174">
+      <path
+         d="M 190.07422,340 H 198 v 12.875 h -7.92578 z m 0,0"
+         id="path8889" />
+    </clipPath>
+    <clipPath
+       id="clip2175">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8892" />
+    </clipPath>
+    <clipPath
+       id="clip2176">
+      <path
+         d="M 190.07422,339 H 199 v 13.875 h -8.92578 z m 0,0"
+         id="path8895" />
+    </clipPath>
+    <clipPath
+       id="clip2177">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8898" />
+    </clipPath>
+    <clipPath
+       id="clip2178">
+      <path
+         d="M 190.07422,338 H 200 v 14.875 h -9.92578 z m 0,0"
+         id="path8901" />
+    </clipPath>
+    <clipPath
+       id="clip2179">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8904" />
+    </clipPath>
+    <clipPath
+       id="clip2180">
+      <path
+         d="M 190.07422,338 H 201 v 14.875 h -10.92578 z m 0,0"
+         id="path8907" />
+    </clipPath>
+    <clipPath
+       id="clip2181">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8910" />
+    </clipPath>
+    <clipPath
+       id="clip2182">
+      <path
+         d="M 190.07422,337 H 201 v 15.875 h -10.92578 z m 0,0"
+         id="path8913" />
+    </clipPath>
+    <clipPath
+       id="clip2183">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8916" />
+    </clipPath>
+    <clipPath
+       id="clip2184">
+      <path
+         d="M 190.07422,336 H 202 v 16.875 h -11.92578 z m 0,0"
+         id="path8919" />
+    </clipPath>
+    <clipPath
+       id="clip2185">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8922" />
+    </clipPath>
+    <clipPath
+       id="clip2186">
+      <path
+         d="M 190.07422,335 H 203 v 17.875 h -12.92578 z m 0,0"
+         id="path8925" />
+    </clipPath>
+    <clipPath
+       id="clip2187">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8928" />
+    </clipPath>
+    <clipPath
+       id="clip2188">
+      <path
+         d="M 190.07422,335 H 204 v 17.875 h -13.92578 z m 0,0"
+         id="path8931" />
+    </clipPath>
+    <clipPath
+       id="clip2189">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8934" />
+    </clipPath>
+    <clipPath
+       id="clip2190">
+      <path
+         d="M 190.07422,334 H 204 v 18.875 h -13.92578 z m 0,0"
+         id="path8937" />
+    </clipPath>
+    <clipPath
+       id="clip2191">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8940" />
+    </clipPath>
+    <clipPath
+       id="clip2192">
+      <path
+         d="M 190.07422,333 H 205 v 19.875 h -14.92578 z m 0,0"
+         id="path8943" />
+    </clipPath>
+    <clipPath
+       id="clip2193">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8946" />
+    </clipPath>
+    <clipPath
+       id="clip2194">
+      <path
+         d="M 190.07422,332 H 206 v 20.875 h -15.92578 z m 0,0"
+         id="path8949" />
+    </clipPath>
+    <clipPath
+       id="clip2195">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8952" />
+    </clipPath>
+    <clipPath
+       id="clip2196">
+      <path
+         d="M 190.07422,332 H 207 v 20.875 h -16.92578 z m 0,0"
+         id="path8955" />
+    </clipPath>
+    <clipPath
+       id="clip2197">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8958" />
+    </clipPath>
+    <clipPath
+       id="clip2198">
+      <path
+         d="M 190.07422,331 H 207 v 21.875 h -16.92578 z m 0,0"
+         id="path8961" />
+    </clipPath>
+    <clipPath
+       id="clip2199">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8964" />
+    </clipPath>
+    <clipPath
+       id="clip2200">
+      <path
+         d="M 190.07422,330 H 208 v 22.875 h -17.92578 z m 0,0"
+         id="path8967" />
+    </clipPath>
+    <clipPath
+       id="clip2201">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8970" />
+    </clipPath>
+    <clipPath
+       id="clip2202">
+      <path
+         d="M 190.07422,329 H 209 v 23.875 h -18.92578 z m 0,0"
+         id="path8973" />
+    </clipPath>
+    <clipPath
+       id="clip2203">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8976" />
+    </clipPath>
+    <clipPath
+       id="clip2204">
+      <path
+         d="M 190.07422,329 H 210 v 23.875 h -19.92578 z m 0,0"
+         id="path8979" />
+    </clipPath>
+    <clipPath
+       id="clip2205">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8982" />
+    </clipPath>
+    <clipPath
+       id="clip2206">
+      <path
+         d="M 190.07422,328 H 210 v 24.875 h -19.92578 z m 0,0"
+         id="path8985" />
+    </clipPath>
+    <clipPath
+       id="clip2207">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8988" />
+    </clipPath>
+    <clipPath
+       id="clip2208">
+      <path
+         d="M 190.07422,327 H 211 v 25 h -20.92578 z m 0,0"
+         id="path8991" />
+    </clipPath>
+    <clipPath
+       id="clip2209">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path8994" />
+    </clipPath>
+    <clipPath
+       id="clip2210">
+      <path
+         d="m 191,326 h 21 v 25 h -21 z m 0,0"
+         id="path8997" />
+    </clipPath>
+    <clipPath
+       id="clip2211">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9000" />
+    </clipPath>
+    <clipPath
+       id="clip2212">
+      <path
+         d="m 192,326 h 21 v 25 h -21 z m 0,0"
+         id="path9003" />
+    </clipPath>
+    <clipPath
+       id="clip2213">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9006" />
+    </clipPath>
+    <clipPath
+       id="clip2214">
+      <path
+         d="m 192,325 h 21 v 25 h -21 z m 0,0"
+         id="path9009" />
+    </clipPath>
+    <clipPath
+       id="clip2215">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9012" />
+    </clipPath>
+    <clipPath
+       id="clip2216">
+      <path
+         d="m 193,324 h 21 v 25 h -21 z m 0,0"
+         id="path9015" />
+    </clipPath>
+    <clipPath
+       id="clip2217">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9018" />
+    </clipPath>
+    <clipPath
+       id="clip2218">
+      <path
+         d="m 194,323 h 21 v 25 h -21 z m 0,0"
+         id="path9021" />
+    </clipPath>
+    <clipPath
+       id="clip2219">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9024" />
+    </clipPath>
+    <clipPath
+       id="clip2220">
+      <path
+         d="m 195,323 h 21 v 25 h -21 z m 0,0"
+         id="path9027" />
+    </clipPath>
+    <clipPath
+       id="clip2221">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9030" />
+    </clipPath>
+    <clipPath
+       id="clip2222">
+      <path
+         d="m 195,322 h 21 v 25 h -21 z m 0,0"
+         id="path9033" />
+    </clipPath>
+    <clipPath
+       id="clip2223">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9036" />
+    </clipPath>
+    <clipPath
+       id="clip2224">
+      <path
+         d="m 196,321 h 21 v 25 h -21 z m 0,0"
+         id="path9039" />
+    </clipPath>
+    <clipPath
+       id="clip2225">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9042" />
+    </clipPath>
+    <clipPath
+       id="clip2226">
+      <path
+         d="m 197,320 h 21 v 25 h -21 z m 0,0"
+         id="path9045" />
+    </clipPath>
+    <clipPath
+       id="clip2227">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9048" />
+    </clipPath>
+    <clipPath
+       id="clip2228">
+      <path
+         d="m 198,320 h 21 v 25 h -21 z m 0,0"
+         id="path9051" />
+    </clipPath>
+    <clipPath
+       id="clip2229">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9054" />
+    </clipPath>
+    <clipPath
+       id="clip2230">
+      <path
+         d="m 198,319 h 21 v 25 h -21 z m 0,0"
+         id="path9057" />
+    </clipPath>
+    <clipPath
+       id="clip2231">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9060" />
+    </clipPath>
+    <clipPath
+       id="clip2232">
+      <path
+         d="m 199,318 h 21 v 25 h -21 z m 0,0"
+         id="path9063" />
+    </clipPath>
+    <clipPath
+       id="clip2233">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9066" />
+    </clipPath>
+    <clipPath
+       id="clip2234">
+      <path
+         d="m 200,317 h 21 v 25 h -21 z m 0,0"
+         id="path9069" />
+    </clipPath>
+    <clipPath
+       id="clip2235">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9072" />
+    </clipPath>
+    <clipPath
+       id="clip2236">
+      <path
+         d="m 201,317 h 21 v 25 h -21 z m 0,0"
+         id="path9075" />
+    </clipPath>
+    <clipPath
+       id="clip2237">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9078" />
+    </clipPath>
+    <clipPath
+       id="clip2238">
+      <path
+         d="m 201,316 h 21 v 25 h -21 z m 0,0"
+         id="path9081" />
+    </clipPath>
+    <clipPath
+       id="clip2239">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9084" />
+    </clipPath>
+    <clipPath
+       id="clip2240">
+      <path
+         d="m 202,315 h 21 v 25 h -21 z m 0,0"
+         id="path9087" />
+    </clipPath>
+    <clipPath
+       id="clip2241">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9090" />
+    </clipPath>
+    <clipPath
+       id="clip2242">
+      <path
+         d="m 203,314 h 21 v 25 h -21 z m 0,0"
+         id="path9093" />
+    </clipPath>
+    <clipPath
+       id="clip2243">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9096" />
+    </clipPath>
+    <clipPath
+       id="clip2244">
+      <path
+         d="m 204,314 h 21 v 25 h -21 z m 0,0"
+         id="path9099" />
+    </clipPath>
+    <clipPath
+       id="clip2245">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9102" />
+    </clipPath>
+    <clipPath
+       id="clip2246">
+      <path
+         d="m 204,313 h 21 v 25 h -21 z m 0,0"
+         id="path9105" />
+    </clipPath>
+    <clipPath
+       id="clip2247">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9108" />
+    </clipPath>
+    <clipPath
+       id="clip2248">
+      <path
+         d="m 205,312 h 21 v 25 h -21 z m 0,0"
+         id="path9111" />
+    </clipPath>
+    <clipPath
+       id="clip2249">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9114" />
+    </clipPath>
+    <clipPath
+       id="clip2250">
+      <path
+         d="m 206,311 h 21 v 25 h -21 z m 0,0"
+         id="path9117" />
+    </clipPath>
+    <clipPath
+       id="clip2251">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9120" />
+    </clipPath>
+    <clipPath
+       id="clip2252">
+      <path
+         d="m 190.07422,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path9123" />
+    </clipPath>
+    <clipPath
+       id="clip2253">
+      <path
+         d="m 193.07422,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9126" />
+    </clipPath>
+    <clipPath
+       id="clip2254">
+      <path
+         d="m 193,300.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 350 c 0,1.65625 -1.34375,3 -3,3 H 193 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9129" />
+    </clipPath>
+    <clipPath
+       id="clip2255">
+      <path
+         d="m 271.75,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path9132" />
+    </clipPath>
+    <clipPath
+       id="clip2256">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9135" />
+    </clipPath>
+    <linearGradient
+       id="linear20"
+       gradientUnits="userSpaceOnUse"
+       x1="0"
+       y1="105"
+       x2="105"
+       y2="0"
+       gradientTransform="matrix(0.5,0,0,0.5,271.75,300.375)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(70.979309%,66.665649%,34.901428%);stop-opacity:1;"
+         id="stop9138" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(71.052551%,66.744995%,35.032654%);stop-opacity:1;"
+         id="stop9140" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(71.200562%,66.905212%,35.296631%);stop-opacity:1;"
+         id="stop9142" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(71.347046%,67.063904%,35.559082%);stop-opacity:1;"
+         id="stop9144" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(71.49353%,67.222595%,35.823059%);stop-opacity:1;"
+         id="stop9146" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(71.641541%,67.382812%,36.087036%);stop-opacity:1;"
+         id="stop9148" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(71.788025%,67.541504%,36.349487%);stop-opacity:1;"
+         id="stop9150" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(71.934509%,67.701721%,36.613464%);stop-opacity:1;"
+         id="stop9152" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(72.08252%,67.860413%,36.877441%);stop-opacity:1;"
+         id="stop9154" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(72.229004%,68.019104%,37.139893%);stop-opacity:1;"
+         id="stop9156" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(72.377014%,68.179321%,37.40387%);stop-opacity:1;"
+         id="stop9158" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(72.523499%,68.338013%,37.667847%);stop-opacity:1;"
+         id="stop9160" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(72.669983%,68.49823%,37.930298%);stop-opacity:1;"
+         id="stop9162" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(72.817993%,68.656921%,38.194275%);stop-opacity:1;"
+         id="stop9164" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(72.964478%,68.815613%,38.458252%);stop-opacity:1;"
+         id="stop9166" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(73.110962%,68.97583%,38.720703%);stop-opacity:1;"
+         id="stop9168" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(73.258972%,69.134521%,38.98468%);stop-opacity:1;"
+         id="stop9170" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(73.405457%,69.294739%,39.248657%);stop-opacity:1;"
+         id="stop9172" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(73.553467%,69.45343%,39.511108%);stop-opacity:1;"
+         id="stop9174" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(73.699951%,69.613647%,39.775085%);stop-opacity:1;"
+         id="stop9176" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(73.846436%,69.772339%,40.039062%);stop-opacity:1;"
+         id="stop9178" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(73.994446%,69.93103%,40.301514%);stop-opacity:1;"
+         id="stop9180" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(74.14093%,70.091248%,40.565491%);stop-opacity:1;"
+         id="stop9182" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(74.28894%,70.249939%,40.829468%);stop-opacity:1;"
+         id="stop9184" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(74.435425%,70.410156%,41.091919%);stop-opacity:1;"
+         id="stop9186" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(74.581909%,70.568848%,41.355896%);stop-opacity:1;"
+         id="stop9188" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(74.729919%,70.727539%,41.619873%);stop-opacity:1;"
+         id="stop9190" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(74.876404%,70.887756%,41.882324%);stop-opacity:1;"
+         id="stop9192" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(75.022888%,71.046448%,42.146301%);stop-opacity:1;"
+         id="stop9194" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(75.170898%,71.206665%,42.410278%);stop-opacity:1;"
+         id="stop9196" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(75.317383%,71.365356%,42.672729%);stop-opacity:1;"
+         id="stop9198" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(75.465393%,71.524048%,42.936707%);stop-opacity:1;"
+         id="stop9200" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(75.611877%,71.684265%,43.200684%);stop-opacity:1;"
+         id="stop9202" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(75.758362%,71.842957%,43.463135%);stop-opacity:1;"
+         id="stop9204" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(75.906372%,72.003174%,43.727112%);stop-opacity:1;"
+         id="stop9206" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(76.052856%,72.161865%,43.991089%);stop-opacity:1;"
+         id="stop9208" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(76.199341%,72.320557%,44.25354%);stop-opacity:1;"
+         id="stop9210" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(76.347351%,72.480774%,44.517517%);stop-opacity:1;"
+         id="stop9212" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(76.493835%,72.639465%,44.781494%);stop-opacity:1;"
+         id="stop9214" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(76.641846%,72.799683%,45.043945%);stop-opacity:1;"
+         id="stop9216" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(76.78833%,72.958374%,45.307922%);stop-opacity:1;"
+         id="stop9218" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(76.934814%,73.118591%,45.571899%);stop-opacity:1;"
+         id="stop9220" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(77.082825%,73.277283%,45.835876%);stop-opacity:1;"
+         id="stop9222" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(77.229309%,73.435974%,46.098328%);stop-opacity:1;"
+         id="stop9224" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(77.375793%,73.596191%,46.362305%);stop-opacity:1;"
+         id="stop9226" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(77.523804%,73.754883%,46.626282%);stop-opacity:1;"
+         id="stop9228" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(77.670288%,73.9151%,46.888733%);stop-opacity:1;"
+         id="stop9230" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(77.818298%,74.073792%,47.15271%);stop-opacity:1;"
+         id="stop9232" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(77.964783%,74.232483%,47.416687%);stop-opacity:1;"
+         id="stop9234" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(78.111267%,74.3927%,47.679138%);stop-opacity:1;"
+         id="stop9236" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(78.259277%,74.551392%,47.943115%);stop-opacity:1;"
+         id="stop9238" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(78.405762%,74.711609%,48.207092%);stop-opacity:1;"
+         id="stop9240" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(78.552246%,74.8703%,48.469543%);stop-opacity:1;"
+         id="stop9242" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(78.700256%,75.028992%,48.733521%);stop-opacity:1;"
+         id="stop9244" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(78.846741%,75.189209%,48.997498%);stop-opacity:1;"
+         id="stop9246" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(78.994751%,75.3479%,49.259949%);stop-opacity:1;"
+         id="stop9248" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(79.141235%,75.508118%,49.523926%);stop-opacity:1;"
+         id="stop9250" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(79.28772%,75.666809%,49.787903%);stop-opacity:1;"
+         id="stop9252" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(79.43573%,75.8255%,50.050354%);stop-opacity:1;"
+         id="stop9254" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(79.582214%,75.985718%,50.314331%);stop-opacity:1;"
+         id="stop9256" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(79.728699%,76.144409%,50.578308%);stop-opacity:1;"
+         id="stop9258" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(79.876709%,76.304626%,50.840759%);stop-opacity:1;"
+         id="stop9260" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(80.023193%,76.463318%,51.104736%);stop-opacity:1;"
+         id="stop9262" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(80.171204%,76.622009%,51.368713%);stop-opacity:1;"
+         id="stop9264" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(80.317688%,76.782227%,51.631165%);stop-opacity:1;"
+         id="stop9266" />
+    </linearGradient>
+    <clipPath
+       id="clip2257">
+      <path
+         d="M 271.75,352 H 277 v 0.875 h -5.25 z m 0,0"
+         id="path9269" />
+    </clipPath>
+    <clipPath
+       id="clip2258">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9272" />
+    </clipPath>
+    <clipPath
+       id="clip2259">
+      <path
+         d="M 271.75,351 H 278 v 1.875 h -6.25 z m 0,0"
+         id="path9275" />
+    </clipPath>
+    <clipPath
+       id="clip2260">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9278" />
+    </clipPath>
+    <clipPath
+       id="clip2261">
+      <path
+         d="M 271.75,350 H 279 v 2.875 h -7.25 z m 0,0"
+         id="path9281" />
+    </clipPath>
+    <clipPath
+       id="clip2262">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9284" />
+    </clipPath>
+    <clipPath
+       id="clip2263">
+      <path
+         d="M 271.75,349 H 280 v 3.875 h -8.25 z m 0,0"
+         id="path9287" />
+    </clipPath>
+    <clipPath
+       id="clip2264">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9290" />
+    </clipPath>
+    <clipPath
+       id="clip2265">
+      <path
+         d="M 271.75,348 H 281 v 4.875 h -9.25 z m 0,0"
+         id="path9293" />
+    </clipPath>
+    <clipPath
+       id="clip2266">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9296" />
+    </clipPath>
+    <clipPath
+       id="clip2267">
+      <path
+         d="M 271.75,347 H 282 v 5.875 h -10.25 z m 0,0"
+         id="path9299" />
+    </clipPath>
+    <clipPath
+       id="clip2268">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9302" />
+    </clipPath>
+    <clipPath
+       id="clip2269">
+      <path
+         d="M 271.75,346 H 283 v 6.875 h -11.25 z m 0,0"
+         id="path9305" />
+    </clipPath>
+    <clipPath
+       id="clip2270">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9308" />
+    </clipPath>
+    <clipPath
+       id="clip2271">
+      <path
+         d="M 271.75,345 H 284 v 7.875 h -12.25 z m 0,0"
+         id="path9311" />
+    </clipPath>
+    <clipPath
+       id="clip2272">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9314" />
+    </clipPath>
+    <clipPath
+       id="clip2273">
+      <path
+         d="M 271.75,344 H 285 v 8.875 h -13.25 z m 0,0"
+         id="path9317" />
+    </clipPath>
+    <clipPath
+       id="clip2274">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9320" />
+    </clipPath>
+    <clipPath
+       id="clip2275">
+      <path
+         d="M 271.75,343 H 286 v 9.875 h -14.25 z m 0,0"
+         id="path9323" />
+    </clipPath>
+    <clipPath
+       id="clip2276">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9326" />
+    </clipPath>
+    <clipPath
+       id="clip2277">
+      <path
+         d="M 271.75,342 H 287 v 10.875 h -15.25 z m 0,0"
+         id="path9329" />
+    </clipPath>
+    <clipPath
+       id="clip2278">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9332" />
+    </clipPath>
+    <clipPath
+       id="clip2279">
+      <path
+         d="M 271.75,341 H 288 v 11.875 h -16.25 z m 0,0"
+         id="path9335" />
+    </clipPath>
+    <clipPath
+       id="clip2280">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9338" />
+    </clipPath>
+    <clipPath
+       id="clip2281">
+      <path
+         d="M 271.75,340 H 289 v 12.875 h -17.25 z m 0,0"
+         id="path9341" />
+    </clipPath>
+    <clipPath
+       id="clip2282">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9344" />
+    </clipPath>
+    <clipPath
+       id="clip2283">
+      <path
+         d="M 271.75,339 H 290 v 13.875 h -18.25 z m 0,0"
+         id="path9347" />
+    </clipPath>
+    <clipPath
+       id="clip2284">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9350" />
+    </clipPath>
+    <clipPath
+       id="clip2285">
+      <path
+         d="M 271.75,338 H 291 v 14.875 h -19.25 z m 0,0"
+         id="path9353" />
+    </clipPath>
+    <clipPath
+       id="clip2286">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9356" />
+    </clipPath>
+    <clipPath
+       id="clip2287">
+      <path
+         d="M 271.75,337 H 292 v 15.875 h -20.25 z m 0,0"
+         id="path9359" />
+    </clipPath>
+    <clipPath
+       id="clip2288">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9362" />
+    </clipPath>
+    <clipPath
+       id="clip2289">
+      <path
+         d="M 271.75,336 H 293 v 16.875 h -21.25 z m 0,0"
+         id="path9365" />
+    </clipPath>
+    <clipPath
+       id="clip2290">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9368" />
+    </clipPath>
+    <clipPath
+       id="clip2291">
+      <path
+         d="M 271.75,335 H 294 v 17.875 h -22.25 z m 0,0"
+         id="path9371" />
+    </clipPath>
+    <clipPath
+       id="clip2292">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9374" />
+    </clipPath>
+    <clipPath
+       id="clip2293">
+      <path
+         d="M 271.75,334 H 295 v 18.875 h -23.25 z m 0,0"
+         id="path9377" />
+    </clipPath>
+    <clipPath
+       id="clip2294">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9380" />
+    </clipPath>
+    <clipPath
+       id="clip2295">
+      <path
+         d="M 271.75,333 H 296 v 19.875 h -24.25 z m 0,0"
+         id="path9383" />
+    </clipPath>
+    <clipPath
+       id="clip2296">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9386" />
+    </clipPath>
+    <clipPath
+       id="clip2297">
+      <path
+         d="M 271.75,332 H 297 v 20.875 h -25.25 z m 0,0"
+         id="path9389" />
+    </clipPath>
+    <clipPath
+       id="clip2298">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9392" />
+    </clipPath>
+    <clipPath
+       id="clip2299">
+      <path
+         d="m 272,331 h 26 v 21.875 h -26 z m 0,0"
+         id="path9395" />
+    </clipPath>
+    <clipPath
+       id="clip2300">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9398" />
+    </clipPath>
+    <clipPath
+       id="clip2301">
+      <path
+         d="m 272,330 h 27 v 22.875 h -27 z m 0,0"
+         id="path9401" />
+    </clipPath>
+    <clipPath
+       id="clip2302">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9404" />
+    </clipPath>
+    <clipPath
+       id="clip2303">
+      <path
+         d="m 273,329 h 27 v 23.875 h -27 z m 0,0"
+         id="path9407" />
+    </clipPath>
+    <clipPath
+       id="clip2304">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9410" />
+    </clipPath>
+    <clipPath
+       id="clip2305">
+      <path
+         d="m 274,329 h 26 v 23.875 h -26 z m 0,0"
+         id="path9413" />
+    </clipPath>
+    <clipPath
+       id="clip2306">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9416" />
+    </clipPath>
+    <clipPath
+       id="clip2307">
+      <path
+         d="m 275,328 h 26 v 24.875 h -26 z m 0,0"
+         id="path9419" />
+    </clipPath>
+    <clipPath
+       id="clip2308">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9422" />
+    </clipPath>
+    <clipPath
+       id="clip2309">
+      <path
+         d="m 275,327 h 27 v 25 h -27 z m 0,0"
+         id="path9425" />
+    </clipPath>
+    <clipPath
+       id="clip2310">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9428" />
+    </clipPath>
+    <clipPath
+       id="clip2311">
+      <path
+         d="m 276,326 h 27 v 25 h -27 z m 0,0"
+         id="path9431" />
+    </clipPath>
+    <clipPath
+       id="clip2312">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9434" />
+    </clipPath>
+    <clipPath
+       id="clip2313">
+      <path
+         d="m 277,326 h 26 v 24 h -26 z m 0,0"
+         id="path9437" />
+    </clipPath>
+    <clipPath
+       id="clip2314">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9440" />
+    </clipPath>
+    <clipPath
+       id="clip2315">
+      <path
+         d="m 278,325 h 26 v 25 h -26 z m 0,0"
+         id="path9443" />
+    </clipPath>
+    <clipPath
+       id="clip2316">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9446" />
+    </clipPath>
+    <clipPath
+       id="clip2317">
+      <path
+         d="m 278,324 h 27 v 25 h -27 z m 0,0"
+         id="path9449" />
+    </clipPath>
+    <clipPath
+       id="clip2318">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9452" />
+    </clipPath>
+    <clipPath
+       id="clip2319">
+      <path
+         d="m 279,323 h 27 v 25 h -27 z m 0,0"
+         id="path9455" />
+    </clipPath>
+    <clipPath
+       id="clip2320">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9458" />
+    </clipPath>
+    <clipPath
+       id="clip2321">
+      <path
+         d="m 280,323 h 26 v 24 h -26 z m 0,0"
+         id="path9461" />
+    </clipPath>
+    <clipPath
+       id="clip2322">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9464" />
+    </clipPath>
+    <clipPath
+       id="clip2323">
+      <path
+         d="m 281,322 h 26 v 25 h -26 z m 0,0"
+         id="path9467" />
+    </clipPath>
+    <clipPath
+       id="clip2324">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9470" />
+    </clipPath>
+    <clipPath
+       id="clip2325">
+      <path
+         d="m 281,321 h 27 v 25 h -27 z m 0,0"
+         id="path9473" />
+    </clipPath>
+    <clipPath
+       id="clip2326">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9476" />
+    </clipPath>
+    <clipPath
+       id="clip2327">
+      <path
+         d="m 282,320 h 27 v 25 h -27 z m 0,0"
+         id="path9479" />
+    </clipPath>
+    <clipPath
+       id="clip2328">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9482" />
+    </clipPath>
+    <clipPath
+       id="clip2329">
+      <path
+         d="m 283,320 h 26 v 24 h -26 z m 0,0"
+         id="path9485" />
+    </clipPath>
+    <clipPath
+       id="clip2330">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9488" />
+    </clipPath>
+    <clipPath
+       id="clip2331">
+      <path
+         d="m 284,319 h 26 v 25 h -26 z m 0,0"
+         id="path9491" />
+    </clipPath>
+    <clipPath
+       id="clip2332">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9494" />
+    </clipPath>
+    <clipPath
+       id="clip2333">
+      <path
+         d="m 284,318 h 27 v 25 h -27 z m 0,0"
+         id="path9497" />
+    </clipPath>
+    <clipPath
+       id="clip2334">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9500" />
+    </clipPath>
+    <clipPath
+       id="clip2335">
+      <path
+         d="m 272,300.375 h 52.25 v 52.5 H 272 Z m 0,0"
+         id="path9503" />
+    </clipPath>
+    <clipPath
+       id="clip2336">
+      <path
+         d="m 274.75,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9506" />
+    </clipPath>
+    <clipPath
+       id="clip2337">
+      <path
+         d="m 275,300.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 350 c 0,1.65625 -1.34375,3 -3,3 H 275 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9509" />
+    </clipPath>
+    <clipPath
+       id="clip2338">
+      <path
+         d="m 353.42578,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path9512" />
+    </clipPath>
+    <clipPath
+       id="clip2339">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9515" />
+    </clipPath>
+    <linearGradient
+       id="linear21"
+       gradientUnits="userSpaceOnUse"
+       x1="0.001012"
+       y1="104.99899"
+       x2="105.00101"
+       y2="-0.001012"
+       gradientTransform="matrix(0.5,0,0,0.5,353.42499,300.375)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(48.626709%,21.960449%,21.960449%);stop-opacity:1;"
+         id="stop9518" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(48.7854%,22.085571%,22.085571%);stop-opacity:1;"
+         id="stop9520" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(49.104309%,22.335815%,22.335815%);stop-opacity:1;"
+         id="stop9522" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(49.423218%,22.587585%,22.587585%);stop-opacity:1;"
+         id="stop9524" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(49.742126%,22.839355%,22.839355%);stop-opacity:1;"
+         id="stop9526" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(50.059509%,23.0896%,23.0896%);stop-opacity:1;"
+         id="stop9528" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(50.378418%,23.34137%,23.34137%);stop-opacity:1;"
+         id="stop9530" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(50.697327%,23.59314%,23.59314%);stop-opacity:1;"
+         id="stop9532" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(51.016235%,23.843384%,23.843384%);stop-opacity:1;"
+         id="stop9534" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(51.335144%,24.095154%,24.095154%);stop-opacity:1;"
+         id="stop9536" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(51.652527%,24.346924%,24.346924%);stop-opacity:1;"
+         id="stop9538" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(51.971436%,24.597168%,24.597168%);stop-opacity:1;"
+         id="stop9540" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(52.290344%,24.848938%,24.848938%);stop-opacity:1;"
+         id="stop9542" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(52.609253%,25.100708%,25.100708%);stop-opacity:1;"
+         id="stop9544" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(52.928162%,25.350952%,25.350952%);stop-opacity:1;"
+         id="stop9546" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(53.24707%,25.602722%,25.602722%);stop-opacity:1;"
+         id="stop9548" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(53.564453%,25.852966%,25.852966%);stop-opacity:1;"
+         id="stop9550" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(53.883362%,26.104736%,26.104736%);stop-opacity:1;"
+         id="stop9552" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(54.202271%,26.356506%,26.356506%);stop-opacity:1;"
+         id="stop9554" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(54.521179%,26.60675%,26.60675%);stop-opacity:1;"
+         id="stop9556" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(54.840088%,26.858521%,26.858521%);stop-opacity:1;"
+         id="stop9558" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(55.157471%,27.110291%,27.110291%);stop-opacity:1;"
+         id="stop9560" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(55.476379%,27.360535%,27.360535%);stop-opacity:1;"
+         id="stop9562" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(55.795288%,27.612305%,27.612305%);stop-opacity:1;"
+         id="stop9564" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(56.114197%,27.864075%,27.864075%);stop-opacity:1;"
+         id="stop9566" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(56.433105%,28.114319%,28.114319%);stop-opacity:1;"
+         id="stop9568" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(56.752014%,28.366089%,28.366089%);stop-opacity:1;"
+         id="stop9570" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(57.069397%,28.617859%,28.617859%);stop-opacity:1;"
+         id="stop9572" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(57.388306%,28.868103%,28.868103%);stop-opacity:1;"
+         id="stop9574" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(57.707214%,29.119873%,29.119873%);stop-opacity:1;"
+         id="stop9576" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(58.026123%,29.370117%,29.370117%);stop-opacity:1;"
+         id="stop9578" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(58.345032%,29.621887%,29.621887%);stop-opacity:1;"
+         id="stop9580" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(58.662415%,29.873657%,29.873657%);stop-opacity:1;"
+         id="stop9582" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(58.981323%,30.123901%,30.123901%);stop-opacity:1;"
+         id="stop9584" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(59.300232%,30.375671%,30.375671%);stop-opacity:1;"
+         id="stop9586" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(59.619141%,30.627441%,30.627441%);stop-opacity:1;"
+         id="stop9588" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(59.938049%,30.877686%,30.877686%);stop-opacity:1;"
+         id="stop9590" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(60.255432%,31.129456%,31.129456%);stop-opacity:1;"
+         id="stop9592" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(60.574341%,31.381226%,31.381226%);stop-opacity:1;"
+         id="stop9594" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(60.89325%,31.63147%,31.63147%);stop-opacity:1;"
+         id="stop9596" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(61.212158%,31.88324%,31.88324%);stop-opacity:1;"
+         id="stop9598" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(61.531067%,32.13501%,32.13501%);stop-opacity:1;"
+         id="stop9600" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(61.849976%,32.385254%,32.385254%);stop-opacity:1;"
+         id="stop9602" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(62.167358%,32.637024%,32.637024%);stop-opacity:1;"
+         id="stop9604" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(62.486267%,32.887268%,32.887268%);stop-opacity:1;"
+         id="stop9606" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(62.805176%,33.139038%,33.139038%);stop-opacity:1;"
+         id="stop9608" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(63.124084%,33.390808%,33.390808%);stop-opacity:1;"
+         id="stop9610" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(63.442993%,33.641052%,33.641052%);stop-opacity:1;"
+         id="stop9612" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(63.760376%,33.892822%,33.892822%);stop-opacity:1;"
+         id="stop9614" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(64.079285%,34.144592%,34.144592%);stop-opacity:1;"
+         id="stop9616" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(64.398193%,34.394836%,34.394836%);stop-opacity:1;"
+         id="stop9618" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(64.717102%,34.646606%,34.646606%);stop-opacity:1;"
+         id="stop9620" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(65.036011%,34.898376%,34.898376%);stop-opacity:1;"
+         id="stop9622" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(65.354919%,35.148621%,35.148621%);stop-opacity:1;"
+         id="stop9624" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(65.672302%,35.400391%,35.400391%);stop-opacity:1;"
+         id="stop9626" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(65.991211%,35.652161%,35.652161%);stop-opacity:1;"
+         id="stop9628" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(66.31012%,35.902405%,35.902405%);stop-opacity:1;"
+         id="stop9630" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(66.629028%,36.154175%,36.154175%);stop-opacity:1;"
+         id="stop9632" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(66.947937%,36.404419%,36.404419%);stop-opacity:1;"
+         id="stop9634" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(67.26532%,36.656189%,36.656189%);stop-opacity:1;"
+         id="stop9636" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(67.584229%,36.907959%,36.907959%);stop-opacity:1;"
+         id="stop9638" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(67.903137%,37.158203%,37.158203%);stop-opacity:1;"
+         id="stop9640" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(68.222046%,37.409973%,37.409973%);stop-opacity:1;"
+         id="stop9642" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(68.540955%,37.661743%,37.661743%);stop-opacity:1;"
+         id="stop9644" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(68.858337%,37.911987%,37.911987%);stop-opacity:1;"
+         id="stop9646" />
+    </linearGradient>
+    <clipPath
+       id="clip2340">
+      <path
+         d="m 353.42578,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path9649" />
+    </clipPath>
+    <clipPath
+       id="clip2341">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9652" />
+    </clipPath>
+    <clipPath
+       id="clip2342">
+      <path
+         d="M 356.5,300.5 H 403 c 1.65625,0 3,1.34375 3,3 V 350 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9655" />
+    </clipPath>
+    <clipPath
+       id="clip2343">
+      <path
+         d="M 353.42578,350 H 354 v 2.875 h -0.57422 z m 0,0"
+         id="path9658" />
+    </clipPath>
+    <clipPath
+       id="clip2344">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9661" />
+    </clipPath>
+    <clipPath
+       id="clip2345">
+      <path
+         d="M 353.42578,349 H 354 v 3.875 h -0.57422 z m 0,0"
+         id="path9664" />
+    </clipPath>
+    <clipPath
+       id="clip2346">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9667" />
+    </clipPath>
+    <clipPath
+       id="clip2347">
+      <path
+         d="M 353.42578,348 H 355 v 4.875 h -1.57422 z m 0,0"
+         id="path9670" />
+    </clipPath>
+    <clipPath
+       id="clip2348">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9673" />
+    </clipPath>
+    <clipPath
+       id="clip2349">
+      <path
+         d="M 353.42578,348 H 356 v 4.875 h -2.57422 z m 0,0"
+         id="path9676" />
+    </clipPath>
+    <clipPath
+       id="clip2350">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9679" />
+    </clipPath>
+    <clipPath
+       id="clip2351">
+      <path
+         d="M 353.42578,347 H 357 v 5.875 h -3.57422 z m 0,0"
+         id="path9682" />
+    </clipPath>
+    <clipPath
+       id="clip2352">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9685" />
+    </clipPath>
+    <clipPath
+       id="clip2353">
+      <path
+         d="M 353.42578,346 H 357 v 6.875 h -3.57422 z m 0,0"
+         id="path9688" />
+    </clipPath>
+    <clipPath
+       id="clip2354">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9691" />
+    </clipPath>
+    <clipPath
+       id="clip2355">
+      <path
+         d="M 353.42578,345 H 358 v 7.875 h -4.57422 z m 0,0"
+         id="path9694" />
+    </clipPath>
+    <clipPath
+       id="clip2356">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9697" />
+    </clipPath>
+    <clipPath
+       id="clip2357">
+      <path
+         d="M 353.42578,345 H 359 v 7.875 h -5.57422 z m 0,0"
+         id="path9700" />
+    </clipPath>
+    <clipPath
+       id="clip2358">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9703" />
+    </clipPath>
+    <clipPath
+       id="clip2359">
+      <path
+         d="M 353.42578,344 H 360 v 8.875 h -6.57422 z m 0,0"
+         id="path9706" />
+    </clipPath>
+    <clipPath
+       id="clip2360">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9709" />
+    </clipPath>
+    <clipPath
+       id="clip2361">
+      <path
+         d="M 353.42578,343 H 360 v 9.875 h -6.57422 z m 0,0"
+         id="path9712" />
+    </clipPath>
+    <clipPath
+       id="clip2362">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9715" />
+    </clipPath>
+    <clipPath
+       id="clip2363">
+      <path
+         d="M 353.42578,342 H 361 v 10.875 h -7.57422 z m 0,0"
+         id="path9718" />
+    </clipPath>
+    <clipPath
+       id="clip2364">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9721" />
+    </clipPath>
+    <clipPath
+       id="clip2365">
+      <path
+         d="M 353.42578,342 H 362 v 10.875 h -8.57422 z m 0,0"
+         id="path9724" />
+    </clipPath>
+    <clipPath
+       id="clip2366">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9727" />
+    </clipPath>
+    <clipPath
+       id="clip2367">
+      <path
+         d="M 353.42578,341 H 363 v 11.875 h -9.57422 z m 0,0"
+         id="path9730" />
+    </clipPath>
+    <clipPath
+       id="clip2368">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9733" />
+    </clipPath>
+    <clipPath
+       id="clip2369">
+      <path
+         d="M 353.42578,340 H 363 v 12.875 h -9.57422 z m 0,0"
+         id="path9736" />
+    </clipPath>
+    <clipPath
+       id="clip2370">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9739" />
+    </clipPath>
+    <clipPath
+       id="clip2371">
+      <path
+         d="M 353.42578,339 H 364 v 13.875 h -10.57422 z m 0,0"
+         id="path9742" />
+    </clipPath>
+    <clipPath
+       id="clip2372">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9745" />
+    </clipPath>
+    <clipPath
+       id="clip2373">
+      <path
+         d="M 353.42578,339 H 365 v 13.875 h -11.57422 z m 0,0"
+         id="path9748" />
+    </clipPath>
+    <clipPath
+       id="clip2374">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9751" />
+    </clipPath>
+    <clipPath
+       id="clip2375">
+      <path
+         d="M 353.42578,338 H 366 v 14.875 h -12.57422 z m 0,0"
+         id="path9754" />
+    </clipPath>
+    <clipPath
+       id="clip2376">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9757" />
+    </clipPath>
+    <clipPath
+       id="clip2377">
+      <path
+         d="M 353.42578,337 H 366 v 15.875 h -12.57422 z m 0,0"
+         id="path9760" />
+    </clipPath>
+    <clipPath
+       id="clip2378">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9763" />
+    </clipPath>
+    <clipPath
+       id="clip2379">
+      <path
+         d="M 353.42578,336 H 367 v 16.875 h -13.57422 z m 0,0"
+         id="path9766" />
+    </clipPath>
+    <clipPath
+       id="clip2380">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9769" />
+    </clipPath>
+    <clipPath
+       id="clip2381">
+      <path
+         d="M 353.42578,336 H 368 v 16.875 h -14.57422 z m 0,0"
+         id="path9772" />
+    </clipPath>
+    <clipPath
+       id="clip2382">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9775" />
+    </clipPath>
+    <clipPath
+       id="clip2383">
+      <path
+         d="M 353.42578,335 H 369 v 17.875 h -15.57422 z m 0,0"
+         id="path9778" />
+    </clipPath>
+    <clipPath
+       id="clip2384">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9781" />
+    </clipPath>
+    <clipPath
+       id="clip2385">
+      <path
+         d="M 353.42578,334 H 369 v 18.875 h -15.57422 z m 0,0"
+         id="path9784" />
+    </clipPath>
+    <clipPath
+       id="clip2386">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9787" />
+    </clipPath>
+    <clipPath
+       id="clip2387">
+      <path
+         d="M 353.42578,333 H 370 v 19.875 h -16.57422 z m 0,0"
+         id="path9790" />
+    </clipPath>
+    <clipPath
+       id="clip2388">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9793" />
+    </clipPath>
+    <clipPath
+       id="clip2389">
+      <path
+         d="M 353.42578,333 H 371 v 19.875 h -17.57422 z m 0,0"
+         id="path9796" />
+    </clipPath>
+    <clipPath
+       id="clip2390">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9799" />
+    </clipPath>
+    <clipPath
+       id="clip2391">
+      <path
+         d="M 353.42578,332 H 372 v 20.875 h -18.57422 z m 0,0"
+         id="path9802" />
+    </clipPath>
+    <clipPath
+       id="clip2392">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9805" />
+    </clipPath>
+    <clipPath
+       id="clip2393">
+      <path
+         d="M 353.42578,331 H 372 v 21.875 h -18.57422 z m 0,0"
+         id="path9808" />
+    </clipPath>
+    <clipPath
+       id="clip2394">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9811" />
+    </clipPath>
+    <clipPath
+       id="clip2395">
+      <path
+         d="M 353.42578,330 H 373 v 22.875 h -19.57422 z m 0,0"
+         id="path9814" />
+    </clipPath>
+    <clipPath
+       id="clip2396">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9817" />
+    </clipPath>
+    <clipPath
+       id="clip2397">
+      <path
+         d="M 353.42578,330 H 374 v 22.875 h -20.57422 z m 0,0"
+         id="path9820" />
+    </clipPath>
+    <clipPath
+       id="clip2398">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9823" />
+    </clipPath>
+    <clipPath
+       id="clip2399">
+      <path
+         d="M 353.42578,329 H 375 v 23 h -21.57422 z m 0,0"
+         id="path9826" />
+    </clipPath>
+    <clipPath
+       id="clip2400">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9829" />
+    </clipPath>
+    <clipPath
+       id="clip2401">
+      <path
+         d="M 353.42578,328 H 375 v 23 h -21.57422 z m 0,0"
+         id="path9832" />
+    </clipPath>
+    <clipPath
+       id="clip2402">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9835" />
+    </clipPath>
+    <clipPath
+       id="clip2403">
+      <path
+         d="M 353.42578,327 H 376 v 23 h -22.57422 z m 0,0"
+         id="path9838" />
+    </clipPath>
+    <clipPath
+       id="clip2404">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9841" />
+    </clipPath>
+    <clipPath
+       id="clip2405">
+      <path
+         d="M 353.42578,327 H 377 v 23 h -23.57422 z m 0,0"
+         id="path9844" />
+    </clipPath>
+    <clipPath
+       id="clip2406">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9847" />
+    </clipPath>
+    <clipPath
+       id="clip2407">
+      <path
+         d="M 353.42578,326 H 378 v 23 h -24.57422 z m 0,0"
+         id="path9850" />
+    </clipPath>
+    <clipPath
+       id="clip2408">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9853" />
+    </clipPath>
+    <clipPath
+       id="clip2409">
+      <path
+         d="M 353.42578,325 H 378 v 23 h -24.57422 z m 0,0"
+         id="path9856" />
+    </clipPath>
+    <clipPath
+       id="clip2410">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9859" />
+    </clipPath>
+    <clipPath
+       id="clip2411">
+      <path
+         d="m 354,324 h 25 v 23 h -25 z m 0,0"
+         id="path9862" />
+    </clipPath>
+    <clipPath
+       id="clip2412">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9865" />
+    </clipPath>
+    <clipPath
+       id="clip2413">
+      <path
+         d="m 355,324 h 25 v 23 h -25 z m 0,0"
+         id="path9868" />
+    </clipPath>
+    <clipPath
+       id="clip2414">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9871" />
+    </clipPath>
+    <clipPath
+       id="clip2415">
+      <path
+         d="m 355,323 h 26 v 23 h -26 z m 0,0"
+         id="path9874" />
+    </clipPath>
+    <clipPath
+       id="clip2416">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9877" />
+    </clipPath>
+    <clipPath
+       id="clip2417">
+      <path
+         d="m 356,322 h 25 v 23 h -25 z m 0,0"
+         id="path9880" />
+    </clipPath>
+    <clipPath
+       id="clip2418">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9883" />
+    </clipPath>
+    <clipPath
+       id="clip2419">
+      <path
+         d="m 357,321 h 25 v 23 h -25 z m 0,0"
+         id="path9886" />
+    </clipPath>
+    <clipPath
+       id="clip2420">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9889" />
+    </clipPath>
+    <clipPath
+       id="clip2421">
+      <path
+         d="m 358,321 h 25 v 23 h -25 z m 0,0"
+         id="path9892" />
+    </clipPath>
+    <clipPath
+       id="clip2422">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9895" />
+    </clipPath>
+    <clipPath
+       id="clip2423">
+      <path
+         d="m 358,320 h 26 v 23 h -26 z m 0,0"
+         id="path9898" />
+    </clipPath>
+    <clipPath
+       id="clip2424">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9901" />
+    </clipPath>
+    <clipPath
+       id="clip2425">
+      <path
+         d="m 359,319 h 25 v 23 h -25 z m 0,0"
+         id="path9904" />
+    </clipPath>
+    <clipPath
+       id="clip2426">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9907" />
+    </clipPath>
+    <clipPath
+       id="clip2427">
+      <path
+         d="m 360,318 h 25 v 23 h -25 z m 0,0"
+         id="path9910" />
+    </clipPath>
+    <clipPath
+       id="clip2428">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9913" />
+    </clipPath>
+    <clipPath
+       id="clip2429">
+      <path
+         d="m 361,318 h 25 v 23 h -25 z m 0,0"
+         id="path9916" />
+    </clipPath>
+    <clipPath
+       id="clip2430">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9919" />
+    </clipPath>
+    <clipPath
+       id="clip2431">
+      <path
+         d="m 361,317 h 26 v 23 h -26 z m 0,0"
+         id="path9922" />
+    </clipPath>
+    <clipPath
+       id="clip2432">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9925" />
+    </clipPath>
+    <clipPath
+       id="clip2433">
+      <path
+         d="m 362,316 h 25 v 23 h -25 z m 0,0"
+         id="path9928" />
+    </clipPath>
+    <clipPath
+       id="clip2434">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9931" />
+    </clipPath>
+    <clipPath
+       id="clip2435">
+      <path
+         d="m 363,315 h 25 v 23 h -25 z m 0,0"
+         id="path9934" />
+    </clipPath>
+    <clipPath
+       id="clip2436">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9937" />
+    </clipPath>
+    <clipPath
+       id="clip2437">
+      <path
+         d="m 364,315 h 25 v 23 h -25 z m 0,0"
+         id="path9940" />
+    </clipPath>
+    <clipPath
+       id="clip2438">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9943" />
+    </clipPath>
+    <clipPath
+       id="clip2439">
+      <path
+         d="m 364,314 h 26 v 23 h -26 z m 0,0"
+         id="path9946" />
+    </clipPath>
+    <clipPath
+       id="clip2440">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9949" />
+    </clipPath>
+    <clipPath
+       id="clip2441">
+      <path
+         d="m 365,313 h 25 v 23 h -25 z m 0,0"
+         id="path9952" />
+    </clipPath>
+    <clipPath
+       id="clip2442">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9955" />
+    </clipPath>
+    <clipPath
+       id="clip2443">
+      <path
+         d="m 366,312 h 25 v 23 h -25 z m 0,0"
+         id="path9958" />
+    </clipPath>
+    <clipPath
+       id="clip2444">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9961" />
+    </clipPath>
+    <clipPath
+       id="clip2445">
+      <path
+         d="m 367,312 h 25 v 23 h -25 z m 0,0"
+         id="path9964" />
+    </clipPath>
+    <clipPath
+       id="clip2446">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9967" />
+    </clipPath>
+    <clipPath
+       id="clip2447">
+      <path
+         d="m 367,311 h 26 v 23 h -26 z m 0,0"
+         id="path9970" />
+    </clipPath>
+    <clipPath
+       id="clip2448">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9973" />
+    </clipPath>
+    <clipPath
+       id="clip2449">
+      <path
+         d="m 368,310 h 25 v 23 h -25 z m 0,0"
+         id="path9976" />
+    </clipPath>
+    <clipPath
+       id="clip2450">
+      <path
+         d="m 356.42578,300.375 h 46.5 c 1.65625,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34375,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9979" />
+    </clipPath>
+    <clipPath
+       id="clip2451">
+      <path
+         d="m 435.10156,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path9982" />
+    </clipPath>
+    <clipPath
+       id="clip2452">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path9985" />
+    </clipPath>
+    <linearGradient
+       id="linear22"
+       gradientUnits="userSpaceOnUse"
+       x1="0.001994"
+       y1="104.99801"
+       x2="105.00199"
+       y2="-0.001994"
+       gradientTransform="matrix(0.5,0,0,0.5,435.10001,300.375)">
+      <stop
+         offset="0"
+         style="stop-color:rgb(38.430786%,39.607239%,51.763916%);stop-opacity:1;"
+         id="stop9988" />
+      <stop
+         offset="0.015625"
+         style="stop-color:rgb(38.500977%,39.680481%,51.864624%);stop-opacity:1;"
+         id="stop9990" />
+      <stop
+         offset="0.03125"
+         style="stop-color:rgb(38.641357%,39.826965%,52.067566%);stop-opacity:1;"
+         id="stop9992" />
+      <stop
+         offset="0.046875"
+         style="stop-color:rgb(38.783264%,39.974976%,52.268982%);stop-opacity:1;"
+         id="stop9994" />
+      <stop
+         offset="0.0625"
+         style="stop-color:rgb(38.923645%,40.12146%,52.471924%);stop-opacity:1;"
+         id="stop9996" />
+      <stop
+         offset="0.078125"
+         style="stop-color:rgb(39.064026%,40.267944%,52.67334%);stop-opacity:1;"
+         id="stop9998" />
+      <stop
+         offset="0.09375"
+         style="stop-color:rgb(39.205933%,40.415955%,52.876282%);stop-opacity:1;"
+         id="stop10000" />
+      <stop
+         offset="0.109375"
+         style="stop-color:rgb(39.346313%,40.562439%,53.077698%);stop-opacity:1;"
+         id="stop10002" />
+      <stop
+         offset="0.125"
+         style="stop-color:rgb(39.48822%,40.710449%,53.28064%);stop-opacity:1;"
+         id="stop10004" />
+      <stop
+         offset="0.140625"
+         style="stop-color:rgb(39.628601%,40.856934%,53.482056%);stop-opacity:1;"
+         id="stop10006" />
+      <stop
+         offset="0.15625"
+         style="stop-color:rgb(39.768982%,41.003418%,53.684998%);stop-opacity:1;"
+         id="stop10008" />
+      <stop
+         offset="0.171875"
+         style="stop-color:rgb(39.910889%,41.151428%,53.886414%);stop-opacity:1;"
+         id="stop10010" />
+      <stop
+         offset="0.1875"
+         style="stop-color:rgb(40.05127%,41.297913%,54.089355%);stop-opacity:1;"
+         id="stop10012" />
+      <stop
+         offset="0.203125"
+         style="stop-color:rgb(40.19165%,41.445923%,54.290771%);stop-opacity:1;"
+         id="stop10014" />
+      <stop
+         offset="0.21875"
+         style="stop-color:rgb(40.333557%,41.592407%,54.493713%);stop-opacity:1;"
+         id="stop10016" />
+      <stop
+         offset="0.234375"
+         style="stop-color:rgb(40.473938%,41.738892%,54.695129%);stop-opacity:1;"
+         id="stop10018" />
+      <stop
+         offset="0.25"
+         style="stop-color:rgb(40.614319%,41.886902%,54.898071%);stop-opacity:1;"
+         id="stop10020" />
+      <stop
+         offset="0.265625"
+         style="stop-color:rgb(40.756226%,42.033386%,55.099487%);stop-opacity:1;"
+         id="stop10022" />
+      <stop
+         offset="0.28125"
+         style="stop-color:rgb(40.896606%,42.179871%,55.302429%);stop-opacity:1;"
+         id="stop10024" />
+      <stop
+         offset="0.296875"
+         style="stop-color:rgb(41.038513%,42.327881%,55.503845%);stop-opacity:1;"
+         id="stop10026" />
+      <stop
+         offset="0.3125"
+         style="stop-color:rgb(41.178894%,42.474365%,55.706787%);stop-opacity:1;"
+         id="stop10028" />
+      <stop
+         offset="0.328125"
+         style="stop-color:rgb(41.319275%,42.622375%,55.909729%);stop-opacity:1;"
+         id="stop10030" />
+      <stop
+         offset="0.34375"
+         style="stop-color:rgb(41.461182%,42.76886%,56.111145%);stop-opacity:1;"
+         id="stop10032" />
+      <stop
+         offset="0.359375"
+         style="stop-color:rgb(41.601562%,42.915344%,56.314087%);stop-opacity:1;"
+         id="stop10034" />
+      <stop
+         offset="0.375"
+         style="stop-color:rgb(41.741943%,43.063354%,56.515503%);stop-opacity:1;"
+         id="stop10036" />
+      <stop
+         offset="0.390625"
+         style="stop-color:rgb(41.88385%,43.209839%,56.718445%);stop-opacity:1;"
+         id="stop10038" />
+      <stop
+         offset="0.40625"
+         style="stop-color:rgb(42.024231%,43.356323%,56.919861%);stop-opacity:1;"
+         id="stop10040" />
+      <stop
+         offset="0.421875"
+         style="stop-color:rgb(42.164612%,43.504333%,57.122803%);stop-opacity:1;"
+         id="stop10042" />
+      <stop
+         offset="0.4375"
+         style="stop-color:rgb(42.306519%,43.650818%,57.324219%);stop-opacity:1;"
+         id="stop10044" />
+      <stop
+         offset="0.453125"
+         style="stop-color:rgb(42.446899%,43.798828%,57.527161%);stop-opacity:1;"
+         id="stop10046" />
+      <stop
+         offset="0.46875"
+         style="stop-color:rgb(42.58728%,43.945312%,57.728577%);stop-opacity:1;"
+         id="stop10048" />
+      <stop
+         offset="0.484375"
+         style="stop-color:rgb(42.729187%,44.091797%,57.931519%);stop-opacity:1;"
+         id="stop10050" />
+      <stop
+         offset="0.5"
+         style="stop-color:rgb(42.869568%,44.239807%,58.132935%);stop-opacity:1;"
+         id="stop10052" />
+      <stop
+         offset="0.515625"
+         style="stop-color:rgb(43.011475%,44.386292%,58.335876%);stop-opacity:1;"
+         id="stop10054" />
+      <stop
+         offset="0.53125"
+         style="stop-color:rgb(43.151855%,44.532776%,58.537292%);stop-opacity:1;"
+         id="stop10056" />
+      <stop
+         offset="0.546875"
+         style="stop-color:rgb(43.292236%,44.680786%,58.740234%);stop-opacity:1;"
+         id="stop10058" />
+      <stop
+         offset="0.5625"
+         style="stop-color:rgb(43.434143%,44.827271%,58.94165%);stop-opacity:1;"
+         id="stop10060" />
+      <stop
+         offset="0.578125"
+         style="stop-color:rgb(43.574524%,44.975281%,59.144592%);stop-opacity:1;"
+         id="stop10062" />
+      <stop
+         offset="0.59375"
+         style="stop-color:rgb(43.714905%,45.121765%,59.346008%);stop-opacity:1;"
+         id="stop10064" />
+      <stop
+         offset="0.609375"
+         style="stop-color:rgb(43.856812%,45.26825%,59.54895%);stop-opacity:1;"
+         id="stop10066" />
+      <stop
+         offset="0.625"
+         style="stop-color:rgb(43.997192%,45.41626%,59.750366%);stop-opacity:1;"
+         id="stop10068" />
+      <stop
+         offset="0.640625"
+         style="stop-color:rgb(44.137573%,45.562744%,59.953308%);stop-opacity:1;"
+         id="stop10070" />
+      <stop
+         offset="0.65625"
+         style="stop-color:rgb(44.27948%,45.709229%,60.154724%);stop-opacity:1;"
+         id="stop10072" />
+      <stop
+         offset="0.671875"
+         style="stop-color:rgb(44.419861%,45.857239%,60.357666%);stop-opacity:1;"
+         id="stop10074" />
+      <stop
+         offset="0.6875"
+         style="stop-color:rgb(44.561768%,46.003723%,60.559082%);stop-opacity:1;"
+         id="stop10076" />
+      <stop
+         offset="0.703125"
+         style="stop-color:rgb(44.702148%,46.151733%,60.762024%);stop-opacity:1;"
+         id="stop10078" />
+      <stop
+         offset="0.71875"
+         style="stop-color:rgb(44.842529%,46.298218%,60.96344%);stop-opacity:1;"
+         id="stop10080" />
+      <stop
+         offset="0.734375"
+         style="stop-color:rgb(44.984436%,46.444702%,61.166382%);stop-opacity:1;"
+         id="stop10082" />
+      <stop
+         offset="0.75"
+         style="stop-color:rgb(45.124817%,46.592712%,61.369324%);stop-opacity:1;"
+         id="stop10084" />
+      <stop
+         offset="0.765625"
+         style="stop-color:rgb(45.265198%,46.739197%,61.57074%);stop-opacity:1;"
+         id="stop10086" />
+      <stop
+         offset="0.78125"
+         style="stop-color:rgb(45.407104%,46.885681%,61.773682%);stop-opacity:1;"
+         id="stop10088" />
+      <stop
+         offset="0.796875"
+         style="stop-color:rgb(45.547485%,47.033691%,61.975098%);stop-opacity:1;"
+         id="stop10090" />
+      <stop
+         offset="0.8125"
+         style="stop-color:rgb(45.687866%,47.180176%,62.17804%);stop-opacity:1;"
+         id="stop10092" />
+      <stop
+         offset="0.828125"
+         style="stop-color:rgb(45.829773%,47.328186%,62.379456%);stop-opacity:1;"
+         id="stop10094" />
+      <stop
+         offset="0.84375"
+         style="stop-color:rgb(45.970154%,47.47467%,62.582397%);stop-opacity:1;"
+         id="stop10096" />
+      <stop
+         offset="0.859375"
+         style="stop-color:rgb(46.110535%,47.621155%,62.783813%);stop-opacity:1;"
+         id="stop10098" />
+      <stop
+         offset="0.875"
+         style="stop-color:rgb(46.252441%,47.769165%,62.986755%);stop-opacity:1;"
+         id="stop10100" />
+      <stop
+         offset="0.890625"
+         style="stop-color:rgb(46.392822%,47.915649%,63.188171%);stop-opacity:1;"
+         id="stop10102" />
+      <stop
+         offset="0.90625"
+         style="stop-color:rgb(46.534729%,48.062134%,63.391113%);stop-opacity:1;"
+         id="stop10104" />
+      <stop
+         offset="0.921875"
+         style="stop-color:rgb(46.67511%,48.210144%,63.592529%);stop-opacity:1;"
+         id="stop10106" />
+      <stop
+         offset="0.9375"
+         style="stop-color:rgb(46.815491%,48.356628%,63.795471%);stop-opacity:1;"
+         id="stop10108" />
+      <stop
+         offset="0.953125"
+         style="stop-color:rgb(46.957397%,48.504639%,63.996887%);stop-opacity:1;"
+         id="stop10110" />
+      <stop
+         offset="0.96875"
+         style="stop-color:rgb(47.097778%,48.651123%,64.199829%);stop-opacity:1;"
+         id="stop10112" />
+      <stop
+         offset="0.984375"
+         style="stop-color:rgb(47.238159%,48.797607%,64.401245%);stop-opacity:1;"
+         id="stop10114" />
+      <stop
+         offset="1"
+         style="stop-color:rgb(47.380066%,48.945618%,64.604187%);stop-opacity:1;"
+         id="stop10116" />
+    </linearGradient>
+    <clipPath
+       id="clip2453">
+      <path
+         d="M 435.10156,352 H 437 v 0.875 h -1.89844 z m 0,0"
+         id="path10119" />
+    </clipPath>
+    <clipPath
+       id="clip2454">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10122" />
+    </clipPath>
+    <clipPath
+       id="clip2455">
+      <path
+         d="M 435.10156,352 H 438 v 0.875 h -2.89844 z m 0,0"
+         id="path10125" />
+    </clipPath>
+    <clipPath
+       id="clip2456">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10128" />
+    </clipPath>
+    <clipPath
+       id="clip2457">
+      <path
+         d="M 435.10156,351 H 438 v 1.875 h -2.89844 z m 0,0"
+         id="path10131" />
+    </clipPath>
+    <clipPath
+       id="clip2458">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10134" />
+    </clipPath>
+    <clipPath
+       id="clip2459">
+      <path
+         d="M 435.10156,350 H 439 v 2.875 h -3.89844 z m 0,0"
+         id="path10137" />
+    </clipPath>
+    <clipPath
+       id="clip2460">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10140" />
+    </clipPath>
+    <clipPath
+       id="clip2461">
+      <path
+         d="M 435.10156,349 H 440 v 3.875 h -4.89844 z m 0,0"
+         id="path10143" />
+    </clipPath>
+    <clipPath
+       id="clip2462">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10146" />
+    </clipPath>
+    <clipPath
+       id="clip2463">
+      <path
+         d="M 435.10156,349 H 441 v 3.875 h -5.89844 z m 0,0"
+         id="path10149" />
+    </clipPath>
+    <clipPath
+       id="clip2464">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10152" />
+    </clipPath>
+    <clipPath
+       id="clip2465">
+      <path
+         d="M 435.10156,348 H 441 v 4.875 h -5.89844 z m 0,0"
+         id="path10155" />
+    </clipPath>
+    <clipPath
+       id="clip2466">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10158" />
+    </clipPath>
+    <clipPath
+       id="clip2467">
+      <path
+         d="M 435.10156,347 H 442 v 5.875 h -6.89844 z m 0,0"
+         id="path10161" />
+    </clipPath>
+    <clipPath
+       id="clip2468">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10164" />
+    </clipPath>
+    <clipPath
+       id="clip2469">
+      <path
+         d="M 435.10156,346 H 443 v 6.875 h -7.89844 z m 0,0"
+         id="path10167" />
+    </clipPath>
+    <clipPath
+       id="clip2470">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10170" />
+    </clipPath>
+    <clipPath
+       id="clip2471">
+      <path
+         d="M 435.10156,346 H 444 v 6.875 h -8.89844 z m 0,0"
+         id="path10173" />
+    </clipPath>
+    <clipPath
+       id="clip2472">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10176" />
+    </clipPath>
+    <clipPath
+       id="clip2473">
+      <path
+         d="M 435.10156,345 H 444 v 7.875 h -8.89844 z m 0,0"
+         id="path10179" />
+    </clipPath>
+    <clipPath
+       id="clip2474">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10182" />
+    </clipPath>
+    <clipPath
+       id="clip2475">
+      <path
+         d="M 435.10156,344 H 445 v 8.875 h -9.89844 z m 0,0"
+         id="path10185" />
+    </clipPath>
+    <clipPath
+       id="clip2476">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10188" />
+    </clipPath>
+    <clipPath
+       id="clip2477">
+      <path
+         d="M 435.10156,343 H 446 v 9.875 h -10.89844 z m 0,0"
+         id="path10191" />
+    </clipPath>
+    <clipPath
+       id="clip2478">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10194" />
+    </clipPath>
+    <clipPath
+       id="clip2479">
+      <path
+         d="M 435.10156,343 H 447 v 9.875 h -11.89844 z m 0,0"
+         id="path10197" />
+    </clipPath>
+    <clipPath
+       id="clip2480">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10200" />
+    </clipPath>
+    <clipPath
+       id="clip2481">
+      <path
+         d="M 435.10156,342 H 447 v 10.875 h -11.89844 z m 0,0"
+         id="path10203" />
+    </clipPath>
+    <clipPath
+       id="clip2482">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10206" />
+    </clipPath>
+    <clipPath
+       id="clip2483">
+      <path
+         d="M 435.10156,341 H 448 v 11.875 h -12.89844 z m 0,0"
+         id="path10209" />
+    </clipPath>
+    <clipPath
+       id="clip2484">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10212" />
+    </clipPath>
+    <clipPath
+       id="clip2485">
+      <path
+         d="M 435.10156,340 H 449 v 12.875 h -13.89844 z m 0,0"
+         id="path10215" />
+    </clipPath>
+    <clipPath
+       id="clip2486">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10218" />
+    </clipPath>
+    <clipPath
+       id="clip2487">
+      <path
+         d="M 435.10156,340 H 450 v 12.875 h -14.89844 z m 0,0"
+         id="path10221" />
+    </clipPath>
+    <clipPath
+       id="clip2488">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10224" />
+    </clipPath>
+    <clipPath
+       id="clip2489">
+      <path
+         d="M 435.10156,339 H 450 v 13.875 h -14.89844 z m 0,0"
+         id="path10227" />
+    </clipPath>
+    <clipPath
+       id="clip2490">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10230" />
+    </clipPath>
+    <clipPath
+       id="clip2491">
+      <path
+         d="M 435.10156,338 H 451 v 14.875 h -15.89844 z m 0,0"
+         id="path10233" />
+    </clipPath>
+    <clipPath
+       id="clip2492">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10236" />
+    </clipPath>
+    <clipPath
+       id="clip2493">
+      <path
+         d="M 435.10156,337 H 452 v 15.875 h -16.89844 z m 0,0"
+         id="path10239" />
+    </clipPath>
+    <clipPath
+       id="clip2494">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10242" />
+    </clipPath>
+    <clipPath
+       id="clip2495">
+      <path
+         d="M 435.10156,337 H 453 v 15.875 h -17.89844 z m 0,0"
+         id="path10245" />
+    </clipPath>
+    <clipPath
+       id="clip2496">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10248" />
+    </clipPath>
+    <clipPath
+       id="clip2497">
+      <path
+         d="M 435.10156,336 H 453 v 16.875 h -17.89844 z m 0,0"
+         id="path10251" />
+    </clipPath>
+    <clipPath
+       id="clip2498">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10254" />
+    </clipPath>
+    <clipPath
+       id="clip2499">
+      <path
+         d="M 435.10156,335 H 454 v 17.875 h -18.89844 z m 0,0"
+         id="path10257" />
+    </clipPath>
+    <clipPath
+       id="clip2500">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10260" />
+    </clipPath>
+    <clipPath
+       id="clip2501">
+      <path
+         d="M 435.10156,334 H 455 v 18.875 h -19.89844 z m 0,0"
+         id="path10263" />
+    </clipPath>
+    <clipPath
+       id="clip2502">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10266" />
+    </clipPath>
+    <clipPath
+       id="clip2503">
+      <path
+         d="M 435.10156,334 H 456 v 18.875 h -20.89844 z m 0,0"
+         id="path10269" />
+    </clipPath>
+    <clipPath
+       id="clip2504">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10272" />
+    </clipPath>
+    <clipPath
+       id="clip2505">
+      <path
+         d="M 435.10156,333 H 456 v 19.875 h -20.89844 z m 0,0"
+         id="path10275" />
+    </clipPath>
+    <clipPath
+       id="clip2506">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10278" />
+    </clipPath>
+    <clipPath
+       id="clip2507">
+      <path
+         d="M 435.10156,332 H 457 v 20.875 h -21.89844 z m 0,0"
+         id="path10281" />
+    </clipPath>
+    <clipPath
+       id="clip2508">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10284" />
+    </clipPath>
+    <clipPath
+       id="clip2509">
+      <path
+         d="M 435.10156,331 H 458 v 21.875 h -22.89844 z m 0,0"
+         id="path10287" />
+    </clipPath>
+    <clipPath
+       id="clip2510">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10290" />
+    </clipPath>
+    <clipPath
+       id="clip2511">
+      <path
+         d="m 436,331 h 23 v 21.875 h -23 z m 0,0"
+         id="path10293" />
+    </clipPath>
+    <clipPath
+       id="clip2512">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10296" />
+    </clipPath>
+    <clipPath
+       id="clip2513">
+      <path
+         d="m 436,330 h 23 v 22.875 h -23 z m 0,0"
+         id="path10299" />
+    </clipPath>
+    <clipPath
+       id="clip2514">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10302" />
+    </clipPath>
+    <clipPath
+       id="clip2515">
+      <path
+         d="m 437,329 h 23 v 23 h -23 z m 0,0"
+         id="path10305" />
+    </clipPath>
+    <clipPath
+       id="clip2516">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10308" />
+    </clipPath>
+    <clipPath
+       id="clip2517">
+      <path
+         d="m 438,328 h 23 v 23 h -23 z m 0,0"
+         id="path10311" />
+    </clipPath>
+    <clipPath
+       id="clip2518">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10314" />
+    </clipPath>
+    <clipPath
+       id="clip2519">
+      <path
+         d="m 439,328 h 23 v 23 h -23 z m 0,0"
+         id="path10317" />
+    </clipPath>
+    <clipPath
+       id="clip2520">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10320" />
+    </clipPath>
+    <clipPath
+       id="clip2521">
+      <path
+         d="m 439,327 h 23 v 23 h -23 z m 0,0"
+         id="path10323" />
+    </clipPath>
+    <clipPath
+       id="clip2522">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10326" />
+    </clipPath>
+    <clipPath
+       id="clip2523">
+      <path
+         d="m 440,326 h 23 v 23 h -23 z m 0,0"
+         id="path10329" />
+    </clipPath>
+    <clipPath
+       id="clip2524">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10332" />
+    </clipPath>
+    <clipPath
+       id="clip2525">
+      <path
+         d="m 441,325 h 23 v 23 h -23 z m 0,0"
+         id="path10335" />
+    </clipPath>
+    <clipPath
+       id="clip2526">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10338" />
+    </clipPath>
+    <clipPath
+       id="clip2527">
+      <path
+         d="m 442,325 h 23 v 23 h -23 z m 0,0"
+         id="path10341" />
+    </clipPath>
+    <clipPath
+       id="clip2528">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10344" />
+    </clipPath>
+    <clipPath
+       id="clip2529">
+      <path
+         d="m 442,324 h 23 v 23 h -23 z m 0,0"
+         id="path10347" />
+    </clipPath>
+    <clipPath
+       id="clip2530">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10350" />
+    </clipPath>
+    <clipPath
+       id="clip2531">
+      <path
+         d="m 443,323 h 23 v 23 h -23 z m 0,0"
+         id="path10353" />
+    </clipPath>
+    <clipPath
+       id="clip2532">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10356" />
+    </clipPath>
+    <clipPath
+       id="clip2533">
+      <path
+         d="m 444,322 h 23 v 23 h -23 z m 0,0"
+         id="path10359" />
+    </clipPath>
+    <clipPath
+       id="clip2534">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10362" />
+    </clipPath>
+    <clipPath
+       id="clip2535">
+      <path
+         d="m 445,322 h 23 v 23 h -23 z m 0,0"
+         id="path10365" />
+    </clipPath>
+    <clipPath
+       id="clip2536">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10368" />
+    </clipPath>
+    <clipPath
+       id="clip2537">
+      <path
+         d="m 445,321 h 23 v 23 h -23 z m 0,0"
+         id="path10371" />
+    </clipPath>
+    <clipPath
+       id="clip2538">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10374" />
+    </clipPath>
+    <clipPath
+       id="clip2539">
+      <path
+         d="m 446,320 h 23 v 23 h -23 z m 0,0"
+         id="path10377" />
+    </clipPath>
+    <clipPath
+       id="clip2540">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10380" />
+    </clipPath>
+    <clipPath
+       id="clip2541">
+      <path
+         d="m 447,319 h 23 v 23 h -23 z m 0,0"
+         id="path10383" />
+    </clipPath>
+    <clipPath
+       id="clip2542">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10386" />
+    </clipPath>
+    <clipPath
+       id="clip2543">
+      <path
+         d="m 448,319 h 23 v 23 h -23 z m 0,0"
+         id="path10389" />
+    </clipPath>
+    <clipPath
+       id="clip2544">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10392" />
+    </clipPath>
+    <clipPath
+       id="clip2545">
+      <path
+         d="m 448,318 h 23 v 23 h -23 z m 0,0"
+         id="path10395" />
+    </clipPath>
+    <clipPath
+       id="clip2546">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10398" />
+    </clipPath>
+    <clipPath
+       id="clip2547">
+      <path
+         d="m 449,317 h 23 v 23 h -23 z m 0,0"
+         id="path10401" />
+    </clipPath>
+    <clipPath
+       id="clip2548">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10404" />
+    </clipPath>
+    <clipPath
+       id="clip2549">
+      <path
+         d="m 450,316 h 23 v 23 h -23 z m 0,0"
+         id="path10407" />
+    </clipPath>
+    <clipPath
+       id="clip2550">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10410" />
+    </clipPath>
+    <clipPath
+       id="clip2551">
+      <path
+         d="m 435.10156,300.375 h 52.5 v 52.5 h -52.5 z m 0,0"
+         id="path10413" />
+    </clipPath>
+    <clipPath
+       id="clip2552">
+      <path
+         d="m 438.10156,300.375 h 46.5 c 1.65235,0 3,1.34375 3,3 v 46.5 c 0,1.65625 -1.34765,3 -3,3 h -46.5 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10416" />
+    </clipPath>
+    <clipPath
+       id="clip2553">
+      <path
+         d="m 438,300.5 h 46.5 c 1.65625,0 3,1.34375 3,3 V 350 c 0,1.65625 -1.34375,3 -3,3 H 438 c -1.65625,0 -3,-1.34375 -3,-3 v -46.5 c 0,-1.65625 1.34375,-3 3,-3 z m 0,0"
+         id="path10419" />
+    </clipPath>
+  </defs>
+  <g
+     clip-path="url(#clip1)"
+     clip-rule="nonzero"
+     id="g10432"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip2)"
+       clip-rule="nonzero"
+       id="g10430">
+      <path
+         style="fill:url(#linear0);fill-rule:nonzero;stroke:none"
+         d="m 67.5625,49.125 v 52.5 h 52.5 v -52.5 z m 0,0"
+         id="path10428" />
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip3)"
+     clip-rule="nonzero"
+     id="g10440"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip4)"
+       clip-rule="nonzero"
+       id="g10438">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10436">
+        <use
+           xlink:href="#glyph0-1"
+           x="36.5"
+           y="126.8375"
+           id="use10434"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip5)"
+     clip-rule="nonzero"
+     id="g10448"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip6)"
+       clip-rule="nonzero"
+       id="g10446">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10444">
+        <use
+           xlink:href="#glyph0-1"
+           x="37.25"
+           y="126.0875"
+           id="use10442"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip7)"
+     clip-rule="nonzero"
+     id="g10456"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip8)"
+       clip-rule="nonzero"
+       id="g10454">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10452">
+        <use
+           xlink:href="#glyph0-1"
+           x="38.000004"
+           y="125.3375"
+           id="use10450"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip9)"
+     clip-rule="nonzero"
+     id="g10464"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip10)"
+       clip-rule="nonzero"
+       id="g10462">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10460">
+        <use
+           xlink:href="#glyph0-1"
+           x="38.750004"
+           y="124.5875"
+           id="use10458"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip11)"
+     clip-rule="nonzero"
+     id="g10472"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip12)"
+       clip-rule="nonzero"
+       id="g10470">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10468">
+        <use
+           xlink:href="#glyph0-1"
+           x="39.500004"
+           y="123.8375"
+           id="use10466"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip13)"
+     clip-rule="nonzero"
+     id="g10480"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip14)"
+       clip-rule="nonzero"
+       id="g10478">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10476">
+        <use
+           xlink:href="#glyph0-1"
+           x="40.250004"
+           y="123.08749"
+           id="use10474"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip15)"
+     clip-rule="nonzero"
+     id="g10488"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip16)"
+       clip-rule="nonzero"
+       id="g10486">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10484">
+        <use
+           xlink:href="#glyph0-1"
+           x="41.000008"
+           y="122.33749"
+           id="use10482"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip17)"
+     clip-rule="nonzero"
+     id="g10496"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip18)"
+       clip-rule="nonzero"
+       id="g10494">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10492">
+        <use
+           xlink:href="#glyph0-1"
+           x="41.750008"
+           y="121.58749"
+           id="use10490"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip19)"
+     clip-rule="nonzero"
+     id="g10504"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip20)"
+       clip-rule="nonzero"
+       id="g10502">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10500">
+        <use
+           xlink:href="#glyph0-1"
+           x="42.500008"
+           y="120.83749"
+           id="use10498"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip21)"
+     clip-rule="nonzero"
+     id="g10512"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip22)"
+       clip-rule="nonzero"
+       id="g10510">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10508">
+        <use
+           xlink:href="#glyph0-1"
+           x="43.250008"
+           y="120.08749"
+           id="use10506"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip23)"
+     clip-rule="nonzero"
+     id="g10520"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip24)"
+       clip-rule="nonzero"
+       id="g10518">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10516">
+        <use
+           xlink:href="#glyph0-1"
+           x="44.000011"
+           y="119.33749"
+           id="use10514"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip25)"
+     clip-rule="nonzero"
+     id="g10528"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip26)"
+       clip-rule="nonzero"
+       id="g10526">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10524">
+        <use
+           xlink:href="#glyph0-1"
+           x="44.750011"
+           y="118.58749"
+           id="use10522"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip27)"
+     clip-rule="nonzero"
+     id="g10536"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip28)"
+       clip-rule="nonzero"
+       id="g10534">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10532">
+        <use
+           xlink:href="#glyph0-1"
+           x="45.500011"
+           y="117.83749"
+           id="use10530"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip29)"
+     clip-rule="nonzero"
+     id="g10544"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip30)"
+       clip-rule="nonzero"
+       id="g10542">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10540">
+        <use
+           xlink:href="#glyph0-1"
+           x="46.250011"
+           y="117.08749"
+           id="use10538"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip31)"
+     clip-rule="nonzero"
+     id="g10552"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip32)"
+       clip-rule="nonzero"
+       id="g10550">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10548">
+        <use
+           xlink:href="#glyph0-1"
+           x="47.000015"
+           y="116.33749"
+           id="use10546"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip33)"
+     clip-rule="nonzero"
+     id="g10560"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip34)"
+       clip-rule="nonzero"
+       id="g10558">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10556">
+        <use
+           xlink:href="#glyph0-1"
+           x="47.750015"
+           y="115.58749"
+           id="use10554"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip35)"
+     clip-rule="nonzero"
+     id="g10568"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip36)"
+       clip-rule="nonzero"
+       id="g10566">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10564">
+        <use
+           xlink:href="#glyph0-1"
+           x="48.500015"
+           y="114.83749"
+           id="use10562"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip37)"
+     clip-rule="nonzero"
+     id="g10576"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip38)"
+       clip-rule="nonzero"
+       id="g10574">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10572">
+        <use
+           xlink:href="#glyph0-1"
+           x="49.250015"
+           y="114.08749"
+           id="use10570"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip39)"
+     clip-rule="nonzero"
+     id="g10584"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip40)"
+       clip-rule="nonzero"
+       id="g10582">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10580">
+        <use
+           xlink:href="#glyph0-1"
+           x="50.000019"
+           y="113.33749"
+           id="use10578"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip41)"
+     clip-rule="nonzero"
+     id="g10592"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip42)"
+       clip-rule="nonzero"
+       id="g10590">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10588">
+        <use
+           xlink:href="#glyph0-1"
+           x="50.750019"
+           y="112.58749"
+           id="use10586"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip43)"
+     clip-rule="nonzero"
+     id="g10600"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip44)"
+       clip-rule="nonzero"
+       id="g10598">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10596">
+        <use
+           xlink:href="#glyph0-1"
+           x="51.500019"
+           y="111.83748"
+           id="use10594"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip45)"
+     clip-rule="nonzero"
+     id="g10608"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip46)"
+       clip-rule="nonzero"
+       id="g10606">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10604">
+        <use
+           xlink:href="#glyph0-1"
+           x="52.250023"
+           y="111.08748"
+           id="use10602"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip47)"
+     clip-rule="nonzero"
+     id="g10616"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip48)"
+       clip-rule="nonzero"
+       id="g10614">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10612">
+        <use
+           xlink:href="#glyph0-1"
+           x="53.000023"
+           y="110.33748"
+           id="use10610"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip49)"
+     clip-rule="nonzero"
+     id="g10624"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip50)"
+       clip-rule="nonzero"
+       id="g10622">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10620">
+        <use
+           xlink:href="#glyph0-1"
+           x="53.750023"
+           y="109.58748"
+           id="use10618"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip51)"
+     clip-rule="nonzero"
+     id="g10632"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip52)"
+       clip-rule="nonzero"
+       id="g10630">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10628">
+        <use
+           xlink:href="#glyph0-1"
+           x="54.500023"
+           y="108.83748"
+           id="use10626"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip53)"
+     clip-rule="nonzero"
+     id="g10640"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip54)"
+       clip-rule="nonzero"
+       id="g10638">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10636">
+        <use
+           xlink:href="#glyph0-1"
+           x="55.250027"
+           y="108.08748"
+           id="use10634"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip55)"
+     clip-rule="nonzero"
+     id="g10648"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip56)"
+       clip-rule="nonzero"
+       id="g10646">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10644">
+        <use
+           xlink:href="#glyph0-1"
+           x="56.000027"
+           y="107.33748"
+           id="use10642"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip57)"
+     clip-rule="nonzero"
+     id="g10656"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip58)"
+       clip-rule="nonzero"
+       id="g10654">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10652">
+        <use
+           xlink:href="#glyph0-1"
+           x="56.750027"
+           y="106.58748"
+           id="use10650"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip59)"
+     clip-rule="nonzero"
+     id="g10664"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip60)"
+       clip-rule="nonzero"
+       id="g10662">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10660">
+        <use
+           xlink:href="#glyph0-1"
+           x="57.500027"
+           y="105.83747"
+           id="use10658"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip61)"
+     clip-rule="nonzero"
+     id="g10672"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip62)"
+       clip-rule="nonzero"
+       id="g10670">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10668">
+        <use
+           xlink:href="#glyph0-1"
+           x="58.250031"
+           y="105.08747"
+           id="use10666"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip63)"
+     clip-rule="nonzero"
+     id="g10680"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip64)"
+       clip-rule="nonzero"
+       id="g10678">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10676">
+        <use
+           xlink:href="#glyph0-1"
+           x="59.000031"
+           y="104.33747"
+           id="use10674"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip65)"
+     clip-rule="nonzero"
+     id="g10688"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip66)"
+       clip-rule="nonzero"
+       id="g10686">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10684">
+        <use
+           xlink:href="#glyph0-1"
+           x="59.750031"
+           y="103.58747"
+           id="use10682"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip67)"
+     clip-rule="nonzero"
+     id="g10696"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip68)"
+       clip-rule="nonzero"
+       id="g10694">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10692">
+        <use
+           xlink:href="#glyph0-1"
+           x="60.500031"
+           y="102.83747"
+           id="use10690"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip69)"
+     clip-rule="nonzero"
+     id="g10704"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip70)"
+       clip-rule="nonzero"
+       id="g10702">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10700">
+        <use
+           xlink:href="#glyph0-1"
+           x="61.250034"
+           y="102.08747"
+           id="use10698"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip71)"
+     clip-rule="nonzero"
+     id="g10712"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip72)"
+       clip-rule="nonzero"
+       id="g10710">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10708">
+        <use
+           xlink:href="#glyph0-1"
+           x="62.000034"
+           y="101.33747"
+           id="use10706"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip73)"
+     clip-rule="nonzero"
+     id="g10720"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip74)"
+       clip-rule="nonzero"
+       id="g10718">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10716">
+        <use
+           xlink:href="#glyph0-1"
+           x="62.750034"
+           y="100.58746"
+           id="use10714"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip75)"
+     clip-rule="nonzero"
+     id="g10728"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip76)"
+       clip-rule="nonzero"
+       id="g10726">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10724">
+        <use
+           xlink:href="#glyph0-1"
+           x="63.500034"
+           y="99.837463"
+           id="use10722"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip77)"
+     clip-rule="nonzero"
+     id="g10736"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip78)"
+       clip-rule="nonzero"
+       id="g10734">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10732">
+        <use
+           xlink:href="#glyph0-1"
+           x="64.250038"
+           y="99.087463"
+           id="use10730"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip79)"
+     clip-rule="nonzero"
+     id="g10744"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip80)"
+       clip-rule="nonzero"
+       id="g10742">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10740">
+        <use
+           xlink:href="#glyph0-1"
+           x="65.000038"
+           y="98.337463"
+           id="use10738"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip81)"
+     clip-rule="nonzero"
+     id="g10752"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip82)"
+       clip-rule="nonzero"
+       id="g10750">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10748">
+        <use
+           xlink:href="#glyph0-1"
+           x="65.750038"
+           y="97.587463"
+           id="use10746"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip83)"
+     clip-rule="nonzero"
+     id="g10760"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip84)"
+       clip-rule="nonzero"
+       id="g10758">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10756">
+        <use
+           xlink:href="#glyph0-1"
+           x="66.500038"
+           y="96.837463"
+           id="use10754"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip85)"
+     clip-rule="nonzero"
+     id="g10768"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip86)"
+       clip-rule="nonzero"
+       id="g10766">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10764">
+        <use
+           xlink:href="#glyph0-1"
+           x="67.250038"
+           y="96.087463"
+           id="use10762"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip87)"
+     clip-rule="nonzero"
+     id="g10776"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip88)"
+       clip-rule="nonzero"
+       id="g10774">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10772">
+        <use
+           xlink:href="#glyph0-1"
+           x="68.000046"
+           y="95.337463"
+           id="use10770"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip89)"
+     clip-rule="nonzero"
+     id="g10784"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip90)"
+       clip-rule="nonzero"
+       id="g10782">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10780">
+        <use
+           xlink:href="#glyph0-1"
+           x="68.750046"
+           y="94.587456"
+           id="use10778"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip91)"
+     clip-rule="nonzero"
+     id="g10792"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip92)"
+       clip-rule="nonzero"
+       id="g10790">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10788">
+        <use
+           xlink:href="#glyph0-1"
+           x="69.500046"
+           y="93.837456"
+           id="use10786"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip93)"
+     clip-rule="nonzero"
+     id="g10800"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip94)"
+       clip-rule="nonzero"
+       id="g10798">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10796">
+        <use
+           xlink:href="#glyph0-1"
+           x="70.250046"
+           y="93.087456"
+           id="use10794"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip95)"
+     clip-rule="nonzero"
+     id="g10808"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip96)"
+       clip-rule="nonzero"
+       id="g10806">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10804">
+        <use
+           xlink:href="#glyph0-1"
+           x="71.000046"
+           y="92.337456"
+           id="use10802"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip97)"
+     clip-rule="nonzero"
+     id="g10816"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip98)"
+       clip-rule="nonzero"
+       id="g10814">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10812">
+        <use
+           xlink:href="#glyph0-1"
+           x="71.750046"
+           y="91.587456"
+           id="use10810"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip99)"
+     clip-rule="nonzero"
+     id="g10824"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip100)"
+       clip-rule="nonzero"
+       id="g10822">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10820">
+        <use
+           xlink:href="#glyph0-1"
+           x="72.500046"
+           y="90.837456"
+           id="use10818"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip101)"
+     clip-rule="nonzero"
+     id="g10832"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip102)"
+       clip-rule="nonzero"
+       id="g10830">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10828">
+        <use
+           xlink:href="#glyph0-1"
+           x="73.250046"
+           y="90.087456"
+           id="use10826"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip103)"
+     clip-rule="nonzero"
+     id="g10840"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip104)"
+       clip-rule="nonzero"
+       id="g10838">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10836">
+        <use
+           xlink:href="#glyph0-1"
+           x="74.000053"
+           y="89.337456"
+           id="use10834"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip105)"
+     clip-rule="nonzero"
+     id="g10848"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip106)"
+       clip-rule="nonzero"
+       id="g10846">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10844">
+        <use
+           xlink:href="#glyph0-1"
+           x="74.750053"
+           y="88.587448"
+           id="use10842"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip107)"
+     clip-rule="nonzero"
+     id="g10856"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip108)"
+       clip-rule="nonzero"
+       id="g10854">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10852">
+        <use
+           xlink:href="#glyph0-1"
+           x="75.500053"
+           y="87.837448"
+           id="use10850"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip109)"
+     clip-rule="nonzero"
+     id="g10864"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip110)"
+       clip-rule="nonzero"
+       id="g10862">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10860">
+        <use
+           xlink:href="#glyph0-1"
+           x="76.250053"
+           y="87.087448"
+           id="use10858"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip111)"
+     clip-rule="nonzero"
+     id="g10872"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip112)"
+       clip-rule="nonzero"
+       id="g10870">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10868">
+        <use
+           xlink:href="#glyph0-1"
+           x="77.000053"
+           y="86.337448"
+           id="use10866"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip113)"
+     clip-rule="nonzero"
+     id="g10880"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip114)"
+       clip-rule="nonzero"
+       id="g10878">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g10876">
+        <use
+           xlink:href="#glyph0-1"
+           x="77.750053"
+           y="85.587448"
+           id="use10874"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip115)"
+     clip-rule="nonzero"
+     id="g10888"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip116)"
+       clip-rule="nonzero"
+       id="g10886">
+      <g
+         style="fill:#ffffff;fill-opacity:1"
+         id="g10884">
+        <use
+           xlink:href="#glyph0-1"
+           x="78.5"
+           y="84.837502"
+           id="use10882"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip117)"
+     clip-rule="nonzero"
+     id="g10898"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip118)"
+       clip-rule="nonzero"
+       id="g10896">
+      <g
+         clip-path="url(#clip119)"
+         clip-rule="nonzero"
+         id="g10894">
+        <path
+           style="fill:#000000;fill-opacity:0.380392;fill-rule:evenodd;stroke:none"
+           d="m 68,49 h 52 v 53 H 68 Z m 49,0 H 71 c -1.65625,0 -3,1.34375 -3,3 v 46 c 0,1.65625 1.34375,3 3,3 h 46 c 1.65625,0 3,-1.34375 3,-3 V 52 c 0,-1.65625 -1.34375,-3 -3,-3 z m 0,0"
+           id="path10890" />
+        <path
+           style="fill:#ffffff;fill-opacity:0.380392;fill-rule:evenodd;stroke:none"
+           d="m 68,49 h 52 v 53 H 68 Z m 49,1 H 71 c -1.65625,0 -3,1.34375 -3,3 v 47 c 0,1.65625 1.34375,3 3,3 h 46 c 1.65625,0 3,-1.34375 3,-3 V 53 c 0,-1.65625 -1.34375,-3 -3,-3 z m 0,0"
+           id="path10892" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip229)"
+     clip-rule="nonzero"
+     id="g11336"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip230)"
+       clip-rule="nonzero"
+       id="g11334">
+      <g
+         style="fill:#575c70;fill-opacity:1"
+         id="g11332">
+        <use
+           xlink:href="#glyph1-2"
+           x="201.75"
+           y="121.5"
+           id="use11330"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip564)"
+     clip-rule="nonzero"
+     id="g12700"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip565)"
+       clip-rule="nonzero"
+       id="g12698">
+      <g
+         style="fill:#9c4f66;fill-opacity:1"
+         id="g12696">
+        <use
+           xlink:href="#glyph0-2"
+           x="441.1875"
+           y="128.33749"
+           id="use12694"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip667)"
+     clip-rule="nonzero"
+     id="g13148"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip668)"
+       clip-rule="nonzero"
+       id="g13146">
+      <g
+         style="fill:#618294;fill-opacity:1"
+         id="g13144">
+        <use
+           xlink:href="#glyph1-3"
+           x="38.537498"
+           y="206.75"
+           id="use13142"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip785)"
+     clip-rule="nonzero"
+     id="g13610"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip786)"
+       clip-rule="nonzero"
+       id="g13608">
+      <g
+         style="fill:#6e3d3d;fill-opacity:1"
+         id="g13606">
+        <use
+           xlink:href="#glyph3-1"
+           x="118.575"
+           y="206.75"
+           id="use13604"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip903)"
+     clip-rule="nonzero"
+     id="g14072"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip904)"
+       clip-rule="nonzero"
+       id="g14070">
+      <g
+         style="fill:#575c70;fill-opacity:1"
+         id="g14068">
+        <use
+           xlink:href="#glyph3-2"
+           x="201.1375"
+           y="207.5"
+           id="use14066"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1023)"
+     clip-rule="nonzero"
+     id="g14542"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1024)"
+       clip-rule="nonzero"
+       id="g14540">
+      <g
+         style="fill:#515151;fill-opacity:1"
+         id="g14538">
+        <use
+           xlink:href="#glyph1-4"
+           x="285.96249"
+           y="206"
+           id="use14536"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1123)"
+     clip-rule="nonzero"
+     id="g14964"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1124)"
+       clip-rule="nonzero"
+       id="g14962">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g14960">
+        <use
+           xlink:href="#glyph3-3"
+           x="366.73749"
+           y="205.25"
+           id="use14958"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1223)"
+     clip-rule="nonzero"
+     id="g15382"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1224)"
+       clip-rule="nonzero"
+       id="g15380">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g15378">
+        <use
+           xlink:href="#glyph3-4"
+           x="445.27499"
+           y="206.75"
+           id="use15376"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1341)"
+     clip-rule="nonzero"
+     id="g15844"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1342)"
+       clip-rule="nonzero"
+       id="g15842">
+      <g
+         style="fill:#577a66;fill-opacity:1"
+         id="g15840">
+        <use
+           xlink:href="#glyph3-5"
+           x="34.650002"
+           y="292.75"
+           id="use15838"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1465)"
+     clip-rule="nonzero"
+     id="g16330"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1466)"
+       clip-rule="nonzero"
+       id="g16328">
+      <g
+         style="fill:#6e3d3d;fill-opacity:1"
+         id="g16326">
+        <use
+           xlink:href="#glyph2-3"
+           x="110.05"
+           y="298.08749"
+           id="use16324"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1597)"
+     clip-rule="nonzero"
+     id="g16848"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1598)"
+       clip-rule="nonzero"
+       id="g16846">
+      <g
+         style="fill:#918a57;fill-opacity:1"
+         id="g16844">
+        <use
+           xlink:href="#glyph2-4"
+           x="196.16251"
+           y="295.83749"
+           id="use16842"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1599)"
+     clip-rule="nonzero"
+     id="g16856"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1600)"
+       clip-rule="nonzero"
+       id="g16854">
+      <g
+         style="fill:#918a57;fill-opacity:1"
+         id="g16852">
+        <use
+           xlink:href="#glyph2-4"
+           x="196.91251"
+           y="295.08749"
+           id="use16850"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1945)"
+     clip-rule="nonzero"
+     id="g18210"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1946)"
+       clip-rule="nonzero"
+       id="g18208">
+      <g
+         style="fill:#515151;fill-opacity:1"
+         id="g18206">
+        <use
+           xlink:href="#glyph6-1"
+           x="458.6875"
+           y="284.5"
+           id="use18204"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip1947)"
+     clip-rule="nonzero"
+     id="g18218"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip1948)"
+       clip-rule="nonzero"
+       id="g18216">
+      <g
+         style="fill:#515151;fill-opacity:1"
+         id="g18214">
+        <use
+           xlink:href="#glyph6-1"
+           x="459.4375"
+           y="283.75"
+           id="use18212"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip2047)"
+     clip-rule="nonzero"
+     id="g18608"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip2048)"
+       clip-rule="nonzero"
+       id="g18606">
+      <g
+         style="fill:#286e70;fill-opacity:1"
+         id="g18604">
+        <use
+           xlink:href="#glyph7-1"
+           x="84.025002"
+           y="371.25"
+           id="use18602"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip2343)"
+     clip-rule="nonzero"
+     id="g19806"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip2344)"
+       clip-rule="nonzero"
+       id="g19804">
+      <g
+         style="fill:#6e3d3d;fill-opacity:1"
+         id="g19802">
+        <use
+           xlink:href="#glyph10-1"
+           x="326.79999"
+           y="374.25"
+           id="use19800"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+  <g
+     clip-path="url(#clip2453)"
+     clip-rule="nonzero"
+     id="g20244"
+     transform="translate(-67.5625,-49.125)">
+    <g
+       clip-path="url(#clip2454)"
+       clip-rule="nonzero"
+       id="g20242">
+      <g
+         style="fill:#575c70;fill-opacity:1"
+         id="g20240">
+        <use
+           xlink:href="#glyph11-1"
+           x="412.22501"
+           y="377"
+           id="use20238"
+           width="100%"
+           height="100%" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
new file mode 100644
index 00000000..c3917ac8
--- /dev/null
+++ b/resource_booking/static/description/index.html
@@ -0,0 +1,548 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!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>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<title>Resource booking</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+  border: 0px;
+  border-top: 2px solid;
+  border-bottom: 2px solid;
+  border-collapse: collapse;
+}
+table.docutils.booktabs * {
+  border: 0px;
+}
+table.docutils.booktabs th {
+  border-bottom: thin solid;
+  text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="resource-booking">
+<h1 class="title">Resource booking</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/12.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-12-0/calendar-12-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p>This module adds a new app to allow you to book resource combinations in given
+schedules.</p>
+<p>Example use cases:</p>
+<ul class="simple">
+<li>Management of consultations in a clinic.</li>
+<li>Salesman appointments.</li>
+<li>Classroom and projector reservations.</li>
+<li>Hotel room booking.</li>
+</ul>
+<p>Among the things you can do:</p>
+<ul class="simple">
+<li>Specify the type of booking, which includes a calendar of availability.</li>
+<li>Specify which resources can be booked together. All of them must be free to be booked.</li>
+<li>Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot.</li>
+<li>Partners can do that from their portals.</li>
+<li>If a partner has no user, he can still do the same via a tokenized URL.</li>
+<li>Backend users can also do that from the backend.</li>
+<li>Booking lifecycle with computed states.</li>
+<li>Automatic meeting creation and deletion.</li>
+<li>Automatic conflict detection.</li>
+<li>Deadline to block modifications.</li>
+</ul>
+<p><strong>Table of contents</strong></p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
+<li><a class="reference internal" href="#configuration" id="id2">Configuration</a></li>
+<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
+<li><a class="reference internal" href="#known-issues-roadmap" id="id4">Known issues / Roadmap</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="id5">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id6">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id7">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id8">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id9">Maintainers</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id1">Installation</a></h1>
+<p>To install this module, you need to install these dependencies:</p>
+<ol class="arabic simple">
+<li><a class="reference external" href="https://github.com/spulec/freezegun">freezegun</a></li>
+<li><a class="reference external" href="https://odoo-community.org/shop/product/calendar-slot-duration-6202">web_calendar_slot_duration</a></li>
+</ol>
+<p>When someone is a manager, he will have access to <em>Resource Bookings &gt;
+Configuration</em>, where he will be able to configure resources, leaves and
+schedules. This menu is just provided as a commodity. However, if you want to
+manage that stuff more comfortably:</p>
+<ul class="simple">
+<li>To manage human resources, install <a class="reference external" href="https://apps.odoo.com/app/employees">hr</a>.</li>
+<li>To manage their leaves, install <a class="reference external" href="https://apps.odoo.com/app/time-off">hr_holidays</a>.</li>
+<li>To manage work centers, install <a class="reference external" href="https://apps.odoo.com/app/manufacturing">mrp</a>.</li>
+</ul>
+</div>
+<div class="section" id="configuration">
+<h1><a class="toc-backref" href="#id2">Configuration</a></h1>
+<p>To let some backend user to book resources:</p>
+<ol class="arabic simple">
+<li>Go to <em>Settings &gt; Users &amp; Companies &gt; Users</em>.</li>
+<li>Pick or create one.</li>
+<li>Assign <em>Resource Booking &gt; User</em>.</li>
+</ol>
+<p>To let some backend user to configure types and combinations, and to be able to
+modify overdue bookings:</p>
+<ol class="arabic simple">
+<li>Go to <em>Settings &gt; Users &amp; Companies &gt; Users</em>.</li>
+<li>Pick or create one.</li>
+<li>Assign <em>Resource Booking &gt; Manager</em>.</li>
+</ol>
+<p>To configure one booking type:</p>
+<ol class="arabic simple">
+<li>Go to <em>Resource Bookings &gt; Types</em>.</li>
+<li>Create one.</li>
+<li>Give it a <em>name</em>.</li>
+<li>Set the <em>Duration</em>, to know the time assigned to each calendar slot.</li>
+<li>Set the <em>Modifications Deadline</em>, to forbid non-managers to alter dates of
+a booking when it’s too late.</li>
+<li>Choose one <em>Availability Calendar</em>. No bookings will exist outside of it.</li>
+<li>Under <em>Meeting defaults</em>, you will be able to fill some values that will
+be used by default on calendar meetings. These will appear in the global
+calendar when some booking is reserved.</li>
+<li>Choose some <em>Available resource combinations</em>. All combinations in the same
+line must be free to be booked together; otherwise the booking will not be
+able to be scheduled. You can sort them.</li>
+<li>Pick up one <em>Combination Assignment</em>. If you choose <em>Sorted</em>, then the order
+of the combinations you chose will indicate the one that is selected first.
+Of course, it must be free to be selected.</li>
+<li>Save.</li>
+</ol>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id3">Usage</a></h1>
+<p>This module installs a new app, “Resource bookings”.</p>
+<p>Bookings may involve you:</p>
+<ul class="simple">
+<li>Maybe because you requested to book something.</li>
+<li>Maybe because you are one of the booked resources, if a booking represents
+some kind of appointment.</li>
+</ul>
+<p>To see which bookings involve you:</p>
+<ol class="arabic simple">
+<li>Go to <em>Resource Bookings &gt; Bookings</em>.</li>
+<li>You can switch to the list view if you need to see also the pending ones.</li>
+<li>You can remove the “Involving me” filter if you want to see others’ bookings.</li>
+</ol>
+<p>To book some resources:</p>
+<ol class="arabic simple">
+<li>Go to <em>Resource Bookings &gt; Types</em>.</li>
+<li>Pick the type of booking you want.</li>
+<li>Click on <em>Booking Count</em>.</li>
+<li>Click on a free slot.</li>
+<li>Fill the <em>Requester</em>, which may or not be yourself.</li>
+<li>Pick one <em>Resources combination</em>, in case the one assigned automatically
+isn’t the one you want.</li>
+</ol>
+<p>To invite someone to book a resource combination from the portal:</p>
+<ol class="arabic simple">
+<li>Go to <em>Resource Bookings &gt; Types</em>.</li>
+<li>Pick the type of booking you want.</li>
+<li>Click on <em>Booking Count</em>.</li>
+<li>Click on the list view icon.</li>
+<li>Click on <em>Create</em>.</li>
+<li>Fill the <em>Requester</em>.</li>
+<li>Pick one <em>Resources combination</em>, if you want that the requester is assigned
+to that combination. Otherwise, leave it empty, and some free combination
+will be assigned automatically when the requester picks a free slot.</li>
+<li>Click on <em>Share &gt; Send</em>.</li>
+<li>The requester will receive an email to select a calendar slot from his portal.</li>
+</ol>
+</div>
+<div class="section" id="known-issues-roadmap">
+<h1><a class="toc-backref" href="#id4">Known issues / Roadmap</a></h1>
+<ul class="simple">
+<li>Allow combination auto-assignment based on least used combination.</li>
+<li>Allow customer to choose combination.</li>
+<li>Some error messages would be a bit more helpful if they specify the schedule
+impossibility reason, but that should be done without affecting performance.</li>
+</ul>
+</div>
+<div class="section" id="bug-tracker">
+<h1><a class="toc-backref" href="#id5">Bug Tracker</a></h1>
+<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/calendar/issues">GitHub Issues</a>.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<p>Do not contact contributors directly about support or help with technical issues.</p>
+</div>
+<div class="section" id="credits">
+<h1><a class="toc-backref" href="#id6">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#id7">Authors</a></h2>
+<ul class="simple">
+<li>Tecnativa</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#id8">Contributors</a></h2>
+<ul class="simple">
+<li>Jairo Llopis &lt;<a class="reference external" href="mailto:jairo.llopis&#64;tecnativa.com">jairo.llopis&#64;tecnativa.com</a>&gt; (<a class="reference external" href="https://www.tecnativa.com/">https://www.tecnativa.com/</a>)</li>
+</ul>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#id9">Maintainers</a></h2>
+<p>This module is maintained by the OCA.</p>
+<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
+<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.</p>
+<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
+<p><a class="reference external" href="https://github.com/Yajo"><img alt="Yajo" src="https://github.com/Yajo.png?size=40px" /></a></p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/12.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
+<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/resource_booking/static/src/css/portal.scss b/resource_booking/static/src/css/portal.scss
new file mode 100644
index 00000000..cbca7f46
--- /dev/null
+++ b/resource_booking/static/src/css/portal.scss
@@ -0,0 +1,8 @@
+/* Copyright 2021 Tecnativa - Jairo Llopis
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
+
+// Too many available slots? Allow scrolling
+.slots-dropdown {
+    max-height: 40vh;
+    overflow: auto;
+}
diff --git a/resource_booking/templates/assets.xml b/resource_booking/templates/assets.xml
new file mode 100644
index 00000000..bf05e7bb
--- /dev/null
+++ b/resource_booking/templates/assets.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<data>
+
+    <template id="assets_frontend" inherit_id="web.assets_frontend">
+        <xpath expr="//link[last()]" position="after">
+            <link rel="stylesheet" type="text/scss" href="/resource_booking/static/src/css/portal.scss"/>
+        </xpath>
+    </template>
+
+</data>
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
new file mode 100644
index 00000000..0b182135
--- /dev/null
+++ b/resource_booking/templates/portal.xml
@@ -0,0 +1,410 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<data>
+
+    <!--
+    This template needs these context variables:
+
+    - access_token: to allow public access to the record
+    - booking: the booking record
+    - calendar: a Calendar object, already configured with the correct first weekday
+    - now: tz-aware datetime object indicating current time
+    - res_lang: res.lang record for current context l10n
+    - slots: available slots, as returned from [resource.booking]._get_available_slots()
+    - start: datetime when we start displaying the calendar
+    - weekday_names: dict of mappings between weekday numbers and names, where MON=1
+     -->
+    <template id="scheduling_calendar" name="Resource Booking Calendar">
+        <div class="o_booking_calendar">
+            <t t-set="confirm_url" t-value="booking.get_portal_url(suffix='/confirm')" />
+
+            <div class="alert alert-danger" t-if="not slots">
+                No free slots found this month.
+                <a t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))" class="alert-link">
+                    Try next month
+                    <i class="fa fa-chevron-right"/>
+                </a>
+            </div>
+
+            <!-- Monthly calendar -->
+            <table class="table table-responsive-md text-center">
+                <thead t-if="booking.requester_advice">
+                    <tr>
+                        <td colspan="7">
+                            <div t-field="booking.requester_advice"></div>
+                        </td>
+                    </tr>
+                </thead>
+                <thead class="thead-dark">
+                    <tr>
+                        <th class="text-left">
+                            <a t-if="start > now" t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month - 1))" class="btn btn-secondary" title="Previous month">
+                                <i class="fa fa-chevron-left"></i>
+                            </a>
+                        </th>
+                        <th class="align-middle" colspan="5" t-esc="start.strftime('%B %Y')"></th>
+                        <th class="text-right">
+                            <a t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))" class="btn btn-secondary" title="Next month">
+                                <i class="fa fa-chevron-right"></i>
+                            </a>
+                        </th>
+                    </tr>
+                </thead>
+                <thead>
+                    <tr>
+                        <t t-foreach="calendar.iterweekdays()" t-as="weekday">
+                            <th t-att-title="weekday_names[weekday + 1]" t-esc="weekday_names[weekday + 1][:3]" />
+                        </t>
+                    </tr>
+                </thead>
+                <tbody>
+                    <t t-foreach="calendar.monthdatescalendar(start.year, start.month)" t-as="week">
+                        <tr>
+                            <t t-foreach="week" t-as="day">
+                                <td t-att-class="day.month != start.month and 'text-muted'">
+                                    <t t-if="day.month == start.month and slots.get(day)">
+                                        <!-- Day dropdown -->
+                                        <div class="dropdown">
+                                            <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" t-esc="day.day" t-attf-id="dropdown-trigger-#{day.isoformat()}"></button>
+                                            <div class="dropdown-menu slots-dropdown" t-attf-aria-labelledby="dropdown-trigger-#{day.isoformat()}">
+                                                <t t-foreach="slots[day]" t-as="slot">
+                                                    <!-- Hour item to open confirmation -->
+                                                    <button class="dropdown-item" type="button" data-toggle="modal" t-attf-data-target="#modal-confirm-#{int(slot.timestamp())}" t-esc="slot.strftime(res_lang.time_format)" />
+                                                </t>
+                                            </div>
+                                        </div>
+                                    </t>
+                                    <t t-else="">
+                                        <t t-esc="day.day" />
+                                    </t>
+                                </td>
+                            </t>
+                        </tr>
+                    </t>
+                </tbody>
+                <tfoot>
+                    <tr>
+                        <td colspan="7">
+                            All times are displayed using this timezone:
+                            <strong t-field="booking.type_id.resource_calendar_id.tz"></strong>
+                        </td>
+                    </tr>
+                </tfoot>
+            </table>
+
+            <!-- Hour confirmation modals -->
+            <t t-foreach="calendar.monthdatescalendar(start.year, start.month)" t-as="week">
+                <t t-foreach="week" t-as="day">
+                    <form t-foreach="slots.get(day, [])" t-as="slot" method="post" t-att-action="confirm_url" t-attf-id="modal-confirm-#{int(slot.timestamp())}" t-attf-aria-labelledby="modal-title-#{int(slot.timestamp())}" class="modal fade">
+                        <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
+                        <input type="hidden" name="access_token" t-att-value="access_token" />
+                        <input type="hidden" name="when" t-att-value="slot.isoformat()" />
+                        <div class="modal-dialog">
+                            <div class="modal-content">
+                                <div t-attf-id="modal-title-#{int(slot.timestamp())}" class="modal-header">
+                                    <h5>Confirm booking</h5>
+                                </div>
+                                <div class="modal-body">
+                                    <p>You are about to confirm this booking:</p>
+                                    <ul>
+                                        <li>
+                                            Start:
+                                            <strong t-esc="slot.strftime(res_lang.date_format)"></strong>
+                                            <strong t-esc="slot.strftime(res_lang.time_format)"></strong>
+                                        </li>
+                                        <li>
+                                            Duration:
+                                            <strong t-field="booking.type_id.duration" t-options='{"widget": "float_time"}'></strong>
+                                        </li>
+                                    </ul>
+                                    <p>Are you sure?</p>
+                                </div>
+                                <div class="modal-footer">
+                                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
+                                    <button type="submit" class="btn btn-primary">Confirm booking</button>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </t>
+            </t>
+
+        </div>
+    </template>
+
+    <!-- Portal templates -->
+    <template id="portal_breadcrumbs" inherit_id="portal.portal_breadcrumbs">
+        <xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
+            <li t-if="page_name == 'booking' or booking_sudo" t-attf-class="breadcrumb-item #{'active ' if not booking_sudo else ''}">
+                <a t-if="booking_sudo" t-attf-href="/my/bookings?{{ keep_query() }}">Bookings</a>
+                <t t-else="">Bookings</t>
+            </li>
+            <t t-if="booking_sudo">
+                <li t-attf-class="breadcrumb-item #{'active ' if page_name == 'booking' else ''}">
+                    <t t-if="page_name == 'booking_schedule'">
+                        <a t-att-href="booking_sudo.get_portal_url()" t-esc="booking_sudo.display_name"></a>
+                    </t>
+                    <t t-else="">
+                        <t t-esc="booking_sudo.name" />
+                    </t>
+                </li>
+                <li class="breadcrumb-item active" t-if="page_name == 'booking_schedule'">Schedule</li>
+            </t>
+        </xpath>
+    </template>
+
+    <template id="portal_my_home" inherit_id="portal.portal_my_home">
+        <xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
+            <t t-if="booking_count" t-call="portal.portal_docs_entry">
+                <t t-set="title">Bookings</t>
+                <t t-set="url" t-value="'/my/bookings'" />
+                <t t-set="count" t-value="booking_count" />
+            </t>
+        </xpath>
+    </template>
+
+    <template id="portal_my_bookings" name="My Bookings">
+        <t t-call="portal.portal_layout">
+            <t t-set="breadcrumbs_searchbar" t-value="True" />
+
+            <t t-call="portal.portal_searchbar">
+                <t t-set="title">Bookings</t>
+            </t>
+            <t t-if="not bookings">
+                <p>There are currently no bookings for your account.</p>
+            </t>
+            <t t-if="bookings" t-call="portal.portal_table">
+                <thead>
+                    <tr class="active">
+                        <th>Booking ref.</th>
+                        <th>Type</th>
+                        <th>Resources</th>
+                        <th class="text-center">State</th>
+                        <th class="text-right">Date</th>
+                    </tr>
+                </thead>
+                <t t-foreach="bookings" t-as="booking">
+                    <tr>
+                        <td>
+                            <a t-att-href="booking.get_portal_url()">
+                                #
+                                <span t-field="booking.id" />
+                            </a>
+                        </td>
+                        <td>
+                            <span t-field="booking.type_id" />
+                        </td>
+                        <td>
+                            <span t-field="booking.combination_id" />
+                        </td>
+                        <td class="text-center">
+                            <span class="badge badge-pill badge-info" t-field="booking.state" />
+                        </td>
+                        <td class="text-right">
+                            <span t-field="booking.start" />
+                        </td>
+                    </tr>
+                </t>
+            </t>
+        </t>
+    </template>
+
+    <template id="resource_booking_portal_header" name="Resource Booking Header">
+        <div class="row no-gutters">
+            <div class="col-md">
+                <h5 class="mb-1 mb-md-0">
+                    Booking #
+                    <span t-field="booking_sudo.id" />
+                </h5>
+            </div>
+            <div class="col-md text-md-right">
+                <small class="text-right">State:</small>
+                <span t-field="booking_sudo.state" class="badge badge-pill badge-info" title="Current state of this booking" />
+            </div>
+        </div>
+    </template>
+
+    <template id="resource_booking_portal_form" name="Booking portal form">
+        <t t-call="portal.portal_layout">
+            <t t-set="o_portal_fullwidth_alert" groups="resource_booking.group_user">
+                <t t-call="portal.portal_back_in_edit_mode">
+                    <t t-set="backend_url" t-value="'/web#return_label=Website&amp;model=resource.booking&amp;id=%d&amp;view_type=form' % (booking_sudo.id)" />
+                </t>
+            </t>
+
+            <!-- Form -->
+            <t t-call="portal.portal_record_layout">
+                <t t-set="card_header">
+                    <t t-call="resource_booking.resource_booking_portal_header" />
+                </t>
+                <t t-set="card_body">
+                    <div class="row">
+                        <div class="col-md">
+                            <div class="mb-1">
+                                <strong>Type:</strong>
+                                <span t-field="booking_sudo.type_id.name" />
+                            </div>
+                            <div class="mb-1">
+                                <strong>Requested by:</strong>
+                                <span t-field="booking_sudo.partner_id.display_name" />
+                            </div>
+                            <div class="mb-1">
+                                <strong>Booked resources:</strong>
+                                <ul>
+                                    <t t-foreach="booking_sudo.combination_id.resource_ids" t-as="resource">
+                                        <li>
+                                            <span t-field="resource.name"></span>
+                                        </li>
+                                    </t>
+                                </ul>
+                            </div>
+                        </div>
+                        <div class="col-md">
+                            <div class="mb-1">
+                                <strong>Location:</strong>
+                                <span t-field="booking_sudo.meeting_id.location" />
+                            </div>
+                            <div class="mb-1">
+                                <strong>Dates:</strong>
+                                <span t-field="booking_sudo.meeting_id.display_time" />
+                            </div>
+                            <div t-if="booking_sudo.requester_advice" class="mb-1">
+                                <strong>Advice:</strong>
+                                <span t-field="booking_sudo.requester_advice" />
+                            </div>
+                            <div t-if="booking_sudo.is_overdue" role="alert" class="mb-1 alert alert-warning">
+                                This booking exceeded its modifications deadline.
+                            </div>
+                        </div>
+                    </div>
+                </t>
+            </t>
+
+            <!-- Actions -->
+            <div class="row justify-content-center text-center d-print-none mt8">
+                <t t-if="booking_sudo.state == 'pending'">
+                    <div class="col-sm-auto mt8">
+                        <a role="button" class="btn btn-primary" t-att-href="booking_sudo.get_portal_url(suffix='/schedule')">
+                            <i class="fa fa-calendar" />
+                            Schedule
+                        </a>
+                    </div>
+                </t>
+                <t t-if="booking_sudo.is_modifiable and booking_sudo.state in {'scheduled', 'accepted'}">
+                    <div class="col-sm-auto mt8">
+                        <a role="button" class="btn btn-secondary" t-att-href="booking_sudo.get_portal_url(suffix='/schedule')">
+                            <i class="fa fa-calendar" />
+                            Reschedule
+                        </a>
+                    </div>
+                </t>
+                <div class="col-sm-auto mt8">
+                    <a role="button" class="btn btn-secondary" href="#discussion">
+                        <i class="fa fa-comment" />
+                        Feedback
+                    </a>
+                </div>
+                <t t-if="booking_sudo.is_modifiable and booking_sudo.state != 'canceled'">
+                    <div class="col-sm-auto mt8">
+                        <a role="button" class="btn btn-danger" data-toggle="modal" data-target="#modal_cancel" href="#">
+                            <i class="fa fa-times" />
+                            Cancel
+                        </a>
+                    </div>
+                </t>
+            </div>
+
+            <div role="dialog" class="modal fade" id="modal_cancel">
+                <div class="modal-dialog">
+                    <div class="modal-content">
+                        <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
+                        <header class="modal-header">
+                            <h4 class="modal-title">Confirm</h4>
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                <i class="fa fa-times" />
+                            </button>
+                        </header>
+                        <main class="modal-body">
+                            <p>
+                                If you cancel this booking:
+                                <ul>
+                                    <li>It will disappear from your bookings list.</li>
+                                    <li>It will be unscheduled.</li>
+                                </ul>
+                                Please confirm this is really what you want.
+                            </p>
+                        </main>
+                        <footer class="modal-footer">
+                            <a t-att-href="booking_sudo.get_portal_url(suffix='/cancel')" class="btn btn-danger">
+                                <i class="fa fa-times"></i>
+                                Cancel this booking
+                            </a>
+                            <button type="button" class="btn btn-primary" data-dismiss="modal">Go back</button>
+                        </footer>
+                    </div>
+                </div>
+            </div>
+
+            <!-- Discuss -->
+            <div class="mt32">
+                <h4>Message and communication history</h4>
+                <t t-call="portal.message_thread">
+                    <t t-set="object" t-value="booking_sudo" />
+                    <t t-set="token" t-value="booking_sudo.access_token" />
+                    <t t-set="pid" t-value="pid" />
+                    <t t-set="hash" t-value="hash" />
+                </t>
+            </div>
+
+        </t>
+    </template>
+
+    <template id="alert_availability_lost" name="Alert Resource Booking Availability was Lost">
+        <div class="alert alert-danger alert-dismissible rounded-0 fade show d-print-none css_editable_mode_hidden">
+            <div class="container">
+                <div t-ignore="true" class="text-center">
+                    <strong>The chosen schedule is no longer available.</strong>
+                    <t t-if="error">
+                        <br />
+                        Error details:
+                        <span t-esc="error" />
+                    </t>
+                </div>
+            </div>
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close"> &#215;</button>
+        </div>
+    </template>
+
+    <template id="resource_booking_portal_schedule" name="Resource Booking Scheduling">
+        <t t-call="portal.portal_layout">
+            <t t-set="o_portal_fullwidth_alert" groups="project.group_project_user">
+                <t t-call="portal.portal_back_in_edit_mode">
+                    <t t-set="backend_url" t-value="'/web#return_label=Website&amp;model=resource.booking&amp;id=%d&amp;view_type=form' % (booking_sudo.id)" />
+                </t>
+            </t>
+
+            <!-- Error alert -->
+            <t t-if="error">
+                <t t-call="resource_booking.alert_availability_lost"/>
+            </t>
+
+            <!-- Scheduling form -->
+            <t t-call="portal.portal_record_layout">
+                <t t-set="card_header">
+                    <t t-call="resource_booking.resource_booking_portal_header" />
+                </t>
+                <t t-set="card_body">
+                    <div class="row">
+                        <div class="col">
+                            <t t-call="resource_booking.scheduling_calendar">
+                                <t t-set="booking" t-value="booking_sudo" />
+                            </t>
+                        </div>
+                    </div>
+                </t>
+            </t>
+        </t>
+    </template>
+</data>
diff --git a/resource_booking/tests/__init__.py b/resource_booking/tests/__init__.py
new file mode 100644
index 00000000..60b403f7
--- /dev/null
+++ b/resource_booking/tests/__init__.py
@@ -0,0 +1,2 @@
+from . import test_backend
+from . import test_portal
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
new file mode 100644
index 00000000..943d95df
--- /dev/null
+++ b/resource_booking/tests/common.py
@@ -0,0 +1,105 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+
+def create_test_data(obj):
+    """Create test data for a case."""
+    obj.env = obj.env(context={"tz": "UTC"})
+    # Create one resource.calendar available on Mondays, another one on
+    # Tuesdays, and another one on Mondays and Tuesdays; in that order
+    attendances = [
+        (
+            0,
+            0,
+            {
+                "name": "Mondays",
+                "dayofweek": "0",
+                "hour_from": 8,
+                "hour_to": 17,
+                "day_period": "morning",
+            },
+        ),
+        (
+            0,
+            0,
+            {
+                "name": "Tuesdays",
+                "dayofweek": "1",
+                "hour_from": 8,
+                "hour_to": 17,
+                "day_period": "morning",
+            },
+        ),
+    ]
+    obj.r_calendars = obj.env["resource.calendar"].create(
+        [
+            {"name": "Mon", "attendance_ids": attendances[:1], "tz": "UTC"},
+            {
+                "name": "Tue",
+                "attendance_ids": attendances[1:],
+                "tz": "UTC",
+            },
+            {
+                "name": "MonTue",
+                "attendance_ids": attendances,
+                "tz": "UTC",
+            },
+        ]
+    )
+    # Create one material resource for each of those calendars; same order
+    obj.r_materials = obj.env["resource.resource"].create(
+        [
+            {
+                "name": "Material resource for %s" % cal.name,
+                "calendar_id": cal.id,
+                "resource_type": "material",
+                "tz": "UTC",
+            }
+            for cal in obj.r_calendars
+        ]
+    )
+    # Create one human resource for each of those calendars; same order
+    obj.users = obj.env["res.users"].create(
+        [
+            {
+                "email": "user_%d@example.com" % num,
+                "login": "user_%d" % num,
+                "name": "User %d" % num,
+            }
+            for num in range(3)
+        ]
+    )
+    obj.r_users = obj.env["resource.resource"].create(
+        [
+            {
+                "calendar_id": cal.id,
+                "name": "User %s" % user.name,
+                "resource_type": "user",
+                "tz": "UTC",
+                "user_id": user.id,
+            }
+            for (user, cal) in zip(obj.users, obj.r_calendars)
+        ]
+    )
+    # Create one RBC for each of those calendars, which includes the
+    # corresponding material and human resources simultaneously; same order
+    obj.rbcs = obj.env["resource.booking.combination"].create(
+        [
+            {"resource_ids": [(6, 0, [user.id, material.id])]}
+            for (user, material) in zip(obj.r_users, obj.r_materials)
+        ]
+    )
+    # Create one RBT that includes all 3 RBCs as available combinations
+    obj.rbt = obj.env["resource.booking.type"].create(
+        {
+            "name": "Test resource booking type",
+            "combination_rel_ids": [
+                (0, 0, {"sequence": num, "combination_id": rbc.id})
+                for num, rbc in enumerate(obj.rbcs)
+            ],
+            "resource_calendar_id": obj.r_calendars[2].id,
+            "location": "Main office",
+        }
+    )
+    # Create some partner
+    obj.partner = obj.env["res.partner"].create({"name": "some customer"})
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
new file mode 100644
index 00000000..4e9541b8
--- /dev/null
+++ b/resource_booking/tests/test_backend.py
@@ -0,0 +1,306 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from freezegun import freeze_time
+from odoo.tests.common import SavepointCase, Form
+from odoo.exceptions import ValidationError
+from odoo import fields
+from datetime import datetime
+from .common import create_test_data
+
+_2dt = fields.Datetime.to_datetime
+
+
+@freeze_time("2021-02-26 09:00:00", tick=True)
+class BackendCase(SavepointCase):
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        create_test_data(cls)
+
+    def test_scheduling_conflict_constraints(self):
+        # Combination is available on Mondays and Tuesdays
+        rbc_montue = self.rbcs[2]
+        # Type is available on Mondays
+        cal_mon = self.r_calendars[0]
+        self.rbt.resource_calendar_id = cal_mon
+        # Booking cannot be placed next Tuesday
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-02 08:00:00",
+                    "stop": "2021-03-02 08:30:00",
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_montue.id,
+                }
+            )
+        # Booking cannot be placed next Monday before 8:00
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-02 07:45:00",
+                    "stop": "2021-03-02 08:15:00",
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_montue.id,
+                }
+            )
+        # Booking cannot be placed next Monday after 17:00
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-02 16:45:00",
+                    "stop": "2021-03-02 17:15:00",
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_montue.id,
+                }
+            )
+        # Booking can be placed next Monday
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-01 08:00:00",
+                "stop": "2021-03-01 08:30:00",
+                "type_id": self.rbt.id,
+                "combination_id": rbc_montue.id,
+            }
+        )
+        # Another event cannot collide with the same RBC
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-01 08:29:59",
+                    "stop": "2021-03-01 08:59:59",
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_montue.id,
+                }
+            )
+        # Another event can collide with another RBC
+        rbc_mon = self.rbcs[0]
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-01 08:00:00",
+                "stop": "2021-03-01 08:30:00",
+                "type_id": self.rbt.id,
+                "combination_id": rbc_mon.id,
+            }
+        )
+
+    def test_rbc_forced_calendar(self):
+        # Type is available on Mondays
+        cal_mon = self.r_calendars[0]
+        self.rbt.resource_calendar_id = cal_mon
+        # Cannot book an combination with resources that only work on Tuesdays
+        rbc_tue = self.rbcs[1]
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-01 08:00:00",
+                    "stop": "2021-03-01 08:30:00",
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_tue.id,
+                }
+            )
+        # However, if the combination is forced to Mondays, you can book it
+        rbc_tue.forced_calendar_id = cal_mon
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-01 08:00:00",
+                "stop": "2021-03-01 08:30:00",
+                "type_id": self.rbt.id,
+                "combination_id": rbc_tue.id,
+            }
+        )
+
+    def test_booking_from_calendar_view(self):
+        # The type is configured by default with bookings of 30 minutes
+        self.assertEqual(self.rbt.duration, 0.5)
+        # Change it to 45 minutes
+        self.rbt.duration = 0.75
+        # Bookings smart button configures calendar with slots of 45 minutes
+        button_context = self.rbt.action_open_bookings()["context"]
+        self.assertEqual(button_context["calendar_slot_duration"], "00:45")
+        self.assertEqual(button_context["default_duration"], 0.75)
+        # When you click & drag on calendar to create an event, it adds the
+        # start and end as default; we imitate that here to book a meeting with
+        # 2 slots next monday
+        booking_form = Form(
+            self.env["resource.booking"].with_context(
+                **button_context,
+                default_start="2021-03-01 08:00:00",
+                default_stop="2021-03-01 09:30:00"
+            )
+        )
+        # This might seem redundant, but makes sure onchanges don't mess stuff
+        self.assertEqual(_2dt(booking_form.start), datetime(2021, 3, 1, 8))
+        self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 1, 9, 30))
+        # If I change to next week's monday, then the onchange assumes the stop
+        # date will be 1 slot, and not 2
+        booking_form.start = datetime(2021, 3, 8, 8)
+        booking_form.partner_id = self.partner
+        self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 8, 8, 45))
+        # I can book it (which means type & combination were autofilled)
+        booking = booking_form.save()
+        self.assertTrue(booking.meeting_id)
+        self.assertEqual(booking.state, "scheduled")
+
+    def test_dates_inverse(self):
+        """Start & stop fields are computed with inverse. Test their workflow."""
+        # Set type to be available only on mondays
+        self.rbt.resource_calendar_id = self.r_calendars[0]
+        # Create a booking from scratch
+        booking_form = Form(self.env["resource.booking"])
+        booking_form.type_id = self.rbt
+        booking_form.partner_id = self.partner
+        self.assertFalse(booking_form.start)
+        self.assertFalse(booking_form.stop)
+        self.assertFalse(booking_form.combination_id)
+        # I can save it without booking
+        booking = booking_form.save()
+        self.assertEqual(booking.state, "pending")
+        self.assertFalse(booking.meeting_id)
+        self.assertFalse(booking.start)
+        self.assertFalse(booking.stop)
+        self.assertFalse(booking.combination_id)
+        # I edit it again
+        with Form(booking) as booking_form:
+            # Start next Tuesday: updates stop; no combination available
+            booking_form.start = datetime(2021, 3, 2, 8)
+            self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 2, 8, 30))
+            self.assertFalse(booking_form.combination_id)
+            # Move to Monday: updates stop; found one combination available
+            booking_form.start = datetime(2021, 3, 1, 8)
+            self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 1, 8, 30))
+            self.assertTrue(booking_form.combination_id)
+        self.assertEqual(booking.state, "scheduled")
+        self.assertTrue(booking.meeting_id)
+        self.assertTrue(booking.start)
+        self.assertTrue(booking.stop)
+        self.assertTrue(booking.combination_id)
+
+    def test_state(self):
+        # I create a pending booking
+        booking = self.env["resource.booking"].create(
+            {"type_id": self.rbt.id, "partner_id": self.partner.id}
+        )
+        # Without dates, it's pending
+        self.assertEqual(booking.state, "pending")
+        self.assertTrue(booking.active)
+        self.assertFalse(booking.meeting_id)
+        self.assertFalse(booking.start)
+        self.assertFalse(booking.stop)
+        self.assertFalse(booking.combination_id)
+        # With a linked meeting, it's scheduled
+        with Form(booking) as booking_form:
+            booking_form.start = datetime(2021, 3, 1, 8)
+        meeting = booking.meeting_id
+        self.assertEqual(booking.state, "scheduled")
+        self.assertTrue(booking.active)
+        self.assertTrue(meeting.exists())
+        self.assertTrue(booking.start)
+        self.assertTrue(booking.stop)
+        self.assertTrue(booking.combination_id)
+        # When partner confirms attendance, it's confirmed
+        booker_attendance = meeting.attendee_ids.filtered(
+            lambda one: one.partner_id == booking.partner_id
+        )
+        self.assertTrue(booker_attendance)
+        booker_attendance.do_accept()
+        self.assertEqual(booking.state, "confirmed")
+        self.assertTrue(booking.active)
+        self.assertTrue(meeting.exists())
+        self.assertTrue(booking.start)
+        self.assertTrue(booking.stop)
+        self.assertTrue(booking.combination_id)
+        # Without dates, it's pending again
+        booking.action_unschedule()
+        self.assertEqual(booking.state, "pending")
+        self.assertTrue(booking.active)
+        self.assertFalse(meeting.exists())
+        self.assertFalse(booking.start)
+        self.assertFalse(booking.stop)
+        self.assertTrue(booking.combination_id)
+        # Archived and without dates, it's canceled
+        booking.action_cancel()
+        self.assertEqual(booking.state, "canceled")
+        self.assertFalse(booking.active)
+        self.assertFalse(meeting.exists())
+        self.assertFalse(booking.start)
+        self.assertFalse(booking.stop)
+        self.assertTrue(booking.combination_id)
+
+    def test_sorted_assignment(self):
+        """Set sorted assignment on RBT and test it works correctly."""
+        rbc_mon, rbc_tue, rbc_montue = self.rbcs
+        with Form(self.rbt) as rbt_form:
+            rbt_form.combination_assignment = "sorted"
+        # Book next monday at 10:00
+        rb1_form = Form(self.env["resource.booking"])
+        rb1_form.type_id = self.rbt
+        rb1_form.partner_id = self.partner
+        rb1_form.start = datetime(2021, 3, 1, 10)
+        self.assertEqual(rb1_form.combination_id, rbc_mon)
+        rb1 = rb1_form.save()
+        self.assertEqual(rb1.combination_id, rbc_mon)
+        # Another booking, same time
+        rb2_form = Form(self.env["resource.booking"])
+        rb2_form.type_id = self.rbt
+        rb2_form.partner_id = self.partner
+        rb2_form.start = datetime(2021, 3, 1, 10)
+        self.assertEqual(rb2_form.combination_id, rbc_montue)
+        rb2 = rb2_form.save()
+        self.assertEqual(rb2.combination_id, rbc_montue)
+        # I'm able to alter rb1 timing
+        with Form(rb1) as rb1_form:
+            rb1_form.start = datetime(2021, 3, 2, 10)
+            self.assertEqual(rb1_form.combination_id, rbc_tue)
+        self.assertEqual(rb1.combination_id, rbc_tue)
+
+    def test_same_slot_twice_not_utc(self):
+        """Scheduling the same slot twice fails, when not in UTC."""
+        for loop in range(2):
+            rb_f = Form(self.env["resource.booking"].with_context(tz="Europe/Madrid"))
+            rb_f.partner_id = self.partner
+            rb_f.type_id = self.rbt
+            rb_f.start = datetime(2021, 3, 1, 10)
+            rb_f.combination_id = self.rbcs[0]
+            # 1st one works
+            if loop == 0:
+                rb = rb_f.save()
+                self.assertEqual(rb.state, "scheduled")
+            else:
+                with self.assertRaises(ValidationError):
+                    rb_f.save()
+
+    def test_recurring_event(self):
+        """Recurrent events are considered."""
+        # Everyone busy past and next Mondays with a recurring meeting
+        ce_f = Form(self.env["calendar.event"])
+        ce_f.name = "recurring event past monday"
+        for user in self.users:
+            ce_f.partner_ids.add(user.partner_id)
+        ce_f.start_datetime = datetime(2021, 2, 22, 8)
+        ce_f.duration = 1
+        ce_f.recurrency = True
+        ce_f.interval = 1
+        ce_f.rrule_type = "weekly"
+        ce_f.end_type = "count"
+        ce_f.count = 2
+        ce_f.save()
+        # Cannot book next Monday at 8
+        rb_f = Form(self.env["resource.booking"])
+        rb_f.partner_id = self.partner
+        rb_f.type_id = self.rbt
+        # No RBC when starting
+        self.assertFalse(rb_f.combination_id)
+        # No RBC available next Monday at 8
+        rb_f.start = datetime(2021, 3, 1, 8)
+        self.assertFalse(rb_f.combination_id)
+        # Everyone's free at 9
+        rb_f.start = datetime(2021, 3, 1, 9)
+        self.assertTrue(rb_f.combination_id)
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
new file mode 100644
index 00000000..f535f8c9
--- /dev/null
+++ b/resource_booking/tests/test_portal.py
@@ -0,0 +1,244 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo.tests.common import HttpCase
+from .common import create_test_data
+from lxml.html import fromstring
+from datetime import datetime
+
+from freezegun import freeze_time
+
+
+@freeze_time("2021-02-26 09:00:00", tick=True)
+class PortalCase(HttpCase):
+    def setUp(self):
+        super().setUp()
+        create_test_data(self)
+        self.user_portal, self.user_manager = self.env["res.users"].create(
+            [
+                {
+                    "name": "portal",
+                    "login": "ptl",
+                    "password": "ptl",
+                    "groups_id": [(4, self.env.ref("base.group_portal").id, 0)],
+                },
+                {
+                    "name": "manager",
+                    "login": "mgr",
+                    "password": "mgr",
+                    "groups_id": [
+                        (4, self.env.ref("resource_booking.group_manager").id, 0)
+                    ],
+                },
+            ]
+        )
+
+    def _url_xml(self, url, data=None, timeout=10):
+        """Open an URL and return the lxml etree object resulting from its content."""
+        response = self.url_open(url, data, timeout)
+        return fromstring(response.content)
+
+    def test_portal_no_bookings(self):
+        self.authenticate("ptl", "ptl")
+        page = fromstring(self.url_open("/my").content)
+        self.assertTrue(page.cssselect(".o_portal_docs"))
+        self.assertFalse(page.cssselect('.o_portal_docs a:contains("Bookings")'))
+
+    def test_portal_list_with_bookings(self):
+        # Create one pending booking
+        booking = self.env["resource.booking"].create(
+            {"partner_id": self.user_portal.partner_id.id, "type_id": self.rbt.id}
+        )
+        self.authenticate("ptl", "ptl")
+        # Main portal page contains bookings count
+        page = self._url_xml("/my")
+        link = page.cssselect('.o_portal_docs a:contains("Bookings")')[0]
+        self.assertEqual(link.cssselect(".badge")[0].text.strip(), "1")
+        # Bookings page lists 1 booking
+        page = self._url_xml(link.get("href"))
+        self.assertEqual(len(page.cssselect(".o_portal_my_doc_table tr")), 2)
+        link = page.cssselect('.o_portal_my_doc_table a:contains("%d")' % booking.id)[0]
+        # Booking page has schedule button
+        page = self._url_xml(link.get("href"))
+        self.assertTrue(page.cssselect('.badge:contains("Pending")'))
+
+    def test_portal_scheduling_conflict(self):
+        """Produce a scheduling conflict and see how UI behaves.
+
+        This test would be better as a tour, but since there are a few back and
+        forth actions among backend and frontend, and among distinct portal
+        users, it seemed easier to do it completely on python.
+        """
+        # Set RBT to have only 1 combination available: the one for Mondays
+        self.rbt.combination_rel_ids[1:].unlink()
+        # One booking for portal user, another for a partner without user
+        bookings = self.env["resource.booking"].create(
+            [
+                {"partner_id": self.user_portal.partner_id.id, "type_id": self.rbt.id},
+                {"partner_id": self.partner.id, "type_id": self.rbt.id},
+            ]
+        )
+        booking_portal, booking_public = bookings
+        # We assume they were invited by email and clicked on their links
+        portal_url, public_url = (one.get_portal_url() for one in bookings)
+        # Portal guy goes to scheduling page
+        portal_page = self._url_xml(portal_url)
+        self.assertTrue(portal_page.cssselect('.badge:contains("Pending")'))
+        link = portal_page.cssselect('a:contains("Schedule")')[0]
+        portal_url = link.get("href")
+        portal_page = self._url_xml(portal_url)
+        # Nothing free on February, he goes to March
+        self.assertTrue(
+            portal_page.cssselect(".o_booking_calendar:contains('February 2021')")
+        )
+        self.assertTrue(
+            portal_page.cssselect(
+                ".o_booking_calendar td"
+                ":contains('All times are displayed using this timezone:')"
+                ":contains('UTC')"
+            )
+        )
+        self.assertFalse(portal_page.cssselect(".o_booking_calendar .dropdown"))
+        self.assertFalse(portal_page.cssselect(".o_booking_calendar form"))
+        link = portal_page.cssselect('a[title="Next month"]')[0]
+        portal_url = link.get("href")
+        portal_page = self._url_xml(portal_url)
+        self.assertTrue(
+            portal_page.cssselect(".o_booking_calendar:contains('March 2021')")
+        )
+        self.assertTrue(portal_page.cssselect(".o_booking_calendar .dropdown"))
+        self.assertTrue(portal_page.cssselect(".o_booking_calendar form"))
+        # Public guy does the same
+        public_page = self._url_xml(public_url)
+        self.assertTrue(public_page.cssselect('.badge:contains("Pending")'))
+        link = public_page.cssselect('a:contains("Schedule")')[0]
+        public_url = link.get("href")
+        public_page = self._url_xml(public_url)
+        self.assertTrue(
+            public_page.cssselect(".o_booking_calendar:contains('February 2021')")
+        )
+        self.assertTrue(
+            public_page.cssselect(
+                ".o_booking_calendar td"
+                ":contains('All times are displayed using this timezone:')"
+                ":contains('UTC')"
+            )
+        )
+        self.assertFalse(public_page.cssselect(".o_booking_calendar .dropdown"))
+        self.assertFalse(public_page.cssselect(".o_booking_calendar form"))
+        link = public_page.cssselect('a[title="Next month"]')[0]
+        public_url = link.get("href")
+        public_page = self._url_xml(public_url)
+        self.assertTrue(
+            public_page.cssselect(".o_booking_calendar:contains('March 2021')")
+        )
+        self.assertTrue(public_page.cssselect(".o_booking_calendar .dropdown"))
+        self.assertTrue(public_page.cssselect(".o_booking_calendar form"))
+        # Public guy makes reservation next Monday at 10:00
+        slot = datetime(2021, 3, 1, 10).timestamp()
+        selector_10am = (
+            "#dropdown-trigger-2021-03-01 "
+            "+ .slots-dropdown .dropdown-item:contains('10:00:00')"
+        )
+        selector_1030am = (
+            "#dropdown-trigger-2021-03-01 "
+            "+ .slots-dropdown .dropdown-item:contains('10:30:00')"
+        )
+        self.assertTrue(public_page.cssselect(selector_10am))
+        self.assertTrue(public_page.cssselect(selector_1030am))
+        form = public_page.cssselect("form#modal-confirm-%d" % slot)[0]
+        public_url = form.get("action")
+        data = {
+            element.get("name"): element.get("value")
+            for element in form.cssselect("input")
+        }
+        public_page = self._url_xml(public_url, data)
+        # Public guy's reservation succeeded
+        self.assertTrue(public_page.cssselect('.badge:contains("Confirmed")'))
+        self.assertTrue(
+            public_page.cssselect(
+                'div:contains("Booked resources:")'
+                ':contains("Material resource for Mon")'
+                ':contains("User User 0")'
+            )
+        )
+        self.assertTrue(
+            public_page.cssselect('div:contains("Location:"):contains("Main office")')
+        )
+        self.assertTrue(
+            public_page.cssselect(
+                'div:contains("Dates:")'
+                ':contains("03/01/2021 at (10:00:00 To 10:30:00) (UTC)")'
+            )
+        )
+        # Public guy's booking and related meeting are OK in backend
+        booking_public.invalidate_cache(ids=booking_public.ids)
+        self.assertEqual(booking_public.state, "confirmed")
+        self.assertEqual(len(booking_public.meeting_id.attendee_ids), 2)
+        for attendee in booking_public.meeting_id.attendee_ids:
+            self.assertTrue(attendee.partner_id)
+            self.assertIn(
+                attendee.partner_id,
+                self.partner | self.users[0].partner_id,
+            )
+            self.assertEqual(
+                attendee.state,
+                "accepted" if attendee.partner_id == self.partner else "needsAction",
+            )
+        # At the same time, portal guy tries to reserve the same slot, which
+        # appears as free to him due to the race condition we just created
+        self.assertTrue(portal_page.cssselect(selector_10am))
+        self.assertTrue(portal_page.cssselect(selector_1030am))
+        form = portal_page.cssselect("form#modal-confirm-%d" % slot)[0]
+        portal_url = form.get("action")
+        data = {
+            element.get("name"): element.get("value")
+            for element in form.cssselect("input")
+        }
+        portal_page = self._url_xml(portal_url, data)
+        # He's back on the March calendar view, with an error message
+        self.assertTrue(
+            portal_page.cssselect(
+                ".alert-danger:contains('The chosen schedule is no longer available.')"
+            )
+        )
+        self.assertTrue(
+            portal_page.cssselect(".o_booking_calendar:contains('March 2021')")
+        )
+        self.assertTrue(portal_page.cssselect(".o_booking_calendar .dropdown"))
+        self.assertTrue(portal_page.cssselect(".o_booking_calendar form"))
+        # He can't select that slot anymore, so he books it 30 minutes later
+        self.assertFalse(portal_page.cssselect(selector_10am))
+        self.assertTrue(portal_page.cssselect(selector_1030am))
+        slot = datetime(2021, 3, 1, 10, 30).timestamp()
+        self.assertTrue(portal_page.cssselect("#dropdown-trigger-2021-03-08"))
+        form = portal_page.cssselect("form#modal-confirm-%d" % slot)[0]
+        portal_url = form.get("action")
+        data = {
+            element.get("name"): element.get("value")
+            for element in form.cssselect("input")
+        }
+        portal_page = self._url_xml(portal_url, data)
+        # Portal guy's reservation succeeded
+        self.assertTrue(portal_page.cssselect('.badge:contains("Confirmed")'))
+        self.assertTrue(
+            portal_page.cssselect(
+                'div:contains("Booked resources:")'
+                ':contains("Material resource for Mon")'
+                ':contains("User User 0")'
+            )
+        )
+        self.assertTrue(
+            portal_page.cssselect('div:contains("Location:"):contains("Main office")')
+        )
+        self.assertTrue(
+            portal_page.cssselect(
+                'div:contains("Dates:")'
+                ':contains("03/01/2021 at (10:30:00 To 11:00:00) (UTC)")'
+            )
+        )
+        # Portal guy cancels
+        link = portal_page.cssselect('a:contains("Cancel this booking")')[0]
+        portal_url = link.get("href")
+        portal_page = self._url_xml(portal_url)
+        self.assertTrue(portal_page.cssselect(".oe_login_form"))
diff --git a/resource_booking/views/calendar_event_views.xml b/resource_booking/views/calendar_event_views.xml
new file mode 100644
index 00000000..908ebff6
--- /dev/null
+++ b/resource_booking/views/calendar_event_views.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<data>
+
+    <record id="view_calendar_event_form" model="ir.ui.view">
+        <field name="name">calendar.event.view.form.inherit</field>
+        <field name="model">calendar.event</field>
+        <field name="inherit_id" ref="calendar.view_calendar_event_form" />
+        <field name="arch" type="xml">
+            <form position="inside">
+                <field name="resource_booking_ids" invisible="1" />
+            </form>
+        </field>
+    </record>
+
+</data>
diff --git a/resource_booking/views/menus.xml b/resource_booking/views/menus.xml
new file mode 100644
index 00000000..9dcb549e
--- /dev/null
+++ b/resource_booking/views/menus.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<data>
+
+    <!-- User menus -->
+    <menuitem id="resource_booking_main_menu" name="Resource Bookings" groups="group_user" web_icon="resource_booking,static/description/icon.png" />
+
+    <menuitem id="resource_booking_menu" name="Bookings" action="resource_booking_action" parent="resource_booking_main_menu" sequence="10" />
+    <menuitem id="resource_booking_type_menu" name="Types" action="resource_booking_type_action" parent="resource_booking_main_menu" sequence="20" />
+    <menuitem id="resource_booking_combination_menu" name="Combinations" action="resource_booking_combination_action" parent="resource_booking_main_menu" sequence="30" />
+
+    <!-- Manager menus -->
+    <menuitem id="resource_booking_type_configuration_menu" name="Configuration" parent="resource_booking_main_menu" sequence="100" groups="group_manager" />
+
+    <menuitem id="menu_resource_resource"
+        parent="resource_booking_type_configuration_menu"
+        action="resource.action_resource_resource_tree"
+        sequence="100"/>
+    <menuitem id="menu_resource_calendar"
+        parent="resource_booking_type_configuration_menu"
+        action="resource.action_resource_calendar_form"
+        sequence="200"/>
+    <menuitem id="menu_view_resource_calendar_leaves_search"
+        parent="resource_booking_type_configuration_menu"
+        action="resource.action_resource_calendar_leave_tree"
+        sequence="300"/>
+
+</data>
diff --git a/resource_booking/views/resource_booking_combination_views.xml b/resource_booking/views/resource_booking_combination_views.xml
new file mode 100644
index 00000000..a4ddf705
--- /dev/null
+++ b/resource_booking/views/resource_booking_combination_views.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<odoo>
+
+    <!-- Views -->
+    <record id="resource_booking_combination_form" model="ir.ui.view">
+        <field name="name">Resource booking combination form</field>
+        <field name="model">resource.booking.combination</field>
+        <field name="arch" type="xml">
+            <form>
+                <header></header>
+                <sheet>
+                    <div class="oe_button_box" name="button_box">
+                        <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
+                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        </button>
+                        <button name="action_open_bookings" type="object" class="oe_stat_button" icon="fa-calendar">
+                            <field name="booking_count" widget="statinfo" />
+                        </button>
+                        <button name="action_open_resource_booking_types" type="object" class="oe_stat_button" icon="fa-calendar">
+                            <field name="type_count" widget="statinfo" />
+                        </button>
+                    </div>
+                    <div class="oe_title">
+                        <h1>
+                            <field name="name" />
+                        </h1>
+                    </div>
+                    <group name="main">
+                        <field name="resource_ids" />
+                        <field name="forced_calendar_id" />
+                    </group>
+                </sheet>
+            </form>
+        </field>
+    </record>
+
+    <record id="resource_booking_combination_view_tree" model="ir.ui.view">
+        <field name="name">Resource booking combination tree</field>
+        <field name="model">resource.booking.combination</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="name" />
+                <field name="resource_ids" widget="many2many_tags" />
+                <field name="forced_calendar_id" />
+            </tree>
+        </field>
+    </record>
+
+    <record id="resource_booking_combination_view_search" model="ir.ui.view">
+        <field name="name">resource.booking.combination.view.search</field>
+        <field name="model">resource.booking.combination</field>
+        <field name="arch" type="xml">
+            <search>
+                <field name="resource_ids" />
+            </search>
+        </field>
+    </record>
+
+    <!-- Actions -->
+    <record id="resource_booking_combination_action" model="ir.actions.act_window">
+        <field name="name">Resource combinations</field>
+        <field name="res_model">resource.booking.combination</field>
+        <field name="view_mode">tree,form</field>
+        <field name="domain">[]</field>
+        <field name="context">{}</field>
+        <field name="help" type="html">
+            <p class="o_view_nocontent_smiling_face">Define bookable resource combinations.</p>
+            <p>These records define resource combinations that can be booked together in specified schedules and intervals.</p>
+        </field>
+    </record>
+
+</odoo>
diff --git a/resource_booking/views/resource_booking_type_views.xml b/resource_booking/views/resource_booking_type_views.xml
new file mode 100644
index 00000000..e5c290f7
--- /dev/null
+++ b/resource_booking/views/resource_booking_type_views.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<odoo>
+
+    <!-- Views -->
+    <record id="resource_booking_type_form" model="ir.ui.view">
+        <field name="name">Resource booking type form</field>
+        <field name="model">resource.booking.type</field>
+        <field name="arch" type="xml">
+            <form>
+                <header></header>
+                <sheet>
+                    <div class="oe_button_box" name="button_box">
+                        <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
+                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        </button>
+                        <button name="action_open_bookings" type="object" class="oe_stat_button" icon="fa-calendar">
+                            <field name="booking_count" widget="statinfo" />
+                        </button>
+                    </div>
+                    <div class="oe_title">
+                        <h1>
+                            <field name="name" />
+                        </h1>
+                    </div>
+                    <group name="main">
+                        <group name="settings" string="Settings">
+                            <field name="company_id" options="{'no_create': True}" groups="base.group_multi_company" />
+                            <field name="duration" widget="float_time" />
+                            <field name="modifications_deadline" widget="float_time" />
+                            <field name="resource_calendar_id" />
+                        </group>
+                        <group name="event_defaults" string="Meeting defaults">
+                            <field name="location" />
+                            <field name="alarm_ids" widget="many2many_tags" />
+                            <field name="categ_ids" widget="many2many_tags" options="{'no_create_edit': True}" />
+                            <field name="requester_advice" />
+                        </group>
+                        <group string="Resource combinations" name="combinations" colspan="2">
+                            <field name="combination_assignment" />
+                            <field name="combination_rel_ids">
+                                <tree editable="bottom">
+                                    <field name="sequence" widget="handle"/>
+                                    <field name="combination_id" />
+                                </tree>
+                            </field>
+                        </group>
+                    </group>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" widget="mail_followers" groups="base.group_user" />
+                    <field name="activity_ids" widget="mail_activity" />
+                    <field name="message_ids" widget="mail_thread" />
+                </div>
+            </form>
+        </field>
+    </record>
+
+    <record id="resource_booking_type_view_tree" model="ir.ui.view">
+        <field name="name">Resource booking type tree</field>
+        <field name="model">resource.booking.type</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="name" />
+                <field name="resource_calendar_id" />
+                <field name="duration" widget="float_time"/>
+            </tree>
+        </field>
+    </record>
+
+    <record id="resource_booking_type_view_search" model="ir.ui.view">
+        <field name="name">resource.booking.type.view.search</field>
+        <field name="model">resource.booking.type</field>
+        <field name="arch" type="xml">
+            <search>
+                <field name="name" />
+                <field name="company_id" groups="base.group_multi_company" />
+                <group expand="0" name="groupby" string="Group By">
+                    <filter string="Company" name="groupby_company_id" context="{'group_by':'company_id'}" groups="base.group_multi_company" />
+                </group>
+            </search>
+        </field>
+    </record>
+
+    <!-- Actions -->
+    <record id="resource_booking_type_action" model="ir.actions.act_window">
+        <field name="name">Types</field>
+        <field name="res_model">resource.booking.type</field>
+        <field name="view_mode">tree,form</field>
+        <field name="domain">[]</field>
+        <field name="context">{}</field>
+        <field name="help" type="html">
+            <p class="o_view_nocontent_smiling_face">Define resource booking types.</p>
+            <p>These records categorize resource bookings and apply restrictions to them, such as available resource combinations, availability schedules and interval duration.</p>
+        </field>
+    </record>
+
+</odoo>
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
new file mode 100644
index 00000000..ca6e56b0
--- /dev/null
+++ b/resource_booking/views/resource_booking_views.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+
+<data>
+
+    <!-- Views -->
+    <record id="resource_booking_view_calendar" model="ir.ui.view">
+        <field name="name">Resource booking calendar</field>
+        <field name="model">resource.booking</field>
+        <field name="arch" type="xml">
+            <calendar string="Bookings" date_start="start" date_stop="stop" quick_add="false" color="combination_id">
+                <field name="name" />
+                <field name="partner_id" avatar_field="image_small" />
+                <field name="combination_id" />
+            </calendar>
+        </field>
+    </record>
+
+    <record id="resource_booking_view_tree" model="ir.ui.view">
+        <field name="name">Resource booking tree</field>
+        <field name="model">resource.booking</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="partner_id" />
+                <field name="type_id" />
+                <field name="combination_id" />
+                <field name="state" />
+                <field name="start" />
+                <field name="stop" />
+            </tree>
+        </field>
+    </record>
+
+    <record id="resource_booking_form" model="ir.ui.view">
+        <field name="name">Resource booking form</field>
+        <field name="model">resource.booking</field>
+        <field name="arch" type="xml">
+            <form>
+                <header>
+                    <field name="requester_advice" invisible="1" />
+                    <button name="%(portal.portal_share_action)d" class="oe_highlight" string="Share" type="action" context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}" help="Invite requesting partner to portal." states="pending" />
+                    <button name="%(portal.portal_share_action)d" string="Share" type="action" context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}" help="Invite requesting partner to portal." states="scheduled,confirmed" />
+                    <button name="action_schedule" class="oe_highlight" string="Schedule" type="object" help="Open a calendar to schedule a meeting for this booking request." attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'pending')]}" />
+                    <button name="action_confirm" string="Confirm" type="object" help="Confirm that the requesting partner and yourself will attend the scheduled meeting." attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'scheduled')]}" context="{'confirm_own_attendance': True}" />
+                    <button name="action_unschedule" string="Unschedule" type="object" help="Unschedule this booking." confirm="This will remove the associated meeting to unschedule the booking. Are you sure?" attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('meeting_id', '=', False)]}" />
+                    <button name="action_cancel" string="Cancel" type="object" help="Unschedule this booking and archive it." attrs="{'invisible': ['|', '|', ('is_modifiable', '=', False), ('state', '=', 'canceled'), ('meeting_id', '!=', False)]}" />
+                    <button name="action_cancel" string="Cancel" type="object" help="Unschedule this booking and archive it." confirm="This will remove the associated meeting to unschedule the booking. Are you sure?" attrs="{'invisible': ['|', '|', ('is_modifiable', '=', False), ('state', '=', 'canceled'), ('meeting_id', '=', False)]}" />
+                    <button name="toggle_active" string="Set pending" type="object" help="Set to pending" attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'canceled')]}" />
+                    <field name="state" widget="statusbar" />
+                </header>
+                <sheet>
+                    <div class="oe_button_box" name="button_box">
+                        <button name="action_open_portal" type="object" class="oe_stat_button" icon="fa-globe">
+                            <span>Preview</span>
+                        </button>
+                        <!-- Using attrs=invisible trick to make archive=cancel -->
+                        <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive" attrs="{'invisible': [('active', '=', True), ('meeting_id', '!=', False)]}">
+                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        </button>
+                        <button name="action_cancel" type="object" class="oe_stat_button" icon="fa-archive" attrs="{'invisible': ['!', '&amp;', ('active', '=', True), ('meeting_id', '!=', False)]}" confirm="This will remove the associated meeting to unschedule the booking. Are you sure?">
+                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        </button>
+                    </div>
+                    <group name="main">
+                        <group name="booking">
+                            <field name="partner_id" />
+                            <field name="type_id" />
+                            <field name="combination_id" attrs="{'required': [('start', '!=', False)]}"/>
+                            <field name="categ_ids" widget="many2many_tags"/>
+                        </group>
+                        <group name="meeting" string="Meeting">
+                            <field name="meeting_id" groups="base.group_no_one" />
+                            <field name="is_overdue" invisible="1" />
+                            <field name="is_modifiable" invisible="1" />
+                            <div colspan="2" role="alert" class="alert alert-warning" attrs="{'invisible': [('is_overdue', '=', False)]}">
+                                This booking exceeded its modifications deadline.
+                            </div>
+                            <field name="start" attrs="{'required': [('stop', '!=', False)]}" />
+                            <field name="stop" attrs="{'required': [('start', '!=', False)]}" />
+                        </group>
+                    </group>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" widget="mail_followers" groups="base.group_user" />
+                    <field name="activity_ids" widget="mail_activity" />
+                    <field name="message_ids" widget="mail_thread" />
+                </div>
+            </form>
+        </field>
+    </record>
+
+    <record id="resource_booking_view_search" model="ir.ui.view">
+        <field name="name">resource.booking.view.search</field>
+        <field name="model">resource.booking</field>
+        <field name="arch" type="xml">
+            <search>
+                <field name="partner_id" />
+                <field name="type_id" />
+                <filter name="is_mine" string="Involving me" domain="[('involves_me', '=', True)]"/>
+                <filter name="is_pending" string="Pending" domain="[('state', '=', 'pending')]"></filter>
+                <filter name="is_scheduled" string="Scheduled or confirmed" domain="[('state', 'in', ['scheduled', 'confirmed'])]"></filter>
+                <group expand="0" name="groupby" string="Group By">
+                    <filter string="State" name="groupby_state" context="{'group_by': 'state'}" />
+                    <filter string="Type" name="groupby_type_id" context="{'group_by': 'type_id'}" />
+                    <filter string="Combination" name="groupby_combination_id" context="{'group_by': 'combination_id'}" />
+                </group>
+            </search>
+        </field>
+    </record>
+
+    <!-- Actions -->
+    <record id="resource_booking_action" model="ir.actions.act_window">
+        <field name="name">Bookings</field>
+        <field name="res_model">resource.booking</field>
+        <field name="view_mode">calendar,tree,form</field>
+        <field name="domain">[]</field>
+        <field name="context">{'search_default_is_mine': 1}</field>
+        <field name="help" type="html">
+            <p class="o_view_nocontent_smiling_face">
+                Define resource bookings.
+            </p>
+            <p>
+                When scheduled, resources will be blocked. When pending, it means the requester didn't place the booking yet.
+            </p>
+        </field>
+    </record>
+
+</data>

From dad161dc75fb1fa9b778ff5a7ee67180217927fa Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 30 Apr 2021 10:15:32 +0000
Subject: [PATCH 02/64] Translated using Weblate (Spanish)

Currently translated at 100.0% (190 of 190 strings)

Translation: calendar-12.0/calendar-12.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-12-0/calendar-12-0-resource_booking/es/
---
 resource_booking/i18n/es.po | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index d581310f..1adbed58 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -7,15 +7,15 @@ msgstr ""
 "Project-Id-Version: Odoo Server 12.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-04-26 06:31+0000\n"
-"PO-Revision-Date: 2021-04-26 07:35+0100\n"
+"PO-Revision-Date: 2021-04-30 12:47+0000\n"
 "Last-Translator: Jairo Llopis <jairo.llopis@tecnativa.com>\n"
 "Language-Team: \n"
-"Language: es_ES\n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.4.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:359
@@ -952,7 +952,7 @@ msgstr "Ordenada: escoger el primero que esté libre"
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
 msgid "Start"
-msgstr "Iniciar"
+msgstr "Inicio"
 
 #. module: resource_booking
 #: sql_constraint:resource.booking:0
@@ -988,7 +988,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__stop
 msgid "Stop"
-msgstr "Parar"
+msgstr "Fin"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__categ_ids

From ca7504a18212fd441331123a06e74ea7e406ea28 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 30 Apr 2021 11:27:07 +0100
Subject: [PATCH 03/64] [IMP] resource_booking: filter/group by date

TT29508
---
 resource_booking/__manifest__.py                  |  2 +-
 resource_booking/i18n/es.po                       | 10 ++++++++--
 resource_booking/i18n/resource_booking.pot        |  6 ++++++
 resource_booking/views/resource_booking_views.xml |  2 ++
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 41d8e5e8..efb8020a 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "12.0.1.0.0",
+    "version": "12.0.1.1.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index 1adbed58..7dcea3cf 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 12.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-26 06:31+0000\n"
-"PO-Revision-Date: 2021-04-30 12:47+0000\n"
+"POT-Creation-Date: 2021-04-30 10:28+0000\n"
+"PO-Revision-Date: 2021-04-30 11:29+0100\n"
 "Last-Translator: Jairo Llopis <jairo.llopis@tecnativa.com>\n"
 "Language-Team: \n"
 "Language: es\n"
@@ -951,6 +951,7 @@ msgstr "Ordenada: escoger el primero que esté libre"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
 msgid "Start"
 msgstr "Inicio"
 
@@ -959,6 +960,11 @@ msgstr "Inicio"
 msgid "Start and stop must be filled or emptied together."
 msgstr "El inicio y el fin deben rellenarse o vaciarse simultáneamente."
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start date"
+msgstr "Fecha de inicio"
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "Start:"
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index bef30b9b..7f1272f8 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -900,6 +900,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
 msgid "Start"
 msgstr ""
 
@@ -908,6 +909,11 @@ msgstr ""
 msgid "Start and stop must be filled or emptied together."
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start date"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "Start:"
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index ca6e56b0..abf2ed09 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -100,10 +100,12 @@
                 <filter name="is_mine" string="Involving me" domain="[('involves_me', '=', True)]"/>
                 <filter name="is_pending" string="Pending" domain="[('state', '=', 'pending')]"></filter>
                 <filter name="is_scheduled" string="Scheduled or confirmed" domain="[('state', 'in', ['scheduled', 'confirmed'])]"></filter>
+                <filter name="filter_date" string="Start date" date="start"/>
                 <group expand="0" name="groupby" string="Group By">
                     <filter string="State" name="groupby_state" context="{'group_by': 'state'}" />
                     <filter string="Type" name="groupby_type_id" context="{'group_by': 'type_id'}" />
                     <filter string="Combination" name="groupby_combination_id" context="{'group_by': 'combination_id'}" />
+                    <filter string="Start" name="groupby_start" context="{'group_by': 'start'}" />
                 </group>
             </search>
         </field>

From c0f824e58e3a5a81fd3387b489eeb81091d5d571 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Thu, 6 May 2021 12:48:10 +0100
Subject: [PATCH 04/64] [FIX] resource_calendar: ignore past or unconfirmed
 bookings when updating calendars

Without this patch, users couldn't change a calendar schedule if there were past or unconfirmed bookings that wouldn't fit in it.

Excluding those bookings from the check fixes the situation.

We also check that, to confirm a booking, it must fit in the calendar (because now it can happen that, in the time that has passed since the booking was scheduled until it is confirmed, the calendar changes).

@Tecnativa TT29509
---
 resource_booking/__manifest__.py             |  2 +-
 resource_booking/i18n/es.po                  | 14 +++---
 resource_booking/i18n/resource_booking.pot   | 14 +++---
 resource_booking/models/resource_booking.py  |  3 ++
 resource_booking/models/resource_calendar.py |  2 +
 resource_booking/tests/test_backend.py       | 46 ++++++++++++++++++++
 6 files changed, 66 insertions(+), 15 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index efb8020a..a588b3b1 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "12.0.1.1.0",
+    "version": "12.0.1.1.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index 7dcea3cf..0d270a94 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -18,13 +18,13 @@ msgstr ""
 "X-Generator: Weblate 4.3.2\n"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:359
+#: code:addons/resource_booking/models/resource_booking.py:362
 #, python-format
 msgid "%(partner)s - %(type)s"
 msgstr "%(partner)s - %(type)s"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:358
+#: code:addons/resource_booking/models/resource_booking.py:361
 #, python-format
 msgid "%(partner)s - %(type)s - %(time)s"
 msgstr "%(partner)s - %(type)s - %(time)s"
@@ -260,7 +260,7 @@ msgid "Canceled"
 msgstr "Cancelado"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:263
+#: code:addons/resource_booking/models/resource_booking.py:266
 #, python-format
 msgid ""
 "Cannot schedule these bookings because no resources are selected for them:\n"
@@ -273,7 +273,7 @@ msgstr ""
 "- %s"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:285
+#: code:addons/resource_booking/models/resource_booking.py:288
 #, python-format
 msgid ""
 "Cannot schedule these bookings because they do not fit in their type or "
@@ -689,7 +689,7 @@ msgid "No free slots found this month."
 msgstr "No quedan huecos libres este mes."
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:390
+#: code:addons/resource_booking/models/resource_booking.py:393
 #, python-format
 msgid "No resource combinations available on %s"
 msgstr "No hay combinaciones de recursos disponibles en %s"
@@ -800,7 +800,7 @@ msgid "Requester Advice"
 msgstr "Aviso al solicitante"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:445
+#: code:addons/resource_booking/models/resource_booking.py:448
 #, python-format
 msgid "Requesting partner"
 msgstr "Solicitante"
@@ -899,7 +899,7 @@ msgid "Schedule"
 msgstr "Horario"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:465
+#: code:addons/resource_booking/models/resource_booking.py:468
 #, python-format
 msgid "Schedule booking"
 msgstr "Agendar reserva/cita"
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 7f1272f8..68855020 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -14,13 +14,13 @@ msgstr ""
 "Plural-Forms: \n"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:359
+#: code:addons/resource_booking/models/resource_booking.py:362
 #, python-format
 msgid "%(partner)s - %(type)s"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:358
+#: code:addons/resource_booking/models/resource_booking.py:361
 #, python-format
 msgid "%(partner)s - %(type)s - %(time)s"
 msgstr ""
@@ -238,7 +238,7 @@ msgid "Canceled"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:263
+#: code:addons/resource_booking/models/resource_booking.py:266
 #, python-format
 msgid "Cannot schedule these bookings because no resources are selected for them:\n"
 "\n"
@@ -246,7 +246,7 @@ msgid "Cannot schedule these bookings because no resources are selected for them
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:285
+#: code:addons/resource_booking/models/resource_booking.py:288
 #, python-format
 msgid "Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
 "\n"
@@ -647,7 +647,7 @@ msgid "No free slots found this month."
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:390
+#: code:addons/resource_booking/models/resource_booking.py:393
 #, python-format
 msgid "No resource combinations available on %s"
 msgstr ""
@@ -750,7 +750,7 @@ msgid "Requester Advice"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:445
+#: code:addons/resource_booking/models/resource_booking.py:448
 #, python-format
 msgid "Requesting partner"
 msgstr ""
@@ -848,7 +848,7 @@ msgid "Schedule"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:465
+#: code:addons/resource_booking/models/resource_booking.py:468
 #, python-format
 msgid "Schedule booking"
 msgstr ""
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 11bac403..2d281606 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -188,6 +188,7 @@ def _compute_name(self):
     @api.depends("active", "meeting_id.attendee_ids.state")
     def _compute_state(self):
         """Obtain request state."""
+        to_check = self.browse(prefetch=self._prefetch)
         for one in self:
             if not one.active:
                 one.state = "canceled"
@@ -199,8 +200,10 @@ def _compute_state(self):
                     break
             if confirmed:
                 one.state = "confirmed"
+                to_check |= one
                 continue
             one.state = "scheduled" if one.meeting_id else "pending"
+        to_check._check_scheduling()
 
     @api.depends("meeting_id.start", "meeting_id.stop")
     def _compute_dates(self):
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
index 3b0b6032..9c4bcc8f 100644
--- a/resource_booking/models/resource_calendar.py
+++ b/resource_booking/models/resource_calendar.py
@@ -19,6 +19,8 @@ def _check_bookings_scheduling(self):
         """Scheduled bookings must have no conflicts."""
         bookings = self.env["resource.booking"].search(
             [
+                ("state", "=", "confirmed"),
+                ("stop", ">=", fields.Datetime.now()),
                 "|",
                 ("combination_id.forced_calendar_id", "in", self.ids),
                 ("combination_id.resource_ids.calendar_id", "in", self.ids),
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 4e9541b8..716ec13a 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -304,3 +304,49 @@ def test_recurring_event(self):
         # Everyone's free at 9
         rb_f.start = datetime(2021, 3, 1, 9)
         self.assertTrue(rb_f.combination_id)
+
+    def test_change_calendar_after_bookings_exist(self):
+        """Calendar changes can be done only if they introduce no conflicts."""
+        rbc_mon = self.rbcs[0]
+        cal_mon = self.r_calendars[0]
+        # There's a booking for last monday
+        past_booking = self.env["resource.booking"].create(
+            {
+                "combination_id": rbc_mon.id,
+                "partner_id": self.partner.id,
+                "start": "2021-02-22 08:00:00",
+                "stop": "2021-02-22 08:30:00",
+                "type_id": self.rbt.id,
+            }
+        )
+        past_booking.action_confirm()
+        self.assertEqual(past_booking.state, "confirmed")
+        # There's another one for next monday, confirmed too
+        future_booking = self.env["resource.booking"].create(
+            {
+                "combination_id": rbc_mon.id,
+                "partner_id": self.partner.id,
+                "start": "2021-03-01 08:00:00",
+                "stop": "2021-03-01 08:30:00",
+                "type_id": self.rbt.id,
+            }
+        )
+        future_booking.action_confirm()
+        self.assertEqual(future_booking.state, "confirmed")
+        # Now, it's impossible for me to change the resource calendar
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            with Form(cal_mon) as cal_mon_f:
+                with cal_mon_f.attendance_ids.edit(0) as att_mon_f:
+                    att_mon_f.hour_from = 9
+        # But let's unconfirm future boooking
+        future_booking.action_unschedule()
+        with Form(future_booking) as future_booking_f:
+            future_booking_f.start = "2021-03-01 08:00:00"
+        self.assertEqual(future_booking.state, "scheduled")
+        # Now I should be able to change the resource calendar
+        with Form(cal_mon) as cal_mon_f:
+            with cal_mon_f.attendance_ids.edit(0) as att_mon_f:
+                att_mon_f.hour_from = 9
+        # However, now I shouldn't be able to confirm future booking
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            future_booking.action_confirm()

From 3be0d0055f56b69214a50036805bd4275be3a210 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Tue, 8 Jun 2021 10:28:12 +0100
Subject: [PATCH 05/64] [FIX] resource_booking: always notify in resource TZ

The notifications emitted to the resource booking requester must always be in the same TZ as the resource booking itself.

For example, if you book one hotel room in the other side of the world, a notification in your own TZ is confusing.

Besides, res.partner created from website_sale are created with `tz=False`, making it even more confusing.

@Tecnativa TT30331
---
 resource_booking/__manifest__.py          |  2 +-
 resource_booking/models/calendar_event.py | 10 ++++++++
 resource_booking/tests/test_backend.py    | 28 +++++++++++++++++++++++
 3 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index a588b3b1..ea25059d 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "12.0.1.1.1",
+    "version": "12.0.1.1.2",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index a14e6721..9500e8c1 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -51,3 +51,13 @@ def write(self, vals):
                 rescheduled -= new
         rescheduled._validate_booking_modifications()
         return result
+
+    def get_interval(self, interval, tz=None):
+        """Autofix tz from related resource booking.
+
+        This function is called to render calendar.event notification mails.
+        Any notification related to a resource.booking must be emitted in the
+        same TZ as the resource.booking. Otherwise it's confusing to the user.
+        """
+        tz = self.resource_booking_ids.type_id.resource_calendar_id.tz or tz
+        return super().get_interval(interval=interval, tz=tz)
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 716ec13a..6576886b 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -350,3 +350,31 @@ def test_change_calendar_after_bookings_exist(self):
         # However, now I shouldn't be able to confirm future booking
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             future_booking.action_confirm()
+
+    def test_notification_tz(self):
+        """Mail notification TZ is the same as resource.booking.type always."""
+        # Configure RBT with Madrid calendar, but partner has other TZ
+        self.r_calendars.write({"tz": "Europe/Madrid"})
+        self.partner.tz = "Australia/Sydney"
+        rb = self.env["resource.booking"].create(
+            {
+                "combination_id": self.rbcs[0].id,
+                "partner_id": self.partner.id,
+                "start": "2021-03-01 08:00:00",  # 09:00 in Madrid
+                "stop": "2021-03-01 08:30:00",
+                "type_id": self.rbt.id,
+            }
+        )
+        rb.action_confirm()
+        invitation_mail = self.env["mail.mail"].search(
+            [
+                ("state", "=", "outgoing"),
+                (
+                    "subject",
+                    "=",
+                    "Invitation to some customer - Test resource booking type",
+                ),
+            ]
+        )
+        # Invitation must display Madrid TZ (CET)
+        self.assertIn("09:00:00 CET", invitation_mail.body)

From e67895d755bc91c6ef8ade7adda51cdaacfbe2ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Marques?= <joao.marques@tecnativa.com>
Date: Fri, 18 Jun 2021 12:53:45 +0100
Subject: [PATCH 06/64] [FIX] resource_booking: Limit constraint only to future
 bookings

The constraint that checks the schedule of a resource booking is currently being applied to all the bookings, including past ones.
As the resource combination or associated calendars might change regularly and trigger a recomputation of this, such change might take a very long time.
Plus, the calendar restrictions might change, trigger a recompute of the constraint and detect bookings that can't be assigned, which makes no sense when they already happened.

This applies it only to future bookings, ignoring past ones.

TT30478
---
 resource_booking/__manifest__.py            | 2 +-
 resource_booking/models/resource_booking.py | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index ea25059d..89b28732 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "12.0.1.1.2",
+    "version": "12.0.1.1.3",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 2d281606..90669407 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -271,7 +271,13 @@ def _check_scheduling(self):
             )
         # Ensure all bookings fit in their type and resources calendars
         unfitting_bookings = has_meeting
+        now = fields.Datetime.now()
         for booking in has_meeting:
+            # Ignore if the event already happened
+            already_happened = booking.stop and booking.stop < now
+            if already_happened:
+                unfitting_bookings -= booking
+                continue
             meeting_dates = tuple(
                 fields.Datetime.context_timestamp(self, booking[field])
                 for field in ("start", "stop")

From 79b65e2b1ab4de851fdab95a0214d12a46f6b8f5 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Tue, 13 Jul 2021 11:10:06 +0100
Subject: [PATCH 07/64] [IMP] resource_booking: black, isort, prettier

---
 resource_booking/__manifest__.py              |  10 +-
 resource_booking/controllers/portal.py        |   6 +-
 resource_booking/demo/res_users_demo.xml      |   5 +-
 resource_booking/models/resource_booking.py   |  15 +-
 .../models/resource_booking_combination.py    |   1 +
 .../models/resource_booking_type.py           |   3 +-
 resource_booking/models/resource_calendar.py  |   4 +-
 .../security/resource_booking_security.xml    |  32 +-
 resource_booking/templates/assets.xml         |  10 +-
 resource_booking/templates/portal.xml         | 295 +++++++++++++-----
 resource_booking/tests/common.py              |  12 +-
 resource_booking/tests/test_backend.py        |   9 +-
 resource_booking/tests/test_portal.py         |  11 +-
 .../views/calendar_event_views.xml            |   5 +-
 resource_booking/views/menus.xml              |  65 ++--
 .../resource_booking_combination_views.xml    |  44 ++-
 .../views/resource_booking_type_views.xml     |  68 ++--
 .../views/resource_booking_views.xml          | 198 +++++++++---
 18 files changed, 566 insertions(+), 227 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 89b28732..b2c54620 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -15,8 +15,10 @@
     "installable": True,
     "external_dependencies": {
         "python": [
-            "cssselect",  # Used implicitly
-            "freezegun",  # Only for tests
+            # Used implicitly
+            "cssselect",
+            # Only for tests
+            "freezegun",
         ],
     },
     "depends": [
@@ -37,7 +39,5 @@
         "views/resource_booking_views.xml",
         "views/menus.xml",
     ],
-    "demo": [
-        "demo/res_users_demo.xml",
-    ],
+    "demo": ["demo/res_users_demo.xml",],
 }
diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
index 11da8785..25556207 100644
--- a/resource_booking/controllers/portal.py
+++ b/resource_booking/controllers/portal.py
@@ -5,11 +5,13 @@
 from urllib.parse import quote_plus
 
 from dateutil.parser import isoparse
-from odoo.addons.portal.controllers import portal
+
 from odoo.exceptions import AccessError, MissingError, ValidationError
 from odoo.http import request, route
 from odoo.tests.common import Form
 
+from odoo.addons.portal.controllers import portal
+
 
 class CustomerPortal(portal.CustomerPortal):
     def _get_booking_sudo(self, booking_id, access_token):
@@ -131,7 +133,7 @@ def portal_booking_confirm(self, booking_id, access_token, when, **kwargs):
                 booking_form.start = when_naive
         except ValidationError as error:
             url = booking_sudo.get_portal_url(
-                suffix="/schedule/{0:%Y/%m}".format(when_tz_aware),
+                suffix="/schedule/{:%Y/%m}".format(when_tz_aware),
                 query_string="&error={}".format(quote_plus(error.name)),
             )
             return request.redirect(url)
diff --git a/resource_booking/demo/res_users_demo.xml b/resource_booking/demo/res_users_demo.xml
index 5bfa5eed..338a929f 100644
--- a/resource_booking/demo/res_users_demo.xml
+++ b/resource_booking/demo/res_users_demo.xml
@@ -1,11 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <data>
-
     <record id="base.user_demo" model="res.users">
         <field name="groups_id" eval="[(4, ref('group_user'))]" />
     </record>
-
 </data>
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 90669407..9ea7bad7 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -2,17 +2,17 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 import calendar
-
-from datetime import datetime, timedelta
 from contextlib import suppress
+from datetime import datetime, timedelta
 
 from dateutil.relativedelta import relativedelta
 
 from odoo import _, api, fields, models
-from odoo.addons.resource.models.resource import Intervals
 from odoo.exceptions import ValidationError
 from odoo.osv.expression import NEGATIVE_TERM_OPERATORS
 
+from odoo.addons.resource.models.resource import Intervals
+
 
 class ResourceBooking(models.Model):
     _name = "resource.booking"
@@ -51,10 +51,7 @@ class ResourceBooking(models.Model):
         ondelete="set null",
         help="Meeting confirmed for this booking.",
     )
-    categ_ids = fields.Many2many(
-        string="Tags",
-        comodel_name="calendar.event.type",
-    )
+    categ_ids = fields.Many2many(string="Tags", comodel_name="calendar.event.type",)
     combination_id = fields.Many2one(
         comodel_name="resource.booking.combination",
         string="Resources combination",
@@ -74,9 +71,7 @@ class ResourceBooking(models.Model):
         track_visibility="onchange",
         help="Who requested this booking?",
     )
-    requester_advice = fields.Text(
-        related="type_id.requester_advice", readonly=True
-    )
+    requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
     involves_me = fields.Boolean(
         compute="_compute_involves_me", search="_search_involves_me"
     )
diff --git a/resource_booking/models/resource_booking_combination.py b/resource_booking/models/resource_booking_combination.py
index 752c1172..76919c12 100644
--- a/resource_booking/models/resource_booking_combination.py
+++ b/resource_booking/models/resource_booking_combination.py
@@ -2,6 +2,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from odoo import _, api, fields, models
+
 from odoo.addons.resource.models.resource import Intervals
 
 
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 6a99bc45..69bd4da2 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -2,10 +2,11 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from datetime import timedelta
-from odoo import _, api, fields, models
 from math import ceil
 from random import random
 
+from odoo import _, api, fields, models
+
 
 class ResourceBookingType(models.Model):
     _name = "resource.booking.type"
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
index 9c4bcc8f..510a2788 100644
--- a/resource_booking/models/resource_calendar.py
+++ b/resource_booking/models/resource_calendar.py
@@ -2,9 +2,11 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from pytz import UTC
+
 from odoo import api, fields, models
-from odoo.addons.resource.models.resource import Intervals
+
 from odoo.addons.calendar.models.calendar import calendar_id2real_id
+from odoo.addons.resource.models.resource import Intervals
 
 
 class Busy(Exception):
diff --git a/resource_booking/security/resource_booking_security.xml b/resource_booking/security/resource_booking_security.xml
index 1f3af9a0..ed8b20ff 100644
--- a/resource_booking/security/resource_booking_security.xml
+++ b/resource_booking/security/resource_booking_security.xml
@@ -1,49 +1,52 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <data>
-
     <record id="category_resource_booking" model="ir.module.category">
         <field name="name">Resource Booking</field>
     </record>
-
     <record id="group_user" model="res.groups">
         <field name="name">User</field>
         <field name="category_id" ref="category_resource_booking" />
         <field name="comment">Users allowed to book resources</field>
     </record>
-
     <record id="group_manager" model="res.groups">
         <field name="name">Manager</field>
         <field name="category_id" ref="category_resource_booking" />
         <field name="implied_ids" eval="[(4, ref('group_user'))]" />
-        <field name="comment">Users allowed to manage resource booking configurations.</field>
-        <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]" />
+        <field
+            name="comment"
+        >Users allowed to manage resource booking configurations.</field>
+        <field
+            name="users"
+            eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"
+        />
     </record>
-
     <data noupdate="1">
         <record id="rule_resource_booking_type_company" model="ir.rule">
             <field name="name">Resource booking type multi company rule</field>
             <field name="model_id" ref="model_resource_booking_type" />
             <field name="global" eval="True" />
-            <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', user.company_id.ids)]</field>
+            <field
+                name="domain_force"
+            >['|', ('company_id', '=', False), ('company_id', 'child_of', user.company_id.ids)]</field>
         </record>
-
         <record id="rule_resource_booking_portal" model="ir.rule">
             <field name="name">Resource booking portal rule</field>
             <field name="model_id" ref="model_resource_booking" />
             <field name="groups" eval="[(4, ref('base.group_portal'))]" />
-            <field name="domain_force">['|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids)]</field>
+            <field
+                name="domain_force"
+            >['|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids)]</field>
         </record>
-
         <record id="rule_resource_booking_user" model="ir.rule">
             <field name="name">Resource booking user rule</field>
             <field name="model_id" ref="model_resource_booking" />
             <field name="groups" eval="[(4, ref('group_user'))]" />
-            <field name="domain_force">['|', '|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids), ('combination_id.resource_ids.user_id', 'in', user.ids)]</field>
+            <field
+                name="domain_force"
+            >['|', '|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids), ('combination_id.resource_ids.user_id', 'in', user.ids)]</field>
         </record>
-
         <record id="rule_resource_booking_manager" model="ir.rule">
             <field name="name">Resource booking manager rule</field>
             <field name="model_id" ref="model_resource_booking" />
@@ -51,5 +54,4 @@
             <field name="domain_force">[(1, '=', 1)]</field>
         </record>
     </data>
-
 </data>
diff --git a/resource_booking/templates/assets.xml b/resource_booking/templates/assets.xml
index bf05e7bb..b640702b 100644
--- a/resource_booking/templates/assets.xml
+++ b/resource_booking/templates/assets.xml
@@ -1,12 +1,14 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <data>
-
     <template id="assets_frontend" inherit_id="web.assets_frontend">
         <xpath expr="//link[last()]" position="after">
-            <link rel="stylesheet" type="text/scss" href="/resource_booking/static/src/css/portal.scss"/>
+            <link
+                rel="stylesheet"
+                type="text/scss"
+                href="/resource_booking/static/src/css/portal.scss"
+            />
         </xpath>
     </template>
-
 </data>
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 0b182135..0da9f40b 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <data>
-
     <!--
     This template needs these context variables:
 
@@ -18,36 +16,53 @@
      -->
     <template id="scheduling_calendar" name="Resource Booking Calendar">
         <div class="o_booking_calendar">
-            <t t-set="confirm_url" t-value="booking.get_portal_url(suffix='/confirm')" />
-
+            <t
+                t-set="confirm_url"
+                t-value="booking.get_portal_url(suffix='/confirm')"
+            />
             <div class="alert alert-danger" t-if="not slots">
                 No free slots found this month.
-                <a t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))" class="alert-link">
+                <a
+                    t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))"
+                    class="alert-link"
+                >
                     Try next month
-                    <i class="fa fa-chevron-right"/>
+                    <i class="fa fa-chevron-right" />
                 </a>
             </div>
-
             <!-- Monthly calendar -->
             <table class="table table-responsive-md text-center">
                 <thead t-if="booking.requester_advice">
                     <tr>
                         <td colspan="7">
-                            <div t-field="booking.requester_advice"></div>
+                            <div t-field="booking.requester_advice" />
                         </td>
                     </tr>
                 </thead>
                 <thead class="thead-dark">
                     <tr>
                         <th class="text-left">
-                            <a t-if="start > now" t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month - 1))" class="btn btn-secondary" title="Previous month">
-                                <i class="fa fa-chevron-left"></i>
+                            <a
+                                t-if="start > now"
+                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month - 1))"
+                                class="btn btn-secondary"
+                                title="Previous month"
+                            >
+                                <i class="fa fa-chevron-left" />
                             </a>
                         </th>
-                        <th class="align-middle" colspan="5" t-esc="start.strftime('%B %Y')"></th>
+                        <th
+                            class="align-middle"
+                            colspan="5"
+                            t-esc="start.strftime('%B %Y')"
+                        />
                         <th class="text-right">
-                            <a t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))" class="btn btn-secondary" title="Next month">
-                                <i class="fa fa-chevron-right"></i>
+                            <a
+                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))"
+                                class="btn btn-secondary"
+                                title="Next month"
+                            >
+                                <i class="fa fa-chevron-right" />
                             </a>
                         </th>
                     </tr>
@@ -55,23 +70,50 @@
                 <thead>
                     <tr>
                         <t t-foreach="calendar.iterweekdays()" t-as="weekday">
-                            <th t-att-title="weekday_names[weekday + 1]" t-esc="weekday_names[weekday + 1][:3]" />
+                            <th
+                                t-att-title="weekday_names[weekday + 1]"
+                                t-esc="weekday_names[weekday + 1][:3]"
+                            />
                         </t>
                     </tr>
                 </thead>
                 <tbody>
-                    <t t-foreach="calendar.monthdatescalendar(start.year, start.month)" t-as="week">
+                    <t
+                        t-foreach="calendar.monthdatescalendar(start.year, start.month)"
+                        t-as="week"
+                    >
                         <tr>
                             <t t-foreach="week" t-as="day">
-                                <td t-att-class="day.month != start.month and 'text-muted'">
-                                    <t t-if="day.month == start.month and slots.get(day)">
+                                <td
+                                    t-att-class="day.month != start.month and 'text-muted'"
+                                >
+                                    <t
+                                        t-if="day.month == start.month and slots.get(day)"
+                                    >
                                         <!-- Day dropdown -->
                                         <div class="dropdown">
-                                            <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" t-esc="day.day" t-attf-id="dropdown-trigger-#{day.isoformat()}"></button>
-                                            <div class="dropdown-menu slots-dropdown" t-attf-aria-labelledby="dropdown-trigger-#{day.isoformat()}">
+                                            <button
+                                                class="btn btn-primary dropdown-toggle"
+                                                type="button"
+                                                data-toggle="dropdown"
+                                                aria-haspopup="true"
+                                                aria-expanded="false"
+                                                t-esc="day.day"
+                                                t-attf-id="dropdown-trigger-#{day.isoformat()}"
+                                            />
+                                            <div
+                                                class="dropdown-menu slots-dropdown"
+                                                t-attf-aria-labelledby="dropdown-trigger-#{day.isoformat()}"
+                                            >
                                                 <t t-foreach="slots[day]" t-as="slot">
                                                     <!-- Hour item to open confirmation -->
-                                                    <button class="dropdown-item" type="button" data-toggle="modal" t-attf-data-target="#modal-confirm-#{int(slot.timestamp())}" t-esc="slot.strftime(res_lang.time_format)" />
+                                                    <button
+                                                        class="dropdown-item"
+                                                        type="button"
+                                                        data-toggle="modal"
+                                                        t-attf-data-target="#modal-confirm-#{int(slot.timestamp())}"
+                                                        t-esc="slot.strftime(res_lang.time_format)"
+                                                    />
                                                 </t>
                                             </div>
                                         </div>
@@ -88,22 +130,47 @@
                     <tr>
                         <td colspan="7">
                             All times are displayed using this timezone:
-                            <strong t-field="booking.type_id.resource_calendar_id.tz"></strong>
+                            <strong t-field="booking.type_id.resource_calendar_id.tz" />
                         </td>
                     </tr>
                 </tfoot>
             </table>
-
             <!-- Hour confirmation modals -->
-            <t t-foreach="calendar.monthdatescalendar(start.year, start.month)" t-as="week">
+            <t
+                t-foreach="calendar.monthdatescalendar(start.year, start.month)"
+                t-as="week"
+            >
                 <t t-foreach="week" t-as="day">
-                    <form t-foreach="slots.get(day, [])" t-as="slot" method="post" t-att-action="confirm_url" t-attf-id="modal-confirm-#{int(slot.timestamp())}" t-attf-aria-labelledby="modal-title-#{int(slot.timestamp())}" class="modal fade">
-                        <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
-                        <input type="hidden" name="access_token" t-att-value="access_token" />
-                        <input type="hidden" name="when" t-att-value="slot.isoformat()" />
+                    <form
+                        t-foreach="slots.get(day, [])"
+                        t-as="slot"
+                        method="post"
+                        t-att-action="confirm_url"
+                        t-attf-id="modal-confirm-#{int(slot.timestamp())}"
+                        t-attf-aria-labelledby="modal-title-#{int(slot.timestamp())}"
+                        class="modal fade"
+                    >
+                        <input
+                            type="hidden"
+                            name="csrf_token"
+                            t-att-value="request.csrf_token()"
+                        />
+                        <input
+                            type="hidden"
+                            name="access_token"
+                            t-att-value="access_token"
+                        />
+                        <input
+                            type="hidden"
+                            name="when"
+                            t-att-value="slot.isoformat()"
+                        />
                         <div class="modal-dialog">
                             <div class="modal-content">
-                                <div t-attf-id="modal-title-#{int(slot.timestamp())}" class="modal-header">
+                                <div
+                                    t-attf-id="modal-title-#{int(slot.timestamp())}"
+                                    class="modal-header"
+                                >
                                     <h5>Confirm booking</h5>
                                 </div>
                                 <div class="modal-body">
@@ -111,50 +178,75 @@
                                     <ul>
                                         <li>
                                             Start:
-                                            <strong t-esc="slot.strftime(res_lang.date_format)"></strong>
-                                            <strong t-esc="slot.strftime(res_lang.time_format)"></strong>
+                                            <strong
+                                                t-esc="slot.strftime(res_lang.date_format)"
+                                            />
+                                            <strong
+                                                t-esc="slot.strftime(res_lang.time_format)"
+                                            />
                                         </li>
                                         <li>
                                             Duration:
-                                            <strong t-field="booking.type_id.duration" t-options='{"widget": "float_time"}'></strong>
+                                            <strong
+                                                t-field="booking.type_id.duration"
+                                                t-options='{"widget": "float_time"}'
+                                            />
                                         </li>
                                     </ul>
                                     <p>Are you sure?</p>
                                 </div>
                                 <div class="modal-footer">
-                                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
-                                    <button type="submit" class="btn btn-primary">Confirm booking</button>
+                                    <button
+                                        type="button"
+                                        class="btn btn-secondary"
+                                        data-dismiss="modal"
+                                    >Cancel</button>
+                                    <button
+                                        type="submit"
+                                        class="btn btn-primary"
+                                    >Confirm booking</button>
                                 </div>
                             </div>
                         </div>
                     </form>
                 </t>
             </t>
-
         </div>
     </template>
-
     <!-- Portal templates -->
     <template id="portal_breadcrumbs" inherit_id="portal.portal_breadcrumbs">
         <xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
-            <li t-if="page_name == 'booking' or booking_sudo" t-attf-class="breadcrumb-item #{'active ' if not booking_sudo else ''}">
-                <a t-if="booking_sudo" t-attf-href="/my/bookings?{{ keep_query() }}">Bookings</a>
+            <li
+                t-if="page_name == 'booking' or booking_sudo"
+                t-attf-class="breadcrumb-item #{'active ' if not booking_sudo else ''}"
+            >
+                <a
+                    t-if="booking_sudo"
+                    t-attf-href="/my/bookings?{{ keep_query() }}"
+                >Bookings</a>
                 <t t-else="">Bookings</t>
             </li>
             <t t-if="booking_sudo">
-                <li t-attf-class="breadcrumb-item #{'active ' if page_name == 'booking' else ''}">
+                <li
+                    t-attf-class="breadcrumb-item #{'active ' if page_name == 'booking' else ''}"
+                >
                     <t t-if="page_name == 'booking_schedule'">
-                        <a t-att-href="booking_sudo.get_portal_url()" t-esc="booking_sudo.display_name"></a>
+                        <a
+                            t-att-href="booking_sudo.get_portal_url()"
+                            t-esc="booking_sudo.display_name"
+                        />
                     </t>
                     <t t-else="">
                         <t t-esc="booking_sudo.name" />
                     </t>
                 </li>
-                <li class="breadcrumb-item active" t-if="page_name == 'booking_schedule'">Schedule</li>
+                <li
+                    class="breadcrumb-item active"
+                    t-if="page_name == 'booking_schedule'"
+                >Schedule</li>
             </t>
         </xpath>
     </template>
-
     <template id="portal_my_home" inherit_id="portal.portal_my_home">
         <xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
             <t t-if="booking_count" t-call="portal.portal_docs_entry">
@@ -164,11 +256,9 @@
             </t>
         </xpath>
     </template>
-
     <template id="portal_my_bookings" name="My Bookings">
         <t t-call="portal.portal_layout">
             <t t-set="breadcrumbs_searchbar" t-value="True" />
-
             <t t-call="portal.portal_searchbar">
                 <t t-set="title">Bookings</t>
             </t>
@@ -200,7 +290,10 @@
                             <span t-field="booking.combination_id" />
                         </td>
                         <td class="text-center">
-                            <span class="badge badge-pill badge-info" t-field="booking.state" />
+                            <span
+                                class="badge badge-pill badge-info"
+                                t-field="booking.state"
+                            />
                         </td>
                         <td class="text-right">
                             <span t-field="booking.start" />
@@ -210,7 +303,6 @@
             </t>
         </t>
     </template>
-
     <template id="resource_booking_portal_header" name="Resource Booking Header">
         <div class="row no-gutters">
             <div class="col-md">
@@ -221,19 +313,24 @@
             </div>
             <div class="col-md text-md-right">
                 <small class="text-right">State:</small>
-                <span t-field="booking_sudo.state" class="badge badge-pill badge-info" title="Current state of this booking" />
+                <span
+                    t-field="booking_sudo.state"
+                    class="badge badge-pill badge-info"
+                    title="Current state of this booking"
+                />
             </div>
         </div>
     </template>
-
     <template id="resource_booking_portal_form" name="Booking portal form">
         <t t-call="portal.portal_layout">
             <t t-set="o_portal_fullwidth_alert" groups="resource_booking.group_user">
                 <t t-call="portal.portal_back_in_edit_mode">
-                    <t t-set="backend_url" t-value="'/web#return_label=Website&amp;model=resource.booking&amp;id=%d&amp;view_type=form' % (booking_sudo.id)" />
+                    <t
+                        t-set="backend_url"
+                        t-value="'/web#return_label=Website&amp;model=resource.booking&amp;id=%d&amp;view_type=form' % (booking_sudo.id)"
+                    />
                 </t>
             </t>
-
             <!-- Form -->
             <t t-call="portal.portal_record_layout">
                 <t t-set="card_header">
@@ -253,9 +350,12 @@
                             <div class="mb-1">
                                 <strong>Booked resources:</strong>
                                 <ul>
-                                    <t t-foreach="booking_sudo.combination_id.resource_ids" t-as="resource">
+                                    <t
+                                        t-foreach="booking_sudo.combination_id.resource_ids"
+                                        t-as="resource"
+                                    >
                                         <li>
-                                            <span t-field="resource.name"></span>
+                                            <span t-field="resource.name" />
                                         </li>
                                     </t>
                                 </ul>
@@ -274,27 +374,40 @@
                                 <strong>Advice:</strong>
                                 <span t-field="booking_sudo.requester_advice" />
                             </div>
-                            <div t-if="booking_sudo.is_overdue" role="alert" class="mb-1 alert alert-warning">
+                            <div
+                                t-if="booking_sudo.is_overdue"
+                                role="alert"
+                                class="mb-1 alert alert-warning"
+                            >
                                 This booking exceeded its modifications deadline.
                             </div>
                         </div>
                     </div>
                 </t>
             </t>
-
             <!-- Actions -->
             <div class="row justify-content-center text-center d-print-none mt8">
                 <t t-if="booking_sudo.state == 'pending'">
                     <div class="col-sm-auto mt8">
-                        <a role="button" class="btn btn-primary" t-att-href="booking_sudo.get_portal_url(suffix='/schedule')">
+                        <a
+                            role="button"
+                            class="btn btn-primary"
+                            t-att-href="booking_sudo.get_portal_url(suffix='/schedule')"
+                        >
                             <i class="fa fa-calendar" />
                             Schedule
                         </a>
                     </div>
                 </t>
-                <t t-if="booking_sudo.is_modifiable and booking_sudo.state in {'scheduled', 'accepted'}">
+                <t
+                    t-if="booking_sudo.is_modifiable and booking_sudo.state in {'scheduled', 'accepted'}"
+                >
                     <div class="col-sm-auto mt8">
-                        <a role="button" class="btn btn-secondary" t-att-href="booking_sudo.get_portal_url(suffix='/schedule')">
+                        <a
+                            role="button"
+                            class="btn btn-secondary"
+                            t-att-href="booking_sudo.get_portal_url(suffix='/schedule')"
+                        >
                             <i class="fa fa-calendar" />
                             Reschedule
                         </a>
@@ -306,23 +419,39 @@
                         Feedback
                     </a>
                 </div>
-                <t t-if="booking_sudo.is_modifiable and booking_sudo.state != 'canceled'">
+                <t
+                    t-if="booking_sudo.is_modifiable and booking_sudo.state != 'canceled'"
+                >
                     <div class="col-sm-auto mt8">
-                        <a role="button" class="btn btn-danger" data-toggle="modal" data-target="#modal_cancel" href="#">
+                        <a
+                            role="button"
+                            class="btn btn-danger"
+                            data-toggle="modal"
+                            data-target="#modal_cancel"
+                            href="#"
+                        >
                             <i class="fa fa-times" />
                             Cancel
                         </a>
                     </div>
                 </t>
             </div>
-
             <div role="dialog" class="modal fade" id="modal_cancel">
                 <div class="modal-dialog">
                     <div class="modal-content">
-                        <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
+                        <input
+                            type="hidden"
+                            name="csrf_token"
+                            t-att-value="request.csrf_token()"
+                        />
                         <header class="modal-header">
                             <h4 class="modal-title">Confirm</h4>
-                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <button
+                                type="button"
+                                class="close"
+                                data-dismiss="modal"
+                                aria-label="Close"
+                            >
                                 <i class="fa fa-times" />
                             </button>
                         </header>
@@ -337,16 +466,22 @@
                             </p>
                         </main>
                         <footer class="modal-footer">
-                            <a t-att-href="booking_sudo.get_portal_url(suffix='/cancel')" class="btn btn-danger">
-                                <i class="fa fa-times"></i>
+                            <a
+                                t-att-href="booking_sudo.get_portal_url(suffix='/cancel')"
+                                class="btn btn-danger"
+                            >
+                                <i class="fa fa-times" />
                                 Cancel this booking
                             </a>
-                            <button type="button" class="btn btn-primary" data-dismiss="modal">Go back</button>
+                            <button
+                                type="button"
+                                class="btn btn-primary"
+                                data-dismiss="modal"
+                            >Go back</button>
                         </footer>
                     </div>
                 </div>
             </div>
-
             <!-- Discuss -->
             <div class="mt32">
                 <h4>Message and communication history</h4>
@@ -357,12 +492,15 @@
                     <t t-set="hash" t-value="hash" />
                 </t>
             </div>
-
         </t>
     </template>
-
-    <template id="alert_availability_lost" name="Alert Resource Booking Availability was Lost">
-        <div class="alert alert-danger alert-dismissible rounded-0 fade show d-print-none css_editable_mode_hidden">
+    <template
+        id="alert_availability_lost"
+        name="Alert Resource Booking Availability was Lost"
+    >
+        <div
+            class="alert alert-danger alert-dismissible rounded-0 fade show d-print-none css_editable_mode_hidden"
+        >
             <div class="container">
                 <div t-ignore="true" class="text-center">
                     <strong>The chosen schedule is no longer available.</strong>
@@ -373,23 +511,28 @@
                     </t>
                 </div>
             </div>
-            <button type="button" class="close" data-dismiss="alert" aria-label="Close"> &#215;</button>
+            <button
+                type="button"
+                class="close"
+                data-dismiss="alert"
+                aria-label="Close"
+            > &#215;</button>
         </div>
     </template>
-
     <template id="resource_booking_portal_schedule" name="Resource Booking Scheduling">
         <t t-call="portal.portal_layout">
             <t t-set="o_portal_fullwidth_alert" groups="project.group_project_user">
                 <t t-call="portal.portal_back_in_edit_mode">
-                    <t t-set="backend_url" t-value="'/web#return_label=Website&amp;model=resource.booking&amp;id=%d&amp;view_type=form' % (booking_sudo.id)" />
+                    <t
+                        t-set="backend_url"
+                        t-value="'/web#return_label=Website&amp;model=resource.booking&amp;id=%d&amp;view_type=form' % (booking_sudo.id)"
+                    />
                 </t>
             </t>
-
             <!-- Error alert -->
             <t t-if="error">
-                <t t-call="resource_booking.alert_availability_lost"/>
+                <t t-call="resource_booking.alert_availability_lost" />
             </t>
-
             <!-- Scheduling form -->
             <t t-call="portal.portal_record_layout">
                 <t t-set="card_header">
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
index 943d95df..b69bf538 100644
--- a/resource_booking/tests/common.py
+++ b/resource_booking/tests/common.py
@@ -34,16 +34,8 @@ def create_test_data(obj):
     obj.r_calendars = obj.env["resource.calendar"].create(
         [
             {"name": "Mon", "attendance_ids": attendances[:1], "tz": "UTC"},
-            {
-                "name": "Tue",
-                "attendance_ids": attendances[1:],
-                "tz": "UTC",
-            },
-            {
-                "name": "MonTue",
-                "attendance_ids": attendances,
-                "tz": "UTC",
-            },
+            {"name": "Tue", "attendance_ids": attendances[1:], "tz": "UTC",},
+            {"name": "MonTue", "attendance_ids": attendances, "tz": "UTC",},
         ]
     )
     # Create one material resource for each of those calendars; same order
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 6576886b..19762e54 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -1,10 +1,13 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from datetime import datetime
+
 from freezegun import freeze_time
-from odoo.tests.common import SavepointCase, Form
-from odoo.exceptions import ValidationError
+
 from odoo import fields
-from datetime import datetime
+from odoo.exceptions import ValidationError
+from odoo.tests.common import Form, SavepointCase
+
 from .common import create_test_data
 
 _2dt = fields.Datetime.to_datetime
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index f535f8c9..924398e7 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -1,12 +1,14 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
-from odoo.tests.common import HttpCase
-from .common import create_test_data
-from lxml.html import fromstring
 from datetime import datetime
 
 from freezegun import freeze_time
+from lxml.html import fromstring
+
+from odoo.tests.common import HttpCase
+
+from .common import create_test_data
 
 
 @freeze_time("2021-02-26 09:00:00", tick=True)
@@ -178,8 +180,7 @@ def test_portal_scheduling_conflict(self):
         for attendee in booking_public.meeting_id.attendee_ids:
             self.assertTrue(attendee.partner_id)
             self.assertIn(
-                attendee.partner_id,
-                self.partner | self.users[0].partner_id,
+                attendee.partner_id, self.partner | self.users[0].partner_id,
             )
             self.assertEqual(
                 attendee.state,
diff --git a/resource_booking/views/calendar_event_views.xml b/resource_booking/views/calendar_event_views.xml
index 908ebff6..d3a9021a 100644
--- a/resource_booking/views/calendar_event_views.xml
+++ b/resource_booking/views/calendar_event_views.xml
@@ -1,9 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <data>
-
     <record id="view_calendar_event_form" model="ir.ui.view">
         <field name="name">calendar.event.view.form.inherit</field>
         <field name="model">calendar.event</field>
@@ -14,5 +12,4 @@
             </form>
         </field>
     </record>
-
 </data>
diff --git a/resource_booking/views/menus.xml b/resource_booking/views/menus.xml
index 9dcb549e..78ed311f 100644
--- a/resource_booking/views/menus.xml
+++ b/resource_booking/views/menus.xml
@@ -1,30 +1,59 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <data>
-
     <!-- User menus -->
-    <menuitem id="resource_booking_main_menu" name="Resource Bookings" groups="group_user" web_icon="resource_booking,static/description/icon.png" />
-
-    <menuitem id="resource_booking_menu" name="Bookings" action="resource_booking_action" parent="resource_booking_main_menu" sequence="10" />
-    <menuitem id="resource_booking_type_menu" name="Types" action="resource_booking_type_action" parent="resource_booking_main_menu" sequence="20" />
-    <menuitem id="resource_booking_combination_menu" name="Combinations" action="resource_booking_combination_action" parent="resource_booking_main_menu" sequence="30" />
-
+    <menuitem
+        id="resource_booking_main_menu"
+        name="Resource Bookings"
+        groups="group_user"
+        web_icon="resource_booking,static/description/icon.png"
+    />
+    <menuitem
+        id="resource_booking_menu"
+        name="Bookings"
+        action="resource_booking_action"
+        parent="resource_booking_main_menu"
+        sequence="10"
+    />
+    <menuitem
+        id="resource_booking_type_menu"
+        name="Types"
+        action="resource_booking_type_action"
+        parent="resource_booking_main_menu"
+        sequence="20"
+    />
+    <menuitem
+        id="resource_booking_combination_menu"
+        name="Combinations"
+        action="resource_booking_combination_action"
+        parent="resource_booking_main_menu"
+        sequence="30"
+    />
     <!-- Manager menus -->
-    <menuitem id="resource_booking_type_configuration_menu" name="Configuration" parent="resource_booking_main_menu" sequence="100" groups="group_manager" />
-
-    <menuitem id="menu_resource_resource"
+    <menuitem
+        id="resource_booking_type_configuration_menu"
+        name="Configuration"
+        parent="resource_booking_main_menu"
+        sequence="100"
+        groups="group_manager"
+    />
+    <menuitem
+        id="menu_resource_resource"
         parent="resource_booking_type_configuration_menu"
         action="resource.action_resource_resource_tree"
-        sequence="100"/>
-    <menuitem id="menu_resource_calendar"
+        sequence="100"
+    />
+    <menuitem
+        id="menu_resource_calendar"
         parent="resource_booking_type_configuration_menu"
         action="resource.action_resource_calendar_form"
-        sequence="200"/>
-    <menuitem id="menu_view_resource_calendar_leaves_search"
+        sequence="200"
+    />
+    <menuitem
+        id="menu_view_resource_calendar_leaves_search"
         parent="resource_booking_type_configuration_menu"
         action="resource.action_resource_calendar_leave_tree"
-        sequence="300"/>
-
+        sequence="300"
+    />
 </data>
diff --git a/resource_booking/views/resource_booking_combination_views.xml b/resource_booking/views/resource_booking_combination_views.xml
index a4ddf705..4443593a 100644
--- a/resource_booking/views/resource_booking_combination_views.xml
+++ b/resource_booking/views/resource_booking_combination_views.xml
@@ -1,25 +1,42 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <odoo>
-
     <!-- Views -->
     <record id="resource_booking_combination_form" model="ir.ui.view">
         <field name="name">Resource booking combination form</field>
         <field name="model">resource.booking.combination</field>
         <field name="arch" type="xml">
             <form>
-                <header></header>
+                <header />
                 <sheet>
                     <div class="oe_button_box" name="button_box">
-                        <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
-                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        <button
+                            name="toggle_active"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-archive"
+                        >
+                            <field
+                                name="active"
+                                widget="boolean_button"
+                                options='{"terminology": "archive"}'
+                            />
                         </button>
-                        <button name="action_open_bookings" type="object" class="oe_stat_button" icon="fa-calendar">
+                        <button
+                            name="action_open_bookings"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-calendar"
+                        >
                             <field name="booking_count" widget="statinfo" />
                         </button>
-                        <button name="action_open_resource_booking_types" type="object" class="oe_stat_button" icon="fa-calendar">
+                        <button
+                            name="action_open_resource_booking_types"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-calendar"
+                        >
                             <field name="type_count" widget="statinfo" />
                         </button>
                     </div>
@@ -36,7 +53,6 @@
             </form>
         </field>
     </record>
-
     <record id="resource_booking_combination_view_tree" model="ir.ui.view">
         <field name="name">Resource booking combination tree</field>
         <field name="model">resource.booking.combination</field>
@@ -48,7 +64,6 @@
             </tree>
         </field>
     </record>
-
     <record id="resource_booking_combination_view_search" model="ir.ui.view">
         <field name="name">resource.booking.combination.view.search</field>
         <field name="model">resource.booking.combination</field>
@@ -58,7 +73,6 @@
             </search>
         </field>
     </record>
-
     <!-- Actions -->
     <record id="resource_booking_combination_action" model="ir.actions.act_window">
         <field name="name">Resource combinations</field>
@@ -67,9 +81,11 @@
         <field name="domain">[]</field>
         <field name="context">{}</field>
         <field name="help" type="html">
-            <p class="o_view_nocontent_smiling_face">Define bookable resource combinations.</p>
-            <p>These records define resource combinations that can be booked together in specified schedules and intervals.</p>
+            <p
+                class="o_view_nocontent_smiling_face"
+            >Define bookable resource combinations.</p>
+            <p
+            >These records define resource combinations that can be booked together in specified schedules and intervals.</p>
         </field>
     </record>
-
 </odoo>
diff --git a/resource_booking/views/resource_booking_type_views.xml b/resource_booking/views/resource_booking_type_views.xml
index e5c290f7..025c6bbf 100644
--- a/resource_booking/views/resource_booking_type_views.xml
+++ b/resource_booking/views/resource_booking_type_views.xml
@@ -1,22 +1,34 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <odoo>
-
     <!-- Views -->
     <record id="resource_booking_type_form" model="ir.ui.view">
         <field name="name">Resource booking type form</field>
         <field name="model">resource.booking.type</field>
         <field name="arch" type="xml">
             <form>
-                <header></header>
+                <header />
                 <sheet>
                     <div class="oe_button_box" name="button_box">
-                        <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
-                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        <button
+                            name="toggle_active"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-archive"
+                        >
+                            <field
+                                name="active"
+                                widget="boolean_button"
+                                options='{"terminology": "archive"}'
+                            />
                         </button>
-                        <button name="action_open_bookings" type="object" class="oe_stat_button" icon="fa-calendar">
+                        <button
+                            name="action_open_bookings"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-calendar"
+                        >
                             <field name="booking_count" widget="statinfo" />
                         </button>
                     </div>
@@ -27,7 +39,11 @@
                     </div>
                     <group name="main">
                         <group name="settings" string="Settings">
-                            <field name="company_id" options="{'no_create': True}" groups="base.group_multi_company" />
+                            <field
+                                name="company_id"
+                                options="{'no_create': True}"
+                                groups="base.group_multi_company"
+                            />
                             <field name="duration" widget="float_time" />
                             <field name="modifications_deadline" widget="float_time" />
                             <field name="resource_calendar_id" />
@@ -35,14 +51,22 @@
                         <group name="event_defaults" string="Meeting defaults">
                             <field name="location" />
                             <field name="alarm_ids" widget="many2many_tags" />
-                            <field name="categ_ids" widget="many2many_tags" options="{'no_create_edit': True}" />
+                            <field
+                                name="categ_ids"
+                                widget="many2many_tags"
+                                options="{'no_create_edit': True}"
+                            />
                             <field name="requester_advice" />
                         </group>
-                        <group string="Resource combinations" name="combinations" colspan="2">
+                        <group
+                            string="Resource combinations"
+                            name="combinations"
+                            colspan="2"
+                        >
                             <field name="combination_assignment" />
                             <field name="combination_rel_ids">
                                 <tree editable="bottom">
-                                    <field name="sequence" widget="handle"/>
+                                    <field name="sequence" widget="handle" />
                                     <field name="combination_id" />
                                 </tree>
                             </field>
@@ -50,14 +74,17 @@
                     </group>
                 </sheet>
                 <div class="oe_chatter">
-                    <field name="message_follower_ids" widget="mail_followers" groups="base.group_user" />
+                    <field
+                        name="message_follower_ids"
+                        widget="mail_followers"
+                        groups="base.group_user"
+                    />
                     <field name="activity_ids" widget="mail_activity" />
                     <field name="message_ids" widget="mail_thread" />
                 </div>
             </form>
         </field>
     </record>
-
     <record id="resource_booking_type_view_tree" model="ir.ui.view">
         <field name="name">Resource booking type tree</field>
         <field name="model">resource.booking.type</field>
@@ -65,11 +92,10 @@
             <tree>
                 <field name="name" />
                 <field name="resource_calendar_id" />
-                <field name="duration" widget="float_time"/>
+                <field name="duration" widget="float_time" />
             </tree>
         </field>
     </record>
-
     <record id="resource_booking_type_view_search" model="ir.ui.view">
         <field name="name">resource.booking.type.view.search</field>
         <field name="model">resource.booking.type</field>
@@ -78,12 +104,16 @@
                 <field name="name" />
                 <field name="company_id" groups="base.group_multi_company" />
                 <group expand="0" name="groupby" string="Group By">
-                    <filter string="Company" name="groupby_company_id" context="{'group_by':'company_id'}" groups="base.group_multi_company" />
+                    <filter
+                        string="Company"
+                        name="groupby_company_id"
+                        context="{'group_by':'company_id'}"
+                        groups="base.group_multi_company"
+                    />
                 </group>
             </search>
         </field>
     </record>
-
     <!-- Actions -->
     <record id="resource_booking_type_action" model="ir.actions.act_window">
         <field name="name">Types</field>
@@ -93,8 +123,8 @@
         <field name="context">{}</field>
         <field name="help" type="html">
             <p class="o_view_nocontent_smiling_face">Define resource booking types.</p>
-            <p>These records categorize resource bookings and apply restrictions to them, such as available resource combinations, availability schedules and interval duration.</p>
+            <p
+            >These records categorize resource bookings and apply restrictions to them, such as available resource combinations, availability schedules and interval duration.</p>
         </field>
     </record>
-
 </odoo>
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index abf2ed09..18b834c6 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -1,22 +1,25 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-
 <data>
-
     <!-- Views -->
     <record id="resource_booking_view_calendar" model="ir.ui.view">
         <field name="name">Resource booking calendar</field>
         <field name="model">resource.booking</field>
         <field name="arch" type="xml">
-            <calendar string="Bookings" date_start="start" date_stop="stop" quick_add="false" color="combination_id">
+            <calendar
+                string="Bookings"
+                date_start="start"
+                date_stop="stop"
+                quick_add="false"
+                color="combination_id"
+            >
                 <field name="name" />
                 <field name="partner_id" avatar_field="image_small" />
                 <field name="combination_id" />
             </calendar>
         </field>
     </record>
-
     <record id="resource_booking_view_tree" model="ir.ui.view">
         <field name="name">Resource booking tree</field>
         <field name="model">resource.booking</field>
@@ -31,7 +34,6 @@
             </tree>
         </field>
     </record>
-
     <record id="resource_booking_form" model="ir.ui.view">
         <field name="name">Resource booking form</field>
         <field name="model">resource.booking</field>
@@ -39,57 +41,155 @@
             <form>
                 <header>
                     <field name="requester_advice" invisible="1" />
-                    <button name="%(portal.portal_share_action)d" class="oe_highlight" string="Share" type="action" context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}" help="Invite requesting partner to portal." states="pending" />
-                    <button name="%(portal.portal_share_action)d" string="Share" type="action" context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}" help="Invite requesting partner to portal." states="scheduled,confirmed" />
-                    <button name="action_schedule" class="oe_highlight" string="Schedule" type="object" help="Open a calendar to schedule a meeting for this booking request." attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'pending')]}" />
-                    <button name="action_confirm" string="Confirm" type="object" help="Confirm that the requesting partner and yourself will attend the scheduled meeting." attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'scheduled')]}" context="{'confirm_own_attendance': True}" />
-                    <button name="action_unschedule" string="Unschedule" type="object" help="Unschedule this booking." confirm="This will remove the associated meeting to unschedule the booking. Are you sure?" attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('meeting_id', '=', False)]}" />
-                    <button name="action_cancel" string="Cancel" type="object" help="Unschedule this booking and archive it." attrs="{'invisible': ['|', '|', ('is_modifiable', '=', False), ('state', '=', 'canceled'), ('meeting_id', '!=', False)]}" />
-                    <button name="action_cancel" string="Cancel" type="object" help="Unschedule this booking and archive it." confirm="This will remove the associated meeting to unschedule the booking. Are you sure?" attrs="{'invisible': ['|', '|', ('is_modifiable', '=', False), ('state', '=', 'canceled'), ('meeting_id', '=', False)]}" />
-                    <button name="toggle_active" string="Set pending" type="object" help="Set to pending" attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'canceled')]}" />
+                    <button
+                        name="%(portal.portal_share_action)d"
+                        class="oe_highlight"
+                        string="Share"
+                        type="action"
+                        context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}"
+                        help="Invite requesting partner to portal."
+                        states="pending"
+                    />
+                    <button
+                        name="%(portal.portal_share_action)d"
+                        string="Share"
+                        type="action"
+                        context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}"
+                        help="Invite requesting partner to portal."
+                        states="scheduled,confirmed"
+                    />
+                    <button
+                        name="action_schedule"
+                        class="oe_highlight"
+                        string="Schedule"
+                        type="object"
+                        help="Open a calendar to schedule a meeting for this booking request."
+                        attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'pending')]}"
+                    />
+                    <button
+                        name="action_confirm"
+                        string="Confirm"
+                        type="object"
+                        help="Confirm that the requesting partner and yourself will attend the scheduled meeting."
+                        attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'scheduled')]}"
+                        context="{'confirm_own_attendance': True}"
+                    />
+                    <button
+                        name="action_unschedule"
+                        string="Unschedule"
+                        type="object"
+                        help="Unschedule this booking."
+                        confirm="This will remove the associated meeting to unschedule the booking. Are you sure?"
+                        attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('meeting_id', '=', False)]}"
+                    />
+                    <button
+                        name="action_cancel"
+                        string="Cancel"
+                        type="object"
+                        help="Unschedule this booking and archive it."
+                        attrs="{'invisible': ['|', '|', ('is_modifiable', '=', False), ('state', '=', 'canceled'), ('meeting_id', '!=', False)]}"
+                    />
+                    <button
+                        name="action_cancel"
+                        string="Cancel"
+                        type="object"
+                        help="Unschedule this booking and archive it."
+                        confirm="This will remove the associated meeting to unschedule the booking. Are you sure?"
+                        attrs="{'invisible': ['|', '|', ('is_modifiable', '=', False), ('state', '=', 'canceled'), ('meeting_id', '=', False)]}"
+                    />
+                    <button
+                        name="toggle_active"
+                        string="Set pending"
+                        type="object"
+                        help="Set to pending"
+                        attrs="{'invisible': ['|', ('is_modifiable', '=', False), ('state', '!=', 'canceled')]}"
+                    />
                     <field name="state" widget="statusbar" />
                 </header>
                 <sheet>
                     <div class="oe_button_box" name="button_box">
-                        <button name="action_open_portal" type="object" class="oe_stat_button" icon="fa-globe">
+                        <button
+                            name="action_open_portal"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-globe"
+                        >
                             <span>Preview</span>
                         </button>
                         <!-- Using attrs=invisible trick to make archive=cancel -->
-                        <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive" attrs="{'invisible': [('active', '=', True), ('meeting_id', '!=', False)]}">
-                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        <button
+                            name="toggle_active"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-archive"
+                            attrs="{'invisible': [('active', '=', True), ('meeting_id', '!=', False)]}"
+                        >
+                            <field
+                                name="active"
+                                widget="boolean_button"
+                                options='{"terminology": "archive"}'
+                            />
                         </button>
-                        <button name="action_cancel" type="object" class="oe_stat_button" icon="fa-archive" attrs="{'invisible': ['!', '&amp;', ('active', '=', True), ('meeting_id', '!=', False)]}" confirm="This will remove the associated meeting to unschedule the booking. Are you sure?">
-                            <field name="active" widget="boolean_button" options='{"terminology": "archive"}' />
+                        <button
+                            name="action_cancel"
+                            type="object"
+                            class="oe_stat_button"
+                            icon="fa-archive"
+                            attrs="{'invisible': ['!', '&amp;', ('active', '=', True), ('meeting_id', '!=', False)]}"
+                            confirm="This will remove the associated meeting to unschedule the booking. Are you sure?"
+                        >
+                            <field
+                                name="active"
+                                widget="boolean_button"
+                                options='{"terminology": "archive"}'
+                            />
                         </button>
                     </div>
                     <group name="main">
                         <group name="booking">
                             <field name="partner_id" />
                             <field name="type_id" />
-                            <field name="combination_id" attrs="{'required': [('start', '!=', False)]}"/>
-                            <field name="categ_ids" widget="many2many_tags"/>
+                            <field
+                                name="combination_id"
+                                attrs="{'required': [('start', '!=', False)]}"
+                            />
+                            <field name="categ_ids" widget="many2many_tags" />
                         </group>
                         <group name="meeting" string="Meeting">
                             <field name="meeting_id" groups="base.group_no_one" />
                             <field name="is_overdue" invisible="1" />
                             <field name="is_modifiable" invisible="1" />
-                            <div colspan="2" role="alert" class="alert alert-warning" attrs="{'invisible': [('is_overdue', '=', False)]}">
+                            <div
+                                colspan="2"
+                                role="alert"
+                                class="alert alert-warning"
+                                attrs="{'invisible': [('is_overdue', '=', False)]}"
+                            >
                                 This booking exceeded its modifications deadline.
                             </div>
-                            <field name="start" attrs="{'required': [('stop', '!=', False)]}" />
-                            <field name="stop" attrs="{'required': [('start', '!=', False)]}" />
+                            <field
+                                name="start"
+                                attrs="{'required': [('stop', '!=', False)]}"
+                            />
+                            <field
+                                name="stop"
+                                attrs="{'required': [('start', '!=', False)]}"
+                            />
                         </group>
                     </group>
                 </sheet>
                 <div class="oe_chatter">
-                    <field name="message_follower_ids" widget="mail_followers" groups="base.group_user" />
+                    <field
+                        name="message_follower_ids"
+                        widget="mail_followers"
+                        groups="base.group_user"
+                    />
                     <field name="activity_ids" widget="mail_activity" />
                     <field name="message_ids" widget="mail_thread" />
                 </div>
             </form>
         </field>
     </record>
-
     <record id="resource_booking_view_search" model="ir.ui.view">
         <field name="name">resource.booking.view.search</field>
         <field name="model">resource.booking</field>
@@ -97,20 +197,47 @@
             <search>
                 <field name="partner_id" />
                 <field name="type_id" />
-                <filter name="is_mine" string="Involving me" domain="[('involves_me', '=', True)]"/>
-                <filter name="is_pending" string="Pending" domain="[('state', '=', 'pending')]"></filter>
-                <filter name="is_scheduled" string="Scheduled or confirmed" domain="[('state', 'in', ['scheduled', 'confirmed'])]"></filter>
-                <filter name="filter_date" string="Start date" date="start"/>
+                <filter
+                    name="is_mine"
+                    string="Involving me"
+                    domain="[('involves_me', '=', True)]"
+                />
+                <filter
+                    name="is_pending"
+                    string="Pending"
+                    domain="[('state', '=', 'pending')]"
+                />
+                <filter
+                    name="is_scheduled"
+                    string="Scheduled or confirmed"
+                    domain="[('state', 'in', ['scheduled', 'confirmed'])]"
+                />
+                <filter name="filter_date" string="Start date" date="start" />
                 <group expand="0" name="groupby" string="Group By">
-                    <filter string="State" name="groupby_state" context="{'group_by': 'state'}" />
-                    <filter string="Type" name="groupby_type_id" context="{'group_by': 'type_id'}" />
-                    <filter string="Combination" name="groupby_combination_id" context="{'group_by': 'combination_id'}" />
-                    <filter string="Start" name="groupby_start" context="{'group_by': 'start'}" />
+                    <filter
+                        string="State"
+                        name="groupby_state"
+                        context="{'group_by': 'state'}"
+                    />
+                    <filter
+                        string="Type"
+                        name="groupby_type_id"
+                        context="{'group_by': 'type_id'}"
+                    />
+                    <filter
+                        string="Combination"
+                        name="groupby_combination_id"
+                        context="{'group_by': 'combination_id'}"
+                    />
+                    <filter
+                        string="Start"
+                        name="groupby_start"
+                        context="{'group_by': 'start'}"
+                    />
                 </group>
             </search>
         </field>
     </record>
-
     <!-- Actions -->
     <record id="resource_booking_action" model="ir.actions.act_window">
         <field name="name">Bookings</field>
@@ -127,5 +254,4 @@
             </p>
         </field>
     </record>
-
 </data>

From 936ace69098f551e64da83ec11660f10c3d7635d Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Mon, 19 Jul 2021 08:14:51 +0100
Subject: [PATCH 08/64] [IMP] resource_booking: simplified time format

It's very unlikely that you need to book resources in a seconds-based precision.

This simplifies portal UI. Still, declared as a variable in case you need some customizations downstream.

@Tecnativa TT31063
---
 resource_booking/templates/portal.xml | 13 ++++++-------
 resource_booking/tests/test_portal.py |  4 ++--
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 0da9f40b..7864bce0 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -15,11 +15,10 @@
     - weekday_names: dict of mappings between weekday numbers and names, where MON=1
      -->
     <template id="scheduling_calendar" name="Resource Booking Calendar">
+        <t t-set="confirm_url" t-value="booking.get_portal_url(suffix='/confirm')" />
+        <t t-set="date_format" t-value="res_lang.date_format" />
+        <t t-set="time_format" t-value="res_lang.time_format.replace(':%S', '')" />
         <div class="o_booking_calendar">
-            <t
-                t-set="confirm_url"
-                t-value="booking.get_portal_url(suffix='/confirm')"
-            />
             <div class="alert alert-danger" t-if="not slots">
                 No free slots found this month.
                 <a
@@ -112,7 +111,7 @@
                                                         type="button"
                                                         data-toggle="modal"
                                                         t-attf-data-target="#modal-confirm-#{int(slot.timestamp())}"
-                                                        t-esc="slot.strftime(res_lang.time_format)"
+                                                        t-esc="slot.strftime(time_format)"
                                                     />
                                                 </t>
                                             </div>
@@ -179,10 +178,10 @@
                                         <li>
                                             Start:
                                             <strong
-                                                t-esc="slot.strftime(res_lang.date_format)"
+                                                t-esc="slot.strftime(date_format)"
                                             />
                                             <strong
-                                                t-esc="slot.strftime(res_lang.time_format)"
+                                                t-esc="slot.strftime(time_format)"
                                             />
                                         </li>
                                         <li>
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 924398e7..3e9dc6ba 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -140,11 +140,11 @@ def test_portal_scheduling_conflict(self):
         slot = datetime(2021, 3, 1, 10).timestamp()
         selector_10am = (
             "#dropdown-trigger-2021-03-01 "
-            "+ .slots-dropdown .dropdown-item:contains('10:00:00')"
+            "+ .slots-dropdown .dropdown-item:contains('10:00')"
         )
         selector_1030am = (
             "#dropdown-trigger-2021-03-01 "
-            "+ .slots-dropdown .dropdown-item:contains('10:30:00')"
+            "+ .slots-dropdown .dropdown-item:contains('10:30')"
         )
         self.assertTrue(public_page.cssselect(selector_10am))
         self.assertTrue(public_page.cssselect(selector_1030am))

From 42c9d3a5b39679ab439476fbf6e83a5f40d21bd3 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Wed, 14 Jul 2021 11:38:52 +0100
Subject: [PATCH 09/64] [MIG] resource_booking: migrate to v13

- Standard v13 changes.
- Some onchanges removed in favor of computes.

@Tecnativa TT30987
---
 resource_booking/README.rst                   |  13 +--
 resource_booking/__manifest__.py              |   4 +-
 .../13.0.1.0.0/noupdate_changes.xml           |  11 ++
 .../migrations/13.0.1.0.0/post-migrate.py     |  11 ++
 resource_booking/models/resource_booking.py   | 101 ++++++++++--------
 .../models/resource_booking_combination.py    |   2 +-
 .../models/resource_booking_type.py           |   2 +-
 resource_booking/models/resource_calendar.py  |  32 ++++--
 resource_booking/readme/INSTALL.rst           |   2 +-
 resource_booking/readme/ROADMAP.rst           |   1 +
 .../security/resource_booking_security.xml    |   2 +-
 .../static/description/index.html             |   9 +-
 resource_booking/templates/portal.xml         |   4 +-
 resource_booking/tests/common.py              |   4 +-
 resource_booking/tests/test_backend.py        |   1 +
 resource_booking/tests/test_portal.py         |   2 +-
 .../resource_booking_combination_views.xml    |  19 ++--
 .../views/resource_booking_type_views.xml     |  19 ++--
 .../views/resource_booking_views.xml          |  40 ++-----
 19 files changed, 149 insertions(+), 130 deletions(-)
 create mode 100644 resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
 create mode 100644 resource_booking/migrations/13.0.1.0.0/post-migrate.py

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 3b4cb174..f2363266 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -14,13 +14,13 @@ Resource booking
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github
-    :target: https://github.com/OCA/calendar/tree/12.0/resource_booking
+    :target: https://github.com/OCA/calendar/tree/13.0/resource_booking
     :alt: OCA/calendar
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/calendar-12-0/calendar-12-0-resource_booking
+    :target: https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/279/12.0
+    :target: https://runbot.odoo-community.org/runbot/279/13.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -63,7 +63,7 @@ To install this module, you need to install these dependencies:
 
 When someone is a manager, he will have access to *Resource Bookings >
 Configuration*, where he will be able to configure resources, leaves and
-schedules. This menu is just provided as a commodity. However, if you want to
+schedules. This menu is just provided as a shortcut. However, if you want to
 manage that stuff more comfortably:
 
 * To manage human resources, install `hr <https://apps.odoo.com/app/employees>`__.
@@ -154,6 +154,7 @@ Known issues / Roadmap
 * Allow customer to choose combination.
 * Some error messages would be a bit more helpful if they specify the schedule
   impossibility reason, but that should be done without affecting performance.
+* Optimize ``_calendar_event_busy_intervals()`` to make it work in batch.
 
 Bug Tracker
 ===========
@@ -161,7 +162,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -199,6 +200,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-Yajo| 
 
-This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/12.0/resource_booking>`_ project on GitHub.
+This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/13.0/resource_booking>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index b2c54620..f82f84af 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "12.0.1.1.3",
+    "version": "13.0.1.0.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
@@ -39,5 +39,5 @@
         "views/resource_booking_views.xml",
         "views/menus.xml",
     ],
-    "demo": ["demo/res_users_demo.xml",],
+    "demo": ["demo/res_users_demo.xml"],
 }
diff --git a/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml b/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
new file mode 100644
index 00000000..6444f670
--- /dev/null
+++ b/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<data>
+    <!-- Updated security rules -->
+    <record id="rule_resource_booking_type_company" model="ir.rule">
+        <field
+            name="domain_force"
+        >['|', ('company_id','=',False), ('company_id','in',company_ids)]</field>
+    </record>
+</data>
diff --git a/resource_booking/migrations/13.0.1.0.0/post-migrate.py b/resource_booking/migrations/13.0.1.0.0/post-migrate.py
new file mode 100644
index 00000000..16b091ae
--- /dev/null
+++ b/resource_booking/migrations/13.0.1.0.0/post-migrate.py
@@ -0,0 +1,11 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    openupgrade.load_data(
+        env.cr, "resource_booking", "migrations/13.0.1.0.0/noupdate_changes.xml"
+    )
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 9ea7bad7..75b55903 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -40,7 +40,7 @@ class ResourceBooking(models.Model):
         ),
     ]
 
-    active = fields.Boolean(index=True, default=True)
+    active = fields.Boolean(default=True)
     meeting_id = fields.Many2one(
         comodel_name="calendar.event",
         string="Meeting",
@@ -51,15 +51,24 @@ class ResourceBooking(models.Model):
         ondelete="set null",
         help="Meeting confirmed for this booking.",
     )
-    categ_ids = fields.Many2many(string="Tags", comodel_name="calendar.event.type",)
+    categ_ids = fields.Many2many(
+        string="Tags",
+        comodel_name="calendar.event.type",
+        compute="_compute_categ_ids",
+        store=True,
+        readonly=False,
+    )
     combination_id = fields.Many2one(
         comodel_name="resource.booking.combination",
         string="Resources combination",
+        compute="_compute_combination_id",
         copy=False,
         domain="[('type_rel_ids.type_id', 'in', [type_id])]",
         index=True,
+        readonly=False,
         states={"scheduled": [("required", True)], "confirmed": [("required", True)]},
-        track_visibility="onchange",
+        store=True,
+        tracking=True,
     )
     name = fields.Char(compute="_compute_name")
     partner_id = fields.Many2one(
@@ -68,15 +77,15 @@ class ResourceBooking(models.Model):
         index=True,
         ondelete="cascade",
         required=True,
-        track_visibility="onchange",
+        tracking=True,
         help="Who requested this booking?",
     )
     requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
     involves_me = fields.Boolean(
         compute="_compute_involves_me", search="_search_involves_me"
     )
-    is_modifiable = fields.Boolean(compute="_compute_overdue")
-    is_overdue = fields.Boolean(compute="_compute_overdue")
+    is_modifiable = fields.Boolean(compute="_compute_is_modifiable")
+    is_overdue = fields.Boolean(compute="_compute_is_overdue")
     state = fields.Selection(
         [
             ("pending", "Pending"),
@@ -88,7 +97,7 @@ class ResourceBooking(models.Model):
         store=True,
         default="pending",
         index=True,
-        track_visibility="onchange",
+        tracking=True,
         help=(
             "Pending: No meeting scheduled.\n"
             "Scheduled: The requester has not confirmed attendance yet.\n"
@@ -103,7 +112,7 @@ class ResourceBooking(models.Model):
         inverse="_inverse_dates",
         store=True,
         track_sequence=200,
-        track_visibility="onchange",
+        tracking=True,
     )
     stop = fields.Datetime(
         compute="_compute_dates",
@@ -112,7 +121,7 @@ class ResourceBooking(models.Model):
         inverse="_inverse_dates",
         store=True,
         track_sequence=210,
-        track_visibility="onchange",
+        tracking=True,
     )
     type_id = fields.Many2one(
         comodel_name="resource.booking.type",
@@ -120,7 +129,7 @@ class ResourceBooking(models.Model):
         index=True,
         ondelete="cascade",
         required=True,
-        track_visibility="onchange",
+        tracking=True,
     )
 
     def _compute_access_url(self):
@@ -129,13 +138,28 @@ def _compute_access_url(self):
             one.access_url = "/my/bookings/%d" % one.id
         return result
 
+    @api.depends("type_id")
+    def _compute_categ_ids(self):
+        """Copy default tags from RBT when changing it."""
+        for one in self:
+            if one.type_id:
+                one.categ_ids = one.type_id.categ_ids
+
+    @api.depends("start", "stop", "type_id")
+    def _compute_combination_id(self):
+        """Select best combination candidate when changing booking dates."""
+        for one in self:
+            # Useless without the interval
+            if one.start and one.stop:
+                one.combination_id = one._get_best_combination()
+
     @api.depends("combination_id", "partner_id")
     def _compute_involves_me(self):
         """Indicate if the booking involves you."""
-        mine = self.search([("involves_me", "=", True)])
-        alien = self - mine
-        alien.update({"involves_me": False})
-        mine.update({"involves_me": True})
+        self.involves_me = False
+        domain = self._search_involves_me("=", True)
+        mine = self.filtered_domain(domain)
+        mine.involves_me = True
 
     def _search_involves_me(self, operator, value):
         """Fast search of own bookings."""
@@ -154,23 +178,30 @@ def _search_involves_me(self, operator, value):
         return ["!"] + domain
 
     @api.depends("start")
-    def _compute_overdue(self):
-        """Indicate if booking is overdue and modifiable."""
-        is_manager = self.env.user.has_group(
-            "resource_booking.group_manager"
-        ) and not self.env.context.get("using_portal")
+    def _compute_is_overdue(self):
+        """Indicate if booking is overdue."""
         now = fields.Datetime.now()
         for one in self:
             # You can always modify it if there's no meeting yet
             if not one.start:
                 one.is_overdue = False
-                one.is_modifiable = True
                 continue
             anticipation = timedelta(hours=one.type_id.modifications_deadline)
             deadline = one.start - anticipation
             one.is_overdue = now > deadline
-            # Managers can always modify bookings
-            one.is_modifiable = is_manager or not one.is_overdue
+
+    @api.depends("is_overdue")
+    @api.depends_context("uid", "using_portal")
+    def _compute_is_modifiable(self):
+        """Indicate if the booking is modifiable."""
+        self.is_modifiable = True
+        is_manager = not self.env.context.get(
+            "using_portal"
+        ) and self.env.user.has_group("resource_booking.group_manager")
+        # Managers can always modify overdue bookings
+        if not is_manager:
+            overdue = self.filtered("is_overdue")
+            overdue.is_modifiable = False
 
     @api.depends("partner_id", "type_id", "meeting_id")
     def _compute_name(self):
@@ -183,7 +214,7 @@ def _compute_name(self):
     @api.depends("active", "meeting_id.attendee_ids.state")
     def _compute_state(self):
         """Obtain request state."""
-        to_check = self.browse(prefetch=self._prefetch)
+        to_check = self.browse()
         for one in self:
             if not one.active:
                 one.state = "canceled"
@@ -205,7 +236,7 @@ def _compute_dates(self):
         for one in self:
             # You're creating a new record; calendar view sends proper context
             # defaults that at this point are lost; restoring them
-            if one.env.in_onchange and not one.id:
+            if not one.id:
                 one.update(one.default_get(["start", "stop"]))
                 continue
             # Get values from related meeting, if any; just like a related field
@@ -308,20 +339,6 @@ def _onchange_start_fill_stop(self):
         # In the general use case, stop is start + duration
         self.stop = self.start and self.start + timedelta(hours=self.type_id.duration)
 
-    @api.onchange("type_id")
-    def _onchange_type_fill_tags(self):
-        """Copy default tags from RBT when changing it."""
-        if self.type_id:
-            self.categ_ids = self.type_id.categ_ids
-
-    @api.onchange("start", "stop", "type_id")
-    def _onchange_dates_pick_combination(self):
-        """Select best combination candidate when changing booking dates."""
-        # Useless without the interval
-        if not (self.start and self.stop):
-            return
-        self.combination_id = self._get_best_combination()
-
     def _get_calendar_context(self, year=None, month=None, now=None):
         """Get the required context for the calendar view in the portal.
 
@@ -345,7 +362,7 @@ def _get_calendar_context(self, year=None, month=None, now=None):
         slots = self._get_available_slots(start, start + month1)
         return {
             "booking": self,
-            "calendar": calendar.Calendar(lang.week_start - 1),
+            "calendar": calendar.Calendar(int(lang.week_start) - 1),
             "now": now,
             "res_lang": lang,
             "slots": slots,
@@ -383,12 +400,8 @@ def _get_best_combination(self):
                 and availability._items[0][:2] == desired_interval
             ):
                 return combination
-        # TODO In v13 experiment failing always. In v12, datetime widget
-        # triggers onchange on every click, and renders fail=True unusable, but
-        # it would be nice to warn users when they're selecting dates where
-        # nobody is available
+        # Tell portal user there's no combination available
         if self.env.context.get("using_portal"):
-            # Tell user there's no combination available
             hours = (self.stop - self.start).total_seconds() / 3600
             raise ValidationError(
                 _("No resource combinations available on %s")
diff --git a/resource_booking/models/resource_booking_combination.py b/resource_booking/models/resource_booking_combination.py
index 76919c12..f7c3ab45 100644
--- a/resource_booking/models/resource_booking_combination.py
+++ b/resource_booking/models/resource_booking_combination.py
@@ -10,7 +10,7 @@ class ResourceBookingCombination(models.Model):
     _name = "resource.booking.combination"
     _description = "Bookable resource combinations"
 
-    active = fields.Boolean(index=True, default=True)
+    active = fields.Boolean(default=True)
     booking_count = fields.Integer(
         compute="_compute_booking_count", string="Booking count"
     )
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 69bd4da2..e57166ab 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -97,7 +97,7 @@ class ResourceBookingType(models.Model):
 
     @api.model
     def _default_company(self):
-        return self.env["res.company"]._company_default_get()
+        return self.env.company
 
     @api.model
     def _default_resource_calendar(self):
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
index 510a2788..78082b1d 100644
--- a/resource_booking/models/resource_calendar.py
+++ b/resource_booking/models/resource_calendar.py
@@ -56,7 +56,7 @@ def _calendar_event_busy_intervals(
         )
         for event in all_events:
             real_event = self.env["calendar.event"].browse(
-                calendar_id2real_id(event.id), all_events._prefetch
+                calendar_id2real_id(event.id)
             )
             # Is the event the same one we're currently checking?
             if real_event.resource_booking_ids.id == analyzed_booking_id:
@@ -83,19 +83,29 @@ def _calendar_event_busy_intervals(
                 # Add the matched event as a busy interval
                 intervals.append(
                     (
-                        fields.Datetime.context_timestamp(event, event.start),
-                        fields.Datetime.context_timestamp(event, event.stop),
-                        event,
+                        fields.Datetime.context_timestamp(
+                            event, fields.Datetime.to_datetime(event.start)
+                        ),
+                        fields.Datetime.context_timestamp(
+                            event, fields.Datetime.to_datetime(event.stop)
+                        ),
+                        resource,
                     )
                 )
         return Intervals(intervals)
 
-    # TODO Override _leave_intervals_batch in v13
-    def _leave_intervals(self, start_dt, end_dt, resource=None, domain=None):
+    def _leave_intervals_batch(
+        self, start_dt, end_dt, resources=None, domain=None, tz=None
+    ):
         """Count busy meetings as leaves if required by context."""
-        result = super()._leave_intervals(start_dt, end_dt, resource, domain)
-        if resource and self.env.context.get("analyzing_booking"):
-            result |= self._calendar_event_busy_intervals(
-                start_dt, end_dt, resource, self.env.context["analyzing_booking"]
-            )
+        result = super()._leave_intervals_batch(start_dt, end_dt, resources, domain, tz)
+        if self.env.context.get("analyzing_booking"):
+            for resource_id in result:
+                # TODO Make this work in batch too
+                result[resource_id] |= self._calendar_event_busy_intervals(
+                    start_dt,
+                    end_dt,
+                    self.env["resource.resource"].browse(resource_id),
+                    self.env.context["analyzing_booking"],
+                )
         return result
diff --git a/resource_booking/readme/INSTALL.rst b/resource_booking/readme/INSTALL.rst
index 45b8c178..699186cb 100644
--- a/resource_booking/readme/INSTALL.rst
+++ b/resource_booking/readme/INSTALL.rst
@@ -5,7 +5,7 @@ To install this module, you need to install these dependencies:
 
 When someone is a manager, he will have access to *Resource Bookings >
 Configuration*, where he will be able to configure resources, leaves and
-schedules. This menu is just provided as a commodity. However, if you want to
+schedules. This menu is just provided as a shortcut. However, if you want to
 manage that stuff more comfortably:
 
 * To manage human resources, install `hr <https://apps.odoo.com/app/employees>`__.
diff --git a/resource_booking/readme/ROADMAP.rst b/resource_booking/readme/ROADMAP.rst
index d3ea9f1b..ef4d9779 100644
--- a/resource_booking/readme/ROADMAP.rst
+++ b/resource_booking/readme/ROADMAP.rst
@@ -2,3 +2,4 @@
 * Allow customer to choose combination.
 * Some error messages would be a bit more helpful if they specify the schedule
   impossibility reason, but that should be done without affecting performance.
+* Optimize ``_calendar_event_busy_intervals()`` to make it work in batch.
diff --git a/resource_booking/security/resource_booking_security.xml b/resource_booking/security/resource_booking_security.xml
index ed8b20ff..1b19d69a 100644
--- a/resource_booking/security/resource_booking_security.xml
+++ b/resource_booking/security/resource_booking_security.xml
@@ -29,7 +29,7 @@
             <field name="global" eval="True" />
             <field
                 name="domain_force"
-            >['|', ('company_id', '=', False), ('company_id', 'child_of', user.company_id.ids)]</field>
+            >['|', ('company_id','=',False), ('company_id','in',company_ids)]</field>
         </record>
         <record id="rule_resource_booking_portal" model="ir.rule">
             <field name="name">Resource booking portal rule</field>
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index c3917ac8..5a727186 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/12.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-12-0/calendar-12-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/13.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
 schedules.</p>
 <p>Example use cases:</p>
@@ -415,7 +415,7 @@ <h1><a class="toc-backref" href="#id1">Installation</a></h1>
 </ol>
 <p>When someone is a manager, he will have access to <em>Resource Bookings &gt;
 Configuration</em>, where he will be able to configure resources, leaves and
-schedules. This menu is just provided as a commodity. However, if you want to
+schedules. This menu is just provided as a shortcut. However, if you want to
 manage that stuff more comfortably:</p>
 <ul class="simple">
 <li>To manage human resources, install <a class="reference external" href="https://apps.odoo.com/app/employees">hr</a>.</li>
@@ -506,6 +506,7 @@ <h1><a class="toc-backref" href="#id4">Known issues / Roadmap</a></h1>
 <li>Allow customer to choose combination.</li>
 <li>Some error messages would be a bit more helpful if they specify the schedule
 impossibility reason, but that should be done without affecting performance.</li>
+<li>Optimize <tt class="docutils literal">_calendar_event_busy_intervals()</tt> to make it work in batch.</li>
 </ul>
 </div>
 <div class="section" id="bug-tracker">
@@ -513,7 +514,7 @@ <h1><a class="toc-backref" href="#id5">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/calendar/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -539,7 +540,7 @@ <h2><a class="toc-backref" href="#id9">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external" href="https://github.com/Yajo"><img alt="Yajo" src="https://github.com/Yajo.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/12.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/13.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 7864bce0..70908a9c 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -70,8 +70,8 @@
                     <tr>
                         <t t-foreach="calendar.iterweekdays()" t-as="weekday">
                             <th
-                                t-att-title="weekday_names[weekday + 1]"
-                                t-esc="weekday_names[weekday + 1][:3]"
+                                t-att-title="weekday_names[str(weekday + 1)]"
+                                t-esc="weekday_names[str(weekday + 1)][:3]"
                             />
                         </t>
                     </tr>
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
index b69bf538..e6183529 100644
--- a/resource_booking/tests/common.py
+++ b/resource_booking/tests/common.py
@@ -34,8 +34,8 @@ def create_test_data(obj):
     obj.r_calendars = obj.env["resource.calendar"].create(
         [
             {"name": "Mon", "attendance_ids": attendances[:1], "tz": "UTC"},
-            {"name": "Tue", "attendance_ids": attendances[1:], "tz": "UTC",},
-            {"name": "MonTue", "attendance_ids": attendances, "tz": "UTC",},
+            {"name": "Tue", "attendance_ids": attendances[1:], "tz": "UTC"},
+            {"name": "MonTue", "attendance_ids": attendances, "tz": "UTC"},
         ]
     )
     # Create one material resource for each of those calendars; same order
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 19762e54..294fb924 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -294,6 +294,7 @@ def test_recurring_event(self):
         ce_f.rrule_type = "weekly"
         ce_f.end_type = "count"
         ce_f.count = 2
+        ce_f.mo = True
         ce_f.save()
         # Cannot book next Monday at 8
         rb_f = Form(self.env["resource.booking"])
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 3e9dc6ba..6365b020 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -37,7 +37,7 @@ def setUp(self):
 
     def _url_xml(self, url, data=None, timeout=10):
         """Open an URL and return the lxml etree object resulting from its content."""
-        response = self.url_open(url, data, timeout)
+        response = self.url_open(url, data, timeout=timeout)
         return fromstring(response.content)
 
     def test_portal_no_bookings(self):
diff --git a/resource_booking/views/resource_booking_combination_views.xml b/resource_booking/views/resource_booking_combination_views.xml
index 4443593a..b20af153 100644
--- a/resource_booking/views/resource_booking_combination_views.xml
+++ b/resource_booking/views/resource_booking_combination_views.xml
@@ -11,18 +11,13 @@
                 <header />
                 <sheet>
                     <div class="oe_button_box" name="button_box">
-                        <button
-                            name="toggle_active"
-                            type="object"
-                            class="oe_stat_button"
-                            icon="fa-archive"
-                        >
-                            <field
-                                name="active"
-                                widget="boolean_button"
-                                options='{"terminology": "archive"}'
-                            />
-                        </button>
+                        <field name="active" invisible="1" />
+                        <widget
+                            name="web_ribbon"
+                            title="Archived"
+                            bg_color="bg-danger"
+                            attrs="{'invisible': [('active', '=', True)]}"
+                        />
                         <button
                             name="action_open_bookings"
                             type="object"
diff --git a/resource_booking/views/resource_booking_type_views.xml b/resource_booking/views/resource_booking_type_views.xml
index 025c6bbf..cf33a750 100644
--- a/resource_booking/views/resource_booking_type_views.xml
+++ b/resource_booking/views/resource_booking_type_views.xml
@@ -11,18 +11,13 @@
                 <header />
                 <sheet>
                     <div class="oe_button_box" name="button_box">
-                        <button
-                            name="toggle_active"
-                            type="object"
-                            class="oe_stat_button"
-                            icon="fa-archive"
-                        >
-                            <field
-                                name="active"
-                                widget="boolean_button"
-                                options='{"terminology": "archive"}'
-                            />
-                        </button>
+                        <field name="active" invisible="1" />
+                        <widget
+                            name="web_ribbon"
+                            title="Archived"
+                            bg_color="bg-danger"
+                            attrs="{'invisible': [('active', '=', True)]}"
+                        />
                         <button
                             name="action_open_bookings"
                             type="object"
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 18b834c6..293d6555 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -14,8 +14,9 @@
                 quick_add="false"
                 color="combination_id"
             >
-                <field name="name" />
-                <field name="partner_id" avatar_field="image_small" />
+                <field name="name" invisible="True" />
+                <field name="partner_id" avatar_field="image_128" />
+                <field name="type_id" />
                 <field name="combination_id" />
             </calendar>
         </field>
@@ -107,6 +108,13 @@
                     <field name="state" widget="statusbar" />
                 </header>
                 <sheet>
+                    <field name="active" invisible="1" />
+                    <widget
+                        name="web_ribbon"
+                        title="Archived"
+                        bg_color="bg-danger"
+                        attrs="{'invisible': [('active', '=', True)]}"
+                    />
                     <div class="oe_button_box" name="button_box">
                         <button
                             name="action_open_portal"
@@ -116,34 +124,6 @@
                         >
                             <span>Preview</span>
                         </button>
-                        <!-- Using attrs=invisible trick to make archive=cancel -->
-                        <button
-                            name="toggle_active"
-                            type="object"
-                            class="oe_stat_button"
-                            icon="fa-archive"
-                            attrs="{'invisible': [('active', '=', True), ('meeting_id', '!=', False)]}"
-                        >
-                            <field
-                                name="active"
-                                widget="boolean_button"
-                                options='{"terminology": "archive"}'
-                            />
-                        </button>
-                        <button
-                            name="action_cancel"
-                            type="object"
-                            class="oe_stat_button"
-                            icon="fa-archive"
-                            attrs="{'invisible': ['!', '&amp;', ('active', '=', True), ('meeting_id', '!=', False)]}"
-                            confirm="This will remove the associated meeting to unschedule the booking. Are you sure?"
-                        >
-                            <field
-                                name="active"
-                                widget="boolean_button"
-                                options='{"terminology": "archive"}'
-                            />
-                        </button>
                     </div>
                     <group name="main">
                         <group name="booking">

From 781e5fb4b354f9b3ffc264fd441ce5873cc89c7f Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 23 Jul 2021 14:03:17 +0100
Subject: [PATCH 10/64] [IMP] resource_booking: use duration field instead of
 stop

From now on, `resource.booking.type` duration represents the default duration that will be applied to new `resource.booking` of that type, instead of the hardcoded duration for every new booking.

This means that you can create a new booking in pending state and define a custom duration before sending the portal link to customer.

Thus, the available schedule slots in portal will be based on the type duration, whereas only those that have enough time left to complete the booking duration will be displayed.

@Tecnativa TT30987
---
 resource_booking/__manifest__.py              |  2 +-
 .../migrations/13.0.2.0.0/pre-migrate.py      | 55 +++++++++++
 resource_booking/models/resource_booking.py   | 94 ++++++++++---------
 .../models/resource_booking_type.py           |  5 +-
 resource_booking/readme/CONFIGURE.rst         |  4 +-
 resource_booking/readme/USAGE.rst             |  2 +
 resource_booking/templates/portal.xml         |  2 +-
 resource_booking/tests/test_backend.py        | 71 ++++++++++----
 .../views/resource_booking_views.xml          | 19 ++--
 9 files changed, 179 insertions(+), 75 deletions(-)
 create mode 100644 resource_booking/migrations/13.0.2.0.0/pre-migrate.py

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index f82f84af..e41a3d13 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.1.0.0",
+    "version": "13.0.2.0.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/migrations/13.0.2.0.0/pre-migrate.py b/resource_booking/migrations/13.0.2.0.0/pre-migrate.py
new file mode 100644
index 00000000..8e38ade4
--- /dev/null
+++ b/resource_booking/migrations/13.0.2.0.0/pre-migrate.py
@@ -0,0 +1,55 @@
+# Copyright 2021 Tecnativa - Jairo Llopis
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from openupgradelib import openupgrade
+
+
+def remove_start_stop_together_constraint(cr):
+    """Remove old unnecessary constraint.
+
+    This one is no longer needed because `stop` is now computed and readonly,
+    so it will always have or not have value automatically.
+    """
+    openupgrade.logged_query(
+        cr,
+        """
+            ALTER TABLE resource_booking
+            DROP CONSTRAINT IF EXISTS resource_booking_start_stop_together
+        """,
+    )
+
+
+def fill_resource_booking_duration(env):
+    """Pre-create and pre-fill resource.booking duration."""
+    openupgrade.add_fields(
+        env,
+        [
+            (
+                "duration",
+                "resource.booking",
+                "resource_booking",
+                "float",
+                None,
+                "resource_booking",
+                None,
+            )
+        ],
+    )
+    openupgrade.logged_query(
+        env.cr,
+        """
+            UPDATE resource_booking rb
+            SET duration = COALESCE(
+                -- See https://stackoverflow.com/a/952600/1468388
+                EXTRACT(EPOCH FROM rb.stop - rb.start) / 3600,
+                rbt.duration
+            )
+            FROM resource_booking_type rbt
+            WHERE rb.type_id = rbt.id
+        """,
+    )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    remove_start_stop_together_constraint(env.cr)
+    fill_resource_booking_duration(env)
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 75b55903..35590548 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -2,7 +2,6 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 import calendar
-from contextlib import suppress
 from datetime import datetime, timedelta
 
 from dateutil.relativedelta import relativedelta
@@ -25,14 +24,6 @@ class ResourceBooking(models.Model):
             "CHECK(meeting_id IS NULL OR combination_id IS NOT NULL)",
             "Missing resource booking combination.",
         ),
-        (
-            "start_stop_together",
-            """CHECK(
-                (start IS NULL AND stop IS NULL) OR
-                (start IS NOT NULL AND stop IS NOT NULL)
-            )""",
-            "Start and stop must be filled or emptied together.",
-        ),
         (
             "unique_meeting_id",
             "UNIQUE(meeting_id)",
@@ -106,7 +97,7 @@ class ResourceBooking(models.Model):
         ),
     )
     start = fields.Datetime(
-        compute="_compute_dates",
+        compute="_compute_start",
         copy=False,
         index=True,
         inverse="_inverse_dates",
@@ -114,11 +105,19 @@ class ResourceBooking(models.Model):
         track_sequence=200,
         tracking=True,
     )
+    duration = fields.Float(
+        compute="_compute_duration",
+        inverse="_inverse_dates",
+        readonly=False,
+        store=True,
+        track_sequence=220,
+        tracking=True,
+        help="Amount of time that the resources will be booked and unavailable for others.",
+    )
     stop = fields.Datetime(
-        compute="_compute_dates",
+        compute="_compute_stop",
         copy=False,
         index=True,
-        inverse="_inverse_dates",
         store=True,
         track_sequence=210,
         tracking=True,
@@ -231,17 +230,38 @@ def _compute_state(self):
             one.state = "scheduled" if one.meeting_id else "pending"
         to_check._check_scheduling()
 
-    @api.depends("meeting_id.start", "meeting_id.stop")
-    def _compute_dates(self):
-        for one in self:
-            # You're creating a new record; calendar view sends proper context
-            # defaults that at this point are lost; restoring them
-            if not one.id:
-                one.update(one.default_get(["start", "stop"]))
-                continue
-            # Get values from related meeting, if any; just like a related field
-            one.start = one.meeting_id.start
-            one.stop = one.meeting_id.stop
+    @api.depends("meeting_id.start")
+    def _compute_start(self):
+        """Get start date from related meeting, if available."""
+        for record in self:
+            if record.id:
+                record.start = record.meeting_id.start
+
+    @api.depends("meeting_id.duration", "type_id")
+    def _compute_duration(self):
+        """Compute duration for each booking."""
+        for record in self:
+            # Special case when creating record from UI
+            if not record.id:
+                record.duration = self.default_get(["duration"]).get(
+                    "duration", record.type_id.duration
+                )
+            # Get duration from type only when changing type or when creating from ORM
+            elif not record.duration or record._origin.type_id != record.type_id:
+                record.duration = record.type_id.duration
+            # Get it from meeting only when available
+            elif record.meeting_id:
+                record.duration = record.meeting_id.duration
+
+    @api.depends("start", "duration")
+    def _compute_stop(self):
+        """Get stop date from start date and duration."""
+        for record in self:
+            try:
+                record.stop = record.start + timedelta(hours=record.duration)
+            except TypeError:
+                # Either value is False: no stop date
+                record.stop = False
 
     def _inverse_dates(self):
         """Lazy-create or destroy calendar.event."""
@@ -249,13 +269,14 @@ def _inverse_dates(self):
         _self = self.with_context(from_ui=self.env.context.get("from_ui", True))
         to_create, to_delete = [], _self.env["calendar.event"]
         for one in _self:
-            if one.start and one.stop:
+            if one.start:
                 resource_partners = one.combination_id.resource_ids.filtered(
                     lambda res: res.resource_type == "user"
                 ).mapped("user_id.partner_id")
                 meeting_vals = dict(
                     one.type_id._event_defaults(),
                     categ_ids=[(6, 0, one.categ_ids.ids)],
+                    duration=one.duration,
                     name=one._get_name_formatted(one.partner_id, one.type_id),
                     partner_ids=[
                         (4, partner.id, 0)
@@ -325,20 +346,6 @@ def _check_scheduling(self):
                 % "\n- ".join(unfitting_bookings.mapped("display_name"))
             )
 
-    @api.onchange("start")
-    def _onchange_start_fill_stop(self):
-        """Apply default stop when changing start."""
-        # When creating a new record by clicking on the calendar view, don't
-        # alter stop the 1st time
-        if not self.id:
-            defaults = self.default_get(["start", "stop"])
-            with suppress(KeyError):
-                if self.start == fields.Datetime.to_datetime(defaults["start"]):
-                    self.stop = defaults["stop"]
-                    return
-        # In the general use case, stop is start + duration
-        self.stop = self.start and self.start + timedelta(hours=self.type_id.duration)
-
     def _get_calendar_context(self, year=None, month=None, now=None):
         """Get the required context for the calendar view in the portal.
 
@@ -414,7 +421,8 @@ def _get_available_slots(self, start_dt, end_dt):
         """Return available slots for scheduling current booking."""
         result = {}
         now = fields.Datetime.context_timestamp(self, fields.Datetime.now())
-        duration = timedelta(hours=self.type_id.duration)
+        slot_duration = timedelta(hours=self.type_id.duration)
+        booking_duration = timedelta(hours=self.duration)
         current = max(
             start_dt, now + timedelta(hours=self.type_id.modifications_deadline)
         )
@@ -424,14 +432,14 @@ def _get_available_slots(self, start_dt, end_dt):
             if current != slot_start:
                 current = slot_start
                 continue
-            current_interval = Intervals([(current, current + duration, self)])
+            current_interval = Intervals([(current, current + booking_duration, self)])
             for start, end, _meta in available_intervals & current_interval:
-                if end - start == duration:
+                if end - start == booking_duration:
                     result.setdefault(current.date(), [])
                     result[current.date()].append(current)
                 # I actually only care about the 1st interval, if any
                 break
-            current += duration
+            current += slot_duration
         return result
 
     def _get_intervals(self, start_dt, end_dt, combination=None):
@@ -474,7 +482,7 @@ def action_schedule(self):
                 default_res_id=False,
                 # Context used by web_calendar_slot_duration module
                 calendar_slot_duration=FloatTimeParser.value_to_html(
-                    self.type_id.duration, False
+                    self.duration, False
                 ),
                 default_resource_booking_ids=[(6, 0, self.ids)],
                 default_name=self.name,
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index e57166ab..92bac6ea 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -58,7 +58,10 @@ class ResourceBookingType(models.Model):
     duration = fields.Float(
         required=True,
         default=0.5,  # 30 minutes
-        help="Establish each interval's duration.",
+        help=(
+            "Interval offered to start each resource booking. "
+            "Also used as booking default duration."
+        ),
     )
     location = fields.Char()
     modifications_deadline = fields.Float(
diff --git a/resource_booking/readme/CONFIGURE.rst b/resource_booking/readme/CONFIGURE.rst
index 8f1675bb..d558f06c 100644
--- a/resource_booking/readme/CONFIGURE.rst
+++ b/resource_booking/readme/CONFIGURE.rst
@@ -16,7 +16,9 @@ To configure one booking type:
 #. Go to *Resource Bookings > Types*.
 #. Create one.
 #. Give it a *name*.
-#. Set the *Duration*, to know the time assigned to each calendar slot.
+#. Set the *Duration*, to know the time assigned to each calendar slot. It will
+   also be the default duration for each booking, although that can be changed
+   later if necessary.
 #. Set the *Modifications Deadline*, to forbid non-managers to alter dates of
    a booking when it's too late.
 #. Choose one *Availability Calendar*. No bookings will exist outside of it.
diff --git a/resource_booking/readme/USAGE.rst b/resource_booking/readme/USAGE.rst
index da908d65..651ea875 100644
--- a/resource_booking/readme/USAGE.rst
+++ b/resource_booking/readme/USAGE.rst
@@ -33,5 +33,7 @@ To invite someone to book a resource combination from the portal:
 #. Pick one *Resources combination*, if you want that the requester is assigned
    to that combination. Otherwise, leave it empty, and some free combination
    will be assigned automatically when the requester picks a free slot.
+#. Choose the *duration*, in case it is different from the one specified in the
+   resource booking type.
 #. Click on *Share > Send*.
 #. The requester will receive an email to select a calendar slot from his portal.
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 70908a9c..b0cb369b 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -187,7 +187,7 @@
                                         <li>
                                             Duration:
                                             <strong
-                                                t-field="booking.type_id.duration"
+                                                t-field="booking.duration"
                                                 t-options='{"widget": "float_time"}'
                                             />
                                         </li>
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 294fb924..315ff2f7 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -1,8 +1,9 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-from datetime import datetime
+from datetime import date, datetime
 
 from freezegun import freeze_time
+from pytz import utc
 
 from odoo import fields
 from odoo.exceptions import ValidationError
@@ -32,7 +33,6 @@ def test_scheduling_conflict_constraints(self):
                 {
                     "partner_id": self.partner.id,
                     "start": "2021-03-02 08:00:00",
-                    "stop": "2021-03-02 08:30:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
                 }
@@ -43,7 +43,6 @@ def test_scheduling_conflict_constraints(self):
                 {
                     "partner_id": self.partner.id,
                     "start": "2021-03-02 07:45:00",
-                    "stop": "2021-03-02 08:15:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
                 }
@@ -54,7 +53,6 @@ def test_scheduling_conflict_constraints(self):
                 {
                     "partner_id": self.partner.id,
                     "start": "2021-03-02 16:45:00",
-                    "stop": "2021-03-02 17:15:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
                 }
@@ -64,7 +62,6 @@ def test_scheduling_conflict_constraints(self):
             {
                 "partner_id": self.partner.id,
                 "start": "2021-03-01 08:00:00",
-                "stop": "2021-03-01 08:30:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_montue.id,
             }
@@ -75,7 +72,6 @@ def test_scheduling_conflict_constraints(self):
                 {
                     "partner_id": self.partner.id,
                     "start": "2021-03-01 08:29:59",
-                    "stop": "2021-03-01 08:59:59",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
                 }
@@ -86,7 +82,6 @@ def test_scheduling_conflict_constraints(self):
             {
                 "partner_id": self.partner.id,
                 "start": "2021-03-01 08:00:00",
-                "stop": "2021-03-01 08:30:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_mon.id,
             }
@@ -103,7 +98,6 @@ def test_rbc_forced_calendar(self):
                 {
                     "partner_id": self.partner.id,
                     "start": "2021-03-01 08:00:00",
-                    "stop": "2021-03-01 08:30:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_tue.id,
                 }
@@ -114,7 +108,6 @@ def test_rbc_forced_calendar(self):
             {
                 "partner_id": self.partner.id,
                 "start": "2021-03-01 08:00:00",
-                "stop": "2021-03-01 08:30:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_tue.id,
             }
@@ -130,23 +123,24 @@ def test_booking_from_calendar_view(self):
         self.assertEqual(button_context["calendar_slot_duration"], "00:45")
         self.assertEqual(button_context["default_duration"], 0.75)
         # When you click & drag on calendar to create an event, it adds the
-        # start and end as default; we imitate that here to book a meeting with
-        # 2 slots next monday
+        # start and duration as default; we imitate that here to book a meeting
+        # with 2 slots next monday
+        button_context["default_duration"] = 1.5
         booking_form = Form(
             self.env["resource.booking"].with_context(
-                **button_context,
-                default_start="2021-03-01 08:00:00",
-                default_stop="2021-03-01 09:30:00"
+                **button_context, default_start="2021-03-01 08:00:00",
             )
         )
         # This might seem redundant, but makes sure onchanges don't mess stuff
         self.assertEqual(_2dt(booking_form.start), datetime(2021, 3, 1, 8))
+        self.assertEqual(booking_form.duration, 1.5)
         self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 1, 9, 30))
-        # If I change to next week's monday, then the onchange assumes the stop
-        # date will be 1 slot, and not 2
+        # If I change to next week's monday, then the stop date advances 1:30h
         booking_form.start = datetime(2021, 3, 8, 8)
         booking_form.partner_id = self.partner
-        self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 8, 8, 45))
+        self.assertEqual(_2dt(booking_form.start), datetime(2021, 3, 8, 8))
+        self.assertEqual(booking_form.duration, 1.5)
+        self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 8, 9, 30))
         # I can book it (which means type & combination were autofilled)
         booking = booking_form.save()
         self.assertTrue(booking.meeting_id)
@@ -319,11 +313,11 @@ def test_change_calendar_after_bookings_exist(self):
                 "combination_id": rbc_mon.id,
                 "partner_id": self.partner.id,
                 "start": "2021-02-22 08:00:00",
-                "stop": "2021-02-22 08:30:00",
                 "type_id": self.rbt.id,
             }
         )
         past_booking.action_confirm()
+        self.assertEqual(past_booking.duration, 0.5)
         self.assertEqual(past_booking.state, "confirmed")
         # There's another one for next monday, confirmed too
         future_booking = self.env["resource.booking"].create(
@@ -331,7 +325,6 @@ def test_change_calendar_after_bookings_exist(self):
                 "combination_id": rbc_mon.id,
                 "partner_id": self.partner.id,
                 "start": "2021-03-01 08:00:00",
-                "stop": "2021-03-01 08:30:00",
                 "type_id": self.rbt.id,
             }
         )
@@ -365,7 +358,6 @@ def test_notification_tz(self):
                 "combination_id": self.rbcs[0].id,
                 "partner_id": self.partner.id,
                 "start": "2021-03-01 08:00:00",  # 09:00 in Madrid
-                "stop": "2021-03-01 08:30:00",
                 "type_id": self.rbt.id,
             }
         )
@@ -382,3 +374,42 @@ def test_notification_tz(self):
         )
         # Invitation must display Madrid TZ (CET)
         self.assertIn("09:00:00 CET", invitation_mail.body)
+
+    def test_free_slots_with_different_type_and_booking_durations(self):
+        """Slot and booking duration are different, and all works."""
+        # Type and calendar allow one slot each 30 minutes on Mondays and
+        # Tuesdays from 08:00 to 17:00 UTC. The booking will span for 3 slots.
+        rb = self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "type_id": self.rbt.id,
+                "duration": self.rbt.duration * 3,
+            }
+        )
+        self.assertEqual(rb.duration, 1.5)
+        slots = rb._get_available_slots(
+            utc.localize(datetime(2021, 3, 2, 14, 15)),
+            utc.localize(datetime(2021, 3, 8, 10)),
+        )
+        self.assertEqual(
+            slots,
+            {
+                # Thursday
+                date(2021, 3, 2): [
+                    # We start searching at 14:15, so first free slot will
+                    # start at 14:30
+                    utc.localize(datetime(2021, 3, 2, 14, 30)),
+                    utc.localize(datetime(2021, 3, 2, 15)),
+                    # Booking duration is 1:30, and calendar ends at 17:00, so
+                    # last slot starts at 15:30
+                    utc.localize(datetime(2021, 3, 2, 15, 30)),
+                ],
+                # Next Monday, because calendar only allows Mondays and Tuesdays
+                date(2021, 3, 8): [
+                    # Calendar starts at 8:00
+                    utc.localize(datetime(2021, 3, 8, 8)),
+                    # We are searching until 10:00, so last free slot is at 8:30
+                    utc.localize(datetime(2021, 3, 8, 8, 30)),
+                ],
+            },
+        )
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 293d6555..3b800233 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -10,7 +10,7 @@
             <calendar
                 string="Bookings"
                 date_start="start"
-                date_stop="stop"
+                date_delay="duration"
                 quick_add="false"
                 color="combination_id"
             >
@@ -136,7 +136,11 @@
                             <field name="categ_ids" widget="many2many_tags" />
                         </group>
                         <group name="meeting" string="Meeting">
-                            <field name="meeting_id" groups="base.group_no_one" />
+                            <field
+                                name="meeting_id"
+                                groups="base.group_no_one"
+                                readonly="1"
+                            />
                             <field name="is_overdue" invisible="1" />
                             <field name="is_modifiable" invisible="1" />
                             <div
@@ -147,14 +151,13 @@
                             >
                                 This booking exceeded its modifications deadline.
                             </div>
+                            <field name="start" />
                             <field
-                                name="start"
-                                attrs="{'required': [('stop', '!=', False)]}"
-                            />
-                            <field
-                                name="stop"
-                                attrs="{'required': [('start', '!=', False)]}"
+                                name="duration"
+                                widget="float_time"
+                                class="oe_inline"
                             />
+                            <field name="stop" />
                         </group>
                     </group>
                 </sheet>

From 29d06bf51bceecf8db2867cbb8cc4d5d5c81893c Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 23 Jul 2021 14:01:36 +0100
Subject: [PATCH 11/64] [IMP] resource_booking: configurable auto-assigned
 combination and location

Thanks to this patch, you will be able to more predictably block the chosen resource combination, with the added checkbox.

Also, the location field is propagated to `resource.booking` records, and synced from there to `calendar.event` if needed. This way, you can alter the location before sending the portal invitation.

@Tecnativa TT30987
---
 resource_booking/models/resource_booking.py   | 60 ++++++++++++++++---
 .../models/resource_booking_type.py           | 16 ++---
 resource_booking/readme/USAGE.rst             | 11 ++--
 resource_booking/tests/test_backend.py        | 57 +++++++++++++++++-
 .../views/resource_booking_views.xml          | 15 +++--
 5 files changed, 130 insertions(+), 29 deletions(-)

diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 35590548..5c6e8bd9 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -61,6 +61,14 @@ class ResourceBooking(models.Model):
         store=True,
         tracking=True,
     )
+    combination_auto_assign = fields.Boolean(
+        string="Auto assigned",
+        default=True,
+        help=(
+            "When checked, resource combinations will be (un)assigned automatically "
+            "based on their availability during the booking dates."
+        ),
+    )
     name = fields.Char(compute="_compute_name")
     partner_id = fields.Many2one(
         "res.partner",
@@ -71,6 +79,7 @@ class ResourceBooking(models.Model):
         tracking=True,
         help="Who requested this booking?",
     )
+    location = fields.Char(compute="_compute_location", readonly=False, store=True,)
     requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
     involves_me = fields.Boolean(
         compute="_compute_involves_me", search="_search_involves_me"
@@ -100,14 +109,13 @@ class ResourceBooking(models.Model):
         compute="_compute_start",
         copy=False,
         index=True,
-        inverse="_inverse_dates",
+        readonly=False,
         store=True,
         track_sequence=200,
         tracking=True,
     )
     duration = fields.Float(
         compute="_compute_duration",
-        inverse="_inverse_dates",
         readonly=False,
         store=True,
         track_sequence=220,
@@ -144,12 +152,12 @@ def _compute_categ_ids(self):
             if one.type_id:
                 one.categ_ids = one.type_id.categ_ids
 
-    @api.depends("start", "stop", "type_id")
+    @api.depends("start", "type_id", "combination_auto_assign")
     def _compute_combination_id(self):
         """Select best combination candidate when changing booking dates."""
         for one in self:
             # Useless without the interval
-            if one.start and one.stop:
+            if one.start and one.combination_auto_assign:
                 one.combination_id = one._get_best_combination()
 
     @api.depends("combination_id", "partner_id")
@@ -210,6 +218,18 @@ def _compute_name(self):
                 one.partner_id, one.type_id, one.meeting_id
             )
 
+    @api.depends("meeting_id.location", "type_id")
+    def _compute_location(self):
+        """Get location from meeting or type."""
+        for record in self:
+            # Get location from type when changing it or creating from ORM
+            # HACK https://github.com/odoo/odoo/issues/74152
+            if not record.location or record._origin.type_id != record.type_id:
+                record.location = record.type_id.location
+            # Get it from meeting only when available
+            elif record.meeting_id:
+                record.location = record.meeting_id.location
+
     @api.depends("active", "meeting_id.attendee_ids.state")
     def _compute_state(self):
         """Obtain request state."""
@@ -263,10 +283,14 @@ def _compute_stop(self):
                 # Either value is False: no stop date
                 record.stop = False
 
-    def _inverse_dates(self):
+    def _sync_meeting(self):
         """Lazy-create or destroy calendar.event."""
         # Notify changed dates to attendees
-        _self = self.with_context(from_ui=self.env.context.get("from_ui", True))
+        _self = self.with_context(
+            syncing_booking_ids=self.ids, from_ui=self.env.context.get("from_ui", True)
+        )
+        # Avoid sync recursion
+        _self -= self.browse(self.env.context.get("syncing_booking_ids"))
         to_create, to_delete = [], _self.env["calendar.event"]
         for one in _self:
             if one.start:
@@ -274,9 +298,11 @@ def _inverse_dates(self):
                     lambda res: res.resource_type == "user"
                 ).mapped("user_id.partner_id")
                 meeting_vals = dict(
-                    one.type_id._event_defaults(),
+                    alarm_ids=[(6, 0, one.type_id.alarm_ids.ids)],
                     categ_ids=[(6, 0, one.categ_ids.ids)],
+                    description=one.type_id.requester_advice,
                     duration=one.duration,
+                    location=one.location,
                     name=one._get_name_formatted(one.partner_id, one.type_id),
                     partner_ids=[
                         (4, partner.id, 0)
@@ -389,7 +415,7 @@ def _get_name_formatted(self, partner, type_, meeting=None):
     def _get_best_combination(self):
         """Pick best combination based on current booking state."""
         # No dates? Then return whatever is already selected (can be empty)
-        if not (self.start and self.stop):
+        if not self.start:
             return self.combination_id
         # If there's a combination already, put it 1st (highest priority)
         sorted_combinations = self.combination_id + (
@@ -462,6 +488,24 @@ def _get_intervals(self, start_dt, end_dt, combination=None):
         result &= combinations._get_intervals(start_dt, end_dt)
         return result
 
+    @api.model_create_multi
+    def create(self, vals_list):
+        """Sync booking with meeting if needed."""
+        result = super().create(vals_list)
+        result._sync_meeting()
+        return result
+
+    def write(self, vals):
+        """Sync booking with meeting if needed."""
+        result = super().write(vals)
+        self._sync_meeting()
+        return result
+
+    def unlink(self):
+        """Unlink meeting if needed."""
+        self.meeting_id.unlink()
+        return super().unlink()
+
     def message_get_suggested_recipients(self):
         recipients = super().message_get_suggested_recipients()
         for one in self:
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 92bac6ea..462b206a 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -44,6 +44,7 @@ class ResourceBookingType(models.Model):
         comodel_name="resource.booking.type.combination.rel",
         inverse_name="type_id",
         string="Available resource combinations",
+        copy=True,
         help="Resource combinations available for this type of bookings.",
     )
     company_id = fields.Many2one(
@@ -117,15 +118,6 @@ def _check_bookings_scheduling(self):
         bookings = self.mapped("booking_ids")
         return bookings._check_scheduling()
 
-    def _event_defaults(self, prefix=""):
-        """Get field names that should fill default values in meetings."""
-        return {
-            prefix + "alarm_ids": [(6, 0, self.alarm_ids.ids)],
-            prefix + "description": self.requester_advice,
-            prefix + "duration": self.duration,
-            prefix + "location": self.location,
-        }
-
     def _get_combinations_priorized(self):
         """Gets all combinations sorted by the chosen assignment method."""
         if not self.combination_assignment:
@@ -175,12 +167,14 @@ def action_open_bookings(self):
         return {
             "context": dict(
                 self.env.context,
+                default_alarm_ids=[(6, 0, self.alarm_ids.ids)],
+                default_description=self.requester_advice,
+                default_duration=self.duration,
+                default_type_id=self.id,
                 # Context used by web_calendar_slot_duration module
                 calendar_slot_duration=FloatTimeParser.value_to_html(
                     self.duration, False
                 ),
-                default_type_id=self.id,
-                **self._event_defaults(prefix="default_"),
             ),
             "domain": [("type_id", "=", self.id)],
             "name": _("Bookings"),
diff --git a/resource_booking/readme/USAGE.rst b/resource_booking/readme/USAGE.rst
index 651ea875..aa7c6625 100644
--- a/resource_booking/readme/USAGE.rst
+++ b/resource_booking/readme/USAGE.rst
@@ -19,8 +19,8 @@ To book some resources:
 #. Click on *Booking Count*.
 #. Click on a free slot.
 #. Fill the *Requester*, which may or not be yourself.
-#. Pick one *Resources combination*, in case the one assigned automatically
-   isn't the one you want.
+#. Uncheck *Auto assign* and pick one *Resources combination*, in case the one
+   assigned automatically isn't the one you want.
 
 To invite someone to book a resource combination from the portal:
 
@@ -30,9 +30,10 @@ To invite someone to book a resource combination from the portal:
 #. Click on the list view icon.
 #. Click on *Create*.
 #. Fill the *Requester*.
-#. Pick one *Resources combination*, if you want that the requester is assigned
-   to that combination. Otherwise, leave it empty, and some free combination
-   will be assigned automatically when the requester picks a free slot.
+#. Uncheck *Auto assign* and pick one *Resources combination*, if you want that
+   the requester is assigned to that combination. Otherwise, leave it empty,
+   and some free combination will be assigned automatically when the requester
+   picks a free slot.
 #. Choose the *duration*, in case it is different from the one specified in the
    resource booking type.
 #. Click on *Share > Send*.
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 315ff2f7..b5fde42b 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -35,6 +35,7 @@ def test_scheduling_conflict_constraints(self):
                     "start": "2021-03-02 08:00:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
+                    "combination_auto_assign": False,
                 }
             )
         # Booking cannot be placed next Monday before 8:00
@@ -45,6 +46,7 @@ def test_scheduling_conflict_constraints(self):
                     "start": "2021-03-02 07:45:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
+                    "combination_auto_assign": False,
                 }
             )
         # Booking cannot be placed next Monday after 17:00
@@ -55,6 +57,7 @@ def test_scheduling_conflict_constraints(self):
                     "start": "2021-03-02 16:45:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
+                    "combination_auto_assign": False,
                 }
             )
         # Booking can be placed next Monday
@@ -64,6 +67,7 @@ def test_scheduling_conflict_constraints(self):
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_montue.id,
+                "combination_auto_assign": False,
             }
         )
         # Another event cannot collide with the same RBC
@@ -74,6 +78,7 @@ def test_scheduling_conflict_constraints(self):
                     "start": "2021-03-01 08:29:59",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
+                    "combination_auto_assign": False,
                 }
             )
         # Another event can collide with another RBC
@@ -84,6 +89,7 @@ def test_scheduling_conflict_constraints(self):
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_mon.id,
+                "combination_auto_assign": False,
             }
         )
 
@@ -100,18 +106,21 @@ def test_rbc_forced_calendar(self):
                     "start": "2021-03-01 08:00:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_tue.id,
+                    "combination_auto_assign": False,
                 }
             )
         # However, if the combination is forced to Mondays, you can book it
         rbc_tue.forced_calendar_id = cal_mon
-        self.env["resource.booking"].create(
+        rb = self.env["resource.booking"].create(
             {
                 "partner_id": self.partner.id,
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
+                "combination_auto_assign": False,
                 "combination_id": rbc_tue.id,
             }
         )
+        self.assertEqual(rb.combination_id, rbc_tue)
 
     def test_booking_from_calendar_view(self):
         # The type is configured by default with bookings of 30 minutes
@@ -265,6 +274,7 @@ def test_same_slot_twice_not_utc(self):
             rb_f.partner_id = self.partner
             rb_f.type_id = self.rbt
             rb_f.start = datetime(2021, 3, 1, 10)
+            rb_f.combination_auto_assign = False
             rb_f.combination_id = self.rbcs[0]
             # 1st one works
             if loop == 0:
@@ -413,3 +423,48 @@ def test_free_slots_with_different_type_and_booking_durations(self):
                 ],
             },
         )
+
+    def test_location(self):
+        """Location across records works as expected."""
+        rbt2 = self.rbt.copy({"location": "Office 2"})
+        rb_f = Form(self.env["resource.booking"])
+        rb_f.partner_id = self.partner
+        rb_f.type_id = self.rbt
+        rb = rb_f.save()
+        # Pending booking inherits location from type
+        self.assertEqual(rb.state, "pending")
+        self.assertEqual(rb.location, "Main office")
+        # Booking can change location independently now
+        with Form(rb) as rb_f:
+            rb_f.location = "Office 3"
+        self.assertEqual(self.rbt.location, "Main office")
+        self.assertEqual(rb.location, "Office 3")
+        # Changing booking type changes location
+        with Form(rb) as rb_f:
+            rb_f.type_id = rbt2
+        self.assertEqual(rb.location, "Office 2")
+        # Still can change it independently
+        with Form(rb) as rb_f:
+            rb_f.location = "Office 1"
+        self.assertEqual(rb.location, "Office 1")
+        self.assertEqual(rbt2.location, "Office 2")
+        # Schedule the booking, meeting inherits location from it
+        with Form(rb) as rb_f:
+            rb_f.start = "2021-03-01 08:00:00"
+        self.assertEqual(rb.state, "scheduled")
+        self.assertEqual(rb.location, "Office 1")
+        self.assertEqual(rb.meeting_id.location, "Office 1")
+        # Changing meeting location changes location of booking
+        with Form(rb.meeting_id) as meeting_f:
+            meeting_f.location = "Office 2"
+        self.assertEqual(rb.location, "Office 2")
+        self.assertEqual(rb.meeting_id.location, "Office 2")
+        # Changing booking location changes meeting location
+        with Form(rb) as rb_f:
+            rb_f.location = "Office 3"
+        self.assertEqual(rb.meeting_id.location, "Office 3")
+        self.assertEqual(rb.location, "Office 3")
+        # When unscheduled, it keeps location untouched
+        rb.action_unschedule()
+        self.assertFalse(rb.meeting_id)
+        self.assertEqual(rb.location, "Office 3")
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 3b800233..80193147 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -129,10 +129,16 @@
                         <group name="booking">
                             <field name="partner_id" />
                             <field name="type_id" />
-                            <field
-                                name="combination_id"
-                                attrs="{'required': [('start', '!=', False)]}"
-                            />
+                            <label for="combination_id" />
+                            <div>
+                                <field name="combination_auto_assign" />
+                                <label for="combination_auto_assign" />
+                                <field
+                                    name="combination_id"
+                                    class="oe_inline"
+                                    attrs="{'required': [('start', '!=', False)], 'readonly': [('combination_auto_assign', '=', True)]}"
+                                />
+                            </div>
                             <field name="categ_ids" widget="many2many_tags" />
                         </group>
                         <group name="meeting" string="Meeting">
@@ -158,6 +164,7 @@
                                 class="oe_inline"
                             />
                             <field name="stop" />
+                            <field name="location" />
                         </group>
                     </group>
                 </sheet>

From caa7fc1dbbf66ec7280bbc5131863e5571797df8 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Mon, 26 Jul 2021 10:38:57 +0100
Subject: [PATCH 12/64] [FIX] resource_booking: "Involves me" filter

The filter wasn't working fine due to the `auto_join=True` set in `meeting_id`. It was never displaying pending bookings.

Besides, it wasn't necessary to keep it as a field because it was displayed nowhere and the search could be done directly in the view. This way, there's less python code to maintain and we disable the possibility of having a negative domain, which enters doomed scenarios when x2many fields are involved (see https://github.com/odoo/odoo/issues/43957).

@Tecnativa TT30987
---
 resource_booking/models/resource_booking.py   | 29 -------------------
 .../views/resource_booking_views.xml          |  2 +-
 2 files changed, 1 insertion(+), 30 deletions(-)

diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 5c6e8bd9..0cf45aaf 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -8,7 +8,6 @@
 
 from odoo import _, api, fields, models
 from odoo.exceptions import ValidationError
-from odoo.osv.expression import NEGATIVE_TERM_OPERATORS
 
 from odoo.addons.resource.models.resource import Intervals
 
@@ -35,7 +34,6 @@ class ResourceBooking(models.Model):
     meeting_id = fields.Many2one(
         comodel_name="calendar.event",
         string="Meeting",
-        auto_join=True,
         context={"default_res_id": False, "default_res_model": False},
         copy=False,
         index=True,
@@ -81,9 +79,6 @@ class ResourceBooking(models.Model):
     )
     location = fields.Char(compute="_compute_location", readonly=False, store=True,)
     requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
-    involves_me = fields.Boolean(
-        compute="_compute_involves_me", search="_search_involves_me"
-    )
     is_modifiable = fields.Boolean(compute="_compute_is_modifiable")
     is_overdue = fields.Boolean(compute="_compute_is_overdue")
     state = fields.Selection(
@@ -160,30 +155,6 @@ def _compute_combination_id(self):
             if one.start and one.combination_auto_assign:
                 one.combination_id = one._get_best_combination()
 
-    @api.depends("combination_id", "partner_id")
-    def _compute_involves_me(self):
-        """Indicate if the booking involves you."""
-        self.involves_me = False
-        domain = self._search_involves_me("=", True)
-        mine = self.filtered_domain(domain)
-        mine.involves_me = True
-
-    def _search_involves_me(self, operator, value):
-        """Fast search of own bookings."""
-        me = self.env.user.partner_id
-        if operator in NEGATIVE_TERM_OPERATORS:
-            value = not value
-        domain = [
-            "|",
-            "|",
-            ("partner_id", "=", me.id),
-            ("meeting_id.attendee_ids.partner_id", "in", me.ids),
-            ("combination_id.resource_ids.user_id.partner_id", "in", me.ids),
-        ]
-        if value:
-            return domain
-        return ["!"] + domain
-
     @api.depends("start")
     def _compute_is_overdue(self):
         """Indicate if booking is overdue."""
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 80193147..1b8f7401 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -190,7 +190,7 @@
                 <filter
                     name="is_mine"
                     string="Involving me"
-                    domain="[('involves_me', '=', True)]"
+                    domain="['|', '|', ('partner_id.user_ids', '=', uid), ('meeting_id.attendee_ids.partner_id.user_ids', '=', uid), ('combination_id.resource_ids.user_id', '=', uid)]"
                 />
                 <filter
                     name="is_pending"

From a2a2778fc52fa8d373001d969e9be1ef6934d874 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Mon, 26 Jul 2021 11:11:39 +0100
Subject: [PATCH 13/64] [IMP] resource_booking: compatible with
 hr_holidays_public

Adding `.with_context(exclude_public_holidays=True)` in needed places to let `hr_holidays_public` do its magic and never allow allocating a booking during a public holidays when that module is properly installed and configured.

@Tecnativa TT30987
---
 resource_booking/models/resource_booking.py            |  5 ++++-
 .../models/resource_booking_combination.py             |  3 ++-
 resource_booking/models/resource_booking_type.py       | 10 +++++-----
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 0cf45aaf..8b6fa331 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -446,7 +446,10 @@ def _get_intervals(self, start_dt, end_dt, combination=None):
             booking_id = self.id or self._origin.id or -1
         except AttributeError:
             booking_id = -1
-        booking = self.with_context(analyzing_booking=booking_id)
+        # Detached compatibility with hr_holidays_public
+        booking = self.with_context(
+            analyzing_booking=booking_id, exclude_public_holidays=True
+        )
         # RBT calendar uses no resources to restrict bookings
         result = booking.type_id.resource_calendar_id._work_intervals(start_dt, end_dt)
         # Restrict with the chosen combination, or to at least one of the
diff --git a/resource_booking/models/resource_booking_combination.py b/resource_booking/models/resource_booking_combination.py
index f7c3ab45..798d21ac 100644
--- a/resource_booking/models/resource_booking_combination.py
+++ b/resource_booking/models/resource_booking_combination.py
@@ -72,7 +72,8 @@ def _get_intervals(self, start_dt, end_dt):
         """Get available intervals for this booking combination."""
         base = Intervals([(start_dt, end_dt, self)])
         result = Intervals([])
-        for combination in self:
+        # Detached compatibility with hr_holidays_public
+        for combination in self.with_context(exclude_public_holidays=True):
             combination_intervals = base
             for res in combination.resource_ids:
                 if not combination_intervals:
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 462b206a..7cb6874c 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -140,9 +140,11 @@ def _get_next_slot_start(self, start_dt):
         duration_delta = timedelta(hours=self.duration)
         end_dt = start_dt + duration_delta
         workday_min = start_dt.replace(hour=0, minute=0, second=0, microsecond=0)
-        attendance_intervals = self.resource_calendar_id._attendance_intervals(
-            workday_min, end_dt
+        # Detached compatibility with hr_holidays_public
+        res_calendar = self.resource_calendar_id.with_context(
+            exclude_public_holidays=True
         )
+        attendance_intervals = res_calendar._attendance_intervals(workday_min, end_dt)
         try:
             workday_start, valid_end, _meta = attendance_intervals._items[-1]
             if valid_end != end_dt:
@@ -152,9 +154,7 @@ def _get_next_slot_start(self, start_dt):
             try:
                 # Returns `False` if no slot is found in the next 2 weeks
                 return (
-                    self.resource_calendar_id.plan_hours(
-                        self.duration, end_dt, compute_leaves=True
-                    )
+                    res_calendar.plan_hours(self.duration, end_dt, compute_leaves=True)
                     - duration_delta
                 )
             except TypeError:

From 6cde1f3816436cd386e4eec50518d9d87e1c45c6 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Tue, 27 Jul 2021 09:57:17 +0100
Subject: [PATCH 14/64] [IMP] resource_booking: optional name propagated to
 meeting

- Allow users to optionally define a name for the resource booking.
- Display that name in portal if set.
- Sync it with meeting name when creating it.

@Tecnativa TT30987
---
 resource_booking/README.rst                   | 17 +++++----
 resource_booking/controllers/portal.py        |  2 +-
 resource_booking/models/resource_booking.py   | 35 ++++++++++++++-----
 .../static/description/index.html             | 17 +++++----
 resource_booking/templates/portal.xml         |  7 ++--
 resource_booking/tests/test_backend.py        | 32 +++++++++++++++++
 .../views/resource_booking_views.xml          |  5 +++
 7 files changed, 89 insertions(+), 26 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index f2363266..1a598394 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -91,7 +91,9 @@ To configure one booking type:
 #. Go to *Resource Bookings > Types*.
 #. Create one.
 #. Give it a *name*.
-#. Set the *Duration*, to know the time assigned to each calendar slot.
+#. Set the *Duration*, to know the time assigned to each calendar slot. It will
+   also be the default duration for each booking, although that can be changed
+   later if necessary.
 #. Set the *Modifications Deadline*, to forbid non-managers to alter dates of
    a booking when it's too late.
 #. Choose one *Availability Calendar*. No bookings will exist outside of it.
@@ -130,8 +132,8 @@ To book some resources:
 #. Click on *Booking Count*.
 #. Click on a free slot.
 #. Fill the *Requester*, which may or not be yourself.
-#. Pick one *Resources combination*, in case the one assigned automatically
-   isn't the one you want.
+#. Uncheck *Auto assign* and pick one *Resources combination*, in case the one
+   assigned automatically isn't the one you want.
 
 To invite someone to book a resource combination from the portal:
 
@@ -141,9 +143,12 @@ To invite someone to book a resource combination from the portal:
 #. Click on the list view icon.
 #. Click on *Create*.
 #. Fill the *Requester*.
-#. Pick one *Resources combination*, if you want that the requester is assigned
-   to that combination. Otherwise, leave it empty, and some free combination
-   will be assigned automatically when the requester picks a free slot.
+#. Uncheck *Auto assign* and pick one *Resources combination*, if you want that
+   the requester is assigned to that combination. Otherwise, leave it empty,
+   and some free combination will be assigned automatically when the requester
+   picks a free slot.
+#. Choose the *duration*, in case it is different from the one specified in the
+   resource booking type.
 #. Click on *Share > Send*.
 #. The requester will receive an email to select a calendar slot from his portal.
 
diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
index 25556207..bb0cb7e8 100644
--- a/resource_booking/controllers/portal.py
+++ b/resource_booking/controllers/portal.py
@@ -49,7 +49,7 @@ def _booking_get_page_view_values(self, booking_sudo, access_token, **kwargs):
     )
     def portal_my_bookings(self, page=1, **kwargs):
         """List bookings that I can access."""
-        Booking = request.env["resource.booking"]
+        Booking = request.env["resource.booking"].with_context(using_portal=True)
         values = self._prepare_portal_layout_values()
         pager = portal.pager(
             url="/my/bookings",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 8b6fa331..50feb7ab 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -67,7 +67,7 @@ class ResourceBooking(models.Model):
             "based on their availability during the booking dates."
         ),
     )
-    name = fields.Char(compute="_compute_name")
+    name = fields.Char(index=True, help="Leave empty to autogenerate a booking name.")
     partner_id = fields.Many2one(
         "res.partner",
         string="Requester",
@@ -181,13 +181,11 @@ def _compute_is_modifiable(self):
             overdue = self.filtered("is_overdue")
             overdue.is_modifiable = False
 
-    @api.depends("partner_id", "type_id", "meeting_id")
-    def _compute_name(self):
-        """Show a helpful name."""
-        for one in self:
-            one.name = self._get_name_formatted(
-                one.partner_id, one.type_id, one.meeting_id
-            )
+    @api.depends("name", "partner_id", "type_id", "meeting_id")
+    @api.depends_context("uid", "using_portal")
+    def _compute_display_name(self):
+        """Overridden just for dependencies; see `name_get()` for implementation."""
+        return super()._compute_display_name()
 
     @api.depends("meeting_id.location", "type_id")
     def _compute_location(self):
@@ -274,7 +272,8 @@ def _sync_meeting(self):
                     description=one.type_id.requester_advice,
                     duration=one.duration,
                     location=one.location,
-                    name=one._get_name_formatted(one.partner_id, one.type_id),
+                    name=one.name
+                    or one._get_name_formatted(one.partner_id, one.type_id),
                     partner_ids=[
                         (4, partner.id, 0)
                         for partner in one.partner_id | resource_partners
@@ -480,6 +479,24 @@ def unlink(self):
         self.meeting_id.unlink()
         return super().unlink()
 
+    def name_get(self):
+        """Autogenerate booking name if none is provided."""
+        old = super().name_get()
+        new = []
+        for id_, name in old:
+            record = self.browse(id_)
+            if self.env.context.get("using_portal"):
+                # ID optionally suffixed with custom name for portal users
+                template = _("# %(id)d - %(name)s") if record.name else _("# %(id)d")
+                name = template % {"id": id_, "name": name}
+            elif not record.name:
+                # Automatic name for backend users
+                name = self._get_name_formatted(
+                    record.partner_id, record.type_id, record.meeting_id
+                )
+            new.append((id_, name))
+        return new
+
     def message_get_suggested_recipients(self):
         recipients = super().message_get_suggested_recipients()
         for one in self:
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index 5a727186..bb15e323 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -443,7 +443,9 @@ <h1><a class="toc-backref" href="#id2">Configuration</a></h1>
 <li>Go to <em>Resource Bookings &gt; Types</em>.</li>
 <li>Create one.</li>
 <li>Give it a <em>name</em>.</li>
-<li>Set the <em>Duration</em>, to know the time assigned to each calendar slot.</li>
+<li>Set the <em>Duration</em>, to know the time assigned to each calendar slot. It will
+also be the default duration for each booking, although that can be changed
+later if necessary.</li>
 <li>Set the <em>Modifications Deadline</em>, to forbid non-managers to alter dates of
 a booking when it’s too late.</li>
 <li>Choose one <em>Availability Calendar</em>. No bookings will exist outside of it.</li>
@@ -481,8 +483,8 @@ <h1><a class="toc-backref" href="#id3">Usage</a></h1>
 <li>Click on <em>Booking Count</em>.</li>
 <li>Click on a free slot.</li>
 <li>Fill the <em>Requester</em>, which may or not be yourself.</li>
-<li>Pick one <em>Resources combination</em>, in case the one assigned automatically
-isn’t the one you want.</li>
+<li>Uncheck <em>Auto assign</em> and pick one <em>Resources combination</em>, in case the one
+assigned automatically isn’t the one you want.</li>
 </ol>
 <p>To invite someone to book a resource combination from the portal:</p>
 <ol class="arabic simple">
@@ -492,9 +494,12 @@ <h1><a class="toc-backref" href="#id3">Usage</a></h1>
 <li>Click on the list view icon.</li>
 <li>Click on <em>Create</em>.</li>
 <li>Fill the <em>Requester</em>.</li>
-<li>Pick one <em>Resources combination</em>, if you want that the requester is assigned
-to that combination. Otherwise, leave it empty, and some free combination
-will be assigned automatically when the requester picks a free slot.</li>
+<li>Uncheck <em>Auto assign</em> and pick one <em>Resources combination</em>, if you want that
+the requester is assigned to that combination. Otherwise, leave it empty,
+and some free combination will be assigned automatically when the requester
+picks a free slot.</li>
+<li>Choose the <em>duration</em>, in case it is different from the one specified in the
+resource booking type.</li>
 <li>Click on <em>Share &gt; Send</em>.</li>
 <li>The requester will receive an email to select a calendar slot from his portal.</li>
 </ol>
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index b0cb369b..e3d8ec00 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -278,8 +278,7 @@
                     <tr>
                         <td>
                             <a t-att-href="booking.get_portal_url()">
-                                #
-                                <span t-field="booking.id" />
+                                <span t-field="booking.display_name" />
                             </a>
                         </td>
                         <td>
@@ -306,8 +305,8 @@
         <div class="row no-gutters">
             <div class="col-md">
                 <h5 class="mb-1 mb-md-0">
-                    Booking #
-                    <span t-field="booking_sudo.id" />
+                    Booking
+                    <span t-field="booking_sudo.display_name" />
                 </h5>
             </div>
             <div class="col-md text-md-right">
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index b5fde42b..90754566 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -468,3 +468,35 @@ def test_location(self):
         rb.action_unschedule()
         self.assertFalse(rb.meeting_id)
         self.assertEqual(rb.location, "Office 3")
+
+    def test_resource_booking_display_name(self):
+        # Pending booking with no name
+        rb = self.env["resource.booking"].create(
+            {"partner_id": self.partner.id, "type_id": self.rbt.id}
+        )
+        self.assertEqual(rb.display_name, "some customer - Test resource booking type")
+        self.assertEqual(
+            rb.with_context(using_portal=True).display_name, "# %d" % rb.id
+        )
+        # Pending booking with name
+        rb.name = "changed"
+        self.assertEqual(rb.display_name, "changed")
+        self.assertEqual(
+            rb.with_context(using_portal=True).display_name, "# %d - changed" % rb.id
+        )
+        # Scheduled booking with name
+        rb.start = "2021-03-01 08:00:00"
+        self.assertEqual(rb.display_name, "changed")
+        self.assertEqual(
+            rb.with_context(using_portal=True).display_name, "# %d - changed" % rb.id
+        )
+        # Scheduled booking with no name
+        rb.name = False
+        self.assertEqual(
+            rb.display_name,
+            "some customer - Test resource booking type "
+            "- 03/01/2021 at (08:00:00 To 08:30:00) (UTC)",
+        )
+        self.assertEqual(
+            rb.with_context(using_portal=True).display_name, "# %d" % rb.id
+        )
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 1b8f7401..e143a335 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -125,6 +125,11 @@
                             <span>Preview</span>
                         </button>
                     </div>
+                    <div class="oe_title">
+                        <h1>
+                            <field name="name" placeholder="Resource Booking Name" />
+                        </h1>
+                    </div>
                     <group name="main">
                         <group name="booking">
                             <field name="partner_id" />

From 11a5dd26da1f0ad780a275f014d10825388bdcf6 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Wed, 28 Jul 2021 07:26:48 +0100
Subject: [PATCH 15/64] [FIX] resource_booking: error when recurrent meetings
 exist

Without this patch, when entering the Resource Bookings menu, if the current user attended any recurrent meeting, it failed with this error:

```
Server application error
 Error code: 200
 Error message: Odoo Server Error
 Error data message:
 invalid input syntax for integer: "82-20210726143000"
LINE 1: ... AND  ("resource_booking"."meeting_id" in (3,5,81,'82-202107...
                                                             ^

 Error data debug:
 Traceback (most recent call last):
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 624, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 310, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/custom/src/odoo/odoo/tools/pycompat.py", line 14, in reraise
    raise value
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 669, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 350, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 915, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/auto/addons/web/controllers/main.py", line 1339, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/opt/odoo/auto/addons/web/controllers/main.py", line 1331, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/api.py", line 383, in call_kw
    result = _call_kw_model(method, model, args, kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/api.py", line 356, in _call_kw_model
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/models.py", line 4936, in search_read
    records = self.search(domain or [], offset=offset, limit=limit, order=order)
  File "/opt/odoo/custom/src/odoo/odoo/models.py", line 1648, in search
    res = self._search(args, offset=offset, limit=limit, order=order, count=count)
  File "/opt/odoo/custom/src/odoo/odoo/models.py", line 4499, in _search
    self._cr.execute(query_str, where_clause_params)
  File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 173, in wrapper
    return f(self, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 250, in execute
    res = self._obj.execute(query, params)
psycopg2.DataError: invalid input syntax for integer: "82-20210726143000"
LINE 1: ... AND  ("resource_booking"."meeting_id" in (3,5,81,'82-202107...
                                                             ^
```

@Tecnativa TT30987
---
 resource_booking/__manifest__.py                  | 2 +-
 resource_booking/views/resource_booking_views.xml | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index e41a3d13..3d860b0c 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.0.0",
+    "version": "13.0.2.0.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index e143a335..a04e9251 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -195,6 +195,7 @@
                 <filter
                     name="is_mine"
                     string="Involving me"
+                    context="{'virtual_id': False}"
                     domain="['|', '|', ('partner_id.user_ids', '=', uid), ('meeting_id.attendee_ids.partner_id.user_ids', '=', uid), ('combination_id.resource_ids.user_id', '=', uid)]"
                 />
                 <filter

From 3198244eeae10c75699524fd92b4e97cd62fa37a Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Wed, 28 Jul 2021 19:08:25 +0200
Subject: [PATCH 16/64] [FIX] resource_booking: Proper calendar.event unlink
 signature

Upstream ``unlink`` method in calendar.event adds this keyword argument.
---
 resource_booking/__manifest__.py          | 2 +-
 resource_booking/models/calendar_event.py | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 3d860b0c..531341f0 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.0.1",
+    "version": "13.0.2.0.2",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index 9500e8c1..0bca28e8 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -36,10 +36,10 @@ def _validate_booking_modifications(self):
                 % "\n- ".join(frozen.mapped("display_name"))
             )
 
-    def unlink(self):
+    def unlink(self, can_be_deleted=True):
         """Check you're allowed to unschedule it."""
         self._validate_booking_modifications()
-        return super().unlink()
+        return super().unlink(can_be_deleted=can_be_deleted)
 
     def write(self, vals):
         """Check you're allowed to reschedule it."""

From 3f590a104354dcee46ba4093f3ffa1d1671ad49c Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Thu, 29 Jul 2021 08:13:13 +0100
Subject: [PATCH 17/64] [FIX] resource_booking: access error on normal calendar

When a user had no resource_booking permissions and opened a calendar event linked to a resource booking, he got an unnecessary access error.

@Tecnativa TT31238
---
 resource_booking/__manifest__.py                | 2 +-
 resource_booking/views/calendar_event_views.xml | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 531341f0..8037cbc6 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.0.2",
+    "version": "13.0.2.1.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/views/calendar_event_views.xml b/resource_booking/views/calendar_event_views.xml
index d3a9021a..58671981 100644
--- a/resource_booking/views/calendar_event_views.xml
+++ b/resource_booking/views/calendar_event_views.xml
@@ -6,6 +6,7 @@
         <field name="name">calendar.event.view.form.inherit</field>
         <field name="model">calendar.event</field>
         <field name="inherit_id" ref="calendar.view_calendar_event_form" />
+        <field name="groups_id" eval="[(4, ref('group_user'), 0)]" />
         <field name="arch" type="xml">
             <form position="inside">
                 <field name="resource_booking_ids" invisible="1" />

From 4d88d11e44e9682cdec4f0e53093d9c22b22afcf Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Thu, 29 Jul 2021 13:11:53 +0100
Subject: [PATCH 18/64] [FIX] resource_booking: allow combination with other
 kind of leaves

When `_leave_intervals_batch()` in `resource.calendar` is extended by other modules that add more leaves for any reason, the returned recordset must be of the `resource.calendar.leaves` model. Otherwise, Odoo fails with:

    TypeError: '<' not supported between instances of 'resource.resource' and 'resource.calendar.leaves'

The resource didn't have a meaning here, so changing it to avoid bug.

@Tecnativa TT31249
---
 resource_booking/__manifest__.py             |  2 +-
 resource_booking/models/resource_calendar.py |  2 +-
 resource_booking/tests/test_backend.py       | 34 ++++++++++++++++++++
 3 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 8037cbc6..4002ebcb 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.1.0",
+    "version": "13.0.2.1.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
index 78082b1d..2cd43cfa 100644
--- a/resource_booking/models/resource_calendar.py
+++ b/resource_booking/models/resource_calendar.py
@@ -89,7 +89,7 @@ def _calendar_event_busy_intervals(
                         fields.Datetime.context_timestamp(
                             event, fields.Datetime.to_datetime(event.stop)
                         ),
-                        resource,
+                        self.env["resource.calendar.leaves"],
                     )
                 )
         return Intervals(intervals)
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 90754566..9266e0b5 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -267,6 +267,40 @@ def test_sorted_assignment(self):
             self.assertEqual(rb1_form.combination_id, rbc_tue)
         self.assertEqual(rb1.combination_id, rbc_tue)
 
+    def test_calendar_meeting_and_leave_combined(self):
+        """Resource not bookable on calendar leave."""
+        cal_mon = self.r_calendars[0]
+        res_mon = self.r_users[0]
+        # Add leave next Monday for Mon resource
+        self.env["resource.calendar.leaves"].create(
+            {
+                "date_from": datetime(2021, 3, 1),
+                "date_to": datetime(2021, 3, 3),
+                "calendar_id": cal_mon.id,
+                "resource_id": res_mon.id,
+            }
+        )
+        # Add meeting same day for all resources, so no combination is available
+        self.env["calendar.event"].create(
+            {
+                "start": datetime(2021, 3, 1, 8),
+                "stop": datetime(2021, 3, 1, 10, 30),
+                "name": "some meeting",
+                "partner_ids": [(6, 0, self.users.partner_id.ids)],
+            }
+        )
+        # Check it's not bookable
+        rb_form = Form(self.env["resource.booking"])
+        rb_form.type_id = self.rbt
+        rb_form.partner_id = self.partner
+        # No combination found
+        rb_form.start = datetime(2021, 3, 1, 10)
+        self.assertFalse(rb_form.combination_id)
+        # Combination found
+        rb_form.start = datetime(2021, 3, 8, 10)
+        self.assertTrue(rb_form.combination_id)
+        rb_form.save()
+
     def test_same_slot_twice_not_utc(self):
         """Scheduling the same slot twice fails, when not in UTC."""
         for loop in range(2):

From bdb45cdf537001965960b47cb2fdbee699ad1f73 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Thu, 29 Jul 2021 13:45:21 +0100
Subject: [PATCH 19/64] [FIX] resource_booking: display location and duration
 on portal

Missing part from https://github.com/OCA/calendar/pull/34:

- Display booking duration and location on portal, even on pending state.
- Improve portal test to contemplate new behaviors.

@Tecnativa TT31250
---
 resource_booking/__manifest__.py      |  2 +-
 resource_booking/templates/portal.xml |  9 +++++++-
 resource_booking/tests/test_portal.py | 30 ++++++++++++++++++++++-----
 3 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 4002ebcb..b65d9fd5 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.1.1",
+    "version": "13.0.2.2.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index e3d8ec00..577a5c44 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -362,12 +362,19 @@
                         <div class="col-md">
                             <div class="mb-1">
                                 <strong>Location:</strong>
-                                <span t-field="booking_sudo.meeting_id.location" />
+                                <span t-field="booking_sudo.location" />
                             </div>
                             <div class="mb-1">
                                 <strong>Dates:</strong>
                                 <span t-field="booking_sudo.meeting_id.display_time" />
                             </div>
+                            <div class="mb-1">
+                                <strong>Duration:</strong>
+                                <span
+                                    t-field="booking_sudo.duration"
+                                    t-options='{"widget": "float_time"}'
+                                />
+                            </div>
                             <div t-if="booking_sudo.requester_advice" class="mb-1">
                                 <strong>Advice:</strong>
                                 <span t-field="booking_sudo.requester_advice" />
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 6365b020..73466626 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -76,16 +76,30 @@ def test_portal_scheduling_conflict(self):
         # One booking for portal user, another for a partner without user
         bookings = self.env["resource.booking"].create(
             [
-                {"partner_id": self.user_portal.partner_id.id, "type_id": self.rbt.id},
-                {"partner_id": self.partner.id, "type_id": self.rbt.id},
+                {
+                    "partner_id": self.user_portal.partner_id.id,
+                    "type_id": self.rbt.id,
+                    "duration": 1,
+                },
+                {
+                    "partner_id": self.partner.id,
+                    "type_id": self.rbt.id,
+                    "location": "Office 2",
+                },
             ]
         )
-        booking_portal, booking_public = bookings
+        booking_public = bookings[1]
         # We assume they were invited by email and clicked on their links
         portal_url, public_url = (one.get_portal_url() for one in bookings)
         # Portal guy goes to scheduling page
         portal_page = self._url_xml(portal_url)
         self.assertTrue(portal_page.cssselect('.badge:contains("Pending")'))
+        self.assertTrue(
+            portal_page.cssselect(':contains("Duration:") + :contains("01:00")')
+        )
+        self.assertTrue(
+            portal_page.cssselect(':contains("Location:") + :contains("Main office")')
+        )
         link = portal_page.cssselect('a:contains("Schedule")')[0]
         portal_url = link.get("href")
         portal_page = self._url_xml(portal_url)
@@ -112,6 +126,12 @@ def test_portal_scheduling_conflict(self):
         self.assertTrue(portal_page.cssselect(".o_booking_calendar form"))
         # Public guy does the same
         public_page = self._url_xml(public_url)
+        self.assertTrue(
+            public_page.cssselect(':contains("Duration:") + :contains("00:30")')
+        )
+        self.assertTrue(
+            public_page.cssselect(':contains("Location:") + :contains("Office 2")')
+        )
         self.assertTrue(public_page.cssselect('.badge:contains("Pending")'))
         link = public_page.cssselect('a:contains("Schedule")')[0]
         public_url = link.get("href")
@@ -165,7 +185,7 @@ def test_portal_scheduling_conflict(self):
             )
         )
         self.assertTrue(
-            public_page.cssselect('div:contains("Location:"):contains("Main office")')
+            public_page.cssselect('div:contains("Location:"):contains("Office 2")')
         )
         self.assertTrue(
             public_page.cssselect(
@@ -235,7 +255,7 @@ def test_portal_scheduling_conflict(self):
         self.assertTrue(
             portal_page.cssselect(
                 'div:contains("Dates:")'
-                ':contains("03/01/2021 at (10:30:00 To 11:00:00) (UTC)")'
+                ':contains("03/01/2021 at (10:30:00 To 11:30:00) (UTC)")'
             )
         )
         # Portal guy cancels

From f26510b3fef722808ffb0eb57b2e977c68f5be93 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Thu, 29 Jul 2021 11:53:24 +0100
Subject: [PATCH 20/64] [IMP] resource_booking: autoconfirm meeting attendees

- If RBC (resource.booking.combination) was auto-assigned, attendees generated from RBC human resources are expected to confirm attendance manually.
- If RBC was handpicked, those attendees are auto-confirmed.
- All those confirmations are done before sending invitations, so invitations contain the correct attendance status.
- If requester books from portal view, he's also confirmed before sending invitation, for the same reason.

@Tecnativa TT31239
---
 resource_booking/__manifest__.py          |  2 +-
 resource_booking/controllers/portal.py    |  4 ++-
 resource_booking/models/calendar_event.py | 36 +++++++++++++++++++++
 resource_booking/tests/test_backend.py    | 38 +++++++++++++++++++++++
 4 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index b65d9fd5..98412e14 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.2.0",
+    "version": "13.0.2.2.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
index bb0cb7e8..3f0f2e9b 100644
--- a/resource_booking/controllers/portal.py
+++ b/resource_booking/controllers/portal.py
@@ -125,7 +125,9 @@ def portal_booking_cancel(self, booking_id, access_token=None, **kwargs):
     )
     def portal_booking_confirm(self, booking_id, access_token, when, **kwargs):
         """Confirm a booking in a given datetime."""
-        booking_sudo = self._get_booking_sudo(booking_id, access_token)
+        booking_sudo = self._get_booking_sudo(booking_id, access_token).with_context(
+            autoconfirm_booking_requester=True
+        )
         when_tz_aware = isoparse(when)
         when_naive = datetime.utcfromtimestamp(when_tz_aware.timestamp())
         try:
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index 0bca28e8..682ad7ea 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -52,6 +52,42 @@ def write(self, vals):
         rescheduled._validate_booking_modifications()
         return result
 
+    def create_attendees(self):
+        """Autoconfirm resource attendees if preselected."""
+        old_attendees = self.attendee_ids
+        result = super(
+            # This context avoids sending invitations to new attendees
+            CalendarEvent,
+            self.with_context(detaching=True),
+        ).create_attendees()
+        new_attendees = (self.attendee_ids - old_attendees).with_context(
+            self.env.context
+        )
+        for attendee in new_attendees:
+            # No need to change state if it's already done
+            if attendee.state in {"accepted", "declined"}:
+                continue
+            rb = attendee.event_id.resource_booking_ids
+            # Confirm requester attendee always if requested
+            if (
+                self.env.context.get("autoconfirm_booking_requester")
+                and attendee.partner_id == rb.partner_id
+            ):
+                attendee.state = "accepted"
+                continue
+            # Auto-confirm if attendee comes from a handpicked combination
+            if rb.combination_auto_assign:
+                continue
+            if attendee.partner_id in rb.combination_id.resource_ids.user_id.partner_id:
+                attendee.state = "accepted"
+        # Send invitations like upstream would have done
+        to_notify = new_attendees.filtered(lambda a: a.email != self.env.user.email)
+        if to_notify and not self.env.context.get("detaching"):
+            to_notify._send_mail_to_attendees(
+                "calendar.calendar_template_meeting_invitation"
+            )
+        return result
+
     def get_interval(self, interval, tz=None):
         """Autofix tz from related resource booking.
 
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 9266e0b5..246cd466 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -534,3 +534,41 @@ def test_resource_booking_display_name(self):
         self.assertEqual(
             rb.with_context(using_portal=True).display_name, "# %d" % rb.id
         )
+
+    def test_attendee_autoassigned_not_autoconfirmed(self):
+        """Meeting attendees are not autoconfirmed when combination is autoassigned."""
+        # Create an auto-assigned booking
+        rb = self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "type_id": self.rbt.id,
+                "start": "2021-03-01 08:00:00",
+            }
+        )
+        # Get attendees that belong to the combination human resource
+        resource_partner = rb.combination_id.resource_ids.user_id.partner_id
+        resource_attendees = rb.meeting_id.attendee_ids.filtered(
+            lambda one: one.partner_id == resource_partner
+        )
+        # Combination was auto-assigned, so resource attendees are not confirmed
+        self.assertEqual(resource_attendees.state, "needsAction")
+
+    def test_attendee_not_autoassigned_autoconfirmed(self):
+        """Meeting attendees are auto-confirmed when assigned by hand."""
+        # Create a booking with handpicked combination assignment
+        rb = self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "type_id": self.rbt.id,
+                "start": "2021-03-01 08:00:00",
+                "combination_auto_assign": False,
+                "combination_id": self.rbcs[0].id,
+            }
+        )
+        # Get attendees that belong to the combination human resources
+        resource_partner = self.users[0].partner_id
+        resource_attendees = rb.meeting_id.attendee_ids.filtered(
+            lambda one: one.partner_id == resource_partner
+        )
+        # Combination was handpicked, so resource attendees are auto-confirmed
+        self.assertEqual(resource_attendees.state, "accepted")

From a9fee4ae38e5bc3e31fa1f8e2dd6c346bd5ab610 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 30 Jul 2021 11:37:00 +0100
Subject: [PATCH 21/64] [IMP] resource_booking: improve auto-assignment
 readability

@Tecnativa TT31239
---
 resource_booking/__manifest__.py                  |  2 +-
 resource_booking/views/resource_booking_views.xml | 11 ++++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 98412e14..481ccae6 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.2.1",
+    "version": "13.0.2.2.2",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index a04e9251..e340ed6b 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -137,7 +137,16 @@
                             <label for="combination_id" />
                             <div>
                                 <field name="combination_auto_assign" />
-                                <label for="combination_auto_assign" />
+                                <label
+                                    for="combination_auto_assign"
+                                    attrs="{'invisible': [('combination_auto_assign', '=', False)]}"
+                                    string="Auto-assigned:"
+                                />
+                                <label
+                                    for="combination_auto_assign"
+                                    attrs="{'invisible': [('combination_auto_assign', '=', True)]}"
+                                    string="Manually assigned:"
+                                />
                                 <field
                                     name="combination_id"
                                     class="oe_inline"

From 01fc67875ae97d6126b5c3ce560f578c8b0456b3 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 30 Jul 2021 12:12:56 +0100
Subject: [PATCH 22/64] [IMP] resource_booking: add organizer

This allows better filtering while in the normal calendar view.

By default, the organizer will be whoever created the booking. Calendar invitations will go out in his name.

Also, avoid sending calendar event modification notifications if the modification isn't the schedule.

@Tecnativa TT31240

resource_booking 13.0.2.3.0
---
 resource_booking/__manifest__.py              |  2 +-
 resource_booking/models/resource_booking.py   | 43 +++++++++++++++++--
 resource_booking/tests/test_backend.py        | 16 +++++++
 .../views/resource_booking_views.xml          |  1 +
 4 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 481ccae6..6effc7fb 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.2.2",
+    "version": "13.0.2.3.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 50feb7ab..974381a9 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -77,6 +77,21 @@ class ResourceBooking(models.Model):
         tracking=True,
         help="Who requested this booking?",
     )
+    user_id = fields.Many2one(
+        "res.users",
+        default=lambda self: self._default_user_id(),
+        store=True,
+        readonly=False,
+        compute="_compute_user_id",
+        string="Organizer",
+        index=True,
+        tracking=True,
+        help=(
+            "Who organized this booking? Usually whoever created the record. "
+            "It will appear as the calendar event organizer, when scheduled, "
+            "and calendar notifications will be sent in his/her name."
+        ),
+    )
     location = fields.Char(compute="_compute_location", readonly=False, store=True,)
     requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
     is_modifiable = fields.Boolean(compute="_compute_is_modifiable")
@@ -134,6 +149,10 @@ class ResourceBooking(models.Model):
         tracking=True,
     )
 
+    @api.model
+    def _default_user_id(self):
+        return self.env.user
+
     def _compute_access_url(self):
         result = super()._compute_access_url()
         for one in self:
@@ -252,12 +271,17 @@ def _compute_stop(self):
                 # Either value is False: no stop date
                 record.stop = False
 
+    @api.depends("meeting_id.user_id")
+    def _compute_user_id(self):
+        """Get user from related meeting, if available."""
+        for record in self:
+            if record.meeting_id.user_id:
+                record.user_id = record.meeting_id.user_id
+
     def _sync_meeting(self):
         """Lazy-create or destroy calendar.event."""
         # Notify changed dates to attendees
-        _self = self.with_context(
-            syncing_booking_ids=self.ids, from_ui=self.env.context.get("from_ui", True)
-        )
+        _self = self.with_context(syncing_booking_ids=self.ids)
         # Avoid sync recursion
         _self -= self.browse(self.env.context.get("syncing_booking_ids"))
         to_create, to_delete = [], _self.env["calendar.event"]
@@ -281,12 +305,23 @@ def _sync_meeting(self):
                     resource_booking_ids=[(6, 0, one.ids)],
                     start=one.start,
                     stop=one.stop,
+                    user_id=one.user_id.id,
                     # These 2 avoid creating event as activity
                     res_model_id=False,
                     res_id=False,
                 )
                 if one.meeting_id:
-                    one.meeting_id.write(meeting_vals)
+                    meeting = one.meeting_id
+                    if not all(
+                        (
+                            one.meeting_id.start == one.start,
+                            one.meeting_id.stop == one.stop,
+                            one.meeting_id.duration == one.duration,
+                        )
+                    ):
+                        # Context to notify scheduling change
+                        meeting = meeting.with_context(from_ui=True)
+                    meeting.write(meeting_vals)
                 else:
                     to_create.append(meeting_vals)
             else:
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 246cd466..3a5984fe 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -503,6 +503,22 @@ def test_location(self):
         self.assertFalse(rb.meeting_id)
         self.assertEqual(rb.location, "Office 3")
 
+    def test_organizer_sync(self):
+        """Resource booking and meeting organizers are properly synced."""
+        rb = self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "type_id": self.rbt.id,
+                "start": "2021-03-01 08:00:00",
+                "duration": 1.5,
+            }
+        )
+        self.assertEqual(rb.user_id, self.env.user)
+        self.assertEqual(rb.meeting_id.user_id, self.env.user)
+        rb.meeting_id.user_id = self.users[1]
+        self.assertEqual(rb.user_id, self.users[1])
+        self.assertEqual(rb.meeting_id.user_id, self.users[1])
+
     def test_resource_booking_display_name(self):
         # Pending booking with no name
         rb = self.env["resource.booking"].create(
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index e340ed6b..1f626d91 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -161,6 +161,7 @@
                                 groups="base.group_no_one"
                                 readonly="1"
                             />
+                            <field name="user_id" />
                             <field name="is_overdue" invisible="1" />
                             <field name="is_modifiable" invisible="1" />
                             <div

From 834eebe3c16ef5bb1a6581db6f023aca692586bc Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Mon, 2 Aug 2021 08:30:14 +0100
Subject: [PATCH 23/64] [FIX] resource_booking: suggest involved partners as
 followers

Includes those coming from requester and from resource combination.

@Tecnativa TT31901
---
 resource_booking/__manifest__.py            |   2 +-
 resource_booking/i18n/es.po                 | 255 +++++++++++++-----
 resource_booking/i18n/resource_booking.pot  | 284 +++++++++++++-------
 resource_booking/models/resource_booking.py |  20 +-
 resource_booking/tests/test_backend.py      |  39 ++-
 5 files changed, 428 insertions(+), 172 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 6effc7fb..6968170e 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.3.0",
+    "version": "13.0.2.3.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index 0d270a94..b9e2c778 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -18,25 +18,37 @@ msgstr ""
 "X-Generator: Weblate 4.3.2\n"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:362
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d - %(name)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "%(partner)s - %(type)s"
 msgstr "%(partner)s - %(type)s"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:361
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "%(partner)s - %(type)s - %(time)s"
 msgstr "%(partner)s - %(type)s - %(time)s"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:57
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
 #, python-format
 msgid "%(resources)s"
 msgstr "%(resources)s"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:55
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
 #, python-format
 msgid "%(resources)s (using calendar %(calendar)s)"
 msgstr "%(resources)s (usando el calendario %(calendar)s)"
@@ -120,6 +132,11 @@ msgstr "<strong>Recursos reservados:</strong>"
 msgid "<strong>Dates:</strong>"
 msgstr "<strong>Fechas:</strong>"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Duration:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Location:</strong>"
@@ -164,6 +181,12 @@ msgstr "Activo"
 msgid "Activities"
 msgstr "Actividades"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
@@ -175,6 +198,19 @@ msgstr "Estado de la actividad"
 msgid "All times are displayed using this timezone:"
 msgstr "Todos los horarios se muestran usando esta zona horaria:"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__duration
+msgid ""
+"Amount of time that the resources will be booked and unavailable for others."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_combination_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Archived"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "Are you sure?"
@@ -186,6 +222,16 @@ msgstr "¿Está seguro/a?"
 msgid "Attachment Count"
 msgstr "Nº adjuntos"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
+msgid "Auto assigned"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Auto-assigned:"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
 msgid "Availability Calendar"
@@ -203,8 +249,8 @@ msgstr "Combinaciones de recursos reservables"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
-msgid "Booking #"
-msgstr "Reserva/cita nº"
+msgid "Booking"
+msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_count
@@ -222,15 +268,15 @@ msgid "Booking ref."
 msgstr "Ref. reserva/cita"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:97
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
 #, python-format
 msgid "Booking types"
 msgstr "Tipos de reserva/cita"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:87
-#: code:addons/resource_booking/models/resource_booking_type.py:182
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: code:addons/resource_booking/models/resource_booking_type.py:0
 #: model:ir.actions.act_window,name:resource_booking.resource_booking_action
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
@@ -248,6 +294,11 @@ msgstr "Reservas/citas"
 msgid "Bookings available for this type"
 msgstr "Reservas/citas disponibles para este tipo"
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
@@ -255,12 +306,12 @@ msgid "Cancel"
 msgstr "Cancelar"
 
 #. module: resource_booking
-#: selection:resource.booking,state:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__canceled
 msgid "Canceled"
 msgstr "Cancelado"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:266
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid ""
 "Cannot schedule these bookings because no resources are selected for them:\n"
@@ -273,7 +324,7 @@ msgstr ""
 "- %s"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:288
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid ""
 "Cannot schedule these bookings because they do not fit in their type or "
@@ -354,7 +405,7 @@ msgstr ""
 "Confirmar que el solicitante y usted mismo asistirán a la reunión agendada."
 
 #. module: resource_booking
-#: selection:resource.booking,state:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__confirmed
 msgid "Confirmed"
 msgstr "Confirmado"
 
@@ -423,12 +474,13 @@ msgid "Display Name"
 msgstr "Nombre mostrado"
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__duration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
 msgid "Duration"
 msgstr "Duración"
 
 #. module: resource_booking
-#: sql_constraint:resource.booking.type:0
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_type_duration_positive
 msgid "Duration must be positive."
 msgstr "La duración debe ser positiva."
 
@@ -437,16 +489,6 @@ msgstr "La duración debe ser positiva."
 msgid "Duration:"
 msgstr "Duración:"
 
-#. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
-msgid "Establish each interval's duration."
-msgstr "Establezca la duración de cada intervalo."
-
-#. module: resource_booking
-#: model:ir.model,name:resource_booking.model_calendar_event
-msgid "Event"
-msgstr "Evento"
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -496,20 +538,30 @@ msgid "ID"
 msgstr "ID"
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
-msgid "If checked new messages require your attention."
-msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
 msgid "If checked, new messages require your attention."
 msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr "Si está marcado, algunos mensajes no se pudieron entregar."
 
@@ -518,16 +570,18 @@ msgstr "Si está marcado, algunos mensajes no se pudieron entregar."
 msgid "If you cancel this booking:"
 msgstr "Si cancela esta reserva/cita:"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid ""
+"Interval offered to start each resource booking. Also used as booking "
+"default duration."
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Invite requesting partner to portal."
 msgstr "Invitar al solicitante al portal."
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__involves_me
-msgid "Involves Me"
-msgstr "Me corresponde"
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
 msgid "Involving me"
@@ -584,6 +638,12 @@ msgid "Last Updated on"
 msgstr "Última actualización en"
 
 #. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__name
+msgid "Leave empty to autogenerate a booking name."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__location
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
 msgid "Location"
 msgstr "Ubicación"
@@ -599,6 +659,11 @@ msgstr "Adjunto principal"
 msgid "Manager"
 msgstr "Responsable"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Manually assigned:"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -643,7 +708,7 @@ msgid "Messages"
 msgstr "Mensajes"
 
 #. module: resource_booking
-#: sql_constraint:resource.booking:0
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_combination_required_if_event
 msgid "Missing resource booking combination."
 msgstr "Falta la combinación de reserva de recursos."
 
@@ -689,7 +754,7 @@ msgid "No free slots found this month."
 msgstr "No quedan huecos libres este mes."
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:393
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "No resource combinations available on %s"
 msgstr "No hay combinaciones de recursos disponibles en %s"
@@ -703,8 +768,8 @@ msgstr "Número de acciones"
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
-msgid "Number of error"
-msgstr "Número de errores"
+msgid "Number of errors"
+msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction_counter
@@ -725,7 +790,7 @@ msgid "Number of unread messages"
 msgstr "Número de mensajes no leídos"
 
 #. module: resource_booking
-#: sql_constraint:resource.booking:0
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_unique_meeting_id
 msgid "Only one event per resource booking can exist."
 msgstr "Solo puede existir un evento por reserva de recursos."
 
@@ -737,14 +802,13 @@ msgstr ""
 "cita."
 
 #. module: resource_booking
-#: selection:resource.booking,activity_state:0
-#: selection:resource.booking.type,activity_state:0
-msgid "Overdue"
-msgstr "Atrasado"
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__user_id
+msgid "Organizer"
+msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__pending
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
-#: selection:resource.booking,state:0
 msgid "Pending"
 msgstr "Pendiente"
 
@@ -762,12 +826,6 @@ msgstr ""
 "asistencia.\n"
 "Cancelada: La reunión se ha borrado y la reserva/cita se ha archivado."
 
-#. module: resource_booking
-#: selection:resource.booking,activity_state:0
-#: selection:resource.booking.type,activity_state:0
-msgid "Planned"
-msgstr "Planificado"
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "Please confirm this is really what you want."
@@ -784,7 +842,7 @@ msgid "Previous month"
 msgstr "Mes anterior"
 
 #. module: resource_booking
-#: selection:resource.booking.type,combination_assignment:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__random
 msgid "Randomly: order is not important"
 msgstr "Aleatoria: el orden no es importante"
 
@@ -799,18 +857,17 @@ msgstr "Solicitante"
 msgid "Requester Advice"
 msgstr "Aviso al solicitante"
 
-#. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:448
-#, python-format
-msgid "Requesting partner"
-msgstr "Solicitante"
-
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
 msgid "Resource Booking"
 msgstr "Reserva de recursos"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Resource Booking Name"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking_type
 msgid "Resource Booking Type"
@@ -823,8 +880,8 @@ msgstr "Reservas de recursos"
 
 #. module: resource_booking
 #: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
-msgid "Resource Leaves"
-msgstr "Ausencias del recurso"
+msgid "Resource Time Off"
+msgstr ""
 
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_calendar
@@ -892,6 +949,12 @@ msgstr "Usuario responsable"
 msgid "Restrict bookings to this schedule."
 msgstr "Restringir reservas/citas a este horario."
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -899,13 +962,13 @@ msgid "Schedule"
 msgstr "Horario"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:468
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "Schedule booking"
 msgstr "Agendar reserva/cita"
 
 #. module: resource_booking
-#: selection:resource.booking,state:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__scheduled
 msgid "Scheduled"
 msgstr "Planificado"
 
@@ -945,7 +1008,7 @@ msgid "Share"
 msgstr "Compartir"
 
 #. module: resource_booking
-#: selection:resource.booking.type,combination_assignment:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__sorted
 msgid "Sorted: pick the first one that is free"
 msgstr "Ordenada: escoger el primero que esté libre"
 
@@ -955,11 +1018,6 @@ msgstr "Ordenada: escoger el primero que esté libre"
 msgid "Start"
 msgstr "Inicio"
 
-#. module: resource_booking
-#: sql_constraint:resource.booking:0
-msgid "Start and stop must be filled or emptied together."
-msgstr "El inicio y el fin deben rellenarse o vaciarse simultáneamente."
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
 msgid "Start date"
@@ -1051,12 +1109,6 @@ msgstr ""
 "Esto eliminará la reunión asociada para desagendar esta reserva/cita. ¿Está "
 "seguro?"
 
-#. module: resource_booking
-#: selection:resource.booking,activity_state:0
-#: selection:resource.booking.type,activity_state:0
-msgid "Today"
-msgstr "Hoy"
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid ""
@@ -1074,6 +1126,12 @@ msgstr ""
 msgid "Type"
 msgstr "Tipo"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
 #: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
@@ -1135,6 +1193,13 @@ msgstr "Mensajes del sitio web"
 msgid "Website communication history"
 msgstr "Historial de comunicaciones del sitio web"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
+msgid ""
+"When checked, resource combinations will be (un)assigned automatically based "
+"on their availability during the booking dates."
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
 msgid ""
@@ -1157,6 +1222,14 @@ msgstr ""
 "responsables de reservas/citas podrán desagendarla o reagendarla. El valor "
 "se expresa en horas."
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__user_id
+msgid ""
+"Who organized this booking? Usually whoever created the record. It will "
+"appear as the calendar event organizer, when scheduled, and calendar "
+"notifications will be sent in his/her name."
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
 msgid "Who requested this booking?"
@@ -1173,7 +1246,7 @@ msgid "You are about to confirm this booking:"
 msgstr "Está a punto de confirmar esta reserva/cita:"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/calendar_event.py:32
+#: code:addons/resource_booking/models/calendar_event.py:0
 #, python-format
 msgid ""
 "You are not allowed to alter these bookings because they exceeded their "
@@ -1185,3 +1258,39 @@ msgstr ""
 "de modificaciones:\n"
 "\n"
 "- %s"
+
+#~ msgid "Booking #"
+#~ msgstr "Reserva/cita nº"
+
+#~ msgid "Establish each interval's duration."
+#~ msgstr "Establezca la duración de cada intervalo."
+
+#~ msgid "Event"
+#~ msgstr "Evento"
+
+#~ msgid "If checked new messages require your attention."
+#~ msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
+
+#~ msgid "Involves Me"
+#~ msgstr "Me corresponde"
+
+#~ msgid "Number of error"
+#~ msgstr "Número de errores"
+
+#~ msgid "Overdue"
+#~ msgstr "Atrasado"
+
+#~ msgid "Planned"
+#~ msgstr "Planificado"
+
+#~ msgid "Requesting partner"
+#~ msgstr "Solicitante"
+
+#~ msgid "Resource Leaves"
+#~ msgstr "Ausencias del recurso"
+
+#~ msgid "Start and stop must be filled or emptied together."
+#~ msgstr "El inicio y el fin deben rellenarse o vaciarse simultáneamente."
+
+#~ msgid "Today"
+#~ msgstr "Hoy"
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 68855020..dbc5fab2 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -1,12 +1,12 @@
 # Translation of Odoo Server.
 # This file contains the translation of the following modules:
-#	* resource_booking
+# 	* resource_booking
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -14,62 +14,80 @@ msgstr ""
 "Plural-Forms: \n"
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:362
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d - %(name)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "%(partner)s - %(type)s"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:361
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "%(partner)s - %(type)s - %(time)s"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:57
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
 #, python-format
 msgid "%(resources)s"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:55
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
 #, python-format
 msgid "%(resources)s (using calendar %(calendar)s)"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
-msgid "<br/>\n"
+msgid ""
+"<br/>\n"
 "                        Error details:"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
-msgid "<i class=\"fa fa-calendar\"/>\n"
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
 "                            Reschedule"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
-msgid "<i class=\"fa fa-calendar\"/>\n"
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
 "                            Schedule"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
-msgid "<i class=\"fa fa-comment\"/>\n"
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
 "                        Feedback"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
-msgid "<i class=\"fa fa-times\"/>\n"
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
 "                                Cancel this booking"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
-msgid "<i class=\"fa fa-times\"/>\n"
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
 "                            Cancel"
 msgstr ""
 
@@ -98,6 +116,11 @@ msgstr ""
 msgid "<strong>Dates:</strong>"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Duration:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Location:</strong>"
@@ -142,6 +165,12 @@ msgstr ""
 msgid "Activities"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
@@ -153,6 +182,19 @@ msgstr ""
 msgid "All times are displayed using this timezone:"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__duration
+msgid ""
+"Amount of time that the resources will be booked and unavailable for others."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_combination_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Archived"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "Are you sure?"
@@ -164,6 +206,16 @@ msgstr ""
 msgid "Attachment Count"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
+msgid "Auto assigned"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Auto-assigned:"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
 msgid "Availability Calendar"
@@ -181,7 +233,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
-msgid "Booking #"
+msgid "Booking"
 msgstr ""
 
 #. module: resource_booking
@@ -200,15 +252,15 @@ msgid "Booking ref."
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:97
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
 #, python-format
 msgid "Booking types"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking_combination.py:87
-#: code:addons/resource_booking/models/resource_booking_type.py:182
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: code:addons/resource_booking/models/resource_booking_type.py:0
 #: model:ir.actions.act_window,name:resource_booking.resource_booking_action
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
@@ -226,6 +278,11 @@ msgstr ""
 msgid "Bookings available for this type"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
@@ -233,29 +290,33 @@ msgid "Cancel"
 msgstr ""
 
 #. module: resource_booking
-#: selection:resource.booking,state:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__canceled
 msgid "Canceled"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:266
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
-msgid "Cannot schedule these bookings because no resources are selected for them:\n"
+msgid ""
+"Cannot schedule these bookings because no resources are selected for them:\n"
 "\n"
 "- %s"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:288
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
-msgid "Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+msgid ""
+"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
 "\n"
 "- %s"
 msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
-msgid "Choose how to auto-assign resource combinations. It has no effect if assiged manually."
+msgid ""
+"Choose how to auto-assign resource combinations. It has no effect if assiged"
+" manually."
 msgstr ""
 
 #. module: resource_booking
@@ -309,11 +370,13 @@ msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
-msgid "Confirm that the requesting partner and yourself will attend the scheduled meeting."
+msgid ""
+"Confirm that the requesting partner and yourself will attend the scheduled "
+"meeting."
 msgstr ""
 
 #. module: resource_booking
-#: selection:resource.booking,state:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__confirmed
 msgid "Confirmed"
 msgstr ""
 
@@ -382,12 +445,13 @@ msgid "Display Name"
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__duration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
 msgid "Duration"
 msgstr ""
 
 #. module: resource_booking
-#: sql_constraint:resource.booking.type:0
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_type_duration_positive
 msgid "Duration must be positive."
 msgstr ""
 
@@ -396,16 +460,6 @@ msgstr ""
 msgid "Duration:"
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
-msgid "Establish each interval's duration."
-msgstr ""
-
-#. module: resource_booking
-#: model:ir.model,name:resource_booking.model_calendar_event
-msgid "Event"
-msgstr ""
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -454,20 +508,30 @@ msgid "ID"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
-msgid "If checked new messages require your attention."
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon to indicate an exception activity."
 msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
 msgid "If checked, new messages require your attention."
 msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr ""
 
@@ -477,13 +541,15 @@ msgid "If you cancel this booking:"
 msgstr ""
 
 #. module: resource_booking
-#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
-msgid "Invite requesting partner to portal."
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid ""
+"Interval offered to start each resource booking. Also used as booking "
+"default duration."
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__involves_me
-msgid "Involves Me"
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Invite requesting partner to portal."
 msgstr ""
 
 #. module: resource_booking
@@ -542,6 +608,12 @@ msgid "Last Updated on"
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__name
+msgid "Leave empty to autogenerate a booking name."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__location
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
 msgid "Location"
 msgstr ""
@@ -557,6 +629,11 @@ msgstr ""
 msgid "Manager"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Manually assigned:"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -601,7 +678,7 @@ msgid "Messages"
 msgstr ""
 
 #. module: resource_booking
-#: sql_constraint:resource.booking:0
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_combination_required_if_event
 msgid "Missing resource booking combination."
 msgstr ""
 
@@ -647,7 +724,7 @@ msgid "No free slots found this month."
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:393
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "No resource combinations available on %s"
 msgstr ""
@@ -661,7 +738,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
-msgid "Number of error"
+msgid "Number of errors"
 msgstr ""
 
 #. module: resource_booking
@@ -683,7 +760,7 @@ msgid "Number of unread messages"
 msgstr ""
 
 #. module: resource_booking
-#: sql_constraint:resource.booking:0
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_unique_meeting_id
 msgid "Only one event per resource booking can exist."
 msgstr ""
 
@@ -693,31 +770,25 @@ msgid "Open a calendar to schedule a meeting for this booking request."
 msgstr ""
 
 #. module: resource_booking
-#: selection:resource.booking,activity_state:0
-#: selection:resource.booking.type,activity_state:0
-msgid "Overdue"
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__user_id
+msgid "Organizer"
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__pending
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
-#: selection:resource.booking,state:0
 msgid "Pending"
 msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__state
-msgid "Pending: No meeting scheduled.\n"
+msgid ""
+"Pending: No meeting scheduled.\n"
 "Scheduled: The requester has not confirmed attendance yet.\n"
 "Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
 "Canceled: Meeting removed, booking archived."
 msgstr ""
 
-#. module: resource_booking
-#: selection:resource.booking,activity_state:0
-#: selection:resource.booking.type,activity_state:0
-msgid "Planned"
-msgstr ""
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "Please confirm this is really what you want."
@@ -734,7 +805,7 @@ msgid "Previous month"
 msgstr ""
 
 #. module: resource_booking
-#: selection:resource.booking.type,combination_assignment:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__random
 msgid "Randomly: order is not important"
 msgstr ""
 
@@ -749,18 +820,17 @@ msgstr ""
 msgid "Requester Advice"
 msgstr ""
 
-#. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:448
-#, python-format
-msgid "Requesting partner"
-msgstr ""
-
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
 msgid "Resource Booking"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Resource Booking Name"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking_type
 msgid "Resource Booking Type"
@@ -773,7 +843,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
-msgid "Resource Leaves"
+msgid "Resource Time Off"
 msgstr ""
 
 #. module: resource_booking
@@ -841,6 +911,12 @@ msgstr ""
 msgid "Restrict bookings to this schedule."
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -848,13 +924,13 @@ msgid "Schedule"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/resource_booking.py:468
+#: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "Schedule booking"
 msgstr ""
 
 #. module: resource_booking
-#: selection:resource.booking,state:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__scheduled
 msgid "Scheduled"
 msgstr ""
 
@@ -894,7 +970,7 @@ msgid "Share"
 msgstr ""
 
 #. module: resource_booking
-#: selection:resource.booking.type,combination_assignment:0
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__sorted
 msgid "Sorted: pick the first one that is free"
 msgstr ""
 
@@ -904,11 +980,6 @@ msgstr ""
 msgid "Start"
 msgstr ""
 
-#. module: resource_booking
-#: sql_constraint:resource.booking:0
-msgid "Start and stop must be filled or emptied together."
-msgstr ""
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
 msgid "Start date"
@@ -929,7 +1000,8 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_state
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_state
-msgid "Status based on activities\n"
+msgid ""
+"Status based on activities\n"
 "Overdue: Due date is already passed\n"
 "Today: Activity date is today\n"
 "Planned: Future activities."
@@ -948,7 +1020,9 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
-msgid "Text that will appear by default in portal invitation emails and in calendar views for scheduling."
+msgid ""
+"Text that will appear by default in portal invitation emails and in calendar"
+" views for scheduling."
 msgstr ""
 
 #. module: resource_booking
@@ -958,12 +1032,17 @@ msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
-msgid "These records categorize resource bookings and apply restrictions to them, such as available resource combinations, availability schedules and interval duration."
+msgid ""
+"These records categorize resource bookings and apply restrictions to them, "
+"such as available resource combinations, availability schedules and interval"
+" duration."
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
-msgid "These records define resource combinations that can be booked together in specified schedules and intervals."
+msgid ""
+"These records define resource combinations that can be booked together in "
+"specified schedules and intervals."
 msgstr ""
 
 #. module: resource_booking
@@ -974,18 +1053,15 @@ msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
-msgid "This will remove the associated meeting to unschedule the booking. Are you sure?"
-msgstr ""
-
-#. module: resource_booking
-#: selection:resource.booking,activity_state:0
-#: selection:resource.booking.type,activity_state:0
-msgid "Today"
+msgid ""
+"This will remove the associated meeting to unschedule the booking. Are you "
+"sure?"
 msgstr ""
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
-msgid "Try next month\n"
+msgid ""
+"Try next month\n"
 "                    <i class=\"fa fa-chevron-right\"/>"
 msgstr ""
 
@@ -997,6 +1073,12 @@ msgstr ""
 msgid "Type"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
 #: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
@@ -1057,14 +1139,34 @@ msgstr ""
 msgid "Website communication history"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
+msgid ""
+"When checked, resource combinations will be (un)assigned automatically based"
+" on their availability during the booking dates."
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
-msgid "When scheduled, resources will be blocked. When pending, it means the requester didn't place the booking yet."
+msgid ""
+"When scheduled, resources will be blocked. When pending, it means the "
+"requester didn't place the booking yet."
 msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
-msgid "When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours."
+msgid ""
+"When this deadline has been exceeded, if a booking was not yet confirmed, it"
+" will be canceled automatically. Also, only booking managers will be able to"
+" unschedule or reschedule them. The value is expressed in hours."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__user_id
+msgid ""
+"Who organized this booking? Usually whoever created the record. It will "
+"appear as the calendar event organizer, when scheduled, and calendar "
+"notifications will be sent in his/her name."
 msgstr ""
 
 #. module: resource_booking
@@ -1083,10 +1185,10 @@ msgid "You are about to confirm this booking:"
 msgstr ""
 
 #. module: resource_booking
-#: code:addons/resource_booking/models/calendar_event.py:32
+#: code:addons/resource_booking/models/calendar_event.py:0
 #, python-format
-msgid "You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+msgid ""
+"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
 "\n"
 "- %s"
 msgstr ""
-
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 974381a9..26d55a86 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -532,12 +532,20 @@ def name_get(self):
             new.append((id_, name))
         return new
 
-    def message_get_suggested_recipients(self):
-        recipients = super().message_get_suggested_recipients()
-        for one in self:
-            if one.partner_id:
-                one._message_add_suggested_recipient(
-                    recipients, partner=one.partner_id, reason=_("Requesting partner")
+    def _message_get_suggested_recipients(self):
+        """Suggest related partners."""
+        recipients = super()._message_get_suggested_recipients()
+        for record in self:
+            record._message_add_suggested_recipient(
+                recipients,
+                partner=record.partner_id,
+                reason=self._fields["partner_id"].string,
+            )
+            for partner in record.combination_id.resource_ids.user_id.partner_id:
+                record._message_add_suggested_recipient(
+                    recipients,
+                    partner=partner,
+                    reason=self._fields["combination_id"].string,
                 )
         return recipients
 
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 3a5984fe..460bee94 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -7,7 +7,7 @@
 
 from odoo import fields
 from odoo.exceptions import ValidationError
-from odoo.tests.common import Form, SavepointCase
+from odoo.tests.common import Form, SavepointCase, new_test_user
 
 from .common import create_test_data
 
@@ -588,3 +588,40 @@ def test_attendee_not_autoassigned_autoconfirmed(self):
         )
         # Combination was handpicked, so resource attendees are auto-confirmed
         self.assertEqual(resource_attendees.state, "accepted")
+
+    def test_suggested_recipients(self):
+        # Create a booking as a new user
+        rb_user = new_test_user(
+            self.env, login="rbu", groups="base.group_user,resource_booking.group_user"
+        )
+        rb = (
+            self.env["resource.booking"]
+            .with_user(rb_user)
+            .create(
+                {
+                    "partner_id": self.partner.id,
+                    "type_id": self.rbt.id,
+                    "combination_auto_assign": False,
+                    "combination_id": self.rbcs[0].id,
+                    "user_id": self.users[1].id,
+                }
+            )
+        )
+        # Organizer and creator must already be following
+        self.assertEqual(
+            rb.message_partner_ids, rb_user.partner_id | self.users[1].partner_id
+        )
+        # Requester and combination must be suggested
+        self.assertEqual(
+            rb._message_get_suggested_recipients(),
+            {
+                rb.id: [
+                    (rb.partner_id.id, "some customer", "Requester"),
+                    (
+                        self.users[0].partner_id.id,
+                        "User 0<user_0@example.com>",
+                        "Resources combination",
+                    ),
+                ]
+            },
+        )

From 428e348a7f3bbaa67ca30f5157cce28685f52e6b Mon Sep 17 00:00:00 2001
From: Abdourahmane Wone <abdourahmanewone@gmail.com>
Date: Fri, 24 Sep 2021 21:49:53 +0000
Subject: [PATCH 24/64] Added translation using Weblate (French (France))

Currently translated at 97.0% (196 of 202 strings)

Translation: calendar-13.0/calendar-13.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking/fr_FR/
---
 resource_booking/i18n/fr_FR.po | 1277 ++++++++++++++++++++++++++++++++
 1 file changed, 1277 insertions(+)
 create mode 100644 resource_booking/i18n/fr_FR.po

diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
new file mode 100644
index 00000000..7b59f102
--- /dev/null
+++ b/resource_booking/i18n/fr_FR.po
@@ -0,0 +1,1277 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* resource_booking
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-09-25 03:34+0000\n"
+"Last-Translator: Abdourahmane Wone <abdourahmanewone@gmail.com>\n"
+"Language-Team: none\n"
+"Language: fr_FR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, fuzzy, python-format
+msgid "# %(id)d"
+msgstr "# %(id)d"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d - %(name)s"
+msgstr "# %(id)d - %(name)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "%(partner)s - %(type)s"
+msgstr "%(partner)s - %(type)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "%(partner)s - %(type)s - %(time)s"
+msgstr "%(partner)s - %(type)s - %(time)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#, python-format
+msgid "%(resources)s"
+msgstr "%(resources)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#, python-format
+msgid "%(resources)s (using calendar %(calendar)s)"
+msgstr "%(resources)s (en utilisant le calendrier %(calendar)s)"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid ""
+"<br/>\n"
+"                        Error details:"
+msgstr ""
+"<br/>\n"
+"                             Details de l'erreur:"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Reschedule"
+msgstr ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Replanifier"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Schedule"
+msgstr ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Calendrier"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Retour d'information"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                                Cancel this booking"
+msgstr ""
+"<i class=\"fa fa-times\"/>\n"
+"                                Annuler cette réservation"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                            Cancel"
+msgstr ""
+"<i class=\"fa fa-times\"/>\n"
+"                            Annuler"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "<small class=\"text-right\">State:</small>"
+msgstr "<small class=\"text-right\">État :</small>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "<span>Preview</span>"
+msgstr "<span>Aperçu</span>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Advice:</strong>"
+msgstr "<strong>Conseil :</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Booked resources:</strong>"
+msgstr "<strong>Ressources réservées:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Dates:</strong>"
+msgstr "<strong>Dates:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Duration:</strong>"
+msgstr "<strong>Durée:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Location:</strong>"
+msgstr "<strong>Emplacement:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Requested by:</strong>"
+msgstr "<strong>Demandé par:</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid "<strong>The chosen schedule is no longer available.</strong>"
+msgstr "<strong>L'horaire choisi n'est plus disponible.</strong>"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Type:</strong>"
+msgstr "<strong>Type:</strong>"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_warning
+msgid "Access warning"
+msgstr "Avertissement d'accès"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
+msgid "Action Needed"
+msgstr "Action nécessaire"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__active
+msgid "Active"
+msgstr "Actif"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
+msgid "Activities"
+msgstr "Activités"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
+msgid "Activity State"
+msgstr "Statut de l'activité"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "All times are displayed using this timezone:"
+msgstr "Toutes les heures sont affichées en utilisant ce fuseau horaire:"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__duration
+msgid ""
+"Amount of time that the resources will be booked and unavailable for others."
+msgstr ""
+"Durée pendant laquelle les ressources seront réservées et indisponibles pour "
+"les autres."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_combination_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Archived"
+msgstr "Archivé"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Are you sure?"
+msgstr "Êtes-vous sûr?"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_attachment_count
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_attachment_count
+msgid "Attachment Count"
+msgstr "Nombre de pièces jointes"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
+msgid "Auto assigned"
+msgstr "Attribué automatiquement"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Auto-assigned:"
+msgstr "Attribué automatiquement:"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Availability Calendar"
+msgstr "Calendrier de disponibilité"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Available resource combinations"
+msgstr "Combinaisons de ressources disponibles"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_combination
+msgid "Bookable resource combinations"
+msgstr "Combinaisons de ressources réservables"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Booking"
+msgstr "Réservation"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_count
+msgid "Booking Count"
+msgstr "Nombre de réservations"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_count
+msgid "Booking count"
+msgstr "Nombre de réservations"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Booking ref."
+msgstr "Référence de réservation."
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
+#, python-format
+msgid "Booking types"
+msgstr "Types de réservation"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: code:addons/resource_booking/models/resource_booking_type.py:0
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_action
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
+#: model:ir.ui.menu,name:resource_booking.resource_booking_menu
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_home
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_calendar
+#, python-format
+msgid "Bookings"
+msgstr "Réservations"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__booking_ids
+msgid "Bookings available for this type"
+msgstr "Réservations disponibles pour ce type"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Calendar Event"
+msgstr "Événement du calendrier"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__canceled
+msgid "Canceled"
+msgstr "Annulé"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid ""
+"Cannot schedule these bookings because no resources are selected for them:\n"
+"\n"
+"- %s"
+msgstr ""
+"Impossible de programmer ces réservations car aucune ressource n'est "
+"sélectionnée pour elles:\n"
+"\n"
+"- %s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid ""
+"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"\n"
+"- %s"
+msgstr ""
+"Impossible de planifier ces réservations car elles ne rentrent pas dans "
+"leurs calendriers de type ou de ressources, ou parce que toutes les "
+"ressources sont occupées:\n"
+"\n"
+"- %s"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
+msgid ""
+"Choose how to auto-assign resource combinations. It has no effect if assiged"
+" manually."
+msgstr ""
+"Choisissez comment attribuer automatiquement les combinaisons de ressources. "
+"Il n'a aucun effet s'il est affecté manuellement."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Close"
+msgstr "Fermer"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__combination_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Combination"
+msgstr "Combinaison"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_assignment
+msgid "Combination Assignment"
+msgstr "Affectation de combinaison"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_combination_menu
+msgid "Combinations"
+msgstr "Combinaisons"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__company_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+msgid "Company"
+msgstr "Société"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__company_id
+msgid "Company where this booking type is available."
+msgstr "Entreprise où ce type de réservation est disponible."
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_configuration_menu
+msgid "Configuration"
+msgstr "Configuration"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Confirm"
+msgstr "Confirmer"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Confirm booking"
+msgstr "Confirmer la réservation"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"Confirm that the requesting partner and yourself will attend the scheduled "
+"meeting."
+msgstr ""
+"Confirmez que le partenaire demandeur et vous-même assisterez à la réunion "
+"prévue."
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__confirmed
+msgid "Confirmed"
+msgstr "Confirmé"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_date
+msgid "Created on"
+msgstr "Créé sur"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Current state of this booking"
+msgstr "État actuel de cette réservation"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__access_url
+msgid "Customer Portal URL"
+msgstr "URL du portail client"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Date"
+msgstr "Date"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Default reminders"
+msgstr "Rappels par défaut"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__categ_ids
+msgid "Default tags"
+msgstr "Étiquettes par défaut"
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid "Define bookable resource combinations."
+msgstr "Définissez des combinaisons de ressources réservables."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid "Define resource booking types."
+msgstr "Définir les types de réservation de ressources."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid "Define resource bookings."
+msgstr "Définir les réservations de ressources."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+msgid "Display Name"
+msgstr "Afficher un nom"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__duration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
+msgid "Duration"
+msgstr "Durée"
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_type_duration_positive
+msgid "Duration must be positive."
+msgstr "La durée doit être positive."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Duration:"
+msgstr "Durée:"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
+msgid "Followers"
+msgstr "Suiveurs"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Abonnés (Chaînes)"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Abonnés (Partenaires)"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Force a specific calendar, instead of combining the resources'."
+msgstr "Forcer un calendrier spécifique, au lieu de combiner les ressources '."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Forced calendar"
+msgstr "Calendrier forcé"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Go back"
+msgstr "Retourner"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Group By"
+msgstr "Par groupe"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+msgid "ID"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon"
+msgstr "Icône"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr "Icône pour indiquer une activité d'exception."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr "Si coché, certains messages ont une erreur de livraison."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "If you cancel this booking:"
+msgstr "Si vous annulez cette réservation:"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid ""
+"Interval offered to start each resource booking. Also used as booking "
+"default duration."
+msgstr ""
+"Intervalle offert pour démarrer chaque réservation de ressource. Également "
+"utilisé comme durée de réservation par défaut."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Invite requesting partner to portal."
+msgstr "Invitez le partenaire demandeur sur le portail."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Involving me"
+msgstr "M'impliquer"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_is_follower
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_is_follower
+msgid "Is Follower"
+msgstr "Est suiveur"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_modifiable
+msgid "Is Modifiable"
+msgstr "Est modifiable"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_overdue
+msgid "Is Overdue"
+msgstr "Est en retard"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will be unscheduled."
+msgstr "Ce sera imprévu."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will disappear from your bookings list."
+msgstr "Il disparaîtra de votre liste de réservations."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__name
+msgid "Leave empty to autogenerate a booking name."
+msgstr "Laissez vide pour générer automatiquement un nom de réservation."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
+msgid "Location"
+msgstr "Emplacement"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_main_attachment_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Pièce jointe principale"
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_manager
+msgid "Manager"
+msgstr "Responsable"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Manually assigned:"
+msgstr "Attribué manuellement :"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Meeting"
+msgstr "Rencontre"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
+msgid "Meeting confirmed for this booking."
+msgstr "Rendez-vous confirmé pour cette réservation."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Meeting defaults"
+msgstr "Paramètres par défaut de la réunion"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Meetings will be created with these reminders by default."
+msgstr "Les réunions seront créées avec ces rappels par défaut."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__categ_ids
+msgid "Meetings will be created with these tags by default."
+msgstr "Les réunions seront créées avec ces étiquettes par défaut."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error
+msgid "Message Delivery error"
+msgstr "Erreur de livraison du message"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Message and communication history"
+msgstr "Historique des messages et des communications"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_ids
+msgid "Messages"
+msgstr "Messages"
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_combination_required_if_event
+msgid "Missing resource booking combination."
+msgstr "Combinaison de réservation de ressources manquante."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__modifications_deadline
+msgid "Modifications Deadline"
+msgstr "Date limite de modification"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_name
+msgid "Name"
+msgstr "Nom"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "Date limite de la prochaine activité"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_summary
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_summary
+msgid "Next Activity Summary"
+msgstr "Résumé de l'activité suivante"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_id
+msgid "Next Activity Type"
+msgstr "Type d'activité suivante"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Next month"
+msgstr "Le mois prochain"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "No free slots found this month."
+msgstr "Aucun créneau libre trouvé ce mois-ci."
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "No resource combinations available on %s"
+msgstr "Aucune combinaison de ressources disponible sur %s"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Nombre d'actions"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of errors"
+msgstr "Nombre d'erreurs"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Nombre de messages nécessitant une action"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "Nombre de messages avec erreur de livraison"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Nombre de messages non lus"
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_unique_meeting_id
+msgid "Only one event per resource booking can exist."
+msgstr "Un seul événement par réservation de ressource peut exister."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Open a calendar to schedule a meeting for this booking request."
+msgstr ""
+"Ouvrez un calendrier pour planifier une réunion pour cette demande de "
+"réservation."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__user_id
+msgid "Organizer"
+msgstr "Organisateur"
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__pending
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Pending"
+msgstr "En attente"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__state
+msgid ""
+"Pending: No meeting scheduled.\n"
+"Scheduled: The requester has not confirmed attendance yet.\n"
+"Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
+"Canceled: Meeting removed, booking archived."
+msgstr ""
+"En attente: aucune réunion n'est prévue.\\n"
+"\n"
+"Prévu: le demandeur n'a pas encore confirmé sa participation.\\n"
+"\n"
+"Confirmé: réunion prévue et participation du demandeur confirmée.\\n"
+"\n"
+"Annulé: réunion supprimée, réservation archivée."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Please confirm this is really what you want."
+msgstr "Veuillez confirmer que c'est vraiment ce que vous voulez."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_url
+msgid "Portal Access URL"
+msgstr "URL d'accès au portail"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Previous month"
+msgstr "Le mois précédent"
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__random
+msgid "Randomly: order is not important"
+msgstr "Aléatoirement: l'ordre n'est pas important"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_id
+msgid "Requester"
+msgstr "Demandeur"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__requester_advice
+msgid "Requester Advice"
+msgstr "Avis au demandeur"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking
+#: model:ir.module.category,name:resource_booking.category_resource_booking
+msgid "Resource Booking"
+msgstr "Réservation de ressources"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Resource Booking Name"
+msgstr "Nom de réservation de ressource"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type
+msgid "Resource Booking Type"
+msgstr "Type de réservation de ressource"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_main_menu
+msgid "Resource Bookings"
+msgstr "Réservations de ressources"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
+msgid "Resource Time Off"
+msgstr "Temps libre des ressources"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_calendar
+msgid "Resource Working Time"
+msgstr "Temps de travail des ressources"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+msgid "Resource booking"
+msgstr "Réservation de ressources"
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type_combination_rel
+msgid "Resource booking type relation with combinations"
+msgstr "Relation de type de réservation de ressources avec des combinaisons"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types"
+msgstr "Types de réservation de ressources"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types where this combination is available."
+msgstr ""
+"Types de réservation de ressources pour lesquels cette combinaison est "
+"disponible."
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_combination_action
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Resource combinations"
+msgstr "Combinaisons de ressources"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Resource combinations available for this type of bookings."
+msgstr "Combinaisons de ressources disponibles pour ce type de réservations."
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_resource
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__resource_ids
+#: model:ir.ui.menu,name:resource_booking.menu_resource_resource
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Resources"
+msgstr "Ressources"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_id
+msgid "Resources combination"
+msgstr "Combinaison de ressources"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__resource_ids
+msgid "Resources that must be free to be booked together."
+msgstr "Des ressources qui doivent être libre pour être réservées ensemble."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_user_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_user_id
+msgid "Responsible User"
+msgstr "Utilisateur responsable"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Restrict bookings to this schedule."
+msgstr "Limitez les réservations à cet horaire."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr "Erreur de livraison SMS"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Schedule"
+msgstr "Calendrier"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "Schedule booking"
+msgstr "Planifier la réservation"
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__scheduled
+msgid "Scheduled"
+msgstr "Programmé"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Scheduled or confirmed"
+msgstr "Programmé ou confirmé"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_token
+msgid "Security Token"
+msgstr "Jeton de sécurité"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__sequence
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set pending"
+msgstr "Définir en attente"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set to pending"
+msgstr "Mettre en attente"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Settings"
+msgstr "Paramètres"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Share"
+msgstr "Partager"
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__sorted
+msgid "Sorted: pick the first one that is free"
+msgstr "Trié : choisissez le premier qui est libre"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start"
+msgstr "Début"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start date"
+msgstr "Date de début"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Start:"
+msgstr "Début:"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__state
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "State"
+msgstr "État"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+"Statut basé sur les activités\\n"
+"\n"
+"En retard: la date d'échéance est déjà dépassée\\n"
+"\n"
+"Aujourd'hui: la date de l'activité est aujourd'hui\\n"
+"\n"
+"Prévu: Activités futures."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__stop
+msgid "Stop"
+msgstr "Arrêter"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__categ_ids
+msgid "Tags"
+msgstr "Mots clés"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
+msgid ""
+"Text that will appear by default in portal invitation emails and in calendar"
+" views for scheduling."
+msgstr ""
+"Texte qui apparaîtra par défaut dans les e-mails d'invitation au portail et "
+"dans les vues du calendrier pour la planification."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "There are currently no bookings for your account."
+msgstr "Il n'y a actuellement aucune réservation pour votre compte."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid ""
+"These records categorize resource bookings and apply restrictions to them, "
+"such as available resource combinations, availability schedules and interval"
+" duration."
+msgstr ""
+"Ces enregistrements catégorisent les réservations de ressources et leur "
+"appliquent des restrictions, telles que les combinaisons de ressources "
+"disponibles, les calendriers de disponibilité et la durée des intervalles."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid ""
+"These records define resource combinations that can be booked together in "
+"specified schedules and intervals."
+msgstr ""
+"Ces enregistrements définissent des combinaisons de ressources qui peuvent "
+"être réservées ensemble selon des calendriers et des intervalles spécifiés."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "This booking exceeded its modifications deadline."
+msgstr "Cette réservation a dépassé son délai de modification."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"This will remove the associated meeting to unschedule the booking. Are you "
+"sure?"
+msgstr ""
+"Cela supprimera la rencontre associée pour annuler la réservation. Etes-vous "
+"sûr?"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid ""
+"Try next month\n"
+"                    <i class=\"fa fa-chevron-right\"/>"
+msgstr ""
+"Essayez le mois prochain\\n"
+"\n"
+"                     <i class=\"fa-fa-chevron-droit\"/>"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr "Type de l'activité d'exception enregistrée."
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
+msgid "Types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread
+msgid "Unread Messages"
+msgstr "Messages non lus"
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Compteur de messages non lus"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule"
+msgstr "Déprogrammer"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking and archive it."
+msgstr "Déprogrammez cette réservation et archivez-la."
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking."
+msgstr "Déprogrammer cette réservation."
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_user
+msgid "User"
+msgstr "Utilisateur"
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_user
+msgid "Users allowed to book resources"
+msgstr "Utilisateurs autorisés à réserver des ressources"
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_manager
+msgid "Users allowed to manage resource booking configurations."
+msgstr ""
+"Utilisateurs autorisés à gérer les configurations de réservation de "
+"ressources."
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website Messages"
+msgstr "Messages du site Web"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website communication history"
+msgstr "Historique des communications du site Web"
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
+msgid ""
+"When checked, resource combinations will be (un)assigned automatically based"
+" on their availability during the booking dates."
+msgstr ""
+"Lorsqu'elles sont cochées, les combinaisons de ressources seront (dé)"
+"attribuées automatiquement en fonction de leur disponibilité pendant les "
+"dates de réservation."
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid ""
+"When scheduled, resources will be blocked. When pending, it means the "
+"requester didn't place the booking yet."
+msgstr ""
+"Lorsqu'elles sont planifiées, les ressources seront bloquées. Lorsqu'il est "
+"en attente, cela signifie que le demandeur n'a pas encore effectué la "
+"réservation."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
+msgid ""
+"When this deadline has been exceeded, if a booking was not yet confirmed, it"
+" will be canceled automatically. Also, only booking managers will be able to"
+" unschedule or reschedule them. The value is expressed in hours."
+msgstr ""
+"Passé ce délai, si une réservation n'a pas encore été confirmée, elle sera "
+"automatiquement annulée. De plus, seuls les gestionnaires de réservation "
+"pourront les déprogrammer ou les reprogrammer. La valeur est exprimée en "
+"heures."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__user_id
+msgid ""
+"Who organized this booking? Usually whoever created the record. It will "
+"appear as the calendar event organizer, when scheduled, and calendar "
+"notifications will be sent in his/her name."
+msgstr ""
+"Qui a organisé cette réservation ? Généralement celui qui a créé le dossier. "
+"Il apparaîtra comme l'organisateur de l'événement du calendrier, lorsqu'il "
+"est programmé, et les notifications du calendrier seront envoyées en son nom."
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
+msgid "Who requested this booking?"
+msgstr "Qui a demandé cette réservation ?"
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
+msgid "Working Times"
+msgstr "Temps de travail"
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "You are about to confirm this booking:"
+msgstr "Vous êtes sur le point de confirmer cette réservation:"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/calendar_event.py:0
+#, python-format
+msgid ""
+"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"\n"
+"- %s"
+msgstr ""
+"Vous n'êtes pas autorisé à modifier ces réservations car elles ont dépassé "
+"leurs délais de modification:\\n"
+"\n"
+"\"\\n"
+"\"\n"
+"\"- %s\""

From ed1eb351e19124f4245d0bca259ce27ecb5bcf2a Mon Sep 17 00:00:00 2001
From: Abdourahmane Wone <abdourahmanewone@gmail.com>
Date: Sat, 25 Sep 2021 21:09:44 +0000
Subject: [PATCH 25/64] Added translation using Weblate (French)

Currently translated at 1.4% (3 of 202 strings)

Translation: calendar-13.0/calendar-13.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking/fr/
---
 resource_booking/i18n/fr.po | 1197 +++++++++++++++++++++++++++++++++++
 1 file changed, 1197 insertions(+)
 create mode 100644 resource_booking/i18n/fr.po

diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
new file mode 100644
index 00000000..90a9a7f7
--- /dev/null
+++ b/resource_booking/i18n/fr.po
@@ -0,0 +1,1197 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* resource_booking
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-09-25 23:34+0000\n"
+"Last-Translator: Abdourahmane Wone <abdourahmanewone@gmail.com>\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d"
+msgstr "# %(id)d"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d - %(name)s"
+msgstr "# %(id)d - %(name)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "%(partner)s - %(type)s"
+msgstr "%(partenaire)s - %(type)s"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "%(partner)s - %(type)s - %(time)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#, python-format
+msgid "%(resources)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#, python-format
+msgid "%(resources)s (using calendar %(calendar)s)"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid ""
+"<br/>\n"
+"                        Error details:"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Reschedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Schedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                                Cancel this booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                            Cancel"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "<small class=\"text-right\">State:</small>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "<span>Preview</span>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Advice:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Booked resources:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Dates:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Duration:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Location:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Requested by:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid "<strong>The chosen schedule is no longer available.</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Type:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_warning
+msgid "Access warning"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__active
+msgid "Active"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "All times are displayed using this timezone:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__duration
+msgid ""
+"Amount of time that the resources will be booked and unavailable for others."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_combination_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Archived"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Are you sure?"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_attachment_count
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
+msgid "Auto assigned"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Auto-assigned:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Availability Calendar"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Available resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_combination
+msgid "Bookable resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_count
+msgid "Booking Count"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_count
+msgid "Booking count"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Booking ref."
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
+#, python-format
+msgid "Booking types"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: code:addons/resource_booking/models/resource_booking_type.py:0
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_action
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
+#: model:ir.ui.menu,name:resource_booking.resource_booking_menu
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_home
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_calendar
+#, python-format
+msgid "Bookings"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__booking_ids
+msgid "Bookings available for this type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Calendar Event"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Cancel"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__canceled
+msgid "Canceled"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid ""
+"Cannot schedule these bookings because no resources are selected for them:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid ""
+"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
+msgid ""
+"Choose how to auto-assign resource combinations. It has no effect if assiged"
+" manually."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Close"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__combination_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Combination"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_assignment
+msgid "Combination Assignment"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_combination_menu
+msgid "Combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__company_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+msgid "Company"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__company_id
+msgid "Company where this booking type is available."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_configuration_menu
+msgid "Configuration"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Confirm"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Confirm booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"Confirm that the requesting partner and yourself will attend the scheduled "
+"meeting."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__confirmed
+msgid "Confirmed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Current state of this booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__access_url
+msgid "Customer Portal URL"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Date"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Default reminders"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__categ_ids
+msgid "Default tags"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid "Define bookable resource combinations."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid "Define resource booking types."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid "Define resource bookings."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__duration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
+msgid "Duration"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_type_duration_positive
+msgid "Duration must be positive."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Duration:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Force a specific calendar, instead of combining the resources'."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Forced calendar"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Go back"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Group By"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+msgid "ID"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "If you cancel this booking:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid ""
+"Interval offered to start each resource booking. Also used as booking "
+"default duration."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Invite requesting partner to portal."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Involving me"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_is_follower
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_modifiable
+msgid "Is Modifiable"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_overdue
+msgid "Is Overdue"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will be unscheduled."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will disappear from your bookings list."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__name
+msgid "Leave empty to autogenerate a booking name."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
+msgid "Location"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_main_attachment_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_manager
+msgid "Manager"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Manually assigned:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Meeting"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
+msgid "Meeting confirmed for this booking."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Meeting defaults"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Meetings will be created with these reminders by default."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__categ_ids
+msgid "Meetings will be created with these tags by default."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Message and communication history"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_combination_required_if_event
+msgid "Missing resource booking combination."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__modifications_deadline
+msgid "Modifications Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_name
+msgid "Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_summary
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Next month"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "No free slots found this month."
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "No resource combinations available on %s"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_unique_meeting_id
+msgid "Only one event per resource booking can exist."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Open a calendar to schedule a meeting for this booking request."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__user_id
+msgid "Organizer"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__pending
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Pending"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__state
+msgid ""
+"Pending: No meeting scheduled.\n"
+"Scheduled: The requester has not confirmed attendance yet.\n"
+"Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
+"Canceled: Meeting removed, booking archived."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Please confirm this is really what you want."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_url
+msgid "Portal Access URL"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Previous month"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__random
+msgid "Randomly: order is not important"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_id
+msgid "Requester"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__requester_advice
+msgid "Requester Advice"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking
+#: model:ir.module.category,name:resource_booking.category_resource_booking
+msgid "Resource Booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Resource Booking Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type
+msgid "Resource Booking Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_main_menu
+msgid "Resource Bookings"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
+msgid "Resource Time Off"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_calendar
+msgid "Resource Working Time"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+msgid "Resource booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type_combination_rel
+msgid "Resource booking type relation with combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types where this combination is available."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_combination_action
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Resource combinations available for this type of bookings."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_resource
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__resource_ids
+#: model:ir.ui.menu,name:resource_booking.menu_resource_resource
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Resources"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_id
+msgid "Resources combination"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__resource_ids
+msgid "Resources that must be free to be booked together."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_user_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Restrict bookings to this schedule."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Schedule"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "Schedule booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__scheduled
+msgid "Scheduled"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Scheduled or confirmed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_token
+msgid "Security Token"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set pending"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set to pending"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Settings"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Share"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__sorted
+msgid "Sorted: pick the first one that is free"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start date"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Start:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__state
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "State"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__stop
+msgid "Stop"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__categ_ids
+msgid "Tags"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
+msgid ""
+"Text that will appear by default in portal invitation emails and in calendar"
+" views for scheduling."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "There are currently no bookings for your account."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid ""
+"These records categorize resource bookings and apply restrictions to them, "
+"such as available resource combinations, availability schedules and interval"
+" duration."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid ""
+"These records define resource combinations that can be booked together in "
+"specified schedules and intervals."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "This booking exceeded its modifications deadline."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"This will remove the associated meeting to unschedule the booking. Are you "
+"sure?"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid ""
+"Try next month\n"
+"                    <i class=\"fa fa-chevron-right\"/>"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
+msgid "Types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking and archive it."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking."
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_user
+msgid "User"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_user
+msgid "Users allowed to book resources"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_manager
+msgid "Users allowed to manage resource booking configurations."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
+msgid ""
+"When checked, resource combinations will be (un)assigned automatically based"
+" on their availability during the booking dates."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid ""
+"When scheduled, resources will be blocked. When pending, it means the "
+"requester didn't place the booking yet."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
+msgid ""
+"When this deadline has been exceeded, if a booking was not yet confirmed, it"
+" will be canceled automatically. Also, only booking managers will be able to"
+" unschedule or reschedule them. The value is expressed in hours."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__user_id
+msgid ""
+"Who organized this booking? Usually whoever created the record. It will "
+"appear as the calendar event organizer, when scheduled, and calendar "
+"notifications will be sent in his/her name."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
+msgid "Who requested this booking?"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
+msgid "Working Times"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "You are about to confirm this booking:"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/calendar_event.py:0
+#, python-format
+msgid ""
+"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"\n"
+"- %s"
+msgstr ""

From 19799dcb22ff854948a5d9cadd617e827fe6a177 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Mon, 27 Sep 2021 12:02:26 +0100
Subject: [PATCH 26/64] [FIX] resource_booking: autosubscribe resource partners

When some partner is a resource assigned to a booking, he should get auto-subscribed.

Inspired in https://github.com/OCA/calendar/pull/42, but I'm changing that behavior.

@Tecnativa TT32148
---
 resource_booking/models/resource_booking.py | 31 +++++++++++++++++----
 resource_booking/tests/test_backend.py      | 17 +++--------
 2 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 26d55a86..8eedead4 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -532,6 +532,31 @@ def name_get(self):
             new.append((id_, name))
         return new
 
+    def _message_auto_subscribe_followers(self, updated_values, default_subtype_ids):
+        """Auto-subscribe and notify resource partners."""
+        result = super()._message_auto_subscribe_followers(
+            updated_values, default_subtype_ids
+        )
+        combination = (
+            self.env["resource.booking.combination"]
+            .sudo()
+            .browse(updated_values.get("combination_id"))
+        )
+        resource_partners = combination.mapped(
+            "resource_ids.user_id.partner_id"
+        ).filtered("active")
+        for partner in resource_partners:
+            result.append(
+                (
+                    partner.id,
+                    default_subtype_ids,
+                    "mail.message_user_assigned"
+                    if partner != self.env.user.partner_id
+                    else False,
+                )
+            )
+        return result
+
     def _message_get_suggested_recipients(self):
         """Suggest related partners."""
         recipients = super()._message_get_suggested_recipients()
@@ -541,12 +566,6 @@ def _message_get_suggested_recipients(self):
                 partner=record.partner_id,
                 reason=self._fields["partner_id"].string,
             )
-            for partner in record.combination_id.resource_ids.user_id.partner_id:
-                record._message_add_suggested_recipient(
-                    recipients,
-                    partner=partner,
-                    reason=self._fields["combination_id"].string,
-                )
         return recipients
 
     def action_schedule(self):
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 460bee94..49b0f2d8 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -589,7 +589,7 @@ def test_attendee_not_autoassigned_autoconfirmed(self):
         # Combination was handpicked, so resource attendees are auto-confirmed
         self.assertEqual(resource_attendees.state, "accepted")
 
-    def test_suggested_recipients(self):
+    def test_suggested_and_subscribed_recipients(self):
         # Create a booking as a new user
         rb_user = new_test_user(
             self.env, login="rbu", groups="base.group_user,resource_booking.group_user"
@@ -607,21 +607,12 @@ def test_suggested_recipients(self):
                 }
             )
         )
-        # Organizer and creator must already be following
+        # Organizer, combination and creator must already be following
         self.assertEqual(
-            rb.message_partner_ids, rb_user.partner_id | self.users[1].partner_id
+            rb.message_partner_ids, rb_user.partner_id | self.users[:2].partner_id
         )
         # Requester and combination must be suggested
         self.assertEqual(
             rb._message_get_suggested_recipients(),
-            {
-                rb.id: [
-                    (rb.partner_id.id, "some customer", "Requester"),
-                    (
-                        self.users[0].partner_id.id,
-                        "User 0<user_0@example.com>",
-                        "Resources combination",
-                    ),
-                ]
-            },
+            {rb.id: [(rb.partner_id.id, "some customer", "Requester")]},
         )

From 9b0b8998e7c4c1558833dd6edecfe5459e62c698 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Tue, 28 Sep 2021 08:23:49 +0100
Subject: [PATCH 27/64] [FIX] resource_booking: correct assignment message

By using the upstream `mail.message_user_assigned` template, we were getting this exception:

```
odoo.addons.base.models.qweb.QWebException: 'resource.booking' object has no attribute 'user_id'
Traceback (most recent call last):
  File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/qweb.py", line 348, in _compiled_fn
    return compiled(self, append, new, options, log)
  File "<template>", line 1, in template_2601_10519
AttributeError: 'resource.booking' object has no attribute 'user_id'
```

So I provide a specific template for this kind of subscription notification, which doesn't use that `user_id` field. Besides, it explains better why you're getting it.

@Tecnativa TT32190
---
 resource_booking/__manifest__.py            |  3 +-
 resource_booking/data/mail.xml              | 28 ++++++++
 resource_booking/i18n/es.po                 | 18 +++++
 resource_booking/i18n/fr.po                 | 46 ++++++++----
 resource_booking/i18n/fr_FR.po              | 77 ++++++++++++---------
 resource_booking/i18n/resource_booking.pot  | 18 +++++
 resource_booking/models/resource_booking.py |  2 +-
 resource_booking/tests/test_backend.py      | 27 ++++----
 8 files changed, 159 insertions(+), 60 deletions(-)
 create mode 100644 resource_booking/data/mail.xml

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 6968170e..c35aefbb 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.3.1",
+    "version": "13.0.2.4.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
@@ -29,6 +29,7 @@
         "web_calendar_slot_duration",
     ],
     "data": [
+        "data/mail.xml",
         "security/resource_booking_security.xml",
         "security/ir.model.access.csv",
         "templates/assets.xml",
diff --git a/resource_booking/data/mail.xml b/resource_booking/data/mail.xml
new file mode 100644
index 00000000..d3bfd167
--- /dev/null
+++ b/resource_booking/data/mail.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2021 Tecnativa - Jairo Llopis
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<data>
+
+    <!-- Inspired in message_user_assigned -->
+    <template id="message_combination_assigned">
+        <p style="margin: 0px;">
+            Dear user,
+            <br />
+            You have been assigned to the
+            <t t-esc="model_description or 'document'" />
+            <t t-esc="object.name_get()[0][1]" />
+            because you belong to the chosen resource combination:
+            <t t-esc="object.combination_id.name_get()[0][1]" />.
+        </p>
+        <p style="margin-top: 24px; margin-bottom: 16px;">
+            <a
+                t-att-href="'/mail/view?model=%s&amp;res_id=%s' % (object._name, object.id)"
+                style="background-color:#875A7B; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px;"
+            >
+                View
+                <t t-esc="model_description or 'document'" />
+            </a>
+        </p>
+    </template>
+
+</data>
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index b9e2c778..496a8120 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -440,6 +440,14 @@ msgstr "URL del portal de cliente"
 msgid "Date"
 msgstr "Fecha"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid ""
+"Dear user,\n"
+"            <br/>\n"
+"            You have been assigned to the"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
 msgid "Default reminders"
@@ -1181,6 +1189,11 @@ msgid "Users allowed to manage resource booking configurations."
 msgstr ""
 "Usuarios que pueden gestionar la configuración de las reservas de recursos."
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "View"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
@@ -1259,6 +1272,11 @@ msgstr ""
 "\n"
 "- %s"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "because you belong to the chosen resource combination:"
+msgstr ""
+
 #~ msgid "Booking #"
 #~ msgstr "Reserva/cita nº"
 
diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
index 90a9a7f7..fb6e67fb 100644
--- a/resource_booking/i18n/fr.po
+++ b/resource_booking/i18n/fr.po
@@ -310,7 +310,8 @@ msgstr ""
 #: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid ""
-"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"Cannot schedule these bookings because they do not fit in their type or "
+"resources calendars, or because all resources are busy:\n"
 "\n"
 "- %s"
 msgstr ""
@@ -318,8 +319,8 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
 msgid ""
-"Choose how to auto-assign resource combinations. It has no effect if assiged"
-" manually."
+"Choose how to auto-assign resource combinations. It has no effect if assiged "
+"manually."
 msgstr ""
 
 #. module: resource_booking
@@ -414,6 +415,14 @@ msgstr ""
 msgid "Date"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid ""
+"Dear user,\n"
+"            <br/>\n"
+"            You have been assigned to the"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
 msgid "Default reminders"
@@ -1024,8 +1033,8 @@ msgstr ""
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
 msgid ""
-"Text that will appear by default in portal invitation emails and in calendar"
-" views for scheduling."
+"Text that will appear by default in portal invitation emails and in calendar "
+"views for scheduling."
 msgstr ""
 
 #. module: resource_booking
@@ -1037,8 +1046,8 @@ msgstr ""
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
 msgid ""
 "These records categorize resource bookings and apply restrictions to them, "
-"such as available resource combinations, availability schedules and interval"
-" duration."
+"such as available resource combinations, availability schedules and interval "
+"duration."
 msgstr ""
 
 #. module: resource_booking
@@ -1130,6 +1139,11 @@ msgstr ""
 msgid "Users allowed to manage resource booking configurations."
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "View"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
@@ -1145,8 +1159,8 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
 msgid ""
-"When checked, resource combinations will be (un)assigned automatically based"
-" on their availability during the booking dates."
+"When checked, resource combinations will be (un)assigned automatically based "
+"on their availability during the booking dates."
 msgstr ""
 
 #. module: resource_booking
@@ -1159,9 +1173,9 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
 msgid ""
-"When this deadline has been exceeded, if a booking was not yet confirmed, it"
-" will be canceled automatically. Also, only booking managers will be able to"
-" unschedule or reschedule them. The value is expressed in hours."
+"When this deadline has been exceeded, if a booking was not yet confirmed, it "
+"will be canceled automatically. Also, only booking managers will be able to "
+"unschedule or reschedule them. The value is expressed in hours."
 msgstr ""
 
 #. module: resource_booking
@@ -1191,7 +1205,13 @@ msgstr ""
 #: code:addons/resource_booking/models/calendar_event.py:0
 #, python-format
 msgid ""
-"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"You are not allowed to alter these bookings because they exceeded their "
+"modification deadlines:\n"
 "\n"
 "- %s"
 msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "because you belong to the chosen resource combination:"
+msgstr ""
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index 7b59f102..88d97d7d 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -328,7 +328,8 @@ msgstr ""
 #: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid ""
-"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"Cannot schedule these bookings because they do not fit in their type or "
+"resources calendars, or because all resources are busy:\n"
 "\n"
 "- %s"
 msgstr ""
@@ -341,8 +342,8 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
 msgid ""
-"Choose how to auto-assign resource combinations. It has no effect if assiged"
-" manually."
+"Choose how to auto-assign resource combinations. It has no effect if assiged "
+"manually."
 msgstr ""
 "Choisissez comment attribuer automatiquement les combinaisons de ressources. "
 "Il n'a aucun effet s'il est affecté manuellement."
@@ -441,6 +442,14 @@ msgstr "URL du portail client"
 msgid "Date"
 msgstr "Date"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid ""
+"Dear user,\n"
+"            <br/>\n"
+"            You have been assigned to the"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
 msgid "Default reminders"
@@ -822,12 +831,9 @@ msgid ""
 "Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
 "Canceled: Meeting removed, booking archived."
 msgstr ""
-"En attente: aucune réunion n'est prévue.\\n"
-"\n"
-"Prévu: le demandeur n'a pas encore confirmé sa participation.\\n"
-"\n"
-"Confirmé: réunion prévue et participation du demandeur confirmée.\\n"
-"\n"
+"En attente: aucune réunion n'est prévue.\\n\n"
+"Prévu: le demandeur n'a pas encore confirmé sa participation.\\n\n"
+"Confirmé: réunion prévue et participation du demandeur confirmée.\\n\n"
 "Annulé: réunion supprimée, réservation archivée."
 
 #. module: resource_booking
@@ -1049,12 +1055,9 @@ msgid ""
 "Today: Activity date is today\n"
 "Planned: Future activities."
 msgstr ""
-"Statut basé sur les activités\\n"
-"\n"
-"En retard: la date d'échéance est déjà dépassée\\n"
-"\n"
-"Aujourd'hui: la date de l'activité est aujourd'hui\\n"
-"\n"
+"Statut basé sur les activités\\n\n"
+"En retard: la date d'échéance est déjà dépassée\\n\n"
+"Aujourd'hui: la date de l'activité est aujourd'hui\\n\n"
 "Prévu: Activités futures."
 
 #. module: resource_booking
@@ -1071,8 +1074,8 @@ msgstr "Mots clés"
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
 msgid ""
-"Text that will appear by default in portal invitation emails and in calendar"
-" views for scheduling."
+"Text that will appear by default in portal invitation emails and in calendar "
+"views for scheduling."
 msgstr ""
 "Texte qui apparaîtra par défaut dans les e-mails d'invitation au portail et "
 "dans les vues du calendrier pour la planification."
@@ -1086,8 +1089,8 @@ msgstr "Il n'y a actuellement aucune réservation pour votre compte."
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
 msgid ""
 "These records categorize resource bookings and apply restrictions to them, "
-"such as available resource combinations, availability schedules and interval"
-" duration."
+"such as available resource combinations, availability schedules and interval "
+"duration."
 msgstr ""
 "Ces enregistrements catégorisent les réservations de ressources et leur "
 "appliquent des restrictions, telles que les combinaisons de ressources "
@@ -1123,8 +1126,7 @@ msgid ""
 "Try next month\n"
 "                    <i class=\"fa fa-chevron-right\"/>"
 msgstr ""
-"Essayez le mois prochain\\n"
-"\n"
+"Essayez le mois prochain\\n\n"
 "                     <i class=\"fa-fa-chevron-droit\"/>"
 
 #. module: resource_booking
@@ -1191,6 +1193,11 @@ msgstr ""
 "Utilisateurs autorisés à gérer les configurations de réservation de "
 "ressources."
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "View"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
@@ -1206,11 +1213,11 @@ msgstr "Historique des communications du site Web"
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
 msgid ""
-"When checked, resource combinations will be (un)assigned automatically based"
-" on their availability during the booking dates."
+"When checked, resource combinations will be (un)assigned automatically based "
+"on their availability during the booking dates."
 msgstr ""
-"Lorsqu'elles sont cochées, les combinaisons de ressources seront (dé)"
-"attribuées automatiquement en fonction de leur disponibilité pendant les "
+"Lorsqu'elles sont cochées, les combinaisons de ressources seront "
+"(dé)attribuées automatiquement en fonction de leur disponibilité pendant les "
 "dates de réservation."
 
 #. module: resource_booking
@@ -1226,9 +1233,9 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
 msgid ""
-"When this deadline has been exceeded, if a booking was not yet confirmed, it"
-" will be canceled automatically. Also, only booking managers will be able to"
-" unschedule or reschedule them. The value is expressed in hours."
+"When this deadline has been exceeded, if a booking was not yet confirmed, it "
+"will be canceled automatically. Also, only booking managers will be able to "
+"unschedule or reschedule them. The value is expressed in hours."
 msgstr ""
 "Passé ce délai, si une réservation n'a pas encore été confirmée, elle sera "
 "automatiquement annulée. De plus, seuls les gestionnaires de réservation "
@@ -1265,13 +1272,17 @@ msgstr "Vous êtes sur le point de confirmer cette réservation:"
 #: code:addons/resource_booking/models/calendar_event.py:0
 #, python-format
 msgid ""
-"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"You are not allowed to alter these bookings because they exceeded their "
+"modification deadlines:\n"
 "\n"
 "- %s"
 msgstr ""
 "Vous n'êtes pas autorisé à modifier ces réservations car elles ont dépassé "
-"leurs délais de modification:\\n"
-"\n"
-"\"\\n"
-"\"\n"
+"leurs délais de modification:\\n\n"
+"\"\\n\"\n"
 "\"- %s\""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "because you belong to the chosen resource combination:"
+msgstr ""
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index dbc5fab2..80cbdccf 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -411,6 +411,14 @@ msgstr ""
 msgid "Date"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid ""
+"Dear user,\n"
+"            <br/>\n"
+"            You have been assigned to the"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
 msgid "Default reminders"
@@ -1127,6 +1135,11 @@ msgstr ""
 msgid "Users allowed to manage resource booking configurations."
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "View"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
@@ -1192,3 +1205,8 @@ msgid ""
 "\n"
 "- %s"
 msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "because you belong to the chosen resource combination:"
+msgstr ""
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 8eedead4..55b34f92 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -550,7 +550,7 @@ def _message_auto_subscribe_followers(self, updated_values, default_subtype_ids)
                 (
                     partner.id,
                     default_subtype_ids,
-                    "mail.message_user_assigned"
+                    "resource_booking.message_combination_assigned"
                     if partner != self.env.user.partner_id
                     else False,
                 )
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 49b0f2d8..286e05b2 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -1,6 +1,7 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 from datetime import date, datetime
+from unittest.mock import patch
 
 from freezegun import freeze_time
 from pytz import utc
@@ -594,19 +595,21 @@ def test_suggested_and_subscribed_recipients(self):
         rb_user = new_test_user(
             self.env, login="rbu", groups="base.group_user,resource_booking.group_user"
         )
-        rb = (
-            self.env["resource.booking"]
-            .with_user(rb_user)
-            .create(
-                {
-                    "partner_id": self.partner.id,
-                    "type_id": self.rbt.id,
-                    "combination_auto_assign": False,
-                    "combination_id": self.rbcs[0].id,
-                    "user_id": self.users[1].id,
-                }
+        # Enable auto-subscription messaging
+        with patch.object(self.env.registry, "ready", True):
+            rb = (
+                self.env["resource.booking"]
+                .with_user(rb_user)
+                .create(
+                    {
+                        "partner_id": self.partner.id,
+                        "type_id": self.rbt.id,
+                        "combination_auto_assign": False,
+                        "combination_id": self.rbcs[0].id,
+                        "user_id": self.users[1].id,
+                    }
+                )
             )
-        )
         # Organizer, combination and creator must already be following
         self.assertEqual(
             rb.message_partner_ids, rb_user.partner_id | self.users[:2].partner_id

From e30eb7d34f0ca65af08a81e49ddc30e270989c33 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Wed, 20 Oct 2021 10:10:05 +0100
Subject: [PATCH 28/64] [FIX] resource_booking: suggest requester to messaging

Forward-port of https://github.com/OCA/calendar/pull/51.

Includes a modification for the migration script of 13.0.1.0.0 (if you migrate from v12, you'll need it; if you migrate from v13, it will be automatic).

@Tecnativa TT31901
---
 resource_booking/__manifest__.py                       |  2 +-
 .../migrations/13.0.1.0.0/noupdate_changes.xml         |  6 ++++++
 .../security/resource_booking_security.xml             | 10 ++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index c35aefbb..70315de0 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.4.0",
+    "version": "13.0.2.5.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml b/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
index 6444f670..ba69b8ec 100644
--- a/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
+++ b/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
@@ -8,4 +8,10 @@
             name="domain_force"
         >['|', ('company_id','=',False), ('company_id','in',company_ids)]</field>
     </record>
+
+    <record id="rule_resource_booking_company" model="ir.rule">
+        <field
+            name="domain_force"
+        >['|', ('type_id.company_id', '=', False), ('type_id.company_id', 'in', company_ids)]</field>
+    </record>
 </data>
diff --git a/resource_booking/security/resource_booking_security.xml b/resource_booking/security/resource_booking_security.xml
index 1b19d69a..e30cd8f1 100644
--- a/resource_booking/security/resource_booking_security.xml
+++ b/resource_booking/security/resource_booking_security.xml
@@ -31,6 +31,16 @@
                 name="domain_force"
             >['|', ('company_id','=',False), ('company_id','in',company_ids)]</field>
         </record>
+
+        <record id="rule_resource_booking_company" model="ir.rule">
+            <field name="name">Resource booking multi company rule</field>
+            <field name="model_id" ref="model_resource_booking" />
+            <field name="global" eval="True" />
+            <field
+                name="domain_force"
+            >['|', ('type_id.company_id', '=', False), ('type_id.company_id', 'in', company_ids)]</field>
+        </record>
+
         <record id="rule_resource_booking_portal" model="ir.rule">
             <field name="name">Resource booking portal rule</field>
             <field name="model_id" ref="model_resource_booking" />

From 24f9c336e2920a9f07f45259c178035f570198de Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 22 Oct 2021 11:52:00 +0100
Subject: [PATCH 29/64] [FIX] resource_booking: allow creating if type has
 categories

Without this patch, if you create a resource booking for a type that has categories (tags), it will fail with `CacheMiss` error.

@Tecnativa TT32552
---
 resource_booking/__manifest__.py            |  2 +-
 resource_booking/models/resource_booking.py | 12 +++---------
 resource_booking/tests/test_backend.py      | 10 ++++++++++
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 70315de0..ea421f1c 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.5.0",
+    "version": "13.0.2.5.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 55b34f92..44d33c4b 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -40,13 +40,7 @@ class ResourceBooking(models.Model):
         ondelete="set null",
         help="Meeting confirmed for this booking.",
     )
-    categ_ids = fields.Many2many(
-        string="Tags",
-        comodel_name="calendar.event.type",
-        compute="_compute_categ_ids",
-        store=True,
-        readonly=False,
-    )
+    categ_ids = fields.Many2many(string="Tags", comodel_name="calendar.event.type")
     combination_id = fields.Many2one(
         comodel_name="resource.booking.combination",
         string="Resources combination",
@@ -159,8 +153,8 @@ def _compute_access_url(self):
             one.access_url = "/my/bookings/%d" % one.id
         return result
 
-    @api.depends("type_id")
-    def _compute_categ_ids(self):
+    @api.onchange("type_id")
+    def _onchange_type_set_categ_ids(self):
         """Copy default tags from RBT when changing it."""
         for one in self:
             if one.type_id:
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 286e05b2..70eacfc1 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -619,3 +619,13 @@ def test_suggested_and_subscribed_recipients(self):
             rb._message_get_suggested_recipients(),
             {rb.id: [(rb.partner_id.id, "some customer", "Requester")]},
         )
+
+    def test_creating_rbt_has_tags(self):
+        """Creating booking works if type has tags."""
+        categ = self.env["calendar.event.type"].create({"name": "test tag"})
+        self.rbt.categ_ids = categ
+        rb_f = Form(self.env["resource.booking"])
+        rb_f.partner_id = self.partner
+        rb_f.type_id = self.rbt
+        rb = rb_f.save()
+        self.assertEqual(rb.categ_ids, categ)

From 1882f798d16d3ff8264fb46940747dd6f18dbad4 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Tue, 26 Oct 2021 09:15:01 +0100
Subject: [PATCH 30/64] [FIX] resource_booking: free meetings by default

If I'm creating bookings for my colleagues, I'll be the owner of all of the meetings. But that doesn't mean I'll be busy.

With this patch, only when I'm a booked resource will the event be set as busy.

@Tecnativa TT32666
---
 resource_booking/__manifest__.py            |  2 +-
 resource_booking/models/resource_booking.py |  6 +++
 resource_booking/tests/test_backend.py      | 47 ++++++++++++++++++++-
 3 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index ea421f1c..093ab08d 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.5.1",
+    "version": "13.0.2.5.2",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 44d33c4b..779aa04e 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -300,6 +300,12 @@ def _sync_meeting(self):
                     start=one.start,
                     stop=one.stop,
                     user_id=one.user_id.id,
+                    # If you're not booked, you're free
+                    show_as=(
+                        "busy"
+                        if self.env.user.partner_id in resource_partners
+                        else "free"
+                    ),
                     # These 2 avoid creating event as activity
                     res_model_id=False,
                     res_id=False,
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 70eacfc1..9fd3d201 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -15,7 +15,7 @@
 _2dt = fields.Datetime.to_datetime
 
 
-@freeze_time("2021-02-26 09:00:00", tick=True)
+@freeze_time("2021-02-26 09:00:00", tick=True)  # Last Friday of February
 class BackendCase(SavepointCase):
     @classmethod
     def setUpClass(cls):
@@ -629,3 +629,48 @@ def test_creating_rbt_has_tags(self):
         rb_f.type_id = self.rbt
         rb = rb_f.save()
         self.assertEqual(rb.categ_ids, categ)
+
+    def test_event_show_as_free(self):
+        """Don't mind about event owner.
+
+        Here I'll create 2 overlapping events. Since I create both, I'll be the
+        owner of both automatically. However, there are 2 RBC available (one is
+        me), so I still should be able to create 2 events.
+        """
+        env = self.env(user=self.users[0])
+        env.user.groups_id = self.env.ref("base.group_user") | self.env.ref(
+            "resource_booking.group_user"
+        )
+        # I'm the last option
+        self.rbt.combination_assignment = "sorted"
+        self.rbt.combination_rel_ids[0].sequence = 10
+        # Create one long event on Monday, where there are 2 RBC available (one is me)
+        rb_f = Form(env["resource.booking"])
+        rb_f.type_id = self.rbt
+        rb_f.start = "2021-03-01 09:00:00"
+        rb_f.duration = 1
+        rb_f.partner_id = self.partner
+        rb1 = rb_f.save()
+        # I'm not booked, so I'm free
+        self.assertEqual(rb1.combination_id, self.rbcs[2])
+        self.assertEqual(rb1.meeting_id.show_as, "free")
+        # Create another event within the previous one
+        rb_f = Form(env["resource.booking"])
+        rb_f.type_id = self.rbt
+        rb_f.start = "2021-03-01 09:00:00"
+        rb_f.duration = 1.5
+        rb_f.partner_id = self.partner.copy()
+        # Saving works because I'm free
+        rb2 = rb_f.save()
+        # I'm booked this time, so I'm busy
+        self.assertEqual(rb2.combination_id, self.rbcs[0])
+        self.assertEqual(rb2.meeting_id.show_as, "busy")
+        # But if I'm not free for 1st RB, it will fail without available resources
+        rb1.meeting_id.show_as = "busy"
+        rb_f = Form(env["resource.booking"])
+        rb_f.type_id = self.rbt
+        rb_f.start = "2021-03-01 09:30:00"
+        rb_f.duration = 0.5
+        rb_f.partner_id = self.partner.copy()
+        with self.assertRaises(AssertionError):
+            rb_f.save()

From 8b2205cc40b49e27c4789b618f5c50597aa75117 Mon Sep 17 00:00:00 2001
From: jguenat <julien.guenat@geckoescalade.ch>
Date: Sat, 30 Oct 2021 18:06:39 +0200
Subject: [PATCH 31/64] [FIX]start_next_previous

---
 resource_booking/__manifest__.py      | 2 +-
 resource_booking/templates/portal.xml | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 093ab08d..b2465bac 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.5.2",
+    "version": "13.0.2.6.0",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 577a5c44..c289d615 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -18,11 +18,13 @@
         <t t-set="confirm_url" t-value="booking.get_portal_url(suffix='/confirm')" />
         <t t-set="date_format" t-value="res_lang.date_format" />
         <t t-set="time_format" t-value="res_lang.time_format.replace(':%S', '')" />
+        <t t-set="start_next" t-value="start + relativedelta(months=1)" />
+        <t t-set="start_previous" t-value="start - relativedelta(months=1)" />
         <div class="o_booking_calendar">
             <div class="alert alert-danger" t-if="not slots">
                 No free slots found this month.
                 <a
-                    t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))"
+                    t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_next.year, start_next.month))"
                     class="alert-link"
                 >
                     Try next month
@@ -43,7 +45,7 @@
                         <th class="text-left">
                             <a
                                 t-if="start > now"
-                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month - 1))"
+                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_previous.year, start_previous.month))"
                                 class="btn btn-secondary"
                                 title="Previous month"
                             >
@@ -57,7 +59,7 @@
                         />
                         <th class="text-right">
                             <a
-                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start.year, start.month + 1))"
+                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_next.year, start_next.month))"
                                 class="btn btn-secondary"
                                 title="Next month"
                             >

From 35f303f82f15d53bc48fdadc7dd2b364feea36ec Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Fri, 5 Nov 2021 10:20:55 +0000
Subject: [PATCH 32/64] [IMP] resource_booking: faster tests

Apply lessons from https://youtu.be/lT___hG110Q?t=23285 and disable unnecessary mail stuff.

Before:

    odoo.addons.resource_booking.tests.test_backend tested in 16.18s, 9124 queries
    odoo.addons.resource_booking.tests.test_portal tested in 16.42s, 6685 queries

After:

    odoo.addons.resource_booking.tests.test_backend tested in 13.68s, 7873 queries
    odoo.addons.resource_booking.tests.test_portal tested in 15.17s, 5972 queries

@Tecnativa TT31324
---
 resource_booking/__manifest__.py       | 2 +-
 resource_booking/tests/common.py       | 6 +++++-
 resource_booking/tests/test_backend.py | 5 ++++-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index b2465bac..eb75c58b 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.6.0",
+    "version": "13.0.2.6.1",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
index e6183529..889257e2 100644
--- a/resource_booking/tests/common.py
+++ b/resource_booking/tests/common.py
@@ -4,7 +4,11 @@
 
 def create_test_data(obj):
     """Create test data for a case."""
-    obj.env = obj.env(context={"tz": "UTC"})
+    obj.env = obj.env(
+        context=dict(
+            obj.env.context, tracking_disable=True, no_reset_password=True, tz="UTC"
+        )
+    )
     # Create one resource.calendar available on Mondays, another one on
     # Tuesdays, and another one on Mondays and Tuesdays; in that order
     attendances = [
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 9fd3d201..90ee6a6e 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -591,6 +591,7 @@ def test_attendee_not_autoassigned_autoconfirmed(self):
         self.assertEqual(resource_attendees.state, "accepted")
 
     def test_suggested_and_subscribed_recipients(self):
+        self.env = self.env(context=dict(self.env.context, tracking_disable=False))
         # Create a booking as a new user
         rb_user = new_test_user(
             self.env, login="rbu", groups="base.group_user,resource_booking.group_user"
@@ -637,7 +638,9 @@ def test_event_show_as_free(self):
         owner of both automatically. However, there are 2 RBC available (one is
         me), so I still should be able to create 2 events.
         """
-        env = self.env(user=self.users[0])
+        env = self.env(
+            user=self.users[0], context=dict(self.env.context, tracking_disable=False)
+        )
         env.user.groups_id = self.env.ref("base.group_user") | self.env.ref(
             "resource_booking.group_user"
         )

From d88b9774cd1ca13b356efe8dd9586fbfd744a523 Mon Sep 17 00:00:00 2001
From: Jairo Llopis <jairo.llopis@tecnativa.com>
Date: Mon, 8 Nov 2021 10:44:05 +0000
Subject: [PATCH 33/64] [FIX] Avoid sending notifications when public user

Public users usually don't have an email, so they hit [this error][1].

No test added because anyways the tests in `website_sale_resource_booking` already fail without this patch, and it's hard to find a use case without it.

@Tecnativa TT31328

[1]: https://github.com/odoo/odoo/blob/e7dd314e53a4260dd1494cbcb7dcef1c407e2a8a/addons/mail/models/mail_message.py#L36
---
 resource_booking/__manifest__.py          | 2 +-
 resource_booking/models/calendar_event.py | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index eb75c58b..2e3d9945 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.6.1",
+    "version": "13.0.2.6.2",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index 682ad7ea..b7f8b02e 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -80,6 +80,9 @@ def create_attendees(self):
                 continue
             if attendee.partner_id in rb.combination_id.resource_ids.user_id.partner_id:
                 attendee.state = "accepted"
+        # Don't send notifications if you're a public user
+        if self.env.user._is_public():
+            return result
         # Send invitations like upstream would have done
         to_notify = new_attendees.filtered(lambda a: a.email != self.env.user.email)
         if to_notify and not self.env.context.get("detaching"):

From 2078fbc23d5b7501b484a46ae5bc501880586228 Mon Sep 17 00:00:00 2001
From: david <david.vidal@tecnativa.com>
Date: Mon, 14 Mar 2022 15:05:32 +0100
Subject: [PATCH 34/64] [FIX] resource_booking: performance

- Calendar view performance: We need a stop parameter. Otherwise, the calendar view
  could be trying to render tons of records making the client's browser have a hard time.

- Performance with recurrent events:
  `rrule` isn't very performant on iterations. This is used on calendar
  events to compute the virtual events set.

  We want to avoid calling it too much.

  Real case with website_sale_resource_booking (thousands of virtual events):

  before: /shop/booking/<id>/schedule: ~25 seconds
  after: /shop/booking/<id>/schedule: ~6 seconds

  before: /shop/booking/<id>/confirm: ~20 seconds
  after: /shop/booking/<id>/confirm: ~3 seconds

  before: /shop/checkout: ~18 seconds
  after: /shop/checkout: ~2 seconds

  There's room for improvement anyway

- Restrict the events which our resource is participating in to avoid
  loading recurrent events as much as possible. This is really more
  performant in v13. A simple showcase:

  >>> timeit(
          lambda: env["calendar.event"].with_context(active_test=True).search(
              [("partner_ids", "=", partner.id)]
          ), number=1
      )
  0.06541907804785296
  >>> timeit(
          lambda: env["calendar.event"].with_context(active_test=True).search([])
          , number=1
      )
  1.194712486001663
---
 resource_booking/__manifest__.py                  |  2 +-
 resource_booking/models/resource_booking.py       |  5 ++++-
 resource_booking/models/resource_calendar.py      | 14 +++++++++++---
 resource_booking/views/resource_booking_views.xml |  1 +
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 2e3d9945..2ba04fc2 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -4,7 +4,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.6.2",
+    "version": "13.0.2.6.5",
     "development_status": "Beta",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 779aa04e..a6d282ed 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -505,7 +505,10 @@ def create(self, vals_list):
 
     def write(self, vals):
         """Sync booking with meeting if needed."""
-        result = super().write(vals)
+        # On a database with lots of recurrent calendar events we could get serious
+        # performance downgrades. As we'll be computing them with _sync_meeting later
+        # we'll be avoiding triggering on the super call (i.e. compute methods)
+        result = super(ResourceBooking, self.with_context(virtual_id=False)).write(vals)
         self._sync_meeting()
         return result
 
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
index 2cd43cfa..5621e28c 100644
--- a/resource_booking/models/resource_calendar.py
+++ b/resource_booking/models/resource_calendar.py
@@ -46,13 +46,21 @@ def _calendar_event_busy_intervals(
             and resource.user_id.active
             and resource.user_id
         )
+        # We want to avoid unnecessary queries, which can be quite unperformant when
+        # there are lots of recurrent events.
+        if not resource and not resource_user:
+            return Intervals(intervals)
         # Simple domain to get all possibly conflicting events in a single
         # query; this reduces DB calls and helps the underlying recurring
         # system (in calendar.event) to work smoothly
+        domain = [("start", "<=", end_dt), ("stop", ">=", start_dt)]
+        # Anyway up to this version, is more performant to restrict as much as possible
+        # the events to avoid recurrent events.
+        # TODO: in v14 we should test which approach remains the most performant
+        if resource_user:
+            domain += [("partner_ids", "=", resource_user.partner_id.id)]
         all_events = (
-            self.env["calendar.event"]
-            .with_context(active_test=True)
-            .search([("start", "<=", end_dt), ("stop", ">=", start_dt)])
+            self.env["calendar.event"].with_context(active_test=True).search(domain)
         )
         for event in all_events:
             real_event = self.env["calendar.event"].browse(
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 1f626d91..87226128 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -10,6 +10,7 @@
             <calendar
                 string="Bookings"
                 date_start="start"
+                date_stop="stop"
                 date_delay="duration"
                 quick_add="false"
                 color="combination_id"

From c9aedbdfe0cdb7b6d3baadce6686dfa2e90de1c1 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Sun, 23 Oct 2022 12:21:55 +0200
Subject: [PATCH 35/64] [IMP] resource_booking: pre-commit stuff

---
 resource_booking/models/resource_booking.py | 6 +++++-
 resource_booking/tests/test_backend.py      | 3 ++-
 resource_booking/tests/test_portal.py       | 3 ++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index a6d282ed..b9aa04ca 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -86,7 +86,11 @@ class ResourceBooking(models.Model):
             "and calendar notifications will be sent in his/her name."
         ),
     )
-    location = fields.Char(compute="_compute_location", readonly=False, store=True,)
+    location = fields.Char(
+        compute="_compute_location",
+        readonly=False,
+        store=True,
+    )
     requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
     is_modifiable = fields.Boolean(compute="_compute_is_modifiable")
     is_overdue = fields.Boolean(compute="_compute_is_overdue")
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 90ee6a6e..0c19fd0b 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -138,7 +138,8 @@ def test_booking_from_calendar_view(self):
         button_context["default_duration"] = 1.5
         booking_form = Form(
             self.env["resource.booking"].with_context(
-                **button_context, default_start="2021-03-01 08:00:00",
+                **button_context,
+                default_start="2021-03-01 08:00:00",
             )
         )
         # This might seem redundant, but makes sure onchanges don't mess stuff
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 73466626..1cc4af4f 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -200,7 +200,8 @@ def test_portal_scheduling_conflict(self):
         for attendee in booking_public.meeting_id.attendee_ids:
             self.assertTrue(attendee.partner_id)
             self.assertIn(
-                attendee.partner_id, self.partner | self.users[0].partner_id,
+                attendee.partner_id,
+                self.partner | self.users[0].partner_id,
             )
             self.assertEqual(
                 attendee.state,

From 1951c18587565efe258e49f9e3cb2778e07a5267 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Mon, 24 Oct 2022 08:31:09 +0200
Subject: [PATCH 36/64] [MIG] resource_booking: Migration to 14.0

- Standard procedure
- No more virtual ids
- Adapt tests
- FIX: Proper show_as meeting generation
- IMP: Add name to tree view

TT32344

[UPD] Update resource_booking.pot

[UPD] README.rst
---
 resource_booking/README.rst                   | 22 ++---
 resource_booking/__manifest__.py              |  9 +-
 resource_booking/controllers/portal.py        |  5 +-
 resource_booking/i18n/resource_booking.pot    | 29 +++++-
 .../13.0.1.0.0/noupdate_changes.xml           | 17 ----
 .../migrations/13.0.1.0.0/post-migrate.py     | 11 ---
 .../migrations/13.0.2.0.0/pre-migrate.py      | 55 -----------
 resource_booking/models/calendar_event.py     | 92 ++++++++++---------
 resource_booking/models/resource_booking.py   | 11 +--
 resource_booking/models/resource_calendar.py  |  9 +-
 .../static/description/index.html             |  8 +-
 resource_booking/tests/test_backend.py        | 25 +++--
 .../views/resource_booking_views.xml          |  1 +
 13 files changed, 117 insertions(+), 177 deletions(-)
 delete mode 100644 resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
 delete mode 100644 resource_booking/migrations/13.0.1.0.0/post-migrate.py
 delete mode 100644 resource_booking/migrations/13.0.2.0.0/pre-migrate.py

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 1a598394..b322e6c8 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,20 +7,20 @@ Resource booking
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
     :target: https://odoo-community.org/page/development-status
-    :alt: Beta
+    :alt: Production/Stable
 .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github
-    :target: https://github.com/OCA/calendar/tree/13.0/resource_booking
+    :target: https://github.com/OCA/calendar/tree/14.0/resource_booking
     :alt: OCA/calendar
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking
+    :target: https://translation.odoo-community.org/projects/calendar-14-0/calendar-14-0-resource_booking
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/279/13.0
+    :target: https://runbot.odoo-community.org/runbot/279/14.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -167,7 +167,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -197,14 +197,14 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
 mission is to support the collaborative development of Odoo features and
 promote its widespread use.
 
-.. |maintainer-Yajo| image:: https://github.com/Yajo.png?size=40px
-    :target: https://github.com/Yajo
-    :alt: Yajo
+.. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
+    :target: https://github.com/pedrobaeza
+    :alt: pedrobaeza
 
 Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
-|maintainer-Yajo| 
+|maintainer-pedrobaeza| 
 
-This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/13.0/resource_booking>`_ project on GitHub.
+This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/14.0/resource_booking>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 2ba04fc2..fa5bee57 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -1,15 +1,16 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2022 Tecnativa - Pedro M. Baeza
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "13.0.2.6.5",
-    "development_status": "Beta",
+    "version": "14.0.1.0.0",
+    "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
     "author": "Tecnativa, Odoo Community Association (OCA)",
-    "maintainers": ["Yajo"],
+    "maintainers": ["pedrobaeza"],
     "license": "AGPL-3",
     "application": True,
     "installable": True,
@@ -17,8 +18,6 @@
         "python": [
             # Used implicitly
             "cssselect",
-            # Only for tests
-            "freezegun",
         ],
     },
     "depends": [
diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
index 3f0f2e9b..6d529f8b 100644
--- a/resource_booking/controllers/portal.py
+++ b/resource_booking/controllers/portal.py
@@ -1,4 +1,5 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2022 Tecnativa - Pedro M. Baeza
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from datetime import datetime
@@ -125,9 +126,7 @@ def portal_booking_cancel(self, booking_id, access_token=None, **kwargs):
     )
     def portal_booking_confirm(self, booking_id, access_token, when, **kwargs):
         """Confirm a booking in a given datetime."""
-        booking_sudo = self._get_booking_sudo(booking_id, access_token).with_context(
-            autoconfirm_booking_requester=True
-        )
+        booking_sudo = self._get_booking_sudo(booking_id, access_token)
         when_tz_aware = isoparse(when)
         when_naive = datetime.utcfromtimestamp(when_tz_aware.timestamp())
         try:
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 80cbdccf..2506635a 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
 "Report-Msgid-Bugs-To: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -177,6 +177,12 @@ msgstr ""
 msgid "Activity State"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "All times are displayed using this timezone:"
@@ -445,10 +451,13 @@ msgid "Define resource bookings."
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr ""
 
@@ -486,6 +495,12 @@ msgstr ""
 msgid "Followers (Partners)"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
 msgid "Force a specific calendar, instead of combining the resources'."
@@ -508,10 +523,13 @@ msgid "Group By"
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -592,10 +610,13 @@ msgid "It will disappear from your bookings list."
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr ""
 
@@ -695,6 +716,12 @@ msgstr ""
 msgid "Modifications Deadline"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__my_activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
diff --git a/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml b/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
deleted file mode 100644
index ba69b8ec..00000000
--- a/resource_booking/migrations/13.0.1.0.0/noupdate_changes.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!-- Copyright 2021 Tecnativa - Jairo Llopis
-     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-<data>
-    <!-- Updated security rules -->
-    <record id="rule_resource_booking_type_company" model="ir.rule">
-        <field
-            name="domain_force"
-        >['|', ('company_id','=',False), ('company_id','in',company_ids)]</field>
-    </record>
-
-    <record id="rule_resource_booking_company" model="ir.rule">
-        <field
-            name="domain_force"
-        >['|', ('type_id.company_id', '=', False), ('type_id.company_id', 'in', company_ids)]</field>
-    </record>
-</data>
diff --git a/resource_booking/migrations/13.0.1.0.0/post-migrate.py b/resource_booking/migrations/13.0.1.0.0/post-migrate.py
deleted file mode 100644
index 16b091ae..00000000
--- a/resource_booking/migrations/13.0.1.0.0/post-migrate.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2021 Tecnativa - Jairo Llopis
-# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-
-from openupgradelib import openupgrade
-
-
-@openupgrade.migrate()
-def migrate(env, version):
-    openupgrade.load_data(
-        env.cr, "resource_booking", "migrations/13.0.1.0.0/noupdate_changes.xml"
-    )
diff --git a/resource_booking/migrations/13.0.2.0.0/pre-migrate.py b/resource_booking/migrations/13.0.2.0.0/pre-migrate.py
deleted file mode 100644
index 8e38ade4..00000000
--- a/resource_booking/migrations/13.0.2.0.0/pre-migrate.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2021 Tecnativa - Jairo Llopis
-# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-from openupgradelib import openupgrade
-
-
-def remove_start_stop_together_constraint(cr):
-    """Remove old unnecessary constraint.
-
-    This one is no longer needed because `stop` is now computed and readonly,
-    so it will always have or not have value automatically.
-    """
-    openupgrade.logged_query(
-        cr,
-        """
-            ALTER TABLE resource_booking
-            DROP CONSTRAINT IF EXISTS resource_booking_start_stop_together
-        """,
-    )
-
-
-def fill_resource_booking_duration(env):
-    """Pre-create and pre-fill resource.booking duration."""
-    openupgrade.add_fields(
-        env,
-        [
-            (
-                "duration",
-                "resource.booking",
-                "resource_booking",
-                "float",
-                None,
-                "resource_booking",
-                None,
-            )
-        ],
-    )
-    openupgrade.logged_query(
-        env.cr,
-        """
-            UPDATE resource_booking rb
-            SET duration = COALESCE(
-                -- See https://stackoverflow.com/a/952600/1468388
-                EXTRACT(EPOCH FROM rb.stop - rb.start) / 3600,
-                rbt.duration
-            )
-            FROM resource_booking_type rbt
-            WHERE rb.type_id = rbt.id
-        """,
-    )
-
-
-@openupgrade.migrate()
-def migrate(env, version):
-    remove_start_stop_together_constraint(env.cr)
-    fill_resource_booking_duration(env)
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index b7f8b02e..c3fd7851 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -1,4 +1,5 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2022 Tecnativa - Pedro M. Baeza
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from odoo import _, api, fields, models
@@ -6,7 +7,6 @@
 
 
 class CalendarEvent(models.Model):
-    _name = "calendar.event"
     _inherit = "calendar.event"
 
     # One2one field, actually
@@ -36,10 +36,10 @@ def _validate_booking_modifications(self):
                 % "\n- ".join(frozen.mapped("display_name"))
             )
 
-    def unlink(self, can_be_deleted=True):
+    def unlink(self):
         """Check you're allowed to unschedule it."""
         self._validate_booking_modifications()
-        return super().unlink(can_be_deleted=can_be_deleted)
+        return super().unlink()
 
     def write(self, vals):
         """Check you're allowed to reschedule it."""
@@ -52,44 +52,26 @@ def write(self, vals):
         rescheduled._validate_booking_modifications()
         return result
 
-    def create_attendees(self):
-        """Autoconfirm resource attendees if preselected."""
-        old_attendees = self.attendee_ids
-        result = super(
-            # This context avoids sending invitations to new attendees
-            CalendarEvent,
-            self.with_context(detaching=True),
-        ).create_attendees()
-        new_attendees = (self.attendee_ids - old_attendees).with_context(
-            self.env.context
-        )
-        for attendee in new_attendees:
-            # No need to change state if it's already done
-            if attendee.state in {"accepted", "declined"}:
-                continue
-            rb = attendee.event_id.resource_booking_ids
-            # Confirm requester attendee always if requested
-            if (
-                self.env.context.get("autoconfirm_booking_requester")
-                and attendee.partner_id == rb.partner_id
-            ):
-                attendee.state = "accepted"
-                continue
-            # Auto-confirm if attendee comes from a handpicked combination
-            if rb.combination_auto_assign:
-                continue
-            if attendee.partner_id in rb.combination_id.resource_ids.user_id.partner_id:
-                attendee.state = "accepted"
-        # Don't send notifications if you're a public user
-        if self.env.user._is_public():
-            return result
-        # Send invitations like upstream would have done
-        to_notify = new_attendees.filtered(lambda a: a.email != self.env.user.email)
-        if to_notify and not self.env.context.get("detaching"):
-            to_notify._send_mail_to_attendees(
-                "calendar.calendar_template_meeting_invitation"
-            )
-        return result
+    @api.model_create_multi
+    def create(self, vals_list):
+        """Transfer resource booking to _attendees_values by context.
+
+        We need to serialize the creation in that case.
+        """
+        vals_list2 = []
+        records = self.env["calendar.event"]
+        for vals in vals_list:
+            if "resource_booking_ids" in vals:
+                records += super(
+                    CalendarEvent,
+                    self.with_context(
+                        resource_booking_ids=vals["resource_booking_ids"]
+                    ),
+                ).create(vals)
+            else:
+                vals_list2.append(vals)
+        records += super().create(vals_list2)
+        return records
 
     def get_interval(self, interval, tz=None):
         """Autofix tz from related resource booking.
@@ -100,3 +82,31 @@ def get_interval(self, interval, tz=None):
         """
         tz = self.resource_booking_ids.type_id.resource_calendar_id.tz or tz
         return super().get_interval(interval=interval, tz=tz)
+
+    def _attendees_values(self, partner_commands):
+        """Autoconfirm resource attendees if preselected and hand-picked on RB.
+
+        NOTE: There's no support for changing `resource_booking_ids` once the meeting
+        is created nor having more than one Rb attached to the same meeting, but that's
+        not a real case for now.
+        """
+        attendee_commands = super()._attendees_values(partner_commands)
+        ctx_partner_id = False
+        for cmd in self.env.context.get("resource_booking_ids", []):
+            if cmd[0] == 0 and not cmd[2].get("combination_auto_assign", True):
+                ctx_partner_id = cmd[2]["partner_id"]
+            elif cmd[0] == 6:
+                rb = self.env["resource.booking"].browse(cmd[2])
+                if rb.combination_auto_assign:
+                    continue  # only auto-confirm if handpicked combination
+                ctx_partner_id = rb.combination_id.resource_ids.user_id.partner_id.id
+        for command in attendee_commands:
+            if command[0] != 0:
+                continue
+            att_partner_id = ctx_partner_id
+            if not att_partner_id:
+                rb = self.resource_booking_ids
+                att_partner_id = rb.combination_id.resource_ids.user_id.partner_id.id
+            if command[2]["partner_id"] == att_partner_id:
+                command[2]["state"] = "accepted"
+        return attendee_commands
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index b9aa04ca..8ed156cb 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -1,4 +1,5 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2022 Tecnativa - Pedro M. Baeza
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 import calendar
@@ -119,14 +120,12 @@ class ResourceBooking(models.Model):
         index=True,
         readonly=False,
         store=True,
-        track_sequence=200,
         tracking=True,
     )
     duration = fields.Float(
         compute="_compute_duration",
         readonly=False,
         store=True,
-        track_sequence=220,
         tracking=True,
         help="Amount of time that the resources will be booked and unavailable for others.",
     )
@@ -135,7 +134,6 @@ class ResourceBooking(models.Model):
         copy=False,
         index=True,
         store=True,
-        track_sequence=210,
         tracking=True,
     )
     type_id = fields.Many2one(
@@ -304,12 +302,7 @@ def _sync_meeting(self):
                     start=one.start,
                     stop=one.stop,
                     user_id=one.user_id.id,
-                    # If you're not booked, you're free
-                    show_as=(
-                        "busy"
-                        if self.env.user.partner_id in resource_partners
-                        else "free"
-                    ),
+                    show_as="busy",
                     # These 2 avoid creating event as activity
                     res_model_id=False,
                     res_id=False,
diff --git a/resource_booking/models/resource_calendar.py b/resource_booking/models/resource_calendar.py
index 5621e28c..7ab270f0 100644
--- a/resource_booking/models/resource_calendar.py
+++ b/resource_booking/models/resource_calendar.py
@@ -1,11 +1,11 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2022 Tecnativa - Pedro M. Baeza
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from pytz import UTC
 
 from odoo import api, fields, models
 
-from odoo.addons.calendar.models.calendar import calendar_id2real_id
 from odoo.addons.resource.models.resource import Intervals
 
 
@@ -63,15 +63,12 @@ def _calendar_event_busy_intervals(
             self.env["calendar.event"].with_context(active_test=True).search(domain)
         )
         for event in all_events:
-            real_event = self.env["calendar.event"].browse(
-                calendar_id2real_id(event.id)
-            )
             # Is the event the same one we're currently checking?
-            if real_event.resource_booking_ids.id == analyzed_booking_id:
+            if event.resource_booking_ids.id == analyzed_booking_id:
                 continue
             try:
                 # Is the event not booking our resource?
-                if resource & real_event.mapped(
+                if resource & event.mapped(
                     "resource_booking_ids.combination_id.resource_ids"
                 ):
                     raise Busy
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index bb15e323..b1a1834e 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/13.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/14.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-14-0/calendar-14-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
 schedules.</p>
 <p>Example use cases:</p>
@@ -519,7 +519,7 @@ <h1><a class="toc-backref" href="#id5">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/calendar/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -544,8 +544,8 @@ <h2><a class="toc-backref" href="#id9">Maintainers</a></h2>
 mission is to support the collaborative development of Odoo features and
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
-<p><a class="reference external" href="https://github.com/Yajo"><img alt="Yajo" src="https://github.com/Yajo.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/13.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
+<p><a class="reference external" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a></p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/14.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 0c19fd0b..6a975ff8 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -1,4 +1,5 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2022 Tecnativa - Pedro M. Baeza
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 from datetime import date, datetime
 from unittest.mock import patch
@@ -327,7 +328,7 @@ def test_recurring_event(self):
         ce_f.name = "recurring event past monday"
         for user in self.users:
             ce_f.partner_ids.add(user.partner_id)
-        ce_f.start_datetime = datetime(2021, 2, 22, 8)
+        ce_f.start = datetime(2021, 2, 22, 8)
         ce_f.duration = 1
         ce_f.recurrency = True
         ce_f.interval = 1
@@ -602,6 +603,7 @@ def test_suggested_and_subscribed_recipients(self):
             rb = (
                 self.env["resource.booking"]
                 .with_user(rb_user)
+                .sudo()
                 .create(
                     {
                         "partner_id": self.partner.id,
@@ -639,17 +641,13 @@ def test_event_show_as_free(self):
         owner of both automatically. However, there are 2 RBC available (one is
         me), so I still should be able to create 2 events.
         """
-        env = self.env(
-            user=self.users[0], context=dict(self.env.context, tracking_disable=False)
-        )
-        env.user.groups_id = self.env.ref("base.group_user") | self.env.ref(
-            "resource_booking.group_user"
-        )
+        user = self.users[0]
+        rb_obj = self.env["resource.booking"].with_context(tracking_disable=True)
         # I'm the last option
         self.rbt.combination_assignment = "sorted"
         self.rbt.combination_rel_ids[0].sequence = 10
         # Create one long event on Monday, where there are 2 RBC available (one is me)
-        rb_f = Form(env["resource.booking"])
+        rb_f = Form(rb_obj)
         rb_f.type_id = self.rbt
         rb_f.start = "2021-03-01 09:00:00"
         rb_f.duration = 1
@@ -657,9 +655,9 @@ def test_event_show_as_free(self):
         rb1 = rb_f.save()
         # I'm not booked, so I'm free
         self.assertEqual(rb1.combination_id, self.rbcs[2])
-        self.assertEqual(rb1.meeting_id.show_as, "free")
+        self.assertNotIn(user.partner_id, rb1.meeting_id.partner_ids)
         # Create another event within the previous one
-        rb_f = Form(env["resource.booking"])
+        rb_f = Form(rb_obj)
         rb_f.type_id = self.rbt
         rb_f.start = "2021-03-01 09:00:00"
         rb_f.duration = 1.5
@@ -668,10 +666,9 @@ def test_event_show_as_free(self):
         rb2 = rb_f.save()
         # I'm booked this time, so I'm busy
         self.assertEqual(rb2.combination_id, self.rbcs[0])
-        self.assertEqual(rb2.meeting_id.show_as, "busy")
-        # But if I'm not free for 1st RB, it will fail without available resources
-        rb1.meeting_id.show_as = "busy"
-        rb_f = Form(env["resource.booking"])
+        self.assertIn(user.partner_id, rb2.meeting_id.partner_ids)
+        # Thus, it will fail without available resources on a next one
+        rb_f = Form(rb_obj)
         rb_f.type_id = self.rbt
         rb_f.start = "2021-03-01 09:30:00"
         rb_f.duration = 0.5
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 87226128..d41cc8a0 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -27,6 +27,7 @@
         <field name="model">resource.booking</field>
         <field name="arch" type="xml">
             <tree>
+                <field name="name" />
                 <field name="partner_id" />
                 <field name="type_id" />
                 <field name="combination_id" />

From 12ee21d8d8ca82ed677ac7a5893353410edaa424 Mon Sep 17 00:00:00 2001
From: hugues de keyzer <odoo@hugues.info>
Date: Fri, 17 Feb 2023 17:33:46 +0100
Subject: [PATCH 37/64] [IMP] add description field to bookings

---
 resource_booking/models/resource_booking.py       | 1 +
 resource_booking/views/resource_booking_views.xml | 1 +
 2 files changed, 2 insertions(+)

diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 8ed156cb..4ceef495 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -63,6 +63,7 @@ class ResourceBooking(models.Model):
         ),
     )
     name = fields.Char(index=True, help="Leave empty to autogenerate a booking name.")
+    description = fields.Html("Description")
     partner_id = fields.Many2one(
         "res.partner",
         string="Requester",
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index d41cc8a0..3a0058cf 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -156,6 +156,7 @@
                                 />
                             </div>
                             <field name="categ_ids" widget="many2many_tags" />
+                            <field name="description" />
                         </group>
                         <group name="meeting" string="Meeting">
                             <field

From a49e457f65c12128e3252b14934a9c19ba4803a4 Mon Sep 17 00:00:00 2001
From: Carmen Bianca BAKKER <carmen@coopiteasy.be>
Date: Thu, 9 Feb 2023 10:13:20 +0100
Subject: [PATCH 38/64] [IMP] resource_booking: Create resource.is_available()
 convenience function

Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>
---
 resource_booking/__manifest__.py             |  2 +-
 resource_booking/i18n/es.po                  | 32 ++++++++++++
 resource_booking/i18n/fr.po                  | 32 ++++++++++++
 resource_booking/i18n/fr_FR.po               | 32 ++++++++++++
 resource_booking/i18n/resource_booking.pot   |  5 ++
 resource_booking/models/resource_booking.py  | 35 ++++++-------
 resource_booking/models/resource_resource.py | 15 ++++++
 resource_booking/tests/test_backend.py       | 54 ++++++++++++++++++++
 8 files changed, 188 insertions(+), 19 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index fa5bee57..c0d3c02d 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "14.0.1.0.0",
+    "version": "14.0.1.1.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index 496a8120..4d43cb13 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -193,6 +193,12 @@ msgstr ""
 msgid "Activity State"
 msgstr "Estado de la actividad"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "All times are displayed using this timezone:"
@@ -474,10 +480,18 @@ msgid "Define resource bookings."
 msgstr "Defina las reservas/citas de recursos."
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__description
+msgid "Description"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr "Nombre mostrado"
 
@@ -515,6 +529,12 @@ msgstr "Seguidores (canales)"
 msgid "Followers (Partners)"
 msgstr "Seguidores (contactos)"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
 msgid "Force a specific calendar, instead of combining the resources'."
@@ -538,10 +558,13 @@ msgid "Group By"
 msgstr "Agrupar por"
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr "ID"
 
@@ -622,10 +645,13 @@ msgid "It will disappear from your bookings list."
 msgstr "Desaparecerá de su lista de reservas/citas."
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr "Última modificación en"
 
@@ -725,6 +751,12 @@ msgstr "Falta la combinación de reserva de recursos."
 msgid "Modifications Deadline"
 msgstr "Fecha límite para modificaciones"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__my_activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
index fb6e67fb..73282350 100644
--- a/resource_booking/i18n/fr.po
+++ b/resource_booking/i18n/fr.po
@@ -180,6 +180,12 @@ msgstr ""
 msgid "Activity State"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "All times are displayed using this timezone:"
@@ -449,10 +455,18 @@ msgid "Define resource bookings."
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__description
+msgid "Description"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr ""
 
@@ -490,6 +504,12 @@ msgstr ""
 msgid "Followers (Partners)"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
 msgid "Force a specific calendar, instead of combining the resources'."
@@ -512,10 +532,13 @@ msgid "Group By"
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -596,10 +619,13 @@ msgid "It will disappear from your bookings list."
 msgstr ""
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr ""
 
@@ -699,6 +725,12 @@ msgstr ""
 msgid "Modifications Deadline"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__my_activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index 88d97d7d..d02f9d32 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -192,6 +192,12 @@ msgstr ""
 msgid "Activity State"
 msgstr "Statut de l'activité"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "All times are displayed using this timezone:"
@@ -476,10 +482,18 @@ msgid "Define resource bookings."
 msgstr "Définir les réservations de ressources."
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__description
+msgid "Description"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr "Afficher un nom"
 
@@ -517,6 +531,12 @@ msgstr "Abonnés (Chaînes)"
 msgid "Followers (Partners)"
 msgstr "Abonnés (Partenaires)"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
 msgid "Force a specific calendar, instead of combining the resources'."
@@ -539,10 +559,13 @@ msgid "Group By"
 msgstr "Par groupe"
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -625,10 +648,13 @@ msgid "It will disappear from your bookings list."
 msgstr "Il disparaîtra de votre liste de réservations."
 
 #. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr "Dernière modification le"
 
@@ -728,6 +754,12 @@ msgstr "Combinaison de réservation de ressources manquante."
 msgid "Modifications Deadline"
 msgstr "Date limite de modification"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__my_activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 2506635a..cffea123 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -450,6 +450,11 @@ msgstr ""
 msgid "Define resource bookings."
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__description
+msgid "Description"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 4ceef495..f53c57d4 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -13,6 +13,15 @@
 from odoo.addons.resource.models.resource import Intervals
 
 
+def _availability_is_fitting(available_intervals, start_dt, end_dt):
+    # Booking is uninterrupted on the same calendar day.
+    return (
+        len(available_intervals) == 1
+        and available_intervals._items[0][0] <= start_dt
+        and available_intervals._items[0][1] >= end_dt
+    )
+
+
 class ResourceBooking(models.Model):
     _name = "resource.booking"
     _inherit = ["mail.thread", "mail.activity.mixin", "portal.mixin"]
@@ -354,15 +363,10 @@ def _check_scheduling(self):
             if already_happened:
                 unfitting_bookings -= booking
                 continue
-            meeting_dates = tuple(
-                fields.Datetime.context_timestamp(self, booking[field])
-                for field in ("start", "stop")
-            )
-            available_intervals = booking._get_intervals(*meeting_dates)
-            if (
-                len(available_intervals) == 1
-                and available_intervals._items[0][:2] == meeting_dates
-            ):
+            start_dt = fields.Datetime.context_timestamp(self, booking["start"])
+            end_dt = fields.Datetime.context_timestamp(self, booking["stop"])
+            available_intervals = booking._get_intervals(start_dt, end_dt)
+            if _availability_is_fitting(available_intervals, start_dt, end_dt):
                 unfitting_bookings -= booking
         # Explain which bookings failed validation
         if unfitting_bookings:
@@ -424,17 +428,12 @@ def _get_best_combination(self):
         sorted_combinations = self.combination_id + (
             self.type_id._get_combinations_priorized() - self.combination_id
         )
-        desired_interval = tuple(
-            fields.Datetime.context_timestamp(self, dt)
-            for dt in (self.start, self.stop)
-        )
+        start_dt = fields.Datetime.context_timestamp(self, self.start)
+        end_dt = fields.Datetime.context_timestamp(self, self.stop)
         # Get 1st combination available in the desired interval
         for combination in sorted_combinations:
-            availability = self._get_intervals(*desired_interval, combination)
-            if (
-                len(availability) == 1
-                and availability._items[0][:2] == desired_interval
-            ):
+            available_intervals = self._get_intervals(start_dt, end_dt, combination)
+            if _availability_is_fitting(available_intervals, start_dt, end_dt):
                 return combination
         # Tell portal user there's no combination available
         if self.env.context.get("using_portal"):
diff --git a/resource_booking/models/resource_resource.py b/resource_booking/models/resource_resource.py
index b2e11615..fe6c1e9d 100644
--- a/resource_booking/models/resource_resource.py
+++ b/resource_booking/models/resource_resource.py
@@ -3,6 +3,8 @@
 
 from odoo import api, models
 
+from .resource_booking import _availability_is_fitting
+
 
 class ResourceResource(models.Model):
     _inherit = "resource.resource"
@@ -14,3 +16,16 @@ def _check_bookings_scheduling(self):
             [("combination_id.resource_ids", "in", self.ids)]
         )
         return bookings._check_scheduling()
+
+    def is_available(self, start_dt, end_dt, domain=None, tz=None):
+        """Convenience method to check whether a resource is available within a
+        time span.
+        """
+        self.ensure_one()
+        # the `analyzing_booking` context needs to be added here, or bookings
+        # are not marked as busy. Because we do not actually have a booking_id
+        # available here, we set the value to -1.
+        result = self.calendar_id.with_context(analyzing_booking=-1)._work_intervals(
+            start_dt, end_dt, resource=self, domain=domain, tz=tz
+        )
+        return _availability_is_fitting(result, start_dt, end_dt)
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 6a975ff8..9c465511 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -675,3 +675,57 @@ def test_event_show_as_free(self):
         rb_f.partner_id = self.partner.copy()
         with self.assertRaises(AssertionError):
             rb_f.save()
+
+    def test_resource_is_available(self):
+        """If a resource is involved in a booking or is not active at any point
+        between two datetimes, then it is unavailable.
+        """
+        rbc_montue = self.rbcs[2]
+        resource = rbc_montue.resource_ids[1]
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-01 08:00:00",
+                "type_id": self.rbt.id,
+                "combination_id": rbc_montue.id,
+                "combination_auto_assign": False,
+            }
+        )
+        # Resource is available on Monday at an unoccupied time.
+        self.assertTrue(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 1, 10, 0)),
+                utc.localize(datetime(2021, 3, 1, 11, 0)),
+            )
+        )
+        # Resource is not available on Monday at an occupied time (longer than
+        # booking).
+        self.assertFalse(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 1, 7, 45)),
+                utc.localize(datetime(2021, 3, 1, 8, 45)),
+            )
+        )
+        # Resource is not available on Monday at an occupied time (within
+        # booking time).
+        self.assertFalse(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 1, 8, 10)),
+                utc.localize(datetime(2021, 3, 1, 8, 20)),
+            )
+        )
+        # Resource is not available on Monday at an occupied time (partially
+        # overlaps booking).
+        self.assertFalse(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 1, 8, 15)),
+                utc.localize(datetime(2021, 3, 1, 8, 45)),
+            )
+        )
+        # Resource is not available on Wednesdays.
+        self.assertFalse(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 3, 10, 0)),
+                utc.localize(datetime(2021, 3, 3, 11, 0)),
+            )
+        )

From bd517d270fcfff4b6f64206c0cc4c52c9cf95fa6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Mon, 27 Feb 2023 10:00:10 +0100
Subject: [PATCH 39/64] [IMP] resource_booking: Change the position of the
 description field for a correct display.

resource_booking 14.0.1.2.0
---
 resource_booking/__manifest__.py                  | 2 +-
 resource_booking/views/resource_booking_views.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index c0d3c02d..846f3844 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "14.0.1.1.0",
+    "version": "14.0.1.2.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 3a0058cf..77ffc4cf 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -156,7 +156,6 @@
                                 />
                             </div>
                             <field name="categ_ids" widget="many2many_tags" />
-                            <field name="description" />
                         </group>
                         <group name="meeting" string="Meeting">
                             <field
@@ -184,6 +183,7 @@
                             <field name="stop" />
                             <field name="location" />
                         </group>
+                        <field name="description" colspan="4" />
                     </group>
                 </sheet>
                 <div class="oe_chatter">

From 3affb15c8de5a308fdc648ce10faa5e9c98f44ee Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Wed, 1 Mar 2023 16:26:05 +0100
Subject: [PATCH 40/64] [FIX] resource_booking: Don't fail with multiple
 internal attendees

Steps to reproduce:

- Create a resource combination with 2 user resources.
- Create a type with such resource combination.
- Create a resouce booking forcing manually such resource combination.
- Book from the portal a slot for it.

Result: Singleton error

File "/opt/odoo/auto/addons/resource_booking/controllers/portal.py", line 134, in portal_booking_confirm
  booking_form.start = when_naive
File "/opt/odoo/custom/src/odoo/odoo/tests/common.py", line 1979, in __exit__
  self.save()
File "/opt/odoo/custom/src/odoo/odoo/tests/common.py", line 1996, in save
  r.write(values)
File "/opt/odoo/auto/addons/resource_booking/models/resource_booking.py", line 509, in write
  self._sync_meeting()
File "/opt/odoo/auto/addons/resource_booking/models/resource_booking.py", line 337, in _sync_meeting
  _self.env["calendar.event"].create(to_create)
File "<decorator-gen-216>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 348, in _model_create_multi
  return create(self, arg)
File "/opt/odoo/auto/addons/crm/models/calendar.py", line 40, in create
  events = super(CalendarEvent, self).create(vals)
File "<decorator-gen-201>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 348, in _model_create_multi
  return create(self, arg)
File "/opt/odoo/auto/addons/resource_booking/models/calendar_event.py", line 65, in create
  records += super(
File "<decorator-gen-183>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 347, in _model_create_multi
  return create(self, [arg])
File "<decorator-gen-148>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 348, in _model_create_multi
  return create(self, arg)
File "/opt/odoo/auto/addons/calendar/models/calendar_event.py", line 763, in create
  vals_list = [
File "/opt/odoo/auto/addons/calendar/models/calendar_event.py", line 764, in <listcomp>
  dict(vals, attendee_ids=self._attendees_values(vals['partner_ids']))
File "/opt/odoo/auto/addons/resource_booking/models/calendar_event.py", line 102, in _attendees_values
  ctx_partner_id = rb.combination_id.resource_ids.user_id.partner_id.id
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 3822, in __get__
  raise ValueError("Expected singleton: %s" % record)
ValueError: Expected singleton: res.partner(6, 4771)

This is because there can be several linked users, but the code is
assuming that there's only one.

This commits fixes such possibility.

resource_booking 14.0.1.2.1
---
 resource_booking/__manifest__.py          |  2 +-
 resource_booking/models/calendar_event.py | 13 ++++++-------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 846f3844..c6125a76 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "14.0.1.2.0",
+    "version": "14.0.1.2.1",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index c3fd7851..125fa776 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -91,22 +91,21 @@ def _attendees_values(self, partner_commands):
         not a real case for now.
         """
         attendee_commands = super()._attendees_values(partner_commands)
-        ctx_partner_id = False
+        partner_ids = False
         for cmd in self.env.context.get("resource_booking_ids", []):
             if cmd[0] == 0 and not cmd[2].get("combination_auto_assign", True):
-                ctx_partner_id = cmd[2]["partner_id"]
+                partner_ids = [cmd[2]["partner_id"]]
             elif cmd[0] == 6:
                 rb = self.env["resource.booking"].browse(cmd[2])
                 if rb.combination_auto_assign:
                     continue  # only auto-confirm if handpicked combination
-                ctx_partner_id = rb.combination_id.resource_ids.user_id.partner_id.id
+                partner_ids = rb.combination_id.resource_ids.user_id.partner_id.ids
         for command in attendee_commands:
             if command[0] != 0:
                 continue
-            att_partner_id = ctx_partner_id
-            if not att_partner_id:
+            if not partner_ids:
                 rb = self.resource_booking_ids
-                att_partner_id = rb.combination_id.resource_ids.user_id.partner_id.id
-            if command[2]["partner_id"] == att_partner_id:
+                partner_ids = rb.combination_id.resource_ids.user_id.partner_id.ids
+            if command[2]["partner_id"] in partner_ids:
                 command[2]["state"] = "accepted"
         return attendee_commands

From 368af35960759eab44527382f20e2c3080945b5b Mon Sep 17 00:00:00 2001
From: Eugeni Chafer <eugeni@chafer.cat>
Date: Thu, 2 Mar 2023 16:46:12 +0000
Subject: [PATCH 41/64] Added translation using Weblate (Catalan)

---
 resource_booking/i18n/ca.po | 1245 +++++++++++++++++++++++++++++++++++
 1 file changed, 1245 insertions(+)
 create mode 100644 resource_booking/i18n/ca.po

diff --git a/resource_booking/i18n/ca.po b/resource_booking/i18n/ca.po
new file mode 100644
index 00000000..b5d098e9
--- /dev/null
+++ b/resource_booking/i18n/ca.po
@@ -0,0 +1,1245 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* resource_booking
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "# %(id)d - %(name)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "%(partner)s - %(type)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "%(partner)s - %(type)s - %(time)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#, python-format
+msgid "%(resources)s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#, python-format
+msgid "%(resources)s (using calendar %(calendar)s)"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid ""
+"<br/>\n"
+"                        Error details:"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Reschedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Schedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-comment\"/>\n"
+"                        Feedback"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                                Cancel this booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid ""
+"<i class=\"fa fa-times\"/>\n"
+"                            Cancel"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "<small class=\"text-right\">State:</small>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "<span>Preview</span>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Advice:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Booked resources:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Dates:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Duration:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Location:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Requested by:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+msgid "<strong>The chosen schedule is no longer available.</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Type:</strong>"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_warning
+msgid "Access warning"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__active
+msgid "Active"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "All times are displayed using this timezone:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__duration
+msgid ""
+"Amount of time that the resources will be booked and unavailable for others."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_combination_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Archived"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Are you sure?"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_attachment_count
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
+msgid "Auto assigned"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Auto-assigned:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Availability Calendar"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Available resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_combination
+msgid "Bookable resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_count
+msgid "Booking Count"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_count
+msgid "Booking count"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Booking ref."
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_count
+#, python-format
+msgid "Booking types"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking_combination.py:0
+#: code:addons/resource_booking/models/resource_booking_type.py:0
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_action
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__booking_ids
+#: model:ir.ui.menu,name:resource_booking.resource_booking_menu
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_home
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_calendar
+#, python-format
+msgid "Bookings"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__booking_ids
+msgid "Bookings available for this type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_calendar_event
+msgid "Calendar Event"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Cancel"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__canceled
+msgid "Canceled"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid ""
+"Cannot schedule these bookings because no resources are selected for them:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid ""
+"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
+msgid ""
+"Choose how to auto-assign resource combinations. It has no effect if assiged"
+" manually."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.alert_availability_lost
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Close"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__combination_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Combination"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_assignment
+msgid "Combination Assignment"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_combination_menu
+msgid "Combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__company_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+msgid "Company"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__company_id
+msgid "Company where this booking type is available."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_configuration_menu
+msgid "Configuration"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Confirm"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Confirm booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"Confirm that the requesting partner and yourself will attend the scheduled "
+"meeting."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__confirmed
+msgid "Confirmed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__create_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_header
+msgid "Current state of this booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__access_url
+msgid "Customer Portal URL"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Date"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid ""
+"Dear user,\n"
+"            <br/>\n"
+"            You have been assigned to the"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Default reminders"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__categ_ids
+msgid "Default tags"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid "Define bookable resource combinations."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid "Define resource booking types."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid "Define resource bookings."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__description
+msgid "Description"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__duration
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__duration
+msgid "Duration"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_type_duration_positive
+msgid "Duration must be positive."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Duration:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_type_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Force a specific calendar, instead of combining the resources'."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__forced_calendar_id
+msgid "Forced calendar"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Go back"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_view_search
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Group By"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
+msgid "ID"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_icon
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "If you cancel this booking:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__duration
+msgid ""
+"Interval offered to start each resource booking. Also used as booking "
+"default duration."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Invite requesting partner to portal."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Involving me"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_is_follower
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_modifiable
+msgid "Is Modifiable"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__is_overdue
+msgid "Is Overdue"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will be unscheduled."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "It will disappear from your bookings list."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
+#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_uid
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__write_date
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__name
+msgid "Leave empty to autogenerate a booking name."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__location
+msgid "Location"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_main_attachment_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_manager
+msgid "Manager"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Manually assigned:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__meeting_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Meeting"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
+msgid "Meeting confirmed for this booking."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Meeting defaults"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__alarm_ids
+msgid "Meetings will be created with these reminders by default."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__categ_ids
+msgid "Meetings will be created with these tags by default."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Message and communication history"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_combination_required_if_event
+msgid "Missing resource booking combination."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__modifications_deadline
+msgid "Modifications Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__my_activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__name
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_name
+msgid "Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_summary
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Next month"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "No free slots found this month."
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "No resource combinations available on %s"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_needaction_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.constraint,message:resource_booking.constraint_resource_booking_unique_meeting_id
+msgid "Only one event per resource booking can exist."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Open a calendar to schedule a meeting for this booking request."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__user_id
+msgid "Organizer"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__pending
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Pending"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__state
+msgid ""
+"Pending: No meeting scheduled.\n"
+"Scheduled: The requester has not confirmed attendance yet.\n"
+"Confirmed: Meeting scheduled, and requester attendance confirmed.\n"
+"Canceled: Meeting removed, booking archived."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "Please confirm this is really what you want."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_url
+msgid "Portal Access URL"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Previous month"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__random
+msgid "Randomly: order is not important"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_id
+msgid "Requester"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__requester_advice
+msgid "Requester Advice"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking
+#: model:ir.module.category,name:resource_booking.category_resource_booking
+msgid "Resource Booking"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Resource Booking Name"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type
+msgid "Resource Booking Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.resource_booking_main_menu
+msgid "Resource Bookings"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_view_resource_calendar_leaves_search
+msgid "Resource Time Off"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_calendar
+msgid "Resource Working Time"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+msgid "Resource booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_booking_type_combination_rel
+msgid "Resource booking type relation with combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__type_rel_ids
+msgid "Resource booking types where this combination is available."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_combination_action
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Resource combinations"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_rel_ids
+msgid "Resource combinations available for this type of bookings."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_resource_resource
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__resource_ids
+#: model:ir.ui.menu,name:resource_booking.menu_resource_resource
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "Resources"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_id
+msgid "Resources combination"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_combination__resource_ids
+msgid "Resources that must be free to be booked together."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_user_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__resource_calendar_id
+msgid "Restrict bookings to this schedule."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Schedule"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/resource_booking.py:0
+#, python-format
+msgid "Schedule booking"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__scheduled
+msgid "Scheduled"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Scheduled or confirmed"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__access_token
+msgid "Security Token"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set pending"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Set to pending"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_type_form
+msgid "Settings"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Share"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking_type__combination_assignment__sorted
+msgid "Sorted: pick the first one that is free"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__start
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Start date"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "Start:"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__state
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "State"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_state
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__stop
+msgid "Stop"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__categ_ids
+msgid "Tags"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
+msgid ""
+"Text that will appear by default in portal invitation emails and in calendar"
+" views for scheduling."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+msgid "There are currently no bookings for your account."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
+msgid ""
+"These records categorize resource bookings and apply restrictions to them, "
+"such as available resource combinations, availability schedules and interval"
+" duration."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_combination_action
+msgid ""
+"These records define resource combinations that can be booked together in "
+"specified schedules and intervals."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "This booking exceeded its modifications deadline."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid ""
+"This will remove the associated meeting to unschedule the booking. Are you "
+"sure?"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid ""
+"Try next month\n"
+"                    <i class=\"fa fa-chevron-right\"/>"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__type_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__type_id
+#: model_terms:ir.ui.view,arch_db:resource_booking.portal_my_bookings
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_search
+msgid "Type"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__activity_exception_decoration
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.actions.act_window,name:resource_booking.resource_booking_type_action
+#: model:ir.ui.menu,name:resource_booking.resource_booking_type_menu
+msgid "Types"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_unread_counter
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking and archive it."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
+msgid "Unschedule this booking."
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,name:resource_booking.group_user
+msgid "User"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_user
+msgid "Users allowed to book resources"
+msgstr ""
+
+#. module: resource_booking
+#: model:res.groups,comment:resource_booking.group_manager
+msgid "Users allowed to manage resource booking configurations."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "View"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__website_message_ids
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
+msgid ""
+"When checked, resource combinations will be (un)assigned automatically based"
+" on their availability during the booking dates."
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_action
+msgid ""
+"When scheduled, resources will be blocked. When pending, it means the "
+"requester didn't place the booking yet."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
+msgid ""
+"When this deadline has been exceeded, if a booking was not yet confirmed, it"
+" will be canceled automatically. Also, only booking managers will be able to"
+" unschedule or reschedule them. The value is expressed in hours."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__user_id
+msgid ""
+"Who organized this booking? Usually whoever created the record. It will "
+"appear as the calendar event organizer, when scheduled, and calendar "
+"notifications will be sent in his/her name."
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
+msgid "Who requested this booking?"
+msgstr ""
+
+#. module: resource_booking
+#: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
+msgid "Working Times"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
+msgid "You are about to confirm this booking:"
+msgstr ""
+
+#. module: resource_booking
+#: code:addons/resource_booking/models/calendar_event.py:0
+#, python-format
+msgid ""
+"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"\n"
+"- %s"
+msgstr ""
+
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
+msgid "because you belong to the chosen resource combination:"
+msgstr ""

From 2400ba705cabdd1ed118a04f9cc6687006b4fee6 Mon Sep 17 00:00:00 2001
From: Eugeni Chafer <eugeni@chafer.cat>
Date: Thu, 2 Mar 2023 16:47:27 +0000
Subject: [PATCH 42/64] Translated using Weblate (Catalan)

Currently translated at 6.6% (14 of 209 strings)

Translation: calendar-14.0/calendar-14.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-14-0/calendar-14-0-resource_booking/ca/
---
 resource_booking/i18n/ca.po | 52 +++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 22 deletions(-)

diff --git a/resource_booking/i18n/ca.po b/resource_booking/i18n/ca.po
index b5d098e9..f2be46ab 100644
--- a/resource_booking/i18n/ca.po
+++ b/resource_booking/i18n/ca.po
@@ -6,43 +6,45 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 14.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2023-03-02 19:22+0000\n"
+"Last-Translator: Eugeni Chafer <eugeni@chafer.cat>\n"
 "Language-Team: none\n"
 "Language: ca\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.1\n"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
-#, python-format
+#, fuzzy, python-format
 msgid "# %(id)d"
-msgstr ""
+msgstr "# %(id)d"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
-#, python-format
+#, fuzzy, python-format
 msgid "# %(id)d - %(name)s"
-msgstr ""
+msgstr "# %(id)d - %(name)s"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
-#, python-format
+#, fuzzy, python-format
 msgid "%(partner)s - %(type)s"
-msgstr ""
+msgstr "%(partner)s - %(type)s"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
-#, python-format
+#, fuzzy, python-format
 msgid "%(partner)s - %(type)s - %(time)s"
-msgstr ""
+msgstr "%(partner)s - %(type)s - %(time)s"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking_combination.py:0
-#, python-format
+#, fuzzy, python-format
 msgid "%(resources)s"
-msgstr ""
+msgstr "%(resources)s"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking_combination.py:0
@@ -56,6 +58,8 @@ msgid ""
 "<br/>\n"
 "                        Error details:"
 msgstr ""
+"<br/>\n"
+"                        detalls de l'error:"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
@@ -63,6 +67,8 @@ msgid ""
 "<i class=\"fa fa-calendar\"/>\n"
 "                            Reschedule"
 msgstr ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Reagendar"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
@@ -70,6 +76,8 @@ msgid ""
 "<i class=\"fa fa-calendar\"/>\n"
 "                            Schedule"
 msgstr ""
+"<i class=\"fa fa-calendar\"/>\n"
+"                            Agendar"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
@@ -216,17 +224,17 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
 msgid "Auto assigned"
-msgstr ""
+msgstr "Auto assignat"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Auto-assigned:"
-msgstr ""
+msgstr "Auto-assignat"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__resource_calendar_id
 msgid "Availability Calendar"
-msgstr ""
+msgstr "Calendari de disponibilitat"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__combination_rel_ids
@@ -278,28 +286,28 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_view_calendar
 #, python-format
 msgid "Bookings"
-msgstr ""
+msgstr "Reserves"
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__booking_ids
 msgid "Bookings available for this type"
-msgstr ""
+msgstr "Reserves disponibles d'aquest tipus"
 
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_calendar_event
 msgid "Calendar Event"
-msgstr ""
+msgstr "Esdeveniment de calendari"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "Cancel"
-msgstr ""
+msgstr "Cancel·lar"
 
 #. module: resource_booking
 #: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__canceled
 msgid "Canceled"
-msgstr ""
+msgstr "Cancel·lat"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
@@ -368,12 +376,12 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "Confirm"
-msgstr ""
+msgstr "Confirmar"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.scheduling_calendar
 msgid "Confirm booking"
-msgstr ""
+msgstr "Confirmar reserva"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -385,7 +393,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields.selection,name:resource_booking.selection__resource_booking__state__confirmed
 msgid "Confirmed"
-msgstr ""
+msgstr "Confirmat"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__create_uid

From f909cd5b945dbd5f8e546c5b786996440fc51a62 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Mon, 6 Mar 2023 10:27:08 +0100
Subject: [PATCH 43/64] [FIX] resource_booking: Allow non RB users to handle
 calendar events

Steps to reproduce:

- Create a calendar event
- Edit it
- Add an attendee
- Save it

Result: you get a permission error to resource.booking

This is because there are some operations done on resource bookings
from the calendar events. The solution is to do such operations with
sudo.

resource_booking 14.0.1.2.2
---
 resource_booking/__manifest__.py          |  2 +-
 resource_booking/models/calendar_event.py |  6 +++---
 resource_booking/tests/test_backend.py    | 16 +++++++++++++++-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index c6125a76..2aa1ccc4 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "14.0.1.2.1",
+    "version": "14.0.1.2.2",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index 125fa776..0ed136ce 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -19,12 +19,12 @@ class CalendarEvent(models.Model):
     @api.constrains("resource_booking_ids", "start", "stop")
     def _check_bookings_scheduling(self):
         """Scheduled bookings must have no conflicts."""
-        bookings = self.mapped("resource_booking_ids")
+        bookings = self.sudo().resource_booking_ids
         return bookings._check_scheduling()
 
     def _validate_booking_modifications(self):
         """Make sure you can cancel a booking meeting."""
-        bookings = self.mapped("resource_booking_ids")
+        bookings = self.sudo().resource_booking_ids
         modifiable = bookings.filtered("is_modifiable")
         frozen = bookings - modifiable
         if frozen:
@@ -104,7 +104,7 @@ def _attendees_values(self, partner_commands):
             if command[0] != 0:
                 continue
             if not partner_ids:
-                rb = self.resource_booking_ids
+                rb = self.sudo().resource_booking_ids
                 partner_ids = rb.combination_id.resource_ids.user_id.partner_id.ids
             if command[2]["partner_id"] in partner_ids:
                 command[2]["state"] = "accepted"
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 9c465511..bbc82cfd 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -9,7 +9,7 @@
 
 from odoo import fields
 from odoo.exceptions import ValidationError
-from odoo.tests.common import Form, SavepointCase, new_test_user
+from odoo.tests.common import Form, SavepointCase, new_test_user, users
 
 from .common import create_test_data
 
@@ -22,6 +22,20 @@ class BackendCase(SavepointCase):
     def setUpClass(cls):
         super().setUpClass()
         create_test_data(cls)
+        cls.plain_user = new_test_user(cls.env, login="plain", groups="base.group_user")
+
+    @users("plain")
+    def test_plain_user_calendar_event(self):
+        """Check that a simple user is able to handle manual calendar events."""
+        event = self.env["calendar.event"].create(
+            {
+                "name": "Test calendar event",
+                "start": "2023-01-01 00:00:00",
+                "stop": "2023-01-01 01:00:00",
+            }
+        )
+        event.write({"partner_ids": [(4, self.partner.id)]})
+        event.unlink()
 
     def test_scheduling_conflict_constraints(self):
         # Combination is available on Mondays and Tuesdays

From 4255e095a4ab8757e7113335c865ccd5e3204b6a Mon Sep 17 00:00:00 2001
From: Carmen Bianca BAKKER <carmen@coopiteasy.be>
Date: Thu, 30 Mar 2023 14:07:54 +0200
Subject: [PATCH 44/64] [IMP] resource_booking: Add description to calendar
 view card

This allows the user to see the summary of an event from the calendar
view.

Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>
---
 resource_booking/views/resource_booking_views.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 77ffc4cf..4fbf8902 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -19,6 +19,7 @@
                 <field name="partner_id" avatar_field="image_128" />
                 <field name="type_id" />
                 <field name="combination_id" />
+                <field name="description" />
             </calendar>
         </field>
     </record>

From d6fb3b629632bc3de9ed9b7c266da644f53483a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Mon, 13 Mar 2023 17:03:48 +0100
Subject: [PATCH 45/64] [FIX] resource_booking: Force to send calendar event
 author notification

---
 resource_booking/models/calendar_event.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py
index 0ed136ce..12a4c7b2 100644
--- a/resource_booking/models/calendar_event.py
+++ b/resource_booking/models/calendar_event.py
@@ -57,6 +57,8 @@ def create(self, vals_list):
         """Transfer resource booking to _attendees_values by context.
 
         We need to serialize the creation in that case.
+        mail_notify_author key from context is necessary to force the notification
+        to be sent to author.
         """
         vals_list2 = []
         records = self.env["calendar.event"]
@@ -65,7 +67,8 @@ def create(self, vals_list):
                 records += super(
                     CalendarEvent,
                     self.with_context(
-                        resource_booking_ids=vals["resource_booking_ids"]
+                        resource_booking_ids=vals["resource_booking_ids"],
+                        mail_notify_author=True,
                     ),
                 ).create(vals)
             else:

From deaf6ae9b1b9e23d696f68fbc8e88d69c6f3b697 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Fri, 3 Mar 2023 12:12:21 +0100
Subject: [PATCH 46/64] [MIG] resource_booking: Migration to 15.0

TT40302

[UPD] Update resource_booking.pot

[UPD] README.rst

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: calendar-15.0/calendar-15.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking/
---
 resource_booking/README.rst                   | 10 +--
 resource_booking/__manifest__.py              |  6 +-
 resource_booking/controllers/portal.py        |  3 +-
 resource_booking/data/mail.xml                |  8 +-
 resource_booking/i18n/ca.po                   | 55 ++++++-------
 resource_booking/i18n/es.po                   | 64 ++++-----------
 resource_booking/i18n/fr.po                   | 29 +++----
 resource_booking/i18n/fr_FR.po                | 30 +++----
 resource_booking/i18n/resource_booking.pot    | 29 +++----
 resource_booking/models/resource_booking.py   | 82 +++++++++----------
 .../models/resource_booking_combination.py    | 17 +++-
 .../models/resource_booking_type.py           | 25 +++---
 .../resource_booking_type_combination_rel.py  |  4 +-
 resource_booking/models/resource_resource.py  | 10 ++-
 .../static/description/index.html             |  6 +-
 .../static/src/{css => scss}/portal.scss      |  0
 resource_booking/templates/assets.xml         | 14 ----
 resource_booking/tests/test_backend.py        | 34 +-------
 18 files changed, 179 insertions(+), 247 deletions(-)
 rename resource_booking/static/src/{css => scss}/portal.scss (100%)
 delete mode 100644 resource_booking/templates/assets.xml

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index b322e6c8..5039eee6 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -14,13 +14,13 @@ Resource booking
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github
-    :target: https://github.com/OCA/calendar/tree/14.0/resource_booking
+    :target: https://github.com/OCA/calendar/tree/15.0/resource_booking
     :alt: OCA/calendar
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/calendar-14-0/calendar-14-0-resource_booking
+    :target: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/279/14.0
+    :target: https://runbot.odoo-community.org/runbot/279/15.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -167,7 +167,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -205,6 +205,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-pedrobaeza| 
 
-This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/14.0/resource_booking>`_ project on GitHub.
+This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/15.0/resource_booking>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 2aa1ccc4..f95d7b93 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "14.0.1.2.2",
+    "version": "15.0.1.0.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
@@ -31,7 +31,6 @@
         "data/mail.xml",
         "security/resource_booking_security.xml",
         "security/ir.model.access.csv",
-        "templates/assets.xml",
         "templates/portal.xml",
         "views/calendar_event_views.xml",
         "views/resource_booking_combination_views.xml",
@@ -39,5 +38,8 @@
         "views/resource_booking_views.xml",
         "views/menus.xml",
     ],
+    "assets": {
+        "web.assets_frontend": ["resource_booking/static/src/scss/portal.scss"],
+    },
     "demo": ["demo/res_users_demo.xml"],
 }
diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
index 6d529f8b..11c57b27 100644
--- a/resource_booking/controllers/portal.py
+++ b/resource_booking/controllers/portal.py
@@ -3,7 +3,6 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from datetime import datetime
-from urllib.parse import quote_plus
 
 from dateutil.parser import isoparse
 
@@ -135,7 +134,7 @@ def portal_booking_confirm(self, booking_id, access_token, when, **kwargs):
         except ValidationError as error:
             url = booking_sudo.get_portal_url(
                 suffix="/schedule/{:%Y/%m}".format(when_tz_aware),
-                query_string="&error={}".format(quote_plus(error.name)),
+                query_string="&error={}".format(error.args[0]),
             )
             return request.redirect(url)
         booking_sudo.action_confirm()
diff --git a/resource_booking/data/mail.xml b/resource_booking/data/mail.xml
index d3bfd167..ad955866 100644
--- a/resource_booking/data/mail.xml
+++ b/resource_booking/data/mail.xml
@@ -9,10 +9,10 @@
             Dear user,
             <br />
             You have been assigned to the
-            <t t-esc="model_description or 'document'" />
-            <t t-esc="object.name_get()[0][1]" />
+            <t t-out="model_description or 'document'" />
+            <t t-out="object.name_get()[0][1]" />
             because you belong to the chosen resource combination:
-            <t t-esc="object.combination_id.name_get()[0][1]" />.
+            <t t-out="object.combination_id.name_get()[0][1]" />.
         </p>
         <p style="margin-top: 24px; margin-bottom: 16px;">
             <a
@@ -20,7 +20,7 @@
                 style="background-color:#875A7B; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px;"
             >
                 View
-                <t t-esc="model_description or 'document'" />
+                <t t-out="model_description or 'document'" />
             </a>
         </p>
     </template>
diff --git a/resource_booking/i18n/ca.po b/resource_booking/i18n/ca.po
index f2be46ab..3e55a57d 100644
--- a/resource_booking/i18n/ca.po
+++ b/resource_booking/i18n/ca.po
@@ -322,7 +322,8 @@ msgstr ""
 #: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid ""
-"Cannot schedule these bookings because they do not fit in their type or resources calendars, or because all resources are busy:\n"
+"Cannot schedule these bookings because they do not fit in their type or "
+"resources calendars, or because all resources are busy:\n"
 "\n"
 "- %s"
 msgstr ""
@@ -330,8 +331,8 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__combination_assignment
 msgid ""
-"Choose how to auto-assign resource combinations. It has no effect if assiged"
-" manually."
+"Choose how to auto-assign resource combinations. It has no effect if assiged "
+"manually."
 msgstr ""
 
 #. module: resource_booking
@@ -465,13 +466,10 @@ msgid "Description"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr ""
 
@@ -497,12 +495,6 @@ msgstr ""
 msgid "Followers"
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
-msgid "Followers (Channels)"
-msgstr ""
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
@@ -537,13 +529,16 @@ msgid "Group By"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__has_message
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__has_message
+msgid "Has Message"
+msgstr ""
+
+#. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -624,13 +619,10 @@ msgid "It will disappear from your bookings list."
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr ""
 
@@ -744,6 +736,12 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_calendar_event_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_calendar_event_id
+msgid "Next Activity Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
@@ -1070,8 +1068,8 @@ msgstr ""
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__requester_advice
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__requester_advice
 msgid ""
-"Text that will appear by default in portal invitation emails and in calendar"
-" views for scheduling."
+"Text that will appear by default in portal invitation emails and in calendar "
+"views for scheduling."
 msgstr ""
 
 #. module: resource_booking
@@ -1083,8 +1081,8 @@ msgstr ""
 #: model_terms:ir.actions.act_window,help:resource_booking.resource_booking_type_action
 msgid ""
 "These records categorize resource bookings and apply restrictions to them, "
-"such as available resource combinations, availability schedules and interval"
-" duration."
+"such as available resource combinations, availability schedules and interval "
+"duration."
 msgstr ""
 
 #. module: resource_booking
@@ -1196,8 +1194,8 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__combination_auto_assign
 msgid ""
-"When checked, resource combinations will be (un)assigned automatically based"
-" on their availability during the booking dates."
+"When checked, resource combinations will be (un)assigned automatically based "
+"on their availability during the booking dates."
 msgstr ""
 
 #. module: resource_booking
@@ -1210,9 +1208,9 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__modifications_deadline
 msgid ""
-"When this deadline has been exceeded, if a booking was not yet confirmed, it"
-" will be canceled automatically. Also, only booking managers will be able to"
-" unschedule or reschedule them. The value is expressed in hours."
+"When this deadline has been exceeded, if a booking was not yet confirmed, it "
+"will be canceled automatically. Also, only booking managers will be able to "
+"unschedule or reschedule them. The value is expressed in hours."
 msgstr ""
 
 #. module: resource_booking
@@ -1242,7 +1240,8 @@ msgstr ""
 #: code:addons/resource_booking/models/calendar_event.py:0
 #, python-format
 msgid ""
-"You are not allowed to alter these bookings because they exceeded their modification deadlines:\n"
+"You are not allowed to alter these bookings because they exceeded their "
+"modification deadlines:\n"
 "\n"
 "- %s"
 msgstr ""
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index 4d43cb13..a2dc91e5 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -485,13 +485,10 @@ msgid "Description"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr "Nombre mostrado"
 
@@ -517,12 +514,6 @@ msgstr "Duración:"
 msgid "Followers"
 msgstr "Seguidores"
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
-msgid "Followers (Channels)"
-msgstr "Seguidores (canales)"
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
@@ -558,13 +549,16 @@ msgid "Group By"
 msgstr "Agrupar por"
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__has_message
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__has_message
+msgid "Has Message"
+msgstr ""
+
+#. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr "ID"
 
@@ -645,13 +639,10 @@ msgid "It will disappear from your bookings list."
 msgstr "Desaparecerá de su lista de reservas/citas."
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr "Última modificación en"
 
@@ -765,6 +756,12 @@ msgstr ""
 msgid "Name"
 msgstr "Nombre"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_calendar_event_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_calendar_event_id
+msgid "Next Activity Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
@@ -1309,38 +1306,5 @@ msgstr ""
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
 
-#~ msgid "Booking #"
-#~ msgstr "Reserva/cita nº"
-
-#~ msgid "Establish each interval's duration."
-#~ msgstr "Establezca la duración de cada intervalo."
-
-#~ msgid "Event"
-#~ msgstr "Evento"
-
-#~ msgid "If checked new messages require your attention."
-#~ msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
-
-#~ msgid "Involves Me"
-#~ msgstr "Me corresponde"
-
-#~ msgid "Number of error"
-#~ msgstr "Número de errores"
-
-#~ msgid "Overdue"
-#~ msgstr "Atrasado"
-
-#~ msgid "Planned"
-#~ msgstr "Planificado"
-
-#~ msgid "Requesting partner"
-#~ msgstr "Solicitante"
-
-#~ msgid "Resource Leaves"
-#~ msgstr "Ausencias del recurso"
-
-#~ msgid "Start and stop must be filled or emptied together."
-#~ msgstr "El inicio y el fin deben rellenarse o vaciarse simultáneamente."
-
-#~ msgid "Today"
-#~ msgstr "Hoy"
+#~ msgid "Followers (Channels)"
+#~ msgstr "Seguidores (canales)"
diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
index 73282350..58fa7a2e 100644
--- a/resource_booking/i18n/fr.po
+++ b/resource_booking/i18n/fr.po
@@ -32,7 +32,7 @@ msgstr "# %(id)d - %(name)s"
 #: code:addons/resource_booking/models/resource_booking.py:0
 #, python-format
 msgid "%(partner)s - %(type)s"
-msgstr "%(partenaire)s - %(type)s"
+msgstr "%(partner)s - %(type)s"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
@@ -460,13 +460,10 @@ msgid "Description"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr ""
 
@@ -492,12 +489,6 @@ msgstr ""
 msgid "Followers"
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
-msgid "Followers (Channels)"
-msgstr ""
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
@@ -532,13 +523,16 @@ msgid "Group By"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__has_message
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__has_message
+msgid "Has Message"
+msgstr ""
+
+#. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -619,13 +613,10 @@ msgid "It will disappear from your bookings list."
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr ""
 
@@ -739,6 +730,12 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_calendar_event_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_calendar_event_id
+msgid "Next Activity Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index d02f9d32..fa48df79 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -487,13 +487,10 @@ msgid "Description"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr "Afficher un nom"
 
@@ -519,12 +516,6 @@ msgstr "Durée:"
 msgid "Followers"
 msgstr "Suiveurs"
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
-msgid "Followers (Channels)"
-msgstr "Abonnés (Chaînes)"
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
@@ -559,13 +550,16 @@ msgid "Group By"
 msgstr "Par groupe"
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__has_message
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__has_message
+msgid "Has Message"
+msgstr ""
+
+#. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -648,13 +642,10 @@ msgid "It will disappear from your bookings list."
 msgstr "Il disparaîtra de votre liste de réservations."
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr "Dernière modification le"
 
@@ -768,6 +759,12 @@ msgstr ""
 msgid "Name"
 msgstr "Nom"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_calendar_event_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_calendar_event_id
+msgid "Next Activity Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
@@ -1318,3 +1315,6 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
+
+#~ msgid "Followers (Channels)"
+#~ msgstr "Abonnés (Chaînes)"
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index cffea123..7500b5a7 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
 "Report-Msgid-Bugs-To: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -456,13 +456,10 @@ msgid "Description"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__display_name
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__display_name
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__display_name
 msgid "Display Name"
 msgstr ""
 
@@ -488,12 +485,6 @@ msgstr ""
 msgid "Followers"
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_channel_ids
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_channel_ids
-msgid "Followers (Channels)"
-msgstr ""
-
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_partner_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_partner_ids
@@ -528,13 +519,16 @@ msgid "Group By"
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event__id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__has_message
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__has_message
+msgid "Has Message"
+msgstr ""
+
+#. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__id
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar__id
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource__id
 msgid "ID"
 msgstr ""
 
@@ -615,13 +609,10 @@ msgid "It will disappear from your bookings list."
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_calendar_event____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type____last_update
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type_combination_rel____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_calendar____last_update
-#: model:ir.model.fields,field_description:resource_booking.field_resource_resource____last_update
 msgid "Last Modified on"
 msgstr ""
 
@@ -735,6 +726,12 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_calendar_event_id
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_calendar_event_id
+msgid "Next Activity Calendar Event"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_date_deadline
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_date_deadline
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index f53c57d4..da0a3974 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -72,9 +72,9 @@ class ResourceBooking(models.Model):
         ),
     )
     name = fields.Char(index=True, help="Leave empty to autogenerate a booking name.")
-    description = fields.Html("Description")
+    description = fields.Html()
     partner_id = fields.Many2one(
-        "res.partner",
+        comodel_name="res.partner",
         string="Requester",
         index=True,
         ondelete="cascade",
@@ -83,7 +83,7 @@ class ResourceBooking(models.Model):
         help="Who requested this booking?",
     )
     user_id = fields.Many2one(
-        "res.users",
+        comodel_name="res.users",
         default=lambda self: self._default_user_id(),
         store=True,
         readonly=False,
@@ -168,17 +168,15 @@ def _compute_access_url(self):
     @api.onchange("type_id")
     def _onchange_type_set_categ_ids(self):
         """Copy default tags from RBT when changing it."""
-        for one in self:
-            if one.type_id:
-                one.categ_ids = one.type_id.categ_ids
+        for one in self.filtered("type_id"):
+            one.categ_ids = one.type_id.categ_ids
 
     @api.depends("start", "type_id", "combination_auto_assign")
     def _compute_combination_id(self):
         """Select best combination candidate when changing booking dates."""
-        for one in self:
-            # Useless without the interval
-            if one.start and one.combination_auto_assign:
-                one.combination_id = one._get_best_combination()
+        # Useless without the interval
+        for one in self.filtered(lambda x: x.start and x.combination_auto_assign):
+            one.combination_id = one._get_best_combination()
 
     @api.depends("start")
     def _compute_is_overdue(self):
@@ -280,9 +278,32 @@ def _compute_stop(self):
     @api.depends("meeting_id.user_id")
     def _compute_user_id(self):
         """Get user from related meeting, if available."""
-        for record in self:
-            if record.meeting_id.user_id:
-                record.user_id = record.meeting_id.user_id
+        for record in self.filtered(lambda x: x.meeting_id.user_id):
+            record.user_id = record.meeting_id.user_id
+
+    def _prepare_meeting_vals(self):
+        resource_partners = self.combination_id.resource_ids.filtered(
+            lambda res: res.resource_type == "user"
+        ).mapped("user_id.partner_id")
+        return dict(
+            alarm_ids=[(6, 0, self.type_id.alarm_ids.ids)],
+            categ_ids=[(6, 0, self.categ_ids.ids)],
+            description=self.type_id.requester_advice,
+            duration=self.duration,
+            location=self.location,
+            name=self.name or self._get_name_formatted(self.partner_id, self.type_id),
+            partner_ids=[
+                (4, partner.id, 0) for partner in self.partner_id | resource_partners
+            ],
+            resource_booking_ids=[(6, 0, self.ids)],
+            start=self.start,
+            stop=self.stop,
+            user_id=self.user_id.id,
+            show_as="busy",
+            # These 2 avoid creating event as activity
+            res_model_id=False,
+            res_id=False,
+        )
 
     def _sync_meeting(self):
         """Lazy-create or destroy calendar.event."""
@@ -293,30 +314,7 @@ def _sync_meeting(self):
         to_create, to_delete = [], _self.env["calendar.event"]
         for one in _self:
             if one.start:
-                resource_partners = one.combination_id.resource_ids.filtered(
-                    lambda res: res.resource_type == "user"
-                ).mapped("user_id.partner_id")
-                meeting_vals = dict(
-                    alarm_ids=[(6, 0, one.type_id.alarm_ids.ids)],
-                    categ_ids=[(6, 0, one.categ_ids.ids)],
-                    description=one.type_id.requester_advice,
-                    duration=one.duration,
-                    location=one.location,
-                    name=one.name
-                    or one._get_name_formatted(one.partner_id, one.type_id),
-                    partner_ids=[
-                        (4, partner.id, 0)
-                        for partner in one.partner_id | resource_partners
-                    ],
-                    resource_booking_ids=[(6, 0, one.ids)],
-                    start=one.start,
-                    stop=one.stop,
-                    user_id=one.user_id.id,
-                    show_as="busy",
-                    # These 2 avoid creating event as activity
-                    res_model_id=False,
-                    res_id=False,
-                )
+                meeting_vals = one._prepare_meeting_vals()
                 if one.meeting_id:
                     meeting = one.meeting_id
                     if not all(
@@ -482,7 +480,10 @@ def _get_intervals(self, start_dt, end_dt, combination=None):
             analyzing_booking=booking_id, exclude_public_holidays=True
         )
         # RBT calendar uses no resources to restrict bookings
-        result = booking.type_id.resource_calendar_id._work_intervals(start_dt, end_dt)
+        resource = self.env["resource.resource"]
+        result = booking.type_id.resource_calendar_id._work_intervals_batch(
+            start_dt, end_dt
+        )[resource.id]
         # Restrict with the chosen combination, or to at least one of the
         # available ones
         combinations = (
@@ -502,10 +503,7 @@ def create(self, vals_list):
 
     def write(self, vals):
         """Sync booking with meeting if needed."""
-        # On a database with lots of recurrent calendar events we could get serious
-        # performance downgrades. As we'll be computing them with _sync_meeting later
-        # we'll be avoiding triggering on the super call (i.e. compute methods)
-        result = super(ResourceBooking, self.with_context(virtual_id=False)).write(vals)
+        result = super().write(vals)
         self._sync_meeting()
         return result
 
diff --git a/resource_booking/models/resource_booking_combination.py b/resource_booking/models/resource_booking_combination.py
index 798d21ac..a7cf2b1b 100644
--- a/resource_booking/models/resource_booking_combination.py
+++ b/resource_booking/models/resource_booking_combination.py
@@ -42,8 +42,12 @@ class ResourceBookingCombination(models.Model):
 
     @api.depends("booking_ids")
     def _compute_booking_count(self):
+        data = self.env["resource.booking"].read_group(
+            [("combination_id", "in", self.ids)], ["combination_id"], ["combination_id"]
+        )
+        mapping = {x["combination_id"][0]: x["combination_id_count"] for x in data}
         for one in self:
-            one.booking_count = len(one.booking_ids)
+            one.booking_count = mapping.get(one.id, 0)
 
     @api.depends("resource_ids.name", "forced_calendar_id.name")
     def _compute_name(self):
@@ -59,8 +63,12 @@ def _compute_name(self):
 
     @api.depends("type_rel_ids")
     def _compute_type_count(self):
+        data = self.env["resource.booking.type.combination.rel"].read_group(
+            [("combination_id", "in", self.ids)], ["combination_id"], ["combination_id"]
+        )
+        mapping = {x["combination_id"][0]: x["combination_id_count"] for x in data}
         for one in self:
-            one.type_count = len(one.type_rel_ids)
+            one.type_count = mapping.get(one.id, 0)
 
     @api.constrains("booking_ids", "forced_calendar_id", "resource_ids")
     def _check_bookings_scheduling(self):
@@ -79,7 +87,10 @@ def _get_intervals(self, start_dt, end_dt):
                 if not combination_intervals:
                     break  # Can't restrict more
                 calendar = combination.forced_calendar_id or res.calendar_id
-                combination_intervals &= calendar._work_intervals(start_dt, end_dt, res)
+                # combination_intervals &= calendar._work_intervals(start_dt, end_dt, res)
+                combination_intervals &= calendar._work_intervals_batch(
+                    start_dt, end_dt, res
+                )[res.id]
             result |= combination_intervals
         return result
 
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 7cb6874c..8ceaa782 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -16,7 +16,7 @@ class ResourceBookingType(models.Model):
         ("duration_positive", "CHECK(duration > 0)", "Duration must be positive."),
     ]
 
-    active = fields.Boolean(index=True, default=True)
+    active = fields.Boolean(default=True)
     alarm_ids = fields.Many2many(
         string="Default reminders",
         comodel_name="calendar.alarm",
@@ -49,7 +49,7 @@ class ResourceBookingType(models.Model):
     )
     company_id = fields.Many2one(
         comodel_name="res.company",
-        default=lambda self: self._default_company(),
+        default=lambda self: self.env.company,
         index=True,
         readonly=False,
         store=True,
@@ -77,8 +77,8 @@ class ResourceBookingType(models.Model):
     )
     name = fields.Char(index=True, translate=True, required=True)
     booking_ids = fields.One2many(
-        "resource.booking",
-        "type_id",
+        comodel_name="resource.booking",
+        inverse_name="type_id",
         string="Bookings",
         help="Bookings available for this type",
     )
@@ -99,18 +99,18 @@ class ResourceBookingType(models.Model):
         ),
     )
 
-    @api.model
-    def _default_company(self):
-        return self.env.company
-
     @api.model
     def _default_resource_calendar(self):
         return self._default_company().resource_calendar_id
 
     @api.depends("booking_ids")
     def _compute_booking_count(self):
+        data = self.env["resource.booking"].read_group(
+            [("type_id", "in", self.ids)], ["type_id"], ["type_id"]
+        )
+        mapping = {x["type_id"][0]: x["type_id_count"] for x in data}
         for one in self:
-            one.booking_count = len(one.booking_ids)
+            one.booking_count = mapping.get(one.id, 0)
 
     @api.constrains("booking_ids", "resource_calendar_id", "combination_rel_ids")
     def _check_bookings_scheduling(self):
@@ -144,11 +144,14 @@ def _get_next_slot_start(self, start_dt):
         res_calendar = self.resource_calendar_id.with_context(
             exclude_public_holidays=True
         )
-        attendance_intervals = res_calendar._attendance_intervals(workday_min, end_dt)
+        resource = self.env["resource.resource"]
+        attendance_intervals = res_calendar._attendance_intervals_batch(
+            workday_min, end_dt
+        )[resource.id]
         try:
             workday_start, valid_end, _meta = attendance_intervals._items[-1]
             if valid_end != end_dt:
-                # Inteval found, but without enough time; same as no interval
+                # Interval found, but without enough time; same as no interval
                 raise IndexError
         except IndexError:
             try:
diff --git a/resource_booking/models/resource_booking_type_combination_rel.py b/resource_booking/models/resource_booking_type_combination_rel.py
index 51330088..53ace59e 100644
--- a/resource_booking/models/resource_booking_type_combination_rel.py
+++ b/resource_booking/models/resource_booking_type_combination_rel.py
@@ -12,14 +12,14 @@ class ResourceBookingCombinationRel(models.Model):
 
     sequence = fields.Integer(index=True, required=True, default=100)
     combination_id = fields.Many2one(
-        "resource.booking.combination",
+        comodel_name="resource.booking.combination",
         string="Combination",
         index=True,
         required=True,
         ondelete="cascade",
     )
     type_id = fields.Many2one(
-        "resource.booking.type",
+        comodel_name="resource.booking.type",
         string="Type",
         index=True,
         required=True,
diff --git a/resource_booking/models/resource_resource.py b/resource_booking/models/resource_resource.py
index fe6c1e9d..3f81d356 100644
--- a/resource_booking/models/resource_resource.py
+++ b/resource_booking/models/resource_resource.py
@@ -25,7 +25,11 @@ def is_available(self, start_dt, end_dt, domain=None, tz=None):
         # the `analyzing_booking` context needs to be added here, or bookings
         # are not marked as busy. Because we do not actually have a booking_id
         # available here, we set the value to -1.
-        result = self.calendar_id.with_context(analyzing_booking=-1)._work_intervals(
-            start_dt, end_dt, resource=self, domain=domain, tz=tz
-        )
+        result = self.calendar_id.with_context(
+            analyzing_booking=-1
+        )._work_intervals_batch(
+            start_dt, end_dt, resources=[self], domain=domain, tz=tz
+        )[
+            self.id
+        ]
         return _availability_is_fitting(result, start_dt, end_dt)
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index b1a1834e..b5f25622 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/14.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-14-0/calendar-14-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
 schedules.</p>
 <p>Example use cases:</p>
@@ -519,7 +519,7 @@ <h1><a class="toc-backref" href="#id5">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/calendar/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -545,7 +545,7 @@ <h2><a class="toc-backref" href="#id9">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/14.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/15.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>
diff --git a/resource_booking/static/src/css/portal.scss b/resource_booking/static/src/scss/portal.scss
similarity index 100%
rename from resource_booking/static/src/css/portal.scss
rename to resource_booking/static/src/scss/portal.scss
diff --git a/resource_booking/templates/assets.xml b/resource_booking/templates/assets.xml
deleted file mode 100644
index b640702b..00000000
--- a/resource_booking/templates/assets.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!-- Copyright 2021 Tecnativa - Jairo Llopis
-     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-<data>
-    <template id="assets_frontend" inherit_id="web.assets_frontend">
-        <xpath expr="//link[last()]" position="after">
-            <link
-                rel="stylesheet"
-                type="text/scss"
-                href="/resource_booking/static/src/css/portal.scss"
-            />
-        </xpath>
-    </template>
-</data>
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index bbc82cfd..c267a279 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -9,7 +9,7 @@
 
 from odoo import fields
 from odoo.exceptions import ValidationError
-from odoo.tests.common import Form, SavepointCase, new_test_user, users
+from odoo.tests.common import Form, TransactionCase, new_test_user, users
 
 from .common import create_test_data
 
@@ -17,7 +17,7 @@
 
 
 @freeze_time("2021-02-26 09:00:00", tick=True)  # Last Friday of February
-class BackendCase(SavepointCase):
+class BackendCase(TransactionCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
@@ -338,7 +338,7 @@ def test_same_slot_twice_not_utc(self):
     def test_recurring_event(self):
         """Recurrent events are considered."""
         # Everyone busy past and next Mondays with a recurring meeting
-        ce_f = Form(self.env["calendar.event"])
+        ce_f = Form(self.env["calendar.event"].with_context(default_mon=True))
         ce_f.name = "recurring event past monday"
         for user in self.users:
             ce_f.partner_ids.add(user.partner_id)
@@ -349,7 +349,6 @@ def test_recurring_event(self):
         ce_f.rrule_type = "weekly"
         ce_f.end_type = "count"
         ce_f.count = 2
-        ce_f.mo = True
         ce_f.save()
         # Cannot book next Monday at 8
         rb_f = Form(self.env["resource.booking"])
@@ -409,33 +408,6 @@ def test_change_calendar_after_bookings_exist(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             future_booking.action_confirm()
 
-    def test_notification_tz(self):
-        """Mail notification TZ is the same as resource.booking.type always."""
-        # Configure RBT with Madrid calendar, but partner has other TZ
-        self.r_calendars.write({"tz": "Europe/Madrid"})
-        self.partner.tz = "Australia/Sydney"
-        rb = self.env["resource.booking"].create(
-            {
-                "combination_id": self.rbcs[0].id,
-                "partner_id": self.partner.id,
-                "start": "2021-03-01 08:00:00",  # 09:00 in Madrid
-                "type_id": self.rbt.id,
-            }
-        )
-        rb.action_confirm()
-        invitation_mail = self.env["mail.mail"].search(
-            [
-                ("state", "=", "outgoing"),
-                (
-                    "subject",
-                    "=",
-                    "Invitation to some customer - Test resource booking type",
-                ),
-            ]
-        )
-        # Invitation must display Madrid TZ (CET)
-        self.assertIn("09:00:00 CET", invitation_mail.body)
-
     def test_free_slots_with_different_type_and_booking_durations(self):
         """Slot and booking duration are different, and all works."""
         # Type and calendar allow one slot each 30 minutes on Mondays and

From 8fbf0b4ed8d2f61a2d5696294e001e118c1635e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Tue, 25 Apr 2023 16:38:07 +0200
Subject: [PATCH 47/64] [IMP] resource_booking: Use
 _prepare_home_portal_values() function.

---
 resource_booking/controllers/portal.py | 7 ++++---
 resource_booking/templates/portal.xml  | 4 ++--
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/resource_booking/controllers/portal.py b/resource_booking/controllers/portal.py
index 11c57b27..b8338cdd 100644
--- a/resource_booking/controllers/portal.py
+++ b/resource_booking/controllers/portal.py
@@ -23,9 +23,9 @@ def _get_booking_sudo(self, booking_id, access_token):
             using_portal=True, tz=booking_sudo.type_id.resource_calendar_id.tz
         )
 
-    def _prepare_portal_layout_values(self):
+    def _prepare_home_portal_values(self, counters):
         """Compute values for multi-booking portal views."""
-        values = super(CustomerPortal, self)._prepare_portal_layout_values()
+        values = super()._prepare_home_portal_values(counters)
         booking_count = request.env["resource.booking"].search_count([])
         values.update({"booking_count": booking_count})
         return values
@@ -51,9 +51,10 @@ def portal_my_bookings(self, page=1, **kwargs):
         """List bookings that I can access."""
         Booking = request.env["resource.booking"].with_context(using_portal=True)
         values = self._prepare_portal_layout_values()
+        booking_count = Booking.search_count([])
         pager = portal.pager(
             url="/my/bookings",
-            total=values["booking_count"],
+            total=booking_count,
             page=page,
             step=self._items_per_page,
         )
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index c289d615..ee7ac152 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -250,10 +250,10 @@
     </template>
     <template id="portal_my_home" inherit_id="portal.portal_my_home">
         <xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
-            <t t-if="booking_count" t-call="portal.portal_docs_entry">
+            <t t-call="portal.portal_docs_entry">
                 <t t-set="title">Bookings</t>
                 <t t-set="url" t-value="'/my/bookings'" />
-                <t t-set="count" t-value="booking_count" />
+                <t t-set="placeholder_count" t-value="'booking_count'" />
             </t>
         </xpath>
     </template>

From 8e22004f45431f9a85d17462cde510c7c25d60a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Tue, 25 Apr 2023 16:40:56 +0200
Subject: [PATCH 48/64] [FIX] resource_booking: Change _default_company() to
 self.env.company from booking types

---
 resource_booking/models/resource_booking_type.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 8ceaa782..077a5045 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -101,7 +101,7 @@ class ResourceBookingType(models.Model):
 
     @api.model
     def _default_resource_calendar(self):
-        return self._default_company().resource_calendar_id
+        return self.env.company.resource_calendar_id
 
     @api.depends("booking_ids")
     def _compute_booking_count(self):

From fbf4c16b9fc809089c7b2b700ace6ac0db89c2ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Tue, 25 Apr 2023 16:43:26 +0200
Subject: [PATCH 49/64] [IMP] resource_booking: Change t-esc directives to
 t-out according to v15 guidelines

---
 resource_booking/templates/portal.xml | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index ee7ac152..1f16fa1a 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -55,7 +55,7 @@
                         <th
                             class="align-middle"
                             colspan="5"
-                            t-esc="start.strftime('%B %Y')"
+                            t-out="start.strftime('%B %Y')"
                         />
                         <th class="text-right">
                             <a
@@ -73,7 +73,7 @@
                         <t t-foreach="calendar.iterweekdays()" t-as="weekday">
                             <th
                                 t-att-title="weekday_names[str(weekday + 1)]"
-                                t-esc="weekday_names[str(weekday + 1)][:3]"
+                                t-out="weekday_names[str(weekday + 1)][:3]"
                             />
                         </t>
                     </tr>
@@ -99,7 +99,7 @@
                                                 data-toggle="dropdown"
                                                 aria-haspopup="true"
                                                 aria-expanded="false"
-                                                t-esc="day.day"
+                                                t-out="day.day"
                                                 t-attf-id="dropdown-trigger-#{day.isoformat()}"
                                             />
                                             <div
@@ -113,14 +113,14 @@
                                                         type="button"
                                                         data-toggle="modal"
                                                         t-attf-data-target="#modal-confirm-#{int(slot.timestamp())}"
-                                                        t-esc="slot.strftime(time_format)"
+                                                        t-out="slot.strftime(time_format)"
                                                     />
                                                 </t>
                                             </div>
                                         </div>
                                     </t>
                                     <t t-else="">
-                                        <t t-esc="day.day" />
+                                        <t t-out="day.day" />
                                     </t>
                                 </td>
                             </t>
@@ -180,10 +180,10 @@
                                         <li>
                                             Start:
                                             <strong
-                                                t-esc="slot.strftime(date_format)"
+                                                t-out="slot.strftime(date_format)"
                                             />
                                             <strong
-                                                t-esc="slot.strftime(time_format)"
+                                                t-out="slot.strftime(time_format)"
                                             />
                                         </li>
                                         <li>
@@ -234,11 +234,11 @@
                     <t t-if="page_name == 'booking_schedule'">
                         <a
                             t-att-href="booking_sudo.get_portal_url()"
-                            t-esc="booking_sudo.display_name"
+                            t-out="booking_sudo.display_name"
                         />
                     </t>
                     <t t-else="">
-                        <t t-esc="booking_sudo.name" />
+                        <t t-out="booking_sudo.name" />
                     </t>
                 </li>
                 <li
@@ -514,7 +514,7 @@
                     <t t-if="error">
                         <br />
                         Error details:
-                        <span t-esc="error" />
+                        <span t-out="error" />
                     </t>
                 </div>
             </div>

From c5f69b41d7600a61c4b662f41a815aa2eb75130c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Tue, 25 Apr 2023 17:08:45 +0200
Subject: [PATCH 50/64] [IMP] resource_booking: Partial change from tour test
 to js

resource_booking 15.0.1.1.0
---
 resource_booking/__manifest__.py              |  3 +-
 .../static/src/js/resource_booking_tour.js    | 44 +++++++++++++++++++
 resource_booking/templates/portal.xml         |  5 ++-
 resource_booking/tests/test_portal.py         | 20 ++-------
 4 files changed, 53 insertions(+), 19 deletions(-)
 create mode 100644 resource_booking/static/src/js/resource_booking_tour.js

diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index f95d7b93..ff8b5250 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.0.0",
+    "version": "15.0.1.1.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
@@ -40,6 +40,7 @@
     ],
     "assets": {
         "web.assets_frontend": ["resource_booking/static/src/scss/portal.scss"],
+        "web.assets_tests": ["resource_booking/static/src/js/resource_booking_tour.js"],
     },
     "demo": ["demo/res_users_demo.xml"],
 }
diff --git a/resource_booking/static/src/js/resource_booking_tour.js b/resource_booking/static/src/js/resource_booking_tour.js
new file mode 100644
index 00000000..8b1a9fba
--- /dev/null
+++ b/resource_booking/static/src/js/resource_booking_tour.js
@@ -0,0 +1,44 @@
+odoo.define("resource_booking.tour", function (require) {
+    "use strict";
+
+    var tour = require("web_tour.tour");
+
+    tour.register(
+        "resource_booking_ptl_tour",
+        {
+            test: true,
+            url: "/my",
+        },
+        [
+            {
+                content: "Go /my/bookings url",
+                trigger: 'a[href*="/my/bookings"]',
+            },
+            {
+                content: "There are currently no bookings for your account.",
+                trigger: "p",
+            },
+        ]
+    );
+    tour.register(
+        "resource_booking_ptl2_tour",
+        {
+            test: true,
+            url: "/my",
+        },
+        [
+            {
+                content: "Go /my/bookings url",
+                trigger: 'a[href*="/my/bookings"]',
+            },
+            {
+                content: "Go to Booking item",
+                trigger: ".tr_resource_booking_link:eq(0)",
+            },
+            {
+                content: "Schedule button",
+                trigger: ".badge:contains('Pending')",
+            },
+        ]
+    );
+});
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 1f16fa1a..05cf8742 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -279,7 +279,10 @@
                 <t t-foreach="bookings" t-as="booking">
                     <tr>
                         <td>
-                            <a t-att-href="booking.get_portal_url()">
+                            <a
+                                t-att-href="booking.get_portal_url()"
+                                t-attf-class="tr_resource_booking_link"
+                            >
                                 <span t-field="booking.display_name" />
                             </a>
                         </td>
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 1cc4af4f..8317959c 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -41,28 +41,14 @@ def _url_xml(self, url, data=None, timeout=10):
         return fromstring(response.content)
 
     def test_portal_no_bookings(self):
-        self.authenticate("ptl", "ptl")
-        page = fromstring(self.url_open("/my").content)
-        self.assertTrue(page.cssselect(".o_portal_docs"))
-        self.assertFalse(page.cssselect('.o_portal_docs a:contains("Bookings")'))
+        self.start_tour("/", "resource_booking_ptl_tour", login="ptl")
 
     def test_portal_list_with_bookings(self):
         # Create one pending booking
-        booking = self.env["resource.booking"].create(
+        self.env["resource.booking"].create(
             {"partner_id": self.user_portal.partner_id.id, "type_id": self.rbt.id}
         )
-        self.authenticate("ptl", "ptl")
-        # Main portal page contains bookings count
-        page = self._url_xml("/my")
-        link = page.cssselect('.o_portal_docs a:contains("Bookings")')[0]
-        self.assertEqual(link.cssselect(".badge")[0].text.strip(), "1")
-        # Bookings page lists 1 booking
-        page = self._url_xml(link.get("href"))
-        self.assertEqual(len(page.cssselect(".o_portal_my_doc_table tr")), 2)
-        link = page.cssselect('.o_portal_my_doc_table a:contains("%d")' % booking.id)[0]
-        # Booking page has schedule button
-        page = self._url_xml(link.get("href"))
-        self.assertTrue(page.cssselect('.badge:contains("Pending")'))
+        self.start_tour("/", "resource_booking_ptl2_tour", login="ptl")
 
     def test_portal_scheduling_conflict(self):
         """Produce a scheduling conflict and see how UI behaves.

From f5ce8732827238a5e83047e14f76c4f00cb3c386 Mon Sep 17 00:00:00 2001
From: Carmen Bianca BAKKER <carmen@coopiteasy.be>
Date: Tue, 31 Jan 2023 15:18:19 +0100
Subject: [PATCH 51/64] [IMP] resource_booking: Allow a booking to span more
 than one calendar day

Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>

[UPD] README.rst

oca-github-bot post-merge updates
---
 resource_booking/README.rst                   |  15 +-
 resource_booking/__manifest__.py              |   2 +-
 resource_booking/models/resource_booking.py   |  53 ++++++-
 .../static/description/index.html             |  52 ++++---
 resource_booking/tests/common.py              |  47 +++++-
 resource_booking/tests/test_backend.py        | 147 +++++++++++++++++-
 6 files changed, 275 insertions(+), 41 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 5039eee6..f366a771 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -2,10 +2,13 @@
 Resource booking
 ================
 
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.. 
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! source digest: sha256:17ca982be0206aaadf1595108e53e37b5812a0963b66d3debc7530a9798b5a95
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
     :target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ Resource booking
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
     :target: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking
     :alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/279/15.0
-    :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+    :target: https://runboat.odoo-community.org/builds?repo=OCA/calendar&target_branch=15.0
+    :alt: Try me on Runboat
 
-|badge1| |badge2| |badge3| |badge4| |badge5| 
+|badge1| |badge2| |badge3| |badge4| |badge5|
 
 This module adds a new app to allow you to book resource combinations in given
 schedules.
@@ -166,7 +169,7 @@ Bug Tracker
 
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
 `feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index ff8b5250..06ce5a3e 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.1.0",
+    "version": "15.0.1.1.1",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index da0a3974..83f6ea71 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -14,12 +14,61 @@
 
 
 def _availability_is_fitting(available_intervals, start_dt, end_dt):
+    # Test whether the stretch between start_dt and end_dt is an uninterrupted
+    # stretch of time as determined by `available_intervals`.
+    #
+    # `available_intervals` is typically created by `_get_intervals()`, which in
+    # turn uses `calendar._work_intervals()`. It appears to be default upstream
+    # behaviour of `_work_intervals()` to create a (start_dt, end_dt, record)
+    # tuple for every day, where end_dt is at 23:59, and the next tuple's
+    # start_dt is at 00:00.
+    #
+    # Changing this upstream behaviour of `_work_intervals()` to return a
+    # _single_ tuple for any multi-day uninterrupted stretch of time would
+    # probably be preferable, but (1.) the code in `_work_intervals()` is
+    # unbelievably arcane, and (2.) changing this behaviour is extremely likely
+    # to cause bugs elsewhere. So instead, we account for the upstream behaviour
+    # here.
+    start_date = start_dt.date()
+    end_date = end_dt.date()
     # Booking is uninterrupted on the same calendar day.
-    return (
+    if (
         len(available_intervals) == 1
         and available_intervals._items[0][0] <= start_dt
         and available_intervals._items[0][1] >= end_dt
-    )
+    ):
+        return True
+    # Booking spans more than one calendar day, e.g. from 23:00 to 1:00
+    # the next day.
+    elif available_intervals and start_date != end_date:
+        tally_date = start_date
+        for item in available_intervals:
+            item0_date = item[0].date()
+            item1_date = item[1].date()
+            # FIXME: Really weird workaround for when available_intervals has
+            # nonsensical items in it where item1_date is before item0_date.
+            # Just ignore those items and pretend they don't exist; all the
+            # other items appear to make sense.
+            if item1_date < item0_date:
+                continue
+            # Intervals that aren't on the running tally date break the streak.
+            # This check is for malformed data in `available_intervals` where a
+            # day is skipped.
+            if item0_date != tally_date or item1_date != tally_date:
+                break
+            # Intervals that aren't on the end date should end at 23:59 (and any
+            # number of seconds).
+            if item1_date != end_date and (item[1].hour != 23 or item[1].minute != 59):
+                break
+            # Intervals that aren't on the start date should start at 00:00 (and
+            # any number of seconds).
+            if item0_date != start_date and (item[0].hour != 0 or item[0].minute != 0):
+                break
+            # The next interval should be on the next day.
+            tally_date += timedelta(days=1)
+        else:
+            return True
+    return False
 
 
 class ResourceBooking(models.Model):
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index b5f25622..da161a6f 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -1,20 +1,20 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8"?>
 <!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>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
 <title>Resource booking</title>
 <style type="text/css">
 
 /*
 :Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
 :Copyright: This stylesheet has been placed in the public domain.
 
 Default cascading style sheet for the HTML output of Docutils.
 
-See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
 customize this style sheet.
 */
 
@@ -366,8 +366,10 @@ <h1 class="title">Resource booking</h1>
 <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! source digest: sha256:17ca982be0206aaadf1595108e53e37b5812a0963b66d3debc7530a9798b5a95
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/279/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
 schedules.</p>
 <p>Example use cases:</p>
@@ -393,21 +395,21 @@ <h1 class="title">Resource booking</h1>
 <p><strong>Table of contents</strong></p>
 <div class="contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
-<li><a class="reference internal" href="#configuration" id="id2">Configuration</a></li>
-<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
-<li><a class="reference internal" href="#known-issues-roadmap" id="id4">Known issues / Roadmap</a></li>
-<li><a class="reference internal" href="#bug-tracker" id="id5">Bug Tracker</a></li>
-<li><a class="reference internal" href="#credits" id="id6">Credits</a><ul>
-<li><a class="reference internal" href="#authors" id="id7">Authors</a></li>
-<li><a class="reference internal" href="#contributors" id="id8">Contributors</a></li>
-<li><a class="reference internal" href="#maintainers" id="id9">Maintainers</a></li>
+<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
+<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
+<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a></li>
+<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-4">Known issues / Roadmap</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="toc-entry-5">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="toc-entry-6">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="toc-entry-7">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="toc-entry-8">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
 </ul>
 </li>
 </ul>
 </div>
 <div class="section" id="installation">
-<h1><a class="toc-backref" href="#id1">Installation</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
 <p>To install this module, you need to install these dependencies:</p>
 <ol class="arabic simple">
 <li><a class="reference external" href="https://github.com/spulec/freezegun">freezegun</a></li>
@@ -424,7 +426,7 @@ <h1><a class="toc-backref" href="#id1">Installation</a></h1>
 </ul>
 </div>
 <div class="section" id="configuration">
-<h1><a class="toc-backref" href="#id2">Configuration</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
 <p>To let some backend user to book resources:</p>
 <ol class="arabic simple">
 <li>Go to <em>Settings &gt; Users &amp; Companies &gt; Users</em>.</li>
@@ -462,7 +464,7 @@ <h1><a class="toc-backref" href="#id2">Configuration</a></h1>
 </ol>
 </div>
 <div class="section" id="usage">
-<h1><a class="toc-backref" href="#id3">Usage</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
 <p>This module installs a new app, “Resource bookings”.</p>
 <p>Bookings may involve you:</p>
 <ul class="simple">
@@ -505,7 +507,7 @@ <h1><a class="toc-backref" href="#id3">Usage</a></h1>
 </ol>
 </div>
 <div class="section" id="known-issues-roadmap">
-<h1><a class="toc-backref" href="#id4">Known issues / Roadmap</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h1>
 <ul class="simple">
 <li>Allow combination auto-assignment based on least used combination.</li>
 <li>Allow customer to choose combination.</li>
@@ -515,36 +517,36 @@ <h1><a class="toc-backref" href="#id4">Known issues / Roadmap</a></h1>
 </ul>
 </div>
 <div class="section" id="bug-tracker">
-<h1><a class="toc-backref" href="#id5">Bug Tracker</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/calendar/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
 <a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
-<h1><a class="toc-backref" href="#id6">Credits</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-6">Credits</a></h1>
 <div class="section" id="authors">
-<h2><a class="toc-backref" href="#id7">Authors</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-7">Authors</a></h2>
 <ul class="simple">
 <li>Tecnativa</li>
 </ul>
 </div>
 <div class="section" id="contributors">
-<h2><a class="toc-backref" href="#id8">Contributors</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-8">Contributors</a></h2>
 <ul class="simple">
 <li>Jairo Llopis &lt;<a class="reference external" href="mailto:jairo.llopis&#64;tecnativa.com">jairo.llopis&#64;tecnativa.com</a>&gt; (<a class="reference external" href="https://www.tecnativa.com/">https://www.tecnativa.com/</a>)</li>
 </ul>
 </div>
 <div class="section" id="maintainers">
-<h2><a class="toc-backref" href="#id9">Maintainers</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
 <p>This module is maintained by the OCA.</p>
 <a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
 mission is to support the collaborative development of Odoo features and
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
-<p><a class="reference external" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a></p>
+<p><a class="reference external image-reference" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a></p>
 <p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/15.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
index 889257e2..335e6e4c 100644
--- a/resource_booking/tests/common.py
+++ b/resource_booking/tests/common.py
@@ -10,7 +10,8 @@ def create_test_data(obj):
         )
     )
     # Create one resource.calendar available on Mondays, another one on
-    # Tuesdays, and another one on Mondays and Tuesdays; in that order
+    # Tuesdays, and another one on Mondays and Tuesdays; in that order.
+    # Also create an all-day calendar for Saturday and Sunday.
     attendances = [
         (
             0,
@@ -34,12 +35,46 @@ def create_test_data(obj):
                 "day_period": "morning",
             },
         ),
+        (
+            0,
+            0,
+            {
+                "name": "Fridays",
+                "dayofweek": "4",
+                "hour_from": 0,
+                "hour_to": 23.99,
+                "day_period": "morning",
+            },
+        ),
+        (
+            0,
+            0,
+            {
+                "name": "Saturdays",
+                "dayofweek": "5",
+                "hour_from": 0,
+                "hour_to": 23.99,
+                "day_period": "morning",
+            },
+        ),
+        (
+            0,
+            0,
+            {
+                "name": "Sunday",
+                "dayofweek": "6",
+                "hour_from": 0,
+                "hour_to": 23.99,
+                "day_period": "morning",
+            },
+        ),
     ]
     obj.r_calendars = obj.env["resource.calendar"].create(
         [
-            {"name": "Mon", "attendance_ids": attendances[:1], "tz": "UTC"},
-            {"name": "Tue", "attendance_ids": attendances[1:], "tz": "UTC"},
-            {"name": "MonTue", "attendance_ids": attendances, "tz": "UTC"},
+            {"name": "Mon", "attendance_ids": [attendances[0]], "tz": "UTC"},
+            {"name": "Tue", "attendance_ids": [attendances[1]], "tz": "UTC"},
+            {"name": "MonTue", "attendance_ids": attendances[0:2], "tz": "UTC"},
+            {"name": "FriSun", "attendance_ids": attendances[2:], "tz": "UTC"},
         ]
     )
     # Create one material resource for each of those calendars; same order
@@ -62,7 +97,7 @@ def create_test_data(obj):
                 "login": "user_%d" % num,
                 "name": "User %d" % num,
             }
-            for num in range(3)
+            for num, _ in enumerate(obj.r_calendars)
         ]
     )
     obj.r_users = obj.env["resource.resource"].create(
@@ -85,7 +120,7 @@ def create_test_data(obj):
             for (user, material) in zip(obj.r_users, obj.r_materials)
         ]
     )
-    # Create one RBT that includes all 3 RBCs as available combinations
+    # Create one RBT that includes all RBCs as available combinations
     obj.rbt = obj.env["resource.booking.type"].create(
         {
             "name": "Test resource booking type",
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index c267a279..88ae41fb 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -11,6 +11,11 @@
 from odoo.exceptions import ValidationError
 from odoo.tests.common import Form, TransactionCase, new_test_user, users
 
+from odoo.addons.resource.models.resource import Intervals
+from odoo.addons.resource_booking.models.resource_booking import (
+    _availability_is_fitting,
+)
+
 from .common import create_test_data
 
 _2dt = fields.Datetime.to_datetime
@@ -109,6 +114,116 @@ def test_scheduling_conflict_constraints(self):
             }
         )
 
+    def test_scheduling_constraints_span_two_days(self):
+        # Booking can span across two calendar days.
+        cal_frisun = self.r_calendars[3]
+        rbc_frisun = self.rbcs[3]
+        self.rbt.resource_calendar_id = cal_frisun
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-06 23:00:00",
+                "duration": 2,
+                "type_id": self.rbt.id,
+                "combination_id": rbc_frisun.id,
+                "combination_auto_assign": False,
+            }
+        )
+        # Booking cannot overlap.
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-06 22:00:00",
+                    "duration": 4,
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_frisun.id,
+                    "combination_auto_assign": False,
+                }
+            )
+        # Test a case where there is an overlap, but the conflict happens at
+        # 00:00 exactly.
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-14 00:00:00",
+                "duration": 1,
+                "type_id": self.rbt.id,
+                "combination_id": rbc_frisun.id,
+                "combination_auto_assign": False,
+            }
+        )
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-13 23:00:00",
+                    "duration": 4,
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_frisun.id,
+                    "combination_auto_assign": False,
+                }
+            )
+        # If there are too many minutes between the end and start of the two
+        # dates, the booking cannot be contiguous.
+        cal_frisun.attendance_ids.write({"hour_to": 23.96})  # 23:58
+        with self.assertRaises(ValidationError), self.env.cr.savepoint():
+            self.env["resource.booking"].create(
+                {
+                    "partner_id": self.partner.id,
+                    "start": "2021-03-20 23:00:00",
+                    "duration": 2,
+                    "type_id": self.rbt.id,
+                    "combination_id": rbc_frisun.id,
+                    "combination_auto_assign": False,
+                }
+            )
+
+    def test_scheduling_constraints_span_three_days(self):
+        # Booking can span across two calendar days.
+        cal_frisun = self.r_calendars[3]
+        rbc_frisun = self.rbcs[3]
+        self.rbt.resource_calendar_id = cal_frisun
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-05 23:00:00",
+                "duration": 24 * 2,
+                "type_id": self.rbt.id,
+                "combination_id": rbc_frisun.id,
+                "combination_auto_assign": False,
+            }
+        )
+
+    def test_availability_is_fitting_malformed_date_skip(self):
+        """Test a case for malformed data where a date is skipped in the
+        available_intervals list of tuples.
+        """
+        recset = self.env["resource.booking"]
+        tuples = [
+            (datetime(2021, 3, 1, 18, 0), datetime(2021, 3, 1, 23, 59), recset),
+            (datetime(2021, 3, 2, 0, 0), datetime(2021, 3, 2, 23, 59), recset),
+            (datetime(2021, 3, 3, 0, 0), datetime(2021, 3, 3, 18, 0), recset),
+        ]
+        available_intervals = Intervals(tuples)
+        self.assertTrue(
+            _availability_is_fitting(
+                available_intervals,
+                datetime(2021, 3, 1, 18, 0),
+                datetime(2021, 3, 3, 18, 0),
+            )
+        )
+        # Skip a day by removing it.
+        tuples.pop(1)
+        available_intervals = Intervals(tuples)
+        self.assertFalse(
+            _availability_is_fitting(
+                available_intervals,
+                datetime(2021, 3, 1, 18, 0),
+                datetime(2021, 3, 3, 18, 0),
+            )
+        )
+
     def test_rbc_forced_calendar(self):
         # Type is available on Mondays
         cal_mon = self.r_calendars[0]
@@ -259,7 +374,7 @@ def test_state(self):
 
     def test_sorted_assignment(self):
         """Set sorted assignment on RBT and test it works correctly."""
-        rbc_mon, rbc_tue, rbc_montue = self.rbcs
+        rbc_mon, rbc_tue, rbc_montue, rbc_frisun = self.rbcs
         with Form(self.rbt) as rbt_form:
             rbt_form.combination_assignment = "sorted"
         # Book next monday at 10:00
@@ -715,3 +830,33 @@ def test_resource_is_available(self):
                 utc.localize(datetime(2021, 3, 3, 11, 0)),
             )
         )
+
+    def test_resource_is_available_span_days(self):
+        # Correctly handle bookings that span across midnight.
+        cal_satsun = self.r_calendars[3]
+        rbc_satsun = self.rbcs[3]
+        resource = rbc_satsun.resource_ids[1]
+        self.rbt.resource_calendar_id = cal_satsun
+        self.env["resource.booking"].create(
+            {
+                "partner_id": self.partner.id,
+                "start": "2021-03-06 23:00:00",
+                "duration": 2,
+                "type_id": self.rbt.id,
+                "combination_id": rbc_satsun.id,
+                "combination_auto_assign": False,
+            }
+        )
+        self.assertFalse(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 6, 22, 0)),
+                utc.localize(datetime(2021, 3, 7, 2, 0)),
+            )
+        )
+        # Resource is available on the next weekend.
+        self.assertTrue(
+            resource.is_available(
+                utc.localize(datetime(2021, 3, 13, 22, 0)),
+                utc.localize(datetime(2021, 3, 14, 2, 0)),
+            )
+        )

From 16e94ba49910addc056d071f08faa9f5d2186b39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Tue, 26 Sep 2023 16:17:04 +0200
Subject: [PATCH 52/64] [FIX] resource_booking: Add class to schedule page to
 show full dropdown if opened at the bottom

TT45274

[BOT] post-merge updates
---
 resource_booking/README.rst                    | 2 +-
 resource_booking/__manifest__.py               | 2 +-
 resource_booking/static/description/index.html | 2 +-
 resource_booking/static/src/scss/portal.scss   | 4 ++++
 resource_booking/templates/portal.xml          | 1 +
 5 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index f366a771..bd799816 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:17ca982be0206aaadf1595108e53e37b5812a0963b66d3debc7530a9798b5a95
+   !! source digest: sha256:2a6c18363e153829a086707f52e07941b3b371b1c2ae5a11a36d7b7ab6d5507c
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 06ce5a3e..118be0cc 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.1.1",
+    "version": "15.0.1.2.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index da161a6f..c0f2a766 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:17ca982be0206aaadf1595108e53e37b5812a0963b66d3debc7530a9798b5a95
+!! source digest: sha256:2a6c18363e153829a086707f52e07941b3b371b1c2ae5a11a36d7b7ab6d5507c
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
diff --git a/resource_booking/static/src/scss/portal.scss b/resource_booking/static/src/scss/portal.scss
index cbca7f46..c7373b0b 100644
--- a/resource_booking/static/src/scss/portal.scss
+++ b/resource_booking/static/src/scss/portal.scss
@@ -6,3 +6,7 @@
     max-height: 40vh;
     overflow: auto;
 }
+// Show full dropdown if opened at the bottom
+.resource_booking_portal_schedule {
+    overflow: initial;
+}
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 05cf8742..3126b1fa 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -545,6 +545,7 @@
             </t>
             <!-- Scheduling form -->
             <t t-call="portal.portal_record_layout">
+                <t t-set="classes" t-value="'resource_booking_portal_schedule'" />
                 <t t-set="card_header">
                     <t t-call="resource_booking.resource_booking_portal_header" />
                 </t>

From 5ee2c9d3d5c29526a7808c7fda1bbb6ff266d0be Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Fri, 29 Sep 2023 19:22:02 +0200
Subject: [PATCH 53/64] [FIX] resource_booking: Don't fail on archived resource

Steps to reproduce the problem:

- Create an employee.
- Create a resource booking combination with such employee.
- Create or modify a resource booking type including the previous combination.
- Create a resource booking using that type and combination, and
  schedule it.
- Archive the employee.
- Do any change on the resource booking type.

Current behavior:

Error saying:
"Cannot schedule these bookings because no resources are selected for them:..."

Expected behavior:
No error

The problem is that we do the checks without taking into account the
archived resource, and thus, it fails. Using active_test=False makes
them to appear for the check.

[BOT] post-merge updates
---
 resource_booking/README.rst                    | 2 +-
 resource_booking/__manifest__.py               | 2 +-
 resource_booking/models/resource_booking.py    | 4 +++-
 resource_booking/static/description/index.html | 2 +-
 4 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index bd799816..8e1f5534 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:2a6c18363e153829a086707f52e07941b3b371b1c2ae5a11a36d7b7ab6d5507c
+   !! source digest: sha256:6c5d84e7280ce983a0e2573241a358107b7f97b52f727e57b659e3432cf870a1
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 118be0cc..068bd2c4 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.2.0",
+    "version": "15.0.1.2.1",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 83f6ea71..95911740 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -391,7 +391,9 @@ def _check_scheduling(self):
         if not has_meeting:
             return
         # Ensure all scheduled bookings have booked some resources
-        has_rbc = self.filtered("combination_id.resource_ids")
+        has_rbc = self.with_context(active_test=False).filtered(
+            "combination_id.resource_ids"
+        )
         missing_rbc = has_meeting - has_rbc
         if missing_rbc:
             raise ValidationError(
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index c0f2a766..22c6a303 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:2a6c18363e153829a086707f52e07941b3b371b1c2ae5a11a36d7b7ab6d5507c
+!! source digest: sha256:6c5d84e7280ce983a0e2573241a358107b7f97b52f727e57b659e3432cf870a1
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given

From 9e4a7c5534647fd313718be54d2d3d021b26244a Mon Sep 17 00:00:00 2001
From: Carolina Fernandez <carolina.fernandez@tecnativa.com>
Date: Fri, 20 Oct 2023 13:06:10 -0300
Subject: [PATCH 54/64] [15.0][ADD] resource_boooking: Add meeting url in
 resource booking TT45337

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: calendar-15.0/calendar-15.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking/

[UPD] Update resource_booking.pot

[BOT] post-merge updates

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: calendar-15.0/calendar-15.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking/
---
 resource_booking/README.rst                   |  2 +-
 resource_booking/__manifest__.py              |  2 +-
 resource_booking/i18n/ca.po                   | 19 ++++----
 resource_booking/i18n/es.po                   | 43 +++++++++---------
 resource_booking/i18n/fr.po                   | 19 ++++----
 resource_booking/i18n/fr_FR.po                | 22 +++++----
 resource_booking/i18n/resource_booking.pot    | 19 ++++----
 resource_booking/models/resource_booking.py   | 22 +++++++++
 .../models/resource_booking_type.py           |  1 +
 .../static/description/index.html             |  2 +-
 resource_booking/templates/portal.xml         |  9 ++++
 resource_booking/tests/common.py              |  1 +
 resource_booking/tests/test_backend.py        | 45 +++++++++++++++++++
 resource_booking/tests/test_portal.py         | 11 +++++
 .../views/resource_booking_type_views.xml     |  1 +
 .../views/resource_booking_views.xml          |  1 +
 16 files changed, 162 insertions(+), 57 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 8e1f5534..da1aead0 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:6c5d84e7280ce983a0e2573241a358107b7f97b52f727e57b659e3432cf870a1
+   !! source digest: sha256:c70889d0bc2b621cd88453d5d977084348dacfa9b664cffa568fb832076ac30a
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 068bd2c4..dc7f1668 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -5,7 +5,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.2.1",
+    "version": "15.0.1.3.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/i18n/ca.po b/resource_booking/i18n/ca.po
index 3e55a57d..d383b47a 100644
--- a/resource_booking/i18n/ca.po
+++ b/resource_booking/i18n/ca.po
@@ -135,6 +135,11 @@ msgstr ""
 msgid "<strong>Location:</strong>"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Meeting URL:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Requested by:</strong>"
@@ -564,9 +569,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr ""
 
@@ -675,6 +678,12 @@ msgstr ""
 msgid "Meeting"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__videocall_location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__videocall_location
+msgid "Meeting URL"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
 msgid "Meeting confirmed for this booking."
@@ -958,12 +967,6 @@ msgstr ""
 msgid "Restrict bookings to this schedule."
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
-msgid "SMS Delivery error"
-msgstr ""
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index a2dc91e5..a6fda32d 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -1,21 +1,20 @@
 # Translation of Odoo Server.
 # This file contains the translation of the following modules:
-#       * resource_booking
+# 	* resource_booking
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-30 10:28+0000\n"
-"PO-Revision-Date: 2021-04-30 11:29+0100\n"
-"Last-Translator: Jairo Llopis <jairo.llopis@tecnativa.com>\n"
+"POT-Creation-Date: 2023-10-20 15:55+0000\n"
+"PO-Revision-Date: 2023-10-20 15:55+0000\n"
+"Last-Translator: \n"
 "Language-Team: \n"
-"Language: es\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3.2\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
 
 #. module: resource_booking
 #: code:addons/resource_booking/models/resource_booking.py:0
@@ -142,6 +141,11 @@ msgstr ""
 msgid "<strong>Location:</strong>"
 msgstr "<strong>Ubicación:</strong>"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Meeting URL:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Requested by:</strong>"
@@ -303,7 +307,7 @@ msgstr "Reservas/citas disponibles para este tipo"
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_calendar_event
 msgid "Calendar Event"
-msgstr ""
+msgstr "Evento de calendario"
 
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -584,9 +588,7 @@ msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr "Si está marcado, algunos mensajes no se pudieron entregar."
 
@@ -695,6 +697,12 @@ msgstr ""
 msgid "Meeting"
 msgstr "Reunión"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__videocall_location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__videocall_location
+msgid "Meeting URL"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
 msgid "Meeting confirmed for this booking."
@@ -923,7 +931,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_calendar
 msgid "Resource Working Time"
-msgstr "Horario de trabajo del recurso"
+msgstr "Tiempo de Trabajo de Recursos"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
@@ -986,12 +994,6 @@ msgstr "Usuario responsable"
 msgid "Restrict bookings to this schedule."
 msgstr "Restringir reservas/citas a este horario."
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
-msgid "SMS Delivery error"
-msgstr ""
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -1305,6 +1307,3 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
-
-#~ msgid "Followers (Channels)"
-#~ msgstr "Seguidores (canales)"
diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
index 58fa7a2e..67245949 100644
--- a/resource_booking/i18n/fr.po
+++ b/resource_booking/i18n/fr.po
@@ -129,6 +129,11 @@ msgstr ""
 msgid "<strong>Location:</strong>"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Meeting URL:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Requested by:</strong>"
@@ -558,9 +563,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr ""
 
@@ -669,6 +672,12 @@ msgstr ""
 msgid "Meeting"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__videocall_location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__videocall_location
+msgid "Meeting URL"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
 msgid "Meeting confirmed for this booking."
@@ -952,12 +961,6 @@ msgstr ""
 msgid "Restrict bookings to this schedule."
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
-msgid "SMS Delivery error"
-msgstr ""
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index fa48df79..343a4273 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -141,6 +141,11 @@ msgstr "<strong>Durée:</strong>"
 msgid "<strong>Location:</strong>"
 msgstr "<strong>Emplacement:</strong>"
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Meeting URL:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Requested by:</strong>"
@@ -585,9 +590,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr "Si coché, certains messages ont une erreur de livraison."
 
@@ -698,6 +701,12 @@ msgstr "Attribué manuellement :"
 msgid "Meeting"
 msgstr "Rencontre"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__videocall_location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__videocall_location
+msgid "Meeting URL"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
 msgid "Meeting confirmed for this booking."
@@ -989,12 +998,6 @@ msgstr "Utilisateur responsable"
 msgid "Restrict bookings to this schedule."
 msgstr "Limitez les réservations à cet horaire."
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
-msgid "SMS Delivery error"
-msgstr "Erreur de livraison SMS"
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
@@ -1316,5 +1319,8 @@ msgstr ""
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
 
+#~ msgid "SMS Delivery error"
+#~ msgstr "Erreur de livraison SMS"
+
 #~ msgid "Followers (Channels)"
 #~ msgstr "Abonnés (Chaînes)"
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 7500b5a7..6fec9bb6 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -126,6 +126,11 @@ msgstr ""
 msgid "<strong>Location:</strong>"
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
+msgid "<strong>Meeting URL:</strong>"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_portal_form
 msgid "<strong>Requested by:</strong>"
@@ -554,9 +559,7 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__message_has_sms_error
 #: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_error
-#: model:ir.model.fields,help:resource_booking.field_resource_booking_type__message_has_sms_error
 msgid "If checked, some messages have a delivery error."
 msgstr ""
 
@@ -665,6 +668,12 @@ msgstr ""
 msgid "Meeting"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__videocall_location
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__videocall_location
+msgid "Meeting URL"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,help:resource_booking.field_resource_booking__meeting_id
 msgid "Meeting confirmed for this booking."
@@ -948,12 +957,6 @@ msgstr ""
 msgid "Restrict bookings to this schedule."
 msgstr ""
 
-#. module: resource_booking
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_has_sms_error
-#: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_has_sms_error
-msgid "SMS Delivery error"
-msgstr ""
-
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.portal_breadcrumbs
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 95911740..52e35a70 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -1,5 +1,6 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # Copyright 2022 Tecnativa - Pedro M. Baeza
+# Copyright 2023 Tecnativa - Carolina Fernandez
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 import calendar
@@ -151,6 +152,12 @@ class ResourceBooking(models.Model):
         readonly=False,
         store=True,
     )
+    videocall_location = fields.Char(
+        compute="_compute_videocall_location",
+        string="Meeting URL",
+        readonly=False,
+        store=True,
+    )
     requester_advice = fields.Text(related="type_id.requester_advice", readonly=True)
     is_modifiable = fields.Boolean(compute="_compute_is_modifiable")
     is_overdue = fields.Boolean(compute="_compute_is_overdue")
@@ -271,6 +278,20 @@ def _compute_location(self):
             elif record.meeting_id:
                 record.location = record.meeting_id.location
 
+    @api.depends("meeting_id.videocall_location", "type_id")
+    def _compute_videocall_location(self):
+        """Get videocall location from meeting or type."""
+        for record in self:
+            # Get videocall_location from type when changing it or creating from ORM
+            if (
+                not record.videocall_location
+                or record._origin.type_id != record.type_id
+            ):
+                record.videocall_location = record.type_id.videocall_location
+            # Get it from meeting only when available
+            elif record.meeting_id:
+                record.videocall_location = record.meeting_id.videocall_location
+
     @api.depends("active", "meeting_id.attendee_ids.state")
     def _compute_state(self):
         """Obtain request state."""
@@ -340,6 +361,7 @@ def _prepare_meeting_vals(self):
             description=self.type_id.requester_advice,
             duration=self.duration,
             location=self.location,
+            videocall_location=self.videocall_location,
             name=self.name or self._get_name_formatted(self.partner_id, self.type_id),
             partner_ids=[
                 (4, partner.id, 0) for partner in self.partner_id | resource_partners
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 077a5045..d43f25a9 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -65,6 +65,7 @@ class ResourceBookingType(models.Model):
         ),
     )
     location = fields.Char()
+    videocall_location = fields.Char(string="Meeting URL")
     modifications_deadline = fields.Float(
         required=True,
         default=24,
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index 22c6a303..d463c963 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:6c5d84e7280ce983a0e2573241a358107b7f97b52f727e57b659e3432cf870a1
+!! source digest: sha256:c70889d0bc2b621cd88453d5d977084348dacfa9b664cffa568fb832076ac30a
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 3126b1fa..648cbb1b 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -369,6 +369,15 @@
                                 <strong>Location:</strong>
                                 <span t-field="booking_sudo.location" />
                             </div>
+                            <div class="mb-1">
+                                <strong>Meeting URL:</strong>
+                                <a
+                                    t-att-href="booking_sudo.videocall_location"
+                                    target="_blank"
+                                >
+                                    <t t-out="booking_sudo.videocall_location or ''" />
+                                </a>
+                            </div>
                             <div class="mb-1">
                                 <strong>Dates:</strong>
                                 <span t-field="booking_sudo.meeting_id.display_time" />
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
index 335e6e4c..1bf5e4bb 100644
--- a/resource_booking/tests/common.py
+++ b/resource_booking/tests/common.py
@@ -130,6 +130,7 @@ def create_test_data(obj):
             ],
             "resource_calendar_id": obj.r_calendars[2].id,
             "location": "Main office",
+            "videocall_location": "Videocall Main office",
         }
     )
     # Create some partner
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 88ae41fb..56a5c695 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -607,6 +607,51 @@ def test_location(self):
         self.assertFalse(rb.meeting_id)
         self.assertEqual(rb.location, "Office 3")
 
+    def test_videocall_location(self):
+        """Videocall location across records works as expected."""
+        rbt2 = self.rbt.copy({"videocall_location": "Videocall Office 2"})
+        rb_f = Form(self.env["resource.booking"])
+        rb_f.partner_id = self.partner
+        rb_f.type_id = self.rbt
+        rb = rb_f.save()
+        # Pending booking inherits videocall location from type
+        self.assertEqual(rb.state, "pending")
+        self.assertEqual(rb.videocall_location, "Videocall Main office")
+        # Booking can change videocall location independently now
+        with Form(rb) as rb_f:
+            rb_f.videocall_location = "Videocall Office 3"
+        self.assertEqual(self.rbt.videocall_location, "Videocall Main office")
+        self.assertEqual(rb.videocall_location, "Videocall Office 3")
+        # Changing booking type changes videocall location
+        with Form(rb) as rb_f:
+            rb_f.type_id = rbt2
+        self.assertEqual(rb.videocall_location, "Videocall Office 2")
+        # Still can change it independently
+        with Form(rb) as rb_f:
+            rb_f.videocall_location = "Videocall Office 1"
+        self.assertEqual(rb.videocall_location, "Videocall Office 1")
+        self.assertEqual(rbt2.videocall_location, "Videocall Office 2")
+        # Schedule the booking, meeting inherits videocall location from it
+        with Form(rb) as rb_f:
+            rb_f.start = "2021-03-01 08:00:00"
+        self.assertEqual(rb.state, "scheduled")
+        self.assertEqual(rb.videocall_location, "Videocall Office 1")
+        self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 1")
+        # Changing meeting videocall location changes videocall location of booking
+        with Form(rb.meeting_id) as meeting_f:
+            meeting_f.videocall_location = "Videocall Office 2"
+        self.assertEqual(rb.videocall_location, "Videocall Office 2")
+        self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 2")
+        # Changing booking videocall location changes meeting location
+        with Form(rb) as rb_f:
+            rb_f.videocall_location = "Videocall Office 3"
+        self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 3")
+        self.assertEqual(rb.videocall_location, "Videocall Office 3")
+        # When unscheduled, it keeps videocall location untouched
+        rb.action_unschedule()
+        self.assertFalse(rb.meeting_id)
+        self.assertEqual(rb.videocall_location, "Videocall Office 3")
+
     def test_organizer_sync(self):
         """Resource booking and meeting organizers are properly synced."""
         rb = self.env["resource.booking"].create(
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 8317959c..99a03dc5 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -71,6 +71,7 @@ def test_portal_scheduling_conflict(self):
                     "partner_id": self.partner.id,
                     "type_id": self.rbt.id,
                     "location": "Office 2",
+                    "videocall_location": "Videocall Office 2",
                 },
             ]
         )
@@ -86,6 +87,11 @@ def test_portal_scheduling_conflict(self):
         self.assertTrue(
             portal_page.cssselect(':contains("Location:") + :contains("Main office")')
         )
+        self.assertTrue(
+            portal_page.cssselect(
+                ':contains("Meeting URL:") + :contains("Videocall Main office")'
+            )
+        )
         link = portal_page.cssselect('a:contains("Schedule")')[0]
         portal_url = link.get("href")
         portal_page = self._url_xml(portal_url)
@@ -118,6 +124,11 @@ def test_portal_scheduling_conflict(self):
         self.assertTrue(
             public_page.cssselect(':contains("Location:") + :contains("Office 2")')
         )
+        self.assertTrue(
+            public_page.cssselect(
+                ':contains("Meeting URL:") + :contains("Videocall Office 2")'
+            )
+        )
         self.assertTrue(public_page.cssselect('.badge:contains("Pending")'))
         link = public_page.cssselect('a:contains("Schedule")')[0]
         public_url = link.get("href")
diff --git a/resource_booking/views/resource_booking_type_views.xml b/resource_booking/views/resource_booking_type_views.xml
index cf33a750..bc00b278 100644
--- a/resource_booking/views/resource_booking_type_views.xml
+++ b/resource_booking/views/resource_booking_type_views.xml
@@ -45,6 +45,7 @@
                         </group>
                         <group name="event_defaults" string="Meeting defaults">
                             <field name="location" />
+                            <field name="videocall_location" />
                             <field name="alarm_ids" widget="many2many_tags" />
                             <field
                                 name="categ_ids"
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index 4fbf8902..c55274f5 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -183,6 +183,7 @@
                             />
                             <field name="stop" />
                             <field name="location" />
+                            <field name="videocall_location" />
                         </group>
                         <field name="description" colspan="4" />
                     </group>

From 8528dc74e3fa23ee2b82806f28745ceaee2dba18 Mon Sep 17 00:00:00 2001
From: Carolina Fernandez <carolina.fernandez@tecnativa.com>
Date: Tue, 7 Nov 2023 16:02:12 -0300
Subject: [PATCH 55/64] [IMP] resource_booking: Add multiples requesters in
 booking

[UPD] Update resource_booking.pot

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: calendar-15.0/calendar-15.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking/
---
 resource_booking/README.rst                   |  2 +-
 resource_booking/__manifest__.py              |  3 +-
 resource_booking/i18n/ca.po                   |  9 ++-
 resource_booking/i18n/es.po                   | 14 +++-
 resource_booking/i18n/fr.po                   |  9 ++-
 resource_booking/i18n/fr_FR.po                | 14 +++-
 resource_booking/i18n/resource_booking.pot    |  9 ++-
 resource_booking/models/resource_booking.py   | 42 ++++++----
 .../security/resource_booking_security.xml    |  5 +-
 .../static/description/index.html             |  2 +-
 resource_booking/templates/portal.xml         | 12 ++-
 resource_booking/tests/test_backend.py        | 81 ++++++++++---------
 resource_booking/tests/test_portal.py         | 10 ++-
 .../views/resource_booking_views.xml          | 14 ++--
 14 files changed, 142 insertions(+), 84 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index da1aead0..f7c3f01e 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:c70889d0bc2b621cd88453d5d977084348dacfa9b664cffa568fb832076ac30a
+   !! source digest: sha256:12c8fe57d9a76b5ff44d26cdede1405ce562f2077a532346e1cffe9997c62b2c
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index dc7f1668..161bbda8 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -1,11 +1,12 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # Copyright 2022 Tecnativa - Pedro M. Baeza
+# Copyright 2023 Tecnativa - Carolina Fernandez
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.3.0",
+    "version": "15.0.1.4.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/i18n/ca.po b/resource_booking/i18n/ca.po
index d383b47a..ca776fd7 100644
--- a/resource_booking/i18n/ca.po
+++ b/resource_booking/i18n/ca.po
@@ -226,6 +226,11 @@ msgstr ""
 msgid "Attachment Count"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_ids
+msgid "Attendees"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
 msgid "Auto assigned"
@@ -1225,8 +1230,8 @@ msgid ""
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
-msgid "Who requested this booking?"
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_ids
+msgid "Who will attend this booking?"
 msgstr ""
 
 #. module: resource_booking
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index a6fda32d..a07281bc 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -232,6 +232,11 @@ msgstr "¿Está seguro/a?"
 msgid "Attachment Count"
 msgstr "Nº adjuntos"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_ids
+msgid "Attendees"
+msgstr "Asistentes"
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
 msgid "Auto assigned"
@@ -1275,9 +1280,9 @@ msgid ""
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
-msgid "Who requested this booking?"
-msgstr "¿Quién solicitó esta reserva/cita?"
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_ids
+msgid "Who will attend this booking?"
+msgstr "¿Quién asistirá a esta reserva/cita?"
 
 #. module: resource_booking
 #: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
@@ -1307,3 +1312,6 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
+
+#~ msgid "Who requested this booking?"
+#~ msgstr "¿Quién solicitó esta reserva/cita?"
diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
index 67245949..072fdab5 100644
--- a/resource_booking/i18n/fr.po
+++ b/resource_booking/i18n/fr.po
@@ -220,6 +220,11 @@ msgstr ""
 msgid "Attachment Count"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_ids
+msgid "Attendees"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
 msgid "Auto assigned"
@@ -1219,8 +1224,8 @@ msgid ""
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
-msgid "Who requested this booking?"
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_ids
+msgid "Who will attend this booking?"
 msgstr ""
 
 #. module: resource_booking
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index 343a4273..c3065d35 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -234,6 +234,11 @@ msgstr "Êtes-vous sûr?"
 msgid "Attachment Count"
 msgstr "Nombre de pièces jointes"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_ids
+msgid "Attendees"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
 msgid "Auto assigned"
@@ -1286,9 +1291,9 @@ msgstr ""
 "est programmé, et les notifications du calendrier seront envoyées en son nom."
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
-msgid "Who requested this booking?"
-msgstr "Qui a demandé cette réservation ?"
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_ids
+msgid "Who will attend this booking?"
+msgstr ""
 
 #. module: resource_booking
 #: model:ir.ui.menu,name:resource_booking.menu_resource_calendar
@@ -1319,6 +1324,9 @@ msgstr ""
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
 
+#~ msgid "Who requested this booking?"
+#~ msgstr "Qui a demandé cette réservation ?"
+
 #~ msgid "SMS Delivery error"
 #~ msgstr "Erreur de livraison SMS"
 
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 6fec9bb6..6dd1c61c 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -217,6 +217,11 @@ msgstr ""
 msgid "Attachment Count"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__partner_ids
+msgid "Attendees"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__combination_auto_assign
 msgid "Auto assigned"
@@ -1215,8 +1220,8 @@ msgid ""
 msgstr ""
 
 #. module: resource_booking
-#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_id
-msgid "Who requested this booking?"
+#: model:ir.model.fields,help:resource_booking.field_resource_booking__partner_ids
+msgid "Who will attend this booking?"
 msgstr ""
 
 #. module: resource_booking
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 52e35a70..138dddfd 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -125,12 +125,15 @@ class ResourceBooking(models.Model):
     description = fields.Html()
     partner_id = fields.Many2one(
         comodel_name="res.partner",
+        compute="_compute_partner_id",
         string="Requester",
-        index=True,
-        ondelete="cascade",
+    )
+    partner_ids = fields.Many2many(
+        comodel_name="res.partner",
+        string="Attendees",
         required=True,
         tracking=True,
-        help="Who requested this booking?",
+        help="Who will attend this booking?",
     )
     user_id = fields.Many2one(
         comodel_name="res.users",
@@ -211,6 +214,11 @@ class ResourceBooking(models.Model):
         tracking=True,
     )
 
+    @api.depends("partner_ids")
+    def _compute_partner_id(self):
+        for one in self:
+            one.partner_id = one.partner_ids[:1]
+
     @api.model
     def _default_user_id(self):
         return self.env.user
@@ -260,7 +268,7 @@ def _compute_is_modifiable(self):
             overdue = self.filtered("is_overdue")
             overdue.is_modifiable = False
 
-    @api.depends("name", "partner_id", "type_id", "meeting_id")
+    @api.depends("name", "partner_ids", "type_id", "meeting_id")
     @api.depends_context("uid", "using_portal")
     def _compute_display_name(self):
         """Overridden just for dependencies; see `name_get()` for implementation."""
@@ -302,7 +310,7 @@ def _compute_state(self):
                 continue
             confirmed = False
             for attendee in one.meeting_id.attendee_ids:
-                if attendee.partner_id == one.partner_id:
+                if attendee.partner_id in one.partner_ids:
                     confirmed = attendee.state == "accepted"
                     break
             if confirmed:
@@ -362,9 +370,10 @@ def _prepare_meeting_vals(self):
             duration=self.duration,
             location=self.location,
             videocall_location=self.videocall_location,
-            name=self.name or self._get_name_formatted(self.partner_id, self.type_id),
+            name=self.name
+            or self._get_name_formatted(self.partner_ids[0], self.type_id),
             partner_ids=[
-                (4, partner.id, 0) for partner in self.partner_id | resource_partners
+                (4, partner.id, 0) for partner in self.partner_ids | resource_partners
             ],
             resource_booking_ids=[(6, 0, self.ids)],
             start=self.start,
@@ -598,7 +607,7 @@ def name_get(self):
             elif not record.name:
                 # Automatic name for backend users
                 name = self._get_name_formatted(
-                    record.partner_id, record.type_id, record.meeting_id
+                    record.partner_ids[0], record.type_id, record.meeting_id
                 )
             new.append((id_, name))
         return new
@@ -632,11 +641,12 @@ def _message_get_suggested_recipients(self):
         """Suggest related partners."""
         recipients = super()._message_get_suggested_recipients()
         for record in self:
-            record._message_add_suggested_recipient(
-                recipients,
-                partner=record.partner_id,
-                reason=self._fields["partner_id"].string,
-            )
+            for partner in record.partner_ids:
+                record._message_add_suggested_recipient(
+                    recipients,
+                    partner=partner,
+                    reason=self._fields["partner_ids"].string,
+                )
         return recipients
 
     def action_schedule(self):
@@ -673,12 +683,12 @@ def action_confirm(self):
             for booking in self:
                 if not booking.meeting_id:
                     continue
-                # Make sure requester and user resources are meeting attendees
-                booking.meeting_id.partner_ids |= booking.partner_id | booking.mapped(
+                # Make sure requesters and user resources are meeting attendees
+                booking.meeting_id.partner_ids |= booking.partner_ids | booking.mapped(
                     "combination_id.resource_ids.user_id.partner_id"
                 )
                 # Find meeting attendees that should be confirmed
-                partners_to_confirm = confirm_always | booking.partner_id
+                partners_to_confirm = confirm_always | booking.partner_ids
                 for attendee in booking.meeting_id.attendee_ids:
                     if attendee.partner_id & partners_to_confirm:
                         # attendee.state='accepted'
diff --git a/resource_booking/security/resource_booking_security.xml b/resource_booking/security/resource_booking_security.xml
index e30cd8f1..761db05d 100644
--- a/resource_booking/security/resource_booking_security.xml
+++ b/resource_booking/security/resource_booking_security.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
+     Copyright 2023 Tecnativa - Carolina Fernandez
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <data>
     <record id="category_resource_booking" model="ir.module.category">
@@ -47,7 +48,7 @@
             <field name="groups" eval="[(4, ref('base.group_portal'))]" />
             <field
                 name="domain_force"
-            >['|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids)]</field>
+            >['|', ('partner_ids', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids)]</field>
         </record>
         <record id="rule_resource_booking_user" model="ir.rule">
             <field name="name">Resource booking user rule</field>
@@ -55,7 +56,7 @@
             <field name="groups" eval="[(4, ref('group_user'))]" />
             <field
                 name="domain_force"
-            >['|', '|', ('partner_id', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids), ('combination_id.resource_ids.user_id', 'in', user.ids)]</field>
+            >['|', '|', ('partner_ids', 'child_of', user.partner_id.ids), ('message_partner_ids', 'child_of', user.partner_id.ids), ('combination_id.resource_ids.user_id', 'in', user.ids)]</field>
         </record>
         <record id="rule_resource_booking_manager" model="ir.rule">
             <field name="name">Resource booking manager rule</field>
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index d463c963..76fef8a8 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:c70889d0bc2b621cd88453d5d977084348dacfa9b664cffa568fb832076ac30a
+!! source digest: sha256:12c8fe57d9a76b5ff44d26cdede1405ce562f2077a532346e1cffe9997c62b2c
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 648cbb1b..fc5165f5 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2021 Tecnativa - Jairo Llopis
+     Copyright 2023 Tecnativa - Carolina Fernandez
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <data>
     <!--
@@ -348,7 +349,16 @@
                             </div>
                             <div class="mb-1">
                                 <strong>Requested by:</strong>
-                                <span t-field="booking_sudo.partner_id.display_name" />
+                                <ul>
+                                    <t
+                                        t-foreach="booking_sudo.partner_ids"
+                                        t-as="partner"
+                                    >
+                                        <li>
+                                            <span t-field="partner.display_name" />
+                                        </li>
+                                    </t>
+                                </ul>
                             </div>
                             <div class="mb-1">
                                 <strong>Booked resources:</strong>
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 56a5c695..5cbdbe6c 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -1,5 +1,6 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # Copyright 2022 Tecnativa - Pedro M. Baeza
+# Copyright 2023 Tecnativa - Carolina Fernandezs
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 from datetime import date, datetime
 from unittest.mock import patch
@@ -52,7 +53,7 @@ def test_scheduling_conflict_constraints(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-02 08:00:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
@@ -63,7 +64,7 @@ def test_scheduling_conflict_constraints(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-02 07:45:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
@@ -74,7 +75,7 @@ def test_scheduling_conflict_constraints(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-02 16:45:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
@@ -84,7 +85,7 @@ def test_scheduling_conflict_constraints(self):
         # Booking can be placed next Monday
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_montue.id,
@@ -95,7 +96,7 @@ def test_scheduling_conflict_constraints(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-01 08:29:59",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_montue.id,
@@ -106,7 +107,7 @@ def test_scheduling_conflict_constraints(self):
         rbc_mon = self.rbcs[0]
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_mon.id,
@@ -121,7 +122,7 @@ def test_scheduling_constraints_span_two_days(self):
         self.rbt.resource_calendar_id = cal_frisun
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-06 23:00:00",
                 "duration": 2,
                 "type_id": self.rbt.id,
@@ -133,7 +134,7 @@ def test_scheduling_constraints_span_two_days(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-06 22:00:00",
                     "duration": 4,
                     "type_id": self.rbt.id,
@@ -145,7 +146,7 @@ def test_scheduling_constraints_span_two_days(self):
         # 00:00 exactly.
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-14 00:00:00",
                 "duration": 1,
                 "type_id": self.rbt.id,
@@ -156,7 +157,7 @@ def test_scheduling_constraints_span_two_days(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-13 23:00:00",
                     "duration": 4,
                     "type_id": self.rbt.id,
@@ -170,7 +171,7 @@ def test_scheduling_constraints_span_two_days(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-20 23:00:00",
                     "duration": 2,
                     "type_id": self.rbt.id,
@@ -186,7 +187,7 @@ def test_scheduling_constraints_span_three_days(self):
         self.rbt.resource_calendar_id = cal_frisun
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-05 23:00:00",
                 "duration": 24 * 2,
                 "type_id": self.rbt.id,
@@ -233,7 +234,7 @@ def test_rbc_forced_calendar(self):
         with self.assertRaises(ValidationError), self.env.cr.savepoint():
             self.env["resource.booking"].create(
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "start": "2021-03-01 08:00:00",
                     "type_id": self.rbt.id,
                     "combination_id": rbc_tue.id,
@@ -244,7 +245,7 @@ def test_rbc_forced_calendar(self):
         rbc_tue.forced_calendar_id = cal_mon
         rb = self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
                 "combination_auto_assign": False,
@@ -278,7 +279,7 @@ def test_booking_from_calendar_view(self):
         self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 1, 9, 30))
         # If I change to next week's monday, then the stop date advances 1:30h
         booking_form.start = datetime(2021, 3, 8, 8)
-        booking_form.partner_id = self.partner
+        booking_form.partner_ids.add(self.partner)
         self.assertEqual(_2dt(booking_form.start), datetime(2021, 3, 8, 8))
         self.assertEqual(booking_form.duration, 1.5)
         self.assertEqual(_2dt(booking_form.stop), datetime(2021, 3, 8, 9, 30))
@@ -294,7 +295,7 @@ def test_dates_inverse(self):
         # Create a booking from scratch
         booking_form = Form(self.env["resource.booking"])
         booking_form.type_id = self.rbt
-        booking_form.partner_id = self.partner
+        booking_form.partner_ids.add(self.partner)
         self.assertFalse(booking_form.start)
         self.assertFalse(booking_form.stop)
         self.assertFalse(booking_form.combination_id)
@@ -324,7 +325,7 @@ def test_dates_inverse(self):
     def test_state(self):
         # I create a pending booking
         booking = self.env["resource.booking"].create(
-            {"type_id": self.rbt.id, "partner_id": self.partner.id}
+            {"type_id": self.rbt.id, "partner_ids": [(4, self.partner.id)]}
         )
         # Without dates, it's pending
         self.assertEqual(booking.state, "pending")
@@ -345,7 +346,7 @@ def test_state(self):
         self.assertTrue(booking.combination_id)
         # When partner confirms attendance, it's confirmed
         booker_attendance = meeting.attendee_ids.filtered(
-            lambda one: one.partner_id == booking.partner_id
+            lambda one: one.partner_id in booking.partner_ids
         )
         self.assertTrue(booker_attendance)
         booker_attendance.do_accept()
@@ -380,7 +381,7 @@ def test_sorted_assignment(self):
         # Book next monday at 10:00
         rb1_form = Form(self.env["resource.booking"])
         rb1_form.type_id = self.rbt
-        rb1_form.partner_id = self.partner
+        rb1_form.partner_ids.add(self.partner)
         rb1_form.start = datetime(2021, 3, 1, 10)
         self.assertEqual(rb1_form.combination_id, rbc_mon)
         rb1 = rb1_form.save()
@@ -388,7 +389,7 @@ def test_sorted_assignment(self):
         # Another booking, same time
         rb2_form = Form(self.env["resource.booking"])
         rb2_form.type_id = self.rbt
-        rb2_form.partner_id = self.partner
+        rb2_form.partner_ids.add(self.partner)
         rb2_form.start = datetime(2021, 3, 1, 10)
         self.assertEqual(rb2_form.combination_id, rbc_montue)
         rb2 = rb2_form.save()
@@ -424,7 +425,7 @@ def test_calendar_meeting_and_leave_combined(self):
         # Check it's not bookable
         rb_form = Form(self.env["resource.booking"])
         rb_form.type_id = self.rbt
-        rb_form.partner_id = self.partner
+        rb_form.partner_ids.add(self.partner)
         # No combination found
         rb_form.start = datetime(2021, 3, 1, 10)
         self.assertFalse(rb_form.combination_id)
@@ -437,7 +438,7 @@ def test_same_slot_twice_not_utc(self):
         """Scheduling the same slot twice fails, when not in UTC."""
         for loop in range(2):
             rb_f = Form(self.env["resource.booking"].with_context(tz="Europe/Madrid"))
-            rb_f.partner_id = self.partner
+            rb_f.partner_ids.add(self.partner)
             rb_f.type_id = self.rbt
             rb_f.start = datetime(2021, 3, 1, 10)
             rb_f.combination_auto_assign = False
@@ -467,7 +468,7 @@ def test_recurring_event(self):
         ce_f.save()
         # Cannot book next Monday at 8
         rb_f = Form(self.env["resource.booking"])
-        rb_f.partner_id = self.partner
+        rb_f.partner_ids.add(self.partner)
         rb_f.type_id = self.rbt
         # No RBC when starting
         self.assertFalse(rb_f.combination_id)
@@ -486,7 +487,7 @@ def test_change_calendar_after_bookings_exist(self):
         past_booking = self.env["resource.booking"].create(
             {
                 "combination_id": rbc_mon.id,
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-02-22 08:00:00",
                 "type_id": self.rbt.id,
             }
@@ -498,7 +499,7 @@ def test_change_calendar_after_bookings_exist(self):
         future_booking = self.env["resource.booking"].create(
             {
                 "combination_id": rbc_mon.id,
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
             }
@@ -529,7 +530,7 @@ def test_free_slots_with_different_type_and_booking_durations(self):
         # Tuesdays from 08:00 to 17:00 UTC. The booking will span for 3 slots.
         rb = self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "type_id": self.rbt.id,
                 "duration": self.rbt.duration * 3,
             }
@@ -566,7 +567,7 @@ def test_location(self):
         """Location across records works as expected."""
         rbt2 = self.rbt.copy({"location": "Office 2"})
         rb_f = Form(self.env["resource.booking"])
-        rb_f.partner_id = self.partner
+        rb_f.partner_ids.add(self.partner)
         rb_f.type_id = self.rbt
         rb = rb_f.save()
         # Pending booking inherits location from type
@@ -611,7 +612,7 @@ def test_videocall_location(self):
         """Videocall location across records works as expected."""
         rbt2 = self.rbt.copy({"videocall_location": "Videocall Office 2"})
         rb_f = Form(self.env["resource.booking"])
-        rb_f.partner_id = self.partner
+        rb_f.partner_ids.add(self.partner)
         rb_f.type_id = self.rbt
         rb = rb_f.save()
         # Pending booking inherits videocall location from type
@@ -656,7 +657,7 @@ def test_organizer_sync(self):
         """Resource booking and meeting organizers are properly synced."""
         rb = self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "type_id": self.rbt.id,
                 "start": "2021-03-01 08:00:00",
                 "duration": 1.5,
@@ -671,7 +672,7 @@ def test_organizer_sync(self):
     def test_resource_booking_display_name(self):
         # Pending booking with no name
         rb = self.env["resource.booking"].create(
-            {"partner_id": self.partner.id, "type_id": self.rbt.id}
+            {"partner_ids": [(4, self.partner.id)], "type_id": self.rbt.id}
         )
         self.assertEqual(rb.display_name, "some customer - Test resource booking type")
         self.assertEqual(
@@ -705,7 +706,7 @@ def test_attendee_autoassigned_not_autoconfirmed(self):
         # Create an auto-assigned booking
         rb = self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "type_id": self.rbt.id,
                 "start": "2021-03-01 08:00:00",
             }
@@ -723,7 +724,7 @@ def test_attendee_not_autoassigned_autoconfirmed(self):
         # Create a booking with handpicked combination assignment
         rb = self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "type_id": self.rbt.id,
                 "start": "2021-03-01 08:00:00",
                 "combination_auto_assign": False,
@@ -752,7 +753,7 @@ def test_suggested_and_subscribed_recipients(self):
                 .sudo()
                 .create(
                     {
-                        "partner_id": self.partner.id,
+                        "partner_ids": [(4, self.partner.id)],
                         "type_id": self.rbt.id,
                         "combination_auto_assign": False,
                         "combination_id": self.rbcs[0].id,
@@ -767,7 +768,7 @@ def test_suggested_and_subscribed_recipients(self):
         # Requester and combination must be suggested
         self.assertEqual(
             rb._message_get_suggested_recipients(),
-            {rb.id: [(rb.partner_id.id, "some customer", "Requester")]},
+            {rb.id: [(rb.partner_ids.id, "some customer", "Attendees")]},
         )
 
     def test_creating_rbt_has_tags(self):
@@ -775,7 +776,7 @@ def test_creating_rbt_has_tags(self):
         categ = self.env["calendar.event.type"].create({"name": "test tag"})
         self.rbt.categ_ids = categ
         rb_f = Form(self.env["resource.booking"])
-        rb_f.partner_id = self.partner
+        rb_f.partner_ids.add(self.partner)
         rb_f.type_id = self.rbt
         rb = rb_f.save()
         self.assertEqual(rb.categ_ids, categ)
@@ -797,7 +798,7 @@ def test_event_show_as_free(self):
         rb_f.type_id = self.rbt
         rb_f.start = "2021-03-01 09:00:00"
         rb_f.duration = 1
-        rb_f.partner_id = self.partner
+        rb_f.partner_ids.add(self.partner)
         rb1 = rb_f.save()
         # I'm not booked, so I'm free
         self.assertEqual(rb1.combination_id, self.rbcs[2])
@@ -807,7 +808,7 @@ def test_event_show_as_free(self):
         rb_f.type_id = self.rbt
         rb_f.start = "2021-03-01 09:00:00"
         rb_f.duration = 1.5
-        rb_f.partner_id = self.partner.copy()
+        rb_f.partner_ids.add(self.partner.copy())
         # Saving works because I'm free
         rb2 = rb_f.save()
         # I'm booked this time, so I'm busy
@@ -818,7 +819,7 @@ def test_event_show_as_free(self):
         rb_f.type_id = self.rbt
         rb_f.start = "2021-03-01 09:30:00"
         rb_f.duration = 0.5
-        rb_f.partner_id = self.partner.copy()
+        rb_f.partner_ids.add(self.partner.copy())
         with self.assertRaises(AssertionError):
             rb_f.save()
 
@@ -830,7 +831,7 @@ def test_resource_is_available(self):
         resource = rbc_montue.resource_ids[1]
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-01 08:00:00",
                 "type_id": self.rbt.id,
                 "combination_id": rbc_montue.id,
@@ -884,7 +885,7 @@ def test_resource_is_available_span_days(self):
         self.rbt.resource_calendar_id = cal_satsun
         self.env["resource.booking"].create(
             {
-                "partner_id": self.partner.id,
+                "partner_ids": [(4, self.partner.id)],
                 "start": "2021-03-06 23:00:00",
                 "duration": 2,
                 "type_id": self.rbt.id,
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 99a03dc5..5c7939fe 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -1,4 +1,5 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
+# Copyright 2023 Tecnativa - Carolina Fernandez
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from datetime import datetime
@@ -46,7 +47,10 @@ def test_portal_no_bookings(self):
     def test_portal_list_with_bookings(self):
         # Create one pending booking
         self.env["resource.booking"].create(
-            {"partner_id": self.user_portal.partner_id.id, "type_id": self.rbt.id}
+            {
+                "partner_ids": [(4, self.user_portal.partner_id.id)],
+                "type_id": self.rbt.id,
+            }
         )
         self.start_tour("/", "resource_booking_ptl2_tour", login="ptl")
 
@@ -63,12 +67,12 @@ def test_portal_scheduling_conflict(self):
         bookings = self.env["resource.booking"].create(
             [
                 {
-                    "partner_id": self.user_portal.partner_id.id,
+                    "partner_ids": [(4, self.user_portal.partner_id.id)],
                     "type_id": self.rbt.id,
                     "duration": 1,
                 },
                 {
-                    "partner_id": self.partner.id,
+                    "partner_ids": [(4, self.partner.id)],
                     "type_id": self.rbt.id,
                     "location": "Office 2",
                     "videocall_location": "Videocall Office 2",
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index c55274f5..f017dfca 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -16,7 +16,7 @@
                 color="combination_id"
             >
                 <field name="name" invisible="True" />
-                <field name="partner_id" avatar_field="image_128" />
+                <field name="partner_ids" widget="many2many_tags" />
                 <field name="type_id" />
                 <field name="combination_id" />
                 <field name="description" />
@@ -29,7 +29,7 @@
         <field name="arch" type="xml">
             <tree>
                 <field name="name" />
-                <field name="partner_id" />
+                <field name="partner_ids" widget="many2many_tags" />
                 <field name="type_id" />
                 <field name="combination_id" />
                 <field name="state" />
@@ -50,7 +50,7 @@
                         class="oe_highlight"
                         string="Share"
                         type="action"
-                        context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}"
+                        context="{'default_partner_ids': partner_ids, 'default_note': requester_advice}"
                         help="Invite requesting partner to portal."
                         states="pending"
                     />
@@ -58,7 +58,7 @@
                         name="%(portal.portal_share_action)d"
                         string="Share"
                         type="action"
-                        context="{'default_partner_ids': [(4, partner_id, 0)], 'default_note': requester_advice}"
+                        context="{'default_partner_ids': partner_ids, 'default_note': requester_advice}"
                         help="Invite requesting partner to portal."
                         states="scheduled,confirmed"
                     />
@@ -135,7 +135,7 @@
                     </div>
                     <group name="main">
                         <group name="booking">
-                            <field name="partner_id" />
+                            <field name="partner_ids" widget="many2many_tags" />
                             <field name="type_id" />
                             <label for="combination_id" />
                             <div>
@@ -205,13 +205,13 @@
         <field name="model">resource.booking</field>
         <field name="arch" type="xml">
             <search>
-                <field name="partner_id" />
+                <field name="partner_ids" />
                 <field name="type_id" />
                 <filter
                     name="is_mine"
                     string="Involving me"
                     context="{'virtual_id': False}"
-                    domain="['|', '|', ('partner_id.user_ids', '=', uid), ('meeting_id.attendee_ids.partner_id.user_ids', '=', uid), ('combination_id.resource_ids.user_id', '=', uid)]"
+                    domain="['|', '|', ('partner_ids.user_ids', '=', uid), ('meeting_id.attendee_ids.partner_id.user_ids', '=', uid), ('combination_id.resource_ids.user_id', '=', uid)]"
                 />
                 <filter
                     name="is_pending"

From 603e84ffec2970cdd1e82fafa6c37c02c3b048c6 Mon Sep 17 00:00:00 2001
From: David <david.vidal@tecnativa.com>
Date: Wed, 29 Nov 2023 12:26:00 +0100
Subject: [PATCH 56/64] [FIX] resource_booking: inverse partner

Set the inverse for partner_id so modules can adapt seamlessly to the
changes in #110

TT45338

[BOT] post-merge updates
---
 resource_booking/README.rst                    | 2 +-
 resource_booking/__manifest__.py               | 2 +-
 resource_booking/models/resource_booking.py    | 6 ++++++
 resource_booking/static/description/index.html | 2 +-
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index f7c3f01e..d5772d3a 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:12c8fe57d9a76b5ff44d26cdede1405ce562f2077a532346e1cffe9997c62b2c
+   !! source digest: sha256:49cfad8d1ef2444fe73fa63fcacf5bd5744bb5744354420daa9bb627681f96bb
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 161bbda8..3d0e80c2 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -6,7 +6,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.4.0",
+    "version": "15.0.1.4.1",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 138dddfd..9c381be5 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -126,6 +126,8 @@ class ResourceBooking(models.Model):
     partner_id = fields.Many2one(
         comodel_name="res.partner",
         compute="_compute_partner_id",
+        inverse="_inverse_partner_id",
+        readonly=False,
         string="Requester",
     )
     partner_ids = fields.Many2many(
@@ -219,6 +221,10 @@ def _compute_partner_id(self):
         for one in self:
             one.partner_id = one.partner_ids[:1]
 
+    def _inverse_partner_id(self):
+        for one in self:
+            one.partner_ids = one.partner_id
+
     @api.model
     def _default_user_id(self):
         return self.env.user
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index 76fef8a8..faabb820 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:12c8fe57d9a76b5ff44d26cdede1405ce562f2077a532346e1cffe9997c62b2c
+!! source digest: sha256:49cfad8d1ef2444fe73fa63fcacf5bd5744bb5744354420daa9bb627681f96bb
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given

From a50e7d186464082f8f3c02c66cc457bbaed144c4 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Wed, 29 Nov 2023 15:57:50 +0100
Subject: [PATCH 57/64] [OU-FIX] resource_booking: Proper place for the script

---
 .../migrations/15.0.1.4.0/post-migration.py   | 19 +++++++++++++++++++
 .../migrations/15.0.1.4.0/pre-migration.py    | 10 ++++++++++
 2 files changed, 29 insertions(+)
 create mode 100644 resource_booking/migrations/15.0.1.4.0/post-migration.py
 create mode 100644 resource_booking/migrations/15.0.1.4.0/pre-migration.py

diff --git a/resource_booking/migrations/15.0.1.4.0/post-migration.py b/resource_booking/migrations/15.0.1.4.0/post-migration.py
new file mode 100644
index 00000000..c1d684ad
--- /dev/null
+++ b/resource_booking/migrations/15.0.1.4.0/post-migration.py
@@ -0,0 +1,19 @@
+# Copyright 2023 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from openupgradelib import openupgrade
+
+
+def convert_resource_booking_partners(env):
+    openupgrade.m2o_to_x2x(
+        env.cr,
+        env["resource.booking"],
+        "resource_booking",
+        "partner_ids",
+        "old_partner_id",
+    )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    """Put partner_id in partner_ids"""
+    convert_resource_booking_partners(env)
diff --git a/resource_booking/migrations/15.0.1.4.0/pre-migration.py b/resource_booking/migrations/15.0.1.4.0/pre-migration.py
new file mode 100644
index 00000000..50dd4a68
--- /dev/null
+++ b/resource_booking/migrations/15.0.1.4.0/pre-migration.py
@@ -0,0 +1,10 @@
+# Copyright 2023 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+
+def migrate(env):
+    env.cr.execute(
+        """
+        ALTER TABLE resource_booking RENAME partner_id TO old_partner_id
+        """,
+    )

From 81b6b61285eb2cd62fb665589121696fc27817ca Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Wed, 29 Nov 2023 19:07:10 +0100
Subject: [PATCH 58/64] [OU-FIX] resource_booking: Proper openupgradelib method
 name

---
 resource_booking/migrations/15.0.1.4.0/post-migration.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resource_booking/migrations/15.0.1.4.0/post-migration.py b/resource_booking/migrations/15.0.1.4.0/post-migration.py
index c1d684ad..27678d64 100644
--- a/resource_booking/migrations/15.0.1.4.0/post-migration.py
+++ b/resource_booking/migrations/15.0.1.4.0/post-migration.py
@@ -4,7 +4,7 @@
 
 
 def convert_resource_booking_partners(env):
-    openupgrade.m2o_to_x2x(
+    openupgrade.m2o_to_x2m(
         env.cr,
         env["resource.booking"],
         "resource_booking",

From dc023664924e880e5b530206f44e55804244eb8a Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Fri, 5 Jan 2024 12:23:45 +0100
Subject: [PATCH 59/64] [IMP] resource_booking: No create/unlink call if
 nothing to do

Depending on how the create/unlink overrides are programmed, there can
be overheads or blocking things when calling unconditionally these
methods, even with an empty list, so let's only call them when there
is really something to delete or to create.

This has been discovered as `google_calendar` module is calling Google
API on calendar event create (although vals_list being empty), and due
to an error with Google API right now, I was not able to create a
draft resource booking.

[BOT] post-merge updates
---
 resource_booking/README.rst                    | 2 +-
 resource_booking/__manifest__.py               | 2 +-
 resource_booking/models/resource_booking.py    | 6 ++++--
 resource_booking/static/description/index.html | 3 +--
 4 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index d5772d3a..01881ec2 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:49cfad8d1ef2444fe73fa63fcacf5bd5744bb5744354420daa9bb627681f96bb
+   !! source digest: sha256:1b5ee844dde4d92ddebc83454b46b058b45fddf1013e7ee6d17c187c15b74318
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 3d0e80c2..830817fc 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -6,7 +6,7 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.4.1",
+    "version": "15.0.1.4.2",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 9c381be5..77fb74c2 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -417,8 +417,10 @@ def _sync_meeting(self):
                     to_create.append(meeting_vals)
             else:
                 to_delete |= one.meeting_id
-        to_delete.unlink()
-        _self.env["calendar.event"].create(to_create)
+        if to_delete:
+            to_delete.unlink()
+        if to_create:
+            _self.env["calendar.event"].create(to_create)
 
     @api.constrains("combination_id", "meeting_id", "type_id")
     def _check_scheduling(self):
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index faabb820..16aa8a9d 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!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>
@@ -367,7 +366,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:49cfad8d1ef2444fe73fa63fcacf5bd5744bb5744354420daa9bb627681f96bb
+!! source digest: sha256:1b5ee844dde4d92ddebc83454b46b058b45fddf1013e7ee6d17c187c15b74318
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given

From 6cf21122fbc1c63630478d50b74b898407fcde70 Mon Sep 17 00:00:00 2001
From: Carolina Fernandez <carolina.fernandez@tecnativa.com>
Date: Mon, 15 Jan 2024 11:17:08 -0300
Subject: [PATCH 60/64] [IMP] resource_booking: New activity type for resource
 booking

TT47152

[UPD] Update resource_booking.pot

[BOT] post-merge updates

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: calendar-15.0/calendar-15.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking/
---
 resource_booking/README.rst                   |   2 +-
 resource_booking/__init__.py                  |   1 +
 resource_booking/__manifest__.py              |   7 +-
 resource_booking/data/mail_data.xml           |   9 ++
 resource_booking/hooks.py                     |  15 ++
 resource_booking/i18n/ca.po                   |  37 +++++
 resource_booking/i18n/es.po                   |  40 ++++++
 resource_booking/i18n/fr.po                   |  37 +++++
 resource_booking/i18n/fr_FR.po                |  37 +++++
 resource_booking/i18n/resource_booking.pot    |  37 +++++
 resource_booking/models/__init__.py           |   1 +
 resource_booking/models/mail_activity.py      |  60 ++++++++
 resource_booking/models/resource_booking.py   |  15 ++
 .../static/description/index.html             |   2 +-
 resource_booking/tests/test_backend.py        | 129 +++++++++++++++++-
 .../views/mail_activity_views.xml             |  45 ++++++
 16 files changed, 469 insertions(+), 5 deletions(-)
 create mode 100644 resource_booking/data/mail_data.xml
 create mode 100644 resource_booking/hooks.py
 create mode 100644 resource_booking/models/mail_activity.py
 create mode 100644 resource_booking/views/mail_activity_views.xml

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 01881ec2..9daa31aa 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:1b5ee844dde4d92ddebc83454b46b058b45fddf1013e7ee6d17c187c15b74318
+   !! source digest: sha256:2a68fc2648f97ac64afcd5e5c6fa3ab28bfe94008b501d0ebad818d9e9bd3140
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__init__.py b/resource_booking/__init__.py
index f7209b17..4c9f27ed 100644
--- a/resource_booking/__init__.py
+++ b/resource_booking/__init__.py
@@ -1,2 +1,3 @@
 from . import models
 from . import controllers
+from .hooks import uninstall_hook
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 830817fc..432c3d19 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -1,12 +1,12 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # Copyright 2022 Tecnativa - Pedro M. Baeza
-# Copyright 2023 Tecnativa - Carolina Fernandez
+# Copyright 2024 Tecnativa - Carolina Fernandez
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.1.4.2",
+    "version": "15.0.2.0.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
@@ -15,6 +15,7 @@
     "license": "AGPL-3",
     "application": True,
     "installable": True,
+    "uninstall_hook": "uninstall_hook",
     "external_dependencies": {
         "python": [
             # Used implicitly
@@ -30,10 +31,12 @@
     ],
     "data": [
         "data/mail.xml",
+        "data/mail_data.xml",
         "security/resource_booking_security.xml",
         "security/ir.model.access.csv",
         "templates/portal.xml",
         "views/calendar_event_views.xml",
+        "views/mail_activity_views.xml",
         "views/resource_booking_combination_views.xml",
         "views/resource_booking_type_views.xml",
         "views/resource_booking_views.xml",
diff --git a/resource_booking/data/mail_data.xml b/resource_booking/data/mail_data.xml
new file mode 100644
index 00000000..4600f8d4
--- /dev/null
+++ b/resource_booking/data/mail_data.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?>
+<odoo noupdate="1">
+    <record id="mail_activity_data_resource_booking" model="mail.activity.type">
+        <field name="category">resource_booking</field>
+        <field name="name">Resource Booking</field>
+        <field name="icon">fa-users</field>
+        <field name="sequence">11</field>
+    </record>
+</odoo>
diff --git a/resource_booking/hooks.py b/resource_booking/hooks.py
new file mode 100644
index 00000000..20e44831
--- /dev/null
+++ b/resource_booking/hooks.py
@@ -0,0 +1,15 @@
+# Copyright 2024 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo import SUPERUSER_ID, api
+
+
+def uninstall_hook(cr, registry):
+    env = api.Environment(cr, SUPERUSER_ID, {})
+    # Remove new activity type resource booking and all activities associated'
+    activiy_resource_booking = env.ref(
+        "resource_booking.mail_activity_data_resource_booking", raise_if_not_found=False
+    )
+    if activiy_resource_booking:
+        booking_activiy_ids = env["mail.activity"].search([("booking_id", "!=", False)])
+        booking_activiy_ids.unlink()
+        activiy_resource_booking.unlink()
diff --git a/resource_booking/i18n/ca.po b/resource_booking/i18n/ca.po
index ca776fd7..785b75c9 100644
--- a/resource_booking/i18n/ca.po
+++ b/resource_booking/i18n/ca.po
@@ -160,12 +160,24 @@ msgstr ""
 msgid "Access warning"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity_type__category
+msgid "Action"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
 msgid "Action Needed"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_mail_activity_type__category
+msgid ""
+"Actions may trigger specific behavior like opening calendar view or "
+"automatically mark as done when a document is uploaded"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
@@ -175,10 +187,16 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__booking_activity_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
 msgid "Activities"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity
+msgid "Activity"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
@@ -191,6 +209,11 @@ msgstr ""
 msgid "Activity State"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity_type
+msgid "Activity Type"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
@@ -499,6 +522,12 @@ msgstr ""
 msgid "Duration:"
 msgstr ""
 
+#. module: resource_booking
+#: code:addons/resource_booking/models/mail_activity.py:0
+#, python-format
+msgid "Feedback: %(feedback)s"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -825,6 +854,11 @@ msgstr ""
 msgid "Only one event per resource booking can exist."
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.mail_activity_view_form_popup
+msgid "Open Resource Booking"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Open a calendar to schedule a meeting for this booking request."
@@ -884,6 +918,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
+#: model:mail.activity.type,name:resource_booking.mail_activity_data_resource_booking
 msgid "Resource Booking"
 msgstr ""
 
@@ -914,6 +949,8 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity__booking_id
+#: model:ir.model.fields.selection,name:resource_booking.selection__mail_activity_type__category__resource_booking
 msgid "Resource booking"
 msgstr ""
 
diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index a07281bc..cc2e3b06 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -166,12 +166,24 @@ msgstr "<strong>Tipo:</strong>"
 msgid "Access warning"
 msgstr "Alerta de acceso"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity_type__category
+msgid "Action"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
 msgid "Action Needed"
 msgstr "Acción necesaria"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_mail_activity_type__category
+msgid ""
+"Actions may trigger specific behavior like opening calendar view or "
+"automatically mark as done when a document is uploaded"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
@@ -181,10 +193,16 @@ msgstr "Activo"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__booking_activity_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
 msgid "Activities"
 msgstr "Actividades"
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity
+msgid "Activity"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
@@ -197,6 +215,11 @@ msgstr ""
 msgid "Activity State"
 msgstr "Estado de la actividad"
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity_type
+msgid "Activity Type"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
@@ -517,6 +540,12 @@ msgstr "La duración debe ser positiva."
 msgid "Duration:"
 msgstr "Duración:"
 
+#. module: resource_booking
+#: code:addons/resource_booking/models/mail_activity.py:0
+#, python-format
+msgid "Feedback: %(feedback)s"
+msgstr "Retroalimentación: %(feedback)s"
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -844,6 +873,11 @@ msgstr "Número de mensajes no leídos"
 msgid "Only one event per resource booking can exist."
 msgstr "Solo puede existir un evento por reserva de recursos."
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.mail_activity_view_form_popup
+msgid "Open Resource Booking"
+msgstr "Abrir una reserva de recursos"
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Open a calendar to schedule a meeting for this booking request."
@@ -910,6 +944,7 @@ msgstr "Aviso al solicitante"
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
+#: model:mail.activity.type,name:resource_booking.mail_activity_data_resource_booking
 msgid "Resource Booking"
 msgstr "Reserva de recursos"
 
@@ -940,6 +975,8 @@ msgstr "Tiempo de Trabajo de Recursos"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity__booking_id
+#: model:ir.model.fields.selection,name:resource_booking.selection__mail_activity_type__category__resource_booking
 msgid "Resource booking"
 msgstr "Reserva de recursos"
 
@@ -1313,5 +1350,8 @@ msgstr ""
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
 
+#~ msgid "Next Activity Resource Booking"
+#~ msgstr "Siguiente actividad de reserva de recursos"
+
 #~ msgid "Who requested this booking?"
 #~ msgstr "¿Quién solicitó esta reserva/cita?"
diff --git a/resource_booking/i18n/fr.po b/resource_booking/i18n/fr.po
index 072fdab5..5fef84db 100644
--- a/resource_booking/i18n/fr.po
+++ b/resource_booking/i18n/fr.po
@@ -154,12 +154,24 @@ msgstr ""
 msgid "Access warning"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity_type__category
+msgid "Action"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
 msgid "Action Needed"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_mail_activity_type__category
+msgid ""
+"Actions may trigger specific behavior like opening calendar view or "
+"automatically mark as done when a document is uploaded"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
@@ -169,10 +181,16 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__booking_activity_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
 msgid "Activities"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity
+msgid "Activity"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
@@ -185,6 +203,11 @@ msgstr ""
 msgid "Activity State"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity_type
+msgid "Activity Type"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
@@ -493,6 +516,12 @@ msgstr ""
 msgid "Duration:"
 msgstr ""
 
+#. module: resource_booking
+#: code:addons/resource_booking/models/mail_activity.py:0
+#, python-format
+msgid "Feedback: %(feedback)s"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -819,6 +848,11 @@ msgstr ""
 msgid "Only one event per resource booking can exist."
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.mail_activity_view_form_popup
+msgid "Open Resource Booking"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Open a calendar to schedule a meeting for this booking request."
@@ -878,6 +912,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
+#: model:mail.activity.type,name:resource_booking.mail_activity_data_resource_booking
 msgid "Resource Booking"
 msgstr ""
 
@@ -908,6 +943,8 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity__booking_id
+#: model:ir.model.fields.selection,name:resource_booking.selection__mail_activity_type__category__resource_booking
 msgid "Resource booking"
 msgstr ""
 
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index c3065d35..ef223482 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -166,12 +166,24 @@ msgstr "<strong>Type:</strong>"
 msgid "Access warning"
 msgstr "Avertissement d'accès"
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity_type__category
+msgid "Action"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
 msgid "Action Needed"
 msgstr "Action nécessaire"
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_mail_activity_type__category
+msgid ""
+"Actions may trigger specific behavior like opening calendar view or "
+"automatically mark as done when a document is uploaded"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
@@ -181,10 +193,16 @@ msgstr "Actif"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__booking_activity_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
 msgid "Activities"
 msgstr "Activités"
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity
+msgid "Activity"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
@@ -197,6 +215,11 @@ msgstr ""
 msgid "Activity State"
 msgstr "Statut de l'activité"
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity_type
+msgid "Activity Type"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
@@ -520,6 +543,12 @@ msgstr "La durée doit être positive."
 msgid "Duration:"
 msgstr "Durée:"
 
+#. module: resource_booking
+#: code:addons/resource_booking/models/mail_activity.py:0
+#, python-format
+msgid "Feedback: %(feedback)s"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -848,6 +877,11 @@ msgstr "Nombre de messages non lus"
 msgid "Only one event per resource booking can exist."
 msgstr "Un seul événement par réservation de ressource peut exister."
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.mail_activity_view_form_popup
+msgid "Open Resource Booking"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Open a calendar to schedule a meeting for this booking request."
@@ -913,6 +947,7 @@ msgstr "Avis au demandeur"
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
+#: model:mail.activity.type,name:resource_booking.mail_activity_data_resource_booking
 msgid "Resource Booking"
 msgstr "Réservation de ressources"
 
@@ -943,6 +978,8 @@ msgstr "Temps de travail des ressources"
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity__booking_id
+#: model:ir.model.fields.selection,name:resource_booking.selection__mail_activity_type__category__resource_booking
 msgid "Resource booking"
 msgstr "Réservation de ressources"
 
diff --git a/resource_booking/i18n/resource_booking.pot b/resource_booking/i18n/resource_booking.pot
index 6dd1c61c..7b23bd7f 100644
--- a/resource_booking/i18n/resource_booking.pot
+++ b/resource_booking/i18n/resource_booking.pot
@@ -151,12 +151,24 @@ msgstr ""
 msgid "Access warning"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity_type__category
+msgid "Action"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_needaction
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_needaction
 msgid "Action Needed"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model.fields,help:resource_booking.field_mail_activity_type__category
+msgid ""
+"Actions may trigger specific behavior like opening calendar view or "
+"automatically mark as done when a document is uploaded"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__active
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_combination__active
@@ -166,10 +178,16 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_ids
+#: model:ir.model.fields,field_description:resource_booking.field_resource_booking__booking_activity_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_ids
 msgid "Activities"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity
+msgid "Activity"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_exception_decoration
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_exception_decoration
@@ -182,6 +200,11 @@ msgstr ""
 msgid "Activity State"
 msgstr ""
 
+#. module: resource_booking
+#: model:ir.model,name:resource_booking.model_mail_activity_type
+msgid "Activity Type"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__activity_type_icon
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__activity_type_icon
@@ -489,6 +512,12 @@ msgstr ""
 msgid "Duration:"
 msgstr ""
 
+#. module: resource_booking
+#: code:addons/resource_booking/models/mail_activity.py:0
+#, python-format
+msgid "Feedback: %(feedback)s"
+msgstr ""
+
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking__message_follower_ids
 #: model:ir.model.fields,field_description:resource_booking.field_resource_booking_type__message_follower_ids
@@ -815,6 +844,11 @@ msgstr ""
 msgid "Only one event per resource booking can exist."
 msgstr ""
 
+#. module: resource_booking
+#: model_terms:ir.ui.view,arch_db:resource_booking.mail_activity_view_form_popup
+msgid "Open Resource Booking"
+msgstr ""
+
 #. module: resource_booking
 #: model_terms:ir.ui.view,arch_db:resource_booking.resource_booking_form
 msgid "Open a calendar to schedule a meeting for this booking request."
@@ -874,6 +908,7 @@ msgstr ""
 #. module: resource_booking
 #: model:ir.model,name:resource_booking.model_resource_booking
 #: model:ir.module.category,name:resource_booking.category_resource_booking
+#: model:mail.activity.type,name:resource_booking.mail_activity_data_resource_booking
 msgid "Resource Booking"
 msgstr ""
 
@@ -904,6 +939,8 @@ msgstr ""
 
 #. module: resource_booking
 #: model:ir.model.fields,field_description:resource_booking.field_calendar_event__resource_booking_ids
+#: model:ir.model.fields,field_description:resource_booking.field_mail_activity__booking_id
+#: model:ir.model.fields.selection,name:resource_booking.selection__mail_activity_type__category__resource_booking
 msgid "Resource booking"
 msgstr ""
 
diff --git a/resource_booking/models/__init__.py b/resource_booking/models/__init__.py
index 38ad3480..158a4b48 100644
--- a/resource_booking/models/__init__.py
+++ b/resource_booking/models/__init__.py
@@ -5,3 +5,4 @@
 from . import resource_booking_type_combination_rel
 from . import resource_calendar
 from . import resource_resource
+from . import mail_activity
diff --git a/resource_booking/models/mail_activity.py b/resource_booking/models/mail_activity.py
new file mode 100644
index 00000000..cb2cb9e1
--- /dev/null
+++ b/resource_booking/models/mail_activity.py
@@ -0,0 +1,60 @@
+# Copyright 2024 Tecnativa - Carolina Fernandez
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import _, fields, models, tools
+from odoo.tools import is_html_empty
+
+
+class MailActivityType(models.Model):
+    _inherit = "mail.activity.type"
+
+    category = fields.Selection(
+        selection_add=[("resource_booking", "Resource booking")]
+    )
+
+
+class MailActivity(models.Model):
+    _inherit = "mail.activity"
+
+    booking_id = fields.Many2one(
+        "resource.booking", string="Resource booking", ondelete="cascade"
+    )
+
+    def action_open_resource_booking(self):
+        self.ensure_one()
+        action = self.env["ir.actions.actions"]._for_xml_id(
+            "resource_booking.resource_booking_action"
+        )
+        action["view_mode"] = "form"
+        del action["views"]
+        action["res_id"] = self.booking_id.id
+        ctx = dict(self.env.context)
+        ctx.update(
+            {
+                "default_activity_type_id": self.activity_type_id.id,
+                "default_name": self.summary or self.res_name,
+                "default_description": self.note
+                if not is_html_empty(self.note)
+                else "",
+                "default_booking_activity_ids": [(6, 0, self.ids)],
+            }
+        )
+        action["context"] = ctx
+        return action
+
+    def _action_done(self, feedback=False, attachment_ids=False):
+        bookings = self.mapped("booking_id")
+        messages, activities = super(MailActivity, self)._action_done(
+            feedback=feedback, attachment_ids=attachment_ids
+        )
+        if feedback:
+            for booking in bookings:
+                description = booking.description
+                description = "%s<br />%s" % (
+                    description if not tools.is_html_empty(description) else "",
+                    _("Feedback: %(feedback)s", feedback=tools.plaintext2html(feedback))
+                    if feedback
+                    else "",
+                )
+                booking.write({"description": description})
+        return messages, activities
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 77fb74c2..85087983 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -215,6 +215,9 @@ class ResourceBooking(models.Model):
         required=True,
         tracking=True,
     )
+    booking_activity_ids = fields.One2many(
+        "mail.activity", "booking_id", string="Activities"
+    )
 
     @api.depends("partner_ids")
     def _compute_partner_id(self):
@@ -584,22 +587,33 @@ def _get_intervals(self, start_dt, end_dt, combination=None):
         result &= combinations._get_intervals(start_dt, end_dt)
         return result
 
+    def _sync_booking_activities_date(self):
+        for rec in self.filtered("booking_activity_ids"):
+            start = rec.start or (datetime.now() + relativedelta(years=1000))
+            rec.booking_activity_ids.date_deadline = start
+            # Set calendar_event_id to show Re-schedule button in activity block
+            rec.booking_activity_ids.calendar_event_id = rec.meeting_id
+
     @api.model_create_multi
     def create(self, vals_list):
         """Sync booking with meeting if needed."""
         result = super().create(vals_list)
         result._sync_meeting()
+        result._sync_booking_activities_date()
         return result
 
     def write(self, vals):
         """Sync booking with meeting if needed."""
         result = super().write(vals)
         self._sync_meeting()
+        if vals.get("start") or "meeting_id" in vals:
+            self._sync_booking_activities_date()
         return result
 
     def unlink(self):
         """Unlink meeting if needed."""
         self.meeting_id.unlink()
+        self.booking_activity_ids.unlink()
         return super().unlink()
 
     def name_get(self):
@@ -706,6 +720,7 @@ def action_confirm(self):
 
     def action_unschedule(self):
         """Remove associated meetings."""
+        self.booking_activity_ids.calendar_event_id = False
         self.mapped("meeting_id").unlink()
         # Force recomputing, in case meeting_id is not visible in the form
         self.write({"meeting_id": False})
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index 16aa8a9d..5bc10c36 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -366,7 +366,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:1b5ee844dde4d92ddebc83454b46b058b45fddf1013e7ee6d17c187c15b74318
+!! source digest: sha256:2a68fc2648f97ac64afcd5e5c6fa3ab28bfe94008b501d0ebad818d9e9bd3140
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 5cbdbe6c..f91e451e 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -1,10 +1,11 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # Copyright 2022 Tecnativa - Pedro M. Baeza
-# Copyright 2023 Tecnativa - Carolina Fernandezs
+# Copyright 2024 Tecnativa - Carolina Fernandez
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 from datetime import date, datetime
 from unittest.mock import patch
 
+from dateutil.relativedelta import relativedelta
 from freezegun import freeze_time
 from pytz import utc
 
@@ -906,3 +907,129 @@ def test_resource_is_available_span_days(self):
                 utc.localize(datetime(2021, 3, 14, 2, 0)),
             )
         )
+
+
+class TestMailActivity(TransactionCase):
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.activity_type = cls.env.ref(
+            "resource_booking.mail_activity_data_resource_booking"
+        )
+        cls.partner = cls.env["res.partner"].create({"name": "T Partner"})
+        create_test_data(cls)
+        cls.mail_activity = cls.env["mail.activity"].create(
+            {
+                "activity_type_id": cls.activity_type.id,
+                "summary": "Test Summary",
+                "res_model_id": cls.env["ir.model"]._get_id("res.partner"),
+                "res_id": cls.partner.id,
+            }
+        )
+
+    def _create_booking_from_mail_activity(self, mail_activity):
+        action = mail_activity.action_open_resource_booking()
+        booking_form = Form(
+            self.env[action["res_model"]].with_context(**action["context"])
+        )
+        booking_form.start = "2021-03-01 08:00:00"
+        booking_form.type_id = self.rbt
+        booking_form.combination_auto_assign = False
+        booking_form.combination_id = self.rbcs[2]
+        booking_form.duration = 1
+        booking_form.description = "Booking Description"
+        return booking_form.save()
+
+    def test_action_open_resource_booking_full_process(self):
+        action = self.mail_activity.action_open_resource_booking()
+        self.assertEqual(action["res_id"], 0)
+        self.assertEqual(action["view_mode"], "form")
+        ctx = action["context"]
+        self.assertEqual(ctx["default_activity_type_id"], self.activity_type.id)
+        self.assertEqual(action["context"]["default_name"], "Test Summary")
+        self.assertEqual(
+            ctx["default_booking_activity_ids"],
+            [(6, 0, [self.mail_activity.id])],
+        )
+        booking = self._create_booking_from_mail_activity(self.mail_activity)
+        self.assertTrue(self.mail_activity.calendar_event_id)
+        self.assertEqual(
+            self.mail_activity.date_deadline, fields.Date.from_string("2021-03-01")
+        )
+        feedback = "Test Feedback"
+        messages, activities = self.mail_activity._action_done(feedback=feedback)
+        self.assertEqual(
+            booking.description,
+            "<p>Booking Description</p><br>Feedback: <p>Test Feedback</p>",
+        )
+        self.assertNotEqual(messages, [])
+        self.assertNotEqual(activities, [])
+
+    def test_action_done_without_feedback(self):
+        booking = self._create_booking_from_mail_activity(self.mail_activity)
+        messages, activities = self.mail_activity._action_done()
+        self.assertEqual(booking.description, "<p>Booking Description</p>")
+        self.assertNotEqual(messages, [])
+        self.assertNotEqual(activities, [])
+
+    @freeze_time("2021-03-01 06:00:00")
+    def test_sync_booking_activities(self):
+        booking = self._create_booking_from_mail_activity(self.mail_activity)
+        self.assertEqual(self.mail_activity.date_deadline, booking.start.date())
+        booking.start = "2021-03-02 08:00:00"
+        self.assertEqual(self.mail_activity.date_deadline, booking.start.date())
+
+    @freeze_time("2021-03-01 06:00:00")
+    def test_resource_booking_activity_without_date(self):
+        booking = self.env["resource.booking"].create(
+            {
+                "name": "Test Booking",
+                "description": "Booking Description",
+                "type_id": self.rbt.id,
+                "duration": 1,
+                "booking_activity_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "activity_type_id": self.activity_type.id,
+                            "summary": "Test Summary",
+                            "note": "Test Note",
+                            "res_model_id": self.env["ir.model"]._get_id("res.partner"),
+                            "res_id": self.partner.id,
+                        },
+                    )
+                ],
+            }
+        )
+        mail_activity = booking.booking_activity_ids[0]
+        future_date = datetime.now() + relativedelta(years=1000)
+        self.assertEqual(mail_activity.date_deadline, future_date.date())
+        booking.combination_id = self.rbcs[2].id
+        booking.combination_auto_assign = False
+        booking.start = "2021-03-02 08:00:00"
+        self.assertEqual(mail_activity.date_deadline, booking.start.date())
+
+    def test_unlink_resource_booking_activity(self):
+        booking = self._create_booking_from_mail_activity(self.mail_activity)
+        booking.action_cancel()
+        self.assertNotEqual(
+            self.mail_activity.date_deadline, fields.Date.from_string("2021-03-01")
+        )
+        self.assertFalse(self.mail_activity.calendar_event_id)
+
+    def test_resource_booking_schedule_unschedule(self):
+        booking = self._create_booking_from_mail_activity(self.mail_activity)
+        res = booking.action_schedule()
+        self.assertTrue(self.mail_activity.calendar_event_id)
+        self.env[res["res_model"]].with_context(**res["context"]).create(
+            {"start": "2024-01-01 08:00:00", "stop": "2024-01-01 09:00:00"}
+        )
+        self.assertEqual(
+            self.mail_activity.date_deadline, fields.Date.from_string("2024-01-01")
+        )
+        booking.action_unschedule()
+        self.assertFalse(self.mail_activity.calendar_event_id)
+        self.assertNotEqual(
+            self.mail_activity.date_deadline, fields.Date.from_string("2024-01-01")
+        )
diff --git a/resource_booking/views/mail_activity_views.xml b/resource_booking/views/mail_activity_views.xml
new file mode 100644
index 00000000..b5e43fa0
--- /dev/null
+++ b/resource_booking/views/mail_activity_views.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" ?>
+<odoo>
+    <record id="mail_activity_view_form_popup" model="ir.ui.view">
+        <field name="name">mail.activity.form.inherit.booking</field>
+        <field name="model">mail.activity</field>
+        <field name="inherit_id" ref="mail.mail_activity_view_form_popup" />
+        <field name="arch" type="xml">
+            <xpath expr="//field[@name='date_deadline']" position="attributes">
+                  <attribute
+                    name="attrs"
+                >{'invisible': [('activity_category', 'in', ['resource_booking','meeting'])]}</attribute>
+            </xpath>
+            <xpath expr="//field[@name='user_id']" position="attributes">
+                  <attribute
+                    name="attrs"
+                >{'invisible': [('activity_category', 'in', ['resource_booking','meeting'])]}</attribute>
+            </xpath>
+            <xpath expr="//button[@id='mail_activity_schedule']" position="attributes">
+                  <attribute
+                    name="attrs"
+                >{'invisible': ['|', ('activity_category', 'in', ['resource_booking','meeting', 'phonecall']), ('id', '!=', False)]}</attribute>
+            </xpath>
+            <xpath expr="//button[@name='action_done']" position="attributes">
+                  <attribute
+                    name="attrs"
+                >{'invisible': ['|', ('activity_category', 'in', ['resource_booking','meeting']), ('chaining_type', '=', 'trigger')]}</attribute>
+            </xpath>
+            <xpath expr="//field[@name='note']" position="attributes">
+                  <attribute
+                    name="attrs"
+                >{'invisible': [('activity_category', 'in', ['resource_booking','meeting'])]}</attribute>
+            </xpath>
+            <xpath expr="//button[@name='action_close_dialog']" position="before">
+                  <field name="booking_id" invisible="1" />
+                  <button
+                    string="Open Resource Booking"
+                    attrs="{'invisible': [('activity_category', '!=', 'resource_booking')]}"
+                    name="action_open_resource_booking"
+                    type="object"
+                    class="btn-primary"
+                />
+            </xpath>
+        </field>
+    </record>
+</odoo>

From cbae0596a464052b82ab59f16b896930eb425ab3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Mon, 11 Mar 2024 13:55:55 +0100
Subject: [PATCH 61/64] [IMP] resource_booking: pre-commit stuff

---
 requirements.txt                                    | 2 ++
 setup/resource_booking/odoo/addons/resource_booking | 1 +
 setup/resource_booking/setup.py                     | 6 ++++++
 3 files changed, 9 insertions(+)
 create mode 100644 requirements.txt
 create mode 120000 setup/resource_booking/odoo/addons/resource_booking
 create mode 100644 setup/resource_booking/setup.py

diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 00000000..f61de956
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+# generated from manifests external_dependencies
+cssselect
diff --git a/setup/resource_booking/odoo/addons/resource_booking b/setup/resource_booking/odoo/addons/resource_booking
new file mode 120000
index 00000000..d9f8c68b
--- /dev/null
+++ b/setup/resource_booking/odoo/addons/resource_booking
@@ -0,0 +1 @@
+../../../../resource_booking
\ No newline at end of file
diff --git a/setup/resource_booking/setup.py b/setup/resource_booking/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/resource_booking/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)

From b31f3136c0987800f7affeb8cbfcf15c89768730 Mon Sep 17 00:00:00 2001
From: Henrik Norlin <henrik.norl@gmail.com>
Date: Mon, 28 Aug 2023 18:11:50 +0200
Subject: [PATCH 62/64] [MIG] resource_booking: Migration to 16.0

Changes done:
- [FIX] _get_available_slots
- [IMP] new field slot_duration
- [IMP] Button (partner -> booking)
- [IMP] combination -> bookings -> create: default combination
- [FIX] _get_intervals() when type_id is missing
- [IMP] booking: search on combination
- [FIX] _availability_is_fitting()
- [IMP] booking list view with hidden partner_ids
- [FIX] attendance hour_to 23:59 -> 24:00
- [FIX] pre-commit
- [FIX] calendar_slot_duration format
- [FIX] _get_calendar_context() with correct start / timezone

Co-authored-by: Henrik Norlin
---
 resource_booking/README.rst                   |  20 ++--
 resource_booking/__manifest__.py              |   5 +-
 .../migrations/16.0.1.0.0/post-migration.py   |  18 +++
 resource_booking/models/__init__.py           |   1 +
 resource_booking/models/res_partner.py        |  26 ++++
 resource_booking/models/resource_booking.py   | 111 +++++++++++++-----
 .../models/resource_booking_combination.py    |   1 +
 .../models/resource_booking_type.py           |  60 ++--------
 resource_booking/readme/CONTRIBUTORS.rst      |   1 +
 .../static/description/index.html             |  14 ++-
 resource_booking/templates/portal.xml         |  18 +--
 resource_booking/tests/common.py              |   6 +-
 resource_booking/tests/test_backend.py        |  14 ++-
 .../views/calendar_event_views.xml            |   1 -
 resource_booking/views/res_partner_views.xml  |  25 ++++
 .../resource_booking_combination_views.xml    |   2 +-
 .../views/resource_booking_type_views.xml     |   3 +-
 .../views/resource_booking_views.xml          |  11 +-
 18 files changed, 219 insertions(+), 118 deletions(-)
 create mode 100644 resource_booking/migrations/16.0.1.0.0/post-migration.py
 create mode 100644 resource_booking/models/res_partner.py
 create mode 100644 resource_booking/views/res_partner_views.xml

diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 9daa31aa..5af42b13 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:2a68fc2648f97ac64afcd5e5c6fa3ab28bfe94008b501d0ebad818d9e9bd3140
+   !! source digest: sha256:69da76a920e2d581cfc27db05479e5705f196298cbbe67e881c92bf1ea6363af
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
@@ -17,13 +17,13 @@ Resource booking
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github
-    :target: https://github.com/OCA/calendar/tree/15.0/resource_booking
+    :target: https://github.com/OCA/calendar/tree/16.0/resource_booking
     :alt: OCA/calendar
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking
+    :target: https://translation.odoo-community.org/projects/calendar-16-0/calendar-16-0-resource_booking
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
-    :target: https://runboat.odoo-community.org/builds?repo=OCA/calendar&target_branch=15.0
+    :target: https://runboat.odoo-community.org/builds?repo=OCA/calendar&target_branch=16.0
     :alt: Try me on Runboat
 
 |badge1| |badge2| |badge3| |badge4| |badge5|
@@ -170,7 +170,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -186,6 +186,7 @@ Contributors
 ~~~~~~~~~~~~
 
 * Jairo Llopis <jairo.llopis@tecnativa.com> (https://www.tecnativa.com/)
+* Henrik Norlin (https://ows.cloud)
 
 Maintainers
 ~~~~~~~~~~~
@@ -203,11 +204,14 @@ promote its widespread use.
 .. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
     :target: https://github.com/pedrobaeza
     :alt: pedrobaeza
+.. |maintainer-ows-cloud| image:: https://github.com/ows-cloud.png?size=40px
+    :target: https://github.com/ows-cloud
+    :alt: ows-cloud
 
-Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
+Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
 
-|maintainer-pedrobaeza| 
+|maintainer-pedrobaeza| |maintainer-ows-cloud| 
 
-This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/15.0/resource_booking>`_ project on GitHub.
+This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/16.0/resource_booking>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 432c3d19..4b71ba26 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -6,12 +6,12 @@
 {
     "name": "Resource booking",
     "summary": "Manage appointments and resource booking",
-    "version": "15.0.2.0.0",
+    "version": "16.0.1.0.0",
     "development_status": "Production/Stable",
     "category": "Appointments",
     "website": "https://github.com/OCA/calendar",
     "author": "Tecnativa, Odoo Community Association (OCA)",
-    "maintainers": ["pedrobaeza"],
+    "maintainers": ["pedrobaeza", "ows-cloud"],
     "license": "AGPL-3",
     "application": True,
     "installable": True,
@@ -37,6 +37,7 @@
         "templates/portal.xml",
         "views/calendar_event_views.xml",
         "views/mail_activity_views.xml",
+        "views/res_partner_views.xml",
         "views/resource_booking_combination_views.xml",
         "views/resource_booking_type_views.xml",
         "views/resource_booking_views.xml",
diff --git a/resource_booking/migrations/16.0.1.0.0/post-migration.py b/resource_booking/migrations/16.0.1.0.0/post-migration.py
new file mode 100644
index 00000000..63b565e6
--- /dev/null
+++ b/resource_booking/migrations/16.0.1.0.0/post-migration.py
@@ -0,0 +1,18 @@
+from openupgradelib import openupgrade
+
+
+def _update_attendance_hour_to(env):
+    """According to the refactoring of _merge_intervals() a booking from 23:00 to 01:00
+    of the next day must be completely available, having defined hour_to=23.59 is not,
+    so it is changed to 24.0.
+    This behavior is confirmed to be correct because in the tests calendars are set
+    with full days (hour_from=0, hour_to=24)."""
+    lines = env["resource.calendar.attendance"].search(
+        [("hour_to", ">=", 23 + 59 / 60)]
+    )
+    lines.hour_to = 24.0
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    _update_attendance_hour_to(env)
diff --git a/resource_booking/models/__init__.py b/resource_booking/models/__init__.py
index 158a4b48..b57e4650 100644
--- a/resource_booking/models/__init__.py
+++ b/resource_booking/models/__init__.py
@@ -1,4 +1,5 @@
 from . import calendar_event
+from . import res_partner
 from . import resource_booking
 from . import resource_booking_combination
 from . import resource_booking_type
diff --git a/resource_booking/models/res_partner.py b/resource_booking/models/res_partner.py
new file mode 100644
index 00000000..180ea2aa
--- /dev/null
+++ b/resource_booking/models/res_partner.py
@@ -0,0 +1,26 @@
+from odoo import fields, models
+
+
+class ResPartner(models.Model):
+    _inherit = "res.partner"
+
+    resource_booking_count = fields.Integer(
+        compute="_compute_resource_booking_count", string="Resource booking count"
+    )
+    resource_booking_ids = fields.One2many(
+        "resource.booking", "partner_id", string="Bookings"
+    )
+
+    def _compute_resource_booking_count(self):
+        for p in self:
+            p.resource_booking_count = len(p.resource_booking_ids)
+
+    def action_view_resource_booking(self):
+        self.ensure_one()
+        action = self.env["ir.actions.actions"]._for_xml_id(
+            "resource_booking.resource_booking_action"
+        )
+        action["context"] = {
+            "default_partner_id": self.id,
+        }
+        return action
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 85087983..1416386e 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -14,7 +14,42 @@
 from odoo.addons.resource.models.resource import Intervals
 
 
-def _availability_is_fitting(available_intervals, start_dt, end_dt):
+def _merge_intervals(intervals):
+    # Merge intervals where start of current interval == stop of previous interval,
+    # assuming that the intervals are ordererd.
+    intervals = [list(tup) for tup in intervals._items]
+    # Handle 23:59:59:99999
+    for i in range(len(intervals)):
+        stop = intervals[i][1]
+        if (
+            stop.hour == 23
+            and stop.minute == 59
+            and stop.second == 59
+            and stop.microsecond == 999999
+        ):
+            intervals[i][1] += timedelta(microseconds=1)
+    # Begin with the last interval, to safely delete it if needed.
+    for i in range(len(intervals) - 1, 0, -1):
+        current_start = intervals[i][0]
+        current_stop = intervals[i][1]
+        previous_stop = intervals[i - 1][1]
+        if current_start == previous_stop:
+            intervals[i - 1][1] = current_stop
+            del intervals[i]
+    return Intervals([tuple(interval) for interval in intervals])
+
+
+def _availability_is_fitting(available_intervals, start_dt, stop_dt):
+    available_intervals = _merge_intervals(available_intervals)
+    for item in available_intervals._items:
+        available_start, available_stop = item[0], item[1]
+        if start_dt >= available_start and stop_dt <= available_stop:
+            return True
+    return False
+
+
+def _availability_is_fitting_legacy(available_intervals, start_dt, end_dt):
+    """I keep the old method, since part of it may be needed in the new method."""
     # Test whether the stretch between start_dt and end_dt is an uninterrupted
     # stretch of time as determined by `available_intervals`.
     #
@@ -480,17 +515,22 @@ def _get_calendar_context(self, year=None, month=None, now=None):
         :param datetime now: Represents the current datetime.
         """
         month1 = relativedelta(months=1)
-        now = now or fields.Datetime.now()
+        now = fields.Datetime.context_timestamp(self, now or fields.Datetime.now())
         year = year or now.year
         month = month or now.month
-        start = datetime(year, month, 1)
-        start, now = (
-            fields.Datetime.context_timestamp(self, dt) for dt in (start, now)
+        start = now.replace(
+            year=year,
+            month=month,
+            day=1,
+            hour=0,
+            minute=0,
+            second=0,
+            microsecond=0,
         )
-        start = start.replace(hour=0, minute=0, second=0, microsecond=0)
         lang = self.env["res.lang"]._lang_get(self.env.lang or self.env.user.lang)
         weekday_names = dict(lang.fields_get(["week_start"])["week_start"]["selection"])
-        slots = self._get_available_slots(start, start + month1)
+        booking_duration = timedelta(hours=self.duration)
+        slots = self._get_available_slots(start, start + month1 + booking_duration)
         return {
             "booking": self,
             "calendar": calendar.Calendar(int(lang.week_start) - 1),
@@ -539,30 +579,39 @@ def _get_best_combination(self):
     def _get_available_slots(self, start_dt, end_dt):
         """Return available slots for scheduling current booking."""
         result = {}
-        now = fields.Datetime.context_timestamp(self, fields.Datetime.now())
-        slot_duration = timedelta(hours=self.type_id.duration)
+        slot_duration = timedelta(hours=self.type_id.slot_duration)
         booking_duration = timedelta(hours=self.duration)
-        current = max(
+        now = fields.Datetime.context_timestamp(self, fields.Datetime.now())
+        start_dt = max(
             start_dt, now + timedelta(hours=self.type_id.modifications_deadline)
         )
-        available_intervals = self._get_intervals(current, end_dt)
-        while current and current < end_dt:
-            slot_start = self.type_id._get_next_slot_start(current)
-            if current != slot_start:
-                current = slot_start
-                continue
-            current_interval = Intervals([(current, current + booking_duration, self)])
-            for start, end, _meta in available_intervals & current_interval:
-                if end - start == booking_duration:
-                    result.setdefault(current.date(), [])
-                    result[current.date()].append(current)
-                # I actually only care about the 1st interval, if any
-                break
-            current += slot_duration
+        # available_intervals should start with the beginning of the work day,
+        # to compute each slot based on the beginning of the work day.
+        workday_min = start_dt.replace(hour=0, minute=0, second=0, microsecond=0)
+        available_intervals = self._get_intervals(workday_min, end_dt)
+        available_intervals = _merge_intervals(available_intervals)
+        # Loop through available times and append tested start/stop to the result.
+        test_start = False
+        for item in available_intervals._items:
+            available_start, available_stop = item[0], item[1]
+            test_start = available_start
+            while test_start and test_start < available_stop:
+                test_stop = test_start + booking_duration
+                if (
+                    test_start >= start_dt
+                    and test_start >= available_start
+                    and test_stop <= available_stop
+                ):
+                    if not result.get(test_start.date()):
+                        result.setdefault(test_start.date(), [])
+                    result[test_start.date()].append(test_start)
+                test_start += slot_duration
         return result
 
     def _get_intervals(self, start_dt, end_dt, combination=None):
-        """Get available intervals for this booking."""
+        """Get available intervals for this booking,
+        based on the calendar of the booking type
+        and the calendar(s) of the relevant resource combination(s)."""
         # Get all intervals except those from current booking
         try:
             booking_id = self.id or self._origin.id or -1
@@ -573,10 +622,12 @@ def _get_intervals(self, start_dt, end_dt, combination=None):
             analyzing_booking=booking_id, exclude_public_holidays=True
         )
         # RBT calendar uses no resources to restrict bookings
-        resource = self.env["resource.resource"]
-        result = booking.type_id.resource_calendar_id._work_intervals_batch(
-            start_dt, end_dt
-        )[resource.id]
+        if booking.type_id:
+            result = booking.type_id.resource_calendar_id._work_intervals_batch(
+                start_dt, end_dt
+            )[False]
+        else:
+            result = Intervals([])
         # Restrict with the chosen combination, or to at least one of the
         # available ones
         combinations = (
@@ -716,7 +767,7 @@ def action_confirm(self):
                         # attendee.state='accepted'
                         attendees_to_confirm |= attendee
             attendees_to_confirm.write({"state": "accepted"})
-        self.recompute()
+        self.env.flush_all()  # booking.meeting_id.partner_ids and attendees_to_confirm
 
     def action_unschedule(self):
         """Remove associated meetings."""
diff --git a/resource_booking/models/resource_booking_combination.py b/resource_booking/models/resource_booking_combination.py
index a7cf2b1b..f8b3d390 100644
--- a/resource_booking/models/resource_booking_combination.py
+++ b/resource_booking/models/resource_booking_combination.py
@@ -101,6 +101,7 @@ def action_open_bookings(self):
             "res_model": "resource.booking",
             "type": "ir.actions.act_window",
             "view_mode": "calendar,tree,form",
+            "context": {"default_combination_id": self.id},
         }
 
     def action_open_resource_booking_types(self):
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index d43f25a9..7d1597d0 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -1,8 +1,6 @@
 # Copyright 2021 Tecnativa - Jairo Llopis
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
-from datetime import timedelta
-from math import ceil
 from random import random
 
 from odoo import _, api, fields, models
@@ -59,10 +57,12 @@ class ResourceBookingType(models.Model):
     duration = fields.Float(
         required=True,
         default=0.5,  # 30 minutes
-        help=(
-            "Interval offered to start each resource booking. "
-            "Also used as booking default duration."
-        ),
+        help=("Booking default duration."),
+    )
+    slot_duration = fields.Float(
+        required=True,
+        default=0.5,  # 30 minutes
+        help=("Interval offered to start each resource booking."),
     )
     location = fields.Char()
     videocall_location = fields.Char(string="Meeting URL")
@@ -128,46 +128,8 @@ def _get_combinations_priorized(self):
         combinations = rels.mapped("combination_id")
         return combinations
 
-    def _get_next_slot_start(self, start_dt):
-        """Slot start as it would come from the beginning of work hours.
-
-        Returns a `datetime` object indicating the next slot start (which could
-        be the same as `start_dt` if it matches), or `False` if no slot is
-        found in the next 2 weeks.
-
-        If the RBT doesn't have a calendar, it returns `start_dt`, unaltered,
-        because there's no way to know when a slot would start.
-        """
-        duration_delta = timedelta(hours=self.duration)
-        end_dt = start_dt + duration_delta
-        workday_min = start_dt.replace(hour=0, minute=0, second=0, microsecond=0)
-        # Detached compatibility with hr_holidays_public
-        res_calendar = self.resource_calendar_id.with_context(
-            exclude_public_holidays=True
-        )
-        resource = self.env["resource.resource"]
-        attendance_intervals = res_calendar._attendance_intervals_batch(
-            workday_min, end_dt
-        )[resource.id]
-        try:
-            workday_start, valid_end, _meta = attendance_intervals._items[-1]
-            if valid_end != end_dt:
-                # Interval found, but without enough time; same as no interval
-                raise IndexError
-        except IndexError:
-            try:
-                # Returns `False` if no slot is found in the next 2 weeks
-                return (
-                    res_calendar.plan_hours(self.duration, end_dt, compute_leaves=True)
-                    - duration_delta
-                )
-            except TypeError:
-                return False
-        time_passed = valid_end - duration_delta - workday_start
-        return workday_start + duration_delta * ceil(time_passed / duration_delta)
-
     def action_open_bookings(self):
-        FloatTimeParser = self.env["ir.qweb.field.float_time"]
+        DurationParser = self.env["ir.qweb.field.duration"]
         return {
             "context": dict(
                 self.env.context,
@@ -176,8 +138,12 @@ def action_open_bookings(self):
                 default_duration=self.duration,
                 default_type_id=self.id,
                 # Context used by web_calendar_slot_duration module
-                calendar_slot_duration=FloatTimeParser.value_to_html(
-                    self.duration, False
+                calendar_slot_duration=DurationParser.value_to_html(
+                    self.slot_duration,
+                    {
+                        "unit": "hour",
+                        "digital": True,
+                    },
                 ),
             ),
             "domain": [("type_id", "=", self.id)],
diff --git a/resource_booking/readme/CONTRIBUTORS.rst b/resource_booking/readme/CONTRIBUTORS.rst
index 7ee45dc9..f7145432 100644
--- a/resource_booking/readme/CONTRIBUTORS.rst
+++ b/resource_booking/readme/CONTRIBUTORS.rst
@@ -1 +1,2 @@
 * Jairo Llopis <jairo.llopis@tecnativa.com> (https://www.tecnativa.com/)
+* Henrik Norlin (https://ows.cloud)
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index 5bc10c36..676ce85f 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!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>
@@ -366,9 +367,9 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:2a68fc2648f97ac64afcd5e5c6fa3ab28bfe94008b501d0ebad818d9e9bd3140
+!! source digest: sha256:69da76a920e2d581cfc27db05479e5705f196298cbbe67e881c92bf1ea6363af
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/15.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/16.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-16-0/calendar-16-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
 schedules.</p>
 <p>Example use cases:</p>
@@ -520,7 +521,7 @@ <h1><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/calendar/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us to smash it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/calendar/issues/new?body=module:%20resource_booking%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -535,6 +536,7 @@ <h2><a class="toc-backref" href="#toc-entry-7">Authors</a></h2>
 <h2><a class="toc-backref" href="#toc-entry-8">Contributors</a></h2>
 <ul class="simple">
 <li>Jairo Llopis &lt;<a class="reference external" href="mailto:jairo.llopis&#64;tecnativa.com">jairo.llopis&#64;tecnativa.com</a>&gt; (<a class="reference external" href="https://www.tecnativa.com/">https://www.tecnativa.com/</a>)</li>
+<li>Henrik Norlin (<a class="reference external" href="https://ows.cloud">https://ows.cloud</a>)</li>
 </ul>
 </div>
 <div class="section" id="maintainers">
@@ -544,9 +546,9 @@ <h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
 mission is to support the collaborative development of Odoo features and
 promote its widespread use.</p>
-<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
-<p><a class="reference external image-reference" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/15.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
+<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
+<p><a class="reference external image-reference" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/ows-cloud"><img alt="ows-cloud" src="https://github.com/ows-cloud.png?size=40px" /></a></p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/calendar/tree/16.0/resource_booking">OCA/calendar</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index fc5165f5..4458958a 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -97,7 +97,7 @@
                                             <button
                                                 class="btn btn-primary dropdown-toggle"
                                                 type="button"
-                                                data-toggle="dropdown"
+                                                data-bs-toggle="dropdown"
                                                 aria-haspopup="true"
                                                 aria-expanded="false"
                                                 t-out="day.day"
@@ -112,8 +112,8 @@
                                                     <button
                                                         class="dropdown-item"
                                                         type="button"
-                                                        data-toggle="modal"
-                                                        t-attf-data-target="#modal-confirm-#{int(slot.timestamp())}"
+                                                        data-bs-toggle="modal"
+                                                        t-attf-data-bs-target="#modal-confirm-#{int(slot.timestamp())}"
                                                         t-out="slot.strftime(time_format)"
                                                     />
                                                 </t>
@@ -201,7 +201,7 @@
                                     <button
                                         type="button"
                                         class="btn btn-secondary"
-                                        data-dismiss="modal"
+                                        data-bs-dismiss="modal"
                                     >Cancel</button>
                                     <button
                                         type="submit"
@@ -455,8 +455,8 @@
                         <a
                             role="button"
                             class="btn btn-danger"
-                            data-toggle="modal"
-                            data-target="#modal_cancel"
+                            data-bs-toggle="modal"
+                            data-bs-target="#modal_cancel"
                             href="#"
                         >
                             <i class="fa fa-times" />
@@ -478,7 +478,7 @@
                             <button
                                 type="button"
                                 class="close"
-                                data-dismiss="modal"
+                                data-bs-dismiss="modal"
                                 aria-label="Close"
                             >
                                 <i class="fa fa-times" />
@@ -505,7 +505,7 @@
                             <button
                                 type="button"
                                 class="btn btn-primary"
-                                data-dismiss="modal"
+                                data-bs-dismiss="modal"
                             >Go back</button>
                         </footer>
                     </div>
@@ -543,7 +543,7 @@
             <button
                 type="button"
                 class="close"
-                data-dismiss="alert"
+                data-bs-dismiss="alert"
                 aria-label="Close"
             > &#215;</button>
         </div>
diff --git a/resource_booking/tests/common.py b/resource_booking/tests/common.py
index 1bf5e4bb..3a57b86c 100644
--- a/resource_booking/tests/common.py
+++ b/resource_booking/tests/common.py
@@ -42,7 +42,7 @@ def create_test_data(obj):
                 "name": "Fridays",
                 "dayofweek": "4",
                 "hour_from": 0,
-                "hour_to": 23.99,
+                "hour_to": 24,
                 "day_period": "morning",
             },
         ),
@@ -53,7 +53,7 @@ def create_test_data(obj):
                 "name": "Saturdays",
                 "dayofweek": "5",
                 "hour_from": 0,
-                "hour_to": 23.99,
+                "hour_to": 24,
                 "day_period": "morning",
             },
         ),
@@ -64,7 +64,7 @@ def create_test_data(obj):
                 "name": "Sunday",
                 "dayofweek": "6",
                 "hour_from": 0,
-                "hour_to": 23.99,
+                "hour_to": 24,
                 "day_period": "morning",
             },
         ),
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index f91e451e..9755eb96 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -203,8 +203,16 @@ def test_availability_is_fitting_malformed_date_skip(self):
         """
         recset = self.env["resource.booking"]
         tuples = [
-            (datetime(2021, 3, 1, 18, 0), datetime(2021, 3, 1, 23, 59), recset),
-            (datetime(2021, 3, 2, 0, 0), datetime(2021, 3, 2, 23, 59), recset),
+            (
+                datetime(2021, 3, 1, 18, 0),
+                datetime(2021, 3, 1, 23, 59, 59, 999999),
+                recset,
+            ),
+            (
+                datetime(2021, 3, 2, 0, 0),
+                datetime(2021, 3, 2, 23, 59, 59, 999999),
+                recset,
+            ),
             (datetime(2021, 3, 3, 0, 0), datetime(2021, 3, 3, 18, 0), recset),
         ]
         available_intervals = Intervals(tuples)
@@ -769,7 +777,7 @@ def test_suggested_and_subscribed_recipients(self):
         # Requester and combination must be suggested
         self.assertEqual(
             rb._message_get_suggested_recipients(),
-            {rb.id: [(rb.partner_ids.id, "some customer", "Attendees")]},
+            {rb.id: [(rb.partner_ids.id, "some customer", None, "Attendees")]},
         )
 
     def test_creating_rbt_has_tags(self):
diff --git a/resource_booking/views/calendar_event_views.xml b/resource_booking/views/calendar_event_views.xml
index 58671981..d3a9021a 100644
--- a/resource_booking/views/calendar_event_views.xml
+++ b/resource_booking/views/calendar_event_views.xml
@@ -6,7 +6,6 @@
         <field name="name">calendar.event.view.form.inherit</field>
         <field name="model">calendar.event</field>
         <field name="inherit_id" ref="calendar.view_calendar_event_form" />
-        <field name="groups_id" eval="[(4, ref('group_user'), 0)]" />
         <field name="arch" type="xml">
             <form position="inside">
                 <field name="resource_booking_ids" invisible="1" />
diff --git a/resource_booking/views/res_partner_views.xml b/resource_booking/views/res_partner_views.xml
new file mode 100644
index 00000000..22a70daf
--- /dev/null
+++ b/resource_booking/views/res_partner_views.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <record id="view_partner_form" model="ir.ui.view">
+        <field name="model">res.partner</field>
+        <field name="type">form</field>
+        <field name="inherit_id" ref="base.view_partner_form" />
+        <field name="arch" type="xml">
+            <div name="button_box" position="inside">
+                <button
+                    class="oe_stat_button"
+                    type="object"
+                    name="action_view_resource_booking"
+                    groups="resource_booking.group_user"
+                    icon="fa-calendar"
+                >
+                    <field
+                        string="Bookings"
+                        name="resource_booking_count"
+                        widget="statinfo"
+                    />
+                </button>
+            </div>
+        </field>
+    </record>
+</odoo>
diff --git a/resource_booking/views/resource_booking_combination_views.xml b/resource_booking/views/resource_booking_combination_views.xml
index b20af153..ca778086 100644
--- a/resource_booking/views/resource_booking_combination_views.xml
+++ b/resource_booking/views/resource_booking_combination_views.xml
@@ -3,7 +3,7 @@
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
     <!-- Views -->
-    <record id="resource_booking_combination_form" model="ir.ui.view">
+    <record id="resource_booking_combination_view_form" model="ir.ui.view">
         <field name="name">Resource booking combination form</field>
         <field name="model">resource.booking.combination</field>
         <field name="arch" type="xml">
diff --git a/resource_booking/views/resource_booking_type_views.xml b/resource_booking/views/resource_booking_type_views.xml
index bc00b278..7b9d505d 100644
--- a/resource_booking/views/resource_booking_type_views.xml
+++ b/resource_booking/views/resource_booking_type_views.xml
@@ -3,7 +3,7 @@
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
     <!-- Views -->
-    <record id="resource_booking_type_form" model="ir.ui.view">
+    <record id="resource_booking_type_view_form" model="ir.ui.view">
         <field name="name">Resource booking type form</field>
         <field name="model">resource.booking.type</field>
         <field name="arch" type="xml">
@@ -40,6 +40,7 @@
                                 groups="base.group_multi_company"
                             />
                             <field name="duration" widget="float_time" />
+                            <field name="slot_duration" widget="float_time" />
                             <field name="modifications_deadline" widget="float_time" />
                             <field name="resource_calendar_id" />
                         </group>
diff --git a/resource_booking/views/resource_booking_views.xml b/resource_booking/views/resource_booking_views.xml
index f017dfca..f9e5d4a8 100644
--- a/resource_booking/views/resource_booking_views.xml
+++ b/resource_booking/views/resource_booking_views.xml
@@ -29,7 +29,7 @@
         <field name="arch" type="xml">
             <tree>
                 <field name="name" />
-                <field name="partner_ids" widget="many2many_tags" />
+                <field name="partner_ids" widget="many2many_tags" optional="hide" />
                 <field name="type_id" />
                 <field name="combination_id" />
                 <field name="state" />
@@ -38,7 +38,7 @@
             </tree>
         </field>
     </record>
-    <record id="resource_booking_form" model="ir.ui.view">
+    <record id="resource_booking_view_form" model="ir.ui.view">
         <field name="name">Resource booking form</field>
         <field name="model">resource.booking</field>
         <field name="arch" type="xml">
@@ -159,11 +159,7 @@
                             <field name="categ_ids" widget="many2many_tags" />
                         </group>
                         <group name="meeting" string="Meeting">
-                            <field
-                                name="meeting_id"
-                                groups="base.group_no_one"
-                                readonly="1"
-                            />
+                            <field name="meeting_id" readonly="1" />
                             <field name="user_id" />
                             <field name="is_overdue" invisible="1" />
                             <field name="is_modifiable" invisible="1" />
@@ -207,6 +203,7 @@
             <search>
                 <field name="partner_ids" />
                 <field name="type_id" />
+                <field name="combination_id" />
                 <filter
                     name="is_mine"
                     string="Involving me"

From e4652d6ee2200df15464f613998b1bf57152aab1 Mon Sep 17 00:00:00 2001
From: rrebollo <rolandoperezrebollo@gmail.com>
Date: Thu, 25 Jan 2024 11:31:04 -0500
Subject: [PATCH 63/64] [FIX] resource_booking: Misc changes related to 16.0
 migration
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Changes done:
- Add freezegun to test_requirements.txt
- Fix failling BackendCase. test_booking_from_calendar_view
- Fix typo in help parameter for combination_assignment field from resource_booking_type
- Error CalendarQuickCreate title is not a string when scheduling a booking
- Portal responsive booking calendar table going wider and no x scroll
- Fix failing PortalCase.test_portal_no_bookings

Test was failling cause there was no bookings link on portal home for external users, then no trigger.
Also I had to tweak eslintrc config cause precommit was failling due to ECMA version.

Co-authored-by: Rolando Pérez Rebollo
---
 .eslintrc.yml                                 |   3 +-
 resource_booking/README.rst                   |   2 +-
 resource_booking/__manifest__.py              |   9 +-
 resource_booking/models/resource_booking.py   |   2 +-
 .../models/resource_booking_type.py           |   2 +-
 .../static/description/index.html             |   2 +-
 .../static/src/js/booking_portal.js           |  13 ++
 .../js/{ => tours}/resource_booking_tour.js   |   2 -
 resource_booking/templates/portal.xml         | 209 +++++++++---------
 resource_booking/tests/test_backend.py        |   4 +-
 test_requirements.txt                         |   1 +
 11 files changed, 139 insertions(+), 110 deletions(-)
 create mode 100644 resource_booking/static/src/js/booking_portal.js
 rename resource_booking/static/src/js/{ => tours}/resource_booking_tour.js (98%)
 create mode 100644 test_requirements.txt

diff --git a/.eslintrc.yml b/.eslintrc.yml
index fed88d70..3d63b68a 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -4,7 +4,8 @@ env:
 
 # See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
 parserOptions:
-  ecmaVersion: 2019
+  ecmaVersion: 11
+  sourceType: module
 
 overrides:
   - files:
diff --git a/resource_booking/README.rst b/resource_booking/README.rst
index 5af42b13..ca5aabe8 100644
--- a/resource_booking/README.rst
+++ b/resource_booking/README.rst
@@ -7,7 +7,7 @@ Resource booking
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:69da76a920e2d581cfc27db05479e5705f196298cbbe67e881c92bf1ea6363af
+   !! source digest: sha256:1a00b2b5ad7b830fbe275ea34e4efe05037f94243149329f9a6b5fdbb6b02749
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/resource_booking/__manifest__.py b/resource_booking/__manifest__.py
index 4b71ba26..50b2a655 100644
--- a/resource_booking/__manifest__.py
+++ b/resource_booking/__manifest__.py
@@ -44,8 +44,13 @@
         "views/menus.xml",
     ],
     "assets": {
-        "web.assets_frontend": ["resource_booking/static/src/scss/portal.scss"],
-        "web.assets_tests": ["resource_booking/static/src/js/resource_booking_tour.js"],
+        "web.assets_frontend": [
+            "resource_booking/static/src/js/booking_portal.js",
+            "resource_booking/static/src/scss/portal.scss",
+        ],
+        "web.assets_tests": [
+            "resource_booking/static/src/js/tours/resource_booking_tour.js"
+        ],
     },
     "demo": ["demo/res_users_demo.xml"],
 }
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 1416386e..06400c9d 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -736,7 +736,7 @@ def action_schedule(self):
                     self.duration, False
                 ),
                 default_resource_booking_ids=[(6, 0, self.ids)],
-                default_name=self.name,
+                default_name=self.name or "",
             ),
             "name": _("Schedule booking"),
             "res_model": "calendar.event",
diff --git a/resource_booking/models/resource_booking_type.py b/resource_booking/models/resource_booking_type.py
index 7d1597d0..d7d51585 100644
--- a/resource_booking/models/resource_booking_type.py
+++ b/resource_booking/models/resource_booking_type.py
@@ -35,7 +35,7 @@ class ResourceBookingType(models.Model):
         default="random",
         help=(
             "Choose how to auto-assign resource combinations. "
-            "It has no effect if assiged manually."
+            "It has no effect if assigned manually."
         ),
     )
     combination_rel_ids = fields.One2many(
diff --git a/resource_booking/static/description/index.html b/resource_booking/static/description/index.html
index 676ce85f..82f60f2e 100644
--- a/resource_booking/static/description/index.html
+++ b/resource_booking/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Resource booking</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:69da76a920e2d581cfc27db05479e5705f196298cbbe67e881c92bf1ea6363af
+!! source digest: sha256:1a00b2b5ad7b830fbe275ea34e4efe05037f94243149329f9a6b5fdbb6b02749
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/calendar/tree/16.0/resource_booking"><img alt="OCA/calendar" src="https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/calendar-16-0/calendar-16-0-resource_booking"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/calendar&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module adds a new app to allow you to book resource combinations in given
diff --git a/resource_booking/static/src/js/booking_portal.js b/resource_booking/static/src/js/booking_portal.js
new file mode 100644
index 00000000..31213f9b
--- /dev/null
+++ b/resource_booking/static/src/js/booking_portal.js
@@ -0,0 +1,13 @@
+/** @odoo-module */
+
+import publicWidget from "web.public.widget";
+import "portal.portal"; // Force dependencies
+
+publicWidget.registry.PortalHomeCounters.include({
+    /**
+     * @override
+     */
+    _getCountersAlwaysDisplayed() {
+        return this._super(...arguments).concat(["booking_count"]);
+    },
+});
diff --git a/resource_booking/static/src/js/resource_booking_tour.js b/resource_booking/static/src/js/tours/resource_booking_tour.js
similarity index 98%
rename from resource_booking/static/src/js/resource_booking_tour.js
rename to resource_booking/static/src/js/tours/resource_booking_tour.js
index 8b1a9fba..972c54a9 100644
--- a/resource_booking/static/src/js/resource_booking_tour.js
+++ b/resource_booking/static/src/js/tours/resource_booking_tour.js
@@ -1,6 +1,4 @@
 odoo.define("resource_booking.tour", function (require) {
-    "use strict";
-
     var tour = require("web_tour.tour");
 
     tour.register(
diff --git a/resource_booking/templates/portal.xml b/resource_booking/templates/portal.xml
index 4458958a..7c6324d6 100644
--- a/resource_booking/templates/portal.xml
+++ b/resource_booking/templates/portal.xml
@@ -33,110 +33,117 @@
                 </a>
             </div>
             <!-- Monthly calendar -->
-            <table class="table table-responsive-md text-center">
-                <thead t-if="booking.requester_advice">
-                    <tr>
-                        <td colspan="7">
-                            <div t-field="booking.requester_advice" />
-                        </td>
-                    </tr>
-                </thead>
-                <thead class="thead-dark">
-                    <tr>
-                        <th class="text-left">
-                            <a
-                                t-if="start > now"
-                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_previous.year, start_previous.month))"
-                                class="btn btn-secondary"
-                                title="Previous month"
-                            >
-                                <i class="fa fa-chevron-left" />
-                            </a>
-                        </th>
-                        <th
-                            class="align-middle"
-                            colspan="5"
-                            t-out="start.strftime('%B %Y')"
-                        />
-                        <th class="text-right">
-                            <a
-                                t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_next.year, start_next.month))"
-                                class="btn btn-secondary"
-                                title="Next month"
-                            >
-                                <i class="fa fa-chevron-right" />
-                            </a>
-                        </th>
-                    </tr>
-                </thead>
-                <thead>
-                    <tr>
-                        <t t-foreach="calendar.iterweekdays()" t-as="weekday">
+            <div class="table-responsive-md">
+                <table class="table text-center">
+                    <thead t-if="booking.requester_advice">
+                        <tr>
+                            <td colspan="7">
+                                <div t-field="booking.requester_advice" />
+                            </td>
+                        </tr>
+                    </thead>
+                    <thead class="thead-dark">
+                        <tr>
+                            <th class="text-left">
+                                <a
+                                    t-if="start > now"
+                                    t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_previous.year, start_previous.month))"
+                                    class="btn btn-secondary"
+                                    title="Previous month"
+                                >
+                                    <i class="fa fa-chevron-left" />
+                                </a>
+                            </th>
                             <th
-                                t-att-title="weekday_names[str(weekday + 1)]"
-                                t-out="weekday_names[str(weekday + 1)][:3]"
+                                class="align-middle"
+                                colspan="5"
+                                t-out="start.strftime('%B %Y')"
                             />
-                        </t>
-                    </tr>
-                </thead>
-                <tbody>
-                    <t
-                        t-foreach="calendar.monthdatescalendar(start.year, start.month)"
-                        t-as="week"
-                    >
-                        <tr>
-                            <t t-foreach="week" t-as="day">
-                                <td
-                                    t-att-class="day.month != start.month and 'text-muted'"
+                            <th class="text-right">
+                                <a
+                                    t-att-href="booking.get_portal_url(suffix='/schedule/%d/%d' % (start_next.year, start_next.month))"
+                                    class="btn btn-secondary"
+                                    title="Next month"
                                 >
-                                    <t
-                                        t-if="day.month == start.month and slots.get(day)"
+                                    <i class="fa fa-chevron-right" />
+                                </a>
+                            </th>
+                        </tr>
+                    </thead>
+                    <thead>
+                        <tr>
+                            <t t-foreach="calendar.iterweekdays()" t-as="weekday">
+                                <th
+                                    t-att-title="weekday_names[str(weekday + 1)]"
+                                    t-out="weekday_names[str(weekday + 1)][:3]"
+                                />
+                            </t>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <t
+                            t-foreach="calendar.monthdatescalendar(start.year, start.month)"
+                            t-as="week"
+                        >
+                            <tr>
+                                <t t-foreach="week" t-as="day">
+                                    <td
+                                        t-att-class="day.month != start.month and 'text-muted'"
                                     >
-                                        <!-- Day dropdown -->
-                                        <div class="dropdown">
-                                            <button
-                                                class="btn btn-primary dropdown-toggle"
-                                                type="button"
-                                                data-bs-toggle="dropdown"
-                                                aria-haspopup="true"
-                                                aria-expanded="false"
-                                                t-out="day.day"
-                                                t-attf-id="dropdown-trigger-#{day.isoformat()}"
-                                            />
-                                            <div
-                                                class="dropdown-menu slots-dropdown"
-                                                t-attf-aria-labelledby="dropdown-trigger-#{day.isoformat()}"
-                                            >
-                                                <t t-foreach="slots[day]" t-as="slot">
-                                                    <!-- Hour item to open confirmation -->
-                                                    <button
-                                                        class="dropdown-item"
-                                                        type="button"
-                                                        data-bs-toggle="modal"
-                                                        t-attf-data-bs-target="#modal-confirm-#{int(slot.timestamp())}"
-                                                        t-out="slot.strftime(time_format)"
-                                                    />
-                                                </t>
+                                        <t
+                                            t-if="day.month == start.month and slots.get(day)"
+                                        >
+                                            <!-- Day dropdown -->
+                                            <div class="dropdown">
+                                                <button
+                                                    class="btn btn-primary dropdown-toggle"
+                                                    type="button"
+                                                    data-bs-toggle="dropdown"
+                                                    aria-haspopup="true"
+                                                    aria-expanded="false"
+                                                    t-out="day.day"
+                                                    t-attf-id="dropdown-trigger-#{day.isoformat()}"
+                                                />
+                                                <div
+                                                    class="dropdown-menu slots-dropdown"
+                                                    t-attf-aria-labelledby="dropdown-trigger-#{day.isoformat()}"
+                                                >
+                                                    <t
+                                                        t-foreach="slots[day]"
+                                                        t-as="slot"
+                                                    >
+                                                        <!-- Hour item to open confirmation -->
+                                                        <button
+                                                            class="dropdown-item"
+                                                            type="button"
+                                                            data-bs-toggle="modal"
+                                                            t-attf-data-bs-target="#modal-confirm-#{int(slot.timestamp())}"
+                                                            t-out="slot.strftime(time_format)"
+                                                        />
+                                                    </t>
+                                                </div>
                                             </div>
-                                        </div>
-                                    </t>
-                                    <t t-else="">
-                                        <t t-out="day.day" />
-                                    </t>
-                                </td>
-                            </t>
+                                        </t>
+                                        <t t-else="">
+                                            <t t-out="day.day" />
+                                        </t>
+                                    </td>
+                                </t>
+                            </tr>
+                        </t>
+                    </tbody>
+                    <tfoot>
+                        <tr>
+                            <td
+                                colspan="7"
+                            > All times are displayed using this timezone: <strong
+                                    t-field="booking.type_id.resource_calendar_id.tz"
+                                />
+                            </td>
                         </tr>
-                    </t>
-                </tbody>
-                <tfoot>
-                    <tr>
-                        <td colspan="7">
-                            All times are displayed using this timezone:
-                            <strong t-field="booking.type_id.resource_calendar_id.tz" />
-                        </td>
-                    </tr>
-                </tfoot>
-            </table>
+                    </tfoot>
+                </table>
+            </div>
             <!-- Hour confirmation modals -->
             <t
                 t-foreach="calendar.monthdatescalendar(start.year, start.month)"
@@ -249,7 +256,11 @@
             </t>
         </xpath>
     </template>
-    <template id="portal_my_home" inherit_id="portal.portal_my_home">
+    <template
+        id="portal_my_home"
+        inherit_id="portal.portal_my_home"
+        customize_show="True"
+    >
         <xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
             <t t-call="portal.portal_docs_entry">
                 <t t-set="title">Bookings</t>
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 9755eb96..da1acda0 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -268,9 +268,9 @@ def test_booking_from_calendar_view(self):
         self.assertEqual(self.rbt.duration, 0.5)
         # Change it to 45 minutes
         self.rbt.duration = 0.75
-        # Bookings smart button configures calendar with slots of 45 minutes
+        # Bookings smart button configures calendar with slots from slot duration field
         button_context = self.rbt.action_open_bookings()["context"]
-        self.assertEqual(button_context["calendar_slot_duration"], "00:45")
+        self.assertEqual(button_context["calendar_slot_duration"], "00:30:00")
         self.assertEqual(button_context["default_duration"], 0.75)
         # When you click & drag on calendar to create an event, it adds the
         # start and duration as default; we imitate that here to book a meeting
diff --git a/test_requirements.txt b/test_requirements.txt
new file mode 100644
index 00000000..881bd9f2
--- /dev/null
+++ b/test_requirements.txt
@@ -0,0 +1 @@
+freezegun

From 778d9f34216275f58ff7e05f4040ac55b91b4655 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
 <victor.martinez@tecnativa.com>
Date: Mon, 11 Mar 2024 14:15:07 +0100
Subject: [PATCH 64/64] [MIG] resource_booking: Finish migration to 16.0

Changes done:
- Squash administrative commits.
- Purge translations.
- Fix tests and/or remove warnings.
- Remove migration scripts from 15.0
- Change resource_booking_ids field from partner to many2many field

TT45643
---
 resource_booking/i18n/es.po                   |  6 ---
 resource_booking/i18n/fr_FR.po                |  9 -----
 .../migrations/15.0.1.4.0/post-migration.py   | 19 ----------
 .../migrations/15.0.1.4.0/pre-migration.py    | 10 -----
 resource_booking/models/res_partner.py        | 11 ++++--
 resource_booking/models/resource_booking.py   | 11 ++++--
 resource_booking/tests/test_backend.py        | 27 +++++++-------
 resource_booking/tests/test_portal.py         | 37 ++++++++-----------
 8 files changed, 46 insertions(+), 84 deletions(-)
 delete mode 100644 resource_booking/migrations/15.0.1.4.0/post-migration.py
 delete mode 100644 resource_booking/migrations/15.0.1.4.0/pre-migration.py

diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index cc2e3b06..0acd71f6 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -1349,9 +1349,3 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
-
-#~ msgid "Next Activity Resource Booking"
-#~ msgstr "Siguiente actividad de reserva de recursos"
-
-#~ msgid "Who requested this booking?"
-#~ msgstr "¿Quién solicitó esta reserva/cita?"
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index ef223482..d1986ac7 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -1360,12 +1360,3 @@ msgstr ""
 #: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
 msgid "because you belong to the chosen resource combination:"
 msgstr ""
-
-#~ msgid "Who requested this booking?"
-#~ msgstr "Qui a demandé cette réservation ?"
-
-#~ msgid "SMS Delivery error"
-#~ msgstr "Erreur de livraison SMS"
-
-#~ msgid "Followers (Channels)"
-#~ msgstr "Abonnés (Chaînes)"
diff --git a/resource_booking/migrations/15.0.1.4.0/post-migration.py b/resource_booking/migrations/15.0.1.4.0/post-migration.py
deleted file mode 100644
index 27678d64..00000000
--- a/resource_booking/migrations/15.0.1.4.0/post-migration.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2023 Tecnativa - Carolina Fernandez
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from openupgradelib import openupgrade
-
-
-def convert_resource_booking_partners(env):
-    openupgrade.m2o_to_x2m(
-        env.cr,
-        env["resource.booking"],
-        "resource_booking",
-        "partner_ids",
-        "old_partner_id",
-    )
-
-
-@openupgrade.migrate()
-def migrate(env, version):
-    """Put partner_id in partner_ids"""
-    convert_resource_booking_partners(env)
diff --git a/resource_booking/migrations/15.0.1.4.0/pre-migration.py b/resource_booking/migrations/15.0.1.4.0/pre-migration.py
deleted file mode 100644
index 50dd4a68..00000000
--- a/resource_booking/migrations/15.0.1.4.0/pre-migration.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2023 Tecnativa - Carolina Fernandez
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-
-def migrate(env):
-    env.cr.execute(
-        """
-        ALTER TABLE resource_booking RENAME partner_id TO old_partner_id
-        """,
-    )
diff --git a/resource_booking/models/res_partner.py b/resource_booking/models/res_partner.py
index 180ea2aa..3aefcf5b 100644
--- a/resource_booking/models/res_partner.py
+++ b/resource_booking/models/res_partner.py
@@ -7,8 +7,13 @@ class ResPartner(models.Model):
     resource_booking_count = fields.Integer(
         compute="_compute_resource_booking_count", string="Resource booking count"
     )
-    resource_booking_ids = fields.One2many(
-        "resource.booking", "partner_id", string="Bookings"
+    resource_booking_ids = fields.Many2many(
+        comodel_name="resource.booking",
+        relation="res_partner_resource_booking_rel",
+        column1="res_partner_id",
+        column2="resource_booking_id",
+        string="Bookings",
+        copy=False,
     )
 
     def _compute_resource_booking_count(self):
@@ -21,6 +26,6 @@ def action_view_resource_booking(self):
             "resource_booking.resource_booking_action"
         )
         action["context"] = {
-            "default_partner_id": self.id,
+            "default_partner_ids": self.ids,
         }
         return action
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index 06400c9d..ae70195e 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -167,6 +167,7 @@ class ResourceBooking(models.Model):
     )
     partner_ids = fields.Many2many(
         comodel_name="res.partner",
+        relation="res_partner_resource_booking_rel",
         string="Attendees",
         required=True,
         tracking=True,
@@ -724,7 +725,7 @@ def _message_get_suggested_recipients(self):
 
     def action_schedule(self):
         """Redirect user to a simpler way to schedule this booking."""
-        FloatTimeParser = self.env["ir.qweb.field.float_time"]
+        DurationParser = self.env["ir.qweb.field.duration"]
         return {
             "context": dict(
                 self.env.context,
@@ -732,8 +733,12 @@ def action_schedule(self):
                 default_res_model_id=False,
                 default_res_id=False,
                 # Context used by web_calendar_slot_duration module
-                calendar_slot_duration=FloatTimeParser.value_to_html(
-                    self.duration, False
+                calendar_slot_duration=DurationParser.value_to_html(
+                    self.duration,
+                    {
+                        "unit": "hour",
+                        "digital": True,
+                    },
                 ),
                 default_resource_booking_ids=[(6, 0, self.ids)],
                 default_name=self.name or "",
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index da1acda0..595db4aa 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -618,7 +618,9 @@ def test_location(self):
         self.assertEqual(rb.location, "Office 3")
 
     def test_videocall_location(self):
-        """Videocall location across records works as expected."""
+        """Videocall location across records works as expected.
+        We need to set dummy urls to prevent the _set_videocall_location() method
+        of calendar from doing so."""
         rbt2 = self.rbt.copy({"videocall_location": "Videocall Office 2"})
         rb_f = Form(self.env["resource.booking"])
         rb_f.partner_ids.add(self.partner)
@@ -638,29 +640,28 @@ def test_videocall_location(self):
         self.assertEqual(rb.videocall_location, "Videocall Office 2")
         # Still can change it independently
         with Form(rb) as rb_f:
-            rb_f.videocall_location = "Videocall Office 1"
-        self.assertEqual(rb.videocall_location, "Videocall Office 1")
+            rb_f.videocall_location = "https://Videocall Office 1"
+        self.assertEqual(rb.videocall_location, "https://Videocall Office 1")
         self.assertEqual(rbt2.videocall_location, "Videocall Office 2")
         # Schedule the booking, meeting inherits videocall location from it
         with Form(rb) as rb_f:
             rb_f.start = "2021-03-01 08:00:00"
         self.assertEqual(rb.state, "scheduled")
-        self.assertEqual(rb.videocall_location, "Videocall Office 1")
-        self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 1")
-        # Changing meeting videocall location changes videocall location of booking
+        self.assertEqual(rb.videocall_location, "https://Videocall Office 1")
+        self.assertEqual(rb.meeting_id.videocall_location, "https://Videocall Office 1")
         with Form(rb.meeting_id) as meeting_f:
-            meeting_f.videocall_location = "Videocall Office 2"
-        self.assertEqual(rb.videocall_location, "Videocall Office 2")
-        self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 2")
+            meeting_f.videocall_location = "https://Videocall Office 2"
+        self.assertEqual(rb.videocall_location, "https://Videocall Office 2")
+        self.assertEqual(rb.meeting_id.videocall_location, "https://Videocall Office 2")
         # Changing booking videocall location changes meeting location
         with Form(rb) as rb_f:
-            rb_f.videocall_location = "Videocall Office 3"
-        self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 3")
-        self.assertEqual(rb.videocall_location, "Videocall Office 3")
+            rb_f.videocall_location = "https://Videocall Office 3"
+        self.assertEqual(rb.videocall_location, "https://Videocall Office 3")
+        self.assertEqual(rb.meeting_id.videocall_location, "https://Videocall Office 3")
         # When unscheduled, it keeps videocall location untouched
         rb.action_unschedule()
         self.assertFalse(rb.meeting_id)
-        self.assertEqual(rb.videocall_location, "Videocall Office 3")
+        self.assertEqual(rb.videocall_location, "https://Videocall Office 3")
 
     def test_organizer_sync(self):
         """Resource booking and meeting organizers are properly synced."""
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 5c7939fe..273e4d02 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -7,33 +7,28 @@
 from freezegun import freeze_time
 from lxml.html import fromstring
 
+from odoo.tests import new_test_user, tagged
 from odoo.tests.common import HttpCase
 
 from .common import create_test_data
 
 
 @freeze_time("2021-02-26 09:00:00", tick=True)
+@tagged("post_install", "-at_install")
 class PortalCase(HttpCase):
-    def setUp(self):
-        super().setUp()
-        create_test_data(self)
-        self.user_portal, self.user_manager = self.env["res.users"].create(
-            [
-                {
-                    "name": "portal",
-                    "login": "ptl",
-                    "password": "ptl",
-                    "groups_id": [(4, self.env.ref("base.group_portal").id, 0)],
-                },
-                {
-                    "name": "manager",
-                    "login": "mgr",
-                    "password": "mgr",
-                    "groups_id": [
-                        (4, self.env.ref("resource_booking.group_manager").id, 0)
-                    ],
-                },
-            ]
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        create_test_data(cls)
+
+        cls.user_portal = new_test_user(
+            cls.env, login="ptl", password="ptl", groups="base.group_portal"
+        )
+        cls.user_manager = new_test_user(
+            cls.env,
+            login="mgr",
+            password="mgr",
+            groups="resource_booking.group_manager",
         )
 
     def _url_xml(self, url, data=None, timeout=10):
@@ -195,7 +190,7 @@ def test_portal_scheduling_conflict(self):
             )
         )
         # Public guy's booking and related meeting are OK in backend
-        booking_public.invalidate_cache(ids=booking_public.ids)
+        booking_public.invalidate_model()
         self.assertEqual(booking_public.state, "confirmed")
         self.assertEqual(len(booking_public.meeting_id.attendee_ids), 2)
         for attendee in booking_public.meeting_id.attendee_ids: