From cba94988a8b3da282613e33d65165b2746f2f954 Mon Sep 17 00:00:00 2001 From: Guilherme Costa Date: Thu, 3 Sep 2026 10:47:34 +0100 Subject: [PATCH 1/2] chore(resources): rename/dedupe asset filenames, drop 59 dead SVGs, add orphan guard test --- BlocksScreen/lib/panels/filamentTab.py | 5 +- BlocksScreen/lib/ui/controlStackedWidget.ui | 2 +- .../lib/ui/controlStackedWidget_ui.py | 2223 ++- BlocksScreen/lib/ui/mainWindow.ui | 4 +- BlocksScreen/lib/ui/mainWindow_ui.py | 406 +- .../lib/ui/resources/icon_resources.qrc | 51 +- .../lib/ui/resources/icon_resources_rc.py | 11788 ++++++++-------- .../media/btn_icons/LCD_settings.svg | 1 - .../lib/ui/resources/media/btn_icons/acel.svg | 1 - .../{add filament.svg => add_filament.svg} | 0 .../{add spool.svg => add_spool.svg} | 0 .../{baby_step_icon.svg => baby_step.svg} | 0 .../media/btn_icons/chamber_temperature.svg | 1 - .../{check gate 1.svg => check_gate_1.svg} | 0 .../btn_icons/{file_icon.svg => file.svg} | 0 .../resources/media/btn_icons/file_error.svg | 1 - .../btn_icons/{folderIcon.svg => folder.svg} | 0 .../resources/media/btn_icons/folder_icon.svg | 55 - .../resources/media/btn_icons/frequency_X.svg | 1 - .../resources/media/btn_icons/frequency_Y.svg | 1 - .../{garbage-icon.svg => garbage.svg} | 0 .../{half_spoll.svg => half_spool.svg} | 0 .../{heatsoak_icon.svg => heatsoak.svg} | 0 .../media/btn_icons/{LEDs.svg => leds.svg} | 0 .../media/btn_icons/material_topbar.svg | 1 - .../ui/resources/media/btn_icons/motion.svg | 1 - .../media/btn_icons/network/0bar_wifi.svg | 1 - .../btn_icons/network/0bar_wifi_protected.svg | 1 - .../btn_icons/network/1bar_wifi_protected.svg | 1 - .../btn_icons/network/2bar_wifi_protected.svg | 1 - .../btn_icons/network/3bar_wifi_protected.svg | 1 - .../media/btn_icons/network/4bar_wifi.svg | 1 - .../btn_icons/network/4bar_wifi_protected.svg | 1 - .../{0bar_wifi.svg => network/wifi_0bar.svg} | 0 .../wifi_0bar_protected.svg} | 0 .../network/{1bar_wifi.svg => wifi_1bar.svg} | 0 .../wifi_1bar_protected.svg} | 0 .../network/{2bar_wifi.svg => wifi_2bar.svg} | 0 .../wifi_2bar_protected.svg} | 0 .../network/{3bar_wifi.svg => wifi_3bar.svg} | 0 .../wifi_3bar_protected.svg} | 0 .../{4bar_wifi.svg => network/wifi_4bar.svg} | 0 .../wifi_4bar_protected.svg} | 0 .../ui/resources/media/btn_icons/no_wifi.svg | 1 - .../resources/media/btn_icons/retraction.svg | 1 - .../ui/resources/media/btn_icons/sensors.svg | 1 - ...dados spool 1.svg => spool_database_1.svg} | 0 ...mperature.svg => standard_temperature.svg} | 0 ...-software-icon.svg => update_software.svg} | 0 .../media/btn_icons/{usb_icon.svg => usb.svg} | 0 .../resources/media/btn_icons/wifi_locked.svg | 1 - .../media/btn_icons/wifi_unlocked.svg | 1 - .../resources/media/graphics/babystepping.svg | 1 - .../lib/ui/resources/media/graphics/back.svg | 16 - .../resources/media/graphics/back_PRESSED.svg | 1 - .../resources/media/graphics/back_folder.svg | 1 - .../media/graphics/back_folder_PRESSED.svg | 1 - .../ui/resources/media/graphics/blue_bar.svg | 1 - .../ui/resources/media/graphics/dryer_1.svg | 1 - .../media/graphics/dryer_1_PRESSED.svg | 1 - .../ui/resources/media/graphics/dryer_2.svg | 1 - .../media/graphics/dryer_2_PRESSED.svg | 1 - .../media/graphics/extrude_manual.svg | 1 - .../ui/resources/media/graphics/go_down.svg | 1 - .../media/graphics/go_down_PRESSED.svg | 1 - .../lib/ui/resources/media/graphics/go_up.svg | 1 - .../media/graphics/go_up_PRESSED.svg | 1 - .../ui/resources/media/graphics/green_bar.svg | 1 - .../media/graphics/heated_chamber.svg | 1 - .../media/graphics/layer_countig.svg | 1 - .../ui/resources/media/graphics/light_bar.svg | 1 - .../resources/media/graphics/light_scroll.svg | 1 - .../media/graphics/plate_temperature.svg | 1 - .../media/graphics/print_core2_choose.svg | 1 - .../graphics/print_core2_choose_PRESSED.svg | 1 - .../media/graphics/printcore1_choose.svg | 1 - .../graphics/printcore1_choose_PRESSED.svg | 1 - .../media/graphics/printcore_1and2_choose.svg | 1 - .../printcore_1and2_choose_PRESSED.svg | 1 - .../media/graphics/printecore1_operation.svg | 1 - .../media/graphics/printecore2_operation.svg | 1 - .../ui/resources/media/graphics/red_bar.svg | 1 - .../resources/media/graphics/scroll_btn.svg | 1 - .../media/graphics/scroll_list_window.svg | 1 - .../ui/resources/media/graphics/speed_fan.svg | 25 - .../media/graphics/speed_manipulation.svg | 45 - .../media/graphics/system_shutdown.svg | 1 - .../graphics/system_shutdown_PRESSED.svg | 1 - .../media/graphics/time_to_finish.svg | 1 - .../media/graphics/vertical_scroll_bar.svg | 1 - BlocksScreen/lib/ui/utilitiesStackedWidget.ui | 2 +- .../lib/ui/utilitiesStackedWidget_ui.py | 980 +- BlocksScreen/lib/utils/blocks_pixmap.py | 44 +- SPLIT_PROMPT.md | 111 + scripts/healthcheck/bs-diag.sh | 118 + scripts/healthcheck/bs-healthcheck.sh | 1859 +++ scripts/healthcheck/bs-power.sh | 839 ++ scripts/healthcheck/bs-selftest.py | 533 + scripts/healthcheck/bs-usb-diag.sh | 1079 ++ tests/ui/test_resource_keys_unit.py | 14 + 100 files changed, 13060 insertions(+), 7194 deletions(-) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/LCD_settings.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/acel.svg rename BlocksScreen/lib/ui/resources/media/btn_icons/{add filament.svg => add_filament.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{add spool.svg => add_spool.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{baby_step_icon.svg => baby_step.svg} (100%) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/chamber_temperature.svg rename BlocksScreen/lib/ui/resources/media/btn_icons/{check gate 1.svg => check_gate_1.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{file_icon.svg => file.svg} (100%) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/file_error.svg rename BlocksScreen/lib/ui/resources/media/btn_icons/{folderIcon.svg => folder.svg} (100%) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/folder_icon.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/frequency_X.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/frequency_Y.svg rename BlocksScreen/lib/ui/resources/media/btn_icons/{garbage-icon.svg => garbage.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{half_spoll.svg => half_spool.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{heatsoak_icon.svg => heatsoak.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{LEDs.svg => leds.svg} (100%) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/material_topbar.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/motion.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi_protected.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/1bar_wifi_protected.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/2bar_wifi_protected.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/3bar_wifi_protected.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi_protected.svg rename BlocksScreen/lib/ui/resources/media/btn_icons/{0bar_wifi.svg => network/wifi_0bar.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{0bar_wifi_protected.svg => network/wifi_0bar_protected.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/network/{1bar_wifi.svg => wifi_1bar.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{1bar_wifi_protected.svg => network/wifi_1bar_protected.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/network/{2bar_wifi.svg => wifi_2bar.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{2bar_wifi_protected.svg => network/wifi_2bar_protected.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/network/{3bar_wifi.svg => wifi_3bar.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{3bar_wifi_protected.svg => network/wifi_3bar_protected.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{4bar_wifi.svg => network/wifi_4bar.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{4bar_wifi_protected.svg => network/wifi_4bar_protected.svg} (100%) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/no_wifi.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/retraction.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/sensors.svg rename BlocksScreen/lib/ui/resources/media/btn_icons/{base dados spool 1.svg => spool_database_1.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{standart_temperature.svg => standard_temperature.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{update-software-icon.svg => update_software.svg} (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{usb_icon.svg => usb.svg} (100%) delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/wifi_locked.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/btn_icons/wifi_unlocked.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/babystepping.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/back.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/back_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/back_folder.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/back_folder_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/blue_bar.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/dryer_1.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/dryer_1_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/dryer_2.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/dryer_2_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/extrude_manual.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/go_down.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/go_down_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/go_up.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/go_up_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/green_bar.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/heated_chamber.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/layer_countig.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/light_bar.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/light_scroll.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/plate_temperature.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/printecore1_operation.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/printecore2_operation.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/red_bar.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/scroll_btn.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/scroll_list_window.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/speed_fan.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/speed_manipulation.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/system_shutdown.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/system_shutdown_PRESSED.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/time_to_finish.svg delete mode 100644 BlocksScreen/lib/ui/resources/media/graphics/vertical_scroll_bar.svg create mode 100644 SPLIT_PROMPT.md create mode 100755 scripts/healthcheck/bs-diag.sh create mode 100755 scripts/healthcheck/bs-healthcheck.sh create mode 100755 scripts/healthcheck/bs-power.sh create mode 100755 scripts/healthcheck/bs-selftest.py create mode 100755 scripts/healthcheck/bs-usb-diag.sh diff --git a/BlocksScreen/lib/panels/filamentTab.py b/BlocksScreen/lib/panels/filamentTab.py index ecb692c3..c5e5b6a9 100644 --- a/BlocksScreen/lib/panels/filamentTab.py +++ b/BlocksScreen/lib/panels/filamentTab.py @@ -1,6 +1,5 @@ import logging from collections import deque -from typing import Deque from devices.amu import AMUManager from devices.amu.models import GateStatus @@ -53,7 +52,7 @@ def __init__( self._previous_gate_states: dict[int, bool] = {} self.pre_gate_idx = {} - self.popup_gates: Deque = deque() + self.popup_gates: deque = deque() self._spool_id_map: dict[str, dict] = {} self._current_field: QtWidgets.QLineEdit | None = None self._color_target_field = None @@ -970,7 +969,7 @@ def setupUi(self): self.fp_button_2.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.fp_button_2.setProperty( "icon_pixmap", - BlocksPixmap.get(Icon.BASE_DADOS_SPOOL_1), + BlocksPixmap.get(Icon.SPOOL_DATABASE_1), ) self.fp_button_2.setObjectName("fp_button_2") diff --git a/BlocksScreen/lib/ui/controlStackedWidget.ui b/BlocksScreen/lib/ui/controlStackedWidget.ui index 89ed7f60..141716d3 100644 --- a/BlocksScreen/lib/ui/controlStackedWidget.ui +++ b/BlocksScreen/lib/ui/controlStackedWidget.ui @@ -4960,7 +4960,7 @@ Home menu_btn - :/temperature_related/media/btn_icons/heatsoak_icon.svg + :/temperature_related/media/btn_icons/heatsoak.svg diff --git a/BlocksScreen/lib/ui/controlStackedWidget_ui.py b/BlocksScreen/lib/ui/controlStackedWidget_ui.py index 6dd3cf04..d2485552 100644 --- a/BlocksScreen/lib/ui/controlStackedWidget_ui.py +++ b/BlocksScreen/lib/ui/controlStackedWidget_ui.py @@ -9,19 +9,27 @@ from PyQt6 import QtCore, QtGui, QtWidgets -class Ui_controlStackedWidget(object): +class Ui_controlStackedWidget: def setupUi(self, controlStackedWidget): controlStackedWidget.setObjectName("controlStackedWidget") controlStackedWidget.resize(710, 410) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(controlStackedWidget.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + controlStackedWidget.sizePolicy().hasHeightForWidth() + ) controlStackedWidget.setSizePolicy(sizePolicy) controlStackedWidget.setMinimumSize(QtCore.QSize(710, 410)) controlStackedWidget.setMaximumSize(QtCore.QSize(710, 410)) self.control_page = QtWidgets.QWidget() - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.control_page.sizePolicy().hasHeightForWidth()) @@ -34,10 +42,15 @@ def setupUi(self, controlStackedWidget): self.cp_header_layout = QtWidgets.QHBoxLayout() self.cp_header_layout.setObjectName("cp_header_layout") self.cp_header_title = QtWidgets.QLabel(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.Fixed, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.cp_header_title.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.cp_header_title.sizePolicy().hasHeightForWidth() + ) self.cp_header_title.setSizePolicy(sizePolicy) self.cp_header_title.setMinimumSize(QtCore.QSize(300, 60)) self.cp_header_title.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -54,10 +67,14 @@ def setupUi(self, controlStackedWidget): self.cp_content_layout = QtWidgets.QGridLayout() self.cp_content_layout.setObjectName("cp_content_layout") self.cp_z_tilt_btn = BlocksCustomButton(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.cp_z_tilt_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.cp_z_tilt_btn.sizePolicy().hasHeightForWidth() + ) self.cp_z_tilt_btn.setSizePolicy(sizePolicy) self.cp_z_tilt_btn.setMinimumSize(QtCore.QSize(10, 80)) self.cp_z_tilt_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -69,19 +86,28 @@ def setupUi(self, controlStackedWidget): self.cp_z_tilt_btn.setFont(font) self.cp_z_tilt_btn.setMouseTracking(False) self.cp_z_tilt_btn.setTabletTracking(True) - self.cp_z_tilt_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.cp_z_tilt_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.cp_z_tilt_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.cp_z_tilt_btn.setStyleSheet("") self.cp_z_tilt_btn.setAutoDefault(False) self.cp_z_tilt_btn.setFlat(True) - self.cp_z_tilt_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/z_levelling/media/btn_icons/bed_levelling.svg")) + self.cp_z_tilt_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/z_levelling/media/btn_icons/bed_levelling.svg"), + ) self.cp_z_tilt_btn.setObjectName("cp_z_tilt_btn") self.cp_content_layout.addWidget(self.cp_z_tilt_btn, 1, 1, 1, 1) self.cp_temperature_btn = BlocksCustomButton(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.cp_temperature_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.cp_temperature_btn.sizePolicy().hasHeightForWidth() + ) self.cp_temperature_btn.setSizePolicy(sizePolicy) self.cp_temperature_btn.setMinimumSize(QtCore.QSize(10, 80)) self.cp_temperature_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -93,19 +119,30 @@ def setupUi(self, controlStackedWidget): self.cp_temperature_btn.setFont(font) self.cp_temperature_btn.setMouseTracking(False) self.cp_temperature_btn.setTabletTracking(True) - self.cp_temperature_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.cp_temperature_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.cp_temperature_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.cp_temperature_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.cp_temperature_btn.setStyleSheet("") self.cp_temperature_btn.setAutoDefault(False) self.cp_temperature_btn.setFlat(True) - self.cp_temperature_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature.svg")) + self.cp_temperature_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature.svg"), + ) self.cp_temperature_btn.setObjectName("cp_temperature_btn") self.cp_content_layout.addWidget(self.cp_temperature_btn, 0, 1, 1, 1) self.cp_nozzles_calibration_btn = BlocksCustomButton(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.cp_nozzles_calibration_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.cp_nozzles_calibration_btn.sizePolicy().hasHeightForWidth() + ) self.cp_nozzles_calibration_btn.setSizePolicy(sizePolicy) self.cp_nozzles_calibration_btn.setMinimumSize(QtCore.QSize(10, 80)) self.cp_nozzles_calibration_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -117,19 +154,30 @@ def setupUi(self, controlStackedWidget): self.cp_nozzles_calibration_btn.setFont(font) self.cp_nozzles_calibration_btn.setMouseTracking(False) self.cp_nozzles_calibration_btn.setTabletTracking(True) - self.cp_nozzles_calibration_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.cp_nozzles_calibration_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.cp_nozzles_calibration_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.cp_nozzles_calibration_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.cp_nozzles_calibration_btn.setStyleSheet("") self.cp_nozzles_calibration_btn.setAutoDefault(False) self.cp_nozzles_calibration_btn.setFlat(True) - self.cp_nozzles_calibration_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/z_levelling/media/btn_icons/bed_levelling.svg")) + self.cp_nozzles_calibration_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/z_levelling/media/btn_icons/bed_levelling.svg"), + ) self.cp_nozzles_calibration_btn.setObjectName("cp_nozzles_calibration_btn") self.cp_content_layout.addWidget(self.cp_nozzles_calibration_btn, 1, 0, 1, 1) self.cp_motion_btn = BlocksCustomButton(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.cp_motion_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.cp_motion_btn.sizePolicy().hasHeightForWidth() + ) self.cp_motion_btn.setSizePolicy(sizePolicy) self.cp_motion_btn.setMinimumSize(QtCore.QSize(10, 80)) self.cp_motion_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -141,16 +189,23 @@ def setupUi(self, controlStackedWidget): self.cp_motion_btn.setFont(font) self.cp_motion_btn.setMouseTracking(False) self.cp_motion_btn.setTabletTracking(True) - self.cp_motion_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.cp_motion_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.cp_motion_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.cp_motion_btn.setStyleSheet("") self.cp_motion_btn.setAutoDefault(False) self.cp_motion_btn.setFlat(True) - self.cp_motion_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg")) + self.cp_motion_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + ) self.cp_motion_btn.setObjectName("cp_motion_btn") self.cp_content_layout.addWidget(self.cp_motion_btn, 0, 0, 1, 1) self.cp_fans_btn = BlocksCustomButton(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.cp_fans_btn.sizePolicy().hasHeightForWidth()) @@ -170,14 +225,20 @@ def setupUi(self, controlStackedWidget): self.cp_fans_btn.setStyleSheet("") self.cp_fans_btn.setAutoDefault(False) self.cp_fans_btn.setFlat(True) - self.cp_fans_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan.svg")) + self.cp_fans_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan.svg") + ) self.cp_fans_btn.setObjectName("cp_fans_btn") self.cp_content_layout.addWidget(self.cp_fans_btn, 2, 0, 1, 1) self.cp_switch_print_core_btn = BlocksCustomButton(parent=self.control_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.cp_switch_print_core_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.cp_switch_print_core_btn.sizePolicy().hasHeightForWidth() + ) self.cp_switch_print_core_btn.setSizePolicy(sizePolicy) self.cp_switch_print_core_btn.setMinimumSize(QtCore.QSize(10, 80)) self.cp_switch_print_core_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -189,12 +250,19 @@ def setupUi(self, controlStackedWidget): self.cp_switch_print_core_btn.setFont(font) self.cp_switch_print_core_btn.setMouseTracking(False) self.cp_switch_print_core_btn.setTabletTracking(True) - self.cp_switch_print_core_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.cp_switch_print_core_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.cp_switch_print_core_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.cp_switch_print_core_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.cp_switch_print_core_btn.setStyleSheet("") self.cp_switch_print_core_btn.setAutoDefault(False) self.cp_switch_print_core_btn.setFlat(True) - self.cp_switch_print_core_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/switch_print_core.svg")) + self.cp_switch_print_core_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/switch_print_core.svg"), + ) self.cp_switch_print_core_btn.setObjectName("cp_switch_print_core_btn") self.cp_content_layout.addWidget(self.cp_switch_print_core_btn, 2, 1, 1, 1) self.verticalLayout.addLayout(self.cp_content_layout) @@ -208,7 +276,10 @@ def setupUi(self, controlStackedWidget): self.mp_header_layout = QtWidgets.QHBoxLayout() self.mp_header_layout.setObjectName("mp_header_layout") self.widget = QtWidgets.QWidget(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.Fixed, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth()) @@ -219,10 +290,15 @@ def setupUi(self, controlStackedWidget): self.mp_header_layout.addWidget(self.widget) self.mp_header_title = QtWidgets.QLabel(parent=self.motion_page) self.mp_header_title.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.Fixed, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.mp_header_title.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mp_header_title.sizePolicy().hasHeightForWidth() + ) self.mp_header_title.setSizePolicy(sizePolicy) self.mp_header_title.setMinimumSize(QtCore.QSize(0, 0)) self.mp_header_title.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -235,7 +311,10 @@ def setupUi(self, controlStackedWidget): self.mp_header_title.setObjectName("mp_header_title") self.mp_header_layout.addWidget(self.mp_header_title) self.mp_back_btn = IconButton(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.Fixed, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.mp_back_btn.sizePolicy().hasHeightForWidth()) @@ -255,17 +334,23 @@ def setupUi(self, controlStackedWidget): self.mp_back_btn.setStyleSheet("") self.mp_back_btn.setAutoDefault(False) self.mp_back_btn.setFlat(True) - self.mp_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.mp_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.mp_back_btn.setObjectName("mp_back_btn") self.mp_header_layout.addWidget(self.mp_back_btn) self.verticalLayout_2.addLayout(self.mp_header_layout) self.cp_content_layout_2 = QtWidgets.QGridLayout() self.cp_content_layout_2.setObjectName("cp_content_layout_2") self.motion_move_axis_btn = BlocksCustomButton(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.motion_move_axis_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.motion_move_axis_btn.sizePolicy().hasHeightForWidth() + ) self.motion_move_axis_btn.setSizePolicy(sizePolicy) self.motion_move_axis_btn.setMinimumSize(QtCore.QSize(10, 80)) self.motion_move_axis_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -277,19 +362,30 @@ def setupUi(self, controlStackedWidget): self.motion_move_axis_btn.setFont(font) self.motion_move_axis_btn.setMouseTracking(False) self.motion_move_axis_btn.setTabletTracking(True) - self.motion_move_axis_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.motion_move_axis_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.motion_move_axis_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.motion_move_axis_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.motion_move_axis_btn.setStyleSheet("") self.motion_move_axis_btn.setAutoDefault(False) self.motion_move_axis_btn.setFlat(True) - self.motion_move_axis_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg")) + self.motion_move_axis_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + ) self.motion_move_axis_btn.setObjectName("motion_move_axis_btn") self.cp_content_layout_2.addWidget(self.motion_move_axis_btn, 1, 0, 1, 1) self.motion_disable_steppers_btn = BlocksCustomButton(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.motion_disable_steppers_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.motion_disable_steppers_btn.sizePolicy().hasHeightForWidth() + ) self.motion_disable_steppers_btn.setSizePolicy(sizePolicy) self.motion_disable_steppers_btn.setMinimumSize(QtCore.QSize(10, 80)) self.motion_disable_steppers_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -301,19 +397,30 @@ def setupUi(self, controlStackedWidget): self.motion_disable_steppers_btn.setFont(font) self.motion_disable_steppers_btn.setMouseTracking(False) self.motion_disable_steppers_btn.setTabletTracking(True) - self.motion_disable_steppers_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.motion_disable_steppers_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.motion_disable_steppers_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.motion_disable_steppers_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.motion_disable_steppers_btn.setStyleSheet("") self.motion_disable_steppers_btn.setAutoDefault(False) self.motion_disable_steppers_btn.setFlat(True) - self.motion_disable_steppers_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/disable_steppers.svg")) + self.motion_disable_steppers_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/motion/media/btn_icons/disable_steppers.svg"), + ) self.motion_disable_steppers_btn.setObjectName("motion_disable_steppers_btn") self.cp_content_layout_2.addWidget(self.motion_disable_steppers_btn, 0, 1, 1, 1) self.motion_extrude_btn = BlocksCustomButton(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.motion_extrude_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.motion_extrude_btn.sizePolicy().hasHeightForWidth() + ) self.motion_extrude_btn.setSizePolicy(sizePolicy) self.motion_extrude_btn.setMinimumSize(QtCore.QSize(10, 80)) self.motion_extrude_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -325,19 +432,30 @@ def setupUi(self, controlStackedWidget): self.motion_extrude_btn.setFont(font) self.motion_extrude_btn.setMouseTracking(False) self.motion_extrude_btn.setTabletTracking(True) - self.motion_extrude_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.motion_extrude_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.motion_extrude_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.motion_extrude_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.motion_extrude_btn.setStyleSheet("") self.motion_extrude_btn.setAutoDefault(False) self.motion_extrude_btn.setFlat(True) - self.motion_extrude_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg")) + self.motion_extrude_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg"), + ) self.motion_extrude_btn.setObjectName("motion_extrude_btn") self.cp_content_layout_2.addWidget(self.motion_extrude_btn, 1, 1, 1, 1) self.motion_auto_home_btn = BlocksCustomButton(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.motion_auto_home_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.motion_auto_home_btn.sizePolicy().hasHeightForWidth() + ) self.motion_auto_home_btn.setSizePolicy(sizePolicy) self.motion_auto_home_btn.setMinimumSize(QtCore.QSize(10, 80)) self.motion_auto_home_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -349,16 +467,24 @@ def setupUi(self, controlStackedWidget): self.motion_auto_home_btn.setFont(font) self.motion_auto_home_btn.setMouseTracking(False) self.motion_auto_home_btn.setTabletTracking(True) - self.motion_auto_home_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.motion_auto_home_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.motion_auto_home_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.motion_auto_home_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.motion_auto_home_btn.setStyleSheet("") self.motion_auto_home_btn.setAutoDefault(False) self.motion_auto_home_btn.setFlat(True) - self.motion_auto_home_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_all.svg")) + self.motion_auto_home_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_all.svg") + ) self.motion_auto_home_btn.setObjectName("motion_auto_home_btn") self.cp_content_layout_2.addWidget(self.motion_auto_home_btn, 0, 0, 1, 1) self.blank = QtWidgets.QWidget(parent=self.motion_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.blank.sizePolicy().hasHeightForWidth()) @@ -375,17 +501,31 @@ def setupUi(self, controlStackedWidget): self.extrude_page.setObjectName("extrude_page") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.extrude_page) self.verticalLayout_3.setObjectName("verticalLayout_3") - spacerItem = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_3.addItem(spacerItem) self.exp_header_layout = QtWidgets.QHBoxLayout() self.exp_header_layout.setObjectName("exp_header_layout") - spacerItem1 = QtWidgets.QSpacerItem(60, 60, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem1 = QtWidgets.QSpacerItem( + 60, + 60, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.exp_header_layout.addItem(spacerItem1) self.exp_title_label = QtWidgets.QLabel(parent=self.extrude_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.exp_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.exp_title_label.sizePolicy().hasHeightForWidth() + ) self.exp_title_label.setSizePolicy(sizePolicy) self.exp_title_label.setMinimumSize(QtCore.QSize(0, 60)) self.exp_title_label.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -398,7 +538,9 @@ def setupUi(self, controlStackedWidget): self.exp_title_label.setObjectName("exp_title_label") self.exp_header_layout.addWidget(self.exp_title_label) self.exp_back_btn = IconButton(parent=self.extrude_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.exp_back_btn.sizePolicy().hasHeightForWidth()) @@ -413,14 +555,22 @@ def setupUi(self, controlStackedWidget): self.exp_back_btn.setFont(font) self.exp_back_btn.setMouseTracking(False) self.exp_back_btn.setTabletTracking(True) - self.exp_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.exp_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.exp_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.exp_back_btn.setStyleSheet("") self.exp_back_btn.setAutoDefault(False) self.exp_back_btn.setFlat(True) - self.exp_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.exp_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.exp_back_btn.setObjectName("exp_back_btn") - self.exp_header_layout.addWidget(self.exp_back_btn, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter) + self.exp_header_layout.addWidget( + self.exp_back_btn, + 0, + QtCore.Qt.AlignmentFlag.AlignRight | QtCore.Qt.AlignmentFlag.AlignVCenter, + ) self.verticalLayout_3.addLayout(self.exp_header_layout) self.exp_vertical_content_layout = QtWidgets.QVBoxLayout() self.exp_vertical_content_layout.setContentsMargins(5, 5, 5, 5) @@ -431,18 +581,32 @@ def setupUi(self, controlStackedWidget): palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) self.exp_length_group_box.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) self.exp_length_group_box.setFont(font) - self.exp_length_group_box.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter) + self.exp_length_group_box.setAlignment( + QtCore.Qt.AlignmentFlag.AlignLeading + | QtCore.Qt.AlignmentFlag.AlignLeft + | QtCore.Qt.AlignmentFlag.AlignVCenter + ) self.exp_length_group_box.setFlat(True) self.exp_length_group_box.setObjectName("exp_length_group_box") self.layoutWidget = QtWidgets.QWidget(parent=self.exp_length_group_box) @@ -452,58 +616,108 @@ def setupUi(self, controlStackedWidget): self.exp_length_content_layout.setContentsMargins(5, 5, 5, 5) self.exp_length_content_layout.setSpacing(5) self.exp_length_content_layout.setObjectName("exp_length_content_layout") - self.extrude_select_length_10_btn = BlocksCustomCheckButton(parent=self.layoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.extrude_select_length_10_btn = BlocksCustomCheckButton( + parent=self.layoutWidget + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.extrude_select_length_10_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extrude_select_length_10_btn.sizePolicy().hasHeightForWidth() + ) self.extrude_select_length_10_btn.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.extrude_select_length_10_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(16) @@ -519,58 +733,108 @@ def setupUi(self, controlStackedWidget): self.extrude_select_length_group.setObjectName("extrude_select_length_group") self.extrude_select_length_group.addButton(self.extrude_select_length_10_btn) self.exp_length_content_layout.addWidget(self.extrude_select_length_10_btn) - self.extrude_select_length_50_btn = BlocksCustomCheckButton(parent=self.layoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.extrude_select_length_50_btn = BlocksCustomCheckButton( + parent=self.layoutWidget + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.extrude_select_length_50_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extrude_select_length_50_btn.sizePolicy().hasHeightForWidth() + ) self.extrude_select_length_50_btn.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.extrude_select_length_50_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(16) @@ -583,58 +847,108 @@ def setupUi(self, controlStackedWidget): self.extrude_select_length_50_btn.setObjectName("extrude_select_length_50_btn") self.extrude_select_length_group.addButton(self.extrude_select_length_50_btn) self.exp_length_content_layout.addWidget(self.extrude_select_length_50_btn) - self.extrude_select_length_100_btn = BlocksCustomCheckButton(parent=self.layoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.extrude_select_length_100_btn = BlocksCustomCheckButton( + parent=self.layoutWidget + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.extrude_select_length_100_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extrude_select_length_100_btn.sizePolicy().hasHeightForWidth() + ) self.extrude_select_length_100_btn.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.extrude_select_length_100_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(16) @@ -644,7 +958,9 @@ def setupUi(self, controlStackedWidget): self.extrude_select_length_100_btn.setAutoRepeat(False) self.extrude_select_length_100_btn.setAutoExclusive(False) self.extrude_select_length_100_btn.setFlat(True) - self.extrude_select_length_100_btn.setObjectName("extrude_select_length_100_btn") + self.extrude_select_length_100_btn.setObjectName( + "extrude_select_length_100_btn" + ) self.extrude_select_length_group.addButton(self.extrude_select_length_100_btn) self.exp_length_content_layout.addWidget(self.extrude_select_length_100_btn) self.exp_vertical_content_layout.addWidget(self.exp_length_group_box) @@ -653,13 +969,23 @@ def setupUi(self, controlStackedWidget): palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) self.exp_feedrate_group_box.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -673,58 +999,108 @@ def setupUi(self, controlStackedWidget): self.exp_feedrate_content_layout.setContentsMargins(5, 5, 5, 5) self.exp_feedrate_content_layout.setSpacing(5) self.exp_feedrate_content_layout.setObjectName("exp_feedrate_content_layout") - self.extrude_select_feedrate_low_btn = BlocksCustomCheckButton(parent=self.layoutWidget1) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.extrude_select_feedrate_low_btn = BlocksCustomCheckButton( + parent=self.layoutWidget1 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.extrude_select_feedrate_low_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extrude_select_feedrate_low_btn.sizePolicy().hasHeightForWidth() + ) self.extrude_select_feedrate_low_btn.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.extrude_select_feedrate_low_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(16) @@ -735,63 +1111,121 @@ def setupUi(self, controlStackedWidget): self.extrude_select_feedrate_low_btn.setAutoRepeat(False) self.extrude_select_feedrate_low_btn.setAutoExclusive(False) self.extrude_select_feedrate_low_btn.setFlat(True) - self.extrude_select_feedrate_low_btn.setObjectName("extrude_select_feedrate_low_btn") - self.extrude_select_feedrate_group = QtWidgets.QButtonGroup(controlStackedWidget) - self.extrude_select_feedrate_group.setObjectName("extrude_select_feedrate_group") - self.extrude_select_feedrate_group.addButton(self.extrude_select_feedrate_low_btn) + self.extrude_select_feedrate_low_btn.setObjectName( + "extrude_select_feedrate_low_btn" + ) + self.extrude_select_feedrate_group = QtWidgets.QButtonGroup( + controlStackedWidget + ) + self.extrude_select_feedrate_group.setObjectName( + "extrude_select_feedrate_group" + ) + self.extrude_select_feedrate_group.addButton( + self.extrude_select_feedrate_low_btn + ) self.exp_feedrate_content_layout.addWidget(self.extrude_select_feedrate_low_btn) - self.extrude_select_feedrate_middle_btn = BlocksCustomCheckButton(parent=self.layoutWidget1) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.extrude_select_feedrate_middle_btn = BlocksCustomCheckButton( + parent=self.layoutWidget1 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.extrude_select_feedrate_middle_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extrude_select_feedrate_middle_btn.sizePolicy().hasHeightForWidth() + ) self.extrude_select_feedrate_middle_btn.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.extrude_select_feedrate_middle_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(16) @@ -801,61 +1235,117 @@ def setupUi(self, controlStackedWidget): self.extrude_select_feedrate_middle_btn.setAutoRepeat(False) self.extrude_select_feedrate_middle_btn.setAutoExclusive(False) self.extrude_select_feedrate_middle_btn.setFlat(True) - self.extrude_select_feedrate_middle_btn.setObjectName("extrude_select_feedrate_middle_btn") - self.extrude_select_feedrate_group.addButton(self.extrude_select_feedrate_middle_btn) - self.exp_feedrate_content_layout.addWidget(self.extrude_select_feedrate_middle_btn) - self.extrude_select_feedrate_high_btn = BlocksCustomCheckButton(parent=self.layoutWidget1) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.extrude_select_feedrate_middle_btn.setObjectName( + "extrude_select_feedrate_middle_btn" + ) + self.extrude_select_feedrate_group.addButton( + self.extrude_select_feedrate_middle_btn + ) + self.exp_feedrate_content_layout.addWidget( + self.extrude_select_feedrate_middle_btn + ) + self.extrude_select_feedrate_high_btn = BlocksCustomCheckButton( + parent=self.layoutWidget1 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.extrude_select_feedrate_high_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extrude_select_feedrate_high_btn.sizePolicy().hasHeightForWidth() + ) self.extrude_select_feedrate_high_btn.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.BrightText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.BrightText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.BrightText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.extrude_select_feedrate_high_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(16) @@ -865,9 +1355,15 @@ def setupUi(self, controlStackedWidget): self.extrude_select_feedrate_high_btn.setAutoRepeat(False) self.extrude_select_feedrate_high_btn.setAutoExclusive(False) self.extrude_select_feedrate_high_btn.setFlat(True) - self.extrude_select_feedrate_high_btn.setObjectName("extrude_select_feedrate_high_btn") - self.extrude_select_feedrate_group.addButton(self.extrude_select_feedrate_high_btn) - self.exp_feedrate_content_layout.addWidget(self.extrude_select_feedrate_high_btn) + self.extrude_select_feedrate_high_btn.setObjectName( + "extrude_select_feedrate_high_btn" + ) + self.extrude_select_feedrate_group.addButton( + self.extrude_select_feedrate_high_btn + ) + self.exp_feedrate_content_layout.addWidget( + self.extrude_select_feedrate_high_btn + ) self.exp_vertical_content_layout.addWidget(self.exp_feedrate_group_box) self.exp_movement_content_layout = QtWidgets.QVBoxLayout() self.exp_movement_content_layout.setContentsMargins(-1, 5, -1, -1) @@ -877,10 +1373,15 @@ def setupUi(self, controlStackedWidget): self.exp_buttons_layout.setContentsMargins(5, 5, 5, 5) self.exp_buttons_layout.setObjectName("exp_buttons_layout") self.exp_unextrude_btn = BlocksCustomButton(parent=self.extrude_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.exp_unextrude_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.exp_unextrude_btn.sizePolicy().hasHeightForWidth() + ) self.exp_unextrude_btn.setSizePolicy(sizePolicy) self.exp_unextrude_btn.setMinimumSize(QtCore.QSize(250, 80)) self.exp_unextrude_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -892,12 +1393,17 @@ def setupUi(self, controlStackedWidget): self.exp_unextrude_btn.setFont(font) self.exp_unextrude_btn.setMouseTracking(False) self.exp_unextrude_btn.setTabletTracking(True) - self.exp_unextrude_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.exp_unextrude_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.exp_unextrude_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.exp_unextrude_btn.setStyleSheet("") self.exp_unextrude_btn.setAutoDefault(False) self.exp_unextrude_btn.setFlat(True) - self.exp_unextrude_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg")) + self.exp_unextrude_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg"), + ) self.exp_unextrude_btn.setObjectName("exp_unextrude_btn") self.exp_buttons_layout.addWidget(self.exp_unextrude_btn) self.exp_nozzle_icon_label = BlocksLabel(parent=self.extrude_page) @@ -910,14 +1416,22 @@ def setupUi(self, controlStackedWidget): self.exp_nozzle_icon_label.setStyleSheet("") self.exp_nozzle_icon_label.setText("") self.exp_nozzle_icon_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.exp_nozzle_icon_label.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg")) + self.exp_nozzle_icon_label.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg"), + ) self.exp_nozzle_icon_label.setObjectName("exp_nozzle_icon_label") self.exp_buttons_layout.addWidget(self.exp_nozzle_icon_label) self.exp_extrude_btn = BlocksCustomButton(parent=self.extrude_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.exp_extrude_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.exp_extrude_btn.sizePolicy().hasHeightForWidth() + ) self.exp_extrude_btn.setSizePolicy(sizePolicy) self.exp_extrude_btn.setMinimumSize(QtCore.QSize(250, 80)) self.exp_extrude_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -929,12 +1443,17 @@ def setupUi(self, controlStackedWidget): self.exp_extrude_btn.setFont(font) self.exp_extrude_btn.setMouseTracking(False) self.exp_extrude_btn.setTabletTracking(True) - self.exp_extrude_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.exp_extrude_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.exp_extrude_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.exp_extrude_btn.setStyleSheet("") self.exp_extrude_btn.setAutoDefault(False) self.exp_extrude_btn.setFlat(True) - self.exp_extrude_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg")) + self.exp_extrude_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg"), + ) self.exp_extrude_btn.setObjectName("exp_extrude_btn") self.exp_buttons_layout.addWidget(self.exp_extrude_btn) self.exp_movement_content_layout.addLayout(self.exp_buttons_layout) @@ -943,10 +1462,14 @@ def setupUi(self, controlStackedWidget): self.exp_info_layout.setObjectName("exp_info_layout") self.exp_info_label = QtWidgets.QLabel(parent=self.extrude_page) self.exp_info_label.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.exp_info_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.exp_info_label.sizePolicy().hasHeightForWidth() + ) self.exp_info_label.setSizePolicy(sizePolicy) self.exp_info_label.setMinimumSize(QtCore.QSize(0, 0)) font = QtGui.QFont() @@ -1027,13 +1550,22 @@ def setupUi(self, controlStackedWidget): self.mva_header_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_3) self.mva_header_layout.setContentsMargins(0, 0, 0, 0) self.mva_header_layout.setObjectName("mva_header_layout") - spacerItem2 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem2 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.mva_header_layout.addItem(spacerItem2) self.mva_title_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_3) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.mva_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mva_title_label.sizePolicy().hasHeightForWidth() + ) self.mva_title_label.setSizePolicy(sizePolicy) self.mva_title_label.setMinimumSize(QtCore.QSize(0, 0)) self.mva_title_label.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -1046,7 +1578,9 @@ def setupUi(self, controlStackedWidget): self.mva_title_label.setObjectName("mva_title_label") self.mva_header_layout.addWidget(self.mva_title_label) self.mva_back_btn = IconButton(parent=self.horizontalLayoutWidget_3) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.mva_back_btn.sizePolicy().hasHeightForWidth()) @@ -1061,14 +1595,22 @@ def setupUi(self, controlStackedWidget): self.mva_back_btn.setFont(font) self.mva_back_btn.setMouseTracking(False) self.mva_back_btn.setTabletTracking(True) - self.mva_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.mva_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.mva_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.mva_back_btn.setStyleSheet("") self.mva_back_btn.setAutoDefault(False) self.mva_back_btn.setFlat(True) - self.mva_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.mva_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.mva_back_btn.setObjectName("mva_back_btn") - self.mva_header_layout.addWidget(self.mva_back_btn, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter) + self.mva_header_layout.addWidget( + self.mva_back_btn, + 0, + QtCore.Qt.AlignmentFlag.AlignRight | QtCore.Qt.AlignmentFlag.AlignVCenter, + ) self.verticalLayoutWidget_2 = QtWidgets.QWidget(parent=self.move_axis_page) self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(630, 130, 71, 201)) self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") @@ -1077,7 +1619,10 @@ def setupUi(self, controlStackedWidget): self.mva_z_layout.setObjectName("mva_z_layout") self.mva_z_up = IconButton(parent=self.verticalLayoutWidget_2) self.mva_z_up.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.mva_z_up.sizePolicy().hasHeightForWidth()) @@ -1090,12 +1635,19 @@ def setupUi(self, controlStackedWidget): self.mva_z_up.setCheckable(False) self.mva_z_up.setChecked(False) self.mva_z_up.setFlat(True) - self.mva_z_up.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg")) + self.mva_z_up.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg") + ) self.mva_z_up.setObjectName("mva_z_up") - self.mva_z_layout.addWidget(self.mva_z_up, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.mva_z_layout.addWidget( + self.mva_z_up, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.mva_z_down = IconButton(parent=self.verticalLayoutWidget_2) self.mva_z_down.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.mva_z_down.sizePolicy().hasHeightForWidth()) @@ -1108,9 +1660,13 @@ def setupUi(self, controlStackedWidget): self.mva_z_down.setCheckable(False) self.mva_z_down.setChecked(False) self.mva_z_down.setFlat(True) - self.mva_z_down.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg")) + self.mva_z_down.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg") + ) self.mva_z_down.setObjectName("mva_z_down") - self.mva_z_layout.addWidget(self.mva_z_down, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.mva_z_layout.addWidget( + self.mva_z_down, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.verticalLayoutWidget_3 = QtWidgets.QWidget(parent=self.move_axis_page) self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(10, 90, 81, 301)) self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3") @@ -1119,10 +1675,15 @@ def setupUi(self, controlStackedWidget): self.mva_home_axis_layout.setObjectName("mva_home_axis_layout") self.mva_home_x_btn = IconButton(parent=self.verticalLayoutWidget_3) self.mva_home_x_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.mva_home_x_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mva_home_x_btn.sizePolicy().hasHeightForWidth() + ) self.mva_home_x_btn.setSizePolicy(sizePolicy) self.mva_home_x_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_home_x_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -1132,15 +1693,24 @@ def setupUi(self, controlStackedWidget): self.mva_home_x_btn.setCheckable(False) self.mva_home_x_btn.setChecked(False) self.mva_home_x_btn.setFlat(True) - self.mva_home_x_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_x.svg")) + self.mva_home_x_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_x.svg") + ) self.mva_home_x_btn.setObjectName("mva_home_x_btn") - self.mva_home_axis_layout.addWidget(self.mva_home_x_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.mva_home_axis_layout.addWidget( + self.mva_home_x_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.mva_home_y_btn = IconButton(parent=self.verticalLayoutWidget_3) self.mva_home_y_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.mva_home_y_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mva_home_y_btn.sizePolicy().hasHeightForWidth() + ) self.mva_home_y_btn.setSizePolicy(sizePolicy) self.mva_home_y_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_home_y_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -1150,15 +1720,24 @@ def setupUi(self, controlStackedWidget): self.mva_home_y_btn.setCheckable(False) self.mva_home_y_btn.setChecked(False) self.mva_home_y_btn.setFlat(True) - self.mva_home_y_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_y.svg")) + self.mva_home_y_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_y.svg") + ) self.mva_home_y_btn.setObjectName("mva_home_y_btn") - self.mva_home_axis_layout.addWidget(self.mva_home_y_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.mva_home_axis_layout.addWidget( + self.mva_home_y_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.mva_home_z_btn = IconButton(parent=self.verticalLayoutWidget_3) self.mva_home_z_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.mva_home_z_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mva_home_z_btn.sizePolicy().hasHeightForWidth() + ) self.mva_home_z_btn.setSizePolicy(sizePolicy) self.mva_home_z_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_home_z_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -1168,15 +1747,24 @@ def setupUi(self, controlStackedWidget): self.mva_home_z_btn.setCheckable(False) self.mva_home_z_btn.setChecked(False) self.mva_home_z_btn.setFlat(True) - self.mva_home_z_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_z.svg")) + self.mva_home_z_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_z.svg") + ) self.mva_home_z_btn.setObjectName("mva_home_z_btn") - self.mva_home_axis_layout.addWidget(self.mva_home_z_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.mva_home_axis_layout.addWidget( + self.mva_home_z_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.mva_home_all_btn = IconButton(parent=self.verticalLayoutWidget_3) self.mva_home_all_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.mva_home_all_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mva_home_all_btn.sizePolicy().hasHeightForWidth() + ) self.mva_home_all_btn.setSizePolicy(sizePolicy) self.mva_home_all_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_home_all_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -1186,41 +1774,73 @@ def setupUi(self, controlStackedWidget): self.mva_home_all_btn.setCheckable(False) self.mva_home_all_btn.setChecked(False) self.mva_home_all_btn.setFlat(True) - self.mva_home_all_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_all.svg")) + self.mva_home_all_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_all.svg") + ) self.mva_home_all_btn.setObjectName("mva_home_all_btn") - self.mva_home_axis_layout.addWidget(self.mva_home_all_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) - self.mva_select_speed_25_btn = BlocksCustomCheckButton(parent=self.move_axis_page) + self.mva_home_axis_layout.addWidget( + self.mva_home_all_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) + self.mva_select_speed_25_btn = BlocksCustomCheckButton( + parent=self.move_axis_page + ) self.mva_select_speed_25_btn.setGeometry(QtCore.QRect(96, 240, 100, 100)) self.mva_select_speed_25_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_select_speed_25_btn.setMaximumSize(QtCore.QSize(100, 100)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.mva_select_speed_25_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -1232,38 +1852,66 @@ def setupUi(self, controlStackedWidget): self.axis_select_speed_group = QtWidgets.QButtonGroup(controlStackedWidget) self.axis_select_speed_group.setObjectName("axis_select_speed_group") self.axis_select_speed_group.addButton(self.mva_select_speed_25_btn) - self.mva_select_speed_50_btn = BlocksCustomCheckButton(parent=self.move_axis_page) + self.mva_select_speed_50_btn = BlocksCustomCheckButton( + parent=self.move_axis_page + ) self.mva_select_speed_50_btn.setGeometry(QtCore.QRect(205, 240, 100, 100)) self.mva_select_speed_50_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_select_speed_50_btn.setMaximumSize(QtCore.QSize(100, 100)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.mva_select_speed_50_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -1272,38 +1920,66 @@ def setupUi(self, controlStackedWidget): self.mva_select_speed_50_btn.setFlat(False) self.mva_select_speed_50_btn.setObjectName("mva_select_speed_50_btn") self.axis_select_speed_group.addButton(self.mva_select_speed_50_btn) - self.mva_select_speed_100_btn = BlocksCustomCheckButton(parent=self.move_axis_page) + self.mva_select_speed_100_btn = BlocksCustomCheckButton( + parent=self.move_axis_page + ) self.mva_select_speed_100_btn.setGeometry(QtCore.QRect(315, 240, 100, 100)) self.mva_select_speed_100_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_select_speed_100_btn.setMaximumSize(QtCore.QSize(100, 100)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.mva_select_speed_100_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -1319,38 +1995,66 @@ def setupUi(self, controlStackedWidget): self.label.setFont(font) self.label.setStyleSheet("color:white") self.label.setObjectName("label") - self.mva_select_length_1_btn = BlocksCustomCheckButton(parent=self.move_axis_page) + self.mva_select_length_1_btn = BlocksCustomCheckButton( + parent=self.move_axis_page + ) self.mva_select_length_1_btn.setGeometry(QtCore.QRect(96, 110, 100, 100)) self.mva_select_length_1_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_select_length_1_btn.setMaximumSize(QtCore.QSize(100, 100)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.mva_select_length_1_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -1362,38 +2066,66 @@ def setupUi(self, controlStackedWidget): self.axis_select_length_group = QtWidgets.QButtonGroup(controlStackedWidget) self.axis_select_length_group.setObjectName("axis_select_length_group") self.axis_select_length_group.addButton(self.mva_select_length_1_btn) - self.mva_select_length_10_btn = BlocksCustomCheckButton(parent=self.move_axis_page) + self.mva_select_length_10_btn = BlocksCustomCheckButton( + parent=self.move_axis_page + ) self.mva_select_length_10_btn.setGeometry(QtCore.QRect(204, 110, 100, 100)) self.mva_select_length_10_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_select_length_10_btn.setMaximumSize(QtCore.QSize(100, 100)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.mva_select_length_10_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -1402,38 +2134,66 @@ def setupUi(self, controlStackedWidget): self.mva_select_length_10_btn.setFlat(False) self.mva_select_length_10_btn.setObjectName("mva_select_length_10_btn") self.axis_select_length_group.addButton(self.mva_select_length_10_btn) - self.mva_select_length_100_btn = BlocksCustomCheckButton(parent=self.move_axis_page) + self.mva_select_length_100_btn = BlocksCustomCheckButton( + parent=self.move_axis_page + ) self.mva_select_length_100_btn.setGeometry(QtCore.QRect(315, 110, 100, 100)) self.mva_select_length_100_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_select_length_100_btn.setMaximumSize(QtCore.QSize(100, 100)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.mva_select_length_100_btn.setPalette(palette) font = QtGui.QFont() font.setPointSize(14) @@ -1457,7 +2217,9 @@ def setupUi(self, controlStackedWidget): self.gridLayout_2.setObjectName("gridLayout_2") self.mva_left_btn = IconButton(parent=self.verticalLayoutWidget) self.mva_left_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.mva_left_btn.sizePolicy().hasHeightForWidth()) @@ -1470,15 +2232,21 @@ def setupUi(self, controlStackedWidget): self.mva_left_btn.setCheckable(False) self.mva_left_btn.setChecked(False) self.mva_left_btn.setFlat(True) - self.mva_left_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/left_arrow.svg")) + self.mva_left_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/left_arrow.svg") + ) self.mva_left_btn.setObjectName("mva_left_btn") self.gridLayout_2.addWidget(self.mva_left_btn, 1, 0, 1, 1) self.mva_right_btn = IconButton(parent=self.verticalLayoutWidget) self.mva_right_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.mva_right_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.mva_right_btn.sizePolicy().hasHeightForWidth() + ) self.mva_right_btn.setSizePolicy(sizePolicy) self.mva_right_btn.setMinimumSize(QtCore.QSize(60, 60)) self.mva_right_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -1488,12 +2256,17 @@ def setupUi(self, controlStackedWidget): self.mva_right_btn.setCheckable(False) self.mva_right_btn.setChecked(False) self.mva_right_btn.setFlat(True) - self.mva_right_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg")) + self.mva_right_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg"), + ) self.mva_right_btn.setObjectName("mva_right_btn") self.gridLayout_2.addWidget(self.mva_right_btn, 1, 2, 1, 1) self.mva_down_btn = IconButton(parent=self.verticalLayoutWidget) self.mva_down_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.mva_down_btn.sizePolicy().hasHeightForWidth()) @@ -1506,12 +2279,16 @@ def setupUi(self, controlStackedWidget): self.mva_down_btn.setCheckable(False) self.mva_down_btn.setChecked(False) self.mva_down_btn.setFlat(True) - self.mva_down_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg")) + self.mva_down_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg") + ) self.mva_down_btn.setObjectName("mva_down_btn") self.gridLayout_2.addWidget(self.mva_down_btn, 2, 1, 1, 1) self.mva_up_btn = IconButton(parent=self.verticalLayoutWidget) self.mva_up_btn.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.mva_up_btn.sizePolicy().hasHeightForWidth()) @@ -1524,11 +2301,16 @@ def setupUi(self, controlStackedWidget): self.mva_up_btn.setCheckable(False) self.mva_up_btn.setChecked(False) self.mva_up_btn.setFlat(True) - self.mva_up_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg")) + self.mva_up_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg") + ) self.mva_up_btn.setObjectName("mva_up_btn") self.gridLayout_2.addWidget(self.mva_up_btn, 0, 1, 1, 1) self.mva_middle = IconButton(parent=self.verticalLayoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.mva_middle.sizePolicy().hasHeightForWidth()) @@ -1537,7 +2319,9 @@ def setupUi(self, controlStackedWidget): self.mva_middle.setMaximumSize(QtCore.QSize(60, 60)) self.mva_middle.setText("") self.mva_middle.setFlat(True) - self.mva_middle.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/center_arrows.svg")) + self.mva_middle.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/center_arrows.svg") + ) self.mva_middle.setObjectName("mva_middle") self.gridLayout_2.addWidget(self.mva_middle, 1, 1, 1, 1) controlStackedWidget.addWidget(self.move_axis_page) @@ -1547,17 +2331,32 @@ def setupUi(self, controlStackedWidget): self.temperature_page.setObjectName("temperature_page") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.temperature_page) self.verticalLayout_4.setObjectName("verticalLayout_4") - spacerItem3 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem3 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_4.addItem(spacerItem3) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") - spacerItem4 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem4 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.horizontalLayout.addItem(spacerItem4) self.temp_header_title = QtWidgets.QLabel(parent=self.temperature_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.temp_header_title.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.temp_header_title.sizePolicy().hasHeightForWidth() + ) self.temp_header_title.setSizePolicy(sizePolicy) self.temp_header_title.setMinimumSize(QtCore.QSize(0, 60)) self.temp_header_title.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -1572,10 +2371,14 @@ def setupUi(self, controlStackedWidget): self.temp_header_title.setObjectName("temp_header_title") self.horizontalLayout.addWidget(self.temp_header_title) self.temp_back_button = IconButton(parent=self.temperature_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.temp_back_button.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.temp_back_button.sizePolicy().hasHeightForWidth() + ) self.temp_back_button.setSizePolicy(sizePolicy) self.temp_back_button.setMinimumSize(QtCore.QSize(60, 60)) self.temp_back_button.setMaximumSize(QtCore.QSize(60, 60)) @@ -1587,31 +2390,46 @@ def setupUi(self, controlStackedWidget): self.temp_back_button.setFont(font) self.temp_back_button.setMouseTracking(False) self.temp_back_button.setTabletTracking(True) - self.temp_back_button.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.temp_back_button.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.temp_back_button.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.temp_back_button.setStyleSheet("") self.temp_back_button.setAutoDefault(False) self.temp_back_button.setFlat(True) - self.temp_back_button.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.temp_back_button.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.temp_back_button.setObjectName("temp_back_button") self.horizontalLayout.addWidget(self.temp_back_button) self.verticalLayout_4.addLayout(self.horizontalLayout) - spacerItem5 = QtWidgets.QSpacerItem(20, 35, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem5 = QtWidgets.QSpacerItem( + 20, + 35, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_4.addItem(spacerItem5) self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setContentsMargins(5, 5, 5, 5) self.gridLayout.setSpacing(0) self.gridLayout.setObjectName("gridLayout") self.tp_content_horizontal_layout = QtWidgets.QHBoxLayout() - self.tp_content_horizontal_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinimumSize) + self.tp_content_horizontal_layout.setSizeConstraint( + QtWidgets.QLayout.SizeConstraint.SetMinimumSize + ) self.tp_content_horizontal_layout.setContentsMargins(5, 5, 5, 5) self.tp_content_horizontal_layout.setSpacing(5) self.tp_content_horizontal_layout.setObjectName("tp_content_horizontal_layout") self.extruder_temp_display = DisplayButton(parent=self.temperature_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.extruder_temp_display.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.extruder_temp_display.sizePolicy().hasHeightForWidth() + ) self.extruder_temp_display.setSizePolicy(sizePolicy) self.extruder_temp_display.setMinimumSize(QtCore.QSize(200, 60)) self.extruder_temp_display.setMaximumSize(QtCore.QSize(120, 60)) @@ -1621,90 +2439,164 @@ def setupUi(self, controlStackedWidget): self.extruder_temp_display.setAutoFillBackground(False) self.extruder_temp_display.setText("") self.extruder_temp_display.setFlat(True) - self.extruder_temp_display.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg")) + self.extruder_temp_display.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg"), + ) self.extruder_temp_display.setObjectName("extruder_temp_display") self.tp_content_horizontal_layout.addWidget(self.extruder_temp_display) self.bed_temp_display = DisplayButton(parent=self.temperature_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.bed_temp_display.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.bed_temp_display.sizePolicy().hasHeightForWidth() + ) self.bed_temp_display.setSizePolicy(sizePolicy) self.bed_temp_display.setMinimumSize(QtCore.QSize(200, 60)) self.bed_temp_display.setMaximumSize(QtCore.QSize(120, 60)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Base, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Base, brush + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Window, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Window, brush + ) brush = QtGui.QBrush(QtGui.QColor(60, 60, 60)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Highlight, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Highlight, brush + ) brush = QtGui.QBrush(QtGui.QColor(60, 60, 60)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Base, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Base, brush + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Window, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Window, brush + ) brush = QtGui.QBrush(QtGui.QColor(60, 60, 60)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Highlight, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.Highlight, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(60, 60, 60)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Button, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Base, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Base, brush + ) brush = QtGui.QBrush(QtGui.QColor(50, 50, 50)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Window, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Window, brush + ) brush = QtGui.QBrush(QtGui.QColor(60, 60, 60)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Highlight, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.Highlight, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(60, 60, 60)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.HighlightedText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.HighlightedText, + brush, + ) self.bed_temp_display.setPalette(palette) font = QtGui.QFont() font.setPointSize(11) @@ -1713,12 +2605,19 @@ def setupUi(self, controlStackedWidget): self.bed_temp_display.setCheckable(False) self.bed_temp_display.setDefault(False) self.bed_temp_display.setFlat(True) - self.bed_temp_display.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_plate.svg")) + self.bed_temp_display.setProperty( + "icon_pixmap", + QtGui.QPixmap( + ":/temperature_related/media/btn_icons/temperature_plate.svg" + ), + ) self.bed_temp_display.setObjectName("bed_temp_display") self.tp_content_horizontal_layout.addWidget(self.bed_temp_display) self.gridLayout.addLayout(self.tp_content_horizontal_layout, 0, 0, 1, 2) self.cooldown_btn = BlocksCustomButton(parent=self.temperature_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.cooldown_btn.sizePolicy().hasHeightForWidth()) @@ -1733,21 +2632,35 @@ def setupUi(self, controlStackedWidget): self.cooldown_btn.setFont(font) self.cooldown_btn.setMouseTracking(False) self.cooldown_btn.setTabletTracking(True) - self.cooldown_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.cooldown_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.cooldown_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.cooldown_btn.setStyleSheet("") self.cooldown_btn.setAutoDefault(False) self.cooldown_btn.setFlat(True) - self.cooldown_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/cooldown.svg")) + self.cooldown_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/temperature_related/media/btn_icons/cooldown.svg"), + ) self.cooldown_btn.setObjectName("cooldown_btn") self.gridLayout.addWidget(self.cooldown_btn, 2, 1, 1, 1) - spacerItem6 = QtWidgets.QSpacerItem(20, 50, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem6 = QtWidgets.QSpacerItem( + 20, + 50, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.gridLayout.addItem(spacerItem6, 1, 0, 1, 2) self.temperature_cooldown_btn = BlocksCustomButton(parent=self.temperature_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.temperature_cooldown_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.temperature_cooldown_btn.sizePolicy().hasHeightForWidth() + ) self.temperature_cooldown_btn.setSizePolicy(sizePolicy) self.temperature_cooldown_btn.setMinimumSize(QtCore.QSize(250, 80)) self.temperature_cooldown_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -1759,16 +2672,28 @@ def setupUi(self, controlStackedWidget): self.temperature_cooldown_btn.setFont(font) self.temperature_cooldown_btn.setMouseTracking(False) self.temperature_cooldown_btn.setTabletTracking(True) - self.temperature_cooldown_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.temperature_cooldown_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.temperature_cooldown_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.temperature_cooldown_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.temperature_cooldown_btn.setStyleSheet("") self.temperature_cooldown_btn.setAutoDefault(False) self.temperature_cooldown_btn.setFlat(True) - self.temperature_cooldown_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/heatsoak_icon.svg")) + self.temperature_cooldown_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/temperature_related/media/btn_icons/heatsoak.svg"), + ) self.temperature_cooldown_btn.setObjectName("temperature_cooldown_btn") self.gridLayout.addWidget(self.temperature_cooldown_btn, 2, 0, 1, 1) self.verticalLayout_4.addLayout(self.gridLayout) - spacerItem7 = QtWidgets.QSpacerItem(20, 8, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem7 = QtWidgets.QSpacerItem( + 20, + 8, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_4.addItem(spacerItem7) controlStackedWidget.addWidget(self.temperature_page) self.z_adjustment_page = QtWidgets.QWidget() @@ -1791,42 +2716,68 @@ def setupUi(self, controlStackedWidget): font.setFamily("Montserrat") font.setPointSize(14) self.z_adjust_offset_value.setFont(font) - self.z_adjust_offset_value.setStyleSheet("background: transparent; color: white;") + self.z_adjust_offset_value.setStyleSheet( + "background: transparent; color: white;" + ) self.z_adjust_offset_value.setObjectName("z_adjust_offset_value") - self.horizontalLayoutWidget_10 = QtWidgets.QWidget(parent=self.z_adjustment_page) + self.horizontalLayoutWidget_10 = QtWidgets.QWidget( + parent=self.z_adjustment_page + ) self.horizontalLayoutWidget_10.setGeometry(QtCore.QRect(10, 10, 681, 62)) self.horizontalLayoutWidget_10.setObjectName("horizontalLayoutWidget_10") - self.z_adjustment_header_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_10) + self.z_adjustment_header_layout = QtWidgets.QHBoxLayout( + self.horizontalLayoutWidget_10 + ) self.z_adjustment_header_layout.setContentsMargins(0, 0, 0, 0) self.z_adjustment_header_layout.setObjectName("z_adjustment_header_layout") - spacerItem8 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem8 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.z_adjustment_header_layout.addItem(spacerItem8) - self.z_adjust_header_title = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_10) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred) + self.z_adjust_header_title = QtWidgets.QLabel( + parent=self.horizontalLayoutWidget_10 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Preferred, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.z_adjust_header_title.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.z_adjust_header_title.sizePolicy().hasHeightForWidth() + ) self.z_adjust_header_title.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily("Momcake") font.setPointSize(24) self.z_adjust_header_title.setFont(font) - self.z_adjust_header_title.setStyleSheet("background: transparent; color: white;") + self.z_adjust_header_title.setStyleSheet( + "background: transparent; color: white;" + ) self.z_adjust_header_title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.z_adjust_header_title.setObjectName("z_adjust_header_title") self.z_adjustment_header_layout.addWidget(self.z_adjust_header_title) - self.z_adjust_back_button = BlocksCustomButton(parent=self.horizontalLayoutWidget_10) + self.z_adjust_back_button = BlocksCustomButton( + parent=self.horizontalLayoutWidget_10 + ) self.z_adjust_back_button.setMinimumSize(QtCore.QSize(60, 60)) self.z_adjust_back_button.setMaximumSize(QtCore.QSize(60, 60)) self.z_adjust_back_button.setText("") self.z_adjust_back_button.setFlat(True) - self.z_adjust_back_button.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.z_adjust_back_button.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.z_adjust_back_button.setObjectName("z_adjust_back_button") self.z_adjustment_header_layout.addWidget(self.z_adjust_back_button) self.verticalLayoutWidget_8 = QtWidgets.QWidget(parent=self.z_adjustment_page) self.verticalLayoutWidget_8.setGeometry(QtCore.QRect(600, 110, 90, 177)) self.verticalLayoutWidget_8.setObjectName("verticalLayoutWidget_8") - self.z_adjust_move_buttons_layout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_8) + self.z_adjust_move_buttons_layout = QtWidgets.QVBoxLayout( + self.verticalLayoutWidget_8 + ) self.z_adjust_move_buttons_layout.setContentsMargins(5, 5, 5, 5) self.z_adjust_move_buttons_layout.setObjectName("z_adjust_move_buttons_layout") self.z_adjust_up_btn = IconButton(parent=self.verticalLayoutWidget_8) @@ -1840,14 +2791,20 @@ def setupUi(self, controlStackedWidget): self.z_adjust_up_btn.setFont(font) self.z_adjust_up_btn.setMouseTracking(False) self.z_adjust_up_btn.setTabletTracking(True) - self.z_adjust_up_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.z_adjust_up_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.z_adjust_up_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.z_adjust_up_btn.setStyleSheet("") self.z_adjust_up_btn.setAutoDefault(False) self.z_adjust_up_btn.setFlat(True) - self.z_adjust_up_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg")) + self.z_adjust_up_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg") + ) self.z_adjust_up_btn.setObjectName("z_adjust_up_btn") - self.z_adjust_move_buttons_layout.addWidget(self.z_adjust_up_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.z_adjust_move_buttons_layout.addWidget( + self.z_adjust_up_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.z_adjust_down_btn = IconButton(parent=self.verticalLayoutWidget_8) self.z_adjust_down_btn.setMinimumSize(QtCore.QSize(80, 80)) self.z_adjust_down_btn.setMaximumSize(QtCore.QSize(80, 80)) @@ -1859,14 +2816,20 @@ def setupUi(self, controlStackedWidget): self.z_adjust_down_btn.setFont(font) self.z_adjust_down_btn.setMouseTracking(False) self.z_adjust_down_btn.setTabletTracking(True) - self.z_adjust_down_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.z_adjust_down_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.z_adjust_down_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.z_adjust_down_btn.setStyleSheet("") self.z_adjust_down_btn.setAutoDefault(False) self.z_adjust_down_btn.setFlat(True) - self.z_adjust_down_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg")) + self.z_adjust_down_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg") + ) self.z_adjust_down_btn.setObjectName("z_adjust_down_btn") - self.z_adjust_move_buttons_layout.addWidget(self.z_adjust_down_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.z_adjust_move_buttons_layout.addWidget( + self.z_adjust_down_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.z_adjust_title = BlocksCustomButton(parent=self.z_adjustment_page) self.z_adjust_title.setGeometry(QtCore.QRect(170, 80, 371, 51)) self.z_adjust_title.setMinimumSize(QtCore.QSize(10, 10)) @@ -1878,23 +2841,36 @@ def setupUi(self, controlStackedWidget): self.z_adjust_title.setFont(font) self.z_adjust_title.setMouseTracking(False) self.z_adjust_title.setTabletTracking(True) - self.z_adjust_title.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.z_adjust_title.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.z_adjust_title.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.z_adjust_title.setStyleSheet("") self.z_adjust_title.setAutoDefault(False) self.z_adjust_title.setFlat(True) self.z_adjust_title.setObjectName("z_adjust_title") - self.horizontalLayoutWidget_11 = QtWidgets.QWidget(parent=self.z_adjustment_page) + self.horizontalLayoutWidget_11 = QtWidgets.QWidget( + parent=self.z_adjustment_page + ) self.horizontalLayoutWidget_11.setGeometry(QtCore.QRect(20, 320, 671, 71)) self.horizontalLayoutWidget_11.setObjectName("horizontalLayoutWidget_11") - self.z_adjust_buttons_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_11) + self.z_adjust_buttons_layout = QtWidgets.QHBoxLayout( + self.horizontalLayoutWidget_11 + ) self.z_adjust_buttons_layout.setContentsMargins(0, 0, 0, 0) self.z_adjust_buttons_layout.setObjectName("z_adjust_buttons_layout") - self.z_adjust_confirm_btn = BlocksCustomButton(parent=self.horizontalLayoutWidget_11) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + self.z_adjust_confirm_btn = BlocksCustomButton( + parent=self.horizontalLayoutWidget_11 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.z_adjust_confirm_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.z_adjust_confirm_btn.sizePolicy().hasHeightForWidth() + ) self.z_adjust_confirm_btn.setSizePolicy(sizePolicy) self.z_adjust_confirm_btn.setMinimumSize(QtCore.QSize(10, 0)) font = QtGui.QFont() @@ -1905,19 +2881,32 @@ def setupUi(self, controlStackedWidget): self.z_adjust_confirm_btn.setFont(font) self.z_adjust_confirm_btn.setMouseTracking(False) self.z_adjust_confirm_btn.setTabletTracking(True) - self.z_adjust_confirm_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.z_adjust_confirm_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.z_adjust_confirm_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.z_adjust_confirm_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.z_adjust_confirm_btn.setStyleSheet("") self.z_adjust_confirm_btn.setAutoDefault(False) self.z_adjust_confirm_btn.setFlat(True) - self.z_adjust_confirm_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")) + self.z_adjust_confirm_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + ) self.z_adjust_confirm_btn.setObjectName("z_adjust_confirm_btn") self.z_adjust_buttons_layout.addWidget(self.z_adjust_confirm_btn) - self.z_adjust_cancel_btn = BlocksCustomButton(parent=self.horizontalLayoutWidget_11) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + self.z_adjust_cancel_btn = BlocksCustomButton( + parent=self.horizontalLayoutWidget_11 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.z_adjust_cancel_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.z_adjust_cancel_btn.sizePolicy().hasHeightForWidth() + ) self.z_adjust_cancel_btn.setSizePolicy(sizePolicy) self.z_adjust_cancel_btn.setMinimumSize(QtCore.QSize(10, 0)) font = QtGui.QFont() @@ -1928,12 +2917,18 @@ def setupUi(self, controlStackedWidget): self.z_adjust_cancel_btn.setFont(font) self.z_adjust_cancel_btn.setMouseTracking(False) self.z_adjust_cancel_btn.setTabletTracking(True) - self.z_adjust_cancel_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.z_adjust_cancel_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.z_adjust_cancel_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.z_adjust_cancel_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.z_adjust_cancel_btn.setStyleSheet("") self.z_adjust_cancel_btn.setAutoDefault(False) self.z_adjust_cancel_btn.setFlat(True) - self.z_adjust_cancel_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg")) + self.z_adjust_cancel_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg") + ) self.z_adjust_cancel_btn.setObjectName("z_adjust_cancel_btn") self.z_adjust_buttons_layout.addWidget(self.z_adjust_cancel_btn) controlStackedWidget.addWidget(self.z_adjustment_page) @@ -1941,27 +2936,46 @@ def setupUi(self, controlStackedWidget): self.printer_settings_page.setMinimumSize(QtCore.QSize(710, 400)) self.printer_settings_page.setMaximumSize(QtCore.QSize(720, 420)) self.printer_settings_page.setObjectName("printer_settings_page") - self.horizontalLayoutWidget_12 = QtWidgets.QWidget(parent=self.printer_settings_page) + self.horizontalLayoutWidget_12 = QtWidgets.QWidget( + parent=self.printer_settings_page + ) self.horizontalLayoutWidget_12.setGeometry(QtCore.QRect(10, 11, 691, 71)) self.horizontalLayoutWidget_12.setObjectName("horizontalLayoutWidget_12") - self.printer_setting_header_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_12) + self.printer_setting_header_layout = QtWidgets.QHBoxLayout( + self.horizontalLayoutWidget_12 + ) self.printer_setting_header_layout.setContentsMargins(0, 0, 0, 0) - self.printer_setting_header_layout.setObjectName("printer_setting_header_layout") - self.printer_settings_title_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_12) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + self.printer_setting_header_layout.setObjectName( + "printer_setting_header_layout" + ) + self.printer_settings_title_label = QtWidgets.QLabel( + parent=self.horizontalLayoutWidget_12 + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.printer_settings_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.printer_settings_title_label.sizePolicy().hasHeightForWidth() + ) self.printer_settings_title_label.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily("Momcake") font.setPointSize(24) self.printer_settings_title_label.setFont(font) - self.printer_settings_title_label.setStyleSheet("background: transparent; color: white;") - self.printer_settings_title_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.printer_settings_title_label.setStyleSheet( + "background: transparent; color: white;" + ) + self.printer_settings_title_label.setAlignment( + QtCore.Qt.AlignmentFlag.AlignCenter + ) self.printer_settings_title_label.setObjectName("printer_settings_title_label") self.printer_setting_header_layout.addWidget(self.printer_settings_title_label) - self.printer_settings_back_btn = IconButton(parent=self.horizontalLayoutWidget_12) + self.printer_settings_back_btn = IconButton( + parent=self.horizontalLayoutWidget_12 + ) self.printer_settings_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.printer_settings_back_btn.setMaximumSize(QtCore.QSize(60, 60)) font = QtGui.QFont() @@ -1972,36 +2986,60 @@ def setupUi(self, controlStackedWidget): self.printer_settings_back_btn.setFont(font) self.printer_settings_back_btn.setMouseTracking(False) self.printer_settings_back_btn.setTabletTracking(True) - self.printer_settings_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.printer_settings_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.printer_settings_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.printer_settings_back_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.printer_settings_back_btn.setStyleSheet("") self.printer_settings_back_btn.setAutoDefault(False) self.printer_settings_back_btn.setFlat(True) - self.printer_settings_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.printer_settings_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.printer_settings_back_btn.setObjectName("printer_settings_back_btn") self.printer_setting_header_layout.addWidget(self.printer_settings_back_btn) self.gridLayoutWidget_3 = QtWidgets.QWidget(parent=self.printer_settings_page) self.gridLayoutWidget_3.setGeometry(QtCore.QRect(10, 90, 691, 301)) self.gridLayoutWidget_3.setObjectName("gridLayoutWidget_3") - self.printer_setting_content_layout = QtWidgets.QGridLayout(self.gridLayoutWidget_3) + self.printer_setting_content_layout = QtWidgets.QGridLayout( + self.gridLayoutWidget_3 + ) self.printer_setting_content_layout.setContentsMargins(0, 0, 0, 0) - self.printer_setting_content_layout.setObjectName("printer_setting_content_layout") + self.printer_setting_content_layout.setObjectName( + "printer_setting_content_layout" + ) controlStackedWidget.addWidget(self.printer_settings_page) self.fans_page = QtWidgets.QWidget() self.fans_page.setObjectName("fans_page") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.fans_page) self.verticalLayout_5.setObjectName("verticalLayout_5") - spacerItem9 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem9 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_5.addItem(spacerItem9) self.fans_header_layout = QtWidgets.QHBoxLayout() self.fans_header_layout.setObjectName("fans_header_layout") - spacerItem10 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem10 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.fans_header_layout.addItem(spacerItem10) self.fans_title_label = QtWidgets.QLabel(parent=self.fans_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.fans_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.fans_title_label.sizePolicy().hasHeightForWidth() + ) self.fans_title_label.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily("Momcake") @@ -2012,10 +3050,15 @@ def setupUi(self, controlStackedWidget): self.fans_title_label.setObjectName("fans_title_label") self.fans_header_layout.addWidget(self.fans_title_label) self.fans_back_btn = IconButton(parent=self.fans_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.fans_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.fans_back_btn.sizePolicy().hasHeightForWidth() + ) self.fans_back_btn.setSizePolicy(sizePolicy) self.fans_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.fans_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -2027,21 +3070,35 @@ def setupUi(self, controlStackedWidget): self.fans_back_btn.setFont(font) self.fans_back_btn.setMouseTracking(False) self.fans_back_btn.setTabletTracking(True) - self.fans_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.fans_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.fans_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.fans_back_btn.setStyleSheet("") self.fans_back_btn.setAutoDefault(False) self.fans_back_btn.setFlat(True) - self.fans_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.fans_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.fans_back_btn.setObjectName("fans_back_btn") self.fans_header_layout.addWidget(self.fans_back_btn) self.verticalLayout_5.addLayout(self.fans_header_layout) - spacerItem11 = QtWidgets.QSpacerItem(20, 111, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + spacerItem11 = QtWidgets.QSpacerItem( + 20, + 111, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Expanding, + ) self.verticalLayout_5.addItem(spacerItem11) self.fans_content_layout = QtWidgets.QHBoxLayout() self.fans_content_layout.setObjectName("fans_content_layout") self.verticalLayout_5.addLayout(self.fans_content_layout) - spacerItem12 = QtWidgets.QSpacerItem(20, 111, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + spacerItem12 = QtWidgets.QSpacerItem( + 20, + 111, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Expanding, + ) self.verticalLayout_5.addItem(spacerItem12) controlStackedWidget.addWidget(self.fans_page) @@ -2051,64 +3108,140 @@ def setupUi(self, controlStackedWidget): def retranslateUi(self, controlStackedWidget): _translate = QtCore.QCoreApplication.translate - controlStackedWidget.setWindowTitle(_translate("controlStackedWidget", "StackedWidget")) + controlStackedWidget.setWindowTitle( + _translate("controlStackedWidget", "StackedWidget") + ) self.cp_header_title.setText(_translate("controlStackedWidget", "Control")) - self.cp_header_title.setProperty("class", _translate("controlStackedWidget", "title_text")) + self.cp_header_title.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) self.cp_z_tilt_btn.setText(_translate("controlStackedWidget", "Z-Tilt")) - self.cp_z_tilt_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.cp_temperature_btn.setText(_translate("controlStackedWidget", "Temp.\n" -"Control")) - self.cp_temperature_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.cp_nozzles_calibration_btn.setText(_translate("controlStackedWidget", "Nozzle\n" -"Calibration")) - self.cp_nozzles_calibration_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.cp_motion_btn.setText(_translate("controlStackedWidget", "Motion\n" -"Control")) - self.cp_motion_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.cp_z_tilt_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.cp_temperature_btn.setText( + _translate("controlStackedWidget", "Temp.\nControl") + ) + self.cp_temperature_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.cp_nozzles_calibration_btn.setText( + _translate("controlStackedWidget", "Nozzle\nCalibration") + ) + self.cp_nozzles_calibration_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.cp_motion_btn.setText( + _translate("controlStackedWidget", "Motion\nControl") + ) + self.cp_motion_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.cp_fans_btn.setText(_translate("controlStackedWidget", "Fans")) - self.cp_fans_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.cp_switch_print_core_btn.setText(_translate("controlStackedWidget", "Swap\n" -"Print Core")) - self.cp_switch_print_core_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.cp_fans_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.cp_switch_print_core_btn.setText( + _translate("controlStackedWidget", "Swap\nPrint Core") + ) + self.cp_switch_print_core_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.mp_header_title.setText(_translate("controlStackedWidget", "Motion")) - self.mp_header_title.setProperty("class", _translate("controlStackedWidget", "title_text")) + self.mp_header_title.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) self.mp_back_btn.setText(_translate("controlStackedWidget", "Back")) - self.mp_back_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.mp_back_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.mp_back_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.mp_back_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) self.motion_move_axis_btn.setText(_translate("controlStackedWidget", "Axis")) - self.motion_move_axis_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.motion_disable_steppers_btn.setText(_translate("controlStackedWidget", "Disable\n" -"Steppers")) - self.motion_disable_steppers_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.motion_move_axis_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.motion_disable_steppers_btn.setText( + _translate("controlStackedWidget", "Disable\nSteppers") + ) + self.motion_disable_steppers_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.motion_extrude_btn.setText(_translate("controlStackedWidget", "Extrude")) - self.motion_extrude_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.motion_auto_home_btn.setText(_translate("controlStackedWidget", "Auto\n" -"Home")) - self.motion_auto_home_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.motion_extrude_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.motion_auto_home_btn.setText( + _translate("controlStackedWidget", "Auto\nHome") + ) + self.motion_auto_home_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.exp_title_label.setText(_translate("controlStackedWidget", "Extrude")) - self.exp_title_label.setProperty("class", _translate("controlStackedWidget", "title_text")) + self.exp_title_label.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) self.exp_back_btn.setText(_translate("controlStackedWidget", "Back")) - self.exp_back_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.exp_back_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.exp_length_group_box.setTitle(_translate("controlStackedWidget", "Extrude Length (mm)")) - self.extrude_select_length_10_btn.setText(_translate("controlStackedWidget", "10")) - self.extrude_select_length_10_btn.setProperty("button_type", _translate("controlStackedWidget", "normal")) - self.extrude_select_length_50_btn.setText(_translate("controlStackedWidget", "50")) - self.extrude_select_length_50_btn.setProperty("button_type", _translate("controlStackedWidget", "normal")) - self.extrude_select_length_100_btn.setText(_translate("controlStackedWidget", "100")) - self.extrude_select_length_100_btn.setProperty("button_type", _translate("controlStackedWidget", "normal")) - self.exp_feedrate_group_box.setTitle(_translate("controlStackedWidget", "Extrude Feedrate (mm/s)")) - self.extrude_select_feedrate_low_btn.setText(_translate("controlStackedWidget", "2")) - self.extrude_select_feedrate_low_btn.setProperty("button_type", _translate("controlStackedWidget", "normal")) - self.extrude_select_feedrate_middle_btn.setText(_translate("controlStackedWidget", "4")) - self.extrude_select_feedrate_middle_btn.setProperty("button_type", _translate("controlStackedWidget", "normal")) - self.extrude_select_feedrate_high_btn.setText(_translate("controlStackedWidget", "8")) - self.extrude_select_feedrate_high_btn.setProperty("button_type", _translate("controlStackedWidget", "normal")) + self.exp_back_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.exp_back_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.exp_length_group_box.setTitle( + _translate("controlStackedWidget", "Extrude Length (mm)") + ) + self.extrude_select_length_10_btn.setText( + _translate("controlStackedWidget", "10") + ) + self.extrude_select_length_10_btn.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) + self.extrude_select_length_50_btn.setText( + _translate("controlStackedWidget", "50") + ) + self.extrude_select_length_50_btn.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) + self.extrude_select_length_100_btn.setText( + _translate("controlStackedWidget", "100") + ) + self.extrude_select_length_100_btn.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) + self.exp_feedrate_group_box.setTitle( + _translate("controlStackedWidget", "Extrude Feedrate (mm/s)") + ) + self.extrude_select_feedrate_low_btn.setText( + _translate("controlStackedWidget", "2") + ) + self.extrude_select_feedrate_low_btn.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) + self.extrude_select_feedrate_middle_btn.setText( + _translate("controlStackedWidget", "4") + ) + self.extrude_select_feedrate_middle_btn.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) + self.extrude_select_feedrate_high_btn.setText( + _translate("controlStackedWidget", "8") + ) + self.extrude_select_feedrate_high_btn.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) self.exp_unextrude_btn.setText(_translate("controlStackedWidget", "Retract")) - self.exp_unextrude_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.exp_unextrude_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.exp_extrude_btn.setText(_translate("controlStackedWidget", "Extrude")) - self.exp_extrude_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.exp_info_label.setText(_translate("controlStackedWidget", "Nozzle heating to extrude")) + self.exp_extrude_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.exp_info_label.setText( + _translate("controlStackedWidget", "Nozzle heating to extrude") + ) self.mva_x_label.setText(_translate("controlStackedWidget", "X:")) self.mva_y_label.setText(_translate("controlStackedWidget", "Y:")) self.mva_z_label.setText(_translate("controlStackedWidget", "Z:")) @@ -2116,71 +3249,161 @@ def retranslateUi(self, controlStackedWidget): self.mva_y_value_label.setText(_translate("controlStackedWidget", "0")) self.mva_x_value_label.setText(_translate("controlStackedWidget", "0")) self.mva_title_label.setText(_translate("controlStackedWidget", "Move Axis")) - self.mva_title_label.setProperty("class", _translate("controlStackedWidget", "title_text")) + self.mva_title_label.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) self.mva_back_btn.setText(_translate("controlStackedWidget", "Back")) - self.mva_back_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.mva_back_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_z_up.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_z_down.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_home_x_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_home_y_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_home_z_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_home_all_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.mva_back_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.mva_back_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_z_up.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_z_down.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_home_x_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_home_y_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_home_z_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_home_all_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) self.mva_select_speed_25_btn.setText(_translate("controlStackedWidget", "25")) self.mva_select_speed_50_btn.setText(_translate("controlStackedWidget", "50")) self.mva_select_speed_100_btn.setText(_translate("controlStackedWidget", "100")) self.label.setText(_translate("controlStackedWidget", "Move Speed mm/s")) self.mva_select_length_1_btn.setText(_translate("controlStackedWidget", "1")) self.mva_select_length_10_btn.setText(_translate("controlStackedWidget", "10")) - self.mva_select_length_100_btn.setText(_translate("controlStackedWidget", "100")) + self.mva_select_length_100_btn.setText( + _translate("controlStackedWidget", "100") + ) self.label_2.setText(_translate("controlStackedWidget", "Move Length mm")) - self.mva_left_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_right_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_down_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_up_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.mva_middle.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.temp_header_title.setText(_translate("controlStackedWidget", "Temperature")) - self.temp_header_title.setProperty("class", _translate("controlStackedWidget", "title_text")) + self.mva_left_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_right_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_down_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_up_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.mva_middle.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.temp_header_title.setText( + _translate("controlStackedWidget", "Temperature") + ) + self.temp_header_title.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) self.temp_back_button.setText(_translate("controlStackedWidget", "Back")) - self.temp_back_button.setProperty("button_type", _translate("controlStackedWidget", "icon")) - self.extruder_temp_display.setProperty("name", _translate("controlStackedWidget", "extruder_temperature_display")) - self.extruder_temp_display.setProperty("button_type", _translate("controlStackedWidget", "secondary_display")) - self.bed_temp_display.setProperty("name", _translate("controlStackedWidget", "bed_temperature_display")) - self.bed_temp_display.setProperty("button_type", _translate("controlStackedWidget", "secondary_display")) + self.temp_back_button.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + self.extruder_temp_display.setProperty( + "name", _translate("controlStackedWidget", "extruder_temperature_display") + ) + self.extruder_temp_display.setProperty( + "button_type", _translate("controlStackedWidget", "secondary_display") + ) + self.bed_temp_display.setProperty( + "name", _translate("controlStackedWidget", "bed_temperature_display") + ) + self.bed_temp_display.setProperty( + "button_type", _translate("controlStackedWidget", "secondary_display") + ) self.cooldown_btn.setText(_translate("controlStackedWidget", "Cooldown")) - self.cooldown_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.temperature_cooldown_btn.setText(_translate("controlStackedWidget", "Heatsoak")) - self.temperature_cooldown_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.cooldown_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.temperature_cooldown_btn.setText( + _translate("controlStackedWidget", "Heatsoak") + ) + self.temperature_cooldown_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.z_adjust_icon.setText(_translate("controlStackedWidget", "Z")) self.z_adjust_offset_value.setText(_translate("controlStackedWidget", "0")) - self.z_adjust_header_title.setText(_translate("controlStackedWidget", "Z Adjustment")) - self.z_adjust_header_title.setProperty("class", _translate("controlStackedWidget", "title_text")) - self.z_adjust_back_button.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.z_adjust_header_title.setText( + _translate("controlStackedWidget", "Z Adjustment") + ) + self.z_adjust_header_title.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) + self.z_adjust_back_button.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) self.z_adjust_up_btn.setText(_translate("controlStackedWidget", "^")) - self.z_adjust_up_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.z_adjust_up_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.z_adjust_up_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.z_adjust_up_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) self.z_adjust_down_btn.setText(_translate("controlStackedWidget", "v")) - self.z_adjust_down_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.z_adjust_down_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.z_adjust_down_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.z_adjust_down_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) self.z_adjust_title.setText(_translate("controlStackedWidget", "select length")) - self.z_adjust_title.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.z_adjust_title.setProperty("button_type", _translate("controlStackedWidget", "normal")) + self.z_adjust_title.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.z_adjust_title.setProperty( + "button_type", _translate("controlStackedWidget", "normal") + ) self.z_adjust_confirm_btn.setText(_translate("controlStackedWidget", "Confirm")) - self.z_adjust_confirm_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) + self.z_adjust_confirm_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) self.z_adjust_cancel_btn.setText(_translate("controlStackedWidget", "Cancel")) - self.z_adjust_cancel_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.printer_settings_title_label.setText(_translate("controlStackedWidget", "PRINTER SETTINGS")) - self.printer_settings_title_label.setProperty("class", _translate("controlStackedWidget", "title_text")) - self.printer_settings_back_btn.setText(_translate("controlStackedWidget", "Back")) - self.printer_settings_back_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.printer_settings_back_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.z_adjust_cancel_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.printer_settings_title_label.setText( + _translate("controlStackedWidget", "PRINTER SETTINGS") + ) + self.printer_settings_title_label.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) + self.printer_settings_back_btn.setText( + _translate("controlStackedWidget", "Back") + ) + self.printer_settings_back_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.printer_settings_back_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) self.fans_title_label.setText(_translate("controlStackedWidget", "Fans")) - self.fans_title_label.setProperty("class", _translate("controlStackedWidget", "title_text")) + self.fans_title_label.setProperty( + "class", _translate("controlStackedWidget", "title_text") + ) self.fans_back_btn.setText(_translate("controlStackedWidget", "Back")) - self.fans_back_btn.setProperty("class", _translate("controlStackedWidget", "menu_btn")) - self.fans_back_btn.setProperty("button_type", _translate("controlStackedWidget", "icon")) + self.fans_back_btn.setProperty( + "class", _translate("controlStackedWidget", "menu_btn") + ) + self.fans_back_btn.setProperty( + "button_type", _translate("controlStackedWidget", "icon") + ) + + from lib.utils.blocks_button import BlocksCustomButton from lib.utils.blocks_label import BlocksLabel -from lib.utils.display_button import DisplayButton from lib.utils.check_button import BlocksCustomCheckButton +from lib.utils.display_button import DisplayButton from lib.utils.icon_button import IconButton diff --git a/BlocksScreen/lib/ui/mainWindow.ui b/BlocksScreen/lib/ui/mainWindow.ui index 253be875..b056308e 100644 --- a/BlocksScreen/lib/ui/mainWindow.ui +++ b/BlocksScreen/lib/ui/mainWindow.ui @@ -715,7 +715,7 @@ QPushButton:pressed{ icon_text - :/temperature_related/media/btn_icons/standart_temperature.svg + :/temperature_related/media/btn_icons/standard_temperature.svg @@ -767,7 +767,7 @@ QPushButton:pressed{ icon - :/network/media/btn_icons/network/3bar_wifi.svg + :/network/media/btn_icons/network/wifi_3bar.svg diff --git a/BlocksScreen/lib/ui/mainWindow_ui.py b/BlocksScreen/lib/ui/mainWindow_ui.py index e467dacf..64b02bb6 100644 --- a/BlocksScreen/lib/ui/mainWindow_ui.py +++ b/BlocksScreen/lib/ui/mainWindow_ui.py @@ -9,11 +9,14 @@ from PyQt6 import QtCore, QtGui, QtWidgets -class Ui_MainWindow(object): +class Ui_MainWindow: def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 480) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) @@ -25,34 +28,57 @@ def setupUi(self, MainWindow): palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) MainWindow.setPalette(palette) MainWindow.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) MainWindow.setTabletTracking(True) icon = QtGui.QIcon.fromTheme("applications-other") MainWindow.setWindowIcon(icon) MainWindow.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) - MainWindow.setStyleSheet("MainWindow > {\n" -" url(:/font/media/fonts for text/Momcake-Thin.ttf);\n" -"}") + MainWindow.setStyleSheet( + "MainWindow > {\n url(:/font/media/fonts for text/Momcake-Thin.ttf);\n}" + ) MainWindow.setAnimated(False) self.main_widget = QtWidgets.QWidget(parent=MainWindow) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.main_widget.sizePolicy().hasHeightForWidth()) @@ -63,35 +89,48 @@ def setupUi(self, MainWindow): self.main_widget.setBaseSize(QtCore.QSize(800, 480)) self.main_widget.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) self.main_widget.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) - self.main_widget.setStyleSheet("#main_widget{background-image: url(:/background/media/1st_background.png);}\n" -"") + self.main_widget.setStyleSheet( + "#main_widget{background-image: url(:/background/media/1st_background.png);}\n" + "" + ) self.main_widget.setObjectName("main_widget") self.main_content_widget = NotificationQTabWidget(parent=self.main_widget) self.main_content_widget.setEnabled(True) self.main_content_widget.setGeometry(QtCore.QRect(0, 60, 800, 420)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.main_content_widget.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.main_content_widget.sizePolicy().hasHeightForWidth() + ) self.main_content_widget.setSizePolicy(sizePolicy) self.main_content_widget.setMinimumSize(QtCore.QSize(800, 400)) self.main_content_widget.setMaximumSize(QtCore.QSize(1024, 720)) self.main_content_widget.setBaseSize(QtCore.QSize(800, 400)) - self.main_content_widget.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) - self.main_content_widget.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft) + self.main_content_widget.setCursor( + QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor) + ) + self.main_content_widget.setLayoutDirection( + QtCore.Qt.LayoutDirection.RightToLeft + ) self.main_content_widget.setAutoFillBackground(False) - self.main_content_widget.setStyleSheet("#main_content_widget{\n" -"background-image: url(:/background/media/1st_background.png);\n" -"}\n" -"QTabBar::tab{\n" -" min-width: 80px;\n" -" max-width: 80px;\n" -" min-height: 100px;\n" -" max-height: 100px;\n" -" background: transparent;\n" -"}\n" -"\n" -"") + self.main_content_widget.setStyleSheet( + "#main_content_widget{\n" + "background-image: url(:/background/media/1st_background.png);\n" + "}\n" + "QTabBar::tab{\n" + " min-width: 80px;\n" + " max-width: 80px;\n" + " min-height: 100px;\n" + " max-height: 100px;\n" + " background: transparent;\n" + "}\n" + "\n" + "" + ) self.main_content_widget.setTabPosition(QtWidgets.QTabWidget.TabPosition.West) self.main_content_widget.setTabShape(QtWidgets.QTabWidget.TabShape.Rounded) self.main_content_widget.setIconSize(QtCore.QSize(60, 60)) @@ -102,7 +141,10 @@ def setupUi(self, MainWindow): self.main_content_widget.setMovable(False) self.main_content_widget.setObjectName("main_content_widget") self.printTab = QtWidgets.QWidget() - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.printTab.sizePolicy().hasHeightForWidth()) @@ -113,12 +155,27 @@ def setupUi(self, MainWindow): self.printTab.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) self.printTab.setObjectName("printTab") icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_home.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) - icon.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_home_pressed.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.On) - icon.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_home_blocked.png"), QtGui.QIcon.Mode.Disabled, QtGui.QIcon.State.On) + icon.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_home.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, + ) + icon.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_home_pressed.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.On, + ) + icon.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_home_blocked.png"), + QtGui.QIcon.Mode.Disabled, + QtGui.QIcon.State.On, + ) self.main_content_widget.addTab(self.printTab, icon, "") self.filamentTab = QtWidgets.QWidget() - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.filamentTab.sizePolicy().hasHeightForWidth()) @@ -129,12 +186,27 @@ def setupUi(self, MainWindow): self.filamentTab.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) self.filamentTab.setObjectName("filamentTab") icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_filament.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) - icon1.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_filament_pressed.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.On) - icon1.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_filamente_blocked.png"), QtGui.QIcon.Mode.Disabled, QtGui.QIcon.State.On) + icon1.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_filament.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, + ) + icon1.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_filament_pressed.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.On, + ) + icon1.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_filamente_blocked.png"), + QtGui.QIcon.Mode.Disabled, + QtGui.QIcon.State.On, + ) self.main_content_widget.addTab(self.filamentTab, icon1, "") self.controlTab = QtWidgets.QWidget() - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.controlTab.sizePolicy().hasHeightForWidth()) @@ -145,12 +217,27 @@ def setupUi(self, MainWindow): self.controlTab.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) self.controlTab.setObjectName("controlTab") icon2 = QtGui.QIcon() - icon2.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_control.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) - icon2.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_control_pressed.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.On) - icon2.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_control_blocked.png"), QtGui.QIcon.Mode.Disabled, QtGui.QIcon.State.On) + icon2.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_control.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, + ) + icon2.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_control_pressed.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.On, + ) + icon2.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_control_blocked.png"), + QtGui.QIcon.Mode.Disabled, + QtGui.QIcon.State.On, + ) self.main_content_widget.addTab(self.controlTab, icon2, "") self.utilitiesTab = QtWidgets.QWidget() - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.utilitiesTab.sizePolicy().hasHeightForWidth()) @@ -161,17 +248,34 @@ def setupUi(self, MainWindow): self.utilitiesTab.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) self.utilitiesTab.setObjectName("utilitiesTab") icon3 = QtGui.QIcon() - icon3.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_utilities.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off) - icon3.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_utilities_pressed.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.On) - icon3.addPixmap(QtGui.QPixmap(":/icons/media/main_menu/ICON_utilities_blocked.png"), QtGui.QIcon.Mode.Disabled, QtGui.QIcon.State.On) + icon3.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_utilities.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, + ) + icon3.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_utilities_pressed.png"), + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.On, + ) + icon3.addPixmap( + QtGui.QPixmap(":/icons/media/main_menu/ICON_utilities_blocked.png"), + QtGui.QIcon.Mode.Disabled, + QtGui.QIcon.State.On, + ) self.main_content_widget.addTab(self.utilitiesTab, icon3, "") self.main_header_layout = QtWidgets.QGroupBox(parent=self.main_widget) self.main_header_layout.setEnabled(True) self.main_header_layout.setGeometry(QtCore.QRect(0, 0, 800, 60)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(2) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.main_header_layout.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.main_header_layout.sizePolicy().hasHeightForWidth() + ) self.main_header_layout.setSizePolicy(sizePolicy) self.main_header_layout.setMinimumSize(QtCore.QSize(800, 60)) self.main_header_layout.setMaximumSize(QtCore.QSize(1024, 80)) @@ -180,105 +284,158 @@ def setupUi(self, MainWindow): font = QtGui.QFont() font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferAntialias) self.main_header_layout.setFont(font) - self.main_header_layout.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor)) - self.main_header_layout.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) - self.main_header_layout.setStyleSheet("QWidget {\n" -" background-color: rgb(50,50,50);\n" -" color:rgb(255,255,255);\n" -" border-color : rgb(60,60,60);\n" -" selection-background-color: rgb(60,60,60);\n" -" gridline-color:rgb(60,60,60);\n" -" selection-color:rgb(60,60,60);\n" -"}\n" -"\n" -"QGroupBox{\n" -" background-color: rgb(50,50,50);\n" -" border: none; \n" -" border-color : rgb(60,60,60);\n" -" selection-background-color: rgb(60,60,60);\n" -" gridline-color:rgb(60,60,60);\n" -" selection-color:rgb(60,60,60);\n" -" \n" -"}\n" -"\n" -"QFrame > *{\n" -" background-color: rgb(50, 50, 50);\n" -" selection-background-color: rgb(60, 60, 60);\n" -" gridline-color: rgb(60, 60, 60);\n" -" color: rgb(255, 255, 255); \n" -" selection-color: rgb(60, 60, 60);\n" -" border-bottom-color: rgb(60, 60, 60);\n" -" \n" -"}\n" -"\n" -"\n" -"QPushButton:pressed{\n" -" border: none;\n" -" background: transparent;\n" -"}") + self.main_header_layout.setCursor( + QtGui.QCursor(QtCore.Qt.CursorShape.BlankCursor) + ) + self.main_header_layout.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) + self.main_header_layout.setStyleSheet( + "QWidget {\n" + " background-color: rgb(50,50,50);\n" + " color:rgb(255,255,255);\n" + " border-color : rgb(60,60,60);\n" + " selection-background-color: rgb(60,60,60);\n" + " gridline-color:rgb(60,60,60);\n" + " selection-color:rgb(60,60,60);\n" + "}\n" + "\n" + "QGroupBox{\n" + " background-color: rgb(50,50,50);\n" + " border: none; \n" + " border-color : rgb(60,60,60);\n" + " selection-background-color: rgb(60,60,60);\n" + " gridline-color:rgb(60,60,60);\n" + " selection-color:rgb(60,60,60);\n" + " \n" + "}\n" + "\n" + "QFrame > *{\n" + " background-color: rgb(50, 50, 50);\n" + " selection-background-color: rgb(60, 60, 60);\n" + " gridline-color: rgb(60, 60, 60);\n" + " color: rgb(255, 255, 255); \n" + " selection-color: rgb(60, 60, 60);\n" + " border-bottom-color: rgb(60, 60, 60);\n" + " \n" + "}\n" + "\n" + "\n" + "QPushButton:pressed{\n" + " border: none;\n" + " background: transparent;\n" + "}" + ) self.main_header_layout.setTitle("") - self.main_header_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignJustify|QtCore.Qt.AlignmentFlag.AlignVCenter) + self.main_header_layout.setAlignment( + QtCore.Qt.AlignmentFlag.AlignJustify | QtCore.Qt.AlignmentFlag.AlignVCenter + ) self.main_header_layout.setFlat(True) self.main_header_layout.setCheckable(False) self.main_header_layout.setObjectName("main_header_layout") self.header_main_layout = QtWidgets.QHBoxLayout(self.main_header_layout) - self.header_main_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinimumSize) + self.header_main_layout.setSizeConstraint( + QtWidgets.QLayout.SizeConstraint.SetMinimumSize + ) self.header_main_layout.setContentsMargins(5, 0, 5, 0) self.header_main_layout.setSpacing(10) self.header_main_layout.setObjectName("header_main_layout") self.notification_btn = IconButton(parent=self.main_header_layout) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.notification_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.notification_btn.sizePolicy().hasHeightForWidth() + ) self.notification_btn.setSizePolicy(sizePolicy) self.notification_btn.setMinimumSize(QtCore.QSize(60, 60)) self.notification_btn.setMaximumSize(QtCore.QSize(60, 60)) self.notification_btn.setText("") self.notification_btn.setIconSize(QtCore.QSize(60, 60)) self.notification_btn.setFlat(True) - self.notification_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/notification.svg")) + self.notification_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/notification.svg") + ) self.notification_btn.setObjectName("notification_btn") - self.header_main_layout.addWidget(self.notification_btn, 0, QtCore.Qt.AlignmentFlag.AlignLeft) + self.header_main_layout.addWidget( + self.notification_btn, 0, QtCore.Qt.AlignmentFlag.AlignLeft + ) self.extruder_temp_display = DisplayButton(parent=self.main_header_layout) self.extruder_temp_display.setMinimumSize(QtCore.QSize(140, 60)) self.extruder_temp_display.setMaximumSize(QtCore.QSize(160, 60)) self.extruder_temp_display.setFlat(True) - self.extruder_temp_display.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle_topbar.svg")) + self.extruder_temp_display.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle_topbar.svg"), + ) self.extruder_temp_display.setObjectName("extruder_temp_display") - self.header_main_layout.addWidget(self.extruder_temp_display, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.header_main_layout.addWidget( + self.extruder_temp_display, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.bed_temp_display = DisplayButton(parent=self.main_header_layout) self.bed_temp_display.setMinimumSize(QtCore.QSize(140, 60)) self.bed_temp_display.setMaximumSize(QtCore.QSize(160, 60)) self.bed_temp_display.setFlat(True) - self.bed_temp_display.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_plate.svg")) + self.bed_temp_display.setProperty( + "icon_pixmap", + QtGui.QPixmap( + ":/temperature_related/media/btn_icons/temperature_plate.svg" + ), + ) self.bed_temp_display.setObjectName("bed_temp_display") - self.header_main_layout.addWidget(self.bed_temp_display, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.header_main_layout.addWidget( + self.bed_temp_display, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.chamber_temp_display = DisplayButton(parent=self.main_header_layout) self.chamber_temp_display.setMinimumSize(QtCore.QSize(140, 60)) self.chamber_temp_display.setMaximumSize(QtCore.QSize(160, 60)) self.chamber_temp_display.setFlat(True) - self.chamber_temp_display.setProperty("icon_pixmap", QtGui.QPixmap(":/top_bar_icons/media/topbar/chamber_temp_topbar.svg")) - self.chamber_temp_display.setProperty("secondary_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/humidity.svg")) + self.chamber_temp_display.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/top_bar_icons/media/topbar/chamber_temp_topbar.svg"), + ) + self.chamber_temp_display.setProperty( + "secondary_pixmap", + QtGui.QPixmap(":/temperature_related/media/btn_icons/humidity.svg"), + ) self.chamber_temp_display.setObjectName("chamber_temp_display") - self.header_main_layout.addWidget(self.chamber_temp_display, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.header_main_layout.addWidget( + self.chamber_temp_display, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.filament_type_icon = IconButton(parent=self.main_header_layout) self.filament_type_icon.setMinimumSize(QtCore.QSize(60, 60)) self.filament_type_icon.setMaximumSize(QtCore.QSize(60, 60)) self.filament_type_icon.setFlat(True) - self.filament_type_icon.setProperty("icon_pixmap", QtGui.QPixmap(":/filament_related/media/btn_icons/load_filament.svg")) + self.filament_type_icon.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/filament_related/media/btn_icons/load_filament.svg"), + ) self.filament_type_icon.setObjectName("filament_type_icon") - self.header_main_layout.addWidget(self.filament_type_icon, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.header_main_layout.addWidget( + self.filament_type_icon, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.nozzle_size_icon = IconButton(parent=self.main_header_layout) self.nozzle_size_icon.setMinimumSize(QtCore.QSize(60, 60)) self.nozzle_size_icon.setMaximumSize(QtCore.QSize(60, 60)) self.nozzle_size_icon.setFlat(True) - self.nozzle_size_icon.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/standart_temperature.svg")) + self.nozzle_size_icon.setProperty( + "icon_pixmap", + QtGui.QPixmap( + ":/temperature_related/media/btn_icons/standard_temperature.svg" + ), + ) self.nozzle_size_icon.setObjectName("nozzle_size_icon") - self.header_main_layout.addWidget(self.nozzle_size_icon, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.header_main_layout.addWidget( + self.nozzle_size_icon, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.wifi_button = IconButton(parent=self.main_header_layout) self.wifi_button.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.wifi_button.sizePolicy().hasHeightForWidth()) @@ -291,9 +448,16 @@ def setupUi(self, MainWindow): self.wifi_button.setCheckable(False) self.wifi_button.setChecked(False) self.wifi_button.setFlat(True) - self.wifi_button.setProperty("icon_pixmap", QtGui.QPixmap(":/network/media/btn_icons/network/3bar_wifi.svg")) + self.wifi_button.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/network/media/btn_icons/network/wifi_3bar.svg"), + ) self.wifi_button.setObjectName("wifi_button") - self.header_main_layout.addWidget(self.wifi_button, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTop) + self.header_main_layout.addWidget( + self.wifi_button, + 0, + QtCore.Qt.AlignmentFlag.AlignRight | QtCore.Qt.AlignmentFlag.AlignTop, + ) self.header_main_layout.setStretch(1, 1) self.header_main_layout.setStretch(2, 1) self.header_main_layout.setStretch(3, 1) @@ -306,20 +470,38 @@ def setupUi(self, MainWindow): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.notification_btn.setProperty("button_type", _translate("MainWindow", "icon_text")) + self.notification_btn.setProperty( + "button_type", _translate("MainWindow", "icon_text") + ) self.extruder_temp_display.setText(_translate("MainWindow", "extruder")) - self.extruder_temp_display.setProperty("button_type", _translate("MainWindow", "secondary_display")) - self.extruder_temp_display.setProperty("name", _translate("MainWindow", "extruder_temperature_display")) + self.extruder_temp_display.setProperty( + "button_type", _translate("MainWindow", "secondary_display") + ) + self.extruder_temp_display.setProperty( + "name", _translate("MainWindow", "extruder_temperature_display") + ) self.bed_temp_display.setText(_translate("MainWindow", "bed")) - self.bed_temp_display.setProperty("button_type", _translate("MainWindow", "secondary_display")) + self.bed_temp_display.setProperty( + "button_type", _translate("MainWindow", "secondary_display") + ) self.chamber_temp_display.setText(_translate("MainWindow", "chamber")) - self.chamber_temp_display.setProperty("display_format", _translate("MainWindow", "dual")) - self.chamber_temp_display.setProperty("button_type", _translate("MainWindow", "display_secondary")) + self.chamber_temp_display.setProperty( + "display_format", _translate("MainWindow", "dual") + ) + self.chamber_temp_display.setProperty( + "button_type", _translate("MainWindow", "display_secondary") + ) self.filament_type_icon.setText(_translate("MainWindow", "Filament")) - self.filament_type_icon.setProperty("button_type", _translate("MainWindow", "icon_text")) + self.filament_type_icon.setProperty( + "button_type", _translate("MainWindow", "icon_text") + ) self.nozzle_size_icon.setText(_translate("MainWindow", "nozzle")) - self.nozzle_size_icon.setProperty("button_type", _translate("MainWindow", "icon_text")) + self.nozzle_size_icon.setProperty( + "button_type", _translate("MainWindow", "icon_text") + ) self.wifi_button.setProperty("button_type", _translate("MainWindow", "icon")) + + from lib.utils.blocks_tabwidget import NotificationQTabWidget from lib.utils.display_button import DisplayButton from lib.utils.icon_button import IconButton diff --git a/BlocksScreen/lib/ui/resources/icon_resources.qrc b/BlocksScreen/lib/ui/resources/icon_resources.qrc index 97d5ded9..d0e03fbd 100644 --- a/BlocksScreen/lib/ui/resources/icon_resources.qrc +++ b/BlocksScreen/lib/ui/resources/icon_resources.qrc @@ -2,16 +2,16 @@ media/btn_icons/network/static_ip.svg media/btn_icons/wifi_config.svg - media/btn_icons/network/0bar_wifi.svg - media/btn_icons/network/0bar_wifi_protected.svg - media/btn_icons/network/1bar_wifi.svg - media/btn_icons/network/1bar_wifi_protected.svg - media/btn_icons/network/2bar_wifi.svg - media/btn_icons/network/2bar_wifi_protected.svg - media/btn_icons/network/3bar_wifi.svg - media/btn_icons/network/3bar_wifi_protected.svg - media/btn_icons/network/4bar_wifi.svg - media/btn_icons/network/4bar_wifi_protected.svg + media/btn_icons/network/wifi_0bar.svg + media/btn_icons/network/wifi_0bar_protected.svg + media/btn_icons/network/wifi_1bar.svg + media/btn_icons/network/wifi_1bar_protected.svg + media/btn_icons/network/wifi_2bar.svg + media/btn_icons/network/wifi_2bar_protected.svg + media/btn_icons/network/wifi_3bar.svg + media/btn_icons/network/wifi_3bar_protected.svg + media/btn_icons/network/wifi_4bar.svg + media/btn_icons/network/wifi_4bar_protected.svg media/btn_icons/network/ethernet_connected.svg media/btn_icons/hotspot.svg @@ -24,14 +24,14 @@ media/btn_icons/yes.svg - media/btn_icons/file_icon.svg + media/btn_icons/file.svg media/btn_icons/reboot.svg media/btn_icons/restart_firmware.svg media/btn_icons/restart_klipper.svg media/btn_icons/restart_printer.svg - media/btn_icons/update-software-icon.svg + media/btn_icons/update_software.svg media/btn_icons/fan.svg @@ -40,11 +40,11 @@ media/btn_icons/humidity.svg - media/btn_icons/standart_temperature.svg + media/btn_icons/standard_temperature.svg media/btn_icons/temperature.svg media/btn_icons/temperature_plate.svg media/btn_icons/cooldown.svg - media/btn_icons/heatsoak_icon.svg + media/btn_icons/heatsoak.svg media/btn_icons/disable_steppers.svg @@ -56,11 +56,11 @@ media/btn_icons/speed.svg - media/btn_icons/add spool.svg - media/btn_icons/add filament.svg + media/btn_icons/add_spool.svg + media/btn_icons/add_filament.svg media/btn_icons/spoolman.svg - media/btn_icons/base dados spool 1.svg - media/btn_icons/check gate 1.svg + media/btn_icons/spool_database_1.svg + media/btn_icons/check_gate_1.svg media/btn_icons/eject.svg media/btn_icons/change_filament.svg media/btn_icons/filament_sensor.svg @@ -69,21 +69,20 @@ media/btn_icons/load_filament.svg media/btn_icons/unload_filament.svg media/btn_icons/loaded_spool.svg - media/btn_icons/half_spoll.svg + media/btn_icons/half_spool.svg media/btn_icons/notification.svg - media/btn_icons/usb_icon.svg - media/btn_icons/garbage-icon.svg + media/btn_icons/usb.svg + media/btn_icons/garbage.svg media/btn_icons/back.svg media/btn_icons/refresh.svg media/btn_icons/back_folder.svg - media/btn_icons/folderIcon.svg + media/btn_icons/folder.svg media/btn_icons/center_arrows.svg media/btn_icons/error.svg media/btn_icons/info.svg - media/btn_icons/LCD_settings.svg - media/btn_icons/LEDs.svg + media/btn_icons/leds.svg media/btn_icons/pause.svg media/btn_icons/play.svg media/btn_icons/print.svg @@ -99,7 +98,7 @@ media/btn_icons/unsee.svg - media/btn_icons/baby_step_icon.svg + media/btn_icons/baby_step.svg media/btn_icons/bed_levelling.svg media/btn_icons/eddy_mech.svg media/btn_icons/inductive.svg @@ -113,8 +112,6 @@ media/btn_icons/switch_zoom.svg - media/btn_icons/frequency_X.svg - media/btn_icons/frequency_Y.svg media/btn_icons/input_shaper.svg media/btn_icons/input_shaper_auto.svg media/btn_icons/input_shaper_manual.svg diff --git a/BlocksScreen/lib/ui/resources/icon_resources_rc.py b/BlocksScreen/lib/ui/resources/icon_resources_rc.py index ce9bce6c..27a0a9f1 100644 --- a/BlocksScreen/lib/ui/resources/icon_resources_rc.py +++ b/BlocksScreen/lib/ui/resources/icon_resources_rc.py @@ -1632,7 +1632,7 @@ \x2d\x32\x32\x2e\x36\x33\x2c\x37\x35\x2e\x38\x32\x2d\x32\x38\x2e\ \x31\x33\x2c\x31\x31\x38\x2e\x37\x36\x22\x2f\x3e\x0a\x20\x20\x3c\ \x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x04\x4f\ +\x00\x00\x0b\xce\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -1648,61 +1648,181 @@ \x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ \x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ \x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x33\x31\x2e\x32\x32\x22\ +\x20\x79\x3d\x22\x33\x34\x31\x2e\x30\x32\x22\x20\x77\x69\x64\x74\ +\x68\x3d\x22\x33\x38\x2e\x33\x33\x22\x20\x68\x65\x69\x67\x68\x74\ +\x3d\x22\x31\x34\x39\x2e\x39\x22\x2f\x3e\x0a\x20\x20\x3c\x72\x65\ +\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x78\x3d\x22\x34\x33\x31\x2e\x32\x32\x22\x20\x79\x3d\x22\x33\ +\x34\x31\x2e\x30\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\ +\x2e\x33\x33\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x34\x39\ +\x2e\x39\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\ +\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x33\x34\x2e\x34\x31\x20\x38\ +\x36\x36\x2e\x33\x35\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x39\ +\x30\x29\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x31\x36\x37\x2e\x32\x39\x2c\x35\x30\x30\x2e\x32\x39\x63\x2d\x37\ +\x2e\x30\x34\x2e\x31\x2d\x31\x32\x2e\x31\x2d\x31\x2e\x39\x32\x2d\ +\x31\x34\x2e\x37\x34\x2d\x36\x2e\x37\x31\x2d\x32\x2e\x32\x39\x2d\ +\x34\x2e\x31\x36\x2d\x34\x2e\x38\x35\x2d\x38\x2e\x32\x35\x2d\x36\ +\x2e\x38\x36\x2d\x31\x32\x2e\x34\x37\x2d\x34\x31\x2e\x34\x36\x2d\ +\x38\x38\x2e\x32\x37\x2d\x34\x31\x2e\x37\x35\x2d\x32\x33\x37\x2e\ +\x38\x33\x2c\x35\x2e\x36\x37\x2d\x33\x32\x34\x2e\x30\x34\x2c\x34\ +\x2e\x32\x36\x2d\x37\x2e\x34\x33\x2c\x36\x2e\x39\x33\x2d\x38\x2e\ +\x36\x39\x2c\x31\x38\x2e\x31\x37\x2d\x38\x2e\x37\x2c\x39\x2e\x35\ +\x31\x2d\x2e\x30\x31\x2c\x31\x39\x2e\x30\x32\x2c\x30\x2c\x32\x39\ +\x2e\x32\x33\x2c\x30\x2d\x37\x2e\x30\x38\x2d\x31\x30\x2e\x39\x38\ +\x2d\x31\x35\x2e\x31\x2d\x32\x30\x2e\x33\x35\x2d\x32\x38\x2e\x37\ +\x34\x2d\x32\x36\x2e\x36\x33\x68\x2d\x31\x30\x2e\x37\x39\x63\x2d\ +\x32\x33\x2e\x34\x31\x2c\x31\x30\x2e\x37\x34\x2d\x33\x34\x2e\x38\ +\x39\x2c\x33\x34\x2e\x37\x36\x2d\x34\x33\x2e\x31\x37\x2c\x35\x34\ +\x2e\x31\x31\x2d\x33\x36\x2e\x34\x32\x2c\x38\x38\x2e\x36\x2d\x33\ +\x37\x2e\x36\x32\x2c\x32\x34\x34\x2e\x34\x33\x2c\x31\x36\x2e\x34\ +\x34\x2c\x33\x32\x37\x2e\x35\x32\x2c\x37\x2e\x34\x31\x2c\x31\x30\ +\x2e\x39\x36\x2c\x32\x33\x2e\x38\x35\x2c\x32\x39\x2e\x39\x34\x2c\ +\x34\x31\x2e\x34\x32\x2c\x32\x31\x2e\x32\x33\x2c\x31\x31\x2e\x39\ +\x33\x2d\x35\x2e\x39\x35\x2c\x31\x38\x2e\x34\x33\x2d\x31\x34\x2e\ +\x37\x35\x2c\x32\x34\x2e\x38\x32\x2d\x32\x34\x2e\x33\x37\x2d\x31\ +\x31\x2e\x35\x31\x2e\x30\x34\x2d\x32\x30\x2e\x34\x39\x2d\x2e\x30\ +\x39\x2d\x33\x31\x2e\x34\x34\x2e\x30\x36\x5a\x22\x2f\x3e\x0a\x20\ +\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x37\x2e\x31\x38\x2c\ +\x32\x32\x37\x2e\x38\x63\x34\x2e\x35\x31\x2d\x31\x39\x2e\x39\x32\ +\x2c\x31\x30\x2e\x32\x36\x2d\x33\x39\x2e\x36\x32\x2c\x31\x39\x2e\ +\x34\x31\x2d\x35\x38\x2e\x37\x34\x2c\x31\x2e\x34\x32\x2d\x32\x2e\ +\x39\x36\x2e\x35\x32\x2d\x33\x2e\x35\x35\x2d\x33\x2e\x35\x33\x2d\ +\x33\x2e\x34\x38\x2d\x38\x2e\x35\x34\x2e\x31\x36\x2d\x31\x37\x2e\ +\x30\x39\x2e\x31\x39\x2d\x32\x35\x2e\x36\x33\x2d\x2e\x30\x32\x2d\ +\x33\x2e\x38\x31\x2d\x2e\x30\x39\x2d\x35\x2e\x33\x38\x2e\x38\x39\ +\x2d\x36\x2e\x37\x34\x2c\x33\x2e\x34\x2d\x32\x35\x2e\x34\x37\x2c\ +\x35\x31\x2e\x35\x31\x2d\x33\x30\x2e\x30\x39\x2c\x31\x30\x31\x2e\ +\x32\x2d\x33\x30\x2e\x37\x34\x2c\x31\x36\x30\x2e\x30\x39\x2d\x2e\ +\x30\x31\x2c\x34\x35\x2e\x39\x36\x2c\x36\x2e\x39\x32\x2c\x31\x30\ +\x34\x2e\x38\x33\x2c\x33\x30\x2e\x38\x2c\x31\x35\x30\x2e\x35\x31\ +\x2c\x31\x2e\x33\x2c\x32\x2e\x34\x32\x2c\x32\x2e\x36\x36\x2c\x33\ +\x2e\x36\x32\x2c\x36\x2e\x36\x32\x2c\x33\x2e\x35\x2c\x38\x2e\x35\ +\x33\x2d\x2e\x32\x34\x2c\x31\x37\x2e\x30\x39\x2d\x2e\x32\x36\x2c\ +\x32\x35\x2e\x36\x32\x2c\x30\x2c\x34\x2e\x39\x2e\x31\x35\x2c\x34\ +\x2e\x39\x33\x2d\x2e\x39\x36\x2c\x33\x2e\x35\x38\x2d\x33\x2e\x38\ +\x31\x2d\x33\x34\x2e\x37\x32\x2d\x37\x37\x2e\x39\x36\x2d\x33\x36\ +\x2d\x31\x37\x30\x2e\x33\x35\x2d\x31\x39\x2e\x33\x39\x2d\x32\x35\ +\x31\x2e\x34\x35\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ +\x3d\x22\x4d\x32\x35\x32\x2e\x30\x31\x2c\x31\x37\x37\x2e\x38\x32\ +\x63\x35\x2e\x35\x37\x2d\x31\x33\x2e\x32\x31\x2c\x35\x2e\x36\x39\ +\x2d\x31\x33\x2e\x31\x33\x2d\x31\x34\x2e\x30\x33\x2d\x31\x32\x2e\ +\x32\x35\x2d\x32\x2e\x39\x36\x2e\x31\x33\x2d\x34\x2e\x33\x31\x2e\ +\x38\x39\x2d\x35\x2e\x33\x32\x2c\x32\x2e\x37\x35\x2d\x32\x33\x2e\ +\x37\x38\x2c\x34\x34\x2e\x39\x39\x2d\x32\x38\x2e\x31\x35\x2c\x39\ +\x34\x2e\x34\x35\x2d\x33\x31\x2e\x39\x33\x2c\x31\x34\x32\x2e\x34\ +\x32\x2d\x2e\x37\x37\x2c\x39\x2e\x31\x39\x2d\x2e\x36\x2c\x31\x38\ +\x2e\x37\x37\x2e\x39\x2c\x32\x37\x2e\x34\x31\x2c\x31\x2e\x39\x2c\ +\x34\x35\x2e\x36\x38\x2c\x37\x2e\x34\x34\x2c\x38\x39\x2e\x38\x34\ +\x2c\x32\x36\x2e\x34\x39\x2c\x31\x33\x32\x2e\x39\x36\x2c\x35\x2e\ +\x33\x37\x2c\x31\x31\x2e\x39\x38\x2c\x35\x2e\x35\x2c\x31\x31\x2e\ +\x38\x34\x2c\x32\x33\x2e\x31\x37\x2c\x31\x31\x2e\x39\x32\x2c\x35\ +\x2e\x30\x32\x2e\x30\x32\x2c\x36\x2d\x2e\x36\x33\x2c\x34\x2e\x33\ +\x33\x2d\x34\x2e\x32\x35\x2d\x33\x39\x2e\x30\x33\x2d\x38\x37\x2e\ +\x38\x39\x2d\x33\x38\x2e\x35\x39\x2d\x32\x31\x32\x2e\x33\x31\x2d\ +\x33\x2e\x36\x31\x2d\x33\x30\x30\x2e\x39\x37\x5a\x22\x2f\x3e\x0a\ \x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x31\x2e\x34\x32\ -\x2c\x33\x35\x38\x2e\x31\x34\x63\x30\x2d\x31\x31\x2e\x36\x31\x2c\ -\x31\x2e\x37\x37\x2d\x32\x31\x2e\x34\x39\x2c\x35\x2e\x33\x32\x2d\ -\x32\x39\x2e\x36\x34\x2c\x33\x2e\x35\x35\x2d\x38\x2e\x31\x35\x2c\ -\x37\x2e\x38\x38\x2d\x31\x35\x2e\x33\x31\x2c\x31\x33\x2e\x30\x31\ -\x2d\x32\x31\x2e\x34\x39\x2c\x35\x2e\x31\x32\x2d\x36\x2e\x31\x37\ -\x2c\x31\x30\x2e\x33\x2d\x31\x32\x2e\x30\x34\x2c\x31\x35\x2e\x35\ -\x33\x2d\x31\x37\x2e\x36\x2c\x35\x2e\x32\x32\x2d\x35\x2e\x35\x36\ -\x2c\x39\x2e\x35\x36\x2d\x31\x31\x2e\x34\x39\x2c\x31\x33\x2e\x30\ -\x31\x2d\x31\x37\x2e\x37\x39\x2c\x33\x2e\x34\x35\x2d\x36\x2e\x33\ -\x2c\x35\x2e\x31\x37\x2d\x31\x33\x2e\x37\x37\x2c\x35\x2e\x31\x37\ -\x2d\x32\x32\x2e\x34\x32\x2c\x30\x2d\x31\x31\x2e\x38\x36\x2d\x33\ -\x2e\x37\x35\x2d\x32\x31\x2e\x34\x39\x2d\x31\x31\x2e\x32\x34\x2d\ -\x32\x38\x2e\x39\x2d\x37\x2e\x34\x39\x2d\x37\x2e\x34\x31\x2d\x31\ -\x37\x2e\x38\x34\x2d\x31\x31\x2e\x31\x32\x2d\x33\x31\x2e\x30\x35\ -\x2d\x31\x31\x2e\x31\x32\x2d\x31\x32\x2e\x30\x33\x2c\x30\x2d\x32\ -\x32\x2e\x33\x38\x2c\x32\x2e\x35\x34\x2d\x33\x31\x2e\x30\x35\x2c\ -\x37\x2e\x36\x2d\x38\x2e\x36\x38\x2c\x35\x2e\x30\x37\x2d\x31\x35\ -\x2e\x39\x37\x2c\x31\x32\x2e\x32\x39\x2d\x32\x31\x2e\x38\x38\x2c\ -\x32\x31\x2e\x36\x38\x6c\x2d\x32\x31\x2e\x35\x39\x2d\x31\x39\x2e\ -\x32\x37\x63\x38\x2e\x32\x38\x2d\x31\x33\x2e\x30\x39\x2c\x31\x38\ -\x2e\x37\x38\x2d\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x34\x39\x2d\ -\x33\x30\x2e\x35\x37\x2c\x31\x32\x2e\x37\x32\x2d\x37\x2e\x32\x38\ -\x2c\x32\x37\x2e\x37\x35\x2d\x31\x30\x2e\x39\x33\x2c\x34\x35\x2e\ -\x31\x2d\x31\x30\x2e\x39\x33\x2c\x32\x31\x2e\x32\x39\x2c\x30\x2c\ -\x33\x38\x2e\x33\x2c\x35\x2e\x38\x37\x2c\x35\x31\x2e\x30\x31\x2c\ -\x31\x37\x2e\x36\x2c\x31\x32\x2e\x37\x32\x2c\x31\x31\x2e\x37\x34\ -\x2c\x31\x39\x2e\x30\x37\x2c\x32\x37\x2e\x38\x35\x2c\x31\x39\x2e\ -\x30\x37\x2c\x34\x38\x2e\x33\x35\x2c\x30\x2c\x31\x32\x2e\x33\x35\ -\x2d\x31\x2e\x37\x37\x2c\x32\x32\x2e\x37\x33\x2d\x35\x2e\x33\x32\ -\x2c\x33\x31\x2e\x31\x32\x2d\x33\x2e\x35\x35\x2c\x38\x2e\x34\x2d\ -\x37\x2e\x39\x34\x2c\x31\x35\x2e\x37\x35\x2d\x31\x33\x2e\x31\x36\ -\x2c\x32\x32\x2e\x30\x35\x2d\x35\x2e\x32\x33\x2c\x36\x2e\x33\x2d\ -\x31\x30\x2e\x34\x2c\x31\x32\x2e\x32\x39\x2d\x31\x35\x2e\x35\x32\ -\x2c\x31\x37\x2e\x39\x37\x2d\x35\x2e\x31\x33\x2c\x35\x2e\x36\x39\ -\x2d\x39\x2e\x34\x36\x2c\x31\x31\x2e\x39\x32\x2d\x31\x33\x2e\x30\ -\x31\x2c\x31\x38\x2e\x37\x31\x2d\x33\x2e\x35\x35\x2c\x36\x2e\x38\ -\x2d\x35\x2e\x33\x32\x2c\x31\x35\x2e\x30\x31\x2d\x35\x2e\x33\x32\ -\x2c\x32\x34\x2e\x36\x34\x68\x2d\x32\x39\x2e\x35\x37\x5a\x4d\x33\ -\x30\x35\x2e\x37\x36\x2c\x34\x30\x37\x2e\x33\x32\x63\x2d\x35\x2e\ -\x35\x34\x2c\x30\x2d\x31\x30\x2e\x30\x33\x2d\x31\x2e\x38\x31\x2d\ -\x31\x33\x2e\x34\x36\x2d\x35\x2e\x34\x34\x2d\x33\x2e\x34\x34\x2d\ -\x33\x2e\x36\x33\x2d\x35\x2e\x31\x36\x2d\x37\x2e\x39\x32\x2d\x35\ -\x2e\x31\x36\x2d\x31\x32\x2e\x38\x39\x73\x31\x2e\x37\x32\x2d\x39\ -\x2e\x35\x2c\x35\x2e\x31\x36\x2d\x31\x33\x2e\x30\x33\x63\x33\x2e\ -\x34\x34\x2d\x33\x2e\x35\x33\x2c\x37\x2e\x39\x32\x2d\x35\x2e\x33\ -\x2c\x31\x33\x2e\x34\x36\x2d\x35\x2e\x33\x73\x39\x2e\x37\x34\x2c\ -\x31\x2e\x37\x37\x2c\x31\x33\x2e\x31\x38\x2c\x35\x2e\x33\x63\x33\ -\x2e\x34\x34\x2c\x33\x2e\x35\x34\x2c\x35\x2e\x31\x36\x2c\x37\x2e\ -\x38\x38\x2c\x35\x2e\x31\x36\x2c\x31\x33\x2e\x30\x33\x73\x2d\x31\ -\x2e\x37\x32\x2c\x39\x2e\x32\x37\x2d\x35\x2e\x31\x36\x2c\x31\x32\ -\x2e\x38\x39\x63\x2d\x33\x2e\x34\x34\x2c\x33\x2e\x36\x33\x2d\x37\ -\x2e\x38\x33\x2c\x35\x2e\x34\x34\x2d\x31\x33\x2e\x31\x38\x2c\x35\ -\x2e\x34\x34\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x30\x35\ +\x2c\x31\x37\x37\x2e\x37\x37\x63\x31\x2e\x35\x34\x2d\x33\x2e\x39\ +\x32\x2c\x36\x2e\x37\x39\x2d\x38\x2e\x38\x37\x2c\x33\x2e\x39\x36\ +\x2d\x31\x31\x2e\x33\x39\x2d\x32\x2e\x38\x35\x2d\x32\x2e\x35\x35\ +\x2d\x31\x30\x2e\x39\x38\x2d\x2e\x34\x35\x2d\x31\x36\x2e\x37\x36\ +\x2d\x2e\x38\x2d\x33\x2e\x39\x32\x2d\x2e\x32\x34\x2d\x35\x2e\x32\ +\x38\x2c\x31\x2e\x30\x36\x2d\x36\x2e\x36\x33\x2c\x33\x2e\x35\x2d\ +\x32\x35\x2e\x33\x2c\x35\x30\x2e\x38\x35\x2d\x33\x30\x2e\x32\x32\ +\x2c\x31\x30\x31\x2e\x35\x36\x2d\x33\x30\x2e\x37\x32\x2c\x31\x35\ +\x38\x2e\x37\x33\x2d\x2e\x32\x2c\x34\x34\x2e\x38\x39\x2c\x36\x2e\ +\x33\x38\x2c\x39\x39\x2e\x32\x39\x2c\x32\x36\x2e\x38\x2c\x31\x34\ +\x33\x2e\x37\x37\x2c\x35\x2e\x33\x39\x2c\x31\x31\x2e\x34\x36\x2c\ +\x35\x2e\x36\x2c\x31\x31\x2e\x32\x39\x2c\x32\x32\x2e\x32\x33\x2c\ +\x31\x31\x2e\x34\x35\x2c\x35\x2e\x32\x33\x2e\x30\x35\x2c\x36\x2e\ +\x39\x35\x2d\x2e\x33\x34\x2c\x34\x2e\x39\x38\x2d\x34\x2e\x35\x38\ +\x2d\x33\x39\x2e\x34\x37\x2d\x38\x38\x2e\x35\x38\x2d\x33\x38\x2e\ +\x30\x34\x2d\x32\x31\x31\x2e\x31\x39\x2d\x33\x2e\x38\x36\x2d\x33\ +\x30\x30\x2e\x36\x38\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ +\x64\x3d\x22\x4d\x33\x31\x31\x2e\x36\x35\x2c\x39\x31\x2e\x33\x32\ +\x63\x37\x2e\x31\x39\x2e\x30\x38\x2c\x31\x34\x2e\x33\x31\x2e\x37\ +\x36\x2c\x32\x31\x2e\x31\x31\x2c\x32\x2e\x36\x2c\x31\x33\x2e\x35\ +\x34\x2c\x33\x2e\x36\x35\x2c\x32\x30\x2e\x36\x2c\x31\x30\x2e\x38\ +\x36\x2c\x32\x32\x2e\x34\x2c\x32\x30\x2e\x39\x32\x2c\x32\x2e\x30\ +\x31\x2c\x31\x31\x2e\x32\x31\x2d\x2e\x37\x38\x2c\x32\x32\x2e\x30\ +\x32\x2d\x35\x2e\x33\x33\x2c\x33\x32\x2e\x36\x39\x71\x2d\x32\x2e\ +\x31\x39\x2c\x35\x2e\x31\x33\x2c\x35\x2e\x37\x32\x2c\x35\x2e\x31\ +\x33\x68\x35\x2e\x34\x63\x31\x33\x2e\x30\x32\x2c\x30\x2c\x31\x33\ +\x2e\x30\x36\x2c\x30\x2c\x31\x36\x2e\x30\x38\x2d\x39\x2e\x31\x37\ +\x2c\x31\x32\x2e\x31\x38\x2d\x33\x33\x2e\x36\x38\x2d\x33\x2e\x35\ +\x36\x2d\x36\x34\x2e\x31\x35\x2d\x34\x39\x2e\x36\x33\x2d\x36\x39\ +\x2d\x32\x31\x2e\x34\x2d\x32\x2e\x37\x2d\x32\x31\x2e\x33\x32\x2d\ +\x32\x2e\x34\x37\x2d\x32\x30\x2e\x39\x38\x2c\x31\x32\x2e\x38\x39\ +\x2e\x30\x36\x2c\x32\x2e\x39\x34\x2c\x31\x2e\x32\x32\x2c\x33\x2e\ +\x39\x2c\x35\x2e\x32\x33\x2c\x33\x2e\x39\x34\x5a\x22\x2f\x3e\x0a\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x32\x2e\x35\x34\ +\x2c\x34\x31\x35\x2e\x39\x37\x63\x30\x2d\x31\x34\x2e\x32\x33\x2c\ +\x32\x2e\x35\x32\x2d\x32\x37\x2e\x38\x36\x2c\x37\x2e\x31\x34\x2d\ +\x34\x30\x2e\x34\x39\x2d\x36\x2e\x37\x38\x2d\x36\x36\x2e\x34\x39\ +\x2d\x2e\x39\x35\x2d\x31\x33\x33\x2e\x37\x35\x2c\x32\x32\x2e\x31\ +\x35\x2d\x31\x39\x38\x2c\x31\x2e\x33\x2d\x33\x2e\x37\x2c\x35\x2e\ +\x30\x38\x2d\x38\x2e\x37\x36\x2c\x33\x2e\x30\x34\x2d\x31\x30\x2e\ +\x38\x33\x2d\x32\x2e\x38\x36\x2d\x32\x2e\x38\x39\x2d\x31\x30\x2e\ +\x33\x39\x2d\x2e\x35\x2d\x31\x34\x2e\x34\x33\x2d\x31\x2e\x30\x31\ +\x2d\x34\x2e\x38\x31\x2c\x30\x2d\x38\x2e\x32\x33\x2e\x32\x36\x2d\ +\x31\x31\x2e\x35\x34\x2d\x2e\x30\x36\x2d\x35\x2e\x30\x32\x2d\x2e\ +\x34\x38\x2d\x36\x2e\x39\x31\x2c\x31\x2e\x31\x37\x2d\x38\x2e\x34\ +\x39\x2c\x34\x2e\x33\x35\x2d\x33\x35\x2e\x35\x31\x2c\x37\x33\x2e\ +\x36\x35\x2d\x33\x36\x2e\x36\x34\x2c\x31\x36\x39\x2e\x35\x34\x2d\ +\x32\x31\x2e\x31\x35\x2c\x32\x34\x36\x2e\x39\x37\x2c\x34\x2e\x35\ +\x33\x2c\x32\x31\x2e\x32\x2c\x31\x30\x2e\x39\x32\x2c\x34\x32\x2e\ +\x31\x31\x2c\x32\x31\x2e\x34\x34\x2c\x36\x32\x2e\x32\x39\x2c\x31\ +\x2e\x34\x34\x2c\x32\x2e\x37\x36\x2c\x33\x2e\x32\x33\x2c\x34\x2e\ +\x30\x38\x2c\x37\x2e\x36\x37\x2c\x33\x2e\x38\x39\x2c\x34\x2e\x39\ +\x38\x2d\x2e\x32\x31\x2c\x39\x2e\x39\x39\x2d\x2e\x32\x38\x2c\x31\ +\x34\x2e\x39\x39\x2d\x2e\x32\x31\x2d\x31\x33\x2e\x31\x33\x2d\x31\ +\x39\x2d\x32\x30\x2e\x38\x33\x2d\x34\x32\x2e\x30\x35\x2d\x32\x30\ +\x2e\x38\x33\x2d\x36\x36\x2e\x39\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\x31\x38\x2c\x32\x39\ +\x38\x2e\x31\x34\x63\x2d\x32\x2e\x32\x32\x2d\x32\x34\x2e\x38\x32\ +\x2d\x37\x2e\x32\x37\x2d\x34\x32\x2e\x31\x37\x2d\x31\x33\x2e\x31\ +\x35\x2d\x34\x32\x2e\x31\x37\x73\x2d\x31\x31\x2e\x33\x37\x2c\x31\ +\x38\x2e\x38\x39\x2d\x31\x33\x2e\x34\x33\x2c\x34\x35\x2e\x34\x36\ +\x63\x38\x2e\x35\x34\x2d\x32\x2e\x30\x36\x2c\x31\x37\x2e\x34\x33\ +\x2d\x33\x2e\x32\x2c\x32\x36\x2e\x35\x38\x2d\x33\x2e\x32\x39\x5a\ +\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\ +\x33\x2e\x34\x36\x2c\x33\x31\x38\x2e\x39\x37\x63\x31\x2e\x36\x31\ +\x2d\x34\x33\x2e\x38\x35\x2c\x31\x30\x2e\x36\x36\x2d\x38\x35\x2e\ +\x30\x33\x2c\x32\x31\x2e\x33\x39\x2d\x31\x32\x32\x2e\x34\x2c\x34\ +\x2e\x30\x35\x2d\x31\x34\x2e\x31\x32\x2c\x31\x30\x2e\x31\x37\x2d\ +\x32\x37\x2e\x38\x31\x2c\x31\x38\x2e\x34\x36\x2d\x34\x30\x2e\x39\ +\x39\x2c\x32\x2e\x35\x37\x2d\x34\x2e\x30\x39\x2c\x35\x2e\x37\x38\ +\x2d\x37\x2e\x32\x36\x2c\x31\x32\x2e\x37\x35\x2d\x37\x2e\x31\x38\ +\x2c\x36\x2e\x36\x36\x2e\x30\x37\x2c\x39\x2e\x36\x38\x2c\x33\x2e\ +\x31\x35\x2c\x31\x32\x2e\x31\x31\x2c\x37\x2e\x30\x38\x2c\x31\x31\ +\x2e\x39\x33\x2c\x31\x39\x2e\x32\x39\x2c\x31\x38\x2e\x36\x39\x2c\ +\x33\x39\x2e\x36\x32\x2c\x32\x34\x2e\x30\x36\x2c\x36\x30\x2e\x32\ +\x33\x2c\x36\x2e\x35\x31\x2c\x32\x36\x2e\x33\x39\x2c\x31\x30\x2e\ +\x38\x38\x2c\x35\x36\x2e\x33\x37\x2c\x31\x32\x2e\x33\x39\x2c\x38\ +\x37\x2e\x34\x37\x2c\x38\x2e\x38\x37\x2c\x32\x2e\x36\x39\x2c\x31\ +\x37\x2e\x33\x2c\x36\x2e\x34\x2c\x32\x35\x2e\x31\x36\x2c\x31\x30\ +\x2e\x39\x39\x2d\x2e\x36\x39\x2d\x33\x32\x2e\x32\x34\x2d\x34\x2e\ +\x32\x2d\x36\x32\x2e\x33\x32\x2d\x39\x2e\x33\x36\x2d\x38\x35\x2e\ +\x38\x36\x2d\x36\x2e\x37\x31\x2d\x33\x30\x2e\x38\x36\x2d\x32\x32\ +\x2e\x39\x38\x2d\x39\x30\x2e\x37\x35\x2d\x35\x39\x2e\x31\x38\x2d\ +\x31\x30\x36\x2e\x35\x38\x68\x2d\x31\x30\x2e\x37\x39\x63\x2d\x32\ +\x30\x2e\x34\x2c\x39\x2e\x31\x39\x2d\x33\x30\x2e\x38\x31\x2c\x32\ +\x37\x2e\x38\x37\x2d\x33\x38\x2e\x39\x38\x2c\x34\x34\x2e\x35\x33\ +\x2d\x32\x32\x2e\x30\x35\x2c\x34\x38\x2e\x34\x38\x2d\x33\x31\x2e\ +\x39\x34\x2c\x31\x31\x31\x2e\x30\x32\x2d\x33\x30\x2c\x31\x37\x32\ +\x2e\x33\x38\x2c\x36\x2e\x34\x37\x2d\x37\x2e\x34\x34\x2c\x31\x33\ +\x2e\x38\x37\x2d\x31\x34\x2e\x30\x35\x2c\x32\x32\x2d\x31\x39\x2e\ +\x36\x37\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ \x00\x00\x01\xfd\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ @@ -1816,32 +1936,225 @@ \x37\x37\x2e\x34\x38\x2d\x33\x39\x2e\x34\x39\x2c\x31\x38\x31\x2e\ \x34\x38\x2d\x33\x31\x2e\x33\x2c\x32\x37\x38\x2e\x31\x68\x32\x34\ \x2e\x33\x38\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x1b\x41\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x34\x32\x34\ -\x31\x34\x33\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ -\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x39\x35\x2e\x31\ -\x39\x2c\x32\x39\x31\x2e\x39\x6c\x31\x30\x2e\x33\x36\x2d\x37\x39\ -\x63\x2e\x39\x32\x2d\x37\x2d\x36\x2e\x33\x31\x2d\x31\x32\x2e\x33\ -\x31\x2d\x31\x33\x2e\x30\x39\x2d\x39\x2e\x35\x39\x6c\x2d\x32\x33\ -\x2e\x32\x39\x2c\x39\x2e\x33\x34\x63\x2d\x32\x2e\x33\x32\x2d\x32\ -\x37\x2e\x37\x32\x2c\x33\x2e\x32\x33\x2d\x35\x38\x2e\x33\x33\x2c\ -\x32\x39\x2e\x31\x36\x2d\x38\x34\x43\x31\x38\x32\x2e\x39\x34\x2c\ -\x34\x35\x2c\x32\x35\x36\x2c\x31\x30\x34\x2e\x36\x36\x2c\x32\x35\ -\x36\x2c\x31\x30\x34\x2e\x36\x36\x63\x2d\x34\x39\x2e\x31\x34\x2d\ -\x34\x36\x2e\x32\x36\x2d\x31\x32\x39\x2d\x34\x34\x2e\x31\x39\x2d\ -\x31\x37\x38\x2e\x32\x39\x2c\x34\x2e\x36\x32\x43\x34\x36\x2c\x31\ -\x34\x30\x2e\x37\x2c\x33\x34\x2e\x36\x33\x2c\x31\x38\x33\x2e\x38\ -\x32\x2c\x34\x33\x2e\x36\x35\x2c\x32\x32\x32\x2e\x39\x4c\x31\x37\ +\x00\x00\x0b\xea\ +\x00\ +\x00\x2a\xa1\x78\x9c\xed\x9a\x4b\x8f\x5c\xc7\x0d\x85\xf7\xf9\x15\ +\x8d\xce\xb6\x8a\x2a\xb2\xc8\x7a\x38\x1a\x1b\xc8\x22\xab\x68\x97\ +\x6c\xb4\x09\x84\xd6\x58\x16\xd0\x96\x1c\x8d\x20\xc9\x08\xf2\xdf\ +\x83\x8f\x77\x14\x1b\x06\x1c\xc9\x81\xbd\x31\x66\xa1\x9e\x7e\xdc\ +\xbe\x55\x45\x9e\x73\x78\xc8\xd6\xe3\xaf\x3e\x7c\x7b\x3d\xbd\xbb\ +\x7d\x73\xf7\xf2\xf5\xab\x9b\xb3\x4a\x3b\x9f\x6e\x5f\x5d\x5e\x3f\ +\x7f\xf9\xea\xc5\xcd\xf9\xef\x7f\xfb\x4b\x5d\xe7\xaf\xbe\xfc\xc3\ +\xe3\xbb\x77\x2f\x4e\x2f\x9f\xdf\x9c\xff\xfa\xec\xfb\xdb\x37\xff\ +\xd0\xf3\xe9\xf9\xb3\xb7\xcf\xea\xab\x67\xdf\xde\xde\xbf\x77\xd2\ +\xf3\xe9\xc3\xb7\xd7\x57\x77\x37\xe7\x6f\xde\xbe\xfd\xee\x8b\x47\ +\x8f\xde\xbf\x7f\x2f\xef\xbb\xbc\x7e\xf3\xe2\x91\xb5\xd6\x1e\xdd\ +\xbd\x7b\x71\x3e\xbd\x7b\x79\xfb\xfe\xcf\xaf\x3f\xdc\x9c\xdb\xa9\ +\x9d\x46\xcb\x7f\xe7\x2f\xff\x70\x3a\x3d\x7e\x7e\xfb\xf5\x1d\x4f\ +\x4e\xa7\xc7\x77\x6f\xbf\xbf\xde\x1e\xcf\x4f\x27\xb9\x5c\xef\xaa\ +\x9e\xfe\x75\xff\xf2\x74\xfa\xfa\xe5\xf5\xfa\xc5\xe9\x8f\xb7\xed\ +\xb6\x3d\xff\xfa\x4f\xf7\x6f\xff\xfb\xf8\xe6\xa3\xff\x7e\xf5\xf1\ +\xa3\x8f\x37\x7c\xfc\xdd\xb3\xb7\xdf\x9c\x2e\xd7\x67\x77\x77\x37\ +\xe7\xbc\xd9\xf9\xf4\xfc\xe6\xfc\xa4\x6f\x95\xbd\x4b\xb4\x21\xba\ +\x2e\xad\x98\xb8\x15\x93\x66\xc5\xa5\x8d\xd2\x65\xf3\x64\x5e\xa3\ +\x49\x5b\xa2\xe3\xe2\xe2\x26\x5a\x86\x98\x56\xe5\xe2\x21\x73\xd5\ +\x90\xb9\xae\xd2\x7a\x15\x1b\x97\x2a\x3a\xaa\x8a\x59\x55\x51\xaf\ +\x5d\xac\x57\x95\x35\x6a\x97\xe5\xd7\xea\x53\x9c\xcf\x7d\x4b\xf3\ +\xaa\x63\x8b\xaf\xe2\x26\x4d\xab\xc4\xbe\xb8\xd8\xac\xd2\x56\x19\ +\x12\xa3\xda\xf1\x6c\x59\x0d\xd9\xc1\x17\x64\x58\x15\xf7\x6a\xe2\ +\xec\x60\xd5\x2e\xbb\x4a\x5f\x55\x9c\x05\xfb\xe4\x61\x57\xe3\x2d\ +\x36\x78\xad\xee\xd2\xd9\x41\xe3\x73\xf7\xda\x87\xd8\xa8\xa2\x56\ +\xb5\x77\x89\x55\xbc\x4b\x98\xb4\xfe\x4d\xbb\xa8\x78\x2f\xad\x0c\ +\x51\xee\x59\x06\xab\x85\x58\x17\x65\x31\x96\x77\xab\x26\x8b\x55\ +\x86\x55\x27\x0c\x32\x2b\x31\xe0\xab\x9c\x78\x55\x3b\x02\xa0\xeb\ +\x5a\x43\xa5\x5b\x15\xbb\x54\x95\x19\x55\x1a\x51\x68\x43\x08\xcb\ +\x9a\x45\x8f\x30\xb6\x5e\x78\xe0\x9e\x5a\x4c\x36\x1b\x1d\x5a\x42\ +\xba\x5d\xab\xe8\x2c\x3a\xf3\x0c\xbd\xcb\x74\xf1\x71\xa9\x5d\x5c\ +\xa5\x45\x1d\xa2\xbb\xe4\xad\xd9\x2a\xb9\x62\x11\x65\x1d\xd9\xab\ +\x84\x2c\xd2\x69\xb3\x0c\xa2\x1c\x9c\x56\x45\x7b\xd1\x8c\xff\xee\ +\x45\x27\xb7\x9c\xc5\x64\xf4\x2a\x6d\xe7\xa2\x95\xbb\x2e\x69\x33\ +\x9f\xe4\x5e\x5a\xe9\x62\xc1\x4e\x5d\xb6\xa8\x5d\xa7\x8c\x21\x7d\ +\xe7\xde\xe7\x14\x9b\x4f\xcf\x8f\x12\x69\x2f\xee\x01\xfc\x73\x88\ +\x33\x97\xad\x45\x57\x97\xee\x97\xaa\x2e\xb6\xab\x35\x89\x4e\xb0\ +\xf6\xac\xdd\xea\x5c\x62\xa4\x69\xf7\xda\x95\x83\x87\xac\x5d\x87\ +\x11\xf2\xc5\xfe\xb6\x8b\x73\x64\xef\xd5\x9b\xac\x05\x6e\x7b\x55\ +\x0e\xee\x45\x9b\xcc\xaa\xb6\xc4\x4b\xdf\x12\x75\x89\x71\x9a\xc9\ +\x05\x04\xdd\x54\xc6\xae\x99\xf9\xae\xa2\x51\xba\xf4\x51\x9c\x87\ +\x29\xb6\xca\x16\x23\x3e\x73\x14\x4d\x3a\xa8\x41\x91\x2d\xbd\x17\ +\x9b\x12\xb3\x68\x88\x29\x90\xdd\xbb\xe8\x96\xe9\x25\x96\xa8\x13\ +\xcb\x36\x8b\x1e\x3b\xd2\x21\x6b\x14\xdd\x4b\x06\xb9\x18\xc5\x36\ +\x87\xd8\x7c\x75\x36\xd0\xc7\xd1\x66\x09\x85\x1f\xb1\x24\x9e\x3e\ +\xb1\x48\xfc\x59\xdb\xd2\xe3\x5a\x75\x73\xc1\x90\x1e\x97\x0a\xeb\ +\xb4\xb0\x4c\x5d\x41\x06\x61\x63\x55\x9b\xa2\xce\x9b\xea\x07\x5d\ +\xe6\xaa\x3d\x58\x52\x1b\x21\xea\x33\xc9\x60\xe0\x9e\x0b\x20\xb4\ +\xca\x56\xe0\x42\x2a\x97\xd7\x79\x24\x95\xf4\x0f\x2b\x70\xac\x74\ +\x80\x00\xb1\x79\x00\x1b\x86\x0c\xac\x28\xfb\x60\xfc\xd8\x45\x9d\ +\xbd\x2d\xe9\x5a\xcc\xcb\xe4\xac\xbe\xc4\xb8\x24\xac\xcc\x2e\x31\ +\x78\x3a\x8b\x0d\xf1\xd4\x12\x28\x16\xd0\x60\x96\x39\x64\x3b\x3b\ +\x34\x25\x98\x29\x20\x3d\x08\x74\x1f\x55\x21\x5b\x86\x4f\x39\x95\ +\xf6\x62\x12\x13\x6d\x48\x6c\x8a\x8e\x0c\x49\x51\x09\x65\xdf\x6c\ +\x52\xa3\x22\x4c\x64\x00\x1c\x04\x39\x31\xd4\xe7\x1e\x94\x3f\x0f\ +\x47\x6b\x2a\x73\x17\x1b\xc4\xfa\x42\xc8\xd5\x20\xe3\x24\x74\x4e\ +\xb0\xda\xae\x31\x64\x68\x85\xfe\xee\x12\x01\x76\xa2\xee\xc8\xb8\ +\x5b\x55\xdb\xf0\xcd\x4d\x56\xbf\x8a\x47\x89\x29\x6b\x5e\xc0\xc2\ +\x92\x19\x65\xb1\x47\x65\x93\x1c\x76\x27\x00\x7d\x97\xde\x09\xb5\ +\xb9\x58\xd9\x4d\x7c\x00\x46\x8e\xc0\x9f\x7c\xb1\x77\xf1\x29\xd3\ +\x64\x8c\xa2\xad\x13\x3d\xd2\x54\xd4\x5d\xe6\xac\x09\xf0\x85\x96\ +\x0e\x62\xa2\x5b\xf6\x26\x78\x2b\x8a\x35\xd1\x6a\x21\x3a\xaf\x12\ +\x0b\x70\xf5\x7d\x01\x6f\x2b\x12\xf2\xbd\x2e\x08\x04\x3d\xba\x26\ +\x88\x86\xa3\x82\xbe\x9f\x3e\x59\x81\xe4\xda\x26\x51\x97\x86\x42\ +\x79\x15\x73\x92\x60\x55\x56\xe9\xb2\x2a\x82\xc8\xab\x23\x3e\x51\ +\x65\x39\xe9\x98\x15\x89\x40\x8a\xc3\xa0\x1b\x81\x4d\x29\x72\x34\ +\xcc\x29\x01\x4a\x5d\x28\x5d\xc2\xc9\xd2\x00\xd4\x87\x78\x73\x75\ +\x54\x19\x8e\x70\x56\xad\x46\x88\x8d\xdd\xbb\xd8\xaa\x43\x02\xca\ +\x6e\x05\x35\xdd\x53\x89\xfb\x46\xa5\xe7\x44\x72\xe1\xb1\x74\xbe\ +\x1c\x99\x3e\xa8\x40\xa4\xc5\x08\x9a\xf1\x9e\x65\x65\x00\x4d\x33\ +\x25\x3a\xa0\x3c\xcf\x22\x00\x8d\xa8\x22\xeb\x70\xff\x90\xec\x40\ +\xd7\x1b\x7a\xe9\xe4\x7e\x17\x83\xb4\x90\xc5\x64\xb9\x58\x2f\x91\ +\x44\x90\x00\xfe\x04\x86\x20\xf1\xaf\x2d\x0e\x8b\xdc\x0e\x10\xba\ +\xef\x49\xd1\x0a\x5f\xe6\x71\xe4\xe3\x7a\xfa\x44\x75\x49\xd3\xd2\ +\xdb\x14\x8b\x4b\x05\xd9\x14\x4b\x4f\xbd\x90\xe9\x55\x17\xa7\xef\ +\x32\x38\x22\x11\x18\x33\x0b\x08\xfc\xe5\xad\xb6\xea\x96\x4d\xf4\ +\x07\x35\x6f\xc2\x53\xdf\x35\xa8\xe0\x4b\x46\xf0\x0c\x76\x4f\xa7\ +\x2c\xa4\xb4\x11\x13\xf4\xcd\x66\xe1\xe0\xbc\x26\x23\x6c\x7c\x96\ +\x2d\x2b\x10\x8a\xa2\x94\xed\x4f\xb2\xa7\xdb\x46\x1b\x3a\x62\xd3\ +\x2f\x55\x87\xf4\x94\x41\xad\x3e\xc4\x27\x9a\xd7\xbc\x8e\x2d\x23\ +\x4a\xcf\x12\x16\x1d\x95\x51\xcb\x73\xb6\x45\x2c\x20\xfc\xac\x3a\ +\x12\x9e\x09\x33\xa0\xad\x15\x7c\xd4\xd1\xb2\x1c\x66\x21\x5e\x9a\ +\xc7\x1f\xb2\xe3\x8a\xde\x46\xc8\x8a\x8b\xb4\x28\xba\x88\x72\x6f\ +\xd2\x77\xae\x33\x4b\x34\x1e\x91\xe2\x5d\xe2\x08\x51\xca\x91\x3a\ +\xa1\x82\x21\x1d\x9e\x98\x74\x22\xc2\xc7\x43\xe6\xae\x4e\xc1\xec\ +\xbc\x0b\xd0\x10\x98\x40\x23\x2d\xc3\x35\x64\x8f\x1a\x12\x8e\xfa\ +\x45\x4f\xa5\xe2\x8e\xb9\x65\xd8\x7c\xad\x98\x8c\x08\xb1\xf5\xf4\ +\xc9\xea\x24\xa1\x2f\x54\x9e\x82\x3d\xd1\xaf\x36\xa1\x80\x92\x12\ +\x94\x23\xc4\x35\x0b\x72\xed\x68\x98\x89\xee\x4a\x6e\xc9\xdb\xda\ +\x6c\x61\x82\x95\x56\x1a\x77\xce\x47\xd6\x49\xaf\x41\x88\x8c\x90\ +\xa5\x89\x70\x51\x20\x38\xef\x1d\x41\xd2\x32\xc5\x86\x9c\xe0\x86\ +\x40\xea\x51\xd5\x8c\x4b\x15\x75\xef\x49\x75\xd9\x1b\x42\x77\x74\ +\x7a\xa8\x8c\x90\xed\x32\x30\x27\x44\xf6\x40\x0c\xac\x08\xfc\xa0\ +\x73\x66\x41\x51\xb8\xdf\x22\xc8\xdc\x2a\x3d\x4d\x48\xa3\xc6\xc1\ +\x15\x25\xbc\xa8\xc7\xa6\xee\x6c\x8c\x24\xa6\x66\x8f\x12\x32\xe3\ +\x00\xfe\xee\xa5\xef\x96\x8e\xb1\x23\x79\x14\x8a\x2c\xd1\x19\xa8\ +\x48\x81\x60\x95\xce\x49\x06\x47\xec\x8b\xf2\xbf\x2b\xf0\x99\x79\ +\xa8\x8a\xe2\xe3\x7b\x34\xc9\x41\xed\x1f\x56\x8d\xa4\x28\x0e\xa5\ +\x78\x96\x79\x70\x3e\x51\xc9\x8d\x94\xa5\x46\x66\xec\x3f\x0b\xe0\ +\x1d\x1f\xe1\x42\x75\xc0\x74\xa6\x2b\xe8\xd5\x46\x56\xf9\x8d\x37\ +\xf5\x4e\x84\x2c\x28\x59\x9d\xf0\x25\xa6\xa3\xce\x9e\x71\x9f\xb2\ +\x7a\x55\xd5\x7b\xbf\xb5\xad\xa2\x8f\x94\xb6\xaa\xec\x7f\xd6\x89\ +\x63\x89\x95\x89\x04\x8d\x57\x60\x88\xa9\xd8\x97\x2c\x1b\x89\x03\ +\x55\x2c\x4a\x7e\x81\x75\x51\xa4\x8e\xc2\x50\x8a\x31\x38\x63\x16\ +\x5b\x29\xc5\x9e\x5e\x30\x32\x89\x2b\xcb\x78\xfa\x1c\x8d\x2c\x6e\ +\x96\xf6\x85\x8b\xbc\xe8\x3a\x14\x47\x6c\x64\xc1\x84\x75\x81\xb5\ +\x89\x91\xc5\xb7\x04\x79\xa5\x74\x28\x49\x74\xb2\xe0\xe8\x86\xd5\ +\x0d\x22\x23\x73\xe0\xa2\xe3\x5a\x31\x72\x41\x69\x4a\xec\xeb\x2e\ +\x3e\x5c\xb6\x5f\xaa\x73\xe5\x10\x03\xfa\x83\x42\x30\xa0\x3b\xcc\ +\xd3\x43\xe5\x27\xbe\x60\x79\xcd\xba\x46\xb9\xd8\x18\x25\x94\x48\ +\x11\x72\x8c\x12\x0b\xa7\xb4\x0f\xf8\xd1\x48\xac\x51\x1b\xc8\x41\ +\x7e\x96\xa7\xe3\x3e\x68\x48\xca\x27\x0a\x21\xb3\x97\x01\xca\x69\ +\x1f\x88\x23\x05\x1e\xb9\xdc\x15\x46\x83\x04\xc8\x14\x68\xf5\x04\ +\x96\x13\x80\xf8\xc4\xfc\xb0\x71\x55\xae\x49\x58\x22\x5b\x69\x5b\ +\x9c\xb2\x73\x5f\x97\xb0\x8e\x75\x8a\x23\xc3\x47\x70\xd2\xb4\x6c\ +\x40\xd6\x71\xa8\x50\x28\xfd\x79\x96\x55\x3d\x8c\x8f\x20\xbd\xdc\ +\xb9\xd3\x49\x91\x25\x4b\x8f\x90\x02\x35\xc5\x3f\xda\x96\xc7\x8f\ +\x5e\x7c\x8e\xa5\xf6\x89\x74\x7b\xfa\xf1\x8b\xb3\xee\x42\x98\xac\ +\x81\x4d\xca\x9a\x23\xc4\xa9\x57\x3d\xd3\x6c\x4a\xfb\xa1\xc0\x62\ +\xe2\x09\x47\x94\xb9\x0f\xf3\x96\x85\x4c\x51\x85\xec\xfe\xc8\xf0\ +\xea\x32\xa9\x26\x78\x8e\x23\xb2\xcb\xf1\xde\x49\xae\xd4\xc9\x46\ +\xfc\xb6\x56\x73\xb8\x9e\x6e\x68\xd0\x80\x41\x37\xab\x6b\xc8\x5e\ +\x69\x9e\x28\xe7\x99\xe8\x2d\x33\x25\xeb\xa0\xb2\xd7\x25\xeb\x1d\ +\x1d\x9d\x3f\x7d\x12\xb4\x23\x38\x9f\x26\x6e\x97\xd4\xc6\xc3\x67\ +\x64\xe0\x3a\x72\xb9\x0f\xcc\x1c\x0d\x5d\xba\x92\x44\x49\xbd\xef\ +\xcc\xc0\xf1\x00\x3f\x93\x6a\x13\x20\x75\xef\x3a\xb3\x65\x0d\x71\ +\xc4\xe4\x63\xe7\x75\xe0\x3e\x0b\x2d\xed\x66\x16\xc4\xac\xaa\xe0\ +\xf2\xe0\xeb\x41\x8f\x0d\xaa\xb0\x34\x2d\x41\x3b\x8f\x52\xc5\xc7\ +\xe9\x32\x32\x6a\x09\x90\x35\x0b\x96\x3b\xbb\xa5\xfb\x2a\x0b\x3b\ +\xa0\x6a\xcb\x82\xeb\x38\x7e\xc7\xbf\xef\x55\x16\x26\x36\xb5\xfb\ +\x93\x4a\x74\x24\x39\xf0\x6a\x17\x65\x2b\x29\xde\x2e\x1d\x12\x6c\ +\x16\x35\x92\xb2\x0b\x4d\x7c\xa7\x61\x4b\x8b\x47\x2f\x4b\x09\x31\ +\x09\x90\x41\x72\xa9\xf4\x1d\xa3\xa0\xec\x6a\xa6\xba\x94\x91\x95\ +\x0f\x98\xf7\xf2\x51\xc2\x2d\x9b\xc5\x51\xb9\x0f\x3d\xc0\xd1\xa9\ +\x22\xa6\xc4\x3d\xee\x8d\xd2\xc8\x53\x03\x6a\x78\xb5\xe8\x6c\x3b\ +\x81\xca\x16\x7d\x96\x46\xda\xb3\x2e\x4e\x16\x04\x6b\x74\xe1\x48\ +\x3c\xa1\xdf\x30\x80\xc0\xf0\x22\xe3\xb6\x81\xd9\x42\xaf\x07\x7d\ +\xc1\x72\x5a\xaf\xa0\x87\x41\xda\x4c\xac\x8e\xc3\x78\x91\x9f\xba\ +\xdb\xd1\xb0\x4c\x72\x4b\xd5\xce\xbd\x28\x22\x4b\xa7\x0c\x19\x17\ +\xe4\x9c\x7e\x0f\xb0\x4f\xc5\x39\x6c\xb3\x1f\x5c\xc4\x4a\x47\xa3\ +\xbb\x66\x6d\x4e\x41\x42\x07\x69\x02\x1a\x1d\x14\xb5\x6d\x30\x7c\ +\x50\x1a\xbc\x7a\x34\x7a\x87\x07\x85\x02\xec\x8f\x3a\xd6\x69\x8e\ +\x5a\xce\x48\x32\x0e\xb2\x73\x2e\xa2\x42\x63\x39\xf0\xd4\x71\xc0\ +\x90\xe6\xb1\x01\xce\xe4\xe9\xd1\x31\xb0\x8d\x62\x40\xad\xd3\x4b\ +\xd0\x10\x90\x81\x51\xc6\x86\x1a\x7c\x9c\xf7\xcd\x09\x02\x7b\xc9\ +\xb2\x4d\x21\xca\xdb\x11\x07\x9e\x1c\x7b\x40\x0f\x17\x16\x62\xdd\ +\x5f\xc9\x66\xc8\x9f\x27\x11\x93\x00\xb4\x8b\x8b\x5c\x62\xb3\xaa\ +\xeb\x31\x06\xd9\xf1\x69\x80\x2e\xe4\xbb\xf8\xa2\x30\x5e\x38\x21\ +\x92\x90\xde\x08\x5b\x91\x62\x69\x23\xbb\x04\x67\xcd\x8d\x5c\x81\ +\x80\x95\xd9\xcc\x0e\x3a\xdb\xc0\x3e\x39\x38\xb0\x0d\x54\x05\x2f\ +\x8d\x31\x45\x74\xd3\xe9\xb5\x83\xfe\x74\x96\x2b\xfd\x58\x3a\xfe\ +\xa8\x98\x7b\xa5\x91\xa0\x1b\x42\xc6\xb3\x8d\x3b\x2c\xfc\xf8\x18\ +\x06\x66\x18\xc7\x2d\x53\x9a\x49\xde\xe1\xf0\xb9\x18\x2b\xc3\xb0\ +\x21\x92\xdc\x89\x23\xe2\x8e\x8a\x4e\x4a\x67\xf6\xcb\xe8\x27\x38\ +\x0d\x26\x59\xf8\x5a\x04\x6c\x4c\xc1\x3c\xce\x59\xb3\x89\xa0\x8d\ +\x4d\x16\xe4\x5c\x28\x9d\x8f\x65\x7a\x7e\x50\x2d\xfe\x9a\x8c\x4f\ +\xe3\xb1\x9b\x58\x09\xa3\x45\xbc\xe4\x58\x8b\x3e\x87\x53\x60\x87\ +\x26\xb4\x66\x90\x95\x30\x5d\x81\x2d\x99\x10\x15\x1e\x6e\xc8\x3b\ +\x73\x44\x15\x4a\xd3\x56\x65\x5a\xc5\xb9\x22\xfb\x99\x7d\x43\x95\ +\x3d\x98\xdb\x1d\x1d\x74\xe7\xdc\xe9\x6b\x2d\x7d\xf4\x4c\x3b\xb6\ +\x70\x51\x93\x8e\x74\xa5\x5a\xca\xa2\x3d\xcd\x11\x99\x62\xde\x8f\ +\x90\xe3\x6d\x12\xe2\xb0\x38\xed\x01\x95\x9f\xb4\x27\xc4\x71\x3b\ +\xa4\x10\xcd\x32\xae\x60\x1e\x15\xf8\xf9\xc8\xfa\xb1\x3e\x8b\x9b\ +\x3d\x4a\x30\x1f\x61\x76\x14\x79\x1e\x55\xc8\xc9\xc8\x83\x6a\xe3\ +\x9d\x26\x32\x67\x47\xf8\x0c\xca\x5e\x0e\x26\x69\xe0\x37\xd7\x04\ +\xfd\x25\x30\x71\x10\xc9\xfc\x89\x2d\x4e\x50\x48\xff\x09\x0f\x13\ +\x01\x5d\x68\xa6\x37\x71\x60\x30\x34\x95\x30\x74\x66\x30\xcd\x09\ +\x03\x6c\xcf\x11\x1e\xe7\xf7\x74\xca\xa0\x2d\xb1\x97\xd1\x00\x72\ +\x29\x4d\xa8\x30\x6d\x33\x9e\x10\xdd\x63\x64\x40\xff\x88\xdd\xae\ +\x4c\x70\x60\x58\xdb\x24\x2c\xd2\xae\x7c\x0e\xd9\x30\xe6\x50\x2e\ +\xf4\xd2\xa8\xcb\x5e\xf2\x4f\x36\xcd\x1c\x68\x74\x66\x4d\x39\x12\ +\x0a\xe0\x8b\xc0\xd3\x4e\xd2\x12\x64\xea\xa7\x83\x67\x22\x93\xed\ +\x2a\x76\x24\x78\x6b\xf2\x22\xbb\xc5\x83\x3f\x59\x05\x5a\xb6\xd8\ +\xeb\x00\xef\xb0\xc3\x41\x50\x3d\xa8\x5e\x78\xd3\xec\x4a\xb3\x97\ +\x60\x48\xc1\x31\x0f\xcf\x83\x8b\x68\x0c\x67\x61\x74\x4e\x99\xa9\ +\x7c\x59\x5d\xfe\x09\xef\x8e\xda\x9e\xfc\xb3\x7d\x69\x15\x83\xdd\ +\xc0\x57\x69\x99\xcf\x1f\x22\x71\x7b\xbd\xbe\xfc\xee\xee\xf6\x27\ +\xc1\xb8\x7c\xb8\x39\x87\x2d\xd9\xe3\x7c\xba\x7c\x7f\x73\xf6\xc1\ +\x88\xee\x7c\x7a\xf3\xe1\xe6\xcc\xfc\x6c\x9c\x4f\x6f\xbe\xbf\x39\ +\x43\xd2\xff\xc3\x53\x19\xde\xc5\x7f\x2f\x9e\xca\x76\x93\x8d\x7b\ +\x78\xf0\x54\x3f\x4e\x72\x77\x6a\xcf\x83\xa9\xfa\xcd\x4d\x55\x0f\ +\x97\x7d\x8c\x89\x1e\x4c\xd5\x2f\x32\x55\x0c\x08\xdd\x1e\x4c\xd5\ +\xaf\x6b\xaa\x3a\xbf\xa1\xe9\x83\xa9\x4a\x53\xc5\xa4\x6b\xed\x07\ +\x53\x55\x7a\x63\xfa\xf8\x60\xaa\x7e\x64\xaa\x6c\x2d\x51\xfd\xb5\ +\x4c\x95\x22\x66\xeb\xf7\x62\xaa\x98\xeb\x86\x3e\x98\xaa\x9f\x26\ +\x79\xd0\x50\x3d\x98\xaa\xdf\xdc\x54\xe9\x0c\x71\x7e\x9b\x78\x30\ +\x55\xbf\x70\x52\xc5\xef\xde\x7b\x3e\x98\xaa\x5f\xd7\x54\xf1\x3b\ +\x6e\x3c\x4c\xaa\x0e\x53\xa5\xd1\xc4\x1f\x26\x55\xc7\x8f\x8e\xe3\ +\xc1\x53\xd9\x0f\x9e\x8a\xff\xfc\x30\x30\x52\xff\xd3\x53\x3d\xe6\ +\x7f\x8c\x7e\xf9\x1f\xe3\x0c\xb2\x9c\ +\x00\x00\x1b\x41\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x34\x32\x34\ +\x31\x34\x33\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ +\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x39\x35\x2e\x31\ +\x39\x2c\x32\x39\x31\x2e\x39\x6c\x31\x30\x2e\x33\x36\x2d\x37\x39\ +\x63\x2e\x39\x32\x2d\x37\x2d\x36\x2e\x33\x31\x2d\x31\x32\x2e\x33\ +\x31\x2d\x31\x33\x2e\x30\x39\x2d\x39\x2e\x35\x39\x6c\x2d\x32\x33\ +\x2e\x32\x39\x2c\x39\x2e\x33\x34\x63\x2d\x32\x2e\x33\x32\x2d\x32\ +\x37\x2e\x37\x32\x2c\x33\x2e\x32\x33\x2d\x35\x38\x2e\x33\x33\x2c\ +\x32\x39\x2e\x31\x36\x2d\x38\x34\x43\x31\x38\x32\x2e\x39\x34\x2c\ +\x34\x35\x2c\x32\x35\x36\x2c\x31\x30\x34\x2e\x36\x36\x2c\x32\x35\ +\x36\x2c\x31\x30\x34\x2e\x36\x36\x63\x2d\x34\x39\x2e\x31\x34\x2d\ +\x34\x36\x2e\x32\x36\x2d\x31\x32\x39\x2d\x34\x34\x2e\x31\x39\x2d\ +\x31\x37\x38\x2e\x32\x39\x2c\x34\x2e\x36\x32\x43\x34\x36\x2c\x31\ +\x34\x30\x2e\x37\x2c\x33\x34\x2e\x36\x33\x2c\x31\x38\x33\x2e\x38\ +\x32\x2c\x34\x33\x2e\x36\x35\x2c\x32\x32\x32\x2e\x39\x4c\x31\x37\ \x2e\x38\x39\x2c\x32\x33\x33\x2e\x32\x32\x41\x39\x2e\x31\x33\x2c\ \x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x35\x2e\x34\x38\ \x2c\x32\x34\x39\x4c\x37\x39\x2e\x37\x2c\x32\x39\x38\x2e\x31\x31\ @@ -2342,449 +2655,65 @@ \x2c\x31\x33\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x33\x35\ \x2e\x35\x35\x2c\x35\x30\x33\x2e\x35\x36\x5a\x22\x2f\x3e\x3c\x2f\ \x73\x76\x67\x3e\ -\x00\x00\x0b\xea\ -\x00\ -\x00\x2a\xa1\x78\x9c\xed\x9a\x4b\x8f\x5c\xc7\x0d\x85\xf7\xf9\x15\ -\x8d\xce\xb6\x8a\x2a\xb2\xc8\x7a\x38\x1a\x1b\xc8\x22\xab\x68\x97\ -\x6c\xb4\x09\x84\xd6\x58\x16\xd0\x96\x1c\x8d\x20\xc9\x08\xf2\xdf\ -\x83\x8f\x77\x14\x1b\x06\x1c\xc9\x81\xbd\x31\x66\xa1\x9e\x7e\xdc\ -\xbe\x55\x45\x9e\x73\x78\xc8\xd6\xe3\xaf\x3e\x7c\x7b\x3d\xbd\xbb\ -\x7d\x73\xf7\xf2\xf5\xab\x9b\xb3\x4a\x3b\x9f\x6e\x5f\x5d\x5e\x3f\ -\x7f\xf9\xea\xc5\xcd\xf9\xef\x7f\xfb\x4b\x5d\xe7\xaf\xbe\xfc\xc3\ -\xe3\xbb\x77\x2f\x4e\x2f\x9f\xdf\x9c\xff\xfa\xec\xfb\xdb\x37\xff\ -\xd0\xf3\xe9\xf9\xb3\xb7\xcf\xea\xab\x67\xdf\xde\xde\xbf\x77\xd2\ -\xf3\xe9\xc3\xb7\xd7\x57\x77\x37\xe7\x6f\xde\xbe\xfd\xee\x8b\x47\ -\x8f\xde\xbf\x7f\x2f\xef\xbb\xbc\x7e\xf3\xe2\x91\xb5\xd6\x1e\xdd\ -\xbd\x7b\x71\x3e\xbd\x7b\x79\xfb\xfe\xcf\xaf\x3f\xdc\x9c\xdb\xa9\ -\x9d\x46\xcb\x7f\xe7\x2f\xff\x70\x3a\x3d\x7e\x7e\xfb\xf5\x1d\x4f\ -\x4e\xa7\xc7\x77\x6f\xbf\xbf\xde\x1e\xcf\x4f\x27\xb9\x5c\xef\xaa\ -\x9e\xfe\x75\xff\xf2\x74\xfa\xfa\xe5\xf5\xfa\xc5\xe9\x8f\xb7\xed\ -\xb6\x3d\xff\xfa\x4f\xf7\x6f\xff\xfb\xf8\xe6\xa3\xff\x7e\xf5\xf1\ -\xa3\x8f\x37\x7c\xfc\xdd\xb3\xb7\xdf\x9c\x2e\xd7\x67\x77\x77\x37\ -\xe7\xbc\xd9\xf9\xf4\xfc\xe6\xfc\xa4\x6f\x95\xbd\x4b\xb4\x21\xba\ -\x2e\xad\x98\xb8\x15\x93\x66\xc5\xa5\x8d\xd2\x65\xf3\x64\x5e\xa3\ -\x49\x5b\xa2\xe3\xe2\xe2\x26\x5a\x86\x98\x56\xe5\xe2\x21\x73\xd5\ -\x90\xb9\xae\xd2\x7a\x15\x1b\x97\x2a\x3a\xaa\x8a\x59\x55\x51\xaf\ -\x5d\xac\x57\x95\x35\x6a\x97\xe5\xd7\xea\x53\x9c\xcf\x7d\x4b\xf3\ -\xaa\x63\x8b\xaf\xe2\x26\x4d\xab\xc4\xbe\xb8\xd8\xac\xd2\x56\x19\ -\x12\xa3\xda\xf1\x6c\x59\x0d\xd9\xc1\x17\x64\x58\x15\xf7\x6a\xe2\ -\xec\x60\xd5\x2e\xbb\x4a\x5f\x55\x9c\x05\xfb\xe4\x61\x57\xe3\x2d\ -\x36\x78\xad\xee\xd2\xd9\x41\xe3\x73\xf7\xda\x87\xd8\xa8\xa2\x56\ -\xb5\x77\x89\x55\xbc\x4b\x98\xb4\xfe\x4d\xbb\xa8\x78\x2f\xad\x0c\ -\x51\xee\x59\x06\xab\x85\x58\x17\x65\x31\x96\x77\xab\x26\x8b\x55\ -\x86\x55\x27\x0c\x32\x2b\x31\xe0\xab\x9c\x78\x55\x3b\x02\xa0\xeb\ -\x5a\x43\xa5\x5b\x15\xbb\x54\x95\x19\x55\x1a\x51\x68\x43\x08\xcb\ -\x9a\x45\x8f\x30\xb6\x5e\x78\xe0\x9e\x5a\x4c\x36\x1b\x1d\x5a\x42\ -\xba\x5d\xab\xe8\x2c\x3a\xf3\x0c\xbd\xcb\x74\xf1\x71\xa9\x5d\x5c\ -\xa5\x45\x1d\xa2\xbb\xe4\xad\xd9\x2a\xb9\x62\x11\x65\x1d\xd9\xab\ -\x84\x2c\xd2\x69\xb3\x0c\xa2\x1c\x9c\x56\x45\x7b\xd1\x8c\xff\xee\ -\x45\x27\xb7\x9c\xc5\x64\xf4\x2a\x6d\xe7\xa2\x95\xbb\x2e\x69\x33\ -\x9f\xe4\x5e\x5a\xe9\x62\xc1\x4e\x5d\xb6\xa8\x5d\xa7\x8c\x21\x7d\ -\xe7\xde\xe7\x14\x9b\x4f\xcf\x8f\x12\x69\x2f\xee\x01\xfc\x73\x88\ -\x33\x97\xad\x45\x57\x97\xee\x97\xaa\x2e\xb6\xab\x35\x89\x4e\xb0\ -\xf6\xac\xdd\xea\x5c\x62\xa4\x69\xf7\xda\x95\x83\x87\xac\x5d\x87\ -\x11\xf2\xc5\xfe\xb6\x8b\x73\x64\xef\xd5\x9b\xac\x05\x6e\x7b\x55\ -\x0e\xee\x45\x9b\xcc\xaa\xb6\xc4\x4b\xdf\x12\x75\x89\x71\x9a\xc9\ -\x05\x04\xdd\x54\xc6\xae\x99\xf9\xae\xa2\x51\xba\xf4\x51\x9c\x87\ -\x29\xb6\xca\x16\x23\x3e\x73\x14\x4d\x3a\xa8\x41\x91\x2d\xbd\x17\ -\x9b\x12\xb3\x68\x88\x29\x90\xdd\xbb\xe8\x96\xe9\x25\x96\xa8\x13\ -\xcb\x36\x8b\x1e\x3b\xd2\x21\x6b\x14\xdd\x4b\x06\xb9\x18\xc5\x36\ -\x87\xd8\x7c\x75\x36\xd0\xc7\xd1\x66\x09\x85\x1f\xb1\x24\x9e\x3e\ -\xb1\x48\xfc\x59\xdb\xd2\xe3\x5a\x75\x73\xc1\x90\x1e\x97\x0a\xeb\ -\xb4\xb0\x4c\x5d\x41\x06\x61\x63\x55\x9b\xa2\xce\x9b\xea\x07\x5d\ -\xe6\xaa\x3d\x58\x52\x1b\x21\xea\x33\xc9\x60\xe0\x9e\x0b\x20\xb4\ -\xca\x56\xe0\x42\x2a\x97\xd7\x79\x24\x95\xf4\x0f\x2b\x70\xac\x74\ -\x80\x00\xb1\x79\x00\x1b\x86\x0c\xac\x28\xfb\x60\xfc\xd8\x45\x9d\ -\xbd\x2d\xe9\x5a\xcc\xcb\xe4\xac\xbe\xc4\xb8\x24\xac\xcc\x2e\x31\ -\x78\x3a\x8b\x0d\xf1\xd4\x12\x28\x16\xd0\x60\x96\x39\x64\x3b\x3b\ -\x34\x25\x98\x29\x20\x3d\x08\x74\x1f\x55\x21\x5b\x86\x4f\x39\x95\ -\xf6\x62\x12\x13\x6d\x48\x6c\x8a\x8e\x0c\x49\x51\x09\x65\xdf\x6c\ -\x52\xa3\x22\x4c\x64\x00\x1c\x04\x39\x31\xd4\xe7\x1e\x94\x3f\x0f\ -\x47\x6b\x2a\x73\x17\x1b\xc4\xfa\x42\xc8\xd5\x20\xe3\x24\x74\x4e\ -\xb0\xda\xae\x31\x64\x68\x85\xfe\xee\x12\x01\x76\xa2\xee\xc8\xb8\ -\x5b\x55\xdb\xf0\xcd\x4d\x56\xbf\x8a\x47\x89\x29\x6b\x5e\xc0\xc2\ -\x92\x19\x65\xb1\x47\x65\x93\x1c\x76\x27\x00\x7d\x97\xde\x09\xb5\ -\xb9\x58\xd9\x4d\x7c\x00\x46\x8e\xc0\x9f\x7c\xb1\x77\xf1\x29\xd3\ -\x64\x8c\xa2\xad\x13\x3d\xd2\x54\xd4\x5d\xe6\xac\x09\xf0\x85\x96\ -\x0e\x62\xa2\x5b\xf6\x26\x78\x2b\x8a\x35\xd1\x6a\x21\x3a\xaf\x12\ -\x0b\x70\xf5\x7d\x01\x6f\x2b\x12\xf2\xbd\x2e\x08\x04\x3d\xba\x26\ -\x88\x86\xa3\x82\xbe\x9f\x3e\x59\x81\xe4\xda\x26\x51\x97\x86\x42\ -\x79\x15\x73\x92\x60\x55\x56\xe9\xb2\x2a\x82\xc8\xab\x23\x3e\x51\ -\x65\x39\xe9\x98\x15\x89\x40\x8a\xc3\xa0\x1b\x81\x4d\x29\x72\x34\ -\xcc\x29\x01\x4a\x5d\x28\x5d\xc2\xc9\xd2\x00\xd4\x87\x78\x73\x75\ -\x54\x19\x8e\x70\x56\xad\x46\x88\x8d\xdd\xbb\xd8\xaa\x43\x02\xca\ -\x6e\x05\x35\xdd\x53\x89\xfb\x46\xa5\xe7\x44\x72\xe1\xb1\x74\xbe\ -\x1c\x99\x3e\xa8\x40\xa4\xc5\x08\x9a\xf1\x9e\x65\x65\x00\x4d\x33\ -\x25\x3a\xa0\x3c\xcf\x22\x00\x8d\xa8\x22\xeb\x70\xff\x90\xec\x40\ -\xd7\x1b\x7a\xe9\xe4\x7e\x17\x83\xb4\x90\xc5\x64\xb9\x58\x2f\x91\ -\x44\x90\x00\xfe\x04\x86\x20\xf1\xaf\x2d\x0e\x8b\xdc\x0e\x10\xba\ -\xef\x49\xd1\x0a\x5f\xe6\x71\xe4\xe3\x7a\xfa\x44\x75\x49\xd3\xd2\ -\xdb\x14\x8b\x4b\x05\xd9\x14\x4b\x4f\xbd\x90\xe9\x55\x17\xa7\xef\ -\x32\x38\x22\x11\x18\x33\x0b\x08\xfc\xe5\xad\xb6\xea\x96\x4d\xf4\ -\x07\x35\x6f\xc2\x53\xdf\x35\xa8\xe0\x4b\x46\xf0\x0c\x76\x4f\xa7\ -\x2c\xa4\xb4\x11\x13\xf4\xcd\x66\xe1\xe0\xbc\x26\x23\x6c\x7c\x96\ -\x2d\x2b\x10\x8a\xa2\x94\xed\x4f\xb2\xa7\xdb\x46\x1b\x3a\x62\xd3\ -\x2f\x55\x87\xf4\x94\x41\xad\x3e\xc4\x27\x9a\xd7\xbc\x8e\x2d\x23\ -\x4a\xcf\x12\x16\x1d\x95\x51\xcb\x73\xb6\x45\x2c\x20\xfc\xac\x3a\ -\x12\x9e\x09\x33\xa0\xad\x15\x7c\xd4\xd1\xb2\x1c\x66\x21\x5e\x9a\ -\xc7\x1f\xb2\xe3\x8a\xde\x46\xc8\x8a\x8b\xb4\x28\xba\x88\x72\x6f\ -\xd2\x77\xae\x33\x4b\x34\x1e\x91\xe2\x5d\xe2\x08\x51\xca\x91\x3a\ -\xa1\x82\x21\x1d\x9e\x98\x74\x22\xc2\xc7\x43\xe6\xae\x4e\xc1\xec\ -\xbc\x0b\xd0\x10\x98\x40\x23\x2d\xc3\x35\x64\x8f\x1a\x12\x8e\xfa\ -\x45\x4f\xa5\xe2\x8e\xb9\x65\xd8\x7c\xad\x98\x8c\x08\xb1\xf5\xf4\ -\xc9\xea\x24\xa1\x2f\x54\x9e\x82\x3d\xd1\xaf\x36\xa1\x80\x92\x12\ -\x94\x23\xc4\x35\x0b\x72\xed\x68\x98\x89\xee\x4a\x6e\xc9\xdb\xda\ -\x6c\x61\x82\x95\x56\x1a\x77\xce\x47\xd6\x49\xaf\x41\x88\x8c\x90\ -\xa5\x89\x70\x51\x20\x38\xef\x1d\x41\xd2\x32\xc5\x86\x9c\xe0\x86\ -\x40\xea\x51\xd5\x8c\x4b\x15\x75\xef\x49\x75\xd9\x1b\x42\x77\x74\ -\x7a\xa8\x8c\x90\xed\x32\x30\x27\x44\xf6\x40\x0c\xac\x08\xfc\xa0\ -\x73\x66\x41\x51\xb8\xdf\x22\xc8\xdc\x2a\x3d\x4d\x48\xa3\xc6\xc1\ -\x15\x25\xbc\xa8\xc7\xa6\xee\x6c\x8c\x24\xa6\x66\x8f\x12\x32\xe3\ -\x00\xfe\xee\xa5\xef\x96\x8e\xb1\x23\x79\x14\x8a\x2c\xd1\x19\xa8\ -\x48\x81\x60\x95\xce\x49\x06\x47\xec\x8b\xf2\xbf\x2b\xf0\x99\x79\ -\xa8\x8a\xe2\xe3\x7b\x34\xc9\x41\xed\x1f\x56\x8d\xa4\x28\x0e\xa5\ -\x78\x96\x79\x70\x3e\x51\xc9\x8d\x94\xa5\x46\x66\xec\x3f\x0b\xe0\ -\x1d\x1f\xe1\x42\x75\xc0\x74\xa6\x2b\xe8\xd5\x46\x56\xf9\x8d\x37\ -\xf5\x4e\x84\x2c\x28\x59\x9d\xf0\x25\xa6\xa3\xce\x9e\x71\x9f\xb2\ -\x7a\x55\xd5\x7b\xbf\xb5\xad\xa2\x8f\x94\xb6\xaa\xec\x7f\xd6\x89\ -\x63\x89\x95\x89\x04\x8d\x57\x60\x88\xa9\xd8\x97\x2c\x1b\x89\x03\ -\x55\x2c\x4a\x7e\x81\x75\x51\xa4\x8e\xc2\x50\x8a\x31\x38\x63\x16\ -\x5b\x29\xc5\x9e\x5e\x30\x32\x89\x2b\xcb\x78\xfa\x1c\x8d\x2c\x6e\ -\x96\xf6\x85\x8b\xbc\xe8\x3a\x14\x47\x6c\x64\xc1\x84\x75\x81\xb5\ -\x89\x91\xc5\xb7\x04\x79\xa5\x74\x28\x49\x74\xb2\xe0\xe8\x86\xd5\ -\x0d\x22\x23\x73\xe0\xa2\xe3\x5a\x31\x72\x41\x69\x4a\xec\xeb\x2e\ -\x3e\x5c\xb6\x5f\xaa\x73\xe5\x10\x03\xfa\x83\x42\x30\xa0\x3b\xcc\ -\xd3\x43\xe5\x27\xbe\x60\x79\xcd\xba\x46\xb9\xd8\x18\x25\x94\x48\ -\x11\x72\x8c\x12\x0b\xa7\xb4\x0f\xf8\xd1\x48\xac\x51\x1b\xc8\x41\ -\x7e\x96\xa7\xe3\x3e\x68\x48\xca\x27\x0a\x21\xb3\x97\x01\xca\x69\ -\x1f\x88\x23\x05\x1e\xb9\xdc\x15\x46\x83\x04\xc8\x14\x68\xf5\x04\ -\x96\x13\x80\xf8\xc4\xfc\xb0\x71\x55\xae\x49\x58\x22\x5b\x69\x5b\ -\x9c\xb2\x73\x5f\x97\xb0\x8e\x75\x8a\x23\xc3\x47\x70\xd2\xb4\x6c\ -\x40\xd6\x71\xa8\x50\x28\xfd\x79\x96\x55\x3d\x8c\x8f\x20\xbd\xdc\ -\xb9\xd3\x49\x91\x25\x4b\x8f\x90\x02\x35\xc5\x3f\xda\x96\xc7\x8f\ -\x5e\x7c\x8e\xa5\xf6\x89\x74\x7b\xfa\xf1\x8b\xb3\xee\x42\x98\xac\ -\x81\x4d\xca\x9a\x23\xc4\xa9\x57\x3d\xd3\x6c\x4a\xfb\xa1\xc0\x62\ -\xe2\x09\x47\x94\xb9\x0f\xf3\x96\x85\x4c\x51\x85\xec\xfe\xc8\xf0\ -\xea\x32\xa9\x26\x78\x8e\x23\xb2\xcb\xf1\xde\x49\xae\xd4\xc9\x46\ -\xfc\xb6\x56\x73\xb8\x9e\x6e\x68\xd0\x80\x41\x37\xab\x6b\xc8\x5e\ -\x69\x9e\x28\xe7\x99\xe8\x2d\x33\x25\xeb\xa0\xb2\xd7\x25\xeb\x1d\ -\x1d\x9d\x3f\x7d\x12\xb4\x23\x38\x9f\x26\x6e\x97\xd4\xc6\xc3\x67\ -\x64\xe0\x3a\x72\xb9\x0f\xcc\x1c\x0d\x5d\xba\x92\x44\x49\xbd\xef\ -\xcc\xc0\xf1\x00\x3f\x93\x6a\x13\x20\x75\xef\x3a\xb3\x65\x0d\x71\ -\xc4\xe4\x63\xe7\x75\xe0\x3e\x0b\x2d\xed\x66\x16\xc4\xac\xaa\xe0\ -\xf2\xe0\xeb\x41\x8f\x0d\xaa\xb0\x34\x2d\x41\x3b\x8f\x52\xc5\xc7\ -\xe9\x32\x32\x6a\x09\x90\x35\x0b\x96\x3b\xbb\xa5\xfb\x2a\x0b\x3b\ -\xa0\x6a\xcb\x82\xeb\x38\x7e\xc7\xbf\xef\x55\x16\x26\x36\xb5\xfb\ -\x93\x4a\x74\x24\x39\xf0\x6a\x17\x65\x2b\x29\xde\x2e\x1d\x12\x6c\ -\x16\x35\x92\xb2\x0b\x4d\x7c\xa7\x61\x4b\x8b\x47\x2f\x4b\x09\x31\ -\x09\x90\x41\x72\xa9\xf4\x1d\xa3\xa0\xec\x6a\xa6\xba\x94\x91\x95\ -\x0f\x98\xf7\xf2\x51\xc2\x2d\x9b\xc5\x51\xb9\x0f\x3d\xc0\xd1\xa9\ -\x22\xa6\xc4\x3d\xee\x8d\xd2\xc8\x53\x03\x6a\x78\xb5\xe8\x6c\x3b\ -\x81\xca\x16\x7d\x96\x46\xda\xb3\x2e\x4e\x16\x04\x6b\x74\xe1\x48\ -\x3c\xa1\xdf\x30\x80\xc0\xf0\x22\xe3\xb6\x81\xd9\x42\xaf\x07\x7d\ -\xc1\x72\x5a\xaf\xa0\x87\x41\xda\x4c\xac\x8e\xc3\x78\x91\x9f\xba\ -\xdb\xd1\xb0\x4c\x72\x4b\xd5\xce\xbd\x28\x22\x4b\xa7\x0c\x19\x17\ -\xe4\x9c\x7e\x0f\xb0\x4f\xc5\x39\x6c\xb3\x1f\x5c\xc4\x4a\x47\xa3\ -\xbb\x66\x6d\x4e\x41\x42\x07\x69\x02\x1a\x1d\x14\xb5\x6d\x30\x7c\ -\x50\x1a\xbc\x7a\x34\x7a\x87\x07\x85\x02\xec\x8f\x3a\xd6\x69\x8e\ -\x5a\xce\x48\x32\x0e\xb2\x73\x2e\xa2\x42\x63\x39\xf0\xd4\x71\xc0\ -\x90\xe6\xb1\x01\xce\xe4\xe9\xd1\x31\xb0\x8d\x62\x40\xad\xd3\x4b\ -\xd0\x10\x90\x81\x51\xc6\x86\x1a\x7c\x9c\xf7\xcd\x09\x02\x7b\xc9\ -\xb2\x4d\x21\xca\xdb\x11\x07\x9e\x1c\x7b\x40\x0f\x17\x16\x62\xdd\ -\x5f\xc9\x66\xc8\x9f\x27\x11\x93\x00\xb4\x8b\x8b\x5c\x62\xb3\xaa\ -\xeb\x31\x06\xd9\xf1\x69\x80\x2e\xe4\xbb\xf8\xa2\x30\x5e\x38\x21\ -\x92\x90\xde\x08\x5b\x91\x62\x69\x23\xbb\x04\x67\xcd\x8d\x5c\x81\ -\x80\x95\xd9\xcc\x0e\x3a\xdb\xc0\x3e\x39\x38\xb0\x0d\x54\x05\x2f\ -\x8d\x31\x45\x74\xd3\xe9\xb5\x83\xfe\x74\x96\x2b\xfd\x58\x3a\xfe\ -\xa8\x98\x7b\xa5\x91\xa0\x1b\x42\xc6\xb3\x8d\x3b\x2c\xfc\xf8\x18\ -\x06\x66\x18\xc7\x2d\x53\x9a\x49\xde\xe1\xf0\xb9\x18\x2b\xc3\xb0\ -\x21\x92\xdc\x89\x23\xe2\x8e\x8a\x4e\x4a\x67\xf6\xcb\xe8\x27\x38\ -\x0d\x26\x59\xf8\x5a\x04\x6c\x4c\xc1\x3c\xce\x59\xb3\x89\xa0\x8d\ -\x4d\x16\xe4\x5c\x28\x9d\x8f\x65\x7a\x7e\x50\x2d\xfe\x9a\x8c\x4f\ -\xe3\xb1\x9b\x58\x09\xa3\x45\xbc\xe4\x58\x8b\x3e\x87\x53\x60\x87\ -\x26\xb4\x66\x90\x95\x30\x5d\x81\x2d\x99\x10\x15\x1e\x6e\xc8\x3b\ -\x73\x44\x15\x4a\xd3\x56\x65\x5a\xc5\xb9\x22\xfb\x99\x7d\x43\x95\ -\x3d\x98\xdb\x1d\x1d\x74\xe7\xdc\xe9\x6b\x2d\x7d\xf4\x4c\x3b\xb6\ -\x70\x51\x93\x8e\x74\xa5\x5a\xca\xa2\x3d\xcd\x11\x99\x62\xde\x8f\ -\x90\xe3\x6d\x12\xe2\xb0\x38\xed\x01\x95\x9f\xb4\x27\xc4\x71\x3b\ -\xa4\x10\xcd\x32\xae\x60\x1e\x15\xf8\xf9\xc8\xfa\xb1\x3e\x8b\x9b\ -\x3d\x4a\x30\x1f\x61\x76\x14\x79\x1e\x55\xc8\xc9\xc8\x83\x6a\xe3\ -\x9d\x26\x32\x67\x47\xf8\x0c\xca\x5e\x0e\x26\x69\xe0\x37\xd7\x04\ -\xfd\x25\x30\x71\x10\xc9\xfc\x89\x2d\x4e\x50\x48\xff\x09\x0f\x13\ -\x01\x5d\x68\xa6\x37\x71\x60\x30\x34\x95\x30\x74\x66\x30\xcd\x09\ -\x03\x6c\xcf\x11\x1e\xe7\xf7\x74\xca\xa0\x2d\xb1\x97\xd1\x00\x72\ -\x29\x4d\xa8\x30\x6d\x33\x9e\x10\xdd\x63\x64\x40\xff\x88\xdd\xae\ -\x4c\x70\x60\x58\xdb\x24\x2c\xd2\xae\x7c\x0e\xd9\x30\xe6\x50\x2e\ -\xf4\xd2\xa8\xcb\x5e\xf2\x4f\x36\xcd\x1c\x68\x74\x66\x4d\x39\x12\ -\x0a\xe0\x8b\xc0\xd3\x4e\xd2\x12\x64\xea\xa7\x83\x67\x22\x93\xed\ -\x2a\x76\x24\x78\x6b\xf2\x22\xbb\xc5\x83\x3f\x59\x05\x5a\xb6\xd8\ -\xeb\x00\xef\xb0\xc3\x41\x50\x3d\xa8\x5e\x78\xd3\xec\x4a\xb3\x97\ -\x60\x48\xc1\x31\x0f\xcf\x83\x8b\x68\x0c\x67\x61\x74\x4e\x99\xa9\ -\x7c\x59\x5d\xfe\x09\xef\x8e\xda\x9e\xfc\xb3\x7d\x69\x15\x83\xdd\ -\xc0\x57\x69\x99\xcf\x1f\x22\x71\x7b\xbd\xbe\xfc\xee\xee\xf6\x27\ -\xc1\xb8\x7c\xb8\x39\x87\x2d\xd9\xe3\x7c\xba\x7c\x7f\x73\xf6\xc1\ -\x88\xee\x7c\x7a\xf3\xe1\xe6\xcc\xfc\x6c\x9c\x4f\x6f\xbe\xbf\x39\ -\x43\xd2\xff\xc3\x53\x19\xde\xc5\x7f\x2f\x9e\xca\x76\x93\x8d\x7b\ -\x78\xf0\x54\x3f\x4e\x72\x77\x6a\xcf\x83\xa9\xfa\xcd\x4d\x55\x0f\ -\x97\x7d\x8c\x89\x1e\x4c\xd5\x2f\x32\x55\x0c\x08\xdd\x1e\x4c\xd5\ -\xaf\x6b\xaa\x3a\xbf\xa1\xe9\x83\xa9\x4a\x53\xc5\xa4\x6b\xed\x07\ -\x53\x55\x7a\x63\xfa\xf8\x60\xaa\x7e\x64\xaa\x6c\x2d\x51\xfd\xb5\ -\x4c\x95\x22\x66\xeb\xf7\x62\xaa\x98\xeb\x86\x3e\x98\xaa\x9f\x26\ -\x79\xd0\x50\x3d\x98\xaa\xdf\xdc\x54\xe9\x0c\x71\x7e\x9b\x78\x30\ -\x55\xbf\x70\x52\xc5\xef\xde\x7b\x3e\x98\xaa\x5f\xd7\x54\xf1\x3b\ -\x6e\x3c\x4c\xaa\x0e\x53\xa5\xd1\xc4\x1f\x26\x55\xc7\x8f\x8e\xe3\ -\xc1\x53\xd9\x0f\x9e\x8a\xff\xfc\x30\x30\x52\xff\xd3\x53\x3d\xe6\ -\x7f\x8c\x7e\xf9\x1f\xe3\x0c\xb2\x9c\ -\x00\x00\x0b\xce\ -\x3c\ -\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ -\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ -\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ -\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ -\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ -\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ -\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ -\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ -\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ -\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ -\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ -\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x33\x31\x2e\x32\x32\x22\ -\x20\x79\x3d\x22\x33\x34\x31\x2e\x30\x32\x22\x20\x77\x69\x64\x74\ -\x68\x3d\x22\x33\x38\x2e\x33\x33\x22\x20\x68\x65\x69\x67\x68\x74\ -\x3d\x22\x31\x34\x39\x2e\x39\x22\x2f\x3e\x0a\x20\x20\x3c\x72\x65\ -\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x78\x3d\x22\x34\x33\x31\x2e\x32\x32\x22\x20\x79\x3d\x22\x33\ -\x34\x31\x2e\x30\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\ -\x2e\x33\x33\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x34\x39\ -\x2e\x39\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\ -\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x33\x34\x2e\x34\x31\x20\x38\ -\x36\x36\x2e\x33\x35\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x39\ -\x30\x29\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x31\x36\x37\x2e\x32\x39\x2c\x35\x30\x30\x2e\x32\x39\x63\x2d\x37\ -\x2e\x30\x34\x2e\x31\x2d\x31\x32\x2e\x31\x2d\x31\x2e\x39\x32\x2d\ -\x31\x34\x2e\x37\x34\x2d\x36\x2e\x37\x31\x2d\x32\x2e\x32\x39\x2d\ -\x34\x2e\x31\x36\x2d\x34\x2e\x38\x35\x2d\x38\x2e\x32\x35\x2d\x36\ -\x2e\x38\x36\x2d\x31\x32\x2e\x34\x37\x2d\x34\x31\x2e\x34\x36\x2d\ -\x38\x38\x2e\x32\x37\x2d\x34\x31\x2e\x37\x35\x2d\x32\x33\x37\x2e\ -\x38\x33\x2c\x35\x2e\x36\x37\x2d\x33\x32\x34\x2e\x30\x34\x2c\x34\ -\x2e\x32\x36\x2d\x37\x2e\x34\x33\x2c\x36\x2e\x39\x33\x2d\x38\x2e\ -\x36\x39\x2c\x31\x38\x2e\x31\x37\x2d\x38\x2e\x37\x2c\x39\x2e\x35\ -\x31\x2d\x2e\x30\x31\x2c\x31\x39\x2e\x30\x32\x2c\x30\x2c\x32\x39\ -\x2e\x32\x33\x2c\x30\x2d\x37\x2e\x30\x38\x2d\x31\x30\x2e\x39\x38\ -\x2d\x31\x35\x2e\x31\x2d\x32\x30\x2e\x33\x35\x2d\x32\x38\x2e\x37\ -\x34\x2d\x32\x36\x2e\x36\x33\x68\x2d\x31\x30\x2e\x37\x39\x63\x2d\ -\x32\x33\x2e\x34\x31\x2c\x31\x30\x2e\x37\x34\x2d\x33\x34\x2e\x38\ -\x39\x2c\x33\x34\x2e\x37\x36\x2d\x34\x33\x2e\x31\x37\x2c\x35\x34\ -\x2e\x31\x31\x2d\x33\x36\x2e\x34\x32\x2c\x38\x38\x2e\x36\x2d\x33\ -\x37\x2e\x36\x32\x2c\x32\x34\x34\x2e\x34\x33\x2c\x31\x36\x2e\x34\ -\x34\x2c\x33\x32\x37\x2e\x35\x32\x2c\x37\x2e\x34\x31\x2c\x31\x30\ -\x2e\x39\x36\x2c\x32\x33\x2e\x38\x35\x2c\x32\x39\x2e\x39\x34\x2c\ -\x34\x31\x2e\x34\x32\x2c\x32\x31\x2e\x32\x33\x2c\x31\x31\x2e\x39\ -\x33\x2d\x35\x2e\x39\x35\x2c\x31\x38\x2e\x34\x33\x2d\x31\x34\x2e\ -\x37\x35\x2c\x32\x34\x2e\x38\x32\x2d\x32\x34\x2e\x33\x37\x2d\x31\ -\x31\x2e\x35\x31\x2e\x30\x34\x2d\x32\x30\x2e\x34\x39\x2d\x2e\x30\ -\x39\x2d\x33\x31\x2e\x34\x34\x2e\x30\x36\x5a\x22\x2f\x3e\x0a\x20\ -\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x37\x2e\x31\x38\x2c\ -\x32\x32\x37\x2e\x38\x63\x34\x2e\x35\x31\x2d\x31\x39\x2e\x39\x32\ -\x2c\x31\x30\x2e\x32\x36\x2d\x33\x39\x2e\x36\x32\x2c\x31\x39\x2e\ -\x34\x31\x2d\x35\x38\x2e\x37\x34\x2c\x31\x2e\x34\x32\x2d\x32\x2e\ -\x39\x36\x2e\x35\x32\x2d\x33\x2e\x35\x35\x2d\x33\x2e\x35\x33\x2d\ -\x33\x2e\x34\x38\x2d\x38\x2e\x35\x34\x2e\x31\x36\x2d\x31\x37\x2e\ -\x30\x39\x2e\x31\x39\x2d\x32\x35\x2e\x36\x33\x2d\x2e\x30\x32\x2d\ -\x33\x2e\x38\x31\x2d\x2e\x30\x39\x2d\x35\x2e\x33\x38\x2e\x38\x39\ -\x2d\x36\x2e\x37\x34\x2c\x33\x2e\x34\x2d\x32\x35\x2e\x34\x37\x2c\ -\x35\x31\x2e\x35\x31\x2d\x33\x30\x2e\x30\x39\x2c\x31\x30\x31\x2e\ -\x32\x2d\x33\x30\x2e\x37\x34\x2c\x31\x36\x30\x2e\x30\x39\x2d\x2e\ -\x30\x31\x2c\x34\x35\x2e\x39\x36\x2c\x36\x2e\x39\x32\x2c\x31\x30\ -\x34\x2e\x38\x33\x2c\x33\x30\x2e\x38\x2c\x31\x35\x30\x2e\x35\x31\ -\x2c\x31\x2e\x33\x2c\x32\x2e\x34\x32\x2c\x32\x2e\x36\x36\x2c\x33\ -\x2e\x36\x32\x2c\x36\x2e\x36\x32\x2c\x33\x2e\x35\x2c\x38\x2e\x35\ -\x33\x2d\x2e\x32\x34\x2c\x31\x37\x2e\x30\x39\x2d\x2e\x32\x36\x2c\ -\x32\x35\x2e\x36\x32\x2c\x30\x2c\x34\x2e\x39\x2e\x31\x35\x2c\x34\ -\x2e\x39\x33\x2d\x2e\x39\x36\x2c\x33\x2e\x35\x38\x2d\x33\x2e\x38\ -\x31\x2d\x33\x34\x2e\x37\x32\x2d\x37\x37\x2e\x39\x36\x2d\x33\x36\ -\x2d\x31\x37\x30\x2e\x33\x35\x2d\x31\x39\x2e\x33\x39\x2d\x32\x35\ -\x31\x2e\x34\x35\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ -\x3d\x22\x4d\x32\x35\x32\x2e\x30\x31\x2c\x31\x37\x37\x2e\x38\x32\ -\x63\x35\x2e\x35\x37\x2d\x31\x33\x2e\x32\x31\x2c\x35\x2e\x36\x39\ -\x2d\x31\x33\x2e\x31\x33\x2d\x31\x34\x2e\x30\x33\x2d\x31\x32\x2e\ -\x32\x35\x2d\x32\x2e\x39\x36\x2e\x31\x33\x2d\x34\x2e\x33\x31\x2e\ -\x38\x39\x2d\x35\x2e\x33\x32\x2c\x32\x2e\x37\x35\x2d\x32\x33\x2e\ -\x37\x38\x2c\x34\x34\x2e\x39\x39\x2d\x32\x38\x2e\x31\x35\x2c\x39\ -\x34\x2e\x34\x35\x2d\x33\x31\x2e\x39\x33\x2c\x31\x34\x32\x2e\x34\ -\x32\x2d\x2e\x37\x37\x2c\x39\x2e\x31\x39\x2d\x2e\x36\x2c\x31\x38\ -\x2e\x37\x37\x2e\x39\x2c\x32\x37\x2e\x34\x31\x2c\x31\x2e\x39\x2c\ -\x34\x35\x2e\x36\x38\x2c\x37\x2e\x34\x34\x2c\x38\x39\x2e\x38\x34\ -\x2c\x32\x36\x2e\x34\x39\x2c\x31\x33\x32\x2e\x39\x36\x2c\x35\x2e\ -\x33\x37\x2c\x31\x31\x2e\x39\x38\x2c\x35\x2e\x35\x2c\x31\x31\x2e\ -\x38\x34\x2c\x32\x33\x2e\x31\x37\x2c\x31\x31\x2e\x39\x32\x2c\x35\ -\x2e\x30\x32\x2e\x30\x32\x2c\x36\x2d\x2e\x36\x33\x2c\x34\x2e\x33\ -\x33\x2d\x34\x2e\x32\x35\x2d\x33\x39\x2e\x30\x33\x2d\x38\x37\x2e\ -\x38\x39\x2d\x33\x38\x2e\x35\x39\x2d\x32\x31\x32\x2e\x33\x31\x2d\ -\x33\x2e\x36\x31\x2d\x33\x30\x30\x2e\x39\x37\x5a\x22\x2f\x3e\x0a\ -\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x30\x35\ -\x2c\x31\x37\x37\x2e\x37\x37\x63\x31\x2e\x35\x34\x2d\x33\x2e\x39\ -\x32\x2c\x36\x2e\x37\x39\x2d\x38\x2e\x38\x37\x2c\x33\x2e\x39\x36\ -\x2d\x31\x31\x2e\x33\x39\x2d\x32\x2e\x38\x35\x2d\x32\x2e\x35\x35\ -\x2d\x31\x30\x2e\x39\x38\x2d\x2e\x34\x35\x2d\x31\x36\x2e\x37\x36\ -\x2d\x2e\x38\x2d\x33\x2e\x39\x32\x2d\x2e\x32\x34\x2d\x35\x2e\x32\ -\x38\x2c\x31\x2e\x30\x36\x2d\x36\x2e\x36\x33\x2c\x33\x2e\x35\x2d\ -\x32\x35\x2e\x33\x2c\x35\x30\x2e\x38\x35\x2d\x33\x30\x2e\x32\x32\ -\x2c\x31\x30\x31\x2e\x35\x36\x2d\x33\x30\x2e\x37\x32\x2c\x31\x35\ -\x38\x2e\x37\x33\x2d\x2e\x32\x2c\x34\x34\x2e\x38\x39\x2c\x36\x2e\ -\x33\x38\x2c\x39\x39\x2e\x32\x39\x2c\x32\x36\x2e\x38\x2c\x31\x34\ -\x33\x2e\x37\x37\x2c\x35\x2e\x33\x39\x2c\x31\x31\x2e\x34\x36\x2c\ -\x35\x2e\x36\x2c\x31\x31\x2e\x32\x39\x2c\x32\x32\x2e\x32\x33\x2c\ -\x31\x31\x2e\x34\x35\x2c\x35\x2e\x32\x33\x2e\x30\x35\x2c\x36\x2e\ -\x39\x35\x2d\x2e\x33\x34\x2c\x34\x2e\x39\x38\x2d\x34\x2e\x35\x38\ -\x2d\x33\x39\x2e\x34\x37\x2d\x38\x38\x2e\x35\x38\x2d\x33\x38\x2e\ -\x30\x34\x2d\x32\x31\x31\x2e\x31\x39\x2d\x33\x2e\x38\x36\x2d\x33\ -\x30\x30\x2e\x36\x38\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x33\x31\x31\x2e\x36\x35\x2c\x39\x31\x2e\x33\x32\ -\x63\x37\x2e\x31\x39\x2e\x30\x38\x2c\x31\x34\x2e\x33\x31\x2e\x37\ -\x36\x2c\x32\x31\x2e\x31\x31\x2c\x32\x2e\x36\x2c\x31\x33\x2e\x35\ -\x34\x2c\x33\x2e\x36\x35\x2c\x32\x30\x2e\x36\x2c\x31\x30\x2e\x38\ -\x36\x2c\x32\x32\x2e\x34\x2c\x32\x30\x2e\x39\x32\x2c\x32\x2e\x30\ -\x31\x2c\x31\x31\x2e\x32\x31\x2d\x2e\x37\x38\x2c\x32\x32\x2e\x30\ -\x32\x2d\x35\x2e\x33\x33\x2c\x33\x32\x2e\x36\x39\x71\x2d\x32\x2e\ -\x31\x39\x2c\x35\x2e\x31\x33\x2c\x35\x2e\x37\x32\x2c\x35\x2e\x31\ -\x33\x68\x35\x2e\x34\x63\x31\x33\x2e\x30\x32\x2c\x30\x2c\x31\x33\ -\x2e\x30\x36\x2c\x30\x2c\x31\x36\x2e\x30\x38\x2d\x39\x2e\x31\x37\ -\x2c\x31\x32\x2e\x31\x38\x2d\x33\x33\x2e\x36\x38\x2d\x33\x2e\x35\ -\x36\x2d\x36\x34\x2e\x31\x35\x2d\x34\x39\x2e\x36\x33\x2d\x36\x39\ -\x2d\x32\x31\x2e\x34\x2d\x32\x2e\x37\x2d\x32\x31\x2e\x33\x32\x2d\ -\x32\x2e\x34\x37\x2d\x32\x30\x2e\x39\x38\x2c\x31\x32\x2e\x38\x39\ -\x2e\x30\x36\x2c\x32\x2e\x39\x34\x2c\x31\x2e\x32\x32\x2c\x33\x2e\ -\x39\x2c\x35\x2e\x32\x33\x2c\x33\x2e\x39\x34\x5a\x22\x2f\x3e\x0a\ -\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x32\x2e\x35\x34\ -\x2c\x34\x31\x35\x2e\x39\x37\x63\x30\x2d\x31\x34\x2e\x32\x33\x2c\ -\x32\x2e\x35\x32\x2d\x32\x37\x2e\x38\x36\x2c\x37\x2e\x31\x34\x2d\ -\x34\x30\x2e\x34\x39\x2d\x36\x2e\x37\x38\x2d\x36\x36\x2e\x34\x39\ -\x2d\x2e\x39\x35\x2d\x31\x33\x33\x2e\x37\x35\x2c\x32\x32\x2e\x31\ -\x35\x2d\x31\x39\x38\x2c\x31\x2e\x33\x2d\x33\x2e\x37\x2c\x35\x2e\ -\x30\x38\x2d\x38\x2e\x37\x36\x2c\x33\x2e\x30\x34\x2d\x31\x30\x2e\ -\x38\x33\x2d\x32\x2e\x38\x36\x2d\x32\x2e\x38\x39\x2d\x31\x30\x2e\ -\x33\x39\x2d\x2e\x35\x2d\x31\x34\x2e\x34\x33\x2d\x31\x2e\x30\x31\ -\x2d\x34\x2e\x38\x31\x2c\x30\x2d\x38\x2e\x32\x33\x2e\x32\x36\x2d\ -\x31\x31\x2e\x35\x34\x2d\x2e\x30\x36\x2d\x35\x2e\x30\x32\x2d\x2e\ -\x34\x38\x2d\x36\x2e\x39\x31\x2c\x31\x2e\x31\x37\x2d\x38\x2e\x34\ -\x39\x2c\x34\x2e\x33\x35\x2d\x33\x35\x2e\x35\x31\x2c\x37\x33\x2e\ -\x36\x35\x2d\x33\x36\x2e\x36\x34\x2c\x31\x36\x39\x2e\x35\x34\x2d\ -\x32\x31\x2e\x31\x35\x2c\x32\x34\x36\x2e\x39\x37\x2c\x34\x2e\x35\ -\x33\x2c\x32\x31\x2e\x32\x2c\x31\x30\x2e\x39\x32\x2c\x34\x32\x2e\ -\x31\x31\x2c\x32\x31\x2e\x34\x34\x2c\x36\x32\x2e\x32\x39\x2c\x31\ -\x2e\x34\x34\x2c\x32\x2e\x37\x36\x2c\x33\x2e\x32\x33\x2c\x34\x2e\ -\x30\x38\x2c\x37\x2e\x36\x37\x2c\x33\x2e\x38\x39\x2c\x34\x2e\x39\ -\x38\x2d\x2e\x32\x31\x2c\x39\x2e\x39\x39\x2d\x2e\x32\x38\x2c\x31\ -\x34\x2e\x39\x39\x2d\x2e\x32\x31\x2d\x31\x33\x2e\x31\x33\x2d\x31\ -\x39\x2d\x32\x30\x2e\x38\x33\x2d\x34\x32\x2e\x30\x35\x2d\x32\x30\ -\x2e\x38\x33\x2d\x36\x36\x2e\x39\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\x31\x38\x2c\x32\x39\ -\x38\x2e\x31\x34\x63\x2d\x32\x2e\x32\x32\x2d\x32\x34\x2e\x38\x32\ -\x2d\x37\x2e\x32\x37\x2d\x34\x32\x2e\x31\x37\x2d\x31\x33\x2e\x31\ -\x35\x2d\x34\x32\x2e\x31\x37\x73\x2d\x31\x31\x2e\x33\x37\x2c\x31\ -\x38\x2e\x38\x39\x2d\x31\x33\x2e\x34\x33\x2c\x34\x35\x2e\x34\x36\ -\x63\x38\x2e\x35\x34\x2d\x32\x2e\x30\x36\x2c\x31\x37\x2e\x34\x33\ -\x2d\x33\x2e\x32\x2c\x32\x36\x2e\x35\x38\x2d\x33\x2e\x32\x39\x5a\ -\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\ -\x33\x2e\x34\x36\x2c\x33\x31\x38\x2e\x39\x37\x63\x31\x2e\x36\x31\ -\x2d\x34\x33\x2e\x38\x35\x2c\x31\x30\x2e\x36\x36\x2d\x38\x35\x2e\ -\x30\x33\x2c\x32\x31\x2e\x33\x39\x2d\x31\x32\x32\x2e\x34\x2c\x34\ -\x2e\x30\x35\x2d\x31\x34\x2e\x31\x32\x2c\x31\x30\x2e\x31\x37\x2d\ -\x32\x37\x2e\x38\x31\x2c\x31\x38\x2e\x34\x36\x2d\x34\x30\x2e\x39\ -\x39\x2c\x32\x2e\x35\x37\x2d\x34\x2e\x30\x39\x2c\x35\x2e\x37\x38\ -\x2d\x37\x2e\x32\x36\x2c\x31\x32\x2e\x37\x35\x2d\x37\x2e\x31\x38\ -\x2c\x36\x2e\x36\x36\x2e\x30\x37\x2c\x39\x2e\x36\x38\x2c\x33\x2e\ -\x31\x35\x2c\x31\x32\x2e\x31\x31\x2c\x37\x2e\x30\x38\x2c\x31\x31\ -\x2e\x39\x33\x2c\x31\x39\x2e\x32\x39\x2c\x31\x38\x2e\x36\x39\x2c\ -\x33\x39\x2e\x36\x32\x2c\x32\x34\x2e\x30\x36\x2c\x36\x30\x2e\x32\ -\x33\x2c\x36\x2e\x35\x31\x2c\x32\x36\x2e\x33\x39\x2c\x31\x30\x2e\ -\x38\x38\x2c\x35\x36\x2e\x33\x37\x2c\x31\x32\x2e\x33\x39\x2c\x38\ -\x37\x2e\x34\x37\x2c\x38\x2e\x38\x37\x2c\x32\x2e\x36\x39\x2c\x31\ -\x37\x2e\x33\x2c\x36\x2e\x34\x2c\x32\x35\x2e\x31\x36\x2c\x31\x30\ -\x2e\x39\x39\x2d\x2e\x36\x39\x2d\x33\x32\x2e\x32\x34\x2d\x34\x2e\ -\x32\x2d\x36\x32\x2e\x33\x32\x2d\x39\x2e\x33\x36\x2d\x38\x35\x2e\ -\x38\x36\x2d\x36\x2e\x37\x31\x2d\x33\x30\x2e\x38\x36\x2d\x32\x32\ -\x2e\x39\x38\x2d\x39\x30\x2e\x37\x35\x2d\x35\x39\x2e\x31\x38\x2d\ -\x31\x30\x36\x2e\x35\x38\x68\x2d\x31\x30\x2e\x37\x39\x63\x2d\x32\ -\x30\x2e\x34\x2c\x39\x2e\x31\x39\x2d\x33\x30\x2e\x38\x31\x2c\x32\ -\x37\x2e\x38\x37\x2d\x33\x38\x2e\x39\x38\x2c\x34\x34\x2e\x35\x33\ -\x2d\x32\x32\x2e\x30\x35\x2c\x34\x38\x2e\x34\x38\x2d\x33\x31\x2e\ -\x39\x34\x2c\x31\x31\x31\x2e\x30\x32\x2d\x33\x30\x2c\x31\x37\x32\ -\x2e\x33\x38\x2c\x36\x2e\x34\x37\x2d\x37\x2e\x34\x34\x2c\x31\x33\ -\x2e\x38\x37\x2d\x31\x34\x2e\x30\x35\x2c\x32\x32\x2d\x31\x39\x2e\ -\x36\x37\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x03\x74\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x65\x32\x66\x32\x36\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x78\x3d\x22\x32\x35\x35\x2e\x33\x31\x22\x20\x79\x3d\ -\x22\x37\x38\x2e\x38\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\ -\x36\x2e\x33\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x35\ -\x32\x2e\x34\x37\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ -\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x39\x34\x2e\x33\ -\x37\x20\x2d\x31\x30\x30\x2e\x34\x38\x29\x20\x72\x6f\x74\x61\x74\ -\x65\x28\x34\x35\x29\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\ -\x6f\x69\x6e\x74\x73\x3d\x22\x33\x33\x33\x2e\x31\x32\x20\x32\x37\ -\x33\x2e\x30\x39\x20\x33\x33\x33\x2e\x31\x32\x20\x35\x32\x31\x2e\ -\x33\x20\x33\x35\x31\x20\x35\x32\x31\x2e\x33\x20\x33\x35\x31\x20\ -\x32\x35\x35\x2e\x32\x31\x20\x33\x33\x33\x2e\x31\x32\x20\x32\x37\ -\x33\x2e\x30\x39\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\ -\x69\x6e\x74\x73\x3d\x22\x33\x35\x31\x2e\x30\x39\x20\x31\x38\x35\ -\x2e\x37\x37\x20\x33\x35\x31\x2e\x30\x39\x20\x36\x38\x2e\x38\x33\ -\x20\x33\x33\x33\x2e\x30\x34\x20\x36\x38\x2e\x38\x33\x20\x33\x33\ -\x33\x2e\x30\x34\x20\x32\x30\x33\x2e\x38\x32\x20\x33\x35\x31\x2e\ -\x30\x39\x20\x31\x38\x35\x2e\x37\x37\x22\x2f\x3e\x3c\x70\x6f\x6c\ -\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x37\x30\x2e\x30\ -\x31\x20\x32\x36\x35\x2e\x39\x32\x20\x32\x37\x30\x2e\x30\x31\x20\ -\x36\x38\x2e\x38\x33\x20\x32\x35\x32\x2e\x30\x36\x20\x36\x38\x2e\ -\x38\x33\x20\x32\x35\x32\x2e\x30\x36\x20\x32\x30\x34\x2e\x33\x37\ -\x20\x32\x32\x38\x2e\x31\x37\x20\x32\x30\x34\x2e\x33\x37\x20\x32\ -\x32\x38\x2e\x31\x37\x20\x31\x38\x35\x2e\x38\x31\x20\x32\x30\x31\ -\x2e\x38\x33\x20\x31\x38\x35\x2e\x38\x31\x20\x32\x30\x31\x2e\x38\ -\x33\x20\x32\x30\x34\x2e\x33\x37\x20\x31\x38\x32\x2e\x34\x36\x20\ -\x32\x30\x34\x2e\x33\x37\x20\x31\x38\x32\x2e\x34\x36\x20\x33\x35\ -\x33\x2e\x34\x37\x20\x32\x37\x30\x2e\x30\x31\x20\x32\x36\x35\x2e\ -\x39\x32\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\ -\x74\x73\x3d\x22\x32\x37\x30\x2e\x30\x31\x20\x32\x38\x38\x2e\x33\ -\x32\x20\x31\x38\x32\x2e\x34\x36\x20\x33\x37\x35\x2e\x38\x37\x20\ -\x31\x38\x32\x2e\x34\x36\x20\x33\x38\x35\x2e\x37\x37\x20\x32\x30\ -\x32\x2e\x34\x31\x20\x33\x38\x35\x2e\x37\x37\x20\x32\x37\x30\x2e\ -\x30\x31\x20\x33\x31\x38\x2e\x31\x37\x20\x32\x37\x30\x2e\x30\x31\ -\x20\x32\x38\x38\x2e\x33\x32\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\ -\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x32\x34\x2e\x38\x31\x20\ -\x33\x38\x35\x2e\x37\x37\x20\x32\x35\x32\x2e\x30\x36\x20\x33\x38\ -\x35\x2e\x37\x37\x20\x32\x35\x32\x2e\x30\x36\x20\x35\x32\x31\x2e\ -\x33\x20\x32\x37\x30\x2e\x30\x31\x20\x35\x32\x31\x2e\x33\x20\x32\ -\x37\x30\x2e\x30\x31\x20\x33\x34\x30\x2e\x35\x37\x20\x32\x32\x34\ -\x2e\x38\x31\x20\x33\x38\x35\x2e\x37\x37\x22\x2f\x3e\x3c\x2f\x73\ -\x76\x67\x3e\ -\x00\x00\x01\xfd\ +\x00\x00\x03\x74\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x65\x32\x66\x32\x36\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x78\x3d\x22\x32\x35\x35\x2e\x33\x31\x22\x20\x79\x3d\ +\x22\x37\x38\x2e\x38\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\ +\x36\x2e\x33\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x35\ +\x32\x2e\x34\x37\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x39\x34\x2e\x33\ +\x37\x20\x2d\x31\x30\x30\x2e\x34\x38\x29\x20\x72\x6f\x74\x61\x74\ +\x65\x28\x34\x35\x29\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\ +\x6f\x69\x6e\x74\x73\x3d\x22\x33\x33\x33\x2e\x31\x32\x20\x32\x37\ +\x33\x2e\x30\x39\x20\x33\x33\x33\x2e\x31\x32\x20\x35\x32\x31\x2e\ +\x33\x20\x33\x35\x31\x20\x35\x32\x31\x2e\x33\x20\x33\x35\x31\x20\ +\x32\x35\x35\x2e\x32\x31\x20\x33\x33\x33\x2e\x31\x32\x20\x32\x37\ +\x33\x2e\x30\x39\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\ +\x69\x6e\x74\x73\x3d\x22\x33\x35\x31\x2e\x30\x39\x20\x31\x38\x35\ +\x2e\x37\x37\x20\x33\x35\x31\x2e\x30\x39\x20\x36\x38\x2e\x38\x33\ +\x20\x33\x33\x33\x2e\x30\x34\x20\x36\x38\x2e\x38\x33\x20\x33\x33\ +\x33\x2e\x30\x34\x20\x32\x30\x33\x2e\x38\x32\x20\x33\x35\x31\x2e\ +\x30\x39\x20\x31\x38\x35\x2e\x37\x37\x22\x2f\x3e\x3c\x70\x6f\x6c\ +\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x37\x30\x2e\x30\ +\x31\x20\x32\x36\x35\x2e\x39\x32\x20\x32\x37\x30\x2e\x30\x31\x20\ +\x36\x38\x2e\x38\x33\x20\x32\x35\x32\x2e\x30\x36\x20\x36\x38\x2e\ +\x38\x33\x20\x32\x35\x32\x2e\x30\x36\x20\x32\x30\x34\x2e\x33\x37\ +\x20\x32\x32\x38\x2e\x31\x37\x20\x32\x30\x34\x2e\x33\x37\x20\x32\ +\x32\x38\x2e\x31\x37\x20\x31\x38\x35\x2e\x38\x31\x20\x32\x30\x31\ +\x2e\x38\x33\x20\x31\x38\x35\x2e\x38\x31\x20\x32\x30\x31\x2e\x38\ +\x33\x20\x32\x30\x34\x2e\x33\x37\x20\x31\x38\x32\x2e\x34\x36\x20\ +\x32\x30\x34\x2e\x33\x37\x20\x31\x38\x32\x2e\x34\x36\x20\x33\x35\ +\x33\x2e\x34\x37\x20\x32\x37\x30\x2e\x30\x31\x20\x32\x36\x35\x2e\ +\x39\x32\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\ +\x74\x73\x3d\x22\x32\x37\x30\x2e\x30\x31\x20\x32\x38\x38\x2e\x33\ +\x32\x20\x31\x38\x32\x2e\x34\x36\x20\x33\x37\x35\x2e\x38\x37\x20\ +\x31\x38\x32\x2e\x34\x36\x20\x33\x38\x35\x2e\x37\x37\x20\x32\x30\ +\x32\x2e\x34\x31\x20\x33\x38\x35\x2e\x37\x37\x20\x32\x37\x30\x2e\ +\x30\x31\x20\x33\x31\x38\x2e\x31\x37\x20\x32\x37\x30\x2e\x30\x31\ +\x20\x32\x38\x38\x2e\x33\x32\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\ +\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x32\x34\x2e\x38\x31\x20\ +\x33\x38\x35\x2e\x37\x37\x20\x32\x35\x32\x2e\x30\x36\x20\x33\x38\ +\x35\x2e\x37\x37\x20\x32\x35\x32\x2e\x30\x36\x20\x35\x32\x31\x2e\ +\x33\x20\x32\x37\x30\x2e\x30\x31\x20\x35\x32\x31\x2e\x33\x20\x32\ +\x37\x30\x2e\x30\x31\x20\x33\x34\x30\x2e\x35\x37\x20\x32\x32\x34\ +\x2e\x38\x31\x20\x33\x38\x35\x2e\x37\x37\x22\x2f\x3e\x3c\x2f\x73\ +\x76\x67\x3e\ +\x00\x00\x01\xfd\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -3034,7 +2963,7 @@ \x33\x2e\x31\x34\x20\x35\x31\x32\x2e\x38\x34\x20\x34\x33\x33\x2e\ \x31\x34\x20\x35\x31\x32\x2e\x38\x34\x20\x33\x39\x34\x2e\x38\x31\ \x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x09\xb9\ +\x00\x00\x04\x4f\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -3051,51 +2980,122 @@ \x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ \x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ \x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x30\ -\x35\x2e\x35\x34\x63\x2d\x35\x32\x2e\x34\x36\x2c\x30\x2d\x31\x30\ -\x34\x2e\x39\x31\x2d\x2e\x30\x32\x2d\x31\x35\x37\x2e\x33\x37\x2e\ -\x30\x34\x2d\x32\x36\x2e\x36\x34\x2e\x30\x33\x2d\x34\x38\x2e\x32\ -\x34\x2d\x32\x31\x2e\x35\x34\x2d\x34\x38\x2e\x32\x32\x2d\x34\x38\ -\x2e\x31\x38\x2e\x30\x38\x2d\x31\x30\x34\x2e\x37\x32\x2e\x30\x38\ -\x2d\x32\x30\x39\x2e\x34\x34\x2c\x30\x2d\x33\x31\x34\x2e\x31\x35\ -\x2d\x2e\x30\x32\x2d\x32\x36\x2e\x39\x37\x2c\x32\x31\x2e\x38\x34\ -\x2d\x34\x38\x2e\x38\x33\x2c\x34\x38\x2e\x38\x31\x2d\x34\x38\x2e\ -\x38\x31\x2c\x31\x30\x33\x2e\x38\x32\x2e\x30\x38\x2c\x32\x30\x37\ -\x2e\x36\x35\x2e\x30\x38\x2c\x33\x31\x31\x2e\x34\x37\x2c\x30\x2c\ -\x32\x38\x2e\x31\x32\x2d\x2e\x30\x32\x2c\x35\x30\x2e\x39\x32\x2c\ -\x32\x32\x2e\x37\x37\x2c\x35\x30\x2e\x39\x2c\x35\x30\x2e\x39\x2d\ -\x2e\x30\x37\x2c\x31\x30\x33\x2e\x32\x33\x2d\x2e\x30\x37\x2c\x32\ -\x30\x36\x2e\x34\x36\x2c\x30\x2c\x33\x30\x39\x2e\x36\x38\x2e\x30\ -\x32\x2c\x32\x37\x2e\x39\x36\x2d\x32\x32\x2e\x36\x35\x2c\x35\x30\ -\x2e\x35\x39\x2d\x35\x30\x2e\x36\x2c\x35\x30\x2e\x35\x36\x2d\x35\ -\x31\x2e\x36\x36\x2d\x2e\x30\x36\x2d\x31\x30\x33\x2e\x33\x32\x2d\ -\x2e\x30\x33\x2d\x31\x35\x34\x2e\x39\x39\x2d\x2e\x30\x33\x5a\x4d\ -\x34\x37\x32\x2e\x37\x2c\x33\x30\x30\x2e\x33\x33\x63\x2e\x30\x35\ -\x2d\x39\x36\x2e\x31\x36\x2d\x37\x37\x2e\x37\x31\x2d\x31\x37\x34\ -\x2e\x37\x31\x2d\x31\x37\x33\x2e\x30\x36\x2d\x31\x37\x34\x2e\x38\ -\x31\x2d\x39\x39\x2e\x36\x32\x2d\x2e\x31\x31\x2d\x31\x37\x33\x2e\ -\x31\x33\x2c\x37\x39\x2e\x37\x36\x2d\x31\x37\x35\x2e\x35\x2c\x31\ -\x36\x39\x2e\x35\x39\x2d\x32\x2e\x35\x33\x2c\x39\x36\x2e\x30\x33\ -\x2c\x37\x33\x2e\x35\x37\x2c\x31\x37\x37\x2e\x36\x37\x2c\x31\x37\ -\x31\x2e\x34\x32\x2c\x31\x37\x39\x2e\x31\x34\x2c\x39\x39\x2e\x38\ -\x36\x2c\x31\x2e\x35\x2c\x31\x37\x37\x2e\x33\x31\x2d\x37\x39\x2e\ -\x31\x36\x2c\x31\x37\x37\x2e\x31\x35\x2d\x31\x37\x33\x2e\x39\x32\ -\x5a\x4d\x34\x37\x32\x2e\x36\x39\x2c\x34\x35\x35\x2e\x39\x38\x63\ -\x30\x2d\x31\x30\x2e\x32\x33\x2d\x37\x2e\x38\x37\x2d\x31\x38\x2e\ -\x31\x31\x2d\x31\x38\x2e\x31\x34\x2d\x31\x38\x2e\x31\x37\x2d\x31\ -\x30\x2e\x31\x35\x2d\x2e\x30\x36\x2d\x31\x38\x2e\x33\x33\x2c\x37\ -\x2e\x38\x35\x2d\x31\x38\x2e\x35\x33\x2c\x31\x37\x2e\x39\x2d\x2e\ -\x32\x2c\x31\x30\x2c\x38\x2e\x34\x36\x2c\x31\x38\x2e\x36\x37\x2c\ -\x31\x38\x2e\x35\x39\x2c\x31\x38\x2e\x36\x2c\x31\x30\x2e\x30\x32\ -\x2d\x2e\x30\x37\x2c\x31\x38\x2e\x30\x38\x2d\x38\x2e\x32\x34\x2c\ -\x31\x38\x2e\x30\x38\x2d\x31\x38\x2e\x33\x33\x5a\x4d\x31\x32\x34\ -\x2e\x33\x31\x2c\x31\x34\x33\x2e\x36\x35\x63\x2d\x2e\x30\x35\x2c\ -\x31\x30\x2e\x34\x38\x2c\x37\x2e\x34\x34\x2c\x31\x38\x2e\x32\x38\ -\x2c\x31\x37\x2e\x37\x32\x2c\x31\x38\x2e\x34\x36\x2c\x31\x30\x2e\ -\x34\x33\x2e\x31\x38\x2c\x31\x38\x2e\x36\x36\x2d\x37\x2e\x38\x37\ -\x2c\x31\x38\x2e\x36\x36\x2d\x31\x38\x2e\x32\x37\x2c\x30\x2d\x39\ -\x2e\x39\x31\x2d\x38\x2e\x32\x38\x2d\x31\x38\x2e\x32\x35\x2d\x31\ -\x38\x2e\x32\x2d\x31\x38\x2e\x33\x32\x2d\x31\x30\x2e\x30\x34\x2d\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x31\x2e\x34\x32\ +\x2c\x33\x35\x38\x2e\x31\x34\x63\x30\x2d\x31\x31\x2e\x36\x31\x2c\ +\x31\x2e\x37\x37\x2d\x32\x31\x2e\x34\x39\x2c\x35\x2e\x33\x32\x2d\ +\x32\x39\x2e\x36\x34\x2c\x33\x2e\x35\x35\x2d\x38\x2e\x31\x35\x2c\ +\x37\x2e\x38\x38\x2d\x31\x35\x2e\x33\x31\x2c\x31\x33\x2e\x30\x31\ +\x2d\x32\x31\x2e\x34\x39\x2c\x35\x2e\x31\x32\x2d\x36\x2e\x31\x37\ +\x2c\x31\x30\x2e\x33\x2d\x31\x32\x2e\x30\x34\x2c\x31\x35\x2e\x35\ +\x33\x2d\x31\x37\x2e\x36\x2c\x35\x2e\x32\x32\x2d\x35\x2e\x35\x36\ +\x2c\x39\x2e\x35\x36\x2d\x31\x31\x2e\x34\x39\x2c\x31\x33\x2e\x30\ +\x31\x2d\x31\x37\x2e\x37\x39\x2c\x33\x2e\x34\x35\x2d\x36\x2e\x33\ +\x2c\x35\x2e\x31\x37\x2d\x31\x33\x2e\x37\x37\x2c\x35\x2e\x31\x37\ +\x2d\x32\x32\x2e\x34\x32\x2c\x30\x2d\x31\x31\x2e\x38\x36\x2d\x33\ +\x2e\x37\x35\x2d\x32\x31\x2e\x34\x39\x2d\x31\x31\x2e\x32\x34\x2d\ +\x32\x38\x2e\x39\x2d\x37\x2e\x34\x39\x2d\x37\x2e\x34\x31\x2d\x31\ +\x37\x2e\x38\x34\x2d\x31\x31\x2e\x31\x32\x2d\x33\x31\x2e\x30\x35\ +\x2d\x31\x31\x2e\x31\x32\x2d\x31\x32\x2e\x30\x33\x2c\x30\x2d\x32\ +\x32\x2e\x33\x38\x2c\x32\x2e\x35\x34\x2d\x33\x31\x2e\x30\x35\x2c\ +\x37\x2e\x36\x2d\x38\x2e\x36\x38\x2c\x35\x2e\x30\x37\x2d\x31\x35\ +\x2e\x39\x37\x2c\x31\x32\x2e\x32\x39\x2d\x32\x31\x2e\x38\x38\x2c\ +\x32\x31\x2e\x36\x38\x6c\x2d\x32\x31\x2e\x35\x39\x2d\x31\x39\x2e\ +\x32\x37\x63\x38\x2e\x32\x38\x2d\x31\x33\x2e\x30\x39\x2c\x31\x38\ +\x2e\x37\x38\x2d\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x34\x39\x2d\ +\x33\x30\x2e\x35\x37\x2c\x31\x32\x2e\x37\x32\x2d\x37\x2e\x32\x38\ +\x2c\x32\x37\x2e\x37\x35\x2d\x31\x30\x2e\x39\x33\x2c\x34\x35\x2e\ +\x31\x2d\x31\x30\x2e\x39\x33\x2c\x32\x31\x2e\x32\x39\x2c\x30\x2c\ +\x33\x38\x2e\x33\x2c\x35\x2e\x38\x37\x2c\x35\x31\x2e\x30\x31\x2c\ +\x31\x37\x2e\x36\x2c\x31\x32\x2e\x37\x32\x2c\x31\x31\x2e\x37\x34\ +\x2c\x31\x39\x2e\x30\x37\x2c\x32\x37\x2e\x38\x35\x2c\x31\x39\x2e\ +\x30\x37\x2c\x34\x38\x2e\x33\x35\x2c\x30\x2c\x31\x32\x2e\x33\x35\ +\x2d\x31\x2e\x37\x37\x2c\x32\x32\x2e\x37\x33\x2d\x35\x2e\x33\x32\ +\x2c\x33\x31\x2e\x31\x32\x2d\x33\x2e\x35\x35\x2c\x38\x2e\x34\x2d\ +\x37\x2e\x39\x34\x2c\x31\x35\x2e\x37\x35\x2d\x31\x33\x2e\x31\x36\ +\x2c\x32\x32\x2e\x30\x35\x2d\x35\x2e\x32\x33\x2c\x36\x2e\x33\x2d\ +\x31\x30\x2e\x34\x2c\x31\x32\x2e\x32\x39\x2d\x31\x35\x2e\x35\x32\ +\x2c\x31\x37\x2e\x39\x37\x2d\x35\x2e\x31\x33\x2c\x35\x2e\x36\x39\ +\x2d\x39\x2e\x34\x36\x2c\x31\x31\x2e\x39\x32\x2d\x31\x33\x2e\x30\ +\x31\x2c\x31\x38\x2e\x37\x31\x2d\x33\x2e\x35\x35\x2c\x36\x2e\x38\ +\x2d\x35\x2e\x33\x32\x2c\x31\x35\x2e\x30\x31\x2d\x35\x2e\x33\x32\ +\x2c\x32\x34\x2e\x36\x34\x68\x2d\x32\x39\x2e\x35\x37\x5a\x4d\x33\ +\x30\x35\x2e\x37\x36\x2c\x34\x30\x37\x2e\x33\x32\x63\x2d\x35\x2e\ +\x35\x34\x2c\x30\x2d\x31\x30\x2e\x30\x33\x2d\x31\x2e\x38\x31\x2d\ +\x31\x33\x2e\x34\x36\x2d\x35\x2e\x34\x34\x2d\x33\x2e\x34\x34\x2d\ +\x33\x2e\x36\x33\x2d\x35\x2e\x31\x36\x2d\x37\x2e\x39\x32\x2d\x35\ +\x2e\x31\x36\x2d\x31\x32\x2e\x38\x39\x73\x31\x2e\x37\x32\x2d\x39\ +\x2e\x35\x2c\x35\x2e\x31\x36\x2d\x31\x33\x2e\x30\x33\x63\x33\x2e\ +\x34\x34\x2d\x33\x2e\x35\x33\x2c\x37\x2e\x39\x32\x2d\x35\x2e\x33\ +\x2c\x31\x33\x2e\x34\x36\x2d\x35\x2e\x33\x73\x39\x2e\x37\x34\x2c\ +\x31\x2e\x37\x37\x2c\x31\x33\x2e\x31\x38\x2c\x35\x2e\x33\x63\x33\ +\x2e\x34\x34\x2c\x33\x2e\x35\x34\x2c\x35\x2e\x31\x36\x2c\x37\x2e\ +\x38\x38\x2c\x35\x2e\x31\x36\x2c\x31\x33\x2e\x30\x33\x73\x2d\x31\ +\x2e\x37\x32\x2c\x39\x2e\x32\x37\x2d\x35\x2e\x31\x36\x2c\x31\x32\ +\x2e\x38\x39\x63\x2d\x33\x2e\x34\x34\x2c\x33\x2e\x36\x33\x2d\x37\ +\x2e\x38\x33\x2c\x35\x2e\x34\x34\x2d\x31\x33\x2e\x31\x38\x2c\x35\ +\x2e\x34\x34\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x09\xb9\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ +\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ +\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ +\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ +\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ +\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ +\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ +\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ +\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ +\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x30\ +\x35\x2e\x35\x34\x63\x2d\x35\x32\x2e\x34\x36\x2c\x30\x2d\x31\x30\ +\x34\x2e\x39\x31\x2d\x2e\x30\x32\x2d\x31\x35\x37\x2e\x33\x37\x2e\ +\x30\x34\x2d\x32\x36\x2e\x36\x34\x2e\x30\x33\x2d\x34\x38\x2e\x32\ +\x34\x2d\x32\x31\x2e\x35\x34\x2d\x34\x38\x2e\x32\x32\x2d\x34\x38\ +\x2e\x31\x38\x2e\x30\x38\x2d\x31\x30\x34\x2e\x37\x32\x2e\x30\x38\ +\x2d\x32\x30\x39\x2e\x34\x34\x2c\x30\x2d\x33\x31\x34\x2e\x31\x35\ +\x2d\x2e\x30\x32\x2d\x32\x36\x2e\x39\x37\x2c\x32\x31\x2e\x38\x34\ +\x2d\x34\x38\x2e\x38\x33\x2c\x34\x38\x2e\x38\x31\x2d\x34\x38\x2e\ +\x38\x31\x2c\x31\x30\x33\x2e\x38\x32\x2e\x30\x38\x2c\x32\x30\x37\ +\x2e\x36\x35\x2e\x30\x38\x2c\x33\x31\x31\x2e\x34\x37\x2c\x30\x2c\ +\x32\x38\x2e\x31\x32\x2d\x2e\x30\x32\x2c\x35\x30\x2e\x39\x32\x2c\ +\x32\x32\x2e\x37\x37\x2c\x35\x30\x2e\x39\x2c\x35\x30\x2e\x39\x2d\ +\x2e\x30\x37\x2c\x31\x30\x33\x2e\x32\x33\x2d\x2e\x30\x37\x2c\x32\ +\x30\x36\x2e\x34\x36\x2c\x30\x2c\x33\x30\x39\x2e\x36\x38\x2e\x30\ +\x32\x2c\x32\x37\x2e\x39\x36\x2d\x32\x32\x2e\x36\x35\x2c\x35\x30\ +\x2e\x35\x39\x2d\x35\x30\x2e\x36\x2c\x35\x30\x2e\x35\x36\x2d\x35\ +\x31\x2e\x36\x36\x2d\x2e\x30\x36\x2d\x31\x30\x33\x2e\x33\x32\x2d\ +\x2e\x30\x33\x2d\x31\x35\x34\x2e\x39\x39\x2d\x2e\x30\x33\x5a\x4d\ +\x34\x37\x32\x2e\x37\x2c\x33\x30\x30\x2e\x33\x33\x63\x2e\x30\x35\ +\x2d\x39\x36\x2e\x31\x36\x2d\x37\x37\x2e\x37\x31\x2d\x31\x37\x34\ +\x2e\x37\x31\x2d\x31\x37\x33\x2e\x30\x36\x2d\x31\x37\x34\x2e\x38\ +\x31\x2d\x39\x39\x2e\x36\x32\x2d\x2e\x31\x31\x2d\x31\x37\x33\x2e\ +\x31\x33\x2c\x37\x39\x2e\x37\x36\x2d\x31\x37\x35\x2e\x35\x2c\x31\ +\x36\x39\x2e\x35\x39\x2d\x32\x2e\x35\x33\x2c\x39\x36\x2e\x30\x33\ +\x2c\x37\x33\x2e\x35\x37\x2c\x31\x37\x37\x2e\x36\x37\x2c\x31\x37\ +\x31\x2e\x34\x32\x2c\x31\x37\x39\x2e\x31\x34\x2c\x39\x39\x2e\x38\ +\x36\x2c\x31\x2e\x35\x2c\x31\x37\x37\x2e\x33\x31\x2d\x37\x39\x2e\ +\x31\x36\x2c\x31\x37\x37\x2e\x31\x35\x2d\x31\x37\x33\x2e\x39\x32\ +\x5a\x4d\x34\x37\x32\x2e\x36\x39\x2c\x34\x35\x35\x2e\x39\x38\x63\ +\x30\x2d\x31\x30\x2e\x32\x33\x2d\x37\x2e\x38\x37\x2d\x31\x38\x2e\ +\x31\x31\x2d\x31\x38\x2e\x31\x34\x2d\x31\x38\x2e\x31\x37\x2d\x31\ +\x30\x2e\x31\x35\x2d\x2e\x30\x36\x2d\x31\x38\x2e\x33\x33\x2c\x37\ +\x2e\x38\x35\x2d\x31\x38\x2e\x35\x33\x2c\x31\x37\x2e\x39\x2d\x2e\ +\x32\x2c\x31\x30\x2c\x38\x2e\x34\x36\x2c\x31\x38\x2e\x36\x37\x2c\ +\x31\x38\x2e\x35\x39\x2c\x31\x38\x2e\x36\x2c\x31\x30\x2e\x30\x32\ +\x2d\x2e\x30\x37\x2c\x31\x38\x2e\x30\x38\x2d\x38\x2e\x32\x34\x2c\ +\x31\x38\x2e\x30\x38\x2d\x31\x38\x2e\x33\x33\x5a\x4d\x31\x32\x34\ +\x2e\x33\x31\x2c\x31\x34\x33\x2e\x36\x35\x63\x2d\x2e\x30\x35\x2c\ +\x31\x30\x2e\x34\x38\x2c\x37\x2e\x34\x34\x2c\x31\x38\x2e\x32\x38\ +\x2c\x31\x37\x2e\x37\x32\x2c\x31\x38\x2e\x34\x36\x2c\x31\x30\x2e\ +\x34\x33\x2e\x31\x38\x2c\x31\x38\x2e\x36\x36\x2d\x37\x2e\x38\x37\ +\x2c\x31\x38\x2e\x36\x36\x2d\x31\x38\x2e\x32\x37\x2c\x30\x2d\x39\ +\x2e\x39\x31\x2d\x38\x2e\x32\x38\x2d\x31\x38\x2e\x32\x35\x2d\x31\ +\x38\x2e\x32\x2d\x31\x38\x2e\x33\x32\x2d\x31\x30\x2e\x30\x34\x2d\ \x2e\x30\x38\x2d\x31\x38\x2e\x31\x33\x2c\x38\x2d\x31\x38\x2e\x31\ \x38\x2c\x31\x38\x2e\x31\x34\x5a\x4d\x34\x37\x32\x2e\x36\x39\x2c\ \x31\x34\x33\x2e\x38\x35\x63\x2d\x2e\x30\x32\x2d\x31\x30\x2e\x30\ @@ -3597,260 +3597,6 @@ \x39\x36\x2e\x38\x32\x20\x32\x33\x34\x2e\x30\x34\x20\x34\x39\x36\ \x2e\x38\x32\x20\x32\x34\x33\x2e\x37\x39\x20\x34\x37\x31\x2e\x39\ \x32\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x07\xd8\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x38\x33\x2e\x35\x35\x2c\x33\x31\ -\x35\x2e\x35\x31\x63\x2d\x31\x2e\x34\x35\x2c\x31\x30\x2d\x32\x2e\ -\x35\x33\x2c\x32\x30\x2e\x30\x37\x2d\x34\x2e\x34\x2c\x33\x30\x2d\ -\x31\x31\x2e\x36\x37\x2c\x36\x31\x2e\x38\x31\x2d\x34\x30\x2e\x37\ -\x32\x2c\x31\x31\x34\x2e\x34\x38\x2d\x38\x34\x2e\x34\x34\x2c\x31\ -\x35\x39\x2e\x33\x43\x34\x38\x34\x2e\x39\x2c\x35\x31\x34\x2e\x38\ -\x37\x2c\x34\x37\x30\x2e\x36\x33\x2c\x35\x31\x35\x2e\x31\x38\x2c\ -\x34\x36\x31\x2c\x35\x30\x36\x73\x2d\x39\x2e\x39\x32\x2d\x32\x33\ -\x2e\x38\x2e\x30\x36\x2d\x33\x34\x2e\x31\x32\x61\x32\x37\x34\x2e\ -\x34\x33\x2c\x32\x37\x34\x2e\x34\x33\x2c\x30\x2c\x30\x2c\x30\x2c\ -\x34\x38\x2e\x34\x39\x2d\x36\x37\x2e\x36\x31\x63\x31\x37\x2e\x36\ -\x36\x2d\x33\x35\x2e\x31\x34\x2c\x32\x38\x2d\x37\x32\x2e\x30\x37\ -\x2c\x32\x36\x2e\x34\x35\x2d\x31\x31\x31\x2e\x37\x35\x43\x35\x33\ -\x34\x2e\x34\x37\x2c\x32\x35\x34\x2c\x35\x32\x32\x2e\x35\x2c\x32\ -\x31\x38\x2e\x34\x34\x2c\x35\x30\x33\x2e\x38\x2c\x31\x38\x35\x61\ -\x32\x37\x35\x2e\x34\x2c\x32\x37\x35\x2e\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x34\x32\x2e\x34\x2d\x35\x36\x2e\x34\x38\x63\x2d\x31\x31\ -\x2e\x31\x34\x2d\x31\x31\x2e\x35\x37\x2d\x31\x30\x2d\x32\x37\x2e\ -\x38\x37\x2c\x32\x2e\x31\x35\x2d\x33\x36\x2e\x36\x37\x61\x32\x32\ -\x2e\x37\x35\x2c\x32\x32\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x33\x31\x2e\x30\x36\x2c\x33\x2e\x34\x34\x63\x31\x33\x2e\x32\x2c\ -\x31\x35\x2e\x31\x31\x2c\x32\x36\x2e\x35\x37\x2c\x33\x30\x2e\x32\ -\x35\x2c\x33\x38\x2c\x34\x36\x2e\x36\x38\x2c\x32\x34\x2e\x32\x31\ -\x2c\x33\x34\x2e\x37\x37\x2c\x33\x39\x2e\x37\x35\x2c\x37\x33\x2e\ -\x34\x33\x2c\x34\x37\x2e\x31\x33\x2c\x31\x31\x35\x2e\x32\x33\x2c\ -\x31\x2e\x36\x2c\x39\x2c\x32\x2e\x35\x35\x2c\x31\x38\x2e\x32\x2c\ -\x33\x2e\x38\x2c\x32\x37\x2e\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x31\x36\x2e\x34\x35\x2c\x33\x30\x33\x2e\x32\x34\ -\x63\x2e\x37\x37\x2d\x35\x37\x2e\x35\x35\x2c\x31\x37\x2e\x30\x39\ -\x2d\x31\x30\x37\x2e\x33\x35\x2c\x34\x35\x2e\x36\x37\x2d\x31\x35\ -\x33\x2e\x34\x31\x41\x33\x30\x34\x2e\x37\x2c\x33\x30\x34\x2e\x37\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x30\x35\x2e\x33\x2c\x39\x35\x2e\ -\x33\x63\x31\x33\x2e\x36\x39\x2d\x31\x33\x2e\x37\x36\x2c\x33\x35\ -\x2e\x37\x2d\x38\x2e\x34\x2c\x34\x30\x2e\x33\x34\x2c\x39\x2e\x38\ -\x34\x2c\x32\x2e\x33\x33\x2c\x39\x2e\x31\x37\x2d\x31\x2c\x31\x36\ -\x2e\x36\x32\x2d\x37\x2c\x32\x33\x2e\x38\x2d\x31\x32\x2e\x33\x34\ -\x2c\x31\x34\x2e\x38\x36\x2d\x32\x35\x2e\x33\x35\x2c\x32\x39\x2e\ -\x34\x31\x2d\x33\x35\x2e\x37\x32\x2c\x34\x35\x2e\x36\x31\x43\x37\ -\x36\x2e\x36\x39\x2c\x32\x31\x35\x2e\x34\x38\x2c\x36\x32\x2c\x32\ -\x36\x30\x2e\x32\x34\x2c\x36\x34\x2e\x32\x33\x2c\x33\x30\x39\x2e\ -\x34\x35\x63\x31\x2e\x37\x31\x2c\x33\x37\x2e\x37\x34\x2c\x31\x33\ -\x2e\x36\x34\x2c\x37\x32\x2e\x35\x35\x2c\x33\x32\x2c\x31\x30\x35\ -\x2e\x33\x32\x61\x32\x37\x34\x2e\x35\x37\x2c\x32\x37\x34\x2e\x35\ -\x37\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x32\x2e\x33\x33\x2c\x35\x36\ -\x2e\x35\x63\x31\x31\x2e\x32\x31\x2c\x31\x31\x2e\x36\x35\x2c\x31\ -\x30\x2e\x32\x37\x2c\x32\x37\x2e\x37\x38\x2d\x31\x2e\x37\x33\x2c\ -\x33\x36\x2e\x36\x39\x2d\x39\x2e\x37\x33\x2c\x37\x2e\x32\x32\x2d\ -\x32\x32\x2e\x39\x31\x2c\x36\x2e\x34\x2d\x33\x31\x2e\x34\x37\x2d\ -\x33\x2e\x34\x33\x2d\x31\x33\x2e\x31\x38\x2d\x31\x35\x2e\x31\x32\ -\x2d\x32\x36\x2e\x35\x39\x2d\x33\x30\x2e\x32\x34\x2d\x33\x37\x2e\ -\x39\x35\x2d\x34\x36\x2e\x37\x31\x41\x32\x38\x36\x2e\x32\x31\x2c\ -\x32\x38\x36\x2e\x32\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x2e\ -\x31\x36\x2c\x33\x32\x37\x2e\x32\x37\x43\x31\x37\x2e\x31\x2c\x33\ -\x31\x38\x2e\x33\x31\x2c\x31\x36\x2e\x38\x36\x2c\x33\x30\x39\x2e\ -\x32\x36\x2c\x31\x36\x2e\x34\x35\x2c\x33\x30\x33\x2e\x32\x34\x5a\ -\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x31\x31\x2e\x32\ -\x32\x2c\x32\x39\x33\x2e\x37\x31\x63\x2e\x37\x35\x2d\x34\x34\x2e\ -\x37\x31\x2c\x31\x37\x2e\x33\x37\x2d\x38\x39\x2e\x35\x39\x2c\x35\ -\x32\x2e\x36\x39\x2d\x31\x32\x37\x2e\x30\x36\x2c\x39\x2e\x36\x31\ -\x2d\x31\x30\x2e\x32\x31\x2c\x32\x33\x2e\x36\x32\x2d\x31\x31\x2e\ -\x31\x37\x2c\x33\x33\x2e\x36\x36\x2d\x32\x2e\x33\x33\x73\x31\x31\ -\x2c\x32\x33\x2e\x34\x2c\x31\x2e\x34\x34\x2c\x33\x33\x2e\x35\x39\ -\x63\x2d\x31\x39\x2e\x32\x33\x2c\x32\x30\x2e\x36\x31\x2d\x33\x32\ -\x2e\x33\x36\x2c\x34\x34\x2e\x33\x35\x2d\x33\x37\x2e\x34\x39\x2c\ -\x37\x32\x2e\x30\x37\x2d\x38\x2e\x37\x35\x2c\x34\x37\x2e\x33\x34\ -\x2c\x31\x2e\x32\x32\x2c\x39\x30\x2e\x30\x36\x2c\x33\x33\x2e\x31\ -\x32\x2c\x31\x32\x36\x2e\x38\x35\x2c\x35\x2e\x37\x37\x2c\x36\x2e\ -\x36\x36\x2c\x31\x31\x2e\x36\x31\x2c\x31\x33\x2e\x30\x38\x2c\x31\ -\x30\x2e\x37\x39\x2c\x32\x32\x2e\x37\x2d\x2e\x38\x35\x2c\x39\x2e\ -\x39\x33\x2d\x36\x2c\x31\x37\x2e\x30\x35\x2d\x31\x35\x2e\x32\x33\ -\x2c\x32\x30\x2e\x35\x38\x2d\x39\x2e\x35\x35\x2c\x33\x2e\x36\x34\ -\x2d\x31\x38\x2e\x35\x35\x2c\x31\x2e\x36\x32\x2d\x32\x35\x2e\x33\ -\x2d\x35\x2e\x39\x31\x2d\x38\x2e\x30\x39\x2d\x39\x2d\x31\x36\x2e\ -\x32\x31\x2d\x31\x38\x2e\x32\x39\x2d\x32\x32\x2e\x37\x38\x2d\x32\ -\x38\x2e\x34\x34\x43\x31\x32\x31\x2e\x33\x37\x2c\x33\x37\x33\x2e\ -\x37\x32\x2c\x31\x31\x31\x2e\x33\x37\x2c\x33\x33\x38\x2e\x32\x37\ -\x2c\x31\x31\x31\x2e\x32\x32\x2c\x32\x39\x33\x2e\x37\x31\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x38\x2e\x38\x38\ -\x2c\x33\x30\x36\x2e\x35\x37\x63\x2d\x2e\x33\x39\x2c\x33\x38\x2e\ -\x31\x35\x2d\x31\x33\x2e\x37\x2c\x37\x38\x2e\x33\x36\x2d\x34\x31\ -\x2e\x31\x34\x2c\x31\x31\x33\x2e\x36\x36\x61\x31\x35\x30\x2e\x38\ -\x37\x2c\x31\x35\x30\x2e\x38\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x31\ -\x32\x2e\x38\x37\x2c\x31\x34\x2e\x34\x36\x2c\x32\x33\x2e\x32\x39\ -\x2c\x32\x33\x2e\x32\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x33\x32\x2e\ -\x39\x31\x2e\x34\x37\x2c\x32\x33\x2c\x32\x33\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x31\x2e\x33\x39\x2d\x33\x32\x2e\x34\x31\x43\x34\x31\x35\ -\x2e\x37\x33\x2c\x33\x38\x36\x2e\x32\x2c\x34\x32\x38\x2c\x33\x36\ -\x38\x2c\x34\x33\x34\x2e\x33\x32\x2c\x33\x34\x36\x2e\x33\x32\x63\ -\x31\x35\x2e\x35\x34\x2d\x35\x32\x2e\x38\x32\x2c\x37\x2e\x30\x38\ -\x2d\x31\x30\x30\x2e\x39\x34\x2d\x32\x39\x2d\x31\x34\x33\x2e\x33\ -\x33\x2d\x35\x2e\x35\x39\x2d\x36\x2e\x35\x36\x2d\x31\x31\x2e\x33\ -\x32\x2d\x31\x32\x2e\x38\x35\x2d\x31\x30\x2e\x36\x33\x2d\x32\x32\ -\x2e\x32\x31\x2e\x37\x34\x2d\x31\x30\x2e\x31\x37\x2c\x36\x2d\x31\ -\x37\x2e\x34\x34\x2c\x31\x35\x2e\x34\x38\x2d\x32\x31\x73\x31\x38\ -\x2e\x35\x32\x2d\x31\x2e\x34\x2c\x32\x35\x2e\x32\x34\x2c\x36\x2e\ -\x31\x36\x63\x38\x2c\x38\x2e\x39\x34\x2c\x31\x36\x2c\x31\x38\x2c\ -\x32\x32\x2e\x34\x34\x2c\x32\x38\x43\x34\x37\x38\x2e\x37\x33\x2c\ -\x32\x32\x36\x2e\x31\x37\x2c\x34\x38\x38\x2e\x38\x34\x2c\x32\x36\ -\x31\x2e\x37\x37\x2c\x34\x38\x38\x2e\x38\x38\x2c\x33\x30\x36\x2e\ -\x35\x37\x5a\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\ -\x6e\x74\x73\x3d\x22\x32\x36\x35\x2e\x38\x34\x20\x33\x39\x33\x2e\ -\x39\x31\x20\x33\x30\x30\x20\x33\x33\x37\x2e\x34\x36\x20\x33\x33\ -\x34\x2e\x31\x37\x20\x33\x39\x33\x2e\x39\x31\x20\x33\x37\x39\x2e\ -\x35\x31\x20\x33\x39\x33\x2e\x39\x31\x20\x33\x32\x32\x2e\x36\x38\ -\x20\x33\x30\x30\x20\x33\x37\x39\x2e\x35\x31\x20\x32\x30\x36\x2e\ -\x30\x39\x20\x33\x33\x34\x2e\x31\x36\x20\x32\x30\x36\x2e\x30\x39\ -\x20\x33\x30\x30\x20\x32\x36\x32\x2e\x35\x33\x20\x32\x36\x35\x2e\ -\x38\x34\x20\x32\x30\x36\x2e\x30\x39\x20\x32\x32\x30\x2e\x34\x39\ -\x20\x32\x30\x36\x2e\x30\x39\x20\x32\x37\x37\x2e\x33\x33\x20\x33\ -\x30\x30\x20\x32\x32\x30\x2e\x34\x39\x20\x33\x39\x33\x2e\x39\x31\ -\x20\x32\x36\x35\x2e\x38\x34\x20\x33\x39\x33\x2e\x39\x31\x22\x2f\ -\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x07\xb2\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x38\x33\x2e\x35\x35\x2c\x33\x31\ -\x35\x2e\x35\x31\x63\x2d\x31\x2e\x34\x35\x2c\x31\x30\x2d\x32\x2e\ -\x35\x33\x2c\x32\x30\x2e\x30\x37\x2d\x34\x2e\x34\x2c\x33\x30\x2d\ -\x31\x31\x2e\x36\x37\x2c\x36\x31\x2e\x38\x31\x2d\x34\x30\x2e\x37\ -\x32\x2c\x31\x31\x34\x2e\x34\x38\x2d\x38\x34\x2e\x34\x34\x2c\x31\ -\x35\x39\x2e\x33\x43\x34\x38\x34\x2e\x39\x2c\x35\x31\x34\x2e\x38\ -\x37\x2c\x34\x37\x30\x2e\x36\x33\x2c\x35\x31\x35\x2e\x31\x38\x2c\ -\x34\x36\x31\x2c\x35\x30\x36\x73\x2d\x39\x2e\x39\x32\x2d\x32\x33\ -\x2e\x38\x2e\x30\x36\x2d\x33\x34\x2e\x31\x32\x61\x32\x37\x34\x2e\ -\x34\x33\x2c\x32\x37\x34\x2e\x34\x33\x2c\x30\x2c\x30\x2c\x30\x2c\ -\x34\x38\x2e\x34\x39\x2d\x36\x37\x2e\x36\x31\x63\x31\x37\x2e\x36\ -\x36\x2d\x33\x35\x2e\x31\x34\x2c\x32\x38\x2d\x37\x32\x2e\x30\x37\ -\x2c\x32\x36\x2e\x34\x35\x2d\x31\x31\x31\x2e\x37\x35\x43\x35\x33\ -\x34\x2e\x34\x37\x2c\x32\x35\x34\x2c\x35\x32\x32\x2e\x35\x2c\x32\ -\x31\x38\x2e\x34\x34\x2c\x35\x30\x33\x2e\x38\x2c\x31\x38\x35\x61\ -\x32\x37\x35\x2e\x34\x2c\x32\x37\x35\x2e\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x34\x32\x2e\x34\x2d\x35\x36\x2e\x34\x38\x63\x2d\x31\x31\ -\x2e\x31\x34\x2d\x31\x31\x2e\x35\x37\x2d\x31\x30\x2d\x32\x37\x2e\ -\x38\x37\x2c\x32\x2e\x31\x35\x2d\x33\x36\x2e\x36\x37\x61\x32\x32\ -\x2e\x37\x35\x2c\x32\x32\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x33\x31\x2e\x30\x36\x2c\x33\x2e\x34\x34\x63\x31\x33\x2e\x32\x2c\ -\x31\x35\x2e\x31\x31\x2c\x32\x36\x2e\x35\x37\x2c\x33\x30\x2e\x32\ -\x35\x2c\x33\x38\x2c\x34\x36\x2e\x36\x38\x2c\x32\x34\x2e\x32\x31\ -\x2c\x33\x34\x2e\x37\x37\x2c\x33\x39\x2e\x37\x35\x2c\x37\x33\x2e\ -\x34\x33\x2c\x34\x37\x2e\x31\x33\x2c\x31\x31\x35\x2e\x32\x33\x2c\ -\x31\x2e\x36\x2c\x39\x2c\x32\x2e\x35\x35\x2c\x31\x38\x2e\x32\x2c\ -\x33\x2e\x38\x2c\x32\x37\x2e\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x31\x36\x2e\x34\x35\x2c\x33\x30\x33\x2e\x32\x34\ -\x63\x2e\x37\x37\x2d\x35\x37\x2e\x35\x35\x2c\x31\x37\x2e\x30\x39\ -\x2d\x31\x30\x37\x2e\x33\x35\x2c\x34\x35\x2e\x36\x37\x2d\x31\x35\ -\x33\x2e\x34\x31\x41\x33\x30\x34\x2e\x37\x2c\x33\x30\x34\x2e\x37\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x30\x35\x2e\x33\x2c\x39\x35\x2e\ -\x33\x63\x31\x33\x2e\x36\x39\x2d\x31\x33\x2e\x37\x36\x2c\x33\x35\ -\x2e\x37\x2d\x38\x2e\x34\x2c\x34\x30\x2e\x33\x34\x2c\x39\x2e\x38\ -\x34\x2c\x32\x2e\x33\x33\x2c\x39\x2e\x31\x37\x2d\x31\x2c\x31\x36\ -\x2e\x36\x32\x2d\x37\x2c\x32\x33\x2e\x38\x2d\x31\x32\x2e\x33\x34\ -\x2c\x31\x34\x2e\x38\x36\x2d\x32\x35\x2e\x33\x35\x2c\x32\x39\x2e\ -\x34\x31\x2d\x33\x35\x2e\x37\x32\x2c\x34\x35\x2e\x36\x31\x43\x37\ -\x36\x2e\x36\x39\x2c\x32\x31\x35\x2e\x34\x38\x2c\x36\x32\x2c\x32\ -\x36\x30\x2e\x32\x34\x2c\x36\x34\x2e\x32\x33\x2c\x33\x30\x39\x2e\ -\x34\x35\x63\x31\x2e\x37\x31\x2c\x33\x37\x2e\x37\x34\x2c\x31\x33\ -\x2e\x36\x34\x2c\x37\x32\x2e\x35\x35\x2c\x33\x32\x2c\x31\x30\x35\ -\x2e\x33\x32\x61\x32\x37\x34\x2e\x35\x37\x2c\x32\x37\x34\x2e\x35\ -\x37\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x32\x2e\x33\x33\x2c\x35\x36\ -\x2e\x35\x63\x31\x31\x2e\x32\x31\x2c\x31\x31\x2e\x36\x35\x2c\x31\ -\x30\x2e\x32\x37\x2c\x32\x37\x2e\x37\x38\x2d\x31\x2e\x37\x33\x2c\ -\x33\x36\x2e\x36\x39\x2d\x39\x2e\x37\x33\x2c\x37\x2e\x32\x32\x2d\ -\x32\x32\x2e\x39\x31\x2c\x36\x2e\x34\x2d\x33\x31\x2e\x34\x37\x2d\ -\x33\x2e\x34\x33\x2d\x31\x33\x2e\x31\x38\x2d\x31\x35\x2e\x31\x32\ -\x2d\x32\x36\x2e\x35\x39\x2d\x33\x30\x2e\x32\x34\x2d\x33\x37\x2e\ -\x39\x35\x2d\x34\x36\x2e\x37\x31\x41\x32\x38\x36\x2e\x32\x31\x2c\ -\x32\x38\x36\x2e\x32\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x2e\ -\x31\x36\x2c\x33\x32\x37\x2e\x32\x37\x43\x31\x37\x2e\x31\x2c\x33\ -\x31\x38\x2e\x33\x31\x2c\x31\x36\x2e\x38\x36\x2c\x33\x30\x39\x2e\ -\x32\x36\x2c\x31\x36\x2e\x34\x35\x2c\x33\x30\x33\x2e\x32\x34\x5a\ -\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x31\x31\x2e\x32\ -\x32\x2c\x32\x39\x33\x2e\x37\x31\x63\x2e\x37\x35\x2d\x34\x34\x2e\ -\x37\x31\x2c\x31\x37\x2e\x33\x37\x2d\x38\x39\x2e\x35\x39\x2c\x35\ -\x32\x2e\x36\x39\x2d\x31\x32\x37\x2e\x30\x36\x2c\x39\x2e\x36\x31\ -\x2d\x31\x30\x2e\x32\x31\x2c\x32\x33\x2e\x36\x32\x2d\x31\x31\x2e\ -\x31\x37\x2c\x33\x33\x2e\x36\x36\x2d\x32\x2e\x33\x33\x73\x31\x31\ -\x2c\x32\x33\x2e\x34\x2c\x31\x2e\x34\x34\x2c\x33\x33\x2e\x35\x39\ -\x63\x2d\x31\x39\x2e\x32\x33\x2c\x32\x30\x2e\x36\x31\x2d\x33\x32\ -\x2e\x33\x36\x2c\x34\x34\x2e\x33\x35\x2d\x33\x37\x2e\x34\x39\x2c\ -\x37\x32\x2e\x30\x37\x2d\x38\x2e\x37\x35\x2c\x34\x37\x2e\x33\x34\ -\x2c\x31\x2e\x32\x32\x2c\x39\x30\x2e\x30\x36\x2c\x33\x33\x2e\x31\ -\x32\x2c\x31\x32\x36\x2e\x38\x35\x2c\x35\x2e\x37\x37\x2c\x36\x2e\ -\x36\x36\x2c\x31\x31\x2e\x36\x31\x2c\x31\x33\x2e\x30\x38\x2c\x31\ -\x30\x2e\x37\x39\x2c\x32\x32\x2e\x37\x2d\x2e\x38\x35\x2c\x39\x2e\ -\x39\x33\x2d\x36\x2c\x31\x37\x2e\x30\x35\x2d\x31\x35\x2e\x32\x33\ -\x2c\x32\x30\x2e\x35\x38\x2d\x39\x2e\x35\x35\x2c\x33\x2e\x36\x34\ -\x2d\x31\x38\x2e\x35\x35\x2c\x31\x2e\x36\x32\x2d\x32\x35\x2e\x33\ -\x2d\x35\x2e\x39\x31\x2d\x38\x2e\x30\x39\x2d\x39\x2d\x31\x36\x2e\ -\x32\x31\x2d\x31\x38\x2e\x32\x39\x2d\x32\x32\x2e\x37\x38\x2d\x32\ -\x38\x2e\x34\x34\x43\x31\x32\x31\x2e\x33\x37\x2c\x33\x37\x33\x2e\ -\x37\x32\x2c\x31\x31\x31\x2e\x33\x37\x2c\x33\x33\x38\x2e\x32\x37\ -\x2c\x31\x31\x31\x2e\x32\x32\x2c\x32\x39\x33\x2e\x37\x31\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x38\x2e\x38\x38\ -\x2c\x33\x30\x36\x2e\x35\x37\x63\x2d\x2e\x33\x39\x2c\x33\x38\x2e\ -\x31\x35\x2d\x31\x33\x2e\x37\x2c\x37\x38\x2e\x33\x36\x2d\x34\x31\ -\x2e\x31\x34\x2c\x31\x31\x33\x2e\x36\x36\x61\x31\x35\x30\x2e\x38\ -\x37\x2c\x31\x35\x30\x2e\x38\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x31\ -\x32\x2e\x38\x37\x2c\x31\x34\x2e\x34\x36\x2c\x32\x33\x2e\x32\x39\ -\x2c\x32\x33\x2e\x32\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x33\x32\x2e\ -\x39\x31\x2e\x34\x37\x2c\x32\x33\x2c\x32\x33\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x31\x2e\x33\x39\x2d\x33\x32\x2e\x34\x31\x43\x34\x31\x35\ -\x2e\x37\x33\x2c\x33\x38\x36\x2e\x32\x2c\x34\x32\x38\x2c\x33\x36\ -\x38\x2c\x34\x33\x34\x2e\x33\x32\x2c\x33\x34\x36\x2e\x33\x32\x63\ -\x31\x35\x2e\x35\x34\x2d\x35\x32\x2e\x38\x32\x2c\x37\x2e\x30\x38\ -\x2d\x31\x30\x30\x2e\x39\x34\x2d\x32\x39\x2d\x31\x34\x33\x2e\x33\ -\x33\x2d\x35\x2e\x35\x39\x2d\x36\x2e\x35\x36\x2d\x31\x31\x2e\x33\ -\x32\x2d\x31\x32\x2e\x38\x35\x2d\x31\x30\x2e\x36\x33\x2d\x32\x32\ -\x2e\x32\x31\x2e\x37\x34\x2d\x31\x30\x2e\x31\x37\x2c\x36\x2d\x31\ -\x37\x2e\x34\x34\x2c\x31\x35\x2e\x34\x38\x2d\x32\x31\x73\x31\x38\ -\x2e\x35\x32\x2d\x31\x2e\x34\x2c\x32\x35\x2e\x32\x34\x2c\x36\x2e\ -\x31\x36\x63\x38\x2c\x38\x2e\x39\x34\x2c\x31\x36\x2c\x31\x38\x2c\ -\x32\x32\x2e\x34\x34\x2c\x32\x38\x43\x34\x37\x38\x2e\x37\x33\x2c\ -\x32\x32\x36\x2e\x31\x37\x2c\x34\x38\x38\x2e\x38\x34\x2c\x32\x36\ -\x31\x2e\x37\x37\x2c\x34\x38\x38\x2e\x38\x38\x2c\x33\x30\x36\x2e\ -\x35\x37\x5a\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\ -\x6e\x74\x73\x3d\x22\x33\x30\x30\x20\x32\x38\x38\x2e\x36\x36\x20\ -\x32\x35\x39\x2e\x31\x39\x20\x32\x30\x36\x2e\x30\x39\x20\x32\x31\ -\x32\x2e\x39\x20\x32\x30\x36\x2e\x30\x39\x20\x32\x37\x39\x2e\x32\ -\x36\x20\x33\x34\x30\x2e\x33\x31\x20\x32\x37\x39\x2e\x32\x36\x20\ -\x33\x39\x33\x2e\x39\x31\x20\x33\x32\x30\x2e\x37\x34\x20\x33\x39\ -\x33\x2e\x39\x31\x20\x33\x32\x30\x2e\x37\x34\x20\x33\x34\x30\x2e\ -\x33\x32\x20\x33\x38\x37\x2e\x31\x20\x32\x30\x36\x2e\x30\x39\x20\ -\x33\x34\x30\x2e\x38\x32\x20\x32\x30\x36\x2e\x30\x39\x20\x33\x30\ -\x30\x20\x32\x38\x38\x2e\x36\x36\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ -\x3e\ \x00\x00\x07\xc6\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ @@ -4728,360 +4474,7 @@ \x30\x2e\x31\x38\x20\x32\x37\x37\x2e\x39\x38\x20\x35\x31\x35\x2e\ \x33\x38\x20\x32\x34\x35\x2e\x35\x37\x20\x34\x35\x31\x2e\x36\x22\ \x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x0f\x45\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x32\x32\x31\x2e\x31\x34\x2c\x34\x37\ -\x30\x2e\x38\x37\x63\x31\x30\x2e\x35\x36\x2d\x31\x30\x2e\x35\x39\ -\x2c\x32\x30\x2e\x38\x34\x2d\x32\x30\x2e\x37\x36\x2c\x33\x30\x2e\ -\x39\x32\x2d\x33\x31\x2e\x31\x32\x2c\x31\x2e\x38\x32\x2d\x31\x2e\ -\x38\x37\x2c\x33\x2e\x34\x39\x2d\x32\x2c\x35\x2e\x36\x34\x2d\x31\ -\x2e\x33\x37\x61\x31\x35\x32\x2e\x33\x38\x2c\x31\x35\x32\x2e\x33\ -\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x38\x2e\x38\x31\x2c\x34\x2e\ -\x36\x37\x63\x34\x32\x2e\x34\x37\x2d\x34\x2e\x37\x34\x2c\x37\x38\ -\x2e\x33\x35\x2d\x32\x32\x2e\x38\x38\x2c\x31\x30\x37\x2e\x31\x32\ -\x2d\x35\x34\x2e\x36\x36\x61\x31\x36\x33\x2e\x31\x36\x2c\x31\x36\ -\x33\x2e\x31\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x39\x2e\x31\x35\ -\x2d\x37\x37\x2e\x31\x2c\x31\x36\x31\x2e\x33\x31\x2c\x31\x36\x31\ -\x2e\x33\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x31\x36\x2d\x35\ -\x33\x2e\x33\x39\x63\x2d\x34\x2e\x34\x39\x2d\x33\x36\x2e\x33\x36\ -\x2d\x31\x39\x2e\x34\x34\x2d\x36\x37\x2e\x37\x31\x2d\x34\x34\x2e\ -\x34\x32\x2d\x39\x34\x2e\x32\x33\x2d\x32\x33\x2e\x33\x32\x2d\x32\ -\x34\x2e\x37\x36\x2d\x35\x31\x2e\x38\x31\x2d\x34\x30\x2e\x37\x34\ -\x2d\x38\x35\x2d\x34\x38\x2e\x32\x33\x61\x31\x35\x37\x2e\x33\x33\ -\x2c\x31\x35\x37\x2e\x33\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x31\ -\x2e\x37\x36\x2d\x33\x2e\x31\x32\x63\x2d\x33\x31\x2e\x32\x36\x2c\ -\x33\x2e\x34\x2d\x35\x39\x2e\x35\x37\x2c\x31\x34\x2e\x34\x35\x2d\ -\x38\x34\x2e\x35\x37\x2c\x33\x33\x2e\x37\x39\x2d\x32\x39\x2e\x33\ -\x31\x2c\x32\x32\x2e\x36\x38\x2d\x34\x38\x2e\x39\x32\x2c\x35\x31\ -\x2e\x38\x32\x2d\x35\x39\x2e\x31\x34\x2c\x38\x37\x2e\x33\x38\x61\ -\x31\x36\x38\x2e\x35\x39\x2c\x31\x36\x38\x2e\x35\x39\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x36\x2e\x31\x2c\x34\x30\x2e\x39\x31\x63\x2d\x2e\ -\x30\x39\x2c\x32\x2e\x35\x35\x2d\x2e\x35\x37\x2c\x33\x2e\x34\x31\ -\x2d\x33\x2e\x33\x31\x2c\x33\x2e\x33\x38\x71\x2d\x31\x37\x2e\x36\ -\x34\x2d\x2e\x32\x35\x2d\x33\x35\x2e\x32\x39\x2c\x30\x63\x2d\x32\ -\x2e\x36\x33\x2c\x30\x2d\x33\x2e\x31\x2d\x2e\x38\x2d\x33\x2d\x33\ -\x2e\x32\x41\x32\x30\x38\x2e\x32\x39\x2c\x32\x30\x38\x2e\x32\x39\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x39\x2e\x37\x34\x2c\x31\x32\ -\x34\x2e\x38\x61\x32\x30\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\ -\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x35\x2e\x34\x37\x2d\x34\x37\ -\x2e\x34\x33\x41\x32\x31\x33\x2e\x39\x34\x2c\x32\x31\x33\x2e\x39\ -\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x38\x35\x2c\x37\x30\x2e\x36\ -\x32\x61\x32\x30\x34\x2e\x38\x38\x2c\x32\x30\x34\x2e\x38\x38\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x33\x30\x2e\x32\x32\x2d\x2e\x34\x31\x2c\ -\x32\x30\x30\x2e\x31\x31\x2c\x32\x30\x30\x2e\x31\x31\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x35\x33\x2e\x38\x35\x2c\x31\x31\x2e\x36\x34\x2c\ -\x32\x30\x37\x2e\x38\x38\x2c\x32\x30\x37\x2e\x38\x38\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x38\x36\x2e\x38\x36\x2c\x35\x39\x2c\x32\x30\x35\ -\x2e\x39\x31\x2c\x32\x30\x35\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x35\x31\x2e\x32\x2c\x31\x35\x32\x2c\x32\x30\x31\x2e\x37\x39\ -\x2c\x32\x30\x31\x2e\x37\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x31\ -\x2e\x35\x31\x2c\x31\x30\x39\x2e\x38\x33\x63\x2d\x33\x30\x2e\x37\ -\x31\x2c\x34\x30\x2e\x32\x38\x2d\x37\x31\x2c\x36\x36\x2e\x33\x2d\ -\x31\x32\x30\x2e\x35\x2c\x37\x37\x2e\x37\x31\x61\x31\x39\x35\x2c\ -\x31\x39\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x36\x34\x2e\x32\x31\x2c\ -\x34\x43\x32\x36\x30\x2e\x36\x35\x2c\x34\x38\x32\x2e\x34\x2c\x32\ -\x34\x30\x2e\x39\x32\x2c\x34\x37\x37\x2e\x35\x38\x2c\x32\x32\x31\ -\x2e\x31\x34\x2c\x34\x37\x30\x2e\x38\x37\x5a\x22\x2f\x3e\x3c\x70\ -\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x34\x35\ -\x2e\x35\x37\x20\x34\x35\x31\x2e\x36\x20\x33\x30\x38\x2e\x38\x33\ -\x20\x34\x31\x39\x2e\x34\x35\x20\x32\x39\x34\x2e\x32\x38\x20\x33\ -\x39\x30\x2e\x38\x34\x20\x32\x30\x31\x2e\x39\x20\x34\x33\x37\x2e\ -\x37\x39\x20\x32\x34\x38\x2e\x38\x36\x20\x35\x33\x30\x2e\x31\x38\ -\x20\x32\x37\x37\x2e\x39\x38\x20\x35\x31\x35\x2e\x33\x38\x20\x32\ -\x34\x35\x2e\x35\x37\x20\x34\x35\x31\x2e\x36\x22\x2f\x3e\x3c\x70\ -\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x64\x3d\x22\x4d\x32\x36\x31\x2c\x33\x36\x32\x2e\x39\x34\ -\x61\x31\x31\x2e\x35\x33\x2c\x31\x31\x2e\x35\x33\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x30\x2d\x31\x2e\x39\x35\x63\x31\x2d\x35\x2e\x31\x37\ -\x2d\x31\x2e\x32\x36\x2d\x38\x2e\x36\x2d\x35\x2e\x37\x34\x2d\x31\ -\x30\x2e\x37\x37\x61\x34\x34\x2e\x35\x32\x2c\x34\x34\x2e\x35\x32\ -\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x32\x34\x2d\x32\x2e\x36\x63\ -\x2d\x32\x2e\x31\x31\x2d\x31\x2e\x33\x34\x2d\x34\x2e\x34\x37\x2d\ -\x31\x2e\x30\x37\x2d\x36\x2e\x36\x35\x2c\x30\x61\x36\x35\x2e\x31\ -\x34\x2c\x36\x35\x2e\x31\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x2e\ -\x33\x31\x2c\x33\x2e\x34\x33\x63\x2d\x33\x2e\x38\x39\x2c\x32\x2e\ -\x33\x39\x2d\x36\x2e\x39\x34\x2c\x32\x2e\x30\x38\x2d\x31\x30\x2e\ -\x31\x34\x2d\x31\x2e\x32\x36\x2d\x31\x2e\x38\x36\x2d\x31\x2e\x39\ -\x35\x2d\x33\x2e\x36\x35\x2d\x34\x2d\x35\x2e\x35\x2d\x35\x2e\x39\ -\x32\x61\x35\x2e\x33\x33\x2c\x35\x2e\x33\x33\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x2e\x37\x31\x2d\x36\x2e\x37\x31\x63\x31\x2e\x36\x37\x2d\ -\x33\x2e\x31\x2c\x33\x2e\x35\x33\x2d\x36\x2e\x30\x39\x2c\x35\x2e\ -\x33\x35\x2d\x39\x2e\x31\x61\x35\x2e\x31\x34\x2c\x35\x2e\x31\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x31\x37\x2d\x35\x2e\x35\x37\x63\ -\x2d\x31\x2e\x34\x37\x2d\x32\x2e\x34\x37\x2d\x32\x2e\x38\x32\x2d\ -\x35\x2d\x34\x2e\x31\x35\x2d\x37\x2e\x35\x35\x61\x35\x2e\x36\x34\ -\x2c\x35\x2e\x36\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\x32\x38\ -\x2d\x33\x2e\x34\x33\x63\x2d\x32\x2e\x38\x36\x2c\x30\x2d\x35\x2e\ -\x37\x33\x2d\x2e\x31\x38\x2d\x38\x2e\x36\x2d\x2e\x33\x31\x2d\x34\ -\x2e\x34\x37\x2d\x2e\x32\x31\x2d\x36\x2e\x32\x39\x2d\x31\x2e\x38\ -\x37\x2d\x37\x2e\x31\x34\x2d\x36\x2e\x32\x2d\x2e\x35\x31\x2d\x32\ -\x2e\x35\x35\x2d\x31\x2e\x32\x35\x2d\x35\x2e\x30\x36\x2d\x31\x2e\ -\x39\x32\x2d\x37\x2e\x35\x38\x2d\x2e\x38\x34\x2d\x33\x2e\x31\x37\ -\x2e\x38\x32\x2d\x35\x2e\x31\x39\x2c\x33\x2e\x32\x31\x2d\x36\x2e\ -\x37\x33\x61\x37\x38\x2e\x34\x37\x2c\x37\x38\x2e\x34\x37\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x38\x2e\x31\x33\x2d\x34\x2e\x37\x32\x2c\x35\ -\x2e\x35\x31\x2c\x35\x2e\x35\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x33\ -\x2e\x31\x39\x2d\x35\x2e\x31\x32\x63\x2e\x32\x2d\x33\x2c\x2e\x31\ -\x39\x2d\x36\x2c\x2e\x33\x2d\x38\x2e\x39\x35\x2e\x31\x36\x2d\x34\ -\x2e\x30\x37\x2d\x33\x2e\x31\x38\x2d\x35\x2e\x33\x33\x2d\x35\x2e\ -\x37\x2d\x37\x2e\x31\x38\x2d\x31\x2e\x36\x33\x2d\x31\x2e\x32\x2d\ -\x33\x2e\x34\x36\x2d\x32\x2e\x31\x32\x2d\x35\x2e\x31\x36\x2d\x33\ -\x2e\x32\x32\x61\x35\x2e\x39\x34\x2c\x35\x2e\x39\x34\x2c\x30\x2c\ -\x30\x2c\x31\x2d\x32\x2e\x35\x2d\x37\x2e\x34\x36\x63\x31\x2e\x30\ -\x35\x2d\x32\x2e\x38\x35\x2c\x31\x2e\x32\x33\x2d\x35\x2e\x39\x31\ -\x2c\x32\x2e\x35\x31\x2d\x38\x2e\x37\x34\x61\x36\x2e\x31\x37\x2c\ -\x36\x2e\x31\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x39\x34\x2d\ -\x34\x2e\x30\x38\x63\x34\x2e\x30\x37\x2d\x2e\x31\x32\x2c\x38\x2e\ -\x31\x33\x2e\x32\x36\x2c\x31\x32\x2e\x32\x2d\x2e\x32\x32\x61\x33\ -\x2e\x36\x31\x2c\x33\x2e\x36\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x33\ -\x2e\x32\x34\x2d\x32\x2e\x35\x36\x63\x2e\x35\x38\x2d\x33\x2c\x32\ -\x2e\x36\x2d\x35\x2c\x34\x2e\x30\x36\x2d\x37\x2e\x34\x37\x61\x35\ -\x2e\x37\x31\x2c\x35\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x30\ -\x2d\x35\x2e\x38\x35\x63\x2d\x31\x2e\x34\x32\x2d\x32\x2e\x39\x32\ -\x2d\x32\x2e\x36\x39\x2d\x35\x2e\x39\x34\x2d\x34\x2e\x33\x38\x2d\ -\x38\x2e\x36\x39\x2d\x31\x2e\x38\x33\x2d\x33\x2d\x31\x2e\x31\x32\ -\x2d\x35\x2e\x33\x32\x2c\x31\x2e\x30\x36\x2d\x37\x2e\x35\x2c\x32\ -\x2e\x33\x37\x2d\x32\x2e\x33\x36\x2c\x34\x2e\x38\x33\x2d\x34\x2e\ -\x36\x32\x2c\x37\x2e\x33\x31\x2d\x36\x2e\x38\x35\x2c\x31\x2e\x38\ -\x39\x2d\x31\x2e\x37\x31\x2c\x33\x2e\x38\x36\x2d\x31\x2e\x37\x39\ -\x2c\x36\x2e\x30\x36\x2d\x2e\x33\x32\x2c\x32\x2e\x37\x36\x2c\x31\ -\x2e\x38\x33\x2c\x35\x2e\x36\x35\x2c\x33\x2e\x34\x38\x2c\x38\x2e\ -\x35\x34\x2c\x35\x2e\x31\x31\x61\x36\x2e\x31\x39\x2c\x36\x2e\x31\ -\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x36\x33\x2e\x30\x39\x63\ -\x32\x2e\x34\x31\x2d\x31\x2e\x35\x35\x2c\x35\x2e\x30\x39\x2d\x32\ -\x2e\x36\x31\x2c\x37\x2e\x34\x37\x2d\x34\x2e\x31\x38\x61\x36\x2e\ -\x34\x35\x2c\x36\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x2d\ -\x35\x2e\x33\x35\x63\x2e\x31\x31\x2d\x33\x2e\x30\x38\x2e\x33\x34\ -\x2d\x36\x2e\x31\x37\x2e\x32\x38\x2d\x39\x2e\x32\x34\x2d\x2e\x30\ -\x38\x2d\x33\x2e\x35\x33\x2c\x32\x2e\x30\x37\x2d\x35\x2e\x33\x39\ -\x2c\x35\x2e\x32\x31\x2d\x36\x2e\x32\x32\x2c\x32\x2e\x37\x36\x2d\ -\x2e\x37\x34\x2c\x35\x2e\x35\x39\x2d\x31\x2e\x31\x37\x2c\x38\x2e\ -\x33\x34\x2d\x32\x2e\x30\x36\x2c\x33\x2d\x31\x2c\x35\x2e\x36\x38\ -\x2e\x39\x32\x2c\x37\x2e\x35\x31\x2c\x34\x2e\x37\x34\x61\x34\x37\ -\x2c\x34\x37\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x2e\x34\x38\x2c\x37\ -\x2e\x36\x37\x2c\x36\x2e\x34\x35\x2c\x36\x2e\x34\x35\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x35\x2e\x34\x35\x2c\x32\x2e\x37\x39\x2c\x35\x38\ -\x2e\x38\x39\x2c\x35\x38\x2e\x38\x39\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x36\x2e\x36\x35\x2e\x31\x36\x63\x32\x2e\x39\x2e\x33\x33\x2c\x34\ -\x2e\x38\x31\x2d\x31\x2e\x31\x38\x2c\x36\x2e\x33\x31\x2d\x33\x2e\ -\x32\x34\x61\x38\x34\x2e\x36\x32\x2c\x38\x34\x2e\x36\x32\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x35\x2e\x31\x31\x2d\x37\x2e\x39\x35\x2c\x35\ -\x2e\x36\x33\x2c\x35\x2e\x36\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x36\ -\x2d\x33\x63\x33\x2e\x38\x31\x2e\x34\x2c\x37\x2e\x32\x38\x2c\x32\ -\x2e\x30\x35\x2c\x31\x30\x2e\x38\x39\x2c\x33\x2e\x31\x35\x2c\x32\ -\x2c\x2e\x35\x39\x2c\x32\x2e\x36\x31\x2c\x32\x2e\x35\x38\x2c\x32\ -\x2e\x37\x2c\x34\x2e\x35\x31\x61\x35\x37\x2e\x37\x39\x2c\x35\x37\ -\x2e\x37\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x30\x2c\x37\x2e\x35\x36\ -\x63\x2d\x2e\x33\x38\x2c\x34\x2e\x35\x33\x2e\x39\x2c\x37\x2e\x38\ -\x2c\x35\x2e\x32\x37\x2c\x39\x2e\x39\x33\x2c\x33\x2e\x36\x34\x2c\ -\x31\x2e\x37\x36\x2c\x36\x2e\x35\x39\x2c\x35\x2e\x35\x31\x2c\x31\ -\x31\x2e\x32\x39\x2c\x33\x2e\x33\x35\x61\x34\x39\x2e\x38\x38\x2c\ -\x34\x39\x2e\x38\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x30\x37\ -\x2d\x33\x2e\x32\x36\x63\x34\x2e\x33\x34\x2d\x32\x2e\x37\x38\x2c\ -\x37\x2e\x31\x36\x2d\x32\x2e\x35\x39\x2c\x31\x30\x2e\x37\x38\x2c\ -\x31\x2c\x31\x2e\x37\x36\x2c\x31\x2e\x37\x37\x2c\x33\x2e\x34\x39\ -\x2c\x33\x2e\x35\x37\x2c\x35\x2e\x31\x35\x2c\x35\x2e\x34\x33\x2c\ -\x32\x2e\x31\x34\x2c\x32\x2e\x34\x2c\x32\x2c\x35\x2e\x37\x39\x2d\ -\x2e\x31\x32\x2c\x39\x61\x36\x36\x2e\x32\x38\x2c\x36\x36\x2e\x32\ -\x38\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x2e\x35\x31\x2c\x35\x2e\x36\ -\x35\x63\x2d\x31\x2e\x33\x37\x2c\x32\x2e\x36\x31\x2d\x32\x2e\x33\ -\x38\x2c\x35\x2e\x33\x34\x2d\x2e\x33\x36\x2c\x38\x2e\x31\x33\x2c\ -\x31\x2e\x36\x39\x2c\x32\x2e\x33\x34\x2c\x32\x2e\x35\x35\x2c\x35\ -\x2e\x31\x33\x2c\x34\x2e\x32\x37\x2c\x37\x2e\x34\x38\x61\x35\x2e\ -\x34\x39\x2c\x35\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x2e\ -\x36\x37\x2c\x32\x2e\x34\x63\x33\x2e\x31\x35\x2e\x31\x31\x2c\x36\ -\x2e\x32\x39\x2e\x31\x39\x2c\x39\x2e\x34\x33\x2e\x34\x61\x36\x2c\ -\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x36\x38\x2c\x34\x2e\x31\ -\x2c\x34\x36\x2e\x32\x38\x2c\x34\x36\x2e\x32\x38\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x32\x2e\x32\x33\x2c\x31\x30\x2e\x33\x36\x63\x2e\x34\ -\x32\x2c\x33\x2d\x31\x2c\x34\x2e\x39\x32\x2d\x33\x2e\x35\x37\x2c\ -\x36\x2e\x33\x32\x2d\x32\x2e\x39\x31\x2c\x31\x2e\x35\x39\x2d\x35\ -\x2e\x37\x34\x2c\x33\x2e\x33\x32\x2d\x38\x2e\x35\x33\x2c\x35\x2e\ -\x31\x32\x61\x35\x2e\x31\x35\x2c\x35\x2e\x31\x35\x2c\x30\x2c\x30\ -\x2c\x30\x2d\x32\x2e\x35\x2c\x34\x2e\x37\x31\x2c\x32\x33\x2c\x32\ -\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x2e\x30\x38\x2c\x35\x2e\x33\x31\ -\x63\x2d\x31\x2e\x31\x2c\x35\x2e\x34\x32\x2c\x31\x2e\x38\x31\x2c\ -\x38\x2e\x33\x34\x2c\x36\x2c\x31\x30\x2e\x36\x33\x61\x34\x38\x2e\ -\x33\x34\x2c\x34\x38\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ -\x2e\x39\x33\x2c\x33\x2e\x30\x38\x63\x33\x2e\x30\x38\x2c\x32\x2e\ -\x31\x36\x2c\x33\x2e\x38\x35\x2c\x35\x2e\x31\x34\x2c\x32\x2e\x32\ -\x38\x2c\x39\x2e\x30\x39\x61\x33\x35\x2e\x32\x32\x2c\x33\x35\x2e\ -\x32\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x37\x33\x2c\x35\x2e\ -\x36\x2c\x36\x2e\x37\x35\x2c\x36\x2e\x37\x35\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x37\x2c\x35\x2e\x35\x33\x63\x2d\x32\x2e\x34\x31\x2c\x30\ -\x2d\x34\x2e\x38\x33\x2e\x31\x32\x2d\x37\x2e\x32\x32\x2d\x2e\x30\ -\x39\x2d\x33\x2e\x37\x31\x2d\x2e\x33\x33\x2d\x36\x2e\x34\x33\x2e\ -\x39\x2d\x38\x2e\x31\x34\x2c\x34\x2e\x33\x33\x61\x33\x34\x2e\x37\ -\x2c\x33\x34\x2e\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x38\x36\ -\x2c\x34\x2e\x37\x36\x63\x2d\x32\x2e\x32\x2c\x33\x2d\x31\x2e\x34\ -\x36\x2c\x35\x2e\x39\x34\x2d\x2e\x30\x35\x2c\x38\x2e\x38\x39\x2e\ -\x39\x33\x2c\x31\x2e\x39\x32\x2c\x31\x2e\x38\x36\x2c\x33\x2e\x38\ -\x35\x2c\x32\x2e\x39\x33\x2c\x35\x2e\x36\x38\x2c\x32\x2e\x33\x2c\ -\x33\x2e\x39\x33\x2c\x32\x2e\x33\x33\x2c\x35\x2e\x36\x38\x2d\x2e\ -\x36\x36\x2c\x38\x2e\x39\x33\x61\x33\x39\x2e\x35\x2c\x33\x39\x2e\ -\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x37\x36\x2c\x37\x2e\x30\ -\x36\x2c\x34\x2c\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x36\x31\ -\x2e\x31\x34\x63\x2d\x33\x2e\x30\x35\x2d\x31\x2e\x37\x2d\x36\x2e\ -\x31\x32\x2d\x33\x2e\x33\x37\x2d\x39\x2e\x31\x2d\x35\x2e\x32\x32\ -\x61\x36\x2e\x36\x33\x2c\x36\x2e\x36\x33\x2c\x30\x2c\x30\x2c\x30\ -\x2d\x36\x2e\x39\x2d\x2e\x31\x35\x63\x2d\x32\x2e\x36\x37\x2c\x31\ -\x2e\x34\x34\x2d\x35\x2e\x32\x38\x2c\x33\x2d\x37\x2e\x39\x34\x2c\ -\x34\x2e\x34\x39\x2d\x31\x2e\x36\x35\x2e\x39\x31\x2d\x31\x2e\x37\ -\x34\x2c\x32\x2e\x36\x2d\x31\x2e\x39\x33\x2c\x34\x2e\x31\x31\x2d\ -\x2e\x33\x39\x2c\x33\x2d\x2e\x35\x37\x2c\x36\x2e\x31\x33\x2d\x2e\ -\x38\x2c\x39\x2e\x32\x2d\x2e\x33\x39\x2c\x35\x2e\x31\x32\x2d\x31\ -\x2e\x38\x33\x2c\x36\x2e\x37\x33\x2d\x36\x2e\x37\x38\x2c\x37\x2e\ -\x35\x37\x61\x32\x39\x2c\x32\x39\x2c\x30\x2c\x30\x2c\x30\x2d\x36\ -\x2e\x34\x36\x2c\x31\x2e\x35\x32\x63\x2d\x32\x2e\x36\x38\x2c\x31\ -\x2e\x31\x31\x2d\x34\x2e\x38\x2d\x2e\x32\x39\x2d\x36\x2e\x32\x35\ -\x2d\x32\x2e\x32\x38\x61\x35\x38\x2e\x35\x36\x2c\x35\x38\x2e\x35\ -\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x37\x37\x2d\x38\x2e\x31\ -\x34\x63\x2d\x31\x2e\x35\x34\x2d\x33\x2e\x30\x36\x2d\x33\x2e\x37\ -\x35\x2d\x34\x2e\x36\x39\x2d\x37\x2e\x32\x31\x2d\x34\x2e\x35\x32\ -\x61\x31\x35\x2e\x32\x2c\x31\x35\x2e\x32\x2c\x30\x2c\x30\x2c\x31\ -\x2d\x34\x2e\x31\x36\x2d\x2e\x31\x31\x63\x2d\x34\x2e\x39\x33\x2d\ -\x31\x2e\x31\x32\x2d\x37\x2e\x35\x36\x2c\x31\x2e\x37\x33\x2d\x39\ -\x2e\x38\x33\x2c\x35\x2e\x34\x35\x61\x36\x39\x2c\x36\x39\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x34\x2e\x34\x32\x2c\x36\x2e\x37\x33\x2c\x34\ -\x2e\x39\x32\x2c\x34\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2d\x34\ -\x2e\x36\x31\x2c\x31\x2e\x38\x39\x63\x2d\x34\x2e\x31\x32\x2d\x2e\ -\x32\x32\x2d\x37\x2e\x37\x37\x2d\x32\x2e\x33\x36\x2d\x31\x31\x2e\ -\x37\x39\x2d\x33\x2e\x30\x36\x61\x33\x2e\x33\x36\x2c\x33\x2e\x33\ -\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x35\x36\x2d\x33\x2e\x35\ -\x33\x63\x2e\x31\x31\x2d\x32\x2e\x31\x34\x2c\x30\x2d\x34\x2e\x32\ -\x39\x2c\x30\x2d\x36\x2e\x34\x34\x5a\x6d\x33\x36\x2e\x39\x31\x2d\ -\x32\x33\x2e\x32\x32\x63\x33\x34\x2e\x33\x36\x2d\x2e\x33\x37\x2c\ -\x36\x30\x2e\x35\x31\x2d\x32\x37\x2e\x38\x38\x2c\x36\x30\x2e\x34\ -\x35\x2d\x36\x31\x2e\x33\x38\x2d\x2e\x30\x36\x2d\x33\x33\x2e\x37\ -\x34\x2d\x32\x37\x2e\x33\x39\x2d\x36\x32\x2e\x39\x31\x2d\x36\x34\ -\x2e\x34\x32\x2d\x36\x31\x2d\x32\x39\x2e\x38\x35\x2c\x31\x2e\x35\ -\x36\x2d\x35\x37\x2e\x32\x31\x2c\x32\x37\x2e\x32\x32\x2d\x35\x36\ -\x2e\x37\x37\x2c\x36\x32\x2e\x31\x35\x43\x32\x33\x37\x2e\x36\x2c\ -\x33\x31\x32\x2e\x36\x34\x2c\x32\x36\x35\x2e\x31\x2c\x33\x33\x39\ -\x2e\x39\x32\x2c\x32\x39\x37\x2e\x39\x33\x2c\x33\x33\x39\x2e\x37\ -\x32\x5a\x22\x2f\x3e\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x63\x78\x3d\x22\x32\ -\x39\x37\x2e\x35\x36\x22\x20\x63\x79\x3d\x22\x32\x37\x38\x2e\x34\ -\x39\x22\x20\x72\x3d\x22\x34\x35\x2e\x32\x37\x22\x2f\x3e\x3c\x2f\ -\x73\x76\x67\x3e\ -\x00\x00\x06\x7a\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x31\x36\x33\x2e\x38\x39\x2c\x34\x33\ -\x35\x2e\x37\x35\x63\x30\x2c\x35\x2e\x32\x36\x2e\x30\x36\x2c\x31\ -\x30\x2e\x35\x31\x2c\x30\x2c\x31\x35\x2e\x37\x37\x2d\x2e\x31\x37\ -\x2c\x31\x32\x2e\x33\x38\x2c\x31\x2e\x37\x35\x2c\x31\x30\x2e\x37\ -\x31\x2d\x31\x30\x2e\x38\x36\x2c\x31\x30\x2e\x38\x33\x2d\x38\x2e\ -\x32\x33\x2e\x30\x37\x2d\x31\x36\x2e\x34\x36\x2d\x2e\x31\x31\x2d\ -\x32\x34\x2e\x36\x38\x2e\x30\x37\x2d\x33\x2e\x38\x33\x2e\x30\x39\ -\x2d\x35\x2e\x32\x36\x2d\x31\x2e\x31\x35\x2d\x35\x2e\x32\x34\x2d\ -\x35\x2e\x31\x38\x71\x2e\x32\x31\x2d\x34\x35\x2e\x37\x36\x2c\x30\ -\x2d\x39\x31\x2e\x35\x32\x63\x30\x2d\x34\x2e\x31\x34\x2c\x31\x2e\ -\x32\x2d\x35\x2e\x36\x31\x2c\x35\x2e\x34\x36\x2d\x35\x2e\x35\x39\ -\x2c\x33\x30\x2e\x35\x31\x2e\x31\x34\x2c\x36\x31\x2c\x30\x2c\x39\ -\x31\x2e\x35\x32\x2e\x32\x2c\x31\x2e\x37\x35\x2c\x30\x2c\x35\x2c\ -\x31\x2e\x39\x33\x2c\x35\x2c\x33\x2c\x2e\x33\x37\x2c\x31\x32\x2e\ -\x31\x39\x2e\x32\x33\x2c\x32\x34\x2e\x34\x2e\x32\x33\x2c\x33\x37\ -\x2e\x36\x31\x48\x31\x39\x32\x2e\x31\x38\x63\x32\x2e\x32\x35\x2c\ -\x33\x2e\x31\x38\x2c\x33\x2e\x31\x39\x2c\x35\x2e\x30\x36\x2c\x34\ -\x2e\x36\x31\x2c\x36\x2e\x34\x35\x2c\x34\x32\x2e\x34\x38\x2c\x34\ -\x31\x2e\x34\x36\x2c\x39\x32\x2e\x37\x34\x2c\x35\x35\x2c\x31\x34\ -\x38\x2e\x38\x38\x2c\x33\x36\x2e\x31\x34\x2c\x31\x32\x36\x2e\x39\ -\x34\x2d\x33\x39\x2e\x33\x2c\x31\x33\x30\x2e\x38\x31\x2d\x32\x32\ -\x31\x2e\x32\x33\x2c\x37\x2e\x34\x2d\x32\x36\x38\x2e\x39\x33\x2d\ -\x34\x2e\x32\x35\x2d\x31\x2e\x37\x31\x2d\x35\x2e\x37\x32\x2d\x33\ -\x2e\x38\x38\x2d\x35\x2e\x35\x37\x2d\x38\x2e\x33\x39\x2e\x35\x38\ -\x2d\x31\x31\x2e\x37\x37\x2d\x2e\x34\x36\x2d\x32\x33\x2e\x35\x36\ -\x2e\x35\x34\x2d\x33\x35\x2e\x33\x32\x43\x34\x38\x34\x2c\x31\x36\ -\x31\x2e\x33\x39\x2c\x35\x33\x38\x2e\x33\x32\x2c\x33\x35\x32\x2e\ -\x34\x38\x2c\x34\x31\x36\x2e\x32\x2c\x34\x35\x31\x63\x2d\x37\x32\ -\x2e\x32\x2c\x36\x30\x2e\x37\x39\x2d\x31\x38\x35\x2e\x36\x31\x2c\ -\x35\x32\x2e\x36\x38\x2d\x32\x34\x39\x2e\x38\x38\x2d\x31\x36\x5a\ -\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x32\x35\x2c\x31\ -\x38\x37\x2e\x36\x33\x71\x30\x2c\x33\x34\x2c\x30\x2c\x36\x38\x63\ -\x30\x2c\x38\x2e\x37\x31\x2d\x32\x2e\x33\x39\x2c\x31\x31\x2e\x30\ -\x37\x2d\x31\x31\x2c\x31\x31\x2e\x30\x39\x2d\x39\x2e\x36\x32\x2c\ -\x30\x2d\x31\x39\x2e\x32\x35\x2e\x30\x37\x2d\x32\x38\x2e\x38\x37\ -\x2c\x30\x2d\x37\x2e\x30\x38\x2d\x2e\x30\x36\x2d\x39\x2e\x38\x33\ -\x2d\x32\x2e\x37\x32\x2d\x39\x2e\x38\x34\x2d\x39\x2e\x39\x71\x2d\ -\x2e\x30\x38\x2d\x36\x39\x2e\x31\x38\x2c\x30\x2d\x31\x33\x38\x2e\ -\x33\x36\x63\x30\x2d\x37\x2e\x34\x34\x2c\x32\x2e\x38\x35\x2d\x31\ -\x30\x2e\x32\x38\x2c\x31\x30\x2e\x31\x35\x2d\x31\x30\x2e\x33\x36\ -\x71\x31\x34\x2e\x37\x33\x2d\x2e\x31\x36\x2c\x32\x39\x2e\x34\x38\ -\x2c\x30\x63\x37\x2e\x32\x39\x2e\x30\x38\x2c\x31\x30\x2e\x30\x38\ -\x2c\x32\x2e\x39\x32\x2c\x31\x30\x2e\x31\x2c\x31\x30\x2e\x33\x38\ -\x43\x33\x32\x35\x2e\x30\x35\x2c\x31\x34\x31\x2e\x35\x31\x2c\x33\ -\x32\x35\x2c\x31\x36\x34\x2e\x35\x37\x2c\x33\x32\x35\x2c\x31\x38\ -\x37\x2e\x36\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x32\x34\x33\x2e\x33\x35\x2c\x31\x33\x32\x2e\x36\x31\x63\x32\x2e\ -\x31\x39\x2c\x38\x2e\x36\x37\x2c\x34\x2e\x32\x37\x2c\x31\x36\x2e\ -\x37\x34\x2c\x36\x2e\x32\x38\x2c\x32\x34\x2e\x38\x32\x2c\x33\x2e\ -\x35\x31\x2c\x31\x34\x2e\x31\x35\x2c\x33\x2e\x33\x34\x2c\x31\x33\ -\x2e\x38\x34\x2d\x39\x2e\x33\x39\x2c\x32\x30\x2e\x31\x37\x2d\x38\ -\x2e\x35\x36\x2c\x34\x2e\x32\x37\x2d\x31\x36\x2e\x35\x33\x2c\x39\ -\x2e\x37\x31\x2d\x32\x34\x2e\x39\x33\x2c\x31\x34\x2e\x33\x33\x2d\ -\x31\x2e\x36\x32\x2e\x39\x2d\x35\x2c\x31\x2e\x33\x37\x2d\x35\x2e\ -\x38\x38\x2e\x34\x34\x2d\x38\x2e\x34\x2d\x38\x2e\x37\x39\x2d\x31\ -\x36\x2e\x34\x34\x2d\x31\x37\x2e\x39\x33\x2d\x32\x35\x2e\x31\x38\ -\x2d\x32\x37\x2e\x36\x33\x41\x31\x37\x39\x2e\x38\x38\x2c\x31\x37\ -\x39\x2e\x38\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x34\x33\x2e\x33\ -\x35\x2c\x31\x33\x32\x2e\x36\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x31\x36\x37\x2e\x33\x34\x2c\x31\x38\x31\x2e\x31\ -\x34\x63\x38\x2e\x33\x31\x2c\x39\x2e\x32\x35\x2c\x31\x36\x2e\x36\ -\x37\x2c\x31\x38\x2e\x33\x39\x2c\x32\x34\x2e\x37\x34\x2c\x32\x37\ -\x2e\x37\x39\x2e\x37\x36\x2e\x38\x38\x2e\x31\x38\x2c\x33\x2e\x37\ -\x31\x2d\x2e\x36\x38\x2c\x35\x2e\x30\x37\x2d\x37\x2c\x31\x31\x2d\ -\x31\x34\x2e\x32\x38\x2c\x32\x31\x2e\x37\x32\x2d\x32\x31\x2e\x31\ -\x31\x2c\x33\x32\x2e\x37\x38\x2d\x31\x2e\x38\x2c\x32\x2e\x39\x31\ -\x2d\x33\x2e\x33\x32\x2c\x33\x2e\x33\x34\x2d\x36\x2e\x32\x34\x2c\ -\x32\x2e\x32\x34\x2d\x39\x2e\x37\x36\x2d\x33\x2e\x36\x37\x2d\x31\ -\x39\x2e\x35\x37\x2d\x37\x2e\x32\x31\x2d\x32\x39\x2e\x33\x39\x2d\ -\x31\x30\x2e\x37\x2d\x32\x2e\x38\x33\x2d\x31\x2d\x34\x2e\x36\x32\ -\x2d\x32\x2e\x30\x39\x2d\x33\x2d\x35\x2e\x36\x61\x31\x38\x37\x2e\ -\x32\x38\x2c\x31\x38\x37\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x33\x33\x2e\x31\x34\x2d\x34\x39\x2e\x38\x39\x41\x31\x36\x2c\x31\ -\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\x37\x2e\x33\x34\x2c\x31\ -\x38\x31\x2e\x31\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ -\x4d\x31\x32\x33\x2e\x31\x34\x2c\x32\x35\x39\x2e\x31\x38\x63\x31\ -\x31\x2e\x35\x36\x2c\x34\x2e\x31\x38\x2c\x32\x32\x2e\x38\x38\x2c\ -\x38\x2e\x31\x34\x2c\x33\x34\x2e\x30\x35\x2c\x31\x32\x2e\x35\x31\ -\x2c\x31\x2e\x33\x2e\x35\x32\x2c\x32\x2e\x34\x39\x2c\x33\x2e\x33\ -\x37\x2c\x32\x2e\x34\x2c\x35\x2e\x30\x37\x71\x2d\x31\x2c\x31\x39\ -\x2e\x32\x2d\x32\x2e\x36\x39\x2c\x33\x38\x2e\x33\x36\x63\x2d\x2e\ -\x31\x34\x2c\x31\x2e\x36\x37\x2d\x31\x2e\x37\x38\x2c\x34\x2e\x33\ -\x38\x2d\x33\x2e\x30\x37\x2c\x34\x2e\x36\x2d\x31\x30\x2e\x34\x35\ -\x2c\x31\x2e\x38\x2d\x32\x31\x2c\x33\x2e\x31\x2d\x33\x31\x2e\x34\ -\x38\x2c\x34\x2e\x36\x31\x2d\x33\x2e\x39\x2e\x35\x36\x2d\x36\x2d\ -\x2e\x37\x33\x2d\x36\x2e\x32\x36\x2d\x35\x2d\x31\x2d\x31\x39\x2e\ -\x35\x38\x2e\x35\x32\x2d\x33\x38\x2e\x39\x2c\x35\x2e\x36\x38\x2d\ -\x35\x37\x2e\x38\x36\x41\x31\x34\x2c\x31\x34\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x31\x32\x33\x2e\x31\x34\x2c\x32\x35\x39\x2e\x31\x38\x5a\ -\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x09\x43\ +\x00\x00\x09\x43\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -5232,254 +4625,7 @@ \x32\x2c\x38\x33\x2c\x32\x37\x33\x2e\x31\x39\x2c\x39\x31\x2e\x37\ \x38\x2c\x33\x31\x32\x2e\x30\x37\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ \x67\x3e\ -\x00\x00\x02\xa3\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x35\x38\ -\x36\x2e\x32\x34\x20\x34\x38\x33\x2e\x32\x38\x20\x33\x34\x32\x2e\ -\x31\x31\x20\x33\x32\x33\x2e\x33\x38\x20\x33\x34\x32\x2e\x31\x31\ -\x20\x34\x36\x2e\x34\x34\x20\x32\x35\x38\x2e\x31\x20\x34\x36\x2e\ -\x34\x34\x20\x32\x35\x38\x2e\x31\x20\x33\x32\x33\x2e\x32\x35\x20\ -\x31\x33\x2e\x37\x36\x20\x34\x38\x33\x2e\x32\x38\x20\x35\x39\x2e\ -\x38\x20\x35\x35\x33\x2e\x35\x37\x20\x33\x30\x30\x2e\x30\x31\x20\ -\x33\x39\x36\x2e\x32\x33\x20\x35\x34\x30\x2e\x32\x32\x20\x35\x35\ -\x33\x2e\x35\x37\x20\x35\x38\x36\x2e\x32\x34\x20\x34\x38\x33\x2e\ -\x32\x38\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x36\x35\ -\x2c\x34\x38\x2e\x35\x35\x6c\x32\x37\x2e\x31\x36\x2c\x35\x34\x2e\ -\x32\x39\x2c\x32\x37\x2e\x31\x35\x2d\x35\x34\x2e\x32\x39\x68\x32\ -\x38\x2e\x32\x31\x4c\x32\x30\x34\x2e\x38\x2c\x31\x33\x34\x76\x33\ -\x38\x2e\x32\x32\x48\x31\x37\x39\x2e\x35\x37\x56\x31\x33\x34\x4c\ -\x31\x33\x36\x2e\x38\x32\x2c\x34\x38\x2e\x35\x35\x5a\x22\x2f\x3e\ -\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ -\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x31\x31\x2e\x33\x39\x2c\x32\ -\x36\x37\x6c\x32\x32\x2e\x34\x39\x2c\x33\x37\x2e\x31\x37\x4c\x35\ -\x35\x36\x2e\x33\x38\x2c\x32\x36\x37\x68\x32\x39\x2e\x38\x36\x6c\ -\x2d\x33\x37\x2e\x34\x33\x2c\x36\x31\x2e\x38\x34\x2c\x33\x37\x2e\ -\x34\x33\x2c\x36\x31\x2e\x38\x34\x48\x35\x35\x36\x2e\x33\x38\x6c\ -\x2d\x32\x32\x2e\x35\x2d\x33\x37\x2e\x31\x37\x2d\x32\x32\x2e\x34\ -\x39\x2c\x33\x37\x2e\x31\x37\x48\x34\x38\x31\x2e\x35\x33\x4c\x35\ -\x31\x39\x2c\x33\x32\x38\x2e\x38\x37\x2c\x34\x38\x31\x2e\x35\x33\ -\x2c\x32\x36\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x31\x30\x39\x2e\x32\x39\x2c\x32\x36\x37\x76\x32\x31\x2e\x38\x35\ -\x4c\x34\x38\x2c\x33\x36\x35\x2e\x38\x33\x68\x36\x31\x2e\x33\x76\ -\x32\x34\x2e\x38\x38\x48\x31\x33\x2e\x37\x36\x56\x33\x36\x38\x2e\ -\x38\x36\x6c\x36\x31\x2e\x33\x31\x2d\x37\x36\x2e\x39\x35\x48\x31\ -\x34\x2e\x38\x38\x56\x32\x36\x37\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ -\x67\x3e\ -\x00\x00\x0c\x79\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x36\x33\x2e\x36\x37\x2c\x35\x30\ -\x33\x2e\x32\x37\x2c\x34\x35\x32\x2e\x38\x34\x2c\x33\x39\x32\x2e\ -\x34\x34\x63\x2e\x34\x34\x2d\x2e\x38\x31\x2e\x39\x31\x2d\x31\x2e\ -\x36\x31\x2c\x31\x2e\x33\x32\x2d\x32\x2e\x34\x34\x2c\x33\x2e\x36\ -\x38\x2d\x37\x2e\x34\x35\x2c\x39\x2e\x34\x39\x2d\x31\x30\x2e\x31\ -\x31\x2c\x31\x37\x2e\x34\x33\x2d\x39\x2e\x33\x39\x2c\x35\x2e\x31\ -\x32\x2e\x34\x36\x2c\x31\x30\x2e\x33\x2e\x31\x37\x2c\x31\x35\x2e\ -\x34\x34\x2e\x32\x2c\x37\x2e\x35\x39\x2c\x30\x2c\x31\x32\x2e\x37\ -\x34\x2d\x34\x2e\x36\x31\x2c\x31\x35\x2d\x31\x32\x6c\x33\x2e\x36\ -\x38\x2d\x31\x32\x2e\x31\x34\x63\x32\x2e\x36\x38\x2d\x38\x2e\x38\ -\x32\x2c\x31\x2e\x37\x32\x2d\x31\x35\x2d\x34\x2e\x38\x37\x2d\x31\ -\x39\x2e\x37\x34\x61\x31\x30\x37\x2e\x36\x35\x2c\x31\x30\x37\x2e\ -\x36\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x30\x2e\x35\x35\x2d\x36\ -\x2e\x36\x38\x63\x2d\x39\x2d\x35\x2d\x31\x32\x2e\x39\x35\x2d\x31\ -\x31\x2e\x30\x37\x2d\x31\x32\x2e\x39\x2d\x32\x33\x2e\x30\x37\x2c\ -\x30\x2d\x33\x2e\x39\x2e\x32\x31\x2d\x34\x2c\x2e\x31\x37\x2d\x31\ -\x31\x2e\x35\x32\x61\x31\x31\x2e\x33\x39\x2c\x31\x31\x2e\x33\x39\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x33\x34\x2d\x31\x30\x2e\x32\ -\x32\x63\x36\x2d\x33\x2e\x39\x2c\x31\x32\x2d\x37\x2e\x36\x35\x2c\ -\x31\x38\x2e\x32\x36\x2d\x31\x31\x2e\x31\x32\x2c\x35\x2e\x34\x34\ -\x2d\x33\x2c\x38\x2e\x31\x35\x2d\x39\x2e\x38\x34\x2c\x37\x2e\x36\ -\x34\x2d\x31\x33\x2e\x37\x2d\x31\x2d\x37\x2e\x36\x2d\x32\x2d\x31\ -\x35\x2e\x32\x2d\x34\x2e\x37\x38\x2d\x32\x32\x2e\x34\x39\x2d\x32\ -\x2e\x32\x36\x2d\x35\x2e\x39\x34\x2d\x36\x2e\x34\x33\x2d\x38\x2e\ -\x34\x38\x2d\x31\x32\x2e\x31\x35\x2d\x38\x2e\x38\x38\x2d\x36\x2e\ -\x37\x31\x2d\x2e\x34\x38\x2d\x31\x33\x2e\x34\x35\x2d\x2e\x36\x35\ -\x2d\x32\x30\x2e\x31\x38\x2d\x2e\x38\x39\x61\x31\x31\x2e\x36\x35\ -\x2c\x31\x31\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x30\x2d\ -\x35\x2e\x32\x43\x34\x35\x38\x2c\x32\x31\x38\x2c\x34\x35\x36\x2e\ -\x31\x36\x2c\x32\x31\x32\x2c\x34\x35\x32\x2e\x35\x35\x2c\x32\x30\ -\x36\x2e\x39\x32\x63\x2d\x34\x2e\x33\x33\x2d\x36\x2e\x30\x36\x2d\ -\x32\x2e\x31\x38\x2d\x31\x32\x2c\x2e\x37\x36\x2d\x31\x37\x2e\x36\ -\x33\x2c\x32\x2e\x32\x31\x2d\x34\x2e\x32\x35\x2c\x34\x2e\x38\x38\ -\x2d\x38\x2e\x32\x36\x2c\x37\x2e\x35\x2d\x31\x32\x2e\x32\x37\x2c\ -\x34\x2e\x36\x31\x2d\x37\x2e\x30\x36\x2c\x34\x2e\x38\x35\x2d\x31\ -\x34\x2e\x34\x32\x2e\x32\x36\x2d\x31\x39\x2e\x36\x33\x2d\x33\x2e\ -\x35\x35\x2d\x34\x2d\x37\x2e\x32\x35\x2d\x37\x2e\x39\x34\x2d\x31\ -\x31\x2d\x31\x31\x2e\x37\x37\x2d\x37\x2e\x37\x34\x2d\x37\x2e\x38\ -\x38\x2d\x31\x33\x2e\x37\x39\x2d\x38\x2e\x33\x2d\x32\x33\x2e\x30\ -\x37\x2d\x32\x2e\x32\x37\x61\x31\x30\x34\x2e\x30\x37\x2c\x31\x30\ -\x34\x2e\x30\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x33\x2c\x37\x2e\ -\x30\x37\x63\x2d\x31\x30\x2e\x30\x36\x2c\x34\x2e\x36\x39\x2d\x31\ -\x36\x2e\x33\x36\x2d\x33\x2e\x34\x33\x2d\x32\x34\x2e\x31\x35\x2d\ -\x37\x2e\x32\x36\x2d\x39\x2e\x33\x38\x2d\x34\x2e\x36\x31\x2d\x31\ -\x32\x2e\x31\x31\x2d\x31\x31\x2e\x37\x31\x2d\x31\x31\x2e\x32\x39\ -\x2d\x32\x31\x2e\x35\x35\x61\x31\x32\x39\x2e\x39\x2c\x31\x32\x39\ -\x2e\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x36\x2e\x33\x39\ -\x63\x2d\x2e\x31\x39\x2d\x34\x2e\x32\x31\x2d\x31\x2e\x35\x34\x2d\ -\x38\x2e\x35\x31\x2d\x35\x2e\x37\x37\x2d\x39\x2e\x38\x31\x2d\x37\ -\x2e\x37\x35\x2d\x32\x2e\x33\x37\x2d\x31\x35\x2e\x31\x38\x2d\x36\ -\x2d\x32\x33\x2e\x33\x33\x2d\x36\x2e\x38\x33\x2d\x35\x2e\x36\x2d\ -\x2e\x36\x2d\x39\x2e\x39\x34\x2c\x31\x2e\x32\x2d\x31\x32\x2e\x39\ -\x33\x2c\x36\x2e\x35\x61\x31\x38\x33\x2e\x36\x39\x2c\x31\x38\x33\ -\x2e\x36\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x30\x2e\x39\x32\x2c\ -\x31\x37\x2e\x32\x35\x63\x2d\x33\x2e\x32\x33\x2c\x34\x2e\x34\x35\ -\x2d\x37\x2e\x32\x37\x2c\x37\x2e\x31\x38\x2d\x31\x33\x2e\x35\x31\ -\x2c\x37\x4c\x32\x39\x37\x2e\x38\x33\x2c\x31\x31\x39\x61\x31\x34\ -\x2c\x31\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x31\x2e\x36\x37\x2d\ -\x36\x2c\x31\x30\x33\x2e\x37\x33\x2c\x31\x30\x33\x2e\x37\x33\x2c\ -\x30\x2c\x30\x2c\x31\x2d\x39\x2e\x35\x38\x2d\x31\x36\x2e\x36\x35\ -\x43\x32\x37\x32\x2e\x36\x36\x2c\x38\x38\x2c\x32\x36\x36\x2e\x38\ -\x39\x2c\x38\x34\x2c\x32\x36\x30\x2e\x35\x2c\x38\x36\x63\x2d\x35\ -\x2e\x38\x38\x2c\x31\x2e\x39\x32\x2d\x31\x31\x2e\x39\x34\x2c\x32\ -\x2e\x38\x35\x2d\x31\x37\x2e\x38\x34\x2c\x34\x2e\x34\x35\x2d\x36\ -\x2e\x37\x33\x2c\x31\x2e\x38\x33\x2d\x31\x31\x2e\x33\x33\x2c\x35\ -\x2e\x38\x35\x2d\x31\x31\x2e\x31\x37\x2c\x31\x33\x2e\x35\x31\x2e\ -\x31\x34\x2c\x36\x2e\x36\x37\x2d\x2e\x33\x36\x2c\x31\x33\x2e\x33\ -\x36\x2d\x2e\x35\x39\x2c\x32\x30\x61\x31\x34\x2c\x31\x34\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x36\x2e\x34\x35\x2c\x31\x31\x2e\x36\x32\x63\ -\x2d\x35\x2e\x31\x2c\x33\x2e\x34\x32\x2d\x31\x30\x2e\x38\x32\x2c\ -\x35\x2e\x37\x31\x2d\x31\x36\x2c\x39\x2e\x30\x38\x61\x31\x32\x2e\ -\x34\x31\x2c\x31\x32\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x31\x2d\x32\ -\x2e\x32\x31\x2c\x31\x2e\x31\x32\x4c\x39\x36\x2e\x37\x33\x2c\x33\ -\x36\x2e\x33\x33\x6c\x2d\x36\x30\x2e\x34\x2c\x36\x30\x2e\x34\x2c\ -\x31\x31\x31\x2e\x32\x2c\x31\x31\x31\x2e\x32\x61\x32\x31\x2e\x33\ -\x34\x2c\x32\x31\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\ -\x37\x32\x2c\x35\x2e\x31\x31\x63\x2d\x2e\x34\x39\x2c\x32\x2e\x35\ -\x38\x2d\x33\x2e\x32\x2c\x35\x2e\x31\x2d\x36\x2e\x39\x33\x2c\x35\ -\x2e\x35\x35\x2d\x38\x2e\x37\x31\x2c\x31\x2d\x31\x37\x2e\x34\x32\ -\x2e\x32\x32\x2d\x32\x36\x2e\x31\x32\x2e\x34\x39\x2d\x36\x2e\x31\ -\x33\x2e\x31\x39\x2d\x31\x30\x2c\x32\x2e\x38\x39\x2d\x31\x32\x2e\ -\x37\x31\x2c\x38\x2e\x38\x34\x2d\x32\x2e\x37\x35\x2c\x36\x2e\x31\ -\x34\x2d\x33\x2e\x31\x34\x2c\x31\x32\x2e\x37\x38\x2d\x35\x2e\x33\ -\x37\x2c\x31\x39\x2d\x32\x2e\x33\x33\x2c\x36\x2e\x34\x37\x2d\x2e\ -\x33\x37\x2c\x31\x32\x2e\x34\x38\x2c\x35\x2e\x33\x34\x2c\x31\x36\ -\x2e\x32\x31\x2c\x33\x2e\x36\x35\x2c\x32\x2e\x33\x38\x2c\x37\x2e\ -\x35\x35\x2c\x34\x2e\x33\x38\x2c\x31\x31\x2c\x37\x2c\x35\x2e\x34\ -\x2c\x34\x2c\x31\x32\x2e\x35\x35\x2c\x36\x2e\x37\x35\x2c\x31\x32\ -\x2e\x32\x32\x2c\x31\x35\x2e\x35\x37\x2d\x2e\x32\x35\x2c\x36\x2e\ -\x34\x38\x2d\x2e\x32\x33\x2c\x31\x33\x2d\x2e\x36\x34\x2c\x31\x39\ -\x2e\x34\x34\x2d\x2e\x33\x31\x2c\x34\x2e\x38\x33\x2d\x32\x2c\x38\ -\x2e\x37\x32\x2d\x36\x2e\x38\x35\x2c\x31\x31\x2e\x31\x61\x31\x36\ -\x38\x2e\x33\x36\x2c\x31\x36\x38\x2e\x33\x36\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x31\x37\x2e\x34\x2c\x31\x30\x2e\x32\x35\x63\x2d\x35\x2e\ -\x31\x32\x2c\x33\x2e\x33\x33\x2d\x38\x2e\x36\x36\x2c\x37\x2e\x37\ -\x31\x2d\x36\x2e\x38\x36\x2c\x31\x34\x2e\x36\x2c\x31\x2e\x34\x33\ -\x2c\x35\x2e\x34\x37\x2c\x33\x2c\x31\x30\x2e\x39\x2c\x34\x2e\x30\ -\x39\x2c\x31\x36\x2e\x34\x34\x2c\x31\x2e\x38\x34\x2c\x39\x2e\x34\ -\x31\x2c\x35\x2e\x37\x32\x2c\x31\x33\x2c\x31\x35\x2e\x33\x31\x2c\ -\x31\x33\x2e\x34\x36\x2c\x36\x2e\x31\x33\x2e\x32\x39\x2c\x31\x32\ -\x2e\x32\x37\x2e\x36\x39\x2c\x31\x38\x2e\x34\x2e\x36\x37\x2c\x35\ -\x2e\x34\x39\x2c\x30\x2c\x39\x2c\x32\x2e\x39\x34\x2c\x31\x31\x2e\ -\x33\x31\x2c\x37\x2e\x34\x35\x2c\x32\x2e\x38\x33\x2c\x35\x2e\x35\ -\x34\x2c\x35\x2e\x37\x32\x2c\x31\x31\x2c\x38\x2e\x38\x38\x2c\x31\ -\x36\x2e\x33\x38\x2c\x32\x2e\x33\x31\x2c\x33\x2e\x39\x33\x2c\x32\ -\x2c\x38\x2e\x30\x38\x2d\x2e\x33\x37\x2c\x31\x32\x2e\x30\x38\x2d\ -\x33\x2e\x39\x2c\x36\x2e\x35\x33\x2d\x37\x2e\x38\x39\x2c\x31\x33\ -\x2d\x31\x31\x2e\x34\x36\x2c\x31\x39\x2e\x37\x35\x2d\x32\x2e\x36\ -\x37\x2c\x35\x2d\x32\x2e\x36\x35\x2c\x31\x30\x2e\x30\x38\x2c\x31\ -\x2e\x35\x32\x2c\x31\x34\x2e\x35\x36\x2c\x34\x2c\x34\x2e\x32\x35\ -\x2c\x37\x2e\x38\x2c\x38\x2e\x36\x32\x2c\x31\x31\x2e\x37\x39\x2c\ -\x31\x32\x2e\x38\x34\x2c\x36\x2e\x38\x35\x2c\x37\x2e\x32\x36\x2c\ -\x31\x33\x2e\x33\x37\x2c\x37\x2e\x39\x34\x2c\x32\x31\x2e\x36\x39\ -\x2c\x32\x2e\x37\x34\x41\x31\x34\x36\x2e\x36\x35\x2c\x31\x34\x36\ -\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x36\x2e\x32\x2c\ -\x34\x35\x30\x63\x34\x2e\x36\x36\x2d\x32\x2e\x32\x37\x2c\x39\x2e\ -\x37\x32\x2d\x32\x2e\x38\x37\x2c\x31\x34\x2e\x32\x34\x2c\x30\x61\ -\x39\x34\x2e\x38\x33\x2c\x39\x34\x2e\x38\x33\x2c\x30\x2c\x30\x2c\ -\x30\x2c\x39\x2e\x30\x37\x2c\x35\x2e\x36\x35\x63\x39\x2e\x36\x2c\ -\x34\x2e\x37\x2c\x31\x33\x2e\x35\x38\x2c\x32\x35\x2e\x38\x34\x2c\ -\x31\x32\x2e\x33\x36\x2c\x34\x31\x2e\x35\x38\x61\x37\x2e\x31\x34\ -\x2c\x37\x2e\x31\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x2e\x34\x37\ -\x2c\x37\x2e\x36\x35\x63\x38\x2e\x36\x32\x2c\x31\x2e\x35\x33\x2c\ -\x31\x36\x2e\x34\x32\x2c\x36\x2e\x31\x36\x2c\x32\x35\x2e\x32\x34\ -\x2c\x36\x2e\x36\x35\x2c\x33\x2e\x38\x38\x2e\x32\x31\x2c\x37\x2e\ -\x31\x35\x2d\x2e\x35\x37\x2c\x39\x2e\x38\x38\x2d\x34\x2e\x31\x61\ -\x31\x35\x32\x2e\x32\x38\x2c\x31\x35\x32\x2e\x32\x38\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x39\x2e\x34\x35\x2d\x31\x34\x2e\x36\x31\x63\x34\ -\x2e\x38\x37\x2d\x38\x2e\x30\x38\x2c\x31\x30\x2e\x33\x35\x2d\x31\ -\x30\x2c\x32\x31\x2d\x31\x31\x2e\x38\x32\x2c\x33\x2e\x36\x34\x2d\ -\x2e\x36\x2c\x35\x2e\x37\x37\x2e\x30\x37\x2c\x38\x2e\x38\x39\x2e\ -\x32\x33\x2c\x37\x2e\x34\x32\x2e\x33\x39\x2c\x31\x32\x2e\x31\x34\ -\x2c\x33\x2e\x31\x38\x2c\x31\x35\x2e\x34\x34\x2c\x39\x2e\x38\x32\ -\x61\x31\x32\x38\x2e\x32\x31\x2c\x31\x32\x38\x2e\x32\x31\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x31\x30\x2e\x32\x32\x2c\x31\x37\x2e\x36\x35\ -\x63\x33\x2e\x30\x39\x2c\x34\x2e\x33\x32\x2c\x37\x2e\x33\x31\x2c\ -\x36\x2e\x34\x2c\x31\x33\x2e\x33\x37\x2c\x35\x6c\x31\x33\x2e\x38\ -\x34\x2d\x33\x2e\x33\x31\x63\x31\x30\x2e\x34\x34\x2d\x32\x2e\x35\ -\x2c\x31\x33\x2e\x36\x37\x2d\x35\x2e\x33\x2c\x31\x34\x2e\x35\x2d\ -\x31\x36\x2e\x34\x31\x2e\x35\x2d\x36\x2e\x36\x37\x2e\x38\x37\x2d\ -\x31\x33\x2e\x33\x35\x2c\x31\x2e\x37\x31\x2d\x32\x30\x2c\x2e\x34\ -\x32\x2d\x33\x2e\x32\x38\x2e\x36\x31\x2d\x36\x2e\x39\x34\x2c\x34\ -\x2e\x31\x34\x2d\x38\x2e\x39\x32\x2c\x35\x2e\x37\x2d\x33\x2e\x32\ -\x2c\x31\x31\x2e\x32\x37\x2d\x36\x2e\x36\x32\x2c\x31\x37\x2d\x39\ -\x2e\x37\x35\x61\x31\x36\x2c\x31\x36\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x31\x2e\x39\x33\x2d\x2e\x39\x4c\x35\x30\x33\x2e\x32\x37\x2c\x35\ -\x36\x33\x2e\x36\x37\x5a\x4d\x32\x39\x32\x2e\x33\x2c\x31\x36\x37\ -\x2e\x33\x34\x63\x37\x39\x2e\x32\x35\x2d\x34\x2e\x32\x2c\x31\x33\ -\x37\x2e\x37\x36\x2c\x35\x39\x2e\x31\x31\x2c\x31\x33\x37\x2e\x38\ -\x38\x2c\x31\x33\x32\x2e\x33\x32\x61\x31\x33\x36\x2e\x30\x37\x2c\ -\x31\x33\x36\x2e\x30\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x32\x2e\ -\x35\x32\x2c\x35\x37\x2e\x36\x6c\x2d\x31\x35\x2d\x31\x34\x2e\x39\ -\x35\x61\x31\x31\x37\x2e\x34\x36\x2c\x31\x31\x37\x2e\x34\x36\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x37\x2e\x39\x34\x2d\x34\x32\x2e\x36\x32\ -\x63\x30\x2d\x36\x31\x2e\x39\x2d\x34\x38\x2e\x37\x2d\x31\x31\x32\ -\x2e\x37\x35\x2d\x31\x31\x31\x2e\x32\x34\x2d\x31\x31\x32\x2e\x34\ -\x39\x61\x31\x30\x33\x2e\x36\x31\x2c\x31\x30\x33\x2e\x36\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x34\x32\x2e\x35\x39\x2c\x39\x2e\x32\x32\ -\x6c\x2d\x31\x35\x2d\x31\x35\x41\x31\x32\x33\x2c\x31\x32\x33\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x32\x39\x32\x2e\x33\x2c\x31\x36\x37\x2e\ -\x33\x34\x5a\x4d\x32\x31\x39\x2e\x31\x37\x2c\x32\x37\x39\x2e\x35\ -\x37\x2c\x33\x32\x32\x2e\x34\x34\x2c\x33\x38\x32\x2e\x38\x34\x61\ -\x38\x33\x2e\x31\x32\x2c\x38\x33\x2e\x31\x32\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x32\x32\x2e\x31\x2c\x33\x2e\x30\x39\x63\x2d\x34\x35\x2e\ -\x31\x36\x2e\x30\x36\x2d\x38\x33\x2e\x33\x31\x2d\x33\x37\x2e\x30\ -\x36\x2d\x38\x33\x2e\x36\x33\x2d\x38\x35\x2e\x37\x39\x41\x38\x38\ -\x2c\x38\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x31\x39\x2e\x31\x37\ -\x2c\x32\x37\x39\x2e\x35\x37\x5a\x6d\x31\x36\x32\x2e\x30\x38\x2c\ -\x34\x31\x2e\x32\x38\x4c\x32\x37\x37\x2e\x38\x39\x2c\x32\x31\x37\ -\x2e\x34\x39\x61\x38\x31\x2e\x33\x36\x2c\x38\x31\x2e\x33\x36\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x32\x31\x2e\x32\x31\x2d\x33\x2e\x31\x39\ -\x63\x34\x36\x2e\x30\x39\x2d\x2e\x36\x33\x2c\x38\x34\x2e\x33\x39\ -\x2c\x33\x36\x2e\x36\x31\x2c\x38\x34\x2e\x36\x39\x2c\x38\x34\x2e\ -\x37\x37\x41\x39\x31\x2e\x36\x39\x2c\x39\x31\x2e\x36\x39\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x33\x38\x31\x2e\x32\x35\x2c\x33\x32\x30\x2e\ -\x38\x35\x5a\x6d\x2d\x38\x30\x2e\x34\x36\x2c\x31\x31\x32\x63\x2d\ -\x37\x30\x2e\x32\x37\x2e\x34\x33\x2d\x31\x32\x39\x2e\x31\x35\x2d\ -\x35\x38\x2e\x37\x38\x2d\x31\x33\x30\x2d\x31\x33\x30\x2e\x36\x37\ -\x41\x31\x33\x36\x2e\x30\x35\x2c\x31\x33\x36\x2e\x30\x35\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x38\x33\x2c\x32\x34\x33\x2e\x34\x34\x6c\ -\x31\x35\x2e\x31\x36\x2c\x31\x35\x2e\x31\x35\x41\x31\x31\x33\x2e\ -\x39\x34\x2c\x31\x31\x33\x2e\x39\x34\x2c\x30\x2c\x30\x2c\x30\x2c\ -\x31\x39\x30\x2e\x34\x31\x2c\x33\x30\x30\x63\x30\x2c\x36\x32\x2e\ -\x35\x2c\x34\x39\x2e\x35\x39\x2c\x31\x31\x32\x2e\x34\x33\x2c\x31\ -\x30\x39\x2c\x31\x31\x32\x2e\x38\x41\x31\x31\x30\x2c\x31\x31\x30\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x34\x33\x2e\x35\x38\x2c\x34\x30\ -\x34\x6c\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x41\x31\x33\x30\ -\x2e\x31\x39\x2c\x31\x33\x30\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x33\x30\x30\x2e\x37\x39\x2c\x34\x33\x32\x2e\x38\x37\x5a\x22\ -\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\x46\ +\x00\x00\x0f\x45\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -5491,1077 +4637,595 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x34\x2e\x39\x32\x2c\x33\x31\ -\x34\x2e\x33\x36\x63\x2d\x38\x2c\x2e\x37\x38\x2d\x31\x33\x2e\x39\ -\x33\x2d\x33\x2e\x35\x36\x2d\x31\x39\x2e\x33\x38\x2d\x38\x2e\x34\ -\x38\x2d\x35\x30\x2e\x31\x39\x2d\x34\x35\x2e\x32\x2d\x31\x30\x31\ -\x2d\x38\x39\x2e\x36\x39\x2d\x31\x35\x30\x2d\x31\x33\x36\x2e\x32\ -\x34\x2d\x31\x38\x2e\x36\x2d\x31\x37\x2e\x36\x37\x2d\x33\x37\x2e\ -\x35\x37\x2d\x33\x34\x2e\x39\x33\x2d\x35\x36\x2d\x35\x32\x2e\x38\ -\x32\x2d\x38\x2d\x37\x2e\x37\x36\x2d\x31\x32\x2e\x35\x32\x2d\x36\ -\x2e\x35\x37\x2d\x32\x30\x2c\x2e\x34\x36\x43\x32\x32\x32\x2e\x33\ -\x2c\x31\x38\x30\x2e\x34\x33\x2c\x31\x35\x35\x2e\x30\x36\x2c\x32\ -\x34\x33\x2e\x35\x36\x2c\x38\x35\x2e\x35\x39\x2c\x33\x30\x34\x63\ -\x2d\x34\x2c\x33\x2e\x34\x36\x2d\x38\x2e\x31\x2c\x37\x2e\x35\x38\ -\x2d\x31\x32\x2e\x38\x33\x2c\x39\x2e\x31\x2d\x31\x31\x2e\x36\x37\ -\x2c\x33\x2e\x37\x37\x2d\x32\x32\x2e\x36\x35\x2e\x34\x36\x2d\x32\ -\x39\x2d\x31\x30\x2e\x34\x35\x73\x2d\x32\x2d\x32\x31\x2e\x30\x36\ -\x2c\x37\x2d\x32\x39\x2e\x31\x32\x63\x33\x30\x2e\x33\x35\x2d\x32\ -\x37\x2e\x32\x35\x2c\x36\x31\x2e\x32\x32\x2d\x35\x33\x2e\x39\x31\ -\x2c\x39\x30\x2e\x38\x35\x2d\x38\x32\x51\x32\x30\x36\x2e\x35\x37\ -\x2c\x31\x33\x30\x2c\x32\x37\x33\x2c\x37\x30\x2e\x31\x38\x63\x32\ -\x32\x2e\x35\x35\x2d\x32\x30\x2e\x31\x37\x2c\x33\x31\x2e\x36\x32\ -\x2d\x32\x30\x2c\x35\x34\x2e\x32\x32\x2e\x35\x33\x2c\x33\x30\x2e\ -\x39\x31\x2c\x32\x38\x2e\x31\x32\x2c\x36\x33\x2c\x35\x34\x2e\x39\ -\x32\x2c\x39\x32\x2e\x36\x34\x2c\x38\x34\x2e\x34\x32\x2c\x34\x31\ -\x2e\x33\x36\x2c\x34\x31\x2e\x31\x39\x2c\x38\x35\x2e\x38\x33\x2c\ -\x37\x38\x2e\x35\x34\x2c\x31\x32\x38\x2e\x33\x35\x2c\x31\x31\x38\ -\x2e\x32\x37\x2c\x37\x2e\x31\x34\x2c\x36\x2e\x36\x36\x2c\x31\x34\ -\x2e\x31\x37\x2c\x31\x34\x2e\x31\x2c\x39\x2e\x33\x37\x2c\x32\x35\ -\x2e\x38\x32\x43\x35\x35\x33\x2e\x33\x34\x2c\x33\x30\x39\x2e\x36\ -\x38\x2c\x35\x34\x35\x2e\x30\x35\x2c\x33\x31\x33\x2e\x36\x2c\x35\ -\x33\x34\x2e\x39\x32\x2c\x33\x31\x34\x2e\x33\x36\x5a\x22\x2f\x3e\ -\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\ -\x35\x35\x2e\x38\x32\x20\x35\x30\x37\x2e\x33\x34\x20\x35\x34\x30\ -\x2e\x31\x33\x20\x34\x30\x37\x2e\x32\x38\x20\x35\x34\x30\x2e\x31\ -\x33\x20\x33\x37\x37\x2e\x36\x36\x20\x33\x39\x36\x2e\x31\x33\x20\ -\x33\x37\x37\x2e\x36\x36\x20\x33\x39\x36\x2e\x31\x33\x20\x34\x31\ -\x35\x2e\x31\x36\x20\x34\x37\x38\x2e\x32\x39\x20\x34\x31\x35\x2e\ -\x31\x36\x20\x33\x39\x33\x2e\x39\x38\x20\x35\x31\x35\x2e\x32\x32\ -\x20\x33\x39\x33\x2e\x39\x38\x20\x35\x34\x34\x2e\x38\x33\x20\x35\ -\x34\x33\x2e\x37\x32\x20\x35\x34\x34\x2e\x38\x33\x20\x35\x34\x33\ -\x2e\x37\x32\x20\x35\x30\x37\x2e\x33\x34\x20\x34\x35\x35\x2e\x38\ -\x32\x20\x35\x30\x37\x2e\x33\x34\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ -\x3d\x22\x4d\x34\x34\x31\x2c\x34\x33\x36\x2e\x39\x32\x48\x33\x37\ -\x37\x2e\x31\x34\x6c\x31\x2d\x37\x34\x2e\x38\x33\x2c\x31\x32\x31\ -\x2e\x34\x34\x2d\x2e\x39\x33\x63\x31\x2e\x35\x38\x2d\x39\x2e\x36\ -\x32\x2c\x32\x2e\x35\x2d\x31\x32\x2e\x31\x38\x2c\x32\x2e\x35\x35\ -\x2d\x31\x36\x2e\x34\x31\x2e\x31\x2d\x37\x2e\x34\x39\x2d\x31\x2e\ -\x37\x33\x2d\x31\x32\x2e\x38\x36\x2d\x37\x2e\x36\x34\x2d\x31\x38\ -\x2e\x31\x2d\x36\x31\x2d\x35\x34\x2d\x31\x32\x31\x2e\x39\x32\x2d\ -\x31\x30\x38\x2d\x31\x38\x32\x2e\x30\x38\x2d\x31\x36\x32\x2e\x39\ -\x32\x2d\x31\x30\x2e\x33\x36\x2d\x39\x2e\x34\x35\x2d\x31\x34\x2e\ -\x36\x37\x2d\x39\x2e\x38\x39\x2d\x32\x35\x2e\x35\x2e\x30\x36\x2d\ -\x35\x38\x2e\x34\x34\x2c\x35\x33\x2e\x37\x2d\x31\x31\x38\x2e\x31\ -\x32\x2c\x31\x30\x36\x2d\x31\x37\x37\x2e\x33\x31\x2c\x31\x35\x38\ -\x2e\x37\x39\x2d\x36\x2e\x32\x34\x2c\x35\x2e\x35\x37\x2d\x31\x31\ -\x2e\x38\x2c\x31\x31\x2e\x30\x35\x2d\x31\x31\x2e\x36\x37\x2c\x32\ -\x31\x2e\x33\x35\x43\x39\x38\x2e\x33\x2c\x33\x37\x32\x2e\x31\x2c\ -\x31\x31\x37\x2e\x35\x36\x2c\x34\x38\x31\x2c\x31\x33\x36\x2e\x34\ -\x34\x2c\x34\x39\x32\x63\x30\x2c\x30\x2c\x35\x34\x2e\x39\x35\x2d\ -\x2e\x34\x36\x2c\x39\x34\x2e\x35\x35\x2c\x30\x2c\x31\x30\x2e\x38\ -\x2e\x31\x33\x2c\x31\x34\x2e\x37\x31\x2d\x33\x2e\x34\x2c\x31\x34\ -\x2e\x34\x39\x2d\x31\x34\x2e\x38\x33\x2d\x2e\x35\x39\x2d\x33\x30\ -\x2e\x37\x34\x2d\x2e\x34\x39\x2d\x36\x31\x2e\x35\x31\x2d\x2e\x30\ -\x38\x2d\x39\x32\x2e\x32\x36\x2e\x33\x37\x2d\x32\x37\x2e\x35\x33\ -\x2c\x32\x32\x2d\x34\x37\x2e\x35\x34\x2c\x35\x32\x2d\x34\x38\x2e\ -\x38\x39\x2c\x33\x30\x2e\x33\x34\x2d\x31\x2e\x33\x37\x2c\x35\x33\ -\x2e\x37\x35\x2c\x31\x37\x2e\x35\x31\x2c\x35\x36\x2e\x31\x36\x2c\ -\x34\x35\x2e\x35\x33\x2c\x32\x2e\x37\x34\x2c\x33\x31\x2e\x37\x37\ -\x2c\x31\x2c\x36\x33\x2e\x36\x32\x2c\x31\x2e\x31\x2c\x39\x35\x2e\ -\x34\x34\x2c\x30\x2c\x31\x31\x2e\x31\x34\x2c\x33\x2e\x36\x36\x2c\ -\x31\x35\x2e\x31\x37\x2c\x31\x34\x2e\x35\x39\x2c\x31\x35\x2c\x37\ -\x2e\x34\x36\x2d\x2e\x30\x38\x2c\x31\x35\x2e\x32\x32\x2d\x2e\x31\ -\x34\x2c\x32\x32\x2e\x39\x32\x2d\x2e\x31\x37\x5a\x22\x2f\x3e\x3c\ -\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\x8b\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x34\x2e\x34\x34\x2c\x33\x31\ -\x35\x2e\x34\x39\x63\x2d\x37\x2e\x39\x34\x2e\x37\x37\x2d\x31\x33\ -\x2e\x39\x2d\x33\x2e\x35\x36\x2d\x31\x39\x2e\x33\x34\x2d\x38\x2e\ -\x34\x37\x2d\x35\x30\x2e\x30\x39\x2d\x34\x35\x2e\x31\x31\x2d\x31\ -\x30\x30\x2e\x38\x2d\x38\x39\x2e\x35\x2d\x31\x34\x39\x2e\x37\x32\ -\x2d\x31\x33\x36\x2d\x31\x38\x2e\x35\x37\x2d\x31\x37\x2e\x36\x33\ -\x2d\x33\x37\x2e\x35\x2d\x33\x34\x2e\x38\x35\x2d\x35\x35\x2e\x38\ -\x35\x2d\x35\x32\x2e\x37\x31\x2d\x38\x2d\x37\x2e\x37\x35\x2d\x31\ -\x32\x2e\x35\x2d\x36\x2e\x35\x36\x2d\x32\x30\x2c\x2e\x34\x36\x2d\ -\x36\x37\x2e\x30\x39\x2c\x36\x33\x2d\x31\x33\x34\x2e\x32\x2c\x31\ -\x32\x36\x2d\x32\x30\x33\x2e\x35\x32\x2c\x31\x38\x36\x2e\x33\x36\ -\x2d\x34\x2c\x33\x2e\x34\x36\x2d\x38\x2e\x30\x39\x2c\x37\x2e\x35\ -\x37\x2d\x31\x32\x2e\x38\x31\x2c\x39\x2e\x30\x39\x2d\x31\x31\x2e\ -\x36\x34\x2c\x33\x2e\x37\x36\x2d\x32\x32\x2e\x36\x2e\x34\x36\x2d\ -\x32\x38\x2e\x38\x39\x2d\x31\x30\x2e\x34\x33\x73\x2d\x32\x2d\x32\ -\x31\x2c\x36\x2e\x39\x33\x2d\x32\x39\x2e\x30\x36\x63\x33\x30\x2e\ -\x32\x39\x2d\x32\x37\x2e\x32\x2c\x36\x31\x2e\x30\x39\x2d\x35\x33\ -\x2e\x38\x31\x2c\x39\x30\x2e\x36\x36\x2d\x38\x31\x2e\x38\x34\x51\ -\x32\x30\x36\x2e\x37\x35\x2c\x31\x33\x31\x2e\x34\x36\x2c\x32\x37\ -\x33\x2e\x30\x39\x2c\x37\x31\x2e\x38\x63\x32\x32\x2e\x35\x31\x2d\ -\x32\x30\x2e\x31\x33\x2c\x33\x31\x2e\x35\x36\x2d\x32\x30\x2c\x35\ -\x34\x2e\x31\x32\x2e\x35\x34\x2c\x33\x30\x2e\x38\x34\x2c\x32\x38\ -\x2e\x30\x36\x2c\x36\x32\x2e\x38\x37\x2c\x35\x34\x2e\x38\x2c\x39\ -\x32\x2e\x34\x34\x2c\x38\x34\x2e\x32\x34\x2c\x34\x31\x2e\x32\x38\ -\x2c\x34\x31\x2e\x31\x2c\x38\x35\x2e\x36\x36\x2c\x37\x38\x2e\x33\ -\x38\x2c\x31\x32\x38\x2e\x30\x39\x2c\x31\x31\x38\x2c\x37\x2e\x31\ -\x32\x2c\x36\x2e\x36\x36\x2c\x31\x34\x2e\x31\x35\x2c\x31\x34\x2e\ -\x30\x38\x2c\x39\x2e\x33\x36\x2c\x32\x35\x2e\x37\x38\x43\x35\x35\ -\x32\x2e\x38\x32\x2c\x33\x31\x30\x2e\x38\x31\x2c\x35\x34\x34\x2e\ -\x35\x35\x2c\x33\x31\x34\x2e\x37\x33\x2c\x35\x33\x34\x2e\x34\x34\ -\x2c\x33\x31\x35\x2e\x34\x39\x5a\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\ -\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x35\x35\x38\x2e\x36\x37\ -\x20\x35\x34\x33\x2e\x31\x38\x20\x34\x39\x39\x2e\x32\x32\x20\x34\ -\x36\x30\x2e\x33\x34\x20\x35\x35\x35\x2e\x30\x31\x20\x33\x38\x32\ -\x2e\x39\x32\x20\x35\x30\x36\x2e\x30\x31\x20\x33\x38\x32\x2e\x39\ -\x32\x20\x34\x37\x34\x2e\x35\x31\x20\x34\x32\x39\x2e\x32\x35\x20\ -\x34\x34\x32\x2e\x33\x37\x20\x33\x38\x32\x2e\x39\x32\x20\x33\x39\ -\x31\x2e\x33\x32\x20\x33\x38\x32\x2e\x39\x32\x20\x34\x34\x37\x2e\ -\x32\x33\x20\x34\x36\x32\x2e\x30\x33\x20\x33\x38\x38\x2e\x38\x20\ -\x35\x34\x33\x2e\x31\x38\x20\x34\x34\x30\x2e\x35\x34\x20\x35\x34\ -\x33\x2e\x31\x38\x20\x34\x37\x33\x2e\x32\x35\x20\x34\x39\x33\x2e\ -\x36\x20\x35\x30\x36\x2e\x34\x37\x20\x35\x34\x33\x2e\x31\x38\x20\ -\x35\x35\x38\x2e\x36\x37\x20\x35\x34\x33\x2e\x31\x38\x22\x2f\x3e\ -\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ -\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x35\x34\x2e\x35\x2c\x34\x37\ -\x37\x2e\x38\x35\x63\x30\x2c\x31\x31\x2e\x31\x32\x2c\x33\x2e\x36\ -\x35\x2c\x31\x35\x2e\x31\x34\x2c\x31\x34\x2e\x35\x36\x2c\x31\x35\ -\x2c\x31\x34\x2e\x38\x32\x2d\x2e\x31\x37\x2c\x33\x30\x2e\x38\x35\ -\x2d\x2e\x32\x32\x2c\x34\x35\x2e\x31\x36\x2d\x2e\x32\x31\x6c\x31\ -\x34\x2e\x31\x37\x2d\x32\x38\x2d\x36\x36\x2e\x36\x31\x2d\x39\x38\ -\x2e\x34\x34\x48\x34\x35\x36\x2e\x37\x6c\x32\x35\x2e\x33\x39\x2c\ -\x33\x38\x2e\x33\x35\x73\x31\x39\x2e\x35\x38\x2d\x35\x32\x2e\x33\ -\x32\x2c\x31\x39\x2e\x36\x36\x2d\x35\x38\x2e\x37\x36\x63\x2e\x30\ -\x39\x2d\x37\x2e\x34\x38\x2d\x31\x2e\x37\x33\x2d\x31\x32\x2e\x38\ -\x33\x2d\x37\x2e\x36\x33\x2d\x31\x38\x2e\x30\x36\x43\x34\x33\x33\ -\x2e\x32\x37\x2c\x32\x37\x33\x2e\x38\x39\x2c\x33\x37\x32\x2e\x34\ -\x35\x2c\x32\x32\x30\x2c\x33\x31\x32\x2e\x34\x31\x2c\x31\x36\x35\ -\x2e\x31\x36\x63\x2d\x31\x30\x2e\x33\x33\x2d\x39\x2e\x34\x33\x2d\ -\x31\x34\x2e\x36\x34\x2d\x39\x2e\x38\x36\x2d\x32\x35\x2e\x34\x34\ -\x2e\x30\x37\x43\x32\x32\x38\x2e\x36\x34\x2c\x32\x31\x38\x2e\x38\ -\x31\x2c\x31\x36\x39\x2e\x30\x38\x2c\x32\x37\x31\x2c\x31\x31\x30\ -\x2c\x33\x32\x33\x2e\x36\x39\x63\x2d\x36\x2e\x32\x33\x2c\x35\x2e\ -\x35\x36\x2d\x31\x31\x2e\x37\x37\x2c\x31\x31\x2d\x31\x31\x2e\x36\ -\x35\x2c\x32\x31\x2e\x33\x2e\x33\x34\x2c\x32\x38\x2e\x31\x32\x2c\ -\x31\x39\x2e\x35\x36\x2c\x31\x33\x36\x2e\x38\x32\x2c\x33\x38\x2e\ -\x34\x2c\x31\x34\x37\x2e\x38\x2c\x30\x2c\x30\x2c\x35\x34\x2e\x38\ -\x34\x2d\x2e\x34\x35\x2c\x39\x34\x2e\x33\x37\x2c\x30\x2c\x31\x30\ -\x2e\x37\x37\x2e\x31\x33\x2c\x31\x34\x2e\x36\x37\x2d\x33\x2e\x33\ -\x39\x2c\x31\x34\x2e\x34\x35\x2d\x31\x34\x2e\x38\x2d\x2e\x35\x39\ -\x2d\x33\x30\x2e\x36\x38\x2d\x2e\x34\x39\x2d\x36\x31\x2e\x33\x39\ -\x2d\x2e\x30\x38\x2d\x39\x32\x2e\x30\x37\x2e\x33\x37\x2d\x32\x37\ -\x2e\x34\x38\x2c\x32\x32\x2d\x34\x37\x2e\x34\x34\x2c\x35\x31\x2e\ -\x38\x35\x2d\x34\x38\x2e\x37\x39\x2c\x33\x30\x2e\x32\x37\x2d\x31\ -\x2e\x33\x37\x2c\x35\x33\x2e\x36\x34\x2c\x31\x37\x2e\x34\x37\x2c\ -\x35\x36\x2c\x34\x35\x2e\x34\x33\x43\x33\x35\x36\x2e\x31\x34\x2c\ -\x34\x31\x34\x2e\x33\x31\x2c\x33\x35\x34\x2e\x34\x34\x2c\x34\x34\ -\x36\x2e\x31\x2c\x33\x35\x34\x2e\x35\x2c\x34\x37\x37\x2e\x38\x35\ -\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\x65\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x30\x2e\x32\x35\x2c\x33\x31\ -\x33\x2e\x38\x37\x63\x2d\x37\x2e\x39\x34\x2e\x37\x37\x2d\x31\x33\ -\x2e\x39\x2d\x33\x2e\x35\x36\x2d\x31\x39\x2e\x33\x34\x2d\x38\x2e\ -\x34\x36\x2d\x35\x30\x2e\x30\x39\x2d\x34\x35\x2e\x31\x32\x2d\x31\ -\x30\x30\x2e\x38\x2d\x38\x39\x2e\x35\x31\x2d\x31\x34\x39\x2e\x37\ -\x32\x2d\x31\x33\x36\x2d\x31\x38\x2e\x35\x37\x2d\x31\x37\x2e\x36\ -\x33\x2d\x33\x37\x2e\x35\x2d\x33\x34\x2e\x38\x35\x2d\x35\x35\x2e\ -\x38\x35\x2d\x35\x32\x2e\x37\x31\x2d\x38\x2d\x37\x2e\x37\x34\x2d\ -\x31\x32\x2e\x35\x2d\x36\x2e\x35\x36\x2d\x32\x30\x2c\x2e\x34\x36\ -\x2d\x36\x37\x2e\x31\x2c\x36\x33\x2d\x31\x33\x34\x2e\x32\x31\x2c\ -\x31\x32\x36\x2d\x32\x30\x33\x2e\x35\x33\x2c\x31\x38\x36\x2e\x33\ -\x36\x2d\x34\x2c\x33\x2e\x34\x36\x2d\x38\x2e\x30\x39\x2c\x37\x2e\ -\x35\x37\x2d\x31\x32\x2e\x38\x31\x2c\x39\x2e\x30\x39\x2d\x31\x31\ -\x2e\x36\x34\x2c\x33\x2e\x37\x36\x2d\x32\x32\x2e\x36\x2e\x34\x36\ -\x2d\x32\x38\x2e\x38\x39\x2d\x31\x30\x2e\x34\x33\x73\x2d\x32\x2d\ -\x32\x31\x2c\x36\x2e\x39\x33\x2d\x32\x39\x2e\x30\x36\x63\x33\x30\ -\x2e\x32\x39\x2d\x32\x37\x2e\x32\x2c\x36\x31\x2e\x30\x39\x2d\x35\ -\x33\x2e\x38\x2c\x39\x30\x2e\x36\x36\x2d\x38\x31\x2e\x38\x34\x71\ -\x36\x34\x2e\x38\x33\x2d\x36\x31\x2e\x34\x37\x2c\x31\x33\x31\x2e\ -\x31\x38\x2d\x31\x32\x31\x2e\x31\x33\x63\x32\x32\x2e\x35\x2d\x32\ -\x30\x2e\x31\x32\x2c\x33\x31\x2e\x35\x35\x2d\x32\x30\x2c\x35\x34\ -\x2e\x31\x31\x2e\x35\x34\x2c\x33\x30\x2e\x38\x34\x2c\x32\x38\x2e\ -\x30\x36\x2c\x36\x32\x2e\x38\x37\x2c\x35\x34\x2e\x38\x2c\x39\x32\ -\x2e\x34\x34\x2c\x38\x34\x2e\x32\x35\x2c\x34\x31\x2e\x32\x38\x2c\ -\x34\x31\x2e\x30\x39\x2c\x38\x35\x2e\x36\x36\x2c\x37\x38\x2e\x33\ -\x37\x2c\x31\x32\x38\x2e\x31\x2c\x31\x31\x38\x2c\x37\x2e\x31\x32\ -\x2c\x36\x2e\x36\x35\x2c\x31\x34\x2e\x31\x34\x2c\x31\x34\x2e\x30\ -\x38\x2c\x39\x2e\x33\x35\x2c\x32\x35\x2e\x37\x37\x43\x35\x34\x38\ -\x2e\x36\x33\x2c\x33\x30\x39\x2e\x32\x2c\x35\x34\x30\x2e\x33\x36\ -\x2c\x33\x31\x33\x2e\x31\x31\x2c\x35\x33\x30\x2e\x32\x35\x2c\x33\ -\x31\x33\x2e\x38\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ -\x4d\x33\x35\x30\x2e\x33\x31\x2c\x34\x37\x36\x2e\x32\x33\x63\x30\ -\x2c\x31\x31\x2e\x31\x32\x2c\x33\x2e\x36\x35\x2c\x31\x35\x2e\x31\ -\x35\x2c\x31\x34\x2e\x35\x36\x2c\x31\x35\x2c\x31\x34\x2e\x38\x32\ -\x2d\x2e\x31\x38\x2c\x33\x30\x2e\x38\x35\x2d\x2e\x32\x33\x2c\x34\ -\x35\x2e\x31\x36\x2d\x2e\x32\x32\x6c\x38\x2d\x32\x33\x2e\x38\x38\ -\x4c\x33\x35\x35\x2e\x36\x33\x2c\x33\x36\x31\x2e\x39\x32\x68\x39\ -\x36\x2e\x38\x38\x6c\x32\x35\x2e\x33\x39\x2c\x34\x31\x73\x31\x39\ -\x2e\x35\x38\x2d\x35\x32\x2e\x33\x31\x2c\x31\x39\x2e\x36\x36\x2d\ -\x35\x38\x2e\x37\x36\x63\x2e\x30\x39\x2d\x37\x2e\x34\x37\x2d\x31\ -\x2e\x37\x32\x2d\x31\x32\x2e\x38\x33\x2d\x37\x2e\x36\x33\x2d\x31\ -\x38\x2e\x30\x36\x2d\x36\x30\x2e\x38\x35\x2d\x35\x33\x2e\x38\x36\ -\x2d\x31\x32\x31\x2e\x36\x37\x2d\x31\x30\x37\x2e\x37\x37\x2d\x31\ -\x38\x31\x2e\x37\x31\x2d\x31\x36\x32\x2e\x35\x39\x2d\x31\x30\x2e\ -\x33\x33\x2d\x39\x2e\x34\x33\x2d\x31\x34\x2e\x36\x33\x2d\x39\x2e\ -\x38\x36\x2d\x32\x35\x2e\x34\x34\x2e\x30\x37\x43\x32\x32\x34\x2e\ -\x34\x35\x2c\x32\x31\x37\x2e\x31\x39\x2c\x31\x36\x34\x2e\x39\x2c\ -\x32\x36\x39\x2e\x33\x34\x2c\x31\x30\x35\x2e\x38\x33\x2c\x33\x32\ -\x32\x2e\x30\x37\x63\x2d\x36\x2e\x32\x33\x2c\x35\x2e\x35\x36\x2d\ -\x31\x31\x2e\x37\x37\x2c\x31\x31\x2d\x31\x31\x2e\x36\x35\x2c\x32\ -\x31\x2e\x33\x2e\x33\x34\x2c\x32\x38\x2e\x31\x32\x2c\x31\x39\x2e\ -\x35\x36\x2c\x31\x33\x36\x2e\x38\x32\x2c\x33\x38\x2e\x34\x2c\x31\ -\x34\x37\x2e\x38\x2c\x30\x2c\x30\x2c\x35\x34\x2e\x38\x34\x2d\x2e\ -\x34\x35\x2c\x39\x34\x2e\x33\x37\x2c\x30\x2c\x31\x30\x2e\x37\x37\ -\x2e\x31\x33\x2c\x31\x34\x2e\x36\x37\x2d\x33\x2e\x33\x39\x2c\x31\ -\x34\x2e\x34\x35\x2d\x31\x34\x2e\x38\x2d\x2e\x35\x39\x2d\x33\x30\ -\x2e\x36\x38\x2d\x2e\x34\x39\x2d\x36\x31\x2e\x33\x38\x2d\x2e\x30\ -\x38\x2d\x39\x32\x2e\x30\x37\x2e\x33\x37\x2d\x32\x37\x2e\x34\x37\ -\x2c\x32\x32\x2d\x34\x37\x2e\x34\x34\x2c\x35\x31\x2e\x38\x35\x2d\ -\x34\x38\x2e\x37\x39\x2c\x33\x30\x2e\x32\x37\x2d\x31\x2e\x33\x37\ -\x2c\x35\x33\x2e\x36\x34\x2c\x31\x37\x2e\x34\x37\x2c\x35\x36\x2e\ -\x30\x35\x2c\x34\x35\x2e\x34\x33\x43\x33\x35\x32\x2c\x34\x31\x32\ -\x2e\x36\x39\x2c\x33\x35\x30\x2e\x32\x35\x2c\x34\x34\x34\x2e\x34\ -\x38\x2c\x33\x35\x30\x2e\x33\x31\x2c\x34\x37\x36\x2e\x32\x33\x5a\ -\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\ -\x3d\x22\x35\x36\x32\x2e\x38\x36\x20\x33\x37\x37\x2e\x37\x37\x20\ -\x35\x31\x37\x2e\x30\x35\x20\x33\x37\x37\x2e\x37\x37\x20\x34\x37\ -\x37\x2e\x33\x35\x20\x34\x34\x34\x2e\x30\x35\x20\x34\x33\x37\x2e\ -\x38\x33\x20\x33\x37\x37\x2e\x37\x37\x20\x33\x38\x37\x2e\x39\x36\ -\x20\x33\x37\x37\x2e\x37\x37\x20\x34\x35\x31\x2e\x36\x37\x20\x34\ -\x38\x34\x2e\x32\x32\x20\x34\x35\x31\x2e\x36\x37\x20\x35\x34\x34\ -\x2e\x38\x20\x34\x39\x38\x2e\x39\x31\x20\x35\x34\x34\x2e\x38\x20\ -\x34\x39\x38\x2e\x39\x31\x20\x34\x38\x34\x2e\x39\x36\x20\x35\x36\ -\x32\x2e\x38\x36\x20\x33\x37\x37\x2e\x37\x37\x22\x2f\x3e\x3c\x2f\ -\x73\x76\x67\x3e\ -\x00\x00\x0b\xda\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x35\x39\x2e\x32\x38\x2c\x34\x33\ -\x38\x2e\x36\x32\x63\x2d\x2e\x30\x39\x2d\x32\x2e\x31\x33\x2d\x2e\ -\x31\x39\x2d\x34\x2e\x32\x37\x2d\x2e\x32\x39\x2d\x36\x2e\x34\x76\ -\x2d\x2e\x37\x35\x63\x2d\x2e\x34\x36\x2d\x35\x2e\x31\x39\x2d\x31\ -\x2d\x31\x30\x2e\x34\x31\x2d\x31\x2e\x36\x36\x2d\x31\x35\x2e\x35\ -\x38\x2d\x2e\x38\x37\x2d\x35\x2e\x36\x2d\x31\x2e\x38\x38\x2d\x31\ -\x31\x2e\x30\x36\x2d\x33\x2e\x31\x33\x2d\x31\x36\x2e\x34\x38\x2d\ -\x31\x2e\x32\x33\x2d\x35\x2e\x30\x39\x2d\x32\x2e\x36\x37\x2d\x31\ -\x30\x2e\x32\x34\x2d\x34\x2e\x31\x36\x2d\x31\x35\x2d\x31\x2e\x32\ -\x2d\x33\x2e\x35\x34\x2d\x32\x2e\x34\x2d\x37\x2e\x31\x38\x2d\x33\ -\x2e\x37\x34\x2d\x31\x30\x2e\x35\x36\x2d\x2e\x38\x35\x2d\x32\x2d\ -\x31\x2e\x31\x33\x2d\x34\x2e\x36\x37\x2d\x34\x2e\x32\x2d\x34\x2e\ -\x31\x32\x6c\x2d\x38\x33\x2c\x31\x39\x2e\x34\x39\x63\x2d\x32\x2e\ -\x31\x31\x2e\x35\x32\x2d\x32\x2c\x32\x2e\x32\x34\x2d\x31\x2e\x35\ -\x2c\x33\x2e\x37\x36\x2e\x35\x37\x2c\x32\x2e\x33\x33\x2c\x31\x2c\ -\x34\x2e\x38\x33\x2c\x31\x2e\x34\x32\x2c\x37\x2e\x32\x35\x2e\x32\ -\x39\x2c\x32\x2e\x33\x33\x2e\x37\x2c\x34\x2e\x35\x2e\x39\x31\x2c\ -\x37\x2e\x30\x35\x2e\x31\x2c\x31\x2c\x2e\x32\x31\x2c\x32\x2e\x30\ -\x37\x2e\x33\x31\x2c\x33\x2e\x31\x33\x2e\x32\x37\x2c\x33\x2e\x36\ -\x34\x2e\x33\x38\x2c\x37\x2e\x32\x39\x2e\x34\x2c\x31\x31\x2d\x2e\ -\x30\x37\x2c\x31\x2e\x35\x32\x2d\x2e\x31\x33\x2c\x33\x2e\x30\x39\ -\x2d\x2e\x31\x37\x2c\x34\x2e\x36\x32\x2d\x2e\x31\x31\x2c\x32\x2e\ -\x32\x37\x2d\x2e\x32\x34\x2c\x34\x2e\x35\x39\x2d\x2e\x33\x35\x2c\ -\x36\x2e\x38\x36\x2c\x30\x2c\x2e\x31\x37\x2c\x30\x2d\x31\x2e\x33\ -\x33\x2c\x30\x2d\x2e\x36\x38\x2d\x2e\x31\x36\x2c\x31\x2e\x33\x39\ -\x2d\x2e\x33\x31\x2c\x32\x2e\x38\x2d\x2e\x34\x36\x2c\x34\x2e\x31\ -\x39\x2d\x2e\x32\x36\x2c\x31\x2e\x36\x37\x2d\x2e\x34\x35\x2c\x33\ -\x2e\x33\x39\x2d\x2e\x37\x35\x2c\x35\x2d\x2e\x31\x39\x2c\x31\x2e\ -\x30\x39\x2d\x2e\x33\x38\x2c\x32\x2e\x31\x36\x2d\x2e\x35\x36\x2c\ -\x33\x2e\x32\x31\x2d\x2e\x38\x32\x2c\x34\x2e\x31\x2d\x31\x2e\x38\ -\x32\x2c\x38\x2e\x31\x36\x2d\x33\x2c\x31\x32\x2e\x31\x35\x2d\x2e\ -\x31\x37\x2e\x34\x39\x2d\x2e\x33\x32\x2e\x39\x35\x2d\x2e\x34\x38\ -\x2c\x31\x2e\x34\x32\x48\x35\x35\x36\x2e\x34\x61\x32\x2e\x33\x37\ -\x2c\x32\x2e\x33\x37\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x35\x34\ -\x2d\x32\x76\x30\x63\x2e\x30\x39\x2d\x31\x2e\x35\x35\x2e\x31\x38\ -\x2d\x33\x2e\x31\x35\x2e\x32\x36\x2d\x34\x2e\x37\x39\x43\x35\x35\ -\x39\x2e\x33\x34\x2c\x34\x34\x37\x2e\x32\x2c\x35\x35\x39\x2e\x33\ -\x37\x2c\x34\x34\x32\x2e\x38\x38\x2c\x35\x35\x39\x2e\x32\x38\x2c\ -\x34\x33\x38\x2e\x36\x32\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x35\x32\x38\x2e\x38\x31\x2c\x33\x32\x35\x2e\x34\x32\x63\ -\x32\x2e\x32\x38\x2d\x31\x2c\x31\x2e\x32\x38\x2d\x33\x2c\x2e\x33\ -\x34\x2d\x34\x2e\x37\x32\x2d\x32\x2e\x35\x39\x2d\x35\x2e\x33\x32\ -\x2d\x35\x2e\x34\x33\x2d\x31\x30\x2e\x37\x33\x2d\x38\x2e\x34\x35\ -\x2d\x31\x35\x2e\x39\x34\x4c\x35\x31\x37\x2c\x32\x39\x38\x2e\x37\ -\x6c\x2d\x34\x2e\x31\x35\x2d\x36\x2e\x33\x39\x63\x2d\x32\x2e\x37\ -\x31\x2d\x34\x2d\x35\x2e\x37\x2d\x38\x2e\x31\x34\x2d\x38\x2e\x36\ -\x39\x2d\x31\x32\x2e\x30\x35\x61\x32\x33\x32\x2e\x37\x33\x2c\x32\ -\x33\x32\x2e\x37\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x36\x2d\x33\ -\x37\x2e\x30\x37\x63\x2d\x32\x2e\x35\x31\x2d\x32\x2d\x35\x2d\x34\ -\x2d\x37\x2e\x34\x34\x2d\x35\x2e\x38\x34\x2d\x31\x2e\x38\x2d\x31\ -\x2e\x32\x39\x2d\x33\x2e\x36\x2d\x33\x2e\x33\x36\x2d\x35\x2e\x34\ -\x38\x2d\x31\x2e\x34\x31\x6c\x2d\x33\x39\x2e\x34\x34\x2c\x34\x36\ -\x2e\x32\x63\x2d\x31\x2e\x32\x37\x2c\x31\x2e\x35\x32\x2c\x30\x2c\ -\x33\x2c\x31\x2e\x32\x39\x2c\x34\x2c\x31\x2e\x35\x37\x2c\x31\x2e\ -\x34\x37\x2c\x33\x2e\x31\x2c\x33\x2e\x31\x32\x2c\x34\x2e\x36\x39\ -\x2c\x34\x2e\x37\x32\x2c\x32\x2c\x32\x2e\x31\x39\x2c\x34\x2e\x31\ -\x2c\x34\x2e\x34\x34\x2c\x36\x2e\x30\x37\x2c\x36\x2e\x37\x39\x61\ -\x31\x36\x30\x2e\x31\x33\x2c\x31\x36\x30\x2e\x31\x33\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x31\x35\x2e\x35\x38\x2c\x32\x31\x2e\x39\x34\x6c\ -\x31\x2e\x34\x2c\x32\x2e\x34\x38\x63\x31\x2e\x32\x38\x2c\x32\x2e\ -\x31\x36\x2c\x32\x2e\x33\x36\x2c\x34\x2e\x33\x39\x2c\x33\x2e\x34\ -\x39\x2c\x36\x2e\x34\x39\x2e\x37\x37\x2c\x31\x2e\x36\x2c\x31\x2e\ -\x35\x2c\x33\x2e\x31\x33\x2c\x32\x2e\x32\x36\x2c\x34\x2e\x37\x73\ -\x31\x2e\x33\x32\x2c\x33\x2c\x31\x2e\x39\x35\x2c\x34\x2e\x34\x32\ -\x63\x2e\x37\x31\x2c\x31\x2e\x37\x37\x2c\x31\x2e\x34\x35\x2c\x33\ -\x2e\x34\x39\x2c\x32\x2e\x31\x31\x2c\x35\x2e\x32\x32\x2e\x36\x39\ -\x2c\x32\x2c\x31\x2e\x34\x34\x2c\x34\x2c\x32\x2e\x30\x38\x2c\x35\ -\x2e\x39\x73\x31\x2e\x32\x33\x2c\x33\x2e\x39\x35\x2c\x33\x2e\x36\ -\x32\x2c\x33\x2e\x31\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x32\x38\x31\x2e\x35\x36\x2c\x32\x30\x36\x2e\x31\x38\x6c\ -\x32\x2e\x31\x34\x2e\x33\x31\x63\x32\x2e\x36\x2e\x35\x2c\x35\x2e\ -\x33\x35\x2e\x39\x32\x2c\x38\x2c\x31\x2e\x35\x34\x6c\x32\x37\x2e\ -\x34\x36\x2d\x35\x34\x2e\x32\x36\x63\x2d\x34\x2e\x36\x36\x2d\x2e\ -\x38\x33\x2d\x39\x2e\x34\x34\x2d\x31\x2e\x34\x37\x2d\x31\x34\x2e\ -\x30\x38\x2d\x32\x2d\x35\x2e\x33\x39\x2d\x2e\x35\x36\x2d\x31\x30\ -\x2e\x38\x2d\x31\x2d\x31\x36\x2e\x30\x38\x2d\x31\x2e\x32\x33\x2d\ -\x32\x2d\x2e\x30\x36\x2d\x34\x2e\x32\x33\x2d\x2e\x31\x2d\x35\x2e\ -\x39\x33\x2d\x2e\x31\x34\x61\x32\x2e\x34\x33\x2c\x32\x2e\x34\x33\ -\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x2e\x34\x39\x2c\x32\x2e\x32\x38\ -\x6c\x2d\x33\x2c\x35\x30\x2e\x37\x34\x43\x32\x37\x37\x2e\x35\x34\ -\x2c\x32\x30\x35\x2e\x36\x35\x2c\x32\x37\x39\x2e\x37\x32\x2c\x32\ -\x30\x36\x2c\x32\x38\x31\x2e\x35\x36\x2c\x32\x30\x36\x2e\x31\x38\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x30\x2e\ -\x32\x34\x2c\x32\x35\x30\x2e\x33\x31\x63\x31\x2e\x30\x39\x2c\x31\ -\x2e\x30\x38\x2c\x32\x2e\x31\x36\x2c\x32\x2e\x31\x33\x2c\x33\x2e\ -\x31\x38\x2c\x33\x2e\x31\x32\x2c\x31\x2e\x37\x35\x2c\x31\x2e\x34\ -\x36\x2c\x34\x2c\x35\x2e\x35\x31\x2c\x36\x2e\x31\x36\x2c\x32\x2e\ -\x36\x36\x6c\x33\x35\x2e\x33\x31\x2d\x35\x32\x2e\x34\x33\x63\x31\ -\x2e\x34\x2d\x32\x2e\x33\x32\x2d\x2e\x34\x35\x2d\x33\x2e\x37\x31\ -\x2d\x32\x2d\x34\x2e\x38\x33\x2d\x32\x2e\x35\x33\x2d\x32\x2d\x35\ -\x2d\x33\x2e\x38\x34\x2d\x37\x2e\x37\x31\x2d\x35\x2e\x38\x34\x61\ -\x32\x30\x32\x2e\x34\x32\x2c\x32\x30\x32\x2e\x34\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x32\x30\x2e\x33\x38\x2d\x31\x32\x2e\x37\x36\x4c\ -\x33\x37\x36\x2e\x31\x2c\x32\x34\x36\x2e\x35\x38\x43\x33\x37\x37\ -\x2e\x35\x2c\x32\x34\x37\x2e\x38\x32\x2c\x33\x37\x38\x2e\x39\x2c\ -\x32\x34\x39\x2e\x31\x31\x2c\x33\x38\x30\x2e\x32\x34\x2c\x32\x35\ -\x30\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x32\x31\x35\x2e\x35\x2c\x32\x31\x32\x2e\x37\x34\x63\x32\x2e\x32\ -\x2d\x2e\x33\x36\x2c\x34\x2e\x35\x2d\x2e\x35\x35\x2c\x36\x2e\x36\ -\x37\x2d\x2e\x38\x32\x2c\x32\x2d\x2e\x31\x33\x2c\x33\x2e\x38\x38\ -\x2d\x2e\x33\x32\x2c\x35\x2e\x38\x2d\x2e\x34\x31\x6c\x34\x2e\x33\ -\x37\x2d\x2e\x31\x34\x63\x32\x2e\x31\x37\x2d\x2e\x32\x35\x2c\x36\ -\x2c\x31\x2e\x30\x36\x2c\x36\x2e\x31\x2d\x32\x2e\x35\x31\x6c\x2d\ -\x32\x2e\x37\x33\x2d\x34\x36\x2e\x30\x37\x63\x2d\x2e\x34\x39\x2d\ -\x33\x2e\x35\x35\x2d\x34\x2e\x31\x38\x2d\x31\x2e\x36\x35\x2d\x36\ -\x2e\x33\x38\x2d\x31\x2e\x35\x39\x2d\x34\x2e\x35\x38\x2e\x37\x2d\ -\x39\x2e\x32\x38\x2c\x31\x2e\x35\x39\x2d\x31\x33\x2e\x39\x2c\x32\ -\x2e\x36\x33\x2d\x34\x2e\x32\x38\x2c\x31\x2d\x38\x2e\x36\x31\x2c\ -\x32\x2e\x32\x32\x2d\x31\x32\x2e\x38\x39\x2c\x33\x2e\x35\x33\x61\ -\x31\x38\x36\x2e\x32\x37\x2c\x31\x38\x36\x2e\x32\x37\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x35\x33\x2e\x39\x33\x2c\x32\x37\x2e\x35\x33\x63\ -\x2d\x32\x2e\x33\x34\x2c\x31\x2e\x37\x39\x2d\x34\x2e\x36\x39\x2c\ -\x33\x2e\x35\x32\x2d\x36\x2e\x38\x36\x2c\x35\x2e\x33\x32\x2d\x31\ -\x2e\x35\x35\x2c\x31\x2e\x32\x37\x2d\x33\x2e\x37\x37\x2c\x32\x2e\ -\x34\x38\x2d\x32\x2e\x34\x39\x2c\x34\x2e\x38\x32\x6c\x31\x37\x2e\ -\x32\x35\x2c\x32\x38\x2e\x31\x32\x63\x31\x2e\x31\x37\x2c\x31\x2e\ -\x38\x34\x2c\x32\x2e\x39\x2e\x37\x35\x2c\x34\x2e\x33\x31\x2d\x2e\ -\x32\x35\x2c\x31\x2e\x39\x32\x2d\x31\x2e\x32\x33\x2c\x34\x2d\x32\ -\x2e\x33\x35\x2c\x36\x2d\x33\x2e\x35\x36\x2c\x32\x2e\x37\x36\x2d\ -\x31\x2e\x34\x39\x2c\x35\x2e\x36\x2d\x33\x2c\x38\x2e\x34\x39\x2d\ -\x34\x2e\x33\x35\x61\x31\x35\x31\x2e\x35\x39\x2c\x31\x35\x31\x2e\ -\x35\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x2e\x37\x38\x2d\x36\ -\x2e\x34\x32\x2c\x31\x34\x37\x2e\x32\x39\x2c\x31\x34\x37\x2e\x32\ -\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x30\x2e\x37\x39\x2d\x35\x2e\ -\x32\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x36\x39\ -\x2e\x38\x33\x2c\x32\x36\x37\x63\x2d\x33\x2e\x36\x39\x2c\x34\x2e\ -\x38\x39\x2d\x37\x2e\x31\x33\x2c\x31\x30\x2d\x31\x30\x2e\x33\x39\ -\x2c\x31\x35\x2e\x31\x37\x2d\x32\x2e\x32\x35\x2c\x33\x2e\x37\x2d\ -\x34\x2e\x35\x2c\x37\x2e\x36\x34\x2d\x36\x2e\x35\x2c\x31\x31\x2e\ -\x33\x34\x2d\x31\x2c\x32\x2d\x32\x2c\x33\x2e\x39\x35\x2d\x33\x2c\ -\x35\x2e\x39\x33\x4c\x34\x37\x2e\x33\x2c\x33\x30\x35\x63\x2d\x31\ -\x2e\x37\x38\x2c\x34\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x31\x32\x2d\ -\x35\x2c\x31\x32\x2e\x31\x35\x2d\x2e\x35\x2c\x32\x2e\x33\x2d\x33\ -\x2e\x32\x37\x2c\x35\x2e\x37\x38\x2d\x2e\x32\x35\x2c\x37\x2e\x30\ -\x39\x6c\x31\x37\x2c\x36\x2e\x32\x34\x63\x32\x2e\x39\x33\x2e\x38\ -\x38\x2c\x33\x2e\x33\x39\x2d\x32\x2e\x38\x2c\x34\x2e\x36\x31\x2d\ -\x34\x2e\x37\x2c\x31\x2e\x38\x2d\x33\x2e\x33\x39\x2c\x33\x2e\x37\ -\x33\x2d\x36\x2e\x38\x31\x2c\x35\x2e\x37\x35\x2d\x31\x30\x2e\x31\ -\x39\x4c\x37\x32\x2e\x33\x32\x2c\x33\x31\x31\x6c\x33\x2e\x32\x39\ -\x2d\x34\x2e\x38\x37\x63\x32\x2e\x31\x35\x2d\x33\x2c\x34\x2e\x35\ -\x31\x2d\x36\x2e\x31\x38\x2c\x36\x2e\x38\x37\x2d\x39\x2e\x31\x36\ -\x41\x31\x37\x39\x2e\x32\x33\x2c\x31\x37\x39\x2e\x32\x33\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x31\x30\x2e\x36\x33\x2c\x32\x36\x39\x6c\ -\x33\x2e\x39\x33\x2d\x33\x63\x31\x2e\x36\x32\x2d\x31\x2e\x34\x37\ -\x2c\x35\x2e\x37\x32\x2d\x32\x2e\x39\x2c\x33\x2e\x37\x31\x2d\x35\ -\x2e\x35\x33\x4c\x39\x38\x2e\x39\x32\x2c\x32\x33\x38\x2e\x37\x39\ -\x63\x2d\x31\x2e\x36\x36\x2d\x31\x2e\x37\x2d\x33\x2e\x33\x32\x2d\ -\x2e\x32\x31\x2d\x34\x2e\x36\x35\x2c\x31\x2e\x31\x37\x2d\x32\x2e\ -\x31\x31\x2c\x31\x2e\x39\x33\x2d\x34\x2e\x31\x32\x2c\x33\x2e\x39\ -\x33\x2d\x36\x2e\x32\x36\x2c\x36\x41\x32\x30\x37\x2e\x33\x2c\x32\ -\x30\x37\x2e\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x39\x2e\x38\x33\ -\x2c\x32\x36\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x32\x34\x31\x2e\x34\x36\x2c\x35\x32\x32\x2e\x30\x36\x63\x32\x33\ -\x2c\x31\x33\x2e\x35\x31\x2c\x35\x32\x2e\x34\x37\x2c\x32\x2e\x35\ -\x2c\x36\x34\x2e\x31\x37\x2d\x32\x35\x2e\x39\x61\x36\x36\x2e\x35\ -\x39\x2c\x36\x36\x2e\x35\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x2e\ -\x36\x35\x2d\x31\x32\x2e\x31\x31\x6c\x34\x38\x2e\x35\x33\x2d\x32\ -\x34\x37\x2e\x36\x37\x2c\x31\x38\x2e\x34\x38\x2d\x39\x34\x2e\x33\ -\x32\x2c\x31\x31\x2e\x34\x35\x2d\x35\x38\x2e\x34\x33\x63\x31\x2e\ -\x33\x33\x2d\x36\x2e\x38\x2d\x33\x2e\x32\x37\x2d\x31\x31\x2e\x34\ -\x33\x2d\x37\x2e\x38\x38\x2d\x31\x31\x2e\x34\x33\x2d\x32\x2e\x37\ -\x2c\x30\x2d\x35\x2e\x34\x31\x2c\x31\x2e\x35\x39\x2d\x36\x2e\x39\ -\x34\x2c\x35\x2e\x32\x36\x6c\x2d\x32\x33\x2e\x33\x2c\x35\x36\x4c\ -\x32\x31\x39\x2e\x34\x33\x2c\x34\x34\x36\x2e\x36\x31\x43\x32\x30\ -\x37\x2e\x37\x39\x2c\x34\x37\x34\x2e\x36\x2c\x32\x31\x37\x2e\x36\ -\x35\x2c\x35\x30\x38\x2e\x33\x38\x2c\x32\x34\x31\x2e\x34\x36\x2c\ -\x35\x32\x32\x2e\x30\x36\x5a\x6d\x32\x32\x2e\x38\x31\x2d\x37\x37\ -\x2e\x38\x37\x63\x31\x33\x2c\x30\x2c\x32\x33\x2e\x35\x32\x2c\x31\ -\x30\x2e\x34\x39\x2c\x32\x33\x2e\x35\x32\x2c\x32\x35\x2e\x37\x36\ -\x2c\x30\x2c\x32\x37\x2e\x35\x2d\x34\x37\x2c\x32\x37\x2e\x37\x31\ -\x2d\x34\x37\x2c\x30\x43\x32\x34\x30\x2e\x37\x36\x2c\x34\x35\x34\ -\x2e\x36\x38\x2c\x32\x35\x31\x2e\x32\x39\x2c\x34\x34\x34\x2e\x31\ -\x39\x2c\x32\x36\x34\x2e\x32\x37\x2c\x34\x34\x34\x2e\x31\x39\x5a\ -\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x06\x00\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x34\x2c\x33\x31\x32\x2e\x33\ -\x34\x63\x2d\x37\x2e\x39\x32\x2e\x37\x37\x2d\x31\x33\x2e\x38\x36\ -\x2d\x33\x2e\x35\x35\x2d\x31\x39\x2e\x33\x2d\x38\x2e\x34\x34\x2d\ -\x35\x30\x2d\x34\x35\x2d\x31\x30\x30\x2e\x35\x39\x2d\x38\x39\x2e\ -\x33\x33\x2d\x31\x34\x39\x2e\x34\x31\x2d\x31\x33\x35\x2e\x36\x39\ -\x2d\x31\x38\x2e\x35\x33\x2d\x31\x37\x2e\x35\x39\x2d\x33\x37\x2e\ -\x34\x32\x2d\x33\x34\x2e\x37\x38\x2d\x35\x35\x2e\x37\x33\x2d\x35\ -\x32\x2e\x36\x2d\x37\x2e\x39\x35\x2d\x37\x2e\x37\x33\x2d\x31\x32\ -\x2e\x34\x38\x2d\x36\x2e\x35\x35\x2d\x31\x39\x2e\x39\x33\x2e\x34\ -\x36\x2d\x36\x37\x2c\x36\x32\x2e\x38\x38\x2d\x31\x33\x33\x2e\x39\ -\x33\x2c\x31\x32\x35\x2e\x37\x35\x2d\x32\x30\x33\x2e\x31\x31\x2c\ -\x31\x38\x36\x2d\x34\x2c\x33\x2e\x34\x35\x2d\x38\x2e\x30\x37\x2c\ -\x37\x2e\x35\x35\x2d\x31\x32\x2e\x37\x38\x2c\x39\x2e\x30\x37\x2d\ -\x31\x31\x2e\x36\x32\x2c\x33\x2e\x37\x34\x2d\x32\x32\x2e\x35\x36\ -\x2e\x34\x35\x2d\x32\x38\x2e\x38\x34\x2d\x31\x30\x2e\x34\x31\x73\ -\x2d\x32\x2d\x32\x31\x2c\x36\x2e\x39\x32\x2d\x32\x39\x43\x38\x32\ -\x2c\x32\x34\x34\x2e\x35\x36\x2c\x31\x31\x32\x2e\x37\x34\x2c\x32\ -\x31\x38\x2c\x31\x34\x32\x2e\x32\x34\x2c\x31\x39\x30\x51\x32\x30\ -\x37\x2c\x31\x32\x38\x2e\x36\x38\x2c\x32\x37\x33\x2e\x31\x35\x2c\ -\x36\x39\x2e\x31\x36\x63\x32\x32\x2e\x34\x36\x2d\x32\x30\x2e\x30\ -\x39\x2c\x33\x31\x2e\x34\x39\x2d\x32\x30\x2c\x35\x34\x2c\x2e\x35\ -\x33\x2c\x33\x30\x2e\x37\x38\x2c\x32\x38\x2c\x36\x32\x2e\x37\x34\ -\x2c\x35\x34\x2e\x36\x39\x2c\x39\x32\x2e\x32\x36\x2c\x38\x34\x2e\ -\x30\x37\x2c\x34\x31\x2e\x31\x39\x2c\x34\x31\x2c\x38\x35\x2e\x34\ -\x38\x2c\x37\x38\x2e\x32\x32\x2c\x31\x32\x37\x2e\x38\x33\x2c\x31\ -\x31\x37\x2e\x37\x38\x2c\x37\x2e\x31\x2c\x36\x2e\x36\x34\x2c\x31\ -\x34\x2e\x31\x31\x2c\x31\x34\x2c\x39\x2e\x33\x33\x2c\x32\x35\x2e\ -\x37\x32\x43\x35\x35\x32\x2e\x33\x2c\x33\x30\x37\x2e\x36\x38\x2c\ -\x35\x34\x34\x2e\x30\x35\x2c\x33\x31\x31\x2e\x35\x38\x2c\x35\x33\ -\x34\x2c\x33\x31\x32\x2e\x33\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x31\x33\x34\x2e\x38\x33\x2c\x33\x37\x38\x2e\x36\ -\x32\x2c\x36\x31\x2c\x35\x34\x35\x2e\x37\x39\x68\x34\x38\x2e\x32\ -\x34\x6c\x31\x33\x2d\x33\x32\x2e\x34\x38\x48\x31\x39\x33\x2e\x32\ -\x6c\x31\x33\x2c\x33\x32\x2e\x34\x38\x68\x34\x39\x2e\x32\x6c\x2d\ -\x37\x34\x2d\x31\x36\x37\x2e\x31\x37\x5a\x6d\x31\x2e\x34\x37\x2c\ -\x39\x39\x2e\x38\x33\x4c\x31\x35\x37\x2e\x37\x35\x2c\x34\x32\x35\ -\x6c\x32\x31\x2e\x34\x35\x2c\x35\x33\x2e\x34\x35\x5a\x22\x2f\x3e\ -\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\ -\x36\x31\x2e\x31\x32\x20\x33\x37\x38\x2e\x36\x32\x20\x34\x31\x33\ -\x2e\x38\x33\x20\x33\x37\x38\x2e\x36\x32\x20\x34\x31\x33\x2e\x38\ -\x33\x20\x35\x34\x35\x2e\x37\x39\x20\x35\x34\x30\x2e\x38\x38\x20\ -\x35\x34\x35\x2e\x37\x39\x20\x35\x34\x30\x2e\x38\x38\x20\x35\x30\ -\x38\x2e\x33\x20\x34\x36\x31\x2e\x31\x32\x20\x35\x30\x38\x2e\x33\ -\x20\x34\x36\x31\x2e\x31\x32\x20\x33\x37\x38\x2e\x36\x32\x22\x2f\ -\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\ -\x33\x31\x36\x2e\x39\x20\x35\x30\x38\x2e\x33\x20\x33\x31\x36\x2e\ -\x39\x20\x33\x37\x38\x2e\x36\x32\x20\x32\x36\x39\x2e\x36\x32\x20\ -\x33\x37\x38\x2e\x36\x32\x20\x32\x36\x39\x2e\x36\x32\x20\x35\x34\ -\x35\x2e\x37\x39\x20\x33\x39\x36\x2e\x36\x37\x20\x35\x34\x35\x2e\ -\x37\x39\x20\x33\x39\x36\x2e\x36\x37\x20\x35\x30\x38\x2e\x33\x20\ -\x33\x31\x36\x2e\x39\x20\x35\x30\x38\x2e\x33\x22\x2f\x3e\x3c\x70\ -\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x64\x3d\x22\x4d\x31\x32\x33\x2e\x37\x32\x2c\x33\x36\x33\ -\x2e\x35\x34\x68\x36\x36\x2e\x32\x31\x6c\x35\x33\x2e\x37\x34\x2c\ -\x31\x32\x31\x2e\x33\x35\x63\x31\x2e\x35\x2d\x32\x2e\x33\x32\x2c\ -\x32\x2e\x31\x32\x2d\x35\x2e\x36\x35\x2c\x32\x2d\x31\x30\x2e\x33\ -\x34\x2d\x2e\x35\x38\x2d\x33\x30\x2e\x36\x32\x2d\x2e\x34\x38\x2d\ -\x36\x31\x2e\x32\x36\x2d\x2e\x30\x38\x2d\x39\x31\x2e\x38\x38\x2e\ -\x33\x37\x2d\x32\x37\x2e\x34\x32\x2c\x32\x31\x2e\x39\x33\x2d\x34\ -\x37\x2e\x33\x34\x2c\x35\x31\x2e\x37\x34\x2d\x34\x38\x2e\x36\x39\ -\x2c\x33\x30\x2e\x32\x31\x2d\x31\x2e\x33\x37\x2c\x35\x33\x2e\x35\ -\x33\x2c\x31\x37\x2e\x34\x34\x2c\x35\x35\x2e\x39\x33\x2c\x34\x35\ -\x2e\x33\x34\x2c\x32\x2e\x37\x33\x2c\x33\x31\x2e\x36\x34\x2c\x31\ -\x2c\x36\x33\x2e\x33\x36\x2c\x31\x2e\x31\x2c\x39\x35\x2e\x30\x35\ -\x2c\x30\x2c\x31\x31\x2e\x30\x39\x2c\x33\x2e\x36\x34\x2c\x31\x35\ -\x2e\x31\x31\x2c\x31\x34\x2e\x35\x32\x2c\x31\x35\x2c\x39\x2e\x35\ -\x2d\x2e\x31\x31\x2c\x31\x39\x2e\x34\x39\x2d\x2e\x31\x37\x2c\x32\ -\x39\x2e\x32\x2d\x2e\x31\x39\x56\x33\x36\x33\x2e\x35\x34\x68\x37\ -\x37\x2e\x34\x36\x76\x39\x34\x63\x31\x33\x2e\x38\x32\x2d\x33\x38\ -\x2e\x35\x35\x2c\x32\x35\x2e\x35\x37\x2d\x39\x39\x2e\x34\x35\x2c\ -\x32\x35\x2e\x37\x36\x2d\x31\x31\x34\x2e\x39\x34\x2e\x31\x2d\x37\ -\x2e\x34\x36\x2d\x31\x2e\x37\x32\x2d\x31\x32\x2e\x38\x2d\x37\x2e\ -\x36\x31\x2d\x31\x38\x43\x34\x33\x33\x2c\x32\x37\x30\x2e\x38\x33\ -\x2c\x33\x37\x32\x2e\x33\x2c\x32\x31\x37\x2c\x33\x31\x32\x2e\x33\ -\x38\x2c\x31\x36\x32\x2e\x33\x32\x63\x2d\x31\x30\x2e\x33\x31\x2d\ -\x39\x2e\x34\x31\x2d\x31\x34\x2e\x36\x2d\x39\x2e\x38\x34\x2d\x32\ -\x35\x2e\x33\x39\x2e\x30\x37\x2d\x35\x38\x2e\x32\x2c\x35\x33\x2e\ -\x34\x37\x2d\x31\x31\x37\x2e\x36\x34\x2c\x31\x30\x35\x2e\x35\x31\ -\x2d\x31\x37\x36\x2e\x35\x38\x2c\x31\x35\x38\x2e\x31\x33\x2d\x36\ -\x2e\x32\x32\x2c\x35\x2e\x35\x36\x2d\x31\x31\x2e\x37\x35\x2c\x31\ -\x31\x2d\x31\x31\x2e\x36\x32\x2c\x32\x31\x2e\x32\x36\x2e\x31\x33\ -\x2c\x31\x31\x2e\x31\x2c\x33\x2e\x32\x31\x2c\x33\x34\x2e\x37\x36\ -\x2c\x38\x2c\x36\x30\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x01\x82\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x65\x32\x66\x32\x36\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x78\x3d\x22\x32\x36\x34\x2e\x34\x37\x22\x20\x79\x3d\ -\x22\x33\x32\x2e\x33\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x37\ -\x31\x2e\x30\x36\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x33\ -\x35\x2e\x33\x36\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ -\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x33\x30\x30\x20\x2d\ -\x31\x32\x34\x2e\x32\x36\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x34\ -\x35\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x32\x36\x34\x2e\ -\x34\x37\x22\x20\x79\x3d\x22\x33\x32\x2e\x33\x32\x22\x20\x77\x69\ -\x64\x74\x68\x3d\x22\x37\x31\x2e\x30\x36\x22\x20\x68\x65\x69\x67\ -\x68\x74\x3d\x22\x35\x33\x35\x2e\x33\x36\x22\x20\x74\x72\x61\x6e\ -\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\ -\x28\x37\x32\x34\x2e\x32\x36\x20\x33\x30\x30\x29\x20\x72\x6f\x74\ -\x61\x74\x65\x28\x31\x33\x35\x29\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ -\x3e\ -\x00\x00\x02\x52\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x35\x66\x62\x62\x34\x36\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x35\x37\x36\x2e\x38\x39\x2c\x31\x33\ -\x35\x63\x2d\x2e\x36\x38\x2e\x38\x36\x2d\x31\x2e\x32\x31\x2c\x31\ -\x2e\x36\x34\x2d\x31\x2e\x38\x34\x2c\x32\x2e\x33\x32\x2d\x31\x2c\ -\x31\x2e\x31\x2d\x32\x2e\x31\x2c\x32\x2e\x31\x33\x2d\x33\x2e\x31\ -\x36\x2c\x33\x2e\x31\x39\x51\x33\x38\x35\x2e\x37\x31\x2c\x33\x32\ -\x36\x2e\x36\x31\x2c\x31\x39\x39\x2e\x36\x31\x2c\x35\x31\x32\x2e\ -\x38\x34\x63\x2d\x34\x2e\x32\x38\x2c\x34\x2e\x32\x39\x2d\x36\x2e\ -\x34\x2c\x35\x2e\x32\x38\x2d\x31\x31\x2e\x33\x33\x2e\x33\x31\x51\ -\x31\x30\x37\x2e\x35\x37\x2c\x34\x33\x31\x2e\x37\x36\x2c\x32\x36\ -\x2e\x32\x32\x2c\x33\x35\x31\x63\x2d\x33\x2e\x36\x39\x2d\x33\x2e\ -\x36\x37\x2d\x34\x2e\x35\x2d\x35\x2e\x34\x35\x2d\x2e\x32\x31\x2d\ -\x39\x2e\x35\x34\x71\x32\x32\x2e\x31\x38\x2d\x32\x31\x2e\x31\x35\ -\x2c\x34\x33\x2e\x33\x36\x2d\x34\x33\x2e\x33\x35\x63\x34\x2e\x36\ -\x33\x2d\x34\x2e\x38\x34\x2c\x37\x2e\x32\x36\x2d\x34\x2e\x37\x39\ -\x2c\x31\x31\x2e\x39\x34\x2d\x2e\x30\x35\x2c\x33\x35\x2e\x37\x35\ -\x2c\x33\x36\x2e\x31\x36\x2c\x37\x31\x2e\x38\x34\x2c\x37\x32\x2c\ -\x31\x30\x37\x2e\x36\x32\x2c\x31\x30\x38\x2e\x31\x32\x2c\x33\x2e\ -\x38\x39\x2c\x33\x2e\x39\x32\x2c\x35\x2e\x38\x32\x2c\x34\x2e\x34\ -\x34\x2c\x31\x30\x2e\x30\x38\x2e\x31\x36\x51\x33\x35\x38\x2e\x32\ -\x38\x2c\x32\x34\x36\x2e\x36\x39\x2c\x35\x31\x37\x2e\x37\x35\x2c\ -\x38\x37\x2e\x32\x34\x63\x34\x2e\x36\x39\x2d\x34\x2e\x37\x2c\x37\ -\x2e\x31\x38\x2d\x35\x2e\x31\x39\x2c\x31\x32\x2d\x2e\x31\x31\x2c\ -\x31\x33\x2e\x32\x39\x2c\x31\x34\x2c\x32\x37\x2e\x32\x32\x2c\x32\ -\x37\x2e\x34\x36\x2c\x34\x30\x2e\x38\x38\x2c\x34\x31\x2e\x31\x35\ -\x43\x35\x37\x32\x2e\x36\x39\x2c\x31\x33\x30\x2e\x33\x37\x2c\x35\ -\x37\x34\x2e\x36\x35\x2c\x31\x33\x32\x2e\x35\x37\x2c\x35\x37\x36\ -\x2e\x38\x39\x2c\x31\x33\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ -\x3e\ -\x00\x00\x0b\x5d\ -\x00\ -\x00\x38\xfa\x78\x9c\xed\x9b\xcb\x8e\x5c\xc7\x0d\x86\x5f\x65\x30\ -\xd9\xb2\xa8\x22\xeb\xee\x68\x04\x28\xda\xc6\x2b\xef\xbc\x09\x0e\ -\x8e\x64\x5b\xc0\xf8\x12\x8d\x60\xd9\x08\xf2\xee\xc1\xc7\xea\x91\ -\xa5\x20\x11\xe0\x38\x0b\x07\xe9\x85\xaa\xbb\xe7\x5c\x8a\xc5\xfb\ -\x4f\x52\x4f\x1f\x7e\xfc\xfa\xe6\xf5\xcb\xbb\xdb\x3f\x1f\x3f\xbf\ -\x7a\xf3\x17\xbb\xbd\x79\x79\xbc\x3d\xd2\x77\xc7\xb7\xaf\x2e\x7f\ -\xbb\xb1\xdb\x9b\x9f\xbe\xbd\xff\xee\xe1\xee\xf6\x9b\xb7\x6f\x7f\ -\xf8\xec\xc9\x93\x77\xef\xde\xe9\xbb\xa2\xdf\xbf\xf9\xfa\x89\xe7\ -\x9c\x9f\x3c\xfc\xf8\xf5\xed\xcd\x8f\xaf\x5f\xbd\xfb\xd3\xf7\x3f\ -\xdd\xdd\xe6\x9b\x7c\xd3\x73\xfc\xbb\x7d\xf6\xf4\xe5\xab\xaf\x1e\ -\x9e\x3d\x7d\x78\xfb\xf3\xfd\xab\x67\x7a\xde\x3f\x24\xfb\xdb\x57\ -\xaf\xef\xef\x3f\xfb\xc3\xab\xfc\x2a\xbf\xfc\xea\x8f\x7f\x7f\xfa\ -\x64\x5f\x7c\xfa\x64\xdf\xfa\xc3\xf1\xf6\x9b\x9b\xf3\xfe\x78\x78\ -\xb8\xbb\x8d\xfb\x6f\x6f\x5e\xde\xdd\x7e\x6e\x5e\xb4\x57\x29\x7d\ -\x6a\xab\x87\x0d\xed\x26\x7b\xcd\x92\xc5\x24\xa7\xa2\xde\x4e\xd3\ -\xb6\xd2\xd4\xd6\x93\xab\x25\xab\xea\x3d\x2d\x6d\x25\xd9\xd0\xd9\ -\x8e\x51\x74\xb9\xec\x35\x9e\x4b\x23\x55\x2d\x7e\xa6\xa2\x2d\xb9\ -\x7a\x49\x43\xab\x27\xd3\x31\x92\x99\xe4\xc3\xcc\xb5\x15\xb9\x7c\ -\xf0\x4c\x4e\x96\xb5\x0e\x69\xda\xe7\x99\xba\xd6\x26\x35\x99\x69\ -\x93\xa2\xb5\x27\xeb\x3a\x2d\xb9\xe6\x95\xca\x5e\xbc\xa4\xae\xb9\ -\xa7\xae\x6d\xa4\xa5\x56\xd2\xd2\xe9\xfb\x42\x61\xb7\xa2\x5e\xd3\ -\xd0\x92\x4c\x6d\xf2\x2a\x73\x71\x28\x68\x6a\x55\x9a\xce\xce\x96\ -\x26\x53\xe7\x4c\xd6\xd4\xc4\x74\x56\x5e\xdf\xc4\x35\xcf\xd4\xd5\ -\x5d\x7d\xa5\xc5\x2b\x5d\x6b\x4b\x95\xad\xab\x76\x98\xe1\xdc\xc0\ -\x93\xae\x2d\x8e\x06\x51\xb5\xa6\xaa\xcd\x52\xd3\x91\xa6\x8e\x9e\ -\x1a\x37\x57\x1d\x4d\x32\x1c\xb3\xc4\x0b\x37\x03\xf9\x35\xb4\x96\ -\xa4\xa5\xc6\xe1\xa1\xdb\x20\x74\x53\xe6\x2b\x41\x4f\xdd\xbb\x67\ -\x5e\x58\xd8\xc3\x46\xec\xd9\x93\xf1\xbb\xa9\x0f\x31\x2d\x2d\x4d\ -\xed\x2e\x4d\x4b\xbc\xc2\xfa\x61\xc5\xb4\x77\xb9\x7c\x6c\x79\x5a\ -\xd1\x3a\xd3\xd0\x59\xcf\x02\x79\xa6\x93\x67\x32\xf2\x1a\x6b\x3f\ -\x3d\xb5\x4e\x2d\x9e\xaa\xae\xca\xef\xa5\x4b\x1b\x34\xcf\xa6\xde\ -\x52\xd7\x51\xd9\x75\xa6\xa9\x13\xa6\x57\x64\xaa\x0b\xe9\x8c\xe4\ -\x1c\x9d\x83\x34\x5e\xd4\x5a\x6a\x5a\xca\xb1\x74\x2e\x89\x65\xab\ -\x47\x55\xab\x1c\xa2\xac\xd3\xb8\xbd\xea\x70\x71\x04\x28\x55\xad\ -\xb3\x59\x5d\x5b\x08\x55\x1b\xc2\xb2\xd4\xd1\xca\xa5\x33\x28\xe8\ -\x12\x64\xa8\x5f\x8e\xa4\xb5\x88\x67\x38\xa5\x65\x88\xeb\x82\xa9\ -\x12\xba\x87\x4a\x15\xde\xe3\x55\x2c\x35\xa9\x5a\x82\x93\xbc\xa1\ -\x6c\x22\x24\x94\x05\x36\xb6\xd0\xa7\x90\xd5\xe0\x40\xa5\xa7\xca\ -\x29\x2b\x3a\xb8\x10\xc7\x50\x1f\x41\x5f\xe2\xaf\x0b\xc9\x4f\x78\ -\x3f\xab\x6c\xf5\x46\x51\x04\x53\x48\x45\x97\x09\xdc\xee\x4d\xcc\ -\xd5\x1c\x3e\x95\x2e\x85\xd3\xbb\xce\x22\x3d\x24\x2a\x96\x13\xa7\ -\xac\xda\xa6\x14\x59\x5a\xa6\x34\x1d\x53\xac\xaa\x0d\x99\xf0\xa2\ -\x70\xcd\x65\x60\x2e\xce\x0d\x66\xa2\x86\x8d\x38\x57\xe6\xd6\xbc\ -\x52\xd8\xa8\xac\xd4\x75\xd5\xc3\xb2\xf6\x25\x7b\x0d\x13\x93\x20\ -\x74\x9e\xd8\x43\x53\xc3\x70\xd0\x33\x0b\x03\x6b\xc8\x1c\x33\x6a\ -\x3a\xc3\xe8\x6a\x9a\xba\x8a\x4c\xed\x8d\xdb\x8a\x07\x81\xc9\xd4\ -\x5d\x56\x70\x41\x57\x85\xfd\x61\x75\x70\x1b\x37\x21\x4b\xab\xc3\ -\x49\x87\x94\x3a\x64\x7b\x88\x89\xf5\xed\x75\x93\x32\xb4\x1a\x77\ -\x0c\x8e\xaf\x63\x2f\xfb\xd2\x92\x8a\x2a\x2f\x24\x11\xcb\x45\x77\ -\x4d\xd4\xc7\x59\x75\x9a\xb6\x26\x33\x39\x0f\x55\xec\xb9\x8c\xc3\ -\xca\x8c\xd3\xee\x8f\xfd\xa2\x19\x07\x2b\x6a\xeb\xf4\xd0\xe8\xf0\ -\x2e\xa9\x05\x85\x39\x35\xf8\xef\xda\x07\x74\xe4\xc9\x99\x4d\x6c\ -\x6a\x46\x65\xdc\xa5\xa8\x2f\x31\x14\xa6\x48\x55\x47\x37\xeb\x84\ -\xf0\x75\xac\x21\x6b\x93\x8b\xa7\x0c\x2f\x76\x26\x88\x1e\x71\x70\ -\x24\x66\xb0\x6e\x34\xb1\x0e\x17\x3a\x4a\x19\x47\x5d\x70\xcf\x0a\ -\x1b\x0d\x6c\xaf\xb5\x63\xe2\xb4\x64\xaf\x9b\x72\xcb\xd8\x64\xd3\ -\x7a\x0e\xb5\x70\x39\x9c\x1f\x77\x53\x83\xa8\xa1\x13\x75\x1d\x28\ -\xc3\xc2\xad\xad\x82\xca\x60\xc1\xe8\x1c\xda\x14\x3a\xd3\xa5\x4a\ -\xc1\x24\x96\xf6\xa4\x2e\xd6\x12\xe7\xca\xa8\xb5\x49\xbf\x88\x1b\ -\xbb\x2a\x03\x63\xe1\x8c\x25\x34\xb7\xe2\x17\x5b\x42\xa2\x61\x61\ -\xb8\x4e\x5e\x39\x07\xbc\x88\x3d\x64\xc0\x2a\xa4\x7c\x2c\xbe\xc5\ -\xf2\x28\xdd\xd1\xa4\x9e\xb0\x51\x6d\x86\x9c\xf0\x25\x62\x4d\x7b\ -\xd5\x1e\xac\x74\xfe\x30\xf0\x4d\x8e\x6d\x2e\xb8\xdf\x51\x7b\x57\ -\xeb\x30\x86\x6f\x1c\x13\x3f\x27\x05\x1d\x19\xea\xca\xfe\xcb\x70\ -\xb8\x32\xd5\x70\x30\xeb\x51\x11\x50\x0d\x71\xed\x15\x57\x1b\xbc\ -\x8d\x60\x65\x9c\xa5\xae\x63\xf2\xc7\x58\x76\xc0\x89\x2b\x43\xa7\ -\x9d\x9a\xf1\x36\xab\x6a\xad\xd2\xd3\x7e\x60\xb2\xc7\x2c\xf0\x71\ -\x2b\xb9\x58\x8e\xd8\x58\x90\xd7\x5c\xc8\xeb\xd1\xa1\x41\x09\x4a\ -\x63\x67\x53\x33\x29\x8a\x7f\x2a\x8b\xcd\x0a\x94\x4f\x0e\x9e\xd7\ -\xd1\x86\xb6\x21\x7b\xdd\x34\xb8\xce\x8e\x35\xcd\x13\xc3\x6a\x61\ -\xf7\xb8\xd0\x30\xb1\xf0\xe4\x5c\xb6\x99\xaa\xe4\x34\x45\x3d\x19\ -\x56\x8a\x9b\x32\xa4\x13\xa6\x89\x97\xd7\xba\x50\xf5\x06\x4b\x6d\ -\x1e\xad\x05\x45\xb1\x3e\xfa\xdc\x11\xa7\x5d\x44\xe5\xbe\x9d\x63\ -\x65\x1b\xa4\x8c\x1c\x23\x4a\xd9\xa6\xd8\x60\x78\x1e\x9c\x02\x59\ -\xcd\x86\x78\xb8\x30\x5d\x3a\x1c\x0c\x45\xc0\xd4\x89\xae\x3c\x3b\ -\x51\x1a\x5c\x84\x77\xe2\x4b\xe7\xec\xe1\x0d\x67\x43\x82\xc3\x8e\ -\x8e\x61\xc6\x72\xc9\x11\xb4\x37\xf5\x7a\xa6\x88\x3f\xf8\xc3\x88\ -\xc7\x11\x33\x23\x1e\x13\xd1\xda\x61\x61\xf9\x97\x14\xc1\x70\x4b\ -\xea\xfd\xc4\x23\x57\x3c\x21\xa1\x78\x74\x9c\x0f\x91\x11\xeb\xe4\ -\x60\x78\x15\xa4\xef\x88\x28\xa2\x58\x41\x69\x23\x89\xc0\x1d\xc7\ -\x96\x17\x83\x24\x39\xc0\xbb\x19\xa1\x34\xc1\x1a\xb4\x05\xb7\x6c\ -\xf0\xd8\x2c\x22\x87\x6b\x23\x37\xe8\xae\xdd\x09\x02\xb0\x3c\x2f\ -\x28\x26\x74\x91\x0b\x55\x1c\x7f\xa4\x10\x33\x85\x34\x32\xe1\xa3\ -\xe8\x58\xc7\xea\x78\x99\xbd\x3e\x1e\x9e\xd0\x51\xb4\xae\x13\x0f\ -\x8e\x1a\xe7\x41\xc6\xc1\xa5\xb1\x90\xf2\xd0\x76\x78\x17\xbf\xc4\ -\x6e\xb2\x8d\x95\xd4\xe6\x99\x26\x3e\x61\xa7\x09\x91\x3f\xa1\x44\ -\x64\x48\x45\xd6\x73\xb3\x01\x3f\x2e\x1f\x17\xcf\x89\x1e\x74\x29\ -\x73\xb0\x99\x61\x23\x18\x4b\xc7\xcd\x93\x9a\xc5\x17\x23\x9f\x9a\ -\x95\x00\x1a\x62\x0b\x81\x5a\xb2\x45\x50\x6c\x9a\xe7\x81\xaf\x0a\ -\x87\xf5\x5e\xa3\x9c\x4c\x60\xd6\x08\x28\x25\x2e\xa4\x11\x2e\x3e\ -\xb4\x72\x7e\xf9\xb9\xcd\x8a\x2e\x94\x92\xcf\x06\x6f\x4d\x2c\x67\ -\x92\x95\xda\x71\x76\xfc\x70\x54\xd8\x74\x26\xb5\xd4\x7a\xaa\x8d\ -\x44\xc8\x72\xdd\x59\x51\xdf\x6a\x61\x90\x57\x97\x92\x99\xb5\x99\ -\x56\xd5\x39\xa5\x92\xc8\xf1\xdd\xba\x58\x46\x5f\x5f\xb0\x9d\xf8\ -\x8c\x64\xae\x64\xf4\xbb\x14\xc4\x20\xbf\x10\xf2\xe5\xed\x93\x67\ -\x4f\xcf\xd7\x6f\xce\xfb\x57\xff\x94\x10\x9f\x3f\xdd\xdd\x72\x9f\ -\xb7\xdb\x9b\xf3\xe7\xbb\x5b\x77\x52\xa1\xdb\x9b\x37\x77\xb7\x03\ -\x06\xf0\xe0\xbf\xc9\xa3\x8b\x4d\x4c\xaf\x15\x7c\xce\x99\x3c\xe3\ -\x2c\x73\x82\x95\x91\xe2\x95\x91\xca\xda\x7f\xf3\x88\x35\xd6\x39\ -\x78\x09\x3f\x55\xba\x0e\xe7\x3b\x39\x0f\xaa\x5e\x06\xa1\xdd\x30\ -\xe4\xf8\x3e\x84\x1b\xed\x8b\x52\x16\x67\x89\x5d\xe4\xa3\x2d\xbf\ -\xfc\x04\x6d\x75\x87\xb4\x32\xc9\x83\xce\xe4\x93\xbc\xc7\x23\xac\ -\x77\xf2\xbf\x54\xb1\x8d\xb4\x96\x96\x54\xcb\xe1\xe1\xbb\xf7\xfa\ -\xa8\x78\x2d\xb2\x08\xc3\xea\x0a\x19\xd4\x20\xef\xb3\x48\xc7\x16\ -\xa6\xda\x22\x0d\x5b\x7e\xd8\x8a\x64\x27\xd6\xfd\xb0\x9b\x68\xbf\ -\x8f\x44\x0c\x0f\x17\x96\x1b\xe6\xee\x9d\x24\x1a\x3d\x6c\xa8\x3b\ -\x5c\x1a\x3b\x31\x42\x9c\xe1\xf2\x70\x88\x97\x74\xa6\xa0\xa2\xf1\ -\x1e\x02\x92\xd6\x79\xa6\x1d\x15\x4a\x4f\xda\xcb\x25\x1d\x24\x5a\ -\x64\xb5\x72\x9f\xb0\xd9\x12\x10\xc4\x20\xd4\x48\x23\x31\xba\x2a\ -\xf0\x7f\x21\x05\xab\xe2\x55\xdb\x7d\xc2\xa9\xa8\xd7\xa3\x98\x16\ -\x89\x65\x7b\x9b\x8e\xcb\x33\xa2\xb7\x1b\xa1\x71\xaf\xfb\x58\x98\ -\xa0\x18\x91\xcc\xc2\x33\xee\x75\x5f\x2b\xf8\x1b\xf6\xce\x82\x60\ -\x03\x58\x90\xe6\x63\x77\x36\x8e\x5e\x48\x16\xf7\xba\xa3\x25\x64\ -\x8d\x93\x04\x4c\xdc\xc5\x17\xe1\x1b\x01\x19\x2a\x4e\xb8\xc7\xf9\ -\x88\x03\xc5\x92\x17\x9c\x5b\xcb\xc4\x89\xe2\x32\x79\x65\xf2\x7d\ -\xdb\x80\x7e\x1c\x6c\x21\x29\x25\x03\xa9\xa0\x11\x5c\x08\xa1\xa1\ -\x8a\x55\x29\x17\x6f\x3e\xba\xd4\xf0\xb9\x53\x6d\xbe\xa8\x25\xa3\ -\x66\x35\x4f\xcd\x5c\x18\x9c\xac\xac\x26\x1f\x29\xcf\xa7\xb4\xec\ -\x03\x24\x59\xd7\x15\x49\x06\x92\xbc\xc2\xc8\x2b\x8c\x1c\xf6\xa2\ -\x2f\x7c\x8d\x95\x26\x40\x8d\x92\xa5\x83\xe9\xc5\xbc\x69\x1d\xe7\ -\x15\x47\x7e\x1a\x47\x06\x4a\xbc\xe2\xc8\x2b\x8e\xbc\xe2\xc8\xdf\ -\x8e\x23\xc7\x7b\x1c\x69\x1b\x48\xb6\xff\x17\x20\xd9\xff\x25\x90\ -\x6c\x57\x20\x79\x05\x92\x9f\x04\x92\xb9\x7d\x84\x24\xed\x3f\x47\ -\x92\xe5\x7f\x1e\x49\xda\x34\x75\x29\xb5\x69\x1f\xa7\xce\x91\xa8\ -\xae\xd8\xee\x23\x8c\x4b\xe5\x0d\x7c\x7e\x18\x35\x3b\xcc\x35\x3e\ -\x2e\x6e\x63\x51\xce\xc7\x11\x75\x40\x48\x0d\x28\x52\x1f\x21\x10\ -\x80\x0f\x60\xd9\x5f\x58\xa5\x49\x23\xa5\x0d\xb1\xde\x70\x25\xa5\ -\x47\xc1\xf7\xc3\xdd\x3f\x45\x65\xc9\x13\xd9\x15\x53\x5f\x87\x35\ -\x5e\xb6\xd7\xfc\xde\x57\xb6\x1e\xad\xa9\xc0\x4e\x14\x31\x29\x1a\ -\xe1\xfe\x8a\x8e\xf1\xdc\x28\x85\x53\x41\x89\x8f\x5d\x41\x71\xf6\ -\x1e\xe2\x73\x9d\x94\x79\x12\xe5\x07\x2c\x07\x22\x77\x8f\xcb\x4c\ -\x1a\xe5\xe6\x5d\x1a\x2a\xda\xa3\xb6\x0e\x92\x2e\x00\xdc\x68\x7e\ -\x70\xd7\x3e\x67\xa3\xb4\x14\xf5\x53\x35\xbf\xf7\x28\xd5\x1c\xc3\ -\x65\x5c\x1a\x68\xd4\x9e\x3d\xbc\xd8\xb8\xcf\x49\x73\x3f\x3a\x85\ -\x59\x32\xc7\xf2\x58\xbe\xec\x9a\x1b\xe5\xa5\xfa\x82\x13\x7b\x11\ -\x6f\xfc\x92\x92\xbb\x2e\xf1\x9a\x03\x8f\x7d\xc0\x8c\x4f\x16\x09\ -\x56\xc3\x25\x73\x7b\x5e\x87\x61\x0b\x80\xda\xf8\xb8\x70\xcd\x13\ -\x9d\x82\xfa\xd7\xd4\xa9\x1a\x35\x4a\x6b\x89\x72\x3b\xed\xa0\xa1\ -\xc3\x8f\x42\x61\x59\xf6\xba\x65\x4e\x01\x7a\x90\xcc\x55\xb8\x17\ -\xcb\x7e\x19\x45\xa2\x60\x01\x55\xf0\x75\x59\xb7\x7c\x22\xf4\x38\ -\x35\x77\xea\xb1\x7b\xd9\x3c\x59\x5a\xa9\x0b\xaf\x33\xda\x76\x23\ -\x70\x3d\x98\x98\xc7\x77\x0f\x84\x03\x68\x5f\x47\xed\x04\x9e\xbd\ -\x3e\xca\xdc\x29\xce\xbb\x78\xc7\x7a\xf7\xba\x89\x8c\x48\x45\x07\ -\xea\xac\x34\xe1\x64\xc8\x68\x74\x8f\xb8\x87\xf6\x09\xfd\x3e\x69\ -\x73\x4b\xb8\x50\xe6\x1d\x1e\xc5\xf8\x28\xf0\x2f\x0a\x0a\x4e\x5d\ -\xb9\xb3\x44\x5f\xaf\x60\x94\x11\x7e\xa2\x74\x40\x81\xb1\x6b\xff\ -\xa2\xe5\x12\xbd\x21\x7a\x99\x43\x3e\xe2\xf8\x15\x59\xff\xba\x1e\ -\xed\x15\x59\x5f\x91\xf5\x15\x59\xff\xc6\x0e\xed\x15\x59\x5f\x3b\ -\xb4\xd7\x0e\xed\x7f\xa9\x43\x7b\x45\xd6\x57\x64\x7d\x6d\xd1\xfe\ -\x9e\x91\x75\xeb\x83\x84\xdb\xe9\xa0\xad\x33\xf5\x91\x3a\xa3\x78\ -\x8c\xe7\x24\xcb\x2d\x79\xf4\xa4\x93\xe5\x45\xf3\xb0\x82\x53\x63\ -\x1c\xcd\xc1\x17\x7b\xc2\x8f\xb6\xa8\xd5\x7b\xca\x65\x3a\xa3\xb7\ -\x18\xcd\x7f\xba\xfc\x8c\x9b\x01\xc8\x68\x67\x32\x85\xe0\x54\x97\ -\x00\x84\x5a\x0b\x15\xa9\x80\x8a\x6a\xe5\xa0\xe7\x3a\x64\xaf\x8f\ -\x58\xaf\x51\x20\xab\xe3\xbc\xdc\xc4\x28\x59\x4c\xa4\x50\xf2\x54\ -\x06\xc6\x72\xbf\x0f\x84\x74\xf2\x7a\x70\x13\x33\x21\x1a\x83\x29\ -\xa3\x6f\xe4\x31\xe3\x93\x01\x9b\x29\xd1\x82\x05\x86\x38\x51\x9e\ -\xde\x27\x48\x6c\xf1\x52\x8b\xc6\x65\x14\xee\x5c\x20\x0d\x84\x56\ -\xbb\xcc\x1a\x33\x74\x97\xce\x44\x06\xcf\x37\xa3\xb3\x4a\x7b\x77\ -\x17\xde\xe8\x4c\xc2\x83\x16\x4d\xe0\x2a\x65\x4f\xbd\x45\x27\x95\ -\x82\x1a\x62\x8d\x69\x2a\x8b\x89\x82\x18\x5b\xd1\xb1\x5e\xb4\x78\ -\x88\x41\x01\x69\xd3\x62\x46\xa7\x4c\x75\xf9\x48\x20\x9f\x42\x40\ -\x03\xf4\x2a\xee\x74\x35\xa3\xa1\x4b\x5b\xd6\x26\xf3\x79\x01\x15\ -\x49\x6e\xf0\xe2\xed\x45\x0b\x3c\xe8\xd5\x00\x6c\x79\x8a\xf7\x2e\ -\x63\x00\x48\x7d\x14\x86\x22\x69\xae\xf6\x68\xb1\xf6\xf7\x78\x93\ -\x13\x3f\x37\xab\xdc\x76\xf9\xd8\x82\xe1\xc8\x25\xab\xcf\x17\x7c\ -\xf3\x41\xb9\x62\x6c\x8c\xe2\x31\x3e\xf1\x21\x61\x9f\x3a\x80\xaf\ -\xd0\x1e\xeb\x8d\xe1\x0d\x6a\xad\xb0\x81\xba\x29\xfd\x5c\x94\xa4\ -\xcc\xe4\x23\x0a\x16\x79\x85\x84\xf6\xc7\xa6\xa3\xe9\x62\xa4\xa9\ -\xaf\x7b\xe6\x4c\xf6\xc0\xd2\x48\x51\x4c\x88\x19\x48\xc6\x41\x94\ -\x21\xd1\x5f\xe6\x54\x63\x1e\x65\xc6\x48\x07\x25\x0e\x9b\x28\x6d\ -\x4d\xda\xfc\x64\x7e\x86\xea\xa8\xb6\xc9\x8c\x05\x63\x4f\x6d\x1e\ -\x2b\xa6\xe2\xf6\x7a\xc1\xc5\x86\x30\xfb\x8e\x7c\xce\x74\x16\x53\ -\xad\x9c\x95\x67\x93\x77\x5d\x70\x7e\xd2\x6d\x8f\x49\x31\xa7\x02\ -\x8b\x1d\x43\x9d\x65\x0c\x21\x48\xb2\x18\x31\x63\x1a\x2d\x0a\x43\ -\xa1\x21\xf1\xf1\x58\x5b\x41\x5b\xa3\xe2\x52\xf0\x19\x97\x8f\xcb\ -\x45\x47\xa9\xe6\x64\x5c\x95\xb1\x9a\xa8\x27\xcc\x04\xf8\xa6\xb8\ -\x44\x8a\x4b\x1d\x9b\x0a\x71\xec\xca\x9c\x08\x0a\x99\x8c\x39\x9d\ -\xa2\xe6\xcf\x19\xf1\x6b\xb2\xd7\x2d\xf2\x5f\xc4\x71\xc5\xdd\x57\ -\xdc\x7d\x1d\x8c\xfe\xb5\x83\xd1\xd7\x8e\xf6\x15\x77\x5f\x27\xa3\ -\xaf\x93\xd1\xbf\x87\xc9\xe8\x2b\xee\xbe\xe2\xee\x2b\xee\xae\xbf\ -\x07\xdc\xcd\xff\x58\x7c\xf6\x0f\x5d\xf3\x79\x03\ -\x00\x00\x10\xfc\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x39\x34\x2e\x35\x33\x2c\x32\x37\x36\ -\x2e\x37\x32\x61\x31\x32\x2e\x34\x31\x2c\x31\x32\x2e\x34\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x2e\x35\x33\x2d\x32\x2e\x31\x32\x63\x2e\ -\x33\x39\x2d\x35\x2e\x37\x34\x2e\x36\x32\x2d\x31\x31\x2e\x35\x31\ -\x2c\x31\x2e\x31\x32\x2d\x31\x37\x2e\x32\x34\x61\x31\x39\x30\x2e\ -\x36\x35\x2c\x31\x39\x30\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x31\x30\x2e\x37\x2d\x34\x37\x2e\x35\x39\x2c\x32\x30\x31\x2e\x32\ -\x32\x2c\x32\x30\x31\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ -\x31\x2e\x33\x31\x2d\x34\x32\x2e\x38\x37\x2c\x32\x30\x36\x2e\x31\ -\x31\x2c\x32\x30\x36\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x36\ -\x30\x2e\x36\x39\x2d\x36\x30\x2e\x35\x33\x41\x31\x39\x30\x2e\x34\ -\x36\x2c\x31\x39\x30\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ -\x34\x30\x2e\x34\x2c\x38\x32\x2e\x35\x31\x63\x38\x2e\x35\x38\x2d\ -\x32\x2e\x34\x37\x2c\x31\x37\x2e\x33\x33\x2d\x34\x2e\x34\x34\x2c\ -\x32\x36\x2e\x30\x38\x2d\x36\x2e\x32\x35\x61\x31\x32\x38\x2e\x33\ -\x36\x2c\x31\x32\x38\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x35\x2e\x31\x38\x2d\x31\x2e\x38\x33\x63\x35\x2d\x2e\x34\x32\x2c\ -\x31\x30\x2e\x31\x2d\x2e\x37\x31\x2c\x31\x35\x2e\x31\x35\x2d\x2e\ -\x37\x35\x2c\x36\x2e\x36\x34\x2d\x2e\x30\x35\x2c\x31\x33\x2e\x33\ -\x31\x2d\x2e\x31\x39\x2c\x31\x39\x2e\x39\x2e\x33\x39\x61\x32\x31\ -\x30\x2e\x35\x36\x2c\x32\x31\x30\x2e\x35\x36\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x33\x35\x2e\x34\x38\x2c\x36\x2e\x30\x37\x41\x32\x30\x32\ -\x2e\x39\x31\x2c\x32\x30\x32\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x33\x39\x37\x2c\x39\x37\x2e\x37\x32\x61\x32\x30\x36\x2c\x32\ -\x30\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x38\x2e\x37\x34\x2c\x35\ -\x39\x2e\x36\x39\x2c\x31\x39\x39\x2e\x35\x34\x2c\x31\x39\x39\x2e\ -\x35\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\x2e\x36\x31\x2c\x36\ -\x30\x2e\x37\x63\x32\x2e\x37\x31\x2c\x38\x2e\x39\x2c\x34\x2e\x35\ -\x39\x2c\x31\x38\x2e\x30\x37\x2c\x36\x2e\x34\x38\x2c\x32\x37\x2e\ -\x31\x39\x61\x31\x32\x37\x2e\x36\x2c\x31\x32\x37\x2e\x36\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x2e\x38\x32\x2c\x31\x35\x63\x2e\x34\x32\ -\x2c\x34\x2e\x38\x36\x2e\x37\x31\x2c\x39\x2e\x37\x34\x2e\x37\x35\ -\x2c\x31\x34\x2e\x36\x32\x2e\x30\x35\x2c\x36\x2e\x37\x35\x2e\x32\ -\x36\x2c\x31\x33\x2e\x35\x35\x2d\x2e\x34\x32\x2c\x32\x30\x2e\x32\ -\x35\x2d\x2e\x38\x38\x2c\x38\x2e\x37\x38\x2d\x32\x2e\x32\x32\x2c\ -\x31\x37\x2e\x35\x35\x2d\x34\x2c\x32\x36\x2e\x32\x31\x61\x31\x39\ -\x35\x2e\x30\x35\x2c\x31\x39\x35\x2e\x30\x35\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x31\x39\x2e\x31\x33\x2c\x35\x33\x2e\x31\x33\x2c\x32\x30\ -\x34\x2e\x38\x31\x2c\x32\x30\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x35\x33\x2e\x37\x34\x2c\x36\x35\x2c\x32\x30\x38\x2e\x30\ -\x38\x2c\x32\x30\x38\x2e\x30\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x32\ -\x34\x2e\x33\x31\x2c\x31\x36\x2e\x37\x2c\x34\x2c\x34\x2c\x30\x2c\ -\x30\x2c\x31\x2d\x33\x2e\x34\x37\x2e\x35\x36\x63\x2d\x34\x2e\x31\ -\x32\x2d\x31\x2e\x32\x34\x2d\x38\x2e\x31\x34\x2d\x32\x2e\x36\x32\ -\x2d\x31\x30\x2e\x34\x37\x2d\x36\x2e\x36\x33\x2d\x31\x2e\x37\x39\ -\x2d\x33\x2e\x30\x38\x2d\x31\x2e\x36\x34\x2d\x36\x2e\x34\x32\x2d\ -\x31\x2e\x31\x34\x2d\x39\x2e\x37\x39\x2e\x30\x38\x2d\x2e\x35\x32\ -\x2e\x31\x36\x2d\x31\x2c\x2e\x32\x36\x2d\x31\x2e\x35\x36\x61\x35\ -\x2e\x37\x2c\x35\x2e\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x2e\x39\ -\x33\x2d\x34\x2e\x34\x32\x2c\x31\x37\x39\x2e\x35\x2c\x31\x37\x39\ -\x2e\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x38\x39\x2e\x34\x31\x2d\x31\ -\x33\x36\x2e\x34\x34\x63\x2e\x34\x37\x2d\x34\x2e\x32\x35\x2e\x34\ -\x39\x2d\x38\x2e\x35\x36\x2e\x37\x31\x2d\x31\x32\x2e\x38\x34\x2e\ -\x31\x33\x2d\x32\x2e\x36\x34\x2e\x34\x34\x2d\x35\x2e\x32\x39\x2e\ -\x33\x33\x2d\x37\x2e\x39\x32\x2d\x2e\x32\x31\x2d\x35\x2e\x31\x36\ -\x2d\x2e\x36\x39\x2d\x31\x30\x2e\x33\x2d\x31\x2d\x31\x35\x2e\x34\ -\x35\x61\x31\x34\x38\x2e\x39\x34\x2c\x31\x34\x38\x2e\x39\x34\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x34\x2e\x38\x36\x2d\x32\x38\x2c\x31\x37\ -\x36\x2e\x38\x34\x2c\x31\x37\x36\x2e\x38\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x31\x35\x2e\x39\x35\x2d\x34\x30\x2e\x31\x39\x2c\x31\x37\ -\x38\x2e\x37\x33\x2c\x31\x37\x38\x2e\x37\x33\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x33\x31\x2e\x36\x2d\x34\x32\x2c\x31\x39\x30\x2e\x33\x2c\ -\x31\x39\x30\x2e\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x30\x2e\x32\ -\x2d\x31\x37\x2e\x31\x36\x2c\x31\x37\x37\x2e\x31\x31\x2c\x31\x37\ -\x37\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x35\x35\ -\x2d\x31\x38\x2e\x32\x32\x2c\x31\x36\x35\x2e\x37\x2c\x31\x36\x35\ -\x2e\x37\x2c\x30\x2c\x30\x2c\x30\x2d\x34\x31\x2e\x30\x35\x2d\x31\ -\x33\x2e\x35\x63\x2d\x35\x2e\x35\x33\x2d\x31\x2d\x31\x31\x2e\x30\ -\x37\x2d\x32\x2d\x31\x36\x2e\x36\x35\x2d\x32\x2e\x37\x33\x2d\x34\ -\x2d\x2e\x35\x31\x2d\x38\x2e\x30\x39\x2d\x2e\x35\x34\x2d\x31\x32\ -\x2e\x31\x34\x2d\x2e\x37\x34\x2d\x33\x2e\x33\x34\x2d\x2e\x31\x36\ -\x2d\x36\x2e\x37\x2d\x2e\x34\x36\x2d\x31\x30\x2e\x30\x35\x2d\x2e\ -\x33\x35\x2d\x35\x2e\x32\x37\x2e\x31\x39\x2d\x31\x30\x2e\x35\x34\ -\x2e\x36\x38\x2d\x31\x35\x2e\x38\x32\x2c\x31\x61\x31\x36\x32\x2e\ -\x34\x31\x2c\x31\x36\x32\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x34\x31\x2e\x31\x39\x2c\x38\x2e\x36\x32\x2c\x31\x38\x32\x2e\x36\ -\x2c\x31\x38\x32\x2e\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x38\x2e\ -\x34\x38\x2c\x36\x34\x2e\x36\x36\x2c\x31\x37\x38\x2e\x30\x36\x2c\ -\x31\x37\x38\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x35\x2e\ -\x35\x36\x2c\x34\x39\x2e\x32\x36\x2c\x31\x36\x36\x2e\x38\x32\x2c\ -\x31\x36\x36\x2e\x38\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x2e\x38\ -\x31\x2c\x32\x38\x63\x2d\x31\x2e\x31\x33\x2c\x37\x2e\x35\x2d\x32\ -\x2e\x31\x38\x2c\x31\x35\x2d\x32\x2c\x32\x32\x2e\x36\x2e\x31\x33\ -\x2c\x37\x2e\x32\x32\x2d\x2e\x31\x39\x2c\x31\x34\x2e\x34\x37\x2e\ -\x34\x32\x2c\x32\x31\x2e\x36\x35\x61\x31\x37\x34\x2e\x30\x36\x2c\ -\x31\x37\x34\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x32\x2e\ -\x37\x39\x2c\x35\x32\x2e\x32\x38\x2c\x31\x37\x37\x2e\x34\x35\x2c\ -\x31\x37\x37\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x34\x2e\ -\x31\x33\x2c\x37\x32\x2c\x32\x34\x37\x2e\x33\x38\x2c\x32\x34\x37\ -\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2e\x35\x36\x2c\ -\x31\x34\x2e\x37\x38\x63\x32\x2e\x33\x38\x2c\x31\x2e\x35\x31\x2c\ -\x32\x2e\x39\x33\x2c\x33\x2e\x35\x32\x2c\x33\x2e\x33\x37\x2c\x35\ -\x2e\x37\x39\x2c\x31\x2e\x39\x32\x2c\x39\x2e\x38\x32\x2d\x34\x2e\ -\x34\x32\x2c\x31\x35\x2e\x32\x34\x2d\x31\x32\x2e\x37\x32\x2c\x31\ -\x36\x2e\x35\x38\x61\x33\x2e\x34\x37\x2c\x33\x2e\x34\x37\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x32\x2d\x2e\x34\x37\x2c\x32\x30\ -\x35\x2e\x36\x32\x2c\x32\x30\x35\x2e\x36\x32\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x37\x39\x2e\x34\x37\x2d\x38\x35\x2e\x34\x35\x2c\x31\x39\ -\x36\x2e\x32\x37\x2c\x31\x39\x36\x2e\x32\x37\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x31\x34\x2e\x34\x2d\x33\x38\x63\x2d\x32\x2d\x37\x2e\x35\ -\x32\x2d\x33\x2e\x33\x35\x2d\x31\x35\x2e\x32\x2d\x34\x2e\x37\x31\ -\x2d\x32\x32\x2e\x38\x37\x61\x31\x35\x36\x2e\x33\x34\x2c\x31\x35\ -\x36\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x32\x33\x2d\ -\x32\x35\x2e\x37\x35\x2c\x36\x2e\x34\x33\x2c\x36\x2e\x34\x33\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x2e\x35\x32\x2d\x31\x2e\x37\x36\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x36\x2c\x35\x32\ -\x36\x2e\x33\x37\x6c\x2d\x31\x2e\x31\x38\x2d\x2e\x36\x36\x61\x37\ -\x34\x2e\x39\x2c\x37\x34\x2e\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ -\x2e\x35\x2d\x34\x2e\x31\x38\x63\x2d\x33\x2e\x31\x38\x2d\x32\x2e\ -\x32\x34\x2d\x34\x2e\x36\x34\x2d\x35\x2e\x32\x36\x2d\x34\x2e\x36\ -\x34\x2d\x39\x2e\x34\x38\x71\x2e\x31\x39\x2d\x31\x30\x30\x2e\x32\ -\x39\x2e\x31\x32\x2d\x32\x30\x30\x2e\x35\x39\x61\x33\x2e\x38\x31\ -\x2c\x33\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x39\x31\ -\x2d\x33\x2e\x37\x31\x2c\x33\x33\x2e\x33\x31\x2c\x33\x33\x2e\x33\ -\x31\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x35\x2d\x32\x33\x2e\x33\x38\ -\x2c\x33\x34\x2e\x38\x34\x2c\x33\x34\x2e\x38\x34\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x32\x35\x2e\x34\x34\x2d\x33\x39\x63\x31\x39\x2e\x38\ -\x32\x2d\x35\x2e\x34\x32\x2c\x34\x30\x2e\x34\x33\x2c\x38\x2e\x30\ -\x38\x2c\x34\x33\x2e\x32\x39\x2c\x32\x38\x2e\x33\x33\x2c\x32\x2c\ -\x31\x34\x2e\x34\x33\x2d\x33\x2e\x33\x35\x2c\x32\x35\x2e\x39\x33\ -\x2d\x31\x35\x2e\x32\x37\x2c\x33\x34\x2e\x33\x61\x33\x2e\x32\x32\ -\x2c\x33\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x36\x33\ -\x2c\x33\x71\x2e\x30\x36\x2c\x31\x30\x31\x2e\x37\x31\x2c\x30\x2c\ -\x32\x30\x33\x2e\x34\x33\x61\x37\x2e\x32\x33\x2c\x37\x2e\x32\x33\ -\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x31\x36\x2c\x33\x2e\x37\x36\ -\x2c\x31\x38\x2e\x38\x33\x2c\x31\x38\x2e\x38\x33\x2c\x30\x2c\x30\ -\x2c\x31\x2d\x39\x2e\x38\x33\x2c\x37\x2e\x34\x33\x2c\x31\x30\x2e\ -\x38\x33\x2c\x31\x30\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\ -\x2e\x34\x39\x2e\x38\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\x2e\x34\x37\x63\ -\x30\x2c\x32\x2e\x31\x34\x2c\x30\x2c\x35\x2e\x37\x35\x2c\x30\x2c\ -\x39\x2e\x33\x35\x61\x31\x32\x37\x2e\x39\x33\x2c\x31\x32\x37\x2e\ -\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2c\x36\x38\x2e\x32\ -\x38\x2c\x31\x32\x31\x2e\x32\x32\x2c\x31\x32\x31\x2e\x32\x32\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x33\x36\x2e\x38\x36\x2c\x33\x36\x2e\x32\ -\x36\x63\x31\x2e\x37\x38\x2c\x31\x2e\x31\x32\x2c\x31\x2e\x35\x36\ -\x2c\x32\x2e\x37\x2c\x31\x2e\x37\x2c\x34\x2e\x31\x34\x2e\x36\x2c\ -\x36\x2e\x33\x33\x2d\x32\x2e\x36\x34\x2c\x31\x30\x2e\x36\x37\x2d\ -\x39\x2c\x31\x32\x2e\x32\x34\x61\x33\x2e\x32\x37\x2c\x33\x2e\x32\ -\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x38\x2d\x2e\x34\x34\ -\x2c\x31\x34\x33\x2e\x33\x39\x2c\x31\x34\x33\x2e\x33\x39\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x35\x35\x2e\x32\x33\x2d\x36\x31\x2e\x35\x36\ -\x2c\x31\x32\x38\x2e\x36\x35\x2c\x31\x32\x38\x2e\x36\x35\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x39\x2e\x38\x2d\x32\x38\x2e\x36\x33\x2c\x31\ -\x37\x37\x2e\x31\x34\x2c\x31\x37\x37\x2e\x31\x34\x2c\x30\x2c\x30\ -\x2c\x31\x2d\x33\x2d\x31\x37\x2e\x36\x34\x41\x31\x33\x38\x2e\x37\ -\x35\x2c\x31\x33\x38\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x35\x39\x2e\x35\x37\x2c\x32\x35\x30\x61\x31\x34\x35\x2c\x31\x34\ -\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x31\x2e\x32\x38\x2d\x33\x32\ -\x2e\x33\x2c\x31\x34\x33\x2e\x34\x34\x2c\x31\x34\x33\x2e\x34\x34\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x35\x2e\x36\x2d\x35\x33\x2e\x38\ -\x36\x2c\x31\x33\x36\x2e\x32\x31\x2c\x31\x33\x36\x2e\x32\x31\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x34\x32\x2d\x32\x30\x2e\x36\x32\x63\x35\ -\x2e\x37\x32\x2d\x31\x2e\x36\x36\x2c\x31\x31\x2e\x35\x34\x2d\x33\ -\x2c\x31\x37\x2e\x33\x39\x2d\x34\x2e\x32\x61\x39\x35\x2e\x33\x31\ -\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\x2d\ -\x31\x2e\x35\x35\x63\x36\x2e\x32\x35\x2d\x2e\x33\x34\x2c\x31\x32\ -\x2e\x35\x34\x2d\x2e\x34\x35\x2c\x31\x38\x2e\x38\x31\x2d\x2e\x33\ -\x39\x61\x39\x35\x2e\x33\x31\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x31\x30\x2e\x35\x2c\x31\x2c\x31\x34\x34\x2e\x33\ -\x36\x2c\x31\x34\x34\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x31\x32\x2e\x37\x31\x2c\x38\x31\x2e\x37\x32\x2c\x31\x32\x35\x2e\ -\x37\x33\x2c\x31\x32\x35\x2e\x37\x33\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x39\x2e\x37\x2c\x32\x38\x2e\x33\x36\x63\x31\x2e\x31\x32\x2c\x35\ -\x2e\x35\x2c\x32\x2e\x32\x31\x2c\x31\x31\x2c\x32\x2e\x37\x38\x2c\ -\x31\x36\x2e\x36\x31\x2e\x36\x36\x2c\x36\x2e\x36\x31\x2c\x31\x2c\ -\x31\x33\x2e\x32\x38\x2c\x31\x2c\x31\x39\x2e\x39\x32\x41\x38\x32\ -\x2e\x38\x34\x2c\x38\x32\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x34\x34\x33\x2e\x30\x35\x2c\x32\x39\x38\x63\x2d\x31\x2c\x36\x2e\ -\x33\x39\x2d\x32\x2e\x32\x2c\x31\x32\x2e\x37\x37\x2d\x33\x2e\x36\ -\x37\x2c\x31\x39\x2e\x30\x37\x61\x31\x31\x38\x2e\x35\x2c\x31\x31\ -\x38\x2e\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x38\x37\x2c\x32\ -\x32\x2e\x31\x2c\x31\x34\x32\x2e\x38\x33\x2c\x31\x34\x32\x2e\x38\ -\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x33\x36\x2e\x38\x36\x2c\x34\x39\ -\x2e\x32\x36\x2c\x31\x33\x33\x2e\x35\x36\x2c\x31\x33\x33\x2e\x35\ -\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x30\x2c\x31\x34\x2e\x34\x32\ -\x2c\x34\x2e\x38\x31\x2c\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x31\ -\x2d\x33\x2c\x2e\x35\x63\x2d\x34\x2d\x2e\x36\x39\x2d\x37\x2e\x34\ -\x34\x2d\x32\x2e\x33\x36\x2d\x38\x2e\x37\x35\x2d\x36\x2e\x34\x38\ -\x2d\x31\x2d\x33\x2d\x2e\x33\x31\x2d\x35\x2e\x39\x33\x2c\x31\x2d\ -\x38\x2e\x37\x32\x61\x33\x2e\x36\x37\x2c\x33\x2e\x36\x37\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x2e\x33\x37\x2d\x31\x2e\x32\x2c\x31\x32\ -\x35\x2c\x31\x32\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x36\x2d\x38\ -\x31\x2e\x35\x35\x2c\x31\x34\x31\x2c\x31\x34\x31\x2c\x30\x2c\x30\ -\x2c\x30\x2c\x32\x2e\x31\x36\x2d\x31\x37\x2e\x34\x38\x2c\x31\x33\ -\x35\x2c\x31\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x38\ -\x41\x31\x32\x31\x2e\x37\x36\x2c\x31\x32\x31\x2e\x37\x36\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x34\x31\x34\x2e\x33\x39\x2c\x32\x33\x32\x61\ -\x31\x32\x36\x2c\x31\x32\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x32\ -\x2e\x38\x38\x2d\x32\x33\x2e\x37\x31\x41\x31\x32\x34\x2c\x31\x32\ -\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x36\x34\x2e\x34\x35\x2c\x31\ -\x37\x33\x61\x31\x31\x35\x2e\x38\x34\x2c\x31\x31\x35\x2e\x38\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x37\x38\x2d\x31\x33\x2e\ -\x35\x33\x63\x2d\x35\x2e\x31\x33\x2d\x31\x2e\x33\x39\x2d\x31\x30\ -\x2e\x34\x34\x2d\x32\x2e\x31\x38\x2d\x31\x35\x2e\x36\x35\x2d\x33\ -\x2e\x32\x37\x2d\x38\x2e\x32\x39\x2d\x31\x2e\x37\x32\x2d\x31\x36\ -\x2e\x37\x31\x2d\x31\x2e\x33\x36\x2d\x32\x35\x2d\x31\x2e\x31\x33\ -\x61\x31\x30\x33\x2e\x31\x35\x2c\x31\x30\x33\x2e\x31\x35\x2c\x30\ -\x2c\x30\x2c\x30\x2d\x32\x33\x2e\x37\x31\x2c\x33\x2e\x37\x33\x2c\ -\x31\x32\x31\x2e\x38\x37\x2c\x31\x32\x31\x2e\x38\x37\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x34\x35\x2e\x31\x38\x2c\x32\x32\x2e\x37\x35\x2c\ -\x31\x32\x34\x2e\x35\x37\x2c\x31\x32\x34\x2e\x35\x37\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x33\x31\x2e\x34\x38\x2c\x33\x37\x2e\x33\x31\x2c\ -\x31\x32\x37\x2e\x31\x32\x2c\x31\x32\x37\x2e\x31\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x31\x34\x2e\x30\x37\x2c\x34\x30\x2e\x31\x38\x43\ -\x31\x37\x37\x2e\x38\x34\x2c\x32\x36\x33\x2c\x31\x37\x37\x2e\x35\ -\x31\x2c\x32\x36\x37\x2c\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\ -\x2e\x34\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\x34\x63\x2d\x2e\x33\ -\x35\x2c\x31\x39\x2e\x36\x32\x2d\x35\x2e\x34\x32\x2c\x33\x35\x2e\ -\x38\x36\x2d\x31\x35\x2e\x38\x31\x2c\x35\x30\x2e\x33\x39\x41\x38\ -\x36\x2e\x31\x35\x2c\x38\x36\x2e\x31\x35\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x33\x34\x34\x2e\x34\x37\x2c\x33\x35\x31\x63\x2d\x33\x2e\x37\ -\x39\x2c\x32\x2e\x33\x31\x2d\x39\x2e\x35\x35\x2e\x31\x35\x2d\x31\ -\x30\x2e\x39\x34\x2d\x34\x2e\x31\x32\x61\x37\x2e\x33\x33\x2c\x37\ -\x2e\x33\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x34\x33\x2d\x38\ -\x2e\x35\x35\x2c\x36\x37\x2e\x37\x31\x2c\x36\x37\x2e\x37\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x32\x32\x2e\x36\x34\x2d\x32\x31\x2e\x37\ -\x33\x2c\x36\x38\x2e\x35\x32\x2c\x36\x38\x2e\x35\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x31\x30\x2e\x37\x32\x2d\x32\x39\x2e\x33\x38\x2c\ -\x36\x39\x2e\x32\x32\x2c\x36\x39\x2e\x32\x32\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x33\x34\x2e\x36\x39\x2d\x36\x38\x2e\x35\x32\x2c\x37\x31\ -\x2e\x38\x36\x2c\x37\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x32\x33\x2e\x32\x35\x2d\x38\x2e\x33\x35\x2c\x35\x36\x2e\x37\x32\ -\x2c\x35\x36\x2e\x37\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x2e\x39\ -\x34\x2d\x2e\x36\x39\x41\x38\x37\x2e\x34\x2c\x38\x37\x2e\x34\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x32\x39\x31\x2c\x32\x31\x30\x61\x36\x39\ -\x2e\x35\x35\x2c\x36\x39\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x34\x33\x2e\x34\x38\x2c\x32\x32\x2e\x36\x37\x2c\x36\x36\x2e\x38\ -\x33\x2c\x36\x36\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x35\ -\x2e\x38\x31\x2c\x32\x39\x2e\x36\x33\x2c\x37\x30\x2e\x37\x34\x2c\ -\x37\x30\x2e\x37\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x38\x36\ -\x2c\x32\x30\x2e\x34\x34\x2c\x36\x39\x2e\x34\x35\x2c\x36\x39\x2e\ -\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x33\x2e\x32\x34\x2c\x35\ -\x35\x2e\x34\x35\x2c\x37\x2e\x31\x39\x2c\x37\x2e\x31\x39\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x32\x2e\x37\x38\x2c\x37\x2e\x37\x33\x2c\x38\ -\x2e\x36\x38\x2c\x38\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ -\x2e\x35\x37\x2c\x36\x2c\x33\x2e\x32\x39\x2c\x33\x2e\x32\x39\x2c\ -\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x36\x31\x2d\x2e\x36\x2c\x38\x34\ -\x2e\x32\x34\x2c\x38\x34\x2e\x32\x34\x2c\x30\x2c\x30\x2c\x31\x2d\ -\x33\x31\x2e\x35\x37\x2d\x33\x32\x2e\x34\x34\x2c\x38\x31\x2e\x38\ -\x36\x2c\x38\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\ -\x36\x34\x2d\x33\x30\x2e\x31\x38\x2c\x38\x30\x2e\x39\x34\x2c\x38\ -\x30\x2e\x39\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x32\x36\x2d\ -\x34\x38\x2e\x39\x31\x63\x31\x30\x2e\x31\x31\x2d\x31\x38\x2e\x37\ -\x34\x2c\x32\x35\x2e\x33\x33\x2d\x33\x31\x2e\x38\x32\x2c\x34\x35\ -\x2e\x31\x38\x2d\x33\x39\x2e\x35\x31\x61\x37\x38\x2e\x37\x31\x2c\ -\x37\x38\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x30\x2e\x38\ -\x32\x2d\x35\x2c\x31\x33\x33\x2e\x37\x2c\x31\x33\x33\x2e\x37\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x31\x36\x2e\x37\x35\x2d\x2e\x30\x37\x2c\ -\x36\x39\x2e\x36\x36\x2c\x36\x39\x2e\x36\x36\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x30\x2e\x34\x33\x2c\x34\x2e\x31\x33\x2c\x38\x34\x2e\ -\x38\x34\x2c\x38\x34\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ -\x31\x2e\x31\x33\x2c\x32\x39\x2e\x38\x34\x2c\x38\x31\x2e\x34\x36\ -\x2c\x38\x31\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x2e\ -\x34\x37\x2c\x33\x36\x2e\x33\x31\x43\x33\x38\x35\x2e\x32\x35\x2c\ -\x32\x36\x39\x2e\x39\x2c\x33\x38\x35\x2e\x34\x37\x2c\x32\x37\x34\ -\x2e\x34\x34\x2c\x33\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\ -\x34\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\x95\ +\x31\x22\x20\x64\x3d\x22\x4d\x32\x32\x31\x2e\x31\x34\x2c\x34\x37\ +\x30\x2e\x38\x37\x63\x31\x30\x2e\x35\x36\x2d\x31\x30\x2e\x35\x39\ +\x2c\x32\x30\x2e\x38\x34\x2d\x32\x30\x2e\x37\x36\x2c\x33\x30\x2e\ +\x39\x32\x2d\x33\x31\x2e\x31\x32\x2c\x31\x2e\x38\x32\x2d\x31\x2e\ +\x38\x37\x2c\x33\x2e\x34\x39\x2d\x32\x2c\x35\x2e\x36\x34\x2d\x31\ +\x2e\x33\x37\x61\x31\x35\x32\x2e\x33\x38\x2c\x31\x35\x32\x2e\x33\ +\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x38\x2e\x38\x31\x2c\x34\x2e\ +\x36\x37\x63\x34\x32\x2e\x34\x37\x2d\x34\x2e\x37\x34\x2c\x37\x38\ +\x2e\x33\x35\x2d\x32\x32\x2e\x38\x38\x2c\x31\x30\x37\x2e\x31\x32\ +\x2d\x35\x34\x2e\x36\x36\x61\x31\x36\x33\x2e\x31\x36\x2c\x31\x36\ +\x33\x2e\x31\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x39\x2e\x31\x35\ +\x2d\x37\x37\x2e\x31\x2c\x31\x36\x31\x2e\x33\x31\x2c\x31\x36\x31\ +\x2e\x33\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x31\x36\x2d\x35\ +\x33\x2e\x33\x39\x63\x2d\x34\x2e\x34\x39\x2d\x33\x36\x2e\x33\x36\ +\x2d\x31\x39\x2e\x34\x34\x2d\x36\x37\x2e\x37\x31\x2d\x34\x34\x2e\ +\x34\x32\x2d\x39\x34\x2e\x32\x33\x2d\x32\x33\x2e\x33\x32\x2d\x32\ +\x34\x2e\x37\x36\x2d\x35\x31\x2e\x38\x31\x2d\x34\x30\x2e\x37\x34\ +\x2d\x38\x35\x2d\x34\x38\x2e\x32\x33\x61\x31\x35\x37\x2e\x33\x33\ +\x2c\x31\x35\x37\x2e\x33\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x31\ +\x2e\x37\x36\x2d\x33\x2e\x31\x32\x63\x2d\x33\x31\x2e\x32\x36\x2c\ +\x33\x2e\x34\x2d\x35\x39\x2e\x35\x37\x2c\x31\x34\x2e\x34\x35\x2d\ +\x38\x34\x2e\x35\x37\x2c\x33\x33\x2e\x37\x39\x2d\x32\x39\x2e\x33\ +\x31\x2c\x32\x32\x2e\x36\x38\x2d\x34\x38\x2e\x39\x32\x2c\x35\x31\ +\x2e\x38\x32\x2d\x35\x39\x2e\x31\x34\x2c\x38\x37\x2e\x33\x38\x61\ +\x31\x36\x38\x2e\x35\x39\x2c\x31\x36\x38\x2e\x35\x39\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x36\x2e\x31\x2c\x34\x30\x2e\x39\x31\x63\x2d\x2e\ +\x30\x39\x2c\x32\x2e\x35\x35\x2d\x2e\x35\x37\x2c\x33\x2e\x34\x31\ +\x2d\x33\x2e\x33\x31\x2c\x33\x2e\x33\x38\x71\x2d\x31\x37\x2e\x36\ +\x34\x2d\x2e\x32\x35\x2d\x33\x35\x2e\x32\x39\x2c\x30\x63\x2d\x32\ +\x2e\x36\x33\x2c\x30\x2d\x33\x2e\x31\x2d\x2e\x38\x2d\x33\x2d\x33\ +\x2e\x32\x41\x32\x30\x38\x2e\x32\x39\x2c\x32\x30\x38\x2e\x32\x39\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x39\x2e\x37\x34\x2c\x31\x32\ +\x34\x2e\x38\x61\x32\x30\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\ +\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x35\x2e\x34\x37\x2d\x34\x37\ +\x2e\x34\x33\x41\x32\x31\x33\x2e\x39\x34\x2c\x32\x31\x33\x2e\x39\ +\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x38\x35\x2c\x37\x30\x2e\x36\ +\x32\x61\x32\x30\x34\x2e\x38\x38\x2c\x32\x30\x34\x2e\x38\x38\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x33\x30\x2e\x32\x32\x2d\x2e\x34\x31\x2c\ +\x32\x30\x30\x2e\x31\x31\x2c\x32\x30\x30\x2e\x31\x31\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x35\x33\x2e\x38\x35\x2c\x31\x31\x2e\x36\x34\x2c\ +\x32\x30\x37\x2e\x38\x38\x2c\x32\x30\x37\x2e\x38\x38\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x38\x36\x2e\x38\x36\x2c\x35\x39\x2c\x32\x30\x35\ +\x2e\x39\x31\x2c\x32\x30\x35\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x35\x31\x2e\x32\x2c\x31\x35\x32\x2c\x32\x30\x31\x2e\x37\x39\ +\x2c\x32\x30\x31\x2e\x37\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x31\ +\x2e\x35\x31\x2c\x31\x30\x39\x2e\x38\x33\x63\x2d\x33\x30\x2e\x37\ +\x31\x2c\x34\x30\x2e\x32\x38\x2d\x37\x31\x2c\x36\x36\x2e\x33\x2d\ +\x31\x32\x30\x2e\x35\x2c\x37\x37\x2e\x37\x31\x61\x31\x39\x35\x2c\ +\x31\x39\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x36\x34\x2e\x32\x31\x2c\ +\x34\x43\x32\x36\x30\x2e\x36\x35\x2c\x34\x38\x32\x2e\x34\x2c\x32\ +\x34\x30\x2e\x39\x32\x2c\x34\x37\x37\x2e\x35\x38\x2c\x32\x32\x31\ +\x2e\x31\x34\x2c\x34\x37\x30\x2e\x38\x37\x5a\x22\x2f\x3e\x3c\x70\ +\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x34\x35\ +\x2e\x35\x37\x20\x34\x35\x31\x2e\x36\x20\x33\x30\x38\x2e\x38\x33\ +\x20\x34\x31\x39\x2e\x34\x35\x20\x32\x39\x34\x2e\x32\x38\x20\x33\ +\x39\x30\x2e\x38\x34\x20\x32\x30\x31\x2e\x39\x20\x34\x33\x37\x2e\ +\x37\x39\x20\x32\x34\x38\x2e\x38\x36\x20\x35\x33\x30\x2e\x31\x38\ +\x20\x32\x37\x37\x2e\x39\x38\x20\x35\x31\x35\x2e\x33\x38\x20\x32\ +\x34\x35\x2e\x35\x37\x20\x34\x35\x31\x2e\x36\x22\x2f\x3e\x3c\x70\ +\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ +\x22\x20\x64\x3d\x22\x4d\x32\x36\x31\x2c\x33\x36\x32\x2e\x39\x34\ +\x61\x31\x31\x2e\x35\x33\x2c\x31\x31\x2e\x35\x33\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x30\x2d\x31\x2e\x39\x35\x63\x31\x2d\x35\x2e\x31\x37\ +\x2d\x31\x2e\x32\x36\x2d\x38\x2e\x36\x2d\x35\x2e\x37\x34\x2d\x31\ +\x30\x2e\x37\x37\x61\x34\x34\x2e\x35\x32\x2c\x34\x34\x2e\x35\x32\ +\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x32\x34\x2d\x32\x2e\x36\x63\ +\x2d\x32\x2e\x31\x31\x2d\x31\x2e\x33\x34\x2d\x34\x2e\x34\x37\x2d\ +\x31\x2e\x30\x37\x2d\x36\x2e\x36\x35\x2c\x30\x61\x36\x35\x2e\x31\ +\x34\x2c\x36\x35\x2e\x31\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x2e\ +\x33\x31\x2c\x33\x2e\x34\x33\x63\x2d\x33\x2e\x38\x39\x2c\x32\x2e\ +\x33\x39\x2d\x36\x2e\x39\x34\x2c\x32\x2e\x30\x38\x2d\x31\x30\x2e\ +\x31\x34\x2d\x31\x2e\x32\x36\x2d\x31\x2e\x38\x36\x2d\x31\x2e\x39\ +\x35\x2d\x33\x2e\x36\x35\x2d\x34\x2d\x35\x2e\x35\x2d\x35\x2e\x39\ +\x32\x61\x35\x2e\x33\x33\x2c\x35\x2e\x33\x33\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x2e\x37\x31\x2d\x36\x2e\x37\x31\x63\x31\x2e\x36\x37\x2d\ +\x33\x2e\x31\x2c\x33\x2e\x35\x33\x2d\x36\x2e\x30\x39\x2c\x35\x2e\ +\x33\x35\x2d\x39\x2e\x31\x61\x35\x2e\x31\x34\x2c\x35\x2e\x31\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x31\x37\x2d\x35\x2e\x35\x37\x63\ +\x2d\x31\x2e\x34\x37\x2d\x32\x2e\x34\x37\x2d\x32\x2e\x38\x32\x2d\ +\x35\x2d\x34\x2e\x31\x35\x2d\x37\x2e\x35\x35\x61\x35\x2e\x36\x34\ +\x2c\x35\x2e\x36\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\x32\x38\ +\x2d\x33\x2e\x34\x33\x63\x2d\x32\x2e\x38\x36\x2c\x30\x2d\x35\x2e\ +\x37\x33\x2d\x2e\x31\x38\x2d\x38\x2e\x36\x2d\x2e\x33\x31\x2d\x34\ +\x2e\x34\x37\x2d\x2e\x32\x31\x2d\x36\x2e\x32\x39\x2d\x31\x2e\x38\ +\x37\x2d\x37\x2e\x31\x34\x2d\x36\x2e\x32\x2d\x2e\x35\x31\x2d\x32\ +\x2e\x35\x35\x2d\x31\x2e\x32\x35\x2d\x35\x2e\x30\x36\x2d\x31\x2e\ +\x39\x32\x2d\x37\x2e\x35\x38\x2d\x2e\x38\x34\x2d\x33\x2e\x31\x37\ +\x2e\x38\x32\x2d\x35\x2e\x31\x39\x2c\x33\x2e\x32\x31\x2d\x36\x2e\ +\x37\x33\x61\x37\x38\x2e\x34\x37\x2c\x37\x38\x2e\x34\x37\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x38\x2e\x31\x33\x2d\x34\x2e\x37\x32\x2c\x35\ +\x2e\x35\x31\x2c\x35\x2e\x35\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x33\ +\x2e\x31\x39\x2d\x35\x2e\x31\x32\x63\x2e\x32\x2d\x33\x2c\x2e\x31\ +\x39\x2d\x36\x2c\x2e\x33\x2d\x38\x2e\x39\x35\x2e\x31\x36\x2d\x34\ +\x2e\x30\x37\x2d\x33\x2e\x31\x38\x2d\x35\x2e\x33\x33\x2d\x35\x2e\ +\x37\x2d\x37\x2e\x31\x38\x2d\x31\x2e\x36\x33\x2d\x31\x2e\x32\x2d\ +\x33\x2e\x34\x36\x2d\x32\x2e\x31\x32\x2d\x35\x2e\x31\x36\x2d\x33\ +\x2e\x32\x32\x61\x35\x2e\x39\x34\x2c\x35\x2e\x39\x34\x2c\x30\x2c\ +\x30\x2c\x31\x2d\x32\x2e\x35\x2d\x37\x2e\x34\x36\x63\x31\x2e\x30\ +\x35\x2d\x32\x2e\x38\x35\x2c\x31\x2e\x32\x33\x2d\x35\x2e\x39\x31\ +\x2c\x32\x2e\x35\x31\x2d\x38\x2e\x37\x34\x61\x36\x2e\x31\x37\x2c\ +\x36\x2e\x31\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x39\x34\x2d\ +\x34\x2e\x30\x38\x63\x34\x2e\x30\x37\x2d\x2e\x31\x32\x2c\x38\x2e\ +\x31\x33\x2e\x32\x36\x2c\x31\x32\x2e\x32\x2d\x2e\x32\x32\x61\x33\ +\x2e\x36\x31\x2c\x33\x2e\x36\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x33\ +\x2e\x32\x34\x2d\x32\x2e\x35\x36\x63\x2e\x35\x38\x2d\x33\x2c\x32\ +\x2e\x36\x2d\x35\x2c\x34\x2e\x30\x36\x2d\x37\x2e\x34\x37\x61\x35\ +\x2e\x37\x31\x2c\x35\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x30\ +\x2d\x35\x2e\x38\x35\x63\x2d\x31\x2e\x34\x32\x2d\x32\x2e\x39\x32\ +\x2d\x32\x2e\x36\x39\x2d\x35\x2e\x39\x34\x2d\x34\x2e\x33\x38\x2d\ +\x38\x2e\x36\x39\x2d\x31\x2e\x38\x33\x2d\x33\x2d\x31\x2e\x31\x32\ +\x2d\x35\x2e\x33\x32\x2c\x31\x2e\x30\x36\x2d\x37\x2e\x35\x2c\x32\ +\x2e\x33\x37\x2d\x32\x2e\x33\x36\x2c\x34\x2e\x38\x33\x2d\x34\x2e\ +\x36\x32\x2c\x37\x2e\x33\x31\x2d\x36\x2e\x38\x35\x2c\x31\x2e\x38\ +\x39\x2d\x31\x2e\x37\x31\x2c\x33\x2e\x38\x36\x2d\x31\x2e\x37\x39\ +\x2c\x36\x2e\x30\x36\x2d\x2e\x33\x32\x2c\x32\x2e\x37\x36\x2c\x31\ +\x2e\x38\x33\x2c\x35\x2e\x36\x35\x2c\x33\x2e\x34\x38\x2c\x38\x2e\ +\x35\x34\x2c\x35\x2e\x31\x31\x61\x36\x2e\x31\x39\x2c\x36\x2e\x31\ +\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x36\x33\x2e\x30\x39\x63\ +\x32\x2e\x34\x31\x2d\x31\x2e\x35\x35\x2c\x35\x2e\x30\x39\x2d\x32\ +\x2e\x36\x31\x2c\x37\x2e\x34\x37\x2d\x34\x2e\x31\x38\x61\x36\x2e\ +\x34\x35\x2c\x36\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x2d\ +\x35\x2e\x33\x35\x63\x2e\x31\x31\x2d\x33\x2e\x30\x38\x2e\x33\x34\ +\x2d\x36\x2e\x31\x37\x2e\x32\x38\x2d\x39\x2e\x32\x34\x2d\x2e\x30\ +\x38\x2d\x33\x2e\x35\x33\x2c\x32\x2e\x30\x37\x2d\x35\x2e\x33\x39\ +\x2c\x35\x2e\x32\x31\x2d\x36\x2e\x32\x32\x2c\x32\x2e\x37\x36\x2d\ +\x2e\x37\x34\x2c\x35\x2e\x35\x39\x2d\x31\x2e\x31\x37\x2c\x38\x2e\ +\x33\x34\x2d\x32\x2e\x30\x36\x2c\x33\x2d\x31\x2c\x35\x2e\x36\x38\ +\x2e\x39\x32\x2c\x37\x2e\x35\x31\x2c\x34\x2e\x37\x34\x61\x34\x37\ +\x2c\x34\x37\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x2e\x34\x38\x2c\x37\ +\x2e\x36\x37\x2c\x36\x2e\x34\x35\x2c\x36\x2e\x34\x35\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x35\x2e\x34\x35\x2c\x32\x2e\x37\x39\x2c\x35\x38\ +\x2e\x38\x39\x2c\x35\x38\x2e\x38\x39\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x36\x2e\x36\x35\x2e\x31\x36\x63\x32\x2e\x39\x2e\x33\x33\x2c\x34\ +\x2e\x38\x31\x2d\x31\x2e\x31\x38\x2c\x36\x2e\x33\x31\x2d\x33\x2e\ +\x32\x34\x61\x38\x34\x2e\x36\x32\x2c\x38\x34\x2e\x36\x32\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x35\x2e\x31\x31\x2d\x37\x2e\x39\x35\x2c\x35\ +\x2e\x36\x33\x2c\x35\x2e\x36\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x36\ +\x2d\x33\x63\x33\x2e\x38\x31\x2e\x34\x2c\x37\x2e\x32\x38\x2c\x32\ +\x2e\x30\x35\x2c\x31\x30\x2e\x38\x39\x2c\x33\x2e\x31\x35\x2c\x32\ +\x2c\x2e\x35\x39\x2c\x32\x2e\x36\x31\x2c\x32\x2e\x35\x38\x2c\x32\ +\x2e\x37\x2c\x34\x2e\x35\x31\x61\x35\x37\x2e\x37\x39\x2c\x35\x37\ +\x2e\x37\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x30\x2c\x37\x2e\x35\x36\ +\x63\x2d\x2e\x33\x38\x2c\x34\x2e\x35\x33\x2e\x39\x2c\x37\x2e\x38\ +\x2c\x35\x2e\x32\x37\x2c\x39\x2e\x39\x33\x2c\x33\x2e\x36\x34\x2c\ +\x31\x2e\x37\x36\x2c\x36\x2e\x35\x39\x2c\x35\x2e\x35\x31\x2c\x31\ +\x31\x2e\x32\x39\x2c\x33\x2e\x33\x35\x61\x34\x39\x2e\x38\x38\x2c\ +\x34\x39\x2e\x38\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x30\x37\ +\x2d\x33\x2e\x32\x36\x63\x34\x2e\x33\x34\x2d\x32\x2e\x37\x38\x2c\ +\x37\x2e\x31\x36\x2d\x32\x2e\x35\x39\x2c\x31\x30\x2e\x37\x38\x2c\ +\x31\x2c\x31\x2e\x37\x36\x2c\x31\x2e\x37\x37\x2c\x33\x2e\x34\x39\ +\x2c\x33\x2e\x35\x37\x2c\x35\x2e\x31\x35\x2c\x35\x2e\x34\x33\x2c\ +\x32\x2e\x31\x34\x2c\x32\x2e\x34\x2c\x32\x2c\x35\x2e\x37\x39\x2d\ +\x2e\x31\x32\x2c\x39\x61\x36\x36\x2e\x32\x38\x2c\x36\x36\x2e\x32\ +\x38\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x2e\x35\x31\x2c\x35\x2e\x36\ +\x35\x63\x2d\x31\x2e\x33\x37\x2c\x32\x2e\x36\x31\x2d\x32\x2e\x33\ +\x38\x2c\x35\x2e\x33\x34\x2d\x2e\x33\x36\x2c\x38\x2e\x31\x33\x2c\ +\x31\x2e\x36\x39\x2c\x32\x2e\x33\x34\x2c\x32\x2e\x35\x35\x2c\x35\ +\x2e\x31\x33\x2c\x34\x2e\x32\x37\x2c\x37\x2e\x34\x38\x61\x35\x2e\ +\x34\x39\x2c\x35\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x2e\ +\x36\x37\x2c\x32\x2e\x34\x63\x33\x2e\x31\x35\x2e\x31\x31\x2c\x36\ +\x2e\x32\x39\x2e\x31\x39\x2c\x39\x2e\x34\x33\x2e\x34\x61\x36\x2c\ +\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x36\x38\x2c\x34\x2e\x31\ +\x2c\x34\x36\x2e\x32\x38\x2c\x34\x36\x2e\x32\x38\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x32\x2e\x32\x33\x2c\x31\x30\x2e\x33\x36\x63\x2e\x34\ +\x32\x2c\x33\x2d\x31\x2c\x34\x2e\x39\x32\x2d\x33\x2e\x35\x37\x2c\ +\x36\x2e\x33\x32\x2d\x32\x2e\x39\x31\x2c\x31\x2e\x35\x39\x2d\x35\ +\x2e\x37\x34\x2c\x33\x2e\x33\x32\x2d\x38\x2e\x35\x33\x2c\x35\x2e\ +\x31\x32\x61\x35\x2e\x31\x35\x2c\x35\x2e\x31\x35\x2c\x30\x2c\x30\ +\x2c\x30\x2d\x32\x2e\x35\x2c\x34\x2e\x37\x31\x2c\x32\x33\x2c\x32\ +\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x2e\x30\x38\x2c\x35\x2e\x33\x31\ +\x63\x2d\x31\x2e\x31\x2c\x35\x2e\x34\x32\x2c\x31\x2e\x38\x31\x2c\ +\x38\x2e\x33\x34\x2c\x36\x2c\x31\x30\x2e\x36\x33\x61\x34\x38\x2e\ +\x33\x34\x2c\x34\x38\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ +\x2e\x39\x33\x2c\x33\x2e\x30\x38\x63\x33\x2e\x30\x38\x2c\x32\x2e\ +\x31\x36\x2c\x33\x2e\x38\x35\x2c\x35\x2e\x31\x34\x2c\x32\x2e\x32\ +\x38\x2c\x39\x2e\x30\x39\x61\x33\x35\x2e\x32\x32\x2c\x33\x35\x2e\ +\x32\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x37\x33\x2c\x35\x2e\ +\x36\x2c\x36\x2e\x37\x35\x2c\x36\x2e\x37\x35\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x37\x2c\x35\x2e\x35\x33\x63\x2d\x32\x2e\x34\x31\x2c\x30\ +\x2d\x34\x2e\x38\x33\x2e\x31\x32\x2d\x37\x2e\x32\x32\x2d\x2e\x30\ +\x39\x2d\x33\x2e\x37\x31\x2d\x2e\x33\x33\x2d\x36\x2e\x34\x33\x2e\ +\x39\x2d\x38\x2e\x31\x34\x2c\x34\x2e\x33\x33\x61\x33\x34\x2e\x37\ +\x2c\x33\x34\x2e\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x38\x36\ +\x2c\x34\x2e\x37\x36\x63\x2d\x32\x2e\x32\x2c\x33\x2d\x31\x2e\x34\ +\x36\x2c\x35\x2e\x39\x34\x2d\x2e\x30\x35\x2c\x38\x2e\x38\x39\x2e\ +\x39\x33\x2c\x31\x2e\x39\x32\x2c\x31\x2e\x38\x36\x2c\x33\x2e\x38\ +\x35\x2c\x32\x2e\x39\x33\x2c\x35\x2e\x36\x38\x2c\x32\x2e\x33\x2c\ +\x33\x2e\x39\x33\x2c\x32\x2e\x33\x33\x2c\x35\x2e\x36\x38\x2d\x2e\ +\x36\x36\x2c\x38\x2e\x39\x33\x61\x33\x39\x2e\x35\x2c\x33\x39\x2e\ +\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x37\x36\x2c\x37\x2e\x30\ +\x36\x2c\x34\x2c\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x36\x31\ +\x2e\x31\x34\x63\x2d\x33\x2e\x30\x35\x2d\x31\x2e\x37\x2d\x36\x2e\ +\x31\x32\x2d\x33\x2e\x33\x37\x2d\x39\x2e\x31\x2d\x35\x2e\x32\x32\ +\x61\x36\x2e\x36\x33\x2c\x36\x2e\x36\x33\x2c\x30\x2c\x30\x2c\x30\ +\x2d\x36\x2e\x39\x2d\x2e\x31\x35\x63\x2d\x32\x2e\x36\x37\x2c\x31\ +\x2e\x34\x34\x2d\x35\x2e\x32\x38\x2c\x33\x2d\x37\x2e\x39\x34\x2c\ +\x34\x2e\x34\x39\x2d\x31\x2e\x36\x35\x2e\x39\x31\x2d\x31\x2e\x37\ +\x34\x2c\x32\x2e\x36\x2d\x31\x2e\x39\x33\x2c\x34\x2e\x31\x31\x2d\ +\x2e\x33\x39\x2c\x33\x2d\x2e\x35\x37\x2c\x36\x2e\x31\x33\x2d\x2e\ +\x38\x2c\x39\x2e\x32\x2d\x2e\x33\x39\x2c\x35\x2e\x31\x32\x2d\x31\ +\x2e\x38\x33\x2c\x36\x2e\x37\x33\x2d\x36\x2e\x37\x38\x2c\x37\x2e\ +\x35\x37\x61\x32\x39\x2c\x32\x39\x2c\x30\x2c\x30\x2c\x30\x2d\x36\ +\x2e\x34\x36\x2c\x31\x2e\x35\x32\x63\x2d\x32\x2e\x36\x38\x2c\x31\ +\x2e\x31\x31\x2d\x34\x2e\x38\x2d\x2e\x32\x39\x2d\x36\x2e\x32\x35\ +\x2d\x32\x2e\x32\x38\x61\x35\x38\x2e\x35\x36\x2c\x35\x38\x2e\x35\ +\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x37\x37\x2d\x38\x2e\x31\ +\x34\x63\x2d\x31\x2e\x35\x34\x2d\x33\x2e\x30\x36\x2d\x33\x2e\x37\ +\x35\x2d\x34\x2e\x36\x39\x2d\x37\x2e\x32\x31\x2d\x34\x2e\x35\x32\ +\x61\x31\x35\x2e\x32\x2c\x31\x35\x2e\x32\x2c\x30\x2c\x30\x2c\x31\ +\x2d\x34\x2e\x31\x36\x2d\x2e\x31\x31\x63\x2d\x34\x2e\x39\x33\x2d\ +\x31\x2e\x31\x32\x2d\x37\x2e\x35\x36\x2c\x31\x2e\x37\x33\x2d\x39\ +\x2e\x38\x33\x2c\x35\x2e\x34\x35\x61\x36\x39\x2c\x36\x39\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x34\x2e\x34\x32\x2c\x36\x2e\x37\x33\x2c\x34\ +\x2e\x39\x32\x2c\x34\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2d\x34\ +\x2e\x36\x31\x2c\x31\x2e\x38\x39\x63\x2d\x34\x2e\x31\x32\x2d\x2e\ +\x32\x32\x2d\x37\x2e\x37\x37\x2d\x32\x2e\x33\x36\x2d\x31\x31\x2e\ +\x37\x39\x2d\x33\x2e\x30\x36\x61\x33\x2e\x33\x36\x2c\x33\x2e\x33\ +\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x35\x36\x2d\x33\x2e\x35\ +\x33\x63\x2e\x31\x31\x2d\x32\x2e\x31\x34\x2c\x30\x2d\x34\x2e\x32\ +\x39\x2c\x30\x2d\x36\x2e\x34\x34\x5a\x6d\x33\x36\x2e\x39\x31\x2d\ +\x32\x33\x2e\x32\x32\x63\x33\x34\x2e\x33\x36\x2d\x2e\x33\x37\x2c\ +\x36\x30\x2e\x35\x31\x2d\x32\x37\x2e\x38\x38\x2c\x36\x30\x2e\x34\ +\x35\x2d\x36\x31\x2e\x33\x38\x2d\x2e\x30\x36\x2d\x33\x33\x2e\x37\ +\x34\x2d\x32\x37\x2e\x33\x39\x2d\x36\x32\x2e\x39\x31\x2d\x36\x34\ +\x2e\x34\x32\x2d\x36\x31\x2d\x32\x39\x2e\x38\x35\x2c\x31\x2e\x35\ +\x36\x2d\x35\x37\x2e\x32\x31\x2c\x32\x37\x2e\x32\x32\x2d\x35\x36\ +\x2e\x37\x37\x2c\x36\x32\x2e\x31\x35\x43\x32\x33\x37\x2e\x36\x2c\ +\x33\x31\x32\x2e\x36\x34\x2c\x32\x36\x35\x2e\x31\x2c\x33\x33\x39\ +\x2e\x39\x32\x2c\x32\x39\x37\x2e\x39\x33\x2c\x33\x33\x39\x2e\x37\ +\x32\x5a\x22\x2f\x3e\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x63\x78\x3d\x22\x32\ +\x39\x37\x2e\x35\x36\x22\x20\x63\x79\x3d\x22\x32\x37\x38\x2e\x34\ +\x39\x22\x20\x72\x3d\x22\x34\x35\x2e\x32\x37\x22\x2f\x3e\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x06\x7a\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x31\x36\x33\x2e\x38\x39\x2c\x34\x33\ +\x35\x2e\x37\x35\x63\x30\x2c\x35\x2e\x32\x36\x2e\x30\x36\x2c\x31\ +\x30\x2e\x35\x31\x2c\x30\x2c\x31\x35\x2e\x37\x37\x2d\x2e\x31\x37\ +\x2c\x31\x32\x2e\x33\x38\x2c\x31\x2e\x37\x35\x2c\x31\x30\x2e\x37\ +\x31\x2d\x31\x30\x2e\x38\x36\x2c\x31\x30\x2e\x38\x33\x2d\x38\x2e\ +\x32\x33\x2e\x30\x37\x2d\x31\x36\x2e\x34\x36\x2d\x2e\x31\x31\x2d\ +\x32\x34\x2e\x36\x38\x2e\x30\x37\x2d\x33\x2e\x38\x33\x2e\x30\x39\ +\x2d\x35\x2e\x32\x36\x2d\x31\x2e\x31\x35\x2d\x35\x2e\x32\x34\x2d\ +\x35\x2e\x31\x38\x71\x2e\x32\x31\x2d\x34\x35\x2e\x37\x36\x2c\x30\ +\x2d\x39\x31\x2e\x35\x32\x63\x30\x2d\x34\x2e\x31\x34\x2c\x31\x2e\ +\x32\x2d\x35\x2e\x36\x31\x2c\x35\x2e\x34\x36\x2d\x35\x2e\x35\x39\ +\x2c\x33\x30\x2e\x35\x31\x2e\x31\x34\x2c\x36\x31\x2c\x30\x2c\x39\ +\x31\x2e\x35\x32\x2e\x32\x2c\x31\x2e\x37\x35\x2c\x30\x2c\x35\x2c\ +\x31\x2e\x39\x33\x2c\x35\x2c\x33\x2c\x2e\x33\x37\x2c\x31\x32\x2e\ +\x31\x39\x2e\x32\x33\x2c\x32\x34\x2e\x34\x2e\x32\x33\x2c\x33\x37\ +\x2e\x36\x31\x48\x31\x39\x32\x2e\x31\x38\x63\x32\x2e\x32\x35\x2c\ +\x33\x2e\x31\x38\x2c\x33\x2e\x31\x39\x2c\x35\x2e\x30\x36\x2c\x34\ +\x2e\x36\x31\x2c\x36\x2e\x34\x35\x2c\x34\x32\x2e\x34\x38\x2c\x34\ +\x31\x2e\x34\x36\x2c\x39\x32\x2e\x37\x34\x2c\x35\x35\x2c\x31\x34\ +\x38\x2e\x38\x38\x2c\x33\x36\x2e\x31\x34\x2c\x31\x32\x36\x2e\x39\ +\x34\x2d\x33\x39\x2e\x33\x2c\x31\x33\x30\x2e\x38\x31\x2d\x32\x32\ +\x31\x2e\x32\x33\x2c\x37\x2e\x34\x2d\x32\x36\x38\x2e\x39\x33\x2d\ +\x34\x2e\x32\x35\x2d\x31\x2e\x37\x31\x2d\x35\x2e\x37\x32\x2d\x33\ +\x2e\x38\x38\x2d\x35\x2e\x35\x37\x2d\x38\x2e\x33\x39\x2e\x35\x38\ +\x2d\x31\x31\x2e\x37\x37\x2d\x2e\x34\x36\x2d\x32\x33\x2e\x35\x36\ +\x2e\x35\x34\x2d\x33\x35\x2e\x33\x32\x43\x34\x38\x34\x2c\x31\x36\ +\x31\x2e\x33\x39\x2c\x35\x33\x38\x2e\x33\x32\x2c\x33\x35\x32\x2e\ +\x34\x38\x2c\x34\x31\x36\x2e\x32\x2c\x34\x35\x31\x63\x2d\x37\x32\ +\x2e\x32\x2c\x36\x30\x2e\x37\x39\x2d\x31\x38\x35\x2e\x36\x31\x2c\ +\x35\x32\x2e\x36\x38\x2d\x32\x34\x39\x2e\x38\x38\x2d\x31\x36\x5a\ +\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x32\x35\x2c\x31\ +\x38\x37\x2e\x36\x33\x71\x30\x2c\x33\x34\x2c\x30\x2c\x36\x38\x63\ +\x30\x2c\x38\x2e\x37\x31\x2d\x32\x2e\x33\x39\x2c\x31\x31\x2e\x30\ +\x37\x2d\x31\x31\x2c\x31\x31\x2e\x30\x39\x2d\x39\x2e\x36\x32\x2c\ +\x30\x2d\x31\x39\x2e\x32\x35\x2e\x30\x37\x2d\x32\x38\x2e\x38\x37\ +\x2c\x30\x2d\x37\x2e\x30\x38\x2d\x2e\x30\x36\x2d\x39\x2e\x38\x33\ +\x2d\x32\x2e\x37\x32\x2d\x39\x2e\x38\x34\x2d\x39\x2e\x39\x71\x2d\ +\x2e\x30\x38\x2d\x36\x39\x2e\x31\x38\x2c\x30\x2d\x31\x33\x38\x2e\ +\x33\x36\x63\x30\x2d\x37\x2e\x34\x34\x2c\x32\x2e\x38\x35\x2d\x31\ +\x30\x2e\x32\x38\x2c\x31\x30\x2e\x31\x35\x2d\x31\x30\x2e\x33\x36\ +\x71\x31\x34\x2e\x37\x33\x2d\x2e\x31\x36\x2c\x32\x39\x2e\x34\x38\ +\x2c\x30\x63\x37\x2e\x32\x39\x2e\x30\x38\x2c\x31\x30\x2e\x30\x38\ +\x2c\x32\x2e\x39\x32\x2c\x31\x30\x2e\x31\x2c\x31\x30\x2e\x33\x38\ +\x43\x33\x32\x35\x2e\x30\x35\x2c\x31\x34\x31\x2e\x35\x31\x2c\x33\ +\x32\x35\x2c\x31\x36\x34\x2e\x35\x37\x2c\x33\x32\x35\x2c\x31\x38\ +\x37\x2e\x36\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x32\x34\x33\x2e\x33\x35\x2c\x31\x33\x32\x2e\x36\x31\x63\x32\x2e\ +\x31\x39\x2c\x38\x2e\x36\x37\x2c\x34\x2e\x32\x37\x2c\x31\x36\x2e\ +\x37\x34\x2c\x36\x2e\x32\x38\x2c\x32\x34\x2e\x38\x32\x2c\x33\x2e\ +\x35\x31\x2c\x31\x34\x2e\x31\x35\x2c\x33\x2e\x33\x34\x2c\x31\x33\ +\x2e\x38\x34\x2d\x39\x2e\x33\x39\x2c\x32\x30\x2e\x31\x37\x2d\x38\ +\x2e\x35\x36\x2c\x34\x2e\x32\x37\x2d\x31\x36\x2e\x35\x33\x2c\x39\ +\x2e\x37\x31\x2d\x32\x34\x2e\x39\x33\x2c\x31\x34\x2e\x33\x33\x2d\ +\x31\x2e\x36\x32\x2e\x39\x2d\x35\x2c\x31\x2e\x33\x37\x2d\x35\x2e\ +\x38\x38\x2e\x34\x34\x2d\x38\x2e\x34\x2d\x38\x2e\x37\x39\x2d\x31\ +\x36\x2e\x34\x34\x2d\x31\x37\x2e\x39\x33\x2d\x32\x35\x2e\x31\x38\ +\x2d\x32\x37\x2e\x36\x33\x41\x31\x37\x39\x2e\x38\x38\x2c\x31\x37\ +\x39\x2e\x38\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x34\x33\x2e\x33\ +\x35\x2c\x31\x33\x32\x2e\x36\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ +\x64\x3d\x22\x4d\x31\x36\x37\x2e\x33\x34\x2c\x31\x38\x31\x2e\x31\ +\x34\x63\x38\x2e\x33\x31\x2c\x39\x2e\x32\x35\x2c\x31\x36\x2e\x36\ +\x37\x2c\x31\x38\x2e\x33\x39\x2c\x32\x34\x2e\x37\x34\x2c\x32\x37\ +\x2e\x37\x39\x2e\x37\x36\x2e\x38\x38\x2e\x31\x38\x2c\x33\x2e\x37\ +\x31\x2d\x2e\x36\x38\x2c\x35\x2e\x30\x37\x2d\x37\x2c\x31\x31\x2d\ +\x31\x34\x2e\x32\x38\x2c\x32\x31\x2e\x37\x32\x2d\x32\x31\x2e\x31\ +\x31\x2c\x33\x32\x2e\x37\x38\x2d\x31\x2e\x38\x2c\x32\x2e\x39\x31\ +\x2d\x33\x2e\x33\x32\x2c\x33\x2e\x33\x34\x2d\x36\x2e\x32\x34\x2c\ +\x32\x2e\x32\x34\x2d\x39\x2e\x37\x36\x2d\x33\x2e\x36\x37\x2d\x31\ +\x39\x2e\x35\x37\x2d\x37\x2e\x32\x31\x2d\x32\x39\x2e\x33\x39\x2d\ +\x31\x30\x2e\x37\x2d\x32\x2e\x38\x33\x2d\x31\x2d\x34\x2e\x36\x32\ +\x2d\x32\x2e\x30\x39\x2d\x33\x2d\x35\x2e\x36\x61\x31\x38\x37\x2e\ +\x32\x38\x2c\x31\x38\x37\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x33\x33\x2e\x31\x34\x2d\x34\x39\x2e\x38\x39\x41\x31\x36\x2c\x31\ +\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\x37\x2e\x33\x34\x2c\x31\ +\x38\x31\x2e\x31\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ +\x4d\x31\x32\x33\x2e\x31\x34\x2c\x32\x35\x39\x2e\x31\x38\x63\x31\ +\x31\x2e\x35\x36\x2c\x34\x2e\x31\x38\x2c\x32\x32\x2e\x38\x38\x2c\ +\x38\x2e\x31\x34\x2c\x33\x34\x2e\x30\x35\x2c\x31\x32\x2e\x35\x31\ +\x2c\x31\x2e\x33\x2e\x35\x32\x2c\x32\x2e\x34\x39\x2c\x33\x2e\x33\ +\x37\x2c\x32\x2e\x34\x2c\x35\x2e\x30\x37\x71\x2d\x31\x2c\x31\x39\ +\x2e\x32\x2d\x32\x2e\x36\x39\x2c\x33\x38\x2e\x33\x36\x63\x2d\x2e\ +\x31\x34\x2c\x31\x2e\x36\x37\x2d\x31\x2e\x37\x38\x2c\x34\x2e\x33\ +\x38\x2d\x33\x2e\x30\x37\x2c\x34\x2e\x36\x2d\x31\x30\x2e\x34\x35\ +\x2c\x31\x2e\x38\x2d\x32\x31\x2c\x33\x2e\x31\x2d\x33\x31\x2e\x34\ +\x38\x2c\x34\x2e\x36\x31\x2d\x33\x2e\x39\x2e\x35\x36\x2d\x36\x2d\ +\x2e\x37\x33\x2d\x36\x2e\x32\x36\x2d\x35\x2d\x31\x2d\x31\x39\x2e\ +\x35\x38\x2e\x35\x32\x2d\x33\x38\x2e\x39\x2c\x35\x2e\x36\x38\x2d\ +\x35\x37\x2e\x38\x36\x41\x31\x34\x2c\x31\x34\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x31\x32\x33\x2e\x31\x34\x2c\x32\x35\x39\x2e\x31\x38\x5a\ +\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x02\xa3\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x35\x38\ +\x36\x2e\x32\x34\x20\x34\x38\x33\x2e\x32\x38\x20\x33\x34\x32\x2e\ +\x31\x31\x20\x33\x32\x33\x2e\x33\x38\x20\x33\x34\x32\x2e\x31\x31\ +\x20\x34\x36\x2e\x34\x34\x20\x32\x35\x38\x2e\x31\x20\x34\x36\x2e\ +\x34\x34\x20\x32\x35\x38\x2e\x31\x20\x33\x32\x33\x2e\x32\x35\x20\ +\x31\x33\x2e\x37\x36\x20\x34\x38\x33\x2e\x32\x38\x20\x35\x39\x2e\ +\x38\x20\x35\x35\x33\x2e\x35\x37\x20\x33\x30\x30\x2e\x30\x31\x20\ +\x33\x39\x36\x2e\x32\x33\x20\x35\x34\x30\x2e\x32\x32\x20\x35\x35\ +\x33\x2e\x35\x37\x20\x35\x38\x36\x2e\x32\x34\x20\x34\x38\x33\x2e\ +\x32\x38\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x36\x35\ +\x2c\x34\x38\x2e\x35\x35\x6c\x32\x37\x2e\x31\x36\x2c\x35\x34\x2e\ +\x32\x39\x2c\x32\x37\x2e\x31\x35\x2d\x35\x34\x2e\x32\x39\x68\x32\ +\x38\x2e\x32\x31\x4c\x32\x30\x34\x2e\x38\x2c\x31\x33\x34\x76\x33\ +\x38\x2e\x32\x32\x48\x31\x37\x39\x2e\x35\x37\x56\x31\x33\x34\x4c\ +\x31\x33\x36\x2e\x38\x32\x2c\x34\x38\x2e\x35\x35\x5a\x22\x2f\x3e\ +\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ +\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x31\x31\x2e\x33\x39\x2c\x32\ +\x36\x37\x6c\x32\x32\x2e\x34\x39\x2c\x33\x37\x2e\x31\x37\x4c\x35\ +\x35\x36\x2e\x33\x38\x2c\x32\x36\x37\x68\x32\x39\x2e\x38\x36\x6c\ +\x2d\x33\x37\x2e\x34\x33\x2c\x36\x31\x2e\x38\x34\x2c\x33\x37\x2e\ +\x34\x33\x2c\x36\x31\x2e\x38\x34\x48\x35\x35\x36\x2e\x33\x38\x6c\ +\x2d\x32\x32\x2e\x35\x2d\x33\x37\x2e\x31\x37\x2d\x32\x32\x2e\x34\ +\x39\x2c\x33\x37\x2e\x31\x37\x48\x34\x38\x31\x2e\x35\x33\x4c\x35\ +\x31\x39\x2c\x33\x32\x38\x2e\x38\x37\x2c\x34\x38\x31\x2e\x35\x33\ +\x2c\x32\x36\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x31\x30\x39\x2e\x32\x39\x2c\x32\x36\x37\x76\x32\x31\x2e\x38\x35\ +\x4c\x34\x38\x2c\x33\x36\x35\x2e\x38\x33\x68\x36\x31\x2e\x33\x76\ +\x32\x34\x2e\x38\x38\x48\x31\x33\x2e\x37\x36\x56\x33\x36\x38\x2e\ +\x38\x36\x6c\x36\x31\x2e\x33\x31\x2d\x37\x36\x2e\x39\x35\x48\x31\ +\x34\x2e\x38\x38\x56\x32\x36\x37\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ +\x67\x3e\ +\x00\x00\x0c\x79\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x36\x33\x2e\x36\x37\x2c\x35\x30\ +\x33\x2e\x32\x37\x2c\x34\x35\x32\x2e\x38\x34\x2c\x33\x39\x32\x2e\ +\x34\x34\x63\x2e\x34\x34\x2d\x2e\x38\x31\x2e\x39\x31\x2d\x31\x2e\ +\x36\x31\x2c\x31\x2e\x33\x32\x2d\x32\x2e\x34\x34\x2c\x33\x2e\x36\ +\x38\x2d\x37\x2e\x34\x35\x2c\x39\x2e\x34\x39\x2d\x31\x30\x2e\x31\ +\x31\x2c\x31\x37\x2e\x34\x33\x2d\x39\x2e\x33\x39\x2c\x35\x2e\x31\ +\x32\x2e\x34\x36\x2c\x31\x30\x2e\x33\x2e\x31\x37\x2c\x31\x35\x2e\ +\x34\x34\x2e\x32\x2c\x37\x2e\x35\x39\x2c\x30\x2c\x31\x32\x2e\x37\ +\x34\x2d\x34\x2e\x36\x31\x2c\x31\x35\x2d\x31\x32\x6c\x33\x2e\x36\ +\x38\x2d\x31\x32\x2e\x31\x34\x63\x32\x2e\x36\x38\x2d\x38\x2e\x38\ +\x32\x2c\x31\x2e\x37\x32\x2d\x31\x35\x2d\x34\x2e\x38\x37\x2d\x31\ +\x39\x2e\x37\x34\x61\x31\x30\x37\x2e\x36\x35\x2c\x31\x30\x37\x2e\ +\x36\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x30\x2e\x35\x35\x2d\x36\ +\x2e\x36\x38\x63\x2d\x39\x2d\x35\x2d\x31\x32\x2e\x39\x35\x2d\x31\ +\x31\x2e\x30\x37\x2d\x31\x32\x2e\x39\x2d\x32\x33\x2e\x30\x37\x2c\ +\x30\x2d\x33\x2e\x39\x2e\x32\x31\x2d\x34\x2c\x2e\x31\x37\x2d\x31\ +\x31\x2e\x35\x32\x61\x31\x31\x2e\x33\x39\x2c\x31\x31\x2e\x33\x39\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x33\x34\x2d\x31\x30\x2e\x32\ +\x32\x63\x36\x2d\x33\x2e\x39\x2c\x31\x32\x2d\x37\x2e\x36\x35\x2c\ +\x31\x38\x2e\x32\x36\x2d\x31\x31\x2e\x31\x32\x2c\x35\x2e\x34\x34\ +\x2d\x33\x2c\x38\x2e\x31\x35\x2d\x39\x2e\x38\x34\x2c\x37\x2e\x36\ +\x34\x2d\x31\x33\x2e\x37\x2d\x31\x2d\x37\x2e\x36\x2d\x32\x2d\x31\ +\x35\x2e\x32\x2d\x34\x2e\x37\x38\x2d\x32\x32\x2e\x34\x39\x2d\x32\ +\x2e\x32\x36\x2d\x35\x2e\x39\x34\x2d\x36\x2e\x34\x33\x2d\x38\x2e\ +\x34\x38\x2d\x31\x32\x2e\x31\x35\x2d\x38\x2e\x38\x38\x2d\x36\x2e\ +\x37\x31\x2d\x2e\x34\x38\x2d\x31\x33\x2e\x34\x35\x2d\x2e\x36\x35\ +\x2d\x32\x30\x2e\x31\x38\x2d\x2e\x38\x39\x61\x31\x31\x2e\x36\x35\ +\x2c\x31\x31\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x30\x2d\ +\x35\x2e\x32\x43\x34\x35\x38\x2c\x32\x31\x38\x2c\x34\x35\x36\x2e\ +\x31\x36\x2c\x32\x31\x32\x2c\x34\x35\x32\x2e\x35\x35\x2c\x32\x30\ +\x36\x2e\x39\x32\x63\x2d\x34\x2e\x33\x33\x2d\x36\x2e\x30\x36\x2d\ +\x32\x2e\x31\x38\x2d\x31\x32\x2c\x2e\x37\x36\x2d\x31\x37\x2e\x36\ +\x33\x2c\x32\x2e\x32\x31\x2d\x34\x2e\x32\x35\x2c\x34\x2e\x38\x38\ +\x2d\x38\x2e\x32\x36\x2c\x37\x2e\x35\x2d\x31\x32\x2e\x32\x37\x2c\ +\x34\x2e\x36\x31\x2d\x37\x2e\x30\x36\x2c\x34\x2e\x38\x35\x2d\x31\ +\x34\x2e\x34\x32\x2e\x32\x36\x2d\x31\x39\x2e\x36\x33\x2d\x33\x2e\ +\x35\x35\x2d\x34\x2d\x37\x2e\x32\x35\x2d\x37\x2e\x39\x34\x2d\x31\ +\x31\x2d\x31\x31\x2e\x37\x37\x2d\x37\x2e\x37\x34\x2d\x37\x2e\x38\ +\x38\x2d\x31\x33\x2e\x37\x39\x2d\x38\x2e\x33\x2d\x32\x33\x2e\x30\ +\x37\x2d\x32\x2e\x32\x37\x61\x31\x30\x34\x2e\x30\x37\x2c\x31\x30\ +\x34\x2e\x30\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x33\x2c\x37\x2e\ +\x30\x37\x63\x2d\x31\x30\x2e\x30\x36\x2c\x34\x2e\x36\x39\x2d\x31\ +\x36\x2e\x33\x36\x2d\x33\x2e\x34\x33\x2d\x32\x34\x2e\x31\x35\x2d\ +\x37\x2e\x32\x36\x2d\x39\x2e\x33\x38\x2d\x34\x2e\x36\x31\x2d\x31\ +\x32\x2e\x31\x31\x2d\x31\x31\x2e\x37\x31\x2d\x31\x31\x2e\x32\x39\ +\x2d\x32\x31\x2e\x35\x35\x61\x31\x32\x39\x2e\x39\x2c\x31\x32\x39\ +\x2e\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x36\x2e\x33\x39\ +\x63\x2d\x2e\x31\x39\x2d\x34\x2e\x32\x31\x2d\x31\x2e\x35\x34\x2d\ +\x38\x2e\x35\x31\x2d\x35\x2e\x37\x37\x2d\x39\x2e\x38\x31\x2d\x37\ +\x2e\x37\x35\x2d\x32\x2e\x33\x37\x2d\x31\x35\x2e\x31\x38\x2d\x36\ +\x2d\x32\x33\x2e\x33\x33\x2d\x36\x2e\x38\x33\x2d\x35\x2e\x36\x2d\ +\x2e\x36\x2d\x39\x2e\x39\x34\x2c\x31\x2e\x32\x2d\x31\x32\x2e\x39\ +\x33\x2c\x36\x2e\x35\x61\x31\x38\x33\x2e\x36\x39\x2c\x31\x38\x33\ +\x2e\x36\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x30\x2e\x39\x32\x2c\ +\x31\x37\x2e\x32\x35\x63\x2d\x33\x2e\x32\x33\x2c\x34\x2e\x34\x35\ +\x2d\x37\x2e\x32\x37\x2c\x37\x2e\x31\x38\x2d\x31\x33\x2e\x35\x31\ +\x2c\x37\x4c\x32\x39\x37\x2e\x38\x33\x2c\x31\x31\x39\x61\x31\x34\ +\x2c\x31\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x31\x2e\x36\x37\x2d\ +\x36\x2c\x31\x30\x33\x2e\x37\x33\x2c\x31\x30\x33\x2e\x37\x33\x2c\ +\x30\x2c\x30\x2c\x31\x2d\x39\x2e\x35\x38\x2d\x31\x36\x2e\x36\x35\ +\x43\x32\x37\x32\x2e\x36\x36\x2c\x38\x38\x2c\x32\x36\x36\x2e\x38\ +\x39\x2c\x38\x34\x2c\x32\x36\x30\x2e\x35\x2c\x38\x36\x63\x2d\x35\ +\x2e\x38\x38\x2c\x31\x2e\x39\x32\x2d\x31\x31\x2e\x39\x34\x2c\x32\ +\x2e\x38\x35\x2d\x31\x37\x2e\x38\x34\x2c\x34\x2e\x34\x35\x2d\x36\ +\x2e\x37\x33\x2c\x31\x2e\x38\x33\x2d\x31\x31\x2e\x33\x33\x2c\x35\ +\x2e\x38\x35\x2d\x31\x31\x2e\x31\x37\x2c\x31\x33\x2e\x35\x31\x2e\ +\x31\x34\x2c\x36\x2e\x36\x37\x2d\x2e\x33\x36\x2c\x31\x33\x2e\x33\ +\x36\x2d\x2e\x35\x39\x2c\x32\x30\x61\x31\x34\x2c\x31\x34\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x36\x2e\x34\x35\x2c\x31\x31\x2e\x36\x32\x63\ +\x2d\x35\x2e\x31\x2c\x33\x2e\x34\x32\x2d\x31\x30\x2e\x38\x32\x2c\ +\x35\x2e\x37\x31\x2d\x31\x36\x2c\x39\x2e\x30\x38\x61\x31\x32\x2e\ +\x34\x31\x2c\x31\x32\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x31\x2d\x32\ +\x2e\x32\x31\x2c\x31\x2e\x31\x32\x4c\x39\x36\x2e\x37\x33\x2c\x33\ +\x36\x2e\x33\x33\x6c\x2d\x36\x30\x2e\x34\x2c\x36\x30\x2e\x34\x2c\ +\x31\x31\x31\x2e\x32\x2c\x31\x31\x31\x2e\x32\x61\x32\x31\x2e\x33\ +\x34\x2c\x32\x31\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\ +\x37\x32\x2c\x35\x2e\x31\x31\x63\x2d\x2e\x34\x39\x2c\x32\x2e\x35\ +\x38\x2d\x33\x2e\x32\x2c\x35\x2e\x31\x2d\x36\x2e\x39\x33\x2c\x35\ +\x2e\x35\x35\x2d\x38\x2e\x37\x31\x2c\x31\x2d\x31\x37\x2e\x34\x32\ +\x2e\x32\x32\x2d\x32\x36\x2e\x31\x32\x2e\x34\x39\x2d\x36\x2e\x31\ +\x33\x2e\x31\x39\x2d\x31\x30\x2c\x32\x2e\x38\x39\x2d\x31\x32\x2e\ +\x37\x31\x2c\x38\x2e\x38\x34\x2d\x32\x2e\x37\x35\x2c\x36\x2e\x31\ +\x34\x2d\x33\x2e\x31\x34\x2c\x31\x32\x2e\x37\x38\x2d\x35\x2e\x33\ +\x37\x2c\x31\x39\x2d\x32\x2e\x33\x33\x2c\x36\x2e\x34\x37\x2d\x2e\ +\x33\x37\x2c\x31\x32\x2e\x34\x38\x2c\x35\x2e\x33\x34\x2c\x31\x36\ +\x2e\x32\x31\x2c\x33\x2e\x36\x35\x2c\x32\x2e\x33\x38\x2c\x37\x2e\ +\x35\x35\x2c\x34\x2e\x33\x38\x2c\x31\x31\x2c\x37\x2c\x35\x2e\x34\ +\x2c\x34\x2c\x31\x32\x2e\x35\x35\x2c\x36\x2e\x37\x35\x2c\x31\x32\ +\x2e\x32\x32\x2c\x31\x35\x2e\x35\x37\x2d\x2e\x32\x35\x2c\x36\x2e\ +\x34\x38\x2d\x2e\x32\x33\x2c\x31\x33\x2d\x2e\x36\x34\x2c\x31\x39\ +\x2e\x34\x34\x2d\x2e\x33\x31\x2c\x34\x2e\x38\x33\x2d\x32\x2c\x38\ +\x2e\x37\x32\x2d\x36\x2e\x38\x35\x2c\x31\x31\x2e\x31\x61\x31\x36\ +\x38\x2e\x33\x36\x2c\x31\x36\x38\x2e\x33\x36\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x31\x37\x2e\x34\x2c\x31\x30\x2e\x32\x35\x63\x2d\x35\x2e\ +\x31\x32\x2c\x33\x2e\x33\x33\x2d\x38\x2e\x36\x36\x2c\x37\x2e\x37\ +\x31\x2d\x36\x2e\x38\x36\x2c\x31\x34\x2e\x36\x2c\x31\x2e\x34\x33\ +\x2c\x35\x2e\x34\x37\x2c\x33\x2c\x31\x30\x2e\x39\x2c\x34\x2e\x30\ +\x39\x2c\x31\x36\x2e\x34\x34\x2c\x31\x2e\x38\x34\x2c\x39\x2e\x34\ +\x31\x2c\x35\x2e\x37\x32\x2c\x31\x33\x2c\x31\x35\x2e\x33\x31\x2c\ +\x31\x33\x2e\x34\x36\x2c\x36\x2e\x31\x33\x2e\x32\x39\x2c\x31\x32\ +\x2e\x32\x37\x2e\x36\x39\x2c\x31\x38\x2e\x34\x2e\x36\x37\x2c\x35\ +\x2e\x34\x39\x2c\x30\x2c\x39\x2c\x32\x2e\x39\x34\x2c\x31\x31\x2e\ +\x33\x31\x2c\x37\x2e\x34\x35\x2c\x32\x2e\x38\x33\x2c\x35\x2e\x35\ +\x34\x2c\x35\x2e\x37\x32\x2c\x31\x31\x2c\x38\x2e\x38\x38\x2c\x31\ +\x36\x2e\x33\x38\x2c\x32\x2e\x33\x31\x2c\x33\x2e\x39\x33\x2c\x32\ +\x2c\x38\x2e\x30\x38\x2d\x2e\x33\x37\x2c\x31\x32\x2e\x30\x38\x2d\ +\x33\x2e\x39\x2c\x36\x2e\x35\x33\x2d\x37\x2e\x38\x39\x2c\x31\x33\ +\x2d\x31\x31\x2e\x34\x36\x2c\x31\x39\x2e\x37\x35\x2d\x32\x2e\x36\ +\x37\x2c\x35\x2d\x32\x2e\x36\x35\x2c\x31\x30\x2e\x30\x38\x2c\x31\ +\x2e\x35\x32\x2c\x31\x34\x2e\x35\x36\x2c\x34\x2c\x34\x2e\x32\x35\ +\x2c\x37\x2e\x38\x2c\x38\x2e\x36\x32\x2c\x31\x31\x2e\x37\x39\x2c\ +\x31\x32\x2e\x38\x34\x2c\x36\x2e\x38\x35\x2c\x37\x2e\x32\x36\x2c\ +\x31\x33\x2e\x33\x37\x2c\x37\x2e\x39\x34\x2c\x32\x31\x2e\x36\x39\ +\x2c\x32\x2e\x37\x34\x41\x31\x34\x36\x2e\x36\x35\x2c\x31\x34\x36\ +\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x36\x2e\x32\x2c\ +\x34\x35\x30\x63\x34\x2e\x36\x36\x2d\x32\x2e\x32\x37\x2c\x39\x2e\ +\x37\x32\x2d\x32\x2e\x38\x37\x2c\x31\x34\x2e\x32\x34\x2c\x30\x61\ +\x39\x34\x2e\x38\x33\x2c\x39\x34\x2e\x38\x33\x2c\x30\x2c\x30\x2c\ +\x30\x2c\x39\x2e\x30\x37\x2c\x35\x2e\x36\x35\x63\x39\x2e\x36\x2c\ +\x34\x2e\x37\x2c\x31\x33\x2e\x35\x38\x2c\x32\x35\x2e\x38\x34\x2c\ +\x31\x32\x2e\x33\x36\x2c\x34\x31\x2e\x35\x38\x61\x37\x2e\x31\x34\ +\x2c\x37\x2e\x31\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x2e\x34\x37\ +\x2c\x37\x2e\x36\x35\x63\x38\x2e\x36\x32\x2c\x31\x2e\x35\x33\x2c\ +\x31\x36\x2e\x34\x32\x2c\x36\x2e\x31\x36\x2c\x32\x35\x2e\x32\x34\ +\x2c\x36\x2e\x36\x35\x2c\x33\x2e\x38\x38\x2e\x32\x31\x2c\x37\x2e\ +\x31\x35\x2d\x2e\x35\x37\x2c\x39\x2e\x38\x38\x2d\x34\x2e\x31\x61\ +\x31\x35\x32\x2e\x32\x38\x2c\x31\x35\x32\x2e\x32\x38\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x39\x2e\x34\x35\x2d\x31\x34\x2e\x36\x31\x63\x34\ +\x2e\x38\x37\x2d\x38\x2e\x30\x38\x2c\x31\x30\x2e\x33\x35\x2d\x31\ +\x30\x2c\x32\x31\x2d\x31\x31\x2e\x38\x32\x2c\x33\x2e\x36\x34\x2d\ +\x2e\x36\x2c\x35\x2e\x37\x37\x2e\x30\x37\x2c\x38\x2e\x38\x39\x2e\ +\x32\x33\x2c\x37\x2e\x34\x32\x2e\x33\x39\x2c\x31\x32\x2e\x31\x34\ +\x2c\x33\x2e\x31\x38\x2c\x31\x35\x2e\x34\x34\x2c\x39\x2e\x38\x32\ +\x61\x31\x32\x38\x2e\x32\x31\x2c\x31\x32\x38\x2e\x32\x31\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x31\x30\x2e\x32\x32\x2c\x31\x37\x2e\x36\x35\ +\x63\x33\x2e\x30\x39\x2c\x34\x2e\x33\x32\x2c\x37\x2e\x33\x31\x2c\ +\x36\x2e\x34\x2c\x31\x33\x2e\x33\x37\x2c\x35\x6c\x31\x33\x2e\x38\ +\x34\x2d\x33\x2e\x33\x31\x63\x31\x30\x2e\x34\x34\x2d\x32\x2e\x35\ +\x2c\x31\x33\x2e\x36\x37\x2d\x35\x2e\x33\x2c\x31\x34\x2e\x35\x2d\ +\x31\x36\x2e\x34\x31\x2e\x35\x2d\x36\x2e\x36\x37\x2e\x38\x37\x2d\ +\x31\x33\x2e\x33\x35\x2c\x31\x2e\x37\x31\x2d\x32\x30\x2c\x2e\x34\ +\x32\x2d\x33\x2e\x32\x38\x2e\x36\x31\x2d\x36\x2e\x39\x34\x2c\x34\ +\x2e\x31\x34\x2d\x38\x2e\x39\x32\x2c\x35\x2e\x37\x2d\x33\x2e\x32\ +\x2c\x31\x31\x2e\x32\x37\x2d\x36\x2e\x36\x32\x2c\x31\x37\x2d\x39\ +\x2e\x37\x35\x61\x31\x36\x2c\x31\x36\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x31\x2e\x39\x33\x2d\x2e\x39\x4c\x35\x30\x33\x2e\x32\x37\x2c\x35\ +\x36\x33\x2e\x36\x37\x5a\x4d\x32\x39\x32\x2e\x33\x2c\x31\x36\x37\ +\x2e\x33\x34\x63\x37\x39\x2e\x32\x35\x2d\x34\x2e\x32\x2c\x31\x33\ +\x37\x2e\x37\x36\x2c\x35\x39\x2e\x31\x31\x2c\x31\x33\x37\x2e\x38\ +\x38\x2c\x31\x33\x32\x2e\x33\x32\x61\x31\x33\x36\x2e\x30\x37\x2c\ +\x31\x33\x36\x2e\x30\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x32\x2e\ +\x35\x32\x2c\x35\x37\x2e\x36\x6c\x2d\x31\x35\x2d\x31\x34\x2e\x39\ +\x35\x61\x31\x31\x37\x2e\x34\x36\x2c\x31\x31\x37\x2e\x34\x36\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x37\x2e\x39\x34\x2d\x34\x32\x2e\x36\x32\ +\x63\x30\x2d\x36\x31\x2e\x39\x2d\x34\x38\x2e\x37\x2d\x31\x31\x32\ +\x2e\x37\x35\x2d\x31\x31\x31\x2e\x32\x34\x2d\x31\x31\x32\x2e\x34\ +\x39\x61\x31\x30\x33\x2e\x36\x31\x2c\x31\x30\x33\x2e\x36\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x34\x32\x2e\x35\x39\x2c\x39\x2e\x32\x32\ +\x6c\x2d\x31\x35\x2d\x31\x35\x41\x31\x32\x33\x2c\x31\x32\x33\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x32\x39\x32\x2e\x33\x2c\x31\x36\x37\x2e\ +\x33\x34\x5a\x4d\x32\x31\x39\x2e\x31\x37\x2c\x32\x37\x39\x2e\x35\ +\x37\x2c\x33\x32\x32\x2e\x34\x34\x2c\x33\x38\x32\x2e\x38\x34\x61\ +\x38\x33\x2e\x31\x32\x2c\x38\x33\x2e\x31\x32\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x32\x32\x2e\x31\x2c\x33\x2e\x30\x39\x63\x2d\x34\x35\x2e\ +\x31\x36\x2e\x30\x36\x2d\x38\x33\x2e\x33\x31\x2d\x33\x37\x2e\x30\ +\x36\x2d\x38\x33\x2e\x36\x33\x2d\x38\x35\x2e\x37\x39\x41\x38\x38\ +\x2c\x38\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x31\x39\x2e\x31\x37\ +\x2c\x32\x37\x39\x2e\x35\x37\x5a\x6d\x31\x36\x32\x2e\x30\x38\x2c\ +\x34\x31\x2e\x32\x38\x4c\x32\x37\x37\x2e\x38\x39\x2c\x32\x31\x37\ +\x2e\x34\x39\x61\x38\x31\x2e\x33\x36\x2c\x38\x31\x2e\x33\x36\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x32\x31\x2e\x32\x31\x2d\x33\x2e\x31\x39\ +\x63\x34\x36\x2e\x30\x39\x2d\x2e\x36\x33\x2c\x38\x34\x2e\x33\x39\ +\x2c\x33\x36\x2e\x36\x31\x2c\x38\x34\x2e\x36\x39\x2c\x38\x34\x2e\ +\x37\x37\x41\x39\x31\x2e\x36\x39\x2c\x39\x31\x2e\x36\x39\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x33\x38\x31\x2e\x32\x35\x2c\x33\x32\x30\x2e\ +\x38\x35\x5a\x6d\x2d\x38\x30\x2e\x34\x36\x2c\x31\x31\x32\x63\x2d\ +\x37\x30\x2e\x32\x37\x2e\x34\x33\x2d\x31\x32\x39\x2e\x31\x35\x2d\ +\x35\x38\x2e\x37\x38\x2d\x31\x33\x30\x2d\x31\x33\x30\x2e\x36\x37\ +\x41\x31\x33\x36\x2e\x30\x35\x2c\x31\x33\x36\x2e\x30\x35\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x38\x33\x2c\x32\x34\x33\x2e\x34\x34\x6c\ +\x31\x35\x2e\x31\x36\x2c\x31\x35\x2e\x31\x35\x41\x31\x31\x33\x2e\ +\x39\x34\x2c\x31\x31\x33\x2e\x39\x34\x2c\x30\x2c\x30\x2c\x30\x2c\ +\x31\x39\x30\x2e\x34\x31\x2c\x33\x30\x30\x63\x30\x2c\x36\x32\x2e\ +\x35\x2c\x34\x39\x2e\x35\x39\x2c\x31\x31\x32\x2e\x34\x33\x2c\x31\ +\x30\x39\x2c\x31\x31\x32\x2e\x38\x41\x31\x31\x30\x2c\x31\x31\x30\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x34\x33\x2e\x35\x38\x2c\x34\x30\ +\x34\x6c\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x41\x31\x33\x30\ +\x2e\x31\x39\x2c\x31\x33\x30\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x33\x30\x30\x2e\x37\x39\x2c\x34\x33\x32\x2e\x38\x37\x5a\x22\ +\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x05\x46\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -6570,90 +5234,176 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ -\x35\x34\x30\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ -\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ -\x31\x38\x2c\x37\x37\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\ -\x34\x39\x30\x2e\x31\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\ -\x2e\x39\x2c\x31\x39\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\ -\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\ -\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\ -\x33\x2e\x31\x37\x2d\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\ -\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\ -\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\ -\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\ -\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\ -\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\ -\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\ -\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\ -\x30\x35\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\ -\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\ -\x2c\x39\x2e\x31\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\ -\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\ -\x37\x2e\x35\x37\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\ -\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\ -\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\ -\x30\x2e\x33\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\ -\x2e\x39\x33\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\ -\x36\x30\x2e\x34\x36\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\ -\x38\x37\x2c\x32\x37\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\ -\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x64\x3d\x22\x4d\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ -\x32\x31\x63\x2d\x31\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\ -\x2d\x33\x2e\x30\x37\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\ -\x43\x34\x31\x34\x2c\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\ -\x32\x32\x2c\x32\x36\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\ -\x32\x36\x30\x2e\x36\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\ -\x36\x37\x2d\x31\x32\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\ -\x31\x37\x35\x2e\x33\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\ -\x33\x35\x2c\x31\x36\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\ -\x2d\x34\x37\x2e\x39\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\ -\x2e\x39\x2d\x31\x2e\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\ -\x39\x2d\x33\x31\x2e\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\ -\x2c\x38\x39\x2e\x37\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\ -\x2e\x38\x34\x2d\x37\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\ -\x31\x2e\x36\x36\x2c\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\ -\x2c\x32\x30\x33\x2e\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\ -\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x33\x2e\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\ -\x30\x38\x2c\x39\x2e\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\ -\x2c\x34\x2e\x35\x39\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\ -\x36\x32\x2c\x33\x33\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\ -\x2c\x33\x33\x32\x2e\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x34\x2e\x39\x32\x2c\x33\x31\ +\x34\x2e\x33\x36\x63\x2d\x38\x2c\x2e\x37\x38\x2d\x31\x33\x2e\x39\ +\x33\x2d\x33\x2e\x35\x36\x2d\x31\x39\x2e\x33\x38\x2d\x38\x2e\x34\ +\x38\x2d\x35\x30\x2e\x31\x39\x2d\x34\x35\x2e\x32\x2d\x31\x30\x31\ +\x2d\x38\x39\x2e\x36\x39\x2d\x31\x35\x30\x2d\x31\x33\x36\x2e\x32\ +\x34\x2d\x31\x38\x2e\x36\x2d\x31\x37\x2e\x36\x37\x2d\x33\x37\x2e\ +\x35\x37\x2d\x33\x34\x2e\x39\x33\x2d\x35\x36\x2d\x35\x32\x2e\x38\ +\x32\x2d\x38\x2d\x37\x2e\x37\x36\x2d\x31\x32\x2e\x35\x32\x2d\x36\ +\x2e\x35\x37\x2d\x32\x30\x2c\x2e\x34\x36\x43\x32\x32\x32\x2e\x33\ +\x2c\x31\x38\x30\x2e\x34\x33\x2c\x31\x35\x35\x2e\x30\x36\x2c\x32\ +\x34\x33\x2e\x35\x36\x2c\x38\x35\x2e\x35\x39\x2c\x33\x30\x34\x63\ +\x2d\x34\x2c\x33\x2e\x34\x36\x2d\x38\x2e\x31\x2c\x37\x2e\x35\x38\ +\x2d\x31\x32\x2e\x38\x33\x2c\x39\x2e\x31\x2d\x31\x31\x2e\x36\x37\ +\x2c\x33\x2e\x37\x37\x2d\x32\x32\x2e\x36\x35\x2e\x34\x36\x2d\x32\ +\x39\x2d\x31\x30\x2e\x34\x35\x73\x2d\x32\x2d\x32\x31\x2e\x30\x36\ +\x2c\x37\x2d\x32\x39\x2e\x31\x32\x63\x33\x30\x2e\x33\x35\x2d\x32\ +\x37\x2e\x32\x35\x2c\x36\x31\x2e\x32\x32\x2d\x35\x33\x2e\x39\x31\ +\x2c\x39\x30\x2e\x38\x35\x2d\x38\x32\x51\x32\x30\x36\x2e\x35\x37\ +\x2c\x31\x33\x30\x2c\x32\x37\x33\x2c\x37\x30\x2e\x31\x38\x63\x32\ +\x32\x2e\x35\x35\x2d\x32\x30\x2e\x31\x37\x2c\x33\x31\x2e\x36\x32\ +\x2d\x32\x30\x2c\x35\x34\x2e\x32\x32\x2e\x35\x33\x2c\x33\x30\x2e\ +\x39\x31\x2c\x32\x38\x2e\x31\x32\x2c\x36\x33\x2c\x35\x34\x2e\x39\ +\x32\x2c\x39\x32\x2e\x36\x34\x2c\x38\x34\x2e\x34\x32\x2c\x34\x31\ +\x2e\x33\x36\x2c\x34\x31\x2e\x31\x39\x2c\x38\x35\x2e\x38\x33\x2c\ +\x37\x38\x2e\x35\x34\x2c\x31\x32\x38\x2e\x33\x35\x2c\x31\x31\x38\ +\x2e\x32\x37\x2c\x37\x2e\x31\x34\x2c\x36\x2e\x36\x36\x2c\x31\x34\ +\x2e\x31\x37\x2c\x31\x34\x2e\x31\x2c\x39\x2e\x33\x37\x2c\x32\x35\ +\x2e\x38\x32\x43\x35\x35\x33\x2e\x33\x34\x2c\x33\x30\x39\x2e\x36\ +\x38\x2c\x35\x34\x35\x2e\x30\x35\x2c\x33\x31\x33\x2e\x36\x2c\x35\ +\x33\x34\x2e\x39\x32\x2c\x33\x31\x34\x2e\x33\x36\x5a\x22\x2f\x3e\ +\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\ +\x35\x35\x2e\x38\x32\x20\x35\x30\x37\x2e\x33\x34\x20\x35\x34\x30\ +\x2e\x31\x33\x20\x34\x30\x37\x2e\x32\x38\x20\x35\x34\x30\x2e\x31\ +\x33\x20\x33\x37\x37\x2e\x36\x36\x20\x33\x39\x36\x2e\x31\x33\x20\ +\x33\x37\x37\x2e\x36\x36\x20\x33\x39\x36\x2e\x31\x33\x20\x34\x31\ +\x35\x2e\x31\x36\x20\x34\x37\x38\x2e\x32\x39\x20\x34\x31\x35\x2e\ +\x31\x36\x20\x33\x39\x33\x2e\x39\x38\x20\x35\x31\x35\x2e\x32\x32\ +\x20\x33\x39\x33\x2e\x39\x38\x20\x35\x34\x34\x2e\x38\x33\x20\x35\ +\x34\x33\x2e\x37\x32\x20\x35\x34\x34\x2e\x38\x33\x20\x35\x34\x33\ +\x2e\x37\x32\x20\x35\x30\x37\x2e\x33\x34\x20\x34\x35\x35\x2e\x38\ +\x32\x20\x35\x30\x37\x2e\x33\x34\x22\x2f\x3e\x3c\x70\x61\x74\x68\ \x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ -\x3d\x22\x4d\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\ -\x30\x2d\x39\x2e\x32\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\ -\x35\x2c\x39\x2e\x36\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\ -\x2c\x33\x34\x30\x2e\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\ -\x37\x38\x2c\x32\x37\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\ -\x63\x34\x38\x2e\x36\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\ -\x33\x2c\x38\x2e\x32\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\ -\x2c\x31\x30\x2e\x31\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\ -\x38\x31\x2c\x32\x34\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\ -\x2d\x38\x2e\x34\x34\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\ -\x35\x2d\x34\x35\x2e\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\ -\x34\x2d\x31\x33\x2e\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\ -\x36\x33\x2d\x34\x37\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\ -\x33\x2e\x32\x32\x2d\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\ -\x2e\x36\x35\x2d\x38\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\ -\x36\x36\x2c\x31\x37\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\ -\x2e\x39\x33\x2d\x31\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\ -\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\ -\x35\x32\x2c\x33\x38\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\ -\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\ -\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\ -\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\ -\x38\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\ -\x2e\x38\x36\x2d\x34\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\ -\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\ -\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ -\x32\x33\x2c\x33\x30\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\ -\x73\x76\x67\x3e\ -\x00\x00\x06\x23\ +\x3d\x22\x4d\x34\x34\x31\x2c\x34\x33\x36\x2e\x39\x32\x48\x33\x37\ +\x37\x2e\x31\x34\x6c\x31\x2d\x37\x34\x2e\x38\x33\x2c\x31\x32\x31\ +\x2e\x34\x34\x2d\x2e\x39\x33\x63\x31\x2e\x35\x38\x2d\x39\x2e\x36\ +\x32\x2c\x32\x2e\x35\x2d\x31\x32\x2e\x31\x38\x2c\x32\x2e\x35\x35\ +\x2d\x31\x36\x2e\x34\x31\x2e\x31\x2d\x37\x2e\x34\x39\x2d\x31\x2e\ +\x37\x33\x2d\x31\x32\x2e\x38\x36\x2d\x37\x2e\x36\x34\x2d\x31\x38\ +\x2e\x31\x2d\x36\x31\x2d\x35\x34\x2d\x31\x32\x31\x2e\x39\x32\x2d\ +\x31\x30\x38\x2d\x31\x38\x32\x2e\x30\x38\x2d\x31\x36\x32\x2e\x39\ +\x32\x2d\x31\x30\x2e\x33\x36\x2d\x39\x2e\x34\x35\x2d\x31\x34\x2e\ +\x36\x37\x2d\x39\x2e\x38\x39\x2d\x32\x35\x2e\x35\x2e\x30\x36\x2d\ +\x35\x38\x2e\x34\x34\x2c\x35\x33\x2e\x37\x2d\x31\x31\x38\x2e\x31\ +\x32\x2c\x31\x30\x36\x2d\x31\x37\x37\x2e\x33\x31\x2c\x31\x35\x38\ +\x2e\x37\x39\x2d\x36\x2e\x32\x34\x2c\x35\x2e\x35\x37\x2d\x31\x31\ +\x2e\x38\x2c\x31\x31\x2e\x30\x35\x2d\x31\x31\x2e\x36\x37\x2c\x32\ +\x31\x2e\x33\x35\x43\x39\x38\x2e\x33\x2c\x33\x37\x32\x2e\x31\x2c\ +\x31\x31\x37\x2e\x35\x36\x2c\x34\x38\x31\x2c\x31\x33\x36\x2e\x34\ +\x34\x2c\x34\x39\x32\x63\x30\x2c\x30\x2c\x35\x34\x2e\x39\x35\x2d\ +\x2e\x34\x36\x2c\x39\x34\x2e\x35\x35\x2c\x30\x2c\x31\x30\x2e\x38\ +\x2e\x31\x33\x2c\x31\x34\x2e\x37\x31\x2d\x33\x2e\x34\x2c\x31\x34\ +\x2e\x34\x39\x2d\x31\x34\x2e\x38\x33\x2d\x2e\x35\x39\x2d\x33\x30\ +\x2e\x37\x34\x2d\x2e\x34\x39\x2d\x36\x31\x2e\x35\x31\x2d\x2e\x30\ +\x38\x2d\x39\x32\x2e\x32\x36\x2e\x33\x37\x2d\x32\x37\x2e\x35\x33\ +\x2c\x32\x32\x2d\x34\x37\x2e\x35\x34\x2c\x35\x32\x2d\x34\x38\x2e\ +\x38\x39\x2c\x33\x30\x2e\x33\x34\x2d\x31\x2e\x33\x37\x2c\x35\x33\ +\x2e\x37\x35\x2c\x31\x37\x2e\x35\x31\x2c\x35\x36\x2e\x31\x36\x2c\ +\x34\x35\x2e\x35\x33\x2c\x32\x2e\x37\x34\x2c\x33\x31\x2e\x37\x37\ +\x2c\x31\x2c\x36\x33\x2e\x36\x32\x2c\x31\x2e\x31\x2c\x39\x35\x2e\ +\x34\x34\x2c\x30\x2c\x31\x31\x2e\x31\x34\x2c\x33\x2e\x36\x36\x2c\ +\x31\x35\x2e\x31\x37\x2c\x31\x34\x2e\x35\x39\x2c\x31\x35\x2c\x37\ +\x2e\x34\x36\x2d\x2e\x30\x38\x2c\x31\x35\x2e\x32\x32\x2d\x2e\x31\ +\x34\x2c\x32\x32\x2e\x39\x32\x2d\x2e\x31\x37\x5a\x22\x2f\x3e\x3c\ +\x2f\x73\x76\x67\x3e\ +\x00\x00\x05\x8b\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x34\x2e\x34\x34\x2c\x33\x31\ +\x35\x2e\x34\x39\x63\x2d\x37\x2e\x39\x34\x2e\x37\x37\x2d\x31\x33\ +\x2e\x39\x2d\x33\x2e\x35\x36\x2d\x31\x39\x2e\x33\x34\x2d\x38\x2e\ +\x34\x37\x2d\x35\x30\x2e\x30\x39\x2d\x34\x35\x2e\x31\x31\x2d\x31\ +\x30\x30\x2e\x38\x2d\x38\x39\x2e\x35\x2d\x31\x34\x39\x2e\x37\x32\ +\x2d\x31\x33\x36\x2d\x31\x38\x2e\x35\x37\x2d\x31\x37\x2e\x36\x33\ +\x2d\x33\x37\x2e\x35\x2d\x33\x34\x2e\x38\x35\x2d\x35\x35\x2e\x38\ +\x35\x2d\x35\x32\x2e\x37\x31\x2d\x38\x2d\x37\x2e\x37\x35\x2d\x31\ +\x32\x2e\x35\x2d\x36\x2e\x35\x36\x2d\x32\x30\x2c\x2e\x34\x36\x2d\ +\x36\x37\x2e\x30\x39\x2c\x36\x33\x2d\x31\x33\x34\x2e\x32\x2c\x31\ +\x32\x36\x2d\x32\x30\x33\x2e\x35\x32\x2c\x31\x38\x36\x2e\x33\x36\ +\x2d\x34\x2c\x33\x2e\x34\x36\x2d\x38\x2e\x30\x39\x2c\x37\x2e\x35\ +\x37\x2d\x31\x32\x2e\x38\x31\x2c\x39\x2e\x30\x39\x2d\x31\x31\x2e\ +\x36\x34\x2c\x33\x2e\x37\x36\x2d\x32\x32\x2e\x36\x2e\x34\x36\x2d\ +\x32\x38\x2e\x38\x39\x2d\x31\x30\x2e\x34\x33\x73\x2d\x32\x2d\x32\ +\x31\x2c\x36\x2e\x39\x33\x2d\x32\x39\x2e\x30\x36\x63\x33\x30\x2e\ +\x32\x39\x2d\x32\x37\x2e\x32\x2c\x36\x31\x2e\x30\x39\x2d\x35\x33\ +\x2e\x38\x31\x2c\x39\x30\x2e\x36\x36\x2d\x38\x31\x2e\x38\x34\x51\ +\x32\x30\x36\x2e\x37\x35\x2c\x31\x33\x31\x2e\x34\x36\x2c\x32\x37\ +\x33\x2e\x30\x39\x2c\x37\x31\x2e\x38\x63\x32\x32\x2e\x35\x31\x2d\ +\x32\x30\x2e\x31\x33\x2c\x33\x31\x2e\x35\x36\x2d\x32\x30\x2c\x35\ +\x34\x2e\x31\x32\x2e\x35\x34\x2c\x33\x30\x2e\x38\x34\x2c\x32\x38\ +\x2e\x30\x36\x2c\x36\x32\x2e\x38\x37\x2c\x35\x34\x2e\x38\x2c\x39\ +\x32\x2e\x34\x34\x2c\x38\x34\x2e\x32\x34\x2c\x34\x31\x2e\x32\x38\ +\x2c\x34\x31\x2e\x31\x2c\x38\x35\x2e\x36\x36\x2c\x37\x38\x2e\x33\ +\x38\x2c\x31\x32\x38\x2e\x30\x39\x2c\x31\x31\x38\x2c\x37\x2e\x31\ +\x32\x2c\x36\x2e\x36\x36\x2c\x31\x34\x2e\x31\x35\x2c\x31\x34\x2e\ +\x30\x38\x2c\x39\x2e\x33\x36\x2c\x32\x35\x2e\x37\x38\x43\x35\x35\ +\x32\x2e\x38\x32\x2c\x33\x31\x30\x2e\x38\x31\x2c\x35\x34\x34\x2e\ +\x35\x35\x2c\x33\x31\x34\x2e\x37\x33\x2c\x35\x33\x34\x2e\x34\x34\ +\x2c\x33\x31\x35\x2e\x34\x39\x5a\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\ +\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ +\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x35\x35\x38\x2e\x36\x37\ +\x20\x35\x34\x33\x2e\x31\x38\x20\x34\x39\x39\x2e\x32\x32\x20\x34\ +\x36\x30\x2e\x33\x34\x20\x35\x35\x35\x2e\x30\x31\x20\x33\x38\x32\ +\x2e\x39\x32\x20\x35\x30\x36\x2e\x30\x31\x20\x33\x38\x32\x2e\x39\ +\x32\x20\x34\x37\x34\x2e\x35\x31\x20\x34\x32\x39\x2e\x32\x35\x20\ +\x34\x34\x32\x2e\x33\x37\x20\x33\x38\x32\x2e\x39\x32\x20\x33\x39\ +\x31\x2e\x33\x32\x20\x33\x38\x32\x2e\x39\x32\x20\x34\x34\x37\x2e\ +\x32\x33\x20\x34\x36\x32\x2e\x30\x33\x20\x33\x38\x38\x2e\x38\x20\ +\x35\x34\x33\x2e\x31\x38\x20\x34\x34\x30\x2e\x35\x34\x20\x35\x34\ +\x33\x2e\x31\x38\x20\x34\x37\x33\x2e\x32\x35\x20\x34\x39\x33\x2e\ +\x36\x20\x35\x30\x36\x2e\x34\x37\x20\x35\x34\x33\x2e\x31\x38\x20\ +\x35\x35\x38\x2e\x36\x37\x20\x35\x34\x33\x2e\x31\x38\x22\x2f\x3e\ +\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ +\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x35\x34\x2e\x35\x2c\x34\x37\ +\x37\x2e\x38\x35\x63\x30\x2c\x31\x31\x2e\x31\x32\x2c\x33\x2e\x36\ +\x35\x2c\x31\x35\x2e\x31\x34\x2c\x31\x34\x2e\x35\x36\x2c\x31\x35\ +\x2c\x31\x34\x2e\x38\x32\x2d\x2e\x31\x37\x2c\x33\x30\x2e\x38\x35\ +\x2d\x2e\x32\x32\x2c\x34\x35\x2e\x31\x36\x2d\x2e\x32\x31\x6c\x31\ +\x34\x2e\x31\x37\x2d\x32\x38\x2d\x36\x36\x2e\x36\x31\x2d\x39\x38\ +\x2e\x34\x34\x48\x34\x35\x36\x2e\x37\x6c\x32\x35\x2e\x33\x39\x2c\ +\x33\x38\x2e\x33\x35\x73\x31\x39\x2e\x35\x38\x2d\x35\x32\x2e\x33\ +\x32\x2c\x31\x39\x2e\x36\x36\x2d\x35\x38\x2e\x37\x36\x63\x2e\x30\ +\x39\x2d\x37\x2e\x34\x38\x2d\x31\x2e\x37\x33\x2d\x31\x32\x2e\x38\ +\x33\x2d\x37\x2e\x36\x33\x2d\x31\x38\x2e\x30\x36\x43\x34\x33\x33\ +\x2e\x32\x37\x2c\x32\x37\x33\x2e\x38\x39\x2c\x33\x37\x32\x2e\x34\ +\x35\x2c\x32\x32\x30\x2c\x33\x31\x32\x2e\x34\x31\x2c\x31\x36\x35\ +\x2e\x31\x36\x63\x2d\x31\x30\x2e\x33\x33\x2d\x39\x2e\x34\x33\x2d\ +\x31\x34\x2e\x36\x34\x2d\x39\x2e\x38\x36\x2d\x32\x35\x2e\x34\x34\ +\x2e\x30\x37\x43\x32\x32\x38\x2e\x36\x34\x2c\x32\x31\x38\x2e\x38\ +\x31\x2c\x31\x36\x39\x2e\x30\x38\x2c\x32\x37\x31\x2c\x31\x31\x30\ +\x2c\x33\x32\x33\x2e\x36\x39\x63\x2d\x36\x2e\x32\x33\x2c\x35\x2e\ +\x35\x36\x2d\x31\x31\x2e\x37\x37\x2c\x31\x31\x2d\x31\x31\x2e\x36\ +\x35\x2c\x32\x31\x2e\x33\x2e\x33\x34\x2c\x32\x38\x2e\x31\x32\x2c\ +\x31\x39\x2e\x35\x36\x2c\x31\x33\x36\x2e\x38\x32\x2c\x33\x38\x2e\ +\x34\x2c\x31\x34\x37\x2e\x38\x2c\x30\x2c\x30\x2c\x35\x34\x2e\x38\ +\x34\x2d\x2e\x34\x35\x2c\x39\x34\x2e\x33\x37\x2c\x30\x2c\x31\x30\ +\x2e\x37\x37\x2e\x31\x33\x2c\x31\x34\x2e\x36\x37\x2d\x33\x2e\x33\ +\x39\x2c\x31\x34\x2e\x34\x35\x2d\x31\x34\x2e\x38\x2d\x2e\x35\x39\ +\x2d\x33\x30\x2e\x36\x38\x2d\x2e\x34\x39\x2d\x36\x31\x2e\x33\x39\ +\x2d\x2e\x30\x38\x2d\x39\x32\x2e\x30\x37\x2e\x33\x37\x2d\x32\x37\ +\x2e\x34\x38\x2c\x32\x32\x2d\x34\x37\x2e\x34\x34\x2c\x35\x31\x2e\ +\x38\x35\x2d\x34\x38\x2e\x37\x39\x2c\x33\x30\x2e\x32\x37\x2d\x31\ +\x2e\x33\x37\x2c\x35\x33\x2e\x36\x34\x2c\x31\x37\x2e\x34\x37\x2c\ +\x35\x36\x2c\x34\x35\x2e\x34\x33\x43\x33\x35\x36\x2e\x31\x34\x2c\ +\x34\x31\x34\x2e\x33\x31\x2c\x33\x35\x34\x2e\x34\x34\x2c\x34\x34\ +\x36\x2e\x31\x2c\x33\x35\x34\x2e\x35\x2c\x34\x37\x37\x2e\x38\x35\ +\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x05\x65\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -6662,171 +5412,87 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x35\x65\x36\ -\x30\x36\x31\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ -\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ -\x32\x36\x2c\x39\x34\x2e\x37\x63\x31\x31\x30\x2e\x39\x34\x2c\x31\ -\x2e\x37\x37\x2c\x31\x39\x38\x2e\x33\x39\x2c\x33\x39\x2e\x37\x37\ -\x2c\x32\x37\x31\x2e\x36\x32\x2c\x31\x31\x35\x2e\x32\x31\x2c\x31\ -\x34\x2e\x36\x39\x2c\x31\x35\x2e\x31\x33\x2c\x31\x31\x2e\x37\x32\ -\x2c\x33\x33\x2e\x36\x37\x2c\x33\x2e\x32\x34\x2c\x34\x33\x2e\x37\ -\x2d\x31\x31\x2c\x31\x33\x2e\x30\x37\x2d\x32\x38\x2e\x34\x2c\x31\ -\x32\x2e\x38\x39\x2d\x34\x31\x2e\x31\x35\x2e\x38\x33\x2d\x31\x35\ -\x2d\x31\x34\x2e\x31\x36\x2d\x33\x30\x2d\x32\x38\x2e\x35\x2d\x34\ -\x36\x2e\x32\x35\x2d\x34\x30\x2e\x37\x39\x2d\x33\x38\x2e\x31\x31\ -\x2d\x32\x38\x2e\x37\x38\x2d\x38\x30\x2e\x37\x31\x2d\x34\x36\x2e\ -\x33\x39\x2d\x31\x32\x36\x2e\x37\x38\x2d\x35\x34\x2e\x32\x33\x2d\ -\x35\x33\x2e\x36\x2d\x39\x2e\x31\x32\x2d\x31\x30\x36\x2e\x30\x39\ -\x2d\x34\x2e\x32\x38\x2d\x31\x35\x37\x2e\x32\x38\x2c\x31\x35\x2e\ -\x31\x31\x43\x31\x34\x39\x2c\x31\x39\x31\x2e\x34\x35\x2c\x31\x31\ -\x30\x2c\x32\x31\x38\x2e\x31\x32\x2c\x37\x36\x2e\x34\x2c\x32\x35\ -\x33\x2e\x38\x35\x63\x2d\x38\x2e\x35\x2c\x39\x2d\x31\x38\x2e\x35\ -\x2c\x31\x32\x2e\x32\x33\x2d\x33\x30\x2c\x37\x2e\x39\x31\x2d\x31\ -\x39\x2e\x39\x33\x2d\x37\x2e\x35\x2d\x32\x35\x2d\x33\x33\x2e\x38\ -\x32\x2d\x39\x2e\x36\x36\x2d\x35\x30\x2e\x32\x31\x61\x33\x37\x37\ -\x2e\x33\x2c\x33\x37\x37\x2e\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x35\ -\x37\x2e\x31\x38\x2d\x35\x30\x63\x34\x32\x2e\x37\x2d\x33\x30\x2e\ -\x33\x35\x2c\x38\x39\x2e\x32\x34\x2d\x35\x30\x2e\x37\x31\x2c\x31\ -\x33\x39\x2e\x36\x39\x2d\x36\x30\x43\x32\x35\x35\x2e\x34\x31\x2c\ -\x39\x37\x2e\x35\x35\x2c\x32\x37\x37\x2e\x36\x2c\x39\x36\x2e\x31\ -\x38\x2c\x32\x39\x30\x2e\x32\x36\x2c\x39\x34\x2e\x37\x5a\x22\x2f\ -\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x36\x38\x2e\x35\x31\x2c\ -\x33\x34\x38\x63\x2d\x31\x30\x2e\x39\x31\x2e\x31\x38\x2d\x31\x37\ -\x2e\x36\x39\x2d\x33\x2e\x30\x35\x2d\x32\x33\x2e\x33\x34\x2d\x39\ -\x2e\x30\x36\x2d\x33\x32\x2e\x31\x32\x2d\x33\x34\x2e\x31\x38\x2d\ -\x37\x30\x2e\x35\x39\x2d\x35\x35\x2e\x35\x2d\x31\x31\x35\x2e\x33\ -\x36\x2d\x36\x31\x2e\x39\x33\x2d\x36\x36\x2e\x38\x35\x2d\x39\x2e\ -\x35\x39\x2d\x31\x32\x35\x2e\x32\x2c\x31\x30\x2e\x37\x35\x2d\x31\ -\x37\x34\x2c\x36\x30\x2e\x39\x34\x2d\x31\x36\x2e\x32\x32\x2c\x31\ -\x36\x2e\x36\x37\x2d\x34\x30\x2e\x33\x36\x2c\x31\x31\x2e\x39\x31\ -\x2d\x34\x37\x2e\x35\x34\x2d\x31\x30\x2d\x33\x2e\x38\x38\x2d\x31\ -\x31\x2e\x38\x2d\x31\x2e\x33\x37\x2d\x32\x32\x2e\x36\x32\x2c\x36\ -\x2e\x38\x34\x2d\x33\x31\x2e\x32\x37\x2c\x34\x30\x2e\x36\x38\x2d\ -\x34\x32\x2e\x39\x31\x2c\x38\x39\x2e\x30\x36\x2d\x36\x39\x2e\x39\ -\x34\x2c\x31\x34\x35\x2e\x37\x31\x2d\x37\x38\x2e\x36\x38\x2c\x37\ -\x35\x2d\x31\x31\x2e\x35\x37\x2c\x31\x34\x32\x2e\x35\x39\x2c\x38\ -\x2c\x32\x30\x32\x2e\x33\x35\x2c\x35\x37\x2e\x39\x32\x61\x32\x30\ -\x33\x2e\x34\x37\x2c\x32\x30\x33\x2e\x34\x37\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x33\x2e\x30\x37\x2c\x32\x32\x2e\x35\x32\x63\x38\x2c\ -\x39\x2e\x32\x32\x2c\x39\x2e\x34\x33\x2c\x32\x30\x2e\x34\x36\x2c\ -\x34\x2e\x35\x36\x2c\x33\x32\x2e\x30\x38\x53\x34\x37\x37\x2e\x31\ -\x39\x2c\x33\x34\x37\x2e\x34\x31\x2c\x34\x36\x38\x2e\x35\x31\x2c\ -\x33\x34\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ -\x38\x35\x2e\x33\x36\x2c\x34\x30\x32\x2e\x37\x33\x63\x30\x2d\x39\ -\x2e\x31\x35\x2c\x33\x2e\x35\x35\x2d\x31\x36\x2e\x35\x32\x2c\x39\ -\x2e\x35\x34\x2d\x32\x32\x2e\x36\x34\x2c\x32\x33\x2e\x36\x36\x2d\ -\x32\x34\x2e\x31\x35\x2c\x35\x31\x2e\x34\x34\x2d\x33\x39\x2e\x35\ -\x2c\x38\x34\x2d\x34\x34\x2e\x30\x39\x2c\x34\x38\x2e\x32\x38\x2d\ -\x36\x2e\x38\x31\x2c\x39\x30\x2e\x31\x34\x2c\x38\x2e\x31\x39\x2c\ -\x31\x32\x35\x2e\x36\x37\x2c\x34\x33\x2e\x36\x32\x2c\x31\x30\x2e\ -\x30\x39\x2c\x31\x30\x2e\x30\x37\x2c\x31\x32\x2e\x37\x2c\x32\x33\ -\x2e\x38\x32\x2c\x37\x2e\x33\x39\x2c\x33\x35\x2e\x37\x37\x2d\x38\ -\x2e\x33\x39\x2c\x31\x38\x2e\x38\x35\x2d\x33\x30\x2e\x37\x37\x2c\ -\x32\x33\x2e\x32\x37\x2d\x34\x35\x2c\x38\x2e\x36\x2d\x31\x33\x2e\ -\x33\x2d\x31\x33\x2e\x37\x33\x2d\x32\x38\x2e\x35\x38\x2d\x32\x33\ -\x2e\x34\x35\x2d\x34\x36\x2e\x37\x35\x2d\x32\x37\x2e\x33\x33\x2d\ -\x33\x33\x2d\x37\x2e\x30\x35\x2d\x36\x31\x2e\x38\x38\x2c\x31\x2e\ -\x36\x34\x2d\x38\x36\x2e\x33\x2c\x32\x36\x2e\x35\x36\x2d\x31\x36\ -\x2e\x35\x34\x2c\x31\x36\x2e\x38\x38\x2d\x34\x32\x2c\x39\x2e\x39\ -\x33\x2d\x34\x37\x2e\x35\x37\x2d\x31\x33\x2e\x31\x37\x41\x37\x30\ -\x2e\x34\x31\x2c\x37\x30\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x31\x38\x35\x2e\x33\x36\x2c\x34\x30\x32\x2e\x37\x33\x5a\x22\x2f\ -\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x33\x37\ -\x2e\x33\x63\x2d\x32\x31\x2e\x38\x33\x2c\x30\x2d\x33\x38\x2e\x38\ -\x34\x2d\x31\x38\x2e\x33\x31\x2d\x33\x38\x2e\x38\x31\x2d\x34\x31\ -\x2e\x37\x39\x2c\x30\x2d\x32\x33\x2e\x31\x39\x2c\x31\x37\x2e\x30\ -\x36\x2d\x34\x31\x2e\x35\x31\x2c\x33\x38\x2e\x35\x36\x2d\x34\x31\ -\x2e\x34\x37\x2c\x32\x32\x2e\x30\x39\x2c\x30\x2c\x33\x39\x2c\x31\ -\x38\x2c\x33\x39\x2c\x34\x31\x2e\x34\x39\x53\x33\x32\x31\x2e\x39\ -\x31\x2c\x35\x33\x37\x2e\x32\x39\x2c\x33\x30\x30\x2c\x35\x33\x37\ -\x2e\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x31\x35\ -\x36\x2e\x37\x36\x2c\x36\x31\x2c\x33\x30\x30\x2c\x32\x35\x39\x2e\ -\x38\x2c\x34\x34\x33\x2e\x32\x35\x2c\x36\x31\x68\x35\x37\x2e\x39\ -\x33\x4c\x33\x32\x39\x2c\x33\x30\x30\x2c\x35\x30\x31\x2e\x31\x39\ -\x2c\x35\x33\x39\x48\x34\x34\x33\x2e\x32\x35\x4c\x33\x30\x30\x2c\ -\x33\x34\x30\x2e\x31\x39\x2c\x31\x35\x36\x2e\x37\x36\x2c\x35\x33\ -\x39\x48\x39\x38\x2e\x38\x31\x4c\x32\x37\x31\x2c\x33\x30\x30\x2c\ -\x39\x38\x2e\x38\x33\x2c\x36\x31\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ -\x67\x3e\ -\x00\x00\x04\x51\ -\x3c\ -\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ -\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ -\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ -\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ -\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ -\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ -\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ -\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ -\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ -\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ -\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ -\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x37\x2e\x38\x35\ -\x2c\x31\x39\x38\x2e\x36\x37\x63\x30\x2d\x38\x2e\x33\x31\x2d\x32\ -\x2e\x35\x39\x2d\x31\x34\x2e\x37\x37\x2d\x37\x2e\x37\x36\x2d\x31\ -\x39\x2e\x33\x35\x2d\x35\x2e\x31\x38\x2d\x34\x2e\x35\x38\x2d\x31\ -\x33\x2e\x30\x33\x2d\x36\x2e\x38\x37\x2d\x32\x33\x2e\x35\x35\x2d\ -\x36\x2e\x38\x37\x68\x2d\x32\x38\x76\x35\x32\x2e\x31\x39\x68\x32\ -\x38\x63\x31\x30\x2e\x35\x32\x2c\x30\x2c\x31\x38\x2e\x33\x37\x2d\ -\x32\x2e\x32\x39\x2c\x32\x33\x2e\x35\x35\x2d\x36\x2e\x38\x37\x2c\ -\x35\x2e\x31\x37\x2d\x34\x2e\x35\x38\x2c\x37\x2e\x37\x36\x2d\x31\ -\x30\x2e\x39\x34\x2c\x37\x2e\x37\x36\x2d\x31\x39\x2e\x30\x39\x5a\ -\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x35\ -\x31\x2e\x34\x36\x2c\x34\x38\x31\x2e\x37\x39\x76\x2d\x36\x2e\x37\ -\x37\x63\x30\x2d\x38\x2e\x39\x38\x2d\x37\x2e\x32\x38\x2d\x31\x36\ -\x2e\x32\x35\x2d\x31\x36\x2e\x32\x35\x2d\x31\x36\x2e\x32\x35\x68\ -\x2d\x31\x33\x2e\x35\x34\x76\x2d\x35\x34\x2e\x38\x34\x68\x31\x30\ -\x32\x2e\x39\x31\x63\x33\x32\x2e\x31\x36\x2c\x30\x2c\x35\x38\x2e\ -\x32\x33\x2d\x32\x36\x2e\x30\x37\x2c\x35\x38\x2e\x32\x33\x2d\x35\ -\x38\x2e\x32\x33\x56\x39\x36\x2e\x35\x34\x63\x30\x2d\x33\x32\x2e\ -\x31\x36\x2d\x32\x36\x2e\x30\x37\x2d\x35\x38\x2e\x32\x33\x2d\x35\ -\x38\x2e\x32\x33\x2d\x35\x38\x2e\x32\x33\x68\x2d\x32\x34\x39\x2e\ -\x31\x36\x63\x2d\x33\x32\x2e\x31\x36\x2c\x30\x2d\x35\x38\x2e\x32\ -\x33\x2c\x32\x36\x2e\x30\x37\x2d\x35\x38\x2e\x32\x33\x2c\x35\x38\ -\x2e\x32\x33\x76\x32\x34\x39\x2e\x31\x36\x63\x30\x2c\x33\x32\x2e\ -\x31\x36\x2c\x32\x36\x2e\x30\x37\x2c\x35\x38\x2e\x32\x33\x2c\x35\ -\x38\x2e\x32\x33\x2c\x35\x38\x2e\x32\x33\x68\x31\x30\x32\x2e\x39\ -\x31\x76\x35\x34\x2e\x38\x34\x68\x2d\x31\x33\x2e\x35\x34\x63\x2d\ -\x38\x2e\x39\x37\x2c\x30\x2d\x31\x36\x2e\x32\x35\x2c\x37\x2e\x32\ -\x37\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x32\x35\x76\x36\x2e\ -\x37\x37\x48\x38\x38\x2e\x37\x36\x76\x35\x36\x2e\x38\x37\x68\x31\ -\x35\x39\x2e\x37\x39\x76\x36\x2e\x37\x37\x63\x30\x2c\x38\x2e\x39\ -\x38\x2c\x37\x2e\x32\x38\x2c\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\ -\x32\x35\x2c\x31\x36\x2e\x32\x35\x68\x37\x30\x2e\x34\x31\x63\x38\ -\x2e\x39\x37\x2c\x30\x2c\x31\x36\x2e\x32\x35\x2d\x37\x2e\x32\x37\ -\x2c\x31\x36\x2e\x32\x35\x2d\x31\x36\x2e\x32\x35\x76\x2d\x36\x2e\ -\x37\x37\x68\x31\x35\x39\x2e\x37\x39\x76\x2d\x35\x36\x2e\x38\x37\ -\x68\x2d\x31\x35\x39\x2e\x37\x39\x5a\x4d\x32\x33\x32\x2e\x32\x34\ -\x2c\x33\x31\x30\x2e\x39\x33\x68\x2d\x35\x30\x2e\x34\x31\x76\x2d\ -\x31\x37\x38\x2e\x32\x68\x35\x30\x2e\x34\x31\x76\x31\x37\x38\x2e\ -\x32\x5a\x4d\x33\x31\x38\x2e\x35\x34\x2c\x33\x31\x30\x2e\x39\x33\ -\x68\x2d\x35\x30\x2e\x34\x31\x76\x2d\x31\x37\x38\x2e\x32\x68\x38\ -\x31\x2e\x34\x36\x63\x31\x36\x2e\x31\x32\x2c\x30\x2c\x33\x30\x2e\ -\x31\x32\x2c\x32\x2e\x36\x37\x2c\x34\x32\x2c\x38\x2e\x30\x32\x2c\ -\x31\x31\x2e\x38\x38\x2c\x35\x2e\x33\x35\x2c\x32\x31\x2e\x30\x34\ -\x2c\x31\x32\x2e\x39\x34\x2c\x32\x37\x2e\x35\x2c\x32\x32\x2e\x37\ -\x38\x2c\x36\x2e\x34\x35\x2c\x39\x2e\x38\x35\x2c\x39\x2e\x36\x37\ -\x2c\x32\x31\x2e\x35\x36\x2c\x39\x2e\x36\x37\x2c\x33\x35\x2e\x31\ -\x33\x73\x2d\x33\x2e\x32\x33\x2c\x32\x35\x2e\x30\x34\x2d\x39\x2e\ -\x36\x37\x2c\x33\x34\x2e\x38\x38\x63\x2d\x36\x2e\x34\x35\x2c\x39\ -\x2e\x38\x35\x2d\x31\x35\x2e\x36\x32\x2c\x31\x37\x2e\x34\x34\x2d\ -\x32\x37\x2e\x35\x2c\x32\x32\x2e\x37\x38\x2d\x31\x31\x2e\x38\x38\ -\x2c\x35\x2e\x33\x35\x2d\x32\x35\x2e\x38\x38\x2c\x38\x2e\x30\x32\ -\x2d\x34\x32\x2c\x38\x2e\x30\x32\x68\x2d\x33\x31\x2e\x30\x36\x76\ -\x34\x36\x2e\x35\x39\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\ -\x00\x00\x05\x80\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x30\x2e\x32\x35\x2c\x33\x31\ +\x33\x2e\x38\x37\x63\x2d\x37\x2e\x39\x34\x2e\x37\x37\x2d\x31\x33\ +\x2e\x39\x2d\x33\x2e\x35\x36\x2d\x31\x39\x2e\x33\x34\x2d\x38\x2e\ +\x34\x36\x2d\x35\x30\x2e\x30\x39\x2d\x34\x35\x2e\x31\x32\x2d\x31\ +\x30\x30\x2e\x38\x2d\x38\x39\x2e\x35\x31\x2d\x31\x34\x39\x2e\x37\ +\x32\x2d\x31\x33\x36\x2d\x31\x38\x2e\x35\x37\x2d\x31\x37\x2e\x36\ +\x33\x2d\x33\x37\x2e\x35\x2d\x33\x34\x2e\x38\x35\x2d\x35\x35\x2e\ +\x38\x35\x2d\x35\x32\x2e\x37\x31\x2d\x38\x2d\x37\x2e\x37\x34\x2d\ +\x31\x32\x2e\x35\x2d\x36\x2e\x35\x36\x2d\x32\x30\x2c\x2e\x34\x36\ +\x2d\x36\x37\x2e\x31\x2c\x36\x33\x2d\x31\x33\x34\x2e\x32\x31\x2c\ +\x31\x32\x36\x2d\x32\x30\x33\x2e\x35\x33\x2c\x31\x38\x36\x2e\x33\ +\x36\x2d\x34\x2c\x33\x2e\x34\x36\x2d\x38\x2e\x30\x39\x2c\x37\x2e\ +\x35\x37\x2d\x31\x32\x2e\x38\x31\x2c\x39\x2e\x30\x39\x2d\x31\x31\ +\x2e\x36\x34\x2c\x33\x2e\x37\x36\x2d\x32\x32\x2e\x36\x2e\x34\x36\ +\x2d\x32\x38\x2e\x38\x39\x2d\x31\x30\x2e\x34\x33\x73\x2d\x32\x2d\ +\x32\x31\x2c\x36\x2e\x39\x33\x2d\x32\x39\x2e\x30\x36\x63\x33\x30\ +\x2e\x32\x39\x2d\x32\x37\x2e\x32\x2c\x36\x31\x2e\x30\x39\x2d\x35\ +\x33\x2e\x38\x2c\x39\x30\x2e\x36\x36\x2d\x38\x31\x2e\x38\x34\x71\ +\x36\x34\x2e\x38\x33\x2d\x36\x31\x2e\x34\x37\x2c\x31\x33\x31\x2e\ +\x31\x38\x2d\x31\x32\x31\x2e\x31\x33\x63\x32\x32\x2e\x35\x2d\x32\ +\x30\x2e\x31\x32\x2c\x33\x31\x2e\x35\x35\x2d\x32\x30\x2c\x35\x34\ +\x2e\x31\x31\x2e\x35\x34\x2c\x33\x30\x2e\x38\x34\x2c\x32\x38\x2e\ +\x30\x36\x2c\x36\x32\x2e\x38\x37\x2c\x35\x34\x2e\x38\x2c\x39\x32\ +\x2e\x34\x34\x2c\x38\x34\x2e\x32\x35\x2c\x34\x31\x2e\x32\x38\x2c\ +\x34\x31\x2e\x30\x39\x2c\x38\x35\x2e\x36\x36\x2c\x37\x38\x2e\x33\ +\x37\x2c\x31\x32\x38\x2e\x31\x2c\x31\x31\x38\x2c\x37\x2e\x31\x32\ +\x2c\x36\x2e\x36\x35\x2c\x31\x34\x2e\x31\x34\x2c\x31\x34\x2e\x30\ +\x38\x2c\x39\x2e\x33\x35\x2c\x32\x35\x2e\x37\x37\x43\x35\x34\x38\ +\x2e\x36\x33\x2c\x33\x30\x39\x2e\x32\x2c\x35\x34\x30\x2e\x33\x36\ +\x2c\x33\x31\x33\x2e\x31\x31\x2c\x35\x33\x30\x2e\x32\x35\x2c\x33\ +\x31\x33\x2e\x38\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ +\x4d\x33\x35\x30\x2e\x33\x31\x2c\x34\x37\x36\x2e\x32\x33\x63\x30\ +\x2c\x31\x31\x2e\x31\x32\x2c\x33\x2e\x36\x35\x2c\x31\x35\x2e\x31\ +\x35\x2c\x31\x34\x2e\x35\x36\x2c\x31\x35\x2c\x31\x34\x2e\x38\x32\ +\x2d\x2e\x31\x38\x2c\x33\x30\x2e\x38\x35\x2d\x2e\x32\x33\x2c\x34\ +\x35\x2e\x31\x36\x2d\x2e\x32\x32\x6c\x38\x2d\x32\x33\x2e\x38\x38\ +\x4c\x33\x35\x35\x2e\x36\x33\x2c\x33\x36\x31\x2e\x39\x32\x68\x39\ +\x36\x2e\x38\x38\x6c\x32\x35\x2e\x33\x39\x2c\x34\x31\x73\x31\x39\ +\x2e\x35\x38\x2d\x35\x32\x2e\x33\x31\x2c\x31\x39\x2e\x36\x36\x2d\ +\x35\x38\x2e\x37\x36\x63\x2e\x30\x39\x2d\x37\x2e\x34\x37\x2d\x31\ +\x2e\x37\x32\x2d\x31\x32\x2e\x38\x33\x2d\x37\x2e\x36\x33\x2d\x31\ +\x38\x2e\x30\x36\x2d\x36\x30\x2e\x38\x35\x2d\x35\x33\x2e\x38\x36\ +\x2d\x31\x32\x31\x2e\x36\x37\x2d\x31\x30\x37\x2e\x37\x37\x2d\x31\ +\x38\x31\x2e\x37\x31\x2d\x31\x36\x32\x2e\x35\x39\x2d\x31\x30\x2e\ +\x33\x33\x2d\x39\x2e\x34\x33\x2d\x31\x34\x2e\x36\x33\x2d\x39\x2e\ +\x38\x36\x2d\x32\x35\x2e\x34\x34\x2e\x30\x37\x43\x32\x32\x34\x2e\ +\x34\x35\x2c\x32\x31\x37\x2e\x31\x39\x2c\x31\x36\x34\x2e\x39\x2c\ +\x32\x36\x39\x2e\x33\x34\x2c\x31\x30\x35\x2e\x38\x33\x2c\x33\x32\ +\x32\x2e\x30\x37\x63\x2d\x36\x2e\x32\x33\x2c\x35\x2e\x35\x36\x2d\ +\x31\x31\x2e\x37\x37\x2c\x31\x31\x2d\x31\x31\x2e\x36\x35\x2c\x32\ +\x31\x2e\x33\x2e\x33\x34\x2c\x32\x38\x2e\x31\x32\x2c\x31\x39\x2e\ +\x35\x36\x2c\x31\x33\x36\x2e\x38\x32\x2c\x33\x38\x2e\x34\x2c\x31\ +\x34\x37\x2e\x38\x2c\x30\x2c\x30\x2c\x35\x34\x2e\x38\x34\x2d\x2e\ +\x34\x35\x2c\x39\x34\x2e\x33\x37\x2c\x30\x2c\x31\x30\x2e\x37\x37\ +\x2e\x31\x33\x2c\x31\x34\x2e\x36\x37\x2d\x33\x2e\x33\x39\x2c\x31\ +\x34\x2e\x34\x35\x2d\x31\x34\x2e\x38\x2d\x2e\x35\x39\x2d\x33\x30\ +\x2e\x36\x38\x2d\x2e\x34\x39\x2d\x36\x31\x2e\x33\x38\x2d\x2e\x30\ +\x38\x2d\x39\x32\x2e\x30\x37\x2e\x33\x37\x2d\x32\x37\x2e\x34\x37\ +\x2c\x32\x32\x2d\x34\x37\x2e\x34\x34\x2c\x35\x31\x2e\x38\x35\x2d\ +\x34\x38\x2e\x37\x39\x2c\x33\x30\x2e\x32\x37\x2d\x31\x2e\x33\x37\ +\x2c\x35\x33\x2e\x36\x34\x2c\x31\x37\x2e\x34\x37\x2c\x35\x36\x2e\ +\x30\x35\x2c\x34\x35\x2e\x34\x33\x43\x33\x35\x32\x2c\x34\x31\x32\ +\x2e\x36\x39\x2c\x33\x35\x30\x2e\x32\x35\x2c\x34\x34\x34\x2e\x34\ +\x38\x2c\x33\x35\x30\x2e\x33\x31\x2c\x34\x37\x36\x2e\x32\x33\x5a\ +\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\ +\x3d\x22\x35\x36\x32\x2e\x38\x36\x20\x33\x37\x37\x2e\x37\x37\x20\ +\x35\x31\x37\x2e\x30\x35\x20\x33\x37\x37\x2e\x37\x37\x20\x34\x37\ +\x37\x2e\x33\x35\x20\x34\x34\x34\x2e\x30\x35\x20\x34\x33\x37\x2e\ +\x38\x33\x20\x33\x37\x37\x2e\x37\x37\x20\x33\x38\x37\x2e\x39\x36\ +\x20\x33\x37\x37\x2e\x37\x37\x20\x34\x35\x31\x2e\x36\x37\x20\x34\ +\x38\x34\x2e\x32\x32\x20\x34\x35\x31\x2e\x36\x37\x20\x35\x34\x34\ +\x2e\x38\x20\x34\x39\x38\x2e\x39\x31\x20\x35\x34\x34\x2e\x38\x20\ +\x34\x39\x38\x2e\x39\x31\x20\x34\x38\x34\x2e\x39\x36\x20\x35\x36\ +\x32\x2e\x38\x36\x20\x33\x37\x37\x2e\x37\x37\x22\x2f\x3e\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x0b\xda\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -6835,88 +5501,190 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\x35\x34\x30\x3b\x7d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\ -\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\x34\x39\x30\x2e\x31\ -\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\x2e\x39\x2c\x31\x39\ -\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\ -\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\ -\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x37\x2d\ -\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\ -\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\ -\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\x2e\x36\x31\x2d\x34\ -\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\ -\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\ -\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\x39\x2d\x31\x30\x36\ -\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\x38\x2e\x35\x2c\x31\ -\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\x30\x35\x2d\x38\x34\ -\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\ -\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x31\ -\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\ -\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x37\x2d\ -\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\x39\x2e\x37\x34\x2d\ -\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\x38\x30\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\x38\x63\ -\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\x2d\x35\ -\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x36\ -\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\x38\x37\x2c\x32\x37\ -\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\x32\x39\x30\x2e\x31\ -\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x35\x39\x2e\x32\x38\x2c\x34\x33\ +\x38\x2e\x36\x32\x63\x2d\x2e\x30\x39\x2d\x32\x2e\x31\x33\x2d\x2e\ +\x31\x39\x2d\x34\x2e\x32\x37\x2d\x2e\x32\x39\x2d\x36\x2e\x34\x76\ +\x2d\x2e\x37\x35\x63\x2d\x2e\x34\x36\x2d\x35\x2e\x31\x39\x2d\x31\ +\x2d\x31\x30\x2e\x34\x31\x2d\x31\x2e\x36\x36\x2d\x31\x35\x2e\x35\ +\x38\x2d\x2e\x38\x37\x2d\x35\x2e\x36\x2d\x31\x2e\x38\x38\x2d\x31\ +\x31\x2e\x30\x36\x2d\x33\x2e\x31\x33\x2d\x31\x36\x2e\x34\x38\x2d\ +\x31\x2e\x32\x33\x2d\x35\x2e\x30\x39\x2d\x32\x2e\x36\x37\x2d\x31\ +\x30\x2e\x32\x34\x2d\x34\x2e\x31\x36\x2d\x31\x35\x2d\x31\x2e\x32\ +\x2d\x33\x2e\x35\x34\x2d\x32\x2e\x34\x2d\x37\x2e\x31\x38\x2d\x33\ +\x2e\x37\x34\x2d\x31\x30\x2e\x35\x36\x2d\x2e\x38\x35\x2d\x32\x2d\ +\x31\x2e\x31\x33\x2d\x34\x2e\x36\x37\x2d\x34\x2e\x32\x2d\x34\x2e\ +\x31\x32\x6c\x2d\x38\x33\x2c\x31\x39\x2e\x34\x39\x63\x2d\x32\x2e\ +\x31\x31\x2e\x35\x32\x2d\x32\x2c\x32\x2e\x32\x34\x2d\x31\x2e\x35\ +\x2c\x33\x2e\x37\x36\x2e\x35\x37\x2c\x32\x2e\x33\x33\x2c\x31\x2c\ +\x34\x2e\x38\x33\x2c\x31\x2e\x34\x32\x2c\x37\x2e\x32\x35\x2e\x32\ +\x39\x2c\x32\x2e\x33\x33\x2e\x37\x2c\x34\x2e\x35\x2e\x39\x31\x2c\ +\x37\x2e\x30\x35\x2e\x31\x2c\x31\x2c\x2e\x32\x31\x2c\x32\x2e\x30\ +\x37\x2e\x33\x31\x2c\x33\x2e\x31\x33\x2e\x32\x37\x2c\x33\x2e\x36\ +\x34\x2e\x33\x38\x2c\x37\x2e\x32\x39\x2e\x34\x2c\x31\x31\x2d\x2e\ +\x30\x37\x2c\x31\x2e\x35\x32\x2d\x2e\x31\x33\x2c\x33\x2e\x30\x39\ +\x2d\x2e\x31\x37\x2c\x34\x2e\x36\x32\x2d\x2e\x31\x31\x2c\x32\x2e\ +\x32\x37\x2d\x2e\x32\x34\x2c\x34\x2e\x35\x39\x2d\x2e\x33\x35\x2c\ +\x36\x2e\x38\x36\x2c\x30\x2c\x2e\x31\x37\x2c\x30\x2d\x31\x2e\x33\ +\x33\x2c\x30\x2d\x2e\x36\x38\x2d\x2e\x31\x36\x2c\x31\x2e\x33\x39\ +\x2d\x2e\x33\x31\x2c\x32\x2e\x38\x2d\x2e\x34\x36\x2c\x34\x2e\x31\ +\x39\x2d\x2e\x32\x36\x2c\x31\x2e\x36\x37\x2d\x2e\x34\x35\x2c\x33\ +\x2e\x33\x39\x2d\x2e\x37\x35\x2c\x35\x2d\x2e\x31\x39\x2c\x31\x2e\ +\x30\x39\x2d\x2e\x33\x38\x2c\x32\x2e\x31\x36\x2d\x2e\x35\x36\x2c\ +\x33\x2e\x32\x31\x2d\x2e\x38\x32\x2c\x34\x2e\x31\x2d\x31\x2e\x38\ +\x32\x2c\x38\x2e\x31\x36\x2d\x33\x2c\x31\x32\x2e\x31\x35\x2d\x2e\ +\x31\x37\x2e\x34\x39\x2d\x2e\x33\x32\x2e\x39\x35\x2d\x2e\x34\x38\ +\x2c\x31\x2e\x34\x32\x48\x35\x35\x36\x2e\x34\x61\x32\x2e\x33\x37\ +\x2c\x32\x2e\x33\x37\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x35\x34\ +\x2d\x32\x76\x30\x63\x2e\x30\x39\x2d\x31\x2e\x35\x35\x2e\x31\x38\ +\x2d\x33\x2e\x31\x35\x2e\x32\x36\x2d\x34\x2e\x37\x39\x43\x35\x35\ +\x39\x2e\x33\x34\x2c\x34\x34\x37\x2e\x32\x2c\x35\x35\x39\x2e\x33\ +\x37\x2c\x34\x34\x32\x2e\x38\x38\x2c\x35\x35\x39\x2e\x32\x38\x2c\ +\x34\x33\x38\x2e\x36\x32\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x35\x32\x38\x2e\x38\x31\x2c\x33\x32\x35\x2e\x34\x32\x63\ +\x32\x2e\x32\x38\x2d\x31\x2c\x31\x2e\x32\x38\x2d\x33\x2c\x2e\x33\ +\x34\x2d\x34\x2e\x37\x32\x2d\x32\x2e\x35\x39\x2d\x35\x2e\x33\x32\ +\x2d\x35\x2e\x34\x33\x2d\x31\x30\x2e\x37\x33\x2d\x38\x2e\x34\x35\ +\x2d\x31\x35\x2e\x39\x34\x4c\x35\x31\x37\x2c\x32\x39\x38\x2e\x37\ +\x6c\x2d\x34\x2e\x31\x35\x2d\x36\x2e\x33\x39\x63\x2d\x32\x2e\x37\ +\x31\x2d\x34\x2d\x35\x2e\x37\x2d\x38\x2e\x31\x34\x2d\x38\x2e\x36\ +\x39\x2d\x31\x32\x2e\x30\x35\x61\x32\x33\x32\x2e\x37\x33\x2c\x32\ +\x33\x32\x2e\x37\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x36\x2d\x33\ +\x37\x2e\x30\x37\x63\x2d\x32\x2e\x35\x31\x2d\x32\x2d\x35\x2d\x34\ +\x2d\x37\x2e\x34\x34\x2d\x35\x2e\x38\x34\x2d\x31\x2e\x38\x2d\x31\ +\x2e\x32\x39\x2d\x33\x2e\x36\x2d\x33\x2e\x33\x36\x2d\x35\x2e\x34\ +\x38\x2d\x31\x2e\x34\x31\x6c\x2d\x33\x39\x2e\x34\x34\x2c\x34\x36\ +\x2e\x32\x63\x2d\x31\x2e\x32\x37\x2c\x31\x2e\x35\x32\x2c\x30\x2c\ +\x33\x2c\x31\x2e\x32\x39\x2c\x34\x2c\x31\x2e\x35\x37\x2c\x31\x2e\ +\x34\x37\x2c\x33\x2e\x31\x2c\x33\x2e\x31\x32\x2c\x34\x2e\x36\x39\ +\x2c\x34\x2e\x37\x32\x2c\x32\x2c\x32\x2e\x31\x39\x2c\x34\x2e\x31\ +\x2c\x34\x2e\x34\x34\x2c\x36\x2e\x30\x37\x2c\x36\x2e\x37\x39\x61\ +\x31\x36\x30\x2e\x31\x33\x2c\x31\x36\x30\x2e\x31\x33\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x31\x35\x2e\x35\x38\x2c\x32\x31\x2e\x39\x34\x6c\ +\x31\x2e\x34\x2c\x32\x2e\x34\x38\x63\x31\x2e\x32\x38\x2c\x32\x2e\ +\x31\x36\x2c\x32\x2e\x33\x36\x2c\x34\x2e\x33\x39\x2c\x33\x2e\x34\ +\x39\x2c\x36\x2e\x34\x39\x2e\x37\x37\x2c\x31\x2e\x36\x2c\x31\x2e\ +\x35\x2c\x33\x2e\x31\x33\x2c\x32\x2e\x32\x36\x2c\x34\x2e\x37\x73\ +\x31\x2e\x33\x32\x2c\x33\x2c\x31\x2e\x39\x35\x2c\x34\x2e\x34\x32\ +\x63\x2e\x37\x31\x2c\x31\x2e\x37\x37\x2c\x31\x2e\x34\x35\x2c\x33\ +\x2e\x34\x39\x2c\x32\x2e\x31\x31\x2c\x35\x2e\x32\x32\x2e\x36\x39\ +\x2c\x32\x2c\x31\x2e\x34\x34\x2c\x34\x2c\x32\x2e\x30\x38\x2c\x35\ +\x2e\x39\x73\x31\x2e\x32\x33\x2c\x33\x2e\x39\x35\x2c\x33\x2e\x36\ +\x32\x2c\x33\x2e\x31\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x32\x38\x31\x2e\x35\x36\x2c\x32\x30\x36\x2e\x31\x38\x6c\ +\x32\x2e\x31\x34\x2e\x33\x31\x63\x32\x2e\x36\x2e\x35\x2c\x35\x2e\ +\x33\x35\x2e\x39\x32\x2c\x38\x2c\x31\x2e\x35\x34\x6c\x32\x37\x2e\ +\x34\x36\x2d\x35\x34\x2e\x32\x36\x63\x2d\x34\x2e\x36\x36\x2d\x2e\ +\x38\x33\x2d\x39\x2e\x34\x34\x2d\x31\x2e\x34\x37\x2d\x31\x34\x2e\ +\x30\x38\x2d\x32\x2d\x35\x2e\x33\x39\x2d\x2e\x35\x36\x2d\x31\x30\ +\x2e\x38\x2d\x31\x2d\x31\x36\x2e\x30\x38\x2d\x31\x2e\x32\x33\x2d\ +\x32\x2d\x2e\x30\x36\x2d\x34\x2e\x32\x33\x2d\x2e\x31\x2d\x35\x2e\ +\x39\x33\x2d\x2e\x31\x34\x61\x32\x2e\x34\x33\x2c\x32\x2e\x34\x33\ +\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x2e\x34\x39\x2c\x32\x2e\x32\x38\ +\x6c\x2d\x33\x2c\x35\x30\x2e\x37\x34\x43\x32\x37\x37\x2e\x35\x34\ +\x2c\x32\x30\x35\x2e\x36\x35\x2c\x32\x37\x39\x2e\x37\x32\x2c\x32\ +\x30\x36\x2c\x32\x38\x31\x2e\x35\x36\x2c\x32\x30\x36\x2e\x31\x38\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x30\x2e\ +\x32\x34\x2c\x32\x35\x30\x2e\x33\x31\x63\x31\x2e\x30\x39\x2c\x31\ +\x2e\x30\x38\x2c\x32\x2e\x31\x36\x2c\x32\x2e\x31\x33\x2c\x33\x2e\ +\x31\x38\x2c\x33\x2e\x31\x32\x2c\x31\x2e\x37\x35\x2c\x31\x2e\x34\ +\x36\x2c\x34\x2c\x35\x2e\x35\x31\x2c\x36\x2e\x31\x36\x2c\x32\x2e\ +\x36\x36\x6c\x33\x35\x2e\x33\x31\x2d\x35\x32\x2e\x34\x33\x63\x31\ +\x2e\x34\x2d\x32\x2e\x33\x32\x2d\x2e\x34\x35\x2d\x33\x2e\x37\x31\ +\x2d\x32\x2d\x34\x2e\x38\x33\x2d\x32\x2e\x35\x33\x2d\x32\x2d\x35\ +\x2d\x33\x2e\x38\x34\x2d\x37\x2e\x37\x31\x2d\x35\x2e\x38\x34\x61\ +\x32\x30\x32\x2e\x34\x32\x2c\x32\x30\x32\x2e\x34\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x32\x30\x2e\x33\x38\x2d\x31\x32\x2e\x37\x36\x4c\ +\x33\x37\x36\x2e\x31\x2c\x32\x34\x36\x2e\x35\x38\x43\x33\x37\x37\ +\x2e\x35\x2c\x32\x34\x37\x2e\x38\x32\x2c\x33\x37\x38\x2e\x39\x2c\ +\x32\x34\x39\x2e\x31\x31\x2c\x33\x38\x30\x2e\x32\x34\x2c\x32\x35\ +\x30\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ \x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\x32\x31\x63\x2d\x31\ -\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\x2d\x33\x2e\x30\x37\ -\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\x43\x34\x31\x34\x2c\ -\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\x32\x32\x2c\x32\x36\ -\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\x32\x36\x30\x2e\x36\ -\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\x36\x37\x2d\x31\x32\ -\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\x31\x37\x35\x2e\x33\ -\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\x33\x35\x2c\x31\x36\ -\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\x2d\x34\x37\x2e\x39\ -\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\x2e\x39\x2d\x31\x2e\ -\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\x39\x2d\x33\x31\x2e\ -\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\x2c\x38\x39\x2e\x37\ -\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\x2e\x38\x34\x2d\x37\ -\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\x31\x2e\x36\x36\x2c\ -\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\x2c\x32\x30\x33\x2e\ -\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\x35\x2e\x37\x34\x2c\ -\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x33\x2e\ -\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\x30\x38\x2c\x39\x2e\ -\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\x2c\x34\x2e\x35\x39\ -\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\x36\x32\x2c\x33\x33\ -\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ -\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\ -\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\x30\x2d\x39\x2e\x32\ -\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\x35\x2c\x39\x2e\x36\ -\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\x2c\x33\x34\x30\x2e\ -\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\x37\x38\x2c\x32\x37\ -\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\x63\x34\x38\x2e\x36\ -\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\x33\x2c\x38\x2e\x32\ -\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\x2c\x31\x30\x2e\x31\ -\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\x38\x31\x2c\x32\x34\ -\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\x2d\x38\x2e\x34\x34\ -\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\x35\x2d\x34\x35\x2e\ -\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\x34\x2d\x31\x33\x2e\ -\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\x36\x33\x2d\x34\x37\ -\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\x33\x2e\x32\x32\x2d\ -\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\x2e\x36\x35\x2d\x38\ -\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\x36\x36\x2c\x31\x37\ -\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\x2e\x39\x33\x2d\x31\ -\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\x36\x39\x2e\x32\x38\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\ -\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\x30\x2d\x33\x39\x2e\ -\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\x2e\x31\x31\x2d\x34\ -\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\x38\x2c\x31\x37\x2e\ -\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\x2e\x38\x36\x2d\x34\ -\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\x2c\x33\x39\x2e\x33\ -\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\x33\x34\x2c\x34\x31\ -\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\x32\x33\x2c\x33\x30\ -\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\x95\ +\x32\x31\x35\x2e\x35\x2c\x32\x31\x32\x2e\x37\x34\x63\x32\x2e\x32\ +\x2d\x2e\x33\x36\x2c\x34\x2e\x35\x2d\x2e\x35\x35\x2c\x36\x2e\x36\ +\x37\x2d\x2e\x38\x32\x2c\x32\x2d\x2e\x31\x33\x2c\x33\x2e\x38\x38\ +\x2d\x2e\x33\x32\x2c\x35\x2e\x38\x2d\x2e\x34\x31\x6c\x34\x2e\x33\ +\x37\x2d\x2e\x31\x34\x63\x32\x2e\x31\x37\x2d\x2e\x32\x35\x2c\x36\ +\x2c\x31\x2e\x30\x36\x2c\x36\x2e\x31\x2d\x32\x2e\x35\x31\x6c\x2d\ +\x32\x2e\x37\x33\x2d\x34\x36\x2e\x30\x37\x63\x2d\x2e\x34\x39\x2d\ +\x33\x2e\x35\x35\x2d\x34\x2e\x31\x38\x2d\x31\x2e\x36\x35\x2d\x36\ +\x2e\x33\x38\x2d\x31\x2e\x35\x39\x2d\x34\x2e\x35\x38\x2e\x37\x2d\ +\x39\x2e\x32\x38\x2c\x31\x2e\x35\x39\x2d\x31\x33\x2e\x39\x2c\x32\ +\x2e\x36\x33\x2d\x34\x2e\x32\x38\x2c\x31\x2d\x38\x2e\x36\x31\x2c\ +\x32\x2e\x32\x32\x2d\x31\x32\x2e\x38\x39\x2c\x33\x2e\x35\x33\x61\ +\x31\x38\x36\x2e\x32\x37\x2c\x31\x38\x36\x2e\x32\x37\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x35\x33\x2e\x39\x33\x2c\x32\x37\x2e\x35\x33\x63\ +\x2d\x32\x2e\x33\x34\x2c\x31\x2e\x37\x39\x2d\x34\x2e\x36\x39\x2c\ +\x33\x2e\x35\x32\x2d\x36\x2e\x38\x36\x2c\x35\x2e\x33\x32\x2d\x31\ +\x2e\x35\x35\x2c\x31\x2e\x32\x37\x2d\x33\x2e\x37\x37\x2c\x32\x2e\ +\x34\x38\x2d\x32\x2e\x34\x39\x2c\x34\x2e\x38\x32\x6c\x31\x37\x2e\ +\x32\x35\x2c\x32\x38\x2e\x31\x32\x63\x31\x2e\x31\x37\x2c\x31\x2e\ +\x38\x34\x2c\x32\x2e\x39\x2e\x37\x35\x2c\x34\x2e\x33\x31\x2d\x2e\ +\x32\x35\x2c\x31\x2e\x39\x32\x2d\x31\x2e\x32\x33\x2c\x34\x2d\x32\ +\x2e\x33\x35\x2c\x36\x2d\x33\x2e\x35\x36\x2c\x32\x2e\x37\x36\x2d\ +\x31\x2e\x34\x39\x2c\x35\x2e\x36\x2d\x33\x2c\x38\x2e\x34\x39\x2d\ +\x34\x2e\x33\x35\x61\x31\x35\x31\x2e\x35\x39\x2c\x31\x35\x31\x2e\ +\x35\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x2e\x37\x38\x2d\x36\ +\x2e\x34\x32\x2c\x31\x34\x37\x2e\x32\x39\x2c\x31\x34\x37\x2e\x32\ +\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x30\x2e\x37\x39\x2d\x35\x2e\ +\x32\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x36\x39\ +\x2e\x38\x33\x2c\x32\x36\x37\x63\x2d\x33\x2e\x36\x39\x2c\x34\x2e\ +\x38\x39\x2d\x37\x2e\x31\x33\x2c\x31\x30\x2d\x31\x30\x2e\x33\x39\ +\x2c\x31\x35\x2e\x31\x37\x2d\x32\x2e\x32\x35\x2c\x33\x2e\x37\x2d\ +\x34\x2e\x35\x2c\x37\x2e\x36\x34\x2d\x36\x2e\x35\x2c\x31\x31\x2e\ +\x33\x34\x2d\x31\x2c\x32\x2d\x32\x2c\x33\x2e\x39\x35\x2d\x33\x2c\ +\x35\x2e\x39\x33\x4c\x34\x37\x2e\x33\x2c\x33\x30\x35\x63\x2d\x31\ +\x2e\x37\x38\x2c\x34\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x31\x32\x2d\ +\x35\x2c\x31\x32\x2e\x31\x35\x2d\x2e\x35\x2c\x32\x2e\x33\x2d\x33\ +\x2e\x32\x37\x2c\x35\x2e\x37\x38\x2d\x2e\x32\x35\x2c\x37\x2e\x30\ +\x39\x6c\x31\x37\x2c\x36\x2e\x32\x34\x63\x32\x2e\x39\x33\x2e\x38\ +\x38\x2c\x33\x2e\x33\x39\x2d\x32\x2e\x38\x2c\x34\x2e\x36\x31\x2d\ +\x34\x2e\x37\x2c\x31\x2e\x38\x2d\x33\x2e\x33\x39\x2c\x33\x2e\x37\ +\x33\x2d\x36\x2e\x38\x31\x2c\x35\x2e\x37\x35\x2d\x31\x30\x2e\x31\ +\x39\x4c\x37\x32\x2e\x33\x32\x2c\x33\x31\x31\x6c\x33\x2e\x32\x39\ +\x2d\x34\x2e\x38\x37\x63\x32\x2e\x31\x35\x2d\x33\x2c\x34\x2e\x35\ +\x31\x2d\x36\x2e\x31\x38\x2c\x36\x2e\x38\x37\x2d\x39\x2e\x31\x36\ +\x41\x31\x37\x39\x2e\x32\x33\x2c\x31\x37\x39\x2e\x32\x33\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x31\x30\x2e\x36\x33\x2c\x32\x36\x39\x6c\ +\x33\x2e\x39\x33\x2d\x33\x63\x31\x2e\x36\x32\x2d\x31\x2e\x34\x37\ +\x2c\x35\x2e\x37\x32\x2d\x32\x2e\x39\x2c\x33\x2e\x37\x31\x2d\x35\ +\x2e\x35\x33\x4c\x39\x38\x2e\x39\x32\x2c\x32\x33\x38\x2e\x37\x39\ +\x63\x2d\x31\x2e\x36\x36\x2d\x31\x2e\x37\x2d\x33\x2e\x33\x32\x2d\ +\x2e\x32\x31\x2d\x34\x2e\x36\x35\x2c\x31\x2e\x31\x37\x2d\x32\x2e\ +\x31\x31\x2c\x31\x2e\x39\x33\x2d\x34\x2e\x31\x32\x2c\x33\x2e\x39\ +\x33\x2d\x36\x2e\x32\x36\x2c\x36\x41\x32\x30\x37\x2e\x33\x2c\x32\ +\x30\x37\x2e\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x39\x2e\x38\x33\ +\x2c\x32\x36\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x32\x34\x31\x2e\x34\x36\x2c\x35\x32\x32\x2e\x30\x36\x63\x32\x33\ +\x2c\x31\x33\x2e\x35\x31\x2c\x35\x32\x2e\x34\x37\x2c\x32\x2e\x35\ +\x2c\x36\x34\x2e\x31\x37\x2d\x32\x35\x2e\x39\x61\x36\x36\x2e\x35\ +\x39\x2c\x36\x36\x2e\x35\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x2e\ +\x36\x35\x2d\x31\x32\x2e\x31\x31\x6c\x34\x38\x2e\x35\x33\x2d\x32\ +\x34\x37\x2e\x36\x37\x2c\x31\x38\x2e\x34\x38\x2d\x39\x34\x2e\x33\ +\x32\x2c\x31\x31\x2e\x34\x35\x2d\x35\x38\x2e\x34\x33\x63\x31\x2e\ +\x33\x33\x2d\x36\x2e\x38\x2d\x33\x2e\x32\x37\x2d\x31\x31\x2e\x34\ +\x33\x2d\x37\x2e\x38\x38\x2d\x31\x31\x2e\x34\x33\x2d\x32\x2e\x37\ +\x2c\x30\x2d\x35\x2e\x34\x31\x2c\x31\x2e\x35\x39\x2d\x36\x2e\x39\ +\x34\x2c\x35\x2e\x32\x36\x6c\x2d\x32\x33\x2e\x33\x2c\x35\x36\x4c\ +\x32\x31\x39\x2e\x34\x33\x2c\x34\x34\x36\x2e\x36\x31\x43\x32\x30\ +\x37\x2e\x37\x39\x2c\x34\x37\x34\x2e\x36\x2c\x32\x31\x37\x2e\x36\ +\x35\x2c\x35\x30\x38\x2e\x33\x38\x2c\x32\x34\x31\x2e\x34\x36\x2c\ +\x35\x32\x32\x2e\x30\x36\x5a\x6d\x32\x32\x2e\x38\x31\x2d\x37\x37\ +\x2e\x38\x37\x63\x31\x33\x2c\x30\x2c\x32\x33\x2e\x35\x32\x2c\x31\ +\x30\x2e\x34\x39\x2c\x32\x33\x2e\x35\x32\x2c\x32\x35\x2e\x37\x36\ +\x2c\x30\x2c\x32\x37\x2e\x35\x2d\x34\x37\x2c\x32\x37\x2e\x37\x31\ +\x2d\x34\x37\x2c\x30\x43\x32\x34\x30\x2e\x37\x36\x2c\x34\x35\x34\ +\x2e\x36\x38\x2c\x32\x35\x31\x2e\x32\x39\x2c\x34\x34\x34\x2e\x31\ +\x39\x2c\x32\x36\x34\x2e\x32\x37\x2c\x34\x34\x34\x2e\x31\x39\x5a\ +\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x06\x00\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -6925,172 +5693,96 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ -\x35\x34\x30\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ -\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ -\x31\x38\x2c\x37\x37\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\ -\x34\x39\x30\x2e\x31\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\ -\x2e\x39\x2c\x31\x39\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\ -\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\ -\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\ -\x33\x2e\x31\x37\x2d\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\ -\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\ -\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\ -\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\ -\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\ -\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\ -\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\ -\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\ -\x30\x35\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\ -\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\ -\x2c\x39\x2e\x31\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\ -\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\ -\x37\x2e\x35\x37\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\ -\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\ -\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\ -\x30\x2e\x33\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\ -\x2e\x39\x33\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\ -\x36\x30\x2e\x34\x36\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\ -\x38\x37\x2c\x32\x37\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\ -\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\ -\x20\x64\x3d\x22\x4d\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ -\x32\x31\x63\x2d\x31\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\ -\x2d\x33\x2e\x30\x37\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\ -\x43\x34\x31\x34\x2c\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\ -\x32\x32\x2c\x32\x36\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\ -\x32\x36\x30\x2e\x36\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\ -\x36\x37\x2d\x31\x32\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\ -\x31\x37\x35\x2e\x33\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\ -\x33\x35\x2c\x31\x36\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\ -\x2d\x34\x37\x2e\x39\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\ -\x2e\x39\x2d\x31\x2e\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\ -\x39\x2d\x33\x31\x2e\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\ -\x2c\x38\x39\x2e\x37\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\ -\x2e\x38\x34\x2d\x37\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\ -\x31\x2e\x36\x36\x2c\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\ -\x2c\x32\x30\x33\x2e\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\ -\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x33\x2e\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\ -\x30\x38\x2c\x39\x2e\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\ -\x2c\x34\x2e\x35\x39\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\ -\x36\x32\x2c\x33\x33\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\ -\x2c\x33\x33\x32\x2e\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\ -\x3d\x22\x4d\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\ -\x30\x2d\x39\x2e\x32\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\ -\x35\x2c\x39\x2e\x36\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\ -\x2c\x33\x34\x30\x2e\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\ -\x37\x38\x2c\x32\x37\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\ -\x63\x34\x38\x2e\x36\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\ -\x33\x2c\x38\x2e\x32\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\ -\x2c\x31\x30\x2e\x31\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\ -\x38\x31\x2c\x32\x34\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\ -\x2d\x38\x2e\x34\x34\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\ -\x35\x2d\x34\x35\x2e\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\ -\x34\x2d\x31\x33\x2e\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\ -\x36\x33\x2d\x34\x37\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\ -\x33\x2e\x32\x32\x2d\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\ -\x2e\x36\x35\x2d\x38\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\ -\x36\x36\x2c\x31\x37\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\ -\x2e\x39\x33\x2d\x31\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\ -\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\ -\x35\x32\x2c\x33\x38\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\ -\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\ -\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\ -\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\ -\x38\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\ -\x2e\x38\x36\x2d\x34\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\ -\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\ -\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ -\x32\x33\x2c\x33\x30\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\ -\x73\x76\x67\x3e\ -\x00\x00\x04\xfe\ -\x3c\ -\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ -\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ -\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ -\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ -\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ -\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ -\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ -\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ -\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ -\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ -\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ -\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x39\x38\x2e\x38\x33\ -\x2c\x32\x31\x36\x2e\x38\x31\x68\x2d\x31\x39\x37\x2e\x36\x36\x63\ -\x2d\x31\x36\x2e\x36\x39\x2c\x30\x2d\x32\x30\x2e\x35\x35\x2c\x33\ -\x35\x2e\x36\x35\x2d\x31\x38\x2e\x30\x37\x2c\x35\x32\x2e\x31\x36\ -\x6c\x32\x31\x2e\x35\x31\x2c\x31\x32\x32\x2e\x32\x35\x63\x32\x2e\ -\x30\x31\x2c\x31\x33\x2e\x33\x35\x2c\x31\x33\x2e\x34\x38\x2c\x32\ -\x33\x2e\x32\x33\x2c\x32\x36\x2e\x39\x39\x2c\x32\x33\x2e\x32\x33\ -\x68\x31\x2e\x36\x32\x63\x2d\x35\x2e\x38\x37\x2c\x30\x2d\x31\x30\ -\x2e\x36\x32\x2c\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\x2c\x31\ -\x30\x2e\x36\x32\x73\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2c\ -\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\x63\x2d\x35\x2e\x38\ -\x37\x2c\x30\x2d\x31\x30\x2e\x36\x32\x2c\x34\x2e\x37\x36\x2d\x31\ -\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\x73\x34\x2e\x37\x36\x2c\ -\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\ -\x32\x63\x2d\x35\x2e\x38\x37\x2c\x30\x2d\x31\x30\x2e\x36\x32\x2c\ -\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\ -\x73\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\ -\x32\x2c\x31\x30\x2e\x36\x32\x68\x33\x34\x2e\x39\x31\x76\x38\x33\ -\x2e\x34\x39\x68\x36\x33\x2e\x37\x35\x76\x2d\x38\x33\x2e\x34\x39\ -\x68\x33\x34\x2e\x39\x31\x63\x35\x2e\x38\x37\x2c\x30\x2c\x31\x30\ -\x2e\x36\x32\x2d\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2d\x31\ -\x30\x2e\x36\x32\x73\x2d\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\ -\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\x63\x35\x2e\x38\ -\x37\x2c\x30\x2c\x31\x30\x2e\x36\x32\x2d\x34\x2e\x37\x36\x2c\x31\ -\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\x73\x2d\x34\x2e\x37\x36\ -\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\ -\x36\x32\x63\x35\x2e\x38\x37\x2c\x30\x2c\x31\x30\x2e\x36\x32\x2d\ -\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\ -\x73\x2d\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\ -\x36\x32\x2d\x31\x30\x2e\x36\x32\x68\x31\x2e\x36\x32\x63\x31\x33\ -\x2e\x35\x31\x2c\x30\x2c\x32\x34\x2e\x39\x38\x2d\x39\x2e\x38\x38\ -\x2c\x32\x36\x2e\x39\x39\x2d\x32\x33\x2e\x32\x33\x6c\x32\x31\x2e\ -\x35\x31\x2d\x31\x32\x32\x2e\x32\x35\x63\x32\x2e\x34\x38\x2d\x31\ -\x36\x2e\x35\x2d\x31\x2e\x33\x38\x2d\x35\x32\x2e\x31\x36\x2d\x31\ -\x38\x2e\x30\x37\x2d\x35\x32\x2e\x31\x36\x5a\x22\x2f\x3e\x0a\x20\ -\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x35\x37\x2e\x32\x2c\x35\ -\x38\x2e\x30\x35\x68\x2d\x34\x2e\x38\x31\x6c\x2d\x31\x2e\x31\x33\ -\x2d\x33\x2e\x38\x63\x30\x2d\x38\x2e\x38\x2d\x37\x2e\x31\x34\x2d\ -\x31\x35\x2e\x39\x34\x2d\x31\x35\x2e\x39\x34\x2d\x31\x35\x2e\x39\ -\x34\x68\x2d\x37\x30\x2e\x36\x34\x63\x2d\x38\x2e\x38\x2c\x30\x2d\ -\x31\x35\x2e\x39\x34\x2c\x37\x2e\x31\x33\x2d\x31\x35\x2e\x39\x34\ -\x2c\x31\x35\x2e\x39\x34\x6c\x2d\x31\x2e\x31\x33\x2c\x33\x2e\x38\ -\x68\x2d\x34\x2e\x38\x31\x63\x2d\x32\x32\x2e\x32\x36\x2c\x30\x2d\ -\x34\x30\x2e\x33\x31\x2c\x31\x38\x2e\x30\x35\x2d\x34\x30\x2e\x33\ -\x31\x2c\x34\x30\x2e\x33\x31\x76\x31\x30\x37\x2e\x34\x34\x68\x31\ -\x39\x35\x2e\x30\x33\x76\x2d\x31\x30\x37\x2e\x34\x34\x63\x30\x2d\ -\x32\x32\x2e\x32\x36\x2d\x31\x38\x2e\x30\x35\x2d\x34\x30\x2e\x33\ -\x31\x2d\x34\x30\x2e\x33\x31\x2d\x34\x30\x2e\x33\x31\x5a\x4d\x32\ -\x34\x32\x2e\x32\x2c\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\ -\x31\x39\x76\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\x39\x76\ -\x34\x30\x2e\x35\x32\x5a\x4d\x32\x36\x38\x2e\x35\x36\x2c\x31\x31\ -\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\x31\x39\x76\x2d\x34\x30\x2e\ -\x35\x32\x68\x31\x36\x2e\x31\x39\x76\x34\x30\x2e\x35\x32\x5a\x4d\ -\x32\x39\x34\x2e\x39\x32\x2c\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\ -\x36\x2e\x31\x39\x76\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\ -\x39\x76\x34\x30\x2e\x35\x32\x5a\x4d\x33\x32\x31\x2e\x32\x37\x2c\ -\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\x31\x39\x76\x2d\x34\ -\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\x39\x76\x34\x30\x2e\x35\x32\ -\x5a\x4d\x33\x34\x37\x2e\x36\x33\x2c\x31\x31\x34\x2e\x37\x31\x68\ -\x2d\x31\x36\x2e\x31\x39\x76\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\ -\x2e\x31\x39\x76\x34\x30\x2e\x35\x32\x5a\x4d\x33\x37\x33\x2e\x39\ -\x39\x2c\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\x31\x39\x76\ -\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\x39\x76\x34\x30\x2e\ -\x35\x32\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\x95\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x33\x34\x2c\x33\x31\x32\x2e\x33\ +\x34\x63\x2d\x37\x2e\x39\x32\x2e\x37\x37\x2d\x31\x33\x2e\x38\x36\ +\x2d\x33\x2e\x35\x35\x2d\x31\x39\x2e\x33\x2d\x38\x2e\x34\x34\x2d\ +\x35\x30\x2d\x34\x35\x2d\x31\x30\x30\x2e\x35\x39\x2d\x38\x39\x2e\ +\x33\x33\x2d\x31\x34\x39\x2e\x34\x31\x2d\x31\x33\x35\x2e\x36\x39\ +\x2d\x31\x38\x2e\x35\x33\x2d\x31\x37\x2e\x35\x39\x2d\x33\x37\x2e\ +\x34\x32\x2d\x33\x34\x2e\x37\x38\x2d\x35\x35\x2e\x37\x33\x2d\x35\ +\x32\x2e\x36\x2d\x37\x2e\x39\x35\x2d\x37\x2e\x37\x33\x2d\x31\x32\ +\x2e\x34\x38\x2d\x36\x2e\x35\x35\x2d\x31\x39\x2e\x39\x33\x2e\x34\ +\x36\x2d\x36\x37\x2c\x36\x32\x2e\x38\x38\x2d\x31\x33\x33\x2e\x39\ +\x33\x2c\x31\x32\x35\x2e\x37\x35\x2d\x32\x30\x33\x2e\x31\x31\x2c\ +\x31\x38\x36\x2d\x34\x2c\x33\x2e\x34\x35\x2d\x38\x2e\x30\x37\x2c\ +\x37\x2e\x35\x35\x2d\x31\x32\x2e\x37\x38\x2c\x39\x2e\x30\x37\x2d\ +\x31\x31\x2e\x36\x32\x2c\x33\x2e\x37\x34\x2d\x32\x32\x2e\x35\x36\ +\x2e\x34\x35\x2d\x32\x38\x2e\x38\x34\x2d\x31\x30\x2e\x34\x31\x73\ +\x2d\x32\x2d\x32\x31\x2c\x36\x2e\x39\x32\x2d\x32\x39\x43\x38\x32\ +\x2c\x32\x34\x34\x2e\x35\x36\x2c\x31\x31\x32\x2e\x37\x34\x2c\x32\ +\x31\x38\x2c\x31\x34\x32\x2e\x32\x34\x2c\x31\x39\x30\x51\x32\x30\ +\x37\x2c\x31\x32\x38\x2e\x36\x38\x2c\x32\x37\x33\x2e\x31\x35\x2c\ +\x36\x39\x2e\x31\x36\x63\x32\x32\x2e\x34\x36\x2d\x32\x30\x2e\x30\ +\x39\x2c\x33\x31\x2e\x34\x39\x2d\x32\x30\x2c\x35\x34\x2c\x2e\x35\ +\x33\x2c\x33\x30\x2e\x37\x38\x2c\x32\x38\x2c\x36\x32\x2e\x37\x34\ +\x2c\x35\x34\x2e\x36\x39\x2c\x39\x32\x2e\x32\x36\x2c\x38\x34\x2e\ +\x30\x37\x2c\x34\x31\x2e\x31\x39\x2c\x34\x31\x2c\x38\x35\x2e\x34\ +\x38\x2c\x37\x38\x2e\x32\x32\x2c\x31\x32\x37\x2e\x38\x33\x2c\x31\ +\x31\x37\x2e\x37\x38\x2c\x37\x2e\x31\x2c\x36\x2e\x36\x34\x2c\x31\ +\x34\x2e\x31\x31\x2c\x31\x34\x2c\x39\x2e\x33\x33\x2c\x32\x35\x2e\ +\x37\x32\x43\x35\x35\x32\x2e\x33\x2c\x33\x30\x37\x2e\x36\x38\x2c\ +\x35\x34\x34\x2e\x30\x35\x2c\x33\x31\x31\x2e\x35\x38\x2c\x35\x33\ +\x34\x2c\x33\x31\x32\x2e\x33\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ +\x64\x3d\x22\x4d\x31\x33\x34\x2e\x38\x33\x2c\x33\x37\x38\x2e\x36\ +\x32\x2c\x36\x31\x2c\x35\x34\x35\x2e\x37\x39\x68\x34\x38\x2e\x32\ +\x34\x6c\x31\x33\x2d\x33\x32\x2e\x34\x38\x48\x31\x39\x33\x2e\x32\ +\x6c\x31\x33\x2c\x33\x32\x2e\x34\x38\x68\x34\x39\x2e\x32\x6c\x2d\ +\x37\x34\x2d\x31\x36\x37\x2e\x31\x37\x5a\x6d\x31\x2e\x34\x37\x2c\ +\x39\x39\x2e\x38\x33\x4c\x31\x35\x37\x2e\x37\x35\x2c\x34\x32\x35\ +\x6c\x32\x31\x2e\x34\x35\x2c\x35\x33\x2e\x34\x35\x5a\x22\x2f\x3e\ +\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\ +\x36\x31\x2e\x31\x32\x20\x33\x37\x38\x2e\x36\x32\x20\x34\x31\x33\ +\x2e\x38\x33\x20\x33\x37\x38\x2e\x36\x32\x20\x34\x31\x33\x2e\x38\ +\x33\x20\x35\x34\x35\x2e\x37\x39\x20\x35\x34\x30\x2e\x38\x38\x20\ +\x35\x34\x35\x2e\x37\x39\x20\x35\x34\x30\x2e\x38\x38\x20\x35\x30\ +\x38\x2e\x33\x20\x34\x36\x31\x2e\x31\x32\x20\x35\x30\x38\x2e\x33\ +\x20\x34\x36\x31\x2e\x31\x32\x20\x33\x37\x38\x2e\x36\x32\x22\x2f\ +\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\ +\x33\x31\x36\x2e\x39\x20\x35\x30\x38\x2e\x33\x20\x33\x31\x36\x2e\ +\x39\x20\x33\x37\x38\x2e\x36\x32\x20\x32\x36\x39\x2e\x36\x32\x20\ +\x33\x37\x38\x2e\x36\x32\x20\x32\x36\x39\x2e\x36\x32\x20\x35\x34\ +\x35\x2e\x37\x39\x20\x33\x39\x36\x2e\x36\x37\x20\x35\x34\x35\x2e\ +\x37\x39\x20\x33\x39\x36\x2e\x36\x37\x20\x35\x30\x38\x2e\x33\x20\ +\x33\x31\x36\x2e\x39\x20\x35\x30\x38\x2e\x33\x22\x2f\x3e\x3c\x70\ +\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ +\x22\x20\x64\x3d\x22\x4d\x31\x32\x33\x2e\x37\x32\x2c\x33\x36\x33\ +\x2e\x35\x34\x68\x36\x36\x2e\x32\x31\x6c\x35\x33\x2e\x37\x34\x2c\ +\x31\x32\x31\x2e\x33\x35\x63\x31\x2e\x35\x2d\x32\x2e\x33\x32\x2c\ +\x32\x2e\x31\x32\x2d\x35\x2e\x36\x35\x2c\x32\x2d\x31\x30\x2e\x33\ +\x34\x2d\x2e\x35\x38\x2d\x33\x30\x2e\x36\x32\x2d\x2e\x34\x38\x2d\ +\x36\x31\x2e\x32\x36\x2d\x2e\x30\x38\x2d\x39\x31\x2e\x38\x38\x2e\ +\x33\x37\x2d\x32\x37\x2e\x34\x32\x2c\x32\x31\x2e\x39\x33\x2d\x34\ +\x37\x2e\x33\x34\x2c\x35\x31\x2e\x37\x34\x2d\x34\x38\x2e\x36\x39\ +\x2c\x33\x30\x2e\x32\x31\x2d\x31\x2e\x33\x37\x2c\x35\x33\x2e\x35\ +\x33\x2c\x31\x37\x2e\x34\x34\x2c\x35\x35\x2e\x39\x33\x2c\x34\x35\ +\x2e\x33\x34\x2c\x32\x2e\x37\x33\x2c\x33\x31\x2e\x36\x34\x2c\x31\ +\x2c\x36\x33\x2e\x33\x36\x2c\x31\x2e\x31\x2c\x39\x35\x2e\x30\x35\ +\x2c\x30\x2c\x31\x31\x2e\x30\x39\x2c\x33\x2e\x36\x34\x2c\x31\x35\ +\x2e\x31\x31\x2c\x31\x34\x2e\x35\x32\x2c\x31\x35\x2c\x39\x2e\x35\ +\x2d\x2e\x31\x31\x2c\x31\x39\x2e\x34\x39\x2d\x2e\x31\x37\x2c\x32\ +\x39\x2e\x32\x2d\x2e\x31\x39\x56\x33\x36\x33\x2e\x35\x34\x68\x37\ +\x37\x2e\x34\x36\x76\x39\x34\x63\x31\x33\x2e\x38\x32\x2d\x33\x38\ +\x2e\x35\x35\x2c\x32\x35\x2e\x35\x37\x2d\x39\x39\x2e\x34\x35\x2c\ +\x32\x35\x2e\x37\x36\x2d\x31\x31\x34\x2e\x39\x34\x2e\x31\x2d\x37\ +\x2e\x34\x36\x2d\x31\x2e\x37\x32\x2d\x31\x32\x2e\x38\x2d\x37\x2e\ +\x36\x31\x2d\x31\x38\x43\x34\x33\x33\x2c\x32\x37\x30\x2e\x38\x33\ +\x2c\x33\x37\x32\x2e\x33\x2c\x32\x31\x37\x2c\x33\x31\x32\x2e\x33\ +\x38\x2c\x31\x36\x32\x2e\x33\x32\x63\x2d\x31\x30\x2e\x33\x31\x2d\ +\x39\x2e\x34\x31\x2d\x31\x34\x2e\x36\x2d\x39\x2e\x38\x34\x2d\x32\ +\x35\x2e\x33\x39\x2e\x30\x37\x2d\x35\x38\x2e\x32\x2c\x35\x33\x2e\ +\x34\x37\x2d\x31\x31\x37\x2e\x36\x34\x2c\x31\x30\x35\x2e\x35\x31\ +\x2d\x31\x37\x36\x2e\x35\x38\x2c\x31\x35\x38\x2e\x31\x33\x2d\x36\ +\x2e\x32\x32\x2c\x35\x2e\x35\x36\x2d\x31\x31\x2e\x37\x35\x2c\x31\ +\x31\x2d\x31\x31\x2e\x36\x32\x2c\x32\x31\x2e\x32\x36\x2e\x31\x33\ +\x2c\x31\x31\x2e\x31\x2c\x33\x2e\x32\x31\x2c\x33\x34\x2e\x37\x36\ +\x2c\x38\x2c\x36\x30\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x01\x82\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -7099,90 +5791,249 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ -\x35\x34\x30\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ -\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ -\x31\x38\x2c\x37\x37\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\ -\x34\x39\x30\x2e\x31\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\ -\x2e\x39\x2c\x31\x39\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\ -\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\ -\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\ -\x33\x2e\x31\x37\x2d\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\ -\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\ -\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\ -\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\ -\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\ -\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\ -\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\ -\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\ -\x30\x35\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\ -\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\ -\x2c\x39\x2e\x31\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\ -\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\ -\x37\x2e\x35\x37\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\ -\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\ -\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\ -\x30\x2e\x33\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\ -\x2e\x39\x33\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\ -\x36\x30\x2e\x34\x36\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\ -\x38\x37\x2c\x32\x37\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\ -\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x64\x3d\x22\x4d\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ -\x32\x31\x63\x2d\x31\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\ -\x2d\x33\x2e\x30\x37\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\ -\x43\x34\x31\x34\x2c\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\ -\x32\x32\x2c\x32\x36\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\ -\x32\x36\x30\x2e\x36\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\ -\x36\x37\x2d\x31\x32\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\ -\x31\x37\x35\x2e\x33\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\ -\x33\x35\x2c\x31\x36\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\ -\x2d\x34\x37\x2e\x39\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\ -\x2e\x39\x2d\x31\x2e\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\ -\x39\x2d\x33\x31\x2e\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\ -\x2c\x38\x39\x2e\x37\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\ -\x2e\x38\x34\x2d\x37\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\ -\x31\x2e\x36\x36\x2c\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\ -\x2c\x32\x30\x33\x2e\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\ -\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x33\x2e\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\ -\x30\x38\x2c\x39\x2e\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\ -\x2c\x34\x2e\x35\x39\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\ -\x36\x32\x2c\x33\x33\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\ -\x2c\x33\x33\x32\x2e\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\ -\x3d\x22\x4d\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\ -\x30\x2d\x39\x2e\x32\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\ -\x35\x2c\x39\x2e\x36\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\ -\x2c\x33\x34\x30\x2e\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\ -\x37\x38\x2c\x32\x37\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\ -\x63\x34\x38\x2e\x36\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\ -\x33\x2c\x38\x2e\x32\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\ -\x2c\x31\x30\x2e\x31\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\ -\x38\x31\x2c\x32\x34\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\ -\x2d\x38\x2e\x34\x34\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\ -\x35\x2d\x34\x35\x2e\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\ -\x34\x2d\x31\x33\x2e\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\ -\x36\x33\x2d\x34\x37\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\ -\x33\x2e\x32\x32\x2d\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\ -\x2e\x36\x35\x2d\x38\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\ -\x36\x36\x2c\x31\x37\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\ -\x2e\x39\x33\x2d\x31\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\ -\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\ -\x35\x32\x2c\x33\x38\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\ -\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\ -\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\ -\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\ -\x38\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\ -\x2e\x38\x36\x2d\x34\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\ -\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\ -\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ -\x32\x33\x2c\x33\x30\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\ -\x73\x76\x67\x3e\ -\x00\x00\x0a\x70\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x65\x32\x66\x32\x36\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x78\x3d\x22\x32\x36\x34\x2e\x34\x37\x22\x20\x79\x3d\ +\x22\x33\x32\x2e\x33\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x37\ +\x31\x2e\x30\x36\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x33\ +\x35\x2e\x33\x36\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x33\x30\x30\x20\x2d\ +\x31\x32\x34\x2e\x32\x36\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x34\ +\x35\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x32\x36\x34\x2e\ +\x34\x37\x22\x20\x79\x3d\x22\x33\x32\x2e\x33\x32\x22\x20\x77\x69\ +\x64\x74\x68\x3d\x22\x37\x31\x2e\x30\x36\x22\x20\x68\x65\x69\x67\ +\x68\x74\x3d\x22\x35\x33\x35\x2e\x33\x36\x22\x20\x74\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\ +\x28\x37\x32\x34\x2e\x32\x36\x20\x33\x30\x30\x29\x20\x72\x6f\x74\ +\x61\x74\x65\x28\x31\x33\x35\x29\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ +\x3e\ +\x00\x00\x02\x52\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x35\x66\x62\x62\x34\x36\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x35\x37\x36\x2e\x38\x39\x2c\x31\x33\ +\x35\x63\x2d\x2e\x36\x38\x2e\x38\x36\x2d\x31\x2e\x32\x31\x2c\x31\ +\x2e\x36\x34\x2d\x31\x2e\x38\x34\x2c\x32\x2e\x33\x32\x2d\x31\x2c\ +\x31\x2e\x31\x2d\x32\x2e\x31\x2c\x32\x2e\x31\x33\x2d\x33\x2e\x31\ +\x36\x2c\x33\x2e\x31\x39\x51\x33\x38\x35\x2e\x37\x31\x2c\x33\x32\ +\x36\x2e\x36\x31\x2c\x31\x39\x39\x2e\x36\x31\x2c\x35\x31\x32\x2e\ +\x38\x34\x63\x2d\x34\x2e\x32\x38\x2c\x34\x2e\x32\x39\x2d\x36\x2e\ +\x34\x2c\x35\x2e\x32\x38\x2d\x31\x31\x2e\x33\x33\x2e\x33\x31\x51\ +\x31\x30\x37\x2e\x35\x37\x2c\x34\x33\x31\x2e\x37\x36\x2c\x32\x36\ +\x2e\x32\x32\x2c\x33\x35\x31\x63\x2d\x33\x2e\x36\x39\x2d\x33\x2e\ +\x36\x37\x2d\x34\x2e\x35\x2d\x35\x2e\x34\x35\x2d\x2e\x32\x31\x2d\ +\x39\x2e\x35\x34\x71\x32\x32\x2e\x31\x38\x2d\x32\x31\x2e\x31\x35\ +\x2c\x34\x33\x2e\x33\x36\x2d\x34\x33\x2e\x33\x35\x63\x34\x2e\x36\ +\x33\x2d\x34\x2e\x38\x34\x2c\x37\x2e\x32\x36\x2d\x34\x2e\x37\x39\ +\x2c\x31\x31\x2e\x39\x34\x2d\x2e\x30\x35\x2c\x33\x35\x2e\x37\x35\ +\x2c\x33\x36\x2e\x31\x36\x2c\x37\x31\x2e\x38\x34\x2c\x37\x32\x2c\ +\x31\x30\x37\x2e\x36\x32\x2c\x31\x30\x38\x2e\x31\x32\x2c\x33\x2e\ +\x38\x39\x2c\x33\x2e\x39\x32\x2c\x35\x2e\x38\x32\x2c\x34\x2e\x34\ +\x34\x2c\x31\x30\x2e\x30\x38\x2e\x31\x36\x51\x33\x35\x38\x2e\x32\ +\x38\x2c\x32\x34\x36\x2e\x36\x39\x2c\x35\x31\x37\x2e\x37\x35\x2c\ +\x38\x37\x2e\x32\x34\x63\x34\x2e\x36\x39\x2d\x34\x2e\x37\x2c\x37\ +\x2e\x31\x38\x2d\x35\x2e\x31\x39\x2c\x31\x32\x2d\x2e\x31\x31\x2c\ +\x31\x33\x2e\x32\x39\x2c\x31\x34\x2c\x32\x37\x2e\x32\x32\x2c\x32\ +\x37\x2e\x34\x36\x2c\x34\x30\x2e\x38\x38\x2c\x34\x31\x2e\x31\x35\ +\x43\x35\x37\x32\x2e\x36\x39\x2c\x31\x33\x30\x2e\x33\x37\x2c\x35\ +\x37\x34\x2e\x36\x35\x2c\x31\x33\x32\x2e\x35\x37\x2c\x35\x37\x36\ +\x2e\x38\x39\x2c\x31\x33\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ +\x3e\ +\x00\x00\x0b\x5d\ +\x00\ +\x00\x38\xfa\x78\x9c\xed\x9b\xcb\x8e\x5c\xc7\x0d\x86\x5f\x65\x30\ +\xd9\xb2\xa8\x22\xeb\xee\x68\x04\x28\xda\xc6\x2b\xef\xbc\x09\x0e\ +\x8e\x64\x5b\xc0\xf8\x12\x8d\x60\xd9\x08\xf2\xee\xc1\xc7\xea\x91\ +\xa5\x20\x11\xe0\x38\x0b\x07\xe9\x85\xaa\xbb\xe7\x5c\x8a\xc5\xfb\ +\x4f\x52\x4f\x1f\x7e\xfc\xfa\xe6\xf5\xcb\xbb\xdb\x3f\x1f\x3f\xbf\ +\x7a\xf3\x17\xbb\xbd\x79\x79\xbc\x3d\xd2\x77\xc7\xb7\xaf\x2e\x7f\ +\xbb\xb1\xdb\x9b\x9f\xbe\xbd\xff\xee\xe1\xee\xf6\x9b\xb7\x6f\x7f\ +\xf8\xec\xc9\x93\x77\xef\xde\xe9\xbb\xa2\xdf\xbf\xf9\xfa\x89\xe7\ +\x9c\x9f\x3c\xfc\xf8\xf5\xed\xcd\x8f\xaf\x5f\xbd\xfb\xd3\xf7\x3f\ +\xdd\xdd\xe6\x9b\x7c\xd3\x73\xfc\xbb\x7d\xf6\xf4\xe5\xab\xaf\x1e\ +\x9e\x3d\x7d\x78\xfb\xf3\xfd\xab\x67\x7a\xde\x3f\x24\xfb\xdb\x57\ +\xaf\xef\xef\x3f\xfb\xc3\xab\xfc\x2a\xbf\xfc\xea\x8f\x7f\x7f\xfa\ +\x64\x5f\x7c\xfa\x64\xdf\xfa\xc3\xf1\xf6\x9b\x9b\xf3\xfe\x78\x78\ +\xb8\xbb\x8d\xfb\x6f\x6f\x5e\xde\xdd\x7e\x6e\x5e\xb4\x57\x29\x7d\ +\x6a\xab\x87\x0d\xed\x26\x7b\xcd\x92\xc5\x24\xa7\xa2\xde\x4e\xd3\ +\xb6\xd2\xd4\xd6\x93\xab\x25\xab\xea\x3d\x2d\x6d\x25\xd9\xd0\xd9\ +\x8e\x51\x74\xb9\xec\x35\x9e\x4b\x23\x55\x2d\x7e\xa6\xa2\x2d\xb9\ +\x7a\x49\x43\xab\x27\xd3\x31\x92\x99\xe4\xc3\xcc\xb5\x15\xb9\x7c\ +\xf0\x4c\x4e\x96\xb5\x0e\x69\xda\xe7\x99\xba\xd6\x26\x35\x99\x69\ +\x93\xa2\xb5\x27\xeb\x3a\x2d\xb9\xe6\x95\xca\x5e\xbc\xa4\xae\xb9\ +\xa7\xae\x6d\xa4\xa5\x56\xd2\xd2\xe9\xfb\x42\x61\xb7\xa2\x5e\xd3\ +\xd0\x92\x4c\x6d\xf2\x2a\x73\x71\x28\x68\x6a\x55\x9a\xce\xce\x96\ +\x26\x53\xe7\x4c\xd6\xd4\xc4\x74\x56\x5e\xdf\xc4\x35\xcf\xd4\xd5\ +\x5d\x7d\xa5\xc5\x2b\x5d\x6b\x4b\x95\xad\xab\x76\x98\xe1\xdc\xc0\ +\x93\xae\x2d\x8e\x06\x51\xb5\xa6\xaa\xcd\x52\xd3\x91\xa6\x8e\x9e\ +\x1a\x37\x57\x1d\x4d\x32\x1c\xb3\xc4\x0b\x37\x03\xf9\x35\xb4\x96\ +\xa4\xa5\xc6\xe1\xa1\xdb\x20\x74\x53\xe6\x2b\x41\x4f\xdd\xbb\x67\ +\x5e\x58\xd8\xc3\x46\xec\xd9\x93\xf1\xbb\xa9\x0f\x31\x2d\x2d\x4d\ +\xed\x2e\x4d\x4b\xbc\xc2\xfa\x61\xc5\xb4\x77\xb9\x7c\x6c\x79\x5a\ +\xd1\x3a\xd3\xd0\x59\xcf\x02\x79\xa6\x93\x67\x32\xf2\x1a\x6b\x3f\ +\x3d\xb5\x4e\x2d\x9e\xaa\xae\xca\xef\xa5\x4b\x1b\x34\xcf\xa6\xde\ +\x52\xd7\x51\xd9\x75\xa6\xa9\x13\xa6\x57\x64\xaa\x0b\xe9\x8c\xe4\ +\x1c\x9d\x83\x34\x5e\xd4\x5a\x6a\x5a\xca\xb1\x74\x2e\x89\x65\xab\ +\x47\x55\xab\x1c\xa2\xac\xd3\xb8\xbd\xea\x70\x71\x04\x28\x55\xad\ +\xb3\x59\x5d\x5b\x08\x55\x1b\xc2\xb2\xd4\xd1\xca\xa5\x33\x28\xe8\ +\x12\x64\xa8\x5f\x8e\xa4\xb5\x88\x67\x38\xa5\x65\x88\xeb\x82\xa9\ +\x12\xba\x87\x4a\x15\xde\xe3\x55\x2c\x35\xa9\x5a\x82\x93\xbc\xa1\ +\x6c\x22\x24\x94\x05\x36\xb6\xd0\xa7\x90\xd5\xe0\x40\xa5\xa7\xca\ +\x29\x2b\x3a\xb8\x10\xc7\x50\x1f\x41\x5f\xe2\xaf\x0b\xc9\x4f\x78\ +\x3f\xab\x6c\xf5\x46\x51\x04\x53\x48\x45\x97\x09\xdc\xee\x4d\xcc\ +\xd5\x1c\x3e\x95\x2e\x85\xd3\xbb\xce\x22\x3d\x24\x2a\x96\x13\xa7\ +\xac\xda\xa6\x14\x59\x5a\xa6\x34\x1d\x53\xac\xaa\x0d\x99\xf0\xa2\ +\x70\xcd\x65\x60\x2e\xce\x0d\x66\xa2\x86\x8d\x38\x57\xe6\xd6\xbc\ +\x52\xd8\xa8\xac\xd4\x75\xd5\xc3\xb2\xf6\x25\x7b\x0d\x13\x93\x20\ +\x74\x9e\xd8\x43\x53\xc3\x70\xd0\x33\x0b\x03\x6b\xc8\x1c\x33\x6a\ +\x3a\xc3\xe8\x6a\x9a\xba\x8a\x4c\xed\x8d\xdb\x8a\x07\x81\xc9\xd4\ +\x5d\x56\x70\x41\x57\x85\xfd\x61\x75\x70\x1b\x37\x21\x4b\xab\xc3\ +\x49\x87\x94\x3a\x64\x7b\x88\x89\xf5\xed\x75\x93\x32\xb4\x1a\x77\ +\x0c\x8e\xaf\x63\x2f\xfb\xd2\x92\x8a\x2a\x2f\x24\x11\xcb\x45\x77\ +\x4d\xd4\xc7\x59\x75\x9a\xb6\x26\x33\x39\x0f\x55\xec\xb9\x8c\xc3\ +\xca\x8c\xd3\xee\x8f\xfd\xa2\x19\x07\x2b\x6a\xeb\xf4\xd0\xe8\xf0\ +\x2e\xa9\x05\x85\x39\x35\xf8\xef\xda\x07\x74\xe4\xc9\x99\x4d\x6c\ +\x6a\x46\x65\xdc\xa5\xa8\x2f\x31\x14\xa6\x48\x55\x47\x37\xeb\x84\ +\xf0\x75\xac\x21\x6b\x93\x8b\xa7\x0c\x2f\x76\x26\x88\x1e\x71\x70\ +\x24\x66\xb0\x6e\x34\xb1\x0e\x17\x3a\x4a\x19\x47\x5d\x70\xcf\x0a\ +\x1b\x0d\x6c\xaf\xb5\x63\xe2\xb4\x64\xaf\x9b\x72\xcb\xd8\x64\xd3\ +\x7a\x0e\xb5\x70\x39\x9c\x1f\x77\x53\x83\xa8\xa1\x13\x75\x1d\x28\ +\xc3\xc2\xad\xad\x82\xca\x60\xc1\xe8\x1c\xda\x14\x3a\xd3\xa5\x4a\ +\xc1\x24\x96\xf6\xa4\x2e\xd6\x12\xe7\xca\xa8\xb5\x49\xbf\x88\x1b\ +\xbb\x2a\x03\x63\xe1\x8c\x25\x34\xb7\xe2\x17\x5b\x42\xa2\x61\x61\ +\xb8\x4e\x5e\x39\x07\xbc\x88\x3d\x64\xc0\x2a\xa4\x7c\x2c\xbe\xc5\ +\xf2\x28\xdd\xd1\xa4\x9e\xb0\x51\x6d\x86\x9c\xf0\x25\x62\x4d\x7b\ +\xd5\x1e\xac\x74\xfe\x30\xf0\x4d\x8e\x6d\x2e\xb8\xdf\x51\x7b\x57\ +\xeb\x30\x86\x6f\x1c\x13\x3f\x27\x05\x1d\x19\xea\xca\xfe\xcb\x70\ +\xb8\x32\xd5\x70\x30\xeb\x51\x11\x50\x0d\x71\xed\x15\x57\x1b\xbc\ +\x8d\x60\x65\x9c\xa5\xae\x63\xf2\xc7\x58\x76\xc0\x89\x2b\x43\xa7\ +\x9d\x9a\xf1\x36\xab\x6a\xad\xd2\xd3\x7e\x60\xb2\xc7\x2c\xf0\x71\ +\x2b\xb9\x58\x8e\xd8\x58\x90\xd7\x5c\xc8\xeb\xd1\xa1\x41\x09\x4a\ +\x63\x67\x53\x33\x29\x8a\x7f\x2a\x8b\xcd\x0a\x94\x4f\x0e\x9e\xd7\ +\xd1\x86\xb6\x21\x7b\xdd\x34\xb8\xce\x8e\x35\xcd\x13\xc3\x6a\x61\ +\xf7\xb8\xd0\x30\xb1\xf0\xe4\x5c\xb6\x99\xaa\xe4\x34\x45\x3d\x19\ +\x56\x8a\x9b\x32\xa4\x13\xa6\x89\x97\xd7\xba\x50\xf5\x06\x4b\x6d\ +\x1e\xad\x05\x45\xb1\x3e\xfa\xdc\x11\xa7\x5d\x44\xe5\xbe\x9d\x63\ +\x65\x1b\xa4\x8c\x1c\x23\x4a\xd9\xa6\xd8\x60\x78\x1e\x9c\x02\x59\ +\xcd\x86\x78\xb8\x30\x5d\x3a\x1c\x0c\x45\xc0\xd4\x89\xae\x3c\x3b\ +\x51\x1a\x5c\x84\x77\xe2\x4b\xe7\xec\xe1\x0d\x67\x43\x82\xc3\x8e\ +\x8e\x61\xc6\x72\xc9\x11\xb4\x37\xf5\x7a\xa6\x88\x3f\xf8\xc3\x88\ +\xc7\x11\x33\x23\x1e\x13\xd1\xda\x61\x61\xf9\x97\x14\xc1\x70\x4b\ +\xea\xfd\xc4\x23\x57\x3c\x21\xa1\x78\x74\x9c\x0f\x91\x11\xeb\xe4\ +\x60\x78\x15\xa4\xef\x88\x28\xa2\x58\x41\x69\x23\x89\xc0\x1d\xc7\ +\x96\x17\x83\x24\x39\xc0\xbb\x19\xa1\x34\xc1\x1a\xb4\x05\xb7\x6c\ +\xf0\xd8\x2c\x22\x87\x6b\x23\x37\xe8\xae\xdd\x09\x02\xb0\x3c\x2f\ +\x28\x26\x74\x91\x0b\x55\x1c\x7f\xa4\x10\x33\x85\x34\x32\xe1\xa3\ +\xe8\x58\xc7\xea\x78\x99\xbd\x3e\x1e\x9e\xd0\x51\xb4\xae\x13\x0f\ +\x8e\x1a\xe7\x41\xc6\xc1\xa5\xb1\x90\xf2\xd0\x76\x78\x17\xbf\xc4\ +\x6e\xb2\x8d\x95\xd4\xe6\x99\x26\x3e\x61\xa7\x09\x91\x3f\xa1\x44\ +\x64\x48\x45\xd6\x73\xb3\x01\x3f\x2e\x1f\x17\xcf\x89\x1e\x74\x29\ +\x73\xb0\x99\x61\x23\x18\x4b\xc7\xcd\x93\x9a\xc5\x17\x23\x9f\x9a\ +\x95\x00\x1a\x62\x0b\x81\x5a\xb2\x45\x50\x6c\x9a\xe7\x81\xaf\x0a\ +\x87\xf5\x5e\xa3\x9c\x4c\x60\xd6\x08\x28\x25\x2e\xa4\x11\x2e\x3e\ +\xb4\x72\x7e\xf9\xb9\xcd\x8a\x2e\x94\x92\xcf\x06\x6f\x4d\x2c\x67\ +\x92\x95\xda\x71\x76\xfc\x70\x54\xd8\x74\x26\xb5\xd4\x7a\xaa\x8d\ +\x44\xc8\x72\xdd\x59\x51\xdf\x6a\x61\x90\x57\x97\x92\x99\xb5\x99\ +\x56\xd5\x39\xa5\x92\xc8\xf1\xdd\xba\x58\x46\x5f\x5f\xb0\x9d\xf8\ +\x8c\x64\xae\x64\xf4\xbb\x14\xc4\x20\xbf\x10\xf2\xe5\xed\x93\x67\ +\x4f\xcf\xd7\x6f\xce\xfb\x57\xff\x94\x10\x9f\x3f\xdd\xdd\x72\x9f\ +\xb7\xdb\x9b\xf3\xe7\xbb\x5b\x77\x52\xa1\xdb\x9b\x37\x77\xb7\x03\ +\x06\xf0\xe0\xbf\xc9\xa3\x8b\x4d\x4c\xaf\x15\x7c\xce\x99\x3c\xe3\ +\x2c\x73\x82\x95\x91\xe2\x95\x91\xca\xda\x7f\xf3\x88\x35\xd6\x39\ +\x78\x09\x3f\x55\xba\x0e\xe7\x3b\x39\x0f\xaa\x5e\x06\xa1\xdd\x30\ +\xe4\xf8\x3e\x84\x1b\xed\x8b\x52\x16\x67\x89\x5d\xe4\xa3\x2d\xbf\ +\xfc\x04\x6d\x75\x87\xb4\x32\xc9\x83\xce\xe4\x93\xbc\xc7\x23\xac\ +\x77\xf2\xbf\x54\xb1\x8d\xb4\x96\x96\x54\xcb\xe1\xe1\xbb\xf7\xfa\ +\xa8\x78\x2d\xb2\x08\xc3\xea\x0a\x19\xd4\x20\xef\xb3\x48\xc7\x16\ +\xa6\xda\x22\x0d\x5b\x7e\xd8\x8a\x64\x27\xd6\xfd\xb0\x9b\x68\xbf\ +\x8f\x44\x0c\x0f\x17\x96\x1b\xe6\xee\x9d\x24\x1a\x3d\x6c\xa8\x3b\ +\x5c\x1a\x3b\x31\x42\x9c\xe1\xf2\x70\x88\x97\x74\xa6\xa0\xa2\xf1\ +\x1e\x02\x92\xd6\x79\xa6\x1d\x15\x4a\x4f\xda\xcb\x25\x1d\x24\x5a\ +\x64\xb5\x72\x9f\xb0\xd9\x12\x10\xc4\x20\xd4\x48\x23\x31\xba\x2a\ +\xf0\x7f\x21\x05\xab\xe2\x55\xdb\x7d\xc2\xa9\xa8\xd7\xa3\x98\x16\ +\x89\x65\x7b\x9b\x8e\xcb\x33\xa2\xb7\x1b\xa1\x71\xaf\xfb\x58\x98\ +\xa0\x18\x91\xcc\xc2\x33\xee\x75\x5f\x2b\xf8\x1b\xf6\xce\x82\x60\ +\x03\x58\x90\xe6\x63\x77\x36\x8e\x5e\x48\x16\xf7\xba\xa3\x25\x64\ +\x8d\x93\x04\x4c\xdc\xc5\x17\xe1\x1b\x01\x19\x2a\x4e\xb8\xc7\xf9\ +\x88\x03\xc5\x92\x17\x9c\x5b\xcb\xc4\x89\xe2\x32\x79\x65\xf2\x7d\ +\xdb\x80\x7e\x1c\x6c\x21\x29\x25\x03\xa9\xa0\x11\x5c\x08\xa1\xa1\ +\x8a\x55\x29\x17\x6f\x3e\xba\xd4\xf0\xb9\x53\x6d\xbe\xa8\x25\xa3\ +\x66\x35\x4f\xcd\x5c\x18\x9c\xac\xac\x26\x1f\x29\xcf\xa7\xb4\xec\ +\x03\x24\x59\xd7\x15\x49\x06\x92\xbc\xc2\xc8\x2b\x8c\x1c\xf6\xa2\ +\x2f\x7c\x8d\x95\x26\x40\x8d\x92\xa5\x83\xe9\xc5\xbc\x69\x1d\xe7\ +\x15\x47\x7e\x1a\x47\x06\x4a\xbc\xe2\xc8\x2b\x8e\xbc\xe2\xc8\xdf\ +\x8e\x23\xc7\x7b\x1c\x69\x1b\x48\xb6\xff\x17\x20\xd9\xff\x25\x90\ +\x6c\x57\x20\x79\x05\x92\x9f\x04\x92\xb9\x7d\x84\x24\xed\x3f\x47\ +\x92\xe5\x7f\x1e\x49\xda\x34\x75\x29\xb5\x69\x1f\xa7\xce\x91\xa8\ +\xae\xd8\xee\x23\x8c\x4b\xe5\x0d\x7c\x7e\x18\x35\x3b\xcc\x35\x3e\ +\x2e\x6e\x63\x51\xce\xc7\x11\x75\x40\x48\x0d\x28\x52\x1f\x21\x10\ +\x80\x0f\x60\xd9\x5f\x58\xa5\x49\x23\xa5\x0d\xb1\xde\x70\x25\xa5\ +\x47\xc1\xf7\xc3\xdd\x3f\x45\x65\xc9\x13\xd9\x15\x53\x5f\x87\x35\ +\x5e\xb6\xd7\xfc\xde\x57\xb6\x1e\xad\xa9\xc0\x4e\x14\x31\x29\x1a\ +\xe1\xfe\x8a\x8e\xf1\xdc\x28\x85\x53\x41\x89\x8f\x5d\x41\x71\xf6\ +\x1e\xe2\x73\x9d\x94\x79\x12\xe5\x07\x2c\x07\x22\x77\x8f\xcb\x4c\ +\x1a\xe5\xe6\x5d\x1a\x2a\xda\xa3\xb6\x0e\x92\x2e\x00\xdc\x68\x7e\ +\x70\xd7\x3e\x67\xa3\xb4\x14\xf5\x53\x35\xbf\xf7\x28\xd5\x1c\xc3\ +\x65\x5c\x1a\x68\xd4\x9e\x3d\xbc\xd8\xb8\xcf\x49\x73\x3f\x3a\x85\ +\x59\x32\xc7\xf2\x58\xbe\xec\x9a\x1b\xe5\xa5\xfa\x82\x13\x7b\x11\ +\x6f\xfc\x92\x92\xbb\x2e\xf1\x9a\x03\x8f\x7d\xc0\x8c\x4f\x16\x09\ +\x56\xc3\x25\x73\x7b\x5e\x87\x61\x0b\x80\xda\xf8\xb8\x70\xcd\x13\ +\x9d\x82\xfa\xd7\xd4\xa9\x1a\x35\x4a\x6b\x89\x72\x3b\xed\xa0\xa1\ +\xc3\x8f\x42\x61\x59\xf6\xba\x65\x4e\x01\x7a\x90\xcc\x55\xb8\x17\ +\xcb\x7e\x19\x45\xa2\x60\x01\x55\xf0\x75\x59\xb7\x7c\x22\xf4\x38\ +\x35\x77\xea\xb1\x7b\xd9\x3c\x59\x5a\xa9\x0b\xaf\x33\xda\x76\x23\ +\x70\x3d\x98\x98\xc7\x77\x0f\x84\x03\x68\x5f\x47\xed\x04\x9e\xbd\ +\x3e\xca\xdc\x29\xce\xbb\x78\xc7\x7a\xf7\xba\x89\x8c\x48\x45\x07\ +\xea\xac\x34\xe1\x64\xc8\x68\x74\x8f\xb8\x87\xf6\x09\xfd\x3e\x69\ +\x73\x4b\xb8\x50\xe6\x1d\x1e\xc5\xf8\x28\xf0\x2f\x0a\x0a\x4e\x5d\ +\xb9\xb3\x44\x5f\xaf\x60\x94\x11\x7e\xa2\x74\x40\x81\xb1\x6b\xff\ +\xa2\xe5\x12\xbd\x21\x7a\x99\x43\x3e\xe2\xf8\x15\x59\xff\xba\x1e\ +\xed\x15\x59\x5f\x91\xf5\x15\x59\xff\xc6\x0e\xed\x15\x59\x5f\x3b\ +\xb4\xd7\x0e\xed\x7f\xa9\x43\x7b\x45\xd6\x57\x64\x7d\x6d\xd1\xfe\ +\x9e\x91\x75\xeb\x83\x84\xdb\xe9\xa0\xad\x33\xf5\x91\x3a\xa3\x78\ +\x8c\xe7\x24\xcb\x2d\x79\xf4\xa4\x93\xe5\x45\xf3\xb0\x82\x53\x63\ +\x1c\xcd\xc1\x17\x7b\xc2\x8f\xb6\xa8\xd5\x7b\xca\x65\x3a\xa3\xb7\ +\x18\xcd\x7f\xba\xfc\x8c\x9b\x01\xc8\x68\x67\x32\x85\xe0\x54\x97\ +\x00\x84\x5a\x0b\x15\xa9\x80\x8a\x6a\xe5\xa0\xe7\x3a\x64\xaf\x8f\ +\x58\xaf\x51\x20\xab\xe3\xbc\xdc\xc4\x28\x59\x4c\xa4\x50\xf2\x54\ +\x06\xc6\x72\xbf\x0f\x84\x74\xf2\x7a\x70\x13\x33\x21\x1a\x83\x29\ +\xa3\x6f\xe4\x31\xe3\x93\x01\x9b\x29\xd1\x82\x05\x86\x38\x51\x9e\ +\xde\x27\x48\x6c\xf1\x52\x8b\xc6\x65\x14\xee\x5c\x20\x0d\x84\x56\ +\xbb\xcc\x1a\x33\x74\x97\xce\x44\x06\xcf\x37\xa3\xb3\x4a\x7b\x77\ +\x17\xde\xe8\x4c\xc2\x83\x16\x4d\xe0\x2a\x65\x4f\xbd\x45\x27\x95\ +\x82\x1a\x62\x8d\x69\x2a\x8b\x89\x82\x18\x5b\xd1\xb1\x5e\xb4\x78\ +\x88\x41\x01\x69\xd3\x62\x46\xa7\x4c\x75\xf9\x48\x20\x9f\x42\x40\ +\x03\xf4\x2a\xee\x74\x35\xa3\xa1\x4b\x5b\xd6\x26\xf3\x79\x01\x15\ +\x49\x6e\xf0\xe2\xed\x45\x0b\x3c\xe8\xd5\x00\x6c\x79\x8a\xf7\x2e\ +\x63\x00\x48\x7d\x14\x86\x22\x69\xae\xf6\x68\xb1\xf6\xf7\x78\x93\ +\x13\x3f\x37\xab\xdc\x76\xf9\xd8\x82\xe1\xc8\x25\xab\xcf\x17\x7c\ +\xf3\x41\xb9\x62\x6c\x8c\xe2\x31\x3e\xf1\x21\x61\x9f\x3a\x80\xaf\ +\xd0\x1e\xeb\x8d\xe1\x0d\x6a\xad\xb0\x81\xba\x29\xfd\x5c\x94\xa4\ +\xcc\xe4\x23\x0a\x16\x79\x85\x84\xf6\xc7\xa6\xa3\xe9\x62\xa4\xa9\ +\xaf\x7b\xe6\x4c\xf6\xc0\xd2\x48\x51\x4c\x88\x19\x48\xc6\x41\x94\ +\x21\xd1\x5f\xe6\x54\x63\x1e\x65\xc6\x48\x07\x25\x0e\x9b\x28\x6d\ +\x4d\xda\xfc\x64\x7e\x86\xea\xa8\xb6\xc9\x8c\x05\x63\x4f\x6d\x1e\ +\x2b\xa6\xe2\xf6\x7a\xc1\xc5\x86\x30\xfb\x8e\x7c\xce\x74\x16\x53\ +\xad\x9c\x95\x67\x93\x77\x5d\x70\x7e\xd2\x6d\x8f\x49\x31\xa7\x02\ +\x8b\x1d\x43\x9d\x65\x0c\x21\x48\xb2\x18\x31\x63\x1a\x2d\x0a\x43\ +\xa1\x21\xf1\xf1\x58\x5b\x41\x5b\xa3\xe2\x52\xf0\x19\x97\x8f\xcb\ +\x45\x47\xa9\xe6\x64\x5c\x95\xb1\x9a\xa8\x27\xcc\x04\xf8\xa6\xb8\ +\x44\x8a\x4b\x1d\x9b\x0a\x71\xec\xca\x9c\x08\x0a\x99\x8c\x39\x9d\ +\xa2\xe6\xcf\x19\xf1\x6b\xb2\xd7\x2d\xf2\x5f\xc4\x71\xc5\xdd\x57\ +\xdc\x7d\x1d\x8c\xfe\xb5\x83\xd1\xd7\x8e\xf6\x15\x77\x5f\x27\xa3\ +\xaf\x93\xd1\xbf\x87\xc9\xe8\x2b\xee\xbe\xe2\xee\x2b\xee\xae\xbf\ +\x07\xdc\xcd\xff\x58\x7c\xf6\x0f\x5d\xf3\x79\x03\ +\x00\x00\x10\xfc\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -7191,167 +6042,344 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ -\x35\x34\x30\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ -\x3a\x23\x39\x32\x39\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ -\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ -\x4d\x32\x39\x30\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\ -\x32\x2c\x37\x33\x2e\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\ -\x31\x2e\x34\x34\x2c\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\ -\x35\x63\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\ -\x38\x31\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\ -\x2e\x30\x35\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\ -\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\ -\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\ -\x2e\x32\x2d\x32\x38\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\ -\x31\x2e\x31\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\ -\x33\x33\x2d\x34\x36\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\ -\x35\x34\x2e\x36\x34\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\ -\x2e\x39\x32\x2d\x34\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\ -\x35\x2e\x32\x32\x2d\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\ -\x2c\x34\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\ -\x2e\x39\x34\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\ -\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\ -\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\ -\x2d\x33\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\ -\x31\x61\x33\x38\x30\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\ -\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\ -\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\ -\x34\x35\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\ -\x32\x37\x37\x2e\x34\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\ -\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\ -\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\ -\x2d\x32\x32\x2c\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\ -\x35\x2d\x33\x39\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\ -\x32\x33\x2e\x33\x37\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\ -\x33\x2c\x33\x38\x2e\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\ -\x2e\x32\x35\x2c\x30\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\ -\x37\x2c\x33\x39\x2e\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\ -\x32\x2e\x31\x2c\x35\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\ -\x31\x37\x2e\x33\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\x3d\x22\ -\x4d\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\ -\x34\x2e\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\ -\x2e\x34\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\ -\x2c\x35\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\ -\x37\x2c\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\ -\x37\x38\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\ -\x2c\x34\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\ -\x37\x35\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\ -\x2c\x35\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\ -\x32\x2c\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\ -\x2e\x35\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\ -\x2e\x36\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\ -\x32\x2e\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\ -\x32\x63\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\ -\x38\x2e\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\ -\x33\x35\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\ -\x30\x2d\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\ -\x2c\x36\x2e\x32\x34\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\ -\x36\x2d\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\ -\x2c\x39\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\ -\x30\x2d\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\ -\x39\x2c\x30\x2d\x34\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\ -\x37\x39\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\ -\x33\x2e\x38\x39\x2d\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\ -\x31\x2c\x32\x38\x32\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\ -\x32\x38\x31\x2e\x33\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\ -\x30\x2e\x33\x37\x5a\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\ -\x34\x39\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\ -\x2e\x37\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\ -\x33\x31\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\ -\x39\x2e\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\ -\x2d\x31\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\ -\x34\x2e\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\ -\x2d\x2e\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\ -\x35\x34\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\ -\x2c\x33\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\ -\x2c\x33\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\ -\x2e\x37\x31\x61\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\ -\x63\x2d\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\ -\x31\x31\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\ -\x34\x2e\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\ -\x2c\x34\x2e\x32\x32\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\ -\x38\x2c\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\ -\x37\x2e\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\ -\x36\x2c\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\ -\x37\x35\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\ -\x36\x61\x31\x31\x31\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\ -\x36\x38\x2c\x39\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\ -\x32\x2d\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\ -\x2c\x35\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\ -\x2e\x37\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\ -\x2e\x35\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x33\ -\x37\x39\x2e\x35\x38\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\ -\x38\x2d\x2e\x30\x36\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\ -\x2e\x36\x31\x2c\x30\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\ -\x2e\x34\x33\x2c\x30\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\ -\x35\x33\x2c\x30\x2d\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\ -\x35\x38\x2d\x33\x32\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\ -\x38\x2e\x39\x33\x2d\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\ -\x34\x2d\x32\x39\x2e\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\ -\x31\x34\x2c\x32\x31\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\ -\x34\x2e\x31\x33\x2c\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\ -\x2d\x39\x2e\x36\x33\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\ -\x2c\x32\x32\x2e\x38\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\ -\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\ -\x35\x2e\x36\x33\x2c\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\ -\x2c\x33\x30\x2e\x32\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\ -\x32\x37\x2c\x32\x34\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\ -\x33\x2e\x37\x35\x2d\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\ -\x2e\x37\x37\x2c\x31\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\ -\x2e\x33\x35\x2c\x33\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\ -\x36\x33\x2e\x31\x37\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\ -\x2e\x30\x37\x2c\x33\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\ -\x38\x2c\x33\x38\x34\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\ -\x31\x61\x32\x36\x2e\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x37\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\ -\x35\x39\x2c\x35\x2e\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\ -\x37\x38\x2c\x32\x33\x2c\x38\x2e\x36\x31\x61\x32\x34\x2c\x32\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\ -\x41\x32\x35\x2e\x36\x38\x2c\x32\x35\x2e\x36\x38\x2c\x30\x2c\x30\ -\x2c\x30\x2c\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\ -\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x63\x32\x2e\x36\x31\x2d\x2e\ -\x38\x2c\x35\x2e\x32\x33\x2d\x31\x2e\x34\x36\x2c\x37\x2e\x37\x37\ -\x2d\x32\x2e\x30\x39\x2c\x31\x2e\x31\x34\x2d\x2e\x32\x38\x2c\x32\ -\x2e\x32\x38\x2d\x2e\x35\x36\x2c\x33\x2e\x34\x32\x2d\x2e\x38\x36\ -\x6c\x2e\x36\x32\x2d\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\ -\x33\x39\x63\x2e\x33\x36\x2e\x31\x35\x2e\x37\x32\x2e\x33\x33\x2c\ -\x31\x2e\x30\x37\x2e\x35\x6c\x2e\x33\x37\x2e\x31\x39\x61\x36\x36\ -\x2e\x31\x38\x2c\x36\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x32\x36\x2e\x38\x33\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x33\ -\x35\x2c\x33\x30\x2e\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\ -\x39\x34\x2d\x31\x30\x2e\x31\x35\x41\x32\x30\x35\x2c\x32\x30\x35\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x36\x34\x2e\x34\x34\x2c\x32\x35\ -\x34\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\x30\x2e\x33\x31\x2d\x31\ -\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\x2d\ -\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\x2d\ -\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2d\x31\x34\x36\x2e\x38\x34\ -\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\x37\x2c\x38\x2e\x37\x32\ -\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\x36\x32\x2d\x36\x2e\x38\ -\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\x32\x34\x2c\x32\x32\x2c\ -\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\x33\x2c\x34\x37\x2e\x39\ -\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\x2d\x35\x30\x2e\x35\x37\ -\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\x2c\x31\x37\x35\x2e\x33\ -\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x37\x2e\x39\x32\x2c\x31\x38\ -\x37\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x31\x35\x2c\x32\ -\x38\x39\x2e\x36\x38\x2c\x36\x37\x2e\x34\x39\x2c\x36\x37\x2e\x34\ -\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\x36\x2e\x36\x32\x2c\x32\ -\x37\x38\x2e\x34\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x0a\x76\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x39\x34\x2e\x35\x33\x2c\x32\x37\x36\ +\x2e\x37\x32\x61\x31\x32\x2e\x34\x31\x2c\x31\x32\x2e\x34\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x2e\x35\x33\x2d\x32\x2e\x31\x32\x63\x2e\ +\x33\x39\x2d\x35\x2e\x37\x34\x2e\x36\x32\x2d\x31\x31\x2e\x35\x31\ +\x2c\x31\x2e\x31\x32\x2d\x31\x37\x2e\x32\x34\x61\x31\x39\x30\x2e\ +\x36\x35\x2c\x31\x39\x30\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x31\x30\x2e\x37\x2d\x34\x37\x2e\x35\x39\x2c\x32\x30\x31\x2e\x32\ +\x32\x2c\x32\x30\x31\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x31\x2e\x33\x31\x2d\x34\x32\x2e\x38\x37\x2c\x32\x30\x36\x2e\x31\ +\x31\x2c\x32\x30\x36\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x36\ +\x30\x2e\x36\x39\x2d\x36\x30\x2e\x35\x33\x41\x31\x39\x30\x2e\x34\ +\x36\x2c\x31\x39\x30\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x34\x30\x2e\x34\x2c\x38\x32\x2e\x35\x31\x63\x38\x2e\x35\x38\x2d\ +\x32\x2e\x34\x37\x2c\x31\x37\x2e\x33\x33\x2d\x34\x2e\x34\x34\x2c\ +\x32\x36\x2e\x30\x38\x2d\x36\x2e\x32\x35\x61\x31\x32\x38\x2e\x33\ +\x36\x2c\x31\x32\x38\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x35\x2e\x31\x38\x2d\x31\x2e\x38\x33\x63\x35\x2d\x2e\x34\x32\x2c\ +\x31\x30\x2e\x31\x2d\x2e\x37\x31\x2c\x31\x35\x2e\x31\x35\x2d\x2e\ +\x37\x35\x2c\x36\x2e\x36\x34\x2d\x2e\x30\x35\x2c\x31\x33\x2e\x33\ +\x31\x2d\x2e\x31\x39\x2c\x31\x39\x2e\x39\x2e\x33\x39\x61\x32\x31\ +\x30\x2e\x35\x36\x2c\x32\x31\x30\x2e\x35\x36\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x33\x35\x2e\x34\x38\x2c\x36\x2e\x30\x37\x41\x32\x30\x32\ +\x2e\x39\x31\x2c\x32\x30\x32\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x33\x39\x37\x2c\x39\x37\x2e\x37\x32\x61\x32\x30\x36\x2c\x32\ +\x30\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x38\x2e\x37\x34\x2c\x35\ +\x39\x2e\x36\x39\x2c\x31\x39\x39\x2e\x35\x34\x2c\x31\x39\x39\x2e\ +\x35\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\x2e\x36\x31\x2c\x36\ +\x30\x2e\x37\x63\x32\x2e\x37\x31\x2c\x38\x2e\x39\x2c\x34\x2e\x35\ +\x39\x2c\x31\x38\x2e\x30\x37\x2c\x36\x2e\x34\x38\x2c\x32\x37\x2e\ +\x31\x39\x61\x31\x32\x37\x2e\x36\x2c\x31\x32\x37\x2e\x36\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x2e\x38\x32\x2c\x31\x35\x63\x2e\x34\x32\ +\x2c\x34\x2e\x38\x36\x2e\x37\x31\x2c\x39\x2e\x37\x34\x2e\x37\x35\ +\x2c\x31\x34\x2e\x36\x32\x2e\x30\x35\x2c\x36\x2e\x37\x35\x2e\x32\ +\x36\x2c\x31\x33\x2e\x35\x35\x2d\x2e\x34\x32\x2c\x32\x30\x2e\x32\ +\x35\x2d\x2e\x38\x38\x2c\x38\x2e\x37\x38\x2d\x32\x2e\x32\x32\x2c\ +\x31\x37\x2e\x35\x35\x2d\x34\x2c\x32\x36\x2e\x32\x31\x61\x31\x39\ +\x35\x2e\x30\x35\x2c\x31\x39\x35\x2e\x30\x35\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x31\x39\x2e\x31\x33\x2c\x35\x33\x2e\x31\x33\x2c\x32\x30\ +\x34\x2e\x38\x31\x2c\x32\x30\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x35\x33\x2e\x37\x34\x2c\x36\x35\x2c\x32\x30\x38\x2e\x30\ +\x38\x2c\x32\x30\x38\x2e\x30\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x32\ +\x34\x2e\x33\x31\x2c\x31\x36\x2e\x37\x2c\x34\x2c\x34\x2c\x30\x2c\ +\x30\x2c\x31\x2d\x33\x2e\x34\x37\x2e\x35\x36\x63\x2d\x34\x2e\x31\ +\x32\x2d\x31\x2e\x32\x34\x2d\x38\x2e\x31\x34\x2d\x32\x2e\x36\x32\ +\x2d\x31\x30\x2e\x34\x37\x2d\x36\x2e\x36\x33\x2d\x31\x2e\x37\x39\ +\x2d\x33\x2e\x30\x38\x2d\x31\x2e\x36\x34\x2d\x36\x2e\x34\x32\x2d\ +\x31\x2e\x31\x34\x2d\x39\x2e\x37\x39\x2e\x30\x38\x2d\x2e\x35\x32\ +\x2e\x31\x36\x2d\x31\x2c\x2e\x32\x36\x2d\x31\x2e\x35\x36\x61\x35\ +\x2e\x37\x2c\x35\x2e\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x2e\x39\ +\x33\x2d\x34\x2e\x34\x32\x2c\x31\x37\x39\x2e\x35\x2c\x31\x37\x39\ +\x2e\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x38\x39\x2e\x34\x31\x2d\x31\ +\x33\x36\x2e\x34\x34\x63\x2e\x34\x37\x2d\x34\x2e\x32\x35\x2e\x34\ +\x39\x2d\x38\x2e\x35\x36\x2e\x37\x31\x2d\x31\x32\x2e\x38\x34\x2e\ +\x31\x33\x2d\x32\x2e\x36\x34\x2e\x34\x34\x2d\x35\x2e\x32\x39\x2e\ +\x33\x33\x2d\x37\x2e\x39\x32\x2d\x2e\x32\x31\x2d\x35\x2e\x31\x36\ +\x2d\x2e\x36\x39\x2d\x31\x30\x2e\x33\x2d\x31\x2d\x31\x35\x2e\x34\ +\x35\x61\x31\x34\x38\x2e\x39\x34\x2c\x31\x34\x38\x2e\x39\x34\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x34\x2e\x38\x36\x2d\x32\x38\x2c\x31\x37\ +\x36\x2e\x38\x34\x2c\x31\x37\x36\x2e\x38\x34\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x31\x35\x2e\x39\x35\x2d\x34\x30\x2e\x31\x39\x2c\x31\x37\ +\x38\x2e\x37\x33\x2c\x31\x37\x38\x2e\x37\x33\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x33\x31\x2e\x36\x2d\x34\x32\x2c\x31\x39\x30\x2e\x33\x2c\ +\x31\x39\x30\x2e\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x30\x2e\x32\ +\x2d\x31\x37\x2e\x31\x36\x2c\x31\x37\x37\x2e\x31\x31\x2c\x31\x37\ +\x37\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x35\x35\ +\x2d\x31\x38\x2e\x32\x32\x2c\x31\x36\x35\x2e\x37\x2c\x31\x36\x35\ +\x2e\x37\x2c\x30\x2c\x30\x2c\x30\x2d\x34\x31\x2e\x30\x35\x2d\x31\ +\x33\x2e\x35\x63\x2d\x35\x2e\x35\x33\x2d\x31\x2d\x31\x31\x2e\x30\ +\x37\x2d\x32\x2d\x31\x36\x2e\x36\x35\x2d\x32\x2e\x37\x33\x2d\x34\ +\x2d\x2e\x35\x31\x2d\x38\x2e\x30\x39\x2d\x2e\x35\x34\x2d\x31\x32\ +\x2e\x31\x34\x2d\x2e\x37\x34\x2d\x33\x2e\x33\x34\x2d\x2e\x31\x36\ +\x2d\x36\x2e\x37\x2d\x2e\x34\x36\x2d\x31\x30\x2e\x30\x35\x2d\x2e\ +\x33\x35\x2d\x35\x2e\x32\x37\x2e\x31\x39\x2d\x31\x30\x2e\x35\x34\ +\x2e\x36\x38\x2d\x31\x35\x2e\x38\x32\x2c\x31\x61\x31\x36\x32\x2e\ +\x34\x31\x2c\x31\x36\x32\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x34\x31\x2e\x31\x39\x2c\x38\x2e\x36\x32\x2c\x31\x38\x32\x2e\x36\ +\x2c\x31\x38\x32\x2e\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x38\x2e\ +\x34\x38\x2c\x36\x34\x2e\x36\x36\x2c\x31\x37\x38\x2e\x30\x36\x2c\ +\x31\x37\x38\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x35\x2e\ +\x35\x36\x2c\x34\x39\x2e\x32\x36\x2c\x31\x36\x36\x2e\x38\x32\x2c\ +\x31\x36\x36\x2e\x38\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x2e\x38\ +\x31\x2c\x32\x38\x63\x2d\x31\x2e\x31\x33\x2c\x37\x2e\x35\x2d\x32\ +\x2e\x31\x38\x2c\x31\x35\x2d\x32\x2c\x32\x32\x2e\x36\x2e\x31\x33\ +\x2c\x37\x2e\x32\x32\x2d\x2e\x31\x39\x2c\x31\x34\x2e\x34\x37\x2e\ +\x34\x32\x2c\x32\x31\x2e\x36\x35\x61\x31\x37\x34\x2e\x30\x36\x2c\ +\x31\x37\x34\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x32\x2e\ +\x37\x39\x2c\x35\x32\x2e\x32\x38\x2c\x31\x37\x37\x2e\x34\x35\x2c\ +\x31\x37\x37\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x34\x2e\ +\x31\x33\x2c\x37\x32\x2c\x32\x34\x37\x2e\x33\x38\x2c\x32\x34\x37\ +\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2e\x35\x36\x2c\ +\x31\x34\x2e\x37\x38\x63\x32\x2e\x33\x38\x2c\x31\x2e\x35\x31\x2c\ +\x32\x2e\x39\x33\x2c\x33\x2e\x35\x32\x2c\x33\x2e\x33\x37\x2c\x35\ +\x2e\x37\x39\x2c\x31\x2e\x39\x32\x2c\x39\x2e\x38\x32\x2d\x34\x2e\ +\x34\x32\x2c\x31\x35\x2e\x32\x34\x2d\x31\x32\x2e\x37\x32\x2c\x31\ +\x36\x2e\x35\x38\x61\x33\x2e\x34\x37\x2c\x33\x2e\x34\x37\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x32\x2d\x2e\x34\x37\x2c\x32\x30\ +\x35\x2e\x36\x32\x2c\x32\x30\x35\x2e\x36\x32\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x37\x39\x2e\x34\x37\x2d\x38\x35\x2e\x34\x35\x2c\x31\x39\ +\x36\x2e\x32\x37\x2c\x31\x39\x36\x2e\x32\x37\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x31\x34\x2e\x34\x2d\x33\x38\x63\x2d\x32\x2d\x37\x2e\x35\ +\x32\x2d\x33\x2e\x33\x35\x2d\x31\x35\x2e\x32\x2d\x34\x2e\x37\x31\ +\x2d\x32\x32\x2e\x38\x37\x61\x31\x35\x36\x2e\x33\x34\x2c\x31\x35\ +\x36\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x32\x33\x2d\ +\x32\x35\x2e\x37\x35\x2c\x36\x2e\x34\x33\x2c\x36\x2e\x34\x33\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x2e\x35\x32\x2d\x31\x2e\x37\x36\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x36\x2c\x35\x32\ +\x36\x2e\x33\x37\x6c\x2d\x31\x2e\x31\x38\x2d\x2e\x36\x36\x61\x37\ +\x34\x2e\x39\x2c\x37\x34\x2e\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ +\x2e\x35\x2d\x34\x2e\x31\x38\x63\x2d\x33\x2e\x31\x38\x2d\x32\x2e\ +\x32\x34\x2d\x34\x2e\x36\x34\x2d\x35\x2e\x32\x36\x2d\x34\x2e\x36\ +\x34\x2d\x39\x2e\x34\x38\x71\x2e\x31\x39\x2d\x31\x30\x30\x2e\x32\ +\x39\x2e\x31\x32\x2d\x32\x30\x30\x2e\x35\x39\x61\x33\x2e\x38\x31\ +\x2c\x33\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x39\x31\ +\x2d\x33\x2e\x37\x31\x2c\x33\x33\x2e\x33\x31\x2c\x33\x33\x2e\x33\ +\x31\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x35\x2d\x32\x33\x2e\x33\x38\ +\x2c\x33\x34\x2e\x38\x34\x2c\x33\x34\x2e\x38\x34\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x32\x35\x2e\x34\x34\x2d\x33\x39\x63\x31\x39\x2e\x38\ +\x32\x2d\x35\x2e\x34\x32\x2c\x34\x30\x2e\x34\x33\x2c\x38\x2e\x30\ +\x38\x2c\x34\x33\x2e\x32\x39\x2c\x32\x38\x2e\x33\x33\x2c\x32\x2c\ +\x31\x34\x2e\x34\x33\x2d\x33\x2e\x33\x35\x2c\x32\x35\x2e\x39\x33\ +\x2d\x31\x35\x2e\x32\x37\x2c\x33\x34\x2e\x33\x61\x33\x2e\x32\x32\ +\x2c\x33\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x36\x33\ +\x2c\x33\x71\x2e\x30\x36\x2c\x31\x30\x31\x2e\x37\x31\x2c\x30\x2c\ +\x32\x30\x33\x2e\x34\x33\x61\x37\x2e\x32\x33\x2c\x37\x2e\x32\x33\ +\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x31\x36\x2c\x33\x2e\x37\x36\ +\x2c\x31\x38\x2e\x38\x33\x2c\x31\x38\x2e\x38\x33\x2c\x30\x2c\x30\ +\x2c\x31\x2d\x39\x2e\x38\x33\x2c\x37\x2e\x34\x33\x2c\x31\x30\x2e\ +\x38\x33\x2c\x31\x30\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\ +\x2e\x34\x39\x2e\x38\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\x2e\x34\x37\x63\ +\x30\x2c\x32\x2e\x31\x34\x2c\x30\x2c\x35\x2e\x37\x35\x2c\x30\x2c\ +\x39\x2e\x33\x35\x61\x31\x32\x37\x2e\x39\x33\x2c\x31\x32\x37\x2e\ +\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2c\x36\x38\x2e\x32\ +\x38\x2c\x31\x32\x31\x2e\x32\x32\x2c\x31\x32\x31\x2e\x32\x32\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x33\x36\x2e\x38\x36\x2c\x33\x36\x2e\x32\ +\x36\x63\x31\x2e\x37\x38\x2c\x31\x2e\x31\x32\x2c\x31\x2e\x35\x36\ +\x2c\x32\x2e\x37\x2c\x31\x2e\x37\x2c\x34\x2e\x31\x34\x2e\x36\x2c\ +\x36\x2e\x33\x33\x2d\x32\x2e\x36\x34\x2c\x31\x30\x2e\x36\x37\x2d\ +\x39\x2c\x31\x32\x2e\x32\x34\x61\x33\x2e\x32\x37\x2c\x33\x2e\x32\ +\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x38\x2d\x2e\x34\x34\ +\x2c\x31\x34\x33\x2e\x33\x39\x2c\x31\x34\x33\x2e\x33\x39\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x35\x35\x2e\x32\x33\x2d\x36\x31\x2e\x35\x36\ +\x2c\x31\x32\x38\x2e\x36\x35\x2c\x31\x32\x38\x2e\x36\x35\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x39\x2e\x38\x2d\x32\x38\x2e\x36\x33\x2c\x31\ +\x37\x37\x2e\x31\x34\x2c\x31\x37\x37\x2e\x31\x34\x2c\x30\x2c\x30\ +\x2c\x31\x2d\x33\x2d\x31\x37\x2e\x36\x34\x41\x31\x33\x38\x2e\x37\ +\x35\x2c\x31\x33\x38\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x35\x39\x2e\x35\x37\x2c\x32\x35\x30\x61\x31\x34\x35\x2c\x31\x34\ +\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x31\x2e\x32\x38\x2d\x33\x32\ +\x2e\x33\x2c\x31\x34\x33\x2e\x34\x34\x2c\x31\x34\x33\x2e\x34\x34\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x35\x2e\x36\x2d\x35\x33\x2e\x38\ +\x36\x2c\x31\x33\x36\x2e\x32\x31\x2c\x31\x33\x36\x2e\x32\x31\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x34\x32\x2d\x32\x30\x2e\x36\x32\x63\x35\ +\x2e\x37\x32\x2d\x31\x2e\x36\x36\x2c\x31\x31\x2e\x35\x34\x2d\x33\ +\x2c\x31\x37\x2e\x33\x39\x2d\x34\x2e\x32\x61\x39\x35\x2e\x33\x31\ +\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\x2d\ +\x31\x2e\x35\x35\x63\x36\x2e\x32\x35\x2d\x2e\x33\x34\x2c\x31\x32\ +\x2e\x35\x34\x2d\x2e\x34\x35\x2c\x31\x38\x2e\x38\x31\x2d\x2e\x33\ +\x39\x61\x39\x35\x2e\x33\x31\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x31\x30\x2e\x35\x2c\x31\x2c\x31\x34\x34\x2e\x33\ +\x36\x2c\x31\x34\x34\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x31\x32\x2e\x37\x31\x2c\x38\x31\x2e\x37\x32\x2c\x31\x32\x35\x2e\ +\x37\x33\x2c\x31\x32\x35\x2e\x37\x33\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x39\x2e\x37\x2c\x32\x38\x2e\x33\x36\x63\x31\x2e\x31\x32\x2c\x35\ +\x2e\x35\x2c\x32\x2e\x32\x31\x2c\x31\x31\x2c\x32\x2e\x37\x38\x2c\ +\x31\x36\x2e\x36\x31\x2e\x36\x36\x2c\x36\x2e\x36\x31\x2c\x31\x2c\ +\x31\x33\x2e\x32\x38\x2c\x31\x2c\x31\x39\x2e\x39\x32\x41\x38\x32\ +\x2e\x38\x34\x2c\x38\x32\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x34\x34\x33\x2e\x30\x35\x2c\x32\x39\x38\x63\x2d\x31\x2c\x36\x2e\ +\x33\x39\x2d\x32\x2e\x32\x2c\x31\x32\x2e\x37\x37\x2d\x33\x2e\x36\ +\x37\x2c\x31\x39\x2e\x30\x37\x61\x31\x31\x38\x2e\x35\x2c\x31\x31\ +\x38\x2e\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x38\x37\x2c\x32\ +\x32\x2e\x31\x2c\x31\x34\x32\x2e\x38\x33\x2c\x31\x34\x32\x2e\x38\ +\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x33\x36\x2e\x38\x36\x2c\x34\x39\ +\x2e\x32\x36\x2c\x31\x33\x33\x2e\x35\x36\x2c\x31\x33\x33\x2e\x35\ +\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x30\x2c\x31\x34\x2e\x34\x32\ +\x2c\x34\x2e\x38\x31\x2c\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x31\ +\x2d\x33\x2c\x2e\x35\x63\x2d\x34\x2d\x2e\x36\x39\x2d\x37\x2e\x34\ +\x34\x2d\x32\x2e\x33\x36\x2d\x38\x2e\x37\x35\x2d\x36\x2e\x34\x38\ +\x2d\x31\x2d\x33\x2d\x2e\x33\x31\x2d\x35\x2e\x39\x33\x2c\x31\x2d\ +\x38\x2e\x37\x32\x61\x33\x2e\x36\x37\x2c\x33\x2e\x36\x37\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x2e\x33\x37\x2d\x31\x2e\x32\x2c\x31\x32\ +\x35\x2c\x31\x32\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x36\x2d\x38\ +\x31\x2e\x35\x35\x2c\x31\x34\x31\x2c\x31\x34\x31\x2c\x30\x2c\x30\ +\x2c\x30\x2c\x32\x2e\x31\x36\x2d\x31\x37\x2e\x34\x38\x2c\x31\x33\ +\x35\x2c\x31\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x38\ +\x41\x31\x32\x31\x2e\x37\x36\x2c\x31\x32\x31\x2e\x37\x36\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x34\x31\x34\x2e\x33\x39\x2c\x32\x33\x32\x61\ +\x31\x32\x36\x2c\x31\x32\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x32\ +\x2e\x38\x38\x2d\x32\x33\x2e\x37\x31\x41\x31\x32\x34\x2c\x31\x32\ +\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x36\x34\x2e\x34\x35\x2c\x31\ +\x37\x33\x61\x31\x31\x35\x2e\x38\x34\x2c\x31\x31\x35\x2e\x38\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x37\x38\x2d\x31\x33\x2e\ +\x35\x33\x63\x2d\x35\x2e\x31\x33\x2d\x31\x2e\x33\x39\x2d\x31\x30\ +\x2e\x34\x34\x2d\x32\x2e\x31\x38\x2d\x31\x35\x2e\x36\x35\x2d\x33\ +\x2e\x32\x37\x2d\x38\x2e\x32\x39\x2d\x31\x2e\x37\x32\x2d\x31\x36\ +\x2e\x37\x31\x2d\x31\x2e\x33\x36\x2d\x32\x35\x2d\x31\x2e\x31\x33\ +\x61\x31\x30\x33\x2e\x31\x35\x2c\x31\x30\x33\x2e\x31\x35\x2c\x30\ +\x2c\x30\x2c\x30\x2d\x32\x33\x2e\x37\x31\x2c\x33\x2e\x37\x33\x2c\ +\x31\x32\x31\x2e\x38\x37\x2c\x31\x32\x31\x2e\x38\x37\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x34\x35\x2e\x31\x38\x2c\x32\x32\x2e\x37\x35\x2c\ +\x31\x32\x34\x2e\x35\x37\x2c\x31\x32\x34\x2e\x35\x37\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x33\x31\x2e\x34\x38\x2c\x33\x37\x2e\x33\x31\x2c\ +\x31\x32\x37\x2e\x31\x32\x2c\x31\x32\x37\x2e\x31\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x31\x34\x2e\x30\x37\x2c\x34\x30\x2e\x31\x38\x43\ +\x31\x37\x37\x2e\x38\x34\x2c\x32\x36\x33\x2c\x31\x37\x37\x2e\x35\ +\x31\x2c\x32\x36\x37\x2c\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\ +\x2e\x34\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ +\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\x34\x63\x2d\x2e\x33\ +\x35\x2c\x31\x39\x2e\x36\x32\x2d\x35\x2e\x34\x32\x2c\x33\x35\x2e\ +\x38\x36\x2d\x31\x35\x2e\x38\x31\x2c\x35\x30\x2e\x33\x39\x41\x38\ +\x36\x2e\x31\x35\x2c\x38\x36\x2e\x31\x35\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x33\x34\x34\x2e\x34\x37\x2c\x33\x35\x31\x63\x2d\x33\x2e\x37\ +\x39\x2c\x32\x2e\x33\x31\x2d\x39\x2e\x35\x35\x2e\x31\x35\x2d\x31\ +\x30\x2e\x39\x34\x2d\x34\x2e\x31\x32\x61\x37\x2e\x33\x33\x2c\x37\ +\x2e\x33\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x34\x33\x2d\x38\ +\x2e\x35\x35\x2c\x36\x37\x2e\x37\x31\x2c\x36\x37\x2e\x37\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x32\x32\x2e\x36\x34\x2d\x32\x31\x2e\x37\ +\x33\x2c\x36\x38\x2e\x35\x32\x2c\x36\x38\x2e\x35\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x31\x30\x2e\x37\x32\x2d\x32\x39\x2e\x33\x38\x2c\ +\x36\x39\x2e\x32\x32\x2c\x36\x39\x2e\x32\x32\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x33\x34\x2e\x36\x39\x2d\x36\x38\x2e\x35\x32\x2c\x37\x31\ +\x2e\x38\x36\x2c\x37\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x32\x33\x2e\x32\x35\x2d\x38\x2e\x33\x35\x2c\x35\x36\x2e\x37\x32\ +\x2c\x35\x36\x2e\x37\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x2e\x39\ +\x34\x2d\x2e\x36\x39\x41\x38\x37\x2e\x34\x2c\x38\x37\x2e\x34\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x32\x39\x31\x2c\x32\x31\x30\x61\x36\x39\ +\x2e\x35\x35\x2c\x36\x39\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x34\x33\x2e\x34\x38\x2c\x32\x32\x2e\x36\x37\x2c\x36\x36\x2e\x38\ +\x33\x2c\x36\x36\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x35\ +\x2e\x38\x31\x2c\x32\x39\x2e\x36\x33\x2c\x37\x30\x2e\x37\x34\x2c\ +\x37\x30\x2e\x37\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x38\x36\ +\x2c\x32\x30\x2e\x34\x34\x2c\x36\x39\x2e\x34\x35\x2c\x36\x39\x2e\ +\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x33\x2e\x32\x34\x2c\x35\ +\x35\x2e\x34\x35\x2c\x37\x2e\x31\x39\x2c\x37\x2e\x31\x39\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x32\x2e\x37\x38\x2c\x37\x2e\x37\x33\x2c\x38\ +\x2e\x36\x38\x2c\x38\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ +\x2e\x35\x37\x2c\x36\x2c\x33\x2e\x32\x39\x2c\x33\x2e\x32\x39\x2c\ +\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x36\x31\x2d\x2e\x36\x2c\x38\x34\ +\x2e\x32\x34\x2c\x38\x34\x2e\x32\x34\x2c\x30\x2c\x30\x2c\x31\x2d\ +\x33\x31\x2e\x35\x37\x2d\x33\x32\x2e\x34\x34\x2c\x38\x31\x2e\x38\ +\x36\x2c\x38\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\ +\x36\x34\x2d\x33\x30\x2e\x31\x38\x2c\x38\x30\x2e\x39\x34\x2c\x38\ +\x30\x2e\x39\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x32\x36\x2d\ +\x34\x38\x2e\x39\x31\x63\x31\x30\x2e\x31\x31\x2d\x31\x38\x2e\x37\ +\x34\x2c\x32\x35\x2e\x33\x33\x2d\x33\x31\x2e\x38\x32\x2c\x34\x35\ +\x2e\x31\x38\x2d\x33\x39\x2e\x35\x31\x61\x37\x38\x2e\x37\x31\x2c\ +\x37\x38\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x30\x2e\x38\ +\x32\x2d\x35\x2c\x31\x33\x33\x2e\x37\x2c\x31\x33\x33\x2e\x37\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x31\x36\x2e\x37\x35\x2d\x2e\x30\x37\x2c\ +\x36\x39\x2e\x36\x36\x2c\x36\x39\x2e\x36\x36\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x30\x2e\x34\x33\x2c\x34\x2e\x31\x33\x2c\x38\x34\x2e\ +\x38\x34\x2c\x38\x34\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ +\x31\x2e\x31\x33\x2c\x32\x39\x2e\x38\x34\x2c\x38\x31\x2e\x34\x36\ +\x2c\x38\x31\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x2e\ +\x34\x37\x2c\x33\x36\x2e\x33\x31\x43\x33\x38\x35\x2e\x32\x35\x2c\ +\x32\x36\x39\x2e\x39\x2c\x33\x38\x35\x2e\x34\x37\x2c\x32\x37\x34\ +\x2e\x34\x34\x2c\x33\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\ +\x34\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\x51\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ +\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ +\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ +\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ +\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ +\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ +\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ +\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ +\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ +\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x37\x2e\x38\x35\ +\x2c\x31\x39\x38\x2e\x36\x37\x63\x30\x2d\x38\x2e\x33\x31\x2d\x32\ +\x2e\x35\x39\x2d\x31\x34\x2e\x37\x37\x2d\x37\x2e\x37\x36\x2d\x31\ +\x39\x2e\x33\x35\x2d\x35\x2e\x31\x38\x2d\x34\x2e\x35\x38\x2d\x31\ +\x33\x2e\x30\x33\x2d\x36\x2e\x38\x37\x2d\x32\x33\x2e\x35\x35\x2d\ +\x36\x2e\x38\x37\x68\x2d\x32\x38\x76\x35\x32\x2e\x31\x39\x68\x32\ +\x38\x63\x31\x30\x2e\x35\x32\x2c\x30\x2c\x31\x38\x2e\x33\x37\x2d\ +\x32\x2e\x32\x39\x2c\x32\x33\x2e\x35\x35\x2d\x36\x2e\x38\x37\x2c\ +\x35\x2e\x31\x37\x2d\x34\x2e\x35\x38\x2c\x37\x2e\x37\x36\x2d\x31\ +\x30\x2e\x39\x34\x2c\x37\x2e\x37\x36\x2d\x31\x39\x2e\x30\x39\x5a\ +\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x35\ +\x31\x2e\x34\x36\x2c\x34\x38\x31\x2e\x37\x39\x76\x2d\x36\x2e\x37\ +\x37\x63\x30\x2d\x38\x2e\x39\x38\x2d\x37\x2e\x32\x38\x2d\x31\x36\ +\x2e\x32\x35\x2d\x31\x36\x2e\x32\x35\x2d\x31\x36\x2e\x32\x35\x68\ +\x2d\x31\x33\x2e\x35\x34\x76\x2d\x35\x34\x2e\x38\x34\x68\x31\x30\ +\x32\x2e\x39\x31\x63\x33\x32\x2e\x31\x36\x2c\x30\x2c\x35\x38\x2e\ +\x32\x33\x2d\x32\x36\x2e\x30\x37\x2c\x35\x38\x2e\x32\x33\x2d\x35\ +\x38\x2e\x32\x33\x56\x39\x36\x2e\x35\x34\x63\x30\x2d\x33\x32\x2e\ +\x31\x36\x2d\x32\x36\x2e\x30\x37\x2d\x35\x38\x2e\x32\x33\x2d\x35\ +\x38\x2e\x32\x33\x2d\x35\x38\x2e\x32\x33\x68\x2d\x32\x34\x39\x2e\ +\x31\x36\x63\x2d\x33\x32\x2e\x31\x36\x2c\x30\x2d\x35\x38\x2e\x32\ +\x33\x2c\x32\x36\x2e\x30\x37\x2d\x35\x38\x2e\x32\x33\x2c\x35\x38\ +\x2e\x32\x33\x76\x32\x34\x39\x2e\x31\x36\x63\x30\x2c\x33\x32\x2e\ +\x31\x36\x2c\x32\x36\x2e\x30\x37\x2c\x35\x38\x2e\x32\x33\x2c\x35\ +\x38\x2e\x32\x33\x2c\x35\x38\x2e\x32\x33\x68\x31\x30\x32\x2e\x39\ +\x31\x76\x35\x34\x2e\x38\x34\x68\x2d\x31\x33\x2e\x35\x34\x63\x2d\ +\x38\x2e\x39\x37\x2c\x30\x2d\x31\x36\x2e\x32\x35\x2c\x37\x2e\x32\ +\x37\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x32\x35\x76\x36\x2e\ +\x37\x37\x48\x38\x38\x2e\x37\x36\x76\x35\x36\x2e\x38\x37\x68\x31\ +\x35\x39\x2e\x37\x39\x76\x36\x2e\x37\x37\x63\x30\x2c\x38\x2e\x39\ +\x38\x2c\x37\x2e\x32\x38\x2c\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\ +\x32\x35\x2c\x31\x36\x2e\x32\x35\x68\x37\x30\x2e\x34\x31\x63\x38\ +\x2e\x39\x37\x2c\x30\x2c\x31\x36\x2e\x32\x35\x2d\x37\x2e\x32\x37\ +\x2c\x31\x36\x2e\x32\x35\x2d\x31\x36\x2e\x32\x35\x76\x2d\x36\x2e\ +\x37\x37\x68\x31\x35\x39\x2e\x37\x39\x76\x2d\x35\x36\x2e\x38\x37\ +\x68\x2d\x31\x35\x39\x2e\x37\x39\x5a\x4d\x32\x33\x32\x2e\x32\x34\ +\x2c\x33\x31\x30\x2e\x39\x33\x68\x2d\x35\x30\x2e\x34\x31\x76\x2d\ +\x31\x37\x38\x2e\x32\x68\x35\x30\x2e\x34\x31\x76\x31\x37\x38\x2e\ +\x32\x5a\x4d\x33\x31\x38\x2e\x35\x34\x2c\x33\x31\x30\x2e\x39\x33\ +\x68\x2d\x35\x30\x2e\x34\x31\x76\x2d\x31\x37\x38\x2e\x32\x68\x38\ +\x31\x2e\x34\x36\x63\x31\x36\x2e\x31\x32\x2c\x30\x2c\x33\x30\x2e\ +\x31\x32\x2c\x32\x2e\x36\x37\x2c\x34\x32\x2c\x38\x2e\x30\x32\x2c\ +\x31\x31\x2e\x38\x38\x2c\x35\x2e\x33\x35\x2c\x32\x31\x2e\x30\x34\ +\x2c\x31\x32\x2e\x39\x34\x2c\x32\x37\x2e\x35\x2c\x32\x32\x2e\x37\ +\x38\x2c\x36\x2e\x34\x35\x2c\x39\x2e\x38\x35\x2c\x39\x2e\x36\x37\ +\x2c\x32\x31\x2e\x35\x36\x2c\x39\x2e\x36\x37\x2c\x33\x35\x2e\x31\ +\x33\x73\x2d\x33\x2e\x32\x33\x2c\x32\x35\x2e\x30\x34\x2d\x39\x2e\ +\x36\x37\x2c\x33\x34\x2e\x38\x38\x63\x2d\x36\x2e\x34\x35\x2c\x39\ +\x2e\x38\x35\x2d\x31\x35\x2e\x36\x32\x2c\x31\x37\x2e\x34\x34\x2d\ +\x32\x37\x2e\x35\x2c\x32\x32\x2e\x37\x38\x2d\x31\x31\x2e\x38\x38\ +\x2c\x35\x2e\x33\x35\x2d\x32\x35\x2e\x38\x38\x2c\x38\x2e\x30\x32\ +\x2d\x34\x32\x2c\x38\x2e\x30\x32\x68\x2d\x33\x31\x2e\x30\x36\x76\ +\x34\x36\x2e\x35\x39\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\ +\x00\x00\x05\x95\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -7360,168 +6388,90 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\x35\x34\x30\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\ -\x32\x64\x33\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ -\x3a\x23\x39\x32\x39\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ -\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ -\x4d\x34\x34\x37\x2e\x31\x37\x2c\x33\x33\x34\x2e\x38\x35\x61\x32\ -\x36\x2e\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\x30\x2c\x30\ -\x2d\x37\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\x35\x39\x2c\ -\x35\x2e\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\x37\x38\x2c\ -\x32\x33\x2c\x38\x2e\x36\x31\x61\x32\x33\x2e\x35\x35\x2c\x32\x33\ -\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\ -\x2e\x32\x37\x41\x32\x35\x2e\x37\x31\x2c\x32\x35\x2e\x37\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x34\x34\x37\x2e\x31\x37\x2c\x33\x33\x34\ -\x2e\x38\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x32\ -\x39\x30\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\x32\x2c\ -\x37\x33\x2e\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\x31\x2e\ -\x34\x34\x2c\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\x35\x63\ -\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\ -\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2e\x30\ -\x35\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\x32\x38\ -\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\x33\x2d\ -\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\x2e\x32\ -\x2d\x32\x38\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\x31\x2e\ -\x31\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\x33\ -\x2d\x34\x36\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\x34\ -\x2e\x36\x34\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\x2e\x39\ -\x32\x2d\x34\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\x35\x2e\ -\x32\x32\x2d\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\x2c\x34\ -\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\ -\x34\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\x36\x35\ -\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\ -\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\x2d\x33\ -\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\ -\x33\x38\x30\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\x38\x63\ -\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\x2d\x35\ -\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x35\ -\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\x32\x37\ -\x37\x2e\x34\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\x2e\x31\ -\x38\x2c\x37\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ -\x3d\x22\x4d\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\x2d\x32\ -\x32\x2c\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x35\x2d\ -\x33\x39\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\ -\x2e\x33\x37\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\ -\x33\x38\x2e\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\x2e\x32\ -\x35\x2c\x30\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x37\x2c\ -\x33\x39\x2e\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\ -\x31\x2c\x35\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\x31\x37\ -\x2e\x33\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\x3d\x22\x4d\x34\ -\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\x34\x2e\ -\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\x2e\x34\ -\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\x2c\x35\ -\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\x37\x2c\ -\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\x37\x38\ -\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\x2c\x34\ -\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\x37\x35\ -\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\x2c\x35\ -\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\x32\x2c\ -\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\x2e\x35\ -\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\x2e\x36\ -\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\x32\x2e\ -\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\x32\x63\ -\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\x38\x2e\ -\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\x33\x35\ -\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\x30\x2d\ -\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\x2c\x36\ -\x2e\x32\x34\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\x36\x2d\ -\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\x2c\x39\ -\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\x30\x2d\ -\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\x39\x2c\ -\x30\x2d\x34\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\x37\x39\ -\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\x33\x2e\ -\x38\x39\x2d\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\x31\x2c\ -\x32\x38\x32\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\x32\x38\ -\x31\x2e\x33\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\ -\x33\x37\x5a\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\x34\x39\ -\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\x2e\x37\ -\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\x33\x31\ -\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\x39\x2e\ -\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\x2d\x31\ -\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\x34\x2e\ -\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\x2d\x2e\ -\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\x35\x34\ -\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\x2c\x33\ -\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\x2c\x33\ -\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\x2e\x37\ -\x31\x61\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\x63\x2d\ -\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\x31\x31\ -\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\x34\x2e\ -\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\x2c\x34\ -\x2e\x32\x32\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\x38\x2c\ -\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x2e\ -\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\x36\x2c\ -\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\x37\x35\ -\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\x36\x61\ -\x31\x31\x31\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\x36\x38\ -\x2c\x39\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x32\x2d\ -\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\x2c\x35\ -\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\x2e\x37\ -\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\x2e\x35\ -\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x39\ -\x2e\x35\x38\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\x38\x2d\ -\x2e\x30\x36\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\x2e\x36\ -\x31\x2c\x30\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\x2e\x34\ -\x33\x2c\x30\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\x35\x33\ -\x2c\x30\x2d\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\x35\x38\ -\x2d\x33\x32\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\x38\x2e\ -\x39\x33\x2d\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\x34\x2d\ -\x32\x39\x2e\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\x31\x34\ -\x2c\x32\x31\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\x34\x2e\ -\x31\x33\x2c\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\x2d\x39\ -\x2e\x36\x33\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\x2c\x32\ -\x32\x2e\x38\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\x39\x33\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\x35\x2e\ -\x36\x33\x2c\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\x2c\x33\ -\x30\x2e\x32\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\x32\x37\ -\x2c\x32\x34\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\x33\x2e\ -\x37\x35\x2d\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\x2e\x37\ -\x37\x2c\x31\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\x2e\x33\ -\x35\x2c\x33\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\x36\x33\ -\x2e\x31\x37\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\x2e\x30\ -\x37\x2c\x33\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\x38\x2c\ -\x33\x38\x34\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x34\x33\x36\x2e\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x63\ -\x32\x2e\x36\x31\x2d\x2e\x38\x2c\x35\x2e\x32\x33\x2d\x31\x2e\x34\ -\x36\x2c\x37\x2e\x37\x37\x2d\x32\x2e\x30\x39\x2c\x31\x2e\x31\x34\ -\x2d\x2e\x32\x38\x2c\x32\x2e\x32\x38\x2d\x2e\x35\x36\x2c\x33\x2e\ -\x34\x32\x2d\x2e\x38\x36\x6c\x2e\x36\x32\x2d\x2e\x31\x36\x68\x31\ -\x36\x6c\x2e\x39\x33\x2e\x33\x39\x63\x2e\x33\x36\x2e\x31\x35\x2e\ -\x37\x32\x2e\x33\x33\x2c\x31\x2e\x30\x37\x2e\x35\x6c\x2e\x33\x37\ -\x2e\x31\x39\x61\x36\x36\x2e\x31\x38\x2c\x36\x36\x2e\x31\x38\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x32\x36\x2e\x38\x33\x2c\x31\x30\x2e\x33\ -\x38\x2c\x33\x30\x2e\x33\x35\x2c\x33\x30\x2e\x33\x35\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x35\x2e\x39\x34\x2d\x31\x30\x2e\x31\x35\x41\x32\ -\x30\x35\x2c\x32\x30\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x36\x34\ -\x2e\x34\x34\x2c\x32\x35\x34\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\ -\x30\x2e\x33\x31\x2d\x31\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\ -\x30\x33\x2e\x39\x31\x2d\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\ -\x39\x2c\x38\x2e\x38\x2d\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2d\ -\x31\x34\x36\x2e\x38\x34\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\ -\x37\x2c\x38\x2e\x37\x32\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\ -\x36\x32\x2d\x36\x2e\x38\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\ -\x32\x34\x2c\x32\x32\x2c\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\ -\x33\x2c\x34\x37\x2e\x39\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\ -\x2d\x35\x30\x2e\x35\x37\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\ -\x2c\x31\x37\x35\x2e\x33\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x37\ -\x2e\x39\x32\x2c\x31\x38\x37\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x34\x31\x35\x2c\x32\x38\x39\x2e\x36\x38\x2c\x36\x37\x2e\x34\ -\x39\x2c\x36\x37\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\ -\x36\x2e\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x5a\x22\x2f\x3e\x3c\ -\x2f\x73\x76\x67\x3e\ -\x00\x00\x0a\x5b\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ +\x35\x34\x30\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ +\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ +\x31\x38\x2c\x37\x37\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\ +\x34\x39\x30\x2e\x31\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\ +\x2e\x39\x2c\x31\x39\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\ +\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\ +\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\ +\x33\x2e\x31\x37\x2d\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\ +\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\ +\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\ +\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\ +\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\ +\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\ +\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\ +\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\ +\x30\x35\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\ +\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\ +\x2c\x39\x2e\x31\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\ +\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\ +\x37\x2e\x35\x37\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\ +\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\ +\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\ +\x30\x2e\x33\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\ +\x2e\x39\x33\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\ +\x36\x30\x2e\x34\x36\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\ +\x38\x37\x2c\x32\x37\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\ +\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\ +\x20\x64\x3d\x22\x4d\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ +\x32\x31\x63\x2d\x31\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\ +\x2d\x33\x2e\x30\x37\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\ +\x43\x34\x31\x34\x2c\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\ +\x32\x32\x2c\x32\x36\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\ +\x32\x36\x30\x2e\x36\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\ +\x36\x37\x2d\x31\x32\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\ +\x31\x37\x35\x2e\x33\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\ +\x33\x35\x2c\x31\x36\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\ +\x2d\x34\x37\x2e\x39\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\ +\x2e\x39\x2d\x31\x2e\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\ +\x39\x2d\x33\x31\x2e\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\ +\x2c\x38\x39\x2e\x37\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\ +\x2e\x38\x34\x2d\x37\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\ +\x31\x2e\x36\x36\x2c\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\ +\x2c\x32\x30\x33\x2e\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\ +\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x33\x2e\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\ +\x30\x38\x2c\x39\x2e\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\ +\x2c\x34\x2e\x35\x39\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\ +\x36\x32\x2c\x33\x33\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\ +\x2c\x33\x33\x32\x2e\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\ +\x3d\x22\x4d\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\ +\x30\x2d\x39\x2e\x32\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\ +\x35\x2c\x39\x2e\x36\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\ +\x2c\x33\x34\x30\x2e\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\ +\x37\x38\x2c\x32\x37\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\ +\x63\x34\x38\x2e\x36\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\ +\x33\x2c\x38\x2e\x32\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\ +\x2c\x31\x30\x2e\x31\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\ +\x38\x31\x2c\x32\x34\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\ +\x2d\x38\x2e\x34\x34\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\ +\x35\x2d\x34\x35\x2e\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\ +\x34\x2d\x31\x33\x2e\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\ +\x36\x33\x2d\x34\x37\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\ +\x33\x2e\x32\x32\x2d\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\ +\x2e\x36\x35\x2d\x38\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\ +\x36\x36\x2c\x31\x37\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\ +\x2e\x39\x33\x2d\x31\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\ +\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\ +\x35\x32\x2c\x33\x38\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\ +\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\ +\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\ +\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\ +\x38\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\ +\x2e\x38\x36\x2d\x34\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\ +\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\ +\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ +\x32\x33\x2c\x33\x30\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x05\x95\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -7530,166 +6480,90 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\x35\x34\x30\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x39\x32\x39\ -\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ +\x35\x34\x30\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ \x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ \x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ -\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\x32\x2c\x37\x33\x2e\ -\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\x31\x2e\x34\x34\x2c\ -\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\x35\x63\x31\x34\x2e\ -\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\ -\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2e\x30\x35\x2d\x31\ -\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\x32\x38\x2e\x36\x32\ -\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\ -\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\ -\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\x31\x2e\x31\x31\x2d\ -\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\ -\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\x34\x2e\x36\x34\ -\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\ -\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\x35\x2e\x32\x32\x2d\ -\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\ -\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x34\x2d\x38\ -\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\ -\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\ -\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\ -\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\ -\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\x38\x63\x34\x33\x2d\ -\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\x2d\x35\x31\x2e\x31\ -\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x35\x43\x32\x35\ -\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\x32\x37\x37\x2e\x34\ -\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\x2e\x31\x38\x2c\x37\ -\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\x2d\x32\x32\x2c\x30\ -\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x35\x2d\x33\x39\x2e\ -\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\x37\ -\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\x2e\ -\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\x2e\x32\x35\x2c\x30\ -\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x37\x2c\x33\x39\x2e\ -\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ -\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\ -\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\x34\x2e\x33\x35\x61\ -\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\x2e\x34\x37\x2c\x34\ -\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\x2c\x35\x31\x2e\x36\ -\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\x37\x2c\x31\x35\x2e\ -\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\x37\x38\x2c\x34\x36\ -\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\x2c\x34\x2e\x32\x35\ -\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\x37\x35\x63\x31\x33\ -\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\x2c\x35\x2e\x33\x39\ -\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\x32\x2c\x30\x2c\x33\ -\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\x2e\x35\x2e\x31\x32\ -\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\x2e\x36\x38\x2d\x32\ -\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\x32\x2e\x31\x36\x2c\ -\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\x32\x63\x2d\x37\x2e\ -\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\x38\x2e\x31\x31\x2d\ -\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\x33\x35\x2e\x34\x36\ -\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\x30\x2d\x31\x30\x36\ -\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\x2c\x36\x2e\x32\x34\ -\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\x36\x2d\x31\x36\x2e\ -\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\x2c\x39\x2e\x33\x39\ -\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\x30\x2d\x31\x35\x2e\ -\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\x39\x2c\x30\x2d\x34\ -\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\x37\x39\x2c\x31\x37\ -\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\x33\x2e\x38\x39\x2d\ -\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\x31\x2c\x32\x38\x32\ -\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\x32\x38\x31\x2e\x33\ -\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x5a\ -\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\x34\x39\x63\x30\x2d\ -\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\x2e\x37\x33\x2d\x2e\ -\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\x33\x31\x2d\x31\x37\ -\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\x39\x2e\x37\x35\x2d\ -\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\x2d\x31\x36\x2e\x36\ -\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\x34\x2e\x37\x33\x2d\ -\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\x2d\x2e\x31\x36\x2c\ -\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\x35\x34\x2c\x30\x2c\ -\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\x2c\x33\x33\x2e\x31\ -\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\x2c\x33\x2e\x37\x31\ -\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\x2e\x37\x31\x61\x31\ -\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x30\ -\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\x63\x2d\x32\x2e\x38\ -\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\x31\x31\x2e\x35\x39\ -\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\x34\x2e\x31\x36\x2c\ -\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\x2c\x34\x2e\x32\x32\ -\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\x38\x2c\x36\x38\x2e\ -\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x2e\x37\x31\x63\ -\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\x36\x2c\x38\x2e\x38\ -\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\x37\x35\x2d\x33\x2e\ -\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\x36\x61\x31\x31\x31\ -\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\x36\x38\x2c\x39\x2e\ -\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x32\x2d\x38\x2e\x31\ -\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\x2c\x35\x2e\x36\x31\ -\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\x2e\x37\x32\x41\x31\ -\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\x2e\x35\x37\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x39\x2e\x35\x38\ -\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\x38\x2d\x2e\x30\x36\ -\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\x2e\x36\x31\x2c\x30\ -\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\x2e\x34\x33\x2c\x30\ -\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\x35\x33\x2c\x30\x2d\ -\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\x35\x38\x2d\x33\x32\ -\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\x38\x2e\x39\x33\x2d\ -\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\x34\x2d\x32\x39\x2e\ -\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\x31\x34\x2c\x32\x31\ -\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\x34\x2e\x31\x33\x2c\ -\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\x2d\x39\x2e\x36\x33\ -\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\x2c\x32\x32\x2e\x38\ -\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\x39\x33\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\x35\x2e\x36\x33\x2c\ -\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\x2c\x33\x30\x2e\x32\ -\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\x32\x37\x2c\x32\x34\ -\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\x33\x2e\x37\x35\x2d\ -\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\x2e\x37\x37\x2c\x31\ -\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\x2e\x33\x35\x2c\x33\ -\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\x36\x33\x2e\x31\x37\ -\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\x2e\x30\x37\x2c\x33\ -\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\x38\x2c\x33\x38\x34\ -\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\ -\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\x61\x32\x36\x2e\ -\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x37\ -\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\x35\x39\x2c\x35\x2e\ -\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\x37\x38\x2c\x32\x33\ -\x2c\x38\x2e\x36\x31\x61\x32\x34\x2c\x32\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\x41\x32\x35\x2e\x36\ -\x38\x2c\x32\x35\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x35\ -\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\x36\x32\x2c\x32\x37\ -\x38\x2e\x34\x38\x63\x32\x2e\x36\x31\x2d\x2e\x38\x2c\x35\x2e\x32\ -\x33\x2d\x31\x2e\x34\x36\x2c\x37\x2e\x37\x37\x2d\x32\x2e\x30\x39\ -\x2c\x31\x2e\x31\x34\x2d\x2e\x32\x38\x2c\x32\x2e\x32\x38\x2d\x2e\ -\x35\x36\x2c\x33\x2e\x34\x32\x2d\x2e\x38\x36\x6c\x2e\x36\x32\x2d\ -\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\x33\x39\x63\x2e\x33\ -\x36\x2e\x31\x35\x2e\x37\x32\x2e\x33\x33\x2c\x31\x2e\x30\x37\x2e\ -\x35\x6c\x2e\x33\x37\x2e\x31\x39\x61\x36\x36\x2e\x31\x38\x2c\x36\ -\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x36\x2e\x38\x33\ -\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x33\x35\x2c\x33\x30\x2e\ -\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\x39\x34\x2d\x31\x30\ -\x2e\x31\x35\x41\x32\x30\x35\x2c\x32\x30\x35\x2c\x30\x2c\x30\x2c\ -\x30\x2c\x34\x36\x34\x2e\x34\x34\x2c\x32\x35\x34\x63\x2d\x36\x30\ -\x2e\x32\x32\x2d\x35\x30\x2e\x33\x31\x2d\x31\x32\x38\x2e\x33\x31\ -\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\x2d\x35\x38\x2e\x33\x36\ -\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\x2d\x31\x30\x35\x2e\x38\ -\x34\x2c\x33\x36\x2d\x31\x34\x36\x2e\x38\x34\x2c\x37\x39\x2e\x32\ -\x38\x2d\x38\x2e\x32\x37\x2c\x38\x2e\x37\x32\x2d\x31\x30\x2e\x37\ -\x39\x2c\x31\x39\x2e\x36\x32\x2d\x36\x2e\x38\x39\x2c\x33\x31\x2e\ -\x35\x32\x2c\x37\x2e\x32\x34\x2c\x32\x32\x2c\x33\x31\x2e\x35\x36\ -\x2c\x32\x36\x2e\x38\x33\x2c\x34\x37\x2e\x39\x31\x2c\x31\x30\x2c\ -\x34\x39\x2e\x32\x32\x2d\x35\x30\x2e\x35\x37\x2c\x31\x30\x38\x2d\ -\x37\x31\x2e\x30\x37\x2c\x31\x37\x35\x2e\x33\x39\x2d\x36\x31\x2e\ -\x34\x41\x31\x38\x37\x2e\x39\x32\x2c\x31\x38\x37\x2e\x39\x32\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x34\x31\x35\x2c\x32\x38\x39\x2e\x36\x38\ -\x2c\x36\x37\x2e\x34\x39\x2c\x36\x37\x2e\x34\x39\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x34\x33\x36\x2e\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\ -\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x0b\x47\ +\x31\x38\x2c\x37\x37\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\ +\x34\x39\x30\x2e\x31\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\ +\x2e\x39\x2c\x31\x39\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\ +\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\ +\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\ +\x33\x2e\x31\x37\x2d\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\ +\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\ +\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\ +\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\ +\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\ +\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\ +\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\ +\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\ +\x30\x35\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\ +\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\ +\x2c\x39\x2e\x31\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\ +\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\ +\x37\x2e\x35\x37\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\ +\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\ +\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\ +\x30\x2e\x33\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\ +\x2e\x39\x33\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\ +\x36\x30\x2e\x34\x36\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\ +\x38\x37\x2c\x32\x37\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\ +\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x64\x3d\x22\x4d\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ +\x32\x31\x63\x2d\x31\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\ +\x2d\x33\x2e\x30\x37\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\ +\x43\x34\x31\x34\x2c\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\ +\x32\x32\x2c\x32\x36\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\ +\x32\x36\x30\x2e\x36\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\ +\x36\x37\x2d\x31\x32\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\ +\x31\x37\x35\x2e\x33\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\ +\x33\x35\x2c\x31\x36\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\ +\x2d\x34\x37\x2e\x39\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\ +\x2e\x39\x2d\x31\x2e\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\ +\x39\x2d\x33\x31\x2e\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\ +\x2c\x38\x39\x2e\x37\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\ +\x2e\x38\x34\x2d\x37\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\ +\x31\x2e\x36\x36\x2c\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\ +\x2c\x32\x30\x33\x2e\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\ +\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x33\x2e\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\ +\x30\x38\x2c\x39\x2e\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\ +\x2c\x34\x2e\x35\x39\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\ +\x36\x32\x2c\x33\x33\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\ +\x2c\x33\x33\x32\x2e\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\ +\x3d\x22\x4d\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\ +\x30\x2d\x39\x2e\x32\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\ +\x35\x2c\x39\x2e\x36\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\ +\x2c\x33\x34\x30\x2e\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\ +\x37\x38\x2c\x32\x37\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\ +\x63\x34\x38\x2e\x36\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\ +\x33\x2c\x38\x2e\x32\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\ +\x2c\x31\x30\x2e\x31\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\ +\x38\x31\x2c\x32\x34\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\ +\x2d\x38\x2e\x34\x34\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\ +\x35\x2d\x34\x35\x2e\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\ +\x34\x2d\x31\x33\x2e\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\ +\x36\x33\x2d\x34\x37\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\ +\x33\x2e\x32\x32\x2d\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\ +\x2e\x36\x35\x2d\x38\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\ +\x36\x36\x2c\x31\x37\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\ +\x2e\x39\x33\x2d\x31\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\ +\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\ +\x35\x32\x2c\x33\x38\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\ +\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\ +\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\ +\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\ +\x38\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\ +\x2e\x38\x36\x2d\x34\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\ +\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\ +\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ +\x32\x33\x2c\x33\x30\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x05\x80\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -7698,181 +6572,88 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x39\x32\x39\ -\x34\x39\x37\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ -\x3a\x23\x35\x65\x36\x30\x36\x31\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ -\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ -\x4d\x32\x39\x30\x2e\x31\x38\x2c\x38\x32\x2e\x36\x32\x43\x34\x30\ -\x32\x2c\x38\x34\x2e\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x32\x32\ -\x2e\x37\x2c\x35\x36\x33\x2e\x39\x2c\x31\x39\x38\x2e\x37\x31\x63\ -\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\ -\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\ -\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\x32\x38\x2e\x36\x32\ -\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\ -\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\ -\x2e\x37\x31\x2d\x34\x36\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\ -\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\ -\x37\x35\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\ -\x35\x34\x2d\x39\x2e\x31\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\ -\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x43\ -\x31\x34\x37\x2e\x38\x34\x2c\x31\x38\x30\x2e\x31\x32\x2c\x31\x30\ -\x38\x2e\x35\x35\x2c\x32\x30\x37\x2c\x37\x34\x2e\x36\x38\x2c\x32\ -\x34\x33\x63\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\ -\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\ -\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\ -\x2d\x33\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\ -\x41\x33\x38\x30\x2c\x33\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x39\ -\x32\x2e\x33\x37\x2c\x31\x35\x30\x63\x34\x33\x2d\x33\x30\x2e\x35\ -\x37\x2c\x38\x39\x2e\x39\x33\x2d\x35\x31\x2e\x30\x39\x2c\x31\x34\ -\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x35\x43\x32\x35\x35\x2e\x30\ -\x37\x2c\x38\x35\x2e\x34\x39\x2c\x32\x37\x37\x2e\x34\x33\x2c\x38\ -\x34\x2e\x31\x31\x2c\x32\x39\x30\x2e\x31\x38\x2c\x38\x32\x2e\x36\ -\x32\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\ -\x2c\x35\x32\x38\x2e\x36\x34\x63\x2d\x32\x32\x2c\x30\x2d\x33\x39\ -\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\x2e\x31\x31\x2d\ -\x34\x32\x2e\x31\x32\x2c\x30\x2d\x32\x33\x2e\x33\x37\x2c\x31\x37\ -\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\x2e\x38\x36\x2d\ -\x34\x31\x2e\x37\x39\x2c\x32\x32\x2e\x32\x35\x2c\x30\x2c\x33\x39\ -\x2e\x33\x32\x2c\x31\x38\x2e\x31\x37\x2c\x33\x39\x2e\x33\x34\x2c\ -\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\x32\x38\x2e\ -\x36\x33\x2c\x33\x30\x30\x2c\x35\x32\x38\x2e\x36\x34\x5a\x22\x2f\ -\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x39\x2e\x35\x38\x2c\ -\x33\x39\x35\x2e\x35\x37\x63\x33\x2e\x31\x38\x2d\x2e\x30\x36\x2c\ -\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\x2e\x36\x31\x2c\x30\x2c\ -\x30\x2d\x33\x2e\x32\x33\x2c\x30\x2d\x36\x2e\x34\x33\x2c\x30\x2d\ -\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\x35\x32\x2c\x30\x2d\x32\ -\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\x35\x38\x2d\x33\x32\x2e\ -\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\x38\x2e\x39\x33\x2d\x33\ -\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\x34\x2d\x32\x39\x2e\x35\ -\x37\x2d\x33\x32\x2e\x38\x2c\x34\x2e\x36\x32\x2d\x36\x30\x2e\x38\ -\x2c\x32\x30\x2e\x30\x39\x2d\x38\x34\x2e\x36\x34\x2c\x34\x34\x2e\ -\x34\x33\x2d\x36\x2c\x36\x2e\x31\x37\x2d\x39\x2e\x36\x33\x2c\x31\ -\x33\x2e\x36\x2d\x39\x2e\x36\x31\x2c\x32\x32\x2e\x38\x32\x61\x36\ -\x39\x2e\x32\x38\x2c\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x37\x2e\x33\x38\x63\x35\x2e\x36\x33\x2c\x32\x33\x2e\ -\x32\x37\x2c\x33\x31\x2e\x32\x37\x2c\x33\x30\x2e\x32\x37\x2c\x34\ -\x37\x2e\x39\x33\x2c\x31\x33\x2e\x32\x36\x2c\x32\x34\x2e\x36\x31\ -\x2d\x32\x35\x2e\x31\x31\x2c\x35\x33\x2e\x37\x35\x2d\x33\x33\x2e\ -\x38\x36\x2c\x38\x37\x2d\x32\x36\x2e\x37\x36\x2c\x31\x35\x2c\x33\ -\x2e\x32\x2c\x32\x38\x2c\x31\x30\x2e\x33\x35\x2c\x33\x39\x2e\x36\ -\x2c\x32\x30\x2e\x34\x32\x43\x33\x36\x33\x2e\x31\x37\x2c\x34\x30\ -\x30\x2e\x30\x38\x2c\x33\x37\x30\x2e\x30\x37\x2c\x33\x39\x35\x2e\ -\x37\x35\x2c\x33\x37\x39\x2e\x35\x38\x2c\x33\x39\x35\x2e\x35\x37\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x35\x34\x2e\ -\x36\x35\x2c\x33\x32\x37\x2e\x35\x37\x61\x32\x36\x2e\x31\x32\x2c\ -\x32\x36\x2e\x31\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x37\x2e\x37\x39\ -\x2c\x31\x2e\x36\x36\x63\x35\x2e\x35\x39\x2c\x35\x2e\x37\x32\x2c\ -\x31\x32\x2e\x33\x34\x2c\x38\x2e\x37\x39\x2c\x32\x33\x2c\x38\x2e\ -\x36\x31\x61\x32\x33\x2e\x35\x35\x2c\x32\x33\x2e\x35\x35\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\x41\x32\ -\x35\x2e\x37\x31\x2c\x32\x35\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x34\x35\x34\x2e\x36\x35\x2c\x33\x32\x37\x2e\x35\x37\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\x36\x32\ -\x2c\x32\x38\x39\x2e\x37\x34\x63\x32\x2e\x36\x31\x2d\x2e\x38\x2c\ -\x35\x2e\x32\x33\x2d\x31\x2e\x34\x35\x2c\x37\x2e\x37\x37\x2d\x32\ -\x2e\x30\x38\x6c\x33\x2e\x34\x32\x2d\x2e\x38\x37\x2e\x36\x32\x2d\ -\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\x33\x39\x63\x2e\x33\ -\x36\x2e\x31\x36\x2e\x37\x32\x2e\x33\x33\x2c\x31\x2e\x30\x37\x2e\ -\x35\x31\x6c\x2e\x33\x37\x2e\x31\x38\x61\x36\x36\x2e\x31\x38\x2c\ -\x36\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x36\x2e\x38\ -\x33\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x34\x35\x2c\x33\x30\ -\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\x39\x34\x2d\x31\ -\x30\x2e\x31\x35\x2c\x32\x30\x35\x2e\x38\x33\x2c\x32\x30\x35\x2e\ -\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x33\x2e\x32\x35\x2d\x32\ -\x32\x2e\x37\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\x30\x2e\x33\x2d\ -\x31\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\ -\x2d\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\ -\x31\x2d\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2e\x30\x35\x2d\x31\ -\x34\x36\x2e\x38\x34\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\x37\ -\x2c\x38\x2e\x37\x33\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\x36\ -\x33\x2d\x36\x2e\x38\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\x32\ -\x34\x2c\x32\x32\x2c\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\x33\ -\x2c\x34\x37\x2e\x39\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\x2d\ -\x35\x30\x2e\x35\x37\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\x2c\ -\x31\x37\x35\x2e\x33\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x38\x2e\ -\x31\x34\x2c\x31\x38\x38\x2e\x31\x34\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x34\x31\x35\x2c\x33\x30\x30\x2e\x39\x34\x2c\x36\x37\x2e\x34\x39\ -\x2c\x36\x37\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\x36\ -\x2e\x36\x32\x2c\x32\x38\x39\x2e\x37\x34\x5a\x22\x2f\x3e\x3c\x70\ -\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\ -\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\x30\x37\x2c\x32\x39\x31\ -\x2e\x36\x33\x68\x31\x34\x2e\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\ -\x31\x30\x2e\x36\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\ -\x2c\x31\x63\x32\x37\x2e\x34\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\ -\x32\x36\x2e\x36\x37\x2c\x35\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\ -\x36\x2c\x31\x2e\x31\x37\x2c\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\ -\x33\x31\x2e\x32\x2e\x37\x38\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\ -\x2e\x31\x33\x2c\x30\x2c\x34\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\ -\x37\x68\x31\x31\x2e\x37\x35\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\ -\x31\x39\x2e\x33\x36\x2c\x35\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\ -\x2c\x31\x39\x2e\x32\x32\x2c\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\ -\x31\x38\x2c\x36\x36\x2e\x35\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\ -\x2e\x30\x39\x2c\x39\x2e\x36\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\ -\x2e\x36\x37\x2d\x31\x32\x2e\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\ -\x33\x37\x35\x2e\x31\x32\x63\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\ -\x37\x2d\x31\x32\x2d\x38\x2e\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\ -\x35\x33\x2c\x30\x2d\x33\x35\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\ -\x30\x2e\x39\x31\x2c\x30\x2d\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\ -\x31\x30\x2e\x32\x39\x2c\x36\x2e\x32\x34\x2d\x31\x36\x2e\x32\x34\ -\x2c\x31\x36\x2e\x35\x36\x2d\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\ -\x39\x2d\x2e\x30\x39\x2c\x39\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\ -\x35\x31\x2c\x30\x2c\x30\x2d\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\ -\x2d\x33\x30\x2e\x35\x39\x2c\x30\x2d\x34\x35\x2e\x34\x34\x2e\x31\ -\x39\x2d\x32\x38\x2e\x38\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\ -\x33\x37\x2c\x34\x33\x2e\x38\x39\x2d\x36\x30\x2e\x35\x39\x43\x34\ -\x34\x31\x2e\x37\x31\x2c\x32\x39\x33\x2e\x34\x31\x2c\x34\x34\x35\ -\x2e\x34\x31\x2c\x32\x39\x32\x2e\x35\x39\x2c\x34\x34\x39\x2e\x30\ -\x37\x2c\x32\x39\x31\x2e\x36\x33\x5a\x6d\x33\x38\x2e\x33\x31\x2c\ -\x31\x30\x38\x2e\x34\x39\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\ -\x34\x2d\x33\x32\x2e\x37\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\ -\x37\x2d\x31\x2e\x33\x31\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\ -\x39\x33\x2d\x32\x39\x2e\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\ -\x38\x2e\x37\x37\x2d\x31\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\ -\x32\x31\x2c\x31\x34\x2e\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\ -\x32\x2e\x35\x32\x2d\x2e\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\ -\x2c\x32\x37\x2e\x35\x34\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\ -\x33\x2e\x31\x39\x2c\x33\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x2e\x34\x32\x2c\x33\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\ -\x33\x2c\x34\x36\x2e\x37\x31\x61\x31\x34\x2e\x39\x32\x2c\x31\x34\ -\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\ -\x38\x2e\x36\x36\x63\x2d\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\ -\x32\x2e\x38\x2c\x31\x31\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\ -\x2e\x38\x36\x2c\x34\x2e\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\ -\x38\x2e\x33\x34\x2c\x34\x2e\x32\x32\x2c\x31\x33\x2e\x33\x31\x61\ -\x36\x38\x2e\x33\x38\x2c\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x37\x2e\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\ -\x34\x2c\x33\x2e\x36\x2c\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\ -\x37\x73\x37\x2e\x37\x35\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\ -\x2d\x38\x2e\x37\x36\x61\x31\x31\x31\x2e\x34\x33\x2c\x31\x31\x31\ -\x2e\x34\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\ -\x36\x2c\x39\x2e\x36\x39\x2c\x39\x2e\x36\x39\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x33\x2e\x32\x2d\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\ -\x34\x2e\x36\x34\x2c\x35\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\ -\x33\x2d\x31\x36\x2e\x37\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\ -\x2e\x34\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\ -\x2c\x34\x34\x36\x2e\x38\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\ -\x3d\x22\x4d\x33\x35\x38\x2e\x32\x34\x2c\x34\x31\x35\x2e\x38\x38\ -\x63\x30\x2d\x31\x32\x2e\x30\x35\x2c\x37\x2e\x37\x2d\x31\x39\x2e\ -\x36\x39\x2c\x32\x30\x2d\x31\x39\x2e\x39\x33\x2c\x33\x2e\x32\x35\ -\x2d\x2e\x30\x36\x2c\x36\x2e\x34\x35\x2c\x30\x2c\x39\x2e\x38\x34\ -\x2c\x30\x68\x31\x2e\x32\x34\x63\x30\x2d\x32\x2e\x35\x32\x2c\x30\ -\x2d\x35\x2c\x30\x2d\x37\x2e\x34\x38\x6c\x2d\x36\x31\x2e\x37\x31\ -\x2d\x38\x35\x2e\x36\x32\x2c\x31\x37\x32\x2e\x32\x31\x2d\x32\x33\ -\x39\x48\x34\x34\x31\x2e\x38\x37\x4c\x32\x39\x38\x2e\x36\x32\x2c\ -\x32\x36\x32\x2e\x36\x33\x2c\x31\x35\x35\x2e\x33\x38\x2c\x36\x33\ -\x2e\x38\x36\x48\x39\x37\x2e\x34\x35\x6c\x31\x37\x32\x2e\x32\x31\ -\x2c\x32\x33\x39\x2d\x31\x37\x32\x2e\x32\x33\x2c\x32\x33\x39\x68\ -\x35\x37\x2e\x39\x35\x4c\x32\x39\x38\x2e\x36\x32\x2c\x33\x34\x33\ -\x6c\x35\x39\x2e\x35\x39\x2c\x38\x32\x2e\x36\x39\x5a\x22\x2f\x3e\ -\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x0a\x70\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\x35\x34\x30\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\ +\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\x34\x39\x30\x2e\x31\ +\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\x2e\x39\x2c\x31\x39\ +\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\ +\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\ +\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x37\x2d\ +\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\ +\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\ +\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\x2e\x36\x31\x2d\x34\ +\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\ +\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\ +\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\x39\x2d\x31\x30\x36\ +\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\x38\x2e\x35\x2c\x31\ +\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\x30\x35\x2d\x38\x34\ +\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\ +\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x31\ +\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\ +\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x37\x2d\ +\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\x39\x2e\x37\x34\x2d\ +\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\x38\x30\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\x38\x63\ +\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\x2d\x35\ +\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x36\ +\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\x38\x37\x2c\x32\x37\ +\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\x32\x39\x30\x2e\x31\ +\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\x32\x31\x63\x2d\x31\ +\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\x2d\x33\x2e\x30\x37\ +\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\x43\x34\x31\x34\x2c\ +\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\x32\x32\x2c\x32\x36\ +\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\x32\x36\x30\x2e\x36\ +\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\x36\x37\x2d\x31\x32\ +\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\x31\x37\x35\x2e\x33\ +\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\x33\x35\x2c\x31\x36\ +\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\x2d\x34\x37\x2e\x39\ +\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\x2e\x39\x2d\x31\x2e\ +\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\x39\x2d\x33\x31\x2e\ +\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\x2c\x38\x39\x2e\x37\ +\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\x2e\x38\x34\x2d\x37\ +\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\x31\x2e\x36\x36\x2c\ +\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\x2c\x32\x30\x33\x2e\ +\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\x35\x2e\x37\x34\x2c\ +\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x33\x2e\ +\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\x30\x38\x2c\x39\x2e\ +\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\x2c\x34\x2e\x35\x39\ +\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\x36\x32\x2c\x33\x33\ +\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ +\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\ +\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\x30\x2d\x39\x2e\x32\ +\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\x35\x2c\x39\x2e\x36\ +\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\x2c\x33\x34\x30\x2e\ +\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\x37\x38\x2c\x32\x37\ +\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\x63\x34\x38\x2e\x36\ +\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\x33\x2c\x38\x2e\x32\ +\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\x2c\x31\x30\x2e\x31\ +\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\x38\x31\x2c\x32\x34\ +\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\x2d\x38\x2e\x34\x34\ +\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\x35\x2d\x34\x35\x2e\ +\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\x34\x2d\x31\x33\x2e\ +\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\x36\x33\x2d\x34\x37\ +\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\x33\x2e\x32\x32\x2d\ +\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\x2e\x36\x35\x2d\x38\ +\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\x36\x36\x2c\x31\x37\ +\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\x2e\x39\x33\x2d\x31\ +\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\x36\x39\x2e\x32\x38\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\ +\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ +\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\x30\x2d\x33\x39\x2e\ +\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\x2e\x31\x31\x2d\x34\ +\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\x38\x2c\x31\x37\x2e\ +\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\x2e\x38\x36\x2d\x34\ +\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\x2c\x33\x39\x2e\x33\ +\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\x33\x34\x2c\x34\x31\ +\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\x32\x33\x2c\x33\x30\ +\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x05\x95\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -7883,165 +6664,88 @@ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ \x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ -\x35\x34\x30\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ -\x3a\x23\x39\x32\x39\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ -\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ -\x4d\x32\x39\x30\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\ -\x32\x2c\x37\x33\x2e\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\ -\x31\x2e\x34\x34\x2c\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\ -\x35\x63\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\ -\x38\x31\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\ -\x2e\x30\x35\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\ -\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\ -\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\ -\x2e\x32\x2d\x32\x38\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\ -\x31\x2e\x31\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\ -\x33\x33\x2d\x34\x36\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\ -\x35\x34\x2e\x36\x34\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\ -\x2e\x39\x32\x2d\x34\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\ -\x35\x2e\x32\x32\x2d\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\ -\x2c\x34\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\ -\x2e\x39\x34\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\ -\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\ -\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\ -\x2d\x33\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\ -\x31\x61\x33\x38\x30\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\ -\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\ -\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\ -\x34\x35\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\ -\x32\x37\x37\x2e\x34\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\ -\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\ -\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\ -\x2d\x32\x32\x2c\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\ -\x35\x2d\x33\x39\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\ -\x32\x33\x2e\x33\x37\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\ -\x33\x2c\x33\x38\x2e\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\ -\x2e\x32\x35\x2c\x30\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\ -\x37\x2c\x33\x39\x2e\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\ -\x32\x2e\x31\x2c\x35\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\ -\x31\x37\x2e\x33\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\x3d\x22\ -\x4d\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\ -\x34\x2e\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\ -\x2e\x34\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\ -\x2c\x35\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\ -\x37\x2c\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\ -\x37\x38\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\ -\x2c\x34\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\ -\x37\x35\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\ -\x2c\x35\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\ -\x32\x2c\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\ -\x2e\x35\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\ -\x2e\x36\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\ -\x32\x2e\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\ -\x32\x63\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\ -\x38\x2e\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\ -\x33\x35\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\ -\x30\x2d\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\ -\x2c\x36\x2e\x32\x34\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\ -\x36\x2d\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\ -\x2c\x39\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\ -\x30\x2d\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\ -\x39\x2c\x30\x2d\x34\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\ -\x37\x39\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\ -\x33\x2e\x38\x39\x2d\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\ -\x31\x2c\x32\x38\x32\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\ -\x32\x38\x31\x2e\x33\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\ -\x30\x2e\x33\x37\x5a\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\ -\x34\x39\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\ -\x2e\x37\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\ -\x33\x31\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\ -\x39\x2e\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\ -\x2d\x31\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\ -\x34\x2e\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\ -\x2d\x2e\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\ -\x35\x34\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\ -\x2c\x33\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\ -\x2c\x33\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\ -\x2e\x37\x31\x61\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\ -\x63\x2d\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\ -\x31\x31\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\ -\x34\x2e\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\ -\x2c\x34\x2e\x32\x32\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\ -\x38\x2c\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\ -\x37\x2e\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\ -\x36\x2c\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\ -\x37\x35\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\ -\x36\x61\x31\x31\x31\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\ -\x36\x38\x2c\x39\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\ -\x32\x2d\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\ -\x2c\x35\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\ -\x2e\x37\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\ -\x2e\x35\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x37\x39\x2e\x35\x38\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\ -\x38\x2d\x2e\x30\x36\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\ -\x2e\x36\x31\x2c\x30\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\ -\x2e\x34\x33\x2c\x30\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\ -\x35\x33\x2c\x30\x2d\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\ -\x35\x38\x2d\x33\x32\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\ -\x38\x2e\x39\x33\x2d\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\ -\x34\x2d\x32\x39\x2e\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\ -\x31\x34\x2c\x32\x31\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\ -\x34\x2e\x31\x33\x2c\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\ -\x2d\x39\x2e\x36\x33\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\ -\x2c\x32\x32\x2e\x38\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\ -\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\ -\x35\x2e\x36\x33\x2c\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\ -\x2c\x33\x30\x2e\x32\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\ -\x32\x37\x2c\x32\x34\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\ -\x33\x2e\x37\x35\x2d\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\ -\x2e\x37\x37\x2c\x31\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\ -\x2e\x33\x35\x2c\x33\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\ -\x36\x33\x2e\x31\x37\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\ -\x2e\x30\x37\x2c\x33\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\ -\x38\x2c\x33\x38\x34\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\ -\x31\x61\x32\x36\x2e\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x37\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\ -\x35\x39\x2c\x35\x2e\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\ -\x37\x38\x2c\x32\x33\x2c\x38\x2e\x36\x31\x61\x32\x34\x2c\x32\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\ -\x41\x32\x35\x2e\x36\x38\x2c\x32\x35\x2e\x36\x38\x2c\x30\x2c\x30\ -\x2c\x30\x2c\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\ -\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x63\x32\x2e\x36\x31\x2d\x2e\ -\x38\x2c\x35\x2e\x32\x33\x2d\x31\x2e\x34\x36\x2c\x37\x2e\x37\x37\ -\x2d\x32\x2e\x30\x39\x2c\x31\x2e\x31\x34\x2d\x2e\x32\x38\x2c\x32\ -\x2e\x32\x38\x2d\x2e\x35\x36\x2c\x33\x2e\x34\x32\x2d\x2e\x38\x36\ -\x6c\x2e\x36\x32\x2d\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\ -\x33\x39\x63\x2e\x33\x36\x2e\x31\x35\x2e\x37\x32\x2e\x33\x33\x2c\ -\x31\x2e\x30\x37\x2e\x35\x6c\x2e\x33\x37\x2e\x31\x39\x61\x36\x36\ -\x2e\x31\x38\x2c\x36\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x32\x36\x2e\x38\x33\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x33\ -\x35\x2c\x33\x30\x2e\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\ -\x39\x34\x2d\x31\x30\x2e\x31\x35\x41\x32\x30\x35\x2c\x32\x30\x35\ -\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x36\x34\x2e\x34\x34\x2c\x32\x35\ -\x34\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\x30\x2e\x33\x31\x2d\x31\ -\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\x2d\ -\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\x2d\ -\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2d\x31\x34\x36\x2e\x38\x34\ -\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\x37\x2c\x38\x2e\x37\x32\ -\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\x36\x32\x2d\x36\x2e\x38\ -\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\x32\x34\x2c\x32\x32\x2c\ -\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\x33\x2c\x34\x37\x2e\x39\ -\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\x2d\x35\x30\x2e\x35\x37\ -\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\x2c\x31\x37\x35\x2e\x33\ -\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x37\x2e\x39\x32\x2c\x31\x38\ -\x37\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x31\x35\x2c\x32\ -\x38\x39\x2e\x36\x38\x2c\x36\x37\x2e\x34\x39\x2c\x36\x37\x2e\x34\ -\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\x36\x2e\x36\x32\x2c\x32\ -\x37\x38\x2e\x34\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x09\x92\ +\x35\x34\x30\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ +\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ +\x31\x38\x2c\x37\x37\x43\x34\x30\x32\x2c\x37\x38\x2e\x37\x37\x2c\ +\x34\x39\x30\x2e\x31\x2c\x31\x31\x37\x2e\x30\x37\x2c\x35\x36\x33\ +\x2e\x39\x2c\x31\x39\x33\x2e\x30\x39\x63\x31\x34\x2e\x38\x2c\x31\ +\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\x2e\x39\x33\ +\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\x31\x2e\x31\x32\x2c\x31\ +\x33\x2e\x31\x37\x2d\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\ +\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\ +\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\x2e\x37\x31\x2d\x34\x36\ +\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\ +\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\x37\x35\x2d\x31\x32\x37\ +\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\x35\x34\x2d\x39\x2e\x31\ +\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\x2e\x33\x31\x2d\x31\x35\ +\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x2d\x34\x35\x2c\x31\x37\x2e\ +\x30\x35\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\x33\x2d\x31\ +\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x33\x2d\x38\x2e\x35\x37\ +\x2c\x39\x2e\x31\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\x2e\x33\ +\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\x39\x2d\ +\x37\x2e\x35\x37\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\x39\x2d\ +\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\x2c\x33\ +\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\ +\x30\x2e\x33\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\ +\x2e\x39\x33\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\ +\x36\x30\x2e\x34\x36\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x39\x2e\ +\x38\x37\x2c\x32\x37\x37\x2e\x34\x33\x2c\x37\x38\x2e\x34\x38\x2c\ +\x32\x39\x30\x2e\x31\x38\x2c\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x64\x3d\x22\x4d\x34\x36\x39\x2e\x38\x37\x2c\x33\x33\x32\x2e\ +\x32\x31\x63\x2d\x31\x31\x2c\x2e\x31\x38\x2d\x31\x37\x2e\x38\x33\ +\x2d\x33\x2e\x30\x37\x2d\x32\x33\x2e\x35\x32\x2d\x39\x2e\x31\x32\ +\x43\x34\x31\x34\x2c\x32\x38\x38\x2e\x36\x35\x2c\x33\x37\x35\x2e\ +\x32\x32\x2c\x32\x36\x37\x2e\x31\x36\x2c\x33\x33\x30\x2e\x31\x2c\ +\x32\x36\x30\x2e\x36\x38\x63\x2d\x36\x37\x2e\x33\x37\x2d\x39\x2e\ +\x36\x37\x2d\x31\x32\x36\x2e\x31\x37\x2c\x31\x30\x2e\x38\x33\x2d\ +\x31\x37\x35\x2e\x33\x39\x2c\x36\x31\x2e\x34\x31\x2d\x31\x36\x2e\ +\x33\x35\x2c\x31\x36\x2e\x38\x2d\x34\x30\x2e\x36\x37\x2c\x31\x32\ +\x2d\x34\x37\x2e\x39\x31\x2d\x31\x30\x2d\x33\x2e\x39\x2d\x31\x31\ +\x2e\x39\x2d\x31\x2e\x33\x38\x2d\x32\x32\x2e\x38\x2c\x36\x2e\x38\ +\x39\x2d\x33\x31\x2e\x35\x32\x2c\x34\x31\x2d\x34\x33\x2e\x32\x34\ +\x2c\x38\x39\x2e\x37\x35\x2d\x37\x30\x2e\x34\x38\x2c\x31\x34\x36\ +\x2e\x38\x34\x2d\x37\x39\x2e\x32\x38\x2c\x37\x35\x2e\x36\x2d\x31\ +\x31\x2e\x36\x36\x2c\x31\x34\x33\x2e\x36\x39\x2c\x38\x2e\x30\x35\ +\x2c\x32\x30\x33\x2e\x39\x31\x2c\x35\x38\x2e\x33\x36\x61\x32\x30\ +\x35\x2e\x37\x34\x2c\x32\x30\x35\x2e\x37\x34\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x33\x2e\x32\x35\x2c\x32\x32\x2e\x36\x39\x63\x38\x2e\ +\x30\x38\x2c\x39\x2e\x33\x2c\x39\x2e\x35\x2c\x32\x30\x2e\x36\x32\ +\x2c\x34\x2e\x35\x39\x2c\x33\x32\x2e\x33\x34\x53\x34\x37\x38\x2e\ +\x36\x32\x2c\x33\x33\x31\x2e\x36\x36\x2c\x34\x36\x39\x2e\x38\x37\ +\x2c\x33\x33\x32\x2e\x32\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ +\x3d\x22\x4d\x31\x38\x34\x2e\x35\x32\x2c\x33\x38\x37\x2e\x34\x63\ +\x30\x2d\x39\x2e\x32\x32\x2c\x33\x2e\x35\x37\x2d\x31\x36\x2e\x36\ +\x35\x2c\x39\x2e\x36\x31\x2d\x32\x32\x2e\x38\x31\x43\x32\x31\x38\ +\x2c\x33\x34\x30\x2e\x32\x34\x2c\x32\x34\x36\x2c\x33\x32\x34\x2e\ +\x37\x38\x2c\x32\x37\x38\x2e\x37\x37\x2c\x33\x32\x30\x2e\x31\x35\ +\x63\x34\x38\x2e\x36\x36\x2d\x36\x2e\x38\x36\x2c\x39\x30\x2e\x38\ +\x33\x2c\x38\x2e\x32\x35\x2c\x31\x32\x36\x2e\x36\x33\x2c\x34\x34\ +\x2c\x31\x30\x2e\x31\x38\x2c\x31\x30\x2e\x31\x35\x2c\x31\x32\x2e\ +\x38\x31\x2c\x32\x34\x2c\x37\x2e\x34\x35\x2c\x33\x36\x2e\x30\x35\ +\x2d\x38\x2e\x34\x34\x2c\x31\x39\x2d\x33\x31\x2c\x32\x33\x2e\x34\ +\x35\x2d\x34\x35\x2e\x33\x32\x2c\x38\x2e\x36\x36\x2d\x31\x33\x2e\ +\x34\x2d\x31\x33\x2e\x38\x33\x2d\x32\x38\x2e\x38\x2d\x32\x33\x2e\ +\x36\x33\x2d\x34\x37\x2e\x31\x31\x2d\x32\x37\x2e\x35\x34\x2d\x33\ +\x33\x2e\x32\x32\x2d\x37\x2e\x31\x2d\x36\x32\x2e\x33\x36\x2c\x31\ +\x2e\x36\x35\x2d\x38\x37\x2c\x32\x36\x2e\x37\x37\x2d\x31\x36\x2e\ +\x36\x36\x2c\x31\x37\x2d\x34\x32\x2e\x33\x2c\x31\x30\x2d\x34\x37\ +\x2e\x39\x33\x2d\x31\x33\x2e\x32\x37\x41\x36\x39\x2e\x32\x38\x2c\ +\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x38\x34\x2e\ +\x35\x32\x2c\x33\x38\x37\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\ +\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x32\x33\x63\x2d\x32\x32\x2c\ +\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\ +\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\ +\x38\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\ +\x2e\x38\x36\x2d\x34\x31\x2e\x38\x2c\x32\x32\x2e\x32\x35\x2c\x30\ +\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x38\x2c\x33\x39\x2e\ +\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ +\x32\x33\x2c\x33\x30\x30\x2c\x35\x32\x33\x5a\x22\x2f\x3e\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x06\x23\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8050,154 +6754,99 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x34\x37\x30\x2e\x32\x36\x2c\x35\x33\ -\x30\x2e\x33\x38\x48\x33\x34\x2e\x35\x38\x61\x31\x32\x2e\x38\x37\ -\x2c\x31\x32\x2e\x38\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\x33\ -\x36\x2d\x32\x31\x2e\x36\x39\x6c\x39\x35\x2e\x31\x35\x2d\x31\x30\ -\x31\x2e\x30\x35\x61\x31\x32\x2e\x38\x37\x2c\x31\x32\x2e\x38\x37\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x33\x37\x2d\x34\x48\x35\x36\ -\x35\x2e\x34\x32\x61\x31\x32\x2e\x38\x36\x2c\x31\x32\x2e\x38\x36\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x33\x36\x2c\x32\x31\x2e\x36\ -\x38\x4c\x34\x37\x39\x2e\x36\x33\x2c\x35\x32\x36\x2e\x33\x33\x41\ -\x31\x32\x2e\x38\x34\x2c\x31\x32\x2e\x38\x34\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x34\x37\x30\x2e\x32\x36\x2c\x35\x33\x30\x2e\x33\x38\x5a\ -\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x36\x33\x2e\x35\ -\x38\x2c\x36\x39\x2e\x36\x32\x63\x34\x2e\x31\x34\x2c\x36\x2e\x37\ -\x33\x2c\x38\x2e\x32\x36\x2c\x31\x33\x2e\x34\x38\x2c\x31\x32\x2e\ -\x34\x33\x2c\x32\x30\x2e\x32\x71\x32\x36\x2e\x33\x2c\x34\x32\x2e\ -\x33\x33\x2c\x35\x32\x2e\x36\x32\x2c\x38\x34\x2e\x36\x34\x63\x2e\ -\x31\x39\x2e\x33\x2e\x33\x37\x2e\x36\x33\x2e\x37\x32\x2c\x31\x2e\ -\x32\x34\x68\x2d\x34\x39\x63\x2e\x37\x39\x2c\x31\x2e\x33\x33\x2c\ -\x31\x2e\x33\x37\x2c\x32\x2e\x33\x33\x2c\x32\x2c\x33\x2e\x33\x33\ -\x61\x35\x39\x2e\x39\x2c\x35\x39\x2e\x39\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x38\x2e\x37\x38\x2c\x33\x34\x2e\x34\x35\x63\x2d\x2e\x35\x34\ -\x2c\x31\x30\x2e\x32\x35\x2d\x33\x2e\x37\x36\x2c\x31\x39\x2e\x36\ -\x2d\x38\x2e\x35\x31\x2c\x32\x38\x2e\x34\x32\x2d\x35\x2c\x39\x2e\ -\x33\x32\x2d\x31\x31\x2e\x33\x38\x2c\x31\x37\x2e\x35\x39\x2d\x31\ -\x37\x2e\x33\x39\x2c\x32\x36\x2e\x31\x33\x2d\x34\x2c\x35\x2e\x37\ -\x33\x2d\x37\x2e\x39\x32\x2c\x31\x31\x2e\x35\x36\x2d\x31\x30\x2e\ -\x37\x32\x2c\x31\x38\x2e\x31\x34\x2d\x35\x2e\x38\x34\x2c\x31\x33\ -\x2e\x37\x31\x2d\x32\x2e\x39\x32\x2c\x32\x37\x2e\x31\x33\x2c\x36\ -\x2e\x32\x39\x2c\x33\x37\x2e\x35\x35\x61\x36\x39\x2e\x37\x36\x2c\ -\x36\x39\x2e\x37\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x37\x2e\x39\ -\x35\x2c\x31\x34\x2e\x31\x37\x63\x31\x2e\x33\x36\x2e\x37\x38\x2c\ -\x31\x2e\x32\x31\x2c\x31\x2e\x33\x32\x2e\x34\x37\x2c\x32\x2e\x34\ -\x35\x2d\x34\x2e\x34\x36\x2c\x36\x2e\x37\x35\x2d\x31\x34\x2e\x32\ -\x31\x2c\x32\x32\x2e\x31\x31\x2d\x31\x34\x2e\x32\x31\x2c\x32\x32\ -\x2e\x31\x31\x73\x2d\x31\x2e\x36\x37\x2d\x2e\x38\x36\x2d\x32\x2e\ -\x31\x39\x2d\x31\x2e\x32\x63\x2d\x31\x30\x2e\x35\x36\x2d\x36\x2e\ -\x38\x31\x2d\x32\x30\x2e\x32\x32\x2d\x31\x34\x2e\x37\x38\x2d\x32\ -\x37\x2e\x39\x31\x2d\x32\x35\x2e\x32\x38\x73\x2d\x31\x32\x2e\x33\ -\x35\x2d\x32\x32\x2e\x31\x34\x2d\x31\x32\x2e\x36\x36\x2d\x33\x35\ -\x2e\x36\x32\x61\x36\x33\x2c\x36\x33\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x36\x2e\x35\x2d\x32\x38\x2e\x38\x33\x63\x34\x2e\x34\x32\x2d\x39\ -\x2e\x33\x33\x2c\x31\x30\x2e\x33\x36\x2d\x31\x37\x2e\x35\x32\x2c\ -\x31\x36\x2e\x32\x36\x2d\x32\x35\x2e\x37\x35\x2c\x34\x2e\x39\x32\ -\x2d\x36\x2e\x38\x36\x2c\x39\x2e\x39\x33\x2d\x31\x33\x2e\x36\x36\ -\x2c\x31\x33\x2e\x34\x35\x2d\x32\x31\x2e\x35\x32\x2c\x34\x2e\x38\ -\x37\x2d\x31\x30\x2e\x38\x38\x2c\x34\x2e\x38\x35\x2d\x32\x31\x2e\ -\x36\x33\x2d\x31\x2d\x33\x32\x2e\x30\x38\x2d\x33\x2e\x35\x36\x2d\ -\x36\x2e\x33\x33\x2d\x38\x2e\x36\x39\x2d\x31\x31\x2d\x31\x34\x2e\ -\x32\x35\x2d\x31\x35\x2e\x32\x35\x61\x35\x2e\x34\x34\x2c\x35\x2e\ -\x34\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x2e\x34\x36\x2d\x31\x2e\ -\x31\x39\x63\x2d\x31\x33\x2e\x33\x38\x2e\x30\x35\x2d\x34\x31\x2e\ -\x34\x35\x2e\x31\x33\x2d\x34\x32\x2e\x32\x32\x2e\x30\x38\x2c\x30\ -\x2d\x2e\x31\x33\x2c\x31\x31\x2e\x35\x31\x2d\x31\x39\x2c\x31\x36\ -\x2e\x39\x31\x2d\x32\x37\x2e\x36\x36\x6c\x34\x38\x2e\x38\x2d\x37\ -\x38\x2e\x35\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x33\x33\x34\x2c\x36\x39\x2e\x36\x32\x63\x34\x2e\x31\x34\x2c\x36\ -\x2e\x37\x33\x2c\x38\x2e\x32\x36\x2c\x31\x33\x2e\x34\x38\x2c\x31\ -\x32\x2e\x34\x33\x2c\x32\x30\x2e\x32\x4c\x33\x39\x39\x2c\x31\x37\ -\x34\x2e\x34\x36\x63\x2e\x31\x39\x2e\x33\x2e\x33\x37\x2e\x36\x33\ -\x2e\x37\x32\x2c\x31\x2e\x32\x34\x48\x33\x35\x30\x2e\x37\x39\x6c\ -\x31\x2e\x39\x35\x2c\x33\x2e\x33\x33\x61\x35\x39\x2e\x39\x2c\x35\ -\x39\x2e\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x2e\x37\x38\x2c\x33\ -\x34\x2e\x34\x35\x63\x2d\x2e\x35\x34\x2c\x31\x30\x2e\x32\x35\x2d\ -\x33\x2e\x37\x36\x2c\x31\x39\x2e\x36\x2d\x38\x2e\x35\x31\x2c\x32\ -\x38\x2e\x34\x32\x2d\x35\x2c\x39\x2e\x33\x32\x2d\x31\x31\x2e\x33\ -\x38\x2c\x31\x37\x2e\x35\x39\x2d\x31\x37\x2e\x33\x39\x2c\x32\x36\ -\x2e\x31\x33\x2d\x34\x2c\x35\x2e\x37\x33\x2d\x37\x2e\x39\x31\x2c\ -\x31\x31\x2e\x35\x36\x2d\x31\x30\x2e\x37\x32\x2c\x31\x38\x2e\x31\ -\x34\x2d\x35\x2e\x38\x34\x2c\x31\x33\x2e\x37\x31\x2d\x32\x2e\x39\ -\x32\x2c\x32\x37\x2e\x31\x33\x2c\x36\x2e\x32\x39\x2c\x33\x37\x2e\ -\x35\x35\x61\x36\x39\x2e\x37\x36\x2c\x36\x39\x2e\x37\x36\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x31\x37\x2e\x39\x35\x2c\x31\x34\x2e\x31\x37\ -\x63\x31\x2e\x33\x36\x2e\x37\x38\x2c\x31\x2e\x32\x32\x2c\x31\x2e\ -\x33\x32\x2e\x34\x37\x2c\x32\x2e\x34\x35\x2d\x34\x2e\x34\x36\x2c\ -\x36\x2e\x37\x35\x2d\x31\x34\x2e\x32\x31\x2c\x32\x32\x2e\x31\x31\ -\x2d\x31\x34\x2e\x32\x31\x2c\x32\x32\x2e\x31\x31\x73\x2d\x31\x2e\ -\x36\x37\x2d\x2e\x38\x36\x2d\x32\x2e\x31\x39\x2d\x31\x2e\x32\x63\ -\x2d\x31\x30\x2e\x35\x36\x2d\x36\x2e\x38\x31\x2d\x32\x30\x2e\x32\ -\x32\x2d\x31\x34\x2e\x37\x38\x2d\x32\x37\x2e\x39\x2d\x32\x35\x2e\ -\x32\x38\x53\x32\x39\x33\x2c\x33\x31\x33\x2e\x38\x33\x2c\x32\x39\ -\x32\x2e\x36\x34\x2c\x33\x30\x30\x2e\x33\x35\x61\x36\x33\x2e\x31\ -\x33\x2c\x36\x33\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x2e\ -\x35\x2d\x32\x38\x2e\x38\x33\x63\x34\x2e\x34\x32\x2d\x39\x2e\x33\ -\x33\x2c\x31\x30\x2e\x33\x36\x2d\x31\x37\x2e\x35\x32\x2c\x31\x36\ -\x2e\x32\x36\x2d\x32\x35\x2e\x37\x35\x2c\x34\x2e\x39\x32\x2d\x36\ -\x2e\x38\x36\x2c\x39\x2e\x39\x33\x2d\x31\x33\x2e\x36\x36\x2c\x31\ -\x33\x2e\x34\x35\x2d\x32\x31\x2e\x35\x32\x2c\x34\x2e\x38\x37\x2d\ -\x31\x30\x2e\x38\x38\x2c\x34\x2e\x38\x35\x2d\x32\x31\x2e\x36\x33\ -\x2d\x31\x2d\x33\x32\x2e\x30\x38\x2d\x33\x2e\x35\x36\x2d\x36\x2e\ -\x33\x33\x2d\x38\x2e\x36\x39\x2d\x31\x31\x2d\x31\x34\x2e\x32\x35\ -\x2d\x31\x35\x2e\x32\x35\x61\x35\x2e\x34\x34\x2c\x35\x2e\x34\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x2e\x34\x36\x2d\x31\x2e\x31\x39\ -\x63\x2d\x31\x33\x2e\x33\x37\x2e\x30\x35\x2d\x34\x31\x2e\x34\x35\ -\x2e\x31\x33\x2d\x34\x32\x2e\x32\x32\x2e\x30\x38\x2c\x30\x2d\x2e\ -\x31\x33\x2c\x31\x31\x2e\x35\x31\x2d\x31\x39\x2c\x31\x36\x2e\x39\ -\x31\x2d\x32\x37\x2e\x36\x36\x71\x32\x34\x2e\x34\x2d\x33\x39\x2e\ -\x32\x37\x2c\x34\x38\x2e\x38\x2d\x37\x38\x2e\x35\x33\x5a\x22\x2f\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x35\x65\x36\ +\x30\x36\x31\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ +\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ +\x32\x36\x2c\x39\x34\x2e\x37\x63\x31\x31\x30\x2e\x39\x34\x2c\x31\ +\x2e\x37\x37\x2c\x31\x39\x38\x2e\x33\x39\x2c\x33\x39\x2e\x37\x37\ +\x2c\x32\x37\x31\x2e\x36\x32\x2c\x31\x31\x35\x2e\x32\x31\x2c\x31\ +\x34\x2e\x36\x39\x2c\x31\x35\x2e\x31\x33\x2c\x31\x31\x2e\x37\x32\ +\x2c\x33\x33\x2e\x36\x37\x2c\x33\x2e\x32\x34\x2c\x34\x33\x2e\x37\ +\x2d\x31\x31\x2c\x31\x33\x2e\x30\x37\x2d\x32\x38\x2e\x34\x2c\x31\ +\x32\x2e\x38\x39\x2d\x34\x31\x2e\x31\x35\x2e\x38\x33\x2d\x31\x35\ +\x2d\x31\x34\x2e\x31\x36\x2d\x33\x30\x2d\x32\x38\x2e\x35\x2d\x34\ +\x36\x2e\x32\x35\x2d\x34\x30\x2e\x37\x39\x2d\x33\x38\x2e\x31\x31\ +\x2d\x32\x38\x2e\x37\x38\x2d\x38\x30\x2e\x37\x31\x2d\x34\x36\x2e\ +\x33\x39\x2d\x31\x32\x36\x2e\x37\x38\x2d\x35\x34\x2e\x32\x33\x2d\ +\x35\x33\x2e\x36\x2d\x39\x2e\x31\x32\x2d\x31\x30\x36\x2e\x30\x39\ +\x2d\x34\x2e\x32\x38\x2d\x31\x35\x37\x2e\x32\x38\x2c\x31\x35\x2e\ +\x31\x31\x43\x31\x34\x39\x2c\x31\x39\x31\x2e\x34\x35\x2c\x31\x31\ +\x30\x2c\x32\x31\x38\x2e\x31\x32\x2c\x37\x36\x2e\x34\x2c\x32\x35\ +\x33\x2e\x38\x35\x63\x2d\x38\x2e\x35\x2c\x39\x2d\x31\x38\x2e\x35\ +\x2c\x31\x32\x2e\x32\x33\x2d\x33\x30\x2c\x37\x2e\x39\x31\x2d\x31\ +\x39\x2e\x39\x33\x2d\x37\x2e\x35\x2d\x32\x35\x2d\x33\x33\x2e\x38\ +\x32\x2d\x39\x2e\x36\x36\x2d\x35\x30\x2e\x32\x31\x61\x33\x37\x37\ +\x2e\x33\x2c\x33\x37\x37\x2e\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x35\ +\x37\x2e\x31\x38\x2d\x35\x30\x63\x34\x32\x2e\x37\x2d\x33\x30\x2e\ +\x33\x35\x2c\x38\x39\x2e\x32\x34\x2d\x35\x30\x2e\x37\x31\x2c\x31\ +\x33\x39\x2e\x36\x39\x2d\x36\x30\x43\x32\x35\x35\x2e\x34\x31\x2c\ +\x39\x37\x2e\x35\x35\x2c\x32\x37\x37\x2e\x36\x2c\x39\x36\x2e\x31\ +\x38\x2c\x32\x39\x30\x2e\x32\x36\x2c\x39\x34\x2e\x37\x5a\x22\x2f\ \x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x30\x34\x2e\x33\x36\x2c\ -\x36\x39\x2e\x36\x32\x63\x34\x2e\x31\x35\x2c\x36\x2e\x37\x33\x2c\ -\x38\x2e\x32\x36\x2c\x31\x33\x2e\x34\x38\x2c\x31\x32\x2e\x34\x34\ -\x2c\x32\x30\x2e\x32\x71\x32\x36\x2e\x33\x2c\x34\x32\x2e\x33\x33\ -\x2c\x35\x32\x2e\x36\x31\x2c\x38\x34\x2e\x36\x34\x63\x2e\x32\x2e\ -\x33\x2e\x33\x37\x2e\x36\x33\x2e\x37\x32\x2c\x31\x2e\x32\x34\x68\ -\x2d\x34\x39\x6c\x32\x2c\x33\x2e\x33\x33\x61\x36\x30\x2c\x36\x30\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x2e\x37\x39\x2c\x33\x34\x2e\x34\ -\x35\x63\x2d\x2e\x35\x35\x2c\x31\x30\x2e\x32\x35\x2d\x33\x2e\x37\ -\x37\x2c\x31\x39\x2e\x36\x2d\x38\x2e\x35\x32\x2c\x32\x38\x2e\x34\ -\x32\x2d\x35\x2c\x39\x2e\x33\x32\x2d\x31\x31\x2e\x33\x38\x2c\x31\ -\x37\x2e\x35\x39\x2d\x31\x37\x2e\x33\x39\x2c\x32\x36\x2e\x31\x33\ -\x2d\x34\x2c\x35\x2e\x37\x33\x2d\x37\x2e\x39\x31\x2c\x31\x31\x2e\ -\x35\x36\x2d\x31\x30\x2e\x37\x32\x2c\x31\x38\x2e\x31\x34\x2d\x35\ -\x2e\x38\x34\x2c\x31\x33\x2e\x37\x31\x2d\x32\x2e\x39\x32\x2c\x32\ -\x37\x2e\x31\x33\x2c\x36\x2e\x33\x2c\x33\x37\x2e\x35\x35\x61\x36\ -\x39\x2e\x37\x32\x2c\x36\x39\x2e\x37\x32\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x31\x37\x2e\x39\x34\x2c\x31\x34\x2e\x31\x37\x63\x31\x2e\x33\ -\x36\x2e\x37\x38\x2c\x31\x2e\x32\x32\x2c\x31\x2e\x33\x32\x2e\x34\ -\x37\x2c\x32\x2e\x34\x35\x2d\x34\x2e\x34\x36\x2c\x36\x2e\x37\x35\ -\x2d\x31\x34\x2e\x32\x2c\x32\x32\x2e\x31\x31\x2d\x31\x34\x2e\x32\ -\x2c\x32\x32\x2e\x31\x31\x73\x2d\x31\x2e\x36\x38\x2d\x2e\x38\x36\ -\x2d\x32\x2e\x32\x2d\x31\x2e\x32\x43\x34\x39\x33\x2c\x33\x35\x34\ -\x2e\x34\x34\x2c\x34\x38\x33\x2e\x33\x38\x2c\x33\x34\x36\x2e\x34\ -\x37\x2c\x34\x37\x35\x2e\x37\x2c\x33\x33\x36\x53\x34\x36\x33\x2e\ -\x33\x34\x2c\x33\x31\x33\x2e\x38\x33\x2c\x34\x36\x33\x2c\x33\x30\ -\x30\x2e\x33\x35\x61\x36\x33\x2e\x31\x33\x2c\x36\x33\x2e\x31\x33\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x2e\x35\x2d\x32\x38\x2e\x38\x33\ -\x63\x34\x2e\x34\x32\x2d\x39\x2e\x33\x33\x2c\x31\x30\x2e\x33\x36\ -\x2d\x31\x37\x2e\x35\x32\x2c\x31\x36\x2e\x32\x37\x2d\x32\x35\x2e\ -\x37\x35\x2c\x34\x2e\x39\x31\x2d\x36\x2e\x38\x36\x2c\x39\x2e\x39\ -\x32\x2d\x31\x33\x2e\x36\x36\x2c\x31\x33\x2e\x34\x35\x2d\x32\x31\ -\x2e\x35\x32\x2c\x34\x2e\x38\x36\x2d\x31\x30\x2e\x38\x38\x2c\x34\ -\x2e\x38\x34\x2d\x32\x31\x2e\x36\x33\x2d\x31\x2d\x33\x32\x2e\x30\ -\x38\x2d\x33\x2e\x35\x36\x2d\x36\x2e\x33\x33\x2d\x38\x2e\x36\x39\ -\x2d\x31\x31\x2d\x31\x34\x2e\x32\x35\x2d\x31\x35\x2e\x32\x35\x61\ -\x35\x2e\x34\x34\x2c\x35\x2e\x34\x34\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x33\x2e\x34\x36\x2d\x31\x2e\x31\x39\x63\x2d\x31\x33\x2e\x33\x37\ -\x2e\x30\x35\x2d\x34\x31\x2e\x34\x34\x2e\x31\x33\x2d\x34\x32\x2e\ -\x32\x32\x2e\x30\x38\x2c\x30\x2d\x2e\x31\x33\x2c\x31\x31\x2e\x35\ -\x31\x2d\x31\x39\x2c\x31\x36\x2e\x39\x31\x2d\x32\x37\x2e\x36\x36\ -\x71\x32\x34\x2e\x34\x31\x2d\x33\x39\x2e\x32\x37\x2c\x34\x38\x2e\ -\x38\x2d\x37\x38\x2e\x35\x33\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ -\x3e\ -\x00\x00\x06\x40\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x36\x38\x2e\x35\x31\x2c\ +\x33\x34\x38\x63\x2d\x31\x30\x2e\x39\x31\x2e\x31\x38\x2d\x31\x37\ +\x2e\x36\x39\x2d\x33\x2e\x30\x35\x2d\x32\x33\x2e\x33\x34\x2d\x39\ +\x2e\x30\x36\x2d\x33\x32\x2e\x31\x32\x2d\x33\x34\x2e\x31\x38\x2d\ +\x37\x30\x2e\x35\x39\x2d\x35\x35\x2e\x35\x2d\x31\x31\x35\x2e\x33\ +\x36\x2d\x36\x31\x2e\x39\x33\x2d\x36\x36\x2e\x38\x35\x2d\x39\x2e\ +\x35\x39\x2d\x31\x32\x35\x2e\x32\x2c\x31\x30\x2e\x37\x35\x2d\x31\ +\x37\x34\x2c\x36\x30\x2e\x39\x34\x2d\x31\x36\x2e\x32\x32\x2c\x31\ +\x36\x2e\x36\x37\x2d\x34\x30\x2e\x33\x36\x2c\x31\x31\x2e\x39\x31\ +\x2d\x34\x37\x2e\x35\x34\x2d\x31\x30\x2d\x33\x2e\x38\x38\x2d\x31\ +\x31\x2e\x38\x2d\x31\x2e\x33\x37\x2d\x32\x32\x2e\x36\x32\x2c\x36\ +\x2e\x38\x34\x2d\x33\x31\x2e\x32\x37\x2c\x34\x30\x2e\x36\x38\x2d\ +\x34\x32\x2e\x39\x31\x2c\x38\x39\x2e\x30\x36\x2d\x36\x39\x2e\x39\ +\x34\x2c\x31\x34\x35\x2e\x37\x31\x2d\x37\x38\x2e\x36\x38\x2c\x37\ +\x35\x2d\x31\x31\x2e\x35\x37\x2c\x31\x34\x32\x2e\x35\x39\x2c\x38\ +\x2c\x32\x30\x32\x2e\x33\x35\x2c\x35\x37\x2e\x39\x32\x61\x32\x30\ +\x33\x2e\x34\x37\x2c\x32\x30\x33\x2e\x34\x37\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x33\x2e\x30\x37\x2c\x32\x32\x2e\x35\x32\x63\x38\x2c\ +\x39\x2e\x32\x32\x2c\x39\x2e\x34\x33\x2c\x32\x30\x2e\x34\x36\x2c\ +\x34\x2e\x35\x36\x2c\x33\x32\x2e\x30\x38\x53\x34\x37\x37\x2e\x31\ +\x39\x2c\x33\x34\x37\x2e\x34\x31\x2c\x34\x36\x38\x2e\x35\x31\x2c\ +\x33\x34\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ +\x38\x35\x2e\x33\x36\x2c\x34\x30\x32\x2e\x37\x33\x63\x30\x2d\x39\ +\x2e\x31\x35\x2c\x33\x2e\x35\x35\x2d\x31\x36\x2e\x35\x32\x2c\x39\ +\x2e\x35\x34\x2d\x32\x32\x2e\x36\x34\x2c\x32\x33\x2e\x36\x36\x2d\ +\x32\x34\x2e\x31\x35\x2c\x35\x31\x2e\x34\x34\x2d\x33\x39\x2e\x35\ +\x2c\x38\x34\x2d\x34\x34\x2e\x30\x39\x2c\x34\x38\x2e\x32\x38\x2d\ +\x36\x2e\x38\x31\x2c\x39\x30\x2e\x31\x34\x2c\x38\x2e\x31\x39\x2c\ +\x31\x32\x35\x2e\x36\x37\x2c\x34\x33\x2e\x36\x32\x2c\x31\x30\x2e\ +\x30\x39\x2c\x31\x30\x2e\x30\x37\x2c\x31\x32\x2e\x37\x2c\x32\x33\ +\x2e\x38\x32\x2c\x37\x2e\x33\x39\x2c\x33\x35\x2e\x37\x37\x2d\x38\ +\x2e\x33\x39\x2c\x31\x38\x2e\x38\x35\x2d\x33\x30\x2e\x37\x37\x2c\ +\x32\x33\x2e\x32\x37\x2d\x34\x35\x2c\x38\x2e\x36\x2d\x31\x33\x2e\ +\x33\x2d\x31\x33\x2e\x37\x33\x2d\x32\x38\x2e\x35\x38\x2d\x32\x33\ +\x2e\x34\x35\x2d\x34\x36\x2e\x37\x35\x2d\x32\x37\x2e\x33\x33\x2d\ +\x33\x33\x2d\x37\x2e\x30\x35\x2d\x36\x31\x2e\x38\x38\x2c\x31\x2e\ +\x36\x34\x2d\x38\x36\x2e\x33\x2c\x32\x36\x2e\x35\x36\x2d\x31\x36\ +\x2e\x35\x34\x2c\x31\x36\x2e\x38\x38\x2d\x34\x32\x2c\x39\x2e\x39\ +\x33\x2d\x34\x37\x2e\x35\x37\x2d\x31\x33\x2e\x31\x37\x41\x37\x30\ +\x2e\x34\x31\x2c\x37\x30\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x31\x38\x35\x2e\x33\x36\x2c\x34\x30\x32\x2e\x37\x33\x5a\x22\x2f\ +\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x33\x37\ +\x2e\x33\x63\x2d\x32\x31\x2e\x38\x33\x2c\x30\x2d\x33\x38\x2e\x38\ +\x34\x2d\x31\x38\x2e\x33\x31\x2d\x33\x38\x2e\x38\x31\x2d\x34\x31\ +\x2e\x37\x39\x2c\x30\x2d\x32\x33\x2e\x31\x39\x2c\x31\x37\x2e\x30\ +\x36\x2d\x34\x31\x2e\x35\x31\x2c\x33\x38\x2e\x35\x36\x2d\x34\x31\ +\x2e\x34\x37\x2c\x32\x32\x2e\x30\x39\x2c\x30\x2c\x33\x39\x2c\x31\ +\x38\x2c\x33\x39\x2c\x34\x31\x2e\x34\x39\x53\x33\x32\x31\x2e\x39\ +\x31\x2c\x35\x33\x37\x2e\x32\x39\x2c\x33\x30\x30\x2c\x35\x33\x37\ +\x2e\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x31\x35\ +\x36\x2e\x37\x36\x2c\x36\x31\x2c\x33\x30\x30\x2c\x32\x35\x39\x2e\ +\x38\x2c\x34\x34\x33\x2e\x32\x35\x2c\x36\x31\x68\x35\x37\x2e\x39\ +\x33\x4c\x33\x32\x39\x2c\x33\x30\x30\x2c\x35\x30\x31\x2e\x31\x39\ +\x2c\x35\x33\x39\x48\x34\x34\x33\x2e\x32\x35\x4c\x33\x30\x30\x2c\ +\x33\x34\x30\x2e\x31\x39\x2c\x31\x35\x36\x2e\x37\x36\x2c\x35\x33\ +\x39\x48\x39\x38\x2e\x38\x31\x4c\x32\x37\x31\x2c\x33\x30\x30\x2c\ +\x39\x38\x2e\x38\x33\x2c\x36\x31\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ +\x67\x3e\ +\x00\x00\x0a\x76\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8206,100 +6855,168 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x30\x38\x2c\x32\x31\ -\x34\x2e\x31\x34\x63\x30\x2c\x33\x37\x2e\x36\x32\x2e\x33\x35\x2c\ -\x37\x35\x2e\x32\x36\x2d\x2e\x32\x35\x2c\x31\x31\x32\x2e\x38\x37\ -\x2d\x2e\x31\x35\x2c\x38\x2e\x39\x2c\x32\x2e\x34\x34\x2c\x31\x33\ -\x2e\x31\x37\x2c\x31\x30\x2e\x35\x32\x2c\x31\x36\x2e\x39\x35\x2c\ -\x34\x30\x2e\x38\x38\x2c\x31\x39\x2e\x31\x36\x2c\x36\x32\x2e\x36\ -\x34\x2c\x36\x31\x2c\x35\x36\x2e\x32\x35\x2c\x31\x30\x36\x2e\x34\ -\x2d\x35\x2e\x37\x2c\x34\x30\x2e\x35\x34\x2d\x34\x30\x2e\x32\x32\ -\x2c\x37\x35\x2e\x37\x2d\x38\x31\x2e\x37\x36\x2c\x38\x33\x2e\x32\ -\x37\x2d\x34\x39\x2e\x31\x33\x2c\x39\x2d\x39\x37\x2e\x32\x39\x2d\ -\x32\x30\x2e\x31\x31\x2d\x31\x31\x33\x2e\x36\x35\x2d\x36\x38\x2e\ -\x36\x32\x2d\x31\x35\x2e\x37\x31\x2d\x34\x36\x2e\x35\x35\x2c\x36\ -\x2e\x33\x2d\x39\x39\x2e\x33\x31\x2c\x35\x31\x2e\x36\x2d\x31\x32\ -\x30\x2e\x37\x2c\x39\x2e\x34\x39\x2d\x34\x2e\x34\x37\x2c\x31\x31\ -\x2e\x32\x34\x2d\x39\x2e\x35\x39\x2c\x31\x31\x2e\x32\x2d\x31\x38\ -\x2e\x38\x36\x71\x2d\x2e\x35\x2d\x31\x31\x31\x2e\x36\x37\x2d\x2e\ -\x31\x35\x2d\x32\x32\x33\x2e\x33\x36\x63\x30\x2d\x32\x32\x2e\x36\ -\x34\x2c\x31\x32\x2e\x32\x32\x2d\x33\x36\x2e\x37\x35\x2c\x33\x31\ -\x2e\x35\x38\x2d\x33\x37\x2e\x33\x32\x2c\x32\x30\x2e\x30\x36\x2d\ -\x2e\x35\x39\x2c\x33\x34\x2e\x33\x2c\x31\x32\x2e\x35\x2c\x33\x34\ -\x2e\x34\x38\x2c\x33\x32\x2e\x38\x38\x2e\x33\x34\x2c\x33\x38\x2e\ -\x38\x33\x2e\x30\x39\x2c\x37\x37\x2e\x36\x36\x2e\x30\x39\x2c\x31\ -\x31\x36\x2e\x34\x39\x5a\x6d\x2d\x35\x30\x2e\x36\x39\x2c\x37\x35\ -\x2e\x39\x34\x63\x30\x2c\x31\x36\x2e\x38\x2d\x2e\x34\x33\x2c\x33\ -\x33\x2e\x36\x32\x2e\x31\x38\x2c\x35\x30\x2e\x34\x2e\x33\x2c\x38\ -\x2d\x31\x2e\x38\x32\x2c\x31\x31\x2e\x33\x35\x2d\x31\x30\x2e\x30\ -\x36\x2c\x31\x34\x2d\x34\x30\x2e\x30\x38\x2c\x31\x33\x2d\x36\x33\ -\x2e\x31\x32\x2c\x35\x34\x2e\x31\x38\x2d\x35\x35\x2e\x33\x32\x2c\ -\x39\x36\x2e\x38\x34\x2c\x37\x2e\x30\x35\x2c\x33\x38\x2e\x34\x37\ -\x2c\x34\x34\x2e\x32\x39\x2c\x36\x38\x2e\x33\x32\x2c\x38\x34\x2e\ -\x33\x34\x2c\x36\x37\x2e\x35\x39\x2c\x34\x33\x2d\x2e\x37\x39\x2c\ -\x37\x36\x2e\x38\x33\x2d\x33\x31\x2e\x36\x2c\x38\x32\x2e\x36\x34\ -\x2d\x37\x37\x2e\x37\x31\x2c\x34\x2e\x32\x37\x2d\x33\x33\x2e\x38\ -\x32\x2d\x31\x35\x2e\x38\x2d\x37\x32\x2e\x38\x33\x2d\x35\x37\x2e\ -\x31\x37\x2d\x38\x36\x2e\x38\x35\x2d\x37\x2e\x37\x31\x2d\x32\x2e\ -\x36\x31\x2d\x39\x2e\x36\x37\x2d\x35\x2e\x37\x2d\x39\x2e\x35\x39\ -\x2d\x31\x33\x2e\x32\x31\x2e\x33\x36\x2d\x33\x34\x2c\x2e\x31\x37\ -\x2d\x36\x38\x2c\x2e\x31\x35\x2d\x31\x30\x32\x2c\x30\x2d\x31\x35\ -\x2e\x33\x34\x2d\x36\x2e\x32\x32\x2d\x32\x34\x2d\x31\x37\x2e\x31\ -\x39\x2d\x32\x34\x2e\x32\x34\x2d\x31\x31\x2e\x34\x36\x2d\x2e\x32\ -\x2d\x31\x37\x2e\x39\x34\x2c\x38\x2e\x36\x38\x2d\x31\x38\x2c\x32\ -\x34\x2e\x37\x35\x43\x32\x35\x30\x2e\x33\x36\x2c\x32\x35\x36\x2e\ -\x34\x37\x2c\x32\x35\x30\x2e\x33\x39\x2c\x32\x37\x33\x2e\x32\x37\ -\x2c\x32\x35\x30\x2e\x33\x39\x2c\x32\x39\x30\x2e\x30\x38\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x31\x2e\x37\x31\ -\x2c\x31\x34\x36\x2e\x30\x39\x63\x2d\x31\x30\x2e\x33\x37\x2c\x30\ -\x2d\x32\x30\x2e\x37\x34\x2e\x32\x32\x2d\x33\x31\x2e\x30\x39\x2d\ -\x2e\x30\x36\x2d\x31\x32\x2e\x32\x37\x2d\x2e\x33\x33\x2d\x32\x30\ -\x2e\x30\x37\x2d\x36\x2e\x38\x37\x2d\x31\x39\x2e\x37\x31\x2d\x31\ -\x36\x2c\x2e\x33\x35\x2d\x38\x2e\x38\x37\x2c\x37\x2e\x37\x32\x2d\ -\x31\x34\x2e\x39\x32\x2c\x31\x39\x2e\x34\x35\x2d\x31\x35\x71\x33\ -\x31\x2e\x36\x38\x2d\x2e\x33\x37\x2c\x36\x33\x2e\x33\x38\x2c\x30\ -\x63\x31\x31\x2e\x35\x36\x2e\x31\x34\x2c\x31\x39\x2c\x36\x2e\x35\ -\x32\x2c\x31\x39\x2e\x31\x31\x2c\x31\x35\x2e\x33\x36\x53\x34\x32\ -\x35\x2e\x37\x31\x2c\x31\x34\x35\x2e\x35\x38\x2c\x34\x31\x34\x2c\ -\x31\x34\x36\x43\x34\x30\x33\x2e\x32\x35\x2c\x31\x34\x36\x2e\x33\ -\x39\x2c\x33\x39\x32\x2e\x34\x37\x2c\x31\x34\x36\x2e\x30\x38\x2c\ -\x33\x38\x31\x2e\x37\x31\x2c\x31\x34\x36\x2e\x30\x39\x5a\x22\x2f\ -\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x31\x2e\x37\x31\x2c\ -\x32\x32\x30\x2e\x38\x33\x63\x2d\x31\x30\x2e\x33\x37\x2c\x30\x2d\ -\x32\x30\x2e\x37\x34\x2e\x32\x32\x2d\x33\x31\x2e\x30\x39\x2d\x2e\ -\x30\x36\x2d\x31\x32\x2e\x32\x37\x2d\x2e\x33\x33\x2d\x32\x30\x2e\ -\x30\x37\x2d\x36\x2e\x38\x36\x2d\x31\x39\x2e\x37\x31\x2d\x31\x36\ -\x2c\x2e\x33\x35\x2d\x38\x2e\x38\x37\x2c\x37\x2e\x37\x32\x2d\x31\ -\x34\x2e\x39\x32\x2c\x31\x39\x2e\x34\x35\x2d\x31\x35\x2e\x30\x35\ -\x71\x33\x31\x2e\x36\x38\x2d\x2e\x33\x37\x2c\x36\x33\x2e\x33\x38\ -\x2c\x30\x63\x31\x31\x2e\x35\x36\x2e\x31\x34\x2c\x31\x39\x2c\x36\ -\x2e\x35\x32\x2c\x31\x39\x2e\x31\x31\x2c\x31\x35\x2e\x33\x36\x73\ -\x2d\x37\x2e\x31\x34\x2c\x31\x35\x2e\x32\x31\x2d\x31\x38\x2e\x38\ -\x35\x2c\x31\x35\x2e\x36\x33\x43\x34\x30\x33\x2e\x32\x35\x2c\x32\ -\x32\x31\x2e\x31\x33\x2c\x33\x39\x32\x2e\x34\x37\x2c\x32\x32\x30\ -\x2e\x38\x32\x2c\x33\x38\x31\x2e\x37\x31\x2c\x32\x32\x30\x2e\x38\ -\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x31\ -\x2e\x37\x31\x2c\x32\x39\x35\x2e\x38\x32\x63\x2d\x31\x30\x2e\x33\ -\x37\x2c\x30\x2d\x32\x30\x2e\x37\x34\x2e\x32\x32\x2d\x33\x31\x2e\ -\x30\x39\x2d\x2e\x30\x36\x2d\x31\x32\x2e\x32\x37\x2d\x2e\x33\x33\ -\x2d\x32\x30\x2e\x30\x37\x2d\x36\x2e\x38\x37\x2d\x31\x39\x2e\x37\ -\x31\x2d\x31\x36\x2c\x2e\x33\x35\x2d\x38\x2e\x38\x37\x2c\x37\x2e\ -\x37\x32\x2d\x31\x34\x2e\x39\x32\x2c\x31\x39\x2e\x34\x35\x2d\x31\ -\x35\x2e\x30\x35\x71\x33\x31\x2e\x36\x38\x2d\x2e\x33\x37\x2c\x36\ -\x33\x2e\x33\x38\x2c\x30\x63\x31\x31\x2e\x35\x36\x2e\x31\x34\x2c\ -\x31\x39\x2c\x36\x2e\x35\x32\x2c\x31\x39\x2e\x31\x31\x2c\x31\x35\ -\x2e\x33\x36\x73\x2d\x37\x2e\x31\x34\x2c\x31\x35\x2e\x32\x31\x2d\ -\x31\x38\x2e\x38\x35\x2c\x31\x35\x2e\x36\x33\x43\x34\x30\x33\x2e\ -\x32\x35\x2c\x32\x39\x36\x2e\x31\x32\x2c\x33\x39\x32\x2e\x34\x37\ -\x2c\x32\x39\x35\x2e\x38\x31\x2c\x33\x38\x31\x2e\x37\x31\x2c\x32\ -\x39\x35\x2e\x38\x32\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x07\xeb\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\x35\x34\x30\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\ +\x32\x64\x33\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ +\x3a\x23\x39\x32\x39\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ +\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ +\x4d\x34\x34\x37\x2e\x31\x37\x2c\x33\x33\x34\x2e\x38\x35\x61\x32\ +\x36\x2e\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\x30\x2c\x30\ +\x2d\x37\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\x35\x39\x2c\ +\x35\x2e\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\x37\x38\x2c\ +\x32\x33\x2c\x38\x2e\x36\x31\x61\x32\x33\x2e\x35\x35\x2c\x32\x33\ +\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\ +\x2e\x32\x37\x41\x32\x35\x2e\x37\x31\x2c\x32\x35\x2e\x37\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x34\x34\x37\x2e\x31\x37\x2c\x33\x33\x34\ +\x2e\x38\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x32\ +\x39\x30\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\x32\x2c\ +\x37\x33\x2e\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\x31\x2e\ +\x34\x34\x2c\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\x35\x63\ +\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\ +\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2e\x30\ +\x35\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\x32\x38\ +\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\x33\x2d\ +\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\x2e\x32\ +\x2d\x32\x38\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\x31\x2e\ +\x31\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\x33\ +\x2d\x34\x36\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\x34\ +\x2e\x36\x34\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\x2e\x39\ +\x32\x2d\x34\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\x35\x2e\ +\x32\x32\x2d\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\x2c\x34\ +\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\ +\x34\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\x36\x35\ +\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\ +\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\x2d\x33\ +\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\ +\x33\x38\x30\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\x38\x63\ +\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\x2d\x35\ +\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x35\ +\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\x32\x37\ +\x37\x2e\x34\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\x2e\x31\ +\x38\x2c\x37\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ +\x3d\x22\x4d\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\x2d\x32\ +\x32\x2c\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x35\x2d\ +\x33\x39\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\ +\x2e\x33\x37\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\ +\x33\x38\x2e\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\x2e\x32\ +\x35\x2c\x30\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x37\x2c\ +\x33\x39\x2e\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\ +\x31\x2c\x35\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\x31\x37\ +\x2e\x33\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\x3d\x22\x4d\x34\ +\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\x34\x2e\ +\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\x2e\x34\ +\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\x2c\x35\ +\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\x37\x2c\ +\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\x37\x38\ +\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\x2c\x34\ +\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\x37\x35\ +\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\x2c\x35\ +\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\x32\x2c\ +\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\x2e\x35\ +\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\x2e\x36\ +\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\x32\x2e\ +\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\x32\x63\ +\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\x38\x2e\ +\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\x33\x35\ +\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\x30\x2d\ +\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\x2c\x36\ +\x2e\x32\x34\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\x36\x2d\ +\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\x2c\x39\ +\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\x30\x2d\ +\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\x39\x2c\ +\x30\x2d\x34\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\x37\x39\ +\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\x33\x2e\ +\x38\x39\x2d\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\x31\x2c\ +\x32\x38\x32\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\x32\x38\ +\x31\x2e\x33\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\ +\x33\x37\x5a\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\x34\x39\ +\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\x2e\x37\ +\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\x33\x31\ +\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\x39\x2e\ +\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\x2d\x31\ +\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\x34\x2e\ +\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\x2d\x2e\ +\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\x35\x34\ +\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\x2c\x33\ +\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\x2c\x33\ +\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\x2e\x37\ +\x31\x61\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\x63\x2d\ +\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\x31\x31\ +\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\x34\x2e\ +\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\x2c\x34\ +\x2e\x32\x32\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\x38\x2c\ +\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x2e\ +\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\x36\x2c\ +\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\x37\x35\ +\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\x36\x61\ +\x31\x31\x31\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\x36\x38\ +\x2c\x39\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x32\x2d\ +\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\x2c\x35\ +\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\x2e\x37\ +\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\x2e\x35\ +\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x39\ +\x2e\x35\x38\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\x38\x2d\ +\x2e\x30\x36\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\x2e\x36\ +\x31\x2c\x30\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\x2e\x34\ +\x33\x2c\x30\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\x35\x33\ +\x2c\x30\x2d\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\x35\x38\ +\x2d\x33\x32\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\x38\x2e\ +\x39\x33\x2d\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\x34\x2d\ +\x32\x39\x2e\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\x31\x34\ +\x2c\x32\x31\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\x34\x2e\ +\x31\x33\x2c\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\x2d\x39\ +\x2e\x36\x33\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\x2c\x32\ +\x32\x2e\x38\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\x39\x33\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\x35\x2e\ +\x36\x33\x2c\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\x2c\x33\ +\x30\x2e\x32\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\x32\x37\ +\x2c\x32\x34\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\x33\x2e\ +\x37\x35\x2d\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\x2e\x37\ +\x37\x2c\x31\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\x2e\x33\ +\x35\x2c\x33\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\x36\x33\ +\x2e\x31\x37\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\x2e\x30\ +\x37\x2c\x33\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\x38\x2c\ +\x33\x38\x34\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x34\x33\x36\x2e\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x63\ +\x32\x2e\x36\x31\x2d\x2e\x38\x2c\x35\x2e\x32\x33\x2d\x31\x2e\x34\ +\x36\x2c\x37\x2e\x37\x37\x2d\x32\x2e\x30\x39\x2c\x31\x2e\x31\x34\ +\x2d\x2e\x32\x38\x2c\x32\x2e\x32\x38\x2d\x2e\x35\x36\x2c\x33\x2e\ +\x34\x32\x2d\x2e\x38\x36\x6c\x2e\x36\x32\x2d\x2e\x31\x36\x68\x31\ +\x36\x6c\x2e\x39\x33\x2e\x33\x39\x63\x2e\x33\x36\x2e\x31\x35\x2e\ +\x37\x32\x2e\x33\x33\x2c\x31\x2e\x30\x37\x2e\x35\x6c\x2e\x33\x37\ +\x2e\x31\x39\x61\x36\x36\x2e\x31\x38\x2c\x36\x36\x2e\x31\x38\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x32\x36\x2e\x38\x33\x2c\x31\x30\x2e\x33\ +\x38\x2c\x33\x30\x2e\x33\x35\x2c\x33\x30\x2e\x33\x35\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x35\x2e\x39\x34\x2d\x31\x30\x2e\x31\x35\x41\x32\ +\x30\x35\x2c\x32\x30\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x36\x34\ +\x2e\x34\x34\x2c\x32\x35\x34\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\ +\x30\x2e\x33\x31\x2d\x31\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\ +\x30\x33\x2e\x39\x31\x2d\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\ +\x39\x2c\x38\x2e\x38\x2d\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2d\ +\x31\x34\x36\x2e\x38\x34\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\ +\x37\x2c\x38\x2e\x37\x32\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\ +\x36\x32\x2d\x36\x2e\x38\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\ +\x32\x34\x2c\x32\x32\x2c\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\ +\x33\x2c\x34\x37\x2e\x39\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\ +\x2d\x35\x30\x2e\x35\x37\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\ +\x2c\x31\x37\x35\x2e\x33\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x37\ +\x2e\x39\x32\x2c\x31\x38\x37\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x34\x31\x35\x2c\x32\x38\x39\x2e\x36\x38\x2c\x36\x37\x2e\x34\ +\x39\x2c\x36\x37\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\ +\x36\x2e\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x5a\x22\x2f\x3e\x3c\ +\x2f\x73\x76\x67\x3e\ +\x00\x00\x0a\x70\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8308,194 +7025,335 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x30\x33\x61\x35\x35\x30\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ +\x35\x34\x30\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ +\x3a\x23\x39\x32\x39\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ +\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ +\x4d\x32\x39\x30\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\ +\x32\x2c\x37\x33\x2e\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\ +\x31\x2e\x34\x34\x2c\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\ +\x35\x63\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\ +\x38\x31\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\ +\x2e\x30\x35\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\ +\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\ +\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\ +\x2e\x32\x2d\x32\x38\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\ +\x31\x2e\x31\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\ +\x33\x33\x2d\x34\x36\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\ +\x35\x34\x2e\x36\x34\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\ +\x2e\x39\x32\x2d\x34\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\ +\x35\x2e\x32\x32\x2d\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\ +\x2c\x34\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\ +\x2e\x39\x34\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\ +\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\ +\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\ +\x2d\x33\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\ +\x31\x61\x33\x38\x30\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\ +\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\ +\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\ +\x34\x35\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\ +\x32\x37\x37\x2e\x34\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\ +\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\ +\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\ +\x2d\x32\x32\x2c\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\ +\x35\x2d\x33\x39\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\ +\x32\x33\x2e\x33\x37\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\ +\x33\x2c\x33\x38\x2e\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\ +\x2e\x32\x35\x2c\x30\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\ +\x37\x2c\x33\x39\x2e\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\ +\x32\x2e\x31\x2c\x35\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\ +\x31\x37\x2e\x33\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\x3d\x22\ +\x4d\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\ +\x34\x2e\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\ +\x2e\x34\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\ +\x2c\x35\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\ +\x37\x2c\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\ +\x37\x38\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\ +\x2c\x34\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\ +\x37\x35\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\ +\x2c\x35\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\ +\x32\x2c\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\ +\x2e\x35\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\ +\x2e\x36\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\ +\x32\x2e\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\ +\x32\x63\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\ +\x38\x2e\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\ +\x33\x35\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\ +\x30\x2d\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\ +\x2c\x36\x2e\x32\x34\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\ +\x36\x2d\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\ +\x2c\x39\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\ +\x30\x2d\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\ +\x39\x2c\x30\x2d\x34\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\ +\x37\x39\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\ +\x33\x2e\x38\x39\x2d\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\ +\x31\x2c\x32\x38\x32\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\ +\x32\x38\x31\x2e\x33\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\ +\x30\x2e\x33\x37\x5a\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\ +\x34\x39\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\ +\x2e\x37\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\ +\x33\x31\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\ +\x39\x2e\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\ +\x2d\x31\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\ +\x34\x2e\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\ +\x2d\x2e\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\ +\x35\x34\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\ +\x2c\x33\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\ +\x2c\x33\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\ +\x2e\x37\x31\x61\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\ +\x63\x2d\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\ +\x31\x31\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\ +\x34\x2e\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\ +\x2c\x34\x2e\x32\x32\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\ +\x38\x2c\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\ +\x37\x2e\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\ +\x36\x2c\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\ +\x37\x35\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\ +\x36\x61\x31\x31\x31\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\ +\x36\x38\x2c\x39\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\ +\x32\x2d\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\ +\x2c\x35\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\ +\x2e\x37\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\ +\x2e\x35\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x33\ +\x37\x39\x2e\x35\x38\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\ +\x38\x2d\x2e\x30\x36\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\ +\x2e\x36\x31\x2c\x30\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\ +\x2e\x34\x33\x2c\x30\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\ +\x35\x33\x2c\x30\x2d\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\ +\x35\x38\x2d\x33\x32\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\ +\x38\x2e\x39\x33\x2d\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\ +\x34\x2d\x32\x39\x2e\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\ +\x31\x34\x2c\x32\x31\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\ +\x34\x2e\x31\x33\x2c\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\ +\x2d\x39\x2e\x36\x33\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\ +\x2c\x32\x32\x2e\x38\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\ +\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\ +\x35\x2e\x36\x33\x2c\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\ +\x2c\x33\x30\x2e\x32\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\ +\x32\x37\x2c\x32\x34\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\ +\x33\x2e\x37\x35\x2d\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\ +\x2e\x37\x37\x2c\x31\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\ +\x2e\x33\x35\x2c\x33\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\ +\x36\x33\x2e\x31\x37\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\ +\x2e\x30\x37\x2c\x33\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\ +\x38\x2c\x33\x38\x34\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ +\x64\x3d\x22\x4d\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\ +\x31\x61\x32\x36\x2e\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x37\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\ +\x35\x39\x2c\x35\x2e\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\ +\x37\x38\x2c\x32\x33\x2c\x38\x2e\x36\x31\x61\x32\x34\x2c\x32\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\ +\x41\x32\x35\x2e\x36\x38\x2c\x32\x35\x2e\x36\x38\x2c\x30\x2c\x30\ +\x2c\x30\x2c\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\ +\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x63\x32\x2e\x36\x31\x2d\x2e\ +\x38\x2c\x35\x2e\x32\x33\x2d\x31\x2e\x34\x36\x2c\x37\x2e\x37\x37\ +\x2d\x32\x2e\x30\x39\x2c\x31\x2e\x31\x34\x2d\x2e\x32\x38\x2c\x32\ +\x2e\x32\x38\x2d\x2e\x35\x36\x2c\x33\x2e\x34\x32\x2d\x2e\x38\x36\ +\x6c\x2e\x36\x32\x2d\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\ +\x33\x39\x63\x2e\x33\x36\x2e\x31\x35\x2e\x37\x32\x2e\x33\x33\x2c\ +\x31\x2e\x30\x37\x2e\x35\x6c\x2e\x33\x37\x2e\x31\x39\x61\x36\x36\ +\x2e\x31\x38\x2c\x36\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x32\x36\x2e\x38\x33\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x33\ +\x35\x2c\x33\x30\x2e\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\ +\x39\x34\x2d\x31\x30\x2e\x31\x35\x41\x32\x30\x35\x2c\x32\x30\x35\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x36\x34\x2e\x34\x34\x2c\x32\x35\ +\x34\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\x30\x2e\x33\x31\x2d\x31\ +\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\x2d\ +\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\x2d\ +\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2d\x31\x34\x36\x2e\x38\x34\ +\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\x37\x2c\x38\x2e\x37\x32\ +\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\x36\x32\x2d\x36\x2e\x38\ +\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\x32\x34\x2c\x32\x32\x2c\ +\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\x33\x2c\x34\x37\x2e\x39\ +\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\x2d\x35\x30\x2e\x35\x37\ +\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\x2c\x31\x37\x35\x2e\x33\ +\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x37\x2e\x39\x32\x2c\x31\x38\ +\x37\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x31\x35\x2c\x32\ +\x38\x39\x2e\x36\x38\x2c\x36\x37\x2e\x34\x39\x2c\x36\x37\x2e\x34\ +\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\x36\x2e\x36\x32\x2c\x32\ +\x37\x38\x2e\x34\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x0a\x5b\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\x35\x34\x30\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x39\x32\x39\ +\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\ +\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x30\x2e\ +\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\x32\x2c\x37\x33\x2e\ +\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\x31\x2e\x34\x34\x2c\ +\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\x35\x63\x31\x34\x2e\ +\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\x2c\x33\x33\ +\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2e\x30\x35\x2d\x31\ +\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\x32\x38\x2e\x36\x32\ +\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\ +\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\ +\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\x31\x2e\x31\x31\x2d\ +\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\ +\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\x34\x2e\x36\x34\ +\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\ +\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\x35\x2e\x32\x32\x2d\ +\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\x2c\x34\x33\x2e\x39\ +\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\x2e\x39\x34\x2d\x38\ +\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\x36\x35\x2c\x31\x32\ +\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\x2d\x32\x30\x2e\x30\ +\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\x2d\x33\x34\x2e\x30\ +\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\x31\x61\x33\x38\x30\ +\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\x38\x63\x34\x33\x2d\ +\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\x2d\x35\x31\x2e\x31\ +\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x35\x43\x32\x35\ +\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\x32\x37\x37\x2e\x34\ +\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\x2e\x31\x38\x2c\x37\ +\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\x2d\x32\x32\x2c\x30\ +\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\x35\x2d\x33\x39\x2e\ +\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\x32\x33\x2e\x33\x37\ +\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\x2e\ +\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\x2e\x32\x35\x2c\x30\ +\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\x37\x2c\x33\x39\x2e\ +\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\ +\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\ +\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\x34\x2e\x33\x35\x61\ +\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\x2c\x30\x2c\x30\x2c\ +\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\x2e\x34\x37\x2c\x34\ +\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\x2c\x35\x31\x2e\x36\ +\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\x37\x2c\x31\x35\x2e\ +\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\x37\x38\x2c\x34\x36\ +\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\x2c\x34\x2e\x32\x35\ +\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\x37\x35\x63\x31\x33\ +\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\x2c\x35\x2e\x33\x39\ +\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\x32\x2c\x30\x2c\x33\ +\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\x2e\x35\x2e\x31\x32\ +\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\x2e\x36\x38\x2d\x32\ +\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\x32\x2e\x31\x36\x2c\ +\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\x32\x63\x2d\x37\x2e\ +\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\x38\x2e\x31\x31\x2d\ +\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\x33\x35\x2e\x34\x36\ +\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\x30\x2d\x31\x30\x36\ +\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\x2c\x36\x2e\x32\x34\ +\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\x36\x2d\x31\x36\x2e\ +\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\x2c\x39\x2e\x33\x39\ +\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\x30\x2d\x31\x35\x2e\ +\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\x39\x2c\x30\x2d\x34\ +\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\x37\x39\x2c\x31\x37\ +\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\x33\x2e\x38\x39\x2d\ +\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\x31\x2c\x32\x38\x32\ +\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\x32\x38\x31\x2e\x33\ +\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x5a\ +\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\x34\x39\x63\x30\x2d\ +\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\x2e\x37\x33\x2d\x2e\ +\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\x33\x31\x2d\x31\x37\ +\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\x39\x2e\x37\x35\x2d\ +\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\x2d\x31\x36\x2e\x36\ +\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\x34\x2e\x37\x33\x2d\ +\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\x2d\x2e\x31\x36\x2c\ +\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\x35\x34\x2c\x30\x2c\ +\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\x2c\x33\x33\x2e\x31\ +\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\x2c\x33\x2e\x37\x31\ +\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\x2e\x37\x31\x61\x31\ +\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x30\ +\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\x63\x2d\x32\x2e\x38\ +\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\x31\x31\x2e\x35\x39\ +\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\x34\x2e\x31\x36\x2c\ +\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\x2c\x34\x2e\x32\x32\ +\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\x38\x2c\x36\x38\x2e\ +\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x2e\x37\x31\x63\ +\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\x36\x2c\x38\x2e\x38\ +\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\x37\x35\x2d\x33\x2e\ +\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\x36\x61\x31\x31\x31\ +\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\x36\x38\x2c\x39\x2e\ +\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x32\x2d\x38\x2e\x31\ +\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\x2c\x35\x2e\x36\x31\ +\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\x2e\x37\x32\x41\x31\ +\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\x2e\x35\x37\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x39\x2e\x35\x38\ +\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\x38\x2d\x2e\x30\x36\ +\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\x2e\x36\x31\x2c\x30\ +\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\x2e\x34\x33\x2c\x30\ +\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\x35\x33\x2c\x30\x2d\ +\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\x35\x38\x2d\x33\x32\ +\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\x38\x2e\x39\x33\x2d\ +\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\x34\x2d\x32\x39\x2e\ +\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\x31\x34\x2c\x32\x31\ +\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\x34\x2e\x31\x33\x2c\ +\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\x2d\x39\x2e\x36\x33\ +\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\x2c\x32\x32\x2e\x38\ +\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\x39\x33\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\x35\x2e\x36\x33\x2c\ +\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\x2c\x33\x30\x2e\x32\ +\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\x32\x37\x2c\x32\x34\ +\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\x33\x2e\x37\x35\x2d\ +\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\x2e\x37\x37\x2c\x31\ +\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\x2e\x33\x35\x2c\x33\ +\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\x36\x33\x2e\x31\x37\ +\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\x2e\x30\x37\x2c\x33\ +\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\x38\x2c\x33\x38\x34\ +\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\ +\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\x61\x32\x36\x2e\ +\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x37\ +\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\x35\x39\x2c\x35\x2e\ +\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\x37\x38\x2c\x32\x33\ +\x2c\x38\x2e\x36\x31\x61\x32\x34\x2c\x32\x34\x2c\x30\x2c\x30\x2c\ +\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\x41\x32\x35\x2e\x36\ +\x38\x2c\x32\x35\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x35\ +\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x33\x2e\x38\x2c\x33\x32\x31\ -\x2e\x31\x38\x71\x2d\x32\x37\x2c\x30\x2d\x35\x34\x2e\x30\x35\x2c\ -\x30\x61\x31\x36\x2e\x35\x33\x2c\x31\x36\x2e\x35\x33\x2c\x30\x2c\ -\x30\x2c\x31\x2d\x31\x36\x2e\x35\x36\x2d\x31\x36\x2e\x35\x35\x71\ -\x30\x2d\x35\x34\x2c\x30\x2d\x31\x30\x37\x2e\x39\x41\x31\x36\x2e\ -\x37\x35\x2c\x31\x36\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ -\x33\x30\x2c\x31\x38\x30\x71\x35\x33\x2e\x34\x39\x2c\x30\x2c\x31\ -\x30\x37\x2c\x30\x61\x31\x37\x2e\x34\x37\x2c\x31\x37\x2e\x34\x37\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x37\x2e\x34\x38\x2c\x31\x37\x2e\ -\x34\x39\x71\x30\x2c\x35\x33\x2e\x31\x37\x2c\x30\x2c\x31\x30\x36\ -\x2e\x33\x36\x41\x31\x37\x2e\x33\x35\x2c\x31\x37\x2e\x33\x35\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x35\x33\x37\x2c\x33\x32\x31\x2e\x31\x39\ -\x51\x35\x31\x30\x2e\x34\x32\x2c\x33\x32\x31\x2e\x31\x36\x2c\x34\ -\x38\x33\x2e\x38\x2c\x33\x32\x31\x2e\x31\x38\x5a\x6d\x35\x39\x2e\ -\x33\x32\x2d\x37\x30\x2e\x34\x39\x63\x30\x2d\x33\x33\x2d\x32\x36\ -\x2e\x37\x2d\x36\x30\x2d\x35\x39\x2e\x34\x35\x2d\x36\x30\x61\x35\ -\x39\x2e\x38\x39\x2c\x35\x39\x2e\x38\x39\x2c\x30\x2c\x31\x2c\x30\ -\x2c\x35\x39\x2e\x34\x35\x2c\x36\x30\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x64\x3d\x22\x4d\x35\x32\x39\x2e\x38\x32\x2c\x32\x34\x37\x2e\ -\x31\x37\x63\x2d\x31\x31\x2e\x34\x37\x2d\x39\x2e\x32\x37\x2d\x32\ -\x34\x2e\x36\x39\x2d\x31\x31\x2e\x31\x36\x2d\x33\x38\x2e\x32\x39\ -\x2d\x35\x2e\x34\x32\x6c\x2d\x32\x2e\x33\x32\x2d\x31\x2e\x30\x37\ -\x63\x2d\x31\x31\x2e\x34\x35\x2d\x31\x31\x2e\x35\x35\x2c\x32\x32\ -\x2e\x35\x37\x2d\x32\x35\x2c\x33\x32\x2e\x34\x36\x2d\x32\x31\x2e\ -\x35\x35\x2d\x37\x2d\x31\x30\x2d\x31\x38\x2e\x34\x31\x2d\x31\x35\ -\x2e\x31\x35\x2d\x33\x30\x2e\x32\x37\x2d\x31\x37\x2e\x36\x37\x2d\ -\x31\x36\x2e\x36\x39\x2d\x2e\x37\x35\x2d\x32\x32\x2e\x32\x37\x2c\ -\x32\x34\x2e\x31\x35\x2d\x31\x37\x2e\x32\x39\x2c\x33\x37\x2e\x32\ -\x31\x2c\x31\x2e\x37\x33\x2c\x34\x2e\x37\x36\x2c\x31\x2e\x37\x37\ -\x2c\x34\x2e\x36\x33\x2d\x31\x2e\x37\x2c\x38\x2e\x32\x36\x2d\x31\ -\x2e\x33\x39\x2c\x31\x2e\x34\x36\x2d\x32\x2e\x34\x2c\x31\x2e\x33\ -\x37\x2d\x34\x2c\x2e\x34\x31\x2d\x31\x32\x2e\x36\x39\x2d\x37\x2e\ -\x34\x37\x2d\x31\x36\x2e\x31\x32\x2d\x32\x31\x2e\x35\x38\x2d\x31\ -\x35\x2e\x33\x39\x2d\x33\x35\x2e\x34\x37\x2d\x31\x30\x2e\x35\x32\ -\x2c\x38\x2e\x34\x31\x2d\x32\x36\x2e\x32\x31\x2c\x33\x31\x2e\x30\ -\x37\x2d\x31\x34\x2e\x31\x38\x2c\x34\x32\x2e\x39\x33\x2c\x31\x30\ -\x2e\x33\x39\x2c\x37\x2e\x31\x34\x2c\x32\x31\x2e\x31\x37\x2c\x31\ -\x30\x2e\x35\x36\x2c\x33\x33\x2e\x34\x37\x2c\x35\x2e\x36\x35\x2c\ -\x34\x2e\x34\x38\x2d\x31\x2e\x37\x39\x2c\x34\x2e\x34\x2d\x31\x2e\ -\x37\x39\x2c\x37\x2e\x38\x2c\x31\x2e\x35\x34\x2c\x33\x2e\x30\x37\ -\x2c\x31\x34\x2e\x31\x31\x2d\x32\x32\x2e\x35\x32\x2c\x32\x31\x2e\ -\x38\x38\x2d\x33\x34\x2e\x32\x35\x2c\x32\x30\x2e\x30\x36\x2c\x38\ -\x2e\x33\x31\x2c\x31\x30\x2e\x31\x32\x2c\x32\x39\x2e\x38\x37\x2c\ -\x32\x35\x2e\x32\x34\x2c\x34\x31\x2e\x32\x37\x2c\x31\x33\x2e\x32\ -\x34\x2c\x37\x2e\x31\x36\x2d\x39\x2e\x38\x31\x2c\x31\x31\x2e\x31\ -\x34\x2d\x32\x30\x2e\x34\x32\x2c\x36\x2e\x33\x37\x2d\x33\x32\x2e\ -\x32\x37\x2d\x32\x2e\x37\x36\x2d\x32\x36\x2e\x37\x35\x2c\x32\x36\ -\x2e\x39\x35\x2c\x37\x2e\x31\x38\x2c\x32\x30\x2e\x38\x34\x2c\x32\ -\x35\x2e\x38\x35\x43\x35\x32\x34\x2e\x39\x34\x2c\x32\x38\x32\x2e\ -\x33\x38\x2c\x35\x33\x39\x2e\x36\x33\x2c\x32\x35\x38\x2e\x34\x39\ -\x2c\x35\x32\x39\x2e\x38\x32\x2c\x32\x34\x37\x2e\x31\x37\x5a\x22\ -\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x32\x33\x2e\x39\x37\x22\ -\x20\x79\x3d\x22\x33\x32\x37\x2e\x39\x37\x22\x20\x77\x69\x64\x74\ -\x68\x3d\x22\x31\x31\x39\x2e\x36\x36\x22\x20\x68\x65\x69\x67\x68\ -\x74\x3d\x22\x32\x32\x2e\x37\x35\x22\x20\x72\x78\x3d\x22\x32\x2e\ -\x36\x32\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x33\x34\x2e\ -\x35\x35\x22\x20\x79\x3d\x22\x33\x34\x32\x2e\x33\x33\x22\x20\x77\ -\x69\x64\x74\x68\x3d\x22\x39\x38\x2e\x35\x22\x20\x68\x65\x69\x67\ -\x68\x74\x3d\x22\x32\x33\x2e\x36\x39\x22\x20\x72\x78\x3d\x22\x32\ -\x2e\x36\x32\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x37\ -\x34\x2e\x32\x2c\x33\x30\x32\x2e\x36\x31\x63\x2d\x31\x31\x2e\x31\ -\x33\x2d\x39\x2e\x34\x32\x2d\x32\x36\x2e\x33\x2d\x31\x36\x2e\x38\ -\x35\x2d\x34\x35\x2e\x30\x37\x2d\x32\x32\x2e\x30\x39\x6c\x2d\x32\ -\x2e\x36\x36\x2d\x2e\x38\x63\x2d\x32\x30\x2d\x36\x2d\x34\x35\x2d\ -\x31\x33\x2e\x33\x36\x2d\x34\x35\x2d\x33\x38\x2e\x34\x32\x2c\x30\ -\x2d\x32\x30\x2e\x37\x35\x2c\x32\x30\x2e\x30\x38\x2d\x33\x31\x2e\ -\x36\x2c\x33\x39\x2e\x39\x31\x2d\x33\x31\x2e\x36\x2c\x31\x38\x2e\ -\x36\x36\x2c\x30\x2c\x33\x33\x2c\x36\x2e\x36\x36\x2c\x34\x35\x2e\ -\x36\x38\x2c\x31\x33\x2e\x38\x36\x6c\x33\x2e\x34\x37\x2c\x32\x2c\ -\x31\x35\x2d\x32\x34\x2e\x38\x37\x2d\x33\x2e\x35\x37\x2d\x32\x2e\ -\x31\x63\x2d\x31\x36\x2d\x39\x2e\x34\x2d\x33\x33\x2e\x38\x31\x2d\ -\x31\x38\x2e\x35\x39\x2d\x36\x30\x2e\x34\x34\x2d\x31\x38\x2e\x35\ -\x39\x2d\x31\x39\x2c\x30\x2d\x33\x36\x2e\x37\x32\x2c\x36\x2e\x32\ -\x33\x2d\x35\x30\x2c\x31\x37\x2e\x35\x33\x2d\x31\x33\x2e\x35\x34\ -\x2c\x31\x31\x2e\x35\x32\x2d\x32\x31\x2c\x32\x37\x2e\x30\x37\x2d\ -\x32\x31\x2c\x34\x33\x2e\x38\x2c\x30\x2c\x33\x32\x2e\x31\x39\x2c\ -\x32\x32\x2c\x35\x35\x2c\x36\x33\x2e\x36\x2c\x36\x36\x2c\x31\x34\ -\x2e\x37\x39\x2c\x33\x2e\x38\x37\x2c\x32\x36\x2e\x36\x38\x2c\x38\ -\x2e\x38\x36\x2c\x33\x35\x2e\x33\x35\x2c\x31\x34\x2e\x38\x33\x2c\ -\x31\x31\x2c\x37\x2e\x35\x39\x2c\x31\x36\x2e\x37\x32\x2c\x31\x36\ -\x2e\x38\x31\x2c\x31\x36\x2e\x39\x32\x2c\x32\x37\x2e\x33\x37\x2c\ -\x30\x2c\x32\x32\x2e\x35\x33\x2d\x32\x30\x2e\x32\x38\x2c\x33\x39\ -\x2e\x35\x31\x2d\x34\x37\x2e\x31\x33\x2c\x33\x39\x2e\x35\x31\x68\ -\x2d\x2e\x31\x33\x63\x2d\x31\x38\x2e\x35\x32\x2d\x2e\x34\x34\x2d\ -\x33\x37\x2e\x33\x38\x2d\x36\x2e\x34\x34\x2d\x35\x34\x2e\x35\x36\ -\x2d\x31\x37\x2e\x33\x36\x4c\x36\x31\x2c\x33\x36\x39\x2e\x34\x31\ -\x2c\x34\x35\x2e\x35\x39\x2c\x33\x39\x35\x2e\x35\x34\x6c\x33\x2e\ -\x32\x32\x2c\x32\x2e\x31\x35\x63\x32\x31\x2e\x36\x2c\x31\x34\x2e\ -\x34\x2c\x34\x36\x2e\x38\x35\x2c\x32\x32\x2e\x33\x34\x2c\x37\x31\ -\x2e\x31\x2c\x32\x32\x2e\x33\x34\x2c\x32\x39\x2e\x30\x39\x2c\x30\ -\x2c\x34\x37\x2e\x31\x36\x2d\x31\x32\x2c\x35\x37\x2e\x32\x2d\x32\ -\x32\x61\x36\x39\x2e\x31\x38\x2c\x36\x39\x2e\x31\x38\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x32\x30\x2e\x32\x35\x2d\x34\x38\x2e\x35\x31\x76\ -\x2d\x2e\x31\x38\x43\x31\x39\x36\x2e\x35\x33\x2c\x33\x33\x30\x2e\ -\x36\x33\x2c\x31\x38\x38\x2e\x37\x33\x2c\x33\x31\x34\x2e\x39\x31\ -\x2c\x31\x37\x34\x2e\x32\x2c\x33\x30\x32\x2e\x36\x31\x5a\x22\x2f\ -\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\ -\x32\x30\x36\x2e\x31\x37\x20\x31\x38\x35\x2e\x33\x37\x20\x32\x30\ -\x36\x2e\x31\x37\x20\x32\x31\x34\x2e\x34\x37\x20\x32\x38\x36\x2e\ -\x39\x34\x20\x32\x31\x34\x2e\x34\x37\x20\x32\x38\x36\x2e\x39\x34\ -\x20\x34\x31\x34\x2e\x36\x36\x20\x33\x31\x36\x2e\x30\x35\x20\x34\ -\x31\x34\x2e\x36\x36\x20\x33\x31\x36\x2e\x30\x35\x20\x32\x31\x34\ -\x2e\x34\x37\x20\x33\x39\x36\x2e\x38\x32\x20\x32\x31\x34\x2e\x34\ -\x37\x20\x33\x39\x36\x2e\x38\x32\x20\x31\x38\x35\x2e\x33\x37\x20\ -\x32\x30\x36\x2e\x31\x37\x20\x31\x38\x35\x2e\x33\x37\x22\x2f\x3e\ -\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ -\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x30\x37\x2e\x32\x39\x2c\x33\ -\x39\x36\x2e\x35\x39\x56\x33\x37\x30\x2e\x31\x37\x48\x34\x35\x39\ -\x2e\x32\x31\x76\x32\x36\x2e\x34\x32\x6c\x32\x34\x2c\x31\x35\x2e\ -\x38\x36\x5a\x6d\x2d\x31\x35\x2e\x38\x32\x2d\x31\x35\x2e\x38\x35\ -\x68\x31\x32\x56\x33\x39\x34\x6c\x2d\x31\x32\x2c\x37\x2e\x39\x33\ -\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x04\x0f\ -\x00\ -\x00\x0d\x9f\x78\x9c\xa5\x57\x4d\x6f\x23\x37\x0c\xfd\x2b\xc4\xf4\ -\xd2\x3d\x98\x16\x29\x52\xa2\xb6\x71\x0e\x3d\xf7\x3f\x14\x46\xe2\ -\x24\x06\x9c\x38\xb0\x07\x71\x82\xa2\xff\xbd\xa0\x46\xe3\x8c\x0b\ -\xec\x7a\x90\x3d\x04\x8e\x26\x79\x7c\xf3\x1e\x3f\x44\xdf\x1c\xdf\ -\x1e\x61\x7b\xbf\xea\xfe\x5a\x7f\x6c\x0e\x7f\x53\x07\xf7\xeb\x7e\ -\xbd\x78\x59\x3f\x6f\xda\x33\xa0\x0e\xde\x9f\x77\x2f\xc7\x55\xf7\ -\xd4\xf7\xaf\xdf\x97\xcb\xd3\xe9\x84\xa7\x88\xfb\xc3\xe3\x92\x43\ -\x08\xcb\xe3\xdb\x63\x07\x6f\xdb\xcd\xe9\xcf\xfd\xfb\xaa\x0b\x10\ -\x20\x85\xfa\xd3\xdd\xde\xdc\x6f\x1e\x8e\xb7\x37\xc7\xfe\x63\xb7\ -\xb9\xc5\xbb\xdd\x71\x41\xff\x3c\x6c\x77\xbb\xef\xbf\x6d\xc2\x26\ -\xdc\x3f\xfc\xf1\xef\xcd\x72\xf8\xe3\xcd\x72\xf8\xd7\xd7\xfd\xee\ -\xe3\x71\xff\x02\x77\xbb\xf5\xf1\xb8\xea\x2a\xa4\x83\xd7\xfd\xf6\ -\xa5\x3f\xae\x3a\x36\x45\x22\xe0\x6c\x98\x0d\xd8\x04\x8b\x01\x99\ -\x20\x19\x30\x25\xb4\x08\xe4\x1f\x04\x4c\x19\x43\x04\x0e\x82\x51\ -\xe0\x02\xd7\x2d\xaf\xd1\x44\x0e\xc8\x32\xd2\xf8\x29\x9e\x69\xa2\ -\x19\xea\x99\xc6\x4f\x91\x47\x9a\x0b\xdc\x1c\x1a\x43\x4e\xc0\x25\ -\x61\x51\x10\x66\xb4\xe1\x94\x0b\x48\x09\xc8\x04\xcc\x86\x29\x82\ -\x04\xc6\x64\xf5\x64\x0a\x17\xb8\x19\x34\xf5\xcd\x04\x73\x04\xf1\ -\x70\xf5\x60\x4e\xa1\xce\x1b\x4b\xc4\xa0\x20\xc1\x50\x18\x62\x61\ -\x34\x86\x4f\xcc\xf5\xf8\x6c\x01\x55\x47\x19\x64\x35\x6a\x93\x41\ -\xe4\x84\x4d\x05\x87\x84\x14\x47\x15\x17\xb0\x19\x2c\x59\xaa\xe1\ -\x83\x10\xb2\x6a\x4f\x53\x42\x54\xad\x6b\x4a\x38\x04\x8c\x65\x54\ -\x72\x81\x9b\x23\x46\x51\x04\x62\x4c\x48\xb9\xd6\x4d\x24\x90\x18\ -\x30\xe7\x5a\x53\x94\x40\x8a\x21\x49\x3d\xc5\x04\x42\xc1\x15\x4e\ -\x61\xf3\x0a\x4c\xf3\xc8\xe2\xa7\x7c\x66\xf1\x92\xb2\x33\x8b\x9f\ -\x92\x36\x96\x0b\x98\xb3\x1c\x36\x77\xfd\xff\x28\xde\x57\x1d\x97\ -\x88\x54\x3a\xf8\x70\x22\x8c\xda\xc1\x69\x7b\xdf\x3f\xad\x3a\x4a\ -\x48\xa9\x83\xa7\xcd\xf6\xf1\xa9\x5f\x75\xe4\x69\x99\x53\x40\xa1\ -\xb8\x52\x0a\x55\x69\xc9\x18\x18\x28\x14\x2c\x09\x58\x92\x97\xa2\ -\x7a\x60\x60\x35\x4c\x04\x92\xd0\x60\x8a\x99\xc1\xa0\x09\xb9\xb4\ -\x30\x51\x62\xed\x07\x0f\x33\x48\x69\xd4\x31\x28\xaa\x8c\xd4\x53\ -\xcc\x8f\xbd\xb0\xe4\xad\xe8\x56\xb0\x44\x54\xb9\xe2\x05\xf4\x87\ -\xf5\xcb\xf1\x61\x7f\x78\x5e\x75\xf5\xd7\xdd\xba\xdf\xfc\xbe\x60\ -\x8a\x18\xa8\xb6\x61\x8e\xdf\xe0\xb0\xef\xeb\xe3\x12\xbe\x5d\xd7\ -\x56\x86\x59\x55\x4a\xed\x87\x30\x64\x95\xd8\x3b\x41\x05\xa3\x42\ -\x4c\x8c\x66\x20\x82\xa5\x40\xd4\xe0\x1a\xa7\xa0\xeb\x14\x43\x1c\ -\xd6\xda\x05\x43\x1c\x4e\x8a\xdc\xc2\x44\xaa\x2d\x39\x72\x87\xe8\ -\x59\x9a\x62\x7e\x6c\x9f\x78\xb6\xd3\xaf\xfa\x67\x83\x7d\x0b\x2a\ -\x19\x39\x9f\xfd\x9b\x65\x9f\x06\x42\xe6\x51\x83\x14\xaa\x9d\x3e\ -\x6a\x50\x6f\x8e\x26\x5c\x55\x9d\x65\x50\x7e\x01\x9b\xe3\x60\x8d\ -\xd4\x52\xd1\x22\xb5\x5c\xb4\x50\x2d\x83\xe3\x1b\x8c\x19\x9c\xe0\ -\x66\x75\xa4\xc4\xf2\x25\x0f\x53\x60\x1f\x97\x14\x42\xc2\xa4\x67\ -\x0f\xc9\xe6\x98\xd8\xda\x48\x4a\x41\x19\xdb\xc8\x6f\x98\x20\xe7\ -\x36\x92\x88\x26\x63\xef\xa9\x46\x74\xc5\x9f\xa8\x19\x1c\x6d\x14\ -\x0c\x81\xda\x2c\x18\x02\xb5\x61\x30\xd0\xb7\x01\xd2\xe8\x2f\x50\ -\x3f\x36\x90\xc4\x3b\xaf\x1a\x58\x0a\xaa\x7d\xad\x8d\x33\xd5\xbb\ -\x43\x65\xea\xe0\x42\x74\x86\x83\xa4\x05\x23\x50\x0a\x58\x32\x90\ -\xe6\x3a\x95\x72\xf2\xdb\xc1\x22\x72\x06\xca\xe2\xc3\xcb\x2f\x0c\ -\x03\x52\xf3\xbb\x67\x0a\x9a\x41\x91\x08\x43\x86\x92\xea\xe0\x14\ -\xc5\x5c\x1b\x58\x32\x90\x64\x34\xa7\x60\x14\xa0\x14\xfd\xea\xa3\ -\x1c\x3c\x6f\x53\xd0\x4f\xda\x58\x22\xa6\xf4\x8b\xf6\xb1\x98\x13\ -\x2f\x38\x13\x0a\x9f\xfd\x9b\x65\x9f\xb8\xe7\xd6\x14\x48\x2c\xbe\ -\x2d\x35\x05\x22\x84\x52\x9a\x6c\xd1\xba\xc4\x0d\xb2\xa7\xa0\x19\ -\x2d\x4c\x05\xd9\xc6\x3c\xa8\xdf\xd5\xe7\x44\xb8\x7e\xd6\x31\x7d\ -\x22\x5a\x2d\x1e\xd2\x77\x81\x9b\x55\x81\xbe\x67\x58\xfa\x5a\x09\ -\xa6\xe4\xbd\x67\x7e\xc7\x7f\x5a\xb8\xa0\x38\xab\x06\x87\x32\x10\ -\x29\x98\xc7\x32\x10\x25\x5f\x6f\x5a\x19\x28\x2b\x66\x19\x8b\x47\ -\x39\xfa\xda\x35\x85\x5d\x27\x19\xaa\x59\x24\x63\x91\x56\xcd\xe2\ -\x54\xd6\xaa\x59\x12\xf9\xe0\x6b\x2d\xe0\x56\xe6\x02\x53\xd0\xcf\ -\xaa\x30\xd4\xda\xab\x16\x86\x7a\x2f\x7f\xc1\x42\x0a\x96\x5d\x9d\ -\x68\xc1\xf4\x79\x99\xcc\xb3\xd0\x5f\x81\xbc\xb2\xac\xee\xbc\xc2\ -\x2e\xcc\x3f\xb2\x17\x42\x42\x2f\x15\xf1\xed\x54\x49\xd0\x57\x99\ -\x50\x1f\x4d\x40\x33\x38\xa2\xa1\x80\x32\xd7\xc5\x4d\x23\x66\x05\ -\xf5\xcd\x4d\x6a\xb6\xfc\x86\x4e\x98\x18\x24\xd6\xd1\x27\x62\x75\ -\x35\x9f\xa0\x9c\xc3\xbf\x56\xdd\xfe\x07\xc6\x57\x6f\x47\ -\x00\x00\x06\x89\ +\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\x36\x32\x2c\x32\x37\ +\x38\x2e\x34\x38\x63\x32\x2e\x36\x31\x2d\x2e\x38\x2c\x35\x2e\x32\ +\x33\x2d\x31\x2e\x34\x36\x2c\x37\x2e\x37\x37\x2d\x32\x2e\x30\x39\ +\x2c\x31\x2e\x31\x34\x2d\x2e\x32\x38\x2c\x32\x2e\x32\x38\x2d\x2e\ +\x35\x36\x2c\x33\x2e\x34\x32\x2d\x2e\x38\x36\x6c\x2e\x36\x32\x2d\ +\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\x33\x39\x63\x2e\x33\ +\x36\x2e\x31\x35\x2e\x37\x32\x2e\x33\x33\x2c\x31\x2e\x30\x37\x2e\ +\x35\x6c\x2e\x33\x37\x2e\x31\x39\x61\x36\x36\x2e\x31\x38\x2c\x36\ +\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x36\x2e\x38\x33\ +\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x33\x35\x2c\x33\x30\x2e\ +\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\x39\x34\x2d\x31\x30\ +\x2e\x31\x35\x41\x32\x30\x35\x2c\x32\x30\x35\x2c\x30\x2c\x30\x2c\ +\x30\x2c\x34\x36\x34\x2e\x34\x34\x2c\x32\x35\x34\x63\x2d\x36\x30\ +\x2e\x32\x32\x2d\x35\x30\x2e\x33\x31\x2d\x31\x32\x38\x2e\x33\x31\ +\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\x2d\x35\x38\x2e\x33\x36\ +\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\x2d\x31\x30\x35\x2e\x38\ +\x34\x2c\x33\x36\x2d\x31\x34\x36\x2e\x38\x34\x2c\x37\x39\x2e\x32\ +\x38\x2d\x38\x2e\x32\x37\x2c\x38\x2e\x37\x32\x2d\x31\x30\x2e\x37\ +\x39\x2c\x31\x39\x2e\x36\x32\x2d\x36\x2e\x38\x39\x2c\x33\x31\x2e\ +\x35\x32\x2c\x37\x2e\x32\x34\x2c\x32\x32\x2c\x33\x31\x2e\x35\x36\ +\x2c\x32\x36\x2e\x38\x33\x2c\x34\x37\x2e\x39\x31\x2c\x31\x30\x2c\ +\x34\x39\x2e\x32\x32\x2d\x35\x30\x2e\x35\x37\x2c\x31\x30\x38\x2d\ +\x37\x31\x2e\x30\x37\x2c\x31\x37\x35\x2e\x33\x39\x2d\x36\x31\x2e\ +\x34\x41\x31\x38\x37\x2e\x39\x32\x2c\x31\x38\x37\x2e\x39\x32\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x34\x31\x35\x2c\x32\x38\x39\x2e\x36\x38\ +\x2c\x36\x37\x2e\x34\x39\x2c\x36\x37\x2e\x34\x39\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x34\x33\x36\x2e\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\ +\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\xfe\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -8512,97 +7370,241 @@ \x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ \x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ \x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x35\x35\x2e\x33\x31\ -\x2c\x33\x32\x37\x2e\x36\x39\x63\x30\x2d\x31\x39\x2e\x35\x31\x2d\ -\x36\x2e\x37\x34\x2d\x32\x36\x2e\x38\x36\x2d\x31\x36\x2e\x37\x38\ -\x2d\x32\x36\x2e\x38\x36\x73\x2d\x31\x36\x2e\x34\x35\x2c\x38\x2e\ -\x36\x33\x2d\x31\x36\x2e\x34\x35\x2c\x32\x36\x2e\x38\x36\x2c\x35\ -\x2e\x38\x33\x2c\x32\x37\x2e\x34\x31\x2c\x31\x36\x2e\x35\x34\x2c\ -\x32\x37\x2e\x34\x31\x2c\x31\x36\x2e\x36\x39\x2d\x38\x2e\x35\x38\ -\x2c\x31\x36\x2e\x36\x39\x2d\x32\x37\x2e\x34\x31\x5a\x22\x2f\x3e\ -\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x36\x31\x2e\x37\ -\x38\x2c\x33\x38\x33\x2e\x36\x35\x63\x2d\x39\x2e\x39\x39\x2c\x30\ -\x2d\x31\x36\x2e\x34\x35\x2c\x38\x2e\x37\x35\x2d\x31\x36\x2e\x34\ -\x35\x2c\x32\x36\x2e\x38\x36\x73\x35\x2e\x38\x33\x2c\x32\x37\x2e\ -\x34\x31\x2c\x31\x36\x2e\x35\x34\x2c\x32\x37\x2e\x34\x31\x2c\x31\ -\x36\x2e\x36\x39\x2d\x38\x2e\x35\x38\x2c\x31\x36\x2e\x36\x39\x2d\ -\x32\x37\x2e\x34\x31\x2d\x36\x2e\x37\x34\x2d\x32\x36\x2e\x38\x36\ -\x2d\x31\x36\x2e\x37\x38\x2d\x32\x36\x2e\x38\x36\x5a\x22\x2f\x3e\ -\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\x35\ -\x38\x2c\x33\x32\x37\x2e\x39\x34\x63\x2d\x39\x2e\x31\x39\x2d\x32\ -\x37\x2e\x34\x33\x2d\x32\x32\x2e\x39\x31\x2d\x35\x36\x2e\x38\x31\ -\x2d\x33\x39\x2e\x30\x36\x2d\x38\x36\x2e\x34\x36\x76\x2d\x2e\x36\ -\x32\x63\x2d\x34\x2e\x34\x31\x2d\x37\x2e\x37\x37\x2d\x38\x2e\x38\ -\x37\x2d\x31\x35\x2e\x34\x36\x2d\x31\x33\x2e\x33\x38\x2d\x32\x33\ -\x2e\x31\x2d\x39\x2e\x36\x36\x2d\x31\x36\x2e\x35\x38\x2d\x31\x39\ -\x2e\x39\x31\x2d\x33\x33\x2e\x31\x2d\x33\x30\x2e\x33\x39\x2d\x34\ -\x39\x2e\x32\x38\x2d\x32\x30\x2e\x38\x33\x2d\x33\x32\x2e\x33\x39\ -\x2d\x34\x32\x2e\x39\x33\x2d\x36\x34\x2e\x31\x33\x2d\x36\x36\x2e\ -\x37\x34\x2d\x39\x36\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\ -\x30\x31\x2d\x2e\x30\x31\x2e\x30\x32\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x2e\x30\x31\x2d\x2e\x30\x31\x2d\x2e\x30\x32\x2d\x32\x33\x2e\x38\ -\x31\x2c\x33\x31\x2e\x39\x33\x2d\x34\x35\x2e\x39\x31\x2c\x36\x33\ -\x2e\x36\x37\x2d\x36\x36\x2e\x37\x35\x2c\x39\x36\x2e\x30\x37\x2d\ -\x31\x30\x2e\x34\x38\x2c\x31\x36\x2e\x31\x37\x2d\x32\x30\x2e\x37\ -\x32\x2c\x33\x32\x2e\x36\x39\x2d\x33\x30\x2e\x33\x38\x2c\x34\x39\ -\x2e\x32\x36\x2d\x34\x2e\x35\x31\x2c\x37\x2e\x36\x34\x2d\x38\x2e\ -\x39\x38\x2c\x31\x35\x2e\x33\x34\x2d\x31\x33\x2e\x33\x38\x2c\x32\ -\x33\x2e\x31\x31\x76\x2e\x36\x32\x63\x2d\x31\x36\x2e\x31\x35\x2c\ -\x32\x39\x2e\x36\x35\x2d\x32\x39\x2e\x38\x37\x2c\x35\x39\x2e\x30\ -\x34\x2d\x33\x39\x2e\x30\x36\x2c\x38\x36\x2e\x34\x36\x2d\x38\x2e\ -\x33\x34\x2c\x32\x34\x2e\x38\x38\x2d\x38\x2e\x39\x33\x2c\x34\x39\ -\x2e\x30\x31\x2d\x33\x2e\x32\x31\x2c\x37\x34\x2e\x39\x32\x2c\x31\ -\x33\x2e\x35\x35\x2c\x36\x31\x2e\x34\x33\x2c\x36\x30\x2e\x35\x36\ -\x2c\x31\x30\x37\x2e\x31\x33\x2c\x31\x31\x37\x2e\x36\x37\x2c\x31\ -\x32\x30\x2e\x36\x34\x2c\x30\x2c\x2e\x30\x32\x2c\x30\x2c\x2e\x30\ -\x35\x2c\x30\x2c\x2e\x30\x37\x2c\x38\x2e\x38\x31\x2c\x32\x2e\x30\ -\x34\x2c\x31\x37\x2e\x36\x2c\x33\x2e\x32\x37\x2c\x32\x36\x2e\x33\ -\x2c\x33\x2e\x37\x37\x2e\x31\x39\x2e\x30\x31\x2e\x33\x39\x2e\x30\ -\x32\x2e\x35\x38\x2e\x30\x34\x2e\x39\x37\x2e\x30\x35\x2c\x31\x2e\ -\x39\x33\x2e\x30\x39\x2c\x32\x2e\x39\x2e\x31\x32\x2e\x34\x31\x2e\ -\x30\x32\x2e\x38\x32\x2e\x30\x33\x2c\x31\x2e\x32\x33\x2e\x30\x34\ -\x2e\x37\x38\x2e\x30\x32\x2c\x31\x2e\x35\x35\x2e\x30\x33\x2c\x32\ -\x2e\x33\x33\x2e\x30\x34\x2e\x36\x2c\x30\x2c\x31\x2e\x31\x39\x2e\ -\x30\x31\x2c\x31\x2e\x37\x39\x2e\x30\x31\x73\x31\x2e\x32\x2c\x30\ -\x2c\x31\x2e\x37\x39\x2d\x2e\x30\x31\x63\x2e\x37\x37\x2c\x30\x2c\ -\x31\x2e\x35\x35\x2d\x2e\x30\x32\x2c\x32\x2e\x33\x33\x2d\x2e\x30\ -\x34\x2e\x34\x31\x2d\x2e\x30\x31\x2e\x38\x32\x2d\x2e\x30\x33\x2c\ -\x31\x2e\x32\x33\x2d\x2e\x30\x34\x2e\x39\x36\x2d\x2e\x30\x33\x2c\ -\x31\x2e\x39\x33\x2d\x2e\x30\x37\x2c\x32\x2e\x39\x2d\x2e\x31\x32\ -\x2e\x32\x2d\x2e\x30\x31\x2e\x33\x39\x2d\x2e\x30\x32\x2e\x35\x38\ -\x2d\x2e\x30\x34\x2c\x38\x2e\x37\x2d\x2e\x35\x2c\x31\x37\x2e\x34\ -\x39\x2d\x31\x2e\x37\x33\x2c\x32\x36\x2e\x33\x2d\x33\x2e\x37\x37\ -\x2c\x30\x2d\x2e\x30\x32\x2c\x30\x2d\x2e\x30\x35\x2c\x30\x2d\x2e\ -\x30\x37\x2c\x35\x37\x2e\x31\x31\x2d\x31\x33\x2e\x35\x2c\x31\x30\ -\x34\x2e\x31\x33\x2d\x35\x39\x2e\x32\x31\x2c\x31\x31\x37\x2e\x36\ -\x37\x2d\x31\x32\x30\x2e\x36\x34\x2c\x35\x2e\x37\x32\x2d\x32\x35\ -\x2e\x39\x31\x2c\x35\x2e\x31\x32\x2d\x35\x30\x2e\x30\x34\x2d\x33\ -\x2e\x32\x31\x2d\x37\x34\x2e\x39\x32\x5a\x4d\x31\x39\x35\x2e\x31\ -\x2c\x33\x32\x37\x2e\x37\x35\x63\x30\x2d\x32\x38\x2e\x39\x32\x2c\ -\x31\x35\x2e\x32\x37\x2d\x35\x31\x2e\x35\x31\x2c\x34\x33\x2e\x34\ -\x36\x2d\x35\x31\x2e\x35\x31\x2c\x32\x35\x2e\x32\x38\x2c\x30\x2c\ -\x34\x33\x2e\x30\x39\x2c\x31\x37\x2e\x35\x37\x2c\x34\x33\x2e\x30\ -\x39\x2c\x35\x31\x2e\x34\x34\x2c\x30\x2c\x33\x30\x2e\x37\x2d\x31\ -\x35\x2e\x38\x39\x2c\x35\x31\x2e\x39\x39\x2d\x34\x33\x2e\x33\x36\ -\x2c\x35\x31\x2e\x39\x39\x2d\x32\x35\x2e\x39\x39\x2c\x30\x2d\x34\ -\x33\x2e\x31\x39\x2d\x31\x37\x2e\x37\x37\x2d\x34\x33\x2e\x31\x39\ -\x2d\x35\x31\x2e\x39\x32\x5a\x4d\x32\x36\x33\x2e\x33\x36\x2c\x34\ -\x35\x38\x2e\x39\x36\x68\x2d\x32\x35\x2e\x34\x34\x6c\x39\x38\x2e\ -\x35\x33\x2d\x31\x37\x39\x2e\x36\x38\x68\x32\x35\x2e\x36\x33\x6c\ -\x2d\x39\x38\x2e\x37\x32\x2c\x31\x37\x39\x2e\x36\x38\x5a\x4d\x33\ -\x36\x31\x2e\x35\x34\x2c\x34\x36\x32\x2e\x35\x31\x63\x2d\x32\x36\ -\x2e\x30\x34\x2c\x30\x2d\x34\x33\x2e\x31\x39\x2d\x31\x37\x2e\x39\ -\x33\x2d\x34\x33\x2e\x31\x39\x2d\x35\x31\x2e\x39\x33\x2c\x30\x2d\ -\x32\x38\x2e\x39\x32\x2c\x31\x35\x2e\x32\x34\x2d\x35\x31\x2e\x35\ -\x31\x2c\x34\x33\x2e\x34\x36\x2d\x35\x31\x2e\x35\x31\x2c\x32\x35\ -\x2e\x33\x34\x2c\x30\x2c\x34\x33\x2e\x30\x39\x2c\x31\x37\x2e\x35\ -\x38\x2c\x34\x33\x2e\x30\x39\x2c\x35\x31\x2e\x34\x35\x2c\x30\x2c\ -\x33\x30\x2e\x36\x36\x2d\x31\x35\x2e\x38\x36\x2c\x35\x31\x2e\x39\ -\x39\x2d\x34\x33\x2e\x33\x36\x2c\x35\x31\x2e\x39\x39\x5a\x22\x2f\ -\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x07\xc6\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x39\x38\x2e\x38\x33\ +\x2c\x32\x31\x36\x2e\x38\x31\x68\x2d\x31\x39\x37\x2e\x36\x36\x63\ +\x2d\x31\x36\x2e\x36\x39\x2c\x30\x2d\x32\x30\x2e\x35\x35\x2c\x33\ +\x35\x2e\x36\x35\x2d\x31\x38\x2e\x30\x37\x2c\x35\x32\x2e\x31\x36\ +\x6c\x32\x31\x2e\x35\x31\x2c\x31\x32\x32\x2e\x32\x35\x63\x32\x2e\ +\x30\x31\x2c\x31\x33\x2e\x33\x35\x2c\x31\x33\x2e\x34\x38\x2c\x32\ +\x33\x2e\x32\x33\x2c\x32\x36\x2e\x39\x39\x2c\x32\x33\x2e\x32\x33\ +\x68\x31\x2e\x36\x32\x63\x2d\x35\x2e\x38\x37\x2c\x30\x2d\x31\x30\ +\x2e\x36\x32\x2c\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\x2c\x31\ +\x30\x2e\x36\x32\x73\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2c\ +\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\x63\x2d\x35\x2e\x38\ +\x37\x2c\x30\x2d\x31\x30\x2e\x36\x32\x2c\x34\x2e\x37\x36\x2d\x31\ +\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\x73\x34\x2e\x37\x36\x2c\ +\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\ +\x32\x63\x2d\x35\x2e\x38\x37\x2c\x30\x2d\x31\x30\x2e\x36\x32\x2c\ +\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\x32\ +\x73\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2c\x31\x30\x2e\x36\ +\x32\x2c\x31\x30\x2e\x36\x32\x68\x33\x34\x2e\x39\x31\x76\x38\x33\ +\x2e\x34\x39\x68\x36\x33\x2e\x37\x35\x76\x2d\x38\x33\x2e\x34\x39\ +\x68\x33\x34\x2e\x39\x31\x63\x35\x2e\x38\x37\x2c\x30\x2c\x31\x30\ +\x2e\x36\x32\x2d\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2d\x31\ +\x30\x2e\x36\x32\x73\x2d\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\ +\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\x63\x35\x2e\x38\ +\x37\x2c\x30\x2c\x31\x30\x2e\x36\x32\x2d\x34\x2e\x37\x36\x2c\x31\ +\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\x73\x2d\x34\x2e\x37\x36\ +\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\ +\x36\x32\x63\x35\x2e\x38\x37\x2c\x30\x2c\x31\x30\x2e\x36\x32\x2d\ +\x34\x2e\x37\x36\x2c\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\x36\x32\ +\x73\x2d\x34\x2e\x37\x36\x2d\x31\x30\x2e\x36\x32\x2d\x31\x30\x2e\ +\x36\x32\x2d\x31\x30\x2e\x36\x32\x68\x31\x2e\x36\x32\x63\x31\x33\ +\x2e\x35\x31\x2c\x30\x2c\x32\x34\x2e\x39\x38\x2d\x39\x2e\x38\x38\ +\x2c\x32\x36\x2e\x39\x39\x2d\x32\x33\x2e\x32\x33\x6c\x32\x31\x2e\ +\x35\x31\x2d\x31\x32\x32\x2e\x32\x35\x63\x32\x2e\x34\x38\x2d\x31\ +\x36\x2e\x35\x2d\x31\x2e\x33\x38\x2d\x35\x32\x2e\x31\x36\x2d\x31\ +\x38\x2e\x30\x37\x2d\x35\x32\x2e\x31\x36\x5a\x22\x2f\x3e\x0a\x20\ +\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x35\x37\x2e\x32\x2c\x35\ +\x38\x2e\x30\x35\x68\x2d\x34\x2e\x38\x31\x6c\x2d\x31\x2e\x31\x33\ +\x2d\x33\x2e\x38\x63\x30\x2d\x38\x2e\x38\x2d\x37\x2e\x31\x34\x2d\ +\x31\x35\x2e\x39\x34\x2d\x31\x35\x2e\x39\x34\x2d\x31\x35\x2e\x39\ +\x34\x68\x2d\x37\x30\x2e\x36\x34\x63\x2d\x38\x2e\x38\x2c\x30\x2d\ +\x31\x35\x2e\x39\x34\x2c\x37\x2e\x31\x33\x2d\x31\x35\x2e\x39\x34\ +\x2c\x31\x35\x2e\x39\x34\x6c\x2d\x31\x2e\x31\x33\x2c\x33\x2e\x38\ +\x68\x2d\x34\x2e\x38\x31\x63\x2d\x32\x32\x2e\x32\x36\x2c\x30\x2d\ +\x34\x30\x2e\x33\x31\x2c\x31\x38\x2e\x30\x35\x2d\x34\x30\x2e\x33\ +\x31\x2c\x34\x30\x2e\x33\x31\x76\x31\x30\x37\x2e\x34\x34\x68\x31\ +\x39\x35\x2e\x30\x33\x76\x2d\x31\x30\x37\x2e\x34\x34\x63\x30\x2d\ +\x32\x32\x2e\x32\x36\x2d\x31\x38\x2e\x30\x35\x2d\x34\x30\x2e\x33\ +\x31\x2d\x34\x30\x2e\x33\x31\x2d\x34\x30\x2e\x33\x31\x5a\x4d\x32\ +\x34\x32\x2e\x32\x2c\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\ +\x31\x39\x76\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\x39\x76\ +\x34\x30\x2e\x35\x32\x5a\x4d\x32\x36\x38\x2e\x35\x36\x2c\x31\x31\ +\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\x31\x39\x76\x2d\x34\x30\x2e\ +\x35\x32\x68\x31\x36\x2e\x31\x39\x76\x34\x30\x2e\x35\x32\x5a\x4d\ +\x32\x39\x34\x2e\x39\x32\x2c\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\ +\x36\x2e\x31\x39\x76\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\ +\x39\x76\x34\x30\x2e\x35\x32\x5a\x4d\x33\x32\x31\x2e\x32\x37\x2c\ +\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\x31\x39\x76\x2d\x34\ +\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\x39\x76\x34\x30\x2e\x35\x32\ +\x5a\x4d\x33\x34\x37\x2e\x36\x33\x2c\x31\x31\x34\x2e\x37\x31\x68\ +\x2d\x31\x36\x2e\x31\x39\x76\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\ +\x2e\x31\x39\x76\x34\x30\x2e\x35\x32\x5a\x4d\x33\x37\x33\x2e\x39\ +\x39\x2c\x31\x31\x34\x2e\x37\x31\x68\x2d\x31\x36\x2e\x31\x39\x76\ +\x2d\x34\x30\x2e\x35\x32\x68\x31\x36\x2e\x31\x39\x76\x34\x30\x2e\ +\x35\x32\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x0a\x70\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x38\x63\x63\ +\x35\x34\x30\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ +\x3a\x23\x39\x32\x39\x34\x39\x37\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ +\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ +\x4d\x32\x39\x30\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x43\x34\x30\ +\x32\x2c\x37\x33\x2e\x31\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x31\ +\x31\x2e\x34\x34\x2c\x35\x36\x33\x2e\x39\x2c\x31\x38\x37\x2e\x34\ +\x35\x63\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\ +\x38\x31\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\ +\x2e\x30\x35\x2d\x31\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\ +\x32\x38\x2e\x36\x32\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\ +\x33\x2d\x31\x35\x2e\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\ +\x2e\x32\x2d\x32\x38\x2e\x37\x32\x2d\x34\x36\x2e\x36\x31\x2d\x34\ +\x31\x2e\x31\x31\x2d\x33\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\ +\x33\x33\x2d\x34\x36\x2e\x37\x34\x2d\x31\x32\x37\x2e\x37\x35\x2d\ +\x35\x34\x2e\x36\x34\x2d\x35\x34\x2d\x39\x2e\x32\x2d\x31\x30\x36\ +\x2e\x39\x32\x2d\x34\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\ +\x35\x2e\x32\x32\x2d\x34\x35\x2c\x31\x37\x2d\x38\x34\x2e\x32\x39\ +\x2c\x34\x33\x2e\x39\x33\x2d\x31\x31\x38\x2e\x31\x36\x2c\x37\x39\ +\x2e\x39\x34\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\ +\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\ +\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\ +\x2d\x33\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\ +\x31\x61\x33\x38\x30\x2e\x35\x31\x2c\x33\x38\x30\x2e\x35\x31\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x35\x37\x2e\x36\x32\x2d\x35\x30\x2e\x33\ +\x38\x63\x34\x33\x2d\x33\x30\x2e\x35\x38\x2c\x38\x39\x2e\x39\x33\ +\x2d\x35\x31\x2e\x31\x2c\x31\x34\x30\x2e\x37\x37\x2d\x36\x30\x2e\ +\x34\x35\x43\x32\x35\x35\x2e\x30\x37\x2c\x37\x34\x2e\x32\x33\x2c\ +\x32\x37\x37\x2e\x34\x33\x2c\x37\x32\x2e\x38\x35\x2c\x32\x39\x30\ +\x2e\x31\x38\x2c\x37\x31\x2e\x33\x35\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\ +\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x35\x31\x37\x2e\x33\x37\x63\ +\x2d\x32\x32\x2c\x30\x2d\x33\x39\x2e\x31\x35\x2d\x31\x38\x2e\x34\ +\x35\x2d\x33\x39\x2e\x31\x31\x2d\x34\x32\x2e\x31\x31\x2c\x30\x2d\ +\x32\x33\x2e\x33\x37\x2c\x31\x37\x2e\x31\x39\x2d\x34\x31\x2e\x38\ +\x33\x2c\x33\x38\x2e\x38\x36\x2d\x34\x31\x2e\x37\x39\x2c\x32\x32\ +\x2e\x32\x35\x2c\x30\x2c\x33\x39\x2e\x33\x32\x2c\x31\x38\x2e\x31\ +\x37\x2c\x33\x39\x2e\x33\x34\x2c\x34\x31\x2e\x38\x31\x53\x33\x32\ +\x32\x2e\x31\x2c\x35\x31\x37\x2e\x33\x37\x2c\x33\x30\x30\x2c\x35\ +\x31\x37\x2e\x33\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\x3d\x22\ +\x4d\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\x30\x2e\x33\x37\x68\x31\ +\x34\x2e\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\x31\x30\x2e\x36\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\x2c\x31\x63\x32\x37\ +\x2e\x34\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\x32\x36\x2e\x36\x37\ +\x2c\x35\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\x36\x2c\x31\x2e\x31\ +\x37\x2c\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\x33\x31\x2e\x32\x2e\ +\x37\x38\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\x2e\x31\x32\x2c\x30\ +\x2c\x34\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\x36\x68\x31\x31\x2e\ +\x37\x35\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\x31\x39\x2e\x33\x36\ +\x2c\x35\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\x2c\x31\x39\x2e\x32\ +\x32\x2c\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\x31\x38\x2c\x36\x36\ +\x2e\x35\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\x2e\x30\x39\x2c\x39\ +\x2e\x36\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\x2e\x36\x37\x2d\x31\ +\x32\x2e\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\x33\x37\x35\x2e\x31\ +\x32\x63\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\x37\x2d\x31\x32\x2d\ +\x38\x2e\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\x35\x33\x2c\x30\x2d\ +\x33\x35\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\x30\x2e\x39\x31\x2c\ +\x30\x2d\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\x31\x30\x2e\x32\x39\ +\x2c\x36\x2e\x32\x34\x2d\x31\x36\x2e\x32\x35\x2c\x31\x36\x2e\x35\ +\x36\x2d\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\x39\x2d\x2e\x30\x39\ +\x2c\x39\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\x35\x31\x2c\x30\x2c\ +\x30\x2d\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\x2d\x33\x30\x2e\x35\ +\x39\x2c\x30\x2d\x34\x35\x2e\x34\x35\x2e\x31\x39\x2d\x32\x38\x2e\ +\x37\x39\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\x33\x36\x2c\x34\ +\x33\x2e\x38\x39\x2d\x36\x30\x2e\x35\x38\x43\x34\x34\x31\x2e\x37\ +\x31\x2c\x32\x38\x32\x2e\x31\x34\x2c\x34\x34\x35\x2e\x34\x31\x2c\ +\x32\x38\x31\x2e\x33\x33\x2c\x34\x34\x39\x2e\x30\x37\x2c\x32\x38\ +\x30\x2e\x33\x37\x5a\x6d\x33\x38\x2e\x33\x31\x2c\x31\x30\x38\x2e\ +\x34\x39\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\x34\x2d\x33\x32\ +\x2e\x37\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\x37\x2d\x31\x2e\ +\x33\x31\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\x39\x33\x2d\x32\ +\x39\x2e\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\x38\x2e\x37\x37\ +\x2d\x31\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\x32\x31\x2c\x31\ +\x34\x2e\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\x32\x2e\x35\x32\ +\x2d\x2e\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\x2c\x32\x37\x2e\ +\x35\x34\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\x33\x2e\x31\x39\ +\x2c\x33\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\x34\x32\ +\x2c\x33\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\x33\x2c\x34\x36\ +\x2e\x37\x31\x61\x31\x34\x2e\x39\x31\x2c\x31\x34\x2e\x39\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\x38\x2e\x36\x36\ +\x63\x2d\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\x32\x2e\x38\x2c\ +\x31\x31\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\x2e\x38\x35\x2c\ +\x34\x2e\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\x38\x2e\x33\x35\ +\x2c\x34\x2e\x32\x32\x2c\x31\x33\x2e\x33\x32\x61\x36\x38\x2e\x33\ +\x38\x2c\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2c\ +\x37\x2e\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\x33\x2c\x33\x2e\ +\x36\x2c\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\x37\x73\x37\x2e\ +\x37\x35\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\x2d\x38\x2e\x37\ +\x36\x61\x31\x31\x31\x2e\x34\x34\x2c\x31\x31\x31\x2e\x34\x34\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\x36\x2c\x39\x2e\ +\x36\x38\x2c\x39\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\ +\x32\x2d\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\x34\x2e\x36\x34\ +\x2c\x35\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\x33\x2d\x31\x36\ +\x2e\x37\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\x2e\x34\x38\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\x2c\x34\x33\x35\ +\x2e\x35\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ +\x37\x39\x2e\x35\x38\x2c\x33\x38\x34\x2e\x33\x31\x63\x33\x2e\x31\ +\x38\x2d\x2e\x30\x36\x2c\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\ +\x2e\x36\x31\x2c\x30\x2c\x30\x2d\x33\x2e\x32\x34\x2c\x30\x2d\x36\ +\x2e\x34\x33\x2c\x30\x2d\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\ +\x35\x33\x2c\x30\x2d\x32\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\ +\x35\x38\x2d\x33\x32\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\ +\x38\x2e\x39\x33\x2d\x33\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\ +\x34\x2d\x32\x39\x2e\x35\x37\x43\x32\x34\x36\x2c\x33\x31\x39\x2e\ +\x31\x34\x2c\x32\x31\x38\x2c\x33\x33\x34\x2e\x36\x31\x2c\x31\x39\ +\x34\x2e\x31\x33\x2c\x33\x35\x39\x63\x2d\x36\x2c\x36\x2e\x31\x37\ +\x2d\x39\x2e\x36\x33\x2c\x31\x33\x2e\x35\x39\x2d\x39\x2e\x36\x31\ +\x2c\x32\x32\x2e\x38\x31\x61\x36\x38\x2e\x39\x33\x2c\x36\x38\x2e\ +\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x37\x2e\x33\x38\x63\ +\x35\x2e\x36\x33\x2c\x32\x33\x2e\x32\x38\x2c\x33\x31\x2e\x32\x37\ +\x2c\x33\x30\x2e\x32\x38\x2c\x34\x37\x2e\x39\x33\x2c\x31\x33\x2e\ +\x32\x37\x2c\x32\x34\x2e\x36\x31\x2d\x32\x35\x2e\x31\x31\x2c\x35\ +\x33\x2e\x37\x35\x2d\x33\x33\x2e\x38\x36\x2c\x38\x37\x2d\x32\x36\ +\x2e\x37\x37\x2c\x31\x35\x2c\x33\x2e\x32\x2c\x32\x38\x2c\x31\x30\ +\x2e\x33\x35\x2c\x33\x39\x2e\x36\x2c\x32\x30\x2e\x34\x32\x43\x33\ +\x36\x33\x2e\x31\x37\x2c\x33\x38\x38\x2e\x38\x32\x2c\x33\x37\x30\ +\x2e\x30\x37\x2c\x33\x38\x34\x2e\x34\x39\x2c\x33\x37\x39\x2e\x35\ +\x38\x2c\x33\x38\x34\x2e\x33\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ +\x64\x3d\x22\x4d\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\ +\x31\x61\x32\x36\x2e\x31\x32\x2c\x32\x36\x2e\x31\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x37\x2e\x37\x39\x2c\x31\x2e\x36\x36\x63\x35\x2e\ +\x35\x39\x2c\x35\x2e\x37\x32\x2c\x31\x32\x2e\x33\x34\x2c\x38\x2e\ +\x37\x38\x2c\x32\x33\x2c\x38\x2e\x36\x31\x61\x32\x34\x2c\x32\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\ +\x41\x32\x35\x2e\x36\x38\x2c\x32\x35\x2e\x36\x38\x2c\x30\x2c\x30\ +\x2c\x30\x2c\x34\x35\x34\x2e\x36\x35\x2c\x33\x31\x36\x2e\x33\x31\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\ +\x36\x32\x2c\x32\x37\x38\x2e\x34\x38\x63\x32\x2e\x36\x31\x2d\x2e\ +\x38\x2c\x35\x2e\x32\x33\x2d\x31\x2e\x34\x36\x2c\x37\x2e\x37\x37\ +\x2d\x32\x2e\x30\x39\x2c\x31\x2e\x31\x34\x2d\x2e\x32\x38\x2c\x32\ +\x2e\x32\x38\x2d\x2e\x35\x36\x2c\x33\x2e\x34\x32\x2d\x2e\x38\x36\ +\x6c\x2e\x36\x32\x2d\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\ +\x33\x39\x63\x2e\x33\x36\x2e\x31\x35\x2e\x37\x32\x2e\x33\x33\x2c\ +\x31\x2e\x30\x37\x2e\x35\x6c\x2e\x33\x37\x2e\x31\x39\x61\x36\x36\ +\x2e\x31\x38\x2c\x36\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x32\x36\x2e\x38\x33\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x33\ +\x35\x2c\x33\x30\x2e\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\ +\x39\x34\x2d\x31\x30\x2e\x31\x35\x41\x32\x30\x35\x2c\x32\x30\x35\ +\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x36\x34\x2e\x34\x34\x2c\x32\x35\ +\x34\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\x30\x2e\x33\x31\x2d\x31\ +\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\x2d\ +\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\x2d\ +\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2d\x31\x34\x36\x2e\x38\x34\ +\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\x37\x2c\x38\x2e\x37\x32\ +\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\x36\x32\x2d\x36\x2e\x38\ +\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\x32\x34\x2c\x32\x32\x2c\ +\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\x33\x2c\x34\x37\x2e\x39\ +\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\x2d\x35\x30\x2e\x35\x37\ +\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\x2c\x31\x37\x35\x2e\x33\ +\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x37\x2e\x39\x32\x2c\x31\x38\ +\x37\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x31\x35\x2c\x32\ +\x38\x39\x2e\x36\x38\x2c\x36\x37\x2e\x34\x39\x2c\x36\x37\x2e\x34\ +\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\x36\x2e\x36\x32\x2c\x32\ +\x37\x38\x2e\x34\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x0b\x47\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8611,125 +7613,181 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x63\x69\x72\x63\x6c\x65\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x63\x78\x3d\x22\x31\x37\x39\x2e\x30\x36\x22\ -\x20\x63\x79\x3d\x22\x31\x30\x34\x2e\x34\x33\x22\x20\x72\x3d\x22\ -\x31\x31\x2e\x32\x35\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ -\x31\x31\x32\x2e\x38\x2c\x35\x37\x2e\x33\x32\x56\x35\x34\x32\x2e\ -\x36\x38\x48\x34\x38\x37\x2e\x32\x56\x35\x37\x2e\x33\x32\x5a\x4d\ -\x33\x34\x37\x2c\x38\x35\x2e\x33\x38\x68\x37\x35\x2e\x36\x76\x33\ -\x38\x2e\x36\x38\x48\x33\x34\x37\x5a\x4d\x31\x36\x31\x2e\x33\x37\ -\x2c\x31\x30\x34\x2e\x34\x33\x61\x31\x37\x2e\x36\x39\x2c\x31\x37\ -\x2e\x36\x39\x2c\x30\x2c\x31\x2c\x31\x2c\x31\x37\x2e\x36\x39\x2c\ -\x31\x37\x2e\x36\x39\x41\x31\x37\x2e\x36\x39\x2c\x31\x37\x2e\x36\ -\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\x31\x2e\x33\x37\x2c\x31\ -\x30\x34\x2e\x34\x33\x5a\x4d\x34\x32\x33\x2e\x34\x33\x2c\x34\x34\ -\x37\x2e\x35\x31\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\ -\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x34\x38\x2c\x31\x30\x2e\x38\ -\x6c\x2d\x32\x31\x2e\x36\x32\x2c\x32\x31\x2e\x36\x32\x61\x31\x35\ -\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2d\ -\x31\x30\x2e\x38\x2c\x34\x2e\x34\x38\x48\x32\x31\x33\x2e\x34\x37\ -\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\ -\x2c\x31\x2d\x31\x30\x2e\x38\x2d\x34\x2e\x34\x38\x6c\x2d\x32\x31\ -\x2e\x36\x32\x2d\x32\x31\x2e\x36\x32\x61\x31\x35\x2e\x32\x35\x2c\ -\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x34\x38\ -\x2d\x31\x30\x2e\x38\x56\x31\x39\x37\x2e\x34\x34\x61\x31\x35\x2e\ -\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ -\x2e\x34\x38\x2d\x31\x30\x2e\x38\x4c\x32\x30\x32\x2e\x36\x37\x2c\ -\x31\x36\x35\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x31\x30\x2e\x38\x2d\x34\x2e\x34\x38\x48\ -\x33\x38\x36\x2e\x35\x33\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\ -\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x30\x2e\x38\x2c\x34\x2e\ -\x34\x38\x4c\x34\x31\x39\x2c\x31\x38\x36\x2e\x36\x34\x61\x31\x35\ -\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x34\x2e\x34\x38\x2c\x31\x30\x2e\x38\x5a\x6d\x31\x34\x2e\x37\x31\ -\x2d\x33\x33\x37\x2e\x31\x32\x68\x2d\x37\x56\x39\x39\x2e\x30\x35\ -\x68\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x33\ -\x31\x2c\x34\x36\x39\x2e\x37\x37\x48\x32\x30\x30\x2e\x35\x37\x61\ -\x34\x35\x2e\x34\x39\x2c\x34\x35\x2e\x34\x39\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x2d\x36\x2e\x36\x38\x63\x33\x2e\x33\x39\x2d\x37\x2c\ -\x37\x2e\x33\x35\x2d\x31\x33\x2e\x37\x34\x2c\x31\x30\x2e\x37\x36\ -\x2d\x32\x30\x2e\x37\x34\x2c\x34\x2e\x34\x38\x2d\x39\x2c\x34\x2d\ -\x31\x38\x2d\x2e\x36\x32\x2d\x32\x36\x2e\x37\x39\x2d\x31\x31\x2e\ -\x32\x32\x2d\x32\x30\x2d\x31\x39\x2e\x30\x37\x2d\x33\x34\x2e\x36\ -\x31\x2d\x37\x2e\x36\x32\x2d\x35\x37\x2e\x31\x2c\x32\x2e\x33\x38\ -\x2d\x34\x2e\x35\x32\x2c\x35\x2e\x32\x34\x2d\x38\x2e\x38\x2c\x37\ -\x2e\x35\x33\x2d\x31\x33\x2e\x33\x36\x2c\x31\x2e\x35\x36\x2d\x33\ -\x2e\x31\x2c\x32\x2e\x35\x31\x2d\x36\x2e\x35\x31\x2c\x33\x2e\x39\ -\x32\x2d\x31\x30\x2e\x32\x35\x48\x31\x39\x30\x2e\x33\x31\x6c\x34\ -\x31\x2e\x32\x35\x2d\x36\x30\x2e\x33\x39\x2c\x34\x31\x2e\x31\x2c\ -\x36\x30\x2e\x31\x37\x63\x2d\x37\x2e\x37\x38\x2e\x34\x34\x2d\x31\ -\x35\x2e\x33\x34\x2e\x31\x2d\x32\x33\x2e\x31\x2e\x31\x37\x2d\x31\ -\x2e\x34\x34\x2c\x30\x2d\x32\x2e\x33\x38\x2e\x32\x2d\x32\x2e\x36\ -\x2c\x31\x2e\x39\x2d\x2e\x39\x33\x2c\x37\x2e\x34\x2d\x34\x2e\x32\ -\x32\x2c\x31\x33\x2e\x38\x39\x2d\x37\x2e\x39\x34\x2c\x32\x30\x2e\ -\x32\x31\x2d\x37\x2e\x34\x39\x2c\x31\x32\x2e\x35\x2d\x31\x32\x2e\ -\x38\x2c\x32\x32\x2e\x31\x37\x2d\x35\x2e\x34\x36\x2c\x33\x36\x2e\ -\x33\x39\x2c\x32\x2e\x35\x32\x2c\x34\x2e\x38\x33\x2c\x35\x2e\x32\ -\x34\x2c\x39\x2e\x35\x36\x2c\x37\x2e\x37\x35\x2c\x31\x34\x2e\x33\ -\x39\x43\x32\x35\x34\x2c\x34\x33\x32\x2e\x38\x32\x2c\x32\x34\x33\ -\x2c\x34\x34\x37\x2e\x38\x37\x2c\x32\x33\x31\x2c\x34\x36\x39\x2e\ -\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\ -\x38\x2e\x36\x37\x2c\x33\x37\x30\x2e\x32\x38\x48\x32\x36\x38\x2e\ -\x32\x39\x61\x34\x34\x2e\x38\x33\x2c\x34\x34\x2e\x38\x33\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x32\x2d\x36\x2e\x36\x38\x63\x33\x2e\x34\x2d\ -\x37\x2c\x37\x2e\x33\x35\x2d\x31\x33\x2e\x37\x34\x2c\x31\x30\x2e\ -\x37\x36\x2d\x32\x30\x2e\x37\x35\x2c\x34\x2e\x34\x38\x2d\x39\x2c\ -\x34\x2d\x31\x38\x2d\x2e\x36\x31\x2d\x32\x36\x2e\x37\x38\x2d\x31\ -\x31\x2e\x32\x33\x2d\x32\x30\x2d\x31\x39\x2e\x30\x38\x2d\x33\x34\ -\x2e\x36\x32\x2d\x37\x2e\x36\x32\x2d\x35\x37\x2e\x31\x2c\x32\x2e\ -\x33\x37\x2d\x34\x2e\x35\x33\x2c\x35\x2e\x32\x33\x2d\x38\x2e\x38\ -\x2c\x37\x2e\x35\x32\x2d\x31\x33\x2e\x33\x36\x2c\x31\x2e\x35\x36\ -\x2d\x33\x2e\x31\x31\x2c\x32\x2e\x35\x32\x2d\x36\x2e\x35\x31\x2c\ -\x33\x2e\x39\x32\x2d\x31\x30\x2e\x32\x35\x48\x32\x35\x38\x4c\x32\ -\x39\x39\x2e\x32\x37\x2c\x31\x37\x35\x6c\x34\x31\x2e\x31\x2c\x36\ -\x30\x2e\x31\x37\x63\x2d\x37\x2e\x37\x38\x2e\x34\x35\x2d\x31\x35\ -\x2e\x33\x34\x2e\x31\x31\x2d\x32\x33\x2e\x31\x2e\x31\x37\x2d\x31\ -\x2e\x34\x33\x2c\x30\x2d\x32\x2e\x33\x38\x2e\x32\x31\x2d\x32\x2e\ -\x35\x39\x2c\x31\x2e\x39\x31\x2d\x2e\x39\x34\x2c\x37\x2e\x34\x2d\ -\x34\x2e\x32\x32\x2c\x31\x33\x2e\x38\x39\x2d\x37\x2e\x39\x35\x2c\ -\x32\x30\x2e\x32\x31\x2d\x37\x2e\x34\x38\x2c\x31\x32\x2e\x35\x2d\ -\x31\x32\x2e\x37\x39\x2c\x32\x32\x2e\x31\x37\x2d\x35\x2e\x34\x36\ -\x2c\x33\x36\x2e\x33\x39\x2c\x32\x2e\x35\x32\x2c\x34\x2e\x38\x33\ -\x2c\x35\x2e\x32\x34\x2c\x39\x2e\x35\x35\x2c\x37\x2e\x37\x35\x2c\ -\x31\x34\x2e\x33\x39\x43\x33\x32\x31\x2e\x37\x33\x2c\x33\x33\x33\ -\x2e\x33\x33\x2c\x33\x31\x30\x2e\x36\x38\x2c\x33\x34\x38\x2e\x33\ -\x37\x2c\x32\x39\x38\x2e\x36\x37\x2c\x33\x37\x30\x2e\x32\x38\x5a\ -\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x36\x36\x2e\x33\ -\x39\x2c\x34\x36\x37\x2e\x39\x33\x48\x33\x33\x36\x61\x34\x35\x2e\ -\x34\x35\x2c\x34\x35\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ -\x2d\x36\x2e\x36\x37\x63\x33\x2e\x33\x39\x2d\x37\x2c\x37\x2e\x33\ -\x34\x2d\x31\x33\x2e\x37\x34\x2c\x31\x30\x2e\x37\x35\x2d\x32\x30\ -\x2e\x37\x35\x2c\x34\x2e\x34\x39\x2d\x39\x2c\x34\x2d\x31\x38\x2d\ -\x2e\x36\x31\x2d\x32\x36\x2e\x37\x38\x2d\x31\x31\x2e\x32\x33\x2d\ -\x32\x30\x2d\x31\x39\x2e\x30\x37\x2d\x33\x34\x2e\x36\x32\x2d\x37\ -\x2e\x36\x32\x2d\x35\x37\x2e\x31\x2c\x32\x2e\x33\x37\x2d\x34\x2e\ -\x35\x33\x2c\x35\x2e\x32\x33\x2d\x38\x2e\x38\x2c\x37\x2e\x35\x32\ -\x2d\x31\x33\x2e\x33\x37\x2c\x31\x2e\x35\x36\x2d\x33\x2e\x31\x2c\ -\x32\x2e\x35\x32\x2d\x36\x2e\x35\x31\x2c\x33\x2e\x39\x32\x2d\x31\ -\x30\x2e\x32\x34\x48\x33\x32\x35\x2e\x37\x34\x63\x31\x33\x2e\x39\ -\x33\x2d\x32\x30\x2e\x34\x2c\x32\x37\x2e\x35\x31\x2d\x34\x30\x2e\ -\x32\x38\x2c\x34\x31\x2e\x32\x34\x2d\x36\x30\x2e\x34\x6c\x34\x31\ -\x2e\x31\x31\x2c\x36\x30\x2e\x31\x37\x63\x2d\x37\x2e\x37\x38\x2e\ -\x34\x35\x2d\x31\x35\x2e\x33\x34\x2e\x31\x2d\x32\x33\x2e\x31\x31\ -\x2e\x31\x37\x2d\x31\x2e\x34\x33\x2c\x30\x2d\x32\x2e\x33\x37\x2e\ -\x32\x2d\x32\x2e\x35\x39\x2c\x31\x2e\x39\x2d\x2e\x39\x34\x2c\x37\ -\x2e\x34\x2d\x34\x2e\x32\x32\x2c\x31\x33\x2e\x38\x39\x2d\x37\x2e\ -\x39\x34\x2c\x32\x30\x2e\x32\x32\x2d\x37\x2e\x34\x39\x2c\x31\x32\ -\x2e\x35\x2d\x31\x32\x2e\x38\x2c\x32\x32\x2e\x31\x37\x2d\x35\x2e\ -\x34\x37\x2c\x33\x36\x2e\x33\x39\x2c\x32\x2e\x35\x33\x2c\x34\x2e\ -\x38\x32\x2c\x35\x2e\x32\x35\x2c\x39\x2e\x35\x35\x2c\x37\x2e\x37\ -\x36\x2c\x31\x34\x2e\x33\x39\x43\x33\x38\x39\x2e\x34\x34\x2c\x34\ -\x33\x31\x2c\x33\x37\x38\x2e\x33\x39\x2c\x34\x34\x36\x2c\x33\x36\ -\x36\x2e\x33\x39\x2c\x34\x36\x37\x2e\x39\x33\x5a\x22\x2f\x3e\x3c\ -\x2f\x73\x76\x67\x3e\ -\x00\x00\x04\xc2\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x64\x30\x64\x32\x64\x33\x3b\x7d\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x23\x39\x32\x39\ +\x34\x39\x37\x3b\x7d\x2e\x63\x6c\x73\x2d\x33\x7b\x66\x69\x6c\x6c\ +\x3a\x23\x35\x65\x36\x30\x36\x31\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\ +\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\ +\x4d\x32\x39\x30\x2e\x31\x38\x2c\x38\x32\x2e\x36\x32\x43\x34\x30\ +\x32\x2c\x38\x34\x2e\x34\x2c\x34\x39\x30\x2e\x31\x2c\x31\x32\x32\ +\x2e\x37\x2c\x35\x36\x33\x2e\x39\x2c\x31\x39\x38\x2e\x37\x31\x63\ +\x31\x34\x2e\x38\x2c\x31\x35\x2e\x32\x35\x2c\x31\x31\x2e\x38\x31\ +\x2c\x33\x33\x2e\x39\x33\x2c\x33\x2e\x32\x36\x2c\x34\x34\x2d\x31\ +\x31\x2e\x31\x32\x2c\x31\x33\x2e\x31\x36\x2d\x32\x38\x2e\x36\x32\ +\x2c\x31\x33\x2d\x34\x31\x2e\x34\x36\x2e\x38\x33\x2d\x31\x35\x2e\ +\x30\x38\x2d\x31\x34\x2e\x32\x37\x2d\x33\x30\x2e\x32\x2d\x32\x38\ +\x2e\x37\x31\x2d\x34\x36\x2e\x36\x31\x2d\x34\x31\x2e\x31\x2d\x33\ +\x38\x2e\x34\x2d\x32\x39\x2d\x38\x31\x2e\x33\x33\x2d\x34\x36\x2e\ +\x37\x35\x2d\x31\x32\x37\x2e\x37\x35\x2d\x35\x34\x2e\x36\x35\x2d\ +\x35\x34\x2d\x39\x2e\x31\x39\x2d\x31\x30\x36\x2e\x39\x32\x2d\x34\ +\x2e\x33\x32\x2d\x31\x35\x38\x2e\x35\x2c\x31\x35\x2e\x32\x33\x43\ +\x31\x34\x37\x2e\x38\x34\x2c\x31\x38\x30\x2e\x31\x32\x2c\x31\x30\ +\x38\x2e\x35\x35\x2c\x32\x30\x37\x2c\x37\x34\x2e\x36\x38\x2c\x32\ +\x34\x33\x63\x2d\x38\x2e\x35\x37\x2c\x39\x2e\x31\x2d\x31\x38\x2e\ +\x36\x35\x2c\x31\x32\x2e\x33\x32\x2d\x33\x30\x2e\x31\x39\x2c\x38\ +\x2d\x32\x30\x2e\x30\x39\x2d\x37\x2e\x35\x36\x2d\x32\x35\x2e\x32\ +\x2d\x33\x34\x2e\x30\x38\x2d\x39\x2e\x37\x34\x2d\x35\x30\x2e\x36\ +\x41\x33\x38\x30\x2c\x33\x38\x30\x2c\x30\x2c\x30\x2c\x31\x2c\x39\ +\x32\x2e\x33\x37\x2c\x31\x35\x30\x63\x34\x33\x2d\x33\x30\x2e\x35\ +\x37\x2c\x38\x39\x2e\x39\x33\x2d\x35\x31\x2e\x30\x39\x2c\x31\x34\ +\x30\x2e\x37\x37\x2d\x36\x30\x2e\x34\x35\x43\x32\x35\x35\x2e\x30\ +\x37\x2c\x38\x35\x2e\x34\x39\x2c\x32\x37\x37\x2e\x34\x33\x2c\x38\ +\x34\x2e\x31\x31\x2c\x32\x39\x30\x2e\x31\x38\x2c\x38\x32\x2e\x36\ +\x32\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\ +\x2c\x35\x32\x38\x2e\x36\x34\x63\x2d\x32\x32\x2c\x30\x2d\x33\x39\ +\x2e\x31\x35\x2d\x31\x38\x2e\x34\x36\x2d\x33\x39\x2e\x31\x31\x2d\ +\x34\x32\x2e\x31\x32\x2c\x30\x2d\x32\x33\x2e\x33\x37\x2c\x31\x37\ +\x2e\x31\x39\x2d\x34\x31\x2e\x38\x33\x2c\x33\x38\x2e\x38\x36\x2d\ +\x34\x31\x2e\x37\x39\x2c\x32\x32\x2e\x32\x35\x2c\x30\x2c\x33\x39\ +\x2e\x33\x32\x2c\x31\x38\x2e\x31\x37\x2c\x33\x39\x2e\x33\x34\x2c\ +\x34\x31\x2e\x38\x31\x53\x33\x32\x32\x2e\x31\x2c\x35\x32\x38\x2e\ +\x36\x33\x2c\x33\x30\x30\x2c\x35\x32\x38\x2e\x36\x34\x5a\x22\x2f\ +\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x39\x2e\x35\x38\x2c\ +\x33\x39\x35\x2e\x35\x37\x63\x33\x2e\x31\x38\x2d\x2e\x30\x36\x2c\ +\x36\x2e\x33\x31\x2d\x2e\x30\x35\x2c\x39\x2e\x36\x31\x2c\x30\x2c\ +\x30\x2d\x33\x2e\x32\x33\x2c\x30\x2d\x36\x2e\x34\x33\x2c\x30\x2d\ +\x39\x2e\x36\x31\x2c\x30\x2d\x31\x30\x2e\x35\x32\x2c\x30\x2d\x32\ +\x30\x2e\x34\x38\x2c\x30\x2d\x33\x30\x2e\x35\x38\x2d\x33\x32\x2e\ +\x31\x34\x2d\x32\x35\x2e\x32\x37\x2d\x36\x38\x2e\x39\x33\x2d\x33\ +\x35\x2e\x34\x32\x2d\x31\x31\x30\x2e\x34\x34\x2d\x32\x39\x2e\x35\ +\x37\x2d\x33\x32\x2e\x38\x2c\x34\x2e\x36\x32\x2d\x36\x30\x2e\x38\ +\x2c\x32\x30\x2e\x30\x39\x2d\x38\x34\x2e\x36\x34\x2c\x34\x34\x2e\ +\x34\x33\x2d\x36\x2c\x36\x2e\x31\x37\x2d\x39\x2e\x36\x33\x2c\x31\ +\x33\x2e\x36\x2d\x39\x2e\x36\x31\x2c\x32\x32\x2e\x38\x32\x61\x36\ +\x39\x2e\x32\x38\x2c\x36\x39\x2e\x32\x38\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x37\x2e\x33\x38\x63\x35\x2e\x36\x33\x2c\x32\x33\x2e\ +\x32\x37\x2c\x33\x31\x2e\x32\x37\x2c\x33\x30\x2e\x32\x37\x2c\x34\ +\x37\x2e\x39\x33\x2c\x31\x33\x2e\x32\x36\x2c\x32\x34\x2e\x36\x31\ +\x2d\x32\x35\x2e\x31\x31\x2c\x35\x33\x2e\x37\x35\x2d\x33\x33\x2e\ +\x38\x36\x2c\x38\x37\x2d\x32\x36\x2e\x37\x36\x2c\x31\x35\x2c\x33\ +\x2e\x32\x2c\x32\x38\x2c\x31\x30\x2e\x33\x35\x2c\x33\x39\x2e\x36\ +\x2c\x32\x30\x2e\x34\x32\x43\x33\x36\x33\x2e\x31\x37\x2c\x34\x30\ +\x30\x2e\x30\x38\x2c\x33\x37\x30\x2e\x30\x37\x2c\x33\x39\x35\x2e\ +\x37\x35\x2c\x33\x37\x39\x2e\x35\x38\x2c\x33\x39\x35\x2e\x35\x37\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x35\x34\x2e\ +\x36\x35\x2c\x33\x32\x37\x2e\x35\x37\x61\x32\x36\x2e\x31\x32\x2c\ +\x32\x36\x2e\x31\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x37\x2e\x37\x39\ +\x2c\x31\x2e\x36\x36\x63\x35\x2e\x35\x39\x2c\x35\x2e\x37\x32\x2c\ +\x31\x32\x2e\x33\x34\x2c\x38\x2e\x37\x39\x2c\x32\x33\x2c\x38\x2e\ +\x36\x31\x61\x32\x33\x2e\x35\x35\x2c\x32\x33\x2e\x35\x35\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x36\x2e\x32\x35\x2d\x31\x2e\x32\x37\x41\x32\ +\x35\x2e\x37\x31\x2c\x32\x35\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x34\x35\x34\x2e\x36\x35\x2c\x33\x32\x37\x2e\x35\x37\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x33\x36\x2e\x36\x32\ +\x2c\x32\x38\x39\x2e\x37\x34\x63\x32\x2e\x36\x31\x2d\x2e\x38\x2c\ +\x35\x2e\x32\x33\x2d\x31\x2e\x34\x35\x2c\x37\x2e\x37\x37\x2d\x32\ +\x2e\x30\x38\x6c\x33\x2e\x34\x32\x2d\x2e\x38\x37\x2e\x36\x32\x2d\ +\x2e\x31\x36\x68\x31\x36\x6c\x2e\x39\x33\x2e\x33\x39\x63\x2e\x33\ +\x36\x2e\x31\x36\x2e\x37\x32\x2e\x33\x33\x2c\x31\x2e\x30\x37\x2e\ +\x35\x31\x6c\x2e\x33\x37\x2e\x31\x38\x61\x36\x36\x2e\x31\x38\x2c\ +\x36\x36\x2e\x31\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x36\x2e\x38\ +\x33\x2c\x31\x30\x2e\x33\x38\x2c\x33\x30\x2e\x34\x35\x2c\x33\x30\ +\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x2e\x39\x34\x2d\x31\ +\x30\x2e\x31\x35\x2c\x32\x30\x35\x2e\x38\x33\x2c\x32\x30\x35\x2e\ +\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x33\x2e\x32\x35\x2d\x32\ +\x32\x2e\x37\x63\x2d\x36\x30\x2e\x32\x32\x2d\x35\x30\x2e\x33\x2d\ +\x31\x32\x38\x2e\x33\x31\x2d\x37\x30\x2d\x32\x30\x33\x2e\x39\x31\ +\x2d\x35\x38\x2e\x33\x36\x2d\x35\x37\x2e\x30\x39\x2c\x38\x2e\x38\ +\x31\x2d\x31\x30\x35\x2e\x38\x34\x2c\x33\x36\x2e\x30\x35\x2d\x31\ +\x34\x36\x2e\x38\x34\x2c\x37\x39\x2e\x32\x38\x2d\x38\x2e\x32\x37\ +\x2c\x38\x2e\x37\x33\x2d\x31\x30\x2e\x37\x39\x2c\x31\x39\x2e\x36\ +\x33\x2d\x36\x2e\x38\x39\x2c\x33\x31\x2e\x35\x32\x2c\x37\x2e\x32\ +\x34\x2c\x32\x32\x2c\x33\x31\x2e\x35\x36\x2c\x32\x36\x2e\x38\x33\ +\x2c\x34\x37\x2e\x39\x31\x2c\x31\x30\x2c\x34\x39\x2e\x32\x32\x2d\ +\x35\x30\x2e\x35\x37\x2c\x31\x30\x38\x2d\x37\x31\x2e\x30\x37\x2c\ +\x31\x37\x35\x2e\x33\x39\x2d\x36\x31\x2e\x34\x41\x31\x38\x38\x2e\ +\x31\x34\x2c\x31\x38\x38\x2e\x31\x34\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x34\x31\x35\x2c\x33\x30\x30\x2e\x39\x34\x2c\x36\x37\x2e\x34\x39\ +\x2c\x36\x37\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x33\x36\ +\x2e\x36\x32\x2c\x32\x38\x39\x2e\x37\x34\x5a\x22\x2f\x3e\x3c\x70\ +\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\ +\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\x30\x37\x2c\x32\x39\x31\ +\x2e\x36\x33\x68\x31\x34\x2e\x33\x35\x61\x31\x30\x2e\x36\x34\x2c\ +\x31\x30\x2e\x36\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x2e\x34\x32\ +\x2c\x31\x63\x32\x37\x2e\x34\x37\x2c\x34\x2c\x34\x39\x2e\x36\x2c\ +\x32\x36\x2e\x36\x37\x2c\x35\x31\x2e\x36\x38\x2c\x35\x34\x2e\x32\ +\x36\x2c\x31\x2e\x31\x37\x2c\x31\x35\x2e\x35\x33\x2e\x35\x38\x2c\ +\x33\x31\x2e\x32\x2e\x37\x38\x2c\x34\x36\x2e\x38\x2c\x30\x2c\x32\ +\x2e\x31\x33\x2c\x30\x2c\x34\x2e\x32\x35\x2c\x30\x2c\x36\x2e\x38\ +\x37\x68\x31\x31\x2e\x37\x35\x63\x31\x33\x2e\x39\x34\x2c\x30\x2c\ +\x31\x39\x2e\x33\x36\x2c\x35\x2e\x33\x39\x2c\x31\x39\x2e\x33\x36\ +\x2c\x31\x39\x2e\x32\x32\x2c\x30\x2c\x33\x33\x2e\x32\x35\x2d\x2e\ +\x31\x38\x2c\x36\x36\x2e\x35\x2e\x31\x32\x2c\x39\x39\x2e\x37\x35\ +\x2e\x30\x39\x2c\x39\x2e\x36\x38\x2d\x32\x2e\x39\x33\x2c\x31\x36\ +\x2e\x36\x37\x2d\x31\x32\x2e\x31\x36\x2c\x32\x30\x2e\x33\x39\x48\ +\x33\x37\x35\x2e\x31\x32\x63\x2d\x37\x2e\x32\x34\x2d\x33\x2e\x31\ +\x37\x2d\x31\x32\x2d\x38\x2e\x31\x31\x2d\x31\x32\x2d\x31\x36\x2e\ +\x35\x33\x2c\x30\x2d\x33\x35\x2e\x34\x36\x2d\x2e\x30\x38\x2d\x37\ +\x30\x2e\x39\x31\x2c\x30\x2d\x31\x30\x36\x2e\x33\x37\x2c\x30\x2d\ +\x31\x30\x2e\x32\x39\x2c\x36\x2e\x32\x34\x2d\x31\x36\x2e\x32\x34\ +\x2c\x31\x36\x2e\x35\x36\x2d\x31\x36\x2e\x34\x34\x2c\x34\x2e\x36\ +\x39\x2d\x2e\x30\x39\x2c\x39\x2e\x33\x39\x2c\x30\x2c\x31\x34\x2e\ +\x35\x31\x2c\x30\x2c\x30\x2d\x31\x35\x2e\x37\x33\x2d\x2e\x30\x38\ +\x2d\x33\x30\x2e\x35\x39\x2c\x30\x2d\x34\x35\x2e\x34\x34\x2e\x31\ +\x39\x2d\x32\x38\x2e\x38\x2c\x31\x37\x2e\x32\x38\x2d\x35\x32\x2e\ +\x33\x37\x2c\x34\x33\x2e\x38\x39\x2d\x36\x30\x2e\x35\x39\x43\x34\ +\x34\x31\x2e\x37\x31\x2c\x32\x39\x33\x2e\x34\x31\x2c\x34\x34\x35\ +\x2e\x34\x31\x2c\x32\x39\x32\x2e\x35\x39\x2c\x34\x34\x39\x2e\x30\ +\x37\x2c\x32\x39\x31\x2e\x36\x33\x5a\x6d\x33\x38\x2e\x33\x31\x2c\ +\x31\x30\x38\x2e\x34\x39\x63\x30\x2d\x31\x36\x2e\x35\x34\x2e\x39\ +\x34\x2d\x33\x32\x2e\x37\x33\x2d\x2e\x32\x35\x2d\x34\x38\x2e\x37\ +\x37\x2d\x31\x2e\x33\x31\x2d\x31\x37\x2e\x38\x32\x2d\x31\x35\x2e\ +\x39\x33\x2d\x32\x39\x2e\x37\x35\x2d\x33\x32\x2e\x37\x37\x2d\x32\ +\x38\x2e\x37\x37\x2d\x31\x36\x2e\x36\x35\x2c\x31\x2d\x32\x39\x2e\ +\x32\x31\x2c\x31\x34\x2e\x37\x33\x2d\x32\x39\x2e\x34\x32\x2c\x33\ +\x32\x2e\x35\x32\x2d\x2e\x31\x36\x2c\x31\x33\x2e\x37\x37\x2c\x30\ +\x2c\x32\x37\x2e\x35\x34\x2c\x30\x2c\x34\x31\x2e\x33\x31\x61\x33\ +\x33\x2e\x31\x39\x2c\x33\x33\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x2e\x34\x32\x2c\x33\x2e\x37\x31\x5a\x6d\x2d\x33\x31\x2e\x33\ +\x33\x2c\x34\x36\x2e\x37\x31\x61\x31\x34\x2e\x39\x32\x2c\x31\x34\ +\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x33\x2e\x36\x38\x2c\ +\x38\x2e\x36\x36\x63\x2d\x32\x2e\x38\x32\x2c\x35\x2e\x35\x37\x2d\ +\x32\x2e\x38\x2c\x31\x31\x2e\x35\x39\x2c\x31\x2e\x36\x2c\x31\x35\ +\x2e\x38\x36\x2c\x34\x2e\x31\x36\x2c\x34\x2c\x34\x2e\x34\x34\x2c\ +\x38\x2e\x33\x34\x2c\x34\x2e\x32\x32\x2c\x31\x33\x2e\x33\x31\x61\ +\x36\x38\x2e\x33\x38\x2c\x36\x38\x2e\x33\x38\x2c\x30\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x37\x2e\x37\x31\x63\x2e\x33\x37\x2c\x35\x2e\x33\ +\x34\x2c\x33\x2e\x36\x2c\x38\x2e\x38\x33\x2c\x38\x2c\x38\x2e\x38\ +\x37\x73\x37\x2e\x37\x35\x2d\x33\x2e\x34\x36\x2c\x38\x2e\x30\x37\ +\x2d\x38\x2e\x37\x36\x61\x31\x31\x31\x2e\x34\x33\x2c\x31\x31\x31\ +\x2e\x34\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\x35\ +\x36\x2c\x39\x2e\x36\x39\x2c\x39\x2e\x36\x39\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x33\x2e\x32\x2d\x38\x2e\x31\x33\x63\x34\x2e\x37\x31\x2d\ +\x34\x2e\x36\x34\x2c\x35\x2e\x36\x31\x2d\x31\x30\x2e\x35\x33\x2c\ +\x33\x2d\x31\x36\x2e\x37\x32\x41\x31\x35\x2e\x34\x38\x2c\x31\x35\ +\x2e\x34\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x34\x35\x36\x2e\x30\x35\ +\x2c\x34\x34\x36\x2e\x38\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x33\x22\x20\x64\ +\x3d\x22\x4d\x33\x35\x38\x2e\x32\x34\x2c\x34\x31\x35\x2e\x38\x38\ +\x63\x30\x2d\x31\x32\x2e\x30\x35\x2c\x37\x2e\x37\x2d\x31\x39\x2e\ +\x36\x39\x2c\x32\x30\x2d\x31\x39\x2e\x39\x33\x2c\x33\x2e\x32\x35\ +\x2d\x2e\x30\x36\x2c\x36\x2e\x34\x35\x2c\x30\x2c\x39\x2e\x38\x34\ +\x2c\x30\x68\x31\x2e\x32\x34\x63\x30\x2d\x32\x2e\x35\x32\x2c\x30\ +\x2d\x35\x2c\x30\x2d\x37\x2e\x34\x38\x6c\x2d\x36\x31\x2e\x37\x31\ +\x2d\x38\x35\x2e\x36\x32\x2c\x31\x37\x32\x2e\x32\x31\x2d\x32\x33\ +\x39\x48\x34\x34\x31\x2e\x38\x37\x4c\x32\x39\x38\x2e\x36\x32\x2c\ +\x32\x36\x32\x2e\x36\x33\x2c\x31\x35\x35\x2e\x33\x38\x2c\x36\x33\ +\x2e\x38\x36\x48\x39\x37\x2e\x34\x35\x6c\x31\x37\x32\x2e\x32\x31\ +\x2c\x32\x33\x39\x2d\x31\x37\x32\x2e\x32\x33\x2c\x32\x33\x39\x68\ +\x35\x37\x2e\x39\x35\x4c\x32\x39\x38\x2e\x36\x32\x2c\x33\x34\x33\ +\x6c\x35\x39\x2e\x35\x39\x2c\x38\x32\x2e\x36\x39\x5a\x22\x2f\x3e\ +\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x09\x92\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8741,74 +7799,151 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x39\x2e\x36\x33\x2c\x36\x34\ -\x2e\x33\x63\x30\x2c\x31\x31\x2e\x39\x2c\x30\x2c\x32\x32\x2e\x36\ -\x35\x2c\x30\x2c\x33\x33\x2e\x34\x2c\x30\x2c\x31\x35\x2e\x34\x38\ -\x2d\x2e\x34\x2c\x33\x31\x2c\x2e\x31\x34\x2c\x34\x36\x2e\x34\x35\ -\x2c\x31\x2e\x33\x33\x2c\x33\x38\x2c\x32\x38\x2e\x34\x36\x2c\x36\ -\x34\x2e\x30\x37\x2c\x36\x36\x2e\x35\x36\x2c\x36\x34\x2e\x32\x33\ -\x2c\x32\x35\x2e\x30\x37\x2e\x31\x31\x2c\x35\x30\x2e\x31\x35\x2c\ -\x30\x2c\x37\x36\x2e\x38\x31\x2c\x30\x76\x33\x34\x2e\x35\x33\x71\ -\x30\x2c\x31\x32\x32\x2e\x35\x34\x2c\x30\x2c\x32\x34\x35\x2e\x30\ -\x37\x63\x30\x2c\x33\x33\x2e\x34\x35\x2d\x31\x34\x2e\x34\x39\x2c\ -\x34\x37\x2e\x36\x39\x2d\x34\x38\x2e\x32\x37\x2c\x34\x37\x2e\x37\ -\x71\x2d\x31\x33\x35\x2e\x39\x34\x2c\x30\x2d\x32\x37\x31\x2e\x39\ -\x2c\x30\x63\x2d\x33\x30\x2e\x36\x34\x2c\x30\x2d\x34\x36\x2d\x31\ -\x34\x2e\x39\x34\x2d\x34\x36\x2d\x34\x35\x2e\x32\x33\x71\x2d\x2e\ -\x31\x34\x2d\x31\x39\x30\x2e\x34\x37\x2c\x30\x2d\x33\x38\x31\x63\ -\x30\x2d\x33\x30\x2e\x33\x2c\x31\x35\x2e\x33\x38\x2d\x34\x35\x2e\ -\x31\x37\x2c\x34\x36\x2e\x30\x38\x2d\x34\x35\x2e\x31\x39\x71\x38\ -\x31\x2e\x39\x32\x2c\x30\x2c\x31\x36\x33\x2e\x38\x34\x2c\x30\x5a\ -\x4d\x33\x30\x30\x2c\x33\x36\x35\x2e\x39\x31\x63\x2d\x32\x39\x2c\ -\x30\x2d\x35\x38\x2e\x30\x35\x2e\x31\x2d\x38\x37\x2e\x30\x38\x2d\ -\x2e\x30\x36\x2d\x39\x2c\x30\x2d\x31\x36\x2e\x38\x31\x2c\x31\x2e\ -\x33\x37\x2d\x31\x36\x2e\x36\x38\x2c\x31\x32\x2e\x36\x31\x2e\x31\ -\x33\x2c\x31\x30\x2e\x38\x2c\x37\x2e\x36\x38\x2c\x31\x33\x2e\x31\ -\x2c\x31\x36\x2e\x37\x31\x2c\x31\x33\x2e\x30\x39\x48\x33\x38\x37\ -\x2e\x31\x31\x63\x39\x2c\x30\x2c\x31\x36\x2e\x35\x36\x2d\x32\x2e\ -\x33\x32\x2c\x31\x36\x2e\x36\x38\x2d\x31\x33\x2e\x31\x32\x2e\x31\ -\x32\x2d\x31\x31\x2e\x32\x37\x2d\x37\x2e\x37\x32\x2d\x31\x32\x2e\ -\x36\x31\x2d\x31\x36\x2e\x37\x32\x2d\x31\x32\x2e\x35\x37\x43\x33\ -\x35\x38\x2e\x30\x35\x2c\x33\x36\x36\x2c\x33\x32\x39\x2c\x33\x36\ -\x35\x2e\x39\x31\x2c\x33\x30\x30\x2c\x33\x36\x35\x2e\x39\x31\x5a\ -\x6d\x2d\x31\x2e\x30\x36\x2c\x37\x37\x2e\x33\x31\x63\x32\x39\x2e\ -\x38\x2c\x30\x2c\x35\x39\x2e\x36\x2d\x2e\x31\x2c\x38\x39\x2e\x34\ -\x2e\x30\x36\x2c\x38\x2e\x39\x34\x2e\x30\x35\x2c\x31\x35\x2e\x35\ -\x38\x2d\x32\x2e\x33\x36\x2c\x31\x35\x2e\x34\x38\x2d\x31\x32\x2e\ -\x36\x35\x2d\x2e\x31\x2d\x31\x30\x2e\x31\x33\x2d\x37\x2e\x30\x36\ -\x2d\x31\x33\x2d\x31\x35\x2e\x36\x35\x2d\x31\x33\x71\x2d\x38\x38\ -\x2e\x32\x35\x2d\x2e\x31\x31\x2d\x31\x37\x36\x2e\x34\x38\x2c\x30\ -\x63\x2d\x38\x2e\x36\x36\x2c\x30\x2d\x31\x35\x2e\x34\x37\x2c\x33\ -\x2e\x30\x38\x2d\x31\x35\x2e\x34\x37\x2c\x31\x33\x2e\x31\x37\x2c\ -\x30\x2c\x31\x30\x2e\x33\x34\x2c\x36\x2e\x37\x38\x2c\x31\x32\x2e\ -\x35\x33\x2c\x31\x35\x2e\x36\x35\x2c\x31\x32\x2e\x34\x38\x43\x32\ -\x34\x30\x2e\x38\x38\x2c\x34\x34\x33\x2e\x31\x32\x2c\x32\x36\x39\ -\x2e\x39\x31\x2c\x34\x34\x33\x2e\x32\x32\x2c\x32\x39\x38\x2e\x39\ -\x33\x2c\x34\x34\x33\x2e\x32\x32\x5a\x4d\x32\x34\x37\x2e\x37\x39\ -\x2c\x33\x33\x38\x2e\x36\x34\x71\x31\x39\x2e\x31\x34\x2c\x30\x2c\ -\x33\x38\x2e\x32\x38\x2c\x30\x63\x37\x2e\x37\x34\x2c\x30\x2c\x31\ -\x32\x2e\x35\x38\x2d\x33\x2e\x33\x37\x2c\x31\x33\x2e\x31\x35\x2d\ -\x31\x31\x2e\x34\x33\x2e\x36\x32\x2d\x38\x2e\x36\x34\x2d\x34\x2e\ -\x34\x2d\x31\x33\x2e\x37\x2d\x31\x32\x2e\x31\x39\x2d\x31\x33\x2e\ -\x38\x36\x71\x2d\x33\x39\x2e\x34\x32\x2d\x2e\x38\x2d\x37\x38\x2e\ -\x38\x35\x2c\x30\x63\x2d\x37\x2e\x38\x32\x2e\x31\x37\x2d\x31\x32\ -\x2e\x36\x39\x2c\x35\x2e\x34\x35\x2d\x31\x32\x2c\x31\x34\x2c\x2e\ -\x36\x36\x2c\x38\x2e\x30\x38\x2c\x35\x2e\x36\x33\x2c\x31\x31\x2e\ -\x33\x2c\x31\x33\x2e\x33\x33\x2c\x31\x31\x2e\x32\x36\x43\x32\x32\ -\x32\x2e\x32\x38\x2c\x33\x33\x38\x2e\x36\x2c\x32\x33\x35\x2c\x33\ -\x33\x38\x2e\x36\x34\x2c\x32\x34\x37\x2e\x37\x39\x2c\x33\x33\x38\ -\x2e\x36\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x37\x35\x2e\x34\x32\x2c\x38\x30\x2e\x31\x38\x6c\x39\x32\x2e\x30\ -\x38\x2c\x39\x31\x2e\x34\x63\x2d\x32\x34\x2e\x32\x37\x2d\x31\x2e\ -\x32\x36\x2d\x34\x36\x2d\x2e\x39\x34\x2d\x36\x37\x2e\x32\x36\x2d\ -\x34\x2d\x31\x33\x2e\x33\x31\x2d\x31\x2e\x39\x34\x2d\x32\x33\x2d\ -\x31\x33\x2e\x33\x38\x2d\x32\x34\x2e\x33\x32\x2d\x32\x36\x2e\x35\ -\x39\x43\x33\x37\x34\x2c\x31\x32\x30\x2e\x38\x39\x2c\x33\x37\x35\ -\x2e\x34\x32\x2c\x31\x30\x30\x2e\x35\x31\x2c\x33\x37\x35\x2e\x34\ -\x32\x2c\x38\x30\x2e\x31\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ +\x31\x22\x20\x64\x3d\x22\x4d\x34\x37\x30\x2e\x32\x36\x2c\x35\x33\ +\x30\x2e\x33\x38\x48\x33\x34\x2e\x35\x38\x61\x31\x32\x2e\x38\x37\ +\x2c\x31\x32\x2e\x38\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\x33\ +\x36\x2d\x32\x31\x2e\x36\x39\x6c\x39\x35\x2e\x31\x35\x2d\x31\x30\ +\x31\x2e\x30\x35\x61\x31\x32\x2e\x38\x37\x2c\x31\x32\x2e\x38\x37\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x33\x37\x2d\x34\x48\x35\x36\ +\x35\x2e\x34\x32\x61\x31\x32\x2e\x38\x36\x2c\x31\x32\x2e\x38\x36\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x33\x36\x2c\x32\x31\x2e\x36\ +\x38\x4c\x34\x37\x39\x2e\x36\x33\x2c\x35\x32\x36\x2e\x33\x33\x41\ +\x31\x32\x2e\x38\x34\x2c\x31\x32\x2e\x38\x34\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x34\x37\x30\x2e\x32\x36\x2c\x35\x33\x30\x2e\x33\x38\x5a\ +\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x36\x33\x2e\x35\ +\x38\x2c\x36\x39\x2e\x36\x32\x63\x34\x2e\x31\x34\x2c\x36\x2e\x37\ +\x33\x2c\x38\x2e\x32\x36\x2c\x31\x33\x2e\x34\x38\x2c\x31\x32\x2e\ +\x34\x33\x2c\x32\x30\x2e\x32\x71\x32\x36\x2e\x33\x2c\x34\x32\x2e\ +\x33\x33\x2c\x35\x32\x2e\x36\x32\x2c\x38\x34\x2e\x36\x34\x63\x2e\ +\x31\x39\x2e\x33\x2e\x33\x37\x2e\x36\x33\x2e\x37\x32\x2c\x31\x2e\ +\x32\x34\x68\x2d\x34\x39\x63\x2e\x37\x39\x2c\x31\x2e\x33\x33\x2c\ +\x31\x2e\x33\x37\x2c\x32\x2e\x33\x33\x2c\x32\x2c\x33\x2e\x33\x33\ +\x61\x35\x39\x2e\x39\x2c\x35\x39\x2e\x39\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x38\x2e\x37\x38\x2c\x33\x34\x2e\x34\x35\x63\x2d\x2e\x35\x34\ +\x2c\x31\x30\x2e\x32\x35\x2d\x33\x2e\x37\x36\x2c\x31\x39\x2e\x36\ +\x2d\x38\x2e\x35\x31\x2c\x32\x38\x2e\x34\x32\x2d\x35\x2c\x39\x2e\ +\x33\x32\x2d\x31\x31\x2e\x33\x38\x2c\x31\x37\x2e\x35\x39\x2d\x31\ +\x37\x2e\x33\x39\x2c\x32\x36\x2e\x31\x33\x2d\x34\x2c\x35\x2e\x37\ +\x33\x2d\x37\x2e\x39\x32\x2c\x31\x31\x2e\x35\x36\x2d\x31\x30\x2e\ +\x37\x32\x2c\x31\x38\x2e\x31\x34\x2d\x35\x2e\x38\x34\x2c\x31\x33\ +\x2e\x37\x31\x2d\x32\x2e\x39\x32\x2c\x32\x37\x2e\x31\x33\x2c\x36\ +\x2e\x32\x39\x2c\x33\x37\x2e\x35\x35\x61\x36\x39\x2e\x37\x36\x2c\ +\x36\x39\x2e\x37\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x37\x2e\x39\ +\x35\x2c\x31\x34\x2e\x31\x37\x63\x31\x2e\x33\x36\x2e\x37\x38\x2c\ +\x31\x2e\x32\x31\x2c\x31\x2e\x33\x32\x2e\x34\x37\x2c\x32\x2e\x34\ +\x35\x2d\x34\x2e\x34\x36\x2c\x36\x2e\x37\x35\x2d\x31\x34\x2e\x32\ +\x31\x2c\x32\x32\x2e\x31\x31\x2d\x31\x34\x2e\x32\x31\x2c\x32\x32\ +\x2e\x31\x31\x73\x2d\x31\x2e\x36\x37\x2d\x2e\x38\x36\x2d\x32\x2e\ +\x31\x39\x2d\x31\x2e\x32\x63\x2d\x31\x30\x2e\x35\x36\x2d\x36\x2e\ +\x38\x31\x2d\x32\x30\x2e\x32\x32\x2d\x31\x34\x2e\x37\x38\x2d\x32\ +\x37\x2e\x39\x31\x2d\x32\x35\x2e\x32\x38\x73\x2d\x31\x32\x2e\x33\ +\x35\x2d\x32\x32\x2e\x31\x34\x2d\x31\x32\x2e\x36\x36\x2d\x33\x35\ +\x2e\x36\x32\x61\x36\x33\x2c\x36\x33\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x36\x2e\x35\x2d\x32\x38\x2e\x38\x33\x63\x34\x2e\x34\x32\x2d\x39\ +\x2e\x33\x33\x2c\x31\x30\x2e\x33\x36\x2d\x31\x37\x2e\x35\x32\x2c\ +\x31\x36\x2e\x32\x36\x2d\x32\x35\x2e\x37\x35\x2c\x34\x2e\x39\x32\ +\x2d\x36\x2e\x38\x36\x2c\x39\x2e\x39\x33\x2d\x31\x33\x2e\x36\x36\ +\x2c\x31\x33\x2e\x34\x35\x2d\x32\x31\x2e\x35\x32\x2c\x34\x2e\x38\ +\x37\x2d\x31\x30\x2e\x38\x38\x2c\x34\x2e\x38\x35\x2d\x32\x31\x2e\ +\x36\x33\x2d\x31\x2d\x33\x32\x2e\x30\x38\x2d\x33\x2e\x35\x36\x2d\ +\x36\x2e\x33\x33\x2d\x38\x2e\x36\x39\x2d\x31\x31\x2d\x31\x34\x2e\ +\x32\x35\x2d\x31\x35\x2e\x32\x35\x61\x35\x2e\x34\x34\x2c\x35\x2e\ +\x34\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x2e\x34\x36\x2d\x31\x2e\ +\x31\x39\x63\x2d\x31\x33\x2e\x33\x38\x2e\x30\x35\x2d\x34\x31\x2e\ +\x34\x35\x2e\x31\x33\x2d\x34\x32\x2e\x32\x32\x2e\x30\x38\x2c\x30\ +\x2d\x2e\x31\x33\x2c\x31\x31\x2e\x35\x31\x2d\x31\x39\x2c\x31\x36\ +\x2e\x39\x31\x2d\x32\x37\x2e\x36\x36\x6c\x34\x38\x2e\x38\x2d\x37\ +\x38\x2e\x35\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x33\x33\x34\x2c\x36\x39\x2e\x36\x32\x63\x34\x2e\x31\x34\x2c\x36\ +\x2e\x37\x33\x2c\x38\x2e\x32\x36\x2c\x31\x33\x2e\x34\x38\x2c\x31\ +\x32\x2e\x34\x33\x2c\x32\x30\x2e\x32\x4c\x33\x39\x39\x2c\x31\x37\ +\x34\x2e\x34\x36\x63\x2e\x31\x39\x2e\x33\x2e\x33\x37\x2e\x36\x33\ +\x2e\x37\x32\x2c\x31\x2e\x32\x34\x48\x33\x35\x30\x2e\x37\x39\x6c\ +\x31\x2e\x39\x35\x2c\x33\x2e\x33\x33\x61\x35\x39\x2e\x39\x2c\x35\ +\x39\x2e\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x2e\x37\x38\x2c\x33\ +\x34\x2e\x34\x35\x63\x2d\x2e\x35\x34\x2c\x31\x30\x2e\x32\x35\x2d\ +\x33\x2e\x37\x36\x2c\x31\x39\x2e\x36\x2d\x38\x2e\x35\x31\x2c\x32\ +\x38\x2e\x34\x32\x2d\x35\x2c\x39\x2e\x33\x32\x2d\x31\x31\x2e\x33\ +\x38\x2c\x31\x37\x2e\x35\x39\x2d\x31\x37\x2e\x33\x39\x2c\x32\x36\ +\x2e\x31\x33\x2d\x34\x2c\x35\x2e\x37\x33\x2d\x37\x2e\x39\x31\x2c\ +\x31\x31\x2e\x35\x36\x2d\x31\x30\x2e\x37\x32\x2c\x31\x38\x2e\x31\ +\x34\x2d\x35\x2e\x38\x34\x2c\x31\x33\x2e\x37\x31\x2d\x32\x2e\x39\ +\x32\x2c\x32\x37\x2e\x31\x33\x2c\x36\x2e\x32\x39\x2c\x33\x37\x2e\ +\x35\x35\x61\x36\x39\x2e\x37\x36\x2c\x36\x39\x2e\x37\x36\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x31\x37\x2e\x39\x35\x2c\x31\x34\x2e\x31\x37\ +\x63\x31\x2e\x33\x36\x2e\x37\x38\x2c\x31\x2e\x32\x32\x2c\x31\x2e\ +\x33\x32\x2e\x34\x37\x2c\x32\x2e\x34\x35\x2d\x34\x2e\x34\x36\x2c\ +\x36\x2e\x37\x35\x2d\x31\x34\x2e\x32\x31\x2c\x32\x32\x2e\x31\x31\ +\x2d\x31\x34\x2e\x32\x31\x2c\x32\x32\x2e\x31\x31\x73\x2d\x31\x2e\ +\x36\x37\x2d\x2e\x38\x36\x2d\x32\x2e\x31\x39\x2d\x31\x2e\x32\x63\ +\x2d\x31\x30\x2e\x35\x36\x2d\x36\x2e\x38\x31\x2d\x32\x30\x2e\x32\ +\x32\x2d\x31\x34\x2e\x37\x38\x2d\x32\x37\x2e\x39\x2d\x32\x35\x2e\ +\x32\x38\x53\x32\x39\x33\x2c\x33\x31\x33\x2e\x38\x33\x2c\x32\x39\ +\x32\x2e\x36\x34\x2c\x33\x30\x30\x2e\x33\x35\x61\x36\x33\x2e\x31\ +\x33\x2c\x36\x33\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x2e\ +\x35\x2d\x32\x38\x2e\x38\x33\x63\x34\x2e\x34\x32\x2d\x39\x2e\x33\ +\x33\x2c\x31\x30\x2e\x33\x36\x2d\x31\x37\x2e\x35\x32\x2c\x31\x36\ +\x2e\x32\x36\x2d\x32\x35\x2e\x37\x35\x2c\x34\x2e\x39\x32\x2d\x36\ +\x2e\x38\x36\x2c\x39\x2e\x39\x33\x2d\x31\x33\x2e\x36\x36\x2c\x31\ +\x33\x2e\x34\x35\x2d\x32\x31\x2e\x35\x32\x2c\x34\x2e\x38\x37\x2d\ +\x31\x30\x2e\x38\x38\x2c\x34\x2e\x38\x35\x2d\x32\x31\x2e\x36\x33\ +\x2d\x31\x2d\x33\x32\x2e\x30\x38\x2d\x33\x2e\x35\x36\x2d\x36\x2e\ +\x33\x33\x2d\x38\x2e\x36\x39\x2d\x31\x31\x2d\x31\x34\x2e\x32\x35\ +\x2d\x31\x35\x2e\x32\x35\x61\x35\x2e\x34\x34\x2c\x35\x2e\x34\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x2e\x34\x36\x2d\x31\x2e\x31\x39\ +\x63\x2d\x31\x33\x2e\x33\x37\x2e\x30\x35\x2d\x34\x31\x2e\x34\x35\ +\x2e\x31\x33\x2d\x34\x32\x2e\x32\x32\x2e\x30\x38\x2c\x30\x2d\x2e\ +\x31\x33\x2c\x31\x31\x2e\x35\x31\x2d\x31\x39\x2c\x31\x36\x2e\x39\ +\x31\x2d\x32\x37\x2e\x36\x36\x71\x32\x34\x2e\x34\x2d\x33\x39\x2e\ +\x32\x37\x2c\x34\x38\x2e\x38\x2d\x37\x38\x2e\x35\x33\x5a\x22\x2f\ +\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x30\x34\x2e\x33\x36\x2c\ +\x36\x39\x2e\x36\x32\x63\x34\x2e\x31\x35\x2c\x36\x2e\x37\x33\x2c\ +\x38\x2e\x32\x36\x2c\x31\x33\x2e\x34\x38\x2c\x31\x32\x2e\x34\x34\ +\x2c\x32\x30\x2e\x32\x71\x32\x36\x2e\x33\x2c\x34\x32\x2e\x33\x33\ +\x2c\x35\x32\x2e\x36\x31\x2c\x38\x34\x2e\x36\x34\x63\x2e\x32\x2e\ +\x33\x2e\x33\x37\x2e\x36\x33\x2e\x37\x32\x2c\x31\x2e\x32\x34\x68\ +\x2d\x34\x39\x6c\x32\x2c\x33\x2e\x33\x33\x61\x36\x30\x2c\x36\x30\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x2e\x37\x39\x2c\x33\x34\x2e\x34\ +\x35\x63\x2d\x2e\x35\x35\x2c\x31\x30\x2e\x32\x35\x2d\x33\x2e\x37\ +\x37\x2c\x31\x39\x2e\x36\x2d\x38\x2e\x35\x32\x2c\x32\x38\x2e\x34\ +\x32\x2d\x35\x2c\x39\x2e\x33\x32\x2d\x31\x31\x2e\x33\x38\x2c\x31\ +\x37\x2e\x35\x39\x2d\x31\x37\x2e\x33\x39\x2c\x32\x36\x2e\x31\x33\ +\x2d\x34\x2c\x35\x2e\x37\x33\x2d\x37\x2e\x39\x31\x2c\x31\x31\x2e\ +\x35\x36\x2d\x31\x30\x2e\x37\x32\x2c\x31\x38\x2e\x31\x34\x2d\x35\ +\x2e\x38\x34\x2c\x31\x33\x2e\x37\x31\x2d\x32\x2e\x39\x32\x2c\x32\ +\x37\x2e\x31\x33\x2c\x36\x2e\x33\x2c\x33\x37\x2e\x35\x35\x61\x36\ +\x39\x2e\x37\x32\x2c\x36\x39\x2e\x37\x32\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x31\x37\x2e\x39\x34\x2c\x31\x34\x2e\x31\x37\x63\x31\x2e\x33\ +\x36\x2e\x37\x38\x2c\x31\x2e\x32\x32\x2c\x31\x2e\x33\x32\x2e\x34\ +\x37\x2c\x32\x2e\x34\x35\x2d\x34\x2e\x34\x36\x2c\x36\x2e\x37\x35\ +\x2d\x31\x34\x2e\x32\x2c\x32\x32\x2e\x31\x31\x2d\x31\x34\x2e\x32\ +\x2c\x32\x32\x2e\x31\x31\x73\x2d\x31\x2e\x36\x38\x2d\x2e\x38\x36\ +\x2d\x32\x2e\x32\x2d\x31\x2e\x32\x43\x34\x39\x33\x2c\x33\x35\x34\ +\x2e\x34\x34\x2c\x34\x38\x33\x2e\x33\x38\x2c\x33\x34\x36\x2e\x34\ +\x37\x2c\x34\x37\x35\x2e\x37\x2c\x33\x33\x36\x53\x34\x36\x33\x2e\ +\x33\x34\x2c\x33\x31\x33\x2e\x38\x33\x2c\x34\x36\x33\x2c\x33\x30\ +\x30\x2e\x33\x35\x61\x36\x33\x2e\x31\x33\x2c\x36\x33\x2e\x31\x33\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x2e\x35\x2d\x32\x38\x2e\x38\x33\ +\x63\x34\x2e\x34\x32\x2d\x39\x2e\x33\x33\x2c\x31\x30\x2e\x33\x36\ +\x2d\x31\x37\x2e\x35\x32\x2c\x31\x36\x2e\x32\x37\x2d\x32\x35\x2e\ +\x37\x35\x2c\x34\x2e\x39\x31\x2d\x36\x2e\x38\x36\x2c\x39\x2e\x39\ +\x32\x2d\x31\x33\x2e\x36\x36\x2c\x31\x33\x2e\x34\x35\x2d\x32\x31\ +\x2e\x35\x32\x2c\x34\x2e\x38\x36\x2d\x31\x30\x2e\x38\x38\x2c\x34\ +\x2e\x38\x34\x2d\x32\x31\x2e\x36\x33\x2d\x31\x2d\x33\x32\x2e\x30\ +\x38\x2d\x33\x2e\x35\x36\x2d\x36\x2e\x33\x33\x2d\x38\x2e\x36\x39\ +\x2d\x31\x31\x2d\x31\x34\x2e\x32\x35\x2d\x31\x35\x2e\x32\x35\x61\ +\x35\x2e\x34\x34\x2c\x35\x2e\x34\x34\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x33\x2e\x34\x36\x2d\x31\x2e\x31\x39\x63\x2d\x31\x33\x2e\x33\x37\ +\x2e\x30\x35\x2d\x34\x31\x2e\x34\x34\x2e\x31\x33\x2d\x34\x32\x2e\ +\x32\x32\x2e\x30\x38\x2c\x30\x2d\x2e\x31\x33\x2c\x31\x31\x2e\x35\ +\x31\x2d\x31\x39\x2c\x31\x36\x2e\x39\x31\x2d\x32\x37\x2e\x36\x36\ +\x71\x32\x34\x2e\x34\x31\x2d\x33\x39\x2e\x32\x37\x2c\x34\x38\x2e\ +\x38\x2d\x37\x38\x2e\x35\x33\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ \x3e\ -\x00\x00\x07\xb0\ +\x00\x00\x06\x40\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8820,157 +7955,97 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x31\x35\x32\x2e\x38\ -\x38\x41\x31\x39\x31\x2e\x31\x35\x2c\x31\x39\x31\x2e\x31\x35\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x34\x39\x31\x2e\x32\x39\x2c\x33\x34\x34\ -\x2e\x34\x31\x63\x2d\x2e\x31\x31\x2c\x31\x30\x35\x2e\x36\x35\x2d\ -\x38\x35\x2e\x38\x31\x2c\x31\x39\x31\x2e\x32\x31\x2d\x31\x39\x31\ -\x2e\x34\x35\x2c\x31\x39\x31\x2e\x31\x73\x2d\x31\x39\x31\x2e\x32\ -\x33\x2d\x38\x35\x2e\x38\x2d\x31\x39\x31\x2e\x31\x33\x2d\x31\x39\ -\x31\x2e\x34\x33\x41\x31\x39\x31\x2e\x31\x37\x2c\x31\x39\x31\x2e\ -\x31\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\x30\x2c\x31\x35\x32\ -\x2e\x38\x38\x5a\x6d\x2d\x2e\x31\x32\x2c\x33\x36\x2e\x31\x41\x31\ -\x35\x35\x2e\x32\x2c\x31\x35\x35\x2e\x32\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x31\x34\x34\x2e\x37\x37\x2c\x33\x34\x34\x2e\x31\x33\x63\x30\ -\x2c\x38\x35\x2e\x35\x36\x2c\x36\x39\x2e\x34\x38\x2c\x31\x35\x35\ -\x2e\x32\x35\x2c\x31\x35\x34\x2e\x38\x32\x2c\x31\x35\x35\x2e\x33\ -\x2c\x38\x36\x2c\x2e\x30\x35\x2c\x31\x35\x35\x2e\x36\x2d\x36\x39\ -\x2e\x33\x36\x2c\x31\x35\x35\x2e\x36\x34\x2d\x31\x35\x35\x2e\x32\ -\x31\x41\x31\x35\x35\x2e\x31\x39\x2c\x31\x35\x35\x2e\x31\x39\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x32\x39\x39\x2e\x39\x32\x2c\x31\x38\x39\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2e\ -\x31\x32\x2c\x36\x34\x2e\x35\x71\x31\x37\x2e\x30\x36\x2c\x30\x2c\ -\x33\x34\x2e\x31\x31\x2c\x30\x63\x39\x2e\x31\x37\x2c\x30\x2c\x31\ -\x35\x2e\x33\x35\x2c\x36\x2e\x31\x2c\x31\x35\x2e\x34\x31\x2c\x31\ -\x35\x2e\x33\x2e\x30\x37\x2c\x31\x30\x2e\x31\x37\x2c\x30\x2c\x32\ -\x30\x2e\x33\x34\x2e\x30\x36\x2c\x33\x30\x2e\x35\x31\x2c\x30\x2c\ -\x31\x2e\x37\x35\x2d\x2e\x35\x38\x2c\x32\x2e\x31\x32\x2d\x32\x2e\ -\x31\x39\x2c\x32\x2e\x31\x2d\x35\x2e\x32\x31\x2c\x30\x2d\x31\x30\ -\x2e\x34\x31\x2e\x31\x34\x2d\x31\x35\x2e\x36\x32\x2e\x30\x36\x2d\ -\x31\x2e\x39\x2c\x30\x2d\x32\x2e\x35\x38\x2e\x34\x2d\x32\x2e\x35\ -\x33\x2c\x32\x2e\x34\x38\x2e\x31\x34\x2c\x37\x2c\x30\x2c\x31\x33\ -\x2e\x39\x33\x2e\x30\x39\x2c\x32\x30\x2e\x39\x2c\x30\x2c\x31\x2e\ -\x37\x32\x2d\x2e\x31\x39\x2c\x32\x2e\x33\x2d\x32\x2e\x32\x2c\x32\ -\x2d\x31\x35\x2e\x36\x36\x2d\x32\x2e\x33\x2d\x33\x31\x2e\x33\x37\ -\x2d\x33\x2d\x34\x37\x2e\x31\x32\x2d\x2e\x38\x37\x2d\x32\x2e\x35\ -\x33\x2e\x33\x33\x2d\x35\x2e\x30\x39\x2e\x35\x34\x2d\x37\x2e\x36\ -\x31\x2e\x39\x35\x2d\x31\x2e\x34\x33\x2e\x32\x34\x2d\x31\x2e\x39\ -\x35\x2c\x30\x2d\x31\x2e\x39\x33\x2d\x31\x2e\x36\x32\x2e\x30\x39\ -\x2d\x37\x2e\x32\x2c\x30\x2d\x31\x34\x2e\x34\x31\x2e\x30\x39\x2d\ -\x32\x31\x2e\x36\x32\x2c\x30\x2d\x31\x2e\x38\x36\x2d\x2e\x35\x33\ -\x2d\x32\x2e\x32\x34\x2d\x32\x2e\x32\x38\x2d\x32\x2e\x32\x32\x2d\ -\x35\x2e\x33\x36\x2e\x30\x37\x2d\x31\x30\x2e\x37\x32\x2d\x2e\x31\ -\x31\x2d\x31\x36\x2e\x30\x39\x2d\x2e\x30\x37\x2d\x31\x2e\x35\x31\ -\x2c\x30\x2d\x31\x2e\x38\x36\x2d\x2e\x34\x35\x2d\x31\x2e\x38\x35\ -\x2d\x31\x2e\x39\x2e\x30\x36\x2d\x31\x30\x2e\x34\x39\x2c\x30\x2d\ -\x32\x31\x2c\x30\x2d\x33\x31\x2e\x34\x37\x61\x31\x34\x2e\x36\x31\ -\x2c\x31\x34\x2e\x36\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x34\x2e\ -\x35\x34\x2d\x31\x34\x2e\x35\x32\x43\x32\x37\x36\x2e\x37\x34\x2c\ -\x36\x34\x2e\x34\x36\x2c\x32\x38\x38\x2e\x34\x33\x2c\x36\x34\x2e\ -\x35\x2c\x33\x30\x30\x2e\x31\x32\x2c\x36\x34\x2e\x35\x5a\x22\x2f\ -\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x38\x2e\x33\x33\x2c\ -\x31\x30\x39\x2e\x34\x38\x61\x31\x34\x2e\x39\x33\x2c\x31\x34\x2e\ -\x39\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x32\x2e\x34\x33\x2c\x37\ -\x2e\x37\x63\x35\x2e\x31\x2c\x38\x2e\x36\x37\x2c\x31\x30\x2e\x30\ -\x37\x2c\x31\x37\x2e\x34\x32\x2c\x31\x35\x2e\x31\x35\x2c\x32\x36\ -\x2e\x31\x31\x2e\x36\x37\x2c\x31\x2e\x31\x35\x2e\x35\x38\x2c\x31\ -\x2e\x36\x39\x2d\x2e\x36\x34\x2c\x32\x2e\x33\x39\x71\x2d\x32\x35\ -\x2e\x38\x36\x2c\x31\x34\x2e\x38\x35\x2d\x35\x31\x2e\x36\x35\x2c\ -\x32\x39\x2e\x38\x32\x63\x2d\x31\x2e\x34\x32\x2e\x38\x32\x2d\x32\ -\x2c\x2e\x34\x39\x2d\x32\x2e\x37\x32\x2d\x2e\x38\x32\x2d\x34\x2e\ -\x37\x37\x2d\x38\x2e\x34\x2d\x39\x2e\x36\x38\x2d\x31\x36\x2e\x37\ -\x32\x2d\x31\x34\x2e\x34\x36\x2d\x32\x35\x2e\x31\x32\x73\x2d\x32\ -\x2e\x33\x31\x2d\x31\x37\x2e\x36\x34\x2c\x36\x2d\x32\x32\x2e\x35\ -\x31\x63\x38\x2e\x37\x36\x2d\x35\x2e\x31\x2c\x31\x37\x2e\x35\x37\ -\x2d\x31\x30\x2e\x31\x34\x2c\x32\x36\x2e\x33\x34\x2d\x31\x35\x2e\ -\x32\x32\x41\x31\x37\x2e\x31\x33\x2c\x31\x37\x2e\x31\x33\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x38\x38\x2e\x33\x33\x2c\x31\x30\x39\x2e\ -\x34\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x31\ -\x30\x2e\x32\x36\x2c\x31\x30\x39\x2e\x34\x36\x61\x31\x35\x2e\x38\ -\x38\x2c\x31\x35\x2e\x38\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x2e\ -\x33\x36\x2c\x32\x63\x39\x2e\x32\x36\x2c\x35\x2e\x33\x35\x2c\x31\ -\x38\x2e\x35\x39\x2c\x31\x30\x2e\x36\x2c\x32\x37\x2e\x37\x38\x2c\ -\x31\x36\x2e\x30\x38\x61\x31\x35\x2e\x34\x34\x2c\x31\x35\x2e\x34\ -\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x38\x2c\x32\x30\x2e\x39\ -\x63\x2d\x34\x2e\x39\x31\x2c\x39\x2d\x31\x30\x2e\x31\x37\x2c\x31\ -\x37\x2e\x37\x33\x2d\x31\x35\x2e\x32\x34\x2c\x32\x36\x2e\x36\x2d\ -\x2e\x36\x34\x2c\x31\x2e\x31\x33\x2d\x31\x2e\x31\x36\x2c\x31\x2e\ -\x31\x36\x2d\x32\x2e\x32\x33\x2e\x35\x33\x71\x2d\x32\x35\x2e\x39\ -\x32\x2d\x31\x35\x2d\x35\x31\x2e\x38\x38\x2d\x32\x39\x2e\x39\x31\ -\x63\x2d\x31\x2e\x31\x35\x2d\x2e\x36\x36\x2d\x31\x2e\x34\x2d\x31\ -\x2e\x31\x37\x2d\x2e\x36\x39\x2d\x32\x2e\x33\x38\x2c\x35\x2e\x31\ -\x33\x2d\x38\x2e\x37\x35\x2c\x31\x30\x2e\x31\x32\x2d\x31\x37\x2e\ -\x35\x38\x2c\x31\x35\x2e\x33\x2d\x32\x36\x2e\x33\x41\x31\x35\x2c\ -\x31\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x31\x30\x2e\x32\x36\x2c\ -\x31\x30\x39\x2e\x34\x36\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x31\x37\x37\x2c\x33\x34\x34\x2e\x30\x38\x63\x30\x2d\x36\ -\x38\x2e\x32\x38\x2c\x35\x35\x2e\x32\x31\x2d\x31\x32\x33\x2c\x31\ -\x32\x34\x2d\x31\x32\x32\x2e\x39\x31\x2c\x36\x37\x2e\x32\x38\x2e\ -\x30\x37\x2c\x31\x32\x32\x2e\x31\x39\x2c\x35\x35\x2e\x35\x35\x2c\ -\x31\x32\x32\x2e\x31\x2c\x31\x32\x33\x2e\x33\x35\x2d\x2e\x31\x2c\ -\x36\x38\x2d\x35\x35\x2e\x34\x33\x2c\x31\x32\x32\x2e\x38\x33\x2d\ -\x31\x32\x33\x2e\x37\x34\x2c\x31\x32\x32\x2e\x37\x32\x43\x32\x33\ -\x32\x2c\x34\x36\x37\x2e\x31\x34\x2c\x31\x37\x36\x2e\x39\x32\x2c\ -\x34\x31\x31\x2e\x37\x34\x2c\x31\x37\x37\x2c\x33\x34\x34\x2e\x30\ -\x38\x5a\x4d\x33\x37\x30\x2e\x31\x2c\x32\x38\x31\x2e\x31\x35\x61\ -\x31\x35\x2e\x38\x38\x2c\x31\x35\x2e\x38\x38\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x34\x2e\x37\x38\x2e\x39\x63\x2d\x39\x2e\x35\x39\x2c\x32\ -\x2e\x38\x33\x2d\x31\x38\x2e\x36\x38\x2c\x36\x2e\x39\x32\x2d\x32\ -\x37\x2e\x36\x37\x2c\x31\x31\x2e\x32\x32\x2d\x31\x38\x2e\x38\x38\ -\x2c\x39\x2d\x33\x37\x2e\x34\x2c\x31\x38\x2e\x37\x2d\x35\x35\x2c\ -\x33\x30\x2d\x35\x2e\x35\x36\x2c\x33\x2e\x35\x37\x2d\x37\x2e\x36\ -\x34\x2c\x38\x2e\x37\x36\x2d\x36\x2e\x34\x35\x2c\x31\x34\x2e\x38\ -\x35\x2c\x33\x2c\x31\x35\x2e\x34\x2c\x31\x32\x2e\x33\x2c\x32\x35\ -\x2e\x37\x33\x2c\x32\x37\x2e\x30\x37\x2c\x33\x30\x2e\x37\x37\x2c\ -\x36\x2e\x36\x36\x2c\x32\x2e\x32\x37\x2c\x31\x32\x2e\x36\x32\x2e\ -\x37\x38\x2c\x31\x37\x2e\x32\x32\x2d\x35\x2e\x32\x38\x61\x35\x31\ -\x31\x2e\x39\x34\x2c\x35\x31\x31\x2e\x39\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2c\x34\x31\x2e\x31\x2d\x36\x33\x2e\x32\x37\x43\x33\x36\x34\ -\x2e\x39\x31\x2c\x32\x39\x34\x2e\x32\x39\x2c\x33\x36\x38\x2e\x30\ -\x38\x2c\x32\x38\x38\x2e\x31\x31\x2c\x33\x37\x30\x2e\x31\x2c\x32\ -\x38\x31\x2e\x31\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x02\x21\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\ -\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\ -\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ -\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ -\x68\x3a\x34\x30\x70\x78\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\ -\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ -\x34\x37\x2e\x36\x37\x2c\x31\x30\x30\x2e\x33\x33\x56\x33\x32\x31\ -\x2e\x34\x36\x4c\x33\x33\x37\x2c\x34\x35\x34\x2e\x32\x31\x2c\x35\ -\x32\x36\x2e\x32\x39\x2c\x33\x32\x31\x2e\x34\x36\x56\x31\x30\x30\ -\x2e\x33\x33\x5a\x6d\x33\x34\x38\x2e\x37\x34\x2c\x31\x39\x39\x2d\ -\x39\x34\x2e\x36\x35\x2c\x36\x36\x2e\x33\x38\x56\x31\x38\x38\x2e\ -\x38\x68\x39\x34\x2e\x36\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\ -\x3d\x22\x4d\x33\x34\x30\x2e\x35\x33\x2c\x33\x33\x36\x2e\x34\x35\ -\x63\x39\x2e\x35\x36\x2c\x31\x38\x2e\x38\x38\x2c\x34\x2e\x38\x37\ -\x2c\x36\x31\x2e\x36\x35\x2c\x32\x2e\x34\x33\x2c\x37\x33\x2e\x36\ -\x39\x2d\x34\x2e\x36\x38\x2c\x32\x33\x2d\x31\x38\x2e\x33\x31\x2c\ -\x34\x35\x2e\x36\x38\x2d\x33\x31\x2e\x30\x38\x2c\x35\x37\x2e\x38\ -\x33\x43\x32\x38\x30\x2e\x34\x36\x2c\x34\x39\x37\x2e\x38\x33\x2c\ -\x32\x31\x37\x2e\x32\x2c\x35\x30\x36\x2e\x32\x33\x2c\x31\x34\x39\ -\x2c\x34\x39\x34\x2e\x37\x32\x63\x2d\x31\x31\x2e\x33\x38\x2d\x31\ -\x2e\x39\x33\x2d\x32\x32\x2e\x39\x35\x2d\x34\x2e\x39\x2d\x33\x34\ -\x2e\x31\x31\x2d\x35\x2e\x36\x34\x2d\x31\x34\x2e\x34\x31\x2d\x2e\ -\x39\x35\x2d\x32\x37\x2e\x39\x34\x2c\x31\x2e\x38\x34\x2d\x34\x31\ -\x2e\x32\x32\x2c\x35\x2e\x32\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\ -\x00\x00\x07\xa9\ +\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x30\x38\x2c\x32\x31\ +\x34\x2e\x31\x34\x63\x30\x2c\x33\x37\x2e\x36\x32\x2e\x33\x35\x2c\ +\x37\x35\x2e\x32\x36\x2d\x2e\x32\x35\x2c\x31\x31\x32\x2e\x38\x37\ +\x2d\x2e\x31\x35\x2c\x38\x2e\x39\x2c\x32\x2e\x34\x34\x2c\x31\x33\ +\x2e\x31\x37\x2c\x31\x30\x2e\x35\x32\x2c\x31\x36\x2e\x39\x35\x2c\ +\x34\x30\x2e\x38\x38\x2c\x31\x39\x2e\x31\x36\x2c\x36\x32\x2e\x36\ +\x34\x2c\x36\x31\x2c\x35\x36\x2e\x32\x35\x2c\x31\x30\x36\x2e\x34\ +\x2d\x35\x2e\x37\x2c\x34\x30\x2e\x35\x34\x2d\x34\x30\x2e\x32\x32\ +\x2c\x37\x35\x2e\x37\x2d\x38\x31\x2e\x37\x36\x2c\x38\x33\x2e\x32\ +\x37\x2d\x34\x39\x2e\x31\x33\x2c\x39\x2d\x39\x37\x2e\x32\x39\x2d\ +\x32\x30\x2e\x31\x31\x2d\x31\x31\x33\x2e\x36\x35\x2d\x36\x38\x2e\ +\x36\x32\x2d\x31\x35\x2e\x37\x31\x2d\x34\x36\x2e\x35\x35\x2c\x36\ +\x2e\x33\x2d\x39\x39\x2e\x33\x31\x2c\x35\x31\x2e\x36\x2d\x31\x32\ +\x30\x2e\x37\x2c\x39\x2e\x34\x39\x2d\x34\x2e\x34\x37\x2c\x31\x31\ +\x2e\x32\x34\x2d\x39\x2e\x35\x39\x2c\x31\x31\x2e\x32\x2d\x31\x38\ +\x2e\x38\x36\x71\x2d\x2e\x35\x2d\x31\x31\x31\x2e\x36\x37\x2d\x2e\ +\x31\x35\x2d\x32\x32\x33\x2e\x33\x36\x63\x30\x2d\x32\x32\x2e\x36\ +\x34\x2c\x31\x32\x2e\x32\x32\x2d\x33\x36\x2e\x37\x35\x2c\x33\x31\ +\x2e\x35\x38\x2d\x33\x37\x2e\x33\x32\x2c\x32\x30\x2e\x30\x36\x2d\ +\x2e\x35\x39\x2c\x33\x34\x2e\x33\x2c\x31\x32\x2e\x35\x2c\x33\x34\ +\x2e\x34\x38\x2c\x33\x32\x2e\x38\x38\x2e\x33\x34\x2c\x33\x38\x2e\ +\x38\x33\x2e\x30\x39\x2c\x37\x37\x2e\x36\x36\x2e\x30\x39\x2c\x31\ +\x31\x36\x2e\x34\x39\x5a\x6d\x2d\x35\x30\x2e\x36\x39\x2c\x37\x35\ +\x2e\x39\x34\x63\x30\x2c\x31\x36\x2e\x38\x2d\x2e\x34\x33\x2c\x33\ +\x33\x2e\x36\x32\x2e\x31\x38\x2c\x35\x30\x2e\x34\x2e\x33\x2c\x38\ +\x2d\x31\x2e\x38\x32\x2c\x31\x31\x2e\x33\x35\x2d\x31\x30\x2e\x30\ +\x36\x2c\x31\x34\x2d\x34\x30\x2e\x30\x38\x2c\x31\x33\x2d\x36\x33\ +\x2e\x31\x32\x2c\x35\x34\x2e\x31\x38\x2d\x35\x35\x2e\x33\x32\x2c\ +\x39\x36\x2e\x38\x34\x2c\x37\x2e\x30\x35\x2c\x33\x38\x2e\x34\x37\ +\x2c\x34\x34\x2e\x32\x39\x2c\x36\x38\x2e\x33\x32\x2c\x38\x34\x2e\ +\x33\x34\x2c\x36\x37\x2e\x35\x39\x2c\x34\x33\x2d\x2e\x37\x39\x2c\ +\x37\x36\x2e\x38\x33\x2d\x33\x31\x2e\x36\x2c\x38\x32\x2e\x36\x34\ +\x2d\x37\x37\x2e\x37\x31\x2c\x34\x2e\x32\x37\x2d\x33\x33\x2e\x38\ +\x32\x2d\x31\x35\x2e\x38\x2d\x37\x32\x2e\x38\x33\x2d\x35\x37\x2e\ +\x31\x37\x2d\x38\x36\x2e\x38\x35\x2d\x37\x2e\x37\x31\x2d\x32\x2e\ +\x36\x31\x2d\x39\x2e\x36\x37\x2d\x35\x2e\x37\x2d\x39\x2e\x35\x39\ +\x2d\x31\x33\x2e\x32\x31\x2e\x33\x36\x2d\x33\x34\x2c\x2e\x31\x37\ +\x2d\x36\x38\x2c\x2e\x31\x35\x2d\x31\x30\x32\x2c\x30\x2d\x31\x35\ +\x2e\x33\x34\x2d\x36\x2e\x32\x32\x2d\x32\x34\x2d\x31\x37\x2e\x31\ +\x39\x2d\x32\x34\x2e\x32\x34\x2d\x31\x31\x2e\x34\x36\x2d\x2e\x32\ +\x2d\x31\x37\x2e\x39\x34\x2c\x38\x2e\x36\x38\x2d\x31\x38\x2c\x32\ +\x34\x2e\x37\x35\x43\x32\x35\x30\x2e\x33\x36\x2c\x32\x35\x36\x2e\ +\x34\x37\x2c\x32\x35\x30\x2e\x33\x39\x2c\x32\x37\x33\x2e\x32\x37\ +\x2c\x32\x35\x30\x2e\x33\x39\x2c\x32\x39\x30\x2e\x30\x38\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x31\x2e\x37\x31\ +\x2c\x31\x34\x36\x2e\x30\x39\x63\x2d\x31\x30\x2e\x33\x37\x2c\x30\ +\x2d\x32\x30\x2e\x37\x34\x2e\x32\x32\x2d\x33\x31\x2e\x30\x39\x2d\ +\x2e\x30\x36\x2d\x31\x32\x2e\x32\x37\x2d\x2e\x33\x33\x2d\x32\x30\ +\x2e\x30\x37\x2d\x36\x2e\x38\x37\x2d\x31\x39\x2e\x37\x31\x2d\x31\ +\x36\x2c\x2e\x33\x35\x2d\x38\x2e\x38\x37\x2c\x37\x2e\x37\x32\x2d\ +\x31\x34\x2e\x39\x32\x2c\x31\x39\x2e\x34\x35\x2d\x31\x35\x71\x33\ +\x31\x2e\x36\x38\x2d\x2e\x33\x37\x2c\x36\x33\x2e\x33\x38\x2c\x30\ +\x63\x31\x31\x2e\x35\x36\x2e\x31\x34\x2c\x31\x39\x2c\x36\x2e\x35\ +\x32\x2c\x31\x39\x2e\x31\x31\x2c\x31\x35\x2e\x33\x36\x53\x34\x32\ +\x35\x2e\x37\x31\x2c\x31\x34\x35\x2e\x35\x38\x2c\x34\x31\x34\x2c\ +\x31\x34\x36\x43\x34\x30\x33\x2e\x32\x35\x2c\x31\x34\x36\x2e\x33\ +\x39\x2c\x33\x39\x32\x2e\x34\x37\x2c\x31\x34\x36\x2e\x30\x38\x2c\ +\x33\x38\x31\x2e\x37\x31\x2c\x31\x34\x36\x2e\x30\x39\x5a\x22\x2f\ +\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x31\x2e\x37\x31\x2c\ +\x32\x32\x30\x2e\x38\x33\x63\x2d\x31\x30\x2e\x33\x37\x2c\x30\x2d\ +\x32\x30\x2e\x37\x34\x2e\x32\x32\x2d\x33\x31\x2e\x30\x39\x2d\x2e\ +\x30\x36\x2d\x31\x32\x2e\x32\x37\x2d\x2e\x33\x33\x2d\x32\x30\x2e\ +\x30\x37\x2d\x36\x2e\x38\x36\x2d\x31\x39\x2e\x37\x31\x2d\x31\x36\ +\x2c\x2e\x33\x35\x2d\x38\x2e\x38\x37\x2c\x37\x2e\x37\x32\x2d\x31\ +\x34\x2e\x39\x32\x2c\x31\x39\x2e\x34\x35\x2d\x31\x35\x2e\x30\x35\ +\x71\x33\x31\x2e\x36\x38\x2d\x2e\x33\x37\x2c\x36\x33\x2e\x33\x38\ +\x2c\x30\x63\x31\x31\x2e\x35\x36\x2e\x31\x34\x2c\x31\x39\x2c\x36\ +\x2e\x35\x32\x2c\x31\x39\x2e\x31\x31\x2c\x31\x35\x2e\x33\x36\x73\ +\x2d\x37\x2e\x31\x34\x2c\x31\x35\x2e\x32\x31\x2d\x31\x38\x2e\x38\ +\x35\x2c\x31\x35\x2e\x36\x33\x43\x34\x30\x33\x2e\x32\x35\x2c\x32\ +\x32\x31\x2e\x31\x33\x2c\x33\x39\x32\x2e\x34\x37\x2c\x32\x32\x30\ +\x2e\x38\x32\x2c\x33\x38\x31\x2e\x37\x31\x2c\x32\x32\x30\x2e\x38\ +\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x38\x31\ +\x2e\x37\x31\x2c\x32\x39\x35\x2e\x38\x32\x63\x2d\x31\x30\x2e\x33\ +\x37\x2c\x30\x2d\x32\x30\x2e\x37\x34\x2e\x32\x32\x2d\x33\x31\x2e\ +\x30\x39\x2d\x2e\x30\x36\x2d\x31\x32\x2e\x32\x37\x2d\x2e\x33\x33\ +\x2d\x32\x30\x2e\x30\x37\x2d\x36\x2e\x38\x37\x2d\x31\x39\x2e\x37\ +\x31\x2d\x31\x36\x2c\x2e\x33\x35\x2d\x38\x2e\x38\x37\x2c\x37\x2e\ +\x37\x32\x2d\x31\x34\x2e\x39\x32\x2c\x31\x39\x2e\x34\x35\x2d\x31\ +\x35\x2e\x30\x35\x71\x33\x31\x2e\x36\x38\x2d\x2e\x33\x37\x2c\x36\ +\x33\x2e\x33\x38\x2c\x30\x63\x31\x31\x2e\x35\x36\x2e\x31\x34\x2c\ +\x31\x39\x2c\x36\x2e\x35\x32\x2c\x31\x39\x2e\x31\x31\x2c\x31\x35\ +\x2e\x33\x36\x73\x2d\x37\x2e\x31\x34\x2c\x31\x35\x2e\x32\x31\x2d\ +\x31\x38\x2e\x38\x35\x2c\x31\x35\x2e\x36\x33\x43\x34\x30\x33\x2e\ +\x32\x35\x2c\x32\x39\x36\x2e\x31\x32\x2c\x33\x39\x32\x2e\x34\x37\ +\x2c\x32\x39\x35\x2e\x38\x31\x2c\x33\x38\x31\x2e\x37\x31\x2c\x32\ +\x39\x35\x2e\x38\x32\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x07\xc6\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -8981,121 +8056,123 @@ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x32\x35\x33\x2e\x36\x33\x2c\x33\x34\ -\x36\x2e\x31\x36\x63\x31\x31\x2e\x39\x33\x2d\x31\x33\x2e\x36\x33\ -\x2c\x32\x31\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2c\x33\x31\x2e\ -\x35\x31\x2d\x33\x35\x2e\x37\x38\x43\x33\x32\x33\x2e\x35\x34\x2c\ -\x32\x37\x31\x2e\x34\x34\x2c\x33\x36\x32\x2e\x33\x2c\x32\x33\x32\ -\x2e\x38\x36\x2c\x34\x30\x31\x2c\x31\x39\x34\x2e\x32\x63\x34\x2e\ -\x36\x32\x2d\x34\x2e\x36\x32\x2c\x39\x2e\x32\x2d\x39\x2e\x33\x38\ -\x2c\x31\x34\x2e\x33\x38\x2d\x31\x33\x2e\x33\x31\x2c\x31\x34\x2e\ -\x30\x39\x2d\x31\x30\x2e\x36\x37\x2c\x33\x32\x2e\x31\x38\x2d\x39\ -\x2e\x38\x31\x2c\x34\x34\x2c\x31\x2e\x36\x34\x2c\x31\x32\x2e\x32\ -\x2c\x31\x31\x2e\x38\x35\x2c\x31\x33\x2e\x35\x31\x2c\x33\x31\x2e\ -\x32\x2c\x32\x2e\x30\x39\x2c\x34\x35\x2e\x33\x37\x2d\x36\x2e\x36\ -\x38\x2c\x38\x2e\x32\x39\x2d\x31\x34\x2e\x37\x31\x2c\x31\x35\x2e\ -\x35\x31\x2d\x32\x32\x2e\x32\x37\x2c\x32\x33\x2e\x30\x37\x71\x2d\ -\x37\x36\x2e\x38\x37\x2c\x37\x37\x2d\x31\x35\x33\x2e\x38\x32\x2c\ -\x31\x35\x33\x2e\x38\x34\x63\x2d\x32\x33\x2e\x31\x31\x2c\x32\x33\ -\x2e\x30\x36\x2d\x34\x30\x2e\x38\x37\x2c\x32\x33\x2e\x33\x2d\x36\ -\x34\x2e\x33\x31\x2e\x35\x39\x71\x2d\x33\x35\x2e\x38\x37\x2d\x33\ -\x34\x2e\x37\x34\x2d\x37\x31\x2e\x31\x2d\x37\x30\x2e\x31\x32\x63\ -\x2d\x31\x37\x2e\x33\x2d\x31\x37\x2e\x33\x34\x2d\x31\x38\x2e\x38\ -\x32\x2d\x33\x37\x2e\x36\x31\x2d\x34\x2e\x34\x33\x2d\x35\x31\x2e\ -\x38\x33\x2c\x31\x34\x2e\x36\x39\x2d\x31\x34\x2e\x35\x32\x2c\x33\ -\x33\x2e\x35\x32\x2d\x31\x32\x2e\x38\x37\x2c\x35\x31\x2e\x34\x38\ -\x2c\x35\x53\x32\x33\x32\x2e\x35\x35\x2c\x33\x32\x34\x2e\x36\x38\ -\x2c\x32\x35\x33\x2e\x36\x33\x2c\x33\x34\x36\x2e\x31\x36\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x32\x39\x2e\x34\x31\ -\x2c\x35\x35\x34\x61\x32\x38\x32\x2e\x38\x34\x2c\x32\x38\x32\x2e\ -\x38\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x32\x2d\x34\x31\x2e\x30\ -\x39\x6c\x2d\x33\x38\x2e\x31\x34\x2d\x33\x38\x2e\x31\x34\x61\x32\ -\x33\x34\x2e\x39\x32\x2c\x32\x33\x34\x2e\x39\x32\x2c\x30\x2c\x30\ -\x2c\x31\x2d\x34\x33\x2e\x38\x34\x2c\x33\x30\x2e\x38\x34\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x31\x2e\x34\x32\ -\x2c\x35\x32\x32\x2e\x30\x35\x63\x2d\x31\x36\x2e\x36\x36\x2c\x35\ -\x2e\x34\x39\x2d\x35\x32\x2e\x32\x33\x2c\x31\x30\x2e\x38\x2d\x35\ -\x32\x2e\x32\x33\x2c\x31\x30\x2e\x38\x76\x34\x39\x2e\x33\x61\x32\ -\x38\x31\x2e\x37\x34\x2c\x32\x38\x31\x2e\x37\x34\x2c\x30\x2c\x30\ -\x2c\x30\x2c\x37\x31\x2e\x37\x31\x2d\x31\x32\x2e\x37\x39\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x37\x34\x2e\x35\x33\ -\x2c\x34\x34\x61\x32\x38\x32\x2e\x36\x38\x2c\x32\x38\x32\x2e\x36\ -\x38\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x37\x2e\x34\x37\x2c\x33\x35\ -\x2e\x38\x37\x6c\x33\x36\x2e\x33\x34\x2c\x33\x36\x2e\x33\x34\x61\ -\x32\x33\x34\x2e\x35\x31\x2c\x32\x33\x34\x2e\x35\x31\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x34\x30\x2e\x33\x34\x2d\x32\x35\x2e\x35\x37\x5a\ -\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x33\x32\x2e\x33\ -\x37\x2c\x37\x35\x2e\x35\x32\x61\x32\x33\x34\x2e\x36\x38\x2c\x32\ -\x33\x34\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x35\x2e\x33\ -\x35\x2d\x38\x2e\x34\x35\x56\x31\x38\x61\x32\x38\x32\x2e\x32\x37\ -\x2c\x32\x38\x32\x2e\x32\x37\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x34\ -\x2e\x34\x31\x2c\x31\x31\x2e\x32\x34\x5a\x22\x2f\x3e\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x64\x3d\x22\x4d\x35\x33\x31\x2e\x38\x33\x2c\x33\x30\x30\x61\ -\x32\x33\x34\x2c\x32\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\ -\x32\x36\x2c\x35\x37\x2e\x38\x39\x6c\x35\x32\x2e\x35\x36\x2c\x32\ -\x30\x2e\x38\x33\x41\x32\x38\x32\x2e\x34\x38\x2c\x32\x38\x32\x2e\ -\x34\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x38\x38\x2e\x32\x37\x2c\ -\x33\x30\x30\x43\x35\x38\x38\x2e\x32\x37\x2c\x31\x34\x38\x2e\x34\ -\x38\x2c\x34\x36\x39\x2c\x32\x34\x2e\x38\x34\x2c\x33\x31\x39\x2e\ -\x31\x39\x2c\x31\x37\x2e\x38\x35\x56\x36\x37\x2e\x31\x33\x43\x34\ -\x33\x38\x2e\x34\x2c\x37\x37\x2e\x38\x36\x2c\x35\x33\x31\x2e\x38\ -\x33\x2c\x31\x37\x38\x2c\x35\x33\x31\x2e\x38\x33\x2c\x33\x30\x30\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x37\x2e\x36\ -\x39\x2c\x32\x30\x35\x2e\x36\x32\x61\x32\x38\x30\x2e\x35\x33\x2c\ -\x32\x38\x30\x2e\x35\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x34\x2e\ -\x36\x2c\x36\x34\x2e\x32\x38\x48\x36\x36\x61\x32\x33\x32\x2e\x39\ -\x32\x2c\x32\x33\x32\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x30\x2e\x33\x39\x2d\x34\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ -\x3d\x22\x4d\x39\x33\x2e\x32\x2c\x31\x38\x37\x61\x32\x33\x34\x2e\ -\x36\x2c\x32\x33\x34\x2e\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\ -\x2d\x34\x32\x2e\x33\x33\x4c\x38\x36\x2e\x36\x38\x2c\x31\x30\x38\ -\x2e\x31\x31\x61\x32\x38\x33\x2e\x33\x33\x2c\x32\x38\x33\x2e\x33\ -\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x34\x32\x2e\x32\x36\x2c\x35\x39\ -\x2e\x35\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\ -\x31\x38\x2e\x35\x32\x2c\x34\x30\x30\x2e\x31\x31\x2c\x35\x31\x30\ -\x2e\x37\x34\x2c\x33\x39\x37\x61\x32\x33\x34\x2e\x33\x32\x2c\x32\ -\x33\x34\x2e\x33\x32\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x39\x2c\x34\ -\x37\x2e\x35\x31\x6c\x33\x38\x2e\x38\x35\x2c\x33\x38\x2e\x38\x35\ -\x61\x32\x38\x32\x2e\x34\x36\x2c\x32\x38\x32\x2e\x34\x36\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x34\x32\x2e\x30\x36\x2d\x36\x35\x2e\x37\x38\ -\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x37\x32\x2e\x32\ -\x34\x2c\x33\x36\x31\x2e\x33\x61\x32\x33\x34\x2c\x32\x33\x34\x2c\ -\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x38\x34\x2d\x34\x39\x2e\x39\x33\ -\x48\x31\x31\x2e\x37\x33\x61\x32\x38\x32\x2e\x31\x39\x2c\x32\x38\ -\x32\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x31\x2e\x37\x31\ -\x2c\x37\x30\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ -\x31\x32\x2c\x34\x34\x31\x2e\x37\x61\x32\x33\x33\x2e\x38\x36\x2c\ -\x32\x33\x33\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x35\x2e\ -\x33\x31\x2d\x34\x31\x2e\x34\x38\x4c\x33\x38\x2e\x32\x39\x2c\x34\ -\x32\x30\x2e\x31\x41\x32\x38\x33\x2e\x30\x39\x2c\x32\x38\x33\x2e\ -\x30\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x34\x2e\x35\x2c\x34\x37\ -\x37\x2e\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ -\x39\x38\x2e\x36\x34\x2c\x35\x36\x35\x2e\x38\x39\x41\x32\x38\x31\ -\x2e\x32\x34\x2c\x32\x38\x31\x2e\x32\x34\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x32\x37\x37\x2e\x37\x32\x2c\x35\x38\x32\x56\x35\x33\x33\x41\ -\x32\x33\x32\x2e\x37\x35\x2c\x32\x33\x32\x2e\x37\x35\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x32\x31\x39\x2c\x35\x32\x30\x2e\x31\x34\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x31\x2e\x33\x37\ -\x2c\x35\x30\x32\x2e\x37\x35\x61\x32\x33\x34\x2e\x35\x39\x2c\x32\ -\x33\x34\x2e\x35\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x31\x2e\x34\ -\x36\x2d\x33\x30\x2e\x34\x4c\x31\x30\x33\x2c\x35\x30\x38\x61\x32\ -\x38\x34\x2e\x32\x33\x2c\x32\x38\x34\x2e\x32\x33\x2c\x30\x2c\x30\ -\x2c\x30\x2c\x35\x37\x2e\x37\x39\x2c\x34\x31\x2e\x30\x38\x5a\x22\ -\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x00\xec\ +\x63\x69\x72\x63\x6c\x65\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x63\x78\x3d\x22\x31\x37\x39\x2e\x30\x36\x22\ +\x20\x63\x79\x3d\x22\x31\x30\x34\x2e\x34\x33\x22\x20\x72\x3d\x22\ +\x31\x31\x2e\x32\x35\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\ +\x31\x31\x32\x2e\x38\x2c\x35\x37\x2e\x33\x32\x56\x35\x34\x32\x2e\ +\x36\x38\x48\x34\x38\x37\x2e\x32\x56\x35\x37\x2e\x33\x32\x5a\x4d\ +\x33\x34\x37\x2c\x38\x35\x2e\x33\x38\x68\x37\x35\x2e\x36\x76\x33\ +\x38\x2e\x36\x38\x48\x33\x34\x37\x5a\x4d\x31\x36\x31\x2e\x33\x37\ +\x2c\x31\x30\x34\x2e\x34\x33\x61\x31\x37\x2e\x36\x39\x2c\x31\x37\ +\x2e\x36\x39\x2c\x30\x2c\x31\x2c\x31\x2c\x31\x37\x2e\x36\x39\x2c\ +\x31\x37\x2e\x36\x39\x41\x31\x37\x2e\x36\x39\x2c\x31\x37\x2e\x36\ +\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\x31\x2e\x33\x37\x2c\x31\ +\x30\x34\x2e\x34\x33\x5a\x4d\x34\x32\x33\x2e\x34\x33\x2c\x34\x34\ +\x37\x2e\x35\x31\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\ +\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x34\x38\x2c\x31\x30\x2e\x38\ +\x6c\x2d\x32\x31\x2e\x36\x32\x2c\x32\x31\x2e\x36\x32\x61\x31\x35\ +\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2d\ +\x31\x30\x2e\x38\x2c\x34\x2e\x34\x38\x48\x32\x31\x33\x2e\x34\x37\ +\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\ +\x2c\x31\x2d\x31\x30\x2e\x38\x2d\x34\x2e\x34\x38\x6c\x2d\x32\x31\ +\x2e\x36\x32\x2d\x32\x31\x2e\x36\x32\x61\x31\x35\x2e\x32\x35\x2c\ +\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x2e\x34\x38\ +\x2d\x31\x30\x2e\x38\x56\x31\x39\x37\x2e\x34\x34\x61\x31\x35\x2e\ +\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ +\x2e\x34\x38\x2d\x31\x30\x2e\x38\x4c\x32\x30\x32\x2e\x36\x37\x2c\ +\x31\x36\x35\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x31\x30\x2e\x38\x2d\x34\x2e\x34\x38\x48\ +\x33\x38\x36\x2e\x35\x33\x61\x31\x35\x2e\x32\x35\x2c\x31\x35\x2e\ +\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x30\x2e\x38\x2c\x34\x2e\ +\x34\x38\x4c\x34\x31\x39\x2c\x31\x38\x36\x2e\x36\x34\x61\x31\x35\ +\x2e\x32\x35\x2c\x31\x35\x2e\x32\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x34\x2e\x34\x38\x2c\x31\x30\x2e\x38\x5a\x6d\x31\x34\x2e\x37\x31\ +\x2d\x33\x33\x37\x2e\x31\x32\x68\x2d\x37\x56\x39\x39\x2e\x30\x35\ +\x68\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x33\ +\x31\x2c\x34\x36\x39\x2e\x37\x37\x48\x32\x30\x30\x2e\x35\x37\x61\ +\x34\x35\x2e\x34\x39\x2c\x34\x35\x2e\x34\x39\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x2d\x36\x2e\x36\x38\x63\x33\x2e\x33\x39\x2d\x37\x2c\ +\x37\x2e\x33\x35\x2d\x31\x33\x2e\x37\x34\x2c\x31\x30\x2e\x37\x36\ +\x2d\x32\x30\x2e\x37\x34\x2c\x34\x2e\x34\x38\x2d\x39\x2c\x34\x2d\ +\x31\x38\x2d\x2e\x36\x32\x2d\x32\x36\x2e\x37\x39\x2d\x31\x31\x2e\ +\x32\x32\x2d\x32\x30\x2d\x31\x39\x2e\x30\x37\x2d\x33\x34\x2e\x36\ +\x31\x2d\x37\x2e\x36\x32\x2d\x35\x37\x2e\x31\x2c\x32\x2e\x33\x38\ +\x2d\x34\x2e\x35\x32\x2c\x35\x2e\x32\x34\x2d\x38\x2e\x38\x2c\x37\ +\x2e\x35\x33\x2d\x31\x33\x2e\x33\x36\x2c\x31\x2e\x35\x36\x2d\x33\ +\x2e\x31\x2c\x32\x2e\x35\x31\x2d\x36\x2e\x35\x31\x2c\x33\x2e\x39\ +\x32\x2d\x31\x30\x2e\x32\x35\x48\x31\x39\x30\x2e\x33\x31\x6c\x34\ +\x31\x2e\x32\x35\x2d\x36\x30\x2e\x33\x39\x2c\x34\x31\x2e\x31\x2c\ +\x36\x30\x2e\x31\x37\x63\x2d\x37\x2e\x37\x38\x2e\x34\x34\x2d\x31\ +\x35\x2e\x33\x34\x2e\x31\x2d\x32\x33\x2e\x31\x2e\x31\x37\x2d\x31\ +\x2e\x34\x34\x2c\x30\x2d\x32\x2e\x33\x38\x2e\x32\x2d\x32\x2e\x36\ +\x2c\x31\x2e\x39\x2d\x2e\x39\x33\x2c\x37\x2e\x34\x2d\x34\x2e\x32\ +\x32\x2c\x31\x33\x2e\x38\x39\x2d\x37\x2e\x39\x34\x2c\x32\x30\x2e\ +\x32\x31\x2d\x37\x2e\x34\x39\x2c\x31\x32\x2e\x35\x2d\x31\x32\x2e\ +\x38\x2c\x32\x32\x2e\x31\x37\x2d\x35\x2e\x34\x36\x2c\x33\x36\x2e\ +\x33\x39\x2c\x32\x2e\x35\x32\x2c\x34\x2e\x38\x33\x2c\x35\x2e\x32\ +\x34\x2c\x39\x2e\x35\x36\x2c\x37\x2e\x37\x35\x2c\x31\x34\x2e\x33\ +\x39\x43\x32\x35\x34\x2c\x34\x33\x32\x2e\x38\x32\x2c\x32\x34\x33\ +\x2c\x34\x34\x37\x2e\x38\x37\x2c\x32\x33\x31\x2c\x34\x36\x39\x2e\ +\x37\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\ +\x38\x2e\x36\x37\x2c\x33\x37\x30\x2e\x32\x38\x48\x32\x36\x38\x2e\ +\x32\x39\x61\x34\x34\x2e\x38\x33\x2c\x34\x34\x2e\x38\x33\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x32\x2d\x36\x2e\x36\x38\x63\x33\x2e\x34\x2d\ +\x37\x2c\x37\x2e\x33\x35\x2d\x31\x33\x2e\x37\x34\x2c\x31\x30\x2e\ +\x37\x36\x2d\x32\x30\x2e\x37\x35\x2c\x34\x2e\x34\x38\x2d\x39\x2c\ +\x34\x2d\x31\x38\x2d\x2e\x36\x31\x2d\x32\x36\x2e\x37\x38\x2d\x31\ +\x31\x2e\x32\x33\x2d\x32\x30\x2d\x31\x39\x2e\x30\x38\x2d\x33\x34\ +\x2e\x36\x32\x2d\x37\x2e\x36\x32\x2d\x35\x37\x2e\x31\x2c\x32\x2e\ +\x33\x37\x2d\x34\x2e\x35\x33\x2c\x35\x2e\x32\x33\x2d\x38\x2e\x38\ +\x2c\x37\x2e\x35\x32\x2d\x31\x33\x2e\x33\x36\x2c\x31\x2e\x35\x36\ +\x2d\x33\x2e\x31\x31\x2c\x32\x2e\x35\x32\x2d\x36\x2e\x35\x31\x2c\ +\x33\x2e\x39\x32\x2d\x31\x30\x2e\x32\x35\x48\x32\x35\x38\x4c\x32\ +\x39\x39\x2e\x32\x37\x2c\x31\x37\x35\x6c\x34\x31\x2e\x31\x2c\x36\ +\x30\x2e\x31\x37\x63\x2d\x37\x2e\x37\x38\x2e\x34\x35\x2d\x31\x35\ +\x2e\x33\x34\x2e\x31\x31\x2d\x32\x33\x2e\x31\x2e\x31\x37\x2d\x31\ +\x2e\x34\x33\x2c\x30\x2d\x32\x2e\x33\x38\x2e\x32\x31\x2d\x32\x2e\ +\x35\x39\x2c\x31\x2e\x39\x31\x2d\x2e\x39\x34\x2c\x37\x2e\x34\x2d\ +\x34\x2e\x32\x32\x2c\x31\x33\x2e\x38\x39\x2d\x37\x2e\x39\x35\x2c\ +\x32\x30\x2e\x32\x31\x2d\x37\x2e\x34\x38\x2c\x31\x32\x2e\x35\x2d\ +\x31\x32\x2e\x37\x39\x2c\x32\x32\x2e\x31\x37\x2d\x35\x2e\x34\x36\ +\x2c\x33\x36\x2e\x33\x39\x2c\x32\x2e\x35\x32\x2c\x34\x2e\x38\x33\ +\x2c\x35\x2e\x32\x34\x2c\x39\x2e\x35\x35\x2c\x37\x2e\x37\x35\x2c\ +\x31\x34\x2e\x33\x39\x43\x33\x32\x31\x2e\x37\x33\x2c\x33\x33\x33\ +\x2e\x33\x33\x2c\x33\x31\x30\x2e\x36\x38\x2c\x33\x34\x38\x2e\x33\ +\x37\x2c\x32\x39\x38\x2e\x36\x37\x2c\x33\x37\x30\x2e\x32\x38\x5a\ +\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x36\x36\x2e\x33\ +\x39\x2c\x34\x36\x37\x2e\x39\x33\x48\x33\x33\x36\x61\x34\x35\x2e\ +\x34\x35\x2c\x34\x35\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x2d\x36\x2e\x36\x37\x63\x33\x2e\x33\x39\x2d\x37\x2c\x37\x2e\x33\ +\x34\x2d\x31\x33\x2e\x37\x34\x2c\x31\x30\x2e\x37\x35\x2d\x32\x30\ +\x2e\x37\x35\x2c\x34\x2e\x34\x39\x2d\x39\x2c\x34\x2d\x31\x38\x2d\ +\x2e\x36\x31\x2d\x32\x36\x2e\x37\x38\x2d\x31\x31\x2e\x32\x33\x2d\ +\x32\x30\x2d\x31\x39\x2e\x30\x37\x2d\x33\x34\x2e\x36\x32\x2d\x37\ +\x2e\x36\x32\x2d\x35\x37\x2e\x31\x2c\x32\x2e\x33\x37\x2d\x34\x2e\ +\x35\x33\x2c\x35\x2e\x32\x33\x2d\x38\x2e\x38\x2c\x37\x2e\x35\x32\ +\x2d\x31\x33\x2e\x33\x37\x2c\x31\x2e\x35\x36\x2d\x33\x2e\x31\x2c\ +\x32\x2e\x35\x32\x2d\x36\x2e\x35\x31\x2c\x33\x2e\x39\x32\x2d\x31\ +\x30\x2e\x32\x34\x48\x33\x32\x35\x2e\x37\x34\x63\x31\x33\x2e\x39\ +\x33\x2d\x32\x30\x2e\x34\x2c\x32\x37\x2e\x35\x31\x2d\x34\x30\x2e\ +\x32\x38\x2c\x34\x31\x2e\x32\x34\x2d\x36\x30\x2e\x34\x6c\x34\x31\ +\x2e\x31\x31\x2c\x36\x30\x2e\x31\x37\x63\x2d\x37\x2e\x37\x38\x2e\ +\x34\x35\x2d\x31\x35\x2e\x33\x34\x2e\x31\x2d\x32\x33\x2e\x31\x31\ +\x2e\x31\x37\x2d\x31\x2e\x34\x33\x2c\x30\x2d\x32\x2e\x33\x37\x2e\ +\x32\x2d\x32\x2e\x35\x39\x2c\x31\x2e\x39\x2d\x2e\x39\x34\x2c\x37\ +\x2e\x34\x2d\x34\x2e\x32\x32\x2c\x31\x33\x2e\x38\x39\x2d\x37\x2e\ +\x39\x34\x2c\x32\x30\x2e\x32\x32\x2d\x37\x2e\x34\x39\x2c\x31\x32\ +\x2e\x35\x2d\x31\x32\x2e\x38\x2c\x32\x32\x2e\x31\x37\x2d\x35\x2e\ +\x34\x37\x2c\x33\x36\x2e\x33\x39\x2c\x32\x2e\x35\x33\x2c\x34\x2e\ +\x38\x32\x2c\x35\x2e\x32\x35\x2c\x39\x2e\x35\x35\x2c\x37\x2e\x37\ +\x36\x2c\x31\x34\x2e\x33\x39\x43\x33\x38\x39\x2e\x34\x34\x2c\x34\ +\x33\x31\x2c\x33\x37\x38\x2e\x33\x39\x2c\x34\x34\x36\x2c\x33\x36\ +\x36\x2e\x33\x39\x2c\x34\x36\x37\x2e\x39\x33\x5a\x22\x2f\x3e\x3c\ +\x2f\x73\x76\x67\x3e\ +\x00\x00\x07\xeb\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9104,68 +8181,194 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x30\x33\x61\x35\x35\x30\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x38\x39\ -\x2e\x32\x33\x20\x31\x31\x34\x2e\x34\x31\x20\x38\x39\x2e\x32\x33\ -\x20\x34\x38\x31\x2e\x32\x32\x20\x35\x31\x30\x2e\x37\x37\x20\x32\ -\x38\x36\x2e\x30\x36\x20\x38\x39\x2e\x32\x33\x20\x31\x31\x34\x2e\ -\x34\x31\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x03\x28\ -\x3c\ -\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ -\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ -\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ -\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ -\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ -\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ -\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ -\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ -\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ -\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ -\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ -\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x34\x2e\x34\x37\ -\x2c\x34\x34\x37\x2e\x31\x6c\x2d\x33\x36\x36\x2e\x38\x31\x2e\x30\ -\x34\x63\x2d\x35\x2e\x37\x34\x2c\x30\x2d\x31\x32\x2e\x39\x38\x2d\ -\x35\x2e\x31\x32\x2d\x31\x35\x2e\x31\x39\x2d\x38\x2e\x37\x39\x2d\ -\x32\x2e\x38\x33\x2d\x34\x2e\x36\x38\x2d\x31\x2e\x39\x39\x2d\x31\ -\x34\x2e\x39\x39\x2c\x31\x2e\x37\x38\x2d\x31\x39\x2e\x31\x34\x6c\ -\x34\x32\x2e\x33\x39\x2d\x34\x36\x2e\x35\x38\x63\x38\x2e\x30\x33\ -\x2d\x38\x2e\x38\x32\x2c\x31\x34\x2e\x38\x36\x2d\x31\x39\x2e\x37\ -\x39\x2c\x31\x34\x2e\x39\x33\x2d\x33\x32\x2e\x33\x31\x6c\x2e\x35\ -\x2d\x38\x33\x2e\x36\x37\x63\x2e\x33\x38\x2d\x36\x33\x2e\x34\x39\ -\x2c\x35\x30\x2e\x32\x35\x2d\x31\x31\x35\x2e\x31\x2c\x31\x31\x32\ -\x2e\x31\x2d\x31\x32\x37\x2e\x31\x31\x6c\x2e\x39\x35\x2d\x33\x31\ -\x2e\x30\x34\x63\x2e\x34\x32\x2d\x31\x33\x2e\x37\x36\x2c\x31\x31\ -\x2e\x35\x39\x2d\x32\x33\x2e\x31\x38\x2c\x32\x33\x2e\x34\x31\x2d\ -\x32\x33\x2e\x38\x33\x2c\x31\x33\x2e\x31\x38\x2d\x2e\x37\x33\x2c\ -\x32\x36\x2e\x30\x31\x2c\x39\x2e\x32\x32\x2c\x32\x36\x2e\x33\x35\ -\x2c\x32\x33\x2e\x38\x33\x6c\x2e\x37\x32\x2c\x33\x30\x2e\x39\x33\ -\x63\x36\x34\x2e\x35\x33\x2c\x31\x33\x2e\x33\x32\x2c\x31\x31\x32\ -\x2e\x32\x33\x2c\x36\x38\x2e\x34\x31\x2c\x31\x31\x32\x2e\x35\x37\ -\x2c\x31\x33\x35\x2e\x30\x31\x6c\x2e\x33\x39\x2c\x37\x35\x2e\x39\ -\x34\x63\x2e\x30\x35\x2c\x31\x30\x2e\x35\x38\x2c\x34\x2e\x37\x33\ -\x2c\x32\x31\x2e\x31\x31\x2c\x31\x31\x2e\x37\x37\x2c\x32\x38\x2e\ -\x38\x38\x6c\x34\x36\x2e\x33\x33\x2c\x35\x31\x2e\x31\x33\x63\x32\ -\x2e\x36\x36\x2c\x32\x2e\x39\x33\x2c\x33\x2e\x32\x32\x2c\x31\x32\ -\x2e\x38\x36\x2c\x31\x2e\x37\x39\x2c\x31\x36\x2e\x35\x34\x2d\x31\ -\x2e\x34\x33\x2c\x33\x2e\x36\x39\x2d\x37\x2e\x35\x33\x2c\x31\x30\ -\x2e\x31\x37\x2d\x31\x33\x2e\x39\x38\x2c\x31\x30\x2e\x31\x37\x5a\ -\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x36\ -\x32\x2e\x36\x35\x2c\x34\x36\x32\x2e\x39\x33\x63\x32\x2e\x35\x35\ -\x2c\x33\x33\x2e\x38\x35\x2d\x32\x37\x2e\x38\x34\x2c\x36\x31\x2e\ -\x31\x31\x2d\x35\x39\x2e\x36\x32\x2c\x36\x32\x2e\x33\x38\x2d\x33\ -\x35\x2e\x37\x36\x2c\x31\x2e\x34\x34\x2d\x36\x36\x2e\x34\x34\x2d\ -\x32\x35\x2e\x32\x34\x2d\x36\x36\x2e\x33\x35\x2d\x36\x32\x2e\x33\ -\x31\x6c\x31\x32\x35\x2e\x39\x37\x2d\x2e\x30\x37\x5a\x22\x2f\x3e\ -\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x04\x25\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x33\x2e\x38\x2c\x33\x32\x31\ +\x2e\x31\x38\x71\x2d\x32\x37\x2c\x30\x2d\x35\x34\x2e\x30\x35\x2c\ +\x30\x61\x31\x36\x2e\x35\x33\x2c\x31\x36\x2e\x35\x33\x2c\x30\x2c\ +\x30\x2c\x31\x2d\x31\x36\x2e\x35\x36\x2d\x31\x36\x2e\x35\x35\x71\ +\x30\x2d\x35\x34\x2c\x30\x2d\x31\x30\x37\x2e\x39\x41\x31\x36\x2e\ +\x37\x35\x2c\x31\x36\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ +\x33\x30\x2c\x31\x38\x30\x71\x35\x33\x2e\x34\x39\x2c\x30\x2c\x31\ +\x30\x37\x2c\x30\x61\x31\x37\x2e\x34\x37\x2c\x31\x37\x2e\x34\x37\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x37\x2e\x34\x38\x2c\x31\x37\x2e\ +\x34\x39\x71\x30\x2c\x35\x33\x2e\x31\x37\x2c\x30\x2c\x31\x30\x36\ +\x2e\x33\x36\x41\x31\x37\x2e\x33\x35\x2c\x31\x37\x2e\x33\x35\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x35\x33\x37\x2c\x33\x32\x31\x2e\x31\x39\ +\x51\x35\x31\x30\x2e\x34\x32\x2c\x33\x32\x31\x2e\x31\x36\x2c\x34\ +\x38\x33\x2e\x38\x2c\x33\x32\x31\x2e\x31\x38\x5a\x6d\x35\x39\x2e\ +\x33\x32\x2d\x37\x30\x2e\x34\x39\x63\x30\x2d\x33\x33\x2d\x32\x36\ +\x2e\x37\x2d\x36\x30\x2d\x35\x39\x2e\x34\x35\x2d\x36\x30\x61\x35\ +\x39\x2e\x38\x39\x2c\x35\x39\x2e\x38\x39\x2c\x30\x2c\x31\x2c\x30\ +\x2c\x35\x39\x2e\x34\x35\x2c\x36\x30\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x64\x3d\x22\x4d\x35\x32\x39\x2e\x38\x32\x2c\x32\x34\x37\x2e\ +\x31\x37\x63\x2d\x31\x31\x2e\x34\x37\x2d\x39\x2e\x32\x37\x2d\x32\ +\x34\x2e\x36\x39\x2d\x31\x31\x2e\x31\x36\x2d\x33\x38\x2e\x32\x39\ +\x2d\x35\x2e\x34\x32\x6c\x2d\x32\x2e\x33\x32\x2d\x31\x2e\x30\x37\ +\x63\x2d\x31\x31\x2e\x34\x35\x2d\x31\x31\x2e\x35\x35\x2c\x32\x32\ +\x2e\x35\x37\x2d\x32\x35\x2c\x33\x32\x2e\x34\x36\x2d\x32\x31\x2e\ +\x35\x35\x2d\x37\x2d\x31\x30\x2d\x31\x38\x2e\x34\x31\x2d\x31\x35\ +\x2e\x31\x35\x2d\x33\x30\x2e\x32\x37\x2d\x31\x37\x2e\x36\x37\x2d\ +\x31\x36\x2e\x36\x39\x2d\x2e\x37\x35\x2d\x32\x32\x2e\x32\x37\x2c\ +\x32\x34\x2e\x31\x35\x2d\x31\x37\x2e\x32\x39\x2c\x33\x37\x2e\x32\ +\x31\x2c\x31\x2e\x37\x33\x2c\x34\x2e\x37\x36\x2c\x31\x2e\x37\x37\ +\x2c\x34\x2e\x36\x33\x2d\x31\x2e\x37\x2c\x38\x2e\x32\x36\x2d\x31\ +\x2e\x33\x39\x2c\x31\x2e\x34\x36\x2d\x32\x2e\x34\x2c\x31\x2e\x33\ +\x37\x2d\x34\x2c\x2e\x34\x31\x2d\x31\x32\x2e\x36\x39\x2d\x37\x2e\ +\x34\x37\x2d\x31\x36\x2e\x31\x32\x2d\x32\x31\x2e\x35\x38\x2d\x31\ +\x35\x2e\x33\x39\x2d\x33\x35\x2e\x34\x37\x2d\x31\x30\x2e\x35\x32\ +\x2c\x38\x2e\x34\x31\x2d\x32\x36\x2e\x32\x31\x2c\x33\x31\x2e\x30\ +\x37\x2d\x31\x34\x2e\x31\x38\x2c\x34\x32\x2e\x39\x33\x2c\x31\x30\ +\x2e\x33\x39\x2c\x37\x2e\x31\x34\x2c\x32\x31\x2e\x31\x37\x2c\x31\ +\x30\x2e\x35\x36\x2c\x33\x33\x2e\x34\x37\x2c\x35\x2e\x36\x35\x2c\ +\x34\x2e\x34\x38\x2d\x31\x2e\x37\x39\x2c\x34\x2e\x34\x2d\x31\x2e\ +\x37\x39\x2c\x37\x2e\x38\x2c\x31\x2e\x35\x34\x2c\x33\x2e\x30\x37\ +\x2c\x31\x34\x2e\x31\x31\x2d\x32\x32\x2e\x35\x32\x2c\x32\x31\x2e\ +\x38\x38\x2d\x33\x34\x2e\x32\x35\x2c\x32\x30\x2e\x30\x36\x2c\x38\ +\x2e\x33\x31\x2c\x31\x30\x2e\x31\x32\x2c\x32\x39\x2e\x38\x37\x2c\ +\x32\x35\x2e\x32\x34\x2c\x34\x31\x2e\x32\x37\x2c\x31\x33\x2e\x32\ +\x34\x2c\x37\x2e\x31\x36\x2d\x39\x2e\x38\x31\x2c\x31\x31\x2e\x31\ +\x34\x2d\x32\x30\x2e\x34\x32\x2c\x36\x2e\x33\x37\x2d\x33\x32\x2e\ +\x32\x37\x2d\x32\x2e\x37\x36\x2d\x32\x36\x2e\x37\x35\x2c\x32\x36\ +\x2e\x39\x35\x2c\x37\x2e\x31\x38\x2c\x32\x30\x2e\x38\x34\x2c\x32\ +\x35\x2e\x38\x35\x43\x35\x32\x34\x2e\x39\x34\x2c\x32\x38\x32\x2e\ +\x33\x38\x2c\x35\x33\x39\x2e\x36\x33\x2c\x32\x35\x38\x2e\x34\x39\ +\x2c\x35\x32\x39\x2e\x38\x32\x2c\x32\x34\x37\x2e\x31\x37\x5a\x22\ +\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x32\x33\x2e\x39\x37\x22\ +\x20\x79\x3d\x22\x33\x32\x37\x2e\x39\x37\x22\x20\x77\x69\x64\x74\ +\x68\x3d\x22\x31\x31\x39\x2e\x36\x36\x22\x20\x68\x65\x69\x67\x68\ +\x74\x3d\x22\x32\x32\x2e\x37\x35\x22\x20\x72\x78\x3d\x22\x32\x2e\ +\x36\x32\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x33\x34\x2e\ +\x35\x35\x22\x20\x79\x3d\x22\x33\x34\x32\x2e\x33\x33\x22\x20\x77\ +\x69\x64\x74\x68\x3d\x22\x39\x38\x2e\x35\x22\x20\x68\x65\x69\x67\ +\x68\x74\x3d\x22\x32\x33\x2e\x36\x39\x22\x20\x72\x78\x3d\x22\x32\ +\x2e\x36\x32\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x37\ +\x34\x2e\x32\x2c\x33\x30\x32\x2e\x36\x31\x63\x2d\x31\x31\x2e\x31\ +\x33\x2d\x39\x2e\x34\x32\x2d\x32\x36\x2e\x33\x2d\x31\x36\x2e\x38\ +\x35\x2d\x34\x35\x2e\x30\x37\x2d\x32\x32\x2e\x30\x39\x6c\x2d\x32\ +\x2e\x36\x36\x2d\x2e\x38\x63\x2d\x32\x30\x2d\x36\x2d\x34\x35\x2d\ +\x31\x33\x2e\x33\x36\x2d\x34\x35\x2d\x33\x38\x2e\x34\x32\x2c\x30\ +\x2d\x32\x30\x2e\x37\x35\x2c\x32\x30\x2e\x30\x38\x2d\x33\x31\x2e\ +\x36\x2c\x33\x39\x2e\x39\x31\x2d\x33\x31\x2e\x36\x2c\x31\x38\x2e\ +\x36\x36\x2c\x30\x2c\x33\x33\x2c\x36\x2e\x36\x36\x2c\x34\x35\x2e\ +\x36\x38\x2c\x31\x33\x2e\x38\x36\x6c\x33\x2e\x34\x37\x2c\x32\x2c\ +\x31\x35\x2d\x32\x34\x2e\x38\x37\x2d\x33\x2e\x35\x37\x2d\x32\x2e\ +\x31\x63\x2d\x31\x36\x2d\x39\x2e\x34\x2d\x33\x33\x2e\x38\x31\x2d\ +\x31\x38\x2e\x35\x39\x2d\x36\x30\x2e\x34\x34\x2d\x31\x38\x2e\x35\ +\x39\x2d\x31\x39\x2c\x30\x2d\x33\x36\x2e\x37\x32\x2c\x36\x2e\x32\ +\x33\x2d\x35\x30\x2c\x31\x37\x2e\x35\x33\x2d\x31\x33\x2e\x35\x34\ +\x2c\x31\x31\x2e\x35\x32\x2d\x32\x31\x2c\x32\x37\x2e\x30\x37\x2d\ +\x32\x31\x2c\x34\x33\x2e\x38\x2c\x30\x2c\x33\x32\x2e\x31\x39\x2c\ +\x32\x32\x2c\x35\x35\x2c\x36\x33\x2e\x36\x2c\x36\x36\x2c\x31\x34\ +\x2e\x37\x39\x2c\x33\x2e\x38\x37\x2c\x32\x36\x2e\x36\x38\x2c\x38\ +\x2e\x38\x36\x2c\x33\x35\x2e\x33\x35\x2c\x31\x34\x2e\x38\x33\x2c\ +\x31\x31\x2c\x37\x2e\x35\x39\x2c\x31\x36\x2e\x37\x32\x2c\x31\x36\ +\x2e\x38\x31\x2c\x31\x36\x2e\x39\x32\x2c\x32\x37\x2e\x33\x37\x2c\ +\x30\x2c\x32\x32\x2e\x35\x33\x2d\x32\x30\x2e\x32\x38\x2c\x33\x39\ +\x2e\x35\x31\x2d\x34\x37\x2e\x31\x33\x2c\x33\x39\x2e\x35\x31\x68\ +\x2d\x2e\x31\x33\x63\x2d\x31\x38\x2e\x35\x32\x2d\x2e\x34\x34\x2d\ +\x33\x37\x2e\x33\x38\x2d\x36\x2e\x34\x34\x2d\x35\x34\x2e\x35\x36\ +\x2d\x31\x37\x2e\x33\x36\x4c\x36\x31\x2c\x33\x36\x39\x2e\x34\x31\ +\x2c\x34\x35\x2e\x35\x39\x2c\x33\x39\x35\x2e\x35\x34\x6c\x33\x2e\ +\x32\x32\x2c\x32\x2e\x31\x35\x63\x32\x31\x2e\x36\x2c\x31\x34\x2e\ +\x34\x2c\x34\x36\x2e\x38\x35\x2c\x32\x32\x2e\x33\x34\x2c\x37\x31\ +\x2e\x31\x2c\x32\x32\x2e\x33\x34\x2c\x32\x39\x2e\x30\x39\x2c\x30\ +\x2c\x34\x37\x2e\x31\x36\x2d\x31\x32\x2c\x35\x37\x2e\x32\x2d\x32\ +\x32\x61\x36\x39\x2e\x31\x38\x2c\x36\x39\x2e\x31\x38\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x32\x30\x2e\x32\x35\x2d\x34\x38\x2e\x35\x31\x76\ +\x2d\x2e\x31\x38\x43\x31\x39\x36\x2e\x35\x33\x2c\x33\x33\x30\x2e\ +\x36\x33\x2c\x31\x38\x38\x2e\x37\x33\x2c\x33\x31\x34\x2e\x39\x31\ +\x2c\x31\x37\x34\x2e\x32\x2c\x33\x30\x32\x2e\x36\x31\x5a\x22\x2f\ +\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\ +\x32\x30\x36\x2e\x31\x37\x20\x31\x38\x35\x2e\x33\x37\x20\x32\x30\ +\x36\x2e\x31\x37\x20\x32\x31\x34\x2e\x34\x37\x20\x32\x38\x36\x2e\ +\x39\x34\x20\x32\x31\x34\x2e\x34\x37\x20\x32\x38\x36\x2e\x39\x34\ +\x20\x34\x31\x34\x2e\x36\x36\x20\x33\x31\x36\x2e\x30\x35\x20\x34\ +\x31\x34\x2e\x36\x36\x20\x33\x31\x36\x2e\x30\x35\x20\x32\x31\x34\ +\x2e\x34\x37\x20\x33\x39\x36\x2e\x38\x32\x20\x32\x31\x34\x2e\x34\ +\x37\x20\x33\x39\x36\x2e\x38\x32\x20\x31\x38\x35\x2e\x33\x37\x20\ +\x32\x30\x36\x2e\x31\x37\x20\x31\x38\x35\x2e\x33\x37\x22\x2f\x3e\ +\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ +\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x30\x37\x2e\x32\x39\x2c\x33\ +\x39\x36\x2e\x35\x39\x56\x33\x37\x30\x2e\x31\x37\x48\x34\x35\x39\ +\x2e\x32\x31\x76\x32\x36\x2e\x34\x32\x6c\x32\x34\x2c\x31\x35\x2e\ +\x38\x36\x5a\x6d\x2d\x31\x35\x2e\x38\x32\x2d\x31\x35\x2e\x38\x35\ +\x68\x31\x32\x56\x33\x39\x34\x6c\x2d\x31\x32\x2c\x37\x2e\x39\x33\ +\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\x0f\ +\x00\ +\x00\x0d\x9f\x78\x9c\xa5\x57\x4d\x6f\x23\x37\x0c\xfd\x2b\xc4\xf4\ +\xd2\x3d\x98\x16\x29\x52\xa2\xb6\x71\x0e\x3d\xf7\x3f\x14\x46\xe2\ +\x24\x06\x9c\x38\xb0\x07\x71\x82\xa2\xff\xbd\xa0\x46\xe3\x8c\x0b\ +\xec\x7a\x90\x3d\x04\x8e\x26\x79\x7c\xf3\x1e\x3f\x44\xdf\x1c\xdf\ +\x1e\x61\x7b\xbf\xea\xfe\x5a\x7f\x6c\x0e\x7f\x53\x07\xf7\xeb\x7e\ +\xbd\x78\x59\x3f\x6f\xda\x33\xa0\x0e\xde\x9f\x77\x2f\xc7\x55\xf7\ +\xd4\xf7\xaf\xdf\x97\xcb\xd3\xe9\x84\xa7\x88\xfb\xc3\xe3\x92\x43\ +\x08\xcb\xe3\xdb\x63\x07\x6f\xdb\xcd\xe9\xcf\xfd\xfb\xaa\x0b\x10\ +\x20\x85\xfa\xd3\xdd\xde\xdc\x6f\x1e\x8e\xb7\x37\xc7\xfe\x63\xb7\ +\xb9\xc5\xbb\xdd\x71\x41\xff\x3c\x6c\x77\xbb\xef\xbf\x6d\xc2\x26\ +\xdc\x3f\xfc\xf1\xef\xcd\x72\xf8\xe3\xcd\x72\xf8\xd7\xd7\xfd\xee\ +\xe3\x71\xff\x02\x77\xbb\xf5\xf1\xb8\xea\x2a\xa4\x83\xd7\xfd\xf6\ +\xa5\x3f\xae\x3a\x36\x45\x22\xe0\x6c\x98\x0d\xd8\x04\x8b\x01\x99\ +\x20\x19\x30\x25\xb4\x08\xe4\x1f\x04\x4c\x19\x43\x04\x0e\x82\x51\ +\xe0\x02\xd7\x2d\xaf\xd1\x44\x0e\xc8\x32\xd2\xf8\x29\x9e\x69\xa2\ +\x19\xea\x99\xc6\x4f\x91\x47\x9a\x0b\xdc\x1c\x1a\x43\x4e\xc0\x25\ +\x61\x51\x10\x66\xb4\xe1\x94\x0b\x48\x09\xc8\x04\xcc\x86\x29\x82\ +\x04\xc6\x64\xf5\x64\x0a\x17\xb8\x19\x34\xf5\xcd\x04\x73\x04\xf1\ +\x70\xf5\x60\x4e\xa1\xce\x1b\x4b\xc4\xa0\x20\xc1\x50\x18\x62\x61\ +\x34\x86\x4f\xcc\xf5\xf8\x6c\x01\x55\x47\x19\x64\x35\x6a\x93\x41\ +\xe4\x84\x4d\x05\x87\x84\x14\x47\x15\x17\xb0\x19\x2c\x59\xaa\xe1\ +\x83\x10\xb2\x6a\x4f\x53\x42\x54\xad\x6b\x4a\x38\x04\x8c\x65\x54\ +\x72\x81\x9b\x23\x46\x51\x04\x62\x4c\x48\xb9\xd6\x4d\x24\x90\x18\ +\x30\xe7\x5a\x53\x94\x40\x8a\x21\x49\x3d\xc5\x04\x42\xc1\x15\x4e\ +\x61\xf3\x0a\x4c\xf3\xc8\xe2\xa7\x7c\x66\xf1\x92\xb2\x33\x8b\x9f\ +\x92\x36\x96\x0b\x98\xb3\x1c\x36\x77\xfd\xff\x28\xde\x57\x1d\x97\ +\x88\x54\x3a\xf8\x70\x22\x8c\xda\xc1\x69\x7b\xdf\x3f\xad\x3a\x4a\ +\x48\xa9\x83\xa7\xcd\xf6\xf1\xa9\x5f\x75\xe4\x69\x99\x53\x40\xa1\ +\xb8\x52\x0a\x55\x69\xc9\x18\x18\x28\x14\x2c\x09\x58\x92\x97\xa2\ +\x7a\x60\x60\x35\x4c\x04\x92\xd0\x60\x8a\x99\xc1\xa0\x09\xb9\xb4\ +\x30\x51\x62\xed\x07\x0f\x33\x48\x69\xd4\x31\x28\xaa\x8c\xd4\x53\ +\xcc\x8f\xbd\xb0\xe4\xad\xe8\x56\xb0\x44\x54\xb9\xe2\x05\xf4\x87\ +\xf5\xcb\xf1\x61\x7f\x78\x5e\x75\xf5\xd7\xdd\xba\xdf\xfc\xbe\x60\ +\x8a\x18\xa8\xb6\x61\x8e\xdf\xe0\xb0\xef\xeb\xe3\x12\xbe\x5d\xd7\ +\x56\x86\x59\x55\x4a\xed\x87\x30\x64\x95\xd8\x3b\x41\x05\xa3\x42\ +\x4c\x8c\x66\x20\x82\xa5\x40\xd4\xe0\x1a\xa7\xa0\xeb\x14\x43\x1c\ +\xd6\xda\x05\x43\x1c\x4e\x8a\xdc\xc2\x44\xaa\x2d\x39\x72\x87\xe8\ +\x59\x9a\x62\x7e\x6c\x9f\x78\xb6\xd3\xaf\xfa\x67\x83\x7d\x0b\x2a\ +\x19\x39\x9f\xfd\x9b\x65\x9f\x06\x42\xe6\x51\x83\x14\xaa\x9d\x3e\ +\x6a\x50\x6f\x8e\x26\x5c\x55\x9d\x65\x50\x7e\x01\x9b\xe3\x60\x8d\ +\xd4\x52\xd1\x22\xb5\x5c\xb4\x50\x2d\x83\xe3\x1b\x8c\x19\x9c\xe0\ +\x66\x75\xa4\xc4\xf2\x25\x0f\x53\x60\x1f\x97\x14\x42\xc2\xa4\x67\ +\x0f\xc9\xe6\x98\xd8\xda\x48\x4a\x41\x19\xdb\xc8\x6f\x98\x20\xe7\ +\x36\x92\x88\x26\x63\xef\xa9\x46\x74\xc5\x9f\xa8\x19\x1c\x6d\x14\ +\x0c\x81\xda\x2c\x18\x02\xb5\x61\x30\xd0\xb7\x01\xd2\xe8\x2f\x50\ +\x3f\x36\x90\xc4\x3b\xaf\x1a\x58\x0a\xaa\x7d\xad\x8d\x33\xd5\xbb\ +\x43\x65\xea\xe0\x42\x74\x86\x83\xa4\x05\x23\x50\x0a\x58\x32\x90\ +\xe6\x3a\x95\x72\xf2\xdb\xc1\x22\x72\x06\xca\xe2\xc3\xcb\x2f\x0c\ +\x03\x52\xf3\xbb\x67\x0a\x9a\x41\x91\x08\x43\x86\x92\xea\xe0\x14\ +\xc5\x5c\x1b\x58\x32\x90\x64\x34\xa7\x60\x14\xa0\x14\xfd\xea\xa3\ +\x1c\x3c\x6f\x53\xd0\x4f\xda\x58\x22\xa6\xf4\x8b\xf6\xb1\x98\x13\ +\x2f\x38\x13\x0a\x9f\xfd\x9b\x65\x9f\xb8\xe7\xd6\x14\x48\x2c\xbe\ +\x2d\x35\x05\x22\x84\x52\x9a\x6c\xd1\xba\xc4\x0d\xb2\xa7\xa0\x19\ +\x2d\x4c\x05\xd9\xc6\x3c\xa8\xdf\xd5\xe7\x44\xb8\x7e\xd6\x31\x7d\ +\x22\x5a\x2d\x1e\xd2\x77\x81\x9b\x55\x81\xbe\x67\x58\xfa\x5a\x09\ +\xa6\xe4\xbd\x67\x7e\xc7\x7f\x5a\xb8\xa0\x38\xab\x06\x87\x32\x10\ +\x29\x98\xc7\x32\x10\x25\x5f\x6f\x5a\x19\x28\x2b\x66\x19\x8b\x47\ +\x39\xfa\xda\x35\x85\x5d\x27\x19\xaa\x59\x24\x63\x91\x56\xcd\xe2\ +\x54\xd6\xaa\x59\x12\xf9\xe0\x6b\x2d\xe0\x56\xe6\x02\x53\xd0\xcf\ +\xaa\x30\xd4\xda\xab\x16\x86\x7a\x2f\x7f\xc1\x42\x0a\x96\x5d\x9d\ +\x68\xc1\xf4\x79\x99\xcc\xb3\xd0\x5f\x81\xbc\xb2\xac\xee\xbc\xc2\ +\x2e\xcc\x3f\xb2\x17\x42\x42\x2f\x15\xf1\xed\x54\x49\xd0\x57\x99\ +\x50\x1f\x4d\x40\x33\x38\xa2\xa1\x80\x32\xd7\xc5\x4d\x23\x66\x05\ +\xf5\xcd\x4d\x6a\xb6\xfc\x86\x4e\x98\x18\x24\xd6\xd1\x27\x62\x75\ +\x35\x9f\xa0\x9c\xc3\xbf\x56\xdd\xfe\x07\xc6\x57\x6f\x47\ +\x00\x00\x06\x89\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -9182,59 +8385,97 @@ \x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ \x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ \x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x37\x2e\x39\x35\ -\x2c\x32\x35\x31\x2e\x37\x35\x63\x2d\x32\x34\x2e\x39\x32\x2e\x32\ -\x32\x2d\x34\x39\x2e\x38\x34\x2e\x33\x39\x2d\x37\x34\x2e\x37\x35\ -\x2d\x2e\x30\x38\x2d\x36\x2e\x37\x34\x2d\x2e\x31\x33\x2d\x37\x2e\ -\x36\x37\x2c\x32\x2e\x31\x32\x2d\x37\x2e\x36\x32\x2c\x38\x2e\x31\ -\x2e\x32\x37\x2c\x33\x39\x2e\x31\x35\x2e\x31\x34\x2c\x37\x38\x2e\ -\x33\x2e\x31\x34\x2c\x31\x31\x37\x2e\x34\x35\x73\x2e\x31\x35\x2c\ -\x37\x38\x2e\x33\x2d\x2e\x31\x35\x2c\x31\x31\x37\x2e\x34\x35\x63\ -\x2d\x2e\x30\x35\x2c\x36\x2e\x31\x33\x2c\x31\x2e\x37\x31\x2c\x37\ -\x2e\x35\x33\x2c\x37\x2e\x36\x2c\x37\x2e\x34\x36\x2c\x32\x34\x2e\ -\x39\x32\x2d\x2e\x33\x33\x2c\x34\x39\x2e\x38\x34\x2d\x2e\x32\x36\ -\x2c\x37\x34\x2e\x37\x36\x2d\x2e\x30\x34\x2c\x34\x2e\x38\x32\x2e\ -\x30\x34\x2c\x36\x2e\x34\x37\x2d\x31\x2e\x30\x35\x2c\x36\x2e\x34\ -\x36\x2d\x36\x2e\x32\x34\x2d\x2e\x31\x37\x2d\x37\x39\x2e\x33\x32\ -\x2d\x2e\x31\x37\x2d\x31\x35\x38\x2e\x36\x34\x2c\x30\x2d\x32\x33\ -\x37\x2e\x39\x36\x2e\x30\x31\x2d\x35\x2e\x32\x32\x2d\x31\x2e\x36\ -\x36\x2d\x36\x2e\x31\x39\x2d\x36\x2e\x34\x33\x2d\x36\x2e\x31\x34\ -\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\ -\x37\x34\x2e\x32\x34\x2c\x33\x30\x35\x2e\x36\x34\x63\x30\x2d\x31\ -\x35\x31\x2e\x37\x34\x2d\x31\x32\x31\x2e\x37\x31\x2d\x32\x37\x34\ -\x2e\x32\x39\x2d\x32\x37\x32\x2e\x35\x37\x2d\x32\x37\x34\x2e\x34\ -\x36\x2d\x31\x35\x33\x2e\x30\x33\x2d\x2e\x31\x36\x2d\x32\x37\x35\ -\x2e\x38\x36\x2c\x31\x32\x31\x2e\x39\x2d\x32\x37\x35\x2e\x39\x36\ -\x2c\x32\x37\x34\x2e\x32\x34\x2d\x2e\x31\x2c\x31\x35\x30\x2e\x32\ -\x36\x2c\x31\x32\x32\x2e\x34\x2c\x32\x37\x32\x2e\x35\x36\x2c\x32\ -\x37\x31\x2e\x30\x32\x2c\x32\x37\x34\x2e\x36\x33\x2c\x31\x35\x32\ -\x2e\x39\x32\x2c\x32\x2e\x31\x33\x2c\x32\x38\x30\x2e\x33\x32\x2d\ -\x31\x32\x35\x2e\x39\x39\x2c\x32\x37\x37\x2e\x35\x31\x2d\x32\x37\ -\x34\x2e\x34\x5a\x4d\x32\x39\x37\x2e\x33\x38\x2c\x35\x32\x35\x2e\ -\x34\x31\x63\x2d\x31\x31\x39\x2e\x30\x33\x2d\x31\x2e\x36\x36\x2d\ -\x32\x31\x37\x2e\x31\x33\x2d\x39\x39\x2e\x36\x31\x2d\x32\x31\x37\ -\x2e\x30\x36\x2d\x32\x31\x39\x2e\x39\x35\x2e\x30\x38\x2d\x31\x32\ -\x32\x2c\x39\x38\x2e\x34\x35\x2d\x32\x31\x39\x2e\x37\x36\x2c\x32\ -\x32\x31\x2e\x30\x31\x2d\x32\x31\x39\x2e\x36\x33\x2c\x31\x32\x30\ -\x2e\x38\x32\x2e\x31\x33\x2c\x32\x31\x38\x2e\x33\x2c\x39\x38\x2e\ -\x32\x38\x2c\x32\x31\x38\x2e\x33\x2c\x32\x31\x39\x2e\x38\x31\x2c\ -\x32\x2e\x32\x35\x2c\x31\x31\x38\x2e\x38\x37\x2d\x39\x39\x2e\x37\ -\x38\x2c\x32\x32\x31\x2e\x34\x37\x2d\x32\x32\x32\x2e\x32\x35\x2c\ -\x32\x31\x39\x2e\x37\x37\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\ -\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x31\x33\x2c\x31\x32\x30\x2e\ -\x32\x33\x63\x2d\x32\x35\x2e\x33\x31\x2d\x2e\x33\x35\x2d\x34\x37\ -\x2e\x33\x33\x2c\x31\x35\x2e\x31\x32\x2d\x35\x33\x2e\x31\x33\x2c\ -\x33\x37\x2e\x33\x32\x2d\x36\x2e\x39\x38\x2c\x32\x36\x2e\x37\x2c\ -\x38\x2e\x34\x36\x2c\x35\x33\x2e\x32\x2c\x33\x35\x2e\x35\x35\x2c\ -\x36\x31\x2e\x30\x31\x2c\x32\x39\x2e\x32\x33\x2c\x38\x2e\x34\x32\ -\x2c\x36\x30\x2e\x32\x35\x2d\x36\x2e\x38\x31\x2c\x36\x38\x2e\x35\ -\x2d\x33\x33\x2e\x36\x34\x2c\x39\x2e\x39\x38\x2d\x33\x32\x2e\x34\ -\x36\x2d\x31\x34\x2e\x39\x39\x2d\x36\x34\x2e\x31\x39\x2d\x35\x30\ -\x2e\x39\x31\x2d\x36\x34\x2e\x36\x38\x5a\x22\x2f\x3e\x0a\x3c\x2f\ -\x73\x76\x67\x3e\ -\x00\x00\x06\x33\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x35\x35\x2e\x33\x31\ +\x2c\x33\x32\x37\x2e\x36\x39\x63\x30\x2d\x31\x39\x2e\x35\x31\x2d\ +\x36\x2e\x37\x34\x2d\x32\x36\x2e\x38\x36\x2d\x31\x36\x2e\x37\x38\ +\x2d\x32\x36\x2e\x38\x36\x73\x2d\x31\x36\x2e\x34\x35\x2c\x38\x2e\ +\x36\x33\x2d\x31\x36\x2e\x34\x35\x2c\x32\x36\x2e\x38\x36\x2c\x35\ +\x2e\x38\x33\x2c\x32\x37\x2e\x34\x31\x2c\x31\x36\x2e\x35\x34\x2c\ +\x32\x37\x2e\x34\x31\x2c\x31\x36\x2e\x36\x39\x2d\x38\x2e\x35\x38\ +\x2c\x31\x36\x2e\x36\x39\x2d\x32\x37\x2e\x34\x31\x5a\x22\x2f\x3e\ +\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x36\x31\x2e\x37\ +\x38\x2c\x33\x38\x33\x2e\x36\x35\x63\x2d\x39\x2e\x39\x39\x2c\x30\ +\x2d\x31\x36\x2e\x34\x35\x2c\x38\x2e\x37\x35\x2d\x31\x36\x2e\x34\ +\x35\x2c\x32\x36\x2e\x38\x36\x73\x35\x2e\x38\x33\x2c\x32\x37\x2e\ +\x34\x31\x2c\x31\x36\x2e\x35\x34\x2c\x32\x37\x2e\x34\x31\x2c\x31\ +\x36\x2e\x36\x39\x2d\x38\x2e\x35\x38\x2c\x31\x36\x2e\x36\x39\x2d\ +\x32\x37\x2e\x34\x31\x2d\x36\x2e\x37\x34\x2d\x32\x36\x2e\x38\x36\ +\x2d\x31\x36\x2e\x37\x38\x2d\x32\x36\x2e\x38\x36\x5a\x22\x2f\x3e\ +\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x34\x39\x2e\x35\ +\x38\x2c\x33\x32\x37\x2e\x39\x34\x63\x2d\x39\x2e\x31\x39\x2d\x32\ +\x37\x2e\x34\x33\x2d\x32\x32\x2e\x39\x31\x2d\x35\x36\x2e\x38\x31\ +\x2d\x33\x39\x2e\x30\x36\x2d\x38\x36\x2e\x34\x36\x76\x2d\x2e\x36\ +\x32\x63\x2d\x34\x2e\x34\x31\x2d\x37\x2e\x37\x37\x2d\x38\x2e\x38\ +\x37\x2d\x31\x35\x2e\x34\x36\x2d\x31\x33\x2e\x33\x38\x2d\x32\x33\ +\x2e\x31\x2d\x39\x2e\x36\x36\x2d\x31\x36\x2e\x35\x38\x2d\x31\x39\ +\x2e\x39\x31\x2d\x33\x33\x2e\x31\x2d\x33\x30\x2e\x33\x39\x2d\x34\ +\x39\x2e\x32\x38\x2d\x32\x30\x2e\x38\x33\x2d\x33\x32\x2e\x33\x39\ +\x2d\x34\x32\x2e\x39\x33\x2d\x36\x34\x2e\x31\x33\x2d\x36\x36\x2e\ +\x37\x34\x2d\x39\x36\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x2e\ +\x30\x31\x2d\x2e\x30\x31\x2e\x30\x32\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x2e\x30\x31\x2d\x2e\x30\x31\x2d\x2e\x30\x32\x2d\x32\x33\x2e\x38\ +\x31\x2c\x33\x31\x2e\x39\x33\x2d\x34\x35\x2e\x39\x31\x2c\x36\x33\ +\x2e\x36\x37\x2d\x36\x36\x2e\x37\x35\x2c\x39\x36\x2e\x30\x37\x2d\ +\x31\x30\x2e\x34\x38\x2c\x31\x36\x2e\x31\x37\x2d\x32\x30\x2e\x37\ +\x32\x2c\x33\x32\x2e\x36\x39\x2d\x33\x30\x2e\x33\x38\x2c\x34\x39\ +\x2e\x32\x36\x2d\x34\x2e\x35\x31\x2c\x37\x2e\x36\x34\x2d\x38\x2e\ +\x39\x38\x2c\x31\x35\x2e\x33\x34\x2d\x31\x33\x2e\x33\x38\x2c\x32\ +\x33\x2e\x31\x31\x76\x2e\x36\x32\x63\x2d\x31\x36\x2e\x31\x35\x2c\ +\x32\x39\x2e\x36\x35\x2d\x32\x39\x2e\x38\x37\x2c\x35\x39\x2e\x30\ +\x34\x2d\x33\x39\x2e\x30\x36\x2c\x38\x36\x2e\x34\x36\x2d\x38\x2e\ +\x33\x34\x2c\x32\x34\x2e\x38\x38\x2d\x38\x2e\x39\x33\x2c\x34\x39\ +\x2e\x30\x31\x2d\x33\x2e\x32\x31\x2c\x37\x34\x2e\x39\x32\x2c\x31\ +\x33\x2e\x35\x35\x2c\x36\x31\x2e\x34\x33\x2c\x36\x30\x2e\x35\x36\ +\x2c\x31\x30\x37\x2e\x31\x33\x2c\x31\x31\x37\x2e\x36\x37\x2c\x31\ +\x32\x30\x2e\x36\x34\x2c\x30\x2c\x2e\x30\x32\x2c\x30\x2c\x2e\x30\ +\x35\x2c\x30\x2c\x2e\x30\x37\x2c\x38\x2e\x38\x31\x2c\x32\x2e\x30\ +\x34\x2c\x31\x37\x2e\x36\x2c\x33\x2e\x32\x37\x2c\x32\x36\x2e\x33\ +\x2c\x33\x2e\x37\x37\x2e\x31\x39\x2e\x30\x31\x2e\x33\x39\x2e\x30\ +\x32\x2e\x35\x38\x2e\x30\x34\x2e\x39\x37\x2e\x30\x35\x2c\x31\x2e\ +\x39\x33\x2e\x30\x39\x2c\x32\x2e\x39\x2e\x31\x32\x2e\x34\x31\x2e\ +\x30\x32\x2e\x38\x32\x2e\x30\x33\x2c\x31\x2e\x32\x33\x2e\x30\x34\ +\x2e\x37\x38\x2e\x30\x32\x2c\x31\x2e\x35\x35\x2e\x30\x33\x2c\x32\ +\x2e\x33\x33\x2e\x30\x34\x2e\x36\x2c\x30\x2c\x31\x2e\x31\x39\x2e\ +\x30\x31\x2c\x31\x2e\x37\x39\x2e\x30\x31\x73\x31\x2e\x32\x2c\x30\ +\x2c\x31\x2e\x37\x39\x2d\x2e\x30\x31\x63\x2e\x37\x37\x2c\x30\x2c\ +\x31\x2e\x35\x35\x2d\x2e\x30\x32\x2c\x32\x2e\x33\x33\x2d\x2e\x30\ +\x34\x2e\x34\x31\x2d\x2e\x30\x31\x2e\x38\x32\x2d\x2e\x30\x33\x2c\ +\x31\x2e\x32\x33\x2d\x2e\x30\x34\x2e\x39\x36\x2d\x2e\x30\x33\x2c\ +\x31\x2e\x39\x33\x2d\x2e\x30\x37\x2c\x32\x2e\x39\x2d\x2e\x31\x32\ +\x2e\x32\x2d\x2e\x30\x31\x2e\x33\x39\x2d\x2e\x30\x32\x2e\x35\x38\ +\x2d\x2e\x30\x34\x2c\x38\x2e\x37\x2d\x2e\x35\x2c\x31\x37\x2e\x34\ +\x39\x2d\x31\x2e\x37\x33\x2c\x32\x36\x2e\x33\x2d\x33\x2e\x37\x37\ +\x2c\x30\x2d\x2e\x30\x32\x2c\x30\x2d\x2e\x30\x35\x2c\x30\x2d\x2e\ +\x30\x37\x2c\x35\x37\x2e\x31\x31\x2d\x31\x33\x2e\x35\x2c\x31\x30\ +\x34\x2e\x31\x33\x2d\x35\x39\x2e\x32\x31\x2c\x31\x31\x37\x2e\x36\ +\x37\x2d\x31\x32\x30\x2e\x36\x34\x2c\x35\x2e\x37\x32\x2d\x32\x35\ +\x2e\x39\x31\x2c\x35\x2e\x31\x32\x2d\x35\x30\x2e\x30\x34\x2d\x33\ +\x2e\x32\x31\x2d\x37\x34\x2e\x39\x32\x5a\x4d\x31\x39\x35\x2e\x31\ +\x2c\x33\x32\x37\x2e\x37\x35\x63\x30\x2d\x32\x38\x2e\x39\x32\x2c\ +\x31\x35\x2e\x32\x37\x2d\x35\x31\x2e\x35\x31\x2c\x34\x33\x2e\x34\ +\x36\x2d\x35\x31\x2e\x35\x31\x2c\x32\x35\x2e\x32\x38\x2c\x30\x2c\ +\x34\x33\x2e\x30\x39\x2c\x31\x37\x2e\x35\x37\x2c\x34\x33\x2e\x30\ +\x39\x2c\x35\x31\x2e\x34\x34\x2c\x30\x2c\x33\x30\x2e\x37\x2d\x31\ +\x35\x2e\x38\x39\x2c\x35\x31\x2e\x39\x39\x2d\x34\x33\x2e\x33\x36\ +\x2c\x35\x31\x2e\x39\x39\x2d\x32\x35\x2e\x39\x39\x2c\x30\x2d\x34\ +\x33\x2e\x31\x39\x2d\x31\x37\x2e\x37\x37\x2d\x34\x33\x2e\x31\x39\ +\x2d\x35\x31\x2e\x39\x32\x5a\x4d\x32\x36\x33\x2e\x33\x36\x2c\x34\ +\x35\x38\x2e\x39\x36\x68\x2d\x32\x35\x2e\x34\x34\x6c\x39\x38\x2e\ +\x35\x33\x2d\x31\x37\x39\x2e\x36\x38\x68\x32\x35\x2e\x36\x33\x6c\ +\x2d\x39\x38\x2e\x37\x32\x2c\x31\x37\x39\x2e\x36\x38\x5a\x4d\x33\ +\x36\x31\x2e\x35\x34\x2c\x34\x36\x32\x2e\x35\x31\x63\x2d\x32\x36\ +\x2e\x30\x34\x2c\x30\x2d\x34\x33\x2e\x31\x39\x2d\x31\x37\x2e\x39\ +\x33\x2d\x34\x33\x2e\x31\x39\x2d\x35\x31\x2e\x39\x33\x2c\x30\x2d\ +\x32\x38\x2e\x39\x32\x2c\x31\x35\x2e\x32\x34\x2d\x35\x31\x2e\x35\ +\x31\x2c\x34\x33\x2e\x34\x36\x2d\x35\x31\x2e\x35\x31\x2c\x32\x35\ +\x2e\x33\x34\x2c\x30\x2c\x34\x33\x2e\x30\x39\x2c\x31\x37\x2e\x35\ +\x38\x2c\x34\x33\x2e\x30\x39\x2c\x35\x31\x2e\x34\x35\x2c\x30\x2c\ +\x33\x30\x2e\x36\x36\x2d\x31\x35\x2e\x38\x36\x2c\x35\x31\x2e\x39\ +\x39\x2d\x34\x33\x2e\x33\x36\x2c\x35\x31\x2e\x39\x39\x5a\x22\x2f\ +\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\xc2\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9246,97 +8487,74 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x31\x2e\x32\x32\x2c\x35\x35\ -\x34\x2e\x39\x34\x63\x2d\x32\x2e\x34\x37\x2c\x30\x2d\x34\x2e\x39\ -\x33\x2d\x2e\x30\x37\x2d\x37\x2e\x33\x39\x2d\x2e\x30\x37\x48\x31\ -\x32\x36\x63\x2d\x32\x2e\x34\x36\x2c\x30\x2d\x34\x2e\x39\x33\x2c\ -\x30\x2d\x37\x2e\x33\x39\x2e\x30\x37\x2d\x32\x30\x2e\x33\x37\x2d\ -\x2e\x37\x39\x2d\x34\x30\x2d\x34\x2e\x36\x38\x2d\x35\x37\x2e\x35\ -\x36\x2d\x31\x35\x2e\x35\x33\x2d\x32\x39\x2e\x33\x37\x2d\x31\x38\ -\x2e\x31\x39\x2d\x34\x32\x2e\x34\x35\x2d\x34\x34\x2e\x39\x34\x2d\ -\x34\x30\x2d\x37\x39\x2e\x32\x37\x2c\x31\x2e\x33\x36\x2d\x31\x39\ -\x2c\x38\x2d\x33\x36\x2e\x33\x37\x2c\x31\x37\x2e\x34\x35\x2d\x35\ -\x32\x2e\x37\x51\x31\x32\x36\x2e\x36\x37\x2c\x32\x35\x34\x2e\x35\ -\x35\x2c\x32\x31\x35\x2c\x31\x30\x31\x2e\x37\x35\x63\x31\x30\x2e\ -\x32\x36\x2d\x31\x37\x2e\x37\x33\x2c\x32\x33\x2e\x33\x35\x2d\x33\ -\x33\x2c\x34\x31\x2d\x34\x33\x2e\x38\x34\x2c\x33\x32\x2e\x30\x38\ -\x2d\x31\x39\x2e\x36\x35\x2c\x36\x39\x2e\x32\x34\x2d\x31\x36\x2e\ -\x35\x39\x2c\x39\x38\x2e\x38\x39\x2c\x38\x61\x31\x33\x31\x2e\x32\ -\x39\x2c\x31\x33\x31\x2e\x32\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ -\x39\x2e\x39\x2c\x33\x35\x2e\x39\x32\x51\x34\x37\x33\x2e\x33\x34\ -\x2c\x32\x35\x35\x2c\x35\x36\x31\x2e\x37\x34\x2c\x34\x30\x38\x2e\ -\x32\x33\x61\x31\x32\x39\x2e\x38\x36\x2c\x31\x32\x39\x2e\x38\x36\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\x2e\x34\x39\x2c\x34\x36\x2e\ -\x32\x39\x63\x35\x2e\x39\x2c\x34\x30\x2e\x31\x37\x2d\x31\x34\x2e\ -\x31\x35\x2c\x37\x35\x2e\x35\x35\x2d\x35\x31\x2e\x38\x34\x2c\x39\ -\x31\x2e\x32\x43\x35\x31\x31\x2e\x39\x34\x2c\x35\x35\x31\x2e\x37\ -\x32\x2c\x34\x39\x36\x2e\x37\x39\x2c\x35\x35\x34\x2e\x33\x38\x2c\ -\x34\x38\x31\x2e\x32\x32\x2c\x35\x35\x34\x2e\x39\x34\x5a\x4d\x32\ -\x39\x37\x2e\x30\x38\x2c\x35\x30\x34\x2e\x30\x37\x68\x31\x30\x32\ -\x63\x32\x35\x2e\x39\x34\x2c\x30\x2c\x35\x31\x2e\x38\x37\x2e\x30\ -\x39\x2c\x37\x37\x2e\x38\x2d\x2e\x30\x38\x2c\x31\x30\x2e\x36\x38\ -\x2d\x2e\x30\x36\x2c\x32\x31\x2e\x31\x38\x2d\x31\x2e\x36\x31\x2c\ -\x33\x31\x2e\x30\x35\x2d\x36\x2e\x30\x37\x2c\x31\x35\x2e\x34\x38\ -\x2d\x37\x2c\x32\x32\x2e\x31\x32\x2d\x31\x39\x2e\x33\x37\x2c\x31\ -\x39\x2e\x36\x33\x2d\x33\x36\x2e\x31\x32\x2d\x31\x2e\x36\x38\x2d\ -\x31\x31\x2e\x33\x37\x2d\x36\x2e\x32\x35\x2d\x32\x31\x2e\x35\x38\ -\x2d\x31\x31\x2e\x39\x32\x2d\x33\x31\x2e\x34\x31\x4c\x34\x31\x31\ -\x2e\x38\x39\x2c\x32\x35\x30\x2e\x37\x31\x71\x2d\x33\x35\x2e\x37\ -\x36\x2d\x36\x31\x2e\x38\x39\x2d\x37\x31\x2e\x35\x35\x2d\x31\x32\ -\x33\x2e\x37\x37\x63\x2d\x35\x2e\x32\x33\x2d\x39\x2d\x31\x31\x2e\ -\x37\x2d\x31\x37\x2e\x30\x37\x2d\x32\x30\x2e\x31\x36\x2d\x32\x33\ -\x2e\x33\x32\x2d\x31\x33\x2e\x36\x33\x2d\x31\x30\x2e\x30\x35\x2d\ -\x32\x37\x2e\x33\x33\x2d\x31\x30\x2d\x34\x30\x2e\x38\x35\x2e\x32\ -\x32\x2d\x39\x2e\x34\x33\x2c\x37\x2e\x31\x31\x2d\x31\x36\x2e\x31\ -\x34\x2c\x31\x36\x2e\x34\x38\x2d\x32\x32\x2c\x32\x36\x2e\x35\x38\ -\x51\x31\x37\x30\x2e\x36\x38\x2c\x32\x38\x30\x2e\x35\x37\x2c\x38\ -\x34\x2c\x34\x33\x30\x2e\x37\x41\x31\x30\x33\x2e\x39\x33\x2c\x31\ -\x30\x33\x2e\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x35\x2c\x34\ -\x35\x30\x63\x2d\x32\x2e\x35\x34\x2c\x37\x2e\x36\x34\x2d\x34\x2c\ -\x31\x35\x2e\x34\x37\x2d\x32\x2e\x38\x38\x2c\x32\x33\x2e\x35\x32\ -\x43\x37\x34\x2c\x34\x38\x36\x2e\x38\x38\x2c\x38\x32\x2e\x36\x38\ -\x2c\x34\x39\x34\x2e\x34\x2c\x39\x34\x2e\x35\x33\x2c\x34\x39\x39\ -\x63\x31\x30\x2e\x31\x35\x2c\x34\x2c\x32\x30\x2e\x37\x39\x2c\x35\ -\x2c\x33\x31\x2e\x35\x37\x2c\x35\x51\x32\x31\x31\x2e\x36\x2c\x35\ -\x30\x34\x2e\x30\x39\x2c\x32\x39\x37\x2e\x30\x38\x2c\x35\x30\x34\ -\x2e\x30\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x39\x2e\x36\x33\x2c\x36\x34\ +\x2e\x33\x63\x30\x2c\x31\x31\x2e\x39\x2c\x30\x2c\x32\x32\x2e\x36\ +\x35\x2c\x30\x2c\x33\x33\x2e\x34\x2c\x30\x2c\x31\x35\x2e\x34\x38\ +\x2d\x2e\x34\x2c\x33\x31\x2c\x2e\x31\x34\x2c\x34\x36\x2e\x34\x35\ +\x2c\x31\x2e\x33\x33\x2c\x33\x38\x2c\x32\x38\x2e\x34\x36\x2c\x36\ +\x34\x2e\x30\x37\x2c\x36\x36\x2e\x35\x36\x2c\x36\x34\x2e\x32\x33\ +\x2c\x32\x35\x2e\x30\x37\x2e\x31\x31\x2c\x35\x30\x2e\x31\x35\x2c\ +\x30\x2c\x37\x36\x2e\x38\x31\x2c\x30\x76\x33\x34\x2e\x35\x33\x71\ +\x30\x2c\x31\x32\x32\x2e\x35\x34\x2c\x30\x2c\x32\x34\x35\x2e\x30\ +\x37\x63\x30\x2c\x33\x33\x2e\x34\x35\x2d\x31\x34\x2e\x34\x39\x2c\ +\x34\x37\x2e\x36\x39\x2d\x34\x38\x2e\x32\x37\x2c\x34\x37\x2e\x37\ +\x71\x2d\x31\x33\x35\x2e\x39\x34\x2c\x30\x2d\x32\x37\x31\x2e\x39\ +\x2c\x30\x63\x2d\x33\x30\x2e\x36\x34\x2c\x30\x2d\x34\x36\x2d\x31\ +\x34\x2e\x39\x34\x2d\x34\x36\x2d\x34\x35\x2e\x32\x33\x71\x2d\x2e\ +\x31\x34\x2d\x31\x39\x30\x2e\x34\x37\x2c\x30\x2d\x33\x38\x31\x63\ +\x30\x2d\x33\x30\x2e\x33\x2c\x31\x35\x2e\x33\x38\x2d\x34\x35\x2e\ +\x31\x37\x2c\x34\x36\x2e\x30\x38\x2d\x34\x35\x2e\x31\x39\x71\x38\ +\x31\x2e\x39\x32\x2c\x30\x2c\x31\x36\x33\x2e\x38\x34\x2c\x30\x5a\ +\x4d\x33\x30\x30\x2c\x33\x36\x35\x2e\x39\x31\x63\x2d\x32\x39\x2c\ +\x30\x2d\x35\x38\x2e\x30\x35\x2e\x31\x2d\x38\x37\x2e\x30\x38\x2d\ +\x2e\x30\x36\x2d\x39\x2c\x30\x2d\x31\x36\x2e\x38\x31\x2c\x31\x2e\ +\x33\x37\x2d\x31\x36\x2e\x36\x38\x2c\x31\x32\x2e\x36\x31\x2e\x31\ +\x33\x2c\x31\x30\x2e\x38\x2c\x37\x2e\x36\x38\x2c\x31\x33\x2e\x31\ +\x2c\x31\x36\x2e\x37\x31\x2c\x31\x33\x2e\x30\x39\x48\x33\x38\x37\ +\x2e\x31\x31\x63\x39\x2c\x30\x2c\x31\x36\x2e\x35\x36\x2d\x32\x2e\ +\x33\x32\x2c\x31\x36\x2e\x36\x38\x2d\x31\x33\x2e\x31\x32\x2e\x31\ +\x32\x2d\x31\x31\x2e\x32\x37\x2d\x37\x2e\x37\x32\x2d\x31\x32\x2e\ +\x36\x31\x2d\x31\x36\x2e\x37\x32\x2d\x31\x32\x2e\x35\x37\x43\x33\ +\x35\x38\x2e\x30\x35\x2c\x33\x36\x36\x2c\x33\x32\x39\x2c\x33\x36\ +\x35\x2e\x39\x31\x2c\x33\x30\x30\x2c\x33\x36\x35\x2e\x39\x31\x5a\ +\x6d\x2d\x31\x2e\x30\x36\x2c\x37\x37\x2e\x33\x31\x63\x32\x39\x2e\ +\x38\x2c\x30\x2c\x35\x39\x2e\x36\x2d\x2e\x31\x2c\x38\x39\x2e\x34\ +\x2e\x30\x36\x2c\x38\x2e\x39\x34\x2e\x30\x35\x2c\x31\x35\x2e\x35\ +\x38\x2d\x32\x2e\x33\x36\x2c\x31\x35\x2e\x34\x38\x2d\x31\x32\x2e\ +\x36\x35\x2d\x2e\x31\x2d\x31\x30\x2e\x31\x33\x2d\x37\x2e\x30\x36\ +\x2d\x31\x33\x2d\x31\x35\x2e\x36\x35\x2d\x31\x33\x71\x2d\x38\x38\ +\x2e\x32\x35\x2d\x2e\x31\x31\x2d\x31\x37\x36\x2e\x34\x38\x2c\x30\ +\x63\x2d\x38\x2e\x36\x36\x2c\x30\x2d\x31\x35\x2e\x34\x37\x2c\x33\ +\x2e\x30\x38\x2d\x31\x35\x2e\x34\x37\x2c\x31\x33\x2e\x31\x37\x2c\ +\x30\x2c\x31\x30\x2e\x33\x34\x2c\x36\x2e\x37\x38\x2c\x31\x32\x2e\ +\x35\x33\x2c\x31\x35\x2e\x36\x35\x2c\x31\x32\x2e\x34\x38\x43\x32\ +\x34\x30\x2e\x38\x38\x2c\x34\x34\x33\x2e\x31\x32\x2c\x32\x36\x39\ +\x2e\x39\x31\x2c\x34\x34\x33\x2e\x32\x32\x2c\x32\x39\x38\x2e\x39\ +\x33\x2c\x34\x34\x33\x2e\x32\x32\x5a\x4d\x32\x34\x37\x2e\x37\x39\ +\x2c\x33\x33\x38\x2e\x36\x34\x71\x31\x39\x2e\x31\x34\x2c\x30\x2c\ +\x33\x38\x2e\x32\x38\x2c\x30\x63\x37\x2e\x37\x34\x2c\x30\x2c\x31\ +\x32\x2e\x35\x38\x2d\x33\x2e\x33\x37\x2c\x31\x33\x2e\x31\x35\x2d\ +\x31\x31\x2e\x34\x33\x2e\x36\x32\x2d\x38\x2e\x36\x34\x2d\x34\x2e\ +\x34\x2d\x31\x33\x2e\x37\x2d\x31\x32\x2e\x31\x39\x2d\x31\x33\x2e\ +\x38\x36\x71\x2d\x33\x39\x2e\x34\x32\x2d\x2e\x38\x2d\x37\x38\x2e\ +\x38\x35\x2c\x30\x63\x2d\x37\x2e\x38\x32\x2e\x31\x37\x2d\x31\x32\ +\x2e\x36\x39\x2c\x35\x2e\x34\x35\x2d\x31\x32\x2c\x31\x34\x2c\x2e\ +\x36\x36\x2c\x38\x2e\x30\x38\x2c\x35\x2e\x36\x33\x2c\x31\x31\x2e\ +\x33\x2c\x31\x33\x2e\x33\x33\x2c\x31\x31\x2e\x32\x36\x43\x32\x32\ +\x32\x2e\x32\x38\x2c\x33\x33\x38\x2e\x36\x2c\x32\x33\x35\x2c\x33\ +\x33\x38\x2e\x36\x34\x2c\x32\x34\x37\x2e\x37\x39\x2c\x33\x33\x38\ +\x2e\x36\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ \x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x31\x38\x2e\x36\x2c\x33\x30\x34\x2e\x38\x34\x71\x2d\x31\x2e\x35\ -\x38\x2c\x34\x35\x2e\x38\x32\x2d\x33\x2e\x30\x39\x2c\x39\x31\x2e\ -\x36\x36\x63\x2d\x2e\x30\x37\x2c\x32\x2e\x32\x36\x2d\x2e\x37\x34\ -\x2c\x32\x2e\x37\x37\x2d\x32\x2e\x39\x31\x2c\x32\x2e\x37\x35\x2d\ -\x31\x31\x2e\x33\x2d\x2e\x31\x31\x2d\x32\x32\x2e\x36\x2d\x2e\x31\ -\x36\x2d\x33\x33\x2e\x39\x2c\x30\x2d\x32\x2e\x36\x37\x2c\x30\x2d\ -\x33\x2e\x30\x38\x2d\x2e\x39\x2d\x33\x2e\x31\x34\x2d\x33\x2e\x31\ -\x38\x2d\x2e\x35\x37\x2d\x31\x39\x2e\x31\x37\x2d\x31\x2e\x32\x33\ -\x2d\x33\x38\x2e\x33\x34\x2d\x31\x2e\x38\x38\x2d\x35\x37\x2e\x35\ -\x31\x71\x2d\x31\x2e\x35\x39\x2d\x34\x37\x2e\x36\x38\x2d\x33\x2e\ -\x32\x31\x2d\x39\x35\x2e\x33\x36\x63\x2d\x2e\x33\x34\x2d\x31\x30\ -\x2e\x32\x35\x2d\x2e\x35\x39\x2d\x32\x30\x2e\x35\x2d\x31\x2d\x33\ -\x30\x2e\x37\x35\x2d\x2e\x30\x37\x2d\x31\x2e\x38\x2e\x36\x33\x2d\ -\x31\x2e\x39\x34\x2c\x32\x2e\x30\x38\x2d\x31\x2e\x39\x34\x71\x32\ -\x33\x2e\x39\x34\x2e\x30\x36\x2c\x34\x37\x2e\x38\x36\x2c\x30\x63\ -\x31\x2e\x39\x32\x2c\x30\x2c\x32\x2e\x33\x33\x2e\x35\x34\x2c\x32\ -\x2e\x32\x36\x2c\x32\x2e\x33\x37\x2d\x2e\x35\x33\x2c\x31\x34\x2e\ -\x34\x32\x2d\x2e\x39\x34\x2c\x32\x38\x2e\x38\x34\x2d\x31\x2e\x34\ -\x32\x2c\x34\x33\x2e\x32\x37\x71\x2d\x2e\x38\x31\x2c\x32\x34\x2e\ -\x33\x33\x2d\x31\x2e\x36\x39\x2c\x34\x38\x2e\x36\x37\x5a\x22\x2f\ -\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x36\x36\x2c\x34\x34\x38\ -\x63\x2e\x31\x2d\x31\x36\x2c\x39\x2e\x37\x37\x2d\x32\x38\x2c\x32\ -\x34\x2e\x35\x36\x2d\x33\x30\x2e\x36\x39\x61\x32\x38\x2e\x38\x31\ -\x2c\x32\x38\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x33\x2e\ -\x38\x34\x2c\x32\x34\x2e\x33\x34\x63\x31\x2e\x35\x37\x2c\x31\x31\ -\x2d\x2e\x34\x33\x2c\x32\x31\x2e\x31\x33\x2d\x38\x2e\x38\x34\x2c\ -\x32\x38\x2e\x39\x32\x2d\x39\x2e\x31\x33\x2c\x38\x2e\x34\x36\x2d\ -\x32\x30\x2c\x31\x30\x2e\x30\x38\x2d\x33\x31\x2e\x34\x35\x2c\x35\ -\x2e\x36\x37\x43\x32\x37\x33\x2c\x34\x37\x32\x2c\x32\x36\x37\x2e\ -\x36\x35\x2c\x34\x36\x33\x2e\x31\x33\x2c\x32\x36\x36\x2e\x32\x34\ -\x2c\x34\x35\x31\x2e\x36\x33\x2c\x32\x36\x36\x2e\x30\x38\x2c\x34\ -\x35\x30\x2e\x33\x32\x2c\x32\x36\x36\x2e\x30\x37\x2c\x34\x34\x39\ -\x2c\x32\x36\x36\x2c\x34\x34\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ -\x67\x3e\ -\x00\x00\x04\xec\ +\x37\x35\x2e\x34\x32\x2c\x38\x30\x2e\x31\x38\x6c\x39\x32\x2e\x30\ +\x38\x2c\x39\x31\x2e\x34\x63\x2d\x32\x34\x2e\x32\x37\x2d\x31\x2e\ +\x32\x36\x2d\x34\x36\x2d\x2e\x39\x34\x2d\x36\x37\x2e\x32\x36\x2d\ +\x34\x2d\x31\x33\x2e\x33\x31\x2d\x31\x2e\x39\x34\x2d\x32\x33\x2d\ +\x31\x33\x2e\x33\x38\x2d\x32\x34\x2e\x33\x32\x2d\x32\x36\x2e\x35\ +\x39\x43\x33\x37\x34\x2c\x31\x32\x30\x2e\x38\x39\x2c\x33\x37\x35\ +\x2e\x34\x32\x2c\x31\x30\x30\x2e\x35\x31\x2c\x33\x37\x35\x2e\x34\ +\x32\x2c\x38\x30\x2e\x31\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ +\x3e\ +\x00\x00\x07\xb0\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9348,76 +8566,120 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x33\x36\x2c\x31\x38\ -\x31\x2e\x36\x35\x68\x32\x31\x38\x2e\x35\x63\x39\x2e\x35\x37\x2c\ -\x30\x2c\x31\x38\x2e\x37\x32\x2c\x31\x2e\x35\x32\x2c\x32\x36\x2e\ -\x36\x35\x2c\x37\x2e\x33\x34\x2c\x31\x30\x2e\x36\x2c\x37\x2e\x37\ -\x39\x2c\x31\x36\x2e\x35\x35\x2c\x31\x38\x2e\x31\x33\x2c\x31\x36\ -\x2e\x34\x35\x2c\x33\x31\x2e\x34\x37\x2d\x2e\x36\x33\x2c\x38\x30\ -\x2e\x33\x34\x2d\x2e\x32\x37\x2c\x31\x36\x30\x2e\x36\x38\x2d\x2e\ -\x33\x39\x2c\x32\x34\x31\x61\x35\x33\x2e\x35\x37\x2c\x35\x33\x2e\ -\x35\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x35\x33\x2e\x38\x35\x2c\x35\ -\x33\x2e\x36\x35\x6c\x2d\x33\x36\x38\x2e\x33\x34\x2e\x30\x39\x63\ -\x2d\x31\x37\x2e\x36\x36\x2c\x30\x2d\x33\x35\x2e\x33\x33\x2d\x2e\ -\x32\x33\x2d\x35\x33\x2c\x30\x2d\x32\x31\x2e\x36\x2e\x32\x32\x2d\ -\x33\x37\x2e\x34\x31\x2d\x39\x2e\x33\x32\x2d\x34\x38\x2e\x31\x33\ -\x2d\x32\x37\x2e\x37\x37\x61\x31\x31\x30\x2e\x33\x35\x2c\x31\x31\ -\x30\x2e\x33\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x35\x2e\x33\x35\x2d\ -\x31\x30\x2e\x38\x63\x2d\x31\x2d\x32\x2e\x32\x38\x2d\x32\x2e\x36\ -\x37\x2d\x37\x2d\x32\x2e\x36\x37\x2d\x39\x2e\x34\x35\x71\x30\x2d\ -\x31\x32\x33\x2e\x32\x32\x2d\x2e\x30\x37\x2d\x32\x34\x36\x2e\x34\ -\x35\x61\x33\x30\x2e\x32\x34\x2c\x33\x30\x2e\x32\x34\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x32\x2e\x35\x2d\x31\x32\x2e\x31\x63\x36\x2e\x35\ -\x2d\x31\x35\x2e\x33\x34\x2c\x31\x38\x2e\x32\x39\x2d\x32\x33\x2e\ -\x36\x38\x2c\x33\x34\x2e\x34\x38\x2d\x32\x36\x2e\x33\x31\x2c\x39\ -\x2e\x37\x31\x2d\x31\x2e\x35\x39\x2c\x31\x39\x2e\x35\x2d\x31\x2e\ -\x30\x36\x2c\x32\x39\x2e\x32\x36\x2d\x31\x2e\x30\x38\x2e\x36\x37\ -\x2c\x30\x2c\x31\x2e\x33\x33\x2c\x30\x2c\x32\x2c\x30\x2c\x32\x30\ -\x2e\x37\x2e\x30\x38\x2c\x34\x31\x2e\x34\x2e\x31\x39\x2c\x36\x32\ -\x2e\x30\x39\x2e\x32\x71\x36\x39\x2e\x39\x33\x2c\x30\x2c\x31\x33\ -\x39\x2e\x38\x37\x2c\x30\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2c\x31\x35\x32\x2e\x38\ +\x38\x41\x31\x39\x31\x2e\x31\x35\x2c\x31\x39\x31\x2e\x31\x35\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x34\x39\x31\x2e\x32\x39\x2c\x33\x34\x34\ +\x2e\x34\x31\x63\x2d\x2e\x31\x31\x2c\x31\x30\x35\x2e\x36\x35\x2d\ +\x38\x35\x2e\x38\x31\x2c\x31\x39\x31\x2e\x32\x31\x2d\x31\x39\x31\ +\x2e\x34\x35\x2c\x31\x39\x31\x2e\x31\x73\x2d\x31\x39\x31\x2e\x32\ +\x33\x2d\x38\x35\x2e\x38\x2d\x31\x39\x31\x2e\x31\x33\x2d\x31\x39\ +\x31\x2e\x34\x33\x41\x31\x39\x31\x2e\x31\x37\x2c\x31\x39\x31\x2e\ +\x31\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\x30\x2c\x31\x35\x32\ +\x2e\x38\x38\x5a\x6d\x2d\x2e\x31\x32\x2c\x33\x36\x2e\x31\x41\x31\ +\x35\x35\x2e\x32\x2c\x31\x35\x35\x2e\x32\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x31\x34\x34\x2e\x37\x37\x2c\x33\x34\x34\x2e\x31\x33\x63\x30\ +\x2c\x38\x35\x2e\x35\x36\x2c\x36\x39\x2e\x34\x38\x2c\x31\x35\x35\ +\x2e\x32\x35\x2c\x31\x35\x34\x2e\x38\x32\x2c\x31\x35\x35\x2e\x33\ +\x2c\x38\x36\x2c\x2e\x30\x35\x2c\x31\x35\x35\x2e\x36\x2d\x36\x39\ +\x2e\x33\x36\x2c\x31\x35\x35\x2e\x36\x34\x2d\x31\x35\x35\x2e\x32\ +\x31\x41\x31\x35\x35\x2e\x31\x39\x2c\x31\x35\x35\x2e\x31\x39\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x32\x39\x39\x2e\x39\x32\x2c\x31\x38\x39\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2e\ +\x31\x32\x2c\x36\x34\x2e\x35\x71\x31\x37\x2e\x30\x36\x2c\x30\x2c\ +\x33\x34\x2e\x31\x31\x2c\x30\x63\x39\x2e\x31\x37\x2c\x30\x2c\x31\ +\x35\x2e\x33\x35\x2c\x36\x2e\x31\x2c\x31\x35\x2e\x34\x31\x2c\x31\ +\x35\x2e\x33\x2e\x30\x37\x2c\x31\x30\x2e\x31\x37\x2c\x30\x2c\x32\ +\x30\x2e\x33\x34\x2e\x30\x36\x2c\x33\x30\x2e\x35\x31\x2c\x30\x2c\ +\x31\x2e\x37\x35\x2d\x2e\x35\x38\x2c\x32\x2e\x31\x32\x2d\x32\x2e\ +\x31\x39\x2c\x32\x2e\x31\x2d\x35\x2e\x32\x31\x2c\x30\x2d\x31\x30\ +\x2e\x34\x31\x2e\x31\x34\x2d\x31\x35\x2e\x36\x32\x2e\x30\x36\x2d\ +\x31\x2e\x39\x2c\x30\x2d\x32\x2e\x35\x38\x2e\x34\x2d\x32\x2e\x35\ +\x33\x2c\x32\x2e\x34\x38\x2e\x31\x34\x2c\x37\x2c\x30\x2c\x31\x33\ +\x2e\x39\x33\x2e\x30\x39\x2c\x32\x30\x2e\x39\x2c\x30\x2c\x31\x2e\ +\x37\x32\x2d\x2e\x31\x39\x2c\x32\x2e\x33\x2d\x32\x2e\x32\x2c\x32\ +\x2d\x31\x35\x2e\x36\x36\x2d\x32\x2e\x33\x2d\x33\x31\x2e\x33\x37\ +\x2d\x33\x2d\x34\x37\x2e\x31\x32\x2d\x2e\x38\x37\x2d\x32\x2e\x35\ +\x33\x2e\x33\x33\x2d\x35\x2e\x30\x39\x2e\x35\x34\x2d\x37\x2e\x36\ +\x31\x2e\x39\x35\x2d\x31\x2e\x34\x33\x2e\x32\x34\x2d\x31\x2e\x39\ +\x35\x2c\x30\x2d\x31\x2e\x39\x33\x2d\x31\x2e\x36\x32\x2e\x30\x39\ +\x2d\x37\x2e\x32\x2c\x30\x2d\x31\x34\x2e\x34\x31\x2e\x30\x39\x2d\ +\x32\x31\x2e\x36\x32\x2c\x30\x2d\x31\x2e\x38\x36\x2d\x2e\x35\x33\ +\x2d\x32\x2e\x32\x34\x2d\x32\x2e\x32\x38\x2d\x32\x2e\x32\x32\x2d\ +\x35\x2e\x33\x36\x2e\x30\x37\x2d\x31\x30\x2e\x37\x32\x2d\x2e\x31\ +\x31\x2d\x31\x36\x2e\x30\x39\x2d\x2e\x30\x37\x2d\x31\x2e\x35\x31\ +\x2c\x30\x2d\x31\x2e\x38\x36\x2d\x2e\x34\x35\x2d\x31\x2e\x38\x35\ +\x2d\x31\x2e\x39\x2e\x30\x36\x2d\x31\x30\x2e\x34\x39\x2c\x30\x2d\ +\x32\x31\x2c\x30\x2d\x33\x31\x2e\x34\x37\x61\x31\x34\x2e\x36\x31\ +\x2c\x31\x34\x2e\x36\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x34\x2e\ +\x35\x34\x2d\x31\x34\x2e\x35\x32\x43\x32\x37\x36\x2e\x37\x34\x2c\ +\x36\x34\x2e\x34\x36\x2c\x32\x38\x38\x2e\x34\x33\x2c\x36\x34\x2e\ +\x35\x2c\x33\x30\x30\x2e\x31\x32\x2c\x36\x34\x2e\x35\x5a\x22\x2f\ +\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x38\x2e\x33\x33\x2c\ +\x31\x30\x39\x2e\x34\x38\x61\x31\x34\x2e\x39\x33\x2c\x31\x34\x2e\ +\x39\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x32\x2e\x34\x33\x2c\x37\ +\x2e\x37\x63\x35\x2e\x31\x2c\x38\x2e\x36\x37\x2c\x31\x30\x2e\x30\ +\x37\x2c\x31\x37\x2e\x34\x32\x2c\x31\x35\x2e\x31\x35\x2c\x32\x36\ +\x2e\x31\x31\x2e\x36\x37\x2c\x31\x2e\x31\x35\x2e\x35\x38\x2c\x31\ +\x2e\x36\x39\x2d\x2e\x36\x34\x2c\x32\x2e\x33\x39\x71\x2d\x32\x35\ +\x2e\x38\x36\x2c\x31\x34\x2e\x38\x35\x2d\x35\x31\x2e\x36\x35\x2c\ +\x32\x39\x2e\x38\x32\x63\x2d\x31\x2e\x34\x32\x2e\x38\x32\x2d\x32\ +\x2c\x2e\x34\x39\x2d\x32\x2e\x37\x32\x2d\x2e\x38\x32\x2d\x34\x2e\ +\x37\x37\x2d\x38\x2e\x34\x2d\x39\x2e\x36\x38\x2d\x31\x36\x2e\x37\ +\x32\x2d\x31\x34\x2e\x34\x36\x2d\x32\x35\x2e\x31\x32\x73\x2d\x32\ +\x2e\x33\x31\x2d\x31\x37\x2e\x36\x34\x2c\x36\x2d\x32\x32\x2e\x35\ +\x31\x63\x38\x2e\x37\x36\x2d\x35\x2e\x31\x2c\x31\x37\x2e\x35\x37\ +\x2d\x31\x30\x2e\x31\x34\x2c\x32\x36\x2e\x33\x34\x2d\x31\x35\x2e\ +\x32\x32\x41\x31\x37\x2e\x31\x33\x2c\x31\x37\x2e\x31\x33\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x38\x38\x2e\x33\x33\x2c\x31\x30\x39\x2e\ +\x34\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x31\ +\x30\x2e\x32\x36\x2c\x31\x30\x39\x2e\x34\x36\x61\x31\x35\x2e\x38\ +\x38\x2c\x31\x35\x2e\x38\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x38\x2e\ +\x33\x36\x2c\x32\x63\x39\x2e\x32\x36\x2c\x35\x2e\x33\x35\x2c\x31\ +\x38\x2e\x35\x39\x2c\x31\x30\x2e\x36\x2c\x32\x37\x2e\x37\x38\x2c\ +\x31\x36\x2e\x30\x38\x61\x31\x35\x2e\x34\x34\x2c\x31\x35\x2e\x34\ +\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x35\x2e\x38\x2c\x32\x30\x2e\x39\ +\x63\x2d\x34\x2e\x39\x31\x2c\x39\x2d\x31\x30\x2e\x31\x37\x2c\x31\ +\x37\x2e\x37\x33\x2d\x31\x35\x2e\x32\x34\x2c\x32\x36\x2e\x36\x2d\ +\x2e\x36\x34\x2c\x31\x2e\x31\x33\x2d\x31\x2e\x31\x36\x2c\x31\x2e\ +\x31\x36\x2d\x32\x2e\x32\x33\x2e\x35\x33\x71\x2d\x32\x35\x2e\x39\ +\x32\x2d\x31\x35\x2d\x35\x31\x2e\x38\x38\x2d\x32\x39\x2e\x39\x31\ +\x63\x2d\x31\x2e\x31\x35\x2d\x2e\x36\x36\x2d\x31\x2e\x34\x2d\x31\ +\x2e\x31\x37\x2d\x2e\x36\x39\x2d\x32\x2e\x33\x38\x2c\x35\x2e\x31\ +\x33\x2d\x38\x2e\x37\x35\x2c\x31\x30\x2e\x31\x32\x2d\x31\x37\x2e\ +\x35\x38\x2c\x31\x35\x2e\x33\x2d\x32\x36\x2e\x33\x41\x31\x35\x2c\ +\x31\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x31\x30\x2e\x32\x36\x2c\ +\x31\x30\x39\x2e\x34\x36\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ \x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x35\x36\x32\x2e\x31\x39\x2c\x31\x38\x32\x2e\x35\x63\x2d\ -\x37\x2e\x37\x35\x2d\x38\x2e\x38\x38\x2d\x31\x37\x2e\x37\x39\x2d\ -\x31\x33\x2e\x35\x36\x2d\x32\x39\x2e\x31\x36\x2d\x31\x35\x2e\x37\ -\x34\x61\x39\x34\x2e\x35\x31\x2c\x39\x34\x2e\x35\x31\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x31\x37\x2e\x38\x35\x2d\x31\x2e\x34\x34\x71\x2d\ -\x31\x37\x34\x2e\x34\x38\x2e\x30\x36\x2d\x33\x34\x39\x2c\x2e\x31\ -\x37\x63\x2d\x33\x30\x2e\x32\x2c\x30\x2d\x36\x30\x2e\x33\x39\x2d\ -\x2e\x31\x39\x2d\x39\x30\x2e\x35\x39\x2d\x2e\x31\x35\x2d\x39\x2e\ -\x39\x31\x2c\x30\x2d\x31\x39\x2e\x36\x35\x2c\x31\x2e\x33\x35\x2d\ -\x32\x38\x2e\x38\x37\x2c\x35\x2e\x33\x36\x61\x35\x34\x2e\x36\x36\ -\x2c\x35\x34\x2e\x36\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\ -\x34\x35\x2c\x36\x2e\x38\x63\x2d\x2e\x39\x35\x2e\x37\x33\x2d\x31\ -\x2e\x39\x2c\x31\x2e\x38\x31\x2d\x33\x2e\x32\x37\x2c\x31\x73\x2d\ -\x2e\x37\x34\x2d\x32\x2e\x30\x35\x2d\x2e\x37\x34\x2d\x33\x2e\x31\ -\x32\x63\x30\x2d\x31\x36\x2c\x30\x2d\x33\x31\x2e\x39\x31\x2d\x2e\ -\x30\x35\x2d\x34\x37\x2e\x38\x37\x61\x38\x2e\x37\x2c\x38\x2e\x37\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x2e\x31\x2d\x34\x2e\x33\x31\x63\ -\x33\x2e\x33\x33\x2d\x36\x2e\x31\x36\x2c\x36\x2e\x32\x32\x2d\x31\ -\x32\x2e\x35\x38\x2c\x31\x30\x2e\x36\x39\x2d\x31\x38\x2e\x30\x37\ -\x2c\x31\x30\x2e\x38\x38\x2d\x31\x33\x2e\x33\x37\x2c\x32\x35\x2e\ -\x30\x37\x2d\x31\x39\x2e\x39\x32\x2c\x34\x32\x2e\x32\x2d\x32\x30\ -\x71\x38\x30\x2d\x2e\x31\x39\x2c\x31\x36\x30\x2e\x31\x2d\x2e\x32\ -\x31\x63\x34\x2e\x31\x38\x2c\x30\x2c\x38\x2e\x33\x35\x2d\x2e\x31\ -\x36\x2c\x31\x32\x2e\x35\x32\x2d\x2e\x31\x39\x61\x31\x38\x2e\x33\ -\x32\x2c\x31\x38\x2e\x33\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\ -\x2e\x37\x39\x2c\x35\x2e\x36\x39\x63\x31\x30\x2e\x36\x38\x2c\x31\ -\x30\x2e\x39\x33\x2c\x32\x31\x2e\x36\x38\x2c\x32\x31\x2e\x35\x37\ -\x2c\x33\x32\x2e\x31\x2c\x33\x32\x2e\x37\x35\x2c\x36\x2c\x36\x2e\ -\x33\x39\x2c\x31\x33\x2c\x38\x2e\x34\x2c\x32\x31\x2e\x32\x35\x2c\ -\x37\x2e\x38\x35\x2e\x39\x34\x2d\x2e\x30\x36\x2c\x31\x2e\x38\x39\ -\x2d\x2e\x31\x33\x2c\x32\x2e\x38\x34\x2d\x2e\x31\x33\x2c\x34\x38\ -\x2e\x33\x33\x2c\x30\x2c\x39\x36\x2e\x36\x37\x2d\x2e\x31\x36\x2c\ -\x31\x34\x35\x2c\x30\x2c\x31\x32\x2e\x37\x31\x2c\x30\x2c\x32\x35\ -\x2e\x34\x35\x2d\x2e\x35\x34\x2c\x33\x38\x2e\x31\x34\x2e\x34\x34\ -\x2c\x32\x35\x2e\x32\x38\x2c\x31\x2e\x39\x35\x2c\x34\x31\x2e\x38\ -\x31\x2c\x31\x35\x2e\x33\x35\x2c\x34\x39\x2c\x33\x39\x2e\x36\x33\ -\x2e\x38\x31\x2c\x32\x2e\x37\x32\x2c\x31\x2e\x35\x32\x2c\x35\x2e\ -\x34\x38\x2c\x32\x2e\x31\x33\x2c\x38\x2e\x32\x35\x2e\x32\x32\x2c\ -\x31\x2c\x2e\x39\x31\x2c\x32\x2e\x31\x37\x2c\x30\x2c\x33\x2e\x32\ -\x34\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x02\xfb\ +\x22\x4d\x31\x37\x37\x2c\x33\x34\x34\x2e\x30\x38\x63\x30\x2d\x36\ +\x38\x2e\x32\x38\x2c\x35\x35\x2e\x32\x31\x2d\x31\x32\x33\x2c\x31\ +\x32\x34\x2d\x31\x32\x32\x2e\x39\x31\x2c\x36\x37\x2e\x32\x38\x2e\ +\x30\x37\x2c\x31\x32\x32\x2e\x31\x39\x2c\x35\x35\x2e\x35\x35\x2c\ +\x31\x32\x32\x2e\x31\x2c\x31\x32\x33\x2e\x33\x35\x2d\x2e\x31\x2c\ +\x36\x38\x2d\x35\x35\x2e\x34\x33\x2c\x31\x32\x32\x2e\x38\x33\x2d\ +\x31\x32\x33\x2e\x37\x34\x2c\x31\x32\x32\x2e\x37\x32\x43\x32\x33\ +\x32\x2c\x34\x36\x37\x2e\x31\x34\x2c\x31\x37\x36\x2e\x39\x32\x2c\ +\x34\x31\x31\x2e\x37\x34\x2c\x31\x37\x37\x2c\x33\x34\x34\x2e\x30\ +\x38\x5a\x4d\x33\x37\x30\x2e\x31\x2c\x32\x38\x31\x2e\x31\x35\x61\ +\x31\x35\x2e\x38\x38\x2c\x31\x35\x2e\x38\x38\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x34\x2e\x37\x38\x2e\x39\x63\x2d\x39\x2e\x35\x39\x2c\x32\ +\x2e\x38\x33\x2d\x31\x38\x2e\x36\x38\x2c\x36\x2e\x39\x32\x2d\x32\ +\x37\x2e\x36\x37\x2c\x31\x31\x2e\x32\x32\x2d\x31\x38\x2e\x38\x38\ +\x2c\x39\x2d\x33\x37\x2e\x34\x2c\x31\x38\x2e\x37\x2d\x35\x35\x2c\ +\x33\x30\x2d\x35\x2e\x35\x36\x2c\x33\x2e\x35\x37\x2d\x37\x2e\x36\ +\x34\x2c\x38\x2e\x37\x36\x2d\x36\x2e\x34\x35\x2c\x31\x34\x2e\x38\ +\x35\x2c\x33\x2c\x31\x35\x2e\x34\x2c\x31\x32\x2e\x33\x2c\x32\x35\ +\x2e\x37\x33\x2c\x32\x37\x2e\x30\x37\x2c\x33\x30\x2e\x37\x37\x2c\ +\x36\x2e\x36\x36\x2c\x32\x2e\x32\x37\x2c\x31\x32\x2e\x36\x32\x2e\ +\x37\x38\x2c\x31\x37\x2e\x32\x32\x2d\x35\x2e\x32\x38\x61\x35\x31\ +\x31\x2e\x39\x34\x2c\x35\x31\x31\x2e\x39\x34\x2c\x30\x2c\x30\x2c\ +\x30\x2c\x34\x31\x2e\x31\x2d\x36\x33\x2e\x32\x37\x43\x33\x36\x34\ +\x2e\x39\x31\x2c\x32\x39\x34\x2e\x32\x39\x2c\x33\x36\x38\x2e\x30\ +\x38\x2c\x32\x38\x38\x2e\x31\x31\x2c\x33\x37\x30\x2e\x31\x2c\x32\ +\x38\x31\x2e\x31\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x02\x21\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9427,47 +8689,34 @@ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x32\x38\x32\x2e\x35\x36\x2c\x32\x33\ -\x37\x63\x30\x2c\x32\x34\x2e\x37\x32\x2e\x38\x34\x2c\x34\x35\x2e\ -\x36\x37\x2d\x2e\x32\x31\x2c\x36\x36\x2e\x35\x32\x2d\x31\x2e\x34\ -\x38\x2c\x32\x39\x2e\x37\x36\x2d\x32\x32\x2e\x37\x34\x2c\x34\x32\ -\x2e\x31\x38\x2d\x34\x38\x2e\x36\x2c\x32\x37\x2e\x36\x71\x2d\x39\ -\x33\x2e\x32\x31\x2d\x35\x32\x2e\x35\x36\x2d\x31\x38\x35\x2e\x33\ -\x34\x2d\x31\x30\x37\x63\x2d\x32\x35\x2e\x36\x36\x2d\x31\x35\x2e\ -\x31\x35\x2d\x32\x36\x2e\x30\x37\x2d\x34\x30\x2e\x35\x36\x2d\x2e\ -\x37\x34\x2d\x35\x35\x2e\x35\x35\x51\x31\x33\x39\x2e\x37\x36\x2c\ -\x31\x31\x34\x2c\x32\x33\x33\x2c\x36\x31\x2e\x35\x32\x63\x32\x36\ -\x2e\x39\x33\x2d\x31\x35\x2e\x31\x38\x2c\x34\x38\x2e\x32\x38\x2d\ -\x32\x2e\x32\x34\x2c\x34\x39\x2e\x34\x2c\x32\x39\x2c\x2e\x37\x34\ -\x2c\x32\x30\x2e\x37\x33\x2e\x31\x34\x2c\x34\x31\x2e\x35\x31\x2e\ -\x31\x34\x2c\x36\x35\x2e\x31\x37\x2c\x31\x38\x2c\x30\x2d\x31\x34\ -\x2e\x35\x2c\x30\x2c\x2e\x34\x2c\x30\x2c\x36\x36\x2e\x33\x33\x2e\ -\x31\x2d\x31\x36\x2e\x34\x33\x2d\x2e\x33\x32\x2c\x34\x39\x2e\x38\ -\x39\x2e\x34\x34\x2c\x31\x33\x31\x2e\x33\x38\x2c\x31\x2e\x35\x31\ -\x2c\x32\x33\x34\x2e\x33\x38\x2c\x35\x39\x2e\x35\x2c\x32\x33\x38\ -\x2e\x31\x32\x2c\x31\x38\x37\x2c\x33\x2e\x37\x39\x2c\x31\x32\x39\ -\x2e\x34\x33\x2d\x39\x33\x2c\x31\x39\x32\x2e\x31\x35\x2d\x32\x32\ -\x34\x2e\x38\x38\x2c\x31\x39\x39\x2e\x37\x37\x2d\x35\x39\x2e\x34\ -\x32\x2c\x33\x2e\x34\x33\x2d\x31\x31\x39\x2e\x31\x38\x2c\x31\x2e\ -\x34\x39\x2d\x31\x37\x38\x2e\x37\x38\x2e\x38\x32\x2d\x32\x35\x2e\ -\x39\x2d\x2e\x32\x39\x2d\x34\x32\x2e\x38\x32\x2d\x31\x37\x2e\x33\ -\x38\x2d\x34\x33\x2e\x31\x35\x2d\x33\x39\x2e\x38\x37\x2d\x2e\x33\ -\x35\x2d\x32\x33\x2e\x34\x37\x2c\x31\x37\x2e\x33\x31\x2d\x34\x30\ -\x2e\x39\x2c\x34\x34\x2e\x33\x37\x2d\x34\x31\x2e\x32\x37\x2c\x35\ -\x39\x2e\x36\x2d\x2e\x38\x32\x2c\x31\x31\x39\x2e\x33\x31\x2c\x31\ -\x2e\x34\x2c\x31\x37\x38\x2e\x38\x2d\x31\x2e\x33\x34\x2c\x38\x30\ -\x2e\x30\x35\x2d\x33\x2e\x36\x38\x2c\x31\x34\x33\x2e\x31\x33\x2d\ -\x33\x30\x2e\x31\x36\x2c\x31\x34\x32\x2e\x37\x38\x2d\x31\x31\x30\ -\x2e\x38\x37\x2d\x2e\x33\x35\x2d\x38\x31\x2e\x36\x38\x2d\x36\x35\ -\x2e\x32\x32\x2d\x31\x31\x30\x2d\x31\x34\x36\x2e\x35\x32\x2d\x31\ -\x31\x32\x2e\x37\x38\x2d\x35\x34\x2e\x35\x2d\x31\x2e\x38\x38\x2c\ -\x34\x30\x2d\x2e\x35\x31\x2d\x31\x34\x2e\x36\x2d\x2e\x35\x37\x43\ -\x32\x39\x38\x2e\x39\x34\x2c\x32\x33\x37\x2c\x33\x31\x36\x2e\x32\ -\x34\x2c\x32\x33\x37\x2c\x32\x38\x32\x2e\x35\x36\x2c\x32\x33\x37\ -\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x06\x06\ +\x2e\x63\x6c\x73\x2d\x32\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x34\x30\x70\x78\x3b\x7d\x3c\x2f\x73\x74\x79\x6c\x65\x3e\ +\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ +\x34\x37\x2e\x36\x37\x2c\x31\x30\x30\x2e\x33\x33\x56\x33\x32\x31\ +\x2e\x34\x36\x4c\x33\x33\x37\x2c\x34\x35\x34\x2e\x32\x31\x2c\x35\ +\x32\x36\x2e\x32\x39\x2c\x33\x32\x31\x2e\x34\x36\x56\x31\x30\x30\ +\x2e\x33\x33\x5a\x6d\x33\x34\x38\x2e\x37\x34\x2c\x31\x39\x39\x2d\ +\x39\x34\x2e\x36\x35\x2c\x36\x36\x2e\x33\x38\x56\x31\x38\x38\x2e\ +\x38\x68\x39\x34\x2e\x36\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x32\x22\x20\x64\ +\x3d\x22\x4d\x33\x34\x30\x2e\x35\x33\x2c\x33\x33\x36\x2e\x34\x35\ +\x63\x39\x2e\x35\x36\x2c\x31\x38\x2e\x38\x38\x2c\x34\x2e\x38\x37\ +\x2c\x36\x31\x2e\x36\x35\x2c\x32\x2e\x34\x33\x2c\x37\x33\x2e\x36\ +\x39\x2d\x34\x2e\x36\x38\x2c\x32\x33\x2d\x31\x38\x2e\x33\x31\x2c\ +\x34\x35\x2e\x36\x38\x2d\x33\x31\x2e\x30\x38\x2c\x35\x37\x2e\x38\ +\x33\x43\x32\x38\x30\x2e\x34\x36\x2c\x34\x39\x37\x2e\x38\x33\x2c\ +\x32\x31\x37\x2e\x32\x2c\x35\x30\x36\x2e\x32\x33\x2c\x31\x34\x39\ +\x2c\x34\x39\x34\x2e\x37\x32\x63\x2d\x31\x31\x2e\x33\x38\x2d\x31\ +\x2e\x39\x33\x2d\x32\x32\x2e\x39\x35\x2d\x34\x2e\x39\x2d\x33\x34\ +\x2e\x31\x31\x2d\x35\x2e\x36\x34\x2d\x31\x34\x2e\x34\x31\x2d\x2e\ +\x39\x35\x2d\x32\x37\x2e\x39\x34\x2c\x31\x2e\x38\x34\x2d\x34\x31\ +\x2e\x32\x32\x2c\x35\x2e\x32\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\ +\x00\x00\x07\xa9\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9479,94 +8728,137 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x32\x2e\x31\x36\x2c\x39\x35\ -\x2e\x39\x31\x68\x34\x37\x2e\x35\x35\x63\x31\x2e\x37\x33\x2c\x32\ -\x2e\x34\x33\x2c\x33\x2e\x33\x2c\x35\x2c\x35\x2e\x32\x31\x2c\x37\ -\x2e\x32\x35\x2c\x32\x31\x2e\x38\x33\x2c\x32\x36\x2c\x34\x33\x2e\ -\x36\x32\x2c\x35\x32\x2c\x36\x35\x2e\x36\x39\x2c\x37\x37\x2e\x37\ -\x32\x61\x31\x39\x2e\x35\x33\x2c\x31\x39\x2e\x35\x33\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x35\x2c\x31\x33\x2e\x38\x32\x71\x2d\x2e\x32\x31\ -\x2c\x31\x35\x30\x2c\x2e\x30\x38\x2c\x33\x30\x30\x63\x30\x2c\x37\ -\x2e\x33\x38\x2d\x31\x2e\x35\x32\x2c\x39\x2e\x34\x33\x2d\x39\x2e\ -\x32\x39\x2c\x39\x2e\x34\x32\x71\x2d\x31\x38\x36\x2e\x34\x35\x2d\ -\x2e\x34\x32\x2d\x33\x37\x32\x2e\x39\x2c\x30\x63\x2d\x38\x2c\x30\ -\x2d\x39\x2e\x31\x38\x2d\x32\x2e\x33\x35\x2d\x39\x2e\x31\x37\x2d\ -\x39\x2e\x35\x33\x71\x2e\x33\x34\x2d\x31\x39\x34\x2e\x38\x35\x2e\ -\x31\x39\x2d\x33\x38\x39\x2e\x36\x39\x63\x30\x2d\x33\x2c\x2e\x34\ -\x34\x2d\x36\x2c\x2e\x36\x37\x2d\x39\x48\x31\x36\x33\x2e\x37\x63\ -\x2d\x2e\x32\x2c\x32\x2e\x34\x2d\x2e\x35\x37\x2c\x34\x2e\x37\x39\ -\x2d\x2e\x35\x38\x2c\x37\x2e\x31\x38\x2c\x30\x2c\x34\x36\x2e\x38\ -\x32\x2e\x31\x34\x2c\x39\x33\x2e\x36\x35\x2d\x2e\x32\x2c\x31\x34\ -\x30\x2e\x34\x37\x2c\x30\x2c\x36\x2e\x38\x38\x2c\x31\x2e\x37\x38\ -\x2c\x38\x2e\x33\x37\x2c\x38\x2e\x35\x34\x2c\x38\x2e\x33\x34\x71\ -\x39\x36\x2d\x2e\x34\x32\x2c\x31\x39\x31\x2e\x39\x33\x2c\x30\x63\ -\x37\x2e\x37\x37\x2c\x30\x2c\x38\x2e\x36\x38\x2d\x32\x2e\x36\x38\ -\x2c\x38\x2e\x36\x36\x2d\x39\x2e\x32\x32\x43\x33\x37\x31\x2e\x38\ -\x39\x2c\x31\x39\x33\x2e\x37\x38\x2c\x33\x37\x32\x2e\x30\x38\x2c\ -\x31\x34\x34\x2e\x38\x35\x2c\x33\x37\x32\x2e\x31\x36\x2c\x39\x35\ -\x2e\x39\x31\x5a\x6d\x2d\x37\x32\x2e\x33\x35\x2c\x33\x36\x39\x2e\ -\x36\x63\x34\x32\x2e\x39\x34\x2c\x30\x2c\x38\x35\x2e\x38\x38\x2d\ -\x2e\x31\x33\x2c\x31\x32\x38\x2e\x38\x32\x2e\x31\x33\x2c\x36\x2e\ -\x36\x38\x2e\x30\x35\x2c\x39\x2e\x34\x2d\x31\x2c\x39\x2e\x33\x33\ -\x2d\x38\x2e\x36\x34\x2d\x2e\x34\x33\x2d\x34\x34\x2e\x33\x39\x2d\ -\x2e\x33\x33\x2d\x38\x38\x2e\x37\x38\x2d\x2e\x30\x38\x2d\x31\x33\ -\x33\x2e\x31\x37\x2c\x30\x2d\x36\x2e\x31\x37\x2d\x31\x2e\x34\x31\ -\x2d\x38\x2e\x31\x39\x2d\x38\x2d\x38\x2e\x31\x37\x71\x2d\x31\x32\ -\x39\x2e\x32\x38\x2e\x33\x33\x2d\x32\x35\x38\x2e\x35\x36\x2c\x30\ -\x63\x2d\x37\x2e\x32\x32\x2c\x30\x2d\x38\x2e\x34\x31\x2c\x32\x2e\ -\x33\x37\x2d\x38\x2e\x33\x38\x2c\x38\x2e\x37\x39\x71\x2e\x33\x39\ -\x2c\x36\x36\x2e\x35\x38\x2c\x30\x2c\x31\x33\x33\x2e\x31\x37\x63\ -\x30\x2c\x36\x2e\x32\x33\x2c\x31\x2e\x35\x33\x2c\x38\x2e\x31\x32\ -\x2c\x38\x2c\x38\x2e\x30\x37\x43\x32\x31\x33\x2e\x39\x32\x2c\x34\ -\x36\x35\x2e\x33\x37\x2c\x32\x35\x36\x2e\x38\x37\x2c\x34\x36\x35\ -\x2e\x35\x31\x2c\x32\x39\x39\x2e\x38\x31\x2c\x34\x36\x35\x2e\x35\ -\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x39\ -\x2e\x33\x31\x2c\x31\x36\x33\x2e\x38\x39\x63\x30\x2c\x31\x34\x2e\ -\x31\x38\x2d\x2e\x31\x38\x2c\x32\x38\x2e\x33\x36\x2e\x31\x2c\x34\ -\x32\x2e\x35\x34\x2e\x30\x39\x2c\x34\x2e\x36\x32\x2d\x31\x2e\x30\ -\x38\x2c\x36\x2e\x31\x39\x2d\x36\x2c\x36\x2e\x31\x33\x71\x2d\x33\ -\x32\x2e\x38\x37\x2d\x2e\x33\x39\x2d\x36\x35\x2e\x37\x33\x2c\x30\ -\x63\x2d\x35\x2e\x33\x33\x2e\x30\x37\x2d\x36\x2e\x36\x33\x2d\x31\ -\x2e\x37\x34\x2d\x36\x2e\x35\x39\x2d\x36\x2e\x37\x35\x71\x2e\x33\ -\x31\x2d\x34\x32\x2e\x30\x39\x2c\x30\x2d\x38\x34\x2e\x31\x38\x63\ -\x30\x2d\x34\x2e\x39\x2c\x31\x2e\x36\x2d\x36\x2c\x36\x2e\x32\x34\ -\x2d\x36\x71\x33\x33\x2e\x33\x33\x2e\x33\x31\x2c\x36\x36\x2e\x36\ -\x35\x2c\x30\x63\x34\x2e\x36\x33\x2d\x2e\x30\x35\x2c\x35\x2e\x34\ -\x37\x2c\x31\x2e\x36\x31\x2c\x35\x2e\x34\x2c\x35\x2e\x37\x32\x43\ -\x33\x33\x39\x2e\x31\x37\x2c\x31\x33\x35\x2e\x35\x32\x2c\x33\x33\ -\x39\x2e\x33\x31\x2c\x31\x34\x39\x2e\x37\x2c\x33\x33\x39\x2e\x33\ -\x31\x2c\x31\x36\x33\x2e\x38\x39\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ -\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x64\x3d\x22\x4d\x33\x30\x30\x2e\x39\x2c\x33\x34\x38\x2e\x31\x33\ -\x63\x32\x39\x2e\x38\x34\x2c\x30\x2c\x35\x39\x2e\x36\x39\x2e\x34\ -\x36\x2c\x38\x39\x2e\x35\x2d\x2e\x32\x37\x2c\x39\x2e\x34\x38\x2d\ -\x2e\x32\x33\x2c\x37\x2e\x35\x39\x2c\x35\x2c\x37\x2e\x35\x37\x2c\ -\x31\x30\x2e\x31\x31\x73\x32\x2c\x31\x30\x2e\x32\x33\x2d\x37\x2e\ -\x34\x34\x2c\x31\x30\x2e\x31\x36\x71\x2d\x39\x30\x2e\x34\x32\x2d\ -\x2e\x37\x32\x2d\x31\x38\x30\x2e\x38\x33\x2c\x30\x63\x2d\x38\x2e\ -\x31\x31\x2e\x30\x35\x2d\x38\x2e\x30\x38\x2d\x33\x2e\x36\x31\x2d\ -\x37\x2e\x35\x39\x2d\x39\x2e\x30\x39\x2e\x34\x35\x2d\x35\x2d\x32\ -\x2e\x38\x31\x2d\x31\x31\x2e\x33\x33\x2c\x37\x2e\x34\x37\x2d\x31\ -\x31\x2e\x31\x32\x43\x32\x34\x30\x2c\x33\x34\x38\x2e\x35\x32\x2c\ -\x32\x37\x30\x2e\x34\x36\x2c\x33\x34\x38\x2e\x31\x33\x2c\x33\x30\ -\x30\x2e\x39\x2c\x33\x34\x38\x2e\x31\x33\x5a\x22\x2f\x3e\x3c\x70\ -\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2e\x38\x36\x2c\x34\x30\x37\ -\x63\x32\x39\x2e\x38\x33\x2c\x30\x2c\x35\x39\x2e\x36\x37\x2e\x34\ -\x35\x2c\x38\x39\x2e\x34\x38\x2d\x2e\x32\x35\x2c\x31\x30\x2e\x31\ -\x31\x2d\x2e\x32\x34\x2c\x37\x2e\x32\x33\x2c\x35\x2e\x37\x2c\x37\ -\x2e\x37\x39\x2c\x31\x30\x2e\x38\x37\x2e\x36\x36\x2c\x36\x2e\x31\ -\x35\x2d\x2e\x34\x39\x2c\x38\x2e\x37\x36\x2d\x38\x2c\x38\x2e\x37\ -\x32\x71\x2d\x38\x39\x2e\x39\x32\x2d\x2e\x35\x38\x2d\x31\x37\x39\ -\x2e\x38\x37\x2c\x30\x63\x2d\x38\x2e\x32\x38\x2e\x30\x36\x2d\x38\ -\x2e\x33\x2d\x33\x2e\x34\x33\x2d\x38\x2e\x32\x37\x2d\x39\x2e\x34\ -\x31\x73\x2d\x2e\x35\x38\x2d\x31\x30\x2e\x34\x31\x2c\x38\x2e\x34\ -\x39\x2d\x31\x30\x2e\x32\x31\x43\x32\x34\x30\x2e\x35\x39\x2c\x34\ -\x30\x37\x2e\x33\x39\x2c\x32\x37\x30\x2e\x37\x33\x2c\x34\x30\x37\ -\x2c\x33\x30\x30\x2e\x38\x36\x2c\x34\x30\x37\x5a\x22\x2f\x3e\x3c\ -\x2f\x73\x76\x67\x3e\ -\x00\x00\x02\xee\ +\x31\x22\x20\x64\x3d\x22\x4d\x32\x35\x33\x2e\x36\x33\x2c\x33\x34\ +\x36\x2e\x31\x36\x63\x31\x31\x2e\x39\x33\x2d\x31\x33\x2e\x36\x33\ +\x2c\x32\x31\x2e\x31\x34\x2d\x32\x35\x2e\x32\x37\x2c\x33\x31\x2e\ +\x35\x31\x2d\x33\x35\x2e\x37\x38\x43\x33\x32\x33\x2e\x35\x34\x2c\ +\x32\x37\x31\x2e\x34\x34\x2c\x33\x36\x32\x2e\x33\x2c\x32\x33\x32\ +\x2e\x38\x36\x2c\x34\x30\x31\x2c\x31\x39\x34\x2e\x32\x63\x34\x2e\ +\x36\x32\x2d\x34\x2e\x36\x32\x2c\x39\x2e\x32\x2d\x39\x2e\x33\x38\ +\x2c\x31\x34\x2e\x33\x38\x2d\x31\x33\x2e\x33\x31\x2c\x31\x34\x2e\ +\x30\x39\x2d\x31\x30\x2e\x36\x37\x2c\x33\x32\x2e\x31\x38\x2d\x39\ +\x2e\x38\x31\x2c\x34\x34\x2c\x31\x2e\x36\x34\x2c\x31\x32\x2e\x32\ +\x2c\x31\x31\x2e\x38\x35\x2c\x31\x33\x2e\x35\x31\x2c\x33\x31\x2e\ +\x32\x2c\x32\x2e\x30\x39\x2c\x34\x35\x2e\x33\x37\x2d\x36\x2e\x36\ +\x38\x2c\x38\x2e\x32\x39\x2d\x31\x34\x2e\x37\x31\x2c\x31\x35\x2e\ +\x35\x31\x2d\x32\x32\x2e\x32\x37\x2c\x32\x33\x2e\x30\x37\x71\x2d\ +\x37\x36\x2e\x38\x37\x2c\x37\x37\x2d\x31\x35\x33\x2e\x38\x32\x2c\ +\x31\x35\x33\x2e\x38\x34\x63\x2d\x32\x33\x2e\x31\x31\x2c\x32\x33\ +\x2e\x30\x36\x2d\x34\x30\x2e\x38\x37\x2c\x32\x33\x2e\x33\x2d\x36\ +\x34\x2e\x33\x31\x2e\x35\x39\x71\x2d\x33\x35\x2e\x38\x37\x2d\x33\ +\x34\x2e\x37\x34\x2d\x37\x31\x2e\x31\x2d\x37\x30\x2e\x31\x32\x63\ +\x2d\x31\x37\x2e\x33\x2d\x31\x37\x2e\x33\x34\x2d\x31\x38\x2e\x38\ +\x32\x2d\x33\x37\x2e\x36\x31\x2d\x34\x2e\x34\x33\x2d\x35\x31\x2e\ +\x38\x33\x2c\x31\x34\x2e\x36\x39\x2d\x31\x34\x2e\x35\x32\x2c\x33\ +\x33\x2e\x35\x32\x2d\x31\x32\x2e\x38\x37\x2c\x35\x31\x2e\x34\x38\ +\x2c\x35\x53\x32\x33\x32\x2e\x35\x35\x2c\x33\x32\x34\x2e\x36\x38\ +\x2c\x32\x35\x33\x2e\x36\x33\x2c\x33\x34\x36\x2e\x31\x36\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x32\x39\x2e\x34\x31\ +\x2c\x35\x35\x34\x61\x32\x38\x32\x2e\x38\x34\x2c\x32\x38\x32\x2e\ +\x38\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x36\x32\x2d\x34\x31\x2e\x30\ +\x39\x6c\x2d\x33\x38\x2e\x31\x34\x2d\x33\x38\x2e\x31\x34\x61\x32\ +\x33\x34\x2e\x39\x32\x2c\x32\x33\x34\x2e\x39\x32\x2c\x30\x2c\x30\ +\x2c\x31\x2d\x34\x33\x2e\x38\x34\x2c\x33\x30\x2e\x38\x34\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x31\x2e\x34\x32\ +\x2c\x35\x32\x32\x2e\x30\x35\x63\x2d\x31\x36\x2e\x36\x36\x2c\x35\ +\x2e\x34\x39\x2d\x35\x32\x2e\x32\x33\x2c\x31\x30\x2e\x38\x2d\x35\ +\x32\x2e\x32\x33\x2c\x31\x30\x2e\x38\x76\x34\x39\x2e\x33\x61\x32\ +\x38\x31\x2e\x37\x34\x2c\x32\x38\x31\x2e\x37\x34\x2c\x30\x2c\x30\ +\x2c\x30\x2c\x37\x31\x2e\x37\x31\x2d\x31\x32\x2e\x37\x39\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x37\x34\x2e\x35\x33\ +\x2c\x34\x34\x61\x32\x38\x32\x2e\x36\x38\x2c\x32\x38\x32\x2e\x36\ +\x38\x2c\x30\x2c\x30\x2c\x30\x2d\x35\x37\x2e\x34\x37\x2c\x33\x35\ +\x2e\x38\x37\x6c\x33\x36\x2e\x33\x34\x2c\x33\x36\x2e\x33\x34\x61\ +\x32\x33\x34\x2e\x35\x31\x2c\x32\x33\x34\x2e\x35\x31\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x34\x30\x2e\x33\x34\x2d\x32\x35\x2e\x35\x37\x5a\ +\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x33\x32\x2e\x33\ +\x37\x2c\x37\x35\x2e\x35\x32\x61\x32\x33\x34\x2e\x36\x38\x2c\x32\ +\x33\x34\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x35\x2e\x33\ +\x35\x2d\x38\x2e\x34\x35\x56\x31\x38\x61\x32\x38\x32\x2e\x32\x37\ +\x2c\x32\x38\x32\x2e\x32\x37\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x34\ +\x2e\x34\x31\x2c\x31\x31\x2e\x32\x34\x5a\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x64\x3d\x22\x4d\x35\x33\x31\x2e\x38\x33\x2c\x33\x30\x30\x61\ +\x32\x33\x34\x2c\x32\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\ +\x32\x36\x2c\x35\x37\x2e\x38\x39\x6c\x35\x32\x2e\x35\x36\x2c\x32\ +\x30\x2e\x38\x33\x41\x32\x38\x32\x2e\x34\x38\x2c\x32\x38\x32\x2e\ +\x34\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x38\x38\x2e\x32\x37\x2c\ +\x33\x30\x30\x43\x35\x38\x38\x2e\x32\x37\x2c\x31\x34\x38\x2e\x34\ +\x38\x2c\x34\x36\x39\x2c\x32\x34\x2e\x38\x34\x2c\x33\x31\x39\x2e\ +\x31\x39\x2c\x31\x37\x2e\x38\x35\x56\x36\x37\x2e\x31\x33\x43\x34\ +\x33\x38\x2e\x34\x2c\x37\x37\x2e\x38\x36\x2c\x35\x33\x31\x2e\x38\ +\x33\x2c\x31\x37\x38\x2c\x35\x33\x31\x2e\x38\x33\x2c\x33\x30\x30\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x37\x2e\x36\ +\x39\x2c\x32\x30\x35\x2e\x36\x32\x61\x32\x38\x30\x2e\x35\x33\x2c\ +\x32\x38\x30\x2e\x35\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x34\x2e\ +\x36\x2c\x36\x34\x2e\x32\x38\x48\x36\x36\x61\x32\x33\x32\x2e\x39\ +\x32\x2c\x32\x33\x32\x2e\x39\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x30\x2e\x33\x39\x2d\x34\x35\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\ +\x3d\x22\x4d\x39\x33\x2e\x32\x2c\x31\x38\x37\x61\x32\x33\x34\x2e\ +\x36\x2c\x32\x33\x34\x2e\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\ +\x2d\x34\x32\x2e\x33\x33\x4c\x38\x36\x2e\x36\x38\x2c\x31\x30\x38\ +\x2e\x31\x31\x61\x32\x38\x33\x2e\x33\x33\x2c\x32\x38\x33\x2e\x33\ +\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x34\x32\x2e\x32\x36\x2c\x35\x39\ +\x2e\x35\x33\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\ +\x31\x38\x2e\x35\x32\x2c\x34\x30\x30\x2e\x31\x31\x2c\x35\x31\x30\ +\x2e\x37\x34\x2c\x33\x39\x37\x61\x32\x33\x34\x2e\x33\x32\x2c\x32\ +\x33\x34\x2e\x33\x32\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x39\x2c\x34\ +\x37\x2e\x35\x31\x6c\x33\x38\x2e\x38\x35\x2c\x33\x38\x2e\x38\x35\ +\x61\x32\x38\x32\x2e\x34\x36\x2c\x32\x38\x32\x2e\x34\x36\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x34\x32\x2e\x30\x36\x2d\x36\x35\x2e\x37\x38\ +\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x37\x32\x2e\x32\ +\x34\x2c\x33\x36\x31\x2e\x33\x61\x32\x33\x34\x2c\x32\x33\x34\x2c\ +\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x38\x34\x2d\x34\x39\x2e\x39\x33\ +\x48\x31\x31\x2e\x37\x33\x61\x32\x38\x32\x2e\x31\x39\x2c\x32\x38\ +\x32\x2e\x31\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x31\x2e\x37\x31\ +\x2c\x37\x30\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ +\x31\x32\x2c\x34\x34\x31\x2e\x37\x61\x32\x33\x33\x2e\x38\x36\x2c\ +\x32\x33\x33\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x35\x2e\ +\x33\x31\x2d\x34\x31\x2e\x34\x38\x4c\x33\x38\x2e\x32\x39\x2c\x34\ +\x32\x30\x2e\x31\x41\x32\x38\x33\x2e\x30\x39\x2c\x32\x38\x33\x2e\ +\x30\x39\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x34\x2e\x35\x2c\x34\x37\ +\x37\x2e\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\ +\x39\x38\x2e\x36\x34\x2c\x35\x36\x35\x2e\x38\x39\x41\x32\x38\x31\ +\x2e\x32\x34\x2c\x32\x38\x31\x2e\x32\x34\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x32\x37\x37\x2e\x37\x32\x2c\x35\x38\x32\x56\x35\x33\x33\x41\ +\x32\x33\x32\x2e\x37\x35\x2c\x32\x33\x32\x2e\x37\x35\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x32\x31\x39\x2c\x35\x32\x30\x2e\x31\x34\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x31\x2e\x33\x37\ +\x2c\x35\x30\x32\x2e\x37\x35\x61\x32\x33\x34\x2e\x35\x39\x2c\x32\ +\x33\x34\x2e\x35\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x34\x31\x2e\x34\ +\x36\x2d\x33\x30\x2e\x34\x4c\x31\x30\x33\x2c\x35\x30\x38\x61\x32\ +\x38\x34\x2e\x32\x33\x2c\x32\x38\x34\x2e\x32\x33\x2c\x30\x2c\x30\ +\x2c\x30\x2c\x35\x37\x2e\x37\x39\x2c\x34\x31\x2e\x30\x38\x5a\x22\ +\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x00\xec\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x38\x39\ +\x2e\x32\x33\x20\x31\x31\x34\x2e\x34\x31\x20\x38\x39\x2e\x32\x33\ +\x20\x34\x38\x31\x2e\x32\x32\x20\x35\x31\x30\x2e\x37\x37\x20\x32\ +\x38\x36\x2e\x30\x36\x20\x38\x39\x2e\x32\x33\x20\x31\x31\x34\x2e\ +\x34\x31\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x03\x28\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -9583,137 +8875,112 @@ \x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ \x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ \x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x36\x31\x2e\x36\x35\ -\x2c\x31\x39\x31\x2e\x35\x37\x4c\x34\x30\x38\x2e\x34\x2c\x33\x38\ -\x2e\x33\x32\x68\x2d\x32\x31\x36\x2e\x38\x32\x53\x33\x38\x2e\x33\ -\x2c\x31\x39\x31\x2e\x36\x2c\x33\x38\x2e\x33\x2c\x31\x39\x31\x2e\ -\x36\x76\x32\x31\x36\x2e\x38\x6c\x31\x35\x33\x2e\x32\x38\x2c\x31\ -\x35\x33\x2e\x32\x38\x68\x32\x31\x36\x2e\x37\x39\x73\x31\x34\x34\ -\x2e\x36\x32\x2d\x31\x34\x34\x2e\x35\x37\x2c\x31\x34\x34\x2e\x36\ -\x32\x2d\x31\x34\x34\x2e\x35\x37\x63\x35\x2e\x31\x34\x2d\x35\x2e\ -\x30\x38\x2c\x38\x2e\x31\x33\x2d\x31\x31\x2e\x36\x31\x2c\x38\x2e\ -\x36\x33\x2d\x31\x38\x2e\x38\x39\x6c\x2e\x30\x37\x2d\x2e\x39\x38\ -\x2d\x2e\x30\x34\x2d\x32\x30\x35\x2e\x36\x38\x5a\x4d\x32\x31\x34\ -\x2e\x38\x34\x2c\x35\x30\x35\x2e\x35\x35\x6c\x2d\x31\x32\x30\x2e\ -\x34\x2d\x31\x32\x30\x2e\x34\x76\x2d\x31\x37\x30\x2e\x33\x73\x31\ -\x32\x30\x2e\x34\x2d\x31\x32\x30\x2e\x34\x2c\x31\x32\x30\x2e\x34\ -\x2d\x31\x32\x30\x2e\x34\x68\x31\x37\x30\x2e\x33\x31\x73\x31\x32\ -\x30\x2e\x33\x37\x2c\x31\x32\x30\x2e\x33\x37\x2c\x31\x32\x30\x2e\ -\x33\x37\x2c\x31\x32\x30\x2e\x33\x37\x6c\x2e\x30\x34\x2c\x31\x37\ -\x30\x2e\x33\x33\x2d\x31\x32\x30\x2e\x34\x33\x2c\x31\x32\x30\x2e\ -\x33\x38\x68\x2d\x31\x37\x30\x2e\x32\x39\x5a\x22\x2f\x3e\x0a\x20\ -\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x35\x35\x2e\x31\x32\x2c\ -\x34\x32\x38\x2e\x38\x63\x30\x2d\x32\x33\x2e\x38\x34\x2c\x31\x38\ -\x2e\x37\x2d\x34\x31\x2e\x36\x31\x2c\x34\x34\x2e\x38\x38\x2d\x34\ -\x31\x2e\x36\x31\x73\x34\x34\x2e\x38\x38\x2c\x31\x37\x2e\x37\x37\ -\x2c\x34\x34\x2e\x38\x38\x2c\x34\x31\x2e\x36\x31\x2d\x31\x38\x2e\ -\x37\x2c\x34\x32\x2e\x35\x35\x2d\x34\x34\x2e\x38\x38\x2c\x34\x32\ -\x2e\x35\x35\x2d\x34\x34\x2e\x38\x38\x2d\x31\x39\x2e\x31\x37\x2d\ -\x34\x34\x2e\x38\x38\x2d\x34\x32\x2e\x35\x35\x5a\x4d\x32\x34\x38\ -\x2e\x39\x31\x2c\x31\x34\x30\x2e\x33\x32\x68\x31\x30\x32\x2e\x31\ -\x38\x6c\x2d\x32\x32\x2e\x31\x2c\x32\x31\x33\x2e\x36\x37\x68\x2d\ -\x35\x37\x2e\x39\x38\x6c\x2d\x32\x32\x2e\x31\x2d\x32\x31\x33\x2e\ -\x36\x37\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\xf3\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x34\x2e\x34\x37\ +\x2c\x34\x34\x37\x2e\x31\x6c\x2d\x33\x36\x36\x2e\x38\x31\x2e\x30\ +\x34\x63\x2d\x35\x2e\x37\x34\x2c\x30\x2d\x31\x32\x2e\x39\x38\x2d\ +\x35\x2e\x31\x32\x2d\x31\x35\x2e\x31\x39\x2d\x38\x2e\x37\x39\x2d\ +\x32\x2e\x38\x33\x2d\x34\x2e\x36\x38\x2d\x31\x2e\x39\x39\x2d\x31\ +\x34\x2e\x39\x39\x2c\x31\x2e\x37\x38\x2d\x31\x39\x2e\x31\x34\x6c\ +\x34\x32\x2e\x33\x39\x2d\x34\x36\x2e\x35\x38\x63\x38\x2e\x30\x33\ +\x2d\x38\x2e\x38\x32\x2c\x31\x34\x2e\x38\x36\x2d\x31\x39\x2e\x37\ +\x39\x2c\x31\x34\x2e\x39\x33\x2d\x33\x32\x2e\x33\x31\x6c\x2e\x35\ +\x2d\x38\x33\x2e\x36\x37\x63\x2e\x33\x38\x2d\x36\x33\x2e\x34\x39\ +\x2c\x35\x30\x2e\x32\x35\x2d\x31\x31\x35\x2e\x31\x2c\x31\x31\x32\ +\x2e\x31\x2d\x31\x32\x37\x2e\x31\x31\x6c\x2e\x39\x35\x2d\x33\x31\ +\x2e\x30\x34\x63\x2e\x34\x32\x2d\x31\x33\x2e\x37\x36\x2c\x31\x31\ +\x2e\x35\x39\x2d\x32\x33\x2e\x31\x38\x2c\x32\x33\x2e\x34\x31\x2d\ +\x32\x33\x2e\x38\x33\x2c\x31\x33\x2e\x31\x38\x2d\x2e\x37\x33\x2c\ +\x32\x36\x2e\x30\x31\x2c\x39\x2e\x32\x32\x2c\x32\x36\x2e\x33\x35\ +\x2c\x32\x33\x2e\x38\x33\x6c\x2e\x37\x32\x2c\x33\x30\x2e\x39\x33\ +\x63\x36\x34\x2e\x35\x33\x2c\x31\x33\x2e\x33\x32\x2c\x31\x31\x32\ +\x2e\x32\x33\x2c\x36\x38\x2e\x34\x31\x2c\x31\x31\x32\x2e\x35\x37\ +\x2c\x31\x33\x35\x2e\x30\x31\x6c\x2e\x33\x39\x2c\x37\x35\x2e\x39\ +\x34\x63\x2e\x30\x35\x2c\x31\x30\x2e\x35\x38\x2c\x34\x2e\x37\x33\ +\x2c\x32\x31\x2e\x31\x31\x2c\x31\x31\x2e\x37\x37\x2c\x32\x38\x2e\ +\x38\x38\x6c\x34\x36\x2e\x33\x33\x2c\x35\x31\x2e\x31\x33\x63\x32\ +\x2e\x36\x36\x2c\x32\x2e\x39\x33\x2c\x33\x2e\x32\x32\x2c\x31\x32\ +\x2e\x38\x36\x2c\x31\x2e\x37\x39\x2c\x31\x36\x2e\x35\x34\x2d\x31\ +\x2e\x34\x33\x2c\x33\x2e\x36\x39\x2d\x37\x2e\x35\x33\x2c\x31\x30\ +\x2e\x31\x37\x2d\x31\x33\x2e\x39\x38\x2c\x31\x30\x2e\x31\x37\x5a\ +\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x36\ +\x32\x2e\x36\x35\x2c\x34\x36\x32\x2e\x39\x33\x63\x32\x2e\x35\x35\ +\x2c\x33\x33\x2e\x38\x35\x2d\x32\x37\x2e\x38\x34\x2c\x36\x31\x2e\ +\x31\x31\x2d\x35\x39\x2e\x36\x32\x2c\x36\x32\x2e\x33\x38\x2d\x33\ +\x35\x2e\x37\x36\x2c\x31\x2e\x34\x34\x2d\x36\x36\x2e\x34\x34\x2d\ +\x32\x35\x2e\x32\x34\x2d\x36\x36\x2e\x33\x35\x2d\x36\x32\x2e\x33\ +\x31\x6c\x31\x32\x35\x2e\x39\x37\x2d\x2e\x30\x37\x5a\x22\x2f\x3e\ +\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\x25\ \x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x78\x3d\x22\x32\x31\x32\x2e\x32\x34\x22\x20\x79\x3d\ -\x22\x34\x34\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x30\x2e\ -\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x32\x33\x2e\ -\x35\x33\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x39\x35\x2e\ -\x32\x35\x22\x20\x79\x3d\x22\x35\x37\x2e\x33\x35\x22\x20\x77\x69\ -\x64\x74\x68\x3d\x22\x32\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\ -\x68\x74\x3d\x22\x37\x36\x2e\x38\x33\x22\x20\x74\x72\x61\x6e\x73\ -\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\ -\x2d\x31\x37\x2e\x30\x32\x20\x31\x33\x39\x2e\x32\x35\x29\x20\x72\ -\x6f\x74\x61\x74\x65\x28\x2d\x33\x36\x2e\x30\x37\x29\x22\x2f\x3e\ -\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ -\x2d\x31\x22\x20\x78\x3d\x22\x32\x38\x39\x2e\x36\x32\x22\x20\x79\ -\x3d\x22\x33\x30\x2e\x34\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\ -\x32\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x37\ -\x36\x2e\x38\x33\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x30\x33\x2c\x33\x38\x32\x2e\x31\x38\x71\x2d\x34\x35\x2e\x36\x35\ -\x2c\x30\x2d\x39\x31\x2e\x33\x31\x2e\x30\x36\x63\x2d\x32\x2e\x35\ -\x32\x2c\x30\x2d\x33\x2e\x33\x39\x2d\x2e\x34\x39\x2d\x33\x2e\x33\ -\x38\x2d\x33\x2e\x32\x35\x2e\x31\x2d\x33\x39\x2e\x38\x32\x2c\x30\ -\x2d\x37\x39\x2e\x36\x34\x2e\x31\x31\x2d\x31\x31\x39\x2e\x34\x36\ -\x2e\x30\x36\x2d\x32\x30\x2e\x35\x36\x2c\x35\x2e\x31\x34\x2d\x33\ -\x39\x2e\x37\x33\x2c\x31\x36\x2e\x34\x32\x2d\x35\x37\x2e\x31\x37\ -\x61\x31\x30\x36\x2e\x37\x2c\x31\x30\x36\x2e\x37\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x31\x39\x2d\x32\x32\x2e\x30\x37\x2c\x38\x38\x2e\x35\ -\x35\x2c\x38\x38\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\ -\x2e\x33\x37\x2d\x31\x31\x2e\x31\x34\x63\x32\x37\x2e\x32\x32\x2d\ -\x31\x35\x2c\x35\x35\x2d\x31\x34\x2e\x35\x34\x2c\x38\x32\x2e\x37\ -\x37\x2d\x32\x2e\x31\x37\x2c\x31\x31\x2e\x31\x2c\x35\x2c\x32\x30\ -\x2e\x37\x33\x2c\x31\x32\x2e\x37\x36\x2c\x32\x38\x2e\x37\x35\x2c\ -\x32\x31\x2e\x39\x34\x2c\x31\x37\x2e\x36\x35\x2c\x32\x30\x2e\x31\ -\x38\x2c\x32\x36\x2e\x33\x36\x2c\x34\x33\x2e\x39\x32\x2c\x32\x36\ -\x2e\x33\x39\x2c\x37\x30\x2e\x37\x35\x2e\x30\x36\x2c\x33\x39\x2e\ -\x37\x31\x2c\x30\x2c\x37\x39\x2e\x34\x32\x2e\x30\x38\x2c\x31\x31\ -\x39\x2e\x31\x33\x2c\x30\x2c\x32\x2e\x38\x34\x2d\x2e\x38\x32\x2c\ -\x33\x2e\x34\x35\x2d\x33\x2e\x35\x33\x2c\x33\x2e\x34\x34\x51\x33\ -\x34\x38\x2e\x37\x38\x2c\x33\x38\x32\x2e\x31\x2c\x33\x30\x33\x2c\ -\x33\x38\x32\x2e\x31\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x33\x30\x33\x2e\x34\x31\x2c\x34\x30\x33\x2e\x36\x38\x63\ -\x33\x34\x2e\x34\x35\x2c\x30\x2c\x36\x38\x2e\x39\x2c\x30\x2c\x31\ -\x30\x33\x2e\x33\x34\x2d\x2e\x30\x37\x2c\x32\x2e\x38\x31\x2c\x30\ -\x2c\x33\x2e\x35\x36\x2e\x37\x31\x2c\x33\x2e\x34\x34\x2c\x33\x2e\ -\x34\x38\x2d\x2e\x32\x34\x2c\x35\x2e\x33\x34\x2d\x2e\x31\x34\x2c\ -\x31\x30\x2e\x37\x31\x2c\x30\x2c\x31\x36\x2e\x30\x36\x2c\x30\x2c\ -\x31\x2e\x37\x37\x2d\x2e\x35\x35\x2c\x32\x2e\x34\x36\x2d\x32\x2e\ -\x32\x38\x2c\x32\x2e\x32\x37\x61\x31\x35\x2e\x34\x39\x2c\x31\x35\ -\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x36\x37\x2c\x30\ -\x71\x2d\x31\x30\x33\x2c\x30\x2d\x32\x30\x36\x2c\x2e\x30\x38\x63\ -\x2d\x33\x2e\x33\x32\x2c\x30\x2d\x34\x2e\x31\x32\x2d\x2e\x39\x31\ -\x2d\x33\x2e\x39\x34\x2d\x34\x2e\x30\x37\x61\x31\x34\x31\x2e\x37\ -\x31\x2c\x31\x34\x31\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x30\ -\x2d\x31\x34\x2e\x37\x32\x63\x2d\x2e\x31\x32\x2d\x32\x2e\x35\x38\ -\x2e\x36\x39\x2d\x33\x2e\x30\x38\x2c\x33\x2e\x31\x35\x2d\x33\x2e\ -\x30\x38\x51\x32\x35\x31\x2e\x34\x2c\x34\x30\x33\x2e\x37\x36\x2c\ -\x33\x30\x33\x2e\x34\x31\x2c\x34\x30\x33\x2e\x36\x38\x5a\x22\x2f\ -\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x34\x30\x2e\x38\x35\x22\x20\ -\x79\x3d\x22\x31\x35\x33\x2e\x38\x32\x22\x20\x77\x69\x64\x74\x68\ -\x3d\x22\x32\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\ -\x22\x37\x36\x2e\x38\x33\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\ -\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x38\x39\ -\x2e\x30\x37\x20\x32\x33\x38\x2e\x33\x39\x29\x20\x72\x6f\x74\x61\ -\x74\x65\x28\x2d\x36\x32\x2e\x37\x35\x29\x22\x2f\x3e\x3c\x72\x65\ -\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ -\x20\x78\x3d\x22\x33\x38\x33\x2e\x39\x39\x22\x20\x79\x3d\x22\x35\ -\x37\x2e\x33\x35\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x30\x2e\ -\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x36\x2e\x38\ -\x33\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\ -\x61\x6e\x73\x6c\x61\x74\x65\x28\x36\x35\x36\x2e\x31\x39\x20\x34\ -\x30\x35\x2e\x31\x39\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x31\ -\x34\x33\x2e\x39\x33\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\ -\x34\x33\x39\x2e\x30\x31\x22\x20\x79\x3d\x22\x31\x35\x33\x2e\x38\ -\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x30\x2e\x31\x34\x22\ -\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x36\x2e\x38\x33\x22\x20\ -\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\ -\x6c\x61\x74\x65\x28\x34\x38\x33\x2e\x37\x39\x20\x36\x37\x39\x2e\ -\x34\x38\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x31\x31\x37\x2e\ -\x32\x35\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x33\x36\x31\ -\x2e\x30\x31\x22\x20\x79\x3d\x22\x34\x34\x36\x22\x20\x77\x69\x64\ -\x74\x68\x3d\x22\x33\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\x68\ -\x74\x3d\x22\x31\x32\x33\x2e\x35\x33\x22\x2f\x3e\x3c\x2f\x73\x76\ -\x67\x3e\ -\x00\x00\x02\x0d\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ +\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ +\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ +\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ +\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ +\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ +\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ +\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ +\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ +\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x37\x2e\x39\x35\ +\x2c\x32\x35\x31\x2e\x37\x35\x63\x2d\x32\x34\x2e\x39\x32\x2e\x32\ +\x32\x2d\x34\x39\x2e\x38\x34\x2e\x33\x39\x2d\x37\x34\x2e\x37\x35\ +\x2d\x2e\x30\x38\x2d\x36\x2e\x37\x34\x2d\x2e\x31\x33\x2d\x37\x2e\ +\x36\x37\x2c\x32\x2e\x31\x32\x2d\x37\x2e\x36\x32\x2c\x38\x2e\x31\ +\x2e\x32\x37\x2c\x33\x39\x2e\x31\x35\x2e\x31\x34\x2c\x37\x38\x2e\ +\x33\x2e\x31\x34\x2c\x31\x31\x37\x2e\x34\x35\x73\x2e\x31\x35\x2c\ +\x37\x38\x2e\x33\x2d\x2e\x31\x35\x2c\x31\x31\x37\x2e\x34\x35\x63\ +\x2d\x2e\x30\x35\x2c\x36\x2e\x31\x33\x2c\x31\x2e\x37\x31\x2c\x37\ +\x2e\x35\x33\x2c\x37\x2e\x36\x2c\x37\x2e\x34\x36\x2c\x32\x34\x2e\ +\x39\x32\x2d\x2e\x33\x33\x2c\x34\x39\x2e\x38\x34\x2d\x2e\x32\x36\ +\x2c\x37\x34\x2e\x37\x36\x2d\x2e\x30\x34\x2c\x34\x2e\x38\x32\x2e\ +\x30\x34\x2c\x36\x2e\x34\x37\x2d\x31\x2e\x30\x35\x2c\x36\x2e\x34\ +\x36\x2d\x36\x2e\x32\x34\x2d\x2e\x31\x37\x2d\x37\x39\x2e\x33\x32\ +\x2d\x2e\x31\x37\x2d\x31\x35\x38\x2e\x36\x34\x2c\x30\x2d\x32\x33\ +\x37\x2e\x39\x36\x2e\x30\x31\x2d\x35\x2e\x32\x32\x2d\x31\x2e\x36\ +\x36\x2d\x36\x2e\x31\x39\x2d\x36\x2e\x34\x33\x2d\x36\x2e\x31\x34\ +\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\ +\x37\x34\x2e\x32\x34\x2c\x33\x30\x35\x2e\x36\x34\x63\x30\x2d\x31\ +\x35\x31\x2e\x37\x34\x2d\x31\x32\x31\x2e\x37\x31\x2d\x32\x37\x34\ +\x2e\x32\x39\x2d\x32\x37\x32\x2e\x35\x37\x2d\x32\x37\x34\x2e\x34\ +\x36\x2d\x31\x35\x33\x2e\x30\x33\x2d\x2e\x31\x36\x2d\x32\x37\x35\ +\x2e\x38\x36\x2c\x31\x32\x31\x2e\x39\x2d\x32\x37\x35\x2e\x39\x36\ +\x2c\x32\x37\x34\x2e\x32\x34\x2d\x2e\x31\x2c\x31\x35\x30\x2e\x32\ +\x36\x2c\x31\x32\x32\x2e\x34\x2c\x32\x37\x32\x2e\x35\x36\x2c\x32\ +\x37\x31\x2e\x30\x32\x2c\x32\x37\x34\x2e\x36\x33\x2c\x31\x35\x32\ +\x2e\x39\x32\x2c\x32\x2e\x31\x33\x2c\x32\x38\x30\x2e\x33\x32\x2d\ +\x31\x32\x35\x2e\x39\x39\x2c\x32\x37\x37\x2e\x35\x31\x2d\x32\x37\ +\x34\x2e\x34\x5a\x4d\x32\x39\x37\x2e\x33\x38\x2c\x35\x32\x35\x2e\ +\x34\x31\x63\x2d\x31\x31\x39\x2e\x30\x33\x2d\x31\x2e\x36\x36\x2d\ +\x32\x31\x37\x2e\x31\x33\x2d\x39\x39\x2e\x36\x31\x2d\x32\x31\x37\ +\x2e\x30\x36\x2d\x32\x31\x39\x2e\x39\x35\x2e\x30\x38\x2d\x31\x32\ +\x32\x2c\x39\x38\x2e\x34\x35\x2d\x32\x31\x39\x2e\x37\x36\x2c\x32\ +\x32\x31\x2e\x30\x31\x2d\x32\x31\x39\x2e\x36\x33\x2c\x31\x32\x30\ +\x2e\x38\x32\x2e\x31\x33\x2c\x32\x31\x38\x2e\x33\x2c\x39\x38\x2e\ +\x32\x38\x2c\x32\x31\x38\x2e\x33\x2c\x32\x31\x39\x2e\x38\x31\x2c\ +\x32\x2e\x32\x35\x2c\x31\x31\x38\x2e\x38\x37\x2d\x39\x39\x2e\x37\ +\x38\x2c\x32\x32\x31\x2e\x34\x37\x2d\x32\x32\x32\x2e\x32\x35\x2c\ +\x32\x31\x39\x2e\x37\x37\x5a\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\ +\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x31\x33\x2c\x31\x32\x30\x2e\ +\x32\x33\x63\x2d\x32\x35\x2e\x33\x31\x2d\x2e\x33\x35\x2d\x34\x37\ +\x2e\x33\x33\x2c\x31\x35\x2e\x31\x32\x2d\x35\x33\x2e\x31\x33\x2c\ +\x33\x37\x2e\x33\x32\x2d\x36\x2e\x39\x38\x2c\x32\x36\x2e\x37\x2c\ +\x38\x2e\x34\x36\x2c\x35\x33\x2e\x32\x2c\x33\x35\x2e\x35\x35\x2c\ +\x36\x31\x2e\x30\x31\x2c\x32\x39\x2e\x32\x33\x2c\x38\x2e\x34\x32\ +\x2c\x36\x30\x2e\x32\x35\x2d\x36\x2e\x38\x31\x2c\x36\x38\x2e\x35\ +\x2d\x33\x33\x2e\x36\x34\x2c\x39\x2e\x39\x38\x2d\x33\x32\x2e\x34\ +\x36\x2d\x31\x34\x2e\x39\x39\x2d\x36\x34\x2e\x31\x39\x2d\x35\x30\ +\x2e\x39\x31\x2d\x36\x34\x2e\x36\x38\x5a\x22\x2f\x3e\x0a\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x06\x33\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9725,30 +8992,97 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x2e\x38\x37\x2c\x33\x30\x31\ -\x2e\x33\x32\x43\x31\x38\x37\x2e\x33\x35\x2c\x38\x37\x2e\x36\x39\ -\x2c\x34\x30\x35\x2e\x37\x37\x2c\x38\x32\x2c\x35\x38\x31\x2e\x31\ -\x33\x2c\x32\x39\x39\x2e\x33\x37\x2c\x34\x31\x37\x2e\x35\x2c\x35\ -\x30\x35\x2e\x34\x38\x2c\x32\x30\x33\x2e\x37\x36\x2c\x35\x32\x34\ -\x2e\x31\x35\x2c\x31\x38\x2e\x38\x37\x2c\x33\x30\x31\x2e\x33\x32\ -\x5a\x6d\x35\x32\x35\x2e\x30\x36\x2d\x2e\x37\x33\x63\x2d\x31\x36\ -\x31\x2e\x35\x37\x2d\x31\x38\x31\x2e\x35\x33\x2d\x33\x34\x31\x2e\ -\x34\x2d\x31\x37\x33\x2d\x34\x38\x35\x2e\x36\x38\x2c\x32\x43\x32\ -\x32\x33\x2e\x30\x37\x2c\x34\x37\x36\x2c\x33\x38\x32\x2c\x34\x37\ -\x35\x2e\x37\x31\x2c\x35\x34\x33\x2e\x39\x33\x2c\x33\x30\x30\x2e\ -\x35\x39\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\ -\x30\x2e\x32\x33\x2c\x33\x33\x39\x2e\x31\x35\x63\x2d\x35\x34\x2e\ -\x38\x35\x2e\x30\x39\x2d\x39\x37\x2e\x34\x38\x2d\x34\x32\x2e\x32\ -\x36\x2d\x39\x37\x2e\x38\x32\x2d\x39\x37\x2e\x32\x31\x61\x39\x37\ -\x2e\x32\x2c\x39\x37\x2e\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x37\ -\x2e\x32\x33\x2d\x39\x38\x2e\x34\x31\x63\x35\x34\x2e\x31\x38\x2d\ -\x2e\x31\x37\x2c\x39\x37\x2e\x35\x36\x2c\x34\x33\x2e\x31\x34\x2c\ -\x39\x37\x2e\x39\x35\x2c\x39\x37\x2e\x38\x31\x43\x33\x39\x38\x2c\ -\x32\x39\x35\x2e\x35\x34\x2c\x33\x35\x34\x2e\x36\x36\x2c\x33\x33\ -\x39\x2e\x30\x35\x2c\x33\x30\x30\x2e\x32\x33\x2c\x33\x33\x39\x2e\ -\x31\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x03\xbf\ +\x31\x22\x20\x64\x3d\x22\x4d\x34\x38\x31\x2e\x32\x32\x2c\x35\x35\ +\x34\x2e\x39\x34\x63\x2d\x32\x2e\x34\x37\x2c\x30\x2d\x34\x2e\x39\ +\x33\x2d\x2e\x30\x37\x2d\x37\x2e\x33\x39\x2d\x2e\x30\x37\x48\x31\ +\x32\x36\x63\x2d\x32\x2e\x34\x36\x2c\x30\x2d\x34\x2e\x39\x33\x2c\ +\x30\x2d\x37\x2e\x33\x39\x2e\x30\x37\x2d\x32\x30\x2e\x33\x37\x2d\ +\x2e\x37\x39\x2d\x34\x30\x2d\x34\x2e\x36\x38\x2d\x35\x37\x2e\x35\ +\x36\x2d\x31\x35\x2e\x35\x33\x2d\x32\x39\x2e\x33\x37\x2d\x31\x38\ +\x2e\x31\x39\x2d\x34\x32\x2e\x34\x35\x2d\x34\x34\x2e\x39\x34\x2d\ +\x34\x30\x2d\x37\x39\x2e\x32\x37\x2c\x31\x2e\x33\x36\x2d\x31\x39\ +\x2c\x38\x2d\x33\x36\x2e\x33\x37\x2c\x31\x37\x2e\x34\x35\x2d\x35\ +\x32\x2e\x37\x51\x31\x32\x36\x2e\x36\x37\x2c\x32\x35\x34\x2e\x35\ +\x35\x2c\x32\x31\x35\x2c\x31\x30\x31\x2e\x37\x35\x63\x31\x30\x2e\ +\x32\x36\x2d\x31\x37\x2e\x37\x33\x2c\x32\x33\x2e\x33\x35\x2d\x33\ +\x33\x2c\x34\x31\x2d\x34\x33\x2e\x38\x34\x2c\x33\x32\x2e\x30\x38\ +\x2d\x31\x39\x2e\x36\x35\x2c\x36\x39\x2e\x32\x34\x2d\x31\x36\x2e\ +\x35\x39\x2c\x39\x38\x2e\x38\x39\x2c\x38\x61\x31\x33\x31\x2e\x32\ +\x39\x2c\x31\x33\x31\x2e\x32\x39\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x39\x2e\x39\x2c\x33\x35\x2e\x39\x32\x51\x34\x37\x33\x2e\x33\x34\ +\x2c\x32\x35\x35\x2c\x35\x36\x31\x2e\x37\x34\x2c\x34\x30\x38\x2e\ +\x32\x33\x61\x31\x32\x39\x2e\x38\x36\x2c\x31\x32\x39\x2e\x38\x36\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\x2e\x34\x39\x2c\x34\x36\x2e\ +\x32\x39\x63\x35\x2e\x39\x2c\x34\x30\x2e\x31\x37\x2d\x31\x34\x2e\ +\x31\x35\x2c\x37\x35\x2e\x35\x35\x2d\x35\x31\x2e\x38\x34\x2c\x39\ +\x31\x2e\x32\x43\x35\x31\x31\x2e\x39\x34\x2c\x35\x35\x31\x2e\x37\ +\x32\x2c\x34\x39\x36\x2e\x37\x39\x2c\x35\x35\x34\x2e\x33\x38\x2c\ +\x34\x38\x31\x2e\x32\x32\x2c\x35\x35\x34\x2e\x39\x34\x5a\x4d\x32\ +\x39\x37\x2e\x30\x38\x2c\x35\x30\x34\x2e\x30\x37\x68\x31\x30\x32\ +\x63\x32\x35\x2e\x39\x34\x2c\x30\x2c\x35\x31\x2e\x38\x37\x2e\x30\ +\x39\x2c\x37\x37\x2e\x38\x2d\x2e\x30\x38\x2c\x31\x30\x2e\x36\x38\ +\x2d\x2e\x30\x36\x2c\x32\x31\x2e\x31\x38\x2d\x31\x2e\x36\x31\x2c\ +\x33\x31\x2e\x30\x35\x2d\x36\x2e\x30\x37\x2c\x31\x35\x2e\x34\x38\ +\x2d\x37\x2c\x32\x32\x2e\x31\x32\x2d\x31\x39\x2e\x33\x37\x2c\x31\ +\x39\x2e\x36\x33\x2d\x33\x36\x2e\x31\x32\x2d\x31\x2e\x36\x38\x2d\ +\x31\x31\x2e\x33\x37\x2d\x36\x2e\x32\x35\x2d\x32\x31\x2e\x35\x38\ +\x2d\x31\x31\x2e\x39\x32\x2d\x33\x31\x2e\x34\x31\x4c\x34\x31\x31\ +\x2e\x38\x39\x2c\x32\x35\x30\x2e\x37\x31\x71\x2d\x33\x35\x2e\x37\ +\x36\x2d\x36\x31\x2e\x38\x39\x2d\x37\x31\x2e\x35\x35\x2d\x31\x32\ +\x33\x2e\x37\x37\x63\x2d\x35\x2e\x32\x33\x2d\x39\x2d\x31\x31\x2e\ +\x37\x2d\x31\x37\x2e\x30\x37\x2d\x32\x30\x2e\x31\x36\x2d\x32\x33\ +\x2e\x33\x32\x2d\x31\x33\x2e\x36\x33\x2d\x31\x30\x2e\x30\x35\x2d\ +\x32\x37\x2e\x33\x33\x2d\x31\x30\x2d\x34\x30\x2e\x38\x35\x2e\x32\ +\x32\x2d\x39\x2e\x34\x33\x2c\x37\x2e\x31\x31\x2d\x31\x36\x2e\x31\ +\x34\x2c\x31\x36\x2e\x34\x38\x2d\x32\x32\x2c\x32\x36\x2e\x35\x38\ +\x51\x31\x37\x30\x2e\x36\x38\x2c\x32\x38\x30\x2e\x35\x37\x2c\x38\ +\x34\x2c\x34\x33\x30\x2e\x37\x41\x31\x30\x33\x2e\x39\x33\x2c\x31\ +\x30\x33\x2e\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x37\x35\x2c\x34\ +\x35\x30\x63\x2d\x32\x2e\x35\x34\x2c\x37\x2e\x36\x34\x2d\x34\x2c\ +\x31\x35\x2e\x34\x37\x2d\x32\x2e\x38\x38\x2c\x32\x33\x2e\x35\x32\ +\x43\x37\x34\x2c\x34\x38\x36\x2e\x38\x38\x2c\x38\x32\x2e\x36\x38\ +\x2c\x34\x39\x34\x2e\x34\x2c\x39\x34\x2e\x35\x33\x2c\x34\x39\x39\ +\x63\x31\x30\x2e\x31\x35\x2c\x34\x2c\x32\x30\x2e\x37\x39\x2c\x35\ +\x2c\x33\x31\x2e\x35\x37\x2c\x35\x51\x32\x31\x31\x2e\x36\x2c\x35\ +\x30\x34\x2e\x30\x39\x2c\x32\x39\x37\x2e\x30\x38\x2c\x35\x30\x34\ +\x2e\x30\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ +\x31\x38\x2e\x36\x2c\x33\x30\x34\x2e\x38\x34\x71\x2d\x31\x2e\x35\ +\x38\x2c\x34\x35\x2e\x38\x32\x2d\x33\x2e\x30\x39\x2c\x39\x31\x2e\ +\x36\x36\x63\x2d\x2e\x30\x37\x2c\x32\x2e\x32\x36\x2d\x2e\x37\x34\ +\x2c\x32\x2e\x37\x37\x2d\x32\x2e\x39\x31\x2c\x32\x2e\x37\x35\x2d\ +\x31\x31\x2e\x33\x2d\x2e\x31\x31\x2d\x32\x32\x2e\x36\x2d\x2e\x31\ +\x36\x2d\x33\x33\x2e\x39\x2c\x30\x2d\x32\x2e\x36\x37\x2c\x30\x2d\ +\x33\x2e\x30\x38\x2d\x2e\x39\x2d\x33\x2e\x31\x34\x2d\x33\x2e\x31\ +\x38\x2d\x2e\x35\x37\x2d\x31\x39\x2e\x31\x37\x2d\x31\x2e\x32\x33\ +\x2d\x33\x38\x2e\x33\x34\x2d\x31\x2e\x38\x38\x2d\x35\x37\x2e\x35\ +\x31\x71\x2d\x31\x2e\x35\x39\x2d\x34\x37\x2e\x36\x38\x2d\x33\x2e\ +\x32\x31\x2d\x39\x35\x2e\x33\x36\x63\x2d\x2e\x33\x34\x2d\x31\x30\ +\x2e\x32\x35\x2d\x2e\x35\x39\x2d\x32\x30\x2e\x35\x2d\x31\x2d\x33\ +\x30\x2e\x37\x35\x2d\x2e\x30\x37\x2d\x31\x2e\x38\x2e\x36\x33\x2d\ +\x31\x2e\x39\x34\x2c\x32\x2e\x30\x38\x2d\x31\x2e\x39\x34\x71\x32\ +\x33\x2e\x39\x34\x2e\x30\x36\x2c\x34\x37\x2e\x38\x36\x2c\x30\x63\ +\x31\x2e\x39\x32\x2c\x30\x2c\x32\x2e\x33\x33\x2e\x35\x34\x2c\x32\ +\x2e\x32\x36\x2c\x32\x2e\x33\x37\x2d\x2e\x35\x33\x2c\x31\x34\x2e\ +\x34\x32\x2d\x2e\x39\x34\x2c\x32\x38\x2e\x38\x34\x2d\x31\x2e\x34\ +\x32\x2c\x34\x33\x2e\x32\x37\x71\x2d\x2e\x38\x31\x2c\x32\x34\x2e\ +\x33\x33\x2d\x31\x2e\x36\x39\x2c\x34\x38\x2e\x36\x37\x5a\x22\x2f\ +\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x36\x36\x2c\x34\x34\x38\ +\x63\x2e\x31\x2d\x31\x36\x2c\x39\x2e\x37\x37\x2d\x32\x38\x2c\x32\ +\x34\x2e\x35\x36\x2d\x33\x30\x2e\x36\x39\x61\x32\x38\x2e\x38\x31\ +\x2c\x32\x38\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x33\x2e\ +\x38\x34\x2c\x32\x34\x2e\x33\x34\x63\x31\x2e\x35\x37\x2c\x31\x31\ +\x2d\x2e\x34\x33\x2c\x32\x31\x2e\x31\x33\x2d\x38\x2e\x38\x34\x2c\ +\x32\x38\x2e\x39\x32\x2d\x39\x2e\x31\x33\x2c\x38\x2e\x34\x36\x2d\ +\x32\x30\x2c\x31\x30\x2e\x30\x38\x2d\x33\x31\x2e\x34\x35\x2c\x35\ +\x2e\x36\x37\x43\x32\x37\x33\x2c\x34\x37\x32\x2c\x32\x36\x37\x2e\ +\x36\x35\x2c\x34\x36\x33\x2e\x31\x33\x2c\x32\x36\x36\x2e\x32\x34\ +\x2c\x34\x35\x31\x2e\x36\x33\x2c\x32\x36\x36\x2e\x30\x38\x2c\x34\ +\x35\x30\x2e\x33\x32\x2c\x32\x36\x36\x2e\x30\x37\x2c\x34\x34\x39\ +\x2c\x32\x36\x36\x2c\x34\x34\x38\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ +\x67\x3e\ +\x00\x00\x04\x9d\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9757,60 +9091,124 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x65\x32\x62\x32\x34\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x32\x33\x2c\x32\x39\x39\x2e\x35\x35\ -\x43\x31\x39\x31\x2e\x34\x33\x2c\x38\x35\x2e\x39\x32\x2c\x34\x30\ -\x39\x2e\x38\x35\x2c\x38\x30\x2e\x32\x34\x2c\x35\x38\x35\x2e\x32\ -\x31\x2c\x32\x39\x37\x2e\x36\x2c\x34\x32\x31\x2e\x35\x39\x2c\x35\ -\x30\x33\x2e\x37\x31\x2c\x32\x30\x37\x2e\x38\x35\x2c\x35\x32\x32\ -\x2e\x33\x38\x2c\x32\x33\x2c\x32\x39\x39\x2e\x35\x35\x5a\x4d\x35\ -\x34\x38\x2c\x32\x39\x38\x2e\x38\x32\x63\x2d\x31\x36\x31\x2e\x35\ -\x37\x2d\x31\x38\x31\x2e\x35\x33\x2d\x33\x34\x31\x2e\x34\x2d\x31\ -\x37\x33\x2d\x34\x38\x35\x2e\x36\x39\x2c\x32\x43\x32\x32\x37\x2e\ -\x31\x35\x2c\x34\x37\x34\x2e\x32\x35\x2c\x33\x38\x36\x2e\x31\x32\ -\x2c\x34\x37\x33\x2e\x39\x34\x2c\x35\x34\x38\x2c\x32\x39\x38\x2e\ -\x38\x32\x5a\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x32\x39\x32\ -\x2e\x37\x34\x22\x20\x79\x3d\x22\x34\x35\x30\x2e\x30\x35\x22\x20\ -\x77\x69\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\ -\x67\x68\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\ -\x37\x2e\x36\x32\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x37\x38\ -\x2e\x33\x22\x20\x79\x3d\x22\x33\x35\x34\x2e\x36\x22\x20\x77\x69\ -\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\x67\x68\ -\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\x37\x2e\ -\x36\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\ -\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x37\x31\x2e\x34\x35\x20\ -\x33\x33\x2e\x37\x35\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x34\x30\ -\x2e\x32\x33\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x36\ -\x32\x2e\x38\x32\x22\x20\x79\x3d\x22\x34\x31\x37\x2e\x31\x38\x22\ -\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\ -\x69\x67\x68\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\ -\x22\x37\x2e\x36\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ -\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x38\x37\x2c\x20\x30\ -\x2e\x35\x2c\x20\x2d\x30\x2e\x35\x2c\x20\x30\x2e\x38\x37\x2c\x20\ -\x32\x34\x38\x2e\x33\x36\x2c\x20\x2d\x32\x36\x2e\x37\x39\x29\x22\ -\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x35\x31\x32\x2e\x34\x31\x22\ -\x20\x79\x3d\x22\x33\x35\x34\x2e\x36\x22\x20\x77\x69\x64\x74\x68\ -\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ -\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\x37\x2e\x36\x32\x22\ -\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ -\x73\x6c\x61\x74\x65\x28\x31\x31\x37\x33\x2e\x38\x38\x20\x33\x34\ -\x35\x2e\x30\x32\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x33\x39\ -\x2e\x37\x37\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x32\ -\x33\x2e\x30\x32\x22\x20\x79\x3d\x22\x34\x32\x31\x2e\x33\x22\x20\ -\x77\x69\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\ -\x67\x68\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\ -\x37\x2e\x36\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ -\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x31\x30\x33\x37\x2e\ -\x36\x32\x20\x36\x33\x30\x2e\x33\x29\x20\x72\x6f\x74\x61\x74\x65\ -\x28\x31\x35\x30\x29\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x09\xb0\ +\x31\x22\x20\x64\x3d\x22\x4d\x34\x36\x35\x2e\x36\x34\x2c\x31\x35\ +\x32\x2e\x35\x63\x2d\x32\x2e\x33\x2d\x31\x35\x2e\x38\x2d\x31\x31\ +\x2e\x39\x2d\x32\x35\x2e\x39\x2d\x32\x37\x2e\x36\x2d\x32\x39\x2e\ +\x32\x2d\x31\x36\x2e\x36\x2d\x33\x2e\x35\x2d\x33\x33\x2e\x33\x2d\ +\x36\x2e\x36\x2d\x35\x30\x2e\x31\x2d\x39\x2e\x32\x2d\x38\x2e\x37\ +\x2d\x31\x2e\x34\x2d\x31\x34\x2e\x31\x2d\x33\x2e\x36\x2d\x31\x35\ +\x2e\x31\x2d\x31\x34\x2e\x31\x2d\x31\x2e\x38\x2d\x31\x38\x2d\x31\ +\x33\x2e\x34\x2d\x32\x38\x2d\x33\x31\x2e\x31\x2d\x33\x31\x2e\x32\ +\x71\x2d\x32\x39\x2d\x35\x2e\x32\x35\x2d\x35\x38\x2d\x31\x30\x2e\ +\x36\x63\x2d\x31\x37\x2e\x37\x2d\x33\x2e\x33\x2d\x33\x31\x2e\x38\ +\x2c\x32\x2e\x35\x2d\x34\x30\x2e\x31\x2c\x31\x38\x2e\x34\x2d\x34\ +\x2e\x34\x2c\x38\x2e\x35\x2d\x39\x2e\x35\x2c\x39\x2e\x34\x2d\x31\ +\x37\x2e\x38\x2c\x37\x2e\x36\x2d\x31\x36\x2e\x36\x2d\x33\x2e\x35\ +\x2d\x33\x33\x2e\x34\x2d\x36\x2e\x34\x2d\x35\x30\x2e\x31\x2d\x39\ +\x2e\x31\x2d\x31\x35\x2e\x35\x2d\x32\x2e\x35\x2d\x32\x38\x2e\x34\ +\x2c\x32\x2e\x32\x2d\x33\x36\x2e\x39\x2c\x31\x36\x2e\x31\x2d\x39\ +\x2e\x33\x2c\x31\x35\x2e\x33\x2d\x35\x2e\x37\x2c\x32\x33\x2e\x36\ +\x2c\x31\x31\x2e\x35\x2c\x32\x36\x2e\x38\x2c\x34\x39\x2e\x31\x2c\ +\x39\x2e\x31\x2c\x39\x38\x2e\x32\x2c\x31\x38\x2c\x31\x34\x37\x2e\ +\x32\x2c\x32\x37\x6c\x31\x34\x37\x2e\x33\x2c\x32\x37\x43\x34\x36\ +\x31\x2e\x34\x34\x2c\x31\x37\x35\x2e\x31\x2c\x34\x36\x38\x2e\x31\ +\x34\x2c\x31\x36\x39\x2c\x34\x36\x35\x2e\x36\x34\x2c\x31\x35\x32\ +\x2e\x35\x5a\x4d\x32\x35\x39\x2e\x38\x34\x2c\x38\x38\x73\x34\x2e\ +\x33\x2d\x32\x33\x2e\x37\x2c\x32\x39\x2e\x38\x2d\x31\x39\x2e\x31\ +\x6c\x34\x32\x2e\x31\x2c\x37\x2e\x37\x63\x32\x35\x2e\x34\x2c\x34\ +\x2e\x37\x2c\x32\x31\x2e\x31\x2c\x32\x38\x2e\x34\x2c\x32\x31\x2e\ +\x31\x2c\x32\x38\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x34\x33\x33\x2e\x32\x34\x2c\x31\x38\x34\x2e\x36\x48\x31\ +\x36\x36\x2e\x38\x34\x61\x32\x37\x2e\x30\x38\x2c\x32\x37\x2e\x30\ +\x38\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x36\x2e\x39\x2c\x33\x30\x2e\ +\x35\x4c\x31\x37\x38\x2e\x37\x34\x2c\x35\x31\x39\x61\x32\x37\x2e\ +\x31\x31\x2c\x32\x37\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x32\ +\x36\x2e\x39\x2c\x32\x33\x2e\x37\x68\x31\x39\x32\x2e\x33\x61\x32\ +\x37\x2e\x30\x35\x2c\x32\x37\x2e\x30\x35\x2c\x30\x2c\x30\x2c\x30\ +\x2c\x32\x36\x2e\x39\x2d\x32\x34\x6c\x33\x35\x2e\x33\x2d\x33\x30\ +\x33\x2e\x39\x41\x32\x37\x2c\x32\x37\x2c\x30\x2c\x30\x2c\x30\x2c\ +\x34\x33\x33\x2e\x32\x34\x2c\x31\x38\x34\x2e\x36\x5a\x4d\x32\x34\ +\x30\x2e\x38\x34\x2c\x35\x30\x38\x68\x2d\x33\x63\x2d\x35\x2e\x32\ +\x2e\x35\x2d\x37\x2d\x32\x2e\x39\x2d\x37\x2e\x36\x2d\x37\x2e\x36\ +\x6c\x2d\x33\x33\x2e\x36\x2d\x32\x37\x33\x2e\x37\x63\x2d\x2e\x36\ +\x2d\x34\x2e\x37\x2c\x33\x2e\x32\x2d\x39\x2c\x38\x2e\x34\x2d\x39\ +\x2e\x36\x68\x2d\x33\x63\x35\x2e\x32\x2d\x2e\x35\x2c\x31\x33\x2c\ +\x32\x2e\x39\x2c\x31\x33\x2e\x35\x2c\x37\x2e\x36\x6c\x33\x33\x2e\ +\x36\x2c\x32\x37\x33\x2e\x37\x43\x32\x34\x39\x2e\x38\x34\x2c\x35\ +\x30\x33\x2e\x32\x2c\x32\x34\x36\x2c\x35\x30\x37\x2e\x35\x2c\x32\ +\x34\x30\x2e\x38\x34\x2c\x35\x30\x38\x5a\x6d\x36\x35\x2e\x35\x2d\ +\x39\x61\x39\x2e\x31\x33\x2c\x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x39\x2e\x31\x2c\x39\x2e\x31\x68\x2d\x2e\x39\x61\x39\x2e\ +\x31\x33\x2c\x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\ +\x31\x2d\x39\x2e\x31\x56\x32\x32\x34\x2e\x34\x61\x39\x2e\x31\x33\ +\x2c\x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x31\x2d\ +\x39\x2e\x31\x68\x2e\x39\x61\x39\x2e\x31\x33\x2c\x39\x2e\x31\x33\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x31\x2c\x39\x2e\x31\x5a\x6d\ +\x39\x33\x2e\x35\x2d\x32\x37\x32\x2e\x34\x2d\x33\x33\x2e\x36\x2c\ +\x32\x37\x33\x2e\x37\x63\x2d\x2e\x36\x2c\x34\x2e\x37\x2d\x35\x2e\ +\x33\x2c\x38\x2e\x32\x2d\x31\x30\x2e\x36\x2c\x37\x2e\x36\x68\x30\ +\x63\x2d\x35\x2e\x32\x2d\x2e\x35\x2d\x39\x2d\x34\x2e\x38\x2d\x38\ +\x2e\x34\x2d\x39\x2e\x36\x6c\x33\x33\x2e\x36\x2d\x32\x37\x33\x2e\ +\x37\x63\x2e\x36\x2d\x34\x2e\x37\x2c\x35\x2e\x33\x2d\x38\x2e\x32\ +\x2c\x31\x30\x2e\x36\x2d\x37\x2e\x36\x68\x30\x43\x33\x39\x36\x2e\ +\x36\x34\x2c\x32\x31\x37\x2e\x36\x2c\x34\x30\x30\x2e\x34\x34\x2c\ +\x32\x32\x31\x2e\x39\x2c\x33\x39\x39\x2e\x38\x34\x2c\x32\x32\x36\ +\x2e\x36\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x02\xfb\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x32\x38\x32\x2e\x35\x36\x2c\x32\x33\ +\x37\x63\x30\x2c\x32\x34\x2e\x37\x32\x2e\x38\x34\x2c\x34\x35\x2e\ +\x36\x37\x2d\x2e\x32\x31\x2c\x36\x36\x2e\x35\x32\x2d\x31\x2e\x34\ +\x38\x2c\x32\x39\x2e\x37\x36\x2d\x32\x32\x2e\x37\x34\x2c\x34\x32\ +\x2e\x31\x38\x2d\x34\x38\x2e\x36\x2c\x32\x37\x2e\x36\x71\x2d\x39\ +\x33\x2e\x32\x31\x2d\x35\x32\x2e\x35\x36\x2d\x31\x38\x35\x2e\x33\ +\x34\x2d\x31\x30\x37\x63\x2d\x32\x35\x2e\x36\x36\x2d\x31\x35\x2e\ +\x31\x35\x2d\x32\x36\x2e\x30\x37\x2d\x34\x30\x2e\x35\x36\x2d\x2e\ +\x37\x34\x2d\x35\x35\x2e\x35\x35\x51\x31\x33\x39\x2e\x37\x36\x2c\ +\x31\x31\x34\x2c\x32\x33\x33\x2c\x36\x31\x2e\x35\x32\x63\x32\x36\ +\x2e\x39\x33\x2d\x31\x35\x2e\x31\x38\x2c\x34\x38\x2e\x32\x38\x2d\ +\x32\x2e\x32\x34\x2c\x34\x39\x2e\x34\x2c\x32\x39\x2c\x2e\x37\x34\ +\x2c\x32\x30\x2e\x37\x33\x2e\x31\x34\x2c\x34\x31\x2e\x35\x31\x2e\ +\x31\x34\x2c\x36\x35\x2e\x31\x37\x2c\x31\x38\x2c\x30\x2d\x31\x34\ +\x2e\x35\x2c\x30\x2c\x2e\x34\x2c\x30\x2c\x36\x36\x2e\x33\x33\x2e\ +\x31\x2d\x31\x36\x2e\x34\x33\x2d\x2e\x33\x32\x2c\x34\x39\x2e\x38\ +\x39\x2e\x34\x34\x2c\x31\x33\x31\x2e\x33\x38\x2c\x31\x2e\x35\x31\ +\x2c\x32\x33\x34\x2e\x33\x38\x2c\x35\x39\x2e\x35\x2c\x32\x33\x38\ +\x2e\x31\x32\x2c\x31\x38\x37\x2c\x33\x2e\x37\x39\x2c\x31\x32\x39\ +\x2e\x34\x33\x2d\x39\x33\x2c\x31\x39\x32\x2e\x31\x35\x2d\x32\x32\ +\x34\x2e\x38\x38\x2c\x31\x39\x39\x2e\x37\x37\x2d\x35\x39\x2e\x34\ +\x32\x2c\x33\x2e\x34\x33\x2d\x31\x31\x39\x2e\x31\x38\x2c\x31\x2e\ +\x34\x39\x2d\x31\x37\x38\x2e\x37\x38\x2e\x38\x32\x2d\x32\x35\x2e\ +\x39\x2d\x2e\x32\x39\x2d\x34\x32\x2e\x38\x32\x2d\x31\x37\x2e\x33\ +\x38\x2d\x34\x33\x2e\x31\x35\x2d\x33\x39\x2e\x38\x37\x2d\x2e\x33\ +\x35\x2d\x32\x33\x2e\x34\x37\x2c\x31\x37\x2e\x33\x31\x2d\x34\x30\ +\x2e\x39\x2c\x34\x34\x2e\x33\x37\x2d\x34\x31\x2e\x32\x37\x2c\x35\ +\x39\x2e\x36\x2d\x2e\x38\x32\x2c\x31\x31\x39\x2e\x33\x31\x2c\x31\ +\x2e\x34\x2c\x31\x37\x38\x2e\x38\x2d\x31\x2e\x33\x34\x2c\x38\x30\ +\x2e\x30\x35\x2d\x33\x2e\x36\x38\x2c\x31\x34\x33\x2e\x31\x33\x2d\ +\x33\x30\x2e\x31\x36\x2c\x31\x34\x32\x2e\x37\x38\x2d\x31\x31\x30\ +\x2e\x38\x37\x2d\x2e\x33\x35\x2d\x38\x31\x2e\x36\x38\x2d\x36\x35\ +\x2e\x32\x32\x2d\x31\x31\x30\x2d\x31\x34\x36\x2e\x35\x32\x2d\x31\ +\x31\x32\x2e\x37\x38\x2d\x35\x34\x2e\x35\x2d\x31\x2e\x38\x38\x2c\ +\x34\x30\x2d\x2e\x35\x31\x2d\x31\x34\x2e\x36\x2d\x2e\x35\x37\x43\ +\x32\x39\x38\x2e\x39\x34\x2c\x32\x33\x37\x2c\x33\x31\x36\x2e\x32\ +\x34\x2c\x32\x33\x37\x2c\x32\x38\x32\x2e\x35\x36\x2c\x32\x33\x37\ +\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x06\x06\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -9822,152 +9220,94 @@ \x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x39\x2e\x35\x31\x2c\x34\x37\ -\x33\x2e\x38\x35\x63\x2d\x35\x34\x2c\x30\x2d\x31\x30\x38\x2e\x30\ -\x37\x2d\x2e\x32\x34\x2d\x31\x36\x32\x2e\x30\x39\x2e\x32\x32\x2d\ -\x39\x2e\x36\x34\x2e\x30\x39\x2d\x31\x32\x2e\x32\x33\x2d\x32\x2e\ -\x35\x36\x2d\x31\x32\x2e\x32\x2d\x31\x32\x2e\x32\x71\x2e\x35\x31\ -\x2d\x31\x36\x32\x2e\x30\x39\x2c\x30\x2d\x33\x32\x34\x2e\x31\x38\ -\x63\x30\x2d\x39\x2e\x36\x33\x2c\x32\x2e\x35\x36\x2d\x31\x32\x2e\ -\x32\x33\x2c\x31\x32\x2e\x31\x39\x2d\x31\x32\x2e\x31\x39\x71\x31\ -\x36\x32\x2e\x30\x39\x2e\x35\x2c\x33\x32\x34\x2e\x31\x38\x2c\x30\ -\x63\x39\x2e\x36\x33\x2c\x30\x2c\x31\x32\x2e\x32\x33\x2c\x32\x2e\ -\x35\x35\x2c\x31\x32\x2e\x32\x2c\x31\x32\x2e\x31\x39\x71\x2d\x2e\ -\x35\x31\x2c\x31\x36\x32\x2e\x30\x39\x2c\x30\x2c\x33\x32\x34\x2e\ -\x31\x38\x63\x30\x2c\x39\x2e\x36\x33\x2d\x32\x2e\x35\x35\x2c\x31\ -\x32\x2e\x32\x39\x2d\x31\x32\x2e\x32\x2c\x31\x32\x2e\x32\x43\x34\ -\x30\x37\x2e\x35\x37\x2c\x34\x37\x33\x2e\x36\x31\x2c\x33\x35\x33\ -\x2e\x35\x33\x2c\x34\x37\x33\x2e\x38\x35\x2c\x32\x39\x39\x2e\x35\ -\x31\x2c\x34\x37\x33\x2e\x38\x35\x5a\x4d\x34\x33\x35\x2e\x33\x33\ -\x2c\x33\x30\x31\x2e\x32\x63\x30\x2d\x34\x31\x2e\x36\x36\x2d\x2e\ -\x32\x35\x2d\x38\x33\x2e\x33\x32\x2e\x32\x2d\x31\x32\x35\x2c\x2e\ -\x31\x2d\x39\x2e\x30\x36\x2d\x31\x2e\x35\x2d\x31\x32\x2e\x35\x37\ -\x2d\x31\x31\x2e\x37\x2d\x31\x32\x2e\x35\x32\x71\x2d\x31\x32\x34\ -\x2e\x32\x37\x2e\x36\x36\x2d\x32\x34\x38\x2e\x35\x37\x2e\x30\x39\ -\x63\x2d\x38\x2e\x33\x39\x2c\x30\x2d\x31\x31\x2e\x38\x37\x2c\x31\ -\x2e\x33\x33\x2d\x31\x31\x2e\x38\x32\x2c\x31\x31\x71\x2e\x36\x32\ -\x2c\x31\x32\x35\x2c\x30\x2c\x32\x35\x30\x63\x30\x2c\x39\x2e\x35\ -\x2c\x33\x2e\x32\x31\x2c\x31\x31\x2e\x30\x39\x2c\x31\x31\x2e\x37\ -\x32\x2c\x31\x31\x2e\x30\x36\x71\x31\x32\x34\x2e\x32\x39\x2d\x2e\ -\x34\x32\x2c\x32\x34\x38\x2e\x35\x38\x2e\x30\x38\x63\x31\x30\x2e\ -\x30\x38\x2e\x30\x35\x2c\x31\x31\x2e\x39\x2d\x33\x2e\x32\x35\x2c\ -\x31\x31\x2e\x37\x39\x2d\x31\x32\x2e\x34\x34\x43\x34\x33\x35\x2e\ -\x30\x36\x2c\x33\x38\x32\x2e\x36\x39\x2c\x34\x33\x35\x2e\x33\x33\ -\x2c\x33\x34\x31\x2e\x39\x34\x2c\x34\x33\x35\x2e\x33\x33\x2c\x33\ -\x30\x31\x2e\x32\x5a\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\ -\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x70\ -\x6f\x69\x6e\x74\x73\x3d\x22\x32\x31\x34\x2e\x39\x34\x20\x32\x31\ -\x34\x2e\x37\x36\x20\x32\x38\x33\x2e\x39\x35\x20\x32\x31\x34\x2e\ -\x37\x36\x20\x32\x38\x33\x2e\x39\x35\x20\x31\x38\x33\x2e\x35\x34\ -\x20\x31\x38\x33\x2e\x31\x36\x20\x31\x38\x33\x2e\x35\x34\x20\x31\ -\x38\x33\x2e\x31\x36\x20\x32\x38\x34\x2e\x33\x33\x20\x32\x31\x34\ -\x2e\x39\x34\x20\x32\x38\x34\x2e\x33\x33\x20\x32\x31\x34\x2e\x39\ -\x34\x20\x32\x31\x34\x2e\x37\x36\x22\x2f\x3e\x3c\x70\x6f\x6c\x79\ -\x67\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x38\x33\x2e\x39\x32\ -\x20\x33\x38\x34\x2e\x37\x35\x20\x33\x31\x34\x2e\x39\x20\x33\x38\ -\x34\x2e\x37\x35\x20\x33\x31\x34\x2e\x39\x20\x34\x31\x35\x2e\x39\ -\x37\x20\x34\x31\x35\x2e\x36\x39\x20\x34\x31\x35\x2e\x39\x37\x20\ -\x34\x31\x35\x2e\x36\x39\x20\x33\x31\x35\x2e\x31\x38\x20\x33\x38\ -\x33\x2e\x39\x32\x20\x33\x31\x35\x2e\x31\x38\x20\x33\x38\x33\x2e\ -\x39\x32\x20\x33\x38\x34\x2e\x37\x35\x22\x2f\x3e\x3c\x72\x65\x63\ -\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x78\x3d\x22\x31\x36\x34\x2e\x31\x31\x22\x20\x79\x3d\x22\x33\x35\ -\x2e\x34\x33\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\ -\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\ -\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x32\x34\x31\x2e\x37\x33\ -\x22\x20\x79\x3d\x22\x33\x36\x2e\x34\x33\x22\x20\x77\x69\x64\x74\ -\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\ -\x3d\x22\x36\x30\x2e\x34\x38\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\ -\x22\x33\x31\x39\x2e\x32\x33\x22\x20\x79\x3d\x22\x33\x36\x22\x20\ -\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\ -\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\x22\x2f\x3e\x3c\x72\ -\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x78\x3d\x22\x33\x39\x36\x2e\x37\x35\x22\x20\x79\x3d\x22\ -\x33\x35\x2e\x34\x33\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\ -\x2e\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\ -\x34\x38\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x36\x34\x2e\ -\x30\x39\x22\x20\x79\x3d\x22\x35\x30\x33\x2e\x31\x22\x20\x77\x69\ -\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\ -\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\x22\x2f\x3e\x3c\x72\x65\x63\ -\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x78\x3d\x22\x32\x34\x31\x2e\x37\x32\x22\x20\x79\x3d\x22\x35\x30\ -\x34\x2e\x30\x39\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\ -\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\ -\x38\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\ -\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x33\x31\x39\x2e\x32\ -\x32\x22\x20\x79\x3d\x22\x35\x30\x33\x2e\x36\x36\x22\x20\x77\x69\ -\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\ -\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\x22\x2f\x3e\x3c\x72\x65\x63\ -\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x78\x3d\x22\x33\x39\x36\x2e\x37\x34\x22\x20\x79\x3d\x22\x35\x30\ -\x33\x2e\x31\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\ -\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\ -\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\ -\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x32\x2e\x35\x36\x22\ -\x20\x79\x3d\x22\x33\x38\x35\x2e\x38\x37\x22\x20\x77\x69\x64\x74\ -\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\ -\x3d\x22\x36\x30\x2e\x34\x38\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\ -\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x33\ -\x35\x34\x2e\x34\x37\x20\x34\x37\x37\x2e\x37\x35\x29\x20\x72\x6f\ -\x74\x61\x74\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\x3c\x72\x65\x63\ -\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ -\x78\x3d\x22\x34\x33\x2e\x35\x36\x22\x20\x79\x3d\x22\x33\x30\x38\ -\x2e\x32\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\ -\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\ -\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\ -\x6e\x73\x6c\x61\x74\x65\x28\x2d\x32\x37\x35\x2e\x38\x35\x20\x34\ -\x30\x31\x2e\x31\x31\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x39\ -\x30\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ -\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x33\x2e\x31\ -\x33\x22\x20\x79\x3d\x22\x32\x33\x30\x2e\x37\x34\x22\x20\x77\x69\ -\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\ -\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\x22\x20\x74\x72\x61\x6e\x73\ -\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\ -\x2d\x31\x39\x38\x2e\x37\x38\x20\x33\x32\x33\x2e\x31\x39\x29\x20\ -\x72\x6f\x74\x61\x74\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\x3c\x72\ -\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ -\x22\x20\x78\x3d\x22\x34\x32\x2e\x35\x36\x22\x20\x79\x3d\x22\x31\ -\x35\x33\x2e\x32\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\ -\x2e\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\ -\x34\x38\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\ -\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x31\x32\x31\x2e\x38\x32\ -\x20\x32\x34\x35\x2e\x31\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\ -\x39\x30\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x35\x31\x38\ -\x2e\x32\x39\x22\x20\x79\x3d\x22\x33\x37\x30\x2e\x34\x32\x22\x20\ -\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\ -\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\x22\x20\x74\x72\x61\ -\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\ -\x65\x28\x31\x33\x36\x2e\x37\x31\x20\x39\x33\x38\x2e\x30\x33\x29\ -\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\x3c\ -\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x78\x3d\x22\x35\x31\x39\x2e\x32\x39\x22\x20\x79\x3d\ -\x22\x32\x39\x32\x2e\x37\x39\x22\x20\x77\x69\x64\x74\x68\x3d\x22\ -\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\ -\x30\x2e\x34\x38\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ -\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x31\x35\x2e\x33\ -\x33\x20\x38\x36\x31\x2e\x33\x39\x29\x20\x72\x6f\x74\x61\x74\x65\ -\x28\x2d\x39\x30\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\ -\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x35\ -\x31\x38\x2e\x38\x36\x22\x20\x79\x3d\x22\x32\x31\x35\x2e\x32\x39\ -\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x38\x2e\x31\x35\x22\x20\ -\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x2e\x34\x38\x22\x20\x74\ -\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\ -\x61\x74\x65\x28\x32\x39\x32\x2e\x34\x20\x37\x38\x33\x2e\x34\x36\ -\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\ -\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ -\x2d\x31\x22\x20\x78\x3d\x22\x35\x31\x38\x2e\x32\x39\x22\x20\x79\ -\x3d\x22\x31\x33\x37\x2e\x37\x37\x22\x20\x77\x69\x64\x74\x68\x3d\ -\x22\x33\x38\x2e\x31\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ -\x36\x30\x2e\x34\x38\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ -\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x33\x36\x39\x2e\ -\x33\x36\x20\x37\x30\x35\x2e\x33\x38\x29\x20\x72\x6f\x74\x61\x74\ -\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\xc4\ +\x31\x22\x20\x64\x3d\x22\x4d\x33\x37\x32\x2e\x31\x36\x2c\x39\x35\ +\x2e\x39\x31\x68\x34\x37\x2e\x35\x35\x63\x31\x2e\x37\x33\x2c\x32\ +\x2e\x34\x33\x2c\x33\x2e\x33\x2c\x35\x2c\x35\x2e\x32\x31\x2c\x37\ +\x2e\x32\x35\x2c\x32\x31\x2e\x38\x33\x2c\x32\x36\x2c\x34\x33\x2e\ +\x36\x32\x2c\x35\x32\x2c\x36\x35\x2e\x36\x39\x2c\x37\x37\x2e\x37\ +\x32\x61\x31\x39\x2e\x35\x33\x2c\x31\x39\x2e\x35\x33\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x35\x2c\x31\x33\x2e\x38\x32\x71\x2d\x2e\x32\x31\ +\x2c\x31\x35\x30\x2c\x2e\x30\x38\x2c\x33\x30\x30\x63\x30\x2c\x37\ +\x2e\x33\x38\x2d\x31\x2e\x35\x32\x2c\x39\x2e\x34\x33\x2d\x39\x2e\ +\x32\x39\x2c\x39\x2e\x34\x32\x71\x2d\x31\x38\x36\x2e\x34\x35\x2d\ +\x2e\x34\x32\x2d\x33\x37\x32\x2e\x39\x2c\x30\x63\x2d\x38\x2c\x30\ +\x2d\x39\x2e\x31\x38\x2d\x32\x2e\x33\x35\x2d\x39\x2e\x31\x37\x2d\ +\x39\x2e\x35\x33\x71\x2e\x33\x34\x2d\x31\x39\x34\x2e\x38\x35\x2e\ +\x31\x39\x2d\x33\x38\x39\x2e\x36\x39\x63\x30\x2d\x33\x2c\x2e\x34\ +\x34\x2d\x36\x2c\x2e\x36\x37\x2d\x39\x48\x31\x36\x33\x2e\x37\x63\ +\x2d\x2e\x32\x2c\x32\x2e\x34\x2d\x2e\x35\x37\x2c\x34\x2e\x37\x39\ +\x2d\x2e\x35\x38\x2c\x37\x2e\x31\x38\x2c\x30\x2c\x34\x36\x2e\x38\ +\x32\x2e\x31\x34\x2c\x39\x33\x2e\x36\x35\x2d\x2e\x32\x2c\x31\x34\ +\x30\x2e\x34\x37\x2c\x30\x2c\x36\x2e\x38\x38\x2c\x31\x2e\x37\x38\ +\x2c\x38\x2e\x33\x37\x2c\x38\x2e\x35\x34\x2c\x38\x2e\x33\x34\x71\ +\x39\x36\x2d\x2e\x34\x32\x2c\x31\x39\x31\x2e\x39\x33\x2c\x30\x63\ +\x37\x2e\x37\x37\x2c\x30\x2c\x38\x2e\x36\x38\x2d\x32\x2e\x36\x38\ +\x2c\x38\x2e\x36\x36\x2d\x39\x2e\x32\x32\x43\x33\x37\x31\x2e\x38\ +\x39\x2c\x31\x39\x33\x2e\x37\x38\x2c\x33\x37\x32\x2e\x30\x38\x2c\ +\x31\x34\x34\x2e\x38\x35\x2c\x33\x37\x32\x2e\x31\x36\x2c\x39\x35\ +\x2e\x39\x31\x5a\x6d\x2d\x37\x32\x2e\x33\x35\x2c\x33\x36\x39\x2e\ +\x36\x63\x34\x32\x2e\x39\x34\x2c\x30\x2c\x38\x35\x2e\x38\x38\x2d\ +\x2e\x31\x33\x2c\x31\x32\x38\x2e\x38\x32\x2e\x31\x33\x2c\x36\x2e\ +\x36\x38\x2e\x30\x35\x2c\x39\x2e\x34\x2d\x31\x2c\x39\x2e\x33\x33\ +\x2d\x38\x2e\x36\x34\x2d\x2e\x34\x33\x2d\x34\x34\x2e\x33\x39\x2d\ +\x2e\x33\x33\x2d\x38\x38\x2e\x37\x38\x2d\x2e\x30\x38\x2d\x31\x33\ +\x33\x2e\x31\x37\x2c\x30\x2d\x36\x2e\x31\x37\x2d\x31\x2e\x34\x31\ +\x2d\x38\x2e\x31\x39\x2d\x38\x2d\x38\x2e\x31\x37\x71\x2d\x31\x32\ +\x39\x2e\x32\x38\x2e\x33\x33\x2d\x32\x35\x38\x2e\x35\x36\x2c\x30\ +\x63\x2d\x37\x2e\x32\x32\x2c\x30\x2d\x38\x2e\x34\x31\x2c\x32\x2e\ +\x33\x37\x2d\x38\x2e\x33\x38\x2c\x38\x2e\x37\x39\x71\x2e\x33\x39\ +\x2c\x36\x36\x2e\x35\x38\x2c\x30\x2c\x31\x33\x33\x2e\x31\x37\x63\ +\x30\x2c\x36\x2e\x32\x33\x2c\x31\x2e\x35\x33\x2c\x38\x2e\x31\x32\ +\x2c\x38\x2c\x38\x2e\x30\x37\x43\x32\x31\x33\x2e\x39\x32\x2c\x34\ +\x36\x35\x2e\x33\x37\x2c\x32\x35\x36\x2e\x38\x37\x2c\x34\x36\x35\ +\x2e\x35\x31\x2c\x32\x39\x39\x2e\x38\x31\x2c\x34\x36\x35\x2e\x35\ +\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x33\x39\ +\x2e\x33\x31\x2c\x31\x36\x33\x2e\x38\x39\x63\x30\x2c\x31\x34\x2e\ +\x31\x38\x2d\x2e\x31\x38\x2c\x32\x38\x2e\x33\x36\x2e\x31\x2c\x34\ +\x32\x2e\x35\x34\x2e\x30\x39\x2c\x34\x2e\x36\x32\x2d\x31\x2e\x30\ +\x38\x2c\x36\x2e\x31\x39\x2d\x36\x2c\x36\x2e\x31\x33\x71\x2d\x33\ +\x32\x2e\x38\x37\x2d\x2e\x33\x39\x2d\x36\x35\x2e\x37\x33\x2c\x30\ +\x63\x2d\x35\x2e\x33\x33\x2e\x30\x37\x2d\x36\x2e\x36\x33\x2d\x31\ +\x2e\x37\x34\x2d\x36\x2e\x35\x39\x2d\x36\x2e\x37\x35\x71\x2e\x33\ +\x31\x2d\x34\x32\x2e\x30\x39\x2c\x30\x2d\x38\x34\x2e\x31\x38\x63\ +\x30\x2d\x34\x2e\x39\x2c\x31\x2e\x36\x2d\x36\x2c\x36\x2e\x32\x34\ +\x2d\x36\x71\x33\x33\x2e\x33\x33\x2e\x33\x31\x2c\x36\x36\x2e\x36\ +\x35\x2c\x30\x63\x34\x2e\x36\x33\x2d\x2e\x30\x35\x2c\x35\x2e\x34\ +\x37\x2c\x31\x2e\x36\x31\x2c\x35\x2e\x34\x2c\x35\x2e\x37\x32\x43\ +\x33\x33\x39\x2e\x31\x37\x2c\x31\x33\x35\x2e\x35\x32\x2c\x33\x33\ +\x39\x2e\x33\x31\x2c\x31\x34\x39\x2e\x37\x2c\x33\x33\x39\x2e\x33\ +\x31\x2c\x31\x36\x33\x2e\x38\x39\x5a\x22\x2f\x3e\x3c\x70\x61\x74\ +\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\ +\x64\x3d\x22\x4d\x33\x30\x30\x2e\x39\x2c\x33\x34\x38\x2e\x31\x33\ +\x63\x32\x39\x2e\x38\x34\x2c\x30\x2c\x35\x39\x2e\x36\x39\x2e\x34\ +\x36\x2c\x38\x39\x2e\x35\x2d\x2e\x32\x37\x2c\x39\x2e\x34\x38\x2d\ +\x2e\x32\x33\x2c\x37\x2e\x35\x39\x2c\x35\x2c\x37\x2e\x35\x37\x2c\ +\x31\x30\x2e\x31\x31\x73\x32\x2c\x31\x30\x2e\x32\x33\x2d\x37\x2e\ +\x34\x34\x2c\x31\x30\x2e\x31\x36\x71\x2d\x39\x30\x2e\x34\x32\x2d\ +\x2e\x37\x32\x2d\x31\x38\x30\x2e\x38\x33\x2c\x30\x63\x2d\x38\x2e\ +\x31\x31\x2e\x30\x35\x2d\x38\x2e\x30\x38\x2d\x33\x2e\x36\x31\x2d\ +\x37\x2e\x35\x39\x2d\x39\x2e\x30\x39\x2e\x34\x35\x2d\x35\x2d\x32\ +\x2e\x38\x31\x2d\x31\x31\x2e\x33\x33\x2c\x37\x2e\x34\x37\x2d\x31\ +\x31\x2e\x31\x32\x43\x32\x34\x30\x2c\x33\x34\x38\x2e\x35\x32\x2c\ +\x32\x37\x30\x2e\x34\x36\x2c\x33\x34\x38\x2e\x31\x33\x2c\x33\x30\ +\x30\x2e\x39\x2c\x33\x34\x38\x2e\x31\x33\x5a\x22\x2f\x3e\x3c\x70\ +\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\ +\x22\x20\x64\x3d\x22\x4d\x33\x30\x30\x2e\x38\x36\x2c\x34\x30\x37\ +\x63\x32\x39\x2e\x38\x33\x2c\x30\x2c\x35\x39\x2e\x36\x37\x2e\x34\ +\x35\x2c\x38\x39\x2e\x34\x38\x2d\x2e\x32\x35\x2c\x31\x30\x2e\x31\ +\x31\x2d\x2e\x32\x34\x2c\x37\x2e\x32\x33\x2c\x35\x2e\x37\x2c\x37\ +\x2e\x37\x39\x2c\x31\x30\x2e\x38\x37\x2e\x36\x36\x2c\x36\x2e\x31\ +\x35\x2d\x2e\x34\x39\x2c\x38\x2e\x37\x36\x2d\x38\x2c\x38\x2e\x37\ +\x32\x71\x2d\x38\x39\x2e\x39\x32\x2d\x2e\x35\x38\x2d\x31\x37\x39\ +\x2e\x38\x37\x2c\x30\x63\x2d\x38\x2e\x32\x38\x2e\x30\x36\x2d\x38\ +\x2e\x33\x2d\x33\x2e\x34\x33\x2d\x38\x2e\x32\x37\x2d\x39\x2e\x34\ +\x31\x73\x2d\x2e\x35\x38\x2d\x31\x30\x2e\x34\x31\x2c\x38\x2e\x34\ +\x39\x2d\x31\x30\x2e\x32\x31\x43\x32\x34\x30\x2e\x35\x39\x2c\x34\ +\x30\x37\x2e\x33\x39\x2c\x32\x37\x30\x2e\x37\x33\x2c\x34\x30\x37\ +\x2c\x33\x30\x30\x2e\x38\x36\x2c\x34\x30\x37\x5a\x22\x2f\x3e\x3c\ +\x2f\x73\x76\x67\x3e\ +\x00\x00\x02\xee\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -9983,86 +9323,40 @@ \x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ \x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ \x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x35\x36\x2e\x37\x22\x20\ -\x79\x3d\x22\x32\x35\x35\x2e\x39\x31\x22\x20\x77\x69\x64\x74\x68\ -\x3d\x22\x32\x31\x2e\x30\x31\x22\x20\x68\x65\x69\x67\x68\x74\x3d\ -\x22\x33\x30\x2e\x37\x35\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\ -\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x2e\x38\ -\x20\x31\x2e\x33\x39\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x2e\ -\x31\x37\x29\x22\x2f\x3e\x0a\x20\x20\x3c\x72\x65\x63\x74\x20\x63\ -\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\ -\x34\x35\x36\x2e\x37\x34\x22\x20\x79\x3d\x22\x33\x31\x32\x2e\x39\ -\x39\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x31\x2e\x30\x36\x22\ -\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x30\x2e\x37\x33\x22\x20\ -\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\ -\x6c\x61\x74\x65\x28\x2d\x2e\x36\x39\x20\x2e\x39\x38\x29\x20\x72\ -\x6f\x74\x61\x74\x65\x28\x2d\x2e\x31\x32\x29\x22\x2f\x3e\x0a\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x36\x31\x2e\x36\x35\ +\x2c\x31\x39\x31\x2e\x35\x37\x4c\x34\x30\x38\x2e\x34\x2c\x33\x38\ +\x2e\x33\x32\x68\x2d\x32\x31\x36\x2e\x38\x32\x53\x33\x38\x2e\x33\ +\x2c\x31\x39\x31\x2e\x36\x2c\x33\x38\x2e\x33\x2c\x31\x39\x31\x2e\ +\x36\x76\x32\x31\x36\x2e\x38\x6c\x31\x35\x33\x2e\x32\x38\x2c\x31\ +\x35\x33\x2e\x32\x38\x68\x32\x31\x36\x2e\x37\x39\x73\x31\x34\x34\ +\x2e\x36\x32\x2d\x31\x34\x34\x2e\x35\x37\x2c\x31\x34\x34\x2e\x36\ +\x32\x2d\x31\x34\x34\x2e\x35\x37\x63\x35\x2e\x31\x34\x2d\x35\x2e\ +\x30\x38\x2c\x38\x2e\x31\x33\x2d\x31\x31\x2e\x36\x31\x2c\x38\x2e\ +\x36\x33\x2d\x31\x38\x2e\x38\x39\x6c\x2e\x30\x37\x2d\x2e\x39\x38\ +\x2d\x2e\x30\x34\x2d\x32\x30\x35\x2e\x36\x38\x5a\x4d\x32\x31\x34\ +\x2e\x38\x34\x2c\x35\x30\x35\x2e\x35\x35\x6c\x2d\x31\x32\x30\x2e\ +\x34\x2d\x31\x32\x30\x2e\x34\x76\x2d\x31\x37\x30\x2e\x33\x73\x31\ +\x32\x30\x2e\x34\x2d\x31\x32\x30\x2e\x34\x2c\x31\x32\x30\x2e\x34\ +\x2d\x31\x32\x30\x2e\x34\x68\x31\x37\x30\x2e\x33\x31\x73\x31\x32\ +\x30\x2e\x33\x37\x2c\x31\x32\x30\x2e\x33\x37\x2c\x31\x32\x30\x2e\ +\x33\x37\x2c\x31\x32\x30\x2e\x33\x37\x6c\x2e\x30\x34\x2c\x31\x37\ +\x30\x2e\x33\x33\x2d\x31\x32\x30\x2e\x34\x33\x2c\x31\x32\x30\x2e\ +\x33\x38\x68\x2d\x31\x37\x30\x2e\x32\x39\x5a\x22\x2f\x3e\x0a\x20\ \x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ -\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x34\x38\x2e\x31\x32\x2c\ -\x33\x38\x35\x2e\x38\x37\x6c\x2d\x2e\x31\x39\x2d\x31\x37\x32\x2e\ -\x33\x2d\x31\x31\x34\x2e\x38\x31\x2e\x31\x63\x2e\x35\x36\x2d\x32\ -\x33\x2e\x39\x31\x2d\x31\x36\x2e\x33\x2d\x34\x32\x2e\x30\x33\x2d\ -\x34\x30\x2e\x30\x34\x2d\x34\x31\x2e\x38\x34\x6c\x2d\x33\x30\x34\ -\x2e\x34\x31\x2e\x34\x37\x63\x2d\x32\x33\x2e\x30\x31\x2e\x30\x33\ -\x2d\x33\x36\x2e\x38\x35\x2c\x32\x30\x2e\x34\x32\x2d\x33\x36\x2e\ -\x37\x39\x2c\x34\x31\x2e\x32\x32\x6c\x2e\x34\x38\x2c\x31\x37\x37\ -\x2e\x39\x37\x68\x30\x63\x2e\x30\x36\x2c\x32\x31\x2e\x38\x35\x2c\ -\x31\x39\x2e\x30\x33\x2c\x33\x36\x2e\x37\x31\x2c\x33\x39\x2e\x31\ -\x39\x2c\x33\x36\x2e\x36\x39\x6c\x33\x30\x33\x2e\x31\x36\x2d\x2e\ -\x33\x31\x63\x32\x33\x2e\x31\x2d\x2e\x35\x33\x2c\x33\x39\x2e\x32\ -\x32\x2d\x31\x38\x2e\x35\x37\x2c\x33\x38\x2e\x35\x38\x2d\x34\x31\ -\x2e\x38\x36\x6c\x31\x31\x34\x2e\x38\x34\x2d\x2e\x31\x34\x5a\x4d\ -\x31\x30\x39\x2e\x30\x38\x2c\x33\x34\x31\x2e\x33\x31\x63\x2e\x30\ -\x31\x2c\x38\x2e\x34\x35\x2d\x34\x2e\x39\x37\x2c\x31\x34\x2e\x31\ -\x38\x2d\x31\x32\x2e\x30\x38\x2c\x31\x34\x2e\x36\x31\x2d\x36\x2e\ -\x39\x35\x2e\x34\x32\x2d\x31\x33\x2e\x38\x32\x2d\x34\x2e\x38\x39\ -\x2d\x31\x33\x2e\x38\x34\x2d\x31\x32\x2e\x36\x32\x6c\x2d\x2e\x31\ -\x34\x2d\x38\x35\x2e\x30\x31\x63\x2d\x2e\x30\x31\x2d\x37\x2e\x37\ -\x38\x2c\x35\x2e\x31\x37\x2d\x31\x33\x2e\x35\x36\x2c\x31\x32\x2e\ -\x35\x35\x2d\x31\x33\x2e\x39\x33\x2c\x37\x2e\x35\x31\x2d\x2e\x33\ -\x38\x2c\x31\x33\x2e\x34\x33\x2c\x35\x2e\x36\x39\x2c\x31\x33\x2e\ -\x34\x33\x2c\x31\x33\x2e\x38\x33\x6c\x2e\x30\x38\x2c\x38\x33\x2e\ -\x31\x31\x68\x2d\x2e\x30\x31\x5a\x4d\x33\x36\x31\x2e\x38\x34\x2c\ -\x33\x31\x38\x2e\x34\x34\x6c\x2d\x2e\x33\x34\x2d\x31\x33\x2e\x32\ -\x2d\x31\x31\x32\x2e\x34\x36\x2e\x35\x2c\x32\x34\x2e\x36\x36\x2c\ -\x32\x35\x2e\x35\x33\x2c\x34\x32\x2e\x32\x2d\x2e\x31\x39\x2e\x33\ -\x33\x2d\x31\x31\x2e\x35\x35\x2c\x33\x32\x2e\x39\x2d\x2e\x32\x2e\ -\x32\x32\x2c\x33\x33\x2e\x30\x36\x2d\x33\x32\x2e\x39\x33\x2e\x32\ -\x38\x2d\x2e\x33\x38\x2d\x31\x31\x2e\x35\x33\x2d\x34\x33\x2e\x30\ -\x34\x2e\x32\x32\x63\x2d\x32\x2e\x30\x31\x2e\x30\x31\x2d\x35\x2e\ -\x34\x35\x2d\x31\x2e\x38\x37\x2d\x36\x2e\x39\x37\x2d\x33\x2e\x34\ -\x32\x6c\x2d\x33\x31\x2e\x33\x39\x2d\x33\x32\x2e\x31\x33\x2d\x34\ -\x34\x2e\x35\x39\x2e\x31\x37\x63\x2d\x33\x2e\x30\x39\x2c\x31\x33\ -\x2e\x31\x2d\x31\x34\x2e\x36\x31\x2c\x32\x30\x2e\x38\x34\x2d\x32\ -\x36\x2e\x38\x33\x2c\x31\x39\x2e\x35\x37\x2d\x31\x32\x2e\x35\x32\ -\x2d\x31\x2e\x33\x2d\x32\x31\x2e\x38\x2d\x31\x31\x2e\x38\x33\x2d\ -\x32\x32\x2e\x30\x36\x2d\x32\x33\x2e\x39\x31\x2d\x2e\x32\x37\x2d\ -\x31\x32\x2e\x37\x38\x2c\x39\x2e\x31\x35\x2d\x32\x33\x2e\x34\x33\ -\x2c\x32\x31\x2e\x33\x2d\x32\x34\x2e\x39\x39\x2c\x31\x32\x2e\x36\ -\x36\x2d\x31\x2e\x36\x32\x2c\x32\x34\x2e\x31\x34\x2c\x36\x2c\x32\ -\x37\x2e\x35\x32\x2c\x31\x39\x2e\x31\x38\x6c\x32\x31\x2e\x31\x34\ -\x2e\x30\x38\x2c\x33\x31\x2e\x37\x36\x2d\x33\x33\x2e\x38\x37\x63\ -\x31\x2e\x35\x35\x2d\x31\x2e\x36\x35\x2c\x35\x2e\x30\x32\x2d\x32\ -\x2e\x38\x32\x2c\x37\x2e\x31\x39\x2d\x32\x2e\x38\x32\x6c\x32\x39\ -\x2e\x31\x32\x2d\x2e\x30\x35\x63\x33\x2e\x32\x39\x2d\x37\x2e\x38\ -\x39\x2c\x31\x30\x2d\x31\x32\x2e\x37\x2c\x31\x38\x2e\x33\x2d\x31\ -\x31\x2e\x37\x2c\x37\x2e\x36\x35\x2e\x39\x32\x2c\x31\x34\x2e\x30\ -\x39\x2c\x37\x2e\x32\x36\x2c\x31\x34\x2e\x36\x33\x2c\x31\x35\x2e\ -\x34\x2e\x35\x33\x2c\x37\x2e\x39\x31\x2d\x34\x2e\x36\x31\x2c\x31\ -\x35\x2e\x34\x35\x2d\x31\x32\x2e\x32\x2c\x31\x37\x2e\x33\x34\x2d\ -\x38\x2e\x30\x36\x2c\x32\x2e\x30\x31\x2d\x31\x36\x2e\x36\x38\x2d\ -\x2e\x38\x33\x2d\x32\x30\x2e\x32\x2d\x31\x30\x2e\x38\x35\x6c\x2d\ -\x32\x39\x2e\x38\x35\x2d\x2e\x30\x39\x2d\x32\x34\x2e\x31\x32\x2c\ -\x32\x36\x2e\x34\x39\x2c\x31\x33\x35\x2e\x32\x36\x2d\x2e\x34\x39\ -\x2e\x37\x38\x2d\x31\x33\x2e\x31\x33\x2c\x33\x31\x2e\x34\x33\x2c\ -\x31\x38\x2e\x30\x32\x2d\x33\x31\x2e\x34\x31\x2c\x31\x38\x2e\x33\ -\x31\x5a\x4d\x34\x33\x32\x2e\x38\x33\x2c\x32\x33\x32\x2e\x34\x37\ -\x6c\x39\x36\x2e\x33\x38\x2d\x2e\x31\x36\x2e\x32\x32\x2c\x31\x33\ -\x34\x2e\x37\x36\x2d\x39\x36\x2e\x33\x38\x2e\x31\x36\x2d\x2e\x32\ -\x32\x2d\x31\x33\x34\x2e\x37\x36\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\ -\x76\x67\x3e\ -\x00\x00\x04\x9d\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x35\x35\x2e\x31\x32\x2c\ +\x34\x32\x38\x2e\x38\x63\x30\x2d\x32\x33\x2e\x38\x34\x2c\x31\x38\ +\x2e\x37\x2d\x34\x31\x2e\x36\x31\x2c\x34\x34\x2e\x38\x38\x2d\x34\ +\x31\x2e\x36\x31\x73\x34\x34\x2e\x38\x38\x2c\x31\x37\x2e\x37\x37\ +\x2c\x34\x34\x2e\x38\x38\x2c\x34\x31\x2e\x36\x31\x2d\x31\x38\x2e\ +\x37\x2c\x34\x32\x2e\x35\x35\x2d\x34\x34\x2e\x38\x38\x2c\x34\x32\ +\x2e\x35\x35\x2d\x34\x34\x2e\x38\x38\x2d\x31\x39\x2e\x31\x37\x2d\ +\x34\x34\x2e\x38\x38\x2d\x34\x32\x2e\x35\x35\x5a\x4d\x32\x34\x38\ +\x2e\x39\x31\x2c\x31\x34\x30\x2e\x33\x32\x68\x31\x30\x32\x2e\x31\ +\x38\x6c\x2d\x32\x32\x2e\x31\x2c\x32\x31\x33\x2e\x36\x37\x68\x2d\ +\x35\x37\x2e\x39\x38\x6c\x2d\x32\x32\x2e\x31\x2d\x32\x31\x33\x2e\ +\x36\x37\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x02\x0d\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ \x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ @@ -10071,73 +9365,175 @@ \x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ \x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ \x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x65\x32\x62\x32\x34\x3b\x7d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ \x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ \x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x34\x36\x35\x2e\x36\x34\x2c\x31\x35\ -\x32\x2e\x35\x63\x2d\x32\x2e\x33\x2d\x31\x35\x2e\x38\x2d\x31\x31\ -\x2e\x39\x2d\x32\x35\x2e\x39\x2d\x32\x37\x2e\x36\x2d\x32\x39\x2e\ -\x32\x2d\x31\x36\x2e\x36\x2d\x33\x2e\x35\x2d\x33\x33\x2e\x33\x2d\ -\x36\x2e\x36\x2d\x35\x30\x2e\x31\x2d\x39\x2e\x32\x2d\x38\x2e\x37\ -\x2d\x31\x2e\x34\x2d\x31\x34\x2e\x31\x2d\x33\x2e\x36\x2d\x31\x35\ -\x2e\x31\x2d\x31\x34\x2e\x31\x2d\x31\x2e\x38\x2d\x31\x38\x2d\x31\ -\x33\x2e\x34\x2d\x32\x38\x2d\x33\x31\x2e\x31\x2d\x33\x31\x2e\x32\ -\x71\x2d\x32\x39\x2d\x35\x2e\x32\x35\x2d\x35\x38\x2d\x31\x30\x2e\ -\x36\x63\x2d\x31\x37\x2e\x37\x2d\x33\x2e\x33\x2d\x33\x31\x2e\x38\ -\x2c\x32\x2e\x35\x2d\x34\x30\x2e\x31\x2c\x31\x38\x2e\x34\x2d\x34\ -\x2e\x34\x2c\x38\x2e\x35\x2d\x39\x2e\x35\x2c\x39\x2e\x34\x2d\x31\ -\x37\x2e\x38\x2c\x37\x2e\x36\x2d\x31\x36\x2e\x36\x2d\x33\x2e\x35\ -\x2d\x33\x33\x2e\x34\x2d\x36\x2e\x34\x2d\x35\x30\x2e\x31\x2d\x39\ -\x2e\x31\x2d\x31\x35\x2e\x35\x2d\x32\x2e\x35\x2d\x32\x38\x2e\x34\ -\x2c\x32\x2e\x32\x2d\x33\x36\x2e\x39\x2c\x31\x36\x2e\x31\x2d\x39\ -\x2e\x33\x2c\x31\x35\x2e\x33\x2d\x35\x2e\x37\x2c\x32\x33\x2e\x36\ -\x2c\x31\x31\x2e\x35\x2c\x32\x36\x2e\x38\x2c\x34\x39\x2e\x31\x2c\ -\x39\x2e\x31\x2c\x39\x38\x2e\x32\x2c\x31\x38\x2c\x31\x34\x37\x2e\ -\x32\x2c\x32\x37\x6c\x31\x34\x37\x2e\x33\x2c\x32\x37\x43\x34\x36\ -\x31\x2e\x34\x34\x2c\x31\x37\x35\x2e\x31\x2c\x34\x36\x38\x2e\x31\ -\x34\x2c\x31\x36\x39\x2c\x34\x36\x35\x2e\x36\x34\x2c\x31\x35\x32\ -\x2e\x35\x5a\x4d\x32\x35\x39\x2e\x38\x34\x2c\x38\x38\x73\x34\x2e\ -\x33\x2d\x32\x33\x2e\x37\x2c\x32\x39\x2e\x38\x2d\x31\x39\x2e\x31\ -\x6c\x34\x32\x2e\x31\x2c\x37\x2e\x37\x63\x32\x35\x2e\x34\x2c\x34\ -\x2e\x37\x2c\x32\x31\x2e\x31\x2c\x32\x38\x2e\x34\x2c\x32\x31\x2e\ -\x31\x2c\x32\x38\x2e\x34\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x2e\x38\x37\x2c\x33\x30\x31\ +\x2e\x33\x32\x43\x31\x38\x37\x2e\x33\x35\x2c\x38\x37\x2e\x36\x39\ +\x2c\x34\x30\x35\x2e\x37\x37\x2c\x38\x32\x2c\x35\x38\x31\x2e\x31\ +\x33\x2c\x32\x39\x39\x2e\x33\x37\x2c\x34\x31\x37\x2e\x35\x2c\x35\ +\x30\x35\x2e\x34\x38\x2c\x32\x30\x33\x2e\x37\x36\x2c\x35\x32\x34\ +\x2e\x31\x35\x2c\x31\x38\x2e\x38\x37\x2c\x33\x30\x31\x2e\x33\x32\ +\x5a\x6d\x35\x32\x35\x2e\x30\x36\x2d\x2e\x37\x33\x63\x2d\x31\x36\ +\x31\x2e\x35\x37\x2d\x31\x38\x31\x2e\x35\x33\x2d\x33\x34\x31\x2e\ +\x34\x2d\x31\x37\x33\x2d\x34\x38\x35\x2e\x36\x38\x2c\x32\x43\x32\ +\x32\x33\x2e\x30\x37\x2c\x34\x37\x36\x2c\x33\x38\x32\x2c\x34\x37\ +\x35\x2e\x37\x31\x2c\x35\x34\x33\x2e\x39\x33\x2c\x33\x30\x30\x2e\ +\x35\x39\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\ +\x30\x2e\x32\x33\x2c\x33\x33\x39\x2e\x31\x35\x63\x2d\x35\x34\x2e\ +\x38\x35\x2e\x30\x39\x2d\x39\x37\x2e\x34\x38\x2d\x34\x32\x2e\x32\ +\x36\x2d\x39\x37\x2e\x38\x32\x2d\x39\x37\x2e\x32\x31\x61\x39\x37\ +\x2e\x32\x2c\x39\x37\x2e\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x37\ +\x2e\x32\x33\x2d\x39\x38\x2e\x34\x31\x63\x35\x34\x2e\x31\x38\x2d\ +\x2e\x31\x37\x2c\x39\x37\x2e\x35\x36\x2c\x34\x33\x2e\x31\x34\x2c\ +\x39\x37\x2e\x39\x35\x2c\x39\x37\x2e\x38\x31\x43\x33\x39\x38\x2c\ +\x32\x39\x35\x2e\x35\x34\x2c\x33\x35\x34\x2e\x36\x36\x2c\x33\x33\ +\x39\x2e\x30\x35\x2c\x33\x30\x30\x2e\x32\x33\x2c\x33\x33\x39\x2e\ +\x31\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x03\xbf\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x32\x33\x2c\x32\x39\x39\x2e\x35\x35\ +\x43\x31\x39\x31\x2e\x34\x33\x2c\x38\x35\x2e\x39\x32\x2c\x34\x30\ +\x39\x2e\x38\x35\x2c\x38\x30\x2e\x32\x34\x2c\x35\x38\x35\x2e\x32\ +\x31\x2c\x32\x39\x37\x2e\x36\x2c\x34\x32\x31\x2e\x35\x39\x2c\x35\ +\x30\x33\x2e\x37\x31\x2c\x32\x30\x37\x2e\x38\x35\x2c\x35\x32\x32\ +\x2e\x33\x38\x2c\x32\x33\x2c\x32\x39\x39\x2e\x35\x35\x5a\x4d\x35\ +\x34\x38\x2c\x32\x39\x38\x2e\x38\x32\x63\x2d\x31\x36\x31\x2e\x35\ +\x37\x2d\x31\x38\x31\x2e\x35\x33\x2d\x33\x34\x31\x2e\x34\x2d\x31\ +\x37\x33\x2d\x34\x38\x35\x2e\x36\x39\x2c\x32\x43\x32\x32\x37\x2e\ +\x31\x35\x2c\x34\x37\x34\x2e\x32\x35\x2c\x33\x38\x36\x2e\x31\x32\ +\x2c\x34\x37\x33\x2e\x39\x34\x2c\x35\x34\x38\x2c\x32\x39\x38\x2e\ +\x38\x32\x5a\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x32\x39\x32\ +\x2e\x37\x34\x22\x20\x79\x3d\x22\x34\x35\x30\x2e\x30\x35\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\ +\x67\x68\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\ +\x37\x2e\x36\x32\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x37\x38\ +\x2e\x33\x22\x20\x79\x3d\x22\x33\x35\x34\x2e\x36\x22\x20\x77\x69\ +\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\x67\x68\ +\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\x37\x2e\ +\x36\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\ +\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x37\x31\x2e\x34\x35\x20\ +\x33\x33\x2e\x37\x35\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x34\x30\ +\x2e\x32\x33\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x36\ +\x32\x2e\x38\x32\x22\x20\x79\x3d\x22\x34\x31\x37\x2e\x31\x38\x22\ +\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\ +\x69\x67\x68\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\ +\x22\x37\x2e\x36\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ +\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x38\x37\x2c\x20\x30\ +\x2e\x35\x2c\x20\x2d\x30\x2e\x35\x2c\x20\x30\x2e\x38\x37\x2c\x20\ +\x32\x34\x38\x2e\x33\x36\x2c\x20\x2d\x32\x36\x2e\x37\x39\x29\x22\ +\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x35\x31\x32\x2e\x34\x31\x22\ +\x20\x79\x3d\x22\x33\x35\x34\x2e\x36\x22\x20\x77\x69\x64\x74\x68\ +\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\x37\x2e\x36\x32\x22\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ +\x73\x6c\x61\x74\x65\x28\x31\x31\x37\x33\x2e\x38\x38\x20\x33\x34\ +\x35\x2e\x30\x32\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x33\x39\ +\x2e\x37\x37\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x32\ +\x33\x2e\x30\x32\x22\x20\x79\x3d\x22\x34\x32\x31\x2e\x33\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x32\x32\x2e\x37\x22\x20\x68\x65\x69\ +\x67\x68\x74\x3d\x22\x36\x35\x2e\x37\x34\x22\x20\x72\x78\x3d\x22\ +\x37\x2e\x36\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x31\x30\x33\x37\x2e\ +\x36\x32\x20\x36\x33\x30\x2e\x33\x29\x20\x72\x6f\x74\x61\x74\x65\ +\x28\x31\x35\x30\x29\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\xec\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x33\x30\x31\x2e\x33\x36\x2c\x31\x38\ +\x31\x2e\x36\x35\x68\x32\x31\x38\x2e\x35\x63\x39\x2e\x35\x37\x2c\ +\x30\x2c\x31\x38\x2e\x37\x32\x2c\x31\x2e\x35\x32\x2c\x32\x36\x2e\ +\x36\x35\x2c\x37\x2e\x33\x34\x2c\x31\x30\x2e\x36\x2c\x37\x2e\x37\ +\x39\x2c\x31\x36\x2e\x35\x35\x2c\x31\x38\x2e\x31\x33\x2c\x31\x36\ +\x2e\x34\x35\x2c\x33\x31\x2e\x34\x37\x2d\x2e\x36\x33\x2c\x38\x30\ +\x2e\x33\x34\x2d\x2e\x32\x37\x2c\x31\x36\x30\x2e\x36\x38\x2d\x2e\ +\x33\x39\x2c\x32\x34\x31\x61\x35\x33\x2e\x35\x37\x2c\x35\x33\x2e\ +\x35\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x35\x33\x2e\x38\x35\x2c\x35\ +\x33\x2e\x36\x35\x6c\x2d\x33\x36\x38\x2e\x33\x34\x2e\x30\x39\x63\ +\x2d\x31\x37\x2e\x36\x36\x2c\x30\x2d\x33\x35\x2e\x33\x33\x2d\x2e\ +\x32\x33\x2d\x35\x33\x2c\x30\x2d\x32\x31\x2e\x36\x2e\x32\x32\x2d\ +\x33\x37\x2e\x34\x31\x2d\x39\x2e\x33\x32\x2d\x34\x38\x2e\x31\x33\ +\x2d\x32\x37\x2e\x37\x37\x61\x31\x31\x30\x2e\x33\x35\x2c\x31\x31\ +\x30\x2e\x33\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x35\x2e\x33\x35\x2d\ +\x31\x30\x2e\x38\x63\x2d\x31\x2d\x32\x2e\x32\x38\x2d\x32\x2e\x36\ +\x37\x2d\x37\x2d\x32\x2e\x36\x37\x2d\x39\x2e\x34\x35\x71\x30\x2d\ +\x31\x32\x33\x2e\x32\x32\x2d\x2e\x30\x37\x2d\x32\x34\x36\x2e\x34\ +\x35\x61\x33\x30\x2e\x32\x34\x2c\x33\x30\x2e\x32\x34\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x32\x2e\x35\x2d\x31\x32\x2e\x31\x63\x36\x2e\x35\ +\x2d\x31\x35\x2e\x33\x34\x2c\x31\x38\x2e\x32\x39\x2d\x32\x33\x2e\ +\x36\x38\x2c\x33\x34\x2e\x34\x38\x2d\x32\x36\x2e\x33\x31\x2c\x39\ +\x2e\x37\x31\x2d\x31\x2e\x35\x39\x2c\x31\x39\x2e\x35\x2d\x31\x2e\ +\x30\x36\x2c\x32\x39\x2e\x32\x36\x2d\x31\x2e\x30\x38\x2e\x36\x37\ +\x2c\x30\x2c\x31\x2e\x33\x33\x2c\x30\x2c\x32\x2c\x30\x2c\x32\x30\ +\x2e\x37\x2e\x30\x38\x2c\x34\x31\x2e\x34\x2e\x31\x39\x2c\x36\x32\ +\x2e\x30\x39\x2e\x32\x71\x36\x39\x2e\x39\x33\x2c\x30\x2c\x31\x33\ +\x39\x2e\x38\x37\x2c\x30\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ \x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x34\x33\x33\x2e\x32\x34\x2c\x31\x38\x34\x2e\x36\x48\x31\ -\x36\x36\x2e\x38\x34\x61\x32\x37\x2e\x30\x38\x2c\x32\x37\x2e\x30\ -\x38\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x36\x2e\x39\x2c\x33\x30\x2e\ -\x35\x4c\x31\x37\x38\x2e\x37\x34\x2c\x35\x31\x39\x61\x32\x37\x2e\ -\x31\x31\x2c\x32\x37\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x32\ -\x36\x2e\x39\x2c\x32\x33\x2e\x37\x68\x31\x39\x32\x2e\x33\x61\x32\ -\x37\x2e\x30\x35\x2c\x32\x37\x2e\x30\x35\x2c\x30\x2c\x30\x2c\x30\ -\x2c\x32\x36\x2e\x39\x2d\x32\x34\x6c\x33\x35\x2e\x33\x2d\x33\x30\ -\x33\x2e\x39\x41\x32\x37\x2c\x32\x37\x2c\x30\x2c\x30\x2c\x30\x2c\ -\x34\x33\x33\x2e\x32\x34\x2c\x31\x38\x34\x2e\x36\x5a\x4d\x32\x34\ -\x30\x2e\x38\x34\x2c\x35\x30\x38\x68\x2d\x33\x63\x2d\x35\x2e\x32\ -\x2e\x35\x2d\x37\x2d\x32\x2e\x39\x2d\x37\x2e\x36\x2d\x37\x2e\x36\ -\x6c\x2d\x33\x33\x2e\x36\x2d\x32\x37\x33\x2e\x37\x63\x2d\x2e\x36\ -\x2d\x34\x2e\x37\x2c\x33\x2e\x32\x2d\x39\x2c\x38\x2e\x34\x2d\x39\ -\x2e\x36\x68\x2d\x33\x63\x35\x2e\x32\x2d\x2e\x35\x2c\x31\x33\x2c\ -\x32\x2e\x39\x2c\x31\x33\x2e\x35\x2c\x37\x2e\x36\x6c\x33\x33\x2e\ -\x36\x2c\x32\x37\x33\x2e\x37\x43\x32\x34\x39\x2e\x38\x34\x2c\x35\ -\x30\x33\x2e\x32\x2c\x32\x34\x36\x2c\x35\x30\x37\x2e\x35\x2c\x32\ -\x34\x30\x2e\x38\x34\x2c\x35\x30\x38\x5a\x6d\x36\x35\x2e\x35\x2d\ -\x39\x61\x39\x2e\x31\x33\x2c\x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x39\x2e\x31\x2c\x39\x2e\x31\x68\x2d\x2e\x39\x61\x39\x2e\ -\x31\x33\x2c\x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\ -\x31\x2d\x39\x2e\x31\x56\x32\x32\x34\x2e\x34\x61\x39\x2e\x31\x33\ -\x2c\x39\x2e\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x31\x2d\ -\x39\x2e\x31\x68\x2e\x39\x61\x39\x2e\x31\x33\x2c\x39\x2e\x31\x33\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x31\x2c\x39\x2e\x31\x5a\x6d\ -\x39\x33\x2e\x35\x2d\x32\x37\x32\x2e\x34\x2d\x33\x33\x2e\x36\x2c\ -\x32\x37\x33\x2e\x37\x63\x2d\x2e\x36\x2c\x34\x2e\x37\x2d\x35\x2e\ -\x33\x2c\x38\x2e\x32\x2d\x31\x30\x2e\x36\x2c\x37\x2e\x36\x68\x30\ -\x63\x2d\x35\x2e\x32\x2d\x2e\x35\x2d\x39\x2d\x34\x2e\x38\x2d\x38\ -\x2e\x34\x2d\x39\x2e\x36\x6c\x33\x33\x2e\x36\x2d\x32\x37\x33\x2e\ -\x37\x63\x2e\x36\x2d\x34\x2e\x37\x2c\x35\x2e\x33\x2d\x38\x2e\x32\ -\x2c\x31\x30\x2e\x36\x2d\x37\x2e\x36\x68\x30\x43\x33\x39\x36\x2e\ -\x36\x34\x2c\x32\x31\x37\x2e\x36\x2c\x34\x30\x30\x2e\x34\x34\x2c\ -\x32\x32\x31\x2e\x39\x2c\x33\x39\x39\x2e\x38\x34\x2c\x32\x32\x36\ -\x2e\x36\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x22\x4d\x35\x36\x32\x2e\x31\x39\x2c\x31\x38\x32\x2e\x35\x63\x2d\ +\x37\x2e\x37\x35\x2d\x38\x2e\x38\x38\x2d\x31\x37\x2e\x37\x39\x2d\ +\x31\x33\x2e\x35\x36\x2d\x32\x39\x2e\x31\x36\x2d\x31\x35\x2e\x37\ +\x34\x61\x39\x34\x2e\x35\x31\x2c\x39\x34\x2e\x35\x31\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x31\x37\x2e\x38\x35\x2d\x31\x2e\x34\x34\x71\x2d\ +\x31\x37\x34\x2e\x34\x38\x2e\x30\x36\x2d\x33\x34\x39\x2c\x2e\x31\ +\x37\x63\x2d\x33\x30\x2e\x32\x2c\x30\x2d\x36\x30\x2e\x33\x39\x2d\ +\x2e\x31\x39\x2d\x39\x30\x2e\x35\x39\x2d\x2e\x31\x35\x2d\x39\x2e\ +\x39\x31\x2c\x30\x2d\x31\x39\x2e\x36\x35\x2c\x31\x2e\x33\x35\x2d\ +\x32\x38\x2e\x38\x37\x2c\x35\x2e\x33\x36\x61\x35\x34\x2e\x36\x36\ +\x2c\x35\x34\x2e\x36\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x31\x2e\ +\x34\x35\x2c\x36\x2e\x38\x63\x2d\x2e\x39\x35\x2e\x37\x33\x2d\x31\ +\x2e\x39\x2c\x31\x2e\x38\x31\x2d\x33\x2e\x32\x37\x2c\x31\x73\x2d\ +\x2e\x37\x34\x2d\x32\x2e\x30\x35\x2d\x2e\x37\x34\x2d\x33\x2e\x31\ +\x32\x63\x30\x2d\x31\x36\x2c\x30\x2d\x33\x31\x2e\x39\x31\x2d\x2e\ +\x30\x35\x2d\x34\x37\x2e\x38\x37\x61\x38\x2e\x37\x2c\x38\x2e\x37\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x2e\x31\x2d\x34\x2e\x33\x31\x63\ +\x33\x2e\x33\x33\x2d\x36\x2e\x31\x36\x2c\x36\x2e\x32\x32\x2d\x31\ +\x32\x2e\x35\x38\x2c\x31\x30\x2e\x36\x39\x2d\x31\x38\x2e\x30\x37\ +\x2c\x31\x30\x2e\x38\x38\x2d\x31\x33\x2e\x33\x37\x2c\x32\x35\x2e\ +\x30\x37\x2d\x31\x39\x2e\x39\x32\x2c\x34\x32\x2e\x32\x2d\x32\x30\ +\x71\x38\x30\x2d\x2e\x31\x39\x2c\x31\x36\x30\x2e\x31\x2d\x2e\x32\ +\x31\x63\x34\x2e\x31\x38\x2c\x30\x2c\x38\x2e\x33\x35\x2d\x2e\x31\ +\x36\x2c\x31\x32\x2e\x35\x32\x2d\x2e\x31\x39\x61\x31\x38\x2e\x33\ +\x32\x2c\x31\x38\x2e\x33\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\ +\x2e\x37\x39\x2c\x35\x2e\x36\x39\x63\x31\x30\x2e\x36\x38\x2c\x31\ +\x30\x2e\x39\x33\x2c\x32\x31\x2e\x36\x38\x2c\x32\x31\x2e\x35\x37\ +\x2c\x33\x32\x2e\x31\x2c\x33\x32\x2e\x37\x35\x2c\x36\x2c\x36\x2e\ +\x33\x39\x2c\x31\x33\x2c\x38\x2e\x34\x2c\x32\x31\x2e\x32\x35\x2c\ +\x37\x2e\x38\x35\x2e\x39\x34\x2d\x2e\x30\x36\x2c\x31\x2e\x38\x39\ +\x2d\x2e\x31\x33\x2c\x32\x2e\x38\x34\x2d\x2e\x31\x33\x2c\x34\x38\ +\x2e\x33\x33\x2c\x30\x2c\x39\x36\x2e\x36\x37\x2d\x2e\x31\x36\x2c\ +\x31\x34\x35\x2c\x30\x2c\x31\x32\x2e\x37\x31\x2c\x30\x2c\x32\x35\ +\x2e\x34\x35\x2d\x2e\x35\x34\x2c\x33\x38\x2e\x31\x34\x2e\x34\x34\ +\x2c\x32\x35\x2e\x32\x38\x2c\x31\x2e\x39\x35\x2c\x34\x31\x2e\x38\ +\x31\x2c\x31\x35\x2e\x33\x35\x2c\x34\x39\x2c\x33\x39\x2e\x36\x33\ +\x2e\x38\x31\x2c\x32\x2e\x37\x32\x2c\x31\x2e\x35\x32\x2c\x35\x2e\ +\x34\x38\x2c\x32\x2e\x31\x33\x2c\x38\x2e\x32\x35\x2e\x32\x32\x2c\ +\x31\x2c\x2e\x39\x31\x2c\x32\x2e\x31\x37\x2c\x30\x2c\x33\x2e\x32\ +\x34\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ \x00\x00\x00\xe0\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ @@ -10154,6 +9550,104 @@ \x22\x31\x31\x34\x2e\x34\x31\x22\x20\x77\x69\x64\x74\x68\x3d\x22\ \x33\x36\x36\x2e\x38\x32\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ \x33\x36\x36\x2e\x38\x32\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x05\xf3\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x78\x3d\x22\x32\x31\x32\x2e\x32\x34\x22\x20\x79\x3d\ +\x22\x34\x34\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x30\x2e\ +\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x32\x33\x2e\ +\x35\x33\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x39\x35\x2e\ +\x32\x35\x22\x20\x79\x3d\x22\x35\x37\x2e\x33\x35\x22\x20\x77\x69\ +\x64\x74\x68\x3d\x22\x32\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\ +\x68\x74\x3d\x22\x37\x36\x2e\x38\x33\x22\x20\x74\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\ +\x2d\x31\x37\x2e\x30\x32\x20\x31\x33\x39\x2e\x32\x35\x29\x20\x72\ +\x6f\x74\x61\x74\x65\x28\x2d\x33\x36\x2e\x30\x37\x29\x22\x2f\x3e\ +\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\ +\x2d\x31\x22\x20\x78\x3d\x22\x32\x38\x39\x2e\x36\x32\x22\x20\x79\ +\x3d\x22\x33\x30\x2e\x34\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\ +\x32\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x37\ +\x36\x2e\x38\x33\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ +\x30\x33\x2c\x33\x38\x32\x2e\x31\x38\x71\x2d\x34\x35\x2e\x36\x35\ +\x2c\x30\x2d\x39\x31\x2e\x33\x31\x2e\x30\x36\x63\x2d\x32\x2e\x35\ +\x32\x2c\x30\x2d\x33\x2e\x33\x39\x2d\x2e\x34\x39\x2d\x33\x2e\x33\ +\x38\x2d\x33\x2e\x32\x35\x2e\x31\x2d\x33\x39\x2e\x38\x32\x2c\x30\ +\x2d\x37\x39\x2e\x36\x34\x2e\x31\x31\x2d\x31\x31\x39\x2e\x34\x36\ +\x2e\x30\x36\x2d\x32\x30\x2e\x35\x36\x2c\x35\x2e\x31\x34\x2d\x33\ +\x39\x2e\x37\x33\x2c\x31\x36\x2e\x34\x32\x2d\x35\x37\x2e\x31\x37\ +\x61\x31\x30\x36\x2e\x37\x2c\x31\x30\x36\x2e\x37\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x31\x39\x2d\x32\x32\x2e\x30\x37\x2c\x38\x38\x2e\x35\ +\x35\x2c\x38\x38\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x36\ +\x2e\x33\x37\x2d\x31\x31\x2e\x31\x34\x63\x32\x37\x2e\x32\x32\x2d\ +\x31\x35\x2c\x35\x35\x2d\x31\x34\x2e\x35\x34\x2c\x38\x32\x2e\x37\ +\x37\x2d\x32\x2e\x31\x37\x2c\x31\x31\x2e\x31\x2c\x35\x2c\x32\x30\ +\x2e\x37\x33\x2c\x31\x32\x2e\x37\x36\x2c\x32\x38\x2e\x37\x35\x2c\ +\x32\x31\x2e\x39\x34\x2c\x31\x37\x2e\x36\x35\x2c\x32\x30\x2e\x31\ +\x38\x2c\x32\x36\x2e\x33\x36\x2c\x34\x33\x2e\x39\x32\x2c\x32\x36\ +\x2e\x33\x39\x2c\x37\x30\x2e\x37\x35\x2e\x30\x36\x2c\x33\x39\x2e\ +\x37\x31\x2c\x30\x2c\x37\x39\x2e\x34\x32\x2e\x30\x38\x2c\x31\x31\ +\x39\x2e\x31\x33\x2c\x30\x2c\x32\x2e\x38\x34\x2d\x2e\x38\x32\x2c\ +\x33\x2e\x34\x35\x2d\x33\x2e\x35\x33\x2c\x33\x2e\x34\x34\x51\x33\ +\x34\x38\x2e\x37\x38\x2c\x33\x38\x32\x2e\x31\x2c\x33\x30\x33\x2c\ +\x33\x38\x32\x2e\x31\x38\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x33\x30\x33\x2e\x34\x31\x2c\x34\x30\x33\x2e\x36\x38\x63\ +\x33\x34\x2e\x34\x35\x2c\x30\x2c\x36\x38\x2e\x39\x2c\x30\x2c\x31\ +\x30\x33\x2e\x33\x34\x2d\x2e\x30\x37\x2c\x32\x2e\x38\x31\x2c\x30\ +\x2c\x33\x2e\x35\x36\x2e\x37\x31\x2c\x33\x2e\x34\x34\x2c\x33\x2e\ +\x34\x38\x2d\x2e\x32\x34\x2c\x35\x2e\x33\x34\x2d\x2e\x31\x34\x2c\ +\x31\x30\x2e\x37\x31\x2c\x30\x2c\x31\x36\x2e\x30\x36\x2c\x30\x2c\ +\x31\x2e\x37\x37\x2d\x2e\x35\x35\x2c\x32\x2e\x34\x36\x2d\x32\x2e\ +\x32\x38\x2c\x32\x2e\x32\x37\x61\x31\x35\x2e\x34\x39\x2c\x31\x35\ +\x2e\x34\x39\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x36\x37\x2c\x30\ +\x71\x2d\x31\x30\x33\x2c\x30\x2d\x32\x30\x36\x2c\x2e\x30\x38\x63\ +\x2d\x33\x2e\x33\x32\x2c\x30\x2d\x34\x2e\x31\x32\x2d\x2e\x39\x31\ +\x2d\x33\x2e\x39\x34\x2d\x34\x2e\x30\x37\x61\x31\x34\x31\x2e\x37\ +\x31\x2c\x31\x34\x31\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x30\x2c\x30\ +\x2d\x31\x34\x2e\x37\x32\x63\x2d\x2e\x31\x32\x2d\x32\x2e\x35\x38\ +\x2e\x36\x39\x2d\x33\x2e\x30\x38\x2c\x33\x2e\x31\x35\x2d\x33\x2e\ +\x30\x38\x51\x32\x35\x31\x2e\x34\x2c\x34\x30\x33\x2e\x37\x36\x2c\ +\x33\x30\x33\x2e\x34\x31\x2c\x34\x30\x33\x2e\x36\x38\x5a\x22\x2f\ +\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x78\x3d\x22\x31\x34\x30\x2e\x38\x35\x22\x20\ +\x79\x3d\x22\x31\x35\x33\x2e\x38\x32\x22\x20\x77\x69\x64\x74\x68\ +\x3d\x22\x32\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\ +\x22\x37\x36\x2e\x38\x33\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\ +\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x38\x39\ +\x2e\x30\x37\x20\x32\x33\x38\x2e\x33\x39\x29\x20\x72\x6f\x74\x61\ +\x74\x65\x28\x2d\x36\x32\x2e\x37\x35\x29\x22\x2f\x3e\x3c\x72\x65\ +\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\ +\x20\x78\x3d\x22\x33\x38\x33\x2e\x39\x39\x22\x20\x79\x3d\x22\x35\ +\x37\x2e\x33\x35\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x30\x2e\ +\x31\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x36\x2e\x38\ +\x33\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\ +\x61\x6e\x73\x6c\x61\x74\x65\x28\x36\x35\x36\x2e\x31\x39\x20\x34\ +\x30\x35\x2e\x31\x39\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x31\ +\x34\x33\x2e\x39\x33\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\ +\x34\x33\x39\x2e\x30\x31\x22\x20\x79\x3d\x22\x31\x35\x33\x2e\x38\ +\x32\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x30\x2e\x31\x34\x22\ +\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x36\x2e\x38\x33\x22\x20\ +\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\ +\x6c\x61\x74\x65\x28\x34\x38\x33\x2e\x37\x39\x20\x36\x37\x39\x2e\ +\x34\x38\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x31\x31\x37\x2e\ +\x32\x35\x29\x22\x2f\x3e\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x33\x36\x31\ +\x2e\x30\x31\x22\x20\x79\x3d\x22\x34\x34\x36\x22\x20\x77\x69\x64\ +\x74\x68\x3d\x22\x33\x30\x2e\x31\x34\x22\x20\x68\x65\x69\x67\x68\ +\x74\x3d\x22\x31\x32\x33\x2e\x35\x33\x22\x2f\x3e\x3c\x2f\x73\x76\ +\x67\x3e\ \x00\x00\x06\xac\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ @@ -10317,6 +9811,101 @@ \x34\x43\x34\x35\x39\x2c\x31\x34\x38\x2e\x31\x32\x2c\x34\x34\x34\ \x2e\x32\x33\x2c\x31\x35\x34\x2c\x34\x34\x32\x2e\x35\x36\x2c\x31\ \x36\x36\x2e\x31\x32\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x05\xc4\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\ +\x61\x79\x65\x72\x5f\x31\x22\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\ +\x65\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\ +\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ +\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x76\ +\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\x30\x30\x20\ +\x36\x30\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\ +\x20\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x2e\x63\x6c\x73\x2d\x31\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x65\x30\x65\x30\x64\x66\x3b\ +\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x73\ +\x74\x79\x6c\x65\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x72\x65\x63\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\x34\x35\x36\x2e\x37\x22\x20\ +\x79\x3d\x22\x32\x35\x35\x2e\x39\x31\x22\x20\x77\x69\x64\x74\x68\ +\x3d\x22\x32\x31\x2e\x30\x31\x22\x20\x68\x65\x69\x67\x68\x74\x3d\ +\x22\x33\x30\x2e\x37\x35\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\ +\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x2e\x38\ +\x20\x31\x2e\x33\x39\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x2d\x2e\ +\x31\x37\x29\x22\x2f\x3e\x0a\x20\x20\x3c\x72\x65\x63\x74\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x78\x3d\x22\ +\x34\x35\x36\x2e\x37\x34\x22\x20\x79\x3d\x22\x33\x31\x32\x2e\x39\ +\x39\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x31\x2e\x30\x36\x22\ +\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x30\x2e\x37\x33\x22\x20\ +\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\ +\x6c\x61\x74\x65\x28\x2d\x2e\x36\x39\x20\x2e\x39\x38\x29\x20\x72\ +\x6f\x74\x61\x74\x65\x28\x2d\x2e\x31\x32\x29\x22\x2f\x3e\x0a\x20\ +\x20\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\ +\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x35\x34\x38\x2e\x31\x32\x2c\ +\x33\x38\x35\x2e\x38\x37\x6c\x2d\x2e\x31\x39\x2d\x31\x37\x32\x2e\ +\x33\x2d\x31\x31\x34\x2e\x38\x31\x2e\x31\x63\x2e\x35\x36\x2d\x32\ +\x33\x2e\x39\x31\x2d\x31\x36\x2e\x33\x2d\x34\x32\x2e\x30\x33\x2d\ +\x34\x30\x2e\x30\x34\x2d\x34\x31\x2e\x38\x34\x6c\x2d\x33\x30\x34\ +\x2e\x34\x31\x2e\x34\x37\x63\x2d\x32\x33\x2e\x30\x31\x2e\x30\x33\ +\x2d\x33\x36\x2e\x38\x35\x2c\x32\x30\x2e\x34\x32\x2d\x33\x36\x2e\ +\x37\x39\x2c\x34\x31\x2e\x32\x32\x6c\x2e\x34\x38\x2c\x31\x37\x37\ +\x2e\x39\x37\x68\x30\x63\x2e\x30\x36\x2c\x32\x31\x2e\x38\x35\x2c\ +\x31\x39\x2e\x30\x33\x2c\x33\x36\x2e\x37\x31\x2c\x33\x39\x2e\x31\ +\x39\x2c\x33\x36\x2e\x36\x39\x6c\x33\x30\x33\x2e\x31\x36\x2d\x2e\ +\x33\x31\x63\x32\x33\x2e\x31\x2d\x2e\x35\x33\x2c\x33\x39\x2e\x32\ +\x32\x2d\x31\x38\x2e\x35\x37\x2c\x33\x38\x2e\x35\x38\x2d\x34\x31\ +\x2e\x38\x36\x6c\x31\x31\x34\x2e\x38\x34\x2d\x2e\x31\x34\x5a\x4d\ +\x31\x30\x39\x2e\x30\x38\x2c\x33\x34\x31\x2e\x33\x31\x63\x2e\x30\ +\x31\x2c\x38\x2e\x34\x35\x2d\x34\x2e\x39\x37\x2c\x31\x34\x2e\x31\ +\x38\x2d\x31\x32\x2e\x30\x38\x2c\x31\x34\x2e\x36\x31\x2d\x36\x2e\ +\x39\x35\x2e\x34\x32\x2d\x31\x33\x2e\x38\x32\x2d\x34\x2e\x38\x39\ +\x2d\x31\x33\x2e\x38\x34\x2d\x31\x32\x2e\x36\x32\x6c\x2d\x2e\x31\ +\x34\x2d\x38\x35\x2e\x30\x31\x63\x2d\x2e\x30\x31\x2d\x37\x2e\x37\ +\x38\x2c\x35\x2e\x31\x37\x2d\x31\x33\x2e\x35\x36\x2c\x31\x32\x2e\ +\x35\x35\x2d\x31\x33\x2e\x39\x33\x2c\x37\x2e\x35\x31\x2d\x2e\x33\ +\x38\x2c\x31\x33\x2e\x34\x33\x2c\x35\x2e\x36\x39\x2c\x31\x33\x2e\ +\x34\x33\x2c\x31\x33\x2e\x38\x33\x6c\x2e\x30\x38\x2c\x38\x33\x2e\ +\x31\x31\x68\x2d\x2e\x30\x31\x5a\x4d\x33\x36\x31\x2e\x38\x34\x2c\ +\x33\x31\x38\x2e\x34\x34\x6c\x2d\x2e\x33\x34\x2d\x31\x33\x2e\x32\ +\x2d\x31\x31\x32\x2e\x34\x36\x2e\x35\x2c\x32\x34\x2e\x36\x36\x2c\ +\x32\x35\x2e\x35\x33\x2c\x34\x32\x2e\x32\x2d\x2e\x31\x39\x2e\x33\ +\x33\x2d\x31\x31\x2e\x35\x35\x2c\x33\x32\x2e\x39\x2d\x2e\x32\x2e\ +\x32\x32\x2c\x33\x33\x2e\x30\x36\x2d\x33\x32\x2e\x39\x33\x2e\x32\ +\x38\x2d\x2e\x33\x38\x2d\x31\x31\x2e\x35\x33\x2d\x34\x33\x2e\x30\ +\x34\x2e\x32\x32\x63\x2d\x32\x2e\x30\x31\x2e\x30\x31\x2d\x35\x2e\ +\x34\x35\x2d\x31\x2e\x38\x37\x2d\x36\x2e\x39\x37\x2d\x33\x2e\x34\ +\x32\x6c\x2d\x33\x31\x2e\x33\x39\x2d\x33\x32\x2e\x31\x33\x2d\x34\ +\x34\x2e\x35\x39\x2e\x31\x37\x63\x2d\x33\x2e\x30\x39\x2c\x31\x33\ +\x2e\x31\x2d\x31\x34\x2e\x36\x31\x2c\x32\x30\x2e\x38\x34\x2d\x32\ +\x36\x2e\x38\x33\x2c\x31\x39\x2e\x35\x37\x2d\x31\x32\x2e\x35\x32\ +\x2d\x31\x2e\x33\x2d\x32\x31\x2e\x38\x2d\x31\x31\x2e\x38\x33\x2d\ +\x32\x32\x2e\x30\x36\x2d\x32\x33\x2e\x39\x31\x2d\x2e\x32\x37\x2d\ +\x31\x32\x2e\x37\x38\x2c\x39\x2e\x31\x35\x2d\x32\x33\x2e\x34\x33\ +\x2c\x32\x31\x2e\x33\x2d\x32\x34\x2e\x39\x39\x2c\x31\x32\x2e\x36\ +\x36\x2d\x31\x2e\x36\x32\x2c\x32\x34\x2e\x31\x34\x2c\x36\x2c\x32\ +\x37\x2e\x35\x32\x2c\x31\x39\x2e\x31\x38\x6c\x32\x31\x2e\x31\x34\ +\x2e\x30\x38\x2c\x33\x31\x2e\x37\x36\x2d\x33\x33\x2e\x38\x37\x63\ +\x31\x2e\x35\x35\x2d\x31\x2e\x36\x35\x2c\x35\x2e\x30\x32\x2d\x32\ +\x2e\x38\x32\x2c\x37\x2e\x31\x39\x2d\x32\x2e\x38\x32\x6c\x32\x39\ +\x2e\x31\x32\x2d\x2e\x30\x35\x63\x33\x2e\x32\x39\x2d\x37\x2e\x38\ +\x39\x2c\x31\x30\x2d\x31\x32\x2e\x37\x2c\x31\x38\x2e\x33\x2d\x31\ +\x31\x2e\x37\x2c\x37\x2e\x36\x35\x2e\x39\x32\x2c\x31\x34\x2e\x30\ +\x39\x2c\x37\x2e\x32\x36\x2c\x31\x34\x2e\x36\x33\x2c\x31\x35\x2e\ +\x34\x2e\x35\x33\x2c\x37\x2e\x39\x31\x2d\x34\x2e\x36\x31\x2c\x31\ +\x35\x2e\x34\x35\x2d\x31\x32\x2e\x32\x2c\x31\x37\x2e\x33\x34\x2d\ +\x38\x2e\x30\x36\x2c\x32\x2e\x30\x31\x2d\x31\x36\x2e\x36\x38\x2d\ +\x2e\x38\x33\x2d\x32\x30\x2e\x32\x2d\x31\x30\x2e\x38\x35\x6c\x2d\ +\x32\x39\x2e\x38\x35\x2d\x2e\x30\x39\x2d\x32\x34\x2e\x31\x32\x2c\ +\x32\x36\x2e\x34\x39\x2c\x31\x33\x35\x2e\x32\x36\x2d\x2e\x34\x39\ +\x2e\x37\x38\x2d\x31\x33\x2e\x31\x33\x2c\x33\x31\x2e\x34\x33\x2c\ +\x31\x38\x2e\x30\x32\x2d\x33\x31\x2e\x34\x31\x2c\x31\x38\x2e\x33\ +\x31\x5a\x4d\x34\x33\x32\x2e\x38\x33\x2c\x32\x33\x32\x2e\x34\x37\ +\x6c\x39\x36\x2e\x33\x38\x2d\x2e\x31\x36\x2e\x32\x32\x2c\x31\x33\ +\x34\x2e\x37\x36\x2d\x39\x36\x2e\x33\x38\x2e\x31\x36\x2d\x2e\x32\ +\x32\x2d\x31\x33\x34\x2e\x37\x36\x5a\x22\x2f\x3e\x0a\x3c\x2f\x73\ +\x76\x67\x3e\ \x00\x00\x01\x28\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ @@ -10790,11 +10379,10 @@ \x00\x53\x2e\x67\ \x00\x69\ \x00\x6e\x00\x64\x00\x75\x00\x63\x00\x74\x00\x69\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x12\ -\x09\x26\x6c\xa7\ +\x00\x0d\ +\x0a\x30\xb6\x27\ \x00\x62\ -\x00\x61\x00\x62\x00\x79\x00\x5f\x00\x73\x00\x74\x00\x65\x00\x70\x00\x5f\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\ -\x00\x67\ +\x00\x61\x00\x62\x00\x79\x00\x5f\x00\x73\x00\x74\x00\x65\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0b\ \x0b\x49\x2c\x07\ \x00\x62\ @@ -10883,18 +10471,23 @@ \x00\x6c\ \x00\x6f\x00\x61\x00\x64\x00\x65\x00\x64\x00\x5f\x00\x73\x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x10\ -\x04\x87\x91\x67\ -\x00\x63\ -\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x20\x00\x67\x00\x61\x00\x74\x00\x65\x00\x20\x00\x31\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x03\xde\xf0\x27\ +\x00\x61\ +\x00\x64\x00\x64\x00\x5f\x00\x66\x00\x69\x00\x6c\x00\x61\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x1b\ \x05\x0b\x6d\xc7\ \x00\x66\ \x00\x69\x00\x6c\x00\x61\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x5f\x00\x73\x00\x65\x00\x6e\x00\x73\x00\x6f\x00\x72\x00\x5f\x00\x74\ \x00\x75\x00\x72\x00\x6e\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0e\ -\x06\x77\x95\x87\ +\x06\x07\x95\x87\ \x00\x68\ -\x00\x61\x00\x6c\x00\x66\x00\x5f\x00\x73\x00\x70\x00\x6f\x00\x6c\x00\x6c\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x61\x00\x6c\x00\x66\x00\x5f\x00\x73\x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x14\ +\x07\xf7\xe0\x67\ +\x00\x73\ +\x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x5f\x00\x64\x00\x61\x00\x74\x00\x61\x00\x62\x00\x61\x00\x73\x00\x65\x00\x5f\x00\x31\x00\x2e\ +\x00\x73\x00\x76\x00\x67\ \x00\x13\ \x08\x16\x27\x27\ \x00\x63\ @@ -10905,15 +10498,6 @@ \x00\x66\ \x00\x69\x00\x6c\x00\x61\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x5f\x00\x73\x00\x65\x00\x6e\x00\x73\x00\x6f\x00\x72\x00\x2e\x00\x73\ \x00\x76\x00\x67\ -\x00\x16\ -\x09\x5d\x1f\x47\ -\x00\x62\ -\x00\x61\x00\x73\x00\x65\x00\x20\x00\x64\x00\x61\x00\x64\x00\x6f\x00\x73\x00\x20\x00\x73\x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x20\ -\x00\x31\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x10\ -\x09\xde\xf3\x27\ -\x00\x61\ -\x00\x64\x00\x64\x00\x20\x00\x66\x00\x69\x00\x6c\x00\x61\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ \x0b\x1b\x1d\xe7\ \x00\x66\ @@ -10928,9 +10512,13 @@ \x00\x73\ \x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x6d\x00\x61\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ -\x0d\x13\xaf\xa7\ +\x0d\x0b\x8f\xa7\ \x00\x61\ -\x00\x64\x00\x64\x00\x20\x00\x73\x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x64\x00\x64\x00\x5f\x00\x73\x00\x70\x00\x6f\x00\x6f\x00\x6c\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x10\ +\x0f\x15\x91\x67\ +\x00\x63\ +\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x5f\x00\x67\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x31\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0c\ \x0a\x48\xd1\xe7\ \x00\x66\ @@ -10948,14 +10536,6 @@ \x00\x69\ \x00\x6e\x00\x70\x00\x75\x00\x74\x00\x5f\x00\x73\x00\x68\x00\x61\x00\x70\x00\x65\x00\x72\x00\x5f\x00\x61\x00\x75\x00\x74\x00\x6f\ \x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0f\ -\x06\x5c\x65\xa7\ -\x00\x66\ -\x00\x72\x00\x65\x00\x71\x00\x75\x00\x65\x00\x6e\x00\x63\x00\x79\x00\x5f\x00\x58\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0f\ -\x06\x5f\x65\xa7\ -\x00\x66\ -\x00\x72\x00\x65\x00\x71\x00\x75\x00\x65\x00\x6e\x00\x63\x00\x79\x00\x5f\x00\x59\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ \x08\x4e\x2d\x87\ \x00\x69\ @@ -10975,6 +10555,11 @@ \x00\x72\ \x00\x65\x00\x73\x00\x74\x00\x61\x00\x72\x00\x74\x00\x5f\x00\x66\x00\x69\x00\x72\x00\x6d\x00\x77\x00\x61\x00\x72\x00\x65\x00\x2e\ \x00\x73\x00\x76\x00\x67\ +\x00\x13\ +\x04\x69\xc4\x47\ +\x00\x75\ +\x00\x70\x00\x64\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x73\x00\x6f\x00\x66\x00\x74\x00\x77\x00\x61\x00\x72\x00\x65\x00\x2e\x00\x73\ +\x00\x76\x00\x67\ \x00\x0a\ \x06\x68\x4d\xe7\ \x00\x72\ @@ -10984,11 +10569,6 @@ \x00\x72\ \x00\x65\x00\x73\x00\x74\x00\x61\x00\x72\x00\x74\x00\x5f\x00\x70\x00\x72\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\ \x00\x76\x00\x67\ -\x00\x18\ -\x0e\x6c\x6e\x87\ -\x00\x75\ -\x00\x70\x00\x64\x00\x61\x00\x74\x00\x65\x00\x2d\x00\x73\x00\x6f\x00\x66\x00\x74\x00\x77\x00\x61\x00\x72\x00\x65\x00\x2d\x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x14\ \x00\x09\x6b\x47\ \x00\x61\ @@ -11036,58 +10616,58 @@ \x00\x68\ \x00\x6f\x00\x74\x00\x73\x00\x70\x00\x6f\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ -\x00\xdd\x57\xa7\ -\x00\x31\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0d\ -\x02\xdd\x57\xa7\ -\x00\x30\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0d\ \x03\x52\x04\x07\ \x00\x73\ \x00\x74\x00\x61\x00\x74\x00\x69\x00\x63\x00\x5f\x00\x69\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ -\x0a\xdd\x57\x87\ -\x00\x34\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x03\x7c\xbe\x07\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x33\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ -\x0c\xdd\x57\x87\ -\x00\x33\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x16\ -\x0d\x98\xb3\x87\ -\x00\x65\ -\x00\x74\x00\x68\x00\x65\x00\x72\x00\x6e\x00\x65\x00\x74\x00\x5f\x00\x63\x00\x6f\x00\x6e\x00\x6e\x00\x65\x00\x63\x00\x74\x00\x65\ -\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x03\x7c\xbe\x27\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x32\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0d\ +\x03\x7c\xbe\x67\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x34\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0d\ +\x03\x7c\xbf\xc7\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x31\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ -\x0e\xdd\x57\x87\ -\x00\x32\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x03\x7c\xbf\xe7\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x30\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ -\x0f\x21\x74\x27\ -\x00\x32\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ +\x0c\x14\x0b\x87\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x33\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ \x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ -\x0f\x29\x74\x27\ -\x00\x33\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ +\x0c\x54\x0b\x87\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x32\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ \x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ -\x0f\x31\x74\x27\ -\x00\x34\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ +\x0c\xd4\x0b\x87\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x34\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ \x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x16\ +\x0d\x98\xb3\x87\ +\x00\x65\ +\x00\x74\x00\x68\x00\x65\x00\x72\x00\x6e\x00\x65\x00\x74\x00\x5f\x00\x63\x00\x6f\x00\x6e\x00\x6e\x00\x65\x00\x63\x00\x74\x00\x65\ +\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ -\x0f\x51\x74\x27\ -\x00\x30\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ +\x0f\x94\x0b\x87\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x31\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ \x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ -\x0f\x59\x74\x27\ -\x00\x31\ -\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x77\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ +\x0f\xd4\x0b\x87\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x30\x00\x62\x00\x61\x00\x72\x00\x5f\x00\x70\x00\x72\x00\x6f\x00\x74\x00\x65\x00\x63\x00\x74\ \x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x15\ \x00\x03\x60\x47\ @@ -11098,10 +10678,14 @@ \x04\x60\xa0\xa7\ \x00\x74\ \x00\x65\x00\x6d\x00\x70\x00\x65\x00\x72\x00\x61\x00\x74\x00\x75\x00\x72\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0c\ +\x08\xad\x4d\x87\ +\x00\x68\ +\x00\x65\x00\x61\x00\x74\x00\x73\x00\x6f\x00\x61\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x18\ -\x0b\x64\xdb\x87\ +\x0b\x24\xdb\x87\ \x00\x73\ -\x00\x74\x00\x61\x00\x6e\x00\x64\x00\x61\x00\x72\x00\x74\x00\x5f\x00\x74\x00\x65\x00\x6d\x00\x70\x00\x65\x00\x72\x00\x61\x00\x74\ +\x00\x74\x00\x61\x00\x6e\x00\x64\x00\x61\x00\x72\x00\x64\x00\x5f\x00\x74\x00\x65\x00\x6d\x00\x70\x00\x65\x00\x72\x00\x61\x00\x74\ \x00\x75\x00\x72\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0c\ \x0b\xad\x9f\xa7\ @@ -11111,15 +10695,10 @@ \x0d\x44\x25\xa7\ \x00\x68\ \x00\x75\x00\x6d\x00\x69\x00\x64\x00\x69\x00\x74\x00\x79\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x11\ -\x0f\x7b\x93\xc7\ -\x00\x68\ -\x00\x65\x00\x61\x00\x74\x00\x73\x00\x6f\x00\x61\x00\x6b\x00\x5f\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ -\ -\x00\x0d\ -\x04\x64\x30\x87\ +\x00\x08\ +\x00\x28\x57\x67\ \x00\x66\ -\x00\x69\x00\x6c\x00\x65\x00\x5f\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ \x00\x38\x55\xa7\ \x00\x74\ @@ -11148,10 +10727,10 @@ \x05\x5c\x2c\x87\ \x00\x74\ \x00\x72\x00\x6f\x00\x75\x00\x62\x00\x6c\x00\x65\x00\x73\x00\x68\x00\x6f\x00\x6f\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0e\ -\x06\x34\xcc\x67\ -\x00\x66\ -\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0b\ +\x07\x0f\x4b\xc7\ +\x00\x67\ +\x00\x61\x00\x72\x00\x62\x00\x61\x00\x67\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ \x07\x9e\x57\xc7\ \x00\x62\ @@ -11164,10 +10743,6 @@ \x09\x65\x83\xe7\ \x00\x65\ \x00\x72\x00\x72\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x08\ -\x09\xb6\x50\xc7\ -\x00\x4c\ -\x00\x45\x00\x44\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x07\ \x09\xb8\x5a\x27\ \x00\x73\ @@ -11176,23 +10751,19 @@ \x09\xb8\xa2\x67\ \x00\x75\ \x00\x6e\x00\x73\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x10\ -\x09\xcb\x31\x47\ -\x00\x4c\ -\x00\x43\x00\x44\x00\x5f\x00\x73\x00\x65\x00\x74\x00\x74\x00\x69\x00\x6e\x00\x67\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0c\ -\x09\xf2\x51\x27\ -\x00\x75\ -\x00\x73\x00\x62\x00\x5f\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x10\ -\x0a\xc0\xbf\x07\ -\x00\x67\ -\x00\x61\x00\x72\x00\x62\x00\x61\x00\x67\x00\x65\x00\x2d\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0a\ +\x0a\xc8\xf6\x87\ +\x00\x66\ +\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ \x0b\x63\x55\x87\ \x00\x73\ \x00\x74\x00\x6f\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ +\x0b\xb6\x54\x87\ +\x00\x6c\ +\x00\x65\x00\x64\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x08\ \x0c\x48\x55\xa7\ \x00\x74\ \x00\x75\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ @@ -11200,6 +10771,10 @@ \x0c\x6a\x21\xc7\ \x00\x72\ \x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x07\ +\x0c\x95\x5a\x27\ +\x00\x75\ +\x00\x73\x00\x62\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x09\ \x0c\x98\xb7\xc7\ \x00\x70\ @@ -11226,13 +10801,13 @@ qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x01\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x76\ -\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ -\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6b\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5a\ -\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x56\ -\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4d\ -\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x46\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x71\ +\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x69\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x58\ +\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x54\ +\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4b\ +\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x44\ \x00\x00\x00\x90\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3f\ \x00\x00\x00\xae\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3a\ \x00\x00\x00\xca\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2a\ @@ -11244,150 +10819,147 @@ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x11\ \x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x08\x66\ -\x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb0\ -\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x14\x75\ +\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb0\ +\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\ +\x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00\x14\x75\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x18\ -\x00\x00\x02\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x19\ -\x00\x00\x02\x60\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x93\ -\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\x21\x07\ -\x00\x00\x02\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x22\xa1\ -\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x25\x1d\ -\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x26\xba\ -\x00\x00\x03\x06\x00\x00\x00\x00\x00\x01\x00\x00\x29\x36\ +\x00\x00\x02\x32\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x19\ +\x00\x00\x02\x56\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x93\ +\x00\x00\x02\x78\x00\x00\x00\x00\x00\x01\x00\x00\x21\x07\ +\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x22\xa1\ +\x00\x00\x02\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x1d\ +\x00\x00\x02\xda\x00\x00\x00\x00\x00\x01\x00\x00\x26\xba\ +\x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x29\x36\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x20\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x21\ -\x00\x00\x03\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xce\ -\x00\x00\x03\x44\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xcf\ -\x00\x00\x03\x74\x00\x00\x00\x00\x00\x01\x00\x00\x37\x91\ -\x00\x00\x03\x98\x00\x00\x00\x00\x00\x01\x00\x00\x3b\xed\ -\x00\x00\x03\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\ +\x00\x00\x03\x20\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xce\ +\x00\x00\x03\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xcf\ +\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x37\x91\ +\x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x3b\xed\ +\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x27\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x28\ -\x00\x00\x03\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xe7\ -\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x42\x12\ +\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xe7\ +\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x42\x12\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2b\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x2c\ -\x00\x00\x04\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x44\x18\ -\x00\x00\x04\x62\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x47\ -\x00\x00\x04\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x58\x8e\ -\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x62\x5d\ -\x00\x00\x04\xda\x00\x00\x00\x00\x00\x01\x00\x00\x66\xb0\ -\x00\x00\x05\x16\x00\x00\x00\x00\x00\x01\x00\x00\x68\xb1\ -\x00\x00\x05\x38\x00\x00\x00\x00\x00\x01\x00\x00\x6d\x84\ -\x00\x00\x05\x64\x00\x00\x00\x00\x00\x01\x00\x00\x88\xc9\ -\x00\x00\x05\x90\x00\x01\x00\x00\x00\x01\x00\x00\x8e\x12\ -\x00\x00\x05\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x9a\x00\ -\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\xa5\xd2\ -\x00\x00\x06\x1c\x00\x00\x00\x00\x00\x01\x00\x00\xa9\x4a\ -\x00\x00\x06\x34\x00\x00\x00\x00\x00\x01\x00\x00\xab\x4b\ -\x00\x00\x06\x52\x00\x00\x00\x00\x00\x01\x00\x00\xb1\xf9\ +\x00\x00\x04\x30\x00\x00\x00\x00\x00\x01\x00\x00\x44\x18\ +\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x47\ +\x00\x00\x04\x84\x00\x00\x00\x00\x00\x01\x00\x00\x58\x8e\ +\x00\x00\x04\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x62\x5d\ +\x00\x00\x04\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x6e\x2f\ +\x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x70\x30\ +\x00\x00\x05\x2e\x00\x01\x00\x00\x00\x01\x00\x00\x75\x03\ +\x00\x00\x05\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x80\xf1\ +\x00\x00\x05\x88\x00\x00\x00\x00\x00\x01\x00\x00\x9c\x36\ +\x00\x00\x05\xb4\x00\x00\x00\x00\x00\x01\x00\x00\xa1\x7f\ +\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\xa4\xf7\ +\x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\xa6\xf8\ +\x00\x00\x06\x1e\x00\x00\x00\x00\x00\x01\x00\x00\xad\xa6\ +\x00\x00\x06\x3e\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x35\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3b\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x3c\ -\x00\x00\x06\x72\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ -\x00\x00\x06\x90\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x45\ -\x00\x00\x06\xa4\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x18\ +\x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ +\x00\x00\x06\x82\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x45\ +\x00\x00\x06\x96\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x18\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x40\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x41\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x00\xd3\x92\ -\x00\x00\x06\xee\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x31\ -\x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x00\xe3\x0d\ -\x00\x00\x07\x36\x00\x00\x00\x00\x00\x01\x00\x00\xea\xc3\ -\x00\x00\x07\x6a\x00\x00\x00\x00\x00\x01\x00\x00\xf2\x8d\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x47\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x48\ -\x00\x00\x07\x90\x00\x00\x00\x00\x00\x01\x00\x00\xf8\x96\ -\x00\x00\x07\xbc\x00\x00\x00\x00\x00\x01\x00\x01\x1b\x1a\ -\x00\x00\x07\xea\x00\x00\x00\x00\x00\x01\x00\x01\x21\x07\ -\x00\x00\x08\x04\x00\x00\x00\x00\x00\x01\x00\x01\x30\x50\ -\x00\x00\x08\x30\x00\x00\x00\x00\x00\x01\x00\x01\x36\xce\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4e\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x4f\ -\x00\x00\x08\x66\x00\x00\x00\x00\x00\x01\x00\x01\x40\x15\ -\x00\x00\x08\x94\x00\x00\x00\x00\x00\x01\x00\x01\x42\xbc\ -\x00\x00\x08\xc2\x00\x00\x00\x00\x00\x01\x00\x01\x4f\x39\ -\x00\x00\x08\xdc\x00\x00\x00\x00\x00\x01\x00\x01\x54\x83\ -\x00\x00\x08\xf6\x00\x00\x00\x00\x00\x01\x00\x01\x5a\x12\ -\x00\x00\x09\x10\x00\x00\x00\x00\x00\x01\x00\x01\x5f\x7b\ -\x00\x00\x09\x28\x00\x00\x00\x00\x00\x01\x00\x01\x6b\x59\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x57\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x58\ -\x00\x00\x09\x46\x00\x00\x00\x00\x00\x01\x00\x01\x71\x5d\ -\x00\x00\x09\x58\x00\x00\x00\x00\x00\x01\x00\x01\x72\xe3\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5b\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5c\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x5f\ -\x00\x00\x09\x6c\x00\x01\x00\x00\x00\x01\x00\x01\x75\x39\ -\x00\x00\x09\x90\x00\x00\x00\x00\x00\x01\x00\x01\x80\x9a\ -\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x91\x9a\ -\x00\x00\x09\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x97\x33\ -\x00\x00\x09\xec\x00\x00\x00\x00\x00\x01\x00\x01\x9d\x5a\ -\x00\x00\x0a\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xa1\xaf\ -\x00\x00\x0a\x2c\x00\x00\x00\x00\x00\x01\x00\x01\xa7\x33\ -\x00\x00\x0a\x4c\x00\x00\x00\x00\x00\x01\x00\x01\xac\xcc\ -\x00\x00\x0a\x7e\x00\x00\x00\x00\x00\x01\x00\x01\xb1\xce\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x67\ -\x00\x00\x0a\xd2\x00\x00\x00\x00\x00\x01\x00\x01\xc1\xdb\ -\x00\x00\x0b\x06\x00\x00\x00\x00\x00\x01\x00\x01\xcc\x55\ -\x00\x00\x0b\x3a\x00\x00\x00\x00\x00\x01\x00\x01\xd6\xb4\ -\x00\x00\x0b\x6e\x00\x00\x00\x00\x00\x01\x00\x01\xe1\xff\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6c\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x06\x00\x00\x00\x6d\ -\x00\x00\x0b\xa2\x00\x00\x00\x00\x00\x01\x00\x01\xec\x73\ -\x00\x00\x0b\xd2\x00\x00\x00\x00\x00\x01\x00\x01\xf6\x09\ -\x00\x00\x0b\xf6\x00\x00\x00\x00\x00\x01\x00\x01\xfc\x4d\ -\x00\x00\x0c\x2c\x00\x01\x00\x00\x00\x01\x00\x02\x04\x3c\ -\x00\x00\x0c\x4a\x00\x00\x00\x00\x00\x01\x00\x02\x08\x4f\ -\x00\x00\x0c\x68\x00\x00\x00\x00\x00\x01\x00\x02\x0e\xdc\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ -\x00\x00\x0c\x90\x00\x00\x00\x00\x00\x01\x00\x02\x16\xa6\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x77\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x19\x00\x00\x00\x78\ -\x00\x00\x0c\xb0\x00\x00\x00\x00\x00\x01\x00\x02\x1b\x6c\ -\x00\x00\x0c\xc6\x00\x00\x00\x00\x00\x01\x00\x02\x23\x20\ -\x00\x00\x0c\xde\x00\x00\x00\x00\x00\x01\x00\x02\x25\x45\ -\x00\x00\x0c\xfa\x00\x00\x00\x00\x00\x01\x00\x02\x2c\xf2\ -\x00\x00\x0d\x10\x00\x00\x00\x00\x00\x01\x00\x02\x2d\xe2\ -\x00\x00\x0d\x36\x00\x00\x00\x00\x00\x01\x00\x02\x31\x0e\ -\x00\x00\x0d\x4c\x00\x00\x00\x00\x00\x01\x00\x02\x35\x37\ -\x00\x00\x0d\x72\x00\x00\x00\x00\x00\x01\x00\x02\x3b\x6e\ -\x00\x00\x0d\x94\x00\x00\x00\x00\x00\x01\x00\x02\x40\x5e\ -\x00\x00\x0d\xaa\x00\x00\x00\x00\x00\x01\x00\x02\x43\x5d\ -\x00\x00\x0d\xc0\x00\x00\x00\x00\x00\x01\x00\x02\x49\x67\ -\x00\x00\x0d\xd8\x00\x00\x00\x00\x00\x01\x00\x02\x4c\x59\ -\x00\x00\x0d\xee\x00\x00\x00\x00\x00\x01\x00\x02\x52\x50\ -\x00\x00\x0e\x02\x00\x00\x00\x00\x00\x01\x00\x02\x54\x61\ -\x00\x00\x0e\x1a\x00\x00\x00\x00\x00\x01\x00\x02\x58\x24\ -\x00\x00\x0e\x40\x00\x00\x00\x00\x00\x01\x00\x02\x61\xd8\ -\x00\x00\x0e\x5e\x00\x00\x00\x00\x00\x01\x00\x02\x67\xa0\ -\x00\x00\x0e\x84\x00\x00\x00\x00\x00\x01\x00\x02\x6c\x41\ -\x00\x00\x0e\x9a\x00\x00\x00\x00\x00\x01\x00\x02\x6d\x25\ -\x00\x00\x0e\xb0\x00\x00\x00\x00\x00\x01\x00\x02\x73\xd5\ -\x00\x00\x0e\xcc\x00\x00\x00\x00\x00\x01\x00\x02\x77\x19\ -\x00\x00\x0e\xe4\x00\x00\x00\x00\x00\x01\x00\x02\x78\x45\ -\x00\x00\x0e\xfe\x00\x00\x00\x00\x00\x01\x00\x02\x7e\x06\ -\x00\x00\x0f\x2c\x00\x00\x00\x00\x00\x01\x00\x02\x86\x72\ -\x00\x00\x0f\x50\x00\x00\x00\x00\x00\x01\x00\x02\x8e\x32\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x41\ +\x00\x00\x06\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xd3\x92\ +\x00\x00\x06\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x31\ +\x00\x00\x07\x14\x00\x00\x00\x00\x00\x01\x00\x00\xe2\xfb\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x45\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x46\ +\x00\x00\x07\x3a\x00\x00\x00\x00\x00\x01\x00\x00\xe9\x04\ +\x00\x00\x07\x66\x00\x00\x00\x00\x00\x01\x00\x01\x0b\x88\ +\x00\x00\x07\x94\x00\x00\x00\x00\x00\x01\x00\x01\x11\x75\ +\x00\x00\x07\xc0\x00\x00\x00\x00\x00\x01\x00\x01\x1a\xbc\ +\x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x01\x2a\x05\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4c\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x4d\ +\x00\x00\x08\x06\x00\x00\x00\x00\x00\x01\x00\x01\x30\x83\ +\x00\x00\x08\x34\x00\x00\x00\x00\x00\x01\x00\x01\x33\x2a\ +\x00\x00\x08\x62\x00\x00\x00\x00\x00\x01\x00\x01\x3f\xa7\ +\x00\x00\x08\x7c\x00\x00\x00\x00\x00\x01\x00\x01\x44\xf1\ +\x00\x00\x08\x96\x00\x00\x00\x00\x00\x01\x00\x01\x4a\x80\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x4f\xe9\ +\x00\x00\x08\xc8\x00\x00\x00\x00\x00\x01\x00\x01\x5b\xc7\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x55\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x56\ +\x00\x00\x08\xe6\x00\x00\x00\x00\x00\x01\x00\x01\x61\xcb\ +\x00\x00\x08\xf8\x00\x00\x00\x00\x00\x01\x00\x01\x63\x51\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x59\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5a\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x5d\ +\x00\x00\x09\x0c\x00\x01\x00\x00\x00\x01\x00\x01\x65\xa7\ +\x00\x00\x09\x30\x00\x00\x00\x00\x00\x01\x00\x01\x71\x08\ +\x00\x00\x09\x4c\x00\x00\x00\x00\x00\x01\x00\x01\x82\x08\ +\x00\x00\x09\x6c\x00\x00\x00\x00\x00\x01\x00\x01\x86\x5d\ +\x00\x00\x09\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x8b\xf6\ +\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x91\x8f\ +\x00\x00\x09\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x97\x13\ +\x00\x00\x09\xec\x00\x00\x00\x00\x00\x01\x00\x01\x9c\xac\ +\x00\x00\x0a\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xa2\xd3\ +\x00\x00\x0a\x40\x00\x00\x00\x00\x00\x01\x00\x01\xad\x4d\ +\x00\x00\x0a\x74\x00\x00\x00\x00\x00\x01\x00\x01\xb7\xc1\ +\x00\x00\x0a\xa8\x00\x00\x00\x00\x00\x01\x00\x01\xc2\x20\ +\x00\x00\x0a\xda\x00\x00\x00\x00\x00\x01\x00\x01\xc7\x22\ +\x00\x00\x0b\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xd1\x96\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6a\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x06\x00\x00\x00\x6b\ +\x00\x00\x0b\x42\x00\x00\x00\x00\x00\x01\x00\x01\xdc\xe1\ +\x00\x00\x0b\x72\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x77\ +\x00\x00\x0b\x96\x00\x00\x00\x00\x00\x01\x00\x01\xec\xbb\ +\x00\x00\x0b\xb4\x00\x00\x00\x00\x00\x01\x00\x01\xf4\x85\ +\x00\x00\x0b\xea\x00\x01\x00\x00\x00\x01\x00\x01\xfc\x74\ +\x00\x00\x0c\x08\x00\x00\x00\x00\x00\x01\x00\x02\x00\x87\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x72\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ +\x00\x00\x0c\x26\x00\x00\x00\x00\x00\x01\x00\x02\x07\x14\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x18\x00\x00\x00\x76\ +\x00\x00\x0c\x3c\x00\x00\x00\x00\x00\x01\x00\x02\x0b\xda\ +\x00\x00\x0c\x52\x00\x00\x00\x00\x00\x01\x00\x02\x13\x8e\ +\x00\x00\x0c\x6a\x00\x00\x00\x00\x00\x01\x00\x02\x15\xb3\ +\x00\x00\x0c\x86\x00\x00\x00\x00\x00\x01\x00\x02\x1d\x60\ +\x00\x00\x0c\x9c\x00\x00\x00\x00\x00\x01\x00\x02\x1e\x50\ +\x00\x00\x0c\xc2\x00\x00\x00\x00\x00\x01\x00\x02\x21\x7c\ +\x00\x00\x0c\xd8\x00\x00\x00\x00\x00\x01\x00\x02\x25\xa5\ +\x00\x00\x0c\xfe\x00\x00\x00\x00\x00\x01\x00\x02\x2b\xdc\ +\x00\x00\x0d\x1a\x00\x00\x00\x00\x00\x01\x00\x02\x30\x7d\ +\x00\x00\x0d\x30\x00\x00\x00\x00\x00\x01\x00\x02\x33\x7c\ +\x00\x00\x0d\x46\x00\x00\x00\x00\x00\x01\x00\x02\x39\x86\ +\x00\x00\x0d\x5e\x00\x00\x00\x00\x00\x01\x00\x02\x3c\x78\ +\x00\x00\x0d\x72\x00\x00\x00\x00\x00\x01\x00\x02\x3e\x89\ +\x00\x00\x0d\x8a\x00\x00\x00\x00\x00\x01\x00\x02\x42\x4c\ +\x00\x00\x0d\xa4\x00\x00\x00\x00\x00\x01\x00\x02\x47\x3c\ +\x00\x00\x0d\xba\x00\x00\x00\x00\x00\x01\x00\x02\x48\x20\ +\x00\x00\x0d\xd0\x00\x00\x00\x00\x00\x01\x00\x02\x4e\x17\ +\x00\x00\x0d\xe6\x00\x00\x00\x00\x00\x01\x00\x02\x54\xc7\ +\x00\x00\x0e\x02\x00\x00\x00\x00\x00\x01\x00\x02\x58\x0b\ +\x00\x00\x0e\x16\x00\x00\x00\x00\x00\x01\x00\x02\x5d\xd3\ +\x00\x00\x0e\x2e\x00\x00\x00\x00\x00\x01\x00\x02\x5e\xff\ +\x00\x00\x0e\x48\x00\x00\x00\x00\x00\x01\x00\x02\x64\xc0\ +\x00\x00\x0e\x76\x00\x00\x00\x00\x00\x01\x00\x02\x6d\x2c\ +\x00\x00\x0e\x9a\x00\x00\x00\x00\x00\x01\x00\x02\x74\xec\ " qt_resource_struct_v2 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x76\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x71\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6b\ +\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x69\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5a\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x58\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x56\ +\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x54\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4d\ +\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4b\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x46\ +\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x44\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x90\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3f\ \x00\x00\x00\x00\x00\x00\x00\x00\ @@ -11411,257 +10983,251 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x08\x66\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb0\ +\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb0\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\ +\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x14\x75\ +\x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00\x14\x75\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x18\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x02\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x19\ +\x00\x00\x02\x32\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x19\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x02\x60\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x93\ +\x00\x00\x02\x56\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x93\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\x21\x07\ +\x00\x00\x02\x78\x00\x00\x00\x00\x00\x01\x00\x00\x21\x07\ \x00\x00\x01\x9d\x48\x7c\x8b\xc6\ -\x00\x00\x02\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x22\xa1\ +\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x22\xa1\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x25\x1d\ +\x00\x00\x02\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x1d\ \x00\x00\x01\x9f\xa9\x7c\x2e\x17\ -\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x26\xba\ +\x00\x00\x02\xda\x00\x00\x00\x00\x00\x01\x00\x00\x26\xba\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x03\x06\x00\x00\x00\x00\x00\x01\x00\x00\x29\x36\ +\x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x29\x36\ \x00\x00\x01\x9d\x48\x7c\x8b\xc9\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x20\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x21\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x03\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xce\ +\x00\x00\x03\x20\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xce\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x03\x44\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xcf\ +\x00\x00\x03\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xcf\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x03\x74\x00\x00\x00\x00\x00\x01\x00\x00\x37\x91\ +\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x37\x91\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x03\x98\x00\x00\x00\x00\x00\x01\x00\x00\x3b\xed\ +\x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x3b\xed\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x03\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\ +\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x27\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x28\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x03\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xe7\ +\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xe7\ \x00\x00\x01\x9c\xe2\x99\x3f\x60\ -\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x42\x12\ +\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x42\x12\ \x00\x00\x01\x9c\xe2\x99\x3f\x60\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2b\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x2c\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x04\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x44\x18\ +\x00\x00\x04\x30\x00\x00\x00\x00\x00\x01\x00\x00\x44\x18\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x04\x62\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x47\ +\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x47\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x04\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x58\x8e\ +\x00\x00\x04\x84\x00\x00\x00\x00\x00\x01\x00\x00\x58\x8e\ \x00\x00\x01\x9f\xa9\x7c\x2e\x18\ -\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x62\x5d\ +\x00\x00\x04\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x62\x5d\ \x00\x00\x01\x9f\xa9\x7c\x2e\x17\ -\x00\x00\x04\xda\x00\x00\x00\x00\x00\x01\x00\x00\x66\xb0\ +\x00\x00\x04\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x6e\x2f\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x05\x16\x00\x00\x00\x00\x00\x01\x00\x00\x68\xb1\ +\x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x70\x30\ \x00\x00\x01\x9f\xa9\x7c\x2e\x18\ -\x00\x00\x05\x38\x00\x00\x00\x00\x00\x01\x00\x00\x6d\x84\ +\x00\x00\x05\x2e\x00\x01\x00\x00\x00\x01\x00\x00\x75\x03\ +\x00\x00\x01\x9f\xa9\x7c\x2e\x17\ +\x00\x00\x05\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x80\xf1\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x05\x64\x00\x00\x00\x00\x00\x01\x00\x00\x88\xc9\ +\x00\x00\x05\x88\x00\x00\x00\x00\x00\x01\x00\x00\x9c\x36\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x05\x90\x00\x01\x00\x00\x00\x01\x00\x00\x8e\x12\ -\x00\x00\x01\x9f\xa9\x7c\x2e\x17\ -\x00\x00\x05\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x9a\x00\ -\x00\x00\x01\x9f\xa9\x7c\x2e\x17\ -\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\xa5\xd2\ +\x00\x00\x05\xb4\x00\x00\x00\x00\x00\x01\x00\x00\xa1\x7f\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x06\x1c\x00\x00\x00\x00\x00\x01\x00\x00\xa9\x4a\ +\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\xa4\xf7\ \x00\x00\x01\x9f\xa9\x7c\x2e\x17\ -\x00\x00\x06\x34\x00\x00\x00\x00\x00\x01\x00\x00\xab\x4b\ +\x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\xa6\xf8\ \x00\x00\x01\x9f\xa9\x7c\x2e\x18\ -\x00\x00\x06\x52\x00\x00\x00\x00\x00\x01\x00\x00\xb1\xf9\ +\x00\x00\x06\x1e\x00\x00\x00\x00\x00\x01\x00\x00\xad\xa6\ +\x00\x00\x01\x9f\xa9\x7c\x2e\x17\ +\x00\x00\x06\x3e\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x35\ \x00\x00\x01\x9f\xa9\x7c\x2e\x17\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3b\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x3c\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x06\x72\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ +\x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ \x00\x00\x01\xa0\x19\xb8\x66\xbc\ -\x00\x00\x06\x90\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x45\ +\x00\x00\x06\x82\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x45\ \x00\x00\x01\xa0\x19\xb8\x66\xbc\ -\x00\x00\x06\xa4\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x18\ +\x00\x00\x06\x96\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x18\ \x00\x00\x01\xa0\x19\xb8\x66\xbc\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x40\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x41\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x41\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x00\xd3\x92\ -\x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x06\xee\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x31\ +\x00\x00\x06\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xd3\x92\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x00\xe3\x0d\ +\x00\x00\x06\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x31\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x07\x36\x00\x00\x00\x00\x00\x01\x00\x00\xea\xc3\ +\x00\x00\x07\x14\x00\x00\x00\x00\x00\x01\x00\x00\xe2\xfb\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x07\x6a\x00\x00\x00\x00\x00\x01\x00\x00\xf2\x8d\ -\x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x47\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x45\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x48\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x46\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x07\x90\x00\x00\x00\x00\x00\x01\x00\x00\xf8\x96\ +\x00\x00\x07\x3a\x00\x00\x00\x00\x00\x01\x00\x00\xe9\x04\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x07\xbc\x00\x00\x00\x00\x00\x01\x00\x01\x1b\x1a\ +\x00\x00\x07\x66\x00\x00\x00\x00\x00\x01\x00\x01\x0b\x88\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x07\xea\x00\x00\x00\x00\x00\x01\x00\x01\x21\x07\ +\x00\x00\x07\x94\x00\x00\x00\x00\x00\x01\x00\x01\x11\x75\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x08\x04\x00\x00\x00\x00\x00\x01\x00\x01\x30\x50\ +\x00\x00\x07\xc0\x00\x00\x00\x00\x00\x01\x00\x01\x1a\xbc\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x08\x30\x00\x00\x00\x00\x00\x01\x00\x01\x36\xce\ +\x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x01\x2a\x05\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4e\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4c\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x4f\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x4d\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x08\x66\x00\x00\x00\x00\x00\x01\x00\x01\x40\x15\ +\x00\x00\x08\x06\x00\x00\x00\x00\x00\x01\x00\x01\x30\x83\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x08\x94\x00\x00\x00\x00\x00\x01\x00\x01\x42\xbc\ +\x00\x00\x08\x34\x00\x00\x00\x00\x00\x01\x00\x01\x33\x2a\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x08\xc2\x00\x00\x00\x00\x00\x01\x00\x01\x4f\x39\ +\x00\x00\x08\x62\x00\x00\x00\x00\x00\x01\x00\x01\x3f\xa7\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x08\xdc\x00\x00\x00\x00\x00\x01\x00\x01\x54\x83\ +\x00\x00\x08\x7c\x00\x00\x00\x00\x00\x01\x00\x01\x44\xf1\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x08\xf6\x00\x00\x00\x00\x00\x01\x00\x01\x5a\x12\ +\x00\x00\x08\x96\x00\x00\x00\x00\x00\x01\x00\x01\x4a\x80\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\x10\x00\x00\x00\x00\x00\x01\x00\x01\x5f\x7b\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x4f\xe9\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\x28\x00\x00\x00\x00\x00\x01\x00\x01\x6b\x59\ +\x00\x00\x08\xc8\x00\x00\x00\x00\x00\x01\x00\x01\x5b\xc7\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x57\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x55\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x58\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x56\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x09\x46\x00\x00\x00\x00\x00\x01\x00\x01\x71\x5d\ +\x00\x00\x08\xe6\x00\x00\x00\x00\x00\x01\x00\x01\x61\xcb\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\x58\x00\x00\x00\x00\x00\x01\x00\x01\x72\xe3\ +\x00\x00\x08\xf8\x00\x00\x00\x00\x00\x01\x00\x01\x63\x51\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5b\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x59\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5c\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5a\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x5f\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x5d\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x09\x6c\x00\x01\x00\x00\x00\x01\x00\x01\x75\x39\ +\x00\x00\x09\x0c\x00\x01\x00\x00\x00\x01\x00\x01\x65\xa7\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\x90\x00\x00\x00\x00\x00\x01\x00\x01\x80\x9a\ +\x00\x00\x09\x30\x00\x00\x00\x00\x00\x01\x00\x01\x71\x08\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x91\x9a\ -\x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x09\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x97\x33\ -\x00\x00\x01\x9d\x48\x7c\x8b\xcc\ -\x00\x00\x09\xec\x00\x00\x00\x00\x00\x01\x00\x01\x9d\x5a\ +\x00\x00\x09\x4c\x00\x00\x00\x00\x00\x01\x00\x01\x82\x08\ \x00\x00\x01\x9d\x48\x7c\x8b\xce\ -\x00\x00\x0a\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xa1\xaf\ +\x00\x00\x09\x6c\x00\x00\x00\x00\x00\x01\x00\x01\x86\x5d\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0a\x2c\x00\x00\x00\x00\x00\x01\x00\x01\xa7\x33\ +\x00\x00\x09\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x8b\xf6\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0a\x4c\x00\x00\x00\x00\x00\x01\x00\x01\xac\xcc\ -\x00\x00\x01\x9d\x48\x7c\x8b\xce\ -\x00\x00\x0a\x7e\x00\x00\x00\x00\x00\x01\x00\x01\xb1\xce\ +\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x91\x8f\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x67\ +\x00\x00\x09\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x97\x13\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0a\xd2\x00\x00\x00\x00\x00\x01\x00\x01\xc1\xdb\ +\x00\x00\x09\xec\x00\x00\x00\x00\x00\x01\x00\x01\x9c\xac\ +\x00\x00\x01\x9d\x48\x7c\x8b\xcc\ +\x00\x00\x0a\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xa2\xd3\ +\x00\x00\x01\x9d\x48\x7c\x8b\xcd\ +\x00\x00\x0a\x40\x00\x00\x00\x00\x00\x01\x00\x01\xad\x4d\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0b\x06\x00\x00\x00\x00\x00\x01\x00\x01\xcc\x55\ +\x00\x00\x0a\x74\x00\x00\x00\x00\x00\x01\x00\x01\xb7\xc1\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0b\x3a\x00\x00\x00\x00\x00\x01\x00\x01\xd6\xb4\ +\x00\x00\x0a\xa8\x00\x00\x00\x00\x00\x01\x00\x01\xc2\x20\ +\x00\x00\x01\x9d\x48\x7c\x8b\xce\ +\x00\x00\x0a\xda\x00\x00\x00\x00\x00\x01\x00\x01\xc7\x22\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x0b\x6e\x00\x00\x00\x00\x00\x01\x00\x01\xe1\xff\ +\x00\x00\x0b\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xd1\x96\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6c\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6a\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x06\x00\x00\x00\x6d\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x06\x00\x00\x00\x6b\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x0b\xa2\x00\x00\x00\x00\x00\x01\x00\x01\xec\x73\ +\x00\x00\x0b\x42\x00\x00\x00\x00\x00\x01\x00\x01\xdc\xe1\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0b\xd2\x00\x00\x00\x00\x00\x01\x00\x01\xf6\x09\ +\x00\x00\x0b\x72\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x77\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0b\xf6\x00\x00\x00\x00\x00\x01\x00\x01\xfc\x4d\ +\x00\x00\x0b\x96\x00\x00\x00\x00\x00\x01\x00\x01\xec\xbb\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0c\x2c\x00\x01\x00\x00\x00\x01\x00\x02\x04\x3c\ +\x00\x00\x0b\xb4\x00\x00\x00\x00\x00\x01\x00\x01\xf4\x85\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0c\x4a\x00\x00\x00\x00\x00\x01\x00\x02\x08\x4f\ -\x00\x00\x01\x9f\xa9\x7c\x2e\x18\ -\x00\x00\x0c\x68\x00\x00\x00\x00\x00\x01\x00\x02\x0e\xdc\ +\x00\x00\x0b\xea\x00\x01\x00\x00\x00\x01\x00\x01\xfc\x74\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ +\x00\x00\x0c\x08\x00\x00\x00\x00\x00\x01\x00\x02\x00\x87\ +\x00\x00\x01\x9f\xa9\x7c\x2e\x18\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x72\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x0c\x90\x00\x00\x00\x00\x00\x01\x00\x02\x16\xa6\ +\x00\x00\x0c\x26\x00\x00\x00\x00\x00\x01\x00\x02\x07\x14\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x77\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x19\x00\x00\x00\x78\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x18\x00\x00\x00\x76\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x0c\xb0\x00\x00\x00\x00\x00\x01\x00\x02\x1b\x6c\ +\x00\x00\x0c\x3c\x00\x00\x00\x00\x00\x01\x00\x02\x0b\xda\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0c\xc6\x00\x00\x00\x00\x00\x01\x00\x02\x23\x20\ +\x00\x00\x0c\x52\x00\x00\x00\x00\x00\x01\x00\x02\x13\x8e\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0c\xde\x00\x00\x00\x00\x00\x01\x00\x02\x25\x45\ +\x00\x00\x0c\x6a\x00\x00\x00\x00\x00\x01\x00\x02\x15\xb3\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0c\xfa\x00\x00\x00\x00\x00\x01\x00\x02\x2c\xf2\ +\x00\x00\x0c\x86\x00\x00\x00\x00\x00\x01\x00\x02\x1d\x60\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0d\x10\x00\x00\x00\x00\x00\x01\x00\x02\x2d\xe2\ +\x00\x00\x0c\x9c\x00\x00\x00\x00\x00\x01\x00\x02\x1e\x50\ \x00\x00\x01\x9d\x48\x7c\x8b\xce\ -\x00\x00\x0d\x36\x00\x00\x00\x00\x00\x01\x00\x02\x31\x0e\ +\x00\x00\x0c\xc2\x00\x00\x00\x00\x00\x01\x00\x02\x21\x7c\ \x00\x00\x01\x9c\xe2\x99\x3f\x60\ -\x00\x00\x0d\x4c\x00\x00\x00\x00\x00\x01\x00\x02\x35\x37\ +\x00\x00\x0c\xd8\x00\x00\x00\x00\x00\x01\x00\x02\x25\xa5\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0d\x72\x00\x00\x00\x00\x00\x01\x00\x02\x3b\x6e\ +\x00\x00\x0c\xfe\x00\x00\x00\x00\x00\x01\x00\x02\x2b\xdc\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0d\x94\x00\x00\x00\x00\x00\x01\x00\x02\x40\x5e\ +\x00\x00\x0d\x1a\x00\x00\x00\x00\x00\x01\x00\x02\x30\x7d\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0d\xaa\x00\x00\x00\x00\x00\x01\x00\x02\x43\x5d\ +\x00\x00\x0d\x30\x00\x00\x00\x00\x00\x01\x00\x02\x33\x7c\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0d\xc0\x00\x00\x00\x00\x00\x01\x00\x02\x49\x67\ +\x00\x00\x0d\x46\x00\x00\x00\x00\x00\x01\x00\x02\x39\x86\ \x00\x00\x01\x9d\x48\x7c\x8b\xcb\ -\x00\x00\x0d\xd8\x00\x00\x00\x00\x00\x01\x00\x02\x4c\x59\ -\x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0d\xee\x00\x00\x00\x00\x00\x01\x00\x02\x52\x50\ +\x00\x00\x0d\x5e\x00\x00\x00\x00\x00\x01\x00\x02\x3c\x78\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\x02\x00\x00\x00\x00\x00\x01\x00\x02\x54\x61\ +\x00\x00\x0d\x72\x00\x00\x00\x00\x00\x01\x00\x02\x3e\x89\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\x1a\x00\x00\x00\x00\x00\x01\x00\x02\x58\x24\ +\x00\x00\x0d\x8a\x00\x00\x00\x00\x00\x01\x00\x02\x42\x4c\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\x40\x00\x00\x00\x00\x00\x01\x00\x02\x61\xd8\ -\x00\x00\x01\x9d\x48\x7c\x8b\xd4\ -\x00\x00\x0e\x5e\x00\x00\x00\x00\x00\x01\x00\x02\x67\xa0\ +\x00\x00\x0d\xa4\x00\x00\x00\x00\x00\x01\x00\x02\x47\x3c\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\x84\x00\x00\x00\x00\x00\x01\x00\x02\x6c\x41\ +\x00\x00\x0d\xba\x00\x00\x00\x00\x00\x01\x00\x02\x48\x20\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\x9a\x00\x00\x00\x00\x00\x01\x00\x02\x6d\x25\ +\x00\x00\x0d\xd0\x00\x00\x00\x00\x00\x01\x00\x02\x4e\x17\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\xb0\x00\x00\x00\x00\x00\x01\x00\x02\x73\xd5\ +\x00\x00\x0d\xe6\x00\x00\x00\x00\x00\x01\x00\x02\x54\xc7\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\xcc\x00\x00\x00\x00\x00\x01\x00\x02\x77\x19\ +\x00\x00\x0e\x02\x00\x00\x00\x00\x00\x01\x00\x02\x58\x0b\ +\x00\x00\x01\x9d\x48\x7c\x8b\xd4\ +\x00\x00\x0e\x16\x00\x00\x00\x00\x00\x01\x00\x02\x5d\xd3\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\xe4\x00\x00\x00\x00\x00\x01\x00\x02\x78\x45\ +\x00\x00\x0e\x2e\x00\x00\x00\x00\x00\x01\x00\x02\x5e\xff\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0e\xfe\x00\x00\x00\x00\x00\x01\x00\x02\x7e\x06\ +\x00\x00\x0e\x48\x00\x00\x00\x00\x00\x01\x00\x02\x64\xc0\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0f\x2c\x00\x00\x00\x00\x00\x01\x00\x02\x86\x72\ +\x00\x00\x0e\x76\x00\x00\x00\x00\x00\x01\x00\x02\x6d\x2c\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x0f\x50\x00\x00\x00\x00\x00\x01\x00\x02\x8e\x32\ +\x00\x00\x0e\x9a\x00\x00\x00\x00\x00\x01\x00\x02\x74\xec\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ " diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/LCD_settings.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/LCD_settings.svg deleted file mode 100644 index 58c5eb61..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/LCD_settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/acel.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/acel.svg deleted file mode 100644 index beb5584d..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/acel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/add filament.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/add_filament.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/add filament.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/add_filament.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/add spool.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/add_spool.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/add spool.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/add_spool.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/baby_step_icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/baby_step.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/baby_step_icon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/baby_step.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/chamber_temperature.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/chamber_temperature.svg deleted file mode 100644 index 474099b7..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/chamber_temperature.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/check gate 1.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/check_gate_1.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/check gate 1.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/check_gate_1.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/file_icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/file.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/file_icon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/file.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/file_error.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/file_error.svg deleted file mode 100644 index 49c803fb..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/file_error.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/folderIcon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/folder.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/folderIcon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/folder.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/folder_icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/folder_icon.svg deleted file mode 100644 index 324a3cbb..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/folder_icon.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/frequency_X.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/frequency_X.svg deleted file mode 100644 index f3ca0a9c..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/frequency_X.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/frequency_Y.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/frequency_Y.svg deleted file mode 100644 index f2693def..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/frequency_Y.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/garbage-icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/garbage.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/garbage-icon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/garbage.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/half_spoll.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/half_spool.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/half_spoll.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/half_spool.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/heatsoak_icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/heatsoak.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/heatsoak_icon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/heatsoak.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/LEDs.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/leds.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/LEDs.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/leds.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/material_topbar.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/material_topbar.svg deleted file mode 100644 index 14c56a01..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/material_topbar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/motion.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion.svg deleted file mode 100644 index 4f7187f5..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/motion.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi.svg deleted file mode 100644 index ceaff53d..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi_protected.svg deleted file mode 100644 index a10ea388..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/0bar_wifi_protected.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/1bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/1bar_wifi_protected.svg deleted file mode 100644 index 8793447e..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/1bar_wifi_protected.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/2bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/2bar_wifi_protected.svg deleted file mode 100644 index a9f3233b..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/2bar_wifi_protected.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/3bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/3bar_wifi_protected.svg deleted file mode 100644 index 458c1ac5..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/3bar_wifi_protected.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi.svg deleted file mode 100644 index 9aadd8e7..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi_protected.svg deleted file mode 100644 index 639762e7..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/network/4bar_wifi_protected.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/0bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_0bar.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/0bar_wifi.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_0bar.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/0bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_0bar_protected.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/0bar_wifi_protected.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_0bar_protected.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/1bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_1bar.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/network/1bar_wifi.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_1bar.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/1bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_1bar_protected.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/1bar_wifi_protected.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_1bar_protected.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/2bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_2bar.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/network/2bar_wifi.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_2bar.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/2bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_2bar_protected.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/2bar_wifi_protected.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_2bar_protected.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/network/3bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_3bar.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/network/3bar_wifi.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_3bar.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/3bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_3bar_protected.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/3bar_wifi_protected.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_3bar_protected.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/4bar_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_4bar.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/4bar_wifi.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_4bar.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/4bar_wifi_protected.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_4bar_protected.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/4bar_wifi_protected.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_4bar_protected.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/no_wifi.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/no_wifi.svg deleted file mode 100644 index ca9655a1..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/no_wifi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/retraction.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/retraction.svg deleted file mode 100644 index 390aeafd..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/retraction.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/sensors.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/sensors.svg deleted file mode 100644 index 9bf53d2b..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/sensors.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/base dados spool 1.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/spool_database_1.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/base dados spool 1.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/spool_database_1.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/standart_temperature.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/standard_temperature.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/standart_temperature.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/standard_temperature.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/update-software-icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/update_software.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/update-software-icon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/update_software.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/usb_icon.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/usb.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/usb_icon.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/usb.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_locked.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_locked.svg deleted file mode 100644 index 172e5ade..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_locked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_unlocked.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_unlocked.svg deleted file mode 100644 index 275e3efc..00000000 --- a/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_unlocked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/babystepping.svg b/BlocksScreen/lib/ui/resources/media/graphics/babystepping.svg deleted file mode 100644 index 9a70d0be..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/babystepping.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/back.svg b/BlocksScreen/lib/ui/resources/media/graphics/back.svg deleted file mode 100644 index b9318d4a..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/back.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/back_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/back_PRESSED.svg deleted file mode 100644 index 640e7fd6..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/back_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/back_folder.svg b/BlocksScreen/lib/ui/resources/media/graphics/back_folder.svg deleted file mode 100644 index a4de0c21..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/back_folder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/back_folder_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/back_folder_PRESSED.svg deleted file mode 100644 index 44de2656..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/back_folder_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/blue_bar.svg b/BlocksScreen/lib/ui/resources/media/graphics/blue_bar.svg deleted file mode 100644 index 0658fc8b..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/blue_bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/dryer_1.svg b/BlocksScreen/lib/ui/resources/media/graphics/dryer_1.svg deleted file mode 100644 index 89bc726b..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/dryer_1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/dryer_1_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/dryer_1_PRESSED.svg deleted file mode 100644 index fe560470..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/dryer_1_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/dryer_2.svg b/BlocksScreen/lib/ui/resources/media/graphics/dryer_2.svg deleted file mode 100644 index f8a3d1b7..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/dryer_2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/dryer_2_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/dryer_2_PRESSED.svg deleted file mode 100644 index 4b5e447a..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/dryer_2_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/extrude_manual.svg b/BlocksScreen/lib/ui/resources/media/graphics/extrude_manual.svg deleted file mode 100644 index 95f8de9c..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/extrude_manual.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/go_down.svg b/BlocksScreen/lib/ui/resources/media/graphics/go_down.svg deleted file mode 100644 index 85100341..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/go_down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/go_down_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/go_down_PRESSED.svg deleted file mode 100644 index 80d87a2f..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/go_down_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/go_up.svg b/BlocksScreen/lib/ui/resources/media/graphics/go_up.svg deleted file mode 100644 index 1e64fa87..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/go_up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/go_up_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/go_up_PRESSED.svg deleted file mode 100644 index fff93ee0..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/go_up_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/green_bar.svg b/BlocksScreen/lib/ui/resources/media/graphics/green_bar.svg deleted file mode 100644 index f274d7eb..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/green_bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/heated_chamber.svg b/BlocksScreen/lib/ui/resources/media/graphics/heated_chamber.svg deleted file mode 100644 index 6ec23bf8..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/heated_chamber.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/layer_countig.svg b/BlocksScreen/lib/ui/resources/media/graphics/layer_countig.svg deleted file mode 100644 index 58c50aa3..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/layer_countig.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/light_bar.svg b/BlocksScreen/lib/ui/resources/media/graphics/light_bar.svg deleted file mode 100644 index abfaa470..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/light_bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/light_scroll.svg b/BlocksScreen/lib/ui/resources/media/graphics/light_scroll.svg deleted file mode 100644 index da3d6736..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/light_scroll.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/plate_temperature.svg b/BlocksScreen/lib/ui/resources/media/graphics/plate_temperature.svg deleted file mode 100644 index 8ccbfd55..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/plate_temperature.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose.svg b/BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose.svg deleted file mode 100644 index 46ea804c..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose_PRESSED.svg deleted file mode 100644 index 973c234f..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/print_core2_choose_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose.svg b/BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose.svg deleted file mode 100644 index bfc127aa..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose_PRESSED.svg deleted file mode 100644 index 54ad58e8..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/printcore1_choose_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose.svg b/BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose.svg deleted file mode 100644 index f1fbbc74..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose_PRESSED.svg deleted file mode 100644 index 59baa1ed..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/printcore_1and2_choose_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/printecore1_operation.svg b/BlocksScreen/lib/ui/resources/media/graphics/printecore1_operation.svg deleted file mode 100644 index 3754e543..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/printecore1_operation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/printecore2_operation.svg b/BlocksScreen/lib/ui/resources/media/graphics/printecore2_operation.svg deleted file mode 100644 index f60ea1bf..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/printecore2_operation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/red_bar.svg b/BlocksScreen/lib/ui/resources/media/graphics/red_bar.svg deleted file mode 100644 index c08abd70..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/red_bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/scroll_btn.svg b/BlocksScreen/lib/ui/resources/media/graphics/scroll_btn.svg deleted file mode 100644 index ae8570b7..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/scroll_btn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/scroll_list_window.svg b/BlocksScreen/lib/ui/resources/media/graphics/scroll_list_window.svg deleted file mode 100644 index 4784c9dd..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/scroll_list_window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/speed_fan.svg b/BlocksScreen/lib/ui/resources/media/graphics/speed_fan.svg deleted file mode 100644 index f9ef104e..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/speed_fan.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/speed_manipulation.svg b/BlocksScreen/lib/ui/resources/media/graphics/speed_manipulation.svg deleted file mode 100644 index f817197f..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/speed_manipulation.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/system_shutdown.svg b/BlocksScreen/lib/ui/resources/media/graphics/system_shutdown.svg deleted file mode 100644 index 71d9663a..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/system_shutdown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/system_shutdown_PRESSED.svg b/BlocksScreen/lib/ui/resources/media/graphics/system_shutdown_PRESSED.svg deleted file mode 100644 index f674bcab..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/system_shutdown_PRESSED.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/time_to_finish.svg b/BlocksScreen/lib/ui/resources/media/graphics/time_to_finish.svg deleted file mode 100644 index 9d6255ec..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/time_to_finish.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/resources/media/graphics/vertical_scroll_bar.svg b/BlocksScreen/lib/ui/resources/media/graphics/vertical_scroll_bar.svg deleted file mode 100644 index cad0913a..00000000 --- a/BlocksScreen/lib/ui/resources/media/graphics/vertical_scroll_bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/BlocksScreen/lib/ui/utilitiesStackedWidget.ui b/BlocksScreen/lib/ui/utilitiesStackedWidget.ui index 3df1f8fc..522e4710 100644 --- a/BlocksScreen/lib/ui/utilitiesStackedWidget.ui +++ b/BlocksScreen/lib/ui/utilitiesStackedWidget.ui @@ -417,7 +417,7 @@ Shaper menu_btn - :/ui/media/btn_icons/LEDs.svg + :/ui/media/btn_icons/leds.svg diff --git a/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py b/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py index 2874603a..cec87dff 100644 --- a/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py +++ b/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py @@ -9,14 +9,18 @@ from PyQt6 import QtCore, QtGui, QtWidgets -class Ui_utilitiesStackedWidget(object): +class Ui_utilitiesStackedWidget: def setupUi(self, utilitiesStackedWidget): utilitiesStackedWidget.setObjectName("utilitiesStackedWidget") utilitiesStackedWidget.resize(710, 410) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(utilitiesStackedWidget.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + utilitiesStackedWidget.sizePolicy().hasHeightForWidth() + ) utilitiesStackedWidget.setSizePolicy(sizePolicy) utilitiesStackedWidget.setMinimumSize(QtCore.QSize(710, 410)) utilitiesStackedWidget.setMaximumSize(QtCore.QSize(710, 410)) @@ -27,10 +31,14 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_header_layout = QtWidgets.QHBoxLayout() self.utilities_header_layout.setObjectName("utilities_header_layout") self.utilities_title_label = QtWidgets.QLabel(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.utilities_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.utilities_title_label.sizePolicy().hasHeightForWidth() + ) self.utilities_title_label.setSizePolicy(sizePolicy) self.utilities_title_label.setMinimumSize(QtCore.QSize(0, 60)) self.utilities_title_label.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -39,7 +47,9 @@ def setupUi(self, utilitiesStackedWidget): font.setPointSize(24) font.setBold(True) self.utilities_title_label.setFont(font) - self.utilities_title_label.setStyleSheet("background: transparent; color: white;") + self.utilities_title_label.setStyleSheet( + "background: transparent; color: white;" + ) self.utilities_title_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.utilities_title_label.setObjectName("utilities_title_label") self.utilities_header_layout.addWidget(self.utilities_title_label) @@ -47,10 +57,15 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_content_layout = QtWidgets.QGridLayout() self.utilities_content_layout.setObjectName("utilities_content_layout") self.utilities_axes_btn = BlocksCustomButton(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.utilities_axes_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.utilities_axes_btn.sizePolicy().hasHeightForWidth() + ) self.utilities_axes_btn.setSizePolicy(sizePolicy) self.utilities_axes_btn.setMinimumSize(QtCore.QSize(250, 80)) self.utilities_axes_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -62,16 +77,26 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_axes_btn.setFont(font) self.utilities_axes_btn.setMouseTracking(False) self.utilities_axes_btn.setTabletTracking(True) - self.utilities_axes_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.utilities_axes_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.utilities_axes_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.utilities_axes_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.utilities_axes_btn.setStyleSheet("") self.utilities_axes_btn.setAutoDefault(False) self.utilities_axes_btn.setFlat(True) - self.utilities_axes_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg")) + self.utilities_axes_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + ) self.utilities_axes_btn.setObjectName("utilities_axes_btn") self.utilities_content_layout.addWidget(self.utilities_axes_btn, 1, 1, 1, 1) self.update_btn = BlocksCustomButton(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.update_btn.sizePolicy().hasHeightForWidth()) @@ -86,11 +111,18 @@ def setupUi(self, utilitiesStackedWidget): self.update_btn.setFlat(True) self.update_btn.setObjectName("update_btn") self.utilities_content_layout.addWidget(self.update_btn, 2, 0, 1, 1) - self.utilities_routine_check_btn = BlocksCustomButton(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + self.utilities_routine_check_btn = BlocksCustomButton( + parent=self.utilities_page + ) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.utilities_routine_check_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.utilities_routine_check_btn.sizePolicy().hasHeightForWidth() + ) self.utilities_routine_check_btn.setSizePolicy(sizePolicy) self.utilities_routine_check_btn.setMinimumSize(QtCore.QSize(250, 80)) self.utilities_routine_check_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -102,19 +134,32 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_routine_check_btn.setFont(font) self.utilities_routine_check_btn.setMouseTracking(False) self.utilities_routine_check_btn.setTabletTracking(True) - self.utilities_routine_check_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.utilities_routine_check_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.utilities_routine_check_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.utilities_routine_check_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.utilities_routine_check_btn.setStyleSheet("") self.utilities_routine_check_btn.setAutoDefault(False) self.utilities_routine_check_btn.setFlat(True) - self.utilities_routine_check_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/routine.svg")) + self.utilities_routine_check_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/routine.svg") + ) self.utilities_routine_check_btn.setObjectName("utilities_routine_check_btn") - self.utilities_content_layout.addWidget(self.utilities_routine_check_btn, 1, 0, 1, 1) + self.utilities_content_layout.addWidget( + self.utilities_routine_check_btn, 1, 0, 1, 1 + ) self.utilities_input_shaper_btn = BlocksCustomButton(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.utilities_input_shaper_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.utilities_input_shaper_btn.sizePolicy().hasHeightForWidth() + ) self.utilities_input_shaper_btn.setSizePolicy(sizePolicy) self.utilities_input_shaper_btn.setMinimumSize(QtCore.QSize(250, 80)) self.utilities_input_shaper_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -126,19 +171,33 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_input_shaper_btn.setFont(font) self.utilities_input_shaper_btn.setMouseTracking(False) self.utilities_input_shaper_btn.setTabletTracking(True) - self.utilities_input_shaper_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.utilities_input_shaper_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.utilities_input_shaper_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.utilities_input_shaper_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.utilities_input_shaper_btn.setStyleSheet("") self.utilities_input_shaper_btn.setAutoDefault(False) self.utilities_input_shaper_btn.setFlat(True) - self.utilities_input_shaper_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/input_shaper/media/btn_icons/input_shaper.svg")) + self.utilities_input_shaper_btn.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/input_shaper/media/btn_icons/input_shaper.svg"), + ) self.utilities_input_shaper_btn.setObjectName("utilities_input_shaper_btn") - self.utilities_content_layout.addWidget(self.utilities_input_shaper_btn, 2, 1, 1, 1) + self.utilities_content_layout.addWidget( + self.utilities_input_shaper_btn, 2, 1, 1, 1 + ) self.utilities_info_btn = BlocksCustomButton(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.utilities_info_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.utilities_info_btn.sizePolicy().hasHeightForWidth() + ) self.utilities_info_btn.setSizePolicy(sizePolicy) self.utilities_info_btn.setMinimumSize(QtCore.QSize(250, 80)) self.utilities_info_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -150,19 +209,30 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_info_btn.setFont(font) self.utilities_info_btn.setMouseTracking(False) self.utilities_info_btn.setTabletTracking(True) - self.utilities_info_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.utilities_info_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.utilities_info_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.utilities_info_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.utilities_info_btn.setStyleSheet("") self.utilities_info_btn.setAutoDefault(False) self.utilities_info_btn.setFlat(True) - self.utilities_info_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/info.svg")) + self.utilities_info_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/info.svg") + ) self.utilities_info_btn.setObjectName("utilities_info_btn") self.utilities_content_layout.addWidget(self.utilities_info_btn, 0, 0, 1, 1) self.utilities_leds_btn = BlocksCustomButton(parent=self.utilities_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.utilities_leds_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.utilities_leds_btn.sizePolicy().hasHeightForWidth() + ) self.utilities_leds_btn.setSizePolicy(sizePolicy) self.utilities_leds_btn.setMinimumSize(QtCore.QSize(250, 80)) self.utilities_leds_btn.setMaximumSize(QtCore.QSize(250, 80)) @@ -174,12 +244,18 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_leds_btn.setFont(font) self.utilities_leds_btn.setMouseTracking(False) self.utilities_leds_btn.setTabletTracking(True) - self.utilities_leds_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.utilities_leds_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.utilities_leds_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.utilities_leds_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.utilities_leds_btn.setStyleSheet("") self.utilities_leds_btn.setAutoDefault(False) self.utilities_leds_btn.setFlat(True) - self.utilities_leds_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/LEDs.svg")) + self.utilities_leds_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/leds.svg") + ) self.utilities_leds_btn.setObjectName("utilities_leds_btn") self.utilities_content_layout.addWidget(self.utilities_leds_btn, 0, 1, 1, 1) self.verticalLayout.addLayout(self.utilities_content_layout) @@ -188,17 +264,31 @@ def setupUi(self, utilitiesStackedWidget): self.info_page.setObjectName("info_page") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.info_page) self.verticalLayout_2.setObjectName("verticalLayout_2") - spacerItem = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_2.addItem(spacerItem) self.info_header_layout = QtWidgets.QHBoxLayout() self.info_header_layout.setObjectName("info_header_layout") - spacerItem1 = QtWidgets.QSpacerItem(60, 60, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem1 = QtWidgets.QSpacerItem( + 60, + 60, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.info_header_layout.addItem(spacerItem1) self.info_title_label = QtWidgets.QLabel(parent=self.info_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.info_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.info_title_label.sizePolicy().hasHeightForWidth() + ) self.info_title_label.setSizePolicy(sizePolicy) self.info_title_label.setMaximumSize(QtCore.QSize(16777215, 60)) font = QtGui.QFont() @@ -210,10 +300,15 @@ def setupUi(self, utilitiesStackedWidget): self.info_title_label.setObjectName("info_title_label") self.info_header_layout.addWidget(self.info_title_label) self.info_back_btn = IconButton(parent=self.info_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.info_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.info_back_btn.sizePolicy().hasHeightForWidth() + ) self.info_back_btn.setSizePolicy(sizePolicy) self.info_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.info_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -225,12 +320,16 @@ def setupUi(self, utilitiesStackedWidget): self.info_back_btn.setFont(font) self.info_back_btn.setMouseTracking(False) self.info_back_btn.setTabletTracking(True) - self.info_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.info_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.info_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.info_back_btn.setStyleSheet("") self.info_back_btn.setAutoDefault(False) self.info_back_btn.setFlat(True) - self.info_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.info_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.info_back_btn.setObjectName("info_back_btn") self.info_header_layout.addWidget(self.info_back_btn) self.verticalLayout_2.addLayout(self.info_header_layout) @@ -244,7 +343,10 @@ def setupUi(self, utilitiesStackedWidget): self.frame.setObjectName("frame") self.kv_label = QtWidgets.QLabel(parent=self.frame) self.kv_label.setGeometry(QtCore.QRect(0, 10, 351, 81)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Preferred, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.kv_label.sizePolicy().hasHeightForWidth()) @@ -257,7 +359,10 @@ def setupUi(self, utilitiesStackedWidget): self.kv_label.setObjectName("kv_label") self.smth_label = QtWidgets.QLabel(parent=self.frame) self.smth_label.setGeometry(QtCore.QRect(0, 110, 351, 81)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Preferred, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.smth_label.sizePolicy().hasHeightForWidth()) @@ -269,24 +374,40 @@ def setupUi(self, utilitiesStackedWidget): self.smth_label.setStyleSheet("color:white") self.smth_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.smth_label.setObjectName("smth_label") - self.info_content_layout.addWidget(self.frame, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.info_content_layout.addWidget( + self.frame, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.verticalLayout_2.addLayout(self.info_content_layout) utilitiesStackedWidget.addWidget(self.info_page) self.leds_page = QtWidgets.QWidget() self.leds_page.setObjectName("leds_page") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.leds_page) self.verticalLayout_4.setObjectName("verticalLayout_4") - spacerItem2 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem2 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_4.addItem(spacerItem2) self.leds_header_layout = QtWidgets.QHBoxLayout() self.leds_header_layout.setObjectName("leds_header_layout") - spacerItem3 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem3 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.leds_header_layout.addItem(spacerItem3) self.leds_title_label = QtWidgets.QLabel(parent=self.leds_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.leds_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.leds_title_label.sizePolicy().hasHeightForWidth() + ) self.leds_title_label.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily("Momcake") @@ -297,10 +418,15 @@ def setupUi(self, utilitiesStackedWidget): self.leds_title_label.setObjectName("leds_title_label") self.leds_header_layout.addWidget(self.leds_title_label) self.leds_back_btn = IconButton(parent=self.leds_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.leds_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.leds_back_btn.sizePolicy().hasHeightForWidth() + ) self.leds_back_btn.setSizePolicy(sizePolicy) self.leds_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.leds_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -312,16 +438,25 @@ def setupUi(self, utilitiesStackedWidget): self.leds_back_btn.setFont(font) self.leds_back_btn.setMouseTracking(False) self.leds_back_btn.setTabletTracking(True) - self.leds_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.leds_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.leds_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.leds_back_btn.setStyleSheet("") self.leds_back_btn.setAutoDefault(False) self.leds_back_btn.setFlat(True) - self.leds_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.leds_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.leds_back_btn.setObjectName("leds_back_btn") self.leds_header_layout.addWidget(self.leds_back_btn) self.verticalLayout_4.addLayout(self.leds_header_layout) - spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + spacerItem4 = QtWidgets.QSpacerItem( + 20, + 40, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Expanding, + ) self.verticalLayout_4.addItem(spacerItem4) self.verticalScrollBar = QtWidgets.QScrollBar(parent=self.leds_page) self.verticalScrollBar.setOrientation(QtCore.Qt.Orientation.Vertical) @@ -333,25 +468,46 @@ def setupUi(self, utilitiesStackedWidget): self.leds_widget.setObjectName("leds_widget") self.leds_content_layout.addWidget(self.leds_widget, 0, 0, 1, 1) self.verticalLayout_4.addLayout(self.leds_content_layout) - spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + spacerItem5 = QtWidgets.QSpacerItem( + 20, + 40, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Expanding, + ) self.verticalLayout_4.addItem(spacerItem5) utilitiesStackedWidget.addWidget(self.leds_page) self.routines_page = QtWidgets.QWidget() self.routines_page.setObjectName("routines_page") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.routines_page) self.verticalLayout_5.setObjectName("verticalLayout_5") - spacerItem6 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem6 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_5.addItem(spacerItem6) self.routines_header_layout = QtWidgets.QHBoxLayout() - self.routines_header_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinimumSize) + self.routines_header_layout.setSizeConstraint( + QtWidgets.QLayout.SizeConstraint.SetMinimumSize + ) self.routines_header_layout.setObjectName("routines_header_layout") - spacerItem7 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem7 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.routines_header_layout.addItem(spacerItem7) self.routines_page_title = QtWidgets.QLabel(parent=self.routines_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.routines_page_title.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.routines_page_title.sizePolicy().hasHeightForWidth() + ) self.routines_page_title.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily("Momcake") @@ -362,10 +518,14 @@ def setupUi(self, utilitiesStackedWidget): self.routines_page_title.setObjectName("routines_page_title") self.routines_header_layout.addWidget(self.routines_page_title) self.routine_check_back_btn = IconButton(parent=self.routines_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.routine_check_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.routine_check_back_btn.sizePolicy().hasHeightForWidth() + ) self.routine_check_back_btn.setSizePolicy(sizePolicy) self.routine_check_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.routine_check_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -377,22 +537,36 @@ def setupUi(self, utilitiesStackedWidget): self.routine_check_back_btn.setFont(font) self.routine_check_back_btn.setMouseTracking(False) self.routine_check_back_btn.setTabletTracking(True) - self.routine_check_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.routine_check_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.routine_check_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.routine_check_back_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.routine_check_back_btn.setStyleSheet("") self.routine_check_back_btn.setAutoDefault(False) self.routine_check_back_btn.setFlat(True) - self.routine_check_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.routine_check_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.routine_check_back_btn.setObjectName("routine_check_back_btn") self.routines_header_layout.addWidget(self.routine_check_back_btn) self.verticalLayout_5.addLayout(self.routines_header_layout) - spacerItem8 = QtWidgets.QSpacerItem(20, 60, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem8 = QtWidgets.QSpacerItem( + 20, + 60, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_5.addItem(spacerItem8) self.routines_content_layout = QtWidgets.QGridLayout() self.routines_content_layout.setVerticalSpacing(20) self.routines_content_layout.setObjectName("routines_content_layout") self.rc_bheat = BlocksCustomButton(parent=self.routines_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_bheat.sizePolicy().hasHeightForWidth()) @@ -412,11 +586,19 @@ def setupUi(self, utilitiesStackedWidget): self.rc_bheat.setStyleSheet("") self.rc_bheat.setAutoDefault(False) self.rc_bheat.setFlat(True) - self.rc_bheat.setProperty("icon_pixmap", QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_plate.svg")) + self.rc_bheat.setProperty( + "icon_pixmap", + QtGui.QPixmap( + ":/temperature_related/media/btn_icons/temperature_plate.svg" + ), + ) self.rc_bheat.setObjectName("rc_bheat") self.routines_content_layout.addWidget(self.rc_bheat, 0, 1, 1, 1) self.rc_fans = BlocksCustomButton(parent=self.routines_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_fans.sizePolicy().hasHeightForWidth()) @@ -436,11 +618,16 @@ def setupUi(self, utilitiesStackedWidget): self.rc_fans.setStyleSheet("") self.rc_fans.setAutoDefault(False) self.rc_fans.setFlat(True) - self.rc_fans.setProperty("icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan_cage.svg")) + self.rc_fans.setProperty( + "icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan_cage.svg") + ) self.rc_fans.setObjectName("rc_fans") self.routines_content_layout.addWidget(self.rc_fans, 0, 0, 1, 1) self.rc_axis = BlocksCustomButton(parent=self.routines_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_axis.sizePolicy().hasHeightForWidth()) @@ -460,11 +647,17 @@ def setupUi(self, utilitiesStackedWidget): self.rc_axis.setStyleSheet("") self.rc_axis.setAutoDefault(False) self.rc_axis.setFlat(True) - self.rc_axis.setProperty("icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg")) + self.rc_axis.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + ) self.rc_axis.setObjectName("rc_axis") self.routines_content_layout.addWidget(self.rc_axis, 1, 1, 1, 1) self.rc_ext = BlocksCustomButton(parent=self.routines_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_ext.sizePolicy().hasHeightForWidth()) @@ -484,23 +677,38 @@ def setupUi(self, utilitiesStackedWidget): self.rc_ext.setStyleSheet("") self.rc_ext.setAutoDefault(False) self.rc_ext.setFlat(True) - self.rc_ext.setProperty("icon_pixmap", QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg")) + self.rc_ext.setProperty( + "icon_pixmap", + QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg"), + ) self.rc_ext.setObjectName("rc_ext") self.routines_content_layout.addWidget(self.rc_ext, 1, 0, 1, 1) self.verticalLayout_5.addLayout(self.routines_content_layout) - spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + spacerItem9 = QtWidgets.QSpacerItem( + 20, + 40, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Expanding, + ) self.verticalLayout_5.addItem(spacerItem9) utilitiesStackedWidget.addWidget(self.routines_page) self.rc_page = QtWidgets.QWidget() self.rc_page.setObjectName("rc_page") self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.rc_page) self.verticalLayout_6.setObjectName("verticalLayout_6") - spacerItem10 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem10 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_6.addItem(spacerItem10) self.rc_header_layout = QtWidgets.QHBoxLayout() self.rc_header_layout.setObjectName("rc_header_layout") self.rc_tittle = QtWidgets.QLabel(parent=self.rc_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_tittle.sizePolicy().hasHeightForWidth()) @@ -519,7 +727,10 @@ def setupUi(self, utilitiesStackedWidget): self.rc_content_layout.setVerticalSpacing(0) self.rc_content_layout.setObjectName("rc_content_layout") self.rc_label = QtWidgets.QLabel(parent=self.rc_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Preferred, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_label.sizePolicy().hasHeightForWidth()) @@ -534,7 +745,9 @@ def setupUi(self, utilitiesStackedWidget): self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.rc_yes = BlocksCustomButton(parent=self.rc_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_yes.sizePolicy().hasHeightForWidth()) @@ -554,13 +767,22 @@ def setupUi(self, utilitiesStackedWidget): self.rc_yes.setStyleSheet("") self.rc_yes.setAutoDefault(False) self.rc_yes.setFlat(True) - self.rc_yes.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")) + self.rc_yes.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + ) self.rc_yes.setObjectName("rc_yes") self.horizontalLayout_3.addWidget(self.rc_yes) - spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem11 = QtWidgets.QSpacerItem( + 40, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.horizontalLayout_3.addItem(spacerItem11) self.rc_no = BlocksCustomButton(parent=self.rc_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rc_no.sizePolicy().hasHeightForWidth()) @@ -580,7 +802,9 @@ def setupUi(self, utilitiesStackedWidget): self.rc_no.setStyleSheet("") self.rc_no.setAutoDefault(False) self.rc_no.setFlat(True) - self.rc_no.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg")) + self.rc_no.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg") + ) self.rc_no.setObjectName("rc_no") self.horizontalLayout_3.addWidget(self.rc_no) self.rc_content_layout.addLayout(self.horizontalLayout_3, 1, 0, 1, 1) @@ -590,32 +814,53 @@ def setupUi(self, utilitiesStackedWidget): self.axes_page.setObjectName("axes_page") self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.axes_page) self.verticalLayout_7.setObjectName("verticalLayout_7") - spacerItem12 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem12 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_7.addItem(spacerItem12) self.lcd_settings_header_layout = QtWidgets.QHBoxLayout() self.lcd_settings_header_layout.setObjectName("lcd_settings_header_layout") - spacerItem13 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem13 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.lcd_settings_header_layout.addItem(spacerItem13) self.lcd_settings_title_label = QtWidgets.QLabel(parent=self.axes_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.lcd_settings_title_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.lcd_settings_title_label.sizePolicy().hasHeightForWidth() + ) self.lcd_settings_title_label.setSizePolicy(sizePolicy) self.lcd_settings_title_label.setMaximumSize(QtCore.QSize(16777215, 60)) font = QtGui.QFont() font.setFamily("Momcake") font.setPointSize(24) self.lcd_settings_title_label.setFont(font) - self.lcd_settings_title_label.setStyleSheet("background: transparent; color: white;") + self.lcd_settings_title_label.setStyleSheet( + "background: transparent; color: white;" + ) self.lcd_settings_title_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.lcd_settings_title_label.setObjectName("lcd_settings_title_label") self.lcd_settings_header_layout.addWidget(self.lcd_settings_title_label) self.axes_back_btn = IconButton(parent=self.axes_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.Minimum, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.axes_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.axes_back_btn.sizePolicy().hasHeightForWidth() + ) self.axes_back_btn.setSizePolicy(sizePolicy) self.axes_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.axes_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -627,17 +872,24 @@ def setupUi(self, utilitiesStackedWidget): self.axes_back_btn.setFont(font) self.axes_back_btn.setMouseTracking(False) self.axes_back_btn.setTabletTracking(True) - self.axes_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.axes_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.axes_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.axes_back_btn.setStyleSheet("") self.axes_back_btn.setAutoDefault(False) self.axes_back_btn.setFlat(True) - self.axes_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.axes_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.axes_back_btn.setObjectName("axes_back_btn") self.lcd_settings_header_layout.addWidget(self.axes_back_btn) self.verticalLayout_7.addLayout(self.lcd_settings_header_layout) self.frame_2 = BlocksCustomFrame(parent=self.axes_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) @@ -654,31 +906,57 @@ def setupUi(self, utilitiesStackedWidget): palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.am_y.setPalette(palette) font = QtGui.QFont() font.setPointSize(20) @@ -693,7 +971,9 @@ def setupUi(self, utilitiesStackedWidget): self.axis_maintenance_gb.addButton(self.am_y) self.gridLayout.addWidget(self.am_y, 1, 0, 1, 1) self.am_execute = BlocksCustomButton(parent=self.frame_2) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.am_execute.sizePolicy().hasHeightForWidth()) @@ -713,7 +993,9 @@ def setupUi(self, utilitiesStackedWidget): self.am_execute.setStyleSheet("") self.am_execute.setAutoDefault(False) self.am_execute.setFlat(True) - self.am_execute.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")) + self.am_execute.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + ) self.am_execute.setObjectName("am_execute") self.gridLayout.addWidget(self.am_execute, 2, 1, 1, 1) self.am_z = BlocksCustomCheckButton(parent=self.frame_2) @@ -722,31 +1004,57 @@ def setupUi(self, utilitiesStackedWidget): palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.am_z.setPalette(palette) font = QtGui.QFont() font.setPointSize(20) @@ -764,31 +1072,57 @@ def setupUi(self, utilitiesStackedWidget): palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.ButtonText, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Inactive, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Inactive, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.WindowText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.WindowText, + brush, + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.Text, brush + ) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern) - palette.setBrush(QtGui.QPalette.ColorGroup.Disabled, QtGui.QPalette.ColorRole.ButtonText, brush) + palette.setBrush( + QtGui.QPalette.ColorGroup.Disabled, + QtGui.QPalette.ColorRole.ButtonText, + brush, + ) self.am_x.setPalette(palette) font = QtGui.QFont() font.setPointSize(20) @@ -800,20 +1134,34 @@ def setupUi(self, utilitiesStackedWidget): self.am_x.setObjectName("am_x") self.axis_maintenance_gb.addButton(self.am_x) self.gridLayout.addWidget(self.am_x, 0, 0, 1, 1) - self.verticalLayout_7.addWidget(self.frame_2, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.verticalLayout_7.addWidget( + self.frame_2, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) utilitiesStackedWidget.addWidget(self.axes_page) self.input_shaper_page = QtWidgets.QWidget() self.input_shaper_page.setObjectName("input_shaper_page") self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.input_shaper_page) self.verticalLayout_13.setObjectName("verticalLayout_13") - spacerItem14 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem14 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_13.addItem(spacerItem14) self.is_header_layout = QtWidgets.QHBoxLayout() self.is_header_layout.setObjectName("is_header_layout") - spacerItem15 = QtWidgets.QSpacerItem(60, 0, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem15 = QtWidgets.QSpacerItem( + 60, + 0, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.is_header_layout.addItem(spacerItem15) self.label_2 = QtWidgets.QLabel(parent=self.input_shaper_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) @@ -828,10 +1176,15 @@ def setupUi(self, utilitiesStackedWidget): self.label_2.setObjectName("label_2") self.is_header_layout.addWidget(self.label_2) self.input_shaper_back_btn = IconButton(parent=self.input_shaper_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.input_shaper_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.input_shaper_back_btn.sizePolicy().hasHeightForWidth() + ) self.input_shaper_back_btn.setSizePolicy(sizePolicy) self.input_shaper_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.input_shaper_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -843,12 +1196,18 @@ def setupUi(self, utilitiesStackedWidget): self.input_shaper_back_btn.setFont(font) self.input_shaper_back_btn.setMouseTracking(False) self.input_shaper_back_btn.setTabletTracking(True) - self.input_shaper_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.input_shaper_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.input_shaper_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.input_shaper_back_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.input_shaper_back_btn.setStyleSheet("") self.input_shaper_back_btn.setAutoDefault(False) self.input_shaper_back_btn.setFlat(True) - self.input_shaper_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.input_shaper_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.input_shaper_back_btn.setObjectName("input_shaper_back_btn") self.is_header_layout.addWidget(self.input_shaper_back_btn) self.verticalLayout_13.addLayout(self.is_header_layout) @@ -863,7 +1222,10 @@ def setupUi(self, utilitiesStackedWidget): self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.label_3 = QtWidgets.QLabel(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Preferred, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) @@ -876,12 +1238,19 @@ def setupUi(self, utilitiesStackedWidget): self.label_3.setStyleSheet("color:white") self.label_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.label_3.setObjectName("label_3") - self.horizontalLayout_4.addWidget(self.label_3, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter) + self.horizontalLayout_4.addWidget( + self.label_3, + 0, + QtCore.Qt.AlignmentFlag.AlignHCenter | QtCore.Qt.AlignmentFlag.AlignVCenter, + ) self.verticalLayout_3.addLayout(self.horizontalLayout_4) self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setObjectName("gridLayout_3") self.am_mzv_2 = BlocksCustomCheckButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.am_mzv_2.sizePolicy().hasHeightForWidth()) @@ -905,7 +1274,10 @@ def setupUi(self, utilitiesStackedWidget): self.am_mzv_2.setObjectName("am_mzv_2") self.gridLayout_3.addWidget(self.am_mzv_2, 0, 1, 1, 1) self.am_ei_2 = BlocksCustomCheckButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.am_ei_2.sizePolicy().hasHeightForWidth()) @@ -929,10 +1301,15 @@ def setupUi(self, utilitiesStackedWidget): self.am_ei_2.setObjectName("am_ei_2") self.gridLayout_3.addWidget(self.am_ei_2, 1, 0, 1, 1) self.am_3hump_ei_2 = BlocksCustomCheckButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.am_3hump_ei_2.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.am_3hump_ei_2.sizePolicy().hasHeightForWidth() + ) self.am_3hump_ei_2.setSizePolicy(sizePolicy) self.am_3hump_ei_2.setMinimumSize(QtCore.QSize(250, 80)) self.am_3hump_ei_2.setMaximumSize(QtCore.QSize(250, 80)) @@ -944,16 +1321,23 @@ def setupUi(self, utilitiesStackedWidget): self.am_3hump_ei_2.setFont(font) self.am_3hump_ei_2.setMouseTracking(False) self.am_3hump_ei_2.setTabletTracking(True) - self.am_3hump_ei_2.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.am_3hump_ei_2.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.am_3hump_ei_2.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.am_3hump_ei_2.setStyleSheet("") self.am_3hump_ei_2.setCheckable(True) self.am_3hump_ei_2.setAutoDefault(False) self.am_3hump_ei_2.setFlat(True) self.am_3hump_ei_2.setObjectName("am_3hump_ei_2") - self.gridLayout_3.addWidget(self.am_3hump_ei_2, 2, 0, 1, 2, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.gridLayout_3.addWidget( + self.am_3hump_ei_2, 2, 0, 1, 2, QtCore.Qt.AlignmentFlag.AlignHCenter + ) self.am_zv_2 = BlocksCustomCheckButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.am_zv_2.sizePolicy().hasHeightForWidth()) @@ -977,10 +1361,15 @@ def setupUi(self, utilitiesStackedWidget): self.am_zv_2.setObjectName("am_zv_2") self.gridLayout_3.addWidget(self.am_zv_2, 0, 0, 1, 1) self.am_2hump_ei_2 = BlocksCustomCheckButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.am_2hump_ei_2.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.am_2hump_ei_2.sizePolicy().hasHeightForWidth() + ) self.am_2hump_ei_2.setSizePolicy(sizePolicy) self.am_2hump_ei_2.setMinimumSize(QtCore.QSize(250, 80)) self.am_2hump_ei_2.setMaximumSize(QtCore.QSize(250, 80)) @@ -992,7 +1381,9 @@ def setupUi(self, utilitiesStackedWidget): self.am_2hump_ei_2.setFont(font) self.am_2hump_ei_2.setMouseTracking(False) self.am_2hump_ei_2.setTabletTracking(True) - self.am_2hump_ei_2.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) + self.am_2hump_ei_2.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) self.am_2hump_ei_2.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) self.am_2hump_ei_2.setStyleSheet("") self.am_2hump_ei_2.setCheckable(True) @@ -1004,7 +1395,10 @@ def setupUi(self, utilitiesStackedWidget): self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.am_cancel = BlocksCustomButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.am_cancel.sizePolicy().hasHeightForWidth()) @@ -1024,11 +1418,16 @@ def setupUi(self, utilitiesStackedWidget): self.am_cancel.setStyleSheet("") self.am_cancel.setAutoDefault(False) self.am_cancel.setFlat(True) - self.am_cancel.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg")) + self.am_cancel.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg") + ) self.am_cancel.setObjectName("am_cancel") self.horizontalLayout.addWidget(self.am_cancel) self.am_confirm = BlocksCustomButton(parent=self.manual_is_res_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.am_confirm.sizePolicy().hasHeightForWidth()) @@ -1048,7 +1447,9 @@ def setupUi(self, utilitiesStackedWidget): self.am_confirm.setStyleSheet("") self.am_confirm.setAutoDefault(False) self.am_confirm.setFlat(True) - self.am_confirm.setProperty("icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")) + self.am_confirm.setProperty( + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + ) self.am_confirm.setObjectName("am_confirm") self.horizontalLayout.addWidget(self.am_confirm) self.verticalLayout_3.addLayout(self.horizontalLayout) @@ -1057,12 +1458,20 @@ def setupUi(self, utilitiesStackedWidget): self.user_input_page.setObjectName("user_input_page") self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.user_input_page) self.verticalLayout_9.setObjectName("verticalLayout_9") - spacerItem16 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem16 = QtWidgets.QSpacerItem( + 20, + 24, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.verticalLayout_9.addItem(spacerItem16) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.label_8 = QtWidgets.QLabel(parent=self.user_input_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Preferred, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_8.sizePolicy().hasHeightForWidth()) @@ -1075,7 +1484,10 @@ def setupUi(self, utilitiesStackedWidget): self.verticalLayout_10 = QtWidgets.QVBoxLayout() self.verticalLayout_10.setObjectName("verticalLayout_10") self.frame_4 = QtWidgets.QFrame(parent=self.user_input_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Expanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) @@ -1117,13 +1529,23 @@ def setupUi(self, utilitiesStackedWidget): self.leds_slider_header_layout = QtWidgets.QHBoxLayout(self.layoutWidget) self.leds_slider_header_layout.setContentsMargins(0, 0, 0, 0) self.leds_slider_header_layout.setObjectName("leds_slider_header_layout") - spacerItem17 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + spacerItem17 = QtWidgets.QSpacerItem( + 60, + 20, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) self.leds_slider_header_layout.addItem(spacerItem17) self.leds_slider_tittle_label = QtWidgets.QLabel(parent=self.layoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Preferred, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.leds_slider_tittle_label.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.leds_slider_tittle_label.sizePolicy().hasHeightForWidth() + ) self.leds_slider_tittle_label.setSizePolicy(sizePolicy) self.leds_slider_tittle_label.setMinimumSize(QtCore.QSize(0, 60)) self.leds_slider_tittle_label.setMaximumSize(QtCore.QSize(16777215, 60)) @@ -1131,15 +1553,22 @@ def setupUi(self, utilitiesStackedWidget): font.setFamily("Momcake") font.setPointSize(24) self.leds_slider_tittle_label.setFont(font) - self.leds_slider_tittle_label.setStyleSheet("background: transparent; color: white;") + self.leds_slider_tittle_label.setStyleSheet( + "background: transparent; color: white;" + ) self.leds_slider_tittle_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.leds_slider_tittle_label.setObjectName("leds_slider_tittle_label") self.leds_slider_header_layout.addWidget(self.leds_slider_tittle_label) self.leds_slider_back_btn = IconButton(parent=self.layoutWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + QtWidgets.QSizePolicy.Policy.MinimumExpanding, + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.leds_slider_back_btn.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.leds_slider_back_btn.sizePolicy().hasHeightForWidth() + ) self.leds_slider_back_btn.setSizePolicy(sizePolicy) self.leds_slider_back_btn.setMinimumSize(QtCore.QSize(60, 60)) self.leds_slider_back_btn.setMaximumSize(QtCore.QSize(60, 60)) @@ -1151,12 +1580,18 @@ def setupUi(self, utilitiesStackedWidget): self.leds_slider_back_btn.setFont(font) self.leds_slider_back_btn.setMouseTracking(False) self.leds_slider_back_btn.setTabletTracking(True) - self.leds_slider_back_btn.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu) - self.leds_slider_back_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) + self.leds_slider_back_btn.setContextMenuPolicy( + QtCore.Qt.ContextMenuPolicy.NoContextMenu + ) + self.leds_slider_back_btn.setLayoutDirection( + QtCore.Qt.LayoutDirection.LeftToRight + ) self.leds_slider_back_btn.setStyleSheet("") self.leds_slider_back_btn.setAutoDefault(False) self.leds_slider_back_btn.setFlat(True) - self.leds_slider_back_btn.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")) + self.leds_slider_back_btn.setProperty( + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + ) self.leds_slider_back_btn.setObjectName("leds_slider_back_btn") self.leds_slider_header_layout.addWidget(self.leds_slider_back_btn) self.layoutWidget1 = QtWidgets.QWidget(parent=self.leds_slider_page) @@ -1166,10 +1601,14 @@ def setupUi(self, utilitiesStackedWidget): self.verticalLayout_12.setContentsMargins(0, 0, 0, 0) self.verticalLayout_12.setObjectName("verticalLayout_12") self.leds_w_slider = BlocksSlider(parent=self.layoutWidget1) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding + ) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.leds_w_slider.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.leds_w_slider.sizePolicy().hasHeightForWidth() + ) self.leds_w_slider.setSizePolicy(sizePolicy) self.leds_w_slider.setMinimumSize(QtCore.QSize(600, 90)) self.leds_w_slider.setMaximumSize(QtCore.QSize(600, 90)) @@ -1177,7 +1616,9 @@ def setupUi(self, utilitiesStackedWidget): self.leds_w_slider.setProperty("value", 100) self.leds_w_slider.setOrientation(QtCore.Qt.Orientation.Horizontal) self.leds_w_slider.setObjectName("leds_w_slider") - self.verticalLayout_12.addWidget(self.leds_w_slider, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) + self.verticalLayout_12.addWidget( + self.leds_w_slider, 0, QtCore.Qt.AlignmentFlag.AlignHCenter + ) utilitiesStackedWidget.addWidget(self.leds_slider_page) self.retranslateUi(utilitiesStackedWidget) @@ -1186,94 +1627,195 @@ def setupUi(self, utilitiesStackedWidget): def retranslateUi(self, utilitiesStackedWidget): _translate = QtCore.QCoreApplication.translate - utilitiesStackedWidget.setWindowTitle(_translate("utilitiesStackedWidget", "StackedWidget")) - self.utilities_title_label.setText(_translate("utilitiesStackedWidget", "Utilities")) - self.utilities_title_label.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) - self.utilities_axes_btn.setText(_translate("utilitiesStackedWidget", "Axis\n" -"Maint.")) - self.utilities_axes_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + utilitiesStackedWidget.setWindowTitle( + _translate("utilitiesStackedWidget", "StackedWidget") + ) + self.utilities_title_label.setText( + _translate("utilitiesStackedWidget", "Utilities") + ) + self.utilities_title_label.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) + self.utilities_axes_btn.setText( + _translate("utilitiesStackedWidget", "Axis\nMaint.") + ) + self.utilities_axes_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.update_btn.setText(_translate("utilitiesStackedWidget", "Update")) - self.utilities_routine_check_btn.setText(_translate("utilitiesStackedWidget", "Routine\n" -"Check")) - self.utilities_routine_check_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.utilities_input_shaper_btn.setText(_translate("utilitiesStackedWidget", "Input\n" -"Shaper")) - self.utilities_input_shaper_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.utilities_routine_check_btn.setText( + _translate("utilitiesStackedWidget", "Routine\nCheck") + ) + self.utilities_routine_check_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.utilities_input_shaper_btn.setText( + _translate("utilitiesStackedWidget", "Input\nShaper") + ) + self.utilities_input_shaper_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.utilities_info_btn.setText(_translate("utilitiesStackedWidget", "Info")) - self.utilities_info_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.utilities_leds_btn.setText(_translate("utilitiesStackedWidget", "LED\'s")) - self.utilities_leds_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.utilities_info_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.utilities_leds_btn.setText(_translate("utilitiesStackedWidget", "LED's")) + self.utilities_leds_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.info_title_label.setText(_translate("utilitiesStackedWidget", "Info")) - self.info_title_label.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) + self.info_title_label.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) self.info_back_btn.setText(_translate("utilitiesStackedWidget", "Back")) - self.info_back_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.info_back_btn.setProperty("button_type", _translate("utilitiesStackedWidget", "icon")) - self.kv_label.setText(_translate("utilitiesStackedWidget", "Model: Blocks RF50")) - self.smth_label.setText(_translate("utilitiesStackedWidget", "www.blockstec.com ")) - self.leds_title_label.setText(_translate("utilitiesStackedWidget", "LED\'s")) - self.leds_title_label.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) + self.info_back_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.info_back_btn.setProperty( + "button_type", _translate("utilitiesStackedWidget", "icon") + ) + self.kv_label.setText( + _translate("utilitiesStackedWidget", "Model: Blocks RF50") + ) + self.smth_label.setText( + _translate("utilitiesStackedWidget", "www.blockstec.com ") + ) + self.leds_title_label.setText(_translate("utilitiesStackedWidget", "LED's")) + self.leds_title_label.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) self.leds_back_btn.setText(_translate("utilitiesStackedWidget", "Back")) - self.leds_back_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.leds_back_btn.setProperty("button_type", _translate("utilitiesStackedWidget", "icon")) - self.routines_page_title.setText(_translate("utilitiesStackedWidget", "Routine Check")) - self.routines_page_title.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) - self.routine_check_back_btn.setText(_translate("utilitiesStackedWidget", "Back")) - self.routine_check_back_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.routine_check_back_btn.setProperty("button_type", _translate("utilitiesStackedWidget", "icon")) + self.leds_back_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.leds_back_btn.setProperty( + "button_type", _translate("utilitiesStackedWidget", "icon") + ) + self.routines_page_title.setText( + _translate("utilitiesStackedWidget", "Routine Check") + ) + self.routines_page_title.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) + self.routine_check_back_btn.setText( + _translate("utilitiesStackedWidget", "Back") + ) + self.routine_check_back_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.routine_check_back_btn.setProperty( + "button_type", _translate("utilitiesStackedWidget", "icon") + ) self.rc_bheat.setText(_translate("utilitiesStackedWidget", "Bed Heater")) - self.rc_bheat.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.rc_bheat.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.rc_fans.setText(_translate("utilitiesStackedWidget", "Fans")) - self.rc_fans.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.rc_fans.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.rc_axis.setText(_translate("utilitiesStackedWidget", "Axis")) - self.rc_axis.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.rc_axis.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.rc_ext.setText(_translate("utilitiesStackedWidget", "Extruder")) - self.rc_ext.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.rc_ext.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.rc_tittle.setText(_translate("utilitiesStackedWidget", "label")) - self.rc_tittle.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) + self.rc_tittle.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) self.rc_label.setText(_translate("utilitiesStackedWidget", "TextLabel")) self.rc_yes.setText(_translate("utilitiesStackedWidget", "Yes")) - self.rc_yes.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.rc_yes.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.rc_no.setText(_translate("utilitiesStackedWidget", "No")) - self.rc_no.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.lcd_settings_title_label.setText(_translate("utilitiesStackedWidget", "Axis Maintenance")) - self.lcd_settings_title_label.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) + self.rc_no.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.lcd_settings_title_label.setText( + _translate("utilitiesStackedWidget", "Axis Maintenance") + ) + self.lcd_settings_title_label.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) self.axes_back_btn.setText(_translate("utilitiesStackedWidget", "Back")) - self.axes_back_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.axes_back_btn.setProperty("button_type", _translate("utilitiesStackedWidget", "icon")) + self.axes_back_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.axes_back_btn.setProperty( + "button_type", _translate("utilitiesStackedWidget", "icon") + ) self.am_y.setText(_translate("utilitiesStackedWidget", "Y")) self.am_execute.setText(_translate("utilitiesStackedWidget", "Execute")) - self.am_execute.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_execute.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_z.setText(_translate("utilitiesStackedWidget", "Z")) self.am_x.setText(_translate("utilitiesStackedWidget", "X")) self.label_2.setText(_translate("utilitiesStackedWidget", "Input Shaper")) - self.label_2.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) + self.label_2.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) self.input_shaper_back_btn.setText(_translate("utilitiesStackedWidget", "Back")) - self.input_shaper_back_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.input_shaper_back_btn.setProperty("button_type", _translate("utilitiesStackedWidget", "icon")) + self.input_shaper_back_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.input_shaper_back_btn.setProperty( + "button_type", _translate("utilitiesStackedWidget", "icon") + ) self.label_3.setText(_translate("utilitiesStackedWidget", "Input Shaper ")) self.am_mzv_2.setText(_translate("utilitiesStackedWidget", "MZV")) - self.am_mzv_2.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_mzv_2.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_ei_2.setText(_translate("utilitiesStackedWidget", "EI")) - self.am_ei_2.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_ei_2.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_3hump_ei_2.setText(_translate("utilitiesStackedWidget", "3hump_ei")) - self.am_3hump_ei_2.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_3hump_ei_2.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_zv_2.setText(_translate("utilitiesStackedWidget", "ZV")) - self.am_zv_2.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_zv_2.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_2hump_ei_2.setText(_translate("utilitiesStackedWidget", "2hump_ei")) - self.am_2hump_ei_2.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_2hump_ei_2.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_cancel.setText(_translate("utilitiesStackedWidget", "Cancel")) - self.am_cancel.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_cancel.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.am_confirm.setText(_translate("utilitiesStackedWidget", "Confirm")) - self.am_confirm.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) + self.am_confirm.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) self.label_8.setText(_translate("utilitiesStackedWidget", "User Input")) - self.toggle_led_button.setText(_translate("utilitiesStackedWidget", "PushButton")) + self.toggle_led_button.setText( + _translate("utilitiesStackedWidget", "PushButton") + ) self.label_4.setText(_translate("utilitiesStackedWidget", "On")) self.label_5.setText(_translate("utilitiesStackedWidget", "Off")) - self.leds_slider_tittle_label.setText(_translate("utilitiesStackedWidget", "LED\'s")) - self.leds_slider_tittle_label.setProperty("class", _translate("utilitiesStackedWidget", "title_text")) + self.leds_slider_tittle_label.setText( + _translate("utilitiesStackedWidget", "LED's") + ) + self.leds_slider_tittle_label.setProperty( + "class", _translate("utilitiesStackedWidget", "title_text") + ) self.leds_slider_back_btn.setText(_translate("utilitiesStackedWidget", "Back")) - self.leds_slider_back_btn.setProperty("class", _translate("utilitiesStackedWidget", "menu_btn")) - self.leds_slider_back_btn.setProperty("button_type", _translate("utilitiesStackedWidget", "icon")) + self.leds_slider_back_btn.setProperty( + "class", _translate("utilitiesStackedWidget", "menu_btn") + ) + self.leds_slider_back_btn.setProperty( + "button_type", _translate("utilitiesStackedWidget", "icon") + ) + + from lib.utils.blocks_button import BlocksCustomButton from lib.utils.blocks_frame import BlocksCustomFrame from lib.utils.blocks_slider import BlocksSlider diff --git a/BlocksScreen/lib/utils/blocks_pixmap.py b/BlocksScreen/lib/utils/blocks_pixmap.py index db5456db..7c757428 100644 --- a/BlocksScreen/lib/utils/blocks_pixmap.py +++ b/BlocksScreen/lib/utils/blocks_pixmap.py @@ -68,21 +68,21 @@ class Icon(StrEnum): """Every resource key the handwritten panels draw, one member per asset.""" ABS_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/abs_filament_topbar.svg" - ADD_FILAMENT = ":/filament_related/media/btn_icons/add filament.svg" - ADD_SPOOL = ":/filament_related/media/btn_icons/add spool.svg" + ADD_FILAMENT = ":/filament_related/media/btn_icons/add_filament.svg" + ADD_SPOOL = ":/filament_related/media/btn_icons/add_spool.svg" ARROW_DOWN = ":/arrow_icons/media/btn_icons/arrow_down.svg" ARROW_LEFT = ":/arrow_icons/media/btn_icons/arrow_left.svg" ARROW_RIGHT = ":/arrow_icons/media/btn_icons/arrow_right.svg" BABYSTEP_GRAPHIC = ":/graphics/media/graphics/babystep_graphic.png" - BABY_STEP_ICON = ":/z_levelling/media/btn_icons/baby_step_icon.svg" + BABY_STEP_ICON = ":/z_levelling/media/btn_icons/baby_step.svg" BACK = ":/ui/media/btn_icons/back.svg" BACKGROUND_1ST = ":/background/media/1st_background.png" BACK_FOLDER = ":/ui/media/btn_icons/back_folder.svg" - BASE_DADOS_SPOOL_1 = ":/filament_related/media/btn_icons/base dados spool 1.svg" + SPOOL_DATABASE_1 = ":/filament_related/media/btn_icons/spool_database_1.svg" BLOWER = ":/fan_related/media/btn_icons/blower.svg" BLTOUCH = ":/z_levelling/media/btn_icons/bltouch.svg" CHANGE_FILAMENT = ":/filament_related/media/btn_icons/change_filament.svg" - CHECK_GATE_1 = ":/filament_related/media/btn_icons/check gate 1.svg" + CHECK_GATE_1 = ":/filament_related/media/btn_icons/check_gate_1.svg" EDDY_MECH = ":/z_levelling/media/btn_icons/eddy_mech.svg" EJECT = ":/filament_related/media/btn_icons/eject.svg" ERROR = ":/ui/media/btn_icons/error.svg" @@ -94,17 +94,17 @@ class Icon(StrEnum): FILAMENT_SENSOR_TURN_ON = ( ":/filament_related/media/btn_icons/filament_sensor_turn_on.svg" ) - FILE_ICON = ":/files/media/btn_icons/file_icon.svg" - FOLDERICON = ":/ui/media/btn_icons/folderIcon.svg" - GARBAGE_ICON = ":/ui/media/btn_icons/garbage-icon.svg" - HALF_SPOLL = ":/filament_related/media/btn_icons/half_spoll.svg" + FILE_ICON = ":/files/media/btn_icons/file.svg" + FOLDERICON = ":/ui/media/btn_icons/folder.svg" + GARBAGE_ICON = ":/ui/media/btn_icons/garbage.svg" + HALF_SPOLL = ":/filament_related/media/btn_icons/half_spool.svg" HOTSPOT = ":/network/media/btn_icons/hotspot.svg" INDUCTIVE = ":/z_levelling/media/btn_icons/inductive.svg" INFO = ":/ui/media/btn_icons/info.svg" INPUT_SHAPER_AUTO = ":/input_shaper/media/btn_icons/input_shaper_auto.svg" INPUT_SHAPER_MANUAL = ":/input_shaper/media/btn_icons/input_shaper_manual.svg" LAYERS = ":/ui/media/btn_icons/layers.svg" - LEDS = ":/ui/media/btn_icons/LEDs.svg" + LEDS = ":/ui/media/btn_icons/leds.svg" LEFT_ARROW = ":/arrow_icons/media/btn_icons/left_arrow.svg" LOADED_SPOOL = ":/filament_related/media/btn_icons/loaded_spool.svg" LOAD_FILAMENT = ":/filament_related/media/btn_icons/load_filament.svg" @@ -139,18 +139,18 @@ class Icon(StrEnum): TUNE = ":/ui/media/btn_icons/tune.svg" UNLOAD_FILAMENT = ":/filament_related/media/btn_icons/unload_filament.svg" UNSEE = ":/ui/media/btn_icons/unsee.svg" - UPDATE_SOFTWARE_ICON = ":/system/media/btn_icons/update-software-icon.svg" - USB_ICON = ":/ui/media/btn_icons/usb_icon.svg" - WIFI_0BAR = ":/network/media/btn_icons/network/0bar_wifi.svg" - WIFI_0BAR_PROTECTED = ":/network/media/btn_icons/network/0bar_wifi_protected.svg" - WIFI_1BAR = ":/network/media/btn_icons/network/1bar_wifi.svg" - WIFI_1BAR_PROTECTED = ":/network/media/btn_icons/network/1bar_wifi_protected.svg" - WIFI_2BAR = ":/network/media/btn_icons/network/2bar_wifi.svg" - WIFI_2BAR_PROTECTED = ":/network/media/btn_icons/network/2bar_wifi_protected.svg" - WIFI_3BAR = ":/network/media/btn_icons/network/3bar_wifi.svg" - WIFI_3BAR_PROTECTED = ":/network/media/btn_icons/network/3bar_wifi_protected.svg" - WIFI_4BAR = ":/network/media/btn_icons/network/4bar_wifi.svg" - WIFI_4BAR_PROTECTED = ":/network/media/btn_icons/network/4bar_wifi_protected.svg" + UPDATE_SOFTWARE_ICON = ":/system/media/btn_icons/update_software.svg" + USB_ICON = ":/ui/media/btn_icons/usb.svg" + WIFI_0BAR = ":/network/media/btn_icons/network/wifi_0bar.svg" + WIFI_0BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_0bar_protected.svg" + WIFI_1BAR = ":/network/media/btn_icons/network/wifi_1bar.svg" + WIFI_1BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_1bar_protected.svg" + WIFI_2BAR = ":/network/media/btn_icons/network/wifi_2bar.svg" + WIFI_2BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_2bar_protected.svg" + WIFI_3BAR = ":/network/media/btn_icons/network/wifi_3bar.svg" + WIFI_3BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_3bar_protected.svg" + WIFI_4BAR = ":/network/media/btn_icons/network/wifi_4bar.svg" + WIFI_4BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_4bar_protected.svg" WIFI_CONFIG = ":/network/media/btn_icons/wifi_config.svg" YES = ":/dialog/media/btn_icons/yes.svg" diff --git a/SPLIT_PROMPT.md b/SPLIT_PROMPT.md new file mode 100644 index 00000000..125b1e4e --- /dev/null +++ b/SPLIT_PROMPT.md @@ -0,0 +1,111 @@ +Split PR #306 (branch `fix/network-manager-hardening`, head `f863e99`) into a stack of 6 +smaller PRs. #306 is 2299/1075 across 10 files with 158 hunks in `worker.py` alone, too big +to review. Do not modify `f863e99` - it is the frozen reference for the full combined diff. + +## Hard rules +- NEVER run `git commit`, `git push`, or anything writing to a remote. I commit and push + manually. Create branches locally, stage nothing, and give me one-line + `type(scope): summary` commit messages to run myself. +- Comments: one-liners only, and only where genuinely necessary. No em dashes. +- The network layer stays fully async on sdbus signal watching. Do not introduce + `sdbus_block`. Do not change the sdbus 0.14.1 pin. Do not redesign to polling. +- Behaviour must not change across the whole stack. The end state of PR 5 must be diff-identical + to `f863e99` for the 10 files involved. Verify with `git diff f863e99 ` + at the end - it must be empty. + +## Split by theme, not by commit +The 18 commits interleave: `afbb3ed → a0df3f3 → da76dec → cd49b35 → 7ac1839` is one chain of +successive fixes to the same ethernet bug, so cherry-picking commits reproduces the +intermediate broken states. Split by theme instead. + +Stacked: each branch off the previous, all targeting `dev`. PRs 2-6 all touch the same +`worker.py` regions so they cannot be independent. Each PR body must say "stacked on #N, +review after it merges". + +Target roughly 250-650 changed lines per PR. Sizes below are estimates from `git diff --numstat` +plus per-method line spans; the named new methods account for only 762 of `worker.py`'s 1720 +changed lines, so the remaining ~958 lines of in-place edits are the least certain part of the +allocation. If a PR lands above ~700 lines, split it further rather than shipping it oversized. + +1. `feat(keyboard): full-screen numeric keypad for IP and mask fields` (~240 lines) + `keyboardPage.py`, `tests/util/test_keyboard_page_unit.py`, plus the ~15-line + `_on_show_keyboard(numeric=True)` hunk in `networkWindow.py` (~L3705/L3752-3758). That + hunk is the only keyboard/network coupling and is additive - it needs no worker change. + Merges first, independent of the rest. + +2. `chore(network): drop per-poll debug logs and add missing docstrings` (~300-400 lines) + The per-poll debug-log removal that was spamming the log directory, comment compression to + one-liners, and ALL the docstring additions from `f863e99`. Goes early on purpose: it buys + the docstr-coverage margin that every later PR needs (see the trap below). Safest and most + mechanical PR in the stack. + +3. `refactor(network): extract helpers and cut cyclomatic complexity` (~600-700 lines) + Behaviour-neutral motion only. The complexity-extraction helpers: `_gather_ap_properties`, + `_gather_settings`, `_backup_and_drop_existing`, `_rollback_failed_add`, `_backup_profile`, + `_restore_profile`, `_vlan_*`, `_prefix_to_mask`, `_parse_ipv4_settings`, `_unwrap`, + `_setting`, `_delete_connections_where`, `_delete_all_connections_by_id`, `_find_ap_props`, + `_reload_connections`. Plus `models.py`. Each extracted helper needs its own docstring here - + PR 2 covers pre-existing gaps, not methods this PR introduces. Reviewer should be able to + read the whole thing as pure motion. + +4. `fix(network): enforce one active link and persist ethernet-off intent` (~450 lines) + `_set_wired_profiles_autoconnect`, `_ensure_wired_autoconnect`, the exclusivity logic in + `manager.py`/`worker.py`, and the `networkWindow.py` toggle handlers including the loading + guard armed before link changes. Highest review value - this is where the field bugs were. + Policy: exactly one of Wi-Fi / ethernet / hotspot active, enforced on USER TOGGLES ONLY. + Background and automatic state handlers must never drop a link behind the user's back. + +5. `fix(network): recover stale D-Bus paths and support full radio off` (~550 lines) + `_primary_paths_alive`, `_log_stale`, `_recover_signal_sources`, `_cached_path_is_valid`, + `_device_path_for_iface`, `_reset_signal_proxies`, `_async_bootstrap`, + `_wifi_hardware_enabled`, `_ensure_networking_enabled`, `_wifi_enable_preflight`, + `_apply_wifi_radio`, `_log_radio_state`, `_scan_networks_once`, `_request_scan_if_allowed`. + Plus `tests/network/test_sdbus_integration.py`. + +6. `fix(network): show live signal strength and classify auth failures` (~600 lines) + `_active_ap_signal`, `_wifi_signal_and_security`, `_signal_map_once`, `_read_connectivity`, + `_is_wifi_ap_mode`, `_wifi_activation_failed`, `_wifi_device_state`, `_classify_settings_error`, + `_validate_psk`, `_resolve_current_ip`, `_wait_for_profile_ip`, remaining `networkWindow.py` + display code, `tests/network/test_network_ui.py`. + +`tests/network/test_worker_unit.py` (+466/-63) splits across 3-6, each test landing with the code +it covers. `tests/network/conftest.py` fixtures go to the earliest PR that needs them. +`networkWindow.py` (+312/-318) splits across 1, 4 and 6. + +## Gates - run per branch, not once at the end +Every PR must pass all 5 gates standing alone: +- `.venv/bin/ruff check .` and `.venv/bin/ruff format --diff .` +- `.venv/bin/pylint -j$(nproc) --recursive=y BlocksScreen/` (baseline 8.31/10, must not drop) +- `.venv/bin/pytest tests/ --doctest-modules --cov=BlocksScreen/` (baseline 1515 passed, 30 skipped) +- `.venv/bin/docstr-coverage BlocksScreen/ --exclude '.*/BlocksScreen/lib/ui/.*' --fail-under=80 --skip-magic --skip-init --skip-private --skip-property` +- `.venv/bin/bandit -c pyproject.toml -r . -o /tmp/bandit.json -f json` then filter out `.venv` + paths in Python. Piping `-f json` to stdout yields nothing, and `[tool.bandit] exclude_dirs` + does not exclude `.venv`. + +TRAP: docstr-coverage baseline is 80.1% against `--fail-under=80` - one docstring from red. This +is why PR 2 lands the docstring work before anything else. Check this gate on every branch, PR 1 +included. + +Also keep `ruff check --select C901 --isolated --target-version=py311` clean over +`BlocksScreen/lib/network/`, `networkWindow.py` and `keyboardPage.py` (threshold 10, not a CI gate). + +## PR bodies +Read `.github/PULL_REQUEST_TEMPLATE/pull_request_template.md` first and follow it; drop the +checklist section as the template instructs, and delete any section marked not applicable. +Titles must be Conventional Commits (`feat|fix|docs|refactor|test|chore|perf`) - CI enforces this +and it drives version bumps. Keep bodies as summarised as possible. + +The RF50 result (168 pass / 0 fail / 5 skip, 7m29s, zero tracebacks, RSS steady at 21.6 MB) belongs +to the COMBINED head. Cite it as such in each body, do not claim it as per-PR validation. I will +re-run the harness once on the final stacked head. + +Carry these into the last PR's Future work: AP-mode hotspot detection and the toggle-bounce fix are +both deployed but UNVERIFIED on hardware; the 5 skipped radio-cycling phases need console or +ethernet SSH; coalesce the redundant `_build_signal_map` fan-out; stale-path recovery double-logs +the same warning at an identical timestamp; `NameOwnerChanged` would be a cleaner NM-restart trigger; +`worker.py` still wants a structural split. Expect a merge conflict with #245 (performance). + +## Do not touch +`scripts/healthcheck/` (separate work), anything under `.semgrep/` (local-only, never committed), +`bs-net-test.sh` (deliberately untracked via `.git/info/exclude`), `Makefile` and `pyproject.toml` +(reserved for #245). diff --git a/scripts/healthcheck/bs-diag.sh b/scripts/healthcheck/bs-diag.sh new file mode 100755 index 00000000..3f688db4 --- /dev/null +++ b/scripts/healthcheck/bs-diag.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# Single entry point for the BlocksScreen field diagnostics: runs bs-healthcheck, bs-usb-diag and bs-power. +# +# The field has no SSH, so an operator gets one command and one transcript; the default path is read-only, mutating/load-testing modes (--fix, --stress, --burn, --bed) are only reachable by naming the tool explicitly, never from `all`. +# +# Usage: +# bs-diag.sh same as `all`: health, then USB forensics, then power +# bs-diag.sh all [-q|--json] read-only sweep across every tool +# bs-diag.sh health [OPTS...] acceptance suite (bs-healthcheck.sh, OPTS passed through) +# bs-diag.sh fix [--force] apply the known-safe remediations, refused mid-print without --force +# bs-diag.sh usb [OPTS...] USB fault forensics (bs-usb-diag.sh, OPTS passed through) +# bs-diag.sh power [OPTS...] Pi power budget and rails (bs-power.sh, OPTS passed through) +# bs-diag.sh selftest [OPTS...] UI functional selftest (bs-selftest.py, OPTS passed through) +# bs-diag.sh list show the tools, whether each is present, and its own help +# +# `health` already chains `usb --check` and `selftest` internally, so `all` adds the USB forensic report and power audit on top rather than repeating them; `fix` is the only mutating path and it's never reachable from `all`. +set -u + +HERE=$(dirname -- "$(readlink -f -- "$0")") +HEALTH="$HERE/bs-healthcheck.sh" +USBDIAG="$HERE/bs-usb-diag.sh" +POWER="$HERE/bs-power.sh" +SELFTEST="$HERE/bs-selftest.py" + +if [ -t 1 ]; then + C_HDR=$'\033[1;36m' C_BAD=$'\033[31m' C_OFF=$'\033[0m' +else + C_HDR='' C_BAD='' C_OFF='' +fi + +usage() { sed -n '2,21p' "$0" | sed 's/^# \{0,1\}//'; } + +# A missing tool has to be loud: a silent skip reads as a pass and trains the operator to ignore output. +run_tool() { + local label="$1" tool="$2" + shift 2 + [ -f "$tool" ] || { + printf '%sMISSING%s %s not found beside %s\n' "$C_BAD" "$C_OFF" "$(basename -- "$tool")" "$(basename -- "$0")" >&2 + return 127 + } + printf '\n%s===== %s =====%s\n' "$C_HDR" "$label" "$C_OFF" + case "$tool" in + *.py) "${PYTHON:-python3}" "$tool" "$@" ;; + *) bash "$tool" "$@" ;; + esac +} + +CMD="${1:-all}" +[ $# -gt 0 ] && shift + +case "$CMD" in + -h | --help | help) + usage + exit 0 + ;; + health) + run_tool "health: acceptance suite" "$HEALTH" "$@" + exit $? + ;; + fix) + run_tool "fix: known-safe remediations" "$HEALTH" --fix "$@" + exit $? + ;; + usb) + run_tool "usb: fault forensics" "$USBDIAG" "$@" + exit $? + ;; + power) + run_tool "power: rails and budget" "$POWER" "$@" + exit $? + ;; + selftest) + run_tool "selftest: ui" "$SELFTEST" "$@" + exit $? + ;; + list) + for t in "$HEALTH" "$USBDIAG" "$POWER" "$SELFTEST"; do + if [ -f "$t" ]; then + printf 'present %s\n' "$t" + else + printf '%sMISSING %s%s\n' "$C_BAD" "$t" "$C_OFF" + fi + done + exit 0 + ;; + all) ;; + *) + echo "unknown command: $CMD" >&2 + usage >&2 + exit 2 + ;; +esac + +# `all` forwards only the presentation flags, so no mutating or load-testing mode can be reached from it. +HFLAGS="" +for a in "$@"; do + case "$a" in + -q | --json | -v | --deep | --strict) HFLAGS="$HFLAGS $a" ;; + *) + echo "'all' accepts only -q, --json, -v, --deep, --strict: use 'bs-diag.sh health $a' to pass it through" >&2 + exit 2 + ;; + esac +done + +RC=0 +bump() { [ "$1" -gt "$RC" ] && RC="$1"; return 0; } + +# shellcheck disable=SC2086 +run_tool "health: acceptance suite" "$HEALTH" $HFLAGS +bump $? +run_tool "usb: fault forensics" "$USBDIAG" +bump $? +run_tool "power: rails and budget" "$POWER" +bump $? + +printf '\n%s===== bs-diag done, worst exit %d =====%s\n' "$C_HDR" "$RC" "$C_OFF" +exit "$RC" diff --git a/scripts/healthcheck/bs-healthcheck.sh b/scripts/healthcheck/bs-healthcheck.sh new file mode 100755 index 00000000..91224859 --- /dev/null +++ b/scripts/healthcheck/bs-healthcheck.sh @@ -0,0 +1,1859 @@ +#!/usr/bin/env bash +# BlocksScreen box acceptance + health test: validates every install artifact, service, config patch and runtime subsystem. +# Usage: ./bs-healthcheck.sh [-q|--json] [-v] [--deep] [--strict] [--only S] [--skip S] [--fix] [--force] [--list] +# -q one-line PASS/FAIL summary only (fleet sweeps over ssh) +# --json machine-readable result object, implies quiet +# -v print the captured output of failing checks +# --deep add slow/network checks (remote branches, source compile, update refresh, sudo rights) +# --strict treat WARN as failure (exit code only, JSON rows keep their real tier) +# --only S run only these comma-separated sections (see --list) +# --skip S run everything except these sections +# --fix apply the known-safe remediations (spoolman, install artifacts, logs mode, asvc, env, journal, can0) +# --force allow --fix while a print is running (refused by default, the restarts disrupt the job) +# --list list section names and exit +# --expect-branch N=B[,N=B] branch each component must be on, overrides the manifest (env BS_EXPECT_BRANCH) +# Read-only and safe during a print by default. Only --fix changes anything. +# Exit: 0 all checks passed, 1 one or more failed, 2 bad usage. + +set -u + +SECTIONS="host system services ui install config klipper moonraker spoolman network updater repos python usb selftest deep" + +QUIET=false +JSON=false +VERBOSE=false +DEEP=false +STRICT=false +FIX=false +FORCE=false +ONLY="" +SKIP="" +# Ground truth for branches is the operator, not the box's own manifest: "Name=branch,Name=branch". +EXPECT_BRANCH="${BS_EXPECT_BRANCH:-}" + +usage() { awk 'NR>1 && /^#/ {sub(/^# ?/, ""); print; next} NR>1 {exit}' "$0"; } + +while [ $# -gt 0 ]; do + case "$1" in + -q | --quiet) QUIET=true ;; + --json) + JSON=true + QUIET=true + ;; + -v | --verbose) VERBOSE=true ;; + --deep) DEEP=true ;; + --strict) STRICT=true ;; + --fix) FIX=true ;; + --force) FORCE=true ;; + --only) + ONLY="${2:-}" + shift + ;; + --only=*) ONLY="${1#*=}" ;; + --skip) + SKIP="${2:-}" + shift + ;; + --skip=*) SKIP="${1#*=}" ;; + --expect-branch) + EXPECT_BRANCH="${2:-}" + shift + ;; + --expect-branch=*) EXPECT_BRANCH="${1#*=}" ;; + --list) + echo "$SECTIONS" | tr ' ' '\n' + exit 0 + ;; + -h | --help) + usage + exit 0 + ;; + *) + echo "unknown arg: $1" >&2 + exit 2 + ;; + esac + shift +done + +# A typo in --only/--skip would otherwise silently run nothing at all. +for _s in $(echo "$ONLY,$SKIP" | tr ',' ' '); do + echo " $SECTIONS " | grep -q " $_s " || { + echo "unknown section: $_s (try --list)" >&2 + exit 2 + } +done + +# Resolve the real target user/home even under sudo, same trick as BlocksScreen-start.sh. +BS_USER="${SUDO_USER:-$(id -un)}" +# Walk up to the repo root instead of counting directories, so this script survives being moved. +BS_PATH=$(dirname -- "$(readlink -f -- "$0")") +while [ "$BS_PATH" != / ] && [ ! -d "$BS_PATH/BlocksScreen" ]; do + BS_PATH=$(dirname -- "$BS_PATH") +done +[ -d "$BS_PATH/BlocksScreen" ] || BS_PATH=$(dirname -- "$(dirname -- "$(readlink -f -- "$0")")") +# sudo -i, cron and a console root login all leave SUDO_USER unset: without this fallback every path +# check points at /root and user_writable() degrades to root's always-true test -w. +if [ "$BS_USER" = root ] && [ -d "$BS_PATH/BlocksScreen" ]; then + BS_USER=$(stat -c '%U' "$BS_PATH" 2>/dev/null || echo root) +fi +BS_HOME=$(getent passwd "$BS_USER" | cut -d: -f6) +[ -n "$BS_HOME" ] || BS_HOME="$HOME" +[ -d "$BS_PATH/BlocksScreen" ] || BS_PATH="$BS_HOME/BlocksScreen" +BSENV="${BLOCKSSCREEN_VENV:-$BS_HOME/.BlocksScreen-env}" +CONF="$BS_HOME/printer_data/config/moonraker.conf" +MOON="http://localhost:7125" +SPOOL="http://localhost:7912" +IS_ROOT=false +[ "$(id -u)" = "0" ] && IS_ROOT=true + +# Colour only on a real terminal, so piped/--json output and dumb terminals stay plain. NO_COLOR opts out. +if [ -t 1 ] && [ -z "${NO_COLOR:-}" ] && [ "${TERM:-dumb}" != dumb ]; then + C_PASS=$'\033[32m' + C_WARN=$'\033[33m' + C_FAIL=$'\033[31m' + C_SKIP=$'\033[90m' + C_HDR=$'\033[1;36m' + C_DIM=$'\033[90m' + C_OFF=$'\033[0m' +else + C_PASS='' C_WARN='' C_FAIL='' C_SKIP='' C_HDR='' C_DIM='' C_OFF='' +fi + +PASS_N=0 +WARN_N=0 +FAIL_N=0 +SKIP_N=0 +FAILED_NAMES="" +WARNED_NAMES="" +JSON_ROWS="" +STATE="" +MACROS="" +CUR_SECTION="" +JOURNAL_OK="" + +say() { $QUIET || echo "$@"; } +hdr() { $QUIET || printf '\n%s== %s ==%s\n' "$C_HDR" "$1" "$C_OFF"; } +info() { $QUIET || printf ' %s%s%s\n' "$C_DIM" "$*" "$C_OFF"; } +# Remediation chatter goes to stderr so --json keeps stdout a single parseable object. +note() { printf 'FIX: %s\n' "$*" >&2; } + +# enabled
: honour --only/--skip, --deep gates the deep section. +enabled() { + local s="$1" + if [ -n "$ONLY" ]; then + echo ",$ONLY," | grep -qF ",$s," || return 1 + else + [ "$s" = "deep" ] && ! $DEEP && return 1 + fi + [ -n "$SKIP" ] && echo ",$SKIP," | grep -qF ",$s," && return 1 + return 0 +} + +json_row() { + JSON_ROWS="$JSON_ROWS${JSON_ROWS:+,}{\"section\":\"$CUR_SECTION\",\"name\":\"$1\",\"status\":\"$2\"}" +} + +# record [captured output] +record() { + local status="$1" name="$2" out="${3:-}" c="" + case "$status" in + PASS) + PASS_N=$((PASS_N + 1)) + c="$C_PASS" + ;; + WARN) + WARN_N=$((WARN_N + 1)) + WARNED_NAMES="$WARNED_NAMES${WARNED_NAMES:+, }$name" + c="$C_WARN" + ;; + FAIL) + FAIL_N=$((FAIL_N + 1)) + FAILED_NAMES="$FAILED_NAMES${FAILED_NAMES:+, }$name" + c="$C_FAIL" + ;; + SKIP) + SKIP_N=$((SKIP_N + 1)) + c="$C_SKIP" + ;; + esac + say "$c$status$C_OFF $name" + if $VERBOSE && [ -n "$out" ] && [ "$status" != "PASS" ]; then + echo "$out" | sed "s/^/ $C_DIM| /; s/\$/$C_OFF/" + fi + json_row "$name" "$status" +} + +# check : hard requirement, failure fails the box. +check() { + local name="$1" out + shift + if out=$("$@" 2>&1); then record PASS "$name"; else record FAIL "$name" "$out"; fi +} + +# warn : advisory, does not fail the box unless --strict. +warn() { + local name="$1" out + shift + if out=$("$@" 2>&1); then record PASS "$name"; else record WARN "$name" "$out"; fi +} + +# rwarn : soft twin of rcheck, a SKIP beats a WARN we could not actually verify. +rwarn() { + local name="$1" + shift + if $IS_ROOT; then + warn "$name" "$@" + else + record SKIP "$name (needs root)" + fi +} + +# rcheck : needs root to read, reported SKIP when unprivileged. +rcheck() { + local name="$1" + shift + if $IS_ROOT; then + check "$name" "$@" + else + record SKIP "$name (needs root)" + fi +} + +# Journal ACLs hide system units from unprivileged readers and Storage=none hides them from everyone, +# so "! journalctl | grep -q bad" passes on a box full of tracebacks. Probe once, then SKIP not PASS. +journal_readable() { + [ -n "$JOURNAL_OK" ] || { + if [ -n "$(journalctl -u systemd-journald -b -n 1 --no-pager 2>/dev/null)" ]; then + JOURNAL_OK=yes + else + JOURNAL_OK=no + fi + } + [ "$JOURNAL_OK" = yes ] +} + +# jcheck / jwarn : journal-backed twins, SKIP rather than pass vacuously. +jcheck() { + if journal_readable; then check "$@"; else record SKIP "$1 (no journal access)"; fi +} +jwarn() { + if journal_readable; then warn "$@"; else record SKIP "$1 (no journal access)"; fi +} + +# --- predicates (kept as commands so check() stays a plain runner) --- + +file_has() { grep -qE "$2" "$1" 2>/dev/null; } +grep_count_is_one() { [ "$(grep -cE "$1" "$2" 2>/dev/null)" = "1" ]; } +curl_matches() { curl -s -m "$1" "$2" 2>/dev/null | grep -q "$3"; } +unit_active() { systemctl is-active --quiet "$1"; } +unit_enabled() { systemctl is-enabled "$1" >/dev/null 2>&1; } +unit_prop_is() { [ "$(systemctl show "$1" -p "$2" --value 2>/dev/null)" = "$3" ]; } +unit_prop_isnt() { [ "$(systemctl show "$1" -p "$2" --value 2>/dev/null)" != "$3" ]; } +in_group() { id -nG "$BS_USER" 2>/dev/null | tr ' ' '\n' | grep -qx "$1"; } +mode_is() { [ "$(stat -c '%a' "$1" 2>/dev/null)" = "$2" ]; } +owner_is() { [ "$(stat -c '%U:%G' "$1" 2>/dev/null)" = "$2" ]; } +group_is() { [ "$(stat -c '%G' "$1" 2>/dev/null)" = "$2" ]; } +is_symlink() { [ -L "$1" ]; } +proc_running() { pgrep -f "$1" >/dev/null 2>&1; } +str_is() { [ "$1" = "$2" ]; } +not_grep() { ! grep -qE "$2" "$1" 2>/dev/null; } + +# Free space in MiB on the filesystem holding $1, must be >= $2. +free_mb_at_least() { + local kb + kb=$(df -Pk "$1" 2>/dev/null | awk 'NR==2 {print $4}') + case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$((kb / 1024))" -ge "$2" ] +} + +free_inodes_pct_at_least() { + local used + used=$(df -Pi "$1" 2>/dev/null | awk 'NR==2 {gsub(/%/, "", $5); print $5}') + case "${used:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$((100 - used))" -ge "$2" ] +} + +rootfs_writable() { ! grep -qE ' / [^ ]+ ro[, ]' /proc/mounts; } + +# test -w is always true for root, so under sudo ask the real owner instead or the check is vacuous. +user_writable() { + if $IS_ROOT; then + # No unprivileged identity resolved means the answer is unproven, not "writable". + [ "$BS_USER" != root ] || { + echo "cannot verify writability: no unprivileged user resolved" + return 1 + } + su -s /bin/sh -c "test -w '$1'" "$BS_USER" 2>/dev/null + else + test -w "$1" + fi +} + +# A freshly flashed image that never ran resize2fs shows up as a suspiciously small root partition. +rootfs_expanded() { + local kb + kb=$(df -Pk / 2>/dev/null | awk 'NR==2 {print $2}') + case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$((kb / 1024 / 1024))" -ge 8 ] +} + +read_model() { + local f=/proc/device-tree/model + [ -r "$f" ] && tr -d '\0' <"$f" || echo unknown +} + +# Age in seconds of a systemd timestamp, read from the Monotonic twin because date -d only parses the active TZ abbreviation. +unit_ts_age() { + local us up + us=$(systemctl show "$1" -p "${2}Monotonic" --value 2>/dev/null) + case "${us:-x}" in '' | 0 | *[!0-9]*) return 1 ;; esac + up=$(awk '{printf "%.0f", $1 * 1000000}' /proc/uptime 2>/dev/null) + case "${up:-x}" in '' | *[!0-9]*) return 1 ;; esac + echo $(((up - us) / 1000000)) +} + +# Seconds since the epoch for a systemd timestamp property, fails when unset. +unit_ts() { + local age + age=$(unit_ts_age "$1" "$2") || return 1 + echo $(($(date +%s) - age)) +} + +# WatchdogUSec renders as "30s" on systemd >= 250 and as raw microseconds on older builds. +watchdog_sec() { + local v + v=$(systemctl show "$1" -p WatchdogUSec --value 2>/dev/null) + case "$v" in + *ms) echo 0 ;; + *min*) echo $((${v%%min*} * 60)) ;; + *s) echo "${v%s}" ;; + '' | *[!0-9]*) echo 0 ;; + *) echo $((v / 1000000)) ;; + esac +} + +# The Qt loop pings WATCHDOG=1 every WatchdogSec/2, so a fresh stamp proves the event loop is pumping. +# The window has to come from the unit: a hardcoded one wider than WatchdogSec can never be reached +# because systemd kills and restarts the unit first, which makes it a check that can only pass. +watchdog_fresh() { + local age w + w=$(watchdog_sec BlocksScreen) + [ "$w" -gt 0 ] || { + echo "WatchdogSec=0: systemd is not enforcing UI liveness at all" + return 1 + } + age=$(unit_ts_age BlocksScreen WatchdogTimestamp) || return 1 + [ "$age" -lt "$w" ] || { + echo "watchdog stamp ${age}s old vs WatchdogSec=${w}s (event loop about to be killed)" + return 1 + } +} + +# A stalled event loop shows up as a systemd kill and a restart, never as an old timestamp. +no_watchdog_kill() { + local hits + hits=$(journalctl -u BlocksScreen -b --no-pager 2>/dev/null | grep -i 'watchdog timeout' | tail -3) + [ -z "$hits" ] || { + echo "$hits" + return 1 + } +} + +# StartLimitIntervalSec=0 is the unit-file key, systemd 252 only exposes StartLimitIntervalUSec at runtime. +start_limit_disabled() { + local v + v=$(systemctl show "$1" -p StartLimitIntervalUSec --value 2>/dev/null) + case "$v" in 0 | 0s | 0us | infinity) return 0 ;; esac + echo "$1 StartLimitIntervalUSec=${v:-}" + return 1 +} + +# A crash/fault log only matters when it was written by the current run. +log_predates_start() { + local st + [ -f "$1" ] || return 0 + st=$(unit_ts BlocksScreen ActiveEnterTimestamp) || return 0 + [ "$(stat -c '%Y' "$1" 2>/dev/null || echo 0)" -lt "$st" ] +} + +file_fresher_than() { + local age + [ -f "$1" ] || return 1 + age=$(($(date +%s) - $(stat -c '%Y' "$1"))) + [ "$age" -lt "$2" ] +} + +# Journal for a unit since it last started, as a relative age so no timestamp string is ever parsed. +journal_since_start() { + local age + age=$(unit_ts_age "$1" ActiveEnterTimestamp) || { + journalctl -u "$1" -b 2>/dev/null + return + } + journalctl -u "$1" --since "-$((age + 2))s" 2>/dev/null +} + +no_traceback_since_start() { + ! journal_since_start BlocksScreen | grep -q 'Traceback (most recent call last)' +} + +# A panel that never enumerated leaves every connector disconnected, which reads as a dead box on the bench. +display_connected() { + grep -lx connected /sys/class/drm/*/status >/dev/null 2>&1 || { + echo "no connected DRM connector (panel unplugged or overlay missing)" + return 1 + } +} + +# X starts fine with no touch device, so an unplugged digitiser only shows up when someone taps the screen. +touchscreen_present() { + local d + for d in /dev/input/event*; do + [ -e "$d" ] || continue + udevadm info -q property "$d" 2>/dev/null | grep -q '^ID_INPUT_TOUCHSCREEN=1' && return 0 + done + echo "no ID_INPUT_TOUCHSCREEN device (digitiser unplugged)" + return 1 +} + +# Xorg owns one VT: if the active console moved, the operator sees a text console instead of the app. +xorg_vt_active() { + local want cur + want=$(pgrep -a Xorg 2>/dev/null | grep -o 'vt[0-9]*' | head -1 | tr -dc '0-9') + [ -n "$want" ] || return 0 + cur=$(fgconsole 2>/dev/null | tr -dc '0-9') + [ -n "$cur" ] || return 0 + [ "$cur" = "$want" ] || { + echo "active VT is $cur, Xorg is on vt$want" + return 1 + } +} + +# A UI that has ballooned gets OOM-killed mid-print on a box nobody can SSH into. +ui_rss_below_mb() { + local pid kb + pid=$(pgrep -f 'BlocksScreen/BlocksScreen.py' 2>/dev/null | head -1) + [ -n "$pid" ] || return 0 + kb=$(ps -o rss= -p "$pid" 2>/dev/null | tr -dc '0-9') + case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$((kb / 1024))" -lt "$1" ] || { + echo "UI RSS $((kb / 1024)) MiB (limit $1)" + return 1 + } +} + +boot_counter_clear() { + local f="$BS_HOME/.cache/blockscreen/boot_attempts" n + [ -f "$f" ] || return 0 + n=$(tr -dc '0-9' <"$f") + [ -z "$n" ] || [ "$n" -lt 2 ] +} + +last_good_is_head() { + local f="$BS_HOME/.cache/blockscreen/last_good_commit" + [ -f "$f" ] || return 1 + [ "$(cat "$f")" = "$(git -C "$BS_PATH" rev-parse HEAD 2>/dev/null)" ] +} + +git_ok() { git -C "$1" cat-file -e HEAD 2>/dev/null; } +# Print what is dirty, a bare "not clean" leaves the operator with nowhere to go. +git_clean() { + local out + out=$(git -C "$1" status --porcelain 2>/dev/null | head -8) + [ -z "$out" ] || { echo "$out"; return 1; } +} +git_attached() { [ "$(git -C "$1" rev-parse --abbrev-ref HEAD 2>/dev/null)" != "HEAD" ]; } +git_no_lock() { [ ! -f "$1/.git/index.lock" ]; } +git_branch_is() { [ "$(git -C "$1" rev-parse --abbrev-ref HEAD 2>/dev/null)" = "$2" ]; } +git_remote_has_branch() { + local rc + GIT_TERMINAL_PROMPT=0 GIT_SSH_COMMAND='ssh -oBatchMode=yes -oStrictHostKeyChecking=accept-new' \ + timeout 25 git ls-remote --heads --exit-code "$1" "$2" >/dev/null 2>&1 + rc=$? + # Only rc 2 proves the ref is gone: 128 is transport and 124 is our own timeout. Failing the box + # for those turns every bench run without internet into a wall of failures nobody can act on. + case $rc in + 0) return 0 ;; + 2) + echo "branch $2 missing on $1 (updates for this component are dead)" + return 1 + ;; + *) + echo "remote $1 unreachable (rc=$rc), branch existence unproven" + return 0 + ;; + esac +} +git_system_safe_dir() { git config --system --get-all safe.directory 2>/dev/null | grep -qx "$1"; } +git_config_is() { [ "$(git -C "$1" config --get "$2" 2>/dev/null)" = "$3" ]; } + +# Without an upstream ref the updater cannot compare against origin, so the box silently never reports updates. +git_has_upstream() { + git -C "$1" rev-parse --abbrev-ref '@{u}' >/dev/null 2>&1 || { + echo "no upstream for $(git -C "$1" rev-parse --abbrev-ref HEAD 2>/dev/null) (branch never pushed or tracking lost)" + return 1 + } +} + +# Local commits made on a field box are lost by the updater's hard reset, so flag them before they are. +git_not_ahead() { + local n + git -C "$1" rev-parse --abbrev-ref '@{u}' >/dev/null 2>&1 || return 0 + n=$(git -C "$1" rev-list --count '@{u}..HEAD' 2>/dev/null) + case "${n:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$n" -eq 0 ] || { + echo "$n local commit(s) ahead of upstream (a hard-reset update will discard them)" + return 1 + } +} + +# A stray .orig from a hand-edit leaves the repo dirty forever, which disables that component's updates. +no_merge_leftovers() { + local hits + hits=$(find "$1" -maxdepth 3 \( -name '*.orig' -o -name '*.rej' \) 2>/dev/null | head -5) + [ -z "$hits" ] && return 0 + echo "merge leftovers (repo stays dirty, update_manager skips it):" + echo "$hits" + return 1 +} + +# A truncated package still imports and yields only its ~9 dunders, which crash-looped a field updater 10662x. +venv_import() { + # Under sudo a written __pycache__ is root-owned and breaks the next import as the UI user. + PYTHONDONTWRITEBYTECODE=1 "$BSENV/bin/python3.11" \ + -c "import $1 as _m; assert len(dir(_m)) > 15, 'empty module (truncated install)'" 2>&1 +} + +# Truncation can also hit a package this box does not import at startup, so sweep the tree. +venv_no_truncated_files() { + local hits + hits=$(find "$BSENV/lib" \( -name '*.so' -o \( -name '*.py' ! -name '__init__.py' \) \) -size 0 2>/dev/null | head -5) + [ -z "$hits" ] && return 0 + echo "zero-length files in venv (interrupted pip or power cut):" + echo "$hits" + return 1 +} +venv_import_updater() { + cd "$BS_PATH" && PYTHONDONTWRITEBYTECODE=1 "$BSENV/bin/python3.11" -c "import updater" 2>&1 +} + +reqs_hash_current() { + local want have + want=$(md5sum "$BS_PATH/scripts/requirements.txt" 2>/dev/null | cut -d' ' -f1) + have=$(cat "$BSENV/.blockscreen-reqs-hash" 2>/dev/null) + [ -n "$want" ] && [ "$want" = "$have" ] +} + +# A venv restored from another image keeps the donor's pyvenv.cfg, so pip installs land somewhere nobody runs. +venv_prefix_ok() { + local p + p=$("$BSENV/bin/python3.11" -c 'import sys; print(sys.prefix)' 2>/dev/null) + [ "$p" = "$BSENV" ] || { + echo "sys.prefix=$p, expected $BSENV (venv relocated or copied)" + return 1 + } +} + +# The bounded-retry sentinel survives only while pip keeps failing, so its presence means a partly installed venv. +no_pip_retry_sentinel() { + local f="$BSENV/.blockscreen-reqs-attempt" + [ -f "$f" ] || return 0 + echo "pip retry sentinel present: $(cat "$f") (requirements never installed cleanly)" + return 1 +} + +# busctl list merges acquired and activatable names, and com.blockscreen.Updater.service alone makes +# ours activatable, so only --acquired tells a live daemon from a dead one. Never Ping here: that +# would bus-activate the service and break the read-only contract. +dbus_name_available() { + busctl --system list --acquired --no-legend 2>/dev/null | + grep -q '^com\.blockscreen\.Updater[[:space:]]' || { + echo "name not acquired on the system bus (daemon down, only activatable)" + return 1 + } +} + +updater_running() { + systemctl is-active --quiet BlocksScreen-updater || + pgrep -f 'updater\.dbus_service|updater/main\.py|updater\.cli' >/dev/null 2>&1 +} + +# StartLimitIntervalSec=0 means a crash-looping daemon reports "activating" forever, never "failed". +updater_not_crashlooping() { + local n + n=$(systemctl show BlocksScreen-updater -p NRestarts --value 2>/dev/null) + case "$n" in '' | *[!0-9]*) return 0 ;; esac + [ "$n" -lt 5 ] && return 0 + echo "BlocksScreen-updater restarted ${n}x this boot (crash loop, updates dead)" + return 1 +} + +# flock dies with its holder, so a leftover file is harmless and "held by nobody" is unobservable. +# The real fault is a live holder that is not the daemon or one of its children: the next update blocks. +no_stale_updater_lock() { + local f holders pid kids p + command -v fuser >/dev/null 2>&1 || return 0 + pid=$(systemctl show BlocksScreen-updater -p MainPID --value 2>/dev/null) + case "${pid:-x}" in '' | *[!0-9]*) pid=0 ;; esac + kids=$(pgrep -P "$pid" 2>/dev/null | tr '\n' ' ') + for f in /run/blockscreen/updater.lock "$BS_HOME/.cache/blockscreen/updater.lock"; do + [ -f "$f" ] || continue + holders=$(fuser "$f" 2>/dev/null | tr -s ' ' '\n' | grep -E '^[0-9]+$') + for p in $holders; do + case " $pid $kids " in *" $p "*) continue ;; esac + echo "$f held by pid $p ($(ps -o args= -p "$p" 2>/dev/null | cut -c1-60)), not the updater" + return 1 + done + done + return 0 +} + +no_updater_errors() { + ! journalctl -u BlocksScreen-updater -b 2>/dev/null | + grep -Eiq 'traceback|brick|CRITICAL|aborting update' +} + +# A wedged _run leaves a long-lived child under the daemon: the box looks idle and every future update is dead. +no_wedged_updater_child() { + local pid kid age cmd + pid=$(systemctl show BlocksScreen-updater -p MainPID --value 2>/dev/null) + case "${pid:-x}" in '' | 0 | *[!0-9]*) return 0 ;; esac + for kid in $(pgrep -P "$pid" 2>/dev/null); do + age=$(ps -o etimes= -p "$kid" 2>/dev/null | tr -dc '0-9') + case "${age:-x}" in '' | *[!0-9]*) continue ;; esac + [ "$age" -lt 900 ] && continue + cmd=$(ps -o args= -p "$kid" 2>/dev/null | cut -c1-80) + echo "updater child pid $kid running ${age}s: $cmd (wedged subprocess, updates blocked)" + return 1 + done + return 0 +} + +# The daemon rewrites this file at every step, so a cold one left mid-sequence means an update died halfway. +updater_status_complete() { + local f=/run/blockscreen/updater_status.json s t + [ -f "$f" ] || return 0 + file_fresher_than "$f" 900 && return 0 + s=$(grep -o '"step":[ ]*[0-9]*' "$f" | tr -dc '0-9') + t=$(grep -o '"total":[ ]*[0-9]*' "$f" | tr -dc '0-9') + [ -n "$s" ] && [ -n "$t" ] && [ "$s" != "$t" ] || return 0 + echo "last update stopped at step $s of $t: $(cat "$f")" + return 1 +} + +# Stale apt lists make the update count read zero, so the operator is told a box is current when it is not. +apt_lists_fresh() { + local newest age + newest=$(find /var/lib/apt/lists -maxdepth 1 -name '*_Packages*' -printf '%T@\n' 2>/dev/null | sort -rn | head -1 | cut -d. -f1) + case "${newest:-x}" in '' | *[!0-9]*) return 0 ;; esac + age=$(($(date +%s) - newest)) + [ "$age" -lt 604800 ] || { + echo "apt lists $((age / 86400)) days old (apt-get update has not run)" + return 1 + } +} + +# Anchored to the UI's own start so a successful --fix plus restart is not judged by pre-fix lines. +no_proxy_errors() { ! journal_since_start BlocksScreen | grep -q '32601'; } + +proxy_works() { + curl -s -m 5 -X POST "$MOON/server/spoolman/proxy" -H 'Content-Type: application/json' \ + -d '{"request_method":"GET","path":"/v1/spool"}' 2>/dev/null | grep -q '"result"' +} + +# /server/info keeps loaded and failed components in separate arrays, so slice before matching. +moon_component_array() { + curl -s -m 5 "$MOON/server/info" 2>/dev/null | tr -d ' \n' | + sed "s/.*\"$1\":\[//; s/\].*//" +} +moon_component_loaded() { moon_component_array components | grep -q "\"$1\""; } +moon_no_failed_components() { + local f + f=$(moon_component_array failed_components) + [ -z "$f" ] || { echo "failed_components: $f"; return 1; } +} + +# The effective config only lists components that actually loaded, unlike orig which mirrors the file. +server_config_has_spoolman() { + curl -s -m 5 "$MOON/server/config" 2>/dev/null | tr -d ' \n' | + sed 's/,"orig":.*//; s/.*"config"://' | grep -q '"spoolman"' +} + +mtime() { stat -c '%Y' "$1" 2>/dev/null || echo 0; } + +# The provisioning race: the venv landed after the UI start script already gave up on editing moonraker.conf. +spoolman_section_present() { grep -q '^\[spoolman\]' "$CONF" 2>/dev/null; } +no_spoolman_venv_race() { + [ -d "$BS_HOME/Spoolman/.venv" ] || return 0 + spoolman_section_present && return 0 + echo "Spoolman/.venv exists but [spoolman] missing from moonraker.conf" + return 1 +} +moonraker_read_current_conf() { + local st + st=$(unit_ts moonraker ActiveEnterTimestamp) || return 0 + [ "$(mtime "$CONF")" -le "$st" ] || + { echo "moonraker.conf edited after moonraker started, restart pending"; return 1; } +} +# Scoped to Spoolman: RF50-Klipper/katapult legitimately have no venv and log the same line. +no_missing_venv_in_updater_log() { + ! journalctl -u BlocksScreen-updater -b 2>/dev/null | + grep -q 'No venv found for [^,]*/Spoolman,' +} + +# moonraker.asvc is a case-sensitive allowlist, a missing entry silently breaks update restarts. +asvc_has() { grep -qx "$1" "$BS_HOME/printer_data/moonraker.asvc" 2>/dev/null; } +no_restart_denied() { + ! journalctl -u moonraker -b 2>/dev/null | grep -q 'not permitted to restart service' +} + +# Klipper print_stats state, empty when moonraker/klipper is unreachable. +printer_state() { + curl -s -m 5 "$MOON/printer/objects/query?print_stats" 2>/dev/null | + tr '{},' '\n' | grep '"state"' | head -1 | cut -d'"' -f4 +} +get_state() { + [ -n "$STATE" ] || STATE=$(printer_state) + echo "$STATE" +} + +has_macro() { echo "$MACROS" | grep -qi "gcode_macro $1"; } + +# The files klipper actually loads: printer.cfg plus its includes. Recursing the whole tree instead +# picks up .bak files, dated backups and staged cfgs for boards this variant does not ship. +active_cfgs() { + local dir="$BS_HOME/printer_data/config" root inc g + root="$dir/printer.cfg" + [ -f "$root" ] || return 0 + echo "$root" + awk '/^\[include /{sub(/^\[include[ \t]+/, ""); sub(/\].*$/, ""); sub(/[ \t]+$/, ""); print}' "$root" | + while read -r inc; do + case "$inc" in + *'*'*) for g in "$dir"/$inc; do [ -f "$g" ] && echo "$g"; done ;; + *) [ -f "$dir/$inc" ] && echo "$dir/$inc" ;; + esac + done +} + +# A board that was never flashed or never enumerated leaves its serial path absent, which klippy reports late and vaguely. +printer_serials_exist() { + local p bad="" files + files=$(active_cfgs) + [ -n "$files" ] || return 0 + # Split on the colon, not on whitespace: klipper accepts "serial:/dev/x" with no space after it. + for p in $(grep -hE '^[[:space:]]*serial:' $files 2>/dev/null | + sed 's/^[[:space:]]*serial:[[:space:]]*//; s/[[:space:]]*[#;].*$//; s/[[:space:]]*$//' | + grep '^/dev/' | sort -u); do + [ -e "$p" ] || bad="$bad $p" + done + [ -z "$bad" ] || { + echo "serial device(s) absent (board unflashed, unplugged or renamed):$bad" + return 1 + } +} + +# A board left on an older Klipper build still connects, then fails in ways that look like wiring faults. +mcu_versions_match() { + local host name v bad="" + host=$(curl -s -m 5 "$MOON/printer/info" 2>/dev/null | tr '{},' '\n' | grep '"software_version"' | cut -d'"' -f4) + [ -n "$host" ] || return 0 + for name in $(echo "$MACROS" | grep -o '"mcu[^"]*"' | tr -d '"' | tr ' ' '~' | sort -u); do + v=$(curl -s -m 5 --get --data-urlencode "$(echo "$name" | tr '~' ' ')" "$MOON/printer/objects/query" 2>/dev/null | + tr '{},' '\n' | grep '"mcu_version"' | head -1 | cut -d'"' -f4) + [ -z "$v" ] || [ "$v" = "$host" ] || bad="$bad $(echo "$name" | tr '~' ' ')=$v" + done + [ -z "$bad" ] || { + echo "host klipper $host, mcu firmware:$bad (reflash needed)" + return 1 + } +} + +# An MCU shutdown is the signature of a wiring, power or crystal fault on a freshly built machine. +no_mcu_faults() { + local f="$BS_HOME/printer_data/logs/klippy.log" out + [ -f "$f" ] || return 0 + out=$(tail -n 4000 "$f" 2>/dev/null | + grep -Ei 'Lost communication with MCU|MCU .*shutdown|Timer too close|Unable to connect' | tail -3) + [ -z "$out" ] || { echo "$out"; return 1; } +} + +# An ADC or heater fault on a freshly built machine is an unplugged or shorted probe, not a tuning problem. +no_adc_faults() { + local f="$BS_HOME/printer_data/logs/klippy.log" out + [ -f "$f" ] || return 0 + out=$(tail -n 4000 "$f" 2>/dev/null | + grep -Ei 'ADC out of range|not heating at expected rate|Thermistor .*out of range|Heater .*above maximum' | tail -3) + [ -z "$out" ] || { echo "$out"; return 1; } +} + +# The last Stats line is klipper's own link and load telemetry, which is the only in-log evidence of a +# marginal cable or an overloaded board before it turns into a shutdown mid-print. +klippy_stats_line() { + local f="$BS_HOME/printer_data/logs/klippy.log" + [ -f "$f" ] || return 1 + tail -n 3000 "$f" 2>/dev/null | grep '^Stats ' | tail -1 | grep . +} + +# Klipper prints one key set per MCU on the same line, so report the worst board rather than the first. +kstat_max() { + local line + line=$(klippy_stats_line) || return 1 + printf '%s\n' "$line" | tr ' ' '\n' | grep "^$1=" | cut -d= -f2 | + awk 'BEGIN { m = "" } { if (m == "" || $1 + 0 > m + 0) m = $1 } END { if (m != "") print m }' | grep . +} + +# Invalid bytes are data the host could not parse at all: a bad cable, a bad crimp or EMI, never config. +no_invalid_serial_bytes() { + local v + v=$(kstat_max bytes_invalid) || return 0 + case "${v:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$v" -eq 0 ] || { + echo "bytes_invalid=$v, corrupt data on the MCU link (cable, crimp or EMI)" + return 1 + } +} + +# Retransmits recover silently, but a healthy build sits in single digits: more means a marginal link. +few_serial_retransmits() { + local v + v=$(kstat_max bytes_retransmit) || return 0 + case "${v:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$v" -le 500 ] || { + echo "bytes_retransmit=$v, link is retrying often (cable, hub or USB port)" + return 1 + } +} + +# Klipper's own rule of thumb: avg + 3*stddev over 2.5ms means the board is running out of time. +mcu_task_headroom_ok() { + local avg sd + avg=$(kstat_max mcu_task_avg) || return 0 + sd=$(kstat_max mcu_task_stddev) || return 0 + case "${avg:-x}" in '' | *[!0-9.eE+-]*) return 0 ;; esac + case "${sd:-x}" in '' | *[!0-9.eE+-]*) return 0 ;; esac + awk -v a="$avg" -v s="$sd" 'BEGIN { exit (a + 3 * s > 0.0025) ? 1 : 0 }' || { + echo "mcu_task_avg=$avg stddev=$sd exceeds klipper's 2.5ms budget" + return 1 + } +} + +# adj is the crystal speed klipper measured: more than 1% off nominal is a clock or power defect. +mcu_clock_sane() { + local line + line=$(klippy_stats_line) || return 0 + printf '%s\n' "$line" | tr ' ' '\n' | awk -F= ' + /^freq=/ { f = $2 + 0 } + /^adj=/ { + a = $2 + 0 + if (f > 0 && a > 0) { + d = (a - f) / f + if (d < 0) d = -d + if (d > 0.01) { printf "clock drift %.2f%% (freq=%d adj=%d)\n", d * 100, f, a; bad = 1 } + } + } + END { exit bad ? 1 : 0 }' +} + +# print_stall counts the times the host could not feed the MCU in time, the step before Timer too close. +no_print_stalls() { + local v + v=$(kstat_max print_stall) || return 0 + case "${v:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$v" -eq 0 ] || { + echo "print_stall=$v, the host fell behind feeding the MCU" + return 1 + } +} + +# A configured [mcu rpi] is a second klipper process: without its unit and socket klippy never connects. +linux_mcu_backed() { + local files + files=$(active_cfgs) + [ -n "$files" ] || return 0 + grep -hqE '^[[:space:]]*\[mcu[[:space:]]+rpi\]' $files 2>/dev/null || return 0 + systemctl is-active --quiet klipper-mcu 2>/dev/null || { + echo "[mcu rpi] configured but klipper-mcu.service is not active" + return 1 + } + [ -S /tmp/klipper_host_mcu ] || { + echo "[mcu rpi] configured but /tmp/klipper_host_mcu socket is missing" + return 1 + } +} + +# Our units failing is a defect, a distro unit failing (e2scrub_reap, man-db) is noise, so name them either way. +failed_units() { systemctl list-units --state=failed --no-legend --plain 2>/dev/null | awk '{print $1}'; } +no_failed_units() { + local u + u=$(failed_units | tr '\n' ' ') + [ -z "${u// /}" ] || { + echo "failed units: $u" + return 1 + } +} +no_failed_bs_units() { + local u + u=$(failed_units | grep -i blocksscreen | tr '\n' ' ') + [ -z "${u// /}" ] || { + echo "failed units: $u" + return 1 + } +} +time_synced() { timedatectl show -p NTPSynchronized --value 2>/dev/null | grep -q yes; } +# Bits 0-3 are throttling right now, bits 16-19 only record that it happened earlier this boot. +not_throttled() { + local v + command -v vcgencmd >/dev/null 2>&1 || return 0 + v=$(vcgencmd get_throttled 2>/dev/null | cut -d= -f2) + case "${v:-x}" in '' | x | *[!0-9a-fA-Fx]*) return 0 ;; esac + [ "$v" != "0x0" ] || return 0 + if [ $((v & 0xF)) -ne 0 ]; then + echo "throttled=$v (active right now: PSU sag or overheating)" + else + echo "throttled=$v (historic only since boot, not active)" + fi + return 1 +} + +cpu_temp_ok() { + local t + t=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null) || return 0 + case "${t:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$((t / 1000))" -lt 80 ] +} + +# Vendor tooling logs the card's unclean power-off tally, the practical stand-in for SD SMART data. +no_unsafe_shutdowns() { + local n + n=$(journalctl -b 2>/dev/null | grep -o 'Unsafe Shutdown Count: *[0-9]*' | tail -1 | tr -dc '0-9') + [ -z "$n" ] && return 0 + [ "$n" -lt 10 ] || { + echo "Unsafe Shutdown Count: $n" + return 1 + } +} + +# printer_data/config/config is the intended layout, only a third level is an accident (configurator._cleanup_nested). +no_nested_config_dir() { + local p="$BS_HOME/printer_data/config/config/config" + # -L as well as -e, the nest is a symlink and a broken one is invisible to -e alone. + [ ! -L "$p" ] && [ ! -e "$p" ] +} +# Moonraker keeps the last of two same-named sections, so a duplicated one silently reverts our patched settings. +no_duplicate_conf_sections() { + local dup + dup=$(grep -oE '^\[[^]]+\]' "$1" 2>/dev/null | sort | uniq -d | tr '\n' ' ') + [ -z "${dup// /}" ] || { + echo "duplicated sections in $1: $dup" + return 1 + } +} + +# Klipper aborts the whole config on an include it cannot find, so the box comes up with no printer at all. +includes_resolve() { + local dir="$1" f inc bad="" + for f in "$dir"/*.cfg; do + [ -f "$f" ] || continue + while read -r inc; do + case "$inc" in *'*'*) continue ;; esac + [ -e "$dir/$inc" ] || bad="$bad $inc" + done < <(awk '/^\[include /{sub(/^\[include[ \t]+/, ""); sub(/\].*$/, ""); sub(/[ \t]+$/, ""); print}' "$f") + done + [ -z "$bad" ] || { + echo "missing [include] targets:$bad" + return 1 + } +} + +# Older builds log "Removed neste dir", so match the shorter prefix or the check misses them. +no_renesting_this_boot() { ! journalctl -u BlocksScreen -b 2>/dev/null | grep -q 'Removed neste'; } + +# A USB stick pulled from the file browser logs I/O errors on sd*, only the boot device is a health signal. +no_kernel_errors() { + local out root + root=$(findmnt -no SOURCE / 2>/dev/null | sed 's|/dev/||; s|p\?[0-9]*$||') + out=$(journalctl -k -b 2>/dev/null | grep -Ei 'Out of memory|segfault|BUG:|I/O error' | + awk -v r="$root" '$0 ~ /dev sd[a-z]/ && $0 !~ ("dev " r) { next } { print }' | tail -5) + [ -z "$out" ] || { echo "$out"; return 1; } +} + +# Name the override file and show its head, the point of the check is which pins were forced. +no_updater_override() { + local p="$BS_HOME/printer_data/config/blockscreen_updater.yaml" + [ -f "$p" ] || return 0 + echo "override present: $p" + grep -vE '^\s*(#|$)' "$p" 2>/dev/null | head -6 + return 1 +} + +mem_available_mb_at_least() { + local kb + kb=$(awk '/MemAvailable/ {print $2}' /proc/meminfo 2>/dev/null) + case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$((kb / 1024))" -ge "$1" ] +} + +# A half-configured package leaves apt refusing every later install, which kills the Update button silently. +dpkg_consistent() { + local out + out=$(dpkg --audit 2>/dev/null | head -6) + [ -z "$out" ] || { echo "$out"; return 1; } +} + +# The journal is the only field diagnostic, and an unbounded one is also the usual way a small SD fills up. +journal_size_below_mb() { + local mb + mb=$(journalctl --disk-usage 2>/dev/null | grep -oE '[0-9.]+[KMGT]' | tail -1 | + awk '{ n = $0 + 0; u = substr($0, length($0)); + if (u == "K") n /= 1024; else if (u == "G") n *= 1024; else if (u == "T") n *= 1048576; + printf "%d", n }') + case "${mb:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$mb" -lt "$1" ] || { + echo "journal using ${mb} MiB (limit $1)" + return 1 + } +} + +# Editing a repo-symlinked unit is the common cause, so this is advisory: it only means systemd holds an older copy. +no_daemon_reload_pending() { + local u + for u in "$@"; do + systemctl show "$u" -p NeedDaemonReload --value 2>/dev/null | grep -q yes && { + echo "$u changed on disk since the last daemon-reload" + return 1 + } + done + return 0 +} + +has_default_route() { ip route show default 2>/dev/null | grep -q .; } +dns_resolves() { getent hosts github.com >/dev/null 2>&1; } + +# Commissioning means the operator reaches Mainsail from a laptop, which a localhost probe never proves. +lan_moonraker_ok() { + local ip + ip=$(hostname -I 2>/dev/null | awk '{print $1}') + [ -n "$ip" ] || return 0 + curl_matches 6 "http://$ip:7125/server/info" '"result"' || { + echo "moonraker unreachable on LAN address $ip (bound to localhost or firewalled)" + return 1 + } +} + +# Mainsail loads over the LAN and then 401s on every call when the box subnet is missing from trusted_clients. +lan_client_trusted() { + local ip out + ip=$(hostname -I 2>/dev/null | awk '{print $1}') + [ -n "$ip" ] || return 0 + out=$(curl -s -m 6 "http://$ip:7125/printer/info" 2>/dev/null) + case "$out" in '' | *'"result"'*) return 0 ;; esac + echo "moonraker denies API calls from $ip: $(echo "$out" | head -c 100) (add the subnet to trusted_clients)" + return 1 +} + +# A box commissioned at bench-side signal strength drops off the network once it is in its final position. +wifi_signal_ok() { + local s + command -v nmcli >/dev/null 2>&1 || return 0 + s=$(nmcli -t -f ACTIVE,SIGNAL dev wifi 2>/dev/null | awk -F: '$1 == "yes" { print $2; exit }' | tr -dc '0-9') + case "${s:-x}" in '' | *[!0-9]*) return 0 ;; esac + [ "$s" -ge 40 ] || { + echo "wifi signal ${s}%" + return 1 + } +} +github_reachable() { + curl -s -m 8 -o /dev/null -w '%{http_code}' https://github.com 2>/dev/null | + grep -qE '^(200|301|302)$' +} + +# chvt moved into the updater sudoers file, so ask sudo about the capability instead of a filename only old images have. +chvt_nopasswd() { + local vt rc=0 + for vt in 7 8; do + sudo -n -l -U "$BS_USER" /usr/bin/chvt "$vt" >/dev/null 2>&1 || { + echo "$BS_USER may not run 'chvt $vt' without a password" + rc=1 + } + done + return $rc +} + +# Field boxes carry a unit whose ExecStart points at a path that no longer exists, so the hostname never gets set. +hostname_unit_ok() { + local u=/etc/systemd/system/set-hostname.service target + [ -f "$u" ] || { + echo "$u missing (hostname stays the image default)" + return 1 + } + target=$(awk -F= '/^ExecStart=/ {print $2; exit}' "$u") + [ -x "$target" ] || { + echo "ExecStart=$target is not executable (stale unit from an older install)" + return 1 + } + unit_enabled set-hostname.service || { + echo "set-hostname.service is not enabled" + return 1 + } +} + +# A cloned image keeps the donor hostname, so two boxes collide on mDNS and the operator flashes the wrong one. +hostname_matches_serial() { + local serial want + serial=$(awk '/^Serial/ {print $3; exit}' /proc/cpuinfo 2>/dev/null) + case "${serial:-x}" in '' | x | *[!0-9a-fA-F]* | 0000000000000000) return 0 ;; esac + want="BLOCKS-RF50-$serial" + [ "$(hostname)" = "$want" ] || { + echo "hostname is $(hostname), expected $want (set-hostname never ran, or this is a clone)" + return 1 + } +} + +# A box shipped with a pending reboot applies half its kernel/libc upgrade at the customer site instead. +no_reboot_required() { + [ -f /var/run/reboot-required ] || [ -f /run/reboot-required ] || return 0 + echo "reboot pending: $(cat /run/reboot-required.pkgs 2>/dev/null | tr '\n' ' ')" + return 1 +} + +# An unmapped 127.0.1.1 makes sudo and avahi hang on every lookup, which shows up as a box that is just slow. +hosts_maps_hostname() { + local h + h=$(hostname) + grep -qE "^127\.0\.1\.1[[:space:]]+.*\<$h\>" /etc/hosts 2>/dev/null || { + echo "/etc/hosts has no 127.0.1.1 entry for '$h' (sudo/avahi lookups stall)" + return 1 + } +} + +# The helper is installed byte-for-byte, so any drift means an old copy that predates the apt fixes. +apt_helper_current() { + local src="$BS_PATH/scripts/bs-apt-helper.sh" dst=/usr/local/sbin/bs-apt-helper + [ -f "$src" ] || return 0 + [ -x "$dst" ] || { + echo "$dst missing (updater apt path falls back to a raw apt, or fails)" + return 1 + } + cmp -s "$src" "$dst" || { + echo "$dst differs from $src (stale helper from an older install)" + return 1 + } +} + +# Without this rule every apt step of an update prompts for a password nobody can type on a touchscreen. +apt_helper_nopasswd() { + sudo -n -l -U "$BS_USER" /usr/local/sbin/bs-apt-helper update >/dev/null 2>&1 || { + echo "$BS_USER may not run bs-apt-helper without a password (apt updates will hang)" + return 1 + } +} + +polkit_rule_present() { + [ -f /usr/share/polkit-1/rules.d/90-BlocksScreen.rules ] || + [ -f /etc/polkit-1/rules.d/90-BlocksScreen.rules ] || + [ -f /etc/polkit-1/localauthority/50-local.d/20-blocksscreen.pkla ] +} + +# Components declared in the updater manifest, one "name|path|branch|url" row each. +components() { + local f="$BS_PATH/updater/components.yaml" + [ -f "$f" ] || return 1 + awk ' + function v(s) { gsub(/^[ \t]*["\x27]|["\x27][ \t]*$/, "", s); return s } + /^ - name:/ { if (n != "") print n "|" p "|" b "|" u; n = v($3); p = ""; b = ""; u = "" } + /^ path:/ { p = v($2) } + /^ branch:/ { b = v($2) } + /^ url:/ { u = v($2) } + END { if (n != "") print n "|" p "|" b "|" u } + ' "$f" +} + +# awk exits 0 on a manifest it cannot parse and both consumers then iterate nothing, so the repo and +# deep checks vanish while the summary still reads ALL PASS. Assert the row count instead. +components_ok() { + local n + n=$(components | grep -c '|') + case "${n:-x}" in '' | *[!0-9]*) n=0 ;; esac + [ "$n" -ge 6 ] || { + echo "parsed $n components, expected >= 6 (manifest format changed, repo+deep checks would silently vanish)" + return 1 + } +} + +# Branch ground truth is the operator, not the box manifest: "Name=branch,Name=branch", empty when unset. +# A local override pins a component deliberately, so its branch is the expectation, not a deviation. +override_branch_for() { + local p="$BS_HOME/printer_data/config/blockscreen_updater.yaml" out + [ -f "$p" ] || return 1 + out=$(awk -v want="$1" ' + /^[[:space:]]*-?[[:space:]]*name:/ { n = $NF; gsub(/["\x27]/, "", n) } + /^[[:space:]]*branch:/ { b = $NF; gsub(/["\x27]/, "", b); if (n == want) { print b; exit } } + ' "$p") + [ -n "$out" ] || return 1 + echo "$out" +} + +expect_branch_for() { + local pair + for pair in $(echo "$EXPECT_BRANCH" | tr ',' ' '); do + [ "${pair%%=*}" = "$1" ] && { + echo "${pair#*=}" + return 0 + } + done + return 1 +} + +# --- sections --- + +sec_host() { + local serial expect + info "host $(hostname) $(date '+%F %T')" + info "kernel $(uname -r) uptime$(uptime -p 2>/dev/null | sed 's/^up//')" + info "model $(read_model)" + info "user $BS_USER home=$BS_HOME repo=$BS_PATH" + info "printer state: $(get_state)" + serial=$(awk '/Serial/ {print $3}' /proc/cpuinfo 2>/dev/null) + # A cloned SD card keeps the donor hostname, so a mismatch means duplicate identities on the fleet. + if [ -n "$serial" ]; then + expect="BLOCKS-RF50-$serial" + warn "hostname matches board serial" str_is "$(hostname)" "$expect" + [ "$(hostname)" = "$expect" ] || info "hostname $(hostname), serial says $expect" + fi + check "repo checkout present" test -d "$BS_PATH/.git" +} + +sec_system() { + check "root filesystem writable" rootfs_writable + warn "root filesystem expanded (>= 8 GiB)" rootfs_expanded + check "free space on / >= 500 MiB" free_mb_at_least / 500 + check "free space on home >= 500 MiB" free_mb_at_least "$BS_HOME" 500 + warn "free inodes on / >= 10%" free_inodes_pct_at_least / 10 + warn "available memory >= 100 MiB" mem_available_mb_at_least 100 + check "no failed BlocksScreen units" no_failed_bs_units + warn "no failed systemd units" no_failed_units + warn "clock synchronised (NTP)" time_synced + warn "no undervoltage/throttling" not_throttled + warn "CPU temperature < 80 C" cpu_temp_ok + jwarn "no OOM/segfault/IO errors in kernel log" no_kernel_errors + jwarn "SD unsafe shutdown count below 10" no_unsafe_shutdowns + warn "persistent journal (/var/log/journal)" test -d /var/log/journal + warn "journal below 400 MiB" journal_size_below_mb 400 + check "dpkg database consistent" dpkg_consistent + warn "no pending reboot" no_reboot_required +} + +sec_services() { + local u n + for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater klipper moonraker Spoolman; do + check "$u active" unit_active "$u" + done + for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater BlocksScreen-deploy.path; do + check "$u enabled" unit_enabled "$u" + done + # Active but not enabled survives now and dies at the next boot, the classic half-provisioned box. + for u in klipper moonraker Spoolman; do + check "$u enabled" unit_enabled "$u" + done + warn "BlocksScreen-splash-holder enabled" unit_enabled BlocksScreen-splash-holder + warn "udiskie active (USB automount)" unit_active udiskie + # Load-bearing: a box with no SSH must never be rate-limited out of restarting. + for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater; do + check "$u start rate limiting disabled" start_limit_disabled "$u" + done + warn "no pending daemon-reload" no_daemon_reload_pending BlocksScreen BlocksScreen-xorg BlocksScreen-updater Spoolman + check "BlocksScreen is Type=notify" unit_prop_is BlocksScreen Type notify + check "BlocksScreen watchdog armed" unit_prop_isnt BlocksScreen WatchdogUSec 0 + jcheck "no watchdog kill this boot" no_watchdog_kill + check "default target is multi-user" str_is "$(systemctl get-default 2>/dev/null)" multi-user.target + for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater Spoolman moonraker klipper; do + n=$(systemctl show "$u" -p NRestarts --value 2>/dev/null) + case "${n:-x}" in '' | *[!0-9]*) continue ;; esac + info "$(printf '%-24s NRestarts=%s' "$u" "$n")" + # Name stays constant across runs so JSON rows are diffable, the count goes in the detail. + # Both branches record or a healthy box emits no row at all and JSON runs stop being comparable. + if [ "$n" -gt 3 ]; then + record WARN "$u restart count sane" "restarted $n times, crash loop behind an active state?" + else + record PASS "$u restart count sane" + fi + done + return 0 +} + +sec_ui() { + check "UI process running" proc_running "BlocksScreen/BlocksScreen.py" + check "UI watchdog fresh (event loop alive)" watchdog_fresh + check "X server socket present" test -S /tmp/.X11-unix/X0 + check "Xorg process running" pgrep -x Xorg + check "Xorg owns the active VT" xorg_vt_active + check "touchscreen input device present" touchscreen_present + warn "display connector connected" display_connected + warn "UI memory below 700 MiB" ui_rss_below_mb 700 + check "no crash log from this run" log_predates_start "$BS_PATH/logs/blocksscreen_crash.log" + check "no fault log from this run" log_predates_start "$BS_PATH/logs/blocksscreen_fault.log" + jcheck "no traceback in journal since start" no_traceback_since_start + check "boot_attempts counter cleared" boot_counter_clear + warn "last_good_commit matches HEAD" last_good_is_head + warn "UI log written in the last 10 min" file_fresher_than "$BS_PATH/logs/BlocksScreen.log" 600 + warn "splash raw cache precomputed" test -f "$BS_HOME/.cache/blockscreen/splash.raw" + warn "splash png present" test -f "$BS_HOME/.cache/blockscreen/splash.png" + check "logs dir is setgid 2775" mode_is "$BS_PATH/logs" 2775 + check "logs dir group is blocksscreen" group_is "$BS_PATH/logs" blocksscreen +} + +sec_install() { + local g + # The three artifacts bs-deploy-check.sh watches: any one missing re-runs install-updater.sh. + check "dbus policy installed" test -f /etc/dbus-1/system.d/com.blockscreen.Updater.conf + check "dbus service file installed" test -f /usr/share/dbus-1/system-services/com.blockscreen.Updater.service + check "deploy path unit installed" test -f /etc/systemd/system/BlocksScreen-deploy.path + check "deploy service installed" test -f /etc/systemd/system/BlocksScreen-deploy.service + check "updater unit installed" test -f /etc/systemd/system/BlocksScreen-updater.service + check "Spoolman unit installed" test -f /etc/systemd/system/Spoolman.service + check "xorg unit installed" test -f /etc/systemd/system/BlocksScreen-xorg.service + check "apt helper installed" test -x /usr/local/sbin/bs-apt-helper + check "apt helper owned by root" owner_is /usr/local/sbin/bs-apt-helper root:root + check "apt helper mode 755" mode_is /usr/local/sbin/bs-apt-helper 755 + check "BlocksScreen.service is a repo symlink" is_symlink /etc/systemd/system/BlocksScreen.service + rcheck "sudoers: updater rules present" test -f /etc/sudoers.d/blockscreen-updater + rcheck "sudoers: updater rules parse" visudo -cf /etc/sudoers.d/blockscreen-updater + rcheck "sudoers: updater rules mode 440" mode_is /etc/sudoers.d/blockscreen-updater 440 + rcheck "sudoers: chvt 7/8 permitted" chvt_nopasswd + # polkit rules.d is root-only, so an unprivileged run cannot see these files and must not claim they are missing. + rcheck "polkit: daemon-reload rule" test -f /etc/polkit-1/rules.d/10-blockscreen-reload.rules + rwarn "polkit: NetworkManager/power rule" polkit_rule_present + check "Xwrapper allows any user" file_has /etc/X11/Xwrapper.config '^allowed_users=anybody' + check "Xwrapper keeps root rights" file_has /etc/X11/Xwrapper.config '^needs_root_rights=yes' + warn "kiosk xorg snippet" test -f /etc/X11/xorg.conf.d/99-bs-kiosk.conf + warn "resolution xorg snippet" test -f /etc/X11/xorg.conf.d/97-bs-resolution.conf + warn "NetworkManager any-user policy" test -f /etc/NetworkManager/conf.d/any-user.conf + check "set-hostname unit installed and enabled" hostname_unit_ok + check "hostname derived from CPU serial" hostname_matches_serial + check "/etc/hosts maps this hostname" hosts_maps_hostname + check "apt helper matches repo copy" apt_helper_current + rcheck "sudoers: apt helper permitted" apt_helper_nopasswd + check "env file present" test -f "$BS_HOME/.config/blockscreen/env" + check "env file declares BS_DIR" file_has "$BS_HOME/.config/blockscreen/env" '^BS_DIR=' + check "env file declares BSENV" file_has "$BS_HOME/.config/blockscreen/env" '^BSENV=' + check "group blocksscreen exists" getent group blocksscreen + for g in tty video plugdev netdev blocksscreen; do + check "$BS_USER in group $g" in_group "$g" + done + warn "$BS_USER in group network" in_group network + check "cache dir present" test -d "$BS_HOME/.cache/blockscreen" + check "git hooks path is scripts" git_config_is "$BS_PATH" core.hooksPath scripts + check "post-merge hook executable" test -x "$BS_PATH/scripts/post-merge" + warn "system safe.directory for repo" git_system_safe_dir "$BS_PATH" + warn "desktop entry installed" test -f "$BS_HOME/.local/share/applications/BlocksScreen.desktop" + warn "app icon installed" test -f /usr/share/icons/hicolor/scalable/apps/BlocksScreen.png +} + +sec_config() { + check "moonraker.conf exists" test -f "$CONF" + check "moonraker.conf has [update_manager BlocksScreen]" file_has "$CONF" '^\[update_manager BlocksScreen\]' + check "system updates disabled in moonraker" file_has "$CONF" '^enable_system_updates: *False' + check "managed_services migrated off klipper/moonraker" not_grep "$CONF" '^managed_services: *klipper +moonraker' + warn "single-owner marker for overlapping repos" file_has "$CONF" 'blocksscreen-single-owner' + check "exactly one [spoolman] section" grep_count_is_one '^\[spoolman\]' "$CONF" + check "no duplicated moonraker.conf sections" no_duplicate_conf_sections "$CONF" + check "every [include] resolves" includes_resolve "$BS_HOME/printer_data/config" + check "no merge leftovers in config" no_merge_leftovers "$BS_HOME/printer_data/config" + check "no config/config/config over-nest" no_nested_config_dir + jwarn "no config re-nesting this boot" no_renesting_this_boot + check "BlocksScreen.cfg exists" test -f "$BS_HOME/printer_data/config/BlocksScreen.cfg" + check "BlocksScreen.cfg has [server]" file_has "$BS_HOME/printer_data/config/BlocksScreen.cfg" '^\[server\]' + check "printer.cfg exists" test -f "$BS_HOME/printer_data/config/printer.cfg" + check "gcodes dir writable" user_writable "$BS_HOME/printer_data/gcodes" + check "config dir writable" user_writable "$BS_HOME/printer_data/config" + warn "updater override absent (stock manifest)" no_updater_override + if [ -f "$CONF" ]; then + info "moonraker.conf $(stat -c '%y' "$CONF" 2>/dev/null)" + info "moonraker.conf.bak $(stat -c '%y' "$CONF.bak" 2>/dev/null || echo missing)" + fi +} + +sec_klipper() { + local st m + check "klippy reachable" curl_matches 5 "$MOON/printer/info" '"state"' + st=$(curl -s -m 5 "$MOON/printer/info" 2>/dev/null | tr '{},' '\n' | grep '"state":' | head -1 | cut -d'"' -f4) + info "klippy state: ${st:-unknown}" + check "klippy state is ready" str_is "$st" ready + check "printer objects queryable" curl_matches 5 "$MOON/printer/objects/list" '"objects"' + MACROS=$(curl -s -m 5 "$MOON/printer/objects/list" 2>/dev/null | tr ',' '\n') + if [ -n "$MACROS" ]; then + # BLOCKSCREEN_DEV is an env var read by mainWindow, never a gcode macro, so it is not listed here. + for m in CLEAN_NOZZLE CHANGE_PRINTCORES; do + warn "macro $m defined" has_macro "$m" + done + fi + check "mcu object present" has_macro_free_mcu + check "configured serial devices exist" printer_serials_exist + check "host mcu service backs [mcu rpi]" linux_mcu_backed + warn "mcu firmware matches host klipper" mcu_versions_match + check "no MCU fault in klippy.log" no_mcu_faults + check "no thermistor or heater fault in klippy.log" no_adc_faults + check "no corrupt bytes on the mcu link" no_invalid_serial_bytes + warn "mcu link retransmits low" few_serial_retransmits + warn "mcu task time within budget" mcu_task_headroom_ok + check "mcu clock within 1% of nominal" mcu_clock_sane + warn "no print stalls recorded" no_print_stalls +} + +# The mcu object only exists once klippy connected to the board, so it doubles as an MCU check. +has_macro_free_mcu() { echo "$MACROS" | grep -q '"mcu"'; } + +# Moonraker nests each app under version_info, so split on the object keys to name the ones that are behind. +behind_components() { + echo "$1" | sed 's/"\([A-Za-z0-9_.-]*\)": *{/\n@@\1 /g' | + awk '/^@@/ { name = substr($1, 3) } + /"commits_behind_count": *[1-9]/ { + match($0, /"commits_behind_count": *[0-9]+/) + n = substr($0, RSTART, RLENGTH); sub(/.*: */, "", n) + print name ": " n " commit(s) behind" + }' +} + +sec_moonraker() { + local upd behind detail + check "moonraker API up (:7125)" curl_matches 5 "$MOON/server/info" '"result"' + check "moonraker reports klippy_connected" curl_matches 5 "$MOON/server/info" '"klippy_connected": *true' + warn "moonraker has no unexpected warnings" moon_unexpected_warnings + check "machine info available" curl_matches 5 "$MOON/machine/system_info" '"system_info"' + check "no failed moonraker components" moon_no_failed_components + check "moonraker allowed to restart our services" asvc_ok + jwarn "no restart denied by moonraker.asvc this boot" no_restart_denied + warn "moonraker detected every component version" version_detect_ok + warn "web assets up to date" web_versions_current + upd=$(curl -s -m 20 "$MOON/machine/update/status?refresh=false" 2>/dev/null) + # An error payload counts zero components behind and would read as "up to date", passing hardest + # on the one box whose only field remediation path is already broken. + case "$upd" in + *'"version_info"'*) + behind=$(echo "$upd" | tr ',' '\n' | grep -c '"commits_behind_count": *[1-9]') + if [ "$behind" -gt 0 ]; then + detail=$(behind_components "$upd") + # Fall back to the raw fields if moonraker ever reshapes the payload, a named component is the whole point. + [ -n "$detail" ] || detail=$(echo "$upd" | tr ',' '\n' | grep -E 'commits_behind_count|corrupt') + record FAIL "all components up to date" "$detail" + else + record PASS "all components up to date" + fi + ;; + *'"error"'*) + record FAIL "update status readable" "$(echo "$upd" | tr -d '\n' | cut -c1-200)" + ;; + *) + record WARN "update status unavailable (moonraker down or slow)" + ;; + esac +} + +not_curl_match() { ! curl -s -m 5 "$1" 2>/dev/null | grep -q "$2"; } + +# Only BlocksScreen is asserted: moonraker permits klipper and moonraker implicitly, and our updater restarts Spoolman itself. +asvc_ok() { + asvc_has BlocksScreen || { + echo "BlocksScreen missing from $BS_HOME/printer_data/moonraker.asvc" + # A pre-rename image carries the old unit name instead, which is the usual cause. + asvc_has BlocksPrinter && echo "found legacy BlocksPrinter entry, image predates the current installer" + return 1 + } +} + +# git describe --tags cannot name a version on a fork, moonraker then reports "?" and disables updates. +version_detect_ok() { + local v + v=$(update_status | tr ',' '\n' | grep -E '"[a-z_]*version[a-z_]*": *"\?"') + [ -z "$v" ] || { + echo "undetected versions:" + echo "$v" + return 1 + } +} + +update_status() { curl -s -m 20 "$MOON/machine/update/status?refresh=false" 2>/dev/null; } + +# Apps whose local version differs from the remote one, "name local -> remote" per line. +outdated_apps() { + update_status | tr -d ' \n' | awk 'BEGIN { RS = "\"name\":\"" } + NR > 1 { + n = substr($0, 1, index($0, "\"") - 1) + v = ""; rv = "" + if (match($0, /"version":"[^"]*"/)) v = substr($0, RSTART + 11, RLENGTH - 12) + if (match($0, /"remote_version":"[^"]*"/)) rv = substr($0, RSTART + 18, RLENGTH - 19) + if (v != "" && rv != "" && v != rv && v != "?" && rv != "?") print n " " v " -> " rv + }' +} + +web_versions_current() { + local o + o=$(outdated_apps) + [ -z "$o" ] || { + echo "$o" + return 1 + } +} + +# Our forks sit on non-official remotes by design, so those warnings are expected and never faults. +moon_unexpected_warnings() { + local w + # Char scan, not sed: warning strings contain commas and brackets ("[update_manager BlocksScreen]"). + w=$(curl -s -m 5 "$MOON/server/info" 2>/dev/null | tr -d '\n' | + awk '{ + i = index($0, "\"warnings\":") + if (i == 0) exit + $0 = substr($0, i + 11) + i = index($0, "[") + if (i == 0) exit + instr = 0; esc = 0; cur = "" + for (p = i + 1; p <= length($0); p++) { + c = substr($0, p, 1) + if (esc) { cur = cur c; esc = 0; continue } + if (c == "\\") { esc = 1; continue } + if (c == "\"") { if (instr) { print cur; cur = "" } ; instr = !instr; continue } + if (instr) { cur = cur c; continue } + if (c == "]") { exit } + } + }' | grep -v '^ *$' | + grep -Ev 'not on official remote/branch|Failed to detect current version|No valid tag|unofficial') + [ -z "$w" ] || { + echo "$w" + return 1 + } +} + +sec_spoolman() { + check "Spoolman .venv provisioned" test -d "$BS_HOME/Spoolman/.venv" + check "Spoolman API healthy (:7912)" curl_matches 5 "$SPOOL/api/v1/health" healthy + check "spoolman database present" test -f "$BS_HOME/.local/share/spoolman/spoolman.db" + # Slice the components array: a bare grep also matches failed_components, passing in the broken case. + check "moonraker loaded spoolman component" moon_component_loaded spoolman + check "moonraker effective config has spoolman" server_config_has_spoolman + # Moonraker serialises with json.dumps defaults, so the wire form is '"key": value'. + check "moonraker connected to spoolman" curl_matches 5 "$MOON/server/spoolman/status" '"spoolman_connected": *true' + check "spoolman proxy call the UI makes" proxy_works + jcheck "no -32601 in UI log since UI start" no_proxy_errors + # The provisioning race: venv landed after the UI start script gave up editing moonraker.conf. + check "[spoolman] section present in moonraker.conf" spoolman_section_present + check "no venv-vs-conf provisioning race" no_spoolman_venv_race + check "moonraker started after last moonraker.conf edit" moonraker_read_current_conf + jcheck "no 'No venv found for' in updater log this boot" no_missing_venv_in_updater_log +} + +sec_network() { + check "NetworkManager active" unit_active NetworkManager + check "default route present" has_default_route + warn "DNS resolves github.com" dns_resolves + warn "https://github.com reachable" github_reachable + check "moonraker answers on the LAN address" lan_moonraker_ok + warn "moonraker accepts LAN clients" lan_client_trusted + warn "wifi signal >= 40%" wifi_signal_ok + info "addresses: $(hostname -I 2>/dev/null)" + info "connections: $(nmcli -t -f NAME,TYPE,DEVICE con show --active 2>/dev/null | tr '\n' ' ')" +} + +sec_updater() { + local errs + check "updater D-Bus name available" dbus_name_available + check "updater not crash-looping" updater_not_crashlooping + check "no stale updater lock" no_stale_updater_lock + jcheck "no updater errors since boot" no_updater_errors + check "no wedged updater subprocess" no_wedged_updater_child + check "last update ran to completion" updater_status_complete + warn "apt lists refreshed in the last 7 days" apt_lists_fresh + check "components manifest readable" components_ok + warn "deploy trigger consumed" test ! -f "$BS_HOME/.config/blockscreen/.run-install-updater" + warn "requirements sentinel current" reqs_hash_current + if ! $QUIET; then + errs=$(journalctl -u BlocksScreen-updater -b 2>/dev/null | + grep -Ei 'error|abort|failed|traceback|brick' | tail -10) + if [ -n "$errs" ]; then + info "recent updater errors:" + echo "$errs" | sed 's/^/ | /' + fi + fi + return 0 +} + +sec_repos() { + local name path branch url dirty want + [ -n "$EXPECT_BRANCH" ] && info "expected branches: $EXPECT_BRANCH" + while IFS='|' read -r name path branch url; do + [ -n "$name" ] || continue + path=$(echo "$path" | sed "s|^~|$BS_HOME|") + if [ ! -d "$path/.git" ]; then + record WARN "$name checkout present" + continue + fi + dirty=$(git -C "$path" status --porcelain 2>/dev/null | head -1) + info "$(printf '%-16s %-32s %s %s' "$name" \ + "$(git -C "$path" rev-parse --abbrev-ref HEAD 2>/dev/null)" \ + "$(git -C "$path" rev-parse --short HEAD 2>/dev/null)" \ + "${dirty:+DIRTY}")" + check "$name HEAD object intact" git_ok "$path" + check "$name not detached" git_attached "$path" + check "$name has no index.lock" git_no_lock "$path" + warn "$name working tree clean" git_clean "$path" + check "$name has no merge leftovers" no_merge_leftovers "$path" + check "$name tracks an upstream branch" git_has_upstream "$path" + warn "$name not ahead of upstream" git_not_ahead "$path" + warn "$name group is blocksscreen" group_is "$path" blocksscreen + # The operator's expectation is ground truth, the manifest is only advisory: it ships wrong branches. + if want=$(expect_branch_for "$name"); then + check "$name on expected branch" git_branch_is "$path" "$want" + elif want=$(override_branch_for "$name"); then + check "$name on override branch ($want)" git_branch_is "$path" "$want" + elif [ -n "$branch" ]; then + warn "$name on manifest branch" git_branch_is "$path" "$branch" + fi + done < <(components) + return 0 +} + +sec_python() { + local m + check "venv python3.11 present" test -x "$BSENV/bin/python3.11" + info "python: $("$BSENV/bin/python3.11" --version 2>&1)" + check "venv prefix is $BSENV" venv_prefix_ok + check "no pip retry sentinel left behind" no_pip_retry_sentinel + # The NM binding is imported as sdbus_async.networkmanager, there is no top-level sdbus_networkmanager module. + for m in PyQt6.QtWidgets sdbus sdbus_async.networkmanager websocket requests yaml PIL.Image qrcode numpy; do + check "import $m" venv_import "$m" + done + check "updater package importable" venv_import_updater + check "no truncated venv files" venv_no_truncated_files + warn "pip dependency tree consistent" "$BSENV/bin/pip" check +} + +# USB faults get their own script because the forensics are long and the operator needs to run them +# on their own during a repro: see bs-usb-diag.sh --watch. +sec_usb() { + local diag st name det + diag="$(dirname -- "$(readlink -f -- "$0")")/bs-usb-diag.sh" + if [ ! -r "$diag" ]; then + record SKIP "usb fault diagnostics" "bs-usb-diag.sh not found beside this script" + return 0 + fi + # Read in this shell, not down a pipe: record() has to reach the parent's counters. + while IFS=$'\t' read -r st name det; do + [ -n "$name" ] || continue + record "$st" "$name" "$det" + done < <(timeout 180 bash "$diag" --check 2>/dev/null) + info "full forensics: sudo $diag live repro: sudo $diag --watch" +} + +# The UI can run, answer D-Bus and still render blank buttons, so the rendering path is exercised in +# python by a separate file: it needs PyQt6 from the venv, which shell cannot check for us. +sec_selftest() { + local self st name det py + self="$(dirname -- "$(readlink -f -- "$0")")/bs-selftest.py" + if [ ! -r "$self" ]; then + record SKIP "blocksscreen selftest" "bs-selftest.py not found beside this script" + return 0 + fi + py="$BSENV/bin/python3.11" + [ -x "$py" ] || py="$BSENV/bin/python3" + if [ ! -x "$py" ]; then + record SKIP "blocksscreen selftest" "no venv python at $BSENV/bin" + return 0 + fi + # Run as the owning user: root has a different HOME, so BlocksScreen.cfg would not be found, and + # a root-created Qt runtime dir would then be left behind for the service to trip over. + # Read in this shell, not down a pipe: record() has to reach the parent's counters. + local -a pre=() + [ "$(id -u)" = 0 ] && pre=(runuser -u "$BS_USER" --) + local rows + rows=$( + timeout 300 "${pre[@]}" env \ + QT_QPA_PLATFORM=offscreen \ + XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp}" \ + HOME="$BS_HOME" \ + "$py" "$self" 2>/dev/null + ) + # No rows at all means the interpreter died before its first assertion, which must not read as a + # clean section: a silent zero-assertion pass is the false PASS this suite exists to prevent. + if [ -z "$rows" ]; then + record FAIL "blocksscreen selftest" "produced no output, $py could not run $self" + return 0 + fi + # Read in this shell, not down a pipe: record() has to reach the parent's counters. + while IFS=$'\t' read -r st name det; do + [ -n "$name" ] || continue + record "$st" "$name" "$det" + done <<<"$rows" +} + +sec_deep() { + local name path branch url + check "all repo sources compile" "$BSENV/bin/python3.11" -c ' +import pathlib, sys +bad = [] +for root in sys.argv[1:]: + for f in pathlib.Path(root).rglob("*.py"): + try: + compile(f.read_text(errors="replace"), str(f), "exec") + except SyntaxError as e: + bad.append("%s:%s: %s" % (f, e.lineno, e.msg)) +print("\n".join(bad)) +sys.exit(1 if bad else 0) +' "$BS_PATH/BlocksScreen" "$BS_PATH/updater" + # Known field trap: a component pinned to a branch deleted upstream breaks updates fleet-wide. + # With no route to github every probe is unprovable, so skip the lot rather than guess. + if github_reachable; then + while IFS='|' read -r name path branch url; do + [ -n "$branch" ] && [ -n "$url" ] || continue + check "$name branch $branch exists on origin" git_remote_has_branch "$url" "$branch" + done < <(components) + else + record SKIP "remote branch existence (github unreachable)" + fi + warn "update status refresh succeeds" curl_matches 60 "$MOON/machine/update/status?refresh=true" '"version_info"' + rcheck "sudo rights list cleanly" sudo -n -l -U "$BS_USER" + return 0 +} + +# --- run --- + +# set -u with no -e means an abort inside a section body skips the summary entirely, and with --json +# skips the whole object, while the exit status still looks like an ordinary failure. +INCOMPLETE=1 +trap '[ "$INCOMPLETE" = 0 ] || printf "\n*** RUN INCOMPLETE: aborted during section %s, counts below are partial ***\n" "$CUR_SECTION" >&2' EXIT + +for s in $SECTIONS; do + enabled "$s" || continue + CUR_SECTION="$s" + hdr "$s" + "sec_$s" || record FAIL "section $s completed" "section handler returned $?" +done +INCOMPLETE=0 +CUR_SECTION="result" + +# Every --fix below restarts services or re-arms the installer, so the guard belongs above all of +# them rather than inside the first. An unknown state means moonraker is unreachable and klipper keeps +# printing without it, so that case has to refuse too. +if $FIX; then + STATE=$(printer_state) + case "${STATE:-unknown}" in + printing | paused | unknown | '') + if $FORCE; then + note "printer state is ${STATE:-unknown}, --force given, applying fixes anyway" + else + note "fixes not applied: printer state is ${STATE:-unknown} (re-run with --force or after the job)" + FIX=false + fi + ;; + esac +fi + +# Opt-in remediation for the known [spoolman] provisioning race, mirrors the manual two-step fix. +if $FIX && [ -f "$CONF" ] && ! grep -q '^\[spoolman\]' "$CONF"; then + if $FIX; then + note "applying fix: [spoolman]" + cp "$CONF" "$CONF.healthcheck.$(date +%Y%m%d%H%M%S).bak" + printf '\n[spoolman]\nserver: localhost:7912\n' >>"$CONF" + sudo -n systemctl restart moonraker.service && + sleep 8 && + sudo -n systemctl restart BlocksScreen.service || + note "restart failed, no passwordless sudo? restart moonraker + BlocksScreen by hand" + note "added [spoolman], re-run to verify" + fi +fi + +# Missing install artifacts are repaired by the deploy path watcher, which only needs its trigger file. +if $FIX && { [ ! -f /etc/systemd/system/BlocksScreen-deploy.path ] || + [ ! -f /usr/share/dbus-1/system-services/com.blockscreen.Updater.service ] || + [ ! -f /etc/dbus-1/system.d/com.blockscreen.Updater.conf ] || + [ ! -x /usr/local/sbin/bs-apt-helper ]; }; then + note "applying fix: install artifacts" + mkdir -p "$BS_HOME/.config/blockscreen" + touch "$BS_HOME/.config/blockscreen/.run-install-updater" + # Created as root under sudo, and a root-owned config dir is a fault the UI cannot recover from. + $IS_ROOT && [ "$BS_USER" != root ] && + chown -R "$BS_USER" "$BS_HOME/.config/blockscreen" 2>/dev/null + note "armed the deploy trigger, install-updater.sh runs via the path unit, re-run to verify" +fi + +# A group-writable setgid logs dir is what lets both the UI user and root append to the same files. +if $FIX && [ -d "$BS_PATH/logs" ] && [ "$(stat -c '%a' "$BS_PATH/logs" 2>/dev/null)" != 2775 ]; then + note "applying fix: logs dir mode" + chmod 2775 "$BS_PATH/logs" && note "logs dir set to 2775" || note "chmod failed on $BS_PATH/logs" +fi + +# moonraker.asvc is a case-sensitive allowlist, so a missing entry silently breaks every update restart. +if $FIX && ! asvc_has BlocksScreen; then + note "applying fix: moonraker.asvc" + printf 'BlocksScreen\n' >>"$BS_HOME/printer_data/moonraker.asvc" + $IS_ROOT && [ "$BS_USER" != root ] && + chown "$BS_USER" "$BS_HOME/printer_data/moonraker.asvc" 2>/dev/null + note "added BlocksScreen to moonraker.asvc, restart moonraker to load it" +fi + +# BlocksScreen-start.sh sources this env file, so a missing BS_DIR or BSENV starts the UI against the wrong tree. +if $FIX; then + ENVF="$BS_HOME/.config/blockscreen/env" + if [ ! -f "$ENVF" ] || ! grep -q '^BS_DIR=' "$ENVF" || ! grep -q '^BSENV=' "$ENVF"; then + note "applying fix: env file" + mkdir -p "$BS_HOME/.config/blockscreen" + grep -q '^BS_DIR=' "$ENVF" 2>/dev/null || printf 'BS_DIR=%s\n' "$BS_PATH" >>"$ENVF" + grep -q '^BSENV=' "$ENVF" 2>/dev/null || printf 'BSENV=%s\n' "$BSENV" >>"$ENVF" + $IS_ROOT && [ "$BS_USER" != root ] && + chown -R "$BS_USER" "$BS_HOME/.config/blockscreen" 2>/dev/null + note "wrote $ENVF, re-run to verify" + fi +fi + +# One retained boot makes every crash older than the last reboot uncorrelatable, which is most of them. +if $FIX && $IS_ROOT && [ "$(journalctl --list-boots 2>/dev/null | wc -l)" -lt 4 ]; then + note "applying fix: journal retention" + mkdir -p /etc/systemd/journald.conf.d /var/log/journal + printf '[Journal]\nStorage=persistent\nSystemMaxUse=200M\nSystemMaxFiles=20\n' \ + >/etc/systemd/journald.conf.d/10-blocksscreen.conf + systemd-tmpfiles --create --prefix /var/log/journal >/dev/null 2>&1 + systemctl restart systemd-journald 2>/dev/null || + note "journald restart failed, retention applies at the next boot" + note "journal set to persistent 200M, older boots accumulate from here" +fi + +# restart-ms 0 leaves a bus-off CAN link dead until someone reboots, and the field has no SSH. +if $FIX && $IS_ROOT && [ -f /etc/network/interfaces.d/can0 ] && + ! grep -q 'restart-ms' /etc/network/interfaces.d/can0; then + note "applying fix: can0 restart-ms" + cp /etc/network/interfaces.d/can0 "/etc/network/interfaces.d/can0.healthcheck.$(date +%Y%m%d%H%M%S).bak" + # Native stanza first (ifupdown ignores options it does not know, so it can never abort ifup), then a + # pre-up fallback for builds whose can method lacks it, with || true so a failure cannot strand can0 down. + printf ' restart-ms 100\n pre-up ip link set $IFACE type can restart-ms 100 || true\n' \ + >>/etc/network/interfaces.d/can0 + note "can0 will self-heal from bus-off after the next reboot, the running link keeps restart-ms=0" +fi + +# --strict only moves the bar for the exit code: counters and rows keep the tier each check was recorded at. +RC=0 +[ "$FAIL_N" -gt 0 ] && RC=1 +$STRICT && [ "$WARN_N" -gt 0 ] && RC=1 + +if $JSON; then + printf '{"host":"%s","pass":%d,"warn":%d,"fail":%d,"skip":%d,"strict":%s,"result":"%s","failed":"%s","warned":"%s","checks":[%s]}\n' \ + "$(hostname)" "$PASS_N" "$WARN_N" "$FAIL_N" "$SKIP_N" \ + "$($STRICT && echo true || echo false)" \ + "$([ "$RC" -eq 0 ] && echo PASS || echo FAIL)" \ + "$FAILED_NAMES" "$WARNED_NAMES" "$JSON_ROWS" + exit "$RC" +fi + +hdr "result" +say "$C_PASS$PASS_N passed$C_OFF, $C_WARN$WARN_N warned$C_OFF, $C_FAIL$FAIL_N failed$C_OFF, $C_SKIP$SKIP_N skipped$C_OFF" +[ "$WARN_N" -gt 0 ] && say "${C_WARN}WARNINGS:$C_OFF $WARNED_NAMES" +if [ "$RC" -eq 0 ]; then + $QUIET && echo "$(hostname): PASS ($PASS_N checks, $WARN_N warn)" || echo "${C_PASS}ALL PASS$C_OFF" + exit 0 +fi +if [ "$FAIL_N" -eq 0 ]; then + $QUIET && echo "$(hostname): FAIL (strict, $WARN_N warn) $WARNED_NAMES" || + echo "${C_WARN}STRICT: $WARN_N WARNING(S):$C_OFF $WARNED_NAMES" + exit 1 +fi +$QUIET && echo "$(hostname): FAIL ($FAIL_N) $FAILED_NAMES" || + echo "${C_FAIL}$FAIL_N CHECK(S) FAILED:$C_OFF $FAILED_NAMES" +exit 1 diff --git a/scripts/healthcheck/bs-power.sh b/scripts/healthcheck/bs-power.sh new file mode 100755 index 00000000..7b5ed28b --- /dev/null +++ b/scripts/healthcheck/bs-power.sh @@ -0,0 +1,839 @@ +#!/usr/bin/env bash +# Read-only Raspberry Pi power audit: input budget, PMIC rails, USB draw, throttling and headroom. +# Nothing here writes config, restarts a service, or touches the printer. --stress is the one opt-in load. +set -u + +VERBOSE=0 +WATCH=0 +STRESS=0 +BURN=0 +BED=0 +FORCE=0 +ASSUME_YES=0 + +usage() { + cat <<'EOF' +Usage: bs-power.sh [options] + + -v verbose: per-rail table and full USB device list + --watch N sample every second for N seconds, report min/max and any event + --stress N run an N-second CPU load and report voltage sag (refuses while printing) + --burn N staged ramp, N seconds per stage, to measure real headroom (refuses while printing) + --bed TEMP heat the bed from cold and test whether the 24V heater pulls down the Pi 5V rail + --force allow --stress and --burn even when the printer state cannot be determined + --yes skip the --bed confirmation prompt (required when stdin is not a tty) + -h this help + +Read-only by default. Run as any user; a few nodes need root and are marked when skipped. +EOF +} + +while [ $# -gt 0 ]; do + case "$1" in + -v) VERBOSE=1 ;; + --watch) + WATCH="${2:-30}" + shift + ;; + --stress) + STRESS="${2:-20}" + shift + ;; + --burn) + BURN="${2:-20}" + shift + ;; + --bed) + BED="${2:-60}" + shift + ;; + --force) FORCE=1 ;; + --yes) ASSUME_YES=1 ;; + -h | --help) + usage + exit 0 + ;; + *) + echo "unknown option: $1" >&2 + usage + exit 2 + ;; + esac + shift +done + +C_OK='' +C_BAD='' +C_WARN='' +C_DIM='' +C_OFF='' +if [ -t 1 ]; then + C_OK=$'\033[32m' + C_BAD=$'\033[31m' + C_WARN=$'\033[33m' + C_DIM=$'\033[2m' + C_OFF=$'\033[0m' +fi + +hdr() { printf '\n%s== %s ==%s\n' "$C_DIM" "$1" "$C_OFF"; } +kv() { printf ' %-28s %s\n' "$1" "$2"; } +ok() { printf ' %sOK%s %s\n' "$C_OK" "$C_OFF" "$1"; } +bad() { printf ' %sBAD%s %s\n' "$C_BAD" "$C_OFF" "$1"; } +warn() { printf ' %sWARN%s %s\n' "$C_WARN" "$C_OFF" "$1"; } +note() { printf ' %s%s%s\n' "$C_DIM" "$1" "$C_OFF"; } + +# Reads a sysfs or procfs node, returning empty rather than an error when it is absent. +sysread() { [ -r "$1" ] && tr -d '\0' <"$1" 2>/dev/null; } + +have() { command -v "$1" >/dev/null 2>&1; } + +VCG=$(command -v vcgencmd 2>/dev/null) +vc() { [ -n "$VCG" ] && "$VCG" "$@" 2>/dev/null; } + +# A device-tree cell is big-endian u32, so od is the portable way to read it as a number. +dtnum() { + [ -r "$1" ] || return 1 + od -An -tu4 --endian=big "$1" 2>/dev/null | tr -d ' \n' +} + +MODEL=$(sysread /proc/device-tree/model) +IS_PI5=0 +case "$MODEL" in *"Raspberry Pi 5"*) IS_PI5=1 ;; esac + +# ---------------------------------------------------------------- identity + +hdr "IDENTITY" +kv "model" "${MODEL:-unknown}" +kv "serial" "$(awk '/^Serial/{print $3}' /proc/cpuinfo 2>/dev/null)" +kv "kernel" "$(uname -r)" +kv "os" "$(. /etc/os-release 2>/dev/null && echo "$PRETTY_NAME")" +kv "firmware" "$(vc version | head -1)" +kv "uptime" "$(awk '{printf "%.1f h", $1/3600}' /proc/uptime)" +kv "loadavg" "$(awk '{print $1", "$2", "$3}' /proc/loadavg)" +[ -n "$VCG" ] || warn "vcgencmd not found: rail, throttle and config readings unavailable" + +# ------------------------------------------------------------- power input + +hdr "POWER IN (what the Pi believes it may draw)" + +EXT5V=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') +BATTV=$(vc pmic_read_adc BATT_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') + +if [ -n "$EXT5V" ]; then + kv "input voltage (EXT5V)" "$EXT5V V" + # Below 4.75V the SoC is out of spec, and 4.8V is where sag starts costing USB stability. + awk -v v="$EXT5V" 'BEGIN{exit !(v < 4.75)}' && bad "input voltage below 4.75V spec minimum" + awk -v v="$EXT5V" 'BEGIN{exit !(v >= 4.75 && v < 4.90)}' && warn "input voltage sagging, check supply and cable" + awk -v v="$EXT5V" 'BEGIN{exit !(v >= 4.90)}' && ok "input voltage healthy" +else + note "input voltage not readable (needs a Pi 5 with PMIC support)" +fi +[ -n "$BATTV" ] && kv "RTC battery" "$BATTV V" + +# max_current is what the firmware concluded, whether by PD negotiation or by EEPROM override. +MAXCUR='' +for n in /proc/device-tree/chosen/power/max_current \ + /proc/device-tree/chosen/power/max_current_ma \ + /sys/firmware/devicetree/base/chosen/power/max_current; do + MAXCUR=$(dtnum "$n") && [ -n "$MAXCUR" ] && break +done +if [ -n "$MAXCUR" ]; then + kv "firmware PSU budget" "$MAXCUR mA" +else + note "firmware PSU budget node not present" +fi + +PSUCFG='' +if have rpi-eeprom-config; then + PSUCFG=$(rpi-eeprom-config 2>/dev/null | sed -n 's/^PSU_MAX_CURRENT=//p') +fi +kv "PSU_MAX_CURRENT (eeprom)" "${PSUCFG:-unset}" + +USBMAX=$(vc get_config usb_max_current_enable | cut -d= -f2) +kv "usb_max_current_enable" "${USBMAX:-0}" + +if [ "$IS_PI5" = 1 ]; then + # PSU_MAX_CURRENT does NOT raise the port limit, only usb_max_current_enable does: forums.raspberrypi.com t=388128. + USB_BUDGET=600 + [ "${USBMAX:-0}" = 1 ] && USB_BUDGET=1600 + kv "effective USB budget" "$USB_BUDGET mA" + + if [ "${USBMAX:-0}" != 1 ]; then + bad "USB ports capped at 600mA: one USB3 stick's inrush can exceed this and cut VBUS to every port" + note "fix: append usb_max_current_enable=1 to /boot/firmware/config.txt and reboot" + [ -n "$PSUCFG" ] && + bad "PSU_MAX_CURRENT=$PSUCFG is set but does not raise the port limit: it only hides the warning" + fi + # The 900mA belief is cosmetic, and it is the only automatic signal that a box has an undersized PSU. + if [ -z "$PSUCFG" ] && [ "${MAXCUR:-0}" -lt 5000 ] 2>/dev/null; then + note "firmware assumes a ${MAXCUR:-3000}mA supply: cosmetic, and worth keeping as an undersized-PSU tell" + fi + if [ -n "$PSUCFG" ] && [ "${MAXCUR:-0}" -lt "$PSUCFG" ] 2>/dev/null; then + bad "PSU_MAX_CURRENT=$PSUCFG is set but firmware reports ${MAXCUR}mA: the eeprom write did not take" + fi +fi + +# -------------------------------------------------------------- pmic rails + +hdr "POWER RAILS (measured by the PMIC)" + +RAILS=$(vc pmic_read_adc) +RAILW='' +if [ -n "$RAILS" ]; then + RAILTBL=$(printf '%s\n' "$RAILS" | awk ' + { + n=$1; val=$2 + sub(/^[^=]*=/, "", val); sub(/[AV]$/, "", val) + key=n; sub(/_[AV]$/, "", key) + if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 + } + END { + for (k in cur) { + if (!(k in volt)) continue + p = cur[k] * volt[k]; tot += p + printf " %-14s %8.4f A %7.4f V %7.3f W\n", k, cur[k], volt[k], p + } + printf "TOTAL %.4f\n", tot + }' | sort) + RAILW=$(printf '%s\n' "$RAILTBL" | sed -n 's/^TOTAL //p') + [ "$VERBOSE" = 1 ] && printf '%s\n' "$RAILTBL" | grep -v '^TOTAL' + if [ -n "$RAILW" ]; then + kv "instrumented rails" "$(awk -v w="$RAILW" 'BEGIN{printf "%.2f W", w}')" + # jfikar's linear fit against a USB-C meter, correcting for rails the PMIC does not see. + kv "board total (calibrated)" "$(awk -v w="$RAILW" 'BEGIN{printf "%.2f W", w*1.1451+0.5879}')" + note "calibration real=pmic*1.1451+0.5879 (jfikar/RPi5-power); excludes USB VBUS, NVMe and HATs" + fi +else + note "no PMIC rail data (Pi 4 and earlier do not expose this)" +fi + +# ------------------------------------------------------------- usb loading + +hdr "POWER OUT (USB devices and their declared draw)" + +USB_TOTAL=0 +USB_ROWS='' +for d in /sys/bus/usb/devices/*; do + [ -r "$d/bMaxPower" ] || continue + p=$(sysread "$d/bMaxPower") + ma=${p%mA} + case "${ma:-x}" in '' | *[!0-9]*) continue ;; esac + dev=$(basename "$d") + case "$dev" in usb*) continue ;; esac + prod=$(sysread "$d/product") + vid=$(sysread "$d/idVendor") + pid=$(sysread "$d/idProduct") + spd=$(sysread "$d/speed") + drv='' + for i in "$d":*; do + [ -e "$i/driver" ] && drv="$drv $(basename "$(readlink -f "$i/driver")")" + done + USB_TOTAL=$((USB_TOTAL + ma)) + USB_ROWS="$USB_ROWS$(printf ' %-8s %6smA %7sM %-24s %s:%s %s\n' \ + "$dev" "$ma" "${spd:-?}" "${prod:-unknown}" "$vid" "$pid" "${drv# }")"$'\n' +done + +if [ -n "$USB_ROWS" ]; then + [ "$VERBOSE" = 1 ] && printf '%s' "$USB_ROWS" + kv "devices attached" "$(printf '%s' "$USB_ROWS" | grep -c .)" + kv "declared draw total" "$USB_TOTAL mA" + if [ "$IS_PI5" = 1 ]; then + kv "against budget" "$(awk -v u="$USB_TOTAL" -v b="$USB_BUDGET" 'BEGIN{printf "%.0f%% of %dmA", u*100/b, b}')" + if [ "$USB_TOTAL" -gt "$USB_BUDGET" ]; then + bad "declared USB draw exceeds the port budget: over-current trips are expected under load" + elif [ "$USB_TOTAL" -gt $((USB_BUDGET * 80 / 100)) ]; then + warn "declared USB draw is above 80% of budget, leaving no room for inrush" + else + ok "USB draw within budget" + fi + fi + note "declared is bMaxPower, a descriptor claim; actual draw is usually lower at idle and higher at inrush" +else + note "no USB devices with a readable bMaxPower" +fi + +# A bus-powered hub carrying high-draw devices is the classic hidden over-subscription. +for d in /sys/bus/usb/devices/*; do + [ -r "$d/bDeviceClass" ] || continue + [ "$(sysread "$d/bDeviceClass")" = "09" ] || continue + dev=$(basename "$d") + hp=$(sysread "$d/bMaxPower") + kids=0 + kidma=0 + for c in /sys/bus/usb/devices/"$dev".*; do + [ -r "$c/bMaxPower" ] || continue + kids=$((kids + 1)) + k=$(sysread "$c/bMaxPower") + k=${k%mA} + case "${k:-x}" in '' | *[!0-9]*) continue ;; esac + kidma=$((kidma + k)) + done + [ "$kids" = 0 ] && continue + kv "hub $dev" "self-declared $hp, $kids devices drawing ${kidma}mA" + # A hub declaring 100mA is bus powered, and 100mA cannot legally feed downstream ports. + if [ "${hp%mA}" -le 100 ] 2>/dev/null && [ "$kidma" -gt 100 ]; then + bad "hub $dev appears bus powered but carries ${kidma}mA of devices: fit a powered hub" + fi +done + +# --------------------------------------------------------- throttle status + +hdr "THROTTLING AND UNDERVOLTAGE" + +TH=$(vc get_throttled | cut -d= -f2) +if [ -n "$TH" ]; then + kv "get_throttled" "$TH" + thv=$((TH)) + b() { [ $((thv & (1 << $1))) -ne 0 ] && echo yes || echo no; } + if [ "$thv" = 0 ]; then + ok "no undervoltage or throttling, now or since boot" + else + [ "$(b 0)" = yes ] && bad "undervoltage RIGHT NOW" + [ "$(b 1)" = yes ] && warn "arm frequency capped right now" + [ "$(b 2)" = yes ] && bad "currently throttled" + [ "$(b 3)" = yes ] && warn "soft temperature limit active" + [ "$(b 16)" = yes ] && bad "undervoltage has occurred since boot" + [ "$(b 17)" = yes ] && warn "arm frequency capping has occurred since boot" + [ "$(b 18)" = yes ] && warn "throttling has occurred since boot" + [ "$(b 19)" = yes ] && warn "soft temperature limit reached since boot" + fi +fi + +# The hwmon index moves between boards and kernels, so never hardcode it. +for h in /sys/class/hwmon/hwmon*; do + [ "$(sysread "$h/name")" = rpi_volt ] || continue + a=$(sysread "$h/in0_lcrit_alarm") + kv "hwmon $(basename "$h") lcrit" "${a:-n/a}" + [ "${a:-0}" = 1 ] && bad "kernel undervoltage alarm is set" +done + +UV=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'under-voltage') +OC=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') +kv "undervoltage log lines" "${UV:-0}" +kv "over-current log lines" "${OC:-0}" +[ "${OC:-0}" -gt 0 ] && bad "kernel has logged over-current events: USB VBUS has been cut at least once" + +# Sysfs counters can read zero while the journal shows trips, so both are reported. +for p in /sys/bus/usb/devices/*-port*/over_current_count; do + [ -r "$p" ] || continue + c=$(sysread "$p") + [ "${c:-0}" = 0 ] && continue + port=$(basename "$(dirname "$p")") + bad "port $port over_current_count=$c" +done + +# ------------------------------------------------------------ thermal load + +hdr "THERMAL AND CLOCKS" +if [ -n "$VCG" ]; then + kv "soc temperature" "$(vc measure_temp | cut -d= -f2)" + kv "core voltage" "$(vc measure_volts core | cut -d= -f2)" + kv "arm clock" "$(awk -v h="$(vc measure_clock arm | cut -d= -f2)" 'BEGIN{printf "%.0f MHz", h/1000000}')" + kv "core clock" "$(awk -v h="$(vc measure_clock core | cut -d= -f2)" 'BEGIN{printf "%.0f MHz", h/1000000}')" +fi +for f in /sys/class/thermal/thermal_zone*/temp; do + [ -r "$f" ] || continue + kv "$(basename "$(dirname "$f")")" "$(awk -v t="$(sysread "$f")" 'BEGIN{printf "%.1f C", t/1000}')" +done + +# ------------------------------------------------------------- input ledger + +hdr "ESTIMATED INPUT DRAW" + +if [ -n "$RAILW" ] && [ -n "$EXT5V" ]; then + awk -v rw="$RAILW" -v usb="$USB_TOTAL" -v v="$EXT5V" 'BEGIN { + board = rw * 1.1451 + 0.5879 + usbw = usb / 1000.0 * 5.0 + tot = board + usbw + printf " %-28s %.2f W\n", "board (calibrated rails)", board + printf " %-28s %.2f W (%dmA declared)\n", "usb peripherals", usbw, usb + printf " %-28s %.2f W\n", "estimated total", tot + printf " %-28s %.2f A at %.2f V\n", "estimated input current", tot / v, v + }' + note "board figure is measured and calibrated; the USB figure is a descriptor sum, so treat the total as +/-20%" + note "fan, HDMI 5V pin and anything on the GPIO 5V rail are NOT included" + note "only an inline DC meter or a DC clamp on the positive lead gives a true input reading" +else + note "insufficient data for an input estimate" +fi + +# ------------------------------------------------------------------- watch + +if [ "$WATCH" != 0 ]; then + hdr "WATCH ${WATCH}s" + note "insert or remove peripherals now to see the transient" + vmin=99 + vmax=0 + wmax=0 + i=0 + oc0=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') + while [ "$i" -lt "$WATCH" ]; do + v=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') + w=$(vc pmic_read_adc | awk ' + { n=$1; val=$2; sub(/^[^=]*=/,"",val); sub(/[AV]$/,"",val) + key=n; sub(/_[AV]$/,"",key) + if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 } + END { for (k in cur) if (k in volt) t += cur[k]*volt[k]; printf "%.3f", t }') + t=$(vc get_throttled | cut -d= -f2) + [ -n "$v" ] && { + vmin=$(awk -v a="$vmin" -v b="$v" 'BEGIN{print (ba)?b:a}') + } + [ -n "$w" ] && wmax=$(awk -v a="$wmax" -v b="$w" 'BEGIN{print (b>a)?b:a}') + [ "$VERBOSE" = 1 ] && printf ' %3ds %sV %sW throttled=%s\n' "$i" "${v:-?}" "${w:-?}" "${t:-?}" + [ "${t:-0x0}" != "0x0" ] && bad "throttled=$t at t=${i}s" + i=$((i + 1)) + sleep 1 + done + oc1=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') + kv "input voltage min/max" "$vmin V / $vmax V" + kv "rail power peak" "$wmax W" + kv "over-current events" "$((oc1 - oc0)) during the window" + [ "$((oc1 - oc0))" -gt 0 ] && bad "VBUS was cut during the watch window" + awk -v a="$vmin" -v b="$vmax" 'BEGIN{exit !(b-a > 0.15)}' && + warn "input voltage moved more than 150mV: the supply or cabling is loaded near its limit" +fi + +# ------------------------------------------------------------------ stress + +# Never load the SoC mid-print: a thermal or voltage event during a job ruins the part. +require_idle_printer() { + local st + st=$(curl -s --max-time 3 \ + 'http://127.0.0.1:7125/printer/objects/query?print_stats' 2>/dev/null | + sed -n 's/.*"state": *"\([a-z]*\)".*/\1/p') + case "$st" in + printing | paused) + bad "printer state is '$st': refusing to run a load test" + exit 1 + ;; + '') + if [ "$FORCE" != 1 ]; then + bad "cannot reach moonraker to confirm the printer is idle: rerun with --force if you are sure" + exit 1 + fi + warn "printer state unknown, proceeding because --force was given" + ;; + *) note "printer state '$st', safe to load" ;; + esac +} + +if [ "$STRESS" != 0 ]; then + hdr "STRESS ${STRESS}s" + require_idle_printer + + v0=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') + kv "idle input voltage" "${v0:-?} V" + n=$(nproc) + for _ in $(seq "$n"); do + timeout "$STRESS" awk 'BEGIN{for(;;)x+=1}' & + done + sleep $((STRESS / 2)) + v1=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') + w1=$(vc pmic_read_adc | awk ' + { n=$1; val=$2; sub(/^[^=]*=/,"",val); sub(/[AV]$/,"",val) + key=n; sub(/_[AV]$/,"",key) + if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 } + END { for (k in cur) if (k in volt) t += cur[k]*volt[k]; printf "%.3f", t }') + t1=$(vc get_throttled | cut -d= -f2) + wait + kv "loaded input voltage" "${v1:-?} V" + kv "loaded rail power" "${w1:-?} W" + kv "loaded temperature" "$(vc measure_temp | cut -d= -f2)" + kv "throttled under load" "${t1:-?}" + if [ -n "$v0" ] && [ -n "$v1" ]; then + awk -v a="$v0" -v b="$v1" 'BEGIN{printf " %-28s %.3f V\n", "voltage sag under load", a-b}' + awk -v a="$v0" -v b="$v1" 'BEGIN{exit !(a-b > 0.20)}' && + bad "supply sags more than 200mV under CPU load: the PSU or its cabling is undersized" + awk -v a="$v0" -v b="$v1" 'BEGIN{exit !(a-b <= 0.20)}' && + ok "supply holds up under CPU load" + fi + [ "${t1:-0x0}" != "0x0" ] && bad "throttling occurred under load: $t1" +fi + +# ------------------------------------------------------------------- burn + +# Adds one load domain per stage so the limit that binds first is measured rather than guessed. +if [ "$BURN" != 0 ]; then + hdr "BURN ${BURN}s per stage" + require_idle_printer + + ext5v() { vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p'; } + rail_w() { + vc pmic_read_adc | awk ' + { n=$1; val=$2; sub(/^[^=]*=/,"",val); sub(/[AV]$/,"",val) + key=n; sub(/_[AV]$/,"",key) + if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 } + END { for (k in cur) if (k in volt) t += cur[k]*volt[k]; printf "%.3f", t }' + } + + NC=$(nproc 2>/dev/null) + case "${NC:-x}" in '' | *[!0-9]*) NC=4 ;; esac + LIMIT=$((BURN * 10 + 120)) + HAVE_SNG=0 + have stress-ng && HAVE_SNG=1 + [ "$HAVE_SNG" = 1 ] || note "stress-ng not installed: falling back to awk loops, which understate real SoC draw" + + # Only a removable disk is ever read, and only for reading, so no printer storage is touched. + BURN_USB='' + for b in /sys/block/sd*; do + [ "$(sysread "$b/removable")" = 1 ] || continue + BURN_USB="/dev/$(basename "$b")" + break + done + [ "$(id -u)" = 0 ] || BURN_USB='' + + BURN_PIDS='' + burn_stop() { + [ -n "$BURN_PIDS" ] && kill $BURN_PIDS 2>/dev/null + BURN_PIDS='' + sleep 1 + } + trap 'burn_stop; echo; note "burn aborted, load killed"; exit 130' INT TERM + + spawn() { + "$@" >/dev/null 2>&1 & + BURN_PIDS="$BURN_PIDS $!" + } + load_cpu() { + if [ "$HAVE_SNG" = 1 ]; then + spawn stress-ng --cpu "$1" --cpu-method matrixprod --timeout "${LIMIT}s" + else + i=0 + while [ "$i" -lt "$1" ]; do + spawn timeout "$LIMIT" awk 'BEGIN{for(;;){x+=1.000001;y=x*x}}' + i=$((i + 1)) + done + fi + } + load_ram() { + if [ "$HAVE_SNG" = 1 ]; then + spawn stress-ng --vm 2 --vm-bytes 25% --timeout "${LIMIT}s" + else + spawn timeout "$LIMIT" awk 'BEGIN{n=3000000;for(i=0;i/dev/null; done" + } + apply_load() { + burn_stop + [ "$1" -gt 0 ] && load_cpu "$1" + [ "$2" = 1 ] && load_ram + [ "$3" = 1 ] && load_usb + sleep 2 + return 0 + } + + # Averages only the settled second half of each stage so ramp-up does not pull the mean. + burn_measure() { + local d="$1" i=0 half v w th tc vsum=0 vn=0 + S_VMIN=99 + S_WMAX=0 + S_TMAX=0 + S_TH=0x0 + half=$((d / 2)) + while [ "$i" -lt "$d" ]; do + v=$(ext5v) + w=$(rail_w) + th=$(vc get_throttled | cut -d= -f2) + tc=$(sysread /sys/class/thermal/thermal_zone0/temp) + case "${v:-x}" in '' | *[!0-9.]*) v='' ;; esac + case "${w:-x}" in '' | *[!0-9.]*) w='' ;; esac + [ -n "$v" ] && S_VMIN=$(awk -v a="$S_VMIN" -v b="$v" 'BEGIN{print (ba)?b:a}') + case "${tc:-x}" in '' | *[!0-9]*) ;; *) S_TMAX=$(awk -v a="$S_TMAX" -v b="$tc" 'BEGIN{print (b>a)?b:a}') ;; esac + case "${th:-0x0}" in 0x0) ;; *) S_TH="$th" ;; esac + if [ "$i" -ge "$half" ] && [ -n "$v" ]; then + vsum=$(awk -v s="$vsum" -v b="$v" 'BEGIN{printf "%.6f", s+b}') + vn=$((vn + 1)) + fi + i=$((i + 1)) + sleep 1 + done + S_VAVG=$(awk -v s="$vsum" -v n="$vn" 'BEGIN{if(n>0)printf "%.5f", s/n}') + return 0 + } + + ABORT=0 + stage() { + burn_measure "$BURN" + awk -v l="$1" -v w="$S_WMAX" -v vm="$S_VMIN" -v va="${S_VAVG:-0}" -v t="$S_TMAX" -v th="$S_TH" \ + 'BEGIN{printf " %-22s %6.2f W %8.4f V %8.4f V %5.1f C %s\n", l, w, vm, va, t/1000, th}' + case "$S_TH" in + 0x0) ;; + *) + bad "throttle or undervoltage bits set during '$1': $S_TH" + ABORT=1 + ;; + esac + awk -v t="$S_TMAX" 'BEGIN{exit !(t / 1000 >= 80)}' && { + bad "SoC reached 80C during '$1': thermal is the binding limit, not power" + ABORT=1 + } + return 0 + } + + oc0=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') + note "each stage holds ${BURN}s; loads are additive and rebuilt from scratch every stage" + printf ' %-22s %8s %10s %10s %7s %s\n' stage rails Vmin Vavg temp throttled + + apply_load 0 0 0 + stage "0 idle" + IDLE_W=$S_WMAX + IDLE_V=${S_VAVG:-0} + PEAK_W=$S_WMAX + PEAK_V=${S_VAVG:-0} + PEAK_T=$S_TMAX + PEAK_LBL="0 idle" + + for spec in "1 cpu x1|1|0|0" "2 cpu x$NC|$NC|0|0" "3 cpu+ram|$NC|1|0" "4 cpu+ram+usb|$NC|1|1"; do + [ "$ABORT" = 0 ] || break + lbl=${spec%%|*} + rest=${spec#*|} + c=${rest%%|*} + rest=${rest#*|} + r=${rest%%|*} + u=${rest#*|} + if [ "$u" = 1 ] && [ -z "$BURN_USB" ]; then + note "skipping '$lbl': no removable USB disk found, or not running as root" + continue + fi + apply_load "$c" "$r" "$u" + stage "$lbl" + PEAK_LBL="$lbl" + PEAK_W=$S_WMAX + PEAK_V=${S_VAVG:-0} + PEAK_T=$S_TMAX + done + + burn_stop + trap - INT TERM + oc1=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') + [ "$((oc1 - oc0))" -gt 0 ] && bad "VBUS was cut $((oc1 - oc0)) time(s) during the burn: USB is the binding limit" + + hdr "HEADROOM ANALYSIS" + kv "peak stage" "$PEAK_LBL" + if [ -n "$BURN_USB" ]; then kv "usb load device" "$BURN_USB"; else kv "usb load device" "none, stage skipped"; fi + + # Source impedance from the idle-to-peak step is what turns a single reading into a projection. + awk -v iw="$IDLE_W" -v pw="$PEAK_W" -v iv="$IDLE_V" -v pv="$PEAK_V" -v pt="$PEAK_T" \ + -v usb="$USB_TOTAL" -v budget="${USB_BUDGET:-0}" ' + BEGIN { + dw = pw - iw; dv = iv - pv + printf " %-28s %.2f W\n", "rail power idle to peak", dw + printf " %-28s %.4f V\n", "voltage sag idle to peak", dv + if (dw <= 0.2) { print " not enough load delta to derive impedance: raise the stage time"; exit } + di = dw / 0.9 / pv + printf " %-28s %.3f A\n", "input current step", di + r = 0 + # Two runs stepped 0.59A/0.76A and produced 104/82 mOhm from an identical sag: under ~1A the step sits inside the EXT5V ADC noise floor, so dV/dI tracks drift, not resistance. + if (di < 1.0) { + print " step is under 1A: impedance and brownout projections suppressed, they are noise here" + } else if (dv > 0.002) { + r = dv / di + printf " %-28s %.0f mOhm (supply plus cable)\n", "source impedance", r * 1000 + head = (pv - 4.70) / r + printf " %-28s %.2f A more before 4.70V\n", "projected sag headroom", head + } else { + print " sag is below the ADC noise floor: impedance is too low to measure, which is a good sign" + } + board = pw * 1.1451 + 0.5879 + tot = board + usb / 1000.0 * 5.0 + printf " %-28s %.2f W = %.2f A at %.2f V\n", "estimated draw at peak", tot, tot / pv, pv + if (r > 0) printf " %-28s %.2f A total\n", "projected brownout current", tot / pv + (pv - 4.70) / r + printf " %-28s %.1f C of 80 C\n", "thermal headroom", 80 - pt / 1000 + printf " %-28s %d mA of %d mA declared\n", "usb budget headroom", budget - usb, budget + }' + note "rail power excludes USB VBUS, so the USB stage shows up as sag and heat, not as rail watts" + note "the PSU nameplate rating is not readable in software: compare the projected figures to it yourself" +fi + +# --bed: does the 24V bed heater pull down the Pi's 5V rail? Answers "shared/coupled supply" vs "independent". +if [ "$BED" != 0 ]; then + hdr "bed heater / 5V rail coupling test" + MURL=http://127.0.0.1:7125 + + case "$BED" in + '' | *[!0-9]*) bad "--bed needs an integer temperature in C" && exit 2 ;; + esac + if [ "$BED" -lt 40 ] || [ "$BED" -gt 110 ]; then + bad "--bed $BED is outside the sane 40-110 C range" + exit 2 + fi + [ -n "$VCG" ] || { + bad "vcgencmd not available: cannot sample the 5V rail" + exit 1 + } + have curl || { + bad "curl not available: cannot drive the bed" + exit 1 + } + + bed_v5() { vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p'; } + bed_thr() { vc get_throttled | cut -d= -f2; } + # Moonraker returns one flat object here, so splitting on separators and taking the value field is enough. + bed_read() { + curl -s --max-time 3 "$MURL/printer/objects/query?heater_bed" 2>/dev/null | + tr ',{}' '\n\n\n' | awk -F': *' ' + /"temperature"/ {t=$2} + /"target"/ {g=$2} + /"power"/ {p=$2} + END {if (t=="") exit 1; printf "%.2f %.2f %.4f\n", t, g, p}' + } + bed_klippy() { curl -s --max-time 3 "$MURL/printer/info" 2>/dev/null | sed -n 's/.*"state": *"\([a-z]*\)".*/\1/p'; } + bed_off() { curl -s --max-time 5 -X POST "$MURL/printer/gcode/script?script=M140%20S0" >/dev/null 2>&1; } + + # This mode commands a heater, so an unreachable moonraker is a hard stop and --force must not bypass it. + BSTATE=$(curl -s --max-time 3 "$MURL/printer/objects/query?print_stats" 2>/dev/null | + sed -n 's/.*"state": *"\([a-z]*\)".*/\1/p') + case "$BSTATE" in + printing | paused) + bad "printer state is '$BSTATE': refusing to command the bed" + exit 1 + ;; + '') + bad "cannot reach moonraker: refusing to command the bed (--force does not apply here)" + exit 1 + ;; + *) note "printer state '$BSTATE'" ;; + esac + KST=$(bed_klippy) + [ "$KST" = ready ] || { + bad "klippy state is '${KST:-unknown}', not ready" + exit 1 + } + + BR=$(bed_read) || { + bad "no heater_bed object: is this printer configured with a heated bed?" + exit 1 + } + B_T0=$(echo "$BR" | cut -d' ' -f1) + awk -v t="$B_T0" -v g="$BED" 'BEGIN{exit !(t > g - 5)}' && { + bad "bed is already at ${B_T0}C: this test needs a cold start to see full heater duty" + exit 1 + } + + warn "this will heat the bed to ${BED}C at full power. Do not touch the bed." + if [ "$ASSUME_YES" != 1 ]; then + [ -t 0 ] || { + bad "stdin is not a tty: rerun with --yes" + exit 1 + } + printf ' type yes to continue: ' + read -r ANS + [ "$ANS" = yes ] || { + note "aborted" + exit 0 + } + fi + + BED_LOG=$(mktemp /tmp/bs-bed-XXXXXX.tsv) + # Any exit path must leave the bed off, including ctrl-c: a hot bed left on unattended is the real hazard. + bed_cleanup() { + bed_off + note "bed commanded off" + } + trap 'bed_cleanup; exit 130' INT TERM + trap 'bed_cleanup' EXIT + + bed_sample() { + local r t pw v th + r=$(bed_read) || return 0 + t=$(echo "$r" | cut -d' ' -f1) + pw=$(echo "$r" | cut -d' ' -f3) + v=$(bed_v5) + th=$(bed_thr) + printf '%s\t%s\t%s\t%s\t%s\t%s\n' "$1" "$2" "$pw" "$t" "${v:-0}" "${th:-NA}" >>"$BED_LOG" + } + + note "phase 1: 20s baseline, bed off" + bed_off + i=0 + while [ "$i" -lt 20 ]; do + bed_sample base "$i" + sleep 1 + i=$((i + 1)) + done + + note "phase 2: heating to ${BED}C (600s cap)" + curl -s --max-time 5 -X POST "$MURL/printer/gcode/script?script=M140%20S${BED}" >/dev/null 2>&1 + i=0 + while [ "$i" -lt 600 ]; do + bed_sample heat "$i" + R=$(bed_read) || break + CT=$(echo "$R" | cut -d' ' -f1) + KS=$(bed_klippy) + if [ "$KS" != ready ]; then + bad "klippy went to '$KS' during the ramp: this is the failure being hunted, see klippy.log" + break + fi + awk -v t="$CT" -v g="$BED" 'BEGIN{exit !(t >= g - 0.5)}' && break + sleep 1 + i=$((i + 1)) + done + + note "phase 3: 60s hold, capturing pwm on/off transitions" + i=0 + while [ "$i" -lt 60 ]; do + bed_sample hold "$i" + sleep 1 + i=$((i + 1)) + done + + note "phase 4: bed off, 10s settle, 20s baseline" + bed_off + sleep 10 + i=0 + while [ "$i" -lt 20 ]; do + bed_sample post "$i" + sleep 1 + i=$((i + 1)) + done + + kv "samples" "$(wc -l <"$BED_LOG") in $BED_LOG" + + # The verdict is gated on 3 sigma of the measured baseline noise, so ADC jitter cannot masquerade as coupling. + awk -F'\t' ' + { + if ($1 == "base" || $1 == "post") { n++; s += $5; ss += $5 * $5; if (bmin == 0 || $5 < bmin) bmin = $5 } + if ($3 >= 0.8) { hn++; hs += $5 } + if ($3 > maxduty) maxduty = $3 + if ($5 > 0 && (vmin == 0 || $5 < vmin)) vmin = $5 + if ($6 != "0x0" && $6 != "NA") thr = $6 + cn++; cx += $3; cy += $5; cxy += $3 * $5; cxx += $3 * $3; cyy += $5 * $5 + } + END { + if (n < 10) { printf " inconclusive: only %d baseline samples\n", n; exit } + mean = s / n + var = ss / n - mean * mean + sd = (var > 0) ? sqrt(var) : 0 + printf " %-28s %.4f V (sd %.4f V, min %.3f V)\n", "baseline 5V", mean, sd, bmin + printf " %-28s %.2f\n", "peak bed duty", maxduty + if (hn < 5) { + printf " %-28s %s\n", "verdict", "INCONCLUSIVE: bed never held >=80% duty for 5s" + exit + } + hm = hs / hn + d = mean - hm + printf " %-28s %.4f V over %d samples\n", "5V at >=80% duty", hm, hn + printf " %-28s %.1f mV\n", "shift under load", d * 1000 + den = sqrt((cxx - cx * cx / cn) * (cyy - cy * cy / cn)) + if (den > 0) printf " %-28s %.3f\n", "corr(bed duty, 5V)", (cxy - cx * cy / cn) / den + printf " %-28s %.3f V\n", "lowest 5V sample", vmin + thr3 = 3 * sd + printf " %-28s %.1f mV\n", "3-sigma noise floor", thr3 * 1000 + if (thr != "") { printf " VERDICT BAD: throttled bits set during the test (%s)\n", thr; exit } + if (vmin < 4.80) { printf " VERDICT BAD: 5V dropped to %.3f V, below the 4.80 V margin\n", vmin; exit } + if (d < thr3) { print " VERDICT OK: no shift above the measured noise floor, rails look independent"; exit } + if (d < 0.050) { printf " VERDICT WARN: %.1f mV shift is real but small: watch it in a closed chassis\n", d * 1000; exit } + printf " VERDICT BAD: %.1f mV shift tracks bed duty, the 5V supply is coupled to the 24V domain\n", d * 1000 + print " this is a hardware fix: bigger DC-DC, thicker/shorter 5V leads, or bulk capacitance at the Pi" + }' "$BED_LOG" + + note "a negative result here does not clear the 24V domain: the Pi cannot see 24V rail sag at all" +fi + +echo diff --git a/scripts/healthcheck/bs-selftest.py b/scripts/healthcheck/bs-selftest.py new file mode 100755 index 00000000..d044dfb2 --- /dev/null +++ b/scripts/healthcheck/bs-selftest.py @@ -0,0 +1,533 @@ +#!/usr/bin/env python3 +"""Offscreen UI selftest emitting TSV STATUS/name/detail rows for bs-healthcheck.sh: catches render breaks (stale/missing generated forms, icons) a running D-Bus-answering process can hide; side-effect-free (no MainWindow/socket/D-Bus/file writes); unused forms WARN not FAIL.""" + +from __future__ import annotations + +import io +import json +import os +import re +import sys +import urllib.error +import urllib.parse +import urllib.request +import xml.etree.ElementTree as ET # nosec B405 - only ever fed our own repo's .qrc files +from collections.abc import Callable, Iterable +from pathlib import Path + +os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") +os.environ.setdefault("PYTHONDONTWRITEBYTECODE", "1") +sys.dont_write_bytecode = True + +# Walk up to the repo root instead of counting directories, so this script survives being moved. +_HERE = Path(__file__).resolve() +ROOT = next( + (p for p in _HERE.parents if (p / "BlocksScreen").is_dir()), _HERE.parent.parent +) +PKG = ROOT / "BlocksScreen" +UIDIR = PKG / "lib" / "ui" +RESDIR = UIDIR / "resources" +MOONRAKER = os.environ.get("BS_MOONRAKER", "http://localhost:7125") + +if str(PKG) not in sys.path: + sys.path.insert(0, str(PKG)) + +_FAILED = 0 +_APP = None + + +def emit(status: str, name: str, detail: str = "") -> None: + """Write one TSV assertion row.""" + global _FAILED + if status == "FAIL": + _FAILED += 1 + detail = " ".join(str(detail).split())[:400] + sys.stdout.write(f"{status}\t{name}\t{detail}\n") + sys.stdout.flush() + + +def guard(name: str, fn: Callable[[], tuple[str, str]]) -> None: + """Run one assertion, turning any escaping exception into a FAIL rather than killing the run.""" + try: + status, detail = fn() + except Exception as exc: # noqa: BLE001 - a crashing probe is itself the finding + emit("FAIL", name, f"{type(exc).__name__}: {exc}") + return + emit(status, name, detail) + + +def _qapp(): + """One shared offscreen QApplication, kept in a global so PyQt cannot collect it mid-run.""" + global _APP + if _APP is None: + from PyQt6 import QtWidgets + + _APP = QtWidgets.QApplication.instance() or QtWidgets.QApplication([]) + return _APP + + +def _load_module(path: Path): + """Import a file by path under a private name, so it cannot collide with the app's own modules.""" + import importlib.util + + spec = importlib.util.spec_from_file_location(f"_bsselftest_{path.stem}", path) + if spec is None or spec.loader is None: + raise ImportError(f"{path.name}: no loader") + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +_RES_LOADED: list[str] = [] +_RES_KEEPALIVE: list[object] = [] + + +def _load_resources() -> list[str]: + """Register every compiled resource bundle once (so :/ lookups work later); keeps module objects alive on purpose since Qt holds a pointer into their bytes and GC'ing one segfaults the next :/ read.""" + if _RES_LOADED: + return _RES_LOADED + _qapp() + for m in sorted(RESDIR.glob("*_rc.py")): + try: + _RES_KEEPALIVE.append(_load_module(m)) + _RES_LOADED.append(m.name) + except Exception as exc: # noqa: BLE001 + _RES_LOADED.append(f"!{m.name}: {type(exc).__name__}: {exc}") + return _RES_LOADED + + +def _py_sources() -> list[Path]: + return [p for p in PKG.rglob("*.py") if "__pycache__" not in p.parts] + + +_LIVE_UI: set[str] | None = None + + +def _live_ui_modules() -> set[str]: + """Generated modules some other source file imports: only those can break the real UI.""" + global _LIVE_UI + if _LIVE_UI is not None: + return _LIVE_UI + stems = {g.stem for g in UIDIR.glob("*_ui.py")} + live: set[str] = set() + for py in _py_sources(): + if py.parent == UIDIR: + continue + try: + text = py.read_text(errors="replace") + except OSError: + continue + live |= { + s for s in stems if re.search(rf"(? bool: + return ( + path.parent == UIDIR + and path.stem.endswith("_ui") + and path.stem not in _live_ui_modules() + ) + + +# --------------------------------------------------------------------------- resources + + +def t_rc_import() -> tuple[str, str]: + """Every compiled resource bundle imports and registers.""" + loaded = _load_resources() + if not loaded: + return "FAIL", f"no *_rc.py bundles under {RESDIR}" + bad = [x[1:] for x in loaded if x.startswith("!")] + if bad: + return "FAIL", "; ".join(bad) + return "PASS", f"{len(loaded)} bundle(s) registered" + + +def t_qrc_assets() -> tuple[str, str]: + """Every file listed in a .qrc still exists, so the next rcc rebuild cannot silently drop it.""" + qrcs = sorted(RESDIR.glob("*.qrc")) + if not qrcs: + return "SKIP", "no .qrc files" + missing = [] + total = 0 + for q in qrcs: + try: + root = ET.parse(q).getroot() # nosec B314 - only ever fed our own repo's .qrc files + except ET.ParseError as exc: + missing.append(f"{q.name}: malformed ({exc})") + continue + for f in root.iter("file"): + total += 1 + rel = (f.text or "").strip() + if rel and not (q.parent / rel).exists(): + missing.append(f"{q.name}:{rel}") + if missing: + return "FAIL", f"{len(missing)}/{total} listed asset(s) missing: " + ", ".join( + missing[:8] + ) + return "PASS", f"{total} asset(s) present" + + +_RES_REF = re.compile(r'["\'](:/[A-Za-z0-9_\-./]+)["\']') + + +def _resource_refs() -> tuple[dict[str, set[str]], dict[str, set[str]]]: + """Literal :/ paths in source, split into refs from live code and refs from dead generated forms.""" + live: dict[str, set[str]] = {} + dead: dict[str, set[str]] = {} + for py in _py_sources(): + try: + text = py.read_text(errors="replace") + except OSError: + continue + bucket = dead if _is_dead_ui(py) else live + for path in _RES_REF.findall(text): + if "{" in path or "%" in path: + continue + bucket.setdefault(path, set()).add(py.name) + return live, dead + + +def t_resource_refs_resolve() -> tuple[str, str]: + """Every literal :/icon path live code asks for resolves, otherwise that control renders blank.""" + from PyQt6 import QtCore + + _load_resources() + live, _ = _resource_refs() + if not live: + return "SKIP", "no literal resource references found" + missing = [p for p in live if not QtCore.QFile(p).exists()] + if missing: + detail = ", ".join( + f"{p} (in {','.join(sorted(live[p]))})" for p in sorted(missing)[:8] + ) + return "FAIL", f"{len(missing)}/{len(live)} unresolved: {detail}" + return "PASS", f"{len(live)} reference(s) resolve" + + +def t_dead_resource_refs() -> tuple[str, str]: + """Unresolved :/ paths inside generated forms nothing imports: dead weight, not a field fault.""" + from PyQt6 import QtCore + + _load_resources() + _, dead = _resource_refs() + missing = [p for p in dead if not QtCore.QFile(p).exists()] + if missing: + return "WARN", f"{len(missing)} unresolved in unused forms: " + ", ".join( + sorted(missing)[:6] + ) + return "PASS", "" + + +def t_fonts_loadable() -> tuple[str, str]: + """The bundled fonts actually load, otherwise Qt silently substitutes and the layout shifts.""" + from PyQt6 import QtCore, QtGui + + _qapp() + _load_resources() + it = QtCore.QDirIterator( + ":", QtCore.QDir.Filter.Files, QtCore.QDirIterator.IteratorFlag.Subdirectories + ) + fonts = [] + while it.hasNext(): + p = it.next() + if p.lower().endswith((".ttf", ".otf")): + fonts.append(p) + if not fonts: + return "SKIP", "no fonts in the resource tree" + bad = [f for f in fonts if QtGui.QFontDatabase.addApplicationFont(f) == -1] + if bad: + return "FAIL", f"rejected by Qt: {', '.join(bad[:6])}" + return "PASS", f"{len(fonts)} font(s) loaded" + + +# --------------------------------------------------------------------------- ui layer + + +def _ui_pairs() -> list[tuple[Path, Path]]: + return [(u, u.with_name(u.stem + "_ui.py")) for u in sorted(UIDIR.glob("*.ui"))] + + +def t_ui_generated_present() -> tuple[str, str]: + """Every .ui the app uses has its generated counterpart, or that tab comes up blank.""" + live = _live_ui_modules() + missing = [ + u.name for u, g in _ui_pairs() if not g.exists() and u.stem + "_ui" in live + ] + if missing: + return "FAIL", "no generated _ui.py for: " + ", ".join(missing) + return "PASS", f"{len(_ui_pairs())} form(s)" + + +def t_orphan_ui_files() -> tuple[str, str]: + """.ui files with no generated module and no importer: leftovers, and they blur the real set.""" + live = _live_ui_modules() + orphan = [ + u.name for u, g in _ui_pairs() if not g.exists() and u.stem + "_ui" not in live + ] + if orphan: + return "WARN", "never compiled and never imported: " + ", ".join(orphan) + return "PASS", "" + + +_SHAPE = re.compile( + r'setObjectName\("([^"]+)"\)|(Qt\w+\.Q\w+)\(|["\'](:/[A-Za-z0-9_\-./]+)["\']' +) + + +def _shape(src: str) -> list[str]: + """Structural fingerprint (object names, widget classes, resource paths) instead of a text diff, since pyuic6 embeds its own version and the generating machine's absolute path into every output.""" + return sorted(next(g for g in m.groups() if g) for m in _SHAPE.finditer(src)) + + +def t_ui_generated_current() -> tuple[str, str]: + """The generated _ui.py still matches its .ui, so an edited form cannot ship uncompiled.""" + from PyQt6 import uic + + stale = [] + checked = 0 + for u, g in _ui_pairs(): + if not g.exists(): + continue + buf = io.StringIO() + try: + uic.compileUi(str(u), buf) # type: ignore[attr-defined] + except Exception as exc: # noqa: BLE001 + stale.append(f"{u.name}: will not compile ({type(exc).__name__}: {exc})") + continue + checked += 1 + want, have = _shape(buf.getvalue()), _shape(g.read_text(errors="replace")) + if want != have: + delta = set(want) ^ set(have) + stale.append(f"{u.name} ({len(delta)} element(s) differ)") + if stale: + return "WARN", f"{len(stale)}/{checked} need a pyuic6 rerun: " + ", ".join( + stale[:8] + ) + return "PASS", f"{checked} form(s) up to date" + + +def _build_forms(paths: Iterable[Path]) -> tuple[int, list[str]]: + """Build every Ui_* class in the given generated modules onto a host widget.""" + from PyQt6 import QtWidgets + + _qapp() + _load_resources() + built = 0 + bad: list[str] = [] + for g in paths: + try: + mod = _load_module(g) + except Exception as exc: # noqa: BLE001 + bad.append(f"{g.name}: import {type(exc).__name__}: {exc}") + continue + for attr in dir(mod): + if not attr.startswith("Ui_"): + continue + cls = getattr(mod, attr) + if getattr(cls, "setupUi", None) is None: + continue + # setupUi's base class is whatever the form was drawn on; try each plausible host, keep the first error (later ones are just wrong-host noise). + first: Exception | None = None + ok = False + for host in ( + QtWidgets.QWidget, + QtWidgets.QStackedWidget, + QtWidgets.QMainWindow, + QtWidgets.QDialog, + QtWidgets.QTabWidget, + ): + try: + cls().setupUi(host()) + built += 1 + ok = True + break + except Exception as exc: # noqa: BLE001 + first = first or exc + if not ok: + bad.append(f"{g.name}:{attr}: {type(first).__name__}: {first}") + return built, bad + + +def t_widgets_build() -> tuple[str, str]: + """Every form the app imports builds onto a host widget: the real render path, minus the app.""" + live = sorted(g for g in UIDIR.glob("*_ui.py") if g.stem in _live_ui_modules()) + if not live: + return ( + "FAIL", + "no generated form is imported anywhere, the UI cannot be assembled", + ) + built, bad = _build_forms(live) + if bad: + return "FAIL", f"{len(bad)} failed: " + "; ".join(bad[:6]) + if not built: + return "FAIL", "no Ui_* classes found to build" + return "PASS", f"{built} widget class(es) build from {len(live)} module(s)" + + +def t_orphan_forms() -> tuple[str, str]: + """Generated forms nothing imports: harmless in the field, but they mask real breakage here.""" + dead = sorted( + g.stem for g in UIDIR.glob("*_ui.py") if g.stem not in _live_ui_modules() + ) + if dead: + return "WARN", f"{len(dead)} unused generated form(s): " + ", ".join(dead) + return "PASS", "" + + +def t_stylesheets_parse() -> tuple[str, str]: + """Qt swallows malformed stylesheet rules silently, so an unbalanced brace loses whole themes.""" + sheets = list(PKG.rglob("*.qss")) + list(PKG.rglob("*.css")) + if not sheets: + return "SKIP", "no stylesheet files" + bad = [] + for s in sheets: + text = s.read_text(errors="replace") + if text.count("{") != text.count("}"): + bad.append( + f"{s.name}: {text.count('{')} open vs {text.count('}')} close braces" + ) + if bad: + return "FAIL", "; ".join(bad) + return "PASS", f"{len(sheets)} stylesheet(s) balanced" + + +# --------------------------------------------------------------------------- runtime + + +def _moon(path: str, timeout: float = 6.0) -> dict: + url = f"{MOONRAKER}{path}" + if urllib.parse.urlsplit(url).scheme not in ("http", "https"): + raise ValueError(f"refusing non-http(s) BS_MOONRAKER scheme: {url}") + with urllib.request.urlopen(url, timeout=timeout) as fh: # nosec B310 - scheme checked above + return json.load(fh) + + +def t_moonraker_ready() -> tuple[str, str]: + """Moonraker is up and klippy is ready, which is the state the UI needs to leave its splash.""" + try: + res = _moon("/server/info")["result"] + except (urllib.error.URLError, OSError, KeyError, ValueError) as exc: + return "SKIP", f"moonraker not answering: {type(exc).__name__}" + state = res.get("klippy_state", "?") + if res.get("klippy_connected") is not True: + return ( + "FAIL", + f"moonraker is up but klippy_connected=false, klippy_state={state}", + ) + if state != "ready": + return "FAIL", f"klippy_state={state}, the UI will sit on the connection screen" + return "PASS", f"klippy_state={state}" + + +def t_moonraker_objects() -> tuple[str, str]: + """The printer objects the UI reads must exist, or those panels show placeholders forever.""" + required = ( + "toolhead", + "extruder", + "print_stats", + "virtual_sdcard", + "idle_timeout", + "gcode_move", + ) + try: + objs = _moon("/printer/objects/list")["result"]["objects"] + except (urllib.error.URLError, OSError, KeyError, ValueError) as exc: + return "SKIP", f"moonraker not answering: {type(exc).__name__}: {exc}" + missing = [o for o in required if o not in objs] + if missing: + return "FAIL", "klipper is not exposing: " + ", ".join(missing) + return "PASS", f"{len(objs)} object(s) exposed" + + +def t_moonraker_optional_objects() -> tuple[str, str]: + """Objects whose panels degrade rather than break when the printer does not define them.""" + optional = ( + "heater_bed", + "display_status", + "fan", + "filament_switch_sensor", + "bed_mesh", + ) + try: + objs = _moon("/printer/objects/list")["result"]["objects"] + except (urllib.error.URLError, OSError, KeyError, ValueError) as exc: + return "SKIP", f"moonraker not answering: {type(exc).__name__}" + absent = [ + o for o in optional if not any(x == o or x.startswith(o + " ") for x in objs) + ] + if absent: + return "WARN", "not defined on this printer: " + ", ".join(absent) + return "PASS", "" + + +def t_config_parses() -> tuple[str, str]: + """BlocksScreen.cfg parses, so the UI is not silently falling back to untested defaults.""" + import configparser + + env = os.environ.get("BS_CONFIG") + cands = [Path(env)] if env else [] + cands += [ + Path.home() / "printer_data" / "config" / "BlocksScreen.cfg", + ROOT / "BlocksScreen.cfg", + ] + cfg_path = next((c for c in cands if c.is_file()), None) + if cfg_path is None: + return "SKIP", "BlocksScreen.cfg not found" + parser = configparser.ConfigParser(strict=False, inline_comment_prefixes=(";", "#")) + try: + parser.read(cfg_path) + except configparser.Error as exc: + return "FAIL", f"{cfg_path}: {exc}" + return "PASS", f"{cfg_path.name}: {len(parser.sections())} section(s)" + + +def t_no_dev_flag() -> tuple[str, str]: + """BLOCKSCREEN_DEV shipping enabled would leave debug affordances on a customer machine.""" + val = os.environ.get("BLOCKSCREEN_DEV") + unit = Path("/etc/systemd/system/BlocksScreen.service") + in_unit = "" + if unit.is_file(): + for ln in unit.read_text(errors="replace").splitlines(): + if "BLOCKSCREEN_DEV" in ln and not ln.strip().startswith("#"): + in_unit = ln.strip() + if val not in (None, "", "0") or in_unit: + return "WARN", f"env={val!r} unit={in_unit!r}" + return "PASS", "" + + +TESTS: tuple[tuple[str, Callable[[], tuple[str, str]]], ...] = ( + ("compiled resource bundles register", t_rc_import), + ("qrc-listed assets present on disk", t_qrc_assets), + ("literal :/ resource references resolve", t_resource_refs_resolve), + ("bundled fonts load", t_fonts_loadable), + ("every .ui has a generated _ui.py", t_ui_generated_present), + ("generated forms the app imports build", t_widgets_build), + ("generated _ui.py match their .ui", t_ui_generated_current), + ("stylesheets balanced", t_stylesheets_parse), + ("klippy ready via moonraker", t_moonraker_ready), + ("required printer objects exposed", t_moonraker_objects), + ("optional printer objects", t_moonraker_optional_objects), + ("BlocksScreen.cfg parses", t_config_parses), + ("BLOCKSCREEN_DEV not enabled", t_no_dev_flag), + ("no unused generated forms", t_orphan_forms), + ("no orphan .ui files", t_orphan_ui_files), + ("no unresolved icons in unused forms", t_dead_resource_refs), +) + + +def main() -> int: + """Run every assertion and return 1 if any of them failed.""" + only = sys.argv[1] if len(sys.argv) > 1 else "" + for name, fn in TESTS: + if only and only not in name: + continue + guard(name, fn) + return 1 if _FAILED else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/healthcheck/bs-usb-diag.sh b/scripts/healthcheck/bs-usb-diag.sh new file mode 100755 index 00000000..4fbf3a82 --- /dev/null +++ b/scripts/healthcheck/bs-usb-diag.sh @@ -0,0 +1,1079 @@ +#!/usr/bin/env bash +# USB fault forensics for boxes where inserting a flash drive shuts klipper down. +# +# The failure this exists to explain: a USB 3.0+ stick makes klipper report "Lost communication with MCU" or "Timer too close", and there are four physically distinct causes needing different fixes, so guessing is expensive: +# +# 1. power the stick's inrush trips the port current limit, the hub cuts VBUS for the whole +# port group, and the MCU browns out with it -> dmesg "over-current change" +# 2. bus a broken UAS bridge makes the xhci controller reset the link, which bounces sibling +# ports including the MCU's -> "uas_eh_device_reset_handler" +# 3. enum link training fails and retries in a loop, holding the controller and stalling the +# MCU's serial transfers past klipper's deadline -> "error -71", "error -110" +# 4. load mounting exfat/ntfs through FUSE spikes host cpu and the MCU misses its window +# -> klipper "Timer too close" +# +# Read-only in every mode. Never mounts, never sends gcode, never restarts a service. +# +# Usage: +# bs-usb-diag.sh forensic report on the current box + correlated history +# bs-usb-diag.sh --watch [SECS] live capture while the operator inserts the suspect drive +# bs-usb-diag.sh --monitor [SECS] same capture, passive: safe during a print, plug nothing +# bs-usb-diag.sh --check TSV assertions for bs-healthcheck.sh +# bs-usb-diag.sh --history only the historic MCU-shutdown vs USB-event correlation + +set -u + +MODE=report +WATCH_SECS=180 +FORCE=false +MONITOR=false +QUIET=false +NO_REPORT=false + +while [ $# -gt 0 ]; do + case "$1" in + --watch) + MODE=watch + case "${2:-}" in '' | -*) ;; *) + WATCH_SECS=$2 + shift + ;; + esac + ;; + --monitor) + MODE=watch + MONITOR=true + case "${2:-}" in '' | -*) ;; *) + WATCH_SECS=$2 + shift + ;; + esac + ;; + --check) MODE=check ;; + --history) MODE=history ;; + --force) FORCE=true ;; + -q | --quiet) QUIET=true ;; + --no-report) NO_REPORT=true ;; + -h | --help) + sed -n '2,25p' "$0" + exit 0 + ;; + *) + echo "unknown option: $1" >&2 + exit 2 + ;; + esac + shift +done +case "${WATCH_SECS:-x}" in '' | *[!0-9]*) WATCH_SECS=180 ;; esac + +BS_USER="${SUDO_USER:-$(id -un)}" +# Walk up to the repo root instead of counting directories, so this script survives being moved. +BS_PATH=$(dirname -- "$(readlink -f -- "$0")") +while [ "$BS_PATH" != / ] && [ ! -d "$BS_PATH/BlocksScreen" ]; do + BS_PATH=$(dirname -- "$BS_PATH") +done +[ -d "$BS_PATH/BlocksScreen" ] || BS_PATH=$(dirname -- "$(dirname -- "$(readlink -f -- "$0")")") +if [ "$BS_USER" = root ] && [ -d "$BS_PATH/BlocksScreen" ]; then + BS_USER=$(stat -c '%U' "$BS_PATH" 2>/dev/null || echo root) +fi +BS_HOME=$(getent passwd "$BS_USER" | cut -d: -f6) +[ -n "$BS_HOME" ] || BS_HOME="$HOME" +LOGDIR="$BS_HOME/printer_data/logs" +CFGDIR="$BS_HOME/printer_data/config" +MOON="http://localhost:7125" +IS_ROOT=false +[ "$(id -u)" = "0" ] && IS_ROOT=true + +# The field has no SSH, so the report has to land where moonraker already serves logs to the UI. +REPORT="" +if [ "$MODE" != check ] && ! $NO_REPORT && [ -d "$LOGDIR" ]; then + REPORT="$LOGDIR/bs-usb-diag-$(date +%Y%m%d-%H%M%S).log" + : >"$REPORT" 2>/dev/null || REPORT="" + [ -n "$REPORT" ] && $IS_ROOT && [ "$BS_USER" != root ] && chown "$BS_USER" "$REPORT" 2>/dev/null +fi + +if [ -t 1 ] && [ "$MODE" != check ]; then + C_HDR=$'\033[1;36m' C_OK=$'\033[32m' C_WARN=$'\033[33m' C_BAD=$'\033[31m' C_OFF=$'\033[0m' +else + C_HDR="" C_OK="" C_WARN="" C_BAD="" C_OFF="" +fi + +out() { + $QUIET || printf '%s\n' "$*" + [ -n "$REPORT" ] && printf '%s\n' "$*" >>"$REPORT" + return 0 +} +hdr() { out ""; out "${C_HDR}== $* ==${C_OFF}"; } +ok() { out " ${C_OK}ok${C_OFF} $*"; } +bad() { out " ${C_BAD}BAD${C_OFF} $*"; } +susp() { out " ${C_WARN}????${C_OFF} $*"; } +kv() { out "$(printf ' %-28s %s' "$1" "$2")"; } + +# --check speaks TSV so the healthcheck can record each row at its own tier. +emit() { printf '%s\t%s\t%s\n' "$1" "$2" "${3:-}"; } + +# ---------------------------------------------------------------- sysfs helpers + +# Every USB device node, one "syspath" per line, interfaces excluded. +usb_devs() { + local d + for d in /sys/bus/usb/devices/*; do + [ -f "$d/idVendor" ] || continue + echo "$d" + done +} + +sysread() { cat "$1" 2>/dev/null | head -1 | tr -d '\0'; } + +# The interface drivers bound under one device, space separated ("uas", "usb-storage", "cdc_acm"). +dev_drivers() { + local i out="" + for i in "$1":*; do + [ -L "$i/driver" ] || continue + out="$out $(basename "$(readlink -f "$i/driver")")" + done + echo "${out# }" +} + +dev_label() { + local v p m pr + v=$(sysread "$1/idVendor") + p=$(sysread "$1/idProduct") + m=$(sysread "$1/manufacturer") + pr=$(sysread "$1/product") + echo "$v:$p ${m:-?} ${pr:-?}" +} + +# 5000 and 10000 are SuperSpeed: the speeds that carry the inrush and the RF noise. +dev_is_ss() { + case "$(sysread "$1/speed")" in 5000 | 10000 | 20000) return 0 ;; esac + return 1 +} + +# Root hub a device hangs off, which is the blast radius of a controller-level reset. +dev_roothub() { + local b + b=$(basename "$1") + echo "usb${b%%-*}" +} + +# The tty's USB device node: /sys/class/tty/ttyACM0/device is the interface, its parent is the device. +tty_usbdev() { + local p + p=$(readlink -f "/sys/class/tty/$(basename "$1")/device" 2>/dev/null) || return 1 + while [ -n "$p" ] && [ "$p" != / ]; do + [ -f "$p/idVendor" ] && { + echo "$p" + return 0 + } + p=$(dirname "$p") + done + return 1 +} + +# The config files klipper actually loads, so backups and other-variant cfgs stay out. +active_cfgs() { + local root inc g + root="$CFGDIR/printer.cfg" + [ -f "$root" ] || return 0 + echo "$root" + awk '/^\[include /{sub(/^\[include[ \t]+/, ""); sub(/\].*$/, ""); sub(/[ \t]+$/, ""); print}' "$root" | + while read -r inc; do + case "$inc" in + *'*'*) for g in "$CFGDIR"/$inc; do [ -f "$g" ] && echo "$g"; done ;; + *) [ -f "$CFGDIR/$inc" ] && echo "$CFGDIR/$inc" ;; + esac + done +} + +# Serial paths klipper is configured to open, as written (by-id, by-path or a bare node). +mcu_serials() { + local files + files=$(active_cfgs) + [ -n "$files" ] || return 0 + # Strip the inline comment too: klipper takes # and ; as inline prefixes, and the stock printer.cfg ships one on the serial: line itself. + grep -hE '^[[:space:]]*serial:' $files 2>/dev/null | + sed 's/^[[:space:]]*serial:[[:space:]]*//; s/[[:space:]]*[#;].*$//; s/[[:space:]]*$//' | + grep '^/dev/' | sort -u +} + +# ------------------------------------------------------------- journal / klippy + +JOURNAL_OK="" +journal_readable() { + [ -n "$JOURNAL_OK" ] || { + if [ -n "$(journalctl -k -n 1 --no-pager 2>/dev/null)" ]; then JOURNAL_OK=yes; else JOURNAL_OK=no; fi + } + [ "$JOURNAL_OK" = yes ] +} + +# The four mechanisms, as they actually appear in the kernel ring buffer. +USB_PAT='over-current|overcurrent|Cannot enable|not enough power|insufficient available bus power' +USB_PAT="$USB_PAT|uas_eh_|reset (SuperSpeed|high-speed|full-speed|low-speed)|xhci_hcd.*(Error|halt|dying|WARN|Timeout)" +USB_PAT="$USB_PAT|device descriptor read|unable to enumerate|error -71|error -110|error -32|device not accepting address" +USB_PAT="$USB_PAT|USB disconnect|usb_serial_generic_read_bulk_callback|disconnected from ttyUSB|disconnected from ttyACM" +USB_PAT="$USB_PAT|Under-voltage|Voltage normalised|hwmon.*critical" +# Re-enumeration lines aren't faults, but a disconnect without a matching "new ... USB device" is a dead port, while one every few seconds is a reset loop: the operator needs both. +USB_PAT="$USB_PAT|new (SuperSpeed|high-speed|full-speed|low-speed)[^ ]* USB device" + +kernel_usb_events() { journalctl -k -o short-unix --no-pager "$@" 2>/dev/null | grep -aE "$USB_PAT"; } + +# klippy.log rotations, newest last so the correlator sees history in order. +klippy_logs() { + local f + for f in "$LOGDIR"/klippy.log.[0-9]* "$LOGDIR"/klippy.log; do + [ -f "$f" ] && echo "$f" + done +} + +# Correlate every klipper shutdown against kernel USB activity in the same seconds: klippy.log has no per-line clock, but every "Start printer" / "Stats :" line shares one monotonic base, so a shutdown can be placed on the wall clock within one stats interval (1s) and lined up against journal timestamps. +correlate() { + local window="${1:-25}" + command -v python3 >/dev/null 2>&1 || { + echo "python3 missing, correlation unavailable" + return 2 + } + journal_readable || { + echo "kernel journal unreadable, correlation unavailable" + return 2 + } + kernel_usb_events --since "-45 days" >/tmp/.bs-usb-events.$$ 2>/dev/null + klippy_logs >/tmp/.bs-usb-logs.$$ + # Klippy logs outlive the journal by months, so a shutdown older than the journal's first entry has no USB data at all, which must not read the same as data that shows nothing. + local floor + floor=$(journalctl -k -o short-unix --no-pager --since "-45 days" 2>/dev/null | head -1 | cut -d' ' -f1) + python3 - "$window" /tmp/.bs-usb-events.$$ /tmp/.bs-usb-logs.$$ "${floor:-0}" <<'PYEOF' +import re +import sys + +window = float(sys.argv[1]) +try: + floor = float(sys.argv[4]) +except (IndexError, ValueError): + floor = 0.0 +events = [] +with open(sys.argv[2], errors="replace") as fh: + for line in fh: + parts = line.split(None, 1) + if len(parts) != 2: + continue + try: + events.append((float(parts[0]), parts[1].rstrip())) + except ValueError: + continue +events.sort() + +SHUT = re.compile( + r"Lost communication with MCU|Timer too close|Rescheduled timer in the past" + r"|Unable to open serial port|Unable to connect|shutdown: |Transition to shutdown state" + r"|mcu_protocol_error|Move queue overflow|Attempt to update TRSYNC|communication error" +) +START = re.compile(r"Start printer at .*\(([0-9.]+) ([0-9.]+)\)") +STATS = re.compile(r"^Stats ([0-9.]+):") +LOAD = re.compile(r"sysload=([0-9.]+)") +AWAKE = re.compile(r"mcu_awake=([0-9.]+)") +RETR = re.compile(r"bytes_retransmit=([0-9]+)") +INVAL = re.compile(r"bytes_invalid=([0-9]+)") + +hits = [] +with open(sys.argv[3]) as fh: + logs = [x.strip() for x in fh if x.strip()] + +for path in logs: + base_epoch = base_mono = None + now_mono = None + last_stats = "" + try: + src = open(path, errors="replace") + except OSError: + continue + with src: + for line in src: + m = START.search(line) + if m: + base_epoch, base_mono = float(m.group(1)), float(m.group(2)) + now_mono = base_mono + continue + m = STATS.match(line) + if m: + now_mono = float(m.group(1)) + last_stats = line.rstrip() + continue + # Klipper prints its own source into tracebacks, so self._error("Unable to connect") lands in the log looking like a real event; real messages start at column 0, traceback/source lines are indented. + if line[:1].isspace() or line.startswith(("File \"", "Traceback")): + continue + if not SHUT.search(line): + continue + when = None + if base_epoch is not None and now_mono is not None: + when = base_epoch + (now_mono - base_mono) + hits.append((when, path, line.strip()[:160], last_stats)) + +if not hits: + print("no klipper shutdown events found in %d log file(s)" % len(logs)) + sys.exit(0) + +# One shutdown cascades into a dozen lines, so collapse anything inside the same window; a rotated log that begins mid-session carries no epoch anchor, so those collapse by message instead. +merged = [] +seen_untimed = set() +for when, path, text, stats in hits: + if when is None: + key = (path, text[:60]) + if key in seen_untimed: + continue + seen_untimed.add(key) + elif merged and merged[-1][0] is not None and when - merged[-1][0] < window: + continue + merged.append((when, path, text, stats)) + +if floor: + print("kernel journal covers %s onward, anything older cannot be correlated" % __import__( + "time").strftime("%Y-%m-%d %H:%M:%S", __import__("time").localtime(floor))) + +verdicts = [] +for when, path, text, stats in merged: + print("") + stamp = "time unknown, log starts mid-session" if when is None else __import__("time").strftime( + "%Y-%m-%d %H:%M:%S", __import__("time").localtime(when) + ) + print("SHUTDOWN %s (%s)" % (stamp, path.rsplit("/", 1)[-1])) + print(" klipper: %s" % text) + near = [] + if when is not None: + near = [(t, msg) for t, msg in events if abs(t - when) <= window] + nodata = when is None or (floor and when < floor - window) + if near: + for t, msg in near[:14]: + print(" usb %+6.1fs %s" % (t - when, msg[:150])) + elif when is None: + print(" usb (rotated log has no timestamp anchor, cannot correlate)") + elif nodata: + print(" usb (predates the kernel journal, no data)") + else: + print(" usb (no kernel USB activity within +/-%ds)" % window) + + blob = " ".join(m for _, m in near) + cause = [] + if re.search(r"over-current|overcurrent|Cannot enable|not enough power", blob): + cause.append("POWER: the port current limit tripped and VBUS was cut for the whole port group") + if re.search(r"uas_eh_|reset SuperSpeed", blob): + cause.append("BUS: a UAS/xhci device reset bounced the link the MCU shares") + if re.search(r"error -71|error -110|error -32|device descriptor read|unable to enumerate|not accepting address", blob): + cause.append("ENUM: link training failed and retried, stalling the controller") + if re.search(r"Under-voltage", blob): + cause.append("POWER: the SoC itself browned out (PSU cannot carry the stick's inrush)") + if re.search(r"USB disconnect|disconnected from tty", blob): + cause.append("LINK: the MCU's own serial device disconnected") + if "Timer too close" in text and not near: + sl = LOAD.search(stats) + cause.append( + "LOAD: host overload with no USB fault logged (sysload=%s at the last stats line)" + % (sl.group(1) if sl else "?") + ) + if re.search(r"Emergency|M112|Button Pressed|emergency stop", text): + cause = ["OPERATOR: emergency stop, not a fault"] + if not cause: + if when is None: + cause.append("NO DATA: rotated log has no timestamp anchor, correlation impossible") + elif nodata: + cause.append("NO DATA: predates the kernel journal, USB state then is unknowable") + else: + cause.append("UNKNOWN: no USB or load signature, look at wiring/EMI") + for c in cause: + print(" cause -> %s" % c) + verdicts.extend(cause) + for label, rx in (("sysload", LOAD), ("mcu_awake", AWAKE), ("retransmit", RETR), ("invalid", INVAL)): + m = rx.search(stats) + if m: + print(" stats %-10s %s" % (label, m.group(1))) + +print("") +print("%d distinct shutdown event(s)" % len(merged)) +kinds = sorted({c.split(":")[0] for c in verdicts}) +print("dominant class(es): %s" % ", ".join(kinds)) +PYEOF + local rc=$? + rm -f /tmp/.bs-usb-events.$$ /tmp/.bs-usb-logs.$$ + return $rc +} + +# ------------------------------------------------------------------- assertions +# Each returns 0/1 and prints the detail, so both the report and --check share one implementation. + +MCU_DEVS="" +MCU_HUBS="" +resolve_mcus() { + local s node dev + MCU_DEVS="" MCU_HUBS="" + for s in $(mcu_serials); do + node=$(readlink -f "$s" 2>/dev/null) || continue + [ -e "$node" ] || continue + case "$node" in /dev/tty*) ;; *) continue ;; esac + dev=$(tty_usbdev "$node") || continue + MCU_DEVS="$MCU_DEVS $dev" + MCU_HUBS="$MCU_HUBS $(dev_roothub "$dev")" + done + MCU_DEVS="${MCU_DEVS# }" + MCU_HUBS="$(echo "$MCU_HUBS" | tr ' ' '\n' | sort -u | tr '\n' ' ')" +} + +# A bare /dev/ttyUSB0 is assigned in enumeration order, so inserting storage can hand klipper the wrong device on next boot; by-id and by-path survive it. +a_serial_pinned() { + local s loose="" + for s in $(mcu_serials); do + case "$s" in /dev/serial/by-id/* | /dev/serial/by-path/*) ;; *) loose="$loose $s" ;; esac + done + [ -z "$loose" ] || { + echo "serial pinned by bare device node:$loose (enumeration order moves it when storage appears)" + return 1 + } +} + +# Returns 2, not 0, when no port exposes the counter: a Pi 5 can log 58 over-current trips with over_current_count still reading 0, so a green tick here would prove nothing on the worst boxes. +a_no_overcurrent_counters() { + local f n hits="" seen=0 + for f in /sys/bus/usb/devices/*-port*/over_current_count; do + [ -f "$f" ] || continue + n=$(sysread "$f") + case "${n:-x}" in '' | *[!0-9]*) continue ;; esac + seen=1 + [ "$n" -gt 0 ] && hits="$hits $(basename "$(dirname "$f")")=$n" + done + [ -z "$hits" ] || { + echo "ports have latched over-current events:$hits (a stick tripped the limit and VBUS was cut)" + return 1 + } + [ "$seen" = 1 ] || { + echo "no port exposes over_current_count on this kernel, see the kernel-log check instead" + return 2 + } +} + +a_no_overcurrent_journal() { + local hits + journal_readable || return 0 + hits=$(journalctl -k -b --no-pager 2>/dev/null | grep -aiE 'over-current|overcurrent|Cannot enable.*USB cable' | tail -4) + [ -z "$hits" ] || { + echo "$hits" + return 1 + } +} + +a_no_uas_resets() { + local hits + journal_readable || return 0 + hits=$(journalctl -k -b --no-pager 2>/dev/null | grep -aE 'uas_eh_|reset SuperSpeed' | tail -4) + [ -z "$hits" ] || { + echo "$hits" + return 1 + } +} + +a_no_enum_errors() { + local hits + journal_readable || return 0 + hits=$(journalctl -k -b --no-pager 2>/dev/null | + grep -aE 'error -71|error -110|device descriptor read|unable to enumerate|not accepting address' | tail -4) + [ -z "$hits" ] || { + echo "$hits" + return 1 + } +} + +# "disconnected from ttyACM" is usbserial-driver wording, so a cdc_acm board (Beacon, most native-USB MCUs) can drop off the bus all boot without matching it: match its own bus address too. +a_no_mcu_disconnect() { + local hits pat d esc + journal_readable || return 0 + pat='disconnected from ttyUSB|disconnected from ttyACM|usb_serial_generic_read_bulk_callback' + resolve_mcus + for d in $MCU_DEVS; do + esc=$(printf '%s' "$d" | sed 's/\./\\./g') + pat="$pat|usb $esc: USB disconnect|cdc_acm $esc:[^ ]*: device disconnected" + done + hits=$(journalctl -k -b --no-pager 2>/dev/null | grep -aE "$pat" | tail -4) + [ -z "$hits" ] || { + echo "$hits" + return 1 + } +} + +# usbcore autosuspends idle ports, and a resumed port renegotiates while klipper is mid-transfer. +a_mcu_autosuspend_off() { + local d ctrl bad="" + resolve_mcus + [ -n "$MCU_DEVS" ] || return 0 + for d in $MCU_DEVS; do + ctrl=$(sysread "$d/power/control") + [ "$ctrl" = auto ] && bad="$bad $(basename "$d")" + done + [ -z "$bad" ] || { + echo "MCU port(s)$bad set to power/control=auto (a resume renegotiates mid-print)" + return 1 + } +} + +# On a Pi4/CM4 every A port is behind one xhci controller, so this is advisory, not a defect. +a_mcu_not_sharing_ss_hub() { + local d shared="" + resolve_mcus + [ -n "$MCU_DEVS" ] || return 0 + for d in $(usb_devs); do + case " $MCU_DEVS " in *" $d "*) continue ;; esac + dev_is_ss "$d" || continue + case "$MCU_HUBS" in *"$(dev_roothub "$d")"*) shared="$shared $(basename "$d")($(dev_label "$d"))" ;; esac + done + [ -z "$shared" ] || { + echo "SuperSpeed device(s) on the MCU's controller:$shared (a controller reset takes the MCU with it)" + return 1 + } +} + +# UAS is the single most common source of xhci resets on Pi-class hosts. +a_no_uas_bound() { + local d drv hits="" + for d in $(usb_devs); do + drv=$(dev_drivers "$d") + case "$drv" in *uas*) hits="$hits $(basename "$d")($(dev_label "$d"))" ;; esac + done + [ -z "$hits" ] || { + echo "bound to the uas driver:$hits -- pin usb-storage.quirks=VID:PID:u in cmdline.txt to force BOT" + return 1 + } +} + +# ntfs-3g and exfat-fuse cost several times more host cpu than the in-kernel drivers, and klipper's deadline is measured in milliseconds. +a_no_fuse_storage() { + local hits + hits=$(awk '$3 ~ /fuse/ && $1 ~ /^\/dev\// {print $1" ("$3" on "$2")"}' /proc/mounts 2>/dev/null) + [ -z "$hits" ] || { + echo "$hits mounted through FUSE (userspace filesystem, spikes cpu during transfers)" + return 1 + } +} + +# a_no_fuse_storage only fires once a bad stick is already mounted (after the print died); this fires before one ever is, since no in-kernel driver means every customer stick takes FUSE. +a_exfat_in_kernel() { + local missing="" + grep -qw exfat /proc/filesystems 2>/dev/null || modinfo exfat >/dev/null 2>&1 || missing="exfat" + grep -qw ntfs3 /proc/filesystems 2>/dev/null || modinfo ntfs3 >/dev/null 2>&1 || missing="$missing ntfs3" + [ -z "${missing// /}" ] || { + echo "no in-kernel driver for:$missing (Windows formats sticks over 32GB as exfat, so they land on FUSE)" + return 1 + } +} + +# Raising the Pi's own budget hides an oversubscribed hub, it doesn't fix it: the hub still has one upstream lead, and a bus-powered one may only draw 500mA through it regardless of its children. +a_hub_not_oversubscribed() { + local h c n sum name hits="" + for h in /sys/bus/usb/devices/*/; do + name=$(basename "$h") + # Root hubs are fed by the board, not by an upstream port, so their subtree total means nothing. + case "$name" in usb*) continue ;; esac + [ "$(sysread "$h/bDeviceClass")" = 09 ] || continue + sum=0 + for c in "$h"*/bMaxPower; do + [ -f "$c" ] || continue + n=$(sysread "$c" | tr -dc '0-9') + [ -n "$n" ] || n=0 + sum=$((sum + n)) + done + [ "$sum" -gt 500 ] && hits="$hits $name=${sum}mA" + done + [ -z "${hits// /}" ] || { + echo "hub subtree draw exceeds the 500mA a bus-powered hub may take upstream:$hits (fit a self-powered hub)" + return 1 + } +} + +# Live firmware says what booted, config.txt says what boots next, and they diverge exactly when the box is at risk: a line added but never rebooted, or a reflash that silently dropped it again. +a_usb_current_budget() { + local model cfg f live=x persisted=0 + model=$(sysread /proc/device-tree/model) + case "$model" in *"Raspberry Pi 5"*) ;; *) + echo "not a Pi 5, usb_max_current_enable does not exist on this board" + return 2 + ;; + esac + if command -v vcgencmd >/dev/null 2>&1; then + cfg=$(vcgencmd get_config usb_max_current_enable 2>/dev/null | cut -d= -f2) + case "${cfg:-x}" in 0 | 1) live=$cfg ;; esac + fi + for f in /boot/firmware/config.txt /boot/config.txt; do + [ -r "$f" ] || continue + grep -qE '^[[:space:]]*usb_max_current_enable[[:space:]]*=[[:space:]]*1' "$f" && persisted=1 + break + done + if [ "$live" = x ]; then + [ "$persisted" = 1 ] || { + echo "firmware unreadable and no usb_max_current_enable=1 in config.txt: ports may be capped at 600mA" + return 1 + } + echo "vcgencmd unavailable: config.txt carries the line but the running budget was not verified" + return 2 + fi + [ "$live" = 1 ] || { + [ "$persisted" = 1 ] && + echo "usb_max_current_enable=1 is in config.txt but has not been applied: reboot to raise the budget" + echo "Pi 5 running with usb_max_current_enable unset: ports are capped at 600mA total, below one USB3 stick's inrush" + return 1 + } + [ "$persisted" = 1 ] || { + echo "budget is raised in the running firmware but config.txt does not carry it: the next reboot drops back to 600mA" + return 1 + } +} + +# Klipper's 'mcu' rides CAN behind the gs_usb adapter, so an MCU loss with no USB disconnect lands here. +a_can_link_healthy() { + local i ifs d st berr c v bad="" + command -v ip >/dev/null 2>&1 || return 2 + ifs=$(ip -o link show type can 2>/dev/null | sed -n 's/^[0-9]\{1,\}: \([^:@ ]\{1,\}\).*/\1/p') + [ -n "$ifs" ] || { + echo "no CAN interface on this box" + return 2 + } + for i in $ifs; do + d=$(ip -details link show "$i" 2>/dev/null) + case "$d" in *"state UP"*) ;; *) bad="$bad $i:link-down" ;; esac + st=$(printf '%s' "$d" | grep -oE 'state (ERROR-ACTIVE|ERROR-WARNING|ERROR-PASSIVE|BUS-OFF|STOPPED|SLEEPING)' | tail -1 | awk '{print $2}') + case "${st:-ERROR-ACTIVE}" in ERROR-ACTIVE) ;; *) bad="$bad $i:$st" ;; esac + berr=$(printf '%s' "$d" | grep -oE 'berr-counter tx [0-9]+ rx [0-9]+' | awk '{print $3 + $5}') + [ "${berr:-0}" -gt 0 ] 2>/dev/null && bad="$bad $i:berr=$berr" + for c in rx_errors tx_errors rx_dropped tx_dropped rx_over_errors; do + v=$(sysread "/sys/class/net/$i/statistics/$c") + [ "${v:-0}" -gt 0 ] 2>/dev/null && bad="$bad $i:$c=$v" + done + done + [ -z "$bad" ] || { + echo "CAN link degraded:$bad (tx_dropped is the txqueue overflowing, the classic 'Lost communication with MCU')" + return 1 + } +} + +# restart-ms 0 leaves a bus-off CAN link dead until someone reboots, and the field has no SSH. +a_can_recovery_sane() { + local i ifs d rms qlen bad="" + command -v ip >/dev/null 2>&1 || return 2 + ifs=$(ip -o link show type can 2>/dev/null | sed -n 's/^[0-9]\{1,\}: \([^:@ ]\{1,\}\).*/\1/p') + [ -n "$ifs" ] || { + echo "no CAN interface on this box" + return 2 + } + for i in $ifs; do + d=$(ip -details link show "$i" 2>/dev/null) + rms=$(printf '%s' "$d" | grep -oE 'restart-ms [0-9]+' | tail -1 | awk '{print $2}') + [ "${rms:-0}" -gt 0 ] 2>/dev/null || bad="$bad $i:restart-ms=0" + qlen=$(sysread "/sys/class/net/$i/tx_queue_len") + [ "${qlen:-0}" -ge 128 ] 2>/dev/null || bad="$bad $i:txqueuelen=${qlen:-?}" + done + [ -z "$bad" ] || { + echo "CAN recovery weak:$bad (bus-off self-heals only with restart-ms>0, txqueuelen<128 drops frames under load)" + return 1 + } +} + +# A silently read-only boot partition makes every config.txt fix a no-op while tee still prints success. +a_boot_config_writable() { + local f mp opts fs + command -v findmnt >/dev/null 2>&1 || return 2 + for f in /boot/firmware/config.txt /boot/config.txt; do + [ -f "$f" ] && break + done + [ -f "$f" ] || { + echo "no config.txt on this box" + return 2 + } + fs=$(findmnt -n -o FSTYPE -T "$f" 2>/dev/null) + mp=$(findmnt -n -o TARGET -T "$f" 2>/dev/null) + opts=$(findmnt -n -o OPTIONS -T "$f" 2>/dev/null) + case ",$opts," in *,ro,*) + echo "$mp is mounted read-only: config.txt writes fail while tee still echoes success" + return 1 + ;; + esac + case "$fs" in vfat | msdos) ;; *) + echo "$f is on $fs, not the vfat boot partition: firmware reads a different file than this one" + return 1 + ;; + esac +} + +# The field has no SSH, so a journal that dies at reboot leaves a recurring fault permanently undiagnosable. +a_journal_persistent() { + local boots + journal_readable || return 2 + [ -d /var/log/journal ] || { + echo "journal is volatile (no /var/log/journal): every reboot erases the only field evidence" + return 1 + } + boots=$(journalctl --list-boots --no-pager 2>/dev/null | grep -cE '^ *-?[0-9]+ +[0-9a-f]{32}') + [ "${boots:-0}" -ge 2 ] || { + echo "only ${boots:-0} boot retained: anything before the last reboot cannot be correlated" + return 1 + } +} + +# An SD or eMMC stall freezes userspace long enough for klipper to miss timers and drop the MCU. +a_no_storage_io_errors() { + local hits + journal_readable || return 2 + hits=$(journalctl -k -b --no-pager 2>/dev/null | + grep -aE '(mmc[0-9]+|mmcblk[0-9]+|nvme[0-9]+n[0-9]+)[: ].*(error|timeout|timed out|reset|recovery failed)|EXT4-fs .*(error|remounting)' | + tail -4) + [ -z "$hits" ] || { + echo "$hits" + return 1 + } +} + +# A bus-powered hub browning out drops its children with no kernel message, so the sibling cluster is the only trace. +a_no_hub_brownout() { + local oc hit + journal_readable || return 2 + oc=$(journalctl -k -b --no-pager 2>/dev/null | grep -acE 'over-?current') + [ "${oc:-0}" = 0 ] || return 0 + hit=$(journalctl -k -b -o short-unix --no-pager 2>/dev/null | + grep -aE 'usb [0-9]+-[0-9.]+: USB disconnect' | awk ' + { + ts = $1 + 0 + dev = "" + for (i = 1; i <= NF; i++) if ($i == "usb") { dev = $(i + 1); sub(/:$/, "", dev); break } + if (dev == "") next + n = split(dev, part, ".") + if (n < 2) next + hub = part[1] + for (j = 2; j < n; j++) hub = hub "." part[j] + k++; T[k] = ts; H[k] = hub; D[k] = dev + } + END { + for (a = 1; a <= k; a++) { + split("", seen, ":") + seen[D[a]] = 1 + c = 1 + for (b = a + 1; b <= k; b++) { + if (T[b] - T[a] > 5) break + if (H[b] == H[a] && !(D[b] in seen)) { seen[D[b]] = 1; c++ } + } + if (c >= 2) { printf "hub %s lost %d children within 5s\n", H[a], c; exit } + } + }') + [ -z "$hit" ] || { + echo "$hit with no over-current logged: signature of a bus-powered hub browning out, not the Pi limiter" + return 1 + } +} + +a_no_correlated_shutdown() { + local rpt hits + rpt=$(correlate 25 2>/dev/null) + case "$rpt" in + *unavailable*) return 0 ;; + *"no klipper shutdown events found"*) return 0 ;; + esac + # An operator E-stop and an unexplained stop are not USB faults: only a named mechanism counts, + # otherwise every box that ever had its button pressed fails this assertion forever. + hits=$(echo "$rpt" | grep -E 'cause -> (POWER|BUS|ENUM|LINK|LOAD)' | sort -u) + [ -n "$hits" ] || return 0 + echo "$(echo "$rpt" | grep -c '^SHUTDOWN') shutdown(s) in the logs, USB/load-attributable:" + echo "$hits" | head -8 + return 1 +} + +# ---------------------------------------------------------------------- report + +r_host() { + hdr "host and power" + kv "model" "$(sysread /proc/device-tree/model || echo unknown)" + kv "kernel" "$(uname -r)" + kv "cmdline" "$(sysread /proc/cmdline | tr ' ' '\n' | grep -E 'usb|dwc' | tr '\n' ' ')" + if command -v vcgencmd >/dev/null 2>&1; then + local t + t=$(vcgencmd get_throttled 2>/dev/null | cut -d= -f2) + kv "throttled" "$t" + case "${t:-x}" in '' | x | *[!0-9a-fA-Fx]*) ;; *) + [ $((t & 0x1)) -ne 0 ] && bad "undervoltage RIGHT NOW: the PSU cannot carry the current load" + [ $((t & 0x10000)) -ne 0 ] && susp "undervoltage happened earlier this boot (sticky bit)" + ;; + esac + kv "usb_max_current_enable" "$(vcgencmd get_config usb_max_current_enable 2>/dev/null | cut -d= -f2)" + fi + local f n + for f in /sys/bus/usb/devices/*-port*/over_current_count; do + [ -f "$f" ] || continue + n=$(sysread "$f") + case "${n:-0}" in '' | 0 | *[!0-9]*) continue ;; esac + bad "$(basename "$(dirname "$f")") over_current_count=$n" + done +} + +r_topology() { + hdr "usb topology" + resolve_mcus + local d mark drv + for d in $(usb_devs); do + mark=" " + case " $MCU_DEVS " in *" $d "*) mark="MCU" ;; esac + dev_is_ss "$d" && [ "$mark" = " " ] && mark="SS " + drv=$(dev_drivers "$d") + out "$(printf ' %s %-10s %-6s %-7s %-22s %s' \ + "$mark" "$(basename "$d")" "$(sysread "$d/speed")" \ + "$(sysread "$d/bMaxPower")" "${drv:--}" "$(dev_label "$d")")" + done + out "" + kv "MCU serial(s)" "$(mcu_serials | tr '\n' ' ')" + kv "MCU root hub(s)" "${MCU_HUBS:-none resolved}" +} + +r_checks() { + hdr "risk factors" + local name fn tier detail rc + # Same tiers as do_check: an operator who cannot tell a blocker from an advisory learns to skim + # past both, so a FAIL prints BAD and only a WARN prints ????. + while IFS='|' read -r fn tier name; do + [ -n "$fn" ] || continue + detail=$("$fn" 2>&1) + rc=$? + case "$rc" in + 0) ok "$name" && continue ;; + 2) susp "$name (not measurable here)" ;; + *) case "$tier" in FAIL) bad "$name" ;; *) susp "$name" ;; esac ;; + esac + [ -n "$detail" ] && out "$(echo "$detail" | sed 's/^/ /')" + done <<'ROWS' +a_serial_pinned|WARN|MCU serial pinned by stable path +a_no_overcurrent_counters|FAIL|no latched port over-current counters +a_no_overcurrent_journal|FAIL|no over-current in this boot's kernel log +a_no_uas_resets|WARN|no UAS/xhci device resets this boot +a_no_enum_errors|WARN|no USB enumeration errors this boot +a_no_mcu_disconnect|FAIL|MCU serial never disconnected this boot +a_mcu_autosuspend_off|WARN|autosuspend off on the MCU port +a_mcu_not_sharing_ss_hub|WARN|no SuperSpeed device on the MCU's controller +a_no_uas_bound|WARN|no storage bound to the uas driver +a_no_fuse_storage|WARN|no FUSE-mounted storage +a_exfat_in_kernel|WARN|exfat/ntfs handled in-kernel, not by FUSE +a_hub_not_oversubscribed|WARN|no hub carrying more than its upstream share +a_usb_current_budget|FAIL|USB current budget raised +a_can_link_healthy|FAIL|CAN link to the MCU clean +a_can_recovery_sane|WARN|CAN can self-heal from bus-off +a_boot_config_writable|FAIL|boot config.txt actually writable +a_journal_persistent|WARN|kernel journal survives a reboot +a_no_storage_io_errors|WARN|no SD/eMMC I/O errors this boot +a_no_hub_brownout|WARN|no hub brownout signature this boot +ROWS +} + +r_history() { + hdr "klipper shutdowns correlated with USB events" + out "$(correlate 25)" +} + +r_advice() { + hdr "what to do about it" + out " POWER raise the budget (Pi 5: usb_max_current_enable=1 in config.txt with a 5A PSU) or" + out " move the stick to a self-powered hub. A tripped port limit cuts VBUS for every" + out " port in the group, so the MCU dies with the stick." + out " BUS force the drive off UAS: lsusb for its VID:PID, then append" + out " usb-storage.quirks=VID:PID:u to /boot/firmware/cmdline.txt and reboot." + out " Confirm with 'lsusb -t' that it binds usb-storage, not uas." + out " ENUM move the MCU to a different controller than the stick, and use a shielded cable" + out " with a ferrite. USB3 emits broadband noise across 2.4GHz." + out " LOAD keep gcode and the moonraker database off the stick, mount noatime, and prefer" + out " the in-kernel exfat/ntfs3 drivers over the FUSE ones." + out " ALWAYS pin the MCU by /dev/serial/by-id/ (or by-path/) so storage cannot renumber it." +} + +# ----------------------------------------------------------------------- watch + +printer_state() { + curl -s -m 5 "$MOON/printer/objects/query?print_stats" 2>/dev/null | + tr '{},' '\n' | grep '"state"' | head -1 | cut -d'"' -f4 +} + +do_watch() { + local st start i node d present gone was_gone drops gone_at longest ktmp kpid kseen knew + st=$(printer_state) + # --monitor runs the identical loop without the banner: the guard exists only because --watch tells + # the operator to hot-plug a drive, and observing a print is not the same act as provoking it. + if ! $MONITOR; then + case "${st:-unknown}" in + printing | paused | unknown | '') + if $FORCE; then + out "printer state is ${st:-unknown}, --force given, watching anyway" + else + out "refusing: printer state is ${st:-unknown}. Reproducing this fault kills the job." + out "Re-run after the print, or with --force if you accept losing it." + return 2 + fi + ;; + esac + fi + + resolve_mcus + hdr "live capture (${WATCH_SECS}s)" + if $MONITOR; then + out " Passive monitor, printer state ${st:-unknown}. Nothing is plugged, mounted or written." + out " Change nothing while this runs: the point is to see what the box does unprovoked." + else + out " Insert the suspect USB drive NOW. Leave it in. Do not touch anything else." + fi + out " Watching kernel USB events, SoC voltage, host load and the MCU device node." + out "" + start=$(date +%s) + i=0 + # Report the transitions, not the level: one line per second says nothing, while the length of each + # gap is what separates a re-enumeration (under 2s) from a port that stays dead until replug. + gone=0 + was_gone=0 + drops=0 + gone_at=0 + longest=0 + kseen=0 + knew=0 + kpid="" + # Kernel lines are drained into the same timeline as the device state on purpose: the operator has + # to see the over-current or the reset land next to the drop, not in a separate block a minute later. + ktmp=$(mktemp 2>/dev/null) || ktmp="" + if [ -n "$ktmp" ]; then + journalctl -kf -n0 -o short-iso --no-pager >"$ktmp" 2>/dev/null & + kpid=$! + fi + while [ "$i" -lt "$WATCH_SECS" ]; do + present="" + for d in $(mcu_serials); do + node=$(readlink -f "$d" 2>/dev/null) + if [ -e "${node:-/nonexistent}" ]; then present="$present +"; else present="$present -MISSING($d)"; fi + done + case "$present" in + *MISSING*) gone=1 ;; + *) gone=0 ;; + esac + if [ "$gone" = 1 ] && [ "$was_gone" = 0 ]; then + drops=$((drops + 1)) + gone_at=$i + bad "$(date +%T) t=${i}s MCU serial gone (drop #$drops):$present" + elif [ "$gone" = 0 ] && [ "$was_gone" = 1 ]; then + [ $((i - gone_at)) -gt "$longest" ] && longest=$((i - gone_at)) + out " $(date +%T) t=${i}s MCU serial back after $((i - gone_at))s" + fi + was_gone=$gone + if [ -n "$ktmp" ]; then + knew=$(wc -l <"$ktmp" 2>/dev/null) + case "${knew:-x}" in '' | *[!0-9]*) knew=$kseen ;; esac + if [ "$knew" -gt "$kseen" ]; then + sed -n "$((kseen + 1)),${knew}p" "$ktmp" 2>/dev/null | grep -aE "$USB_PAT" | + while IFS= read -r kline; do out " kern $kline"; done + kseen=$knew + fi + fi + if [ $((i % 15)) -eq 0 ]; then + out "$(printf ' %s t=%3ds load=%s throttled=%s mcu=%s' \ + "$(date +%T)" "$i" "$(cut -d' ' -f1 /proc/loadavg)" \ + "$(command -v vcgencmd >/dev/null 2>&1 && vcgencmd get_throttled 2>/dev/null | cut -d= -f2 || echo n/a)" \ + "$present")" + fi + sleep 1 + i=$((i + 1)) + done + [ -n "$kpid" ] && kill "$kpid" 2>/dev/null + [ -n "$ktmp" ] && rm -f "$ktmp" + + hdr "mcu link during the capture" + if [ "$drops" -gt 0 ]; then + bad "MCU serial dropped $drops time(s), longest gap ${longest}s" + out " Under 2s per gap is the device re-enumerating: port power or link reset, not a dead board." + out " A gap that never closes is a port held down until the drive is pulled." + else + ok "MCU serial stayed present for the whole capture" + fi + + hdr "kernel USB events during the capture" + local ev + ev=$(journalctl -k -o short-iso --no-pager --since "@$start" 2>/dev/null | grep -aE "$USB_PAT") + if [ -n "$ev" ]; then out "$ev"; else out " (none)"; fi + + hdr "storage that appeared" + local d2 drv + for d2 in $(usb_devs); do + drv=$(dev_drivers "$d2") + case "$drv" in + *uas* | *usb-storage*) + out " $(basename "$d2") speed=$(sysread "$d2/speed") power=$(sysread "$d2/bMaxPower") driver=$drv $(dev_label "$d2")" + case "$drv" in + *uas*) susp " bound to uas: append usb-storage.quirks=$(sysread "$d2/idVendor"):$(sysread "$d2/idProduct"):u to cmdline.txt" ;; + esac + ;; + esac + done + + hdr "klipper reaction" + local kl + kl=$(tail -400 "$LOGDIR/klippy.log" 2>/dev/null | + grep -aE 'Lost communication|Timer too close|shutdown:|Transition to shutdown|Unable to open serial' | tail -8) + if [ -n "$kl" ]; then + bad "klipper faulted during the capture:" + out "$kl" + else + ok "klipper stayed up for the whole capture" + fi + r_checks +} + +# ----------------------------------------------------------------------- modes + +do_check() { + local row fn tier need name d + # Field 4 marks the rows that read the journal: without it they would silently pass on a box + # whose journal is unreadable, which is the exact false PASS this suite exists to prevent. + for row in \ + "a_no_correlated_shutdown|FAIL|J|no klipper shutdown attributable to USB" \ + "a_no_overcurrent_counters|FAIL|-|no latched USB over-current counters" \ + "a_no_overcurrent_journal|FAIL|J|no USB over-current this boot" \ + "a_no_mcu_disconnect|FAIL|J|MCU serial never disconnected this boot" \ + "a_serial_pinned|WARN|-|MCU serial pinned by stable path" \ + "a_no_uas_resets|WARN|J|no UAS/xhci device resets this boot" \ + "a_no_enum_errors|WARN|J|no USB enumeration errors this boot" \ + "a_mcu_autosuspend_off|WARN|-|autosuspend off on the MCU port" \ + "a_no_uas_bound|WARN|-|no storage bound to the uas driver" \ + "a_no_fuse_storage|WARN|-|no FUSE-mounted storage" \ + "a_mcu_not_sharing_ss_hub|WARN|-|no SuperSpeed device on the MCU's controller" \ + "a_exfat_in_kernel|WARN|-|exfat/ntfs handled in-kernel, not by FUSE" \ + "a_hub_not_oversubscribed|WARN|-|no hub carrying more than its upstream share" \ + "a_usb_current_budget|FAIL|-|USB current budget raised" \ + "a_can_link_healthy|FAIL|-|CAN link to the MCU clean" \ + "a_boot_config_writable|FAIL|-|boot config.txt actually writable" \ + "a_can_recovery_sane|WARN|-|CAN can self-heal from bus-off" \ + "a_journal_persistent|WARN|-|kernel journal survives a reboot" \ + "a_no_storage_io_errors|WARN|J|no SD/eMMC I/O errors this boot" \ + "a_no_hub_brownout|WARN|J|no hub brownout signature this boot"; do + IFS='|' read -r fn tier need name <<<"$row" + if [ "$need" = J ] && ! journal_readable; then + emit SKIP "$name" "kernel journal unreadable" + continue + fi + d=$("$fn" 2>&1) + case $? in + 0) emit PASS "$name" ;; + 2) emit SKIP "$name" "$(echo "$d" | tr '\n' ';' | cut -c1-300)" ;; + *) emit "$tier" "$name" "$(echo "$d" | tr '\n' ';' | cut -c1-300)" ;; + esac + done +} + +case "$MODE" in + check) do_check ;; + history) r_history ;; + watch) do_watch ;; + report) + out "BlocksScreen USB fault forensics $(date -Is) host=$(hostname)" + r_host + r_topology + r_checks + r_history + r_advice + ;; +esac + +if [ -n "$REPORT" ]; then + $QUIET || printf '\nreport written to %s (downloadable from the UI, no SSH needed)\n' "$REPORT" +fi diff --git a/tests/ui/test_resource_keys_unit.py b/tests/ui/test_resource_keys_unit.py index 4cb23d95..3047206b 100644 --- a/tests/ui/test_resource_keys_unit.py +++ b/tests/ui/test_resource_keys_unit.py @@ -166,6 +166,20 @@ def test_qrc_declared_files_exist_on_disk(): assert not missing, _report("declared in a .qrc but absent from disk:", missing) +def test_no_orphan_assets_on_disk(): + """Every .svg under resources/media is declared by some .qrc, the reverse check.""" + declared = {path for _, path in _qrc_entries()} + orphans = sorted( + str(svg.relative_to(REPO_ROOT)) + for svg in (RESOURCES / "media").rglob("*.svg") + if svg not in declared + ) + assert not orphans, ( + "on-disk .svg files no .qrc declares (dead weight):\n" + + "\n".join(f" {path}" for path in orphans) + ) + + def test_compiled_blobs_match_the_qrc_xml(): """The _rc.py blobs match the .qrc XML, i.e. nobody skipped `make rcc`.""" declared = _qrc_keys() From 70393636794cac6aa2d8f499f4e435252b820eb2 Mon Sep 17 00:00:00 2001 From: Guilherme Costa Date: Thu, 3 Sep 2026 11:06:09 +0100 Subject: [PATCH 2/2] chore(resources): reorganize btn_icons into per-prefix subfolders --- BlocksScreen/lib/ui/controlStackedWidget.ui | 78 +- .../lib/ui/controlStackedWidget_ui.py | 78 +- BlocksScreen/lib/ui/mainWindow.ui | 12 +- BlocksScreen/lib/ui/mainWindow_ui.py | 12 +- .../lib/ui/resources/icon_resources.qrc | 172 +- .../lib/ui/resources/icon_resources_rc.py | 1171 ++++++----- .../{ => arrow_icons}/arrow_down.svg | 0 .../{ => arrow_icons}/arrow_left.svg | 0 .../{ => arrow_icons}/arrow_right.svg | 0 .../{ => arrow_icons}/down_arrow.svg | 0 .../{ => arrow_icons}/left_arrow.svg | 0 .../{ => arrow_icons}/right_arrow.svg | 0 .../btn_icons/{ => arrow_icons}/up_arrow.svg | 0 .../{ => baby_step}/move_nozzle_away.svg | 0 .../{ => baby_step}/move_nozzle_close.svg | 0 .../media/btn_icons/{ => dialog}/no.svg | 0 .../media/btn_icons/{ => dialog}/yes.svg | 0 .../{ => extruder_related}/extrude.svg | 0 .../{ => extruder_related}/nozzle.svg | 0 .../{ => extruder_related}/nozzle_topbar.svg | 0 .../switch_print_core.svg | 0 .../{ => extruder_related}/switch_zoom.svg | 0 .../btn_icons/{ => fan_related}/blower.svg | 0 .../media/btn_icons/{ => fan_related}/fan.svg | 0 .../btn_icons/{ => fan_related}/fan_cage.svg | 0 .../{ => filament_related}/add_filament.svg | 0 .../{ => filament_related}/add_spool.svg | 0 .../change_filament.svg | 0 .../{ => filament_related}/check_gate_1.svg | 0 .../{ => filament_related}/eject.svg | 0 .../filament_sensor.svg | 0 .../filament_sensor_off.svg | 0 .../filament_sensor_turn_on.svg | 0 .../{ => filament_related}/half_spool.svg | 0 .../{ => filament_related}/load_filament.svg | 0 .../{ => filament_related}/loaded_spool.svg | 0 .../spool_database_1.svg | 0 .../{ => filament_related}/spoolman.svg | 0 .../unload_filament.svg | 0 .../media/btn_icons/{ => files}/file.svg | 0 .../{ => input_shaper}/input_shaper.svg | 0 .../{ => input_shaper}/input_shaper_auto.svg | 0 .../input_shaper_manual.svg | 0 .../{ => motion}/axis_maintenance.svg | 0 .../{ => motion}/disable_steppers.svg | 0 .../media/btn_icons/{ => motion}/home_all.svg | 0 .../media/btn_icons/{ => motion}/home_x.svg | 0 .../media/btn_icons/{ => motion}/home_y.svg | 0 .../media/btn_icons/{ => motion}/home_z.svg | 0 .../media/btn_icons/{ => motion}/speed.svg | 0 .../media/btn_icons/{ => network}/hotspot.svg | 0 .../btn_icons/{ => network}/wifi_config.svg | 0 .../media/btn_icons/{ => system}/reboot.svg | 0 .../{ => system}/restart_firmware.svg | 0 .../{ => system}/restart_klipper.svg | 0 .../{ => system}/restart_printer.svg | 0 .../{ => system}/update_software.svg | 0 .../{ => temperature_related}/cooldown.svg | 0 .../{ => temperature_related}/heatsoak.svg | 0 .../{ => temperature_related}/humidity.svg | 0 .../standard_temperature.svg | 0 .../{ => temperature_related}/temperature.svg | 0 .../temperature_plate.svg | 0 .../media/btn_icons/{ => ui}/back.svg | 0 .../media/btn_icons/{ => ui}/back_folder.svg | 0 .../btn_icons/{ => ui}/center_arrows.svg | 0 .../media/btn_icons/{ => ui}/error.svg | 0 .../media/btn_icons/{ => ui}/folder.svg | 0 .../media/btn_icons/{ => ui}/garbage.svg | 0 .../media/btn_icons/{ => ui}/info.svg | 0 .../media/btn_icons/{ => ui}/layers.svg | 0 .../media/btn_icons/{ => ui}/leds.svg | 0 .../media/btn_icons/{ => ui}/notification.svg | 0 .../media/btn_icons/{ => ui}/pause.svg | 0 .../media/btn_icons/{ => ui}/play.svg | 0 .../media/btn_icons/{ => ui}/print.svg | 0 .../btn_icons/{ => ui}/printer_settings.svg | 0 .../media/btn_icons/{ => ui}/refresh.svg | 0 .../media/btn_icons/{ => ui}/routine.svg | 0 .../media/btn_icons/{ => ui}/save.svg | 0 .../media/btn_icons/{ => ui}/see.svg | 0 .../media/btn_icons/{ => ui}/stop.svg | 0 .../media/btn_icons/{ => ui}/time.svg | 0 .../media/btn_icons/{ => ui}/troubleshoot.svg | 0 .../media/btn_icons/{ => ui}/tune.svg | 0 .../media/btn_icons/{ => ui}/unsee.svg | 0 .../media/btn_icons/{ => ui}/usb.svg | 0 .../btn_icons/{ => z_levelling}/baby_step.svg | 0 .../{ => z_levelling}/bed_levelling.svg | 0 .../btn_icons/{ => z_levelling}/bltouch.svg | 0 .../btn_icons/{ => z_levelling}/eddy_mech.svg | 0 .../btn_icons/{ => z_levelling}/inductive.svg | 0 BlocksScreen/lib/ui/utilitiesStackedWidget.ui | 40 +- .../lib/ui/utilitiesStackedWidget_ui.py | 40 +- BlocksScreen/lib/utils/blocks_pixmap.py | 150 +- SPLIT_PROMPT.md | 111 - scripts/healthcheck/bs-diag.sh | 118 -- scripts/healthcheck/bs-healthcheck.sh | 1859 ----------------- scripts/healthcheck/bs-power.sh | 839 -------- scripts/healthcheck/bs-selftest.py | 533 ----- scripts/healthcheck/bs-usb-diag.sh | 1079 ---------- 101 files changed, 907 insertions(+), 5385 deletions(-) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/arrow_down.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/arrow_left.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/arrow_right.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/down_arrow.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/left_arrow.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/right_arrow.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => arrow_icons}/up_arrow.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => baby_step}/move_nozzle_away.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => baby_step}/move_nozzle_close.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => dialog}/no.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => dialog}/yes.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => extruder_related}/extrude.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => extruder_related}/nozzle.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => extruder_related}/nozzle_topbar.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => extruder_related}/switch_print_core.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => extruder_related}/switch_zoom.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => fan_related}/blower.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => fan_related}/fan.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => fan_related}/fan_cage.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/add_filament.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/add_spool.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/change_filament.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/check_gate_1.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/eject.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/filament_sensor.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/filament_sensor_off.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/filament_sensor_turn_on.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/half_spool.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/load_filament.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/loaded_spool.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/spool_database_1.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/spoolman.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => filament_related}/unload_filament.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => files}/file.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => input_shaper}/input_shaper.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => input_shaper}/input_shaper_auto.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => input_shaper}/input_shaper_manual.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/axis_maintenance.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/disable_steppers.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/home_all.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/home_x.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/home_y.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/home_z.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => motion}/speed.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => network}/hotspot.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => network}/wifi_config.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => system}/reboot.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => system}/restart_firmware.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => system}/restart_klipper.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => system}/restart_printer.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => system}/update_software.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => temperature_related}/cooldown.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => temperature_related}/heatsoak.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => temperature_related}/humidity.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => temperature_related}/standard_temperature.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => temperature_related}/temperature.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => temperature_related}/temperature_plate.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/back.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/back_folder.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/center_arrows.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/error.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/folder.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/garbage.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/info.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/layers.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/leds.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/notification.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/pause.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/play.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/print.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/printer_settings.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/refresh.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/routine.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/save.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/see.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/stop.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/time.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/troubleshoot.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/tune.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/unsee.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => ui}/usb.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => z_levelling}/baby_step.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => z_levelling}/bed_levelling.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => z_levelling}/bltouch.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => z_levelling}/eddy_mech.svg (100%) rename BlocksScreen/lib/ui/resources/media/btn_icons/{ => z_levelling}/inductive.svg (100%) delete mode 100644 SPLIT_PROMPT.md delete mode 100755 scripts/healthcheck/bs-diag.sh delete mode 100755 scripts/healthcheck/bs-healthcheck.sh delete mode 100755 scripts/healthcheck/bs-power.sh delete mode 100755 scripts/healthcheck/bs-selftest.py delete mode 100755 scripts/healthcheck/bs-usb-diag.sh diff --git a/BlocksScreen/lib/ui/controlStackedWidget.ui b/BlocksScreen/lib/ui/controlStackedWidget.ui index 141716d3..4483217a 100644 --- a/BlocksScreen/lib/ui/controlStackedWidget.ui +++ b/BlocksScreen/lib/ui/controlStackedWidget.ui @@ -157,7 +157,7 @@ menu_btn - :/z_levelling/media/btn_icons/bed_levelling.svg + :/z_levelling/media/btn_icons/z_levelling/bed_levelling.svg @@ -218,7 +218,7 @@ Control menu_btn - :/temperature_related/media/btn_icons/temperature.svg + :/temperature_related/media/btn_icons/temperature_related/temperature.svg @@ -279,7 +279,7 @@ Calibration menu_btn - :/z_levelling/media/btn_icons/bed_levelling.svg + :/z_levelling/media/btn_icons/z_levelling/bed_levelling.svg @@ -340,7 +340,7 @@ Control menu_btn - :/motion/media/btn_icons/axis_maintenance.svg + :/motion/media/btn_icons/motion/axis_maintenance.svg @@ -400,7 +400,7 @@ Control menu_btn - :/fan_related/media/btn_icons/fan.svg + :/fan_related/media/btn_icons/fan_related/fan.svg @@ -461,7 +461,7 @@ Print Core menu_btn - :/extruder_related/media/btn_icons/switch_print_core.svg + :/extruder_related/media/btn_icons/extruder_related/switch_print_core.svg @@ -609,7 +609,7 @@ Print Core icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -673,7 +673,7 @@ Print Core menu_btn - :/motion/media/btn_icons/axis_maintenance.svg + :/motion/media/btn_icons/motion/axis_maintenance.svg @@ -734,7 +734,7 @@ Steppers menu_btn - :/motion/media/btn_icons/disable_steppers.svg + :/motion/media/btn_icons/motion/disable_steppers.svg @@ -794,7 +794,7 @@ Steppers menu_btn - :/extruder_related/media/btn_icons/extrude.svg + :/extruder_related/media/btn_icons/extruder_related/extrude.svg @@ -855,7 +855,7 @@ Home menu_btn - :/motion/media/btn_icons/home_all.svg + :/motion/media/btn_icons/motion/home_all.svg @@ -1032,7 +1032,7 @@ Home icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -2407,7 +2407,7 @@ Home menu_btn - :/extruder_related/media/btn_icons/extrude.svg + :/extruder_related/media/btn_icons/extruder_related/extrude.svg @@ -2441,7 +2441,7 @@ Home Qt::AlignCenter - :/extruder_related/media/btn_icons/nozzle.svg + :/extruder_related/media/btn_icons/extruder_related/nozzle.svg @@ -2501,7 +2501,7 @@ Home menu_btn - :/extruder_related/media/btn_icons/extrude.svg + :/extruder_related/media/btn_icons/extruder_related/extrude.svg @@ -2851,7 +2851,7 @@ Home icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -2915,7 +2915,7 @@ Home icon - :/arrow_icons/media/btn_icons/up_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/up_arrow.svg @@ -2967,7 +2967,7 @@ Home icon - :/arrow_icons/media/btn_icons/down_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/down_arrow.svg @@ -3043,7 +3043,7 @@ Home icon - :/motion/media/btn_icons/home_x.svg + :/motion/media/btn_icons/motion/home_x.svg @@ -3095,7 +3095,7 @@ Home icon - :/motion/media/btn_icons/home_y.svg + :/motion/media/btn_icons/motion/home_y.svg @@ -3147,7 +3147,7 @@ Home icon - :/motion/media/btn_icons/home_z.svg + :/motion/media/btn_icons/motion/home_z.svg @@ -3199,7 +3199,7 @@ Home icon - :/motion/media/btn_icons/home_all.svg + :/motion/media/btn_icons/motion/home_all.svg @@ -4103,7 +4103,7 @@ Home icon - :/arrow_icons/media/btn_icons/left_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/left_arrow.svg @@ -4155,7 +4155,7 @@ Home icon - :/arrow_icons/media/btn_icons/right_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/right_arrow.svg @@ -4207,7 +4207,7 @@ Home icon - :/arrow_icons/media/btn_icons/down_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/down_arrow.svg @@ -4259,7 +4259,7 @@ Home icon - :/arrow_icons/media/btn_icons/up_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/up_arrow.svg @@ -4293,7 +4293,7 @@ Home icon - :/ui/media/btn_icons/center_arrows.svg + :/ui/media/btn_icons/ui/center_arrows.svg @@ -4448,7 +4448,7 @@ Home icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -4542,7 +4542,7 @@ Home true - :/extruder_related/media/btn_icons/nozzle.svg + :/extruder_related/media/btn_icons/extruder_related/nozzle.svg extruder_temperature_display @@ -4816,7 +4816,7 @@ Home true - :/temperature_related/media/btn_icons/temperature_plate.svg + :/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg bed_temperature_display @@ -4884,7 +4884,7 @@ Home menu_btn - :/temperature_related/media/btn_icons/cooldown.svg + :/temperature_related/media/btn_icons/temperature_related/cooldown.svg @@ -4960,7 +4960,7 @@ Home menu_btn - :/temperature_related/media/btn_icons/heatsoak.svg + :/temperature_related/media/btn_icons/temperature_related/heatsoak.svg @@ -5122,7 +5122,7 @@ Home true - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg icon @@ -5206,7 +5206,7 @@ Home icon - :/arrow_icons/media/btn_icons/up_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/up_arrow.svg @@ -5263,7 +5263,7 @@ Home icon - :/arrow_icons/media/btn_icons/down_arrow.svg + :/arrow_icons/media/btn_icons/arrow_icons/down_arrow.svg @@ -5392,7 +5392,7 @@ Home menu_btn - :/dialog/media/btn_icons/yes.svg + :/dialog/media/btn_icons/dialog/yes.svg @@ -5446,7 +5446,7 @@ Home menu_btn - :/dialog/media/btn_icons/no.svg + :/dialog/media/btn_icons/dialog/no.svg @@ -5557,7 +5557,7 @@ Home icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -5698,7 +5698,7 @@ Home icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg diff --git a/BlocksScreen/lib/ui/controlStackedWidget_ui.py b/BlocksScreen/lib/ui/controlStackedWidget_ui.py index d2485552..d54c7d32 100644 --- a/BlocksScreen/lib/ui/controlStackedWidget_ui.py +++ b/BlocksScreen/lib/ui/controlStackedWidget_ui.py @@ -95,7 +95,7 @@ def setupUi(self, controlStackedWidget): self.cp_z_tilt_btn.setFlat(True) self.cp_z_tilt_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/z_levelling/media/btn_icons/bed_levelling.svg"), + QtGui.QPixmap(":/z_levelling/media/btn_icons/z_levelling/bed_levelling.svg"), ) self.cp_z_tilt_btn.setObjectName("cp_z_tilt_btn") self.cp_content_layout.addWidget(self.cp_z_tilt_btn, 1, 1, 1, 1) @@ -130,7 +130,7 @@ def setupUi(self, controlStackedWidget): self.cp_temperature_btn.setFlat(True) self.cp_temperature_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature.svg"), + QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_related/temperature.svg"), ) self.cp_temperature_btn.setObjectName("cp_temperature_btn") self.cp_content_layout.addWidget(self.cp_temperature_btn, 0, 1, 1, 1) @@ -165,7 +165,7 @@ def setupUi(self, controlStackedWidget): self.cp_nozzles_calibration_btn.setFlat(True) self.cp_nozzles_calibration_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/z_levelling/media/btn_icons/bed_levelling.svg"), + QtGui.QPixmap(":/z_levelling/media/btn_icons/z_levelling/bed_levelling.svg"), ) self.cp_nozzles_calibration_btn.setObjectName("cp_nozzles_calibration_btn") self.cp_content_layout.addWidget(self.cp_nozzles_calibration_btn, 1, 0, 1, 1) @@ -198,7 +198,7 @@ def setupUi(self, controlStackedWidget): self.cp_motion_btn.setFlat(True) self.cp_motion_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + QtGui.QPixmap(":/motion/media/btn_icons/motion/axis_maintenance.svg"), ) self.cp_motion_btn.setObjectName("cp_motion_btn") self.cp_content_layout.addWidget(self.cp_motion_btn, 0, 0, 1, 1) @@ -226,7 +226,7 @@ def setupUi(self, controlStackedWidget): self.cp_fans_btn.setAutoDefault(False) self.cp_fans_btn.setFlat(True) self.cp_fans_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan.svg") + "icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan_related/fan.svg") ) self.cp_fans_btn.setObjectName("cp_fans_btn") self.cp_content_layout.addWidget(self.cp_fans_btn, 2, 0, 1, 1) @@ -261,7 +261,7 @@ def setupUi(self, controlStackedWidget): self.cp_switch_print_core_btn.setFlat(True) self.cp_switch_print_core_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/switch_print_core.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/switch_print_core.svg"), ) self.cp_switch_print_core_btn.setObjectName("cp_switch_print_core_btn") self.cp_content_layout.addWidget(self.cp_switch_print_core_btn, 2, 1, 1, 1) @@ -335,7 +335,7 @@ def setupUi(self, controlStackedWidget): self.mp_back_btn.setAutoDefault(False) self.mp_back_btn.setFlat(True) self.mp_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.mp_back_btn.setObjectName("mp_back_btn") self.mp_header_layout.addWidget(self.mp_back_btn) @@ -373,7 +373,7 @@ def setupUi(self, controlStackedWidget): self.motion_move_axis_btn.setFlat(True) self.motion_move_axis_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + QtGui.QPixmap(":/motion/media/btn_icons/motion/axis_maintenance.svg"), ) self.motion_move_axis_btn.setObjectName("motion_move_axis_btn") self.cp_content_layout_2.addWidget(self.motion_move_axis_btn, 1, 0, 1, 1) @@ -408,7 +408,7 @@ def setupUi(self, controlStackedWidget): self.motion_disable_steppers_btn.setFlat(True) self.motion_disable_steppers_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/motion/media/btn_icons/disable_steppers.svg"), + QtGui.QPixmap(":/motion/media/btn_icons/motion/disable_steppers.svg"), ) self.motion_disable_steppers_btn.setObjectName("motion_disable_steppers_btn") self.cp_content_layout_2.addWidget(self.motion_disable_steppers_btn, 0, 1, 1, 1) @@ -443,7 +443,7 @@ def setupUi(self, controlStackedWidget): self.motion_extrude_btn.setFlat(True) self.motion_extrude_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/extrude.svg"), ) self.motion_extrude_btn.setObjectName("motion_extrude_btn") self.cp_content_layout_2.addWidget(self.motion_extrude_btn, 1, 1, 1, 1) @@ -477,7 +477,7 @@ def setupUi(self, controlStackedWidget): self.motion_auto_home_btn.setAutoDefault(False) self.motion_auto_home_btn.setFlat(True) self.motion_auto_home_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_all.svg") + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/motion/home_all.svg") ) self.motion_auto_home_btn.setObjectName("motion_auto_home_btn") self.cp_content_layout_2.addWidget(self.motion_auto_home_btn, 0, 0, 1, 1) @@ -563,7 +563,7 @@ def setupUi(self, controlStackedWidget): self.exp_back_btn.setAutoDefault(False) self.exp_back_btn.setFlat(True) self.exp_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.exp_back_btn.setObjectName("exp_back_btn") self.exp_header_layout.addWidget( @@ -1402,7 +1402,7 @@ def setupUi(self, controlStackedWidget): self.exp_unextrude_btn.setFlat(True) self.exp_unextrude_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/extrude.svg"), ) self.exp_unextrude_btn.setObjectName("exp_unextrude_btn") self.exp_buttons_layout.addWidget(self.exp_unextrude_btn) @@ -1418,7 +1418,7 @@ def setupUi(self, controlStackedWidget): self.exp_nozzle_icon_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.exp_nozzle_icon_label.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/nozzle.svg"), ) self.exp_nozzle_icon_label.setObjectName("exp_nozzle_icon_label") self.exp_buttons_layout.addWidget(self.exp_nozzle_icon_label) @@ -1452,7 +1452,7 @@ def setupUi(self, controlStackedWidget): self.exp_extrude_btn.setFlat(True) self.exp_extrude_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/extrude.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/extrude.svg"), ) self.exp_extrude_btn.setObjectName("exp_extrude_btn") self.exp_buttons_layout.addWidget(self.exp_extrude_btn) @@ -1603,7 +1603,7 @@ def setupUi(self, controlStackedWidget): self.mva_back_btn.setAutoDefault(False) self.mva_back_btn.setFlat(True) self.mva_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.mva_back_btn.setObjectName("mva_back_btn") self.mva_header_layout.addWidget( @@ -1636,7 +1636,7 @@ def setupUi(self, controlStackedWidget): self.mva_z_up.setChecked(False) self.mva_z_up.setFlat(True) self.mva_z_up.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/up_arrow.svg") ) self.mva_z_up.setObjectName("mva_z_up") self.mva_z_layout.addWidget( @@ -1661,7 +1661,7 @@ def setupUi(self, controlStackedWidget): self.mva_z_down.setChecked(False) self.mva_z_down.setFlat(True) self.mva_z_down.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/down_arrow.svg") ) self.mva_z_down.setObjectName("mva_z_down") self.mva_z_layout.addWidget( @@ -1694,7 +1694,7 @@ def setupUi(self, controlStackedWidget): self.mva_home_x_btn.setChecked(False) self.mva_home_x_btn.setFlat(True) self.mva_home_x_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_x.svg") + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/motion/home_x.svg") ) self.mva_home_x_btn.setObjectName("mva_home_x_btn") self.mva_home_axis_layout.addWidget( @@ -1721,7 +1721,7 @@ def setupUi(self, controlStackedWidget): self.mva_home_y_btn.setChecked(False) self.mva_home_y_btn.setFlat(True) self.mva_home_y_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_y.svg") + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/motion/home_y.svg") ) self.mva_home_y_btn.setObjectName("mva_home_y_btn") self.mva_home_axis_layout.addWidget( @@ -1748,7 +1748,7 @@ def setupUi(self, controlStackedWidget): self.mva_home_z_btn.setChecked(False) self.mva_home_z_btn.setFlat(True) self.mva_home_z_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_z.svg") + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/motion/home_z.svg") ) self.mva_home_z_btn.setObjectName("mva_home_z_btn") self.mva_home_axis_layout.addWidget( @@ -1775,7 +1775,7 @@ def setupUi(self, controlStackedWidget): self.mva_home_all_btn.setChecked(False) self.mva_home_all_btn.setFlat(True) self.mva_home_all_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/home_all.svg") + "icon_pixmap", QtGui.QPixmap(":/motion/media/btn_icons/motion/home_all.svg") ) self.mva_home_all_btn.setObjectName("mva_home_all_btn") self.mva_home_axis_layout.addWidget( @@ -2233,7 +2233,7 @@ def setupUi(self, controlStackedWidget): self.mva_left_btn.setChecked(False) self.mva_left_btn.setFlat(True) self.mva_left_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/left_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/left_arrow.svg") ) self.mva_left_btn.setObjectName("mva_left_btn") self.gridLayout_2.addWidget(self.mva_left_btn, 1, 0, 1, 1) @@ -2258,7 +2258,7 @@ def setupUi(self, controlStackedWidget): self.mva_right_btn.setFlat(True) self.mva_right_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg"), + QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/right_arrow.svg"), ) self.mva_right_btn.setObjectName("mva_right_btn") self.gridLayout_2.addWidget(self.mva_right_btn, 1, 2, 1, 1) @@ -2280,7 +2280,7 @@ def setupUi(self, controlStackedWidget): self.mva_down_btn.setChecked(False) self.mva_down_btn.setFlat(True) self.mva_down_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/down_arrow.svg") ) self.mva_down_btn.setObjectName("mva_down_btn") self.gridLayout_2.addWidget(self.mva_down_btn, 2, 1, 1, 1) @@ -2302,7 +2302,7 @@ def setupUi(self, controlStackedWidget): self.mva_up_btn.setChecked(False) self.mva_up_btn.setFlat(True) self.mva_up_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/up_arrow.svg") ) self.mva_up_btn.setObjectName("mva_up_btn") self.gridLayout_2.addWidget(self.mva_up_btn, 0, 1, 1, 1) @@ -2320,7 +2320,7 @@ def setupUi(self, controlStackedWidget): self.mva_middle.setText("") self.mva_middle.setFlat(True) self.mva_middle.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/center_arrows.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/center_arrows.svg") ) self.mva_middle.setObjectName("mva_middle") self.gridLayout_2.addWidget(self.mva_middle, 1, 1, 1, 1) @@ -2398,7 +2398,7 @@ def setupUi(self, controlStackedWidget): self.temp_back_button.setAutoDefault(False) self.temp_back_button.setFlat(True) self.temp_back_button.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.temp_back_button.setObjectName("temp_back_button") self.horizontalLayout.addWidget(self.temp_back_button) @@ -2441,7 +2441,7 @@ def setupUi(self, controlStackedWidget): self.extruder_temp_display.setFlat(True) self.extruder_temp_display.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/nozzle.svg"), ) self.extruder_temp_display.setObjectName("extruder_temp_display") self.tp_content_horizontal_layout.addWidget(self.extruder_temp_display) @@ -2608,7 +2608,7 @@ def setupUi(self, controlStackedWidget): self.bed_temp_display.setProperty( "icon_pixmap", QtGui.QPixmap( - ":/temperature_related/media/btn_icons/temperature_plate.svg" + ":/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg" ), ) self.bed_temp_display.setObjectName("bed_temp_display") @@ -2641,7 +2641,7 @@ def setupUi(self, controlStackedWidget): self.cooldown_btn.setFlat(True) self.cooldown_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/temperature_related/media/btn_icons/cooldown.svg"), + QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_related/cooldown.svg"), ) self.cooldown_btn.setObjectName("cooldown_btn") self.gridLayout.addWidget(self.cooldown_btn, 2, 1, 1, 1) @@ -2683,7 +2683,7 @@ def setupUi(self, controlStackedWidget): self.temperature_cooldown_btn.setFlat(True) self.temperature_cooldown_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/temperature_related/media/btn_icons/heatsoak.svg"), + QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_related/heatsoak.svg"), ) self.temperature_cooldown_btn.setObjectName("temperature_cooldown_btn") self.gridLayout.addWidget(self.temperature_cooldown_btn, 2, 0, 1, 1) @@ -2768,7 +2768,7 @@ def setupUi(self, controlStackedWidget): self.z_adjust_back_button.setText("") self.z_adjust_back_button.setFlat(True) self.z_adjust_back_button.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.z_adjust_back_button.setObjectName("z_adjust_back_button") self.z_adjustment_header_layout.addWidget(self.z_adjust_back_button) @@ -2799,7 +2799,7 @@ def setupUi(self, controlStackedWidget): self.z_adjust_up_btn.setAutoDefault(False) self.z_adjust_up_btn.setFlat(True) self.z_adjust_up_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/up_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/up_arrow.svg") ) self.z_adjust_up_btn.setObjectName("z_adjust_up_btn") self.z_adjust_move_buttons_layout.addWidget( @@ -2824,7 +2824,7 @@ def setupUi(self, controlStackedWidget): self.z_adjust_down_btn.setAutoDefault(False) self.z_adjust_down_btn.setFlat(True) self.z_adjust_down_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/down_arrow.svg") + "icon_pixmap", QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_icons/down_arrow.svg") ) self.z_adjust_down_btn.setObjectName("z_adjust_down_btn") self.z_adjust_move_buttons_layout.addWidget( @@ -2891,7 +2891,7 @@ def setupUi(self, controlStackedWidget): self.z_adjust_confirm_btn.setAutoDefault(False) self.z_adjust_confirm_btn.setFlat(True) self.z_adjust_confirm_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/yes.svg") ) self.z_adjust_confirm_btn.setObjectName("z_adjust_confirm_btn") self.z_adjust_buttons_layout.addWidget(self.z_adjust_confirm_btn) @@ -2927,7 +2927,7 @@ def setupUi(self, controlStackedWidget): self.z_adjust_cancel_btn.setAutoDefault(False) self.z_adjust_cancel_btn.setFlat(True) self.z_adjust_cancel_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/no.svg") ) self.z_adjust_cancel_btn.setObjectName("z_adjust_cancel_btn") self.z_adjust_buttons_layout.addWidget(self.z_adjust_cancel_btn) @@ -2996,7 +2996,7 @@ def setupUi(self, controlStackedWidget): self.printer_settings_back_btn.setAutoDefault(False) self.printer_settings_back_btn.setFlat(True) self.printer_settings_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.printer_settings_back_btn.setObjectName("printer_settings_back_btn") self.printer_setting_header_layout.addWidget(self.printer_settings_back_btn) @@ -3078,7 +3078,7 @@ def setupUi(self, controlStackedWidget): self.fans_back_btn.setAutoDefault(False) self.fans_back_btn.setFlat(True) self.fans_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.fans_back_btn.setObjectName("fans_back_btn") self.fans_header_layout.addWidget(self.fans_back_btn) diff --git a/BlocksScreen/lib/ui/mainWindow.ui b/BlocksScreen/lib/ui/mainWindow.ui index b056308e..589d9167 100644 --- a/BlocksScreen/lib/ui/mainWindow.ui +++ b/BlocksScreen/lib/ui/mainWindow.ui @@ -563,7 +563,7 @@ QPushButton:pressed{ true - :/ui/media/btn_icons/notification.svg + :/ui/media/btn_icons/ui/notification.svg icon_text @@ -594,7 +594,7 @@ QPushButton:pressed{ secondary_display - :/extruder_related/media/btn_icons/nozzle_topbar.svg + :/extruder_related/media/btn_icons/extruder_related/nozzle_topbar.svg extruder_temperature_display @@ -625,7 +625,7 @@ QPushButton:pressed{ secondary_display - :/temperature_related/media/btn_icons/temperature_plate.svg + :/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg @@ -659,7 +659,7 @@ QPushButton:pressed{ display_secondary - :/temperature_related/media/btn_icons/humidity.svg + :/temperature_related/media/btn_icons/temperature_related/humidity.svg @@ -684,7 +684,7 @@ QPushButton:pressed{ true - :/filament_related/media/btn_icons/load_filament.svg + :/filament_related/media/btn_icons/filament_related/load_filament.svg icon_text @@ -715,7 +715,7 @@ QPushButton:pressed{ icon_text - :/temperature_related/media/btn_icons/standard_temperature.svg + :/temperature_related/media/btn_icons/temperature_related/standard_temperature.svg diff --git a/BlocksScreen/lib/ui/mainWindow_ui.py b/BlocksScreen/lib/ui/mainWindow_ui.py index 64b02bb6..26c02c88 100644 --- a/BlocksScreen/lib/ui/mainWindow_ui.py +++ b/BlocksScreen/lib/ui/mainWindow_ui.py @@ -356,7 +356,7 @@ def setupUi(self, MainWindow): self.notification_btn.setIconSize(QtCore.QSize(60, 60)) self.notification_btn.setFlat(True) self.notification_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/notification.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/notification.svg") ) self.notification_btn.setObjectName("notification_btn") self.header_main_layout.addWidget( @@ -368,7 +368,7 @@ def setupUi(self, MainWindow): self.extruder_temp_display.setFlat(True) self.extruder_temp_display.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle_topbar.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/nozzle_topbar.svg"), ) self.extruder_temp_display.setObjectName("extruder_temp_display") self.header_main_layout.addWidget( @@ -381,7 +381,7 @@ def setupUi(self, MainWindow): self.bed_temp_display.setProperty( "icon_pixmap", QtGui.QPixmap( - ":/temperature_related/media/btn_icons/temperature_plate.svg" + ":/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg" ), ) self.bed_temp_display.setObjectName("bed_temp_display") @@ -398,7 +398,7 @@ def setupUi(self, MainWindow): ) self.chamber_temp_display.setProperty( "secondary_pixmap", - QtGui.QPixmap(":/temperature_related/media/btn_icons/humidity.svg"), + QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_related/humidity.svg"), ) self.chamber_temp_display.setObjectName("chamber_temp_display") self.header_main_layout.addWidget( @@ -410,7 +410,7 @@ def setupUi(self, MainWindow): self.filament_type_icon.setFlat(True) self.filament_type_icon.setProperty( "icon_pixmap", - QtGui.QPixmap(":/filament_related/media/btn_icons/load_filament.svg"), + QtGui.QPixmap(":/filament_related/media/btn_icons/filament_related/load_filament.svg"), ) self.filament_type_icon.setObjectName("filament_type_icon") self.header_main_layout.addWidget( @@ -423,7 +423,7 @@ def setupUi(self, MainWindow): self.nozzle_size_icon.setProperty( "icon_pixmap", QtGui.QPixmap( - ":/temperature_related/media/btn_icons/standard_temperature.svg" + ":/temperature_related/media/btn_icons/temperature_related/standard_temperature.svg" ), ) self.nozzle_size_icon.setObjectName("nozzle_size_icon") diff --git a/BlocksScreen/lib/ui/resources/icon_resources.qrc b/BlocksScreen/lib/ui/resources/icon_resources.qrc index d0e03fbd..516d7830 100644 --- a/BlocksScreen/lib/ui/resources/icon_resources.qrc +++ b/BlocksScreen/lib/ui/resources/icon_resources.qrc @@ -1,7 +1,7 @@ media/btn_icons/network/static_ip.svg - media/btn_icons/wifi_config.svg + media/btn_icons/network/wifi_config.svg media/btn_icons/network/wifi_0bar.svg media/btn_icons/network/wifi_0bar_protected.svg media/btn_icons/network/wifi_1bar.svg @@ -13,116 +13,116 @@ media/btn_icons/network/wifi_4bar.svg media/btn_icons/network/wifi_4bar_protected.svg media/btn_icons/network/ethernet_connected.svg - media/btn_icons/hotspot.svg + media/btn_icons/network/hotspot.svg - media/btn_icons/move_nozzle_away.svg - media/btn_icons/move_nozzle_close.svg + media/btn_icons/baby_step/move_nozzle_away.svg + media/btn_icons/baby_step/move_nozzle_close.svg - media/btn_icons/no.svg - media/btn_icons/yes.svg + media/btn_icons/dialog/no.svg + media/btn_icons/dialog/yes.svg - media/btn_icons/file.svg + media/btn_icons/files/file.svg - media/btn_icons/reboot.svg - media/btn_icons/restart_firmware.svg - media/btn_icons/restart_klipper.svg - media/btn_icons/restart_printer.svg - media/btn_icons/update_software.svg + media/btn_icons/system/reboot.svg + media/btn_icons/system/restart_firmware.svg + media/btn_icons/system/restart_klipper.svg + media/btn_icons/system/restart_printer.svg + media/btn_icons/system/update_software.svg - media/btn_icons/fan.svg - media/btn_icons/fan_cage.svg - media/btn_icons/blower.svg + media/btn_icons/fan_related/fan.svg + media/btn_icons/fan_related/fan_cage.svg + media/btn_icons/fan_related/blower.svg - media/btn_icons/humidity.svg - media/btn_icons/standard_temperature.svg - media/btn_icons/temperature.svg - media/btn_icons/temperature_plate.svg - media/btn_icons/cooldown.svg - media/btn_icons/heatsoak.svg + media/btn_icons/temperature_related/humidity.svg + media/btn_icons/temperature_related/standard_temperature.svg + media/btn_icons/temperature_related/temperature.svg + media/btn_icons/temperature_related/temperature_plate.svg + media/btn_icons/temperature_related/cooldown.svg + media/btn_icons/temperature_related/heatsoak.svg - media/btn_icons/disable_steppers.svg - media/btn_icons/home_all.svg - media/btn_icons/home_x.svg - media/btn_icons/home_z.svg - media/btn_icons/home_y.svg - media/btn_icons/axis_maintenance.svg - media/btn_icons/speed.svg + media/btn_icons/motion/disable_steppers.svg + media/btn_icons/motion/home_all.svg + media/btn_icons/motion/home_x.svg + media/btn_icons/motion/home_z.svg + media/btn_icons/motion/home_y.svg + media/btn_icons/motion/axis_maintenance.svg + media/btn_icons/motion/speed.svg - media/btn_icons/add_spool.svg - media/btn_icons/add_filament.svg - media/btn_icons/spoolman.svg - media/btn_icons/spool_database_1.svg - media/btn_icons/check_gate_1.svg - media/btn_icons/eject.svg - media/btn_icons/change_filament.svg - media/btn_icons/filament_sensor.svg - media/btn_icons/filament_sensor_off.svg - media/btn_icons/filament_sensor_turn_on.svg - media/btn_icons/load_filament.svg - media/btn_icons/unload_filament.svg - media/btn_icons/loaded_spool.svg - media/btn_icons/half_spool.svg + media/btn_icons/filament_related/add_spool.svg + media/btn_icons/filament_related/add_filament.svg + media/btn_icons/filament_related/spoolman.svg + media/btn_icons/filament_related/spool_database_1.svg + media/btn_icons/filament_related/check_gate_1.svg + media/btn_icons/filament_related/eject.svg + media/btn_icons/filament_related/change_filament.svg + media/btn_icons/filament_related/filament_sensor.svg + media/btn_icons/filament_related/filament_sensor_off.svg + media/btn_icons/filament_related/filament_sensor_turn_on.svg + media/btn_icons/filament_related/load_filament.svg + media/btn_icons/filament_related/unload_filament.svg + media/btn_icons/filament_related/loaded_spool.svg + media/btn_icons/filament_related/half_spool.svg - media/btn_icons/notification.svg - media/btn_icons/usb.svg - media/btn_icons/garbage.svg - media/btn_icons/back.svg - media/btn_icons/refresh.svg - media/btn_icons/back_folder.svg - media/btn_icons/folder.svg - media/btn_icons/center_arrows.svg - media/btn_icons/error.svg - media/btn_icons/info.svg - media/btn_icons/leds.svg - media/btn_icons/pause.svg - media/btn_icons/play.svg - media/btn_icons/print.svg - media/btn_icons/stop.svg - media/btn_icons/layers.svg - media/btn_icons/printer_settings.svg - media/btn_icons/routine.svg - media/btn_icons/save.svg - media/btn_icons/time.svg - media/btn_icons/troubleshoot.svg - media/btn_icons/tune.svg - media/btn_icons/see.svg - media/btn_icons/unsee.svg + media/btn_icons/ui/notification.svg + media/btn_icons/ui/usb.svg + media/btn_icons/ui/garbage.svg + media/btn_icons/ui/back.svg + media/btn_icons/ui/refresh.svg + media/btn_icons/ui/back_folder.svg + media/btn_icons/ui/folder.svg + media/btn_icons/ui/center_arrows.svg + media/btn_icons/ui/error.svg + media/btn_icons/ui/info.svg + media/btn_icons/ui/leds.svg + media/btn_icons/ui/pause.svg + media/btn_icons/ui/play.svg + media/btn_icons/ui/print.svg + media/btn_icons/ui/stop.svg + media/btn_icons/ui/layers.svg + media/btn_icons/ui/printer_settings.svg + media/btn_icons/ui/routine.svg + media/btn_icons/ui/save.svg + media/btn_icons/ui/time.svg + media/btn_icons/ui/troubleshoot.svg + media/btn_icons/ui/tune.svg + media/btn_icons/ui/see.svg + media/btn_icons/ui/unsee.svg - media/btn_icons/baby_step.svg - media/btn_icons/bed_levelling.svg - media/btn_icons/eddy_mech.svg - media/btn_icons/inductive.svg - media/btn_icons/bltouch.svg + media/btn_icons/z_levelling/baby_step.svg + media/btn_icons/z_levelling/bed_levelling.svg + media/btn_icons/z_levelling/eddy_mech.svg + media/btn_icons/z_levelling/inductive.svg + media/btn_icons/z_levelling/bltouch.svg - media/btn_icons/extrude.svg - media/btn_icons/nozzle.svg - media/btn_icons/nozzle_topbar.svg - media/btn_icons/switch_print_core.svg - media/btn_icons/switch_zoom.svg + media/btn_icons/extruder_related/extrude.svg + media/btn_icons/extruder_related/nozzle.svg + media/btn_icons/extruder_related/nozzle_topbar.svg + media/btn_icons/extruder_related/switch_print_core.svg + media/btn_icons/extruder_related/switch_zoom.svg - media/btn_icons/input_shaper.svg - media/btn_icons/input_shaper_auto.svg - media/btn_icons/input_shaper_manual.svg + media/btn_icons/input_shaper/input_shaper.svg + media/btn_icons/input_shaper/input_shaper_auto.svg + media/btn_icons/input_shaper/input_shaper_manual.svg - media/btn_icons/arrow_left.svg - media/btn_icons/arrow_down.svg - media/btn_icons/arrow_right.svg - media/btn_icons/left_arrow.svg - media/btn_icons/right_arrow.svg - media/btn_icons/down_arrow.svg - media/btn_icons/up_arrow.svg + media/btn_icons/arrow_icons/arrow_left.svg + media/btn_icons/arrow_icons/arrow_down.svg + media/btn_icons/arrow_icons/arrow_right.svg + media/btn_icons/arrow_icons/left_arrow.svg + media/btn_icons/arrow_icons/right_arrow.svg + media/btn_icons/arrow_icons/down_arrow.svg + media/btn_icons/arrow_icons/up_arrow.svg diff --git a/BlocksScreen/lib/ui/resources/icon_resources_rc.py b/BlocksScreen/lib/ui/resources/icon_resources_rc.py index 27a0a9f1..d2404d04 100644 --- a/BlocksScreen/lib/ui/resources/icon_resources_rc.py +++ b/BlocksScreen/lib/ui/resources/icon_resources_rc.py @@ -5849,464 +5849,6 @@ \x37\x34\x2e\x36\x35\x2c\x31\x33\x32\x2e\x35\x37\x2c\x35\x37\x36\ \x2e\x38\x39\x2c\x31\x33\x35\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\ \x3e\ -\x00\x00\x0b\x5d\ -\x00\ -\x00\x38\xfa\x78\x9c\xed\x9b\xcb\x8e\x5c\xc7\x0d\x86\x5f\x65\x30\ -\xd9\xb2\xa8\x22\xeb\xee\x68\x04\x28\xda\xc6\x2b\xef\xbc\x09\x0e\ -\x8e\x64\x5b\xc0\xf8\x12\x8d\x60\xd9\x08\xf2\xee\xc1\xc7\xea\x91\ -\xa5\x20\x11\xe0\x38\x0b\x07\xe9\x85\xaa\xbb\xe7\x5c\x8a\xc5\xfb\ -\x4f\x52\x4f\x1f\x7e\xfc\xfa\xe6\xf5\xcb\xbb\xdb\x3f\x1f\x3f\xbf\ -\x7a\xf3\x17\xbb\xbd\x79\x79\xbc\x3d\xd2\x77\xc7\xb7\xaf\x2e\x7f\ -\xbb\xb1\xdb\x9b\x9f\xbe\xbd\xff\xee\xe1\xee\xf6\x9b\xb7\x6f\x7f\ -\xf8\xec\xc9\x93\x77\xef\xde\xe9\xbb\xa2\xdf\xbf\xf9\xfa\x89\xe7\ -\x9c\x9f\x3c\xfc\xf8\xf5\xed\xcd\x8f\xaf\x5f\xbd\xfb\xd3\xf7\x3f\ -\xdd\xdd\xe6\x9b\x7c\xd3\x73\xfc\xbb\x7d\xf6\xf4\xe5\xab\xaf\x1e\ -\x9e\x3d\x7d\x78\xfb\xf3\xfd\xab\x67\x7a\xde\x3f\x24\xfb\xdb\x57\ -\xaf\xef\xef\x3f\xfb\xc3\xab\xfc\x2a\xbf\xfc\xea\x8f\x7f\x7f\xfa\ -\x64\x5f\x7c\xfa\x64\xdf\xfa\xc3\xf1\xf6\x9b\x9b\xf3\xfe\x78\x78\ -\xb8\xbb\x8d\xfb\x6f\x6f\x5e\xde\xdd\x7e\x6e\x5e\xb4\x57\x29\x7d\ -\x6a\xab\x87\x0d\xed\x26\x7b\xcd\x92\xc5\x24\xa7\xa2\xde\x4e\xd3\ -\xb6\xd2\xd4\xd6\x93\xab\x25\xab\xea\x3d\x2d\x6d\x25\xd9\xd0\xd9\ -\x8e\x51\x74\xb9\xec\x35\x9e\x4b\x23\x55\x2d\x7e\xa6\xa2\x2d\xb9\ -\x7a\x49\x43\xab\x27\xd3\x31\x92\x99\xe4\xc3\xcc\xb5\x15\xb9\x7c\ -\xf0\x4c\x4e\x96\xb5\x0e\x69\xda\xe7\x99\xba\xd6\x26\x35\x99\x69\ -\x93\xa2\xb5\x27\xeb\x3a\x2d\xb9\xe6\x95\xca\x5e\xbc\xa4\xae\xb9\ -\xa7\xae\x6d\xa4\xa5\x56\xd2\xd2\xe9\xfb\x42\x61\xb7\xa2\x5e\xd3\ -\xd0\x92\x4c\x6d\xf2\x2a\x73\x71\x28\x68\x6a\x55\x9a\xce\xce\x96\ -\x26\x53\xe7\x4c\xd6\xd4\xc4\x74\x56\x5e\xdf\xc4\x35\xcf\xd4\xd5\ -\x5d\x7d\xa5\xc5\x2b\x5d\x6b\x4b\x95\xad\xab\x76\x98\xe1\xdc\xc0\ -\x93\xae\x2d\x8e\x06\x51\xb5\xa6\xaa\xcd\x52\xd3\x91\xa6\x8e\x9e\ -\x1a\x37\x57\x1d\x4d\x32\x1c\xb3\xc4\x0b\x37\x03\xf9\x35\xb4\x96\ -\xa4\xa5\xc6\xe1\xa1\xdb\x20\x74\x53\xe6\x2b\x41\x4f\xdd\xbb\x67\ -\x5e\x58\xd8\xc3\x46\xec\xd9\x93\xf1\xbb\xa9\x0f\x31\x2d\x2d\x4d\ -\xed\x2e\x4d\x4b\xbc\xc2\xfa\x61\xc5\xb4\x77\xb9\x7c\x6c\x79\x5a\ -\xd1\x3a\xd3\xd0\x59\xcf\x02\x79\xa6\x93\x67\x32\xf2\x1a\x6b\x3f\ -\x3d\xb5\x4e\x2d\x9e\xaa\xae\xca\xef\xa5\x4b\x1b\x34\xcf\xa6\xde\ -\x52\xd7\x51\xd9\x75\xa6\xa9\x13\xa6\x57\x64\xaa\x0b\xe9\x8c\xe4\ -\x1c\x9d\x83\x34\x5e\xd4\x5a\x6a\x5a\xca\xb1\x74\x2e\x89\x65\xab\ -\x47\x55\xab\x1c\xa2\xac\xd3\xb8\xbd\xea\x70\x71\x04\x28\x55\xad\ -\xb3\x59\x5d\x5b\x08\x55\x1b\xc2\xb2\xd4\xd1\xca\xa5\x33\x28\xe8\ -\x12\x64\xa8\x5f\x8e\xa4\xb5\x88\x67\x38\xa5\x65\x88\xeb\x82\xa9\ -\x12\xba\x87\x4a\x15\xde\xe3\x55\x2c\x35\xa9\x5a\x82\x93\xbc\xa1\ -\x6c\x22\x24\x94\x05\x36\xb6\xd0\xa7\x90\xd5\xe0\x40\xa5\xa7\xca\ -\x29\x2b\x3a\xb8\x10\xc7\x50\x1f\x41\x5f\xe2\xaf\x0b\xc9\x4f\x78\ -\x3f\xab\x6c\xf5\x46\x51\x04\x53\x48\x45\x97\x09\xdc\xee\x4d\xcc\ -\xd5\x1c\x3e\x95\x2e\x85\xd3\xbb\xce\x22\x3d\x24\x2a\x96\x13\xa7\ -\xac\xda\xa6\x14\x59\x5a\xa6\x34\x1d\x53\xac\xaa\x0d\x99\xf0\xa2\ -\x70\xcd\x65\x60\x2e\xce\x0d\x66\xa2\x86\x8d\x38\x57\xe6\xd6\xbc\ -\x52\xd8\xa8\xac\xd4\x75\xd5\xc3\xb2\xf6\x25\x7b\x0d\x13\x93\x20\ -\x74\x9e\xd8\x43\x53\xc3\x70\xd0\x33\x0b\x03\x6b\xc8\x1c\x33\x6a\ -\x3a\xc3\xe8\x6a\x9a\xba\x8a\x4c\xed\x8d\xdb\x8a\x07\x81\xc9\xd4\ -\x5d\x56\x70\x41\x57\x85\xfd\x61\x75\x70\x1b\x37\x21\x4b\xab\xc3\ -\x49\x87\x94\x3a\x64\x7b\x88\x89\xf5\xed\x75\x93\x32\xb4\x1a\x77\ -\x0c\x8e\xaf\x63\x2f\xfb\xd2\x92\x8a\x2a\x2f\x24\x11\xcb\x45\x77\ -\x4d\xd4\xc7\x59\x75\x9a\xb6\x26\x33\x39\x0f\x55\xec\xb9\x8c\xc3\ -\xca\x8c\xd3\xee\x8f\xfd\xa2\x19\x07\x2b\x6a\xeb\xf4\xd0\xe8\xf0\ -\x2e\xa9\x05\x85\x39\x35\xf8\xef\xda\x07\x74\xe4\xc9\x99\x4d\x6c\ -\x6a\x46\x65\xdc\xa5\xa8\x2f\x31\x14\xa6\x48\x55\x47\x37\xeb\x84\ -\xf0\x75\xac\x21\x6b\x93\x8b\xa7\x0c\x2f\x76\x26\x88\x1e\x71\x70\ -\x24\x66\xb0\x6e\x34\xb1\x0e\x17\x3a\x4a\x19\x47\x5d\x70\xcf\x0a\ -\x1b\x0d\x6c\xaf\xb5\x63\xe2\xb4\x64\xaf\x9b\x72\xcb\xd8\x64\xd3\ -\x7a\x0e\xb5\x70\x39\x9c\x1f\x77\x53\x83\xa8\xa1\x13\x75\x1d\x28\ -\xc3\xc2\xad\xad\x82\xca\x60\xc1\xe8\x1c\xda\x14\x3a\xd3\xa5\x4a\ -\xc1\x24\x96\xf6\xa4\x2e\xd6\x12\xe7\xca\xa8\xb5\x49\xbf\x88\x1b\ -\xbb\x2a\x03\x63\xe1\x8c\x25\x34\xb7\xe2\x17\x5b\x42\xa2\x61\x61\ -\xb8\x4e\x5e\x39\x07\xbc\x88\x3d\x64\xc0\x2a\xa4\x7c\x2c\xbe\xc5\ -\xf2\x28\xdd\xd1\xa4\x9e\xb0\x51\x6d\x86\x9c\xf0\x25\x62\x4d\x7b\ -\xd5\x1e\xac\x74\xfe\x30\xf0\x4d\x8e\x6d\x2e\xb8\xdf\x51\x7b\x57\ -\xeb\x30\x86\x6f\x1c\x13\x3f\x27\x05\x1d\x19\xea\xca\xfe\xcb\x70\ -\xb8\x32\xd5\x70\x30\xeb\x51\x11\x50\x0d\x71\xed\x15\x57\x1b\xbc\ -\x8d\x60\x65\x9c\xa5\xae\x63\xf2\xc7\x58\x76\xc0\x89\x2b\x43\xa7\ -\x9d\x9a\xf1\x36\xab\x6a\xad\xd2\xd3\x7e\x60\xb2\xc7\x2c\xf0\x71\ -\x2b\xb9\x58\x8e\xd8\x58\x90\xd7\x5c\xc8\xeb\xd1\xa1\x41\x09\x4a\ -\x63\x67\x53\x33\x29\x8a\x7f\x2a\x8b\xcd\x0a\x94\x4f\x0e\x9e\xd7\ -\xd1\x86\xb6\x21\x7b\xdd\x34\xb8\xce\x8e\x35\xcd\x13\xc3\x6a\x61\ -\xf7\xb8\xd0\x30\xb1\xf0\xe4\x5c\xb6\x99\xaa\xe4\x34\x45\x3d\x19\ -\x56\x8a\x9b\x32\xa4\x13\xa6\x89\x97\xd7\xba\x50\xf5\x06\x4b\x6d\ -\x1e\xad\x05\x45\xb1\x3e\xfa\xdc\x11\xa7\x5d\x44\xe5\xbe\x9d\x63\ -\x65\x1b\xa4\x8c\x1c\x23\x4a\xd9\xa6\xd8\x60\x78\x1e\x9c\x02\x59\ -\xcd\x86\x78\xb8\x30\x5d\x3a\x1c\x0c\x45\xc0\xd4\x89\xae\x3c\x3b\ -\x51\x1a\x5c\x84\x77\xe2\x4b\xe7\xec\xe1\x0d\x67\x43\x82\xc3\x8e\ -\x8e\x61\xc6\x72\xc9\x11\xb4\x37\xf5\x7a\xa6\x88\x3f\xf8\xc3\x88\ -\xc7\x11\x33\x23\x1e\x13\xd1\xda\x61\x61\xf9\x97\x14\xc1\x70\x4b\ -\xea\xfd\xc4\x23\x57\x3c\x21\xa1\x78\x74\x9c\x0f\x91\x11\xeb\xe4\ -\x60\x78\x15\xa4\xef\x88\x28\xa2\x58\x41\x69\x23\x89\xc0\x1d\xc7\ -\x96\x17\x83\x24\x39\xc0\xbb\x19\xa1\x34\xc1\x1a\xb4\x05\xb7\x6c\ -\xf0\xd8\x2c\x22\x87\x6b\x23\x37\xe8\xae\xdd\x09\x02\xb0\x3c\x2f\ -\x28\x26\x74\x91\x0b\x55\x1c\x7f\xa4\x10\x33\x85\x34\x32\xe1\xa3\ -\xe8\x58\xc7\xea\x78\x99\xbd\x3e\x1e\x9e\xd0\x51\xb4\xae\x13\x0f\ -\x8e\x1a\xe7\x41\xc6\xc1\xa5\xb1\x90\xf2\xd0\x76\x78\x17\xbf\xc4\ -\x6e\xb2\x8d\x95\xd4\xe6\x99\x26\x3e\x61\xa7\x09\x91\x3f\xa1\x44\ -\x64\x48\x45\xd6\x73\xb3\x01\x3f\x2e\x1f\x17\xcf\x89\x1e\x74\x29\ -\x73\xb0\x99\x61\x23\x18\x4b\xc7\xcd\x93\x9a\xc5\x17\x23\x9f\x9a\ -\x95\x00\x1a\x62\x0b\x81\x5a\xb2\x45\x50\x6c\x9a\xe7\x81\xaf\x0a\ -\x87\xf5\x5e\xa3\x9c\x4c\x60\xd6\x08\x28\x25\x2e\xa4\x11\x2e\x3e\ -\xb4\x72\x7e\xf9\xb9\xcd\x8a\x2e\x94\x92\xcf\x06\x6f\x4d\x2c\x67\ -\x92\x95\xda\x71\x76\xfc\x70\x54\xd8\x74\x26\xb5\xd4\x7a\xaa\x8d\ -\x44\xc8\x72\xdd\x59\x51\xdf\x6a\x61\x90\x57\x97\x92\x99\xb5\x99\ -\x56\xd5\x39\xa5\x92\xc8\xf1\xdd\xba\x58\x46\x5f\x5f\xb0\x9d\xf8\ -\x8c\x64\xae\x64\xf4\xbb\x14\xc4\x20\xbf\x10\xf2\xe5\xed\x93\x67\ -\x4f\xcf\xd7\x6f\xce\xfb\x57\xff\x94\x10\x9f\x3f\xdd\xdd\x72\x9f\ -\xb7\xdb\x9b\xf3\xe7\xbb\x5b\x77\x52\xa1\xdb\x9b\x37\x77\xb7\x03\ -\x06\xf0\xe0\xbf\xc9\xa3\x8b\x4d\x4c\xaf\x15\x7c\xce\x99\x3c\xe3\ -\x2c\x73\x82\x95\x91\xe2\x95\x91\xca\xda\x7f\xf3\x88\x35\xd6\x39\ -\x78\x09\x3f\x55\xba\x0e\xe7\x3b\x39\x0f\xaa\x5e\x06\xa1\xdd\x30\ -\xe4\xf8\x3e\x84\x1b\xed\x8b\x52\x16\x67\x89\x5d\xe4\xa3\x2d\xbf\ -\xfc\x04\x6d\x75\x87\xb4\x32\xc9\x83\xce\xe4\x93\xbc\xc7\x23\xac\ -\x77\xf2\xbf\x54\xb1\x8d\xb4\x96\x96\x54\xcb\xe1\xe1\xbb\xf7\xfa\ -\xa8\x78\x2d\xb2\x08\xc3\xea\x0a\x19\xd4\x20\xef\xb3\x48\xc7\x16\ -\xa6\xda\x22\x0d\x5b\x7e\xd8\x8a\x64\x27\xd6\xfd\xb0\x9b\x68\xbf\ -\x8f\x44\x0c\x0f\x17\x96\x1b\xe6\xee\x9d\x24\x1a\x3d\x6c\xa8\x3b\ -\x5c\x1a\x3b\x31\x42\x9c\xe1\xf2\x70\x88\x97\x74\xa6\xa0\xa2\xf1\ -\x1e\x02\x92\xd6\x79\xa6\x1d\x15\x4a\x4f\xda\xcb\x25\x1d\x24\x5a\ -\x64\xb5\x72\x9f\xb0\xd9\x12\x10\xc4\x20\xd4\x48\x23\x31\xba\x2a\ -\xf0\x7f\x21\x05\xab\xe2\x55\xdb\x7d\xc2\xa9\xa8\xd7\xa3\x98\x16\ -\x89\x65\x7b\x9b\x8e\xcb\x33\xa2\xb7\x1b\xa1\x71\xaf\xfb\x58\x98\ -\xa0\x18\x91\xcc\xc2\x33\xee\x75\x5f\x2b\xf8\x1b\xf6\xce\x82\x60\ -\x03\x58\x90\xe6\x63\x77\x36\x8e\x5e\x48\x16\xf7\xba\xa3\x25\x64\ -\x8d\x93\x04\x4c\xdc\xc5\x17\xe1\x1b\x01\x19\x2a\x4e\xb8\xc7\xf9\ -\x88\x03\xc5\x92\x17\x9c\x5b\xcb\xc4\x89\xe2\x32\x79\x65\xf2\x7d\ -\xdb\x80\x7e\x1c\x6c\x21\x29\x25\x03\xa9\xa0\x11\x5c\x08\xa1\xa1\ -\x8a\x55\x29\x17\x6f\x3e\xba\xd4\xf0\xb9\x53\x6d\xbe\xa8\x25\xa3\ -\x66\x35\x4f\xcd\x5c\x18\x9c\xac\xac\x26\x1f\x29\xcf\xa7\xb4\xec\ -\x03\x24\x59\xd7\x15\x49\x06\x92\xbc\xc2\xc8\x2b\x8c\x1c\xf6\xa2\ -\x2f\x7c\x8d\x95\x26\x40\x8d\x92\xa5\x83\xe9\xc5\xbc\x69\x1d\xe7\ -\x15\x47\x7e\x1a\x47\x06\x4a\xbc\xe2\xc8\x2b\x8e\xbc\xe2\xc8\xdf\ -\x8e\x23\xc7\x7b\x1c\x69\x1b\x48\xb6\xff\x17\x20\xd9\xff\x25\x90\ -\x6c\x57\x20\x79\x05\x92\x9f\x04\x92\xb9\x7d\x84\x24\xed\x3f\x47\ -\x92\xe5\x7f\x1e\x49\xda\x34\x75\x29\xb5\x69\x1f\xa7\xce\x91\xa8\ -\xae\xd8\xee\x23\x8c\x4b\xe5\x0d\x7c\x7e\x18\x35\x3b\xcc\x35\x3e\ -\x2e\x6e\x63\x51\xce\xc7\x11\x75\x40\x48\x0d\x28\x52\x1f\x21\x10\ -\x80\x0f\x60\xd9\x5f\x58\xa5\x49\x23\xa5\x0d\xb1\xde\x70\x25\xa5\ -\x47\xc1\xf7\xc3\xdd\x3f\x45\x65\xc9\x13\xd9\x15\x53\x5f\x87\x35\ -\x5e\xb6\xd7\xfc\xde\x57\xb6\x1e\xad\xa9\xc0\x4e\x14\x31\x29\x1a\ -\xe1\xfe\x8a\x8e\xf1\xdc\x28\x85\x53\x41\x89\x8f\x5d\x41\x71\xf6\ -\x1e\xe2\x73\x9d\x94\x79\x12\xe5\x07\x2c\x07\x22\x77\x8f\xcb\x4c\ -\x1a\xe5\xe6\x5d\x1a\x2a\xda\xa3\xb6\x0e\x92\x2e\x00\xdc\x68\x7e\ -\x70\xd7\x3e\x67\xa3\xb4\x14\xf5\x53\x35\xbf\xf7\x28\xd5\x1c\xc3\ -\x65\x5c\x1a\x68\xd4\x9e\x3d\xbc\xd8\xb8\xcf\x49\x73\x3f\x3a\x85\ -\x59\x32\xc7\xf2\x58\xbe\xec\x9a\x1b\xe5\xa5\xfa\x82\x13\x7b\x11\ -\x6f\xfc\x92\x92\xbb\x2e\xf1\x9a\x03\x8f\x7d\xc0\x8c\x4f\x16\x09\ -\x56\xc3\x25\x73\x7b\x5e\x87\x61\x0b\x80\xda\xf8\xb8\x70\xcd\x13\ -\x9d\x82\xfa\xd7\xd4\xa9\x1a\x35\x4a\x6b\x89\x72\x3b\xed\xa0\xa1\ -\xc3\x8f\x42\x61\x59\xf6\xba\x65\x4e\x01\x7a\x90\xcc\x55\xb8\x17\ -\xcb\x7e\x19\x45\xa2\x60\x01\x55\xf0\x75\x59\xb7\x7c\x22\xf4\x38\ -\x35\x77\xea\xb1\x7b\xd9\x3c\x59\x5a\xa9\x0b\xaf\x33\xda\x76\x23\ -\x70\x3d\x98\x98\xc7\x77\x0f\x84\x03\x68\x5f\x47\xed\x04\x9e\xbd\ -\x3e\xca\xdc\x29\xce\xbb\x78\xc7\x7a\xf7\xba\x89\x8c\x48\x45\x07\ -\xea\xac\x34\xe1\x64\xc8\x68\x74\x8f\xb8\x87\xf6\x09\xfd\x3e\x69\ -\x73\x4b\xb8\x50\xe6\x1d\x1e\xc5\xf8\x28\xf0\x2f\x0a\x0a\x4e\x5d\ -\xb9\xb3\x44\x5f\xaf\x60\x94\x11\x7e\xa2\x74\x40\x81\xb1\x6b\xff\ -\xa2\xe5\x12\xbd\x21\x7a\x99\x43\x3e\xe2\xf8\x15\x59\xff\xba\x1e\ -\xed\x15\x59\x5f\x91\xf5\x15\x59\xff\xc6\x0e\xed\x15\x59\x5f\x3b\ -\xb4\xd7\x0e\xed\x7f\xa9\x43\x7b\x45\xd6\x57\x64\x7d\x6d\xd1\xfe\ -\x9e\x91\x75\xeb\x83\x84\xdb\xe9\xa0\xad\x33\xf5\x91\x3a\xa3\x78\ -\x8c\xe7\x24\xcb\x2d\x79\xf4\xa4\x93\xe5\x45\xf3\xb0\x82\x53\x63\ -\x1c\xcd\xc1\x17\x7b\xc2\x8f\xb6\xa8\xd5\x7b\xca\x65\x3a\xa3\xb7\ -\x18\xcd\x7f\xba\xfc\x8c\x9b\x01\xc8\x68\x67\x32\x85\xe0\x54\x97\ -\x00\x84\x5a\x0b\x15\xa9\x80\x8a\x6a\xe5\xa0\xe7\x3a\x64\xaf\x8f\ -\x58\xaf\x51\x20\xab\xe3\xbc\xdc\xc4\x28\x59\x4c\xa4\x50\xf2\x54\ -\x06\xc6\x72\xbf\x0f\x84\x74\xf2\x7a\x70\x13\x33\x21\x1a\x83\x29\ -\xa3\x6f\xe4\x31\xe3\x93\x01\x9b\x29\xd1\x82\x05\x86\x38\x51\x9e\ -\xde\x27\x48\x6c\xf1\x52\x8b\xc6\x65\x14\xee\x5c\x20\x0d\x84\x56\ -\xbb\xcc\x1a\x33\x74\x97\xce\x44\x06\xcf\x37\xa3\xb3\x4a\x7b\x77\ -\x17\xde\xe8\x4c\xc2\x83\x16\x4d\xe0\x2a\x65\x4f\xbd\x45\x27\x95\ -\x82\x1a\x62\x8d\x69\x2a\x8b\x89\x82\x18\x5b\xd1\xb1\x5e\xb4\x78\ -\x88\x41\x01\x69\xd3\x62\x46\xa7\x4c\x75\xf9\x48\x20\x9f\x42\x40\ -\x03\xf4\x2a\xee\x74\x35\xa3\xa1\x4b\x5b\xd6\x26\xf3\x79\x01\x15\ -\x49\x6e\xf0\xe2\xed\x45\x0b\x3c\xe8\xd5\x00\x6c\x79\x8a\xf7\x2e\ -\x63\x00\x48\x7d\x14\x86\x22\x69\xae\xf6\x68\xb1\xf6\xf7\x78\x93\ -\x13\x3f\x37\xab\xdc\x76\xf9\xd8\x82\xe1\xc8\x25\xab\xcf\x17\x7c\ -\xf3\x41\xb9\x62\x6c\x8c\xe2\x31\x3e\xf1\x21\x61\x9f\x3a\x80\xaf\ -\xd0\x1e\xeb\x8d\xe1\x0d\x6a\xad\xb0\x81\xba\x29\xfd\x5c\x94\xa4\ -\xcc\xe4\x23\x0a\x16\x79\x85\x84\xf6\xc7\xa6\xa3\xe9\x62\xa4\xa9\ -\xaf\x7b\xe6\x4c\xf6\xc0\xd2\x48\x51\x4c\x88\x19\x48\xc6\x41\x94\ -\x21\xd1\x5f\xe6\x54\x63\x1e\x65\xc6\x48\x07\x25\x0e\x9b\x28\x6d\ -\x4d\xda\xfc\x64\x7e\x86\xea\xa8\xb6\xc9\x8c\x05\x63\x4f\x6d\x1e\ -\x2b\xa6\xe2\xf6\x7a\xc1\xc5\x86\x30\xfb\x8e\x7c\xce\x74\x16\x53\ -\xad\x9c\x95\x67\x93\x77\x5d\x70\x7e\xd2\x6d\x8f\x49\x31\xa7\x02\ -\x8b\x1d\x43\x9d\x65\x0c\x21\x48\xb2\x18\x31\x63\x1a\x2d\x0a\x43\ -\xa1\x21\xf1\xf1\x58\x5b\x41\x5b\xa3\xe2\x52\xf0\x19\x97\x8f\xcb\ -\x45\x47\xa9\xe6\x64\x5c\x95\xb1\x9a\xa8\x27\xcc\x04\xf8\xa6\xb8\ -\x44\x8a\x4b\x1d\x9b\x0a\x71\xec\xca\x9c\x08\x0a\x99\x8c\x39\x9d\ -\xa2\xe6\xcf\x19\xf1\x6b\xb2\xd7\x2d\xf2\x5f\xc4\x71\xc5\xdd\x57\ -\xdc\x7d\x1d\x8c\xfe\xb5\x83\xd1\xd7\x8e\xf6\x15\x77\x5f\x27\xa3\ -\xaf\x93\xd1\xbf\x87\xc9\xe8\x2b\xee\xbe\xe2\xee\x2b\xee\xae\xbf\ -\x07\xdc\xcd\xff\x58\x7c\xf6\x0f\x5d\xf3\x79\x03\ -\x00\x00\x10\xfc\ -\x3c\ -\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ -\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ -\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ -\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ -\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ -\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ -\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ -\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ -\x31\x22\x20\x64\x3d\x22\x4d\x39\x34\x2e\x35\x33\x2c\x32\x37\x36\ -\x2e\x37\x32\x61\x31\x32\x2e\x34\x31\x2c\x31\x32\x2e\x34\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x2e\x35\x33\x2d\x32\x2e\x31\x32\x63\x2e\ -\x33\x39\x2d\x35\x2e\x37\x34\x2e\x36\x32\x2d\x31\x31\x2e\x35\x31\ -\x2c\x31\x2e\x31\x32\x2d\x31\x37\x2e\x32\x34\x61\x31\x39\x30\x2e\ -\x36\x35\x2c\x31\x39\x30\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x31\x30\x2e\x37\x2d\x34\x37\x2e\x35\x39\x2c\x32\x30\x31\x2e\x32\ -\x32\x2c\x32\x30\x31\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ -\x31\x2e\x33\x31\x2d\x34\x32\x2e\x38\x37\x2c\x32\x30\x36\x2e\x31\ -\x31\x2c\x32\x30\x36\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x36\ -\x30\x2e\x36\x39\x2d\x36\x30\x2e\x35\x33\x41\x31\x39\x30\x2e\x34\ -\x36\x2c\x31\x39\x30\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ -\x34\x30\x2e\x34\x2c\x38\x32\x2e\x35\x31\x63\x38\x2e\x35\x38\x2d\ -\x32\x2e\x34\x37\x2c\x31\x37\x2e\x33\x33\x2d\x34\x2e\x34\x34\x2c\ -\x32\x36\x2e\x30\x38\x2d\x36\x2e\x32\x35\x61\x31\x32\x38\x2e\x33\ -\x36\x2c\x31\x32\x38\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x35\x2e\x31\x38\x2d\x31\x2e\x38\x33\x63\x35\x2d\x2e\x34\x32\x2c\ -\x31\x30\x2e\x31\x2d\x2e\x37\x31\x2c\x31\x35\x2e\x31\x35\x2d\x2e\ -\x37\x35\x2c\x36\x2e\x36\x34\x2d\x2e\x30\x35\x2c\x31\x33\x2e\x33\ -\x31\x2d\x2e\x31\x39\x2c\x31\x39\x2e\x39\x2e\x33\x39\x61\x32\x31\ -\x30\x2e\x35\x36\x2c\x32\x31\x30\x2e\x35\x36\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x33\x35\x2e\x34\x38\x2c\x36\x2e\x30\x37\x41\x32\x30\x32\ -\x2e\x39\x31\x2c\x32\x30\x32\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x33\x39\x37\x2c\x39\x37\x2e\x37\x32\x61\x32\x30\x36\x2c\x32\ -\x30\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x38\x2e\x37\x34\x2c\x35\ -\x39\x2e\x36\x39\x2c\x31\x39\x39\x2e\x35\x34\x2c\x31\x39\x39\x2e\ -\x35\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\x2e\x36\x31\x2c\x36\ -\x30\x2e\x37\x63\x32\x2e\x37\x31\x2c\x38\x2e\x39\x2c\x34\x2e\x35\ -\x39\x2c\x31\x38\x2e\x30\x37\x2c\x36\x2e\x34\x38\x2c\x32\x37\x2e\ -\x31\x39\x61\x31\x32\x37\x2e\x36\x2c\x31\x32\x37\x2e\x36\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x2e\x38\x32\x2c\x31\x35\x63\x2e\x34\x32\ -\x2c\x34\x2e\x38\x36\x2e\x37\x31\x2c\x39\x2e\x37\x34\x2e\x37\x35\ -\x2c\x31\x34\x2e\x36\x32\x2e\x30\x35\x2c\x36\x2e\x37\x35\x2e\x32\ -\x36\x2c\x31\x33\x2e\x35\x35\x2d\x2e\x34\x32\x2c\x32\x30\x2e\x32\ -\x35\x2d\x2e\x38\x38\x2c\x38\x2e\x37\x38\x2d\x32\x2e\x32\x32\x2c\ -\x31\x37\x2e\x35\x35\x2d\x34\x2c\x32\x36\x2e\x32\x31\x61\x31\x39\ -\x35\x2e\x30\x35\x2c\x31\x39\x35\x2e\x30\x35\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x31\x39\x2e\x31\x33\x2c\x35\x33\x2e\x31\x33\x2c\x32\x30\ -\x34\x2e\x38\x31\x2c\x32\x30\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x35\x33\x2e\x37\x34\x2c\x36\x35\x2c\x32\x30\x38\x2e\x30\ -\x38\x2c\x32\x30\x38\x2e\x30\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x32\ -\x34\x2e\x33\x31\x2c\x31\x36\x2e\x37\x2c\x34\x2c\x34\x2c\x30\x2c\ -\x30\x2c\x31\x2d\x33\x2e\x34\x37\x2e\x35\x36\x63\x2d\x34\x2e\x31\ -\x32\x2d\x31\x2e\x32\x34\x2d\x38\x2e\x31\x34\x2d\x32\x2e\x36\x32\ -\x2d\x31\x30\x2e\x34\x37\x2d\x36\x2e\x36\x33\x2d\x31\x2e\x37\x39\ -\x2d\x33\x2e\x30\x38\x2d\x31\x2e\x36\x34\x2d\x36\x2e\x34\x32\x2d\ -\x31\x2e\x31\x34\x2d\x39\x2e\x37\x39\x2e\x30\x38\x2d\x2e\x35\x32\ -\x2e\x31\x36\x2d\x31\x2c\x2e\x32\x36\x2d\x31\x2e\x35\x36\x61\x35\ -\x2e\x37\x2c\x35\x2e\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x2e\x39\ -\x33\x2d\x34\x2e\x34\x32\x2c\x31\x37\x39\x2e\x35\x2c\x31\x37\x39\ -\x2e\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x38\x39\x2e\x34\x31\x2d\x31\ -\x33\x36\x2e\x34\x34\x63\x2e\x34\x37\x2d\x34\x2e\x32\x35\x2e\x34\ -\x39\x2d\x38\x2e\x35\x36\x2e\x37\x31\x2d\x31\x32\x2e\x38\x34\x2e\ -\x31\x33\x2d\x32\x2e\x36\x34\x2e\x34\x34\x2d\x35\x2e\x32\x39\x2e\ -\x33\x33\x2d\x37\x2e\x39\x32\x2d\x2e\x32\x31\x2d\x35\x2e\x31\x36\ -\x2d\x2e\x36\x39\x2d\x31\x30\x2e\x33\x2d\x31\x2d\x31\x35\x2e\x34\ -\x35\x61\x31\x34\x38\x2e\x39\x34\x2c\x31\x34\x38\x2e\x39\x34\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x34\x2e\x38\x36\x2d\x32\x38\x2c\x31\x37\ -\x36\x2e\x38\x34\x2c\x31\x37\x36\x2e\x38\x34\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x31\x35\x2e\x39\x35\x2d\x34\x30\x2e\x31\x39\x2c\x31\x37\ -\x38\x2e\x37\x33\x2c\x31\x37\x38\x2e\x37\x33\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x33\x31\x2e\x36\x2d\x34\x32\x2c\x31\x39\x30\x2e\x33\x2c\ -\x31\x39\x30\x2e\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x30\x2e\x32\ -\x2d\x31\x37\x2e\x31\x36\x2c\x31\x37\x37\x2e\x31\x31\x2c\x31\x37\ -\x37\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x35\x35\ -\x2d\x31\x38\x2e\x32\x32\x2c\x31\x36\x35\x2e\x37\x2c\x31\x36\x35\ -\x2e\x37\x2c\x30\x2c\x30\x2c\x30\x2d\x34\x31\x2e\x30\x35\x2d\x31\ -\x33\x2e\x35\x63\x2d\x35\x2e\x35\x33\x2d\x31\x2d\x31\x31\x2e\x30\ -\x37\x2d\x32\x2d\x31\x36\x2e\x36\x35\x2d\x32\x2e\x37\x33\x2d\x34\ -\x2d\x2e\x35\x31\x2d\x38\x2e\x30\x39\x2d\x2e\x35\x34\x2d\x31\x32\ -\x2e\x31\x34\x2d\x2e\x37\x34\x2d\x33\x2e\x33\x34\x2d\x2e\x31\x36\ -\x2d\x36\x2e\x37\x2d\x2e\x34\x36\x2d\x31\x30\x2e\x30\x35\x2d\x2e\ -\x33\x35\x2d\x35\x2e\x32\x37\x2e\x31\x39\x2d\x31\x30\x2e\x35\x34\ -\x2e\x36\x38\x2d\x31\x35\x2e\x38\x32\x2c\x31\x61\x31\x36\x32\x2e\ -\x34\x31\x2c\x31\x36\x32\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x34\x31\x2e\x31\x39\x2c\x38\x2e\x36\x32\x2c\x31\x38\x32\x2e\x36\ -\x2c\x31\x38\x32\x2e\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x38\x2e\ -\x34\x38\x2c\x36\x34\x2e\x36\x36\x2c\x31\x37\x38\x2e\x30\x36\x2c\ -\x31\x37\x38\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x35\x2e\ -\x35\x36\x2c\x34\x39\x2e\x32\x36\x2c\x31\x36\x36\x2e\x38\x32\x2c\ -\x31\x36\x36\x2e\x38\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x2e\x38\ -\x31\x2c\x32\x38\x63\x2d\x31\x2e\x31\x33\x2c\x37\x2e\x35\x2d\x32\ -\x2e\x31\x38\x2c\x31\x35\x2d\x32\x2c\x32\x32\x2e\x36\x2e\x31\x33\ -\x2c\x37\x2e\x32\x32\x2d\x2e\x31\x39\x2c\x31\x34\x2e\x34\x37\x2e\ -\x34\x32\x2c\x32\x31\x2e\x36\x35\x61\x31\x37\x34\x2e\x30\x36\x2c\ -\x31\x37\x34\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x32\x2e\ -\x37\x39\x2c\x35\x32\x2e\x32\x38\x2c\x31\x37\x37\x2e\x34\x35\x2c\ -\x31\x37\x37\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x34\x2e\ -\x31\x33\x2c\x37\x32\x2c\x32\x34\x37\x2e\x33\x38\x2c\x32\x34\x37\ -\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2e\x35\x36\x2c\ -\x31\x34\x2e\x37\x38\x63\x32\x2e\x33\x38\x2c\x31\x2e\x35\x31\x2c\ -\x32\x2e\x39\x33\x2c\x33\x2e\x35\x32\x2c\x33\x2e\x33\x37\x2c\x35\ -\x2e\x37\x39\x2c\x31\x2e\x39\x32\x2c\x39\x2e\x38\x32\x2d\x34\x2e\ -\x34\x32\x2c\x31\x35\x2e\x32\x34\x2d\x31\x32\x2e\x37\x32\x2c\x31\ -\x36\x2e\x35\x38\x61\x33\x2e\x34\x37\x2c\x33\x2e\x34\x37\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x32\x2d\x2e\x34\x37\x2c\x32\x30\ -\x35\x2e\x36\x32\x2c\x32\x30\x35\x2e\x36\x32\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x37\x39\x2e\x34\x37\x2d\x38\x35\x2e\x34\x35\x2c\x31\x39\ -\x36\x2e\x32\x37\x2c\x31\x39\x36\x2e\x32\x37\x2c\x30\x2c\x30\x2c\ -\x31\x2d\x31\x34\x2e\x34\x2d\x33\x38\x63\x2d\x32\x2d\x37\x2e\x35\ -\x32\x2d\x33\x2e\x33\x35\x2d\x31\x35\x2e\x32\x2d\x34\x2e\x37\x31\ -\x2d\x32\x32\x2e\x38\x37\x61\x31\x35\x36\x2e\x33\x34\x2c\x31\x35\ -\x36\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x32\x33\x2d\ -\x32\x35\x2e\x37\x35\x2c\x36\x2e\x34\x33\x2c\x36\x2e\x34\x33\x2c\ -\x30\x2c\x30\x2c\x30\x2d\x2e\x35\x32\x2d\x31\x2e\x37\x36\x5a\x22\ -\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ -\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x36\x2c\x35\x32\ -\x36\x2e\x33\x37\x6c\x2d\x31\x2e\x31\x38\x2d\x2e\x36\x36\x61\x37\ -\x34\x2e\x39\x2c\x37\x34\x2e\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ -\x2e\x35\x2d\x34\x2e\x31\x38\x63\x2d\x33\x2e\x31\x38\x2d\x32\x2e\ -\x32\x34\x2d\x34\x2e\x36\x34\x2d\x35\x2e\x32\x36\x2d\x34\x2e\x36\ -\x34\x2d\x39\x2e\x34\x38\x71\x2e\x31\x39\x2d\x31\x30\x30\x2e\x32\ -\x39\x2e\x31\x32\x2d\x32\x30\x30\x2e\x35\x39\x61\x33\x2e\x38\x31\ -\x2c\x33\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x39\x31\ -\x2d\x33\x2e\x37\x31\x2c\x33\x33\x2e\x33\x31\x2c\x33\x33\x2e\x33\ -\x31\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x35\x2d\x32\x33\x2e\x33\x38\ -\x2c\x33\x34\x2e\x38\x34\x2c\x33\x34\x2e\x38\x34\x2c\x30\x2c\x30\ -\x2c\x31\x2c\x32\x35\x2e\x34\x34\x2d\x33\x39\x63\x31\x39\x2e\x38\ -\x32\x2d\x35\x2e\x34\x32\x2c\x34\x30\x2e\x34\x33\x2c\x38\x2e\x30\ -\x38\x2c\x34\x33\x2e\x32\x39\x2c\x32\x38\x2e\x33\x33\x2c\x32\x2c\ -\x31\x34\x2e\x34\x33\x2d\x33\x2e\x33\x35\x2c\x32\x35\x2e\x39\x33\ -\x2d\x31\x35\x2e\x32\x37\x2c\x33\x34\x2e\x33\x61\x33\x2e\x32\x32\ -\x2c\x33\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x36\x33\ -\x2c\x33\x71\x2e\x30\x36\x2c\x31\x30\x31\x2e\x37\x31\x2c\x30\x2c\ -\x32\x30\x33\x2e\x34\x33\x61\x37\x2e\x32\x33\x2c\x37\x2e\x32\x33\ -\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x31\x36\x2c\x33\x2e\x37\x36\ -\x2c\x31\x38\x2e\x38\x33\x2c\x31\x38\x2e\x38\x33\x2c\x30\x2c\x30\ -\x2c\x31\x2d\x39\x2e\x38\x33\x2c\x37\x2e\x34\x33\x2c\x31\x30\x2e\ -\x38\x33\x2c\x31\x30\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\ -\x2e\x34\x39\x2e\x38\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ -\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ -\x22\x4d\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\x2e\x34\x37\x63\ -\x30\x2c\x32\x2e\x31\x34\x2c\x30\x2c\x35\x2e\x37\x35\x2c\x30\x2c\ -\x39\x2e\x33\x35\x61\x31\x32\x37\x2e\x39\x33\x2c\x31\x32\x37\x2e\ -\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2c\x36\x38\x2e\x32\ -\x38\x2c\x31\x32\x31\x2e\x32\x32\x2c\x31\x32\x31\x2e\x32\x32\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x33\x36\x2e\x38\x36\x2c\x33\x36\x2e\x32\ -\x36\x63\x31\x2e\x37\x38\x2c\x31\x2e\x31\x32\x2c\x31\x2e\x35\x36\ -\x2c\x32\x2e\x37\x2c\x31\x2e\x37\x2c\x34\x2e\x31\x34\x2e\x36\x2c\ -\x36\x2e\x33\x33\x2d\x32\x2e\x36\x34\x2c\x31\x30\x2e\x36\x37\x2d\ -\x39\x2c\x31\x32\x2e\x32\x34\x61\x33\x2e\x32\x37\x2c\x33\x2e\x32\ -\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x38\x2d\x2e\x34\x34\ -\x2c\x31\x34\x33\x2e\x33\x39\x2c\x31\x34\x33\x2e\x33\x39\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x35\x35\x2e\x32\x33\x2d\x36\x31\x2e\x35\x36\ -\x2c\x31\x32\x38\x2e\x36\x35\x2c\x31\x32\x38\x2e\x36\x35\x2c\x30\ -\x2c\x30\x2c\x31\x2d\x39\x2e\x38\x2d\x32\x38\x2e\x36\x33\x2c\x31\ -\x37\x37\x2e\x31\x34\x2c\x31\x37\x37\x2e\x31\x34\x2c\x30\x2c\x30\ -\x2c\x31\x2d\x33\x2d\x31\x37\x2e\x36\x34\x41\x31\x33\x38\x2e\x37\ -\x35\x2c\x31\x33\x38\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x35\x39\x2e\x35\x37\x2c\x32\x35\x30\x61\x31\x34\x35\x2c\x31\x34\ -\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x31\x2e\x32\x38\x2d\x33\x32\ -\x2e\x33\x2c\x31\x34\x33\x2e\x34\x34\x2c\x31\x34\x33\x2e\x34\x34\ -\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x35\x2e\x36\x2d\x35\x33\x2e\x38\ -\x36\x2c\x31\x33\x36\x2e\x32\x31\x2c\x31\x33\x36\x2e\x32\x31\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x34\x32\x2d\x32\x30\x2e\x36\x32\x63\x35\ -\x2e\x37\x32\x2d\x31\x2e\x36\x36\x2c\x31\x31\x2e\x35\x34\x2d\x33\ -\x2c\x31\x37\x2e\x33\x39\x2d\x34\x2e\x32\x61\x39\x35\x2e\x33\x31\ -\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\x2d\ -\x31\x2e\x35\x35\x63\x36\x2e\x32\x35\x2d\x2e\x33\x34\x2c\x31\x32\ -\x2e\x35\x34\x2d\x2e\x34\x35\x2c\x31\x38\x2e\x38\x31\x2d\x2e\x33\ -\x39\x61\x39\x35\x2e\x33\x31\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\ -\x30\x2c\x31\x2c\x31\x30\x2e\x35\x2c\x31\x2c\x31\x34\x34\x2e\x33\ -\x36\x2c\x31\x34\x34\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ -\x31\x32\x2e\x37\x31\x2c\x38\x31\x2e\x37\x32\x2c\x31\x32\x35\x2e\ -\x37\x33\x2c\x31\x32\x35\x2e\x37\x33\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x39\x2e\x37\x2c\x32\x38\x2e\x33\x36\x63\x31\x2e\x31\x32\x2c\x35\ -\x2e\x35\x2c\x32\x2e\x32\x31\x2c\x31\x31\x2c\x32\x2e\x37\x38\x2c\ -\x31\x36\x2e\x36\x31\x2e\x36\x36\x2c\x36\x2e\x36\x31\x2c\x31\x2c\ -\x31\x33\x2e\x32\x38\x2c\x31\x2c\x31\x39\x2e\x39\x32\x41\x38\x32\ -\x2e\x38\x34\x2c\x38\x32\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\ -\x34\x34\x33\x2e\x30\x35\x2c\x32\x39\x38\x63\x2d\x31\x2c\x36\x2e\ -\x33\x39\x2d\x32\x2e\x32\x2c\x31\x32\x2e\x37\x37\x2d\x33\x2e\x36\ -\x37\x2c\x31\x39\x2e\x30\x37\x61\x31\x31\x38\x2e\x35\x2c\x31\x31\ -\x38\x2e\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x38\x37\x2c\x32\ -\x32\x2e\x31\x2c\x31\x34\x32\x2e\x38\x33\x2c\x31\x34\x32\x2e\x38\ -\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x33\x36\x2e\x38\x36\x2c\x34\x39\ -\x2e\x32\x36\x2c\x31\x33\x33\x2e\x35\x36\x2c\x31\x33\x33\x2e\x35\ -\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x30\x2c\x31\x34\x2e\x34\x32\ -\x2c\x34\x2e\x38\x31\x2c\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x31\ -\x2d\x33\x2c\x2e\x35\x63\x2d\x34\x2d\x2e\x36\x39\x2d\x37\x2e\x34\ -\x34\x2d\x32\x2e\x33\x36\x2d\x38\x2e\x37\x35\x2d\x36\x2e\x34\x38\ -\x2d\x31\x2d\x33\x2d\x2e\x33\x31\x2d\x35\x2e\x39\x33\x2c\x31\x2d\ -\x38\x2e\x37\x32\x61\x33\x2e\x36\x37\x2c\x33\x2e\x36\x37\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x31\x2e\x33\x37\x2d\x31\x2e\x32\x2c\x31\x32\ -\x35\x2c\x31\x32\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x36\x2d\x38\ -\x31\x2e\x35\x35\x2c\x31\x34\x31\x2c\x31\x34\x31\x2c\x30\x2c\x30\ -\x2c\x30\x2c\x32\x2e\x31\x36\x2d\x31\x37\x2e\x34\x38\x2c\x31\x33\ -\x35\x2c\x31\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x38\ -\x41\x31\x32\x31\x2e\x37\x36\x2c\x31\x32\x31\x2e\x37\x36\x2c\x30\ -\x2c\x30\x2c\x30\x2c\x34\x31\x34\x2e\x33\x39\x2c\x32\x33\x32\x61\ -\x31\x32\x36\x2c\x31\x32\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x32\ -\x2e\x38\x38\x2d\x32\x33\x2e\x37\x31\x41\x31\x32\x34\x2c\x31\x32\ -\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x36\x34\x2e\x34\x35\x2c\x31\ -\x37\x33\x61\x31\x31\x35\x2e\x38\x34\x2c\x31\x31\x35\x2e\x38\x34\ -\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x37\x38\x2d\x31\x33\x2e\ -\x35\x33\x63\x2d\x35\x2e\x31\x33\x2d\x31\x2e\x33\x39\x2d\x31\x30\ -\x2e\x34\x34\x2d\x32\x2e\x31\x38\x2d\x31\x35\x2e\x36\x35\x2d\x33\ -\x2e\x32\x37\x2d\x38\x2e\x32\x39\x2d\x31\x2e\x37\x32\x2d\x31\x36\ -\x2e\x37\x31\x2d\x31\x2e\x33\x36\x2d\x32\x35\x2d\x31\x2e\x31\x33\ -\x61\x31\x30\x33\x2e\x31\x35\x2c\x31\x30\x33\x2e\x31\x35\x2c\x30\ -\x2c\x30\x2c\x30\x2d\x32\x33\x2e\x37\x31\x2c\x33\x2e\x37\x33\x2c\ -\x31\x32\x31\x2e\x38\x37\x2c\x31\x32\x31\x2e\x38\x37\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x34\x35\x2e\x31\x38\x2c\x32\x32\x2e\x37\x35\x2c\ -\x31\x32\x34\x2e\x35\x37\x2c\x31\x32\x34\x2e\x35\x37\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x33\x31\x2e\x34\x38\x2c\x33\x37\x2e\x33\x31\x2c\ -\x31\x32\x37\x2e\x31\x32\x2c\x31\x32\x37\x2e\x31\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2d\x31\x34\x2e\x30\x37\x2c\x34\x30\x2e\x31\x38\x43\ -\x31\x37\x37\x2e\x38\x34\x2c\x32\x36\x33\x2c\x31\x37\x37\x2e\x35\ -\x31\x2c\x32\x36\x37\x2c\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\ -\x2e\x34\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ -\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ -\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\x34\x63\x2d\x2e\x33\ -\x35\x2c\x31\x39\x2e\x36\x32\x2d\x35\x2e\x34\x32\x2c\x33\x35\x2e\ -\x38\x36\x2d\x31\x35\x2e\x38\x31\x2c\x35\x30\x2e\x33\x39\x41\x38\ -\x36\x2e\x31\x35\x2c\x38\x36\x2e\x31\x35\x2c\x30\x2c\x30\x2c\x31\ -\x2c\x33\x34\x34\x2e\x34\x37\x2c\x33\x35\x31\x63\x2d\x33\x2e\x37\ -\x39\x2c\x32\x2e\x33\x31\x2d\x39\x2e\x35\x35\x2e\x31\x35\x2d\x31\ -\x30\x2e\x39\x34\x2d\x34\x2e\x31\x32\x61\x37\x2e\x33\x33\x2c\x37\ -\x2e\x33\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x34\x33\x2d\x38\ -\x2e\x35\x35\x2c\x36\x37\x2e\x37\x31\x2c\x36\x37\x2e\x37\x31\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x32\x32\x2e\x36\x34\x2d\x32\x31\x2e\x37\ -\x33\x2c\x36\x38\x2e\x35\x32\x2c\x36\x38\x2e\x35\x32\x2c\x30\x2c\ -\x30\x2c\x30\x2c\x31\x30\x2e\x37\x32\x2d\x32\x39\x2e\x33\x38\x2c\ -\x36\x39\x2e\x32\x32\x2c\x36\x39\x2e\x32\x32\x2c\x30\x2c\x30\x2c\ -\x30\x2d\x33\x34\x2e\x36\x39\x2d\x36\x38\x2e\x35\x32\x2c\x37\x31\ -\x2e\x38\x36\x2c\x37\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x32\x33\x2e\x32\x35\x2d\x38\x2e\x33\x35\x2c\x35\x36\x2e\x37\x32\ -\x2c\x35\x36\x2e\x37\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x2e\x39\ -\x34\x2d\x2e\x36\x39\x41\x38\x37\x2e\x34\x2c\x38\x37\x2e\x34\x2c\ -\x30\x2c\x30\x2c\x30\x2c\x32\x39\x31\x2c\x32\x31\x30\x61\x36\x39\ -\x2e\x35\x35\x2c\x36\x39\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x30\x2d\ -\x34\x33\x2e\x34\x38\x2c\x32\x32\x2e\x36\x37\x2c\x36\x36\x2e\x38\ -\x33\x2c\x36\x36\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x35\ -\x2e\x38\x31\x2c\x32\x39\x2e\x36\x33\x2c\x37\x30\x2e\x37\x34\x2c\ -\x37\x30\x2e\x37\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x38\x36\ -\x2c\x32\x30\x2e\x34\x34\x2c\x36\x39\x2e\x34\x35\x2c\x36\x39\x2e\ -\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x33\x2e\x32\x34\x2c\x35\ -\x35\x2e\x34\x35\x2c\x37\x2e\x31\x39\x2c\x37\x2e\x31\x39\x2c\x30\ -\x2c\x30\x2c\x31\x2c\x32\x2e\x37\x38\x2c\x37\x2e\x37\x33\x2c\x38\ -\x2e\x36\x38\x2c\x38\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ -\x2e\x35\x37\x2c\x36\x2c\x33\x2e\x32\x39\x2c\x33\x2e\x32\x39\x2c\ -\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x36\x31\x2d\x2e\x36\x2c\x38\x34\ -\x2e\x32\x34\x2c\x38\x34\x2e\x32\x34\x2c\x30\x2c\x30\x2c\x31\x2d\ -\x33\x31\x2e\x35\x37\x2d\x33\x32\x2e\x34\x34\x2c\x38\x31\x2e\x38\ -\x36\x2c\x38\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\ -\x36\x34\x2d\x33\x30\x2e\x31\x38\x2c\x38\x30\x2e\x39\x34\x2c\x38\ -\x30\x2e\x39\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x32\x36\x2d\ -\x34\x38\x2e\x39\x31\x63\x31\x30\x2e\x31\x31\x2d\x31\x38\x2e\x37\ -\x34\x2c\x32\x35\x2e\x33\x33\x2d\x33\x31\x2e\x38\x32\x2c\x34\x35\ -\x2e\x31\x38\x2d\x33\x39\x2e\x35\x31\x61\x37\x38\x2e\x37\x31\x2c\ -\x37\x38\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x30\x2e\x38\ -\x32\x2d\x35\x2c\x31\x33\x33\x2e\x37\x2c\x31\x33\x33\x2e\x37\x2c\ -\x30\x2c\x30\x2c\x31\x2c\x31\x36\x2e\x37\x35\x2d\x2e\x30\x37\x2c\ -\x36\x39\x2e\x36\x36\x2c\x36\x39\x2e\x36\x36\x2c\x30\x2c\x30\x2c\ -\x31\x2c\x32\x30\x2e\x34\x33\x2c\x34\x2e\x31\x33\x2c\x38\x34\x2e\ -\x38\x34\x2c\x38\x34\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ -\x31\x2e\x31\x33\x2c\x32\x39\x2e\x38\x34\x2c\x38\x31\x2e\x34\x36\ -\x2c\x38\x31\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x2e\ -\x34\x37\x2c\x33\x36\x2e\x33\x31\x43\x33\x38\x35\x2e\x32\x35\x2c\ -\x32\x36\x39\x2e\x39\x2c\x33\x38\x35\x2e\x34\x37\x2c\x32\x37\x34\ -\x2e\x34\x34\x2c\x33\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\ -\x34\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ \x00\x00\x04\x51\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -6846,6 +6388,464 @@ \x39\x48\x39\x38\x2e\x38\x31\x4c\x32\x37\x31\x2c\x33\x30\x30\x2c\ \x39\x38\x2e\x38\x33\x2c\x36\x31\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\ \x67\x3e\ +\x00\x00\x0b\x5d\ +\x00\ +\x00\x38\xfa\x78\x9c\xed\x9b\xcb\x8e\x5c\xc7\x0d\x86\x5f\x65\x30\ +\xd9\xb2\xa8\x22\xeb\xee\x68\x04\x28\xda\xc6\x2b\xef\xbc\x09\x0e\ +\x8e\x64\x5b\xc0\xf8\x12\x8d\x60\xd9\x08\xf2\xee\xc1\xc7\xea\x91\ +\xa5\x20\x11\xe0\x38\x0b\x07\xe9\x85\xaa\xbb\xe7\x5c\x8a\xc5\xfb\ +\x4f\x52\x4f\x1f\x7e\xfc\xfa\xe6\xf5\xcb\xbb\xdb\x3f\x1f\x3f\xbf\ +\x7a\xf3\x17\xbb\xbd\x79\x79\xbc\x3d\xd2\x77\xc7\xb7\xaf\x2e\x7f\ +\xbb\xb1\xdb\x9b\x9f\xbe\xbd\xff\xee\xe1\xee\xf6\x9b\xb7\x6f\x7f\ +\xf8\xec\xc9\x93\x77\xef\xde\xe9\xbb\xa2\xdf\xbf\xf9\xfa\x89\xe7\ +\x9c\x9f\x3c\xfc\xf8\xf5\xed\xcd\x8f\xaf\x5f\xbd\xfb\xd3\xf7\x3f\ +\xdd\xdd\xe6\x9b\x7c\xd3\x73\xfc\xbb\x7d\xf6\xf4\xe5\xab\xaf\x1e\ +\x9e\x3d\x7d\x78\xfb\xf3\xfd\xab\x67\x7a\xde\x3f\x24\xfb\xdb\x57\ +\xaf\xef\xef\x3f\xfb\xc3\xab\xfc\x2a\xbf\xfc\xea\x8f\x7f\x7f\xfa\ +\x64\x5f\x7c\xfa\x64\xdf\xfa\xc3\xf1\xf6\x9b\x9b\xf3\xfe\x78\x78\ +\xb8\xbb\x8d\xfb\x6f\x6f\x5e\xde\xdd\x7e\x6e\x5e\xb4\x57\x29\x7d\ +\x6a\xab\x87\x0d\xed\x26\x7b\xcd\x92\xc5\x24\xa7\xa2\xde\x4e\xd3\ +\xb6\xd2\xd4\xd6\x93\xab\x25\xab\xea\x3d\x2d\x6d\x25\xd9\xd0\xd9\ +\x8e\x51\x74\xb9\xec\x35\x9e\x4b\x23\x55\x2d\x7e\xa6\xa2\x2d\xb9\ +\x7a\x49\x43\xab\x27\xd3\x31\x92\x99\xe4\xc3\xcc\xb5\x15\xb9\x7c\ +\xf0\x4c\x4e\x96\xb5\x0e\x69\xda\xe7\x99\xba\xd6\x26\x35\x99\x69\ +\x93\xa2\xb5\x27\xeb\x3a\x2d\xb9\xe6\x95\xca\x5e\xbc\xa4\xae\xb9\ +\xa7\xae\x6d\xa4\xa5\x56\xd2\xd2\xe9\xfb\x42\x61\xb7\xa2\x5e\xd3\ +\xd0\x92\x4c\x6d\xf2\x2a\x73\x71\x28\x68\x6a\x55\x9a\xce\xce\x96\ +\x26\x53\xe7\x4c\xd6\xd4\xc4\x74\x56\x5e\xdf\xc4\x35\xcf\xd4\xd5\ +\x5d\x7d\xa5\xc5\x2b\x5d\x6b\x4b\x95\xad\xab\x76\x98\xe1\xdc\xc0\ +\x93\xae\x2d\x8e\x06\x51\xb5\xa6\xaa\xcd\x52\xd3\x91\xa6\x8e\x9e\ +\x1a\x37\x57\x1d\x4d\x32\x1c\xb3\xc4\x0b\x37\x03\xf9\x35\xb4\x96\ +\xa4\xa5\xc6\xe1\xa1\xdb\x20\x74\x53\xe6\x2b\x41\x4f\xdd\xbb\x67\ +\x5e\x58\xd8\xc3\x46\xec\xd9\x93\xf1\xbb\xa9\x0f\x31\x2d\x2d\x4d\ +\xed\x2e\x4d\x4b\xbc\xc2\xfa\x61\xc5\xb4\x77\xb9\x7c\x6c\x79\x5a\ +\xd1\x3a\xd3\xd0\x59\xcf\x02\x79\xa6\x93\x67\x32\xf2\x1a\x6b\x3f\ +\x3d\xb5\x4e\x2d\x9e\xaa\xae\xca\xef\xa5\x4b\x1b\x34\xcf\xa6\xde\ +\x52\xd7\x51\xd9\x75\xa6\xa9\x13\xa6\x57\x64\xaa\x0b\xe9\x8c\xe4\ +\x1c\x9d\x83\x34\x5e\xd4\x5a\x6a\x5a\xca\xb1\x74\x2e\x89\x65\xab\ +\x47\x55\xab\x1c\xa2\xac\xd3\xb8\xbd\xea\x70\x71\x04\x28\x55\xad\ +\xb3\x59\x5d\x5b\x08\x55\x1b\xc2\xb2\xd4\xd1\xca\xa5\x33\x28\xe8\ +\x12\x64\xa8\x5f\x8e\xa4\xb5\x88\x67\x38\xa5\x65\x88\xeb\x82\xa9\ +\x12\xba\x87\x4a\x15\xde\xe3\x55\x2c\x35\xa9\x5a\x82\x93\xbc\xa1\ +\x6c\x22\x24\x94\x05\x36\xb6\xd0\xa7\x90\xd5\xe0\x40\xa5\xa7\xca\ +\x29\x2b\x3a\xb8\x10\xc7\x50\x1f\x41\x5f\xe2\xaf\x0b\xc9\x4f\x78\ +\x3f\xab\x6c\xf5\x46\x51\x04\x53\x48\x45\x97\x09\xdc\xee\x4d\xcc\ +\xd5\x1c\x3e\x95\x2e\x85\xd3\xbb\xce\x22\x3d\x24\x2a\x96\x13\xa7\ +\xac\xda\xa6\x14\x59\x5a\xa6\x34\x1d\x53\xac\xaa\x0d\x99\xf0\xa2\ +\x70\xcd\x65\x60\x2e\xce\x0d\x66\xa2\x86\x8d\x38\x57\xe6\xd6\xbc\ +\x52\xd8\xa8\xac\xd4\x75\xd5\xc3\xb2\xf6\x25\x7b\x0d\x13\x93\x20\ +\x74\x9e\xd8\x43\x53\xc3\x70\xd0\x33\x0b\x03\x6b\xc8\x1c\x33\x6a\ +\x3a\xc3\xe8\x6a\x9a\xba\x8a\x4c\xed\x8d\xdb\x8a\x07\x81\xc9\xd4\ +\x5d\x56\x70\x41\x57\x85\xfd\x61\x75\x70\x1b\x37\x21\x4b\xab\xc3\ +\x49\x87\x94\x3a\x64\x7b\x88\x89\xf5\xed\x75\x93\x32\xb4\x1a\x77\ +\x0c\x8e\xaf\x63\x2f\xfb\xd2\x92\x8a\x2a\x2f\x24\x11\xcb\x45\x77\ +\x4d\xd4\xc7\x59\x75\x9a\xb6\x26\x33\x39\x0f\x55\xec\xb9\x8c\xc3\ +\xca\x8c\xd3\xee\x8f\xfd\xa2\x19\x07\x2b\x6a\xeb\xf4\xd0\xe8\xf0\ +\x2e\xa9\x05\x85\x39\x35\xf8\xef\xda\x07\x74\xe4\xc9\x99\x4d\x6c\ +\x6a\x46\x65\xdc\xa5\xa8\x2f\x31\x14\xa6\x48\x55\x47\x37\xeb\x84\ +\xf0\x75\xac\x21\x6b\x93\x8b\xa7\x0c\x2f\x76\x26\x88\x1e\x71\x70\ +\x24\x66\xb0\x6e\x34\xb1\x0e\x17\x3a\x4a\x19\x47\x5d\x70\xcf\x0a\ +\x1b\x0d\x6c\xaf\xb5\x63\xe2\xb4\x64\xaf\x9b\x72\xcb\xd8\x64\xd3\ +\x7a\x0e\xb5\x70\x39\x9c\x1f\x77\x53\x83\xa8\xa1\x13\x75\x1d\x28\ +\xc3\xc2\xad\xad\x82\xca\x60\xc1\xe8\x1c\xda\x14\x3a\xd3\xa5\x4a\ +\xc1\x24\x96\xf6\xa4\x2e\xd6\x12\xe7\xca\xa8\xb5\x49\xbf\x88\x1b\ +\xbb\x2a\x03\x63\xe1\x8c\x25\x34\xb7\xe2\x17\x5b\x42\xa2\x61\x61\ +\xb8\x4e\x5e\x39\x07\xbc\x88\x3d\x64\xc0\x2a\xa4\x7c\x2c\xbe\xc5\ +\xf2\x28\xdd\xd1\xa4\x9e\xb0\x51\x6d\x86\x9c\xf0\x25\x62\x4d\x7b\ +\xd5\x1e\xac\x74\xfe\x30\xf0\x4d\x8e\x6d\x2e\xb8\xdf\x51\x7b\x57\ +\xeb\x30\x86\x6f\x1c\x13\x3f\x27\x05\x1d\x19\xea\xca\xfe\xcb\x70\ +\xb8\x32\xd5\x70\x30\xeb\x51\x11\x50\x0d\x71\xed\x15\x57\x1b\xbc\ +\x8d\x60\x65\x9c\xa5\xae\x63\xf2\xc7\x58\x76\xc0\x89\x2b\x43\xa7\ +\x9d\x9a\xf1\x36\xab\x6a\xad\xd2\xd3\x7e\x60\xb2\xc7\x2c\xf0\x71\ +\x2b\xb9\x58\x8e\xd8\x58\x90\xd7\x5c\xc8\xeb\xd1\xa1\x41\x09\x4a\ +\x63\x67\x53\x33\x29\x8a\x7f\x2a\x8b\xcd\x0a\x94\x4f\x0e\x9e\xd7\ +\xd1\x86\xb6\x21\x7b\xdd\x34\xb8\xce\x8e\x35\xcd\x13\xc3\x6a\x61\ +\xf7\xb8\xd0\x30\xb1\xf0\xe4\x5c\xb6\x99\xaa\xe4\x34\x45\x3d\x19\ +\x56\x8a\x9b\x32\xa4\x13\xa6\x89\x97\xd7\xba\x50\xf5\x06\x4b\x6d\ +\x1e\xad\x05\x45\xb1\x3e\xfa\xdc\x11\xa7\x5d\x44\xe5\xbe\x9d\x63\ +\x65\x1b\xa4\x8c\x1c\x23\x4a\xd9\xa6\xd8\x60\x78\x1e\x9c\x02\x59\ +\xcd\x86\x78\xb8\x30\x5d\x3a\x1c\x0c\x45\xc0\xd4\x89\xae\x3c\x3b\ +\x51\x1a\x5c\x84\x77\xe2\x4b\xe7\xec\xe1\x0d\x67\x43\x82\xc3\x8e\ +\x8e\x61\xc6\x72\xc9\x11\xb4\x37\xf5\x7a\xa6\x88\x3f\xf8\xc3\x88\ +\xc7\x11\x33\x23\x1e\x13\xd1\xda\x61\x61\xf9\x97\x14\xc1\x70\x4b\ +\xea\xfd\xc4\x23\x57\x3c\x21\xa1\x78\x74\x9c\x0f\x91\x11\xeb\xe4\ +\x60\x78\x15\xa4\xef\x88\x28\xa2\x58\x41\x69\x23\x89\xc0\x1d\xc7\ +\x96\x17\x83\x24\x39\xc0\xbb\x19\xa1\x34\xc1\x1a\xb4\x05\xb7\x6c\ +\xf0\xd8\x2c\x22\x87\x6b\x23\x37\xe8\xae\xdd\x09\x02\xb0\x3c\x2f\ +\x28\x26\x74\x91\x0b\x55\x1c\x7f\xa4\x10\x33\x85\x34\x32\xe1\xa3\ +\xe8\x58\xc7\xea\x78\x99\xbd\x3e\x1e\x9e\xd0\x51\xb4\xae\x13\x0f\ +\x8e\x1a\xe7\x41\xc6\xc1\xa5\xb1\x90\xf2\xd0\x76\x78\x17\xbf\xc4\ +\x6e\xb2\x8d\x95\xd4\xe6\x99\x26\x3e\x61\xa7\x09\x91\x3f\xa1\x44\ +\x64\x48\x45\xd6\x73\xb3\x01\x3f\x2e\x1f\x17\xcf\x89\x1e\x74\x29\ +\x73\xb0\x99\x61\x23\x18\x4b\xc7\xcd\x93\x9a\xc5\x17\x23\x9f\x9a\ +\x95\x00\x1a\x62\x0b\x81\x5a\xb2\x45\x50\x6c\x9a\xe7\x81\xaf\x0a\ +\x87\xf5\x5e\xa3\x9c\x4c\x60\xd6\x08\x28\x25\x2e\xa4\x11\x2e\x3e\ +\xb4\x72\x7e\xf9\xb9\xcd\x8a\x2e\x94\x92\xcf\x06\x6f\x4d\x2c\x67\ +\x92\x95\xda\x71\x76\xfc\x70\x54\xd8\x74\x26\xb5\xd4\x7a\xaa\x8d\ +\x44\xc8\x72\xdd\x59\x51\xdf\x6a\x61\x90\x57\x97\x92\x99\xb5\x99\ +\x56\xd5\x39\xa5\x92\xc8\xf1\xdd\xba\x58\x46\x5f\x5f\xb0\x9d\xf8\ +\x8c\x64\xae\x64\xf4\xbb\x14\xc4\x20\xbf\x10\xf2\xe5\xed\x93\x67\ +\x4f\xcf\xd7\x6f\xce\xfb\x57\xff\x94\x10\x9f\x3f\xdd\xdd\x72\x9f\ +\xb7\xdb\x9b\xf3\xe7\xbb\x5b\x77\x52\xa1\xdb\x9b\x37\x77\xb7\x03\ +\x06\xf0\xe0\xbf\xc9\xa3\x8b\x4d\x4c\xaf\x15\x7c\xce\x99\x3c\xe3\ +\x2c\x73\x82\x95\x91\xe2\x95\x91\xca\xda\x7f\xf3\x88\x35\xd6\x39\ +\x78\x09\x3f\x55\xba\x0e\xe7\x3b\x39\x0f\xaa\x5e\x06\xa1\xdd\x30\ +\xe4\xf8\x3e\x84\x1b\xed\x8b\x52\x16\x67\x89\x5d\xe4\xa3\x2d\xbf\ +\xfc\x04\x6d\x75\x87\xb4\x32\xc9\x83\xce\xe4\x93\xbc\xc7\x23\xac\ +\x77\xf2\xbf\x54\xb1\x8d\xb4\x96\x96\x54\xcb\xe1\xe1\xbb\xf7\xfa\ +\xa8\x78\x2d\xb2\x08\xc3\xea\x0a\x19\xd4\x20\xef\xb3\x48\xc7\x16\ +\xa6\xda\x22\x0d\x5b\x7e\xd8\x8a\x64\x27\xd6\xfd\xb0\x9b\x68\xbf\ +\x8f\x44\x0c\x0f\x17\x96\x1b\xe6\xee\x9d\x24\x1a\x3d\x6c\xa8\x3b\ +\x5c\x1a\x3b\x31\x42\x9c\xe1\xf2\x70\x88\x97\x74\xa6\xa0\xa2\xf1\ +\x1e\x02\x92\xd6\x79\xa6\x1d\x15\x4a\x4f\xda\xcb\x25\x1d\x24\x5a\ +\x64\xb5\x72\x9f\xb0\xd9\x12\x10\xc4\x20\xd4\x48\x23\x31\xba\x2a\ +\xf0\x7f\x21\x05\xab\xe2\x55\xdb\x7d\xc2\xa9\xa8\xd7\xa3\x98\x16\ +\x89\x65\x7b\x9b\x8e\xcb\x33\xa2\xb7\x1b\xa1\x71\xaf\xfb\x58\x98\ +\xa0\x18\x91\xcc\xc2\x33\xee\x75\x5f\x2b\xf8\x1b\xf6\xce\x82\x60\ +\x03\x58\x90\xe6\x63\x77\x36\x8e\x5e\x48\x16\xf7\xba\xa3\x25\x64\ +\x8d\x93\x04\x4c\xdc\xc5\x17\xe1\x1b\x01\x19\x2a\x4e\xb8\xc7\xf9\ +\x88\x03\xc5\x92\x17\x9c\x5b\xcb\xc4\x89\xe2\x32\x79\x65\xf2\x7d\ +\xdb\x80\x7e\x1c\x6c\x21\x29\x25\x03\xa9\xa0\x11\x5c\x08\xa1\xa1\ +\x8a\x55\x29\x17\x6f\x3e\xba\xd4\xf0\xb9\x53\x6d\xbe\xa8\x25\xa3\ +\x66\x35\x4f\xcd\x5c\x18\x9c\xac\xac\x26\x1f\x29\xcf\xa7\xb4\xec\ +\x03\x24\x59\xd7\x15\x49\x06\x92\xbc\xc2\xc8\x2b\x8c\x1c\xf6\xa2\ +\x2f\x7c\x8d\x95\x26\x40\x8d\x92\xa5\x83\xe9\xc5\xbc\x69\x1d\xe7\ +\x15\x47\x7e\x1a\x47\x06\x4a\xbc\xe2\xc8\x2b\x8e\xbc\xe2\xc8\xdf\ +\x8e\x23\xc7\x7b\x1c\x69\x1b\x48\xb6\xff\x17\x20\xd9\xff\x25\x90\ +\x6c\x57\x20\x79\x05\x92\x9f\x04\x92\xb9\x7d\x84\x24\xed\x3f\x47\ +\x92\xe5\x7f\x1e\x49\xda\x34\x75\x29\xb5\x69\x1f\xa7\xce\x91\xa8\ +\xae\xd8\xee\x23\x8c\x4b\xe5\x0d\x7c\x7e\x18\x35\x3b\xcc\x35\x3e\ +\x2e\x6e\x63\x51\xce\xc7\x11\x75\x40\x48\x0d\x28\x52\x1f\x21\x10\ +\x80\x0f\x60\xd9\x5f\x58\xa5\x49\x23\xa5\x0d\xb1\xde\x70\x25\xa5\ +\x47\xc1\xf7\xc3\xdd\x3f\x45\x65\xc9\x13\xd9\x15\x53\x5f\x87\x35\ +\x5e\xb6\xd7\xfc\xde\x57\xb6\x1e\xad\xa9\xc0\x4e\x14\x31\x29\x1a\ +\xe1\xfe\x8a\x8e\xf1\xdc\x28\x85\x53\x41\x89\x8f\x5d\x41\x71\xf6\ +\x1e\xe2\x73\x9d\x94\x79\x12\xe5\x07\x2c\x07\x22\x77\x8f\xcb\x4c\ +\x1a\xe5\xe6\x5d\x1a\x2a\xda\xa3\xb6\x0e\x92\x2e\x00\xdc\x68\x7e\ +\x70\xd7\x3e\x67\xa3\xb4\x14\xf5\x53\x35\xbf\xf7\x28\xd5\x1c\xc3\ +\x65\x5c\x1a\x68\xd4\x9e\x3d\xbc\xd8\xb8\xcf\x49\x73\x3f\x3a\x85\ +\x59\x32\xc7\xf2\x58\xbe\xec\x9a\x1b\xe5\xa5\xfa\x82\x13\x7b\x11\ +\x6f\xfc\x92\x92\xbb\x2e\xf1\x9a\x03\x8f\x7d\xc0\x8c\x4f\x16\x09\ +\x56\xc3\x25\x73\x7b\x5e\x87\x61\x0b\x80\xda\xf8\xb8\x70\xcd\x13\ +\x9d\x82\xfa\xd7\xd4\xa9\x1a\x35\x4a\x6b\x89\x72\x3b\xed\xa0\xa1\ +\xc3\x8f\x42\x61\x59\xf6\xba\x65\x4e\x01\x7a\x90\xcc\x55\xb8\x17\ +\xcb\x7e\x19\x45\xa2\x60\x01\x55\xf0\x75\x59\xb7\x7c\x22\xf4\x38\ +\x35\x77\xea\xb1\x7b\xd9\x3c\x59\x5a\xa9\x0b\xaf\x33\xda\x76\x23\ +\x70\x3d\x98\x98\xc7\x77\x0f\x84\x03\x68\x5f\x47\xed\x04\x9e\xbd\ +\x3e\xca\xdc\x29\xce\xbb\x78\xc7\x7a\xf7\xba\x89\x8c\x48\x45\x07\ +\xea\xac\x34\xe1\x64\xc8\x68\x74\x8f\xb8\x87\xf6\x09\xfd\x3e\x69\ +\x73\x4b\xb8\x50\xe6\x1d\x1e\xc5\xf8\x28\xf0\x2f\x0a\x0a\x4e\x5d\ +\xb9\xb3\x44\x5f\xaf\x60\x94\x11\x7e\xa2\x74\x40\x81\xb1\x6b\xff\ +\xa2\xe5\x12\xbd\x21\x7a\x99\x43\x3e\xe2\xf8\x15\x59\xff\xba\x1e\ +\xed\x15\x59\x5f\x91\xf5\x15\x59\xff\xc6\x0e\xed\x15\x59\x5f\x3b\ +\xb4\xd7\x0e\xed\x7f\xa9\x43\x7b\x45\xd6\x57\x64\x7d\x6d\xd1\xfe\ +\x9e\x91\x75\xeb\x83\x84\xdb\xe9\xa0\xad\x33\xf5\x91\x3a\xa3\x78\ +\x8c\xe7\x24\xcb\x2d\x79\xf4\xa4\x93\xe5\x45\xf3\xb0\x82\x53\x63\ +\x1c\xcd\xc1\x17\x7b\xc2\x8f\xb6\xa8\xd5\x7b\xca\x65\x3a\xa3\xb7\ +\x18\xcd\x7f\xba\xfc\x8c\x9b\x01\xc8\x68\x67\x32\x85\xe0\x54\x97\ +\x00\x84\x5a\x0b\x15\xa9\x80\x8a\x6a\xe5\xa0\xe7\x3a\x64\xaf\x8f\ +\x58\xaf\x51\x20\xab\xe3\xbc\xdc\xc4\x28\x59\x4c\xa4\x50\xf2\x54\ +\x06\xc6\x72\xbf\x0f\x84\x74\xf2\x7a\x70\x13\x33\x21\x1a\x83\x29\ +\xa3\x6f\xe4\x31\xe3\x93\x01\x9b\x29\xd1\x82\x05\x86\x38\x51\x9e\ +\xde\x27\x48\x6c\xf1\x52\x8b\xc6\x65\x14\xee\x5c\x20\x0d\x84\x56\ +\xbb\xcc\x1a\x33\x74\x97\xce\x44\x06\xcf\x37\xa3\xb3\x4a\x7b\x77\ +\x17\xde\xe8\x4c\xc2\x83\x16\x4d\xe0\x2a\x65\x4f\xbd\x45\x27\x95\ +\x82\x1a\x62\x8d\x69\x2a\x8b\x89\x82\x18\x5b\xd1\xb1\x5e\xb4\x78\ +\x88\x41\x01\x69\xd3\x62\x46\xa7\x4c\x75\xf9\x48\x20\x9f\x42\x40\ +\x03\xf4\x2a\xee\x74\x35\xa3\xa1\x4b\x5b\xd6\x26\xf3\x79\x01\x15\ +\x49\x6e\xf0\xe2\xed\x45\x0b\x3c\xe8\xd5\x00\x6c\x79\x8a\xf7\x2e\ +\x63\x00\x48\x7d\x14\x86\x22\x69\xae\xf6\x68\xb1\xf6\xf7\x78\x93\ +\x13\x3f\x37\xab\xdc\x76\xf9\xd8\x82\xe1\xc8\x25\xab\xcf\x17\x7c\ +\xf3\x41\xb9\x62\x6c\x8c\xe2\x31\x3e\xf1\x21\x61\x9f\x3a\x80\xaf\ +\xd0\x1e\xeb\x8d\xe1\x0d\x6a\xad\xb0\x81\xba\x29\xfd\x5c\x94\xa4\ +\xcc\xe4\x23\x0a\x16\x79\x85\x84\xf6\xc7\xa6\xa3\xe9\x62\xa4\xa9\ +\xaf\x7b\xe6\x4c\xf6\xc0\xd2\x48\x51\x4c\x88\x19\x48\xc6\x41\x94\ +\x21\xd1\x5f\xe6\x54\x63\x1e\x65\xc6\x48\x07\x25\x0e\x9b\x28\x6d\ +\x4d\xda\xfc\x64\x7e\x86\xea\xa8\xb6\xc9\x8c\x05\x63\x4f\x6d\x1e\ +\x2b\xa6\xe2\xf6\x7a\xc1\xc5\x86\x30\xfb\x8e\x7c\xce\x74\x16\x53\ +\xad\x9c\x95\x67\x93\x77\x5d\x70\x7e\xd2\x6d\x8f\x49\x31\xa7\x02\ +\x8b\x1d\x43\x9d\x65\x0c\x21\x48\xb2\x18\x31\x63\x1a\x2d\x0a\x43\ +\xa1\x21\xf1\xf1\x58\x5b\x41\x5b\xa3\xe2\x52\xf0\x19\x97\x8f\xcb\ +\x45\x47\xa9\xe6\x64\x5c\x95\xb1\x9a\xa8\x27\xcc\x04\xf8\xa6\xb8\ +\x44\x8a\x4b\x1d\x9b\x0a\x71\xec\xca\x9c\x08\x0a\x99\x8c\x39\x9d\ +\xa2\xe6\xcf\x19\xf1\x6b\xb2\xd7\x2d\xf2\x5f\xc4\x71\xc5\xdd\x57\ +\xdc\x7d\x1d\x8c\xfe\xb5\x83\xd1\xd7\x8e\xf6\x15\x77\x5f\x27\xa3\ +\xaf\x93\xd1\xbf\x87\xc9\xe8\x2b\xee\xbe\xe2\xee\x2b\xee\xae\xbf\ +\x07\xdc\xcd\xff\x58\x7c\xf6\x0f\x5d\xf3\x79\x03\ +\x00\x00\x10\xfc\ +\x3c\ +\x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ +\x20\x64\x61\x74\x61\x2d\x6e\x61\x6d\x65\x3d\x22\x4c\x61\x79\x65\ +\x72\x20\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ +\x22\x30\x20\x30\x20\x36\x30\x30\x20\x36\x30\x30\x22\x3e\x3c\x64\ +\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x3e\x2e\x63\x6c\x73\x2d\ +\x31\x7b\x66\x69\x6c\x6c\x3a\x23\x65\x30\x65\x30\x64\x66\x3b\x7d\ +\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\ +\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\ +\x31\x22\x20\x64\x3d\x22\x4d\x39\x34\x2e\x35\x33\x2c\x32\x37\x36\ +\x2e\x37\x32\x61\x31\x32\x2e\x34\x31\x2c\x31\x32\x2e\x34\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x2e\x35\x33\x2d\x32\x2e\x31\x32\x63\x2e\ +\x33\x39\x2d\x35\x2e\x37\x34\x2e\x36\x32\x2d\x31\x31\x2e\x35\x31\ +\x2c\x31\x2e\x31\x32\x2d\x31\x37\x2e\x32\x34\x61\x31\x39\x30\x2e\ +\x36\x35\x2c\x31\x39\x30\x2e\x36\x35\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x31\x30\x2e\x37\x2d\x34\x37\x2e\x35\x39\x2c\x32\x30\x31\x2e\x32\ +\x32\x2c\x32\x30\x31\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x31\x2e\x33\x31\x2d\x34\x32\x2e\x38\x37\x2c\x32\x30\x36\x2e\x31\ +\x31\x2c\x32\x30\x36\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x36\ +\x30\x2e\x36\x39\x2d\x36\x30\x2e\x35\x33\x41\x31\x39\x30\x2e\x34\ +\x36\x2c\x31\x39\x30\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x32\ +\x34\x30\x2e\x34\x2c\x38\x32\x2e\x35\x31\x63\x38\x2e\x35\x38\x2d\ +\x32\x2e\x34\x37\x2c\x31\x37\x2e\x33\x33\x2d\x34\x2e\x34\x34\x2c\ +\x32\x36\x2e\x30\x38\x2d\x36\x2e\x32\x35\x61\x31\x32\x38\x2e\x33\ +\x36\x2c\x31\x32\x38\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x35\x2e\x31\x38\x2d\x31\x2e\x38\x33\x63\x35\x2d\x2e\x34\x32\x2c\ +\x31\x30\x2e\x31\x2d\x2e\x37\x31\x2c\x31\x35\x2e\x31\x35\x2d\x2e\ +\x37\x35\x2c\x36\x2e\x36\x34\x2d\x2e\x30\x35\x2c\x31\x33\x2e\x33\ +\x31\x2d\x2e\x31\x39\x2c\x31\x39\x2e\x39\x2e\x33\x39\x61\x32\x31\ +\x30\x2e\x35\x36\x2c\x32\x31\x30\x2e\x35\x36\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x33\x35\x2e\x34\x38\x2c\x36\x2e\x30\x37\x41\x32\x30\x32\ +\x2e\x39\x31\x2c\x32\x30\x32\x2e\x39\x31\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x33\x39\x37\x2c\x39\x37\x2e\x37\x32\x61\x32\x30\x36\x2c\x32\ +\x30\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x36\x38\x2e\x37\x34\x2c\x35\ +\x39\x2e\x36\x39\x2c\x31\x39\x39\x2e\x35\x34\x2c\x31\x39\x39\x2e\ +\x35\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x30\x2e\x36\x31\x2c\x36\ +\x30\x2e\x37\x63\x32\x2e\x37\x31\x2c\x38\x2e\x39\x2c\x34\x2e\x35\ +\x39\x2c\x31\x38\x2e\x30\x37\x2c\x36\x2e\x34\x38\x2c\x32\x37\x2e\ +\x31\x39\x61\x31\x32\x37\x2e\x36\x2c\x31\x32\x37\x2e\x36\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x2e\x38\x32\x2c\x31\x35\x63\x2e\x34\x32\ +\x2c\x34\x2e\x38\x36\x2e\x37\x31\x2c\x39\x2e\x37\x34\x2e\x37\x35\ +\x2c\x31\x34\x2e\x36\x32\x2e\x30\x35\x2c\x36\x2e\x37\x35\x2e\x32\ +\x36\x2c\x31\x33\x2e\x35\x35\x2d\x2e\x34\x32\x2c\x32\x30\x2e\x32\ +\x35\x2d\x2e\x38\x38\x2c\x38\x2e\x37\x38\x2d\x32\x2e\x32\x32\x2c\ +\x31\x37\x2e\x35\x35\x2d\x34\x2c\x32\x36\x2e\x32\x31\x61\x31\x39\ +\x35\x2e\x30\x35\x2c\x31\x39\x35\x2e\x30\x35\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x31\x39\x2e\x31\x33\x2c\x35\x33\x2e\x31\x33\x2c\x32\x30\ +\x34\x2e\x38\x31\x2c\x32\x30\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x35\x33\x2e\x37\x34\x2c\x36\x35\x2c\x32\x30\x38\x2e\x30\ +\x38\x2c\x32\x30\x38\x2e\x30\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x32\ +\x34\x2e\x33\x31\x2c\x31\x36\x2e\x37\x2c\x34\x2c\x34\x2c\x30\x2c\ +\x30\x2c\x31\x2d\x33\x2e\x34\x37\x2e\x35\x36\x63\x2d\x34\x2e\x31\ +\x32\x2d\x31\x2e\x32\x34\x2d\x38\x2e\x31\x34\x2d\x32\x2e\x36\x32\ +\x2d\x31\x30\x2e\x34\x37\x2d\x36\x2e\x36\x33\x2d\x31\x2e\x37\x39\ +\x2d\x33\x2e\x30\x38\x2d\x31\x2e\x36\x34\x2d\x36\x2e\x34\x32\x2d\ +\x31\x2e\x31\x34\x2d\x39\x2e\x37\x39\x2e\x30\x38\x2d\x2e\x35\x32\ +\x2e\x31\x36\x2d\x31\x2c\x2e\x32\x36\x2d\x31\x2e\x35\x36\x61\x35\ +\x2e\x37\x2c\x35\x2e\x37\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x2e\x39\ +\x33\x2d\x34\x2e\x34\x32\x2c\x31\x37\x39\x2e\x35\x2c\x31\x37\x39\ +\x2e\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x38\x39\x2e\x34\x31\x2d\x31\ +\x33\x36\x2e\x34\x34\x63\x2e\x34\x37\x2d\x34\x2e\x32\x35\x2e\x34\ +\x39\x2d\x38\x2e\x35\x36\x2e\x37\x31\x2d\x31\x32\x2e\x38\x34\x2e\ +\x31\x33\x2d\x32\x2e\x36\x34\x2e\x34\x34\x2d\x35\x2e\x32\x39\x2e\ +\x33\x33\x2d\x37\x2e\x39\x32\x2d\x2e\x32\x31\x2d\x35\x2e\x31\x36\ +\x2d\x2e\x36\x39\x2d\x31\x30\x2e\x33\x2d\x31\x2d\x31\x35\x2e\x34\ +\x35\x61\x31\x34\x38\x2e\x39\x34\x2c\x31\x34\x38\x2e\x39\x34\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x34\x2e\x38\x36\x2d\x32\x38\x2c\x31\x37\ +\x36\x2e\x38\x34\x2c\x31\x37\x36\x2e\x38\x34\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x31\x35\x2e\x39\x35\x2d\x34\x30\x2e\x31\x39\x2c\x31\x37\ +\x38\x2e\x37\x33\x2c\x31\x37\x38\x2e\x37\x33\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x33\x31\x2e\x36\x2d\x34\x32\x2c\x31\x39\x30\x2e\x33\x2c\ +\x31\x39\x30\x2e\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x30\x2e\x32\ +\x2d\x31\x37\x2e\x31\x36\x2c\x31\x37\x37\x2e\x31\x31\x2c\x31\x37\ +\x37\x2e\x31\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x35\x35\ +\x2d\x31\x38\x2e\x32\x32\x2c\x31\x36\x35\x2e\x37\x2c\x31\x36\x35\ +\x2e\x37\x2c\x30\x2c\x30\x2c\x30\x2d\x34\x31\x2e\x30\x35\x2d\x31\ +\x33\x2e\x35\x63\x2d\x35\x2e\x35\x33\x2d\x31\x2d\x31\x31\x2e\x30\ +\x37\x2d\x32\x2d\x31\x36\x2e\x36\x35\x2d\x32\x2e\x37\x33\x2d\x34\ +\x2d\x2e\x35\x31\x2d\x38\x2e\x30\x39\x2d\x2e\x35\x34\x2d\x31\x32\ +\x2e\x31\x34\x2d\x2e\x37\x34\x2d\x33\x2e\x33\x34\x2d\x2e\x31\x36\ +\x2d\x36\x2e\x37\x2d\x2e\x34\x36\x2d\x31\x30\x2e\x30\x35\x2d\x2e\ +\x33\x35\x2d\x35\x2e\x32\x37\x2e\x31\x39\x2d\x31\x30\x2e\x35\x34\ +\x2e\x36\x38\x2d\x31\x35\x2e\x38\x32\x2c\x31\x61\x31\x36\x32\x2e\ +\x34\x31\x2c\x31\x36\x32\x2e\x34\x31\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x34\x31\x2e\x31\x39\x2c\x38\x2e\x36\x32\x2c\x31\x38\x32\x2e\x36\ +\x2c\x31\x38\x32\x2e\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x38\x2e\ +\x34\x38\x2c\x36\x34\x2e\x36\x36\x2c\x31\x37\x38\x2e\x30\x36\x2c\ +\x31\x37\x38\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x32\x35\x2e\ +\x35\x36\x2c\x34\x39\x2e\x32\x36\x2c\x31\x36\x36\x2e\x38\x32\x2c\ +\x31\x36\x36\x2e\x38\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x36\x2e\x38\ +\x31\x2c\x32\x38\x63\x2d\x31\x2e\x31\x33\x2c\x37\x2e\x35\x2d\x32\ +\x2e\x31\x38\x2c\x31\x35\x2d\x32\x2c\x32\x32\x2e\x36\x2e\x31\x33\ +\x2c\x37\x2e\x32\x32\x2d\x2e\x31\x39\x2c\x31\x34\x2e\x34\x37\x2e\ +\x34\x32\x2c\x32\x31\x2e\x36\x35\x61\x31\x37\x34\x2e\x30\x36\x2c\ +\x31\x37\x34\x2e\x30\x36\x2c\x30\x2c\x30\x2c\x30\x2c\x31\x32\x2e\ +\x37\x39\x2c\x35\x32\x2e\x32\x38\x2c\x31\x37\x37\x2e\x34\x35\x2c\ +\x31\x37\x37\x2e\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x34\x2e\ +\x31\x33\x2c\x37\x32\x2c\x32\x34\x37\x2e\x33\x38\x2c\x32\x34\x37\ +\x2e\x33\x38\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2e\x35\x36\x2c\ +\x31\x34\x2e\x37\x38\x63\x32\x2e\x33\x38\x2c\x31\x2e\x35\x31\x2c\ +\x32\x2e\x39\x33\x2c\x33\x2e\x35\x32\x2c\x33\x2e\x33\x37\x2c\x35\ +\x2e\x37\x39\x2c\x31\x2e\x39\x32\x2c\x39\x2e\x38\x32\x2d\x34\x2e\ +\x34\x32\x2c\x31\x35\x2e\x32\x34\x2d\x31\x32\x2e\x37\x32\x2c\x31\ +\x36\x2e\x35\x38\x61\x33\x2e\x34\x37\x2c\x33\x2e\x34\x37\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x32\x2d\x2e\x34\x37\x2c\x32\x30\ +\x35\x2e\x36\x32\x2c\x32\x30\x35\x2e\x36\x32\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x37\x39\x2e\x34\x37\x2d\x38\x35\x2e\x34\x35\x2c\x31\x39\ +\x36\x2e\x32\x37\x2c\x31\x39\x36\x2e\x32\x37\x2c\x30\x2c\x30\x2c\ +\x31\x2d\x31\x34\x2e\x34\x2d\x33\x38\x63\x2d\x32\x2d\x37\x2e\x35\ +\x32\x2d\x33\x2e\x33\x35\x2d\x31\x35\x2e\x32\x2d\x34\x2e\x37\x31\ +\x2d\x32\x32\x2e\x38\x37\x61\x31\x35\x36\x2e\x33\x34\x2c\x31\x35\ +\x36\x2e\x33\x34\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x32\x33\x2d\ +\x32\x35\x2e\x37\x35\x2c\x36\x2e\x34\x33\x2c\x36\x2e\x34\x33\x2c\ +\x30\x2c\x30\x2c\x30\x2d\x2e\x35\x32\x2d\x31\x2e\x37\x36\x5a\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\ +\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x32\x39\x36\x2c\x35\x32\ +\x36\x2e\x33\x37\x6c\x2d\x31\x2e\x31\x38\x2d\x2e\x36\x36\x61\x37\ +\x34\x2e\x39\x2c\x37\x34\x2e\x39\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ +\x2e\x35\x2d\x34\x2e\x31\x38\x63\x2d\x33\x2e\x31\x38\x2d\x32\x2e\ +\x32\x34\x2d\x34\x2e\x36\x34\x2d\x35\x2e\x32\x36\x2d\x34\x2e\x36\ +\x34\x2d\x39\x2e\x34\x38\x71\x2e\x31\x39\x2d\x31\x30\x30\x2e\x32\ +\x39\x2e\x31\x32\x2d\x32\x30\x30\x2e\x35\x39\x61\x33\x2e\x38\x31\ +\x2c\x33\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x39\x31\ +\x2d\x33\x2e\x37\x31\x2c\x33\x33\x2e\x33\x31\x2c\x33\x33\x2e\x33\ +\x31\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x35\x2d\x32\x33\x2e\x33\x38\ +\x2c\x33\x34\x2e\x38\x34\x2c\x33\x34\x2e\x38\x34\x2c\x30\x2c\x30\ +\x2c\x31\x2c\x32\x35\x2e\x34\x34\x2d\x33\x39\x63\x31\x39\x2e\x38\ +\x32\x2d\x35\x2e\x34\x32\x2c\x34\x30\x2e\x34\x33\x2c\x38\x2e\x30\ +\x38\x2c\x34\x33\x2e\x32\x39\x2c\x32\x38\x2e\x33\x33\x2c\x32\x2c\ +\x31\x34\x2e\x34\x33\x2d\x33\x2e\x33\x35\x2c\x32\x35\x2e\x39\x33\ +\x2d\x31\x35\x2e\x32\x37\x2c\x33\x34\x2e\x33\x61\x33\x2e\x32\x32\ +\x2c\x33\x2e\x32\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x36\x33\ +\x2c\x33\x71\x2e\x30\x36\x2c\x31\x30\x31\x2e\x37\x31\x2c\x30\x2c\ +\x32\x30\x33\x2e\x34\x33\x61\x37\x2e\x32\x33\x2c\x37\x2e\x32\x33\ +\x2c\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x31\x36\x2c\x33\x2e\x37\x36\ +\x2c\x31\x38\x2e\x38\x33\x2c\x31\x38\x2e\x38\x33\x2c\x30\x2c\x30\ +\x2c\x31\x2d\x39\x2e\x38\x33\x2c\x37\x2e\x34\x33\x2c\x31\x30\x2e\ +\x38\x33\x2c\x31\x30\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\ +\x2e\x34\x39\x2e\x38\x31\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\ +\x22\x4d\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\x2e\x34\x37\x63\ +\x30\x2c\x32\x2e\x31\x34\x2c\x30\x2c\x35\x2e\x37\x35\x2c\x30\x2c\ +\x39\x2e\x33\x35\x61\x31\x32\x37\x2e\x39\x33\x2c\x31\x32\x37\x2e\ +\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2c\x32\x31\x2c\x36\x38\x2e\x32\ +\x38\x2c\x31\x32\x31\x2e\x32\x32\x2c\x31\x32\x31\x2e\x32\x32\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x33\x36\x2e\x38\x36\x2c\x33\x36\x2e\x32\ +\x36\x63\x31\x2e\x37\x38\x2c\x31\x2e\x31\x32\x2c\x31\x2e\x35\x36\ +\x2c\x32\x2e\x37\x2c\x31\x2e\x37\x2c\x34\x2e\x31\x34\x2e\x36\x2c\ +\x36\x2e\x33\x33\x2d\x32\x2e\x36\x34\x2c\x31\x30\x2e\x36\x37\x2d\ +\x39\x2c\x31\x32\x2e\x32\x34\x61\x33\x2e\x32\x37\x2c\x33\x2e\x32\ +\x37\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x2e\x31\x38\x2d\x2e\x34\x34\ +\x2c\x31\x34\x33\x2e\x33\x39\x2c\x31\x34\x33\x2e\x33\x39\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x35\x35\x2e\x32\x33\x2d\x36\x31\x2e\x35\x36\ +\x2c\x31\x32\x38\x2e\x36\x35\x2c\x31\x32\x38\x2e\x36\x35\x2c\x30\ +\x2c\x30\x2c\x31\x2d\x39\x2e\x38\x2d\x32\x38\x2e\x36\x33\x2c\x31\ +\x37\x37\x2e\x31\x34\x2c\x31\x37\x37\x2e\x31\x34\x2c\x30\x2c\x30\ +\x2c\x31\x2d\x33\x2d\x31\x37\x2e\x36\x34\x41\x31\x33\x38\x2e\x37\ +\x35\x2c\x31\x33\x38\x2e\x37\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x35\x39\x2e\x35\x37\x2c\x32\x35\x30\x61\x31\x34\x35\x2c\x31\x34\ +\x35\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x31\x2e\x32\x38\x2d\x33\x32\ +\x2e\x33\x2c\x31\x34\x33\x2e\x34\x34\x2c\x31\x34\x33\x2e\x34\x34\ +\x2c\x30\x2c\x30\x2c\x31\x2c\x34\x35\x2e\x36\x2d\x35\x33\x2e\x38\ +\x36\x2c\x31\x33\x36\x2e\x32\x31\x2c\x31\x33\x36\x2e\x32\x31\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x34\x32\x2d\x32\x30\x2e\x36\x32\x63\x35\ +\x2e\x37\x32\x2d\x31\x2e\x36\x36\x2c\x31\x31\x2e\x35\x34\x2d\x33\ +\x2c\x31\x37\x2e\x33\x39\x2d\x34\x2e\x32\x61\x39\x35\x2e\x33\x31\ +\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\x2d\ +\x31\x2e\x35\x35\x63\x36\x2e\x32\x35\x2d\x2e\x33\x34\x2c\x31\x32\ +\x2e\x35\x34\x2d\x2e\x34\x35\x2c\x31\x38\x2e\x38\x31\x2d\x2e\x33\ +\x39\x61\x39\x35\x2e\x33\x31\x2c\x39\x35\x2e\x33\x31\x2c\x30\x2c\ +\x30\x2c\x31\x2c\x31\x30\x2e\x35\x2c\x31\x2c\x31\x34\x34\x2e\x33\ +\x36\x2c\x31\x34\x34\x2e\x33\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\ +\x31\x32\x2e\x37\x31\x2c\x38\x31\x2e\x37\x32\x2c\x31\x32\x35\x2e\ +\x37\x33\x2c\x31\x32\x35\x2e\x37\x33\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x39\x2e\x37\x2c\x32\x38\x2e\x33\x36\x63\x31\x2e\x31\x32\x2c\x35\ +\x2e\x35\x2c\x32\x2e\x32\x31\x2c\x31\x31\x2c\x32\x2e\x37\x38\x2c\ +\x31\x36\x2e\x36\x31\x2e\x36\x36\x2c\x36\x2e\x36\x31\x2c\x31\x2c\ +\x31\x33\x2e\x32\x38\x2c\x31\x2c\x31\x39\x2e\x39\x32\x41\x38\x32\ +\x2e\x38\x34\x2c\x38\x32\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\ +\x34\x34\x33\x2e\x30\x35\x2c\x32\x39\x38\x63\x2d\x31\x2c\x36\x2e\ +\x33\x39\x2d\x32\x2e\x32\x2c\x31\x32\x2e\x37\x37\x2d\x33\x2e\x36\ +\x37\x2c\x31\x39\x2e\x30\x37\x61\x31\x31\x38\x2e\x35\x2c\x31\x31\ +\x38\x2e\x35\x2c\x30\x2c\x30\x2c\x31\x2d\x37\x2e\x38\x37\x2c\x32\ +\x32\x2e\x31\x2c\x31\x34\x32\x2e\x38\x33\x2c\x31\x34\x32\x2e\x38\ +\x33\x2c\x30\x2c\x30\x2c\x31\x2d\x33\x36\x2e\x38\x36\x2c\x34\x39\ +\x2e\x32\x36\x2c\x31\x33\x33\x2e\x35\x36\x2c\x31\x33\x33\x2e\x35\ +\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x32\x30\x2c\x31\x34\x2e\x34\x32\ +\x2c\x34\x2e\x38\x31\x2c\x34\x2e\x38\x31\x2c\x30\x2c\x30\x2c\x31\ +\x2d\x33\x2c\x2e\x35\x63\x2d\x34\x2d\x2e\x36\x39\x2d\x37\x2e\x34\ +\x34\x2d\x32\x2e\x33\x36\x2d\x38\x2e\x37\x35\x2d\x36\x2e\x34\x38\ +\x2d\x31\x2d\x33\x2d\x2e\x33\x31\x2d\x35\x2e\x39\x33\x2c\x31\x2d\ +\x38\x2e\x37\x32\x61\x33\x2e\x36\x37\x2c\x33\x2e\x36\x37\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x31\x2e\x33\x37\x2d\x31\x2e\x32\x2c\x31\x32\ +\x35\x2c\x31\x32\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x35\x36\x2d\x38\ +\x31\x2e\x35\x35\x2c\x31\x34\x31\x2c\x31\x34\x31\x2c\x30\x2c\x30\ +\x2c\x30\x2c\x32\x2e\x31\x36\x2d\x31\x37\x2e\x34\x38\x2c\x31\x33\ +\x35\x2c\x31\x33\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x38\ +\x41\x31\x32\x31\x2e\x37\x36\x2c\x31\x32\x31\x2e\x37\x36\x2c\x30\ +\x2c\x30\x2c\x30\x2c\x34\x31\x34\x2e\x33\x39\x2c\x32\x33\x32\x61\ +\x31\x32\x36\x2c\x31\x32\x36\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x32\ +\x2e\x38\x38\x2d\x32\x33\x2e\x37\x31\x41\x31\x32\x34\x2c\x31\x32\ +\x34\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x36\x34\x2e\x34\x35\x2c\x31\ +\x37\x33\x61\x31\x31\x35\x2e\x38\x34\x2c\x31\x31\x35\x2e\x38\x34\ +\x2c\x30\x2c\x30\x2c\x30\x2d\x33\x30\x2e\x37\x38\x2d\x31\x33\x2e\ +\x35\x33\x63\x2d\x35\x2e\x31\x33\x2d\x31\x2e\x33\x39\x2d\x31\x30\ +\x2e\x34\x34\x2d\x32\x2e\x31\x38\x2d\x31\x35\x2e\x36\x35\x2d\x33\ +\x2e\x32\x37\x2d\x38\x2e\x32\x39\x2d\x31\x2e\x37\x32\x2d\x31\x36\ +\x2e\x37\x31\x2d\x31\x2e\x33\x36\x2d\x32\x35\x2d\x31\x2e\x31\x33\ +\x61\x31\x30\x33\x2e\x31\x35\x2c\x31\x30\x33\x2e\x31\x35\x2c\x30\ +\x2c\x30\x2c\x30\x2d\x32\x33\x2e\x37\x31\x2c\x33\x2e\x37\x33\x2c\ +\x31\x32\x31\x2e\x38\x37\x2c\x31\x32\x31\x2e\x38\x37\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x34\x35\x2e\x31\x38\x2c\x32\x32\x2e\x37\x35\x2c\ +\x31\x32\x34\x2e\x35\x37\x2c\x31\x32\x34\x2e\x35\x37\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x33\x31\x2e\x34\x38\x2c\x33\x37\x2e\x33\x31\x2c\ +\x31\x32\x37\x2e\x31\x32\x2c\x31\x32\x37\x2e\x31\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2d\x31\x34\x2e\x30\x37\x2c\x34\x30\x2e\x31\x38\x43\ +\x31\x37\x37\x2e\x38\x34\x2c\x32\x36\x33\x2c\x31\x37\x37\x2e\x35\ +\x31\x2c\x32\x36\x37\x2c\x31\x37\x36\x2e\x38\x33\x2c\x32\x37\x32\ +\x2e\x34\x37\x5a\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x63\x6c\x73\x2d\x31\x22\x20\x64\x3d\x22\x4d\x33\ +\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\x34\x63\x2d\x2e\x33\ +\x35\x2c\x31\x39\x2e\x36\x32\x2d\x35\x2e\x34\x32\x2c\x33\x35\x2e\ +\x38\x36\x2d\x31\x35\x2e\x38\x31\x2c\x35\x30\x2e\x33\x39\x41\x38\ +\x36\x2e\x31\x35\x2c\x38\x36\x2e\x31\x35\x2c\x30\x2c\x30\x2c\x31\ +\x2c\x33\x34\x34\x2e\x34\x37\x2c\x33\x35\x31\x63\x2d\x33\x2e\x37\ +\x39\x2c\x32\x2e\x33\x31\x2d\x39\x2e\x35\x35\x2e\x31\x35\x2d\x31\ +\x30\x2e\x39\x34\x2d\x34\x2e\x31\x32\x61\x37\x2e\x33\x33\x2c\x37\ +\x2e\x33\x33\x2c\x30\x2c\x30\x2c\x31\x2c\x33\x2e\x34\x33\x2d\x38\ +\x2e\x35\x35\x2c\x36\x37\x2e\x37\x31\x2c\x36\x37\x2e\x37\x31\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x32\x32\x2e\x36\x34\x2d\x32\x31\x2e\x37\ +\x33\x2c\x36\x38\x2e\x35\x32\x2c\x36\x38\x2e\x35\x32\x2c\x30\x2c\ +\x30\x2c\x30\x2c\x31\x30\x2e\x37\x32\x2d\x32\x39\x2e\x33\x38\x2c\ +\x36\x39\x2e\x32\x32\x2c\x36\x39\x2e\x32\x32\x2c\x30\x2c\x30\x2c\ +\x30\x2d\x33\x34\x2e\x36\x39\x2d\x36\x38\x2e\x35\x32\x2c\x37\x31\ +\x2e\x38\x36\x2c\x37\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x32\x33\x2e\x32\x35\x2d\x38\x2e\x33\x35\x2c\x35\x36\x2e\x37\x32\ +\x2c\x35\x36\x2e\x37\x32\x2c\x30\x2c\x30\x2c\x30\x2d\x38\x2e\x39\ +\x34\x2d\x2e\x36\x39\x41\x38\x37\x2e\x34\x2c\x38\x37\x2e\x34\x2c\ +\x30\x2c\x30\x2c\x30\x2c\x32\x39\x31\x2c\x32\x31\x30\x61\x36\x39\ +\x2e\x35\x35\x2c\x36\x39\x2e\x35\x35\x2c\x30\x2c\x30\x2c\x30\x2d\ +\x34\x33\x2e\x34\x38\x2c\x32\x32\x2e\x36\x37\x2c\x36\x36\x2e\x38\ +\x33\x2c\x36\x36\x2e\x38\x33\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x35\ +\x2e\x38\x31\x2c\x32\x39\x2e\x36\x33\x2c\x37\x30\x2e\x37\x34\x2c\ +\x37\x30\x2e\x37\x34\x2c\x30\x2c\x30\x2c\x30\x2d\x31\x2e\x38\x36\ +\x2c\x32\x30\x2e\x34\x34\x2c\x36\x39\x2e\x34\x35\x2c\x36\x39\x2e\ +\x34\x35\x2c\x30\x2c\x30\x2c\x30\x2c\x33\x33\x2e\x32\x34\x2c\x35\ +\x35\x2e\x34\x35\x2c\x37\x2e\x31\x39\x2c\x37\x2e\x31\x39\x2c\x30\ +\x2c\x30\x2c\x31\x2c\x32\x2e\x37\x38\x2c\x37\x2e\x37\x33\x2c\x38\ +\x2e\x36\x38\x2c\x38\x2e\x36\x38\x2c\x30\x2c\x30\x2c\x31\x2d\x37\ +\x2e\x35\x37\x2c\x36\x2c\x33\x2e\x32\x39\x2c\x33\x2e\x32\x39\x2c\ +\x30\x2c\x30\x2c\x31\x2d\x31\x2e\x36\x31\x2d\x2e\x36\x2c\x38\x34\ +\x2e\x32\x34\x2c\x38\x34\x2e\x32\x34\x2c\x30\x2c\x30\x2c\x31\x2d\ +\x33\x31\x2e\x35\x37\x2d\x33\x32\x2e\x34\x34\x2c\x38\x31\x2e\x38\ +\x36\x2c\x38\x31\x2e\x38\x36\x2c\x30\x2c\x30\x2c\x31\x2d\x39\x2e\ +\x36\x34\x2d\x33\x30\x2e\x31\x38\x2c\x38\x30\x2e\x39\x34\x2c\x38\ +\x30\x2e\x39\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x39\x2e\x32\x36\x2d\ +\x34\x38\x2e\x39\x31\x63\x31\x30\x2e\x31\x31\x2d\x31\x38\x2e\x37\ +\x34\x2c\x32\x35\x2e\x33\x33\x2d\x33\x31\x2e\x38\x32\x2c\x34\x35\ +\x2e\x31\x38\x2d\x33\x39\x2e\x35\x31\x61\x37\x38\x2e\x37\x31\x2c\ +\x37\x38\x2e\x37\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x32\x30\x2e\x38\ +\x32\x2d\x35\x2c\x31\x33\x33\x2e\x37\x2c\x31\x33\x33\x2e\x37\x2c\ +\x30\x2c\x30\x2c\x31\x2c\x31\x36\x2e\x37\x35\x2d\x2e\x30\x37\x2c\ +\x36\x39\x2e\x36\x36\x2c\x36\x39\x2e\x36\x36\x2c\x30\x2c\x30\x2c\ +\x31\x2c\x32\x30\x2e\x34\x33\x2c\x34\x2e\x31\x33\x2c\x38\x34\x2e\ +\x38\x34\x2c\x38\x34\x2e\x38\x34\x2c\x30\x2c\x30\x2c\x31\x2c\x34\ +\x31\x2e\x31\x33\x2c\x32\x39\x2e\x38\x34\x2c\x38\x31\x2e\x34\x36\ +\x2c\x38\x31\x2e\x34\x36\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x35\x2e\ +\x34\x37\x2c\x33\x36\x2e\x33\x31\x43\x33\x38\x35\x2e\x32\x35\x2c\ +\x32\x36\x39\x2e\x39\x2c\x33\x38\x35\x2e\x34\x37\x2c\x32\x37\x34\ +\x2e\x34\x34\x2c\x33\x38\x35\x2e\x37\x34\x2c\x32\x37\x37\x2e\x31\ +\x34\x5a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ \x00\x00\x0a\x76\ \x3c\ \x73\x76\x67\x20\x69\x64\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\ @@ -10607,14 +10607,6 @@ \x0f\xc6\x5a\x27\ \x00\x79\ \x00\x65\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0f\ -\x05\x15\x19\xa7\ -\x00\x77\ -\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x63\x00\x6f\x00\x6e\x00\x66\x00\x69\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0b\ -\x07\xb9\x8d\x87\ -\x00\x68\ -\x00\x6f\x00\x74\x00\x73\x00\x70\x00\x6f\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ \x03\x52\x04\x07\ \x00\x73\ @@ -10639,6 +10631,14 @@ \x03\x7c\xbf\xe7\ \x00\x77\ \x00\x69\x00\x66\x00\x69\x00\x5f\x00\x30\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0f\ +\x05\x15\x19\xa7\ +\x00\x77\ +\x00\x69\x00\x66\x00\x69\x00\x5f\x00\x63\x00\x6f\x00\x6e\x00\x66\x00\x69\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0b\ +\x07\xb9\x8d\x87\ +\x00\x68\ +\x00\x6f\x00\x74\x00\x73\x00\x70\x00\x6f\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x17\ \x0c\x14\x0b\x87\ \x00\x77\ @@ -10801,29 +10801,31 @@ qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x01\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ -\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x71\ -\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x69\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x58\ -\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x54\ -\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4b\ -\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x44\ -\x00\x00\x00\x90\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3f\ -\x00\x00\x00\xae\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3a\ -\x00\x00\x00\xca\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2a\ -\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x01\x00\x00\x00\x26\ -\x00\x00\x01\x08\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1f\ -\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x16\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x80\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7c\ +\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x62\ +\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5d\ +\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x53\ +\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4b\ +\x00\x00\x00\x90\x00\x02\x00\x00\x00\x01\x00\x00\x00\x45\ +\x00\x00\x00\xae\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3f\ +\x00\x00\x00\xca\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2e\ +\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x01\x00\x00\x00\x29\ +\x00\x00\x01\x08\x00\x02\x00\x00\x00\x01\x00\x00\x00\x21\ +\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\ \x00\x00\x01\x4a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0f\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x10\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x11\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x11\ +\x00\x00\x01\x4a\x00\x02\x00\x00\x00\x05\x00\x00\x00\x12\ \x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x08\x66\ \x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb0\ \x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\ \x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00\x14\x75\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x18\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x18\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x19\ +\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x07\x00\x00\x00\x1a\ \x00\x00\x02\x32\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x19\ \x00\x00\x02\x56\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x93\ \x00\x00\x02\x78\x00\x00\x00\x00\x00\x01\x00\x00\x21\x07\ @@ -10831,19 +10833,22 @@ \x00\x00\x02\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x1d\ \x00\x00\x02\xda\x00\x00\x00\x00\x00\x01\x00\x00\x26\xba\ \x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x29\x36\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x20\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x21\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x22\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x23\ +\x00\x00\x01\x08\x00\x02\x00\x00\x00\x05\x00\x00\x00\x24\ \x00\x00\x03\x20\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xce\ \x00\x00\x03\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xcf\ \x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x37\x91\ \x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x3b\xed\ \x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x27\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x28\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2a\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2b\ +\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x02\x00\x00\x00\x2c\ \x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xe7\ \x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x42\x12\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2b\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x2c\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x30\ +\x00\x00\x00\xca\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x31\ \x00\x00\x04\x30\x00\x00\x00\x00\x00\x01\x00\x00\x44\x18\ \x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x47\ \x00\x00\x04\x84\x00\x00\x00\x00\x00\x01\x00\x00\x58\x8e\ @@ -10858,25 +10863,29 @@ \x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\xa6\xf8\ \x00\x00\x06\x1e\x00\x00\x00\x00\x00\x01\x00\x00\xad\xa6\ \x00\x00\x06\x3e\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x35\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3b\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x3c\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x40\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x41\ +\x00\x00\x00\xae\x00\x02\x00\x00\x00\x03\x00\x00\x00\x42\ \x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ \x00\x00\x06\x82\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x45\ \x00\x00\x06\x96\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x18\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x40\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x41\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x46\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x47\ +\x00\x00\x00\x90\x00\x02\x00\x00\x00\x03\x00\x00\x00\x48\ \x00\x00\x06\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xd3\x92\ \x00\x00\x06\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x31\ \x00\x00\x07\x14\x00\x00\x00\x00\x00\x01\x00\x00\xe2\xfb\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x45\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x46\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4c\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4d\ +\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x05\x00\x00\x00\x4e\ \x00\x00\x07\x3a\x00\x00\x00\x00\x00\x01\x00\x00\xe9\x04\ \x00\x00\x07\x66\x00\x00\x00\x00\x00\x01\x00\x01\x0b\x88\ \x00\x00\x07\x94\x00\x00\x00\x00\x00\x01\x00\x01\x11\x75\ \x00\x00\x07\xc0\x00\x00\x00\x00\x00\x01\x00\x01\x1a\xbc\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x01\x2a\x05\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4c\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x4d\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x54\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x55\ +\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x07\x00\x00\x00\x56\ \x00\x00\x08\x06\x00\x00\x00\x00\x00\x01\x00\x01\x30\x83\ \x00\x00\x08\x34\x00\x00\x00\x00\x00\x01\x00\x01\x33\x2a\ \x00\x00\x08\x62\x00\x00\x00\x00\x00\x01\x00\x01\x3f\xa7\ @@ -10884,40 +10893,44 @@ \x00\x00\x08\x96\x00\x00\x00\x00\x00\x01\x00\x01\x4a\x80\ \x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x4f\xe9\ \x00\x00\x08\xc8\x00\x00\x00\x00\x00\x01\x00\x01\x5b\xc7\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x55\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x56\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5e\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5f\ +\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x02\x00\x00\x00\x60\ \x00\x00\x08\xe6\x00\x00\x00\x00\x00\x01\x00\x01\x61\xcb\ \x00\x00\x08\xf8\x00\x00\x00\x00\x00\x01\x00\x01\x63\x51\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x59\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5a\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x5d\ -\x00\x00\x09\x0c\x00\x01\x00\x00\x00\x01\x00\x01\x65\xa7\ -\x00\x00\x09\x30\x00\x00\x00\x00\x00\x01\x00\x01\x71\x08\ -\x00\x00\x09\x4c\x00\x00\x00\x00\x00\x01\x00\x01\x82\x08\ -\x00\x00\x09\x6c\x00\x00\x00\x00\x00\x01\x00\x01\x86\x5d\ -\x00\x00\x09\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x8b\xf6\ -\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x91\x8f\ -\x00\x00\x09\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x97\x13\ -\x00\x00\x09\xec\x00\x00\x00\x00\x00\x01\x00\x01\x9c\xac\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x63\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x64\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x65\ +\x00\x00\x09\x0c\x00\x00\x00\x00\x00\x01\x00\x01\x65\xa7\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x01\x69\xfc\ +\x00\x00\x09\x4c\x00\x00\x00\x00\x00\x01\x00\x01\x6f\x95\ +\x00\x00\x09\x6c\x00\x00\x00\x00\x00\x01\x00\x01\x75\x2e\ +\x00\x00\x09\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x7a\xb2\ +\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x80\x4b\ +\x00\x00\x09\xcc\x00\x01\x00\x00\x00\x01\x00\x01\x86\x72\ +\x00\x00\x09\xf0\x00\x00\x00\x00\x00\x01\x00\x01\x91\xd3\ \x00\x00\x0a\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xa2\xd3\ \x00\x00\x0a\x40\x00\x00\x00\x00\x00\x01\x00\x01\xad\x4d\ \x00\x00\x0a\x74\x00\x00\x00\x00\x00\x01\x00\x01\xb7\xc1\ \x00\x00\x0a\xa8\x00\x00\x00\x00\x00\x01\x00\x01\xc2\x20\ \x00\x00\x0a\xda\x00\x00\x00\x00\x00\x01\x00\x01\xc7\x22\ \x00\x00\x0b\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xd1\x96\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6a\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x06\x00\x00\x00\x6b\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ +\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x06\x00\x00\x00\x76\ \x00\x00\x0b\x42\x00\x00\x00\x00\x00\x01\x00\x01\xdc\xe1\ \x00\x00\x0b\x72\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x77\ \x00\x00\x0b\x96\x00\x00\x00\x00\x00\x01\x00\x01\xec\xbb\ \x00\x00\x0b\xb4\x00\x00\x00\x00\x00\x01\x00\x01\xf4\x85\ \x00\x00\x0b\xea\x00\x01\x00\x00\x00\x01\x00\x01\xfc\x74\ \x00\x00\x0c\x08\x00\x00\x00\x00\x00\x01\x00\x02\x00\x87\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x72\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7d\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7e\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7f\ \x00\x00\x0c\x26\x00\x00\x00\x00\x00\x01\x00\x02\x07\x14\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x18\x00\x00\x00\x76\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x81\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x82\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x83\ \x00\x00\x0c\x3c\x00\x00\x00\x00\x00\x01\x00\x02\x0b\xda\ \x00\x00\x0c\x52\x00\x00\x00\x00\x00\x01\x00\x02\x13\x8e\ \x00\x00\x0c\x6a\x00\x00\x00\x00\x00\x01\x00\x02\x15\xb3\ @@ -10947,37 +10960,39 @@ qt_resource_struct_v2 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x80\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x71\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7c\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x69\ +\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x58\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x62\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x54\ +\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5d\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4b\ +\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x53\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x44\ +\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4b\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x90\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3f\ +\x00\x00\x00\x90\x00\x02\x00\x00\x00\x01\x00\x00\x00\x45\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\xae\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3a\ +\x00\x00\x00\xae\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3f\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\xca\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2a\ +\x00\x00\x00\xca\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2e\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x01\x00\x00\x00\x26\ +\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x01\x00\x00\x00\x29\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x08\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1f\ +\x00\x00\x01\x08\x00\x02\x00\x00\x00\x01\x00\x00\x00\x21\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x16\ +\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x4a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0f\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x10\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x11\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x11\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x4a\x00\x02\x00\x00\x00\x05\x00\x00\x00\x12\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -10989,9 +11004,11 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00\x14\x75\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x18\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x18\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x19\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x07\x00\x00\x00\x1a\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x02\x32\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x19\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11007,9 +11024,11 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x29\x36\ \x00\x00\x01\x9d\x48\x7c\x8b\xc9\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x20\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x22\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x23\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x21\ +\x00\x00\x01\x08\x00\x02\x00\x00\x00\x05\x00\x00\x00\x24\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x03\x20\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xce\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11021,17 +11040,21 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x27\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2a\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x28\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2b\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x02\x00\x00\x00\x2c\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xe7\ \x00\x00\x01\x9c\xe2\x99\x3f\x60\ \x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x42\x12\ \x00\x00\x01\x9c\xe2\x99\x3f\x60\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2b\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x30\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x2c\ +\x00\x00\x00\xca\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x31\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x04\x30\x00\x00\x00\x00\x00\x01\x00\x00\x44\x18\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11061,9 +11084,11 @@ \x00\x00\x01\x9f\xa9\x7c\x2e\x17\ \x00\x00\x06\x3e\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x35\ \x00\x00\x01\x9f\xa9\x7c\x2e\x17\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3b\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x40\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x41\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x3c\ +\x00\x00\x00\xae\x00\x02\x00\x00\x00\x03\x00\x00\x00\x42\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x88\ \x00\x00\x01\xa0\x19\xb8\x66\xbc\ @@ -11071,9 +11096,11 @@ \x00\x00\x01\xa0\x19\xb8\x66\xbc\ \x00\x00\x06\x96\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x18\ \x00\x00\x01\xa0\x19\xb8\x66\xbc\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x40\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x46\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x47\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x41\ +\x00\x00\x00\x90\x00\x02\x00\x00\x00\x03\x00\x00\x00\x48\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x06\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xd3\x92\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11081,9 +11108,11 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x07\x14\x00\x00\x00\x00\x00\x01\x00\x00\xe2\xfb\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x45\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4c\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4d\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x05\x00\x00\x00\x46\ +\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x05\x00\x00\x00\x4e\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x07\x3a\x00\x00\x00\x00\x00\x01\x00\x00\xe9\x04\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11095,9 +11124,11 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x01\x2a\x05\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x4c\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x54\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x55\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x07\x00\x00\x00\x4d\ +\x00\x00\x00\x6c\x00\x02\x00\x00\x00\x07\x00\x00\x00\x56\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x08\x06\x00\x00\x00\x00\x00\x01\x00\x01\x30\x83\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11113,36 +11144,38 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x08\xc8\x00\x00\x00\x00\x00\x01\x00\x01\x5b\xc7\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x55\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5e\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x02\x00\x00\x00\x56\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x5f\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x5a\x00\x02\x00\x00\x00\x02\x00\x00\x00\x60\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x08\xe6\x00\x00\x00\x00\x00\x01\x00\x01\x61\xcb\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x08\xf8\x00\x00\x00\x00\x00\x01\x00\x01\x63\x51\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x59\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x63\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5a\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x64\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x5d\ +\x00\x00\x00\x46\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x65\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x09\x0c\x00\x01\x00\x00\x00\x01\x00\x01\x65\xa7\ -\x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\x30\x00\x00\x00\x00\x00\x01\x00\x01\x71\x08\ -\x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x09\x4c\x00\x00\x00\x00\x00\x01\x00\x01\x82\x08\ +\x00\x00\x09\x0c\x00\x00\x00\x00\x00\x01\x00\x01\x65\xa7\ \x00\x00\x01\x9d\x48\x7c\x8b\xce\ -\x00\x00\x09\x6c\x00\x00\x00\x00\x00\x01\x00\x01\x86\x5d\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x01\x69\xfc\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x09\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x8b\xf6\ +\x00\x00\x09\x4c\x00\x00\x00\x00\x00\x01\x00\x01\x6f\x95\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x91\x8f\ +\x00\x00\x09\x6c\x00\x00\x00\x00\x00\x01\x00\x01\x75\x2e\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x09\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x97\x13\ +\x00\x00\x09\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x7a\xb2\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x09\xec\x00\x00\x00\x00\x00\x01\x00\x01\x9c\xac\ +\x00\x00\x09\xac\x00\x00\x00\x00\x00\x01\x00\x01\x80\x4b\ \x00\x00\x01\x9d\x48\x7c\x8b\xcc\ +\x00\x00\x09\xcc\x00\x01\x00\x00\x00\x01\x00\x01\x86\x72\ +\x00\x00\x01\x9a\x72\xe1\x92\x28\ +\x00\x00\x09\xf0\x00\x00\x00\x00\x00\x01\x00\x01\x91\xd3\ +\x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x0a\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xa2\xd3\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ \x00\x00\x0a\x40\x00\x00\x00\x00\x00\x01\x00\x01\xad\x4d\ @@ -11155,9 +11188,11 @@ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ \x00\x00\x0b\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xd1\x96\ \x00\x00\x01\x9d\x48\x7c\x8b\xcd\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x6a\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x74\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x06\x00\x00\x00\x6b\ +\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x06\x00\x00\x00\x76\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x0b\x42\x00\x00\x00\x00\x00\x01\x00\x01\xdc\xe1\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ @@ -11171,15 +11206,19 @@ \x00\x00\x01\x9a\x72\xe1\x92\x28\ \x00\x00\x0c\x08\x00\x00\x00\x00\x00\x01\x00\x02\x00\x87\ \x00\x00\x01\x9f\xa9\x7c\x2e\x18\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x72\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7d\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x73\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7e\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x7f\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x0c\x26\x00\x00\x00\x00\x00\x01\x00\x02\x07\x14\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ -\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x75\ +\x00\x00\x01\x66\x00\x02\x00\x00\x00\x01\x00\x00\x00\x81\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x01\x76\x00\x02\x00\x00\x00\x01\x00\x00\x00\x82\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x76\x00\x02\x00\x00\x00\x18\x00\x00\x00\x76\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x83\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x0c\x3c\x00\x00\x00\x00\x00\x01\x00\x02\x0b\xda\ \x00\x00\x01\x9a\x72\xe1\x92\x28\ diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_down.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/arrow_down.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/arrow_down.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/arrow_down.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_left.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/arrow_left.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/arrow_left.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/arrow_left.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_right.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/arrow_right.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/arrow_right.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/arrow_right.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/down_arrow.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/down_arrow.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/down_arrow.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/down_arrow.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/left_arrow.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/left_arrow.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/left_arrow.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/left_arrow.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/right_arrow.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/right_arrow.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/right_arrow.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/right_arrow.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/up_arrow.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/up_arrow.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/up_arrow.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/arrow_icons/up_arrow.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/move_nozzle_away.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/baby_step/move_nozzle_away.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/move_nozzle_away.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/baby_step/move_nozzle_away.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/move_nozzle_close.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/baby_step/move_nozzle_close.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/move_nozzle_close.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/baby_step/move_nozzle_close.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/no.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/dialog/no.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/no.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/dialog/no.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/yes.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/dialog/yes.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/yes.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/dialog/yes.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/extrude.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/extrude.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/extrude.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/extrude.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/nozzle.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/nozzle.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/nozzle.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/nozzle.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/nozzle_topbar.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/nozzle_topbar.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/nozzle_topbar.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/nozzle_topbar.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/switch_print_core.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/switch_print_core.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/switch_print_core.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/switch_print_core.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/switch_zoom.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/switch_zoom.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/switch_zoom.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/extruder_related/switch_zoom.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/blower.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/fan_related/blower.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/blower.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/fan_related/blower.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/fan.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/fan_related/fan.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/fan.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/fan_related/fan.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/fan_cage.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/fan_related/fan_cage.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/fan_cage.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/fan_related/fan_cage.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/add_filament.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/add_filament.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/add_filament.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/add_filament.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/add_spool.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/add_spool.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/add_spool.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/add_spool.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/change_filament.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/change_filament.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/change_filament.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/change_filament.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/check_gate_1.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/check_gate_1.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/check_gate_1.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/check_gate_1.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/eject.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/eject.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/eject.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/eject.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/filament_sensor.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/filament_sensor.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/filament_sensor.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/filament_sensor.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/filament_sensor_off.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/filament_sensor_off.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/filament_sensor_off.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/filament_sensor_off.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/filament_sensor_turn_on.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/filament_sensor_turn_on.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/filament_sensor_turn_on.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/filament_sensor_turn_on.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/half_spool.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/half_spool.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/half_spool.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/half_spool.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/load_filament.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/load_filament.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/load_filament.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/load_filament.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/loaded_spool.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/loaded_spool.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/loaded_spool.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/loaded_spool.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/spool_database_1.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/spool_database_1.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/spool_database_1.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/spool_database_1.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/spoolman.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/spoolman.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/spoolman.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/spoolman.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/unload_filament.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/unload_filament.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/unload_filament.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/filament_related/unload_filament.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/file.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/files/file.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/file.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/files/file.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper/input_shaper.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper/input_shaper.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper_auto.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper/input_shaper_auto.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper_auto.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper/input_shaper_auto.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper_manual.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper/input_shaper_manual.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper_manual.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/input_shaper/input_shaper_manual.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/axis_maintenance.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/axis_maintenance.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/axis_maintenance.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/axis_maintenance.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/disable_steppers.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/disable_steppers.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/disable_steppers.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/disable_steppers.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/home_all.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_all.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/home_all.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_all.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/home_x.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_x.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/home_x.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_x.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/home_y.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_y.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/home_y.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_y.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/home_z.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_z.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/home_z.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/home_z.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/speed.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/motion/speed.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/speed.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/motion/speed.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/hotspot.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/hotspot.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/hotspot.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/hotspot.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/wifi_config.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_config.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/wifi_config.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/network/wifi_config.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/reboot.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/system/reboot.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/reboot.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/system/reboot.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/restart_firmware.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/system/restart_firmware.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/restart_firmware.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/system/restart_firmware.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/restart_klipper.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/system/restart_klipper.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/restart_klipper.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/system/restart_klipper.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/restart_printer.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/system/restart_printer.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/restart_printer.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/system/restart_printer.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/update_software.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/system/update_software.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/update_software.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/system/update_software.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/cooldown.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/cooldown.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/cooldown.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/cooldown.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/heatsoak.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/heatsoak.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/heatsoak.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/heatsoak.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/humidity.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/humidity.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/humidity.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/humidity.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/standard_temperature.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/standard_temperature.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/standard_temperature.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/standard_temperature.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/temperature.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/temperature.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/temperature.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/temperature.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_plate.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/temperature_plate.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/temperature_plate.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/temperature_related/temperature_plate.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/back.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/back.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/back.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/back.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/back_folder.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/back_folder.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/back_folder.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/back_folder.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/center_arrows.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/center_arrows.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/center_arrows.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/center_arrows.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/error.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/error.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/error.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/error.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/folder.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/folder.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/folder.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/folder.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/garbage.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/garbage.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/garbage.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/garbage.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/info.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/info.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/info.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/info.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/layers.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/layers.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/layers.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/layers.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/leds.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/leds.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/leds.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/leds.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/notification.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/notification.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/notification.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/notification.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/pause.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/pause.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/pause.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/pause.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/play.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/play.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/play.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/play.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/print.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/print.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/print.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/print.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/printer_settings.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/printer_settings.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/printer_settings.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/printer_settings.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/refresh.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/refresh.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/refresh.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/refresh.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/routine.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/routine.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/routine.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/routine.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/save.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/save.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/save.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/save.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/see.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/see.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/see.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/see.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/stop.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/stop.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/stop.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/stop.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/time.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/time.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/time.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/time.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/troubleshoot.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/troubleshoot.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/troubleshoot.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/troubleshoot.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/tune.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/tune.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/tune.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/tune.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/unsee.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/unsee.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/unsee.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/unsee.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/usb.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/ui/usb.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/usb.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/ui/usb.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/baby_step.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/baby_step.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/baby_step.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/baby_step.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/bed_levelling.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/bed_levelling.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/bed_levelling.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/bed_levelling.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/bltouch.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/bltouch.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/bltouch.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/bltouch.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/eddy_mech.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/eddy_mech.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/eddy_mech.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/eddy_mech.svg diff --git a/BlocksScreen/lib/ui/resources/media/btn_icons/inductive.svg b/BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/inductive.svg similarity index 100% rename from BlocksScreen/lib/ui/resources/media/btn_icons/inductive.svg rename to BlocksScreen/lib/ui/resources/media/btn_icons/z_levelling/inductive.svg diff --git a/BlocksScreen/lib/ui/utilitiesStackedWidget.ui b/BlocksScreen/lib/ui/utilitiesStackedWidget.ui index 522e4710..3073dab1 100644 --- a/BlocksScreen/lib/ui/utilitiesStackedWidget.ui +++ b/BlocksScreen/lib/ui/utilitiesStackedWidget.ui @@ -140,7 +140,7 @@ Maint. menu_btn - :/motion/media/btn_icons/axis_maintenance.svg + :/motion/media/btn_icons/motion/axis_maintenance.svg @@ -236,7 +236,7 @@ Check menu_btn - :/ui/media/btn_icons/routine.svg + :/ui/media/btn_icons/ui/routine.svg @@ -297,7 +297,7 @@ Shaper menu_btn - :/input_shaper/media/btn_icons/input_shaper.svg + :/input_shaper/media/btn_icons/input_shaper/input_shaper.svg @@ -357,7 +357,7 @@ Shaper menu_btn - :/ui/media/btn_icons/info.svg + :/ui/media/btn_icons/ui/info.svg @@ -417,7 +417,7 @@ Shaper menu_btn - :/ui/media/btn_icons/leds.svg + :/ui/media/btn_icons/ui/leds.svg @@ -554,7 +554,7 @@ Shaper icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -777,7 +777,7 @@ Shaper icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -951,7 +951,7 @@ Shaper icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -1034,7 +1034,7 @@ Shaper menu_btn - :/temperature_related/media/btn_icons/temperature_plate.svg + :/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg @@ -1094,7 +1094,7 @@ Shaper menu_btn - :/fan_related/media/btn_icons/fan_cage.svg + :/fan_related/media/btn_icons/fan_related/fan_cage.svg @@ -1154,7 +1154,7 @@ Shaper menu_btn - :/motion/media/btn_icons/axis_maintenance.svg + :/motion/media/btn_icons/motion/axis_maintenance.svg @@ -1214,7 +1214,7 @@ Shaper menu_btn - :/extruder_related/media/btn_icons/nozzle.svg + :/extruder_related/media/btn_icons/extruder_related/nozzle.svg @@ -1378,7 +1378,7 @@ Shaper menu_btn - :/dialog/media/btn_icons/yes.svg + :/dialog/media/btn_icons/dialog/yes.svg @@ -1454,7 +1454,7 @@ Shaper menu_btn - :/dialog/media/btn_icons/no.svg + :/dialog/media/btn_icons/dialog/no.svg @@ -1593,7 +1593,7 @@ Shaper icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -1806,7 +1806,7 @@ Shaper menu_btn - :/dialog/media/btn_icons/yes.svg + :/dialog/media/btn_icons/dialog/yes.svg @@ -2204,7 +2204,7 @@ Shaper icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg @@ -2634,7 +2634,7 @@ Shaper menu_btn - :/dialog/media/btn_icons/no.svg + :/dialog/media/btn_icons/dialog/no.svg @@ -2694,7 +2694,7 @@ Shaper menu_btn - :/dialog/media/btn_icons/yes.svg + :/dialog/media/btn_icons/dialog/yes.svg @@ -2969,7 +2969,7 @@ Shaper icon - :/ui/media/btn_icons/back.svg + :/ui/media/btn_icons/ui/back.svg diff --git a/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py b/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py index cec87dff..5d82e3a4 100644 --- a/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py +++ b/BlocksScreen/lib/ui/utilitiesStackedWidget_ui.py @@ -88,7 +88,7 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_axes_btn.setFlat(True) self.utilities_axes_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + QtGui.QPixmap(":/motion/media/btn_icons/motion/axis_maintenance.svg"), ) self.utilities_axes_btn.setObjectName("utilities_axes_btn") self.utilities_content_layout.addWidget(self.utilities_axes_btn, 1, 1, 1, 1) @@ -144,7 +144,7 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_routine_check_btn.setAutoDefault(False) self.utilities_routine_check_btn.setFlat(True) self.utilities_routine_check_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/routine.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/routine.svg") ) self.utilities_routine_check_btn.setObjectName("utilities_routine_check_btn") self.utilities_content_layout.addWidget( @@ -182,7 +182,7 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_input_shaper_btn.setFlat(True) self.utilities_input_shaper_btn.setProperty( "icon_pixmap", - QtGui.QPixmap(":/input_shaper/media/btn_icons/input_shaper.svg"), + QtGui.QPixmap(":/input_shaper/media/btn_icons/input_shaper/input_shaper.svg"), ) self.utilities_input_shaper_btn.setObjectName("utilities_input_shaper_btn") self.utilities_content_layout.addWidget( @@ -219,7 +219,7 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_info_btn.setAutoDefault(False) self.utilities_info_btn.setFlat(True) self.utilities_info_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/info.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/info.svg") ) self.utilities_info_btn.setObjectName("utilities_info_btn") self.utilities_content_layout.addWidget(self.utilities_info_btn, 0, 0, 1, 1) @@ -254,7 +254,7 @@ def setupUi(self, utilitiesStackedWidget): self.utilities_leds_btn.setAutoDefault(False) self.utilities_leds_btn.setFlat(True) self.utilities_leds_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/leds.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/leds.svg") ) self.utilities_leds_btn.setObjectName("utilities_leds_btn") self.utilities_content_layout.addWidget(self.utilities_leds_btn, 0, 1, 1, 1) @@ -328,7 +328,7 @@ def setupUi(self, utilitiesStackedWidget): self.info_back_btn.setAutoDefault(False) self.info_back_btn.setFlat(True) self.info_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.info_back_btn.setObjectName("info_back_btn") self.info_header_layout.addWidget(self.info_back_btn) @@ -446,7 +446,7 @@ def setupUi(self, utilitiesStackedWidget): self.leds_back_btn.setAutoDefault(False) self.leds_back_btn.setFlat(True) self.leds_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.leds_back_btn.setObjectName("leds_back_btn") self.leds_header_layout.addWidget(self.leds_back_btn) @@ -547,7 +547,7 @@ def setupUi(self, utilitiesStackedWidget): self.routine_check_back_btn.setAutoDefault(False) self.routine_check_back_btn.setFlat(True) self.routine_check_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.routine_check_back_btn.setObjectName("routine_check_back_btn") self.routines_header_layout.addWidget(self.routine_check_back_btn) @@ -589,7 +589,7 @@ def setupUi(self, utilitiesStackedWidget): self.rc_bheat.setProperty( "icon_pixmap", QtGui.QPixmap( - ":/temperature_related/media/btn_icons/temperature_plate.svg" + ":/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg" ), ) self.rc_bheat.setObjectName("rc_bheat") @@ -619,7 +619,7 @@ def setupUi(self, utilitiesStackedWidget): self.rc_fans.setAutoDefault(False) self.rc_fans.setFlat(True) self.rc_fans.setProperty( - "icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan_cage.svg") + "icon_pixmap", QtGui.QPixmap(":/fan_related/media/btn_icons/fan_related/fan_cage.svg") ) self.rc_fans.setObjectName("rc_fans") self.routines_content_layout.addWidget(self.rc_fans, 0, 0, 1, 1) @@ -649,7 +649,7 @@ def setupUi(self, utilitiesStackedWidget): self.rc_axis.setFlat(True) self.rc_axis.setProperty( "icon_pixmap", - QtGui.QPixmap(":/motion/media/btn_icons/axis_maintenance.svg"), + QtGui.QPixmap(":/motion/media/btn_icons/motion/axis_maintenance.svg"), ) self.rc_axis.setObjectName("rc_axis") self.routines_content_layout.addWidget(self.rc_axis, 1, 1, 1, 1) @@ -679,7 +679,7 @@ def setupUi(self, utilitiesStackedWidget): self.rc_ext.setFlat(True) self.rc_ext.setProperty( "icon_pixmap", - QtGui.QPixmap(":/extruder_related/media/btn_icons/nozzle.svg"), + QtGui.QPixmap(":/extruder_related/media/btn_icons/extruder_related/nozzle.svg"), ) self.rc_ext.setObjectName("rc_ext") self.routines_content_layout.addWidget(self.rc_ext, 1, 0, 1, 1) @@ -768,7 +768,7 @@ def setupUi(self, utilitiesStackedWidget): self.rc_yes.setAutoDefault(False) self.rc_yes.setFlat(True) self.rc_yes.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/yes.svg") ) self.rc_yes.setObjectName("rc_yes") self.horizontalLayout_3.addWidget(self.rc_yes) @@ -803,7 +803,7 @@ def setupUi(self, utilitiesStackedWidget): self.rc_no.setAutoDefault(False) self.rc_no.setFlat(True) self.rc_no.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/no.svg") ) self.rc_no.setObjectName("rc_no") self.horizontalLayout_3.addWidget(self.rc_no) @@ -880,7 +880,7 @@ def setupUi(self, utilitiesStackedWidget): self.axes_back_btn.setAutoDefault(False) self.axes_back_btn.setFlat(True) self.axes_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.axes_back_btn.setObjectName("axes_back_btn") self.lcd_settings_header_layout.addWidget(self.axes_back_btn) @@ -994,7 +994,7 @@ def setupUi(self, utilitiesStackedWidget): self.am_execute.setAutoDefault(False) self.am_execute.setFlat(True) self.am_execute.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/yes.svg") ) self.am_execute.setObjectName("am_execute") self.gridLayout.addWidget(self.am_execute, 2, 1, 1, 1) @@ -1206,7 +1206,7 @@ def setupUi(self, utilitiesStackedWidget): self.input_shaper_back_btn.setAutoDefault(False) self.input_shaper_back_btn.setFlat(True) self.input_shaper_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.input_shaper_back_btn.setObjectName("input_shaper_back_btn") self.is_header_layout.addWidget(self.input_shaper_back_btn) @@ -1419,7 +1419,7 @@ def setupUi(self, utilitiesStackedWidget): self.am_cancel.setAutoDefault(False) self.am_cancel.setFlat(True) self.am_cancel.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/no.svg") ) self.am_cancel.setObjectName("am_cancel") self.horizontalLayout.addWidget(self.am_cancel) @@ -1448,7 +1448,7 @@ def setupUi(self, utilitiesStackedWidget): self.am_confirm.setAutoDefault(False) self.am_confirm.setFlat(True) self.am_confirm.setProperty( - "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg") + "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/dialog/yes.svg") ) self.am_confirm.setObjectName("am_confirm") self.horizontalLayout.addWidget(self.am_confirm) @@ -1590,7 +1590,7 @@ def setupUi(self, utilitiesStackedWidget): self.leds_slider_back_btn.setAutoDefault(False) self.leds_slider_back_btn.setFlat(True) self.leds_slider_back_btn.setProperty( - "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg") + "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/ui/back.svg") ) self.leds_slider_back_btn.setObjectName("leds_slider_back_btn") self.leds_slider_header_layout.addWidget(self.leds_slider_back_btn) diff --git a/BlocksScreen/lib/utils/blocks_pixmap.py b/BlocksScreen/lib/utils/blocks_pixmap.py index 7c757428..00db674e 100644 --- a/BlocksScreen/lib/utils/blocks_pixmap.py +++ b/BlocksScreen/lib/utils/blocks_pixmap.py @@ -68,79 +68,101 @@ class Icon(StrEnum): """Every resource key the handwritten panels draw, one member per asset.""" ABS_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/abs_filament_topbar.svg" - ADD_FILAMENT = ":/filament_related/media/btn_icons/add_filament.svg" - ADD_SPOOL = ":/filament_related/media/btn_icons/add_spool.svg" - ARROW_DOWN = ":/arrow_icons/media/btn_icons/arrow_down.svg" - ARROW_LEFT = ":/arrow_icons/media/btn_icons/arrow_left.svg" - ARROW_RIGHT = ":/arrow_icons/media/btn_icons/arrow_right.svg" + ADD_FILAMENT = ( + ":/filament_related/media/btn_icons/filament_related/add_filament.svg" + ) + ADD_SPOOL = ":/filament_related/media/btn_icons/filament_related/add_spool.svg" + ARROW_DOWN = ":/arrow_icons/media/btn_icons/arrow_icons/arrow_down.svg" + ARROW_LEFT = ":/arrow_icons/media/btn_icons/arrow_icons/arrow_left.svg" + ARROW_RIGHT = ":/arrow_icons/media/btn_icons/arrow_icons/arrow_right.svg" BABYSTEP_GRAPHIC = ":/graphics/media/graphics/babystep_graphic.png" - BABY_STEP_ICON = ":/z_levelling/media/btn_icons/baby_step.svg" - BACK = ":/ui/media/btn_icons/back.svg" + BABY_STEP_ICON = ":/z_levelling/media/btn_icons/z_levelling/baby_step.svg" + BACK = ":/ui/media/btn_icons/ui/back.svg" BACKGROUND_1ST = ":/background/media/1st_background.png" - BACK_FOLDER = ":/ui/media/btn_icons/back_folder.svg" - SPOOL_DATABASE_1 = ":/filament_related/media/btn_icons/spool_database_1.svg" - BLOWER = ":/fan_related/media/btn_icons/blower.svg" - BLTOUCH = ":/z_levelling/media/btn_icons/bltouch.svg" - CHANGE_FILAMENT = ":/filament_related/media/btn_icons/change_filament.svg" - CHECK_GATE_1 = ":/filament_related/media/btn_icons/check_gate_1.svg" - EDDY_MECH = ":/z_levelling/media/btn_icons/eddy_mech.svg" - EJECT = ":/filament_related/media/btn_icons/eject.svg" - ERROR = ":/ui/media/btn_icons/error.svg" + BACK_FOLDER = ":/ui/media/btn_icons/ui/back_folder.svg" + SPOOL_DATABASE_1 = ( + ":/filament_related/media/btn_icons/filament_related/spool_database_1.svg" + ) + BLOWER = ":/fan_related/media/btn_icons/fan_related/blower.svg" + BLTOUCH = ":/z_levelling/media/btn_icons/z_levelling/bltouch.svg" + CHANGE_FILAMENT = ( + ":/filament_related/media/btn_icons/filament_related/change_filament.svg" + ) + CHECK_GATE_1 = ( + ":/filament_related/media/btn_icons/filament_related/check_gate_1.svg" + ) + EDDY_MECH = ":/z_levelling/media/btn_icons/z_levelling/eddy_mech.svg" + EJECT = ":/filament_related/media/btn_icons/filament_related/eject.svg" + ERROR = ":/ui/media/btn_icons/ui/error.svg" ETHERNET_CONNECTED = ":/network/media/btn_icons/network/ethernet_connected.svg" - FAN = ":/fan_related/media/btn_icons/fan.svg" - FAN_CAGE = ":/fan_related/media/btn_icons/fan_cage.svg" - FILAMENT_SENSOR = ":/filament_related/media/btn_icons/filament_sensor.svg" - FILAMENT_SENSOR_OFF = ":/filament_related/media/btn_icons/filament_sensor_off.svg" - FILAMENT_SENSOR_TURN_ON = ( - ":/filament_related/media/btn_icons/filament_sensor_turn_on.svg" + FAN = ":/fan_related/media/btn_icons/fan_related/fan.svg" + FAN_CAGE = ":/fan_related/media/btn_icons/fan_related/fan_cage.svg" + FILAMENT_SENSOR = ( + ":/filament_related/media/btn_icons/filament_related/filament_sensor.svg" + ) + FILAMENT_SENSOR_OFF = ( + ":/filament_related/media/btn_icons/filament_related/filament_sensor_off.svg" + ) + FILAMENT_SENSOR_TURN_ON = ":/filament_related/media/btn_icons/filament_related/filament_sensor_turn_on.svg" + FILE_ICON = ":/files/media/btn_icons/files/file.svg" + FOLDERICON = ":/ui/media/btn_icons/ui/folder.svg" + GARBAGE_ICON = ":/ui/media/btn_icons/ui/garbage.svg" + HALF_SPOLL = ":/filament_related/media/btn_icons/filament_related/half_spool.svg" + HOTSPOT = ":/network/media/btn_icons/network/hotspot.svg" + INDUCTIVE = ":/z_levelling/media/btn_icons/z_levelling/inductive.svg" + INFO = ":/ui/media/btn_icons/ui/info.svg" + INPUT_SHAPER_AUTO = ( + ":/input_shaper/media/btn_icons/input_shaper/input_shaper_auto.svg" + ) + INPUT_SHAPER_MANUAL = ( + ":/input_shaper/media/btn_icons/input_shaper/input_shaper_manual.svg" + ) + LAYERS = ":/ui/media/btn_icons/ui/layers.svg" + LEDS = ":/ui/media/btn_icons/ui/leds.svg" + LEFT_ARROW = ":/arrow_icons/media/btn_icons/arrow_icons/left_arrow.svg" + LOADED_SPOOL = ( + ":/filament_related/media/btn_icons/filament_related/loaded_spool.svg" + ) + LOAD_FILAMENT = ( + ":/filament_related/media/btn_icons/filament_related/load_filament.svg" ) - FILE_ICON = ":/files/media/btn_icons/file.svg" - FOLDERICON = ":/ui/media/btn_icons/folder.svg" - GARBAGE_ICON = ":/ui/media/btn_icons/garbage.svg" - HALF_SPOLL = ":/filament_related/media/btn_icons/half_spool.svg" - HOTSPOT = ":/network/media/btn_icons/hotspot.svg" - INDUCTIVE = ":/z_levelling/media/btn_icons/inductive.svg" - INFO = ":/ui/media/btn_icons/info.svg" - INPUT_SHAPER_AUTO = ":/input_shaper/media/btn_icons/input_shaper_auto.svg" - INPUT_SHAPER_MANUAL = ":/input_shaper/media/btn_icons/input_shaper_manual.svg" - LAYERS = ":/ui/media/btn_icons/layers.svg" - LEDS = ":/ui/media/btn_icons/leds.svg" - LEFT_ARROW = ":/arrow_icons/media/btn_icons/left_arrow.svg" - LOADED_SPOOL = ":/filament_related/media/btn_icons/loaded_spool.svg" - LOAD_FILAMENT = ":/filament_related/media/btn_icons/load_filament.svg" LOGO_BLOCKS = ":/graphics/media/logoblocks400x300.png" - MOVE_NOZZLE_AWAY = ":/baby_step/media/btn_icons/move_nozzle_away.svg" - MOVE_NOZZLE_CLOSE = ":/baby_step/media/btn_icons/move_nozzle_close.svg" - NO = ":/dialog/media/btn_icons/no.svg" - NOTIFICATION = ":/ui/media/btn_icons/notification.svg" + MOVE_NOZZLE_AWAY = ":/baby_step/media/btn_icons/baby_step/move_nozzle_away.svg" + MOVE_NOZZLE_CLOSE = ":/baby_step/media/btn_icons/baby_step/move_nozzle_close.svg" + NO = ":/dialog/media/btn_icons/dialog/no.svg" + NOTIFICATION = ":/ui/media/btn_icons/ui/notification.svg" NYLON_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/nylon_filament_topbar.svg" - PAUSE = ":/ui/media/btn_icons/pause.svg" + PAUSE = ":/ui/media/btn_icons/ui/pause.svg" PC_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/pc_filament_topbar.svg" PETG_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/petg_filament_topbar.svg" - PLAY = ":/ui/media/btn_icons/play.svg" + PLAY = ":/ui/media/btn_icons/ui/play.svg" PLA_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/pla_filament_topbar.svg" PP_FILAMENT_TOPBAR = ":/top_bar_icons/media/topbar/pp_filament_topbar.svg" - PRINT = ":/ui/media/btn_icons/print.svg" - PRINTER_SETTINGS = ":/ui/media/btn_icons/printer_settings.svg" - REBOOT = ":/system/media/btn_icons/reboot.svg" - REFRESH = ":/ui/media/btn_icons/refresh.svg" - RESTART_KLIPPER = ":/system/media/btn_icons/restart_klipper.svg" - RIGHT_ARROW = ":/arrow_icons/media/btn_icons/right_arrow.svg" - SAVE = ":/ui/media/btn_icons/save.svg" - SEE = ":/ui/media/btn_icons/see.svg" - SPEED = ":/motion/media/btn_icons/speed.svg" + PRINT = ":/ui/media/btn_icons/ui/print.svg" + PRINTER_SETTINGS = ":/ui/media/btn_icons/ui/printer_settings.svg" + REBOOT = ":/system/media/btn_icons/system/reboot.svg" + REFRESH = ":/ui/media/btn_icons/ui/refresh.svg" + RESTART_KLIPPER = ":/system/media/btn_icons/system/restart_klipper.svg" + RIGHT_ARROW = ":/arrow_icons/media/btn_icons/arrow_icons/right_arrow.svg" + SAVE = ":/ui/media/btn_icons/ui/save.svg" + SEE = ":/ui/media/btn_icons/ui/see.svg" + SPEED = ":/motion/media/btn_icons/motion/speed.svg" STATIC_IP = ":/network/media/btn_icons/network/static_ip.svg" - STOP = ":/ui/media/btn_icons/stop.svg" - SWITCH_ZOOM = ":/extruder_related/media/btn_icons/switch_zoom.svg" - TEMPERATURE = ":/temperature_related/media/btn_icons/temperature.svg" - TEMPERATURE_PLATE = ":/temperature_related/media/btn_icons/temperature_plate.svg" - TIME = ":/ui/media/btn_icons/time.svg" - TROUBLESHOOT = ":/ui/media/btn_icons/troubleshoot.svg" - TUNE = ":/ui/media/btn_icons/tune.svg" - UNLOAD_FILAMENT = ":/filament_related/media/btn_icons/unload_filament.svg" - UNSEE = ":/ui/media/btn_icons/unsee.svg" - UPDATE_SOFTWARE_ICON = ":/system/media/btn_icons/update_software.svg" - USB_ICON = ":/ui/media/btn_icons/usb.svg" + STOP = ":/ui/media/btn_icons/ui/stop.svg" + SWITCH_ZOOM = ":/extruder_related/media/btn_icons/extruder_related/switch_zoom.svg" + TEMPERATURE = ( + ":/temperature_related/media/btn_icons/temperature_related/temperature.svg" + ) + TEMPERATURE_PLATE = ":/temperature_related/media/btn_icons/temperature_related/temperature_plate.svg" + TIME = ":/ui/media/btn_icons/ui/time.svg" + TROUBLESHOOT = ":/ui/media/btn_icons/ui/troubleshoot.svg" + TUNE = ":/ui/media/btn_icons/ui/tune.svg" + UNLOAD_FILAMENT = ( + ":/filament_related/media/btn_icons/filament_related/unload_filament.svg" + ) + UNSEE = ":/ui/media/btn_icons/ui/unsee.svg" + UPDATE_SOFTWARE_ICON = ":/system/media/btn_icons/system/update_software.svg" + USB_ICON = ":/ui/media/btn_icons/ui/usb.svg" WIFI_0BAR = ":/network/media/btn_icons/network/wifi_0bar.svg" WIFI_0BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_0bar_protected.svg" WIFI_1BAR = ":/network/media/btn_icons/network/wifi_1bar.svg" @@ -151,8 +173,8 @@ class Icon(StrEnum): WIFI_3BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_3bar_protected.svg" WIFI_4BAR = ":/network/media/btn_icons/network/wifi_4bar.svg" WIFI_4BAR_PROTECTED = ":/network/media/btn_icons/network/wifi_4bar_protected.svg" - WIFI_CONFIG = ":/network/media/btn_icons/wifi_config.svg" - YES = ":/dialog/media/btn_icons/yes.svg" + WIFI_CONFIG = ":/network/media/btn_icons/network/wifi_config.svg" + YES = ":/dialog/media/btn_icons/dialog/yes.svg" @classmethod def wifi(cls, bars: int, protected: bool = False) -> "Icon": diff --git a/SPLIT_PROMPT.md b/SPLIT_PROMPT.md deleted file mode 100644 index 125b1e4e..00000000 --- a/SPLIT_PROMPT.md +++ /dev/null @@ -1,111 +0,0 @@ -Split PR #306 (branch `fix/network-manager-hardening`, head `f863e99`) into a stack of 6 -smaller PRs. #306 is 2299/1075 across 10 files with 158 hunks in `worker.py` alone, too big -to review. Do not modify `f863e99` - it is the frozen reference for the full combined diff. - -## Hard rules -- NEVER run `git commit`, `git push`, or anything writing to a remote. I commit and push - manually. Create branches locally, stage nothing, and give me one-line - `type(scope): summary` commit messages to run myself. -- Comments: one-liners only, and only where genuinely necessary. No em dashes. -- The network layer stays fully async on sdbus signal watching. Do not introduce - `sdbus_block`. Do not change the sdbus 0.14.1 pin. Do not redesign to polling. -- Behaviour must not change across the whole stack. The end state of PR 5 must be diff-identical - to `f863e99` for the 10 files involved. Verify with `git diff f863e99 ` - at the end - it must be empty. - -## Split by theme, not by commit -The 18 commits interleave: `afbb3ed → a0df3f3 → da76dec → cd49b35 → 7ac1839` is one chain of -successive fixes to the same ethernet bug, so cherry-picking commits reproduces the -intermediate broken states. Split by theme instead. - -Stacked: each branch off the previous, all targeting `dev`. PRs 2-6 all touch the same -`worker.py` regions so they cannot be independent. Each PR body must say "stacked on #N, -review after it merges". - -Target roughly 250-650 changed lines per PR. Sizes below are estimates from `git diff --numstat` -plus per-method line spans; the named new methods account for only 762 of `worker.py`'s 1720 -changed lines, so the remaining ~958 lines of in-place edits are the least certain part of the -allocation. If a PR lands above ~700 lines, split it further rather than shipping it oversized. - -1. `feat(keyboard): full-screen numeric keypad for IP and mask fields` (~240 lines) - `keyboardPage.py`, `tests/util/test_keyboard_page_unit.py`, plus the ~15-line - `_on_show_keyboard(numeric=True)` hunk in `networkWindow.py` (~L3705/L3752-3758). That - hunk is the only keyboard/network coupling and is additive - it needs no worker change. - Merges first, independent of the rest. - -2. `chore(network): drop per-poll debug logs and add missing docstrings` (~300-400 lines) - The per-poll debug-log removal that was spamming the log directory, comment compression to - one-liners, and ALL the docstring additions from `f863e99`. Goes early on purpose: it buys - the docstr-coverage margin that every later PR needs (see the trap below). Safest and most - mechanical PR in the stack. - -3. `refactor(network): extract helpers and cut cyclomatic complexity` (~600-700 lines) - Behaviour-neutral motion only. The complexity-extraction helpers: `_gather_ap_properties`, - `_gather_settings`, `_backup_and_drop_existing`, `_rollback_failed_add`, `_backup_profile`, - `_restore_profile`, `_vlan_*`, `_prefix_to_mask`, `_parse_ipv4_settings`, `_unwrap`, - `_setting`, `_delete_connections_where`, `_delete_all_connections_by_id`, `_find_ap_props`, - `_reload_connections`. Plus `models.py`. Each extracted helper needs its own docstring here - - PR 2 covers pre-existing gaps, not methods this PR introduces. Reviewer should be able to - read the whole thing as pure motion. - -4. `fix(network): enforce one active link and persist ethernet-off intent` (~450 lines) - `_set_wired_profiles_autoconnect`, `_ensure_wired_autoconnect`, the exclusivity logic in - `manager.py`/`worker.py`, and the `networkWindow.py` toggle handlers including the loading - guard armed before link changes. Highest review value - this is where the field bugs were. - Policy: exactly one of Wi-Fi / ethernet / hotspot active, enforced on USER TOGGLES ONLY. - Background and automatic state handlers must never drop a link behind the user's back. - -5. `fix(network): recover stale D-Bus paths and support full radio off` (~550 lines) - `_primary_paths_alive`, `_log_stale`, `_recover_signal_sources`, `_cached_path_is_valid`, - `_device_path_for_iface`, `_reset_signal_proxies`, `_async_bootstrap`, - `_wifi_hardware_enabled`, `_ensure_networking_enabled`, `_wifi_enable_preflight`, - `_apply_wifi_radio`, `_log_radio_state`, `_scan_networks_once`, `_request_scan_if_allowed`. - Plus `tests/network/test_sdbus_integration.py`. - -6. `fix(network): show live signal strength and classify auth failures` (~600 lines) - `_active_ap_signal`, `_wifi_signal_and_security`, `_signal_map_once`, `_read_connectivity`, - `_is_wifi_ap_mode`, `_wifi_activation_failed`, `_wifi_device_state`, `_classify_settings_error`, - `_validate_psk`, `_resolve_current_ip`, `_wait_for_profile_ip`, remaining `networkWindow.py` - display code, `tests/network/test_network_ui.py`. - -`tests/network/test_worker_unit.py` (+466/-63) splits across 3-6, each test landing with the code -it covers. `tests/network/conftest.py` fixtures go to the earliest PR that needs them. -`networkWindow.py` (+312/-318) splits across 1, 4 and 6. - -## Gates - run per branch, not once at the end -Every PR must pass all 5 gates standing alone: -- `.venv/bin/ruff check .` and `.venv/bin/ruff format --diff .` -- `.venv/bin/pylint -j$(nproc) --recursive=y BlocksScreen/` (baseline 8.31/10, must not drop) -- `.venv/bin/pytest tests/ --doctest-modules --cov=BlocksScreen/` (baseline 1515 passed, 30 skipped) -- `.venv/bin/docstr-coverage BlocksScreen/ --exclude '.*/BlocksScreen/lib/ui/.*' --fail-under=80 --skip-magic --skip-init --skip-private --skip-property` -- `.venv/bin/bandit -c pyproject.toml -r . -o /tmp/bandit.json -f json` then filter out `.venv` - paths in Python. Piping `-f json` to stdout yields nothing, and `[tool.bandit] exclude_dirs` - does not exclude `.venv`. - -TRAP: docstr-coverage baseline is 80.1% against `--fail-under=80` - one docstring from red. This -is why PR 2 lands the docstring work before anything else. Check this gate on every branch, PR 1 -included. - -Also keep `ruff check --select C901 --isolated --target-version=py311` clean over -`BlocksScreen/lib/network/`, `networkWindow.py` and `keyboardPage.py` (threshold 10, not a CI gate). - -## PR bodies -Read `.github/PULL_REQUEST_TEMPLATE/pull_request_template.md` first and follow it; drop the -checklist section as the template instructs, and delete any section marked not applicable. -Titles must be Conventional Commits (`feat|fix|docs|refactor|test|chore|perf`) - CI enforces this -and it drives version bumps. Keep bodies as summarised as possible. - -The RF50 result (168 pass / 0 fail / 5 skip, 7m29s, zero tracebacks, RSS steady at 21.6 MB) belongs -to the COMBINED head. Cite it as such in each body, do not claim it as per-PR validation. I will -re-run the harness once on the final stacked head. - -Carry these into the last PR's Future work: AP-mode hotspot detection and the toggle-bounce fix are -both deployed but UNVERIFIED on hardware; the 5 skipped radio-cycling phases need console or -ethernet SSH; coalesce the redundant `_build_signal_map` fan-out; stale-path recovery double-logs -the same warning at an identical timestamp; `NameOwnerChanged` would be a cleaner NM-restart trigger; -`worker.py` still wants a structural split. Expect a merge conflict with #245 (performance). - -## Do not touch -`scripts/healthcheck/` (separate work), anything under `.semgrep/` (local-only, never committed), -`bs-net-test.sh` (deliberately untracked via `.git/info/exclude`), `Makefile` and `pyproject.toml` -(reserved for #245). diff --git a/scripts/healthcheck/bs-diag.sh b/scripts/healthcheck/bs-diag.sh deleted file mode 100755 index 3f688db4..00000000 --- a/scripts/healthcheck/bs-diag.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env bash -# Single entry point for the BlocksScreen field diagnostics: runs bs-healthcheck, bs-usb-diag and bs-power. -# -# The field has no SSH, so an operator gets one command and one transcript; the default path is read-only, mutating/load-testing modes (--fix, --stress, --burn, --bed) are only reachable by naming the tool explicitly, never from `all`. -# -# Usage: -# bs-diag.sh same as `all`: health, then USB forensics, then power -# bs-diag.sh all [-q|--json] read-only sweep across every tool -# bs-diag.sh health [OPTS...] acceptance suite (bs-healthcheck.sh, OPTS passed through) -# bs-diag.sh fix [--force] apply the known-safe remediations, refused mid-print without --force -# bs-diag.sh usb [OPTS...] USB fault forensics (bs-usb-diag.sh, OPTS passed through) -# bs-diag.sh power [OPTS...] Pi power budget and rails (bs-power.sh, OPTS passed through) -# bs-diag.sh selftest [OPTS...] UI functional selftest (bs-selftest.py, OPTS passed through) -# bs-diag.sh list show the tools, whether each is present, and its own help -# -# `health` already chains `usb --check` and `selftest` internally, so `all` adds the USB forensic report and power audit on top rather than repeating them; `fix` is the only mutating path and it's never reachable from `all`. -set -u - -HERE=$(dirname -- "$(readlink -f -- "$0")") -HEALTH="$HERE/bs-healthcheck.sh" -USBDIAG="$HERE/bs-usb-diag.sh" -POWER="$HERE/bs-power.sh" -SELFTEST="$HERE/bs-selftest.py" - -if [ -t 1 ]; then - C_HDR=$'\033[1;36m' C_BAD=$'\033[31m' C_OFF=$'\033[0m' -else - C_HDR='' C_BAD='' C_OFF='' -fi - -usage() { sed -n '2,21p' "$0" | sed 's/^# \{0,1\}//'; } - -# A missing tool has to be loud: a silent skip reads as a pass and trains the operator to ignore output. -run_tool() { - local label="$1" tool="$2" - shift 2 - [ -f "$tool" ] || { - printf '%sMISSING%s %s not found beside %s\n' "$C_BAD" "$C_OFF" "$(basename -- "$tool")" "$(basename -- "$0")" >&2 - return 127 - } - printf '\n%s===== %s =====%s\n' "$C_HDR" "$label" "$C_OFF" - case "$tool" in - *.py) "${PYTHON:-python3}" "$tool" "$@" ;; - *) bash "$tool" "$@" ;; - esac -} - -CMD="${1:-all}" -[ $# -gt 0 ] && shift - -case "$CMD" in - -h | --help | help) - usage - exit 0 - ;; - health) - run_tool "health: acceptance suite" "$HEALTH" "$@" - exit $? - ;; - fix) - run_tool "fix: known-safe remediations" "$HEALTH" --fix "$@" - exit $? - ;; - usb) - run_tool "usb: fault forensics" "$USBDIAG" "$@" - exit $? - ;; - power) - run_tool "power: rails and budget" "$POWER" "$@" - exit $? - ;; - selftest) - run_tool "selftest: ui" "$SELFTEST" "$@" - exit $? - ;; - list) - for t in "$HEALTH" "$USBDIAG" "$POWER" "$SELFTEST"; do - if [ -f "$t" ]; then - printf 'present %s\n' "$t" - else - printf '%sMISSING %s%s\n' "$C_BAD" "$t" "$C_OFF" - fi - done - exit 0 - ;; - all) ;; - *) - echo "unknown command: $CMD" >&2 - usage >&2 - exit 2 - ;; -esac - -# `all` forwards only the presentation flags, so no mutating or load-testing mode can be reached from it. -HFLAGS="" -for a in "$@"; do - case "$a" in - -q | --json | -v | --deep | --strict) HFLAGS="$HFLAGS $a" ;; - *) - echo "'all' accepts only -q, --json, -v, --deep, --strict: use 'bs-diag.sh health $a' to pass it through" >&2 - exit 2 - ;; - esac -done - -RC=0 -bump() { [ "$1" -gt "$RC" ] && RC="$1"; return 0; } - -# shellcheck disable=SC2086 -run_tool "health: acceptance suite" "$HEALTH" $HFLAGS -bump $? -run_tool "usb: fault forensics" "$USBDIAG" -bump $? -run_tool "power: rails and budget" "$POWER" -bump $? - -printf '\n%s===== bs-diag done, worst exit %d =====%s\n' "$C_HDR" "$RC" "$C_OFF" -exit "$RC" diff --git a/scripts/healthcheck/bs-healthcheck.sh b/scripts/healthcheck/bs-healthcheck.sh deleted file mode 100755 index 91224859..00000000 --- a/scripts/healthcheck/bs-healthcheck.sh +++ /dev/null @@ -1,1859 +0,0 @@ -#!/usr/bin/env bash -# BlocksScreen box acceptance + health test: validates every install artifact, service, config patch and runtime subsystem. -# Usage: ./bs-healthcheck.sh [-q|--json] [-v] [--deep] [--strict] [--only S] [--skip S] [--fix] [--force] [--list] -# -q one-line PASS/FAIL summary only (fleet sweeps over ssh) -# --json machine-readable result object, implies quiet -# -v print the captured output of failing checks -# --deep add slow/network checks (remote branches, source compile, update refresh, sudo rights) -# --strict treat WARN as failure (exit code only, JSON rows keep their real tier) -# --only S run only these comma-separated sections (see --list) -# --skip S run everything except these sections -# --fix apply the known-safe remediations (spoolman, install artifacts, logs mode, asvc, env, journal, can0) -# --force allow --fix while a print is running (refused by default, the restarts disrupt the job) -# --list list section names and exit -# --expect-branch N=B[,N=B] branch each component must be on, overrides the manifest (env BS_EXPECT_BRANCH) -# Read-only and safe during a print by default. Only --fix changes anything. -# Exit: 0 all checks passed, 1 one or more failed, 2 bad usage. - -set -u - -SECTIONS="host system services ui install config klipper moonraker spoolman network updater repos python usb selftest deep" - -QUIET=false -JSON=false -VERBOSE=false -DEEP=false -STRICT=false -FIX=false -FORCE=false -ONLY="" -SKIP="" -# Ground truth for branches is the operator, not the box's own manifest: "Name=branch,Name=branch". -EXPECT_BRANCH="${BS_EXPECT_BRANCH:-}" - -usage() { awk 'NR>1 && /^#/ {sub(/^# ?/, ""); print; next} NR>1 {exit}' "$0"; } - -while [ $# -gt 0 ]; do - case "$1" in - -q | --quiet) QUIET=true ;; - --json) - JSON=true - QUIET=true - ;; - -v | --verbose) VERBOSE=true ;; - --deep) DEEP=true ;; - --strict) STRICT=true ;; - --fix) FIX=true ;; - --force) FORCE=true ;; - --only) - ONLY="${2:-}" - shift - ;; - --only=*) ONLY="${1#*=}" ;; - --skip) - SKIP="${2:-}" - shift - ;; - --skip=*) SKIP="${1#*=}" ;; - --expect-branch) - EXPECT_BRANCH="${2:-}" - shift - ;; - --expect-branch=*) EXPECT_BRANCH="${1#*=}" ;; - --list) - echo "$SECTIONS" | tr ' ' '\n' - exit 0 - ;; - -h | --help) - usage - exit 0 - ;; - *) - echo "unknown arg: $1" >&2 - exit 2 - ;; - esac - shift -done - -# A typo in --only/--skip would otherwise silently run nothing at all. -for _s in $(echo "$ONLY,$SKIP" | tr ',' ' '); do - echo " $SECTIONS " | grep -q " $_s " || { - echo "unknown section: $_s (try --list)" >&2 - exit 2 - } -done - -# Resolve the real target user/home even under sudo, same trick as BlocksScreen-start.sh. -BS_USER="${SUDO_USER:-$(id -un)}" -# Walk up to the repo root instead of counting directories, so this script survives being moved. -BS_PATH=$(dirname -- "$(readlink -f -- "$0")") -while [ "$BS_PATH" != / ] && [ ! -d "$BS_PATH/BlocksScreen" ]; do - BS_PATH=$(dirname -- "$BS_PATH") -done -[ -d "$BS_PATH/BlocksScreen" ] || BS_PATH=$(dirname -- "$(dirname -- "$(readlink -f -- "$0")")") -# sudo -i, cron and a console root login all leave SUDO_USER unset: without this fallback every path -# check points at /root and user_writable() degrades to root's always-true test -w. -if [ "$BS_USER" = root ] && [ -d "$BS_PATH/BlocksScreen" ]; then - BS_USER=$(stat -c '%U' "$BS_PATH" 2>/dev/null || echo root) -fi -BS_HOME=$(getent passwd "$BS_USER" | cut -d: -f6) -[ -n "$BS_HOME" ] || BS_HOME="$HOME" -[ -d "$BS_PATH/BlocksScreen" ] || BS_PATH="$BS_HOME/BlocksScreen" -BSENV="${BLOCKSSCREEN_VENV:-$BS_HOME/.BlocksScreen-env}" -CONF="$BS_HOME/printer_data/config/moonraker.conf" -MOON="http://localhost:7125" -SPOOL="http://localhost:7912" -IS_ROOT=false -[ "$(id -u)" = "0" ] && IS_ROOT=true - -# Colour only on a real terminal, so piped/--json output and dumb terminals stay plain. NO_COLOR opts out. -if [ -t 1 ] && [ -z "${NO_COLOR:-}" ] && [ "${TERM:-dumb}" != dumb ]; then - C_PASS=$'\033[32m' - C_WARN=$'\033[33m' - C_FAIL=$'\033[31m' - C_SKIP=$'\033[90m' - C_HDR=$'\033[1;36m' - C_DIM=$'\033[90m' - C_OFF=$'\033[0m' -else - C_PASS='' C_WARN='' C_FAIL='' C_SKIP='' C_HDR='' C_DIM='' C_OFF='' -fi - -PASS_N=0 -WARN_N=0 -FAIL_N=0 -SKIP_N=0 -FAILED_NAMES="" -WARNED_NAMES="" -JSON_ROWS="" -STATE="" -MACROS="" -CUR_SECTION="" -JOURNAL_OK="" - -say() { $QUIET || echo "$@"; } -hdr() { $QUIET || printf '\n%s== %s ==%s\n' "$C_HDR" "$1" "$C_OFF"; } -info() { $QUIET || printf ' %s%s%s\n' "$C_DIM" "$*" "$C_OFF"; } -# Remediation chatter goes to stderr so --json keeps stdout a single parseable object. -note() { printf 'FIX: %s\n' "$*" >&2; } - -# enabled
: honour --only/--skip, --deep gates the deep section. -enabled() { - local s="$1" - if [ -n "$ONLY" ]; then - echo ",$ONLY," | grep -qF ",$s," || return 1 - else - [ "$s" = "deep" ] && ! $DEEP && return 1 - fi - [ -n "$SKIP" ] && echo ",$SKIP," | grep -qF ",$s," && return 1 - return 0 -} - -json_row() { - JSON_ROWS="$JSON_ROWS${JSON_ROWS:+,}{\"section\":\"$CUR_SECTION\",\"name\":\"$1\",\"status\":\"$2\"}" -} - -# record [captured output] -record() { - local status="$1" name="$2" out="${3:-}" c="" - case "$status" in - PASS) - PASS_N=$((PASS_N + 1)) - c="$C_PASS" - ;; - WARN) - WARN_N=$((WARN_N + 1)) - WARNED_NAMES="$WARNED_NAMES${WARNED_NAMES:+, }$name" - c="$C_WARN" - ;; - FAIL) - FAIL_N=$((FAIL_N + 1)) - FAILED_NAMES="$FAILED_NAMES${FAILED_NAMES:+, }$name" - c="$C_FAIL" - ;; - SKIP) - SKIP_N=$((SKIP_N + 1)) - c="$C_SKIP" - ;; - esac - say "$c$status$C_OFF $name" - if $VERBOSE && [ -n "$out" ] && [ "$status" != "PASS" ]; then - echo "$out" | sed "s/^/ $C_DIM| /; s/\$/$C_OFF/" - fi - json_row "$name" "$status" -} - -# check : hard requirement, failure fails the box. -check() { - local name="$1" out - shift - if out=$("$@" 2>&1); then record PASS "$name"; else record FAIL "$name" "$out"; fi -} - -# warn : advisory, does not fail the box unless --strict. -warn() { - local name="$1" out - shift - if out=$("$@" 2>&1); then record PASS "$name"; else record WARN "$name" "$out"; fi -} - -# rwarn : soft twin of rcheck, a SKIP beats a WARN we could not actually verify. -rwarn() { - local name="$1" - shift - if $IS_ROOT; then - warn "$name" "$@" - else - record SKIP "$name (needs root)" - fi -} - -# rcheck : needs root to read, reported SKIP when unprivileged. -rcheck() { - local name="$1" - shift - if $IS_ROOT; then - check "$name" "$@" - else - record SKIP "$name (needs root)" - fi -} - -# Journal ACLs hide system units from unprivileged readers and Storage=none hides them from everyone, -# so "! journalctl | grep -q bad" passes on a box full of tracebacks. Probe once, then SKIP not PASS. -journal_readable() { - [ -n "$JOURNAL_OK" ] || { - if [ -n "$(journalctl -u systemd-journald -b -n 1 --no-pager 2>/dev/null)" ]; then - JOURNAL_OK=yes - else - JOURNAL_OK=no - fi - } - [ "$JOURNAL_OK" = yes ] -} - -# jcheck / jwarn : journal-backed twins, SKIP rather than pass vacuously. -jcheck() { - if journal_readable; then check "$@"; else record SKIP "$1 (no journal access)"; fi -} -jwarn() { - if journal_readable; then warn "$@"; else record SKIP "$1 (no journal access)"; fi -} - -# --- predicates (kept as commands so check() stays a plain runner) --- - -file_has() { grep -qE "$2" "$1" 2>/dev/null; } -grep_count_is_one() { [ "$(grep -cE "$1" "$2" 2>/dev/null)" = "1" ]; } -curl_matches() { curl -s -m "$1" "$2" 2>/dev/null | grep -q "$3"; } -unit_active() { systemctl is-active --quiet "$1"; } -unit_enabled() { systemctl is-enabled "$1" >/dev/null 2>&1; } -unit_prop_is() { [ "$(systemctl show "$1" -p "$2" --value 2>/dev/null)" = "$3" ]; } -unit_prop_isnt() { [ "$(systemctl show "$1" -p "$2" --value 2>/dev/null)" != "$3" ]; } -in_group() { id -nG "$BS_USER" 2>/dev/null | tr ' ' '\n' | grep -qx "$1"; } -mode_is() { [ "$(stat -c '%a' "$1" 2>/dev/null)" = "$2" ]; } -owner_is() { [ "$(stat -c '%U:%G' "$1" 2>/dev/null)" = "$2" ]; } -group_is() { [ "$(stat -c '%G' "$1" 2>/dev/null)" = "$2" ]; } -is_symlink() { [ -L "$1" ]; } -proc_running() { pgrep -f "$1" >/dev/null 2>&1; } -str_is() { [ "$1" = "$2" ]; } -not_grep() { ! grep -qE "$2" "$1" 2>/dev/null; } - -# Free space in MiB on the filesystem holding $1, must be >= $2. -free_mb_at_least() { - local kb - kb=$(df -Pk "$1" 2>/dev/null | awk 'NR==2 {print $4}') - case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$((kb / 1024))" -ge "$2" ] -} - -free_inodes_pct_at_least() { - local used - used=$(df -Pi "$1" 2>/dev/null | awk 'NR==2 {gsub(/%/, "", $5); print $5}') - case "${used:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$((100 - used))" -ge "$2" ] -} - -rootfs_writable() { ! grep -qE ' / [^ ]+ ro[, ]' /proc/mounts; } - -# test -w is always true for root, so under sudo ask the real owner instead or the check is vacuous. -user_writable() { - if $IS_ROOT; then - # No unprivileged identity resolved means the answer is unproven, not "writable". - [ "$BS_USER" != root ] || { - echo "cannot verify writability: no unprivileged user resolved" - return 1 - } - su -s /bin/sh -c "test -w '$1'" "$BS_USER" 2>/dev/null - else - test -w "$1" - fi -} - -# A freshly flashed image that never ran resize2fs shows up as a suspiciously small root partition. -rootfs_expanded() { - local kb - kb=$(df -Pk / 2>/dev/null | awk 'NR==2 {print $2}') - case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$((kb / 1024 / 1024))" -ge 8 ] -} - -read_model() { - local f=/proc/device-tree/model - [ -r "$f" ] && tr -d '\0' <"$f" || echo unknown -} - -# Age in seconds of a systemd timestamp, read from the Monotonic twin because date -d only parses the active TZ abbreviation. -unit_ts_age() { - local us up - us=$(systemctl show "$1" -p "${2}Monotonic" --value 2>/dev/null) - case "${us:-x}" in '' | 0 | *[!0-9]*) return 1 ;; esac - up=$(awk '{printf "%.0f", $1 * 1000000}' /proc/uptime 2>/dev/null) - case "${up:-x}" in '' | *[!0-9]*) return 1 ;; esac - echo $(((up - us) / 1000000)) -} - -# Seconds since the epoch for a systemd timestamp property, fails when unset. -unit_ts() { - local age - age=$(unit_ts_age "$1" "$2") || return 1 - echo $(($(date +%s) - age)) -} - -# WatchdogUSec renders as "30s" on systemd >= 250 and as raw microseconds on older builds. -watchdog_sec() { - local v - v=$(systemctl show "$1" -p WatchdogUSec --value 2>/dev/null) - case "$v" in - *ms) echo 0 ;; - *min*) echo $((${v%%min*} * 60)) ;; - *s) echo "${v%s}" ;; - '' | *[!0-9]*) echo 0 ;; - *) echo $((v / 1000000)) ;; - esac -} - -# The Qt loop pings WATCHDOG=1 every WatchdogSec/2, so a fresh stamp proves the event loop is pumping. -# The window has to come from the unit: a hardcoded one wider than WatchdogSec can never be reached -# because systemd kills and restarts the unit first, which makes it a check that can only pass. -watchdog_fresh() { - local age w - w=$(watchdog_sec BlocksScreen) - [ "$w" -gt 0 ] || { - echo "WatchdogSec=0: systemd is not enforcing UI liveness at all" - return 1 - } - age=$(unit_ts_age BlocksScreen WatchdogTimestamp) || return 1 - [ "$age" -lt "$w" ] || { - echo "watchdog stamp ${age}s old vs WatchdogSec=${w}s (event loop about to be killed)" - return 1 - } -} - -# A stalled event loop shows up as a systemd kill and a restart, never as an old timestamp. -no_watchdog_kill() { - local hits - hits=$(journalctl -u BlocksScreen -b --no-pager 2>/dev/null | grep -i 'watchdog timeout' | tail -3) - [ -z "$hits" ] || { - echo "$hits" - return 1 - } -} - -# StartLimitIntervalSec=0 is the unit-file key, systemd 252 only exposes StartLimitIntervalUSec at runtime. -start_limit_disabled() { - local v - v=$(systemctl show "$1" -p StartLimitIntervalUSec --value 2>/dev/null) - case "$v" in 0 | 0s | 0us | infinity) return 0 ;; esac - echo "$1 StartLimitIntervalUSec=${v:-}" - return 1 -} - -# A crash/fault log only matters when it was written by the current run. -log_predates_start() { - local st - [ -f "$1" ] || return 0 - st=$(unit_ts BlocksScreen ActiveEnterTimestamp) || return 0 - [ "$(stat -c '%Y' "$1" 2>/dev/null || echo 0)" -lt "$st" ] -} - -file_fresher_than() { - local age - [ -f "$1" ] || return 1 - age=$(($(date +%s) - $(stat -c '%Y' "$1"))) - [ "$age" -lt "$2" ] -} - -# Journal for a unit since it last started, as a relative age so no timestamp string is ever parsed. -journal_since_start() { - local age - age=$(unit_ts_age "$1" ActiveEnterTimestamp) || { - journalctl -u "$1" -b 2>/dev/null - return - } - journalctl -u "$1" --since "-$((age + 2))s" 2>/dev/null -} - -no_traceback_since_start() { - ! journal_since_start BlocksScreen | grep -q 'Traceback (most recent call last)' -} - -# A panel that never enumerated leaves every connector disconnected, which reads as a dead box on the bench. -display_connected() { - grep -lx connected /sys/class/drm/*/status >/dev/null 2>&1 || { - echo "no connected DRM connector (panel unplugged or overlay missing)" - return 1 - } -} - -# X starts fine with no touch device, so an unplugged digitiser only shows up when someone taps the screen. -touchscreen_present() { - local d - for d in /dev/input/event*; do - [ -e "$d" ] || continue - udevadm info -q property "$d" 2>/dev/null | grep -q '^ID_INPUT_TOUCHSCREEN=1' && return 0 - done - echo "no ID_INPUT_TOUCHSCREEN device (digitiser unplugged)" - return 1 -} - -# Xorg owns one VT: if the active console moved, the operator sees a text console instead of the app. -xorg_vt_active() { - local want cur - want=$(pgrep -a Xorg 2>/dev/null | grep -o 'vt[0-9]*' | head -1 | tr -dc '0-9') - [ -n "$want" ] || return 0 - cur=$(fgconsole 2>/dev/null | tr -dc '0-9') - [ -n "$cur" ] || return 0 - [ "$cur" = "$want" ] || { - echo "active VT is $cur, Xorg is on vt$want" - return 1 - } -} - -# A UI that has ballooned gets OOM-killed mid-print on a box nobody can SSH into. -ui_rss_below_mb() { - local pid kb - pid=$(pgrep -f 'BlocksScreen/BlocksScreen.py' 2>/dev/null | head -1) - [ -n "$pid" ] || return 0 - kb=$(ps -o rss= -p "$pid" 2>/dev/null | tr -dc '0-9') - case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$((kb / 1024))" -lt "$1" ] || { - echo "UI RSS $((kb / 1024)) MiB (limit $1)" - return 1 - } -} - -boot_counter_clear() { - local f="$BS_HOME/.cache/blockscreen/boot_attempts" n - [ -f "$f" ] || return 0 - n=$(tr -dc '0-9' <"$f") - [ -z "$n" ] || [ "$n" -lt 2 ] -} - -last_good_is_head() { - local f="$BS_HOME/.cache/blockscreen/last_good_commit" - [ -f "$f" ] || return 1 - [ "$(cat "$f")" = "$(git -C "$BS_PATH" rev-parse HEAD 2>/dev/null)" ] -} - -git_ok() { git -C "$1" cat-file -e HEAD 2>/dev/null; } -# Print what is dirty, a bare "not clean" leaves the operator with nowhere to go. -git_clean() { - local out - out=$(git -C "$1" status --porcelain 2>/dev/null | head -8) - [ -z "$out" ] || { echo "$out"; return 1; } -} -git_attached() { [ "$(git -C "$1" rev-parse --abbrev-ref HEAD 2>/dev/null)" != "HEAD" ]; } -git_no_lock() { [ ! -f "$1/.git/index.lock" ]; } -git_branch_is() { [ "$(git -C "$1" rev-parse --abbrev-ref HEAD 2>/dev/null)" = "$2" ]; } -git_remote_has_branch() { - local rc - GIT_TERMINAL_PROMPT=0 GIT_SSH_COMMAND='ssh -oBatchMode=yes -oStrictHostKeyChecking=accept-new' \ - timeout 25 git ls-remote --heads --exit-code "$1" "$2" >/dev/null 2>&1 - rc=$? - # Only rc 2 proves the ref is gone: 128 is transport and 124 is our own timeout. Failing the box - # for those turns every bench run without internet into a wall of failures nobody can act on. - case $rc in - 0) return 0 ;; - 2) - echo "branch $2 missing on $1 (updates for this component are dead)" - return 1 - ;; - *) - echo "remote $1 unreachable (rc=$rc), branch existence unproven" - return 0 - ;; - esac -} -git_system_safe_dir() { git config --system --get-all safe.directory 2>/dev/null | grep -qx "$1"; } -git_config_is() { [ "$(git -C "$1" config --get "$2" 2>/dev/null)" = "$3" ]; } - -# Without an upstream ref the updater cannot compare against origin, so the box silently never reports updates. -git_has_upstream() { - git -C "$1" rev-parse --abbrev-ref '@{u}' >/dev/null 2>&1 || { - echo "no upstream for $(git -C "$1" rev-parse --abbrev-ref HEAD 2>/dev/null) (branch never pushed or tracking lost)" - return 1 - } -} - -# Local commits made on a field box are lost by the updater's hard reset, so flag them before they are. -git_not_ahead() { - local n - git -C "$1" rev-parse --abbrev-ref '@{u}' >/dev/null 2>&1 || return 0 - n=$(git -C "$1" rev-list --count '@{u}..HEAD' 2>/dev/null) - case "${n:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$n" -eq 0 ] || { - echo "$n local commit(s) ahead of upstream (a hard-reset update will discard them)" - return 1 - } -} - -# A stray .orig from a hand-edit leaves the repo dirty forever, which disables that component's updates. -no_merge_leftovers() { - local hits - hits=$(find "$1" -maxdepth 3 \( -name '*.orig' -o -name '*.rej' \) 2>/dev/null | head -5) - [ -z "$hits" ] && return 0 - echo "merge leftovers (repo stays dirty, update_manager skips it):" - echo "$hits" - return 1 -} - -# A truncated package still imports and yields only its ~9 dunders, which crash-looped a field updater 10662x. -venv_import() { - # Under sudo a written __pycache__ is root-owned and breaks the next import as the UI user. - PYTHONDONTWRITEBYTECODE=1 "$BSENV/bin/python3.11" \ - -c "import $1 as _m; assert len(dir(_m)) > 15, 'empty module (truncated install)'" 2>&1 -} - -# Truncation can also hit a package this box does not import at startup, so sweep the tree. -venv_no_truncated_files() { - local hits - hits=$(find "$BSENV/lib" \( -name '*.so' -o \( -name '*.py' ! -name '__init__.py' \) \) -size 0 2>/dev/null | head -5) - [ -z "$hits" ] && return 0 - echo "zero-length files in venv (interrupted pip or power cut):" - echo "$hits" - return 1 -} -venv_import_updater() { - cd "$BS_PATH" && PYTHONDONTWRITEBYTECODE=1 "$BSENV/bin/python3.11" -c "import updater" 2>&1 -} - -reqs_hash_current() { - local want have - want=$(md5sum "$BS_PATH/scripts/requirements.txt" 2>/dev/null | cut -d' ' -f1) - have=$(cat "$BSENV/.blockscreen-reqs-hash" 2>/dev/null) - [ -n "$want" ] && [ "$want" = "$have" ] -} - -# A venv restored from another image keeps the donor's pyvenv.cfg, so pip installs land somewhere nobody runs. -venv_prefix_ok() { - local p - p=$("$BSENV/bin/python3.11" -c 'import sys; print(sys.prefix)' 2>/dev/null) - [ "$p" = "$BSENV" ] || { - echo "sys.prefix=$p, expected $BSENV (venv relocated or copied)" - return 1 - } -} - -# The bounded-retry sentinel survives only while pip keeps failing, so its presence means a partly installed venv. -no_pip_retry_sentinel() { - local f="$BSENV/.blockscreen-reqs-attempt" - [ -f "$f" ] || return 0 - echo "pip retry sentinel present: $(cat "$f") (requirements never installed cleanly)" - return 1 -} - -# busctl list merges acquired and activatable names, and com.blockscreen.Updater.service alone makes -# ours activatable, so only --acquired tells a live daemon from a dead one. Never Ping here: that -# would bus-activate the service and break the read-only contract. -dbus_name_available() { - busctl --system list --acquired --no-legend 2>/dev/null | - grep -q '^com\.blockscreen\.Updater[[:space:]]' || { - echo "name not acquired on the system bus (daemon down, only activatable)" - return 1 - } -} - -updater_running() { - systemctl is-active --quiet BlocksScreen-updater || - pgrep -f 'updater\.dbus_service|updater/main\.py|updater\.cli' >/dev/null 2>&1 -} - -# StartLimitIntervalSec=0 means a crash-looping daemon reports "activating" forever, never "failed". -updater_not_crashlooping() { - local n - n=$(systemctl show BlocksScreen-updater -p NRestarts --value 2>/dev/null) - case "$n" in '' | *[!0-9]*) return 0 ;; esac - [ "$n" -lt 5 ] && return 0 - echo "BlocksScreen-updater restarted ${n}x this boot (crash loop, updates dead)" - return 1 -} - -# flock dies with its holder, so a leftover file is harmless and "held by nobody" is unobservable. -# The real fault is a live holder that is not the daemon or one of its children: the next update blocks. -no_stale_updater_lock() { - local f holders pid kids p - command -v fuser >/dev/null 2>&1 || return 0 - pid=$(systemctl show BlocksScreen-updater -p MainPID --value 2>/dev/null) - case "${pid:-x}" in '' | *[!0-9]*) pid=0 ;; esac - kids=$(pgrep -P "$pid" 2>/dev/null | tr '\n' ' ') - for f in /run/blockscreen/updater.lock "$BS_HOME/.cache/blockscreen/updater.lock"; do - [ -f "$f" ] || continue - holders=$(fuser "$f" 2>/dev/null | tr -s ' ' '\n' | grep -E '^[0-9]+$') - for p in $holders; do - case " $pid $kids " in *" $p "*) continue ;; esac - echo "$f held by pid $p ($(ps -o args= -p "$p" 2>/dev/null | cut -c1-60)), not the updater" - return 1 - done - done - return 0 -} - -no_updater_errors() { - ! journalctl -u BlocksScreen-updater -b 2>/dev/null | - grep -Eiq 'traceback|brick|CRITICAL|aborting update' -} - -# A wedged _run leaves a long-lived child under the daemon: the box looks idle and every future update is dead. -no_wedged_updater_child() { - local pid kid age cmd - pid=$(systemctl show BlocksScreen-updater -p MainPID --value 2>/dev/null) - case "${pid:-x}" in '' | 0 | *[!0-9]*) return 0 ;; esac - for kid in $(pgrep -P "$pid" 2>/dev/null); do - age=$(ps -o etimes= -p "$kid" 2>/dev/null | tr -dc '0-9') - case "${age:-x}" in '' | *[!0-9]*) continue ;; esac - [ "$age" -lt 900 ] && continue - cmd=$(ps -o args= -p "$kid" 2>/dev/null | cut -c1-80) - echo "updater child pid $kid running ${age}s: $cmd (wedged subprocess, updates blocked)" - return 1 - done - return 0 -} - -# The daemon rewrites this file at every step, so a cold one left mid-sequence means an update died halfway. -updater_status_complete() { - local f=/run/blockscreen/updater_status.json s t - [ -f "$f" ] || return 0 - file_fresher_than "$f" 900 && return 0 - s=$(grep -o '"step":[ ]*[0-9]*' "$f" | tr -dc '0-9') - t=$(grep -o '"total":[ ]*[0-9]*' "$f" | tr -dc '0-9') - [ -n "$s" ] && [ -n "$t" ] && [ "$s" != "$t" ] || return 0 - echo "last update stopped at step $s of $t: $(cat "$f")" - return 1 -} - -# Stale apt lists make the update count read zero, so the operator is told a box is current when it is not. -apt_lists_fresh() { - local newest age - newest=$(find /var/lib/apt/lists -maxdepth 1 -name '*_Packages*' -printf '%T@\n' 2>/dev/null | sort -rn | head -1 | cut -d. -f1) - case "${newest:-x}" in '' | *[!0-9]*) return 0 ;; esac - age=$(($(date +%s) - newest)) - [ "$age" -lt 604800 ] || { - echo "apt lists $((age / 86400)) days old (apt-get update has not run)" - return 1 - } -} - -# Anchored to the UI's own start so a successful --fix plus restart is not judged by pre-fix lines. -no_proxy_errors() { ! journal_since_start BlocksScreen | grep -q '32601'; } - -proxy_works() { - curl -s -m 5 -X POST "$MOON/server/spoolman/proxy" -H 'Content-Type: application/json' \ - -d '{"request_method":"GET","path":"/v1/spool"}' 2>/dev/null | grep -q '"result"' -} - -# /server/info keeps loaded and failed components in separate arrays, so slice before matching. -moon_component_array() { - curl -s -m 5 "$MOON/server/info" 2>/dev/null | tr -d ' \n' | - sed "s/.*\"$1\":\[//; s/\].*//" -} -moon_component_loaded() { moon_component_array components | grep -q "\"$1\""; } -moon_no_failed_components() { - local f - f=$(moon_component_array failed_components) - [ -z "$f" ] || { echo "failed_components: $f"; return 1; } -} - -# The effective config only lists components that actually loaded, unlike orig which mirrors the file. -server_config_has_spoolman() { - curl -s -m 5 "$MOON/server/config" 2>/dev/null | tr -d ' \n' | - sed 's/,"orig":.*//; s/.*"config"://' | grep -q '"spoolman"' -} - -mtime() { stat -c '%Y' "$1" 2>/dev/null || echo 0; } - -# The provisioning race: the venv landed after the UI start script already gave up on editing moonraker.conf. -spoolman_section_present() { grep -q '^\[spoolman\]' "$CONF" 2>/dev/null; } -no_spoolman_venv_race() { - [ -d "$BS_HOME/Spoolman/.venv" ] || return 0 - spoolman_section_present && return 0 - echo "Spoolman/.venv exists but [spoolman] missing from moonraker.conf" - return 1 -} -moonraker_read_current_conf() { - local st - st=$(unit_ts moonraker ActiveEnterTimestamp) || return 0 - [ "$(mtime "$CONF")" -le "$st" ] || - { echo "moonraker.conf edited after moonraker started, restart pending"; return 1; } -} -# Scoped to Spoolman: RF50-Klipper/katapult legitimately have no venv and log the same line. -no_missing_venv_in_updater_log() { - ! journalctl -u BlocksScreen-updater -b 2>/dev/null | - grep -q 'No venv found for [^,]*/Spoolman,' -} - -# moonraker.asvc is a case-sensitive allowlist, a missing entry silently breaks update restarts. -asvc_has() { grep -qx "$1" "$BS_HOME/printer_data/moonraker.asvc" 2>/dev/null; } -no_restart_denied() { - ! journalctl -u moonraker -b 2>/dev/null | grep -q 'not permitted to restart service' -} - -# Klipper print_stats state, empty when moonraker/klipper is unreachable. -printer_state() { - curl -s -m 5 "$MOON/printer/objects/query?print_stats" 2>/dev/null | - tr '{},' '\n' | grep '"state"' | head -1 | cut -d'"' -f4 -} -get_state() { - [ -n "$STATE" ] || STATE=$(printer_state) - echo "$STATE" -} - -has_macro() { echo "$MACROS" | grep -qi "gcode_macro $1"; } - -# The files klipper actually loads: printer.cfg plus its includes. Recursing the whole tree instead -# picks up .bak files, dated backups and staged cfgs for boards this variant does not ship. -active_cfgs() { - local dir="$BS_HOME/printer_data/config" root inc g - root="$dir/printer.cfg" - [ -f "$root" ] || return 0 - echo "$root" - awk '/^\[include /{sub(/^\[include[ \t]+/, ""); sub(/\].*$/, ""); sub(/[ \t]+$/, ""); print}' "$root" | - while read -r inc; do - case "$inc" in - *'*'*) for g in "$dir"/$inc; do [ -f "$g" ] && echo "$g"; done ;; - *) [ -f "$dir/$inc" ] && echo "$dir/$inc" ;; - esac - done -} - -# A board that was never flashed or never enumerated leaves its serial path absent, which klippy reports late and vaguely. -printer_serials_exist() { - local p bad="" files - files=$(active_cfgs) - [ -n "$files" ] || return 0 - # Split on the colon, not on whitespace: klipper accepts "serial:/dev/x" with no space after it. - for p in $(grep -hE '^[[:space:]]*serial:' $files 2>/dev/null | - sed 's/^[[:space:]]*serial:[[:space:]]*//; s/[[:space:]]*[#;].*$//; s/[[:space:]]*$//' | - grep '^/dev/' | sort -u); do - [ -e "$p" ] || bad="$bad $p" - done - [ -z "$bad" ] || { - echo "serial device(s) absent (board unflashed, unplugged or renamed):$bad" - return 1 - } -} - -# A board left on an older Klipper build still connects, then fails in ways that look like wiring faults. -mcu_versions_match() { - local host name v bad="" - host=$(curl -s -m 5 "$MOON/printer/info" 2>/dev/null | tr '{},' '\n' | grep '"software_version"' | cut -d'"' -f4) - [ -n "$host" ] || return 0 - for name in $(echo "$MACROS" | grep -o '"mcu[^"]*"' | tr -d '"' | tr ' ' '~' | sort -u); do - v=$(curl -s -m 5 --get --data-urlencode "$(echo "$name" | tr '~' ' ')" "$MOON/printer/objects/query" 2>/dev/null | - tr '{},' '\n' | grep '"mcu_version"' | head -1 | cut -d'"' -f4) - [ -z "$v" ] || [ "$v" = "$host" ] || bad="$bad $(echo "$name" | tr '~' ' ')=$v" - done - [ -z "$bad" ] || { - echo "host klipper $host, mcu firmware:$bad (reflash needed)" - return 1 - } -} - -# An MCU shutdown is the signature of a wiring, power or crystal fault on a freshly built machine. -no_mcu_faults() { - local f="$BS_HOME/printer_data/logs/klippy.log" out - [ -f "$f" ] || return 0 - out=$(tail -n 4000 "$f" 2>/dev/null | - grep -Ei 'Lost communication with MCU|MCU .*shutdown|Timer too close|Unable to connect' | tail -3) - [ -z "$out" ] || { echo "$out"; return 1; } -} - -# An ADC or heater fault on a freshly built machine is an unplugged or shorted probe, not a tuning problem. -no_adc_faults() { - local f="$BS_HOME/printer_data/logs/klippy.log" out - [ -f "$f" ] || return 0 - out=$(tail -n 4000 "$f" 2>/dev/null | - grep -Ei 'ADC out of range|not heating at expected rate|Thermistor .*out of range|Heater .*above maximum' | tail -3) - [ -z "$out" ] || { echo "$out"; return 1; } -} - -# The last Stats line is klipper's own link and load telemetry, which is the only in-log evidence of a -# marginal cable or an overloaded board before it turns into a shutdown mid-print. -klippy_stats_line() { - local f="$BS_HOME/printer_data/logs/klippy.log" - [ -f "$f" ] || return 1 - tail -n 3000 "$f" 2>/dev/null | grep '^Stats ' | tail -1 | grep . -} - -# Klipper prints one key set per MCU on the same line, so report the worst board rather than the first. -kstat_max() { - local line - line=$(klippy_stats_line) || return 1 - printf '%s\n' "$line" | tr ' ' '\n' | grep "^$1=" | cut -d= -f2 | - awk 'BEGIN { m = "" } { if (m == "" || $1 + 0 > m + 0) m = $1 } END { if (m != "") print m }' | grep . -} - -# Invalid bytes are data the host could not parse at all: a bad cable, a bad crimp or EMI, never config. -no_invalid_serial_bytes() { - local v - v=$(kstat_max bytes_invalid) || return 0 - case "${v:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$v" -eq 0 ] || { - echo "bytes_invalid=$v, corrupt data on the MCU link (cable, crimp or EMI)" - return 1 - } -} - -# Retransmits recover silently, but a healthy build sits in single digits: more means a marginal link. -few_serial_retransmits() { - local v - v=$(kstat_max bytes_retransmit) || return 0 - case "${v:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$v" -le 500 ] || { - echo "bytes_retransmit=$v, link is retrying often (cable, hub or USB port)" - return 1 - } -} - -# Klipper's own rule of thumb: avg + 3*stddev over 2.5ms means the board is running out of time. -mcu_task_headroom_ok() { - local avg sd - avg=$(kstat_max mcu_task_avg) || return 0 - sd=$(kstat_max mcu_task_stddev) || return 0 - case "${avg:-x}" in '' | *[!0-9.eE+-]*) return 0 ;; esac - case "${sd:-x}" in '' | *[!0-9.eE+-]*) return 0 ;; esac - awk -v a="$avg" -v s="$sd" 'BEGIN { exit (a + 3 * s > 0.0025) ? 1 : 0 }' || { - echo "mcu_task_avg=$avg stddev=$sd exceeds klipper's 2.5ms budget" - return 1 - } -} - -# adj is the crystal speed klipper measured: more than 1% off nominal is a clock or power defect. -mcu_clock_sane() { - local line - line=$(klippy_stats_line) || return 0 - printf '%s\n' "$line" | tr ' ' '\n' | awk -F= ' - /^freq=/ { f = $2 + 0 } - /^adj=/ { - a = $2 + 0 - if (f > 0 && a > 0) { - d = (a - f) / f - if (d < 0) d = -d - if (d > 0.01) { printf "clock drift %.2f%% (freq=%d adj=%d)\n", d * 100, f, a; bad = 1 } - } - } - END { exit bad ? 1 : 0 }' -} - -# print_stall counts the times the host could not feed the MCU in time, the step before Timer too close. -no_print_stalls() { - local v - v=$(kstat_max print_stall) || return 0 - case "${v:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$v" -eq 0 ] || { - echo "print_stall=$v, the host fell behind feeding the MCU" - return 1 - } -} - -# A configured [mcu rpi] is a second klipper process: without its unit and socket klippy never connects. -linux_mcu_backed() { - local files - files=$(active_cfgs) - [ -n "$files" ] || return 0 - grep -hqE '^[[:space:]]*\[mcu[[:space:]]+rpi\]' $files 2>/dev/null || return 0 - systemctl is-active --quiet klipper-mcu 2>/dev/null || { - echo "[mcu rpi] configured but klipper-mcu.service is not active" - return 1 - } - [ -S /tmp/klipper_host_mcu ] || { - echo "[mcu rpi] configured but /tmp/klipper_host_mcu socket is missing" - return 1 - } -} - -# Our units failing is a defect, a distro unit failing (e2scrub_reap, man-db) is noise, so name them either way. -failed_units() { systemctl list-units --state=failed --no-legend --plain 2>/dev/null | awk '{print $1}'; } -no_failed_units() { - local u - u=$(failed_units | tr '\n' ' ') - [ -z "${u// /}" ] || { - echo "failed units: $u" - return 1 - } -} -no_failed_bs_units() { - local u - u=$(failed_units | grep -i blocksscreen | tr '\n' ' ') - [ -z "${u// /}" ] || { - echo "failed units: $u" - return 1 - } -} -time_synced() { timedatectl show -p NTPSynchronized --value 2>/dev/null | grep -q yes; } -# Bits 0-3 are throttling right now, bits 16-19 only record that it happened earlier this boot. -not_throttled() { - local v - command -v vcgencmd >/dev/null 2>&1 || return 0 - v=$(vcgencmd get_throttled 2>/dev/null | cut -d= -f2) - case "${v:-x}" in '' | x | *[!0-9a-fA-Fx]*) return 0 ;; esac - [ "$v" != "0x0" ] || return 0 - if [ $((v & 0xF)) -ne 0 ]; then - echo "throttled=$v (active right now: PSU sag or overheating)" - else - echo "throttled=$v (historic only since boot, not active)" - fi - return 1 -} - -cpu_temp_ok() { - local t - t=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null) || return 0 - case "${t:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$((t / 1000))" -lt 80 ] -} - -# Vendor tooling logs the card's unclean power-off tally, the practical stand-in for SD SMART data. -no_unsafe_shutdowns() { - local n - n=$(journalctl -b 2>/dev/null | grep -o 'Unsafe Shutdown Count: *[0-9]*' | tail -1 | tr -dc '0-9') - [ -z "$n" ] && return 0 - [ "$n" -lt 10 ] || { - echo "Unsafe Shutdown Count: $n" - return 1 - } -} - -# printer_data/config/config is the intended layout, only a third level is an accident (configurator._cleanup_nested). -no_nested_config_dir() { - local p="$BS_HOME/printer_data/config/config/config" - # -L as well as -e, the nest is a symlink and a broken one is invisible to -e alone. - [ ! -L "$p" ] && [ ! -e "$p" ] -} -# Moonraker keeps the last of two same-named sections, so a duplicated one silently reverts our patched settings. -no_duplicate_conf_sections() { - local dup - dup=$(grep -oE '^\[[^]]+\]' "$1" 2>/dev/null | sort | uniq -d | tr '\n' ' ') - [ -z "${dup// /}" ] || { - echo "duplicated sections in $1: $dup" - return 1 - } -} - -# Klipper aborts the whole config on an include it cannot find, so the box comes up with no printer at all. -includes_resolve() { - local dir="$1" f inc bad="" - for f in "$dir"/*.cfg; do - [ -f "$f" ] || continue - while read -r inc; do - case "$inc" in *'*'*) continue ;; esac - [ -e "$dir/$inc" ] || bad="$bad $inc" - done < <(awk '/^\[include /{sub(/^\[include[ \t]+/, ""); sub(/\].*$/, ""); sub(/[ \t]+$/, ""); print}' "$f") - done - [ -z "$bad" ] || { - echo "missing [include] targets:$bad" - return 1 - } -} - -# Older builds log "Removed neste dir", so match the shorter prefix or the check misses them. -no_renesting_this_boot() { ! journalctl -u BlocksScreen -b 2>/dev/null | grep -q 'Removed neste'; } - -# A USB stick pulled from the file browser logs I/O errors on sd*, only the boot device is a health signal. -no_kernel_errors() { - local out root - root=$(findmnt -no SOURCE / 2>/dev/null | sed 's|/dev/||; s|p\?[0-9]*$||') - out=$(journalctl -k -b 2>/dev/null | grep -Ei 'Out of memory|segfault|BUG:|I/O error' | - awk -v r="$root" '$0 ~ /dev sd[a-z]/ && $0 !~ ("dev " r) { next } { print }' | tail -5) - [ -z "$out" ] || { echo "$out"; return 1; } -} - -# Name the override file and show its head, the point of the check is which pins were forced. -no_updater_override() { - local p="$BS_HOME/printer_data/config/blockscreen_updater.yaml" - [ -f "$p" ] || return 0 - echo "override present: $p" - grep -vE '^\s*(#|$)' "$p" 2>/dev/null | head -6 - return 1 -} - -mem_available_mb_at_least() { - local kb - kb=$(awk '/MemAvailable/ {print $2}' /proc/meminfo 2>/dev/null) - case "${kb:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$((kb / 1024))" -ge "$1" ] -} - -# A half-configured package leaves apt refusing every later install, which kills the Update button silently. -dpkg_consistent() { - local out - out=$(dpkg --audit 2>/dev/null | head -6) - [ -z "$out" ] || { echo "$out"; return 1; } -} - -# The journal is the only field diagnostic, and an unbounded one is also the usual way a small SD fills up. -journal_size_below_mb() { - local mb - mb=$(journalctl --disk-usage 2>/dev/null | grep -oE '[0-9.]+[KMGT]' | tail -1 | - awk '{ n = $0 + 0; u = substr($0, length($0)); - if (u == "K") n /= 1024; else if (u == "G") n *= 1024; else if (u == "T") n *= 1048576; - printf "%d", n }') - case "${mb:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$mb" -lt "$1" ] || { - echo "journal using ${mb} MiB (limit $1)" - return 1 - } -} - -# Editing a repo-symlinked unit is the common cause, so this is advisory: it only means systemd holds an older copy. -no_daemon_reload_pending() { - local u - for u in "$@"; do - systemctl show "$u" -p NeedDaemonReload --value 2>/dev/null | grep -q yes && { - echo "$u changed on disk since the last daemon-reload" - return 1 - } - done - return 0 -} - -has_default_route() { ip route show default 2>/dev/null | grep -q .; } -dns_resolves() { getent hosts github.com >/dev/null 2>&1; } - -# Commissioning means the operator reaches Mainsail from a laptop, which a localhost probe never proves. -lan_moonraker_ok() { - local ip - ip=$(hostname -I 2>/dev/null | awk '{print $1}') - [ -n "$ip" ] || return 0 - curl_matches 6 "http://$ip:7125/server/info" '"result"' || { - echo "moonraker unreachable on LAN address $ip (bound to localhost or firewalled)" - return 1 - } -} - -# Mainsail loads over the LAN and then 401s on every call when the box subnet is missing from trusted_clients. -lan_client_trusted() { - local ip out - ip=$(hostname -I 2>/dev/null | awk '{print $1}') - [ -n "$ip" ] || return 0 - out=$(curl -s -m 6 "http://$ip:7125/printer/info" 2>/dev/null) - case "$out" in '' | *'"result"'*) return 0 ;; esac - echo "moonraker denies API calls from $ip: $(echo "$out" | head -c 100) (add the subnet to trusted_clients)" - return 1 -} - -# A box commissioned at bench-side signal strength drops off the network once it is in its final position. -wifi_signal_ok() { - local s - command -v nmcli >/dev/null 2>&1 || return 0 - s=$(nmcli -t -f ACTIVE,SIGNAL dev wifi 2>/dev/null | awk -F: '$1 == "yes" { print $2; exit }' | tr -dc '0-9') - case "${s:-x}" in '' | *[!0-9]*) return 0 ;; esac - [ "$s" -ge 40 ] || { - echo "wifi signal ${s}%" - return 1 - } -} -github_reachable() { - curl -s -m 8 -o /dev/null -w '%{http_code}' https://github.com 2>/dev/null | - grep -qE '^(200|301|302)$' -} - -# chvt moved into the updater sudoers file, so ask sudo about the capability instead of a filename only old images have. -chvt_nopasswd() { - local vt rc=0 - for vt in 7 8; do - sudo -n -l -U "$BS_USER" /usr/bin/chvt "$vt" >/dev/null 2>&1 || { - echo "$BS_USER may not run 'chvt $vt' without a password" - rc=1 - } - done - return $rc -} - -# Field boxes carry a unit whose ExecStart points at a path that no longer exists, so the hostname never gets set. -hostname_unit_ok() { - local u=/etc/systemd/system/set-hostname.service target - [ -f "$u" ] || { - echo "$u missing (hostname stays the image default)" - return 1 - } - target=$(awk -F= '/^ExecStart=/ {print $2; exit}' "$u") - [ -x "$target" ] || { - echo "ExecStart=$target is not executable (stale unit from an older install)" - return 1 - } - unit_enabled set-hostname.service || { - echo "set-hostname.service is not enabled" - return 1 - } -} - -# A cloned image keeps the donor hostname, so two boxes collide on mDNS and the operator flashes the wrong one. -hostname_matches_serial() { - local serial want - serial=$(awk '/^Serial/ {print $3; exit}' /proc/cpuinfo 2>/dev/null) - case "${serial:-x}" in '' | x | *[!0-9a-fA-F]* | 0000000000000000) return 0 ;; esac - want="BLOCKS-RF50-$serial" - [ "$(hostname)" = "$want" ] || { - echo "hostname is $(hostname), expected $want (set-hostname never ran, or this is a clone)" - return 1 - } -} - -# A box shipped with a pending reboot applies half its kernel/libc upgrade at the customer site instead. -no_reboot_required() { - [ -f /var/run/reboot-required ] || [ -f /run/reboot-required ] || return 0 - echo "reboot pending: $(cat /run/reboot-required.pkgs 2>/dev/null | tr '\n' ' ')" - return 1 -} - -# An unmapped 127.0.1.1 makes sudo and avahi hang on every lookup, which shows up as a box that is just slow. -hosts_maps_hostname() { - local h - h=$(hostname) - grep -qE "^127\.0\.1\.1[[:space:]]+.*\<$h\>" /etc/hosts 2>/dev/null || { - echo "/etc/hosts has no 127.0.1.1 entry for '$h' (sudo/avahi lookups stall)" - return 1 - } -} - -# The helper is installed byte-for-byte, so any drift means an old copy that predates the apt fixes. -apt_helper_current() { - local src="$BS_PATH/scripts/bs-apt-helper.sh" dst=/usr/local/sbin/bs-apt-helper - [ -f "$src" ] || return 0 - [ -x "$dst" ] || { - echo "$dst missing (updater apt path falls back to a raw apt, or fails)" - return 1 - } - cmp -s "$src" "$dst" || { - echo "$dst differs from $src (stale helper from an older install)" - return 1 - } -} - -# Without this rule every apt step of an update prompts for a password nobody can type on a touchscreen. -apt_helper_nopasswd() { - sudo -n -l -U "$BS_USER" /usr/local/sbin/bs-apt-helper update >/dev/null 2>&1 || { - echo "$BS_USER may not run bs-apt-helper without a password (apt updates will hang)" - return 1 - } -} - -polkit_rule_present() { - [ -f /usr/share/polkit-1/rules.d/90-BlocksScreen.rules ] || - [ -f /etc/polkit-1/rules.d/90-BlocksScreen.rules ] || - [ -f /etc/polkit-1/localauthority/50-local.d/20-blocksscreen.pkla ] -} - -# Components declared in the updater manifest, one "name|path|branch|url" row each. -components() { - local f="$BS_PATH/updater/components.yaml" - [ -f "$f" ] || return 1 - awk ' - function v(s) { gsub(/^[ \t]*["\x27]|["\x27][ \t]*$/, "", s); return s } - /^ - name:/ { if (n != "") print n "|" p "|" b "|" u; n = v($3); p = ""; b = ""; u = "" } - /^ path:/ { p = v($2) } - /^ branch:/ { b = v($2) } - /^ url:/ { u = v($2) } - END { if (n != "") print n "|" p "|" b "|" u } - ' "$f" -} - -# awk exits 0 on a manifest it cannot parse and both consumers then iterate nothing, so the repo and -# deep checks vanish while the summary still reads ALL PASS. Assert the row count instead. -components_ok() { - local n - n=$(components | grep -c '|') - case "${n:-x}" in '' | *[!0-9]*) n=0 ;; esac - [ "$n" -ge 6 ] || { - echo "parsed $n components, expected >= 6 (manifest format changed, repo+deep checks would silently vanish)" - return 1 - } -} - -# Branch ground truth is the operator, not the box manifest: "Name=branch,Name=branch", empty when unset. -# A local override pins a component deliberately, so its branch is the expectation, not a deviation. -override_branch_for() { - local p="$BS_HOME/printer_data/config/blockscreen_updater.yaml" out - [ -f "$p" ] || return 1 - out=$(awk -v want="$1" ' - /^[[:space:]]*-?[[:space:]]*name:/ { n = $NF; gsub(/["\x27]/, "", n) } - /^[[:space:]]*branch:/ { b = $NF; gsub(/["\x27]/, "", b); if (n == want) { print b; exit } } - ' "$p") - [ -n "$out" ] || return 1 - echo "$out" -} - -expect_branch_for() { - local pair - for pair in $(echo "$EXPECT_BRANCH" | tr ',' ' '); do - [ "${pair%%=*}" = "$1" ] && { - echo "${pair#*=}" - return 0 - } - done - return 1 -} - -# --- sections --- - -sec_host() { - local serial expect - info "host $(hostname) $(date '+%F %T')" - info "kernel $(uname -r) uptime$(uptime -p 2>/dev/null | sed 's/^up//')" - info "model $(read_model)" - info "user $BS_USER home=$BS_HOME repo=$BS_PATH" - info "printer state: $(get_state)" - serial=$(awk '/Serial/ {print $3}' /proc/cpuinfo 2>/dev/null) - # A cloned SD card keeps the donor hostname, so a mismatch means duplicate identities on the fleet. - if [ -n "$serial" ]; then - expect="BLOCKS-RF50-$serial" - warn "hostname matches board serial" str_is "$(hostname)" "$expect" - [ "$(hostname)" = "$expect" ] || info "hostname $(hostname), serial says $expect" - fi - check "repo checkout present" test -d "$BS_PATH/.git" -} - -sec_system() { - check "root filesystem writable" rootfs_writable - warn "root filesystem expanded (>= 8 GiB)" rootfs_expanded - check "free space on / >= 500 MiB" free_mb_at_least / 500 - check "free space on home >= 500 MiB" free_mb_at_least "$BS_HOME" 500 - warn "free inodes on / >= 10%" free_inodes_pct_at_least / 10 - warn "available memory >= 100 MiB" mem_available_mb_at_least 100 - check "no failed BlocksScreen units" no_failed_bs_units - warn "no failed systemd units" no_failed_units - warn "clock synchronised (NTP)" time_synced - warn "no undervoltage/throttling" not_throttled - warn "CPU temperature < 80 C" cpu_temp_ok - jwarn "no OOM/segfault/IO errors in kernel log" no_kernel_errors - jwarn "SD unsafe shutdown count below 10" no_unsafe_shutdowns - warn "persistent journal (/var/log/journal)" test -d /var/log/journal - warn "journal below 400 MiB" journal_size_below_mb 400 - check "dpkg database consistent" dpkg_consistent - warn "no pending reboot" no_reboot_required -} - -sec_services() { - local u n - for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater klipper moonraker Spoolman; do - check "$u active" unit_active "$u" - done - for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater BlocksScreen-deploy.path; do - check "$u enabled" unit_enabled "$u" - done - # Active but not enabled survives now and dies at the next boot, the classic half-provisioned box. - for u in klipper moonraker Spoolman; do - check "$u enabled" unit_enabled "$u" - done - warn "BlocksScreen-splash-holder enabled" unit_enabled BlocksScreen-splash-holder - warn "udiskie active (USB automount)" unit_active udiskie - # Load-bearing: a box with no SSH must never be rate-limited out of restarting. - for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater; do - check "$u start rate limiting disabled" start_limit_disabled "$u" - done - warn "no pending daemon-reload" no_daemon_reload_pending BlocksScreen BlocksScreen-xorg BlocksScreen-updater Spoolman - check "BlocksScreen is Type=notify" unit_prop_is BlocksScreen Type notify - check "BlocksScreen watchdog armed" unit_prop_isnt BlocksScreen WatchdogUSec 0 - jcheck "no watchdog kill this boot" no_watchdog_kill - check "default target is multi-user" str_is "$(systemctl get-default 2>/dev/null)" multi-user.target - for u in BlocksScreen BlocksScreen-xorg BlocksScreen-updater Spoolman moonraker klipper; do - n=$(systemctl show "$u" -p NRestarts --value 2>/dev/null) - case "${n:-x}" in '' | *[!0-9]*) continue ;; esac - info "$(printf '%-24s NRestarts=%s' "$u" "$n")" - # Name stays constant across runs so JSON rows are diffable, the count goes in the detail. - # Both branches record or a healthy box emits no row at all and JSON runs stop being comparable. - if [ "$n" -gt 3 ]; then - record WARN "$u restart count sane" "restarted $n times, crash loop behind an active state?" - else - record PASS "$u restart count sane" - fi - done - return 0 -} - -sec_ui() { - check "UI process running" proc_running "BlocksScreen/BlocksScreen.py" - check "UI watchdog fresh (event loop alive)" watchdog_fresh - check "X server socket present" test -S /tmp/.X11-unix/X0 - check "Xorg process running" pgrep -x Xorg - check "Xorg owns the active VT" xorg_vt_active - check "touchscreen input device present" touchscreen_present - warn "display connector connected" display_connected - warn "UI memory below 700 MiB" ui_rss_below_mb 700 - check "no crash log from this run" log_predates_start "$BS_PATH/logs/blocksscreen_crash.log" - check "no fault log from this run" log_predates_start "$BS_PATH/logs/blocksscreen_fault.log" - jcheck "no traceback in journal since start" no_traceback_since_start - check "boot_attempts counter cleared" boot_counter_clear - warn "last_good_commit matches HEAD" last_good_is_head - warn "UI log written in the last 10 min" file_fresher_than "$BS_PATH/logs/BlocksScreen.log" 600 - warn "splash raw cache precomputed" test -f "$BS_HOME/.cache/blockscreen/splash.raw" - warn "splash png present" test -f "$BS_HOME/.cache/blockscreen/splash.png" - check "logs dir is setgid 2775" mode_is "$BS_PATH/logs" 2775 - check "logs dir group is blocksscreen" group_is "$BS_PATH/logs" blocksscreen -} - -sec_install() { - local g - # The three artifacts bs-deploy-check.sh watches: any one missing re-runs install-updater.sh. - check "dbus policy installed" test -f /etc/dbus-1/system.d/com.blockscreen.Updater.conf - check "dbus service file installed" test -f /usr/share/dbus-1/system-services/com.blockscreen.Updater.service - check "deploy path unit installed" test -f /etc/systemd/system/BlocksScreen-deploy.path - check "deploy service installed" test -f /etc/systemd/system/BlocksScreen-deploy.service - check "updater unit installed" test -f /etc/systemd/system/BlocksScreen-updater.service - check "Spoolman unit installed" test -f /etc/systemd/system/Spoolman.service - check "xorg unit installed" test -f /etc/systemd/system/BlocksScreen-xorg.service - check "apt helper installed" test -x /usr/local/sbin/bs-apt-helper - check "apt helper owned by root" owner_is /usr/local/sbin/bs-apt-helper root:root - check "apt helper mode 755" mode_is /usr/local/sbin/bs-apt-helper 755 - check "BlocksScreen.service is a repo symlink" is_symlink /etc/systemd/system/BlocksScreen.service - rcheck "sudoers: updater rules present" test -f /etc/sudoers.d/blockscreen-updater - rcheck "sudoers: updater rules parse" visudo -cf /etc/sudoers.d/blockscreen-updater - rcheck "sudoers: updater rules mode 440" mode_is /etc/sudoers.d/blockscreen-updater 440 - rcheck "sudoers: chvt 7/8 permitted" chvt_nopasswd - # polkit rules.d is root-only, so an unprivileged run cannot see these files and must not claim they are missing. - rcheck "polkit: daemon-reload rule" test -f /etc/polkit-1/rules.d/10-blockscreen-reload.rules - rwarn "polkit: NetworkManager/power rule" polkit_rule_present - check "Xwrapper allows any user" file_has /etc/X11/Xwrapper.config '^allowed_users=anybody' - check "Xwrapper keeps root rights" file_has /etc/X11/Xwrapper.config '^needs_root_rights=yes' - warn "kiosk xorg snippet" test -f /etc/X11/xorg.conf.d/99-bs-kiosk.conf - warn "resolution xorg snippet" test -f /etc/X11/xorg.conf.d/97-bs-resolution.conf - warn "NetworkManager any-user policy" test -f /etc/NetworkManager/conf.d/any-user.conf - check "set-hostname unit installed and enabled" hostname_unit_ok - check "hostname derived from CPU serial" hostname_matches_serial - check "/etc/hosts maps this hostname" hosts_maps_hostname - check "apt helper matches repo copy" apt_helper_current - rcheck "sudoers: apt helper permitted" apt_helper_nopasswd - check "env file present" test -f "$BS_HOME/.config/blockscreen/env" - check "env file declares BS_DIR" file_has "$BS_HOME/.config/blockscreen/env" '^BS_DIR=' - check "env file declares BSENV" file_has "$BS_HOME/.config/blockscreen/env" '^BSENV=' - check "group blocksscreen exists" getent group blocksscreen - for g in tty video plugdev netdev blocksscreen; do - check "$BS_USER in group $g" in_group "$g" - done - warn "$BS_USER in group network" in_group network - check "cache dir present" test -d "$BS_HOME/.cache/blockscreen" - check "git hooks path is scripts" git_config_is "$BS_PATH" core.hooksPath scripts - check "post-merge hook executable" test -x "$BS_PATH/scripts/post-merge" - warn "system safe.directory for repo" git_system_safe_dir "$BS_PATH" - warn "desktop entry installed" test -f "$BS_HOME/.local/share/applications/BlocksScreen.desktop" - warn "app icon installed" test -f /usr/share/icons/hicolor/scalable/apps/BlocksScreen.png -} - -sec_config() { - check "moonraker.conf exists" test -f "$CONF" - check "moonraker.conf has [update_manager BlocksScreen]" file_has "$CONF" '^\[update_manager BlocksScreen\]' - check "system updates disabled in moonraker" file_has "$CONF" '^enable_system_updates: *False' - check "managed_services migrated off klipper/moonraker" not_grep "$CONF" '^managed_services: *klipper +moonraker' - warn "single-owner marker for overlapping repos" file_has "$CONF" 'blocksscreen-single-owner' - check "exactly one [spoolman] section" grep_count_is_one '^\[spoolman\]' "$CONF" - check "no duplicated moonraker.conf sections" no_duplicate_conf_sections "$CONF" - check "every [include] resolves" includes_resolve "$BS_HOME/printer_data/config" - check "no merge leftovers in config" no_merge_leftovers "$BS_HOME/printer_data/config" - check "no config/config/config over-nest" no_nested_config_dir - jwarn "no config re-nesting this boot" no_renesting_this_boot - check "BlocksScreen.cfg exists" test -f "$BS_HOME/printer_data/config/BlocksScreen.cfg" - check "BlocksScreen.cfg has [server]" file_has "$BS_HOME/printer_data/config/BlocksScreen.cfg" '^\[server\]' - check "printer.cfg exists" test -f "$BS_HOME/printer_data/config/printer.cfg" - check "gcodes dir writable" user_writable "$BS_HOME/printer_data/gcodes" - check "config dir writable" user_writable "$BS_HOME/printer_data/config" - warn "updater override absent (stock manifest)" no_updater_override - if [ -f "$CONF" ]; then - info "moonraker.conf $(stat -c '%y' "$CONF" 2>/dev/null)" - info "moonraker.conf.bak $(stat -c '%y' "$CONF.bak" 2>/dev/null || echo missing)" - fi -} - -sec_klipper() { - local st m - check "klippy reachable" curl_matches 5 "$MOON/printer/info" '"state"' - st=$(curl -s -m 5 "$MOON/printer/info" 2>/dev/null | tr '{},' '\n' | grep '"state":' | head -1 | cut -d'"' -f4) - info "klippy state: ${st:-unknown}" - check "klippy state is ready" str_is "$st" ready - check "printer objects queryable" curl_matches 5 "$MOON/printer/objects/list" '"objects"' - MACROS=$(curl -s -m 5 "$MOON/printer/objects/list" 2>/dev/null | tr ',' '\n') - if [ -n "$MACROS" ]; then - # BLOCKSCREEN_DEV is an env var read by mainWindow, never a gcode macro, so it is not listed here. - for m in CLEAN_NOZZLE CHANGE_PRINTCORES; do - warn "macro $m defined" has_macro "$m" - done - fi - check "mcu object present" has_macro_free_mcu - check "configured serial devices exist" printer_serials_exist - check "host mcu service backs [mcu rpi]" linux_mcu_backed - warn "mcu firmware matches host klipper" mcu_versions_match - check "no MCU fault in klippy.log" no_mcu_faults - check "no thermistor or heater fault in klippy.log" no_adc_faults - check "no corrupt bytes on the mcu link" no_invalid_serial_bytes - warn "mcu link retransmits low" few_serial_retransmits - warn "mcu task time within budget" mcu_task_headroom_ok - check "mcu clock within 1% of nominal" mcu_clock_sane - warn "no print stalls recorded" no_print_stalls -} - -# The mcu object only exists once klippy connected to the board, so it doubles as an MCU check. -has_macro_free_mcu() { echo "$MACROS" | grep -q '"mcu"'; } - -# Moonraker nests each app under version_info, so split on the object keys to name the ones that are behind. -behind_components() { - echo "$1" | sed 's/"\([A-Za-z0-9_.-]*\)": *{/\n@@\1 /g' | - awk '/^@@/ { name = substr($1, 3) } - /"commits_behind_count": *[1-9]/ { - match($0, /"commits_behind_count": *[0-9]+/) - n = substr($0, RSTART, RLENGTH); sub(/.*: */, "", n) - print name ": " n " commit(s) behind" - }' -} - -sec_moonraker() { - local upd behind detail - check "moonraker API up (:7125)" curl_matches 5 "$MOON/server/info" '"result"' - check "moonraker reports klippy_connected" curl_matches 5 "$MOON/server/info" '"klippy_connected": *true' - warn "moonraker has no unexpected warnings" moon_unexpected_warnings - check "machine info available" curl_matches 5 "$MOON/machine/system_info" '"system_info"' - check "no failed moonraker components" moon_no_failed_components - check "moonraker allowed to restart our services" asvc_ok - jwarn "no restart denied by moonraker.asvc this boot" no_restart_denied - warn "moonraker detected every component version" version_detect_ok - warn "web assets up to date" web_versions_current - upd=$(curl -s -m 20 "$MOON/machine/update/status?refresh=false" 2>/dev/null) - # An error payload counts zero components behind and would read as "up to date", passing hardest - # on the one box whose only field remediation path is already broken. - case "$upd" in - *'"version_info"'*) - behind=$(echo "$upd" | tr ',' '\n' | grep -c '"commits_behind_count": *[1-9]') - if [ "$behind" -gt 0 ]; then - detail=$(behind_components "$upd") - # Fall back to the raw fields if moonraker ever reshapes the payload, a named component is the whole point. - [ -n "$detail" ] || detail=$(echo "$upd" | tr ',' '\n' | grep -E 'commits_behind_count|corrupt') - record FAIL "all components up to date" "$detail" - else - record PASS "all components up to date" - fi - ;; - *'"error"'*) - record FAIL "update status readable" "$(echo "$upd" | tr -d '\n' | cut -c1-200)" - ;; - *) - record WARN "update status unavailable (moonraker down or slow)" - ;; - esac -} - -not_curl_match() { ! curl -s -m 5 "$1" 2>/dev/null | grep -q "$2"; } - -# Only BlocksScreen is asserted: moonraker permits klipper and moonraker implicitly, and our updater restarts Spoolman itself. -asvc_ok() { - asvc_has BlocksScreen || { - echo "BlocksScreen missing from $BS_HOME/printer_data/moonraker.asvc" - # A pre-rename image carries the old unit name instead, which is the usual cause. - asvc_has BlocksPrinter && echo "found legacy BlocksPrinter entry, image predates the current installer" - return 1 - } -} - -# git describe --tags cannot name a version on a fork, moonraker then reports "?" and disables updates. -version_detect_ok() { - local v - v=$(update_status | tr ',' '\n' | grep -E '"[a-z_]*version[a-z_]*": *"\?"') - [ -z "$v" ] || { - echo "undetected versions:" - echo "$v" - return 1 - } -} - -update_status() { curl -s -m 20 "$MOON/machine/update/status?refresh=false" 2>/dev/null; } - -# Apps whose local version differs from the remote one, "name local -> remote" per line. -outdated_apps() { - update_status | tr -d ' \n' | awk 'BEGIN { RS = "\"name\":\"" } - NR > 1 { - n = substr($0, 1, index($0, "\"") - 1) - v = ""; rv = "" - if (match($0, /"version":"[^"]*"/)) v = substr($0, RSTART + 11, RLENGTH - 12) - if (match($0, /"remote_version":"[^"]*"/)) rv = substr($0, RSTART + 18, RLENGTH - 19) - if (v != "" && rv != "" && v != rv && v != "?" && rv != "?") print n " " v " -> " rv - }' -} - -web_versions_current() { - local o - o=$(outdated_apps) - [ -z "$o" ] || { - echo "$o" - return 1 - } -} - -# Our forks sit on non-official remotes by design, so those warnings are expected and never faults. -moon_unexpected_warnings() { - local w - # Char scan, not sed: warning strings contain commas and brackets ("[update_manager BlocksScreen]"). - w=$(curl -s -m 5 "$MOON/server/info" 2>/dev/null | tr -d '\n' | - awk '{ - i = index($0, "\"warnings\":") - if (i == 0) exit - $0 = substr($0, i + 11) - i = index($0, "[") - if (i == 0) exit - instr = 0; esc = 0; cur = "" - for (p = i + 1; p <= length($0); p++) { - c = substr($0, p, 1) - if (esc) { cur = cur c; esc = 0; continue } - if (c == "\\") { esc = 1; continue } - if (c == "\"") { if (instr) { print cur; cur = "" } ; instr = !instr; continue } - if (instr) { cur = cur c; continue } - if (c == "]") { exit } - } - }' | grep -v '^ *$' | - grep -Ev 'not on official remote/branch|Failed to detect current version|No valid tag|unofficial') - [ -z "$w" ] || { - echo "$w" - return 1 - } -} - -sec_spoolman() { - check "Spoolman .venv provisioned" test -d "$BS_HOME/Spoolman/.venv" - check "Spoolman API healthy (:7912)" curl_matches 5 "$SPOOL/api/v1/health" healthy - check "spoolman database present" test -f "$BS_HOME/.local/share/spoolman/spoolman.db" - # Slice the components array: a bare grep also matches failed_components, passing in the broken case. - check "moonraker loaded spoolman component" moon_component_loaded spoolman - check "moonraker effective config has spoolman" server_config_has_spoolman - # Moonraker serialises with json.dumps defaults, so the wire form is '"key": value'. - check "moonraker connected to spoolman" curl_matches 5 "$MOON/server/spoolman/status" '"spoolman_connected": *true' - check "spoolman proxy call the UI makes" proxy_works - jcheck "no -32601 in UI log since UI start" no_proxy_errors - # The provisioning race: venv landed after the UI start script gave up editing moonraker.conf. - check "[spoolman] section present in moonraker.conf" spoolman_section_present - check "no venv-vs-conf provisioning race" no_spoolman_venv_race - check "moonraker started after last moonraker.conf edit" moonraker_read_current_conf - jcheck "no 'No venv found for' in updater log this boot" no_missing_venv_in_updater_log -} - -sec_network() { - check "NetworkManager active" unit_active NetworkManager - check "default route present" has_default_route - warn "DNS resolves github.com" dns_resolves - warn "https://github.com reachable" github_reachable - check "moonraker answers on the LAN address" lan_moonraker_ok - warn "moonraker accepts LAN clients" lan_client_trusted - warn "wifi signal >= 40%" wifi_signal_ok - info "addresses: $(hostname -I 2>/dev/null)" - info "connections: $(nmcli -t -f NAME,TYPE,DEVICE con show --active 2>/dev/null | tr '\n' ' ')" -} - -sec_updater() { - local errs - check "updater D-Bus name available" dbus_name_available - check "updater not crash-looping" updater_not_crashlooping - check "no stale updater lock" no_stale_updater_lock - jcheck "no updater errors since boot" no_updater_errors - check "no wedged updater subprocess" no_wedged_updater_child - check "last update ran to completion" updater_status_complete - warn "apt lists refreshed in the last 7 days" apt_lists_fresh - check "components manifest readable" components_ok - warn "deploy trigger consumed" test ! -f "$BS_HOME/.config/blockscreen/.run-install-updater" - warn "requirements sentinel current" reqs_hash_current - if ! $QUIET; then - errs=$(journalctl -u BlocksScreen-updater -b 2>/dev/null | - grep -Ei 'error|abort|failed|traceback|brick' | tail -10) - if [ -n "$errs" ]; then - info "recent updater errors:" - echo "$errs" | sed 's/^/ | /' - fi - fi - return 0 -} - -sec_repos() { - local name path branch url dirty want - [ -n "$EXPECT_BRANCH" ] && info "expected branches: $EXPECT_BRANCH" - while IFS='|' read -r name path branch url; do - [ -n "$name" ] || continue - path=$(echo "$path" | sed "s|^~|$BS_HOME|") - if [ ! -d "$path/.git" ]; then - record WARN "$name checkout present" - continue - fi - dirty=$(git -C "$path" status --porcelain 2>/dev/null | head -1) - info "$(printf '%-16s %-32s %s %s' "$name" \ - "$(git -C "$path" rev-parse --abbrev-ref HEAD 2>/dev/null)" \ - "$(git -C "$path" rev-parse --short HEAD 2>/dev/null)" \ - "${dirty:+DIRTY}")" - check "$name HEAD object intact" git_ok "$path" - check "$name not detached" git_attached "$path" - check "$name has no index.lock" git_no_lock "$path" - warn "$name working tree clean" git_clean "$path" - check "$name has no merge leftovers" no_merge_leftovers "$path" - check "$name tracks an upstream branch" git_has_upstream "$path" - warn "$name not ahead of upstream" git_not_ahead "$path" - warn "$name group is blocksscreen" group_is "$path" blocksscreen - # The operator's expectation is ground truth, the manifest is only advisory: it ships wrong branches. - if want=$(expect_branch_for "$name"); then - check "$name on expected branch" git_branch_is "$path" "$want" - elif want=$(override_branch_for "$name"); then - check "$name on override branch ($want)" git_branch_is "$path" "$want" - elif [ -n "$branch" ]; then - warn "$name on manifest branch" git_branch_is "$path" "$branch" - fi - done < <(components) - return 0 -} - -sec_python() { - local m - check "venv python3.11 present" test -x "$BSENV/bin/python3.11" - info "python: $("$BSENV/bin/python3.11" --version 2>&1)" - check "venv prefix is $BSENV" venv_prefix_ok - check "no pip retry sentinel left behind" no_pip_retry_sentinel - # The NM binding is imported as sdbus_async.networkmanager, there is no top-level sdbus_networkmanager module. - for m in PyQt6.QtWidgets sdbus sdbus_async.networkmanager websocket requests yaml PIL.Image qrcode numpy; do - check "import $m" venv_import "$m" - done - check "updater package importable" venv_import_updater - check "no truncated venv files" venv_no_truncated_files - warn "pip dependency tree consistent" "$BSENV/bin/pip" check -} - -# USB faults get their own script because the forensics are long and the operator needs to run them -# on their own during a repro: see bs-usb-diag.sh --watch. -sec_usb() { - local diag st name det - diag="$(dirname -- "$(readlink -f -- "$0")")/bs-usb-diag.sh" - if [ ! -r "$diag" ]; then - record SKIP "usb fault diagnostics" "bs-usb-diag.sh not found beside this script" - return 0 - fi - # Read in this shell, not down a pipe: record() has to reach the parent's counters. - while IFS=$'\t' read -r st name det; do - [ -n "$name" ] || continue - record "$st" "$name" "$det" - done < <(timeout 180 bash "$diag" --check 2>/dev/null) - info "full forensics: sudo $diag live repro: sudo $diag --watch" -} - -# The UI can run, answer D-Bus and still render blank buttons, so the rendering path is exercised in -# python by a separate file: it needs PyQt6 from the venv, which shell cannot check for us. -sec_selftest() { - local self st name det py - self="$(dirname -- "$(readlink -f -- "$0")")/bs-selftest.py" - if [ ! -r "$self" ]; then - record SKIP "blocksscreen selftest" "bs-selftest.py not found beside this script" - return 0 - fi - py="$BSENV/bin/python3.11" - [ -x "$py" ] || py="$BSENV/bin/python3" - if [ ! -x "$py" ]; then - record SKIP "blocksscreen selftest" "no venv python at $BSENV/bin" - return 0 - fi - # Run as the owning user: root has a different HOME, so BlocksScreen.cfg would not be found, and - # a root-created Qt runtime dir would then be left behind for the service to trip over. - # Read in this shell, not down a pipe: record() has to reach the parent's counters. - local -a pre=() - [ "$(id -u)" = 0 ] && pre=(runuser -u "$BS_USER" --) - local rows - rows=$( - timeout 300 "${pre[@]}" env \ - QT_QPA_PLATFORM=offscreen \ - XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp}" \ - HOME="$BS_HOME" \ - "$py" "$self" 2>/dev/null - ) - # No rows at all means the interpreter died before its first assertion, which must not read as a - # clean section: a silent zero-assertion pass is the false PASS this suite exists to prevent. - if [ -z "$rows" ]; then - record FAIL "blocksscreen selftest" "produced no output, $py could not run $self" - return 0 - fi - # Read in this shell, not down a pipe: record() has to reach the parent's counters. - while IFS=$'\t' read -r st name det; do - [ -n "$name" ] || continue - record "$st" "$name" "$det" - done <<<"$rows" -} - -sec_deep() { - local name path branch url - check "all repo sources compile" "$BSENV/bin/python3.11" -c ' -import pathlib, sys -bad = [] -for root in sys.argv[1:]: - for f in pathlib.Path(root).rglob("*.py"): - try: - compile(f.read_text(errors="replace"), str(f), "exec") - except SyntaxError as e: - bad.append("%s:%s: %s" % (f, e.lineno, e.msg)) -print("\n".join(bad)) -sys.exit(1 if bad else 0) -' "$BS_PATH/BlocksScreen" "$BS_PATH/updater" - # Known field trap: a component pinned to a branch deleted upstream breaks updates fleet-wide. - # With no route to github every probe is unprovable, so skip the lot rather than guess. - if github_reachable; then - while IFS='|' read -r name path branch url; do - [ -n "$branch" ] && [ -n "$url" ] || continue - check "$name branch $branch exists on origin" git_remote_has_branch "$url" "$branch" - done < <(components) - else - record SKIP "remote branch existence (github unreachable)" - fi - warn "update status refresh succeeds" curl_matches 60 "$MOON/machine/update/status?refresh=true" '"version_info"' - rcheck "sudo rights list cleanly" sudo -n -l -U "$BS_USER" - return 0 -} - -# --- run --- - -# set -u with no -e means an abort inside a section body skips the summary entirely, and with --json -# skips the whole object, while the exit status still looks like an ordinary failure. -INCOMPLETE=1 -trap '[ "$INCOMPLETE" = 0 ] || printf "\n*** RUN INCOMPLETE: aborted during section %s, counts below are partial ***\n" "$CUR_SECTION" >&2' EXIT - -for s in $SECTIONS; do - enabled "$s" || continue - CUR_SECTION="$s" - hdr "$s" - "sec_$s" || record FAIL "section $s completed" "section handler returned $?" -done -INCOMPLETE=0 -CUR_SECTION="result" - -# Every --fix below restarts services or re-arms the installer, so the guard belongs above all of -# them rather than inside the first. An unknown state means moonraker is unreachable and klipper keeps -# printing without it, so that case has to refuse too. -if $FIX; then - STATE=$(printer_state) - case "${STATE:-unknown}" in - printing | paused | unknown | '') - if $FORCE; then - note "printer state is ${STATE:-unknown}, --force given, applying fixes anyway" - else - note "fixes not applied: printer state is ${STATE:-unknown} (re-run with --force or after the job)" - FIX=false - fi - ;; - esac -fi - -# Opt-in remediation for the known [spoolman] provisioning race, mirrors the manual two-step fix. -if $FIX && [ -f "$CONF" ] && ! grep -q '^\[spoolman\]' "$CONF"; then - if $FIX; then - note "applying fix: [spoolman]" - cp "$CONF" "$CONF.healthcheck.$(date +%Y%m%d%H%M%S).bak" - printf '\n[spoolman]\nserver: localhost:7912\n' >>"$CONF" - sudo -n systemctl restart moonraker.service && - sleep 8 && - sudo -n systemctl restart BlocksScreen.service || - note "restart failed, no passwordless sudo? restart moonraker + BlocksScreen by hand" - note "added [spoolman], re-run to verify" - fi -fi - -# Missing install artifacts are repaired by the deploy path watcher, which only needs its trigger file. -if $FIX && { [ ! -f /etc/systemd/system/BlocksScreen-deploy.path ] || - [ ! -f /usr/share/dbus-1/system-services/com.blockscreen.Updater.service ] || - [ ! -f /etc/dbus-1/system.d/com.blockscreen.Updater.conf ] || - [ ! -x /usr/local/sbin/bs-apt-helper ]; }; then - note "applying fix: install artifacts" - mkdir -p "$BS_HOME/.config/blockscreen" - touch "$BS_HOME/.config/blockscreen/.run-install-updater" - # Created as root under sudo, and a root-owned config dir is a fault the UI cannot recover from. - $IS_ROOT && [ "$BS_USER" != root ] && - chown -R "$BS_USER" "$BS_HOME/.config/blockscreen" 2>/dev/null - note "armed the deploy trigger, install-updater.sh runs via the path unit, re-run to verify" -fi - -# A group-writable setgid logs dir is what lets both the UI user and root append to the same files. -if $FIX && [ -d "$BS_PATH/logs" ] && [ "$(stat -c '%a' "$BS_PATH/logs" 2>/dev/null)" != 2775 ]; then - note "applying fix: logs dir mode" - chmod 2775 "$BS_PATH/logs" && note "logs dir set to 2775" || note "chmod failed on $BS_PATH/logs" -fi - -# moonraker.asvc is a case-sensitive allowlist, so a missing entry silently breaks every update restart. -if $FIX && ! asvc_has BlocksScreen; then - note "applying fix: moonraker.asvc" - printf 'BlocksScreen\n' >>"$BS_HOME/printer_data/moonraker.asvc" - $IS_ROOT && [ "$BS_USER" != root ] && - chown "$BS_USER" "$BS_HOME/printer_data/moonraker.asvc" 2>/dev/null - note "added BlocksScreen to moonraker.asvc, restart moonraker to load it" -fi - -# BlocksScreen-start.sh sources this env file, so a missing BS_DIR or BSENV starts the UI against the wrong tree. -if $FIX; then - ENVF="$BS_HOME/.config/blockscreen/env" - if [ ! -f "$ENVF" ] || ! grep -q '^BS_DIR=' "$ENVF" || ! grep -q '^BSENV=' "$ENVF"; then - note "applying fix: env file" - mkdir -p "$BS_HOME/.config/blockscreen" - grep -q '^BS_DIR=' "$ENVF" 2>/dev/null || printf 'BS_DIR=%s\n' "$BS_PATH" >>"$ENVF" - grep -q '^BSENV=' "$ENVF" 2>/dev/null || printf 'BSENV=%s\n' "$BSENV" >>"$ENVF" - $IS_ROOT && [ "$BS_USER" != root ] && - chown -R "$BS_USER" "$BS_HOME/.config/blockscreen" 2>/dev/null - note "wrote $ENVF, re-run to verify" - fi -fi - -# One retained boot makes every crash older than the last reboot uncorrelatable, which is most of them. -if $FIX && $IS_ROOT && [ "$(journalctl --list-boots 2>/dev/null | wc -l)" -lt 4 ]; then - note "applying fix: journal retention" - mkdir -p /etc/systemd/journald.conf.d /var/log/journal - printf '[Journal]\nStorage=persistent\nSystemMaxUse=200M\nSystemMaxFiles=20\n' \ - >/etc/systemd/journald.conf.d/10-blocksscreen.conf - systemd-tmpfiles --create --prefix /var/log/journal >/dev/null 2>&1 - systemctl restart systemd-journald 2>/dev/null || - note "journald restart failed, retention applies at the next boot" - note "journal set to persistent 200M, older boots accumulate from here" -fi - -# restart-ms 0 leaves a bus-off CAN link dead until someone reboots, and the field has no SSH. -if $FIX && $IS_ROOT && [ -f /etc/network/interfaces.d/can0 ] && - ! grep -q 'restart-ms' /etc/network/interfaces.d/can0; then - note "applying fix: can0 restart-ms" - cp /etc/network/interfaces.d/can0 "/etc/network/interfaces.d/can0.healthcheck.$(date +%Y%m%d%H%M%S).bak" - # Native stanza first (ifupdown ignores options it does not know, so it can never abort ifup), then a - # pre-up fallback for builds whose can method lacks it, with || true so a failure cannot strand can0 down. - printf ' restart-ms 100\n pre-up ip link set $IFACE type can restart-ms 100 || true\n' \ - >>/etc/network/interfaces.d/can0 - note "can0 will self-heal from bus-off after the next reboot, the running link keeps restart-ms=0" -fi - -# --strict only moves the bar for the exit code: counters and rows keep the tier each check was recorded at. -RC=0 -[ "$FAIL_N" -gt 0 ] && RC=1 -$STRICT && [ "$WARN_N" -gt 0 ] && RC=1 - -if $JSON; then - printf '{"host":"%s","pass":%d,"warn":%d,"fail":%d,"skip":%d,"strict":%s,"result":"%s","failed":"%s","warned":"%s","checks":[%s]}\n' \ - "$(hostname)" "$PASS_N" "$WARN_N" "$FAIL_N" "$SKIP_N" \ - "$($STRICT && echo true || echo false)" \ - "$([ "$RC" -eq 0 ] && echo PASS || echo FAIL)" \ - "$FAILED_NAMES" "$WARNED_NAMES" "$JSON_ROWS" - exit "$RC" -fi - -hdr "result" -say "$C_PASS$PASS_N passed$C_OFF, $C_WARN$WARN_N warned$C_OFF, $C_FAIL$FAIL_N failed$C_OFF, $C_SKIP$SKIP_N skipped$C_OFF" -[ "$WARN_N" -gt 0 ] && say "${C_WARN}WARNINGS:$C_OFF $WARNED_NAMES" -if [ "$RC" -eq 0 ]; then - $QUIET && echo "$(hostname): PASS ($PASS_N checks, $WARN_N warn)" || echo "${C_PASS}ALL PASS$C_OFF" - exit 0 -fi -if [ "$FAIL_N" -eq 0 ]; then - $QUIET && echo "$(hostname): FAIL (strict, $WARN_N warn) $WARNED_NAMES" || - echo "${C_WARN}STRICT: $WARN_N WARNING(S):$C_OFF $WARNED_NAMES" - exit 1 -fi -$QUIET && echo "$(hostname): FAIL ($FAIL_N) $FAILED_NAMES" || - echo "${C_FAIL}$FAIL_N CHECK(S) FAILED:$C_OFF $FAILED_NAMES" -exit 1 diff --git a/scripts/healthcheck/bs-power.sh b/scripts/healthcheck/bs-power.sh deleted file mode 100755 index 7b5ed28b..00000000 --- a/scripts/healthcheck/bs-power.sh +++ /dev/null @@ -1,839 +0,0 @@ -#!/usr/bin/env bash -# Read-only Raspberry Pi power audit: input budget, PMIC rails, USB draw, throttling and headroom. -# Nothing here writes config, restarts a service, or touches the printer. --stress is the one opt-in load. -set -u - -VERBOSE=0 -WATCH=0 -STRESS=0 -BURN=0 -BED=0 -FORCE=0 -ASSUME_YES=0 - -usage() { - cat <<'EOF' -Usage: bs-power.sh [options] - - -v verbose: per-rail table and full USB device list - --watch N sample every second for N seconds, report min/max and any event - --stress N run an N-second CPU load and report voltage sag (refuses while printing) - --burn N staged ramp, N seconds per stage, to measure real headroom (refuses while printing) - --bed TEMP heat the bed from cold and test whether the 24V heater pulls down the Pi 5V rail - --force allow --stress and --burn even when the printer state cannot be determined - --yes skip the --bed confirmation prompt (required when stdin is not a tty) - -h this help - -Read-only by default. Run as any user; a few nodes need root and are marked when skipped. -EOF -} - -while [ $# -gt 0 ]; do - case "$1" in - -v) VERBOSE=1 ;; - --watch) - WATCH="${2:-30}" - shift - ;; - --stress) - STRESS="${2:-20}" - shift - ;; - --burn) - BURN="${2:-20}" - shift - ;; - --bed) - BED="${2:-60}" - shift - ;; - --force) FORCE=1 ;; - --yes) ASSUME_YES=1 ;; - -h | --help) - usage - exit 0 - ;; - *) - echo "unknown option: $1" >&2 - usage - exit 2 - ;; - esac - shift -done - -C_OK='' -C_BAD='' -C_WARN='' -C_DIM='' -C_OFF='' -if [ -t 1 ]; then - C_OK=$'\033[32m' - C_BAD=$'\033[31m' - C_WARN=$'\033[33m' - C_DIM=$'\033[2m' - C_OFF=$'\033[0m' -fi - -hdr() { printf '\n%s== %s ==%s\n' "$C_DIM" "$1" "$C_OFF"; } -kv() { printf ' %-28s %s\n' "$1" "$2"; } -ok() { printf ' %sOK%s %s\n' "$C_OK" "$C_OFF" "$1"; } -bad() { printf ' %sBAD%s %s\n' "$C_BAD" "$C_OFF" "$1"; } -warn() { printf ' %sWARN%s %s\n' "$C_WARN" "$C_OFF" "$1"; } -note() { printf ' %s%s%s\n' "$C_DIM" "$1" "$C_OFF"; } - -# Reads a sysfs or procfs node, returning empty rather than an error when it is absent. -sysread() { [ -r "$1" ] && tr -d '\0' <"$1" 2>/dev/null; } - -have() { command -v "$1" >/dev/null 2>&1; } - -VCG=$(command -v vcgencmd 2>/dev/null) -vc() { [ -n "$VCG" ] && "$VCG" "$@" 2>/dev/null; } - -# A device-tree cell is big-endian u32, so od is the portable way to read it as a number. -dtnum() { - [ -r "$1" ] || return 1 - od -An -tu4 --endian=big "$1" 2>/dev/null | tr -d ' \n' -} - -MODEL=$(sysread /proc/device-tree/model) -IS_PI5=0 -case "$MODEL" in *"Raspberry Pi 5"*) IS_PI5=1 ;; esac - -# ---------------------------------------------------------------- identity - -hdr "IDENTITY" -kv "model" "${MODEL:-unknown}" -kv "serial" "$(awk '/^Serial/{print $3}' /proc/cpuinfo 2>/dev/null)" -kv "kernel" "$(uname -r)" -kv "os" "$(. /etc/os-release 2>/dev/null && echo "$PRETTY_NAME")" -kv "firmware" "$(vc version | head -1)" -kv "uptime" "$(awk '{printf "%.1f h", $1/3600}' /proc/uptime)" -kv "loadavg" "$(awk '{print $1", "$2", "$3}' /proc/loadavg)" -[ -n "$VCG" ] || warn "vcgencmd not found: rail, throttle and config readings unavailable" - -# ------------------------------------------------------------- power input - -hdr "POWER IN (what the Pi believes it may draw)" - -EXT5V=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') -BATTV=$(vc pmic_read_adc BATT_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') - -if [ -n "$EXT5V" ]; then - kv "input voltage (EXT5V)" "$EXT5V V" - # Below 4.75V the SoC is out of spec, and 4.8V is where sag starts costing USB stability. - awk -v v="$EXT5V" 'BEGIN{exit !(v < 4.75)}' && bad "input voltage below 4.75V spec minimum" - awk -v v="$EXT5V" 'BEGIN{exit !(v >= 4.75 && v < 4.90)}' && warn "input voltage sagging, check supply and cable" - awk -v v="$EXT5V" 'BEGIN{exit !(v >= 4.90)}' && ok "input voltage healthy" -else - note "input voltage not readable (needs a Pi 5 with PMIC support)" -fi -[ -n "$BATTV" ] && kv "RTC battery" "$BATTV V" - -# max_current is what the firmware concluded, whether by PD negotiation or by EEPROM override. -MAXCUR='' -for n in /proc/device-tree/chosen/power/max_current \ - /proc/device-tree/chosen/power/max_current_ma \ - /sys/firmware/devicetree/base/chosen/power/max_current; do - MAXCUR=$(dtnum "$n") && [ -n "$MAXCUR" ] && break -done -if [ -n "$MAXCUR" ]; then - kv "firmware PSU budget" "$MAXCUR mA" -else - note "firmware PSU budget node not present" -fi - -PSUCFG='' -if have rpi-eeprom-config; then - PSUCFG=$(rpi-eeprom-config 2>/dev/null | sed -n 's/^PSU_MAX_CURRENT=//p') -fi -kv "PSU_MAX_CURRENT (eeprom)" "${PSUCFG:-unset}" - -USBMAX=$(vc get_config usb_max_current_enable | cut -d= -f2) -kv "usb_max_current_enable" "${USBMAX:-0}" - -if [ "$IS_PI5" = 1 ]; then - # PSU_MAX_CURRENT does NOT raise the port limit, only usb_max_current_enable does: forums.raspberrypi.com t=388128. - USB_BUDGET=600 - [ "${USBMAX:-0}" = 1 ] && USB_BUDGET=1600 - kv "effective USB budget" "$USB_BUDGET mA" - - if [ "${USBMAX:-0}" != 1 ]; then - bad "USB ports capped at 600mA: one USB3 stick's inrush can exceed this and cut VBUS to every port" - note "fix: append usb_max_current_enable=1 to /boot/firmware/config.txt and reboot" - [ -n "$PSUCFG" ] && - bad "PSU_MAX_CURRENT=$PSUCFG is set but does not raise the port limit: it only hides the warning" - fi - # The 900mA belief is cosmetic, and it is the only automatic signal that a box has an undersized PSU. - if [ -z "$PSUCFG" ] && [ "${MAXCUR:-0}" -lt 5000 ] 2>/dev/null; then - note "firmware assumes a ${MAXCUR:-3000}mA supply: cosmetic, and worth keeping as an undersized-PSU tell" - fi - if [ -n "$PSUCFG" ] && [ "${MAXCUR:-0}" -lt "$PSUCFG" ] 2>/dev/null; then - bad "PSU_MAX_CURRENT=$PSUCFG is set but firmware reports ${MAXCUR}mA: the eeprom write did not take" - fi -fi - -# -------------------------------------------------------------- pmic rails - -hdr "POWER RAILS (measured by the PMIC)" - -RAILS=$(vc pmic_read_adc) -RAILW='' -if [ -n "$RAILS" ]; then - RAILTBL=$(printf '%s\n' "$RAILS" | awk ' - { - n=$1; val=$2 - sub(/^[^=]*=/, "", val); sub(/[AV]$/, "", val) - key=n; sub(/_[AV]$/, "", key) - if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 - } - END { - for (k in cur) { - if (!(k in volt)) continue - p = cur[k] * volt[k]; tot += p - printf " %-14s %8.4f A %7.4f V %7.3f W\n", k, cur[k], volt[k], p - } - printf "TOTAL %.4f\n", tot - }' | sort) - RAILW=$(printf '%s\n' "$RAILTBL" | sed -n 's/^TOTAL //p') - [ "$VERBOSE" = 1 ] && printf '%s\n' "$RAILTBL" | grep -v '^TOTAL' - if [ -n "$RAILW" ]; then - kv "instrumented rails" "$(awk -v w="$RAILW" 'BEGIN{printf "%.2f W", w}')" - # jfikar's linear fit against a USB-C meter, correcting for rails the PMIC does not see. - kv "board total (calibrated)" "$(awk -v w="$RAILW" 'BEGIN{printf "%.2f W", w*1.1451+0.5879}')" - note "calibration real=pmic*1.1451+0.5879 (jfikar/RPi5-power); excludes USB VBUS, NVMe and HATs" - fi -else - note "no PMIC rail data (Pi 4 and earlier do not expose this)" -fi - -# ------------------------------------------------------------- usb loading - -hdr "POWER OUT (USB devices and their declared draw)" - -USB_TOTAL=0 -USB_ROWS='' -for d in /sys/bus/usb/devices/*; do - [ -r "$d/bMaxPower" ] || continue - p=$(sysread "$d/bMaxPower") - ma=${p%mA} - case "${ma:-x}" in '' | *[!0-9]*) continue ;; esac - dev=$(basename "$d") - case "$dev" in usb*) continue ;; esac - prod=$(sysread "$d/product") - vid=$(sysread "$d/idVendor") - pid=$(sysread "$d/idProduct") - spd=$(sysread "$d/speed") - drv='' - for i in "$d":*; do - [ -e "$i/driver" ] && drv="$drv $(basename "$(readlink -f "$i/driver")")" - done - USB_TOTAL=$((USB_TOTAL + ma)) - USB_ROWS="$USB_ROWS$(printf ' %-8s %6smA %7sM %-24s %s:%s %s\n' \ - "$dev" "$ma" "${spd:-?}" "${prod:-unknown}" "$vid" "$pid" "${drv# }")"$'\n' -done - -if [ -n "$USB_ROWS" ]; then - [ "$VERBOSE" = 1 ] && printf '%s' "$USB_ROWS" - kv "devices attached" "$(printf '%s' "$USB_ROWS" | grep -c .)" - kv "declared draw total" "$USB_TOTAL mA" - if [ "$IS_PI5" = 1 ]; then - kv "against budget" "$(awk -v u="$USB_TOTAL" -v b="$USB_BUDGET" 'BEGIN{printf "%.0f%% of %dmA", u*100/b, b}')" - if [ "$USB_TOTAL" -gt "$USB_BUDGET" ]; then - bad "declared USB draw exceeds the port budget: over-current trips are expected under load" - elif [ "$USB_TOTAL" -gt $((USB_BUDGET * 80 / 100)) ]; then - warn "declared USB draw is above 80% of budget, leaving no room for inrush" - else - ok "USB draw within budget" - fi - fi - note "declared is bMaxPower, a descriptor claim; actual draw is usually lower at idle and higher at inrush" -else - note "no USB devices with a readable bMaxPower" -fi - -# A bus-powered hub carrying high-draw devices is the classic hidden over-subscription. -for d in /sys/bus/usb/devices/*; do - [ -r "$d/bDeviceClass" ] || continue - [ "$(sysread "$d/bDeviceClass")" = "09" ] || continue - dev=$(basename "$d") - hp=$(sysread "$d/bMaxPower") - kids=0 - kidma=0 - for c in /sys/bus/usb/devices/"$dev".*; do - [ -r "$c/bMaxPower" ] || continue - kids=$((kids + 1)) - k=$(sysread "$c/bMaxPower") - k=${k%mA} - case "${k:-x}" in '' | *[!0-9]*) continue ;; esac - kidma=$((kidma + k)) - done - [ "$kids" = 0 ] && continue - kv "hub $dev" "self-declared $hp, $kids devices drawing ${kidma}mA" - # A hub declaring 100mA is bus powered, and 100mA cannot legally feed downstream ports. - if [ "${hp%mA}" -le 100 ] 2>/dev/null && [ "$kidma" -gt 100 ]; then - bad "hub $dev appears bus powered but carries ${kidma}mA of devices: fit a powered hub" - fi -done - -# --------------------------------------------------------- throttle status - -hdr "THROTTLING AND UNDERVOLTAGE" - -TH=$(vc get_throttled | cut -d= -f2) -if [ -n "$TH" ]; then - kv "get_throttled" "$TH" - thv=$((TH)) - b() { [ $((thv & (1 << $1))) -ne 0 ] && echo yes || echo no; } - if [ "$thv" = 0 ]; then - ok "no undervoltage or throttling, now or since boot" - else - [ "$(b 0)" = yes ] && bad "undervoltage RIGHT NOW" - [ "$(b 1)" = yes ] && warn "arm frequency capped right now" - [ "$(b 2)" = yes ] && bad "currently throttled" - [ "$(b 3)" = yes ] && warn "soft temperature limit active" - [ "$(b 16)" = yes ] && bad "undervoltage has occurred since boot" - [ "$(b 17)" = yes ] && warn "arm frequency capping has occurred since boot" - [ "$(b 18)" = yes ] && warn "throttling has occurred since boot" - [ "$(b 19)" = yes ] && warn "soft temperature limit reached since boot" - fi -fi - -# The hwmon index moves between boards and kernels, so never hardcode it. -for h in /sys/class/hwmon/hwmon*; do - [ "$(sysread "$h/name")" = rpi_volt ] || continue - a=$(sysread "$h/in0_lcrit_alarm") - kv "hwmon $(basename "$h") lcrit" "${a:-n/a}" - [ "${a:-0}" = 1 ] && bad "kernel undervoltage alarm is set" -done - -UV=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'under-voltage') -OC=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') -kv "undervoltage log lines" "${UV:-0}" -kv "over-current log lines" "${OC:-0}" -[ "${OC:-0}" -gt 0 ] && bad "kernel has logged over-current events: USB VBUS has been cut at least once" - -# Sysfs counters can read zero while the journal shows trips, so both are reported. -for p in /sys/bus/usb/devices/*-port*/over_current_count; do - [ -r "$p" ] || continue - c=$(sysread "$p") - [ "${c:-0}" = 0 ] && continue - port=$(basename "$(dirname "$p")") - bad "port $port over_current_count=$c" -done - -# ------------------------------------------------------------ thermal load - -hdr "THERMAL AND CLOCKS" -if [ -n "$VCG" ]; then - kv "soc temperature" "$(vc measure_temp | cut -d= -f2)" - kv "core voltage" "$(vc measure_volts core | cut -d= -f2)" - kv "arm clock" "$(awk -v h="$(vc measure_clock arm | cut -d= -f2)" 'BEGIN{printf "%.0f MHz", h/1000000}')" - kv "core clock" "$(awk -v h="$(vc measure_clock core | cut -d= -f2)" 'BEGIN{printf "%.0f MHz", h/1000000}')" -fi -for f in /sys/class/thermal/thermal_zone*/temp; do - [ -r "$f" ] || continue - kv "$(basename "$(dirname "$f")")" "$(awk -v t="$(sysread "$f")" 'BEGIN{printf "%.1f C", t/1000}')" -done - -# ------------------------------------------------------------- input ledger - -hdr "ESTIMATED INPUT DRAW" - -if [ -n "$RAILW" ] && [ -n "$EXT5V" ]; then - awk -v rw="$RAILW" -v usb="$USB_TOTAL" -v v="$EXT5V" 'BEGIN { - board = rw * 1.1451 + 0.5879 - usbw = usb / 1000.0 * 5.0 - tot = board + usbw - printf " %-28s %.2f W\n", "board (calibrated rails)", board - printf " %-28s %.2f W (%dmA declared)\n", "usb peripherals", usbw, usb - printf " %-28s %.2f W\n", "estimated total", tot - printf " %-28s %.2f A at %.2f V\n", "estimated input current", tot / v, v - }' - note "board figure is measured and calibrated; the USB figure is a descriptor sum, so treat the total as +/-20%" - note "fan, HDMI 5V pin and anything on the GPIO 5V rail are NOT included" - note "only an inline DC meter or a DC clamp on the positive lead gives a true input reading" -else - note "insufficient data for an input estimate" -fi - -# ------------------------------------------------------------------- watch - -if [ "$WATCH" != 0 ]; then - hdr "WATCH ${WATCH}s" - note "insert or remove peripherals now to see the transient" - vmin=99 - vmax=0 - wmax=0 - i=0 - oc0=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') - while [ "$i" -lt "$WATCH" ]; do - v=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') - w=$(vc pmic_read_adc | awk ' - { n=$1; val=$2; sub(/^[^=]*=/,"",val); sub(/[AV]$/,"",val) - key=n; sub(/_[AV]$/,"",key) - if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 } - END { for (k in cur) if (k in volt) t += cur[k]*volt[k]; printf "%.3f", t }') - t=$(vc get_throttled | cut -d= -f2) - [ -n "$v" ] && { - vmin=$(awk -v a="$vmin" -v b="$v" 'BEGIN{print (ba)?b:a}') - } - [ -n "$w" ] && wmax=$(awk -v a="$wmax" -v b="$w" 'BEGIN{print (b>a)?b:a}') - [ "$VERBOSE" = 1 ] && printf ' %3ds %sV %sW throttled=%s\n' "$i" "${v:-?}" "${w:-?}" "${t:-?}" - [ "${t:-0x0}" != "0x0" ] && bad "throttled=$t at t=${i}s" - i=$((i + 1)) - sleep 1 - done - oc1=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') - kv "input voltage min/max" "$vmin V / $vmax V" - kv "rail power peak" "$wmax W" - kv "over-current events" "$((oc1 - oc0)) during the window" - [ "$((oc1 - oc0))" -gt 0 ] && bad "VBUS was cut during the watch window" - awk -v a="$vmin" -v b="$vmax" 'BEGIN{exit !(b-a > 0.15)}' && - warn "input voltage moved more than 150mV: the supply or cabling is loaded near its limit" -fi - -# ------------------------------------------------------------------ stress - -# Never load the SoC mid-print: a thermal or voltage event during a job ruins the part. -require_idle_printer() { - local st - st=$(curl -s --max-time 3 \ - 'http://127.0.0.1:7125/printer/objects/query?print_stats' 2>/dev/null | - sed -n 's/.*"state": *"\([a-z]*\)".*/\1/p') - case "$st" in - printing | paused) - bad "printer state is '$st': refusing to run a load test" - exit 1 - ;; - '') - if [ "$FORCE" != 1 ]; then - bad "cannot reach moonraker to confirm the printer is idle: rerun with --force if you are sure" - exit 1 - fi - warn "printer state unknown, proceeding because --force was given" - ;; - *) note "printer state '$st', safe to load" ;; - esac -} - -if [ "$STRESS" != 0 ]; then - hdr "STRESS ${STRESS}s" - require_idle_printer - - v0=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') - kv "idle input voltage" "${v0:-?} V" - n=$(nproc) - for _ in $(seq "$n"); do - timeout "$STRESS" awk 'BEGIN{for(;;)x+=1}' & - done - sleep $((STRESS / 2)) - v1=$(vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p') - w1=$(vc pmic_read_adc | awk ' - { n=$1; val=$2; sub(/^[^=]*=/,"",val); sub(/[AV]$/,"",val) - key=n; sub(/_[AV]$/,"",key) - if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 } - END { for (k in cur) if (k in volt) t += cur[k]*volt[k]; printf "%.3f", t }') - t1=$(vc get_throttled | cut -d= -f2) - wait - kv "loaded input voltage" "${v1:-?} V" - kv "loaded rail power" "${w1:-?} W" - kv "loaded temperature" "$(vc measure_temp | cut -d= -f2)" - kv "throttled under load" "${t1:-?}" - if [ -n "$v0" ] && [ -n "$v1" ]; then - awk -v a="$v0" -v b="$v1" 'BEGIN{printf " %-28s %.3f V\n", "voltage sag under load", a-b}' - awk -v a="$v0" -v b="$v1" 'BEGIN{exit !(a-b > 0.20)}' && - bad "supply sags more than 200mV under CPU load: the PSU or its cabling is undersized" - awk -v a="$v0" -v b="$v1" 'BEGIN{exit !(a-b <= 0.20)}' && - ok "supply holds up under CPU load" - fi - [ "${t1:-0x0}" != "0x0" ] && bad "throttling occurred under load: $t1" -fi - -# ------------------------------------------------------------------- burn - -# Adds one load domain per stage so the limit that binds first is measured rather than guessed. -if [ "$BURN" != 0 ]; then - hdr "BURN ${BURN}s per stage" - require_idle_printer - - ext5v() { vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p'; } - rail_w() { - vc pmic_read_adc | awk ' - { n=$1; val=$2; sub(/^[^=]*=/,"",val); sub(/[AV]$/,"",val) - key=n; sub(/_[AV]$/,"",key) - if (n ~ /_A$/) cur[key]=val+0; else volt[key]=val+0 } - END { for (k in cur) if (k in volt) t += cur[k]*volt[k]; printf "%.3f", t }' - } - - NC=$(nproc 2>/dev/null) - case "${NC:-x}" in '' | *[!0-9]*) NC=4 ;; esac - LIMIT=$((BURN * 10 + 120)) - HAVE_SNG=0 - have stress-ng && HAVE_SNG=1 - [ "$HAVE_SNG" = 1 ] || note "stress-ng not installed: falling back to awk loops, which understate real SoC draw" - - # Only a removable disk is ever read, and only for reading, so no printer storage is touched. - BURN_USB='' - for b in /sys/block/sd*; do - [ "$(sysread "$b/removable")" = 1 ] || continue - BURN_USB="/dev/$(basename "$b")" - break - done - [ "$(id -u)" = 0 ] || BURN_USB='' - - BURN_PIDS='' - burn_stop() { - [ -n "$BURN_PIDS" ] && kill $BURN_PIDS 2>/dev/null - BURN_PIDS='' - sleep 1 - } - trap 'burn_stop; echo; note "burn aborted, load killed"; exit 130' INT TERM - - spawn() { - "$@" >/dev/null 2>&1 & - BURN_PIDS="$BURN_PIDS $!" - } - load_cpu() { - if [ "$HAVE_SNG" = 1 ]; then - spawn stress-ng --cpu "$1" --cpu-method matrixprod --timeout "${LIMIT}s" - else - i=0 - while [ "$i" -lt "$1" ]; do - spawn timeout "$LIMIT" awk 'BEGIN{for(;;){x+=1.000001;y=x*x}}' - i=$((i + 1)) - done - fi - } - load_ram() { - if [ "$HAVE_SNG" = 1 ]; then - spawn stress-ng --vm 2 --vm-bytes 25% --timeout "${LIMIT}s" - else - spawn timeout "$LIMIT" awk 'BEGIN{n=3000000;for(i=0;i/dev/null; done" - } - apply_load() { - burn_stop - [ "$1" -gt 0 ] && load_cpu "$1" - [ "$2" = 1 ] && load_ram - [ "$3" = 1 ] && load_usb - sleep 2 - return 0 - } - - # Averages only the settled second half of each stage so ramp-up does not pull the mean. - burn_measure() { - local d="$1" i=0 half v w th tc vsum=0 vn=0 - S_VMIN=99 - S_WMAX=0 - S_TMAX=0 - S_TH=0x0 - half=$((d / 2)) - while [ "$i" -lt "$d" ]; do - v=$(ext5v) - w=$(rail_w) - th=$(vc get_throttled | cut -d= -f2) - tc=$(sysread /sys/class/thermal/thermal_zone0/temp) - case "${v:-x}" in '' | *[!0-9.]*) v='' ;; esac - case "${w:-x}" in '' | *[!0-9.]*) w='' ;; esac - [ -n "$v" ] && S_VMIN=$(awk -v a="$S_VMIN" -v b="$v" 'BEGIN{print (ba)?b:a}') - case "${tc:-x}" in '' | *[!0-9]*) ;; *) S_TMAX=$(awk -v a="$S_TMAX" -v b="$tc" 'BEGIN{print (b>a)?b:a}') ;; esac - case "${th:-0x0}" in 0x0) ;; *) S_TH="$th" ;; esac - if [ "$i" -ge "$half" ] && [ -n "$v" ]; then - vsum=$(awk -v s="$vsum" -v b="$v" 'BEGIN{printf "%.6f", s+b}') - vn=$((vn + 1)) - fi - i=$((i + 1)) - sleep 1 - done - S_VAVG=$(awk -v s="$vsum" -v n="$vn" 'BEGIN{if(n>0)printf "%.5f", s/n}') - return 0 - } - - ABORT=0 - stage() { - burn_measure "$BURN" - awk -v l="$1" -v w="$S_WMAX" -v vm="$S_VMIN" -v va="${S_VAVG:-0}" -v t="$S_TMAX" -v th="$S_TH" \ - 'BEGIN{printf " %-22s %6.2f W %8.4f V %8.4f V %5.1f C %s\n", l, w, vm, va, t/1000, th}' - case "$S_TH" in - 0x0) ;; - *) - bad "throttle or undervoltage bits set during '$1': $S_TH" - ABORT=1 - ;; - esac - awk -v t="$S_TMAX" 'BEGIN{exit !(t / 1000 >= 80)}' && { - bad "SoC reached 80C during '$1': thermal is the binding limit, not power" - ABORT=1 - } - return 0 - } - - oc0=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') - note "each stage holds ${BURN}s; loads are additive and rebuilt from scratch every stage" - printf ' %-22s %8s %10s %10s %7s %s\n' stage rails Vmin Vavg temp throttled - - apply_load 0 0 0 - stage "0 idle" - IDLE_W=$S_WMAX - IDLE_V=${S_VAVG:-0} - PEAK_W=$S_WMAX - PEAK_V=${S_VAVG:-0} - PEAK_T=$S_TMAX - PEAK_LBL="0 idle" - - for spec in "1 cpu x1|1|0|0" "2 cpu x$NC|$NC|0|0" "3 cpu+ram|$NC|1|0" "4 cpu+ram+usb|$NC|1|1"; do - [ "$ABORT" = 0 ] || break - lbl=${spec%%|*} - rest=${spec#*|} - c=${rest%%|*} - rest=${rest#*|} - r=${rest%%|*} - u=${rest#*|} - if [ "$u" = 1 ] && [ -z "$BURN_USB" ]; then - note "skipping '$lbl': no removable USB disk found, or not running as root" - continue - fi - apply_load "$c" "$r" "$u" - stage "$lbl" - PEAK_LBL="$lbl" - PEAK_W=$S_WMAX - PEAK_V=${S_VAVG:-0} - PEAK_T=$S_TMAX - done - - burn_stop - trap - INT TERM - oc1=$(journalctl -k --no-pager 2>/dev/null | grep -ci 'over-current change') - [ "$((oc1 - oc0))" -gt 0 ] && bad "VBUS was cut $((oc1 - oc0)) time(s) during the burn: USB is the binding limit" - - hdr "HEADROOM ANALYSIS" - kv "peak stage" "$PEAK_LBL" - if [ -n "$BURN_USB" ]; then kv "usb load device" "$BURN_USB"; else kv "usb load device" "none, stage skipped"; fi - - # Source impedance from the idle-to-peak step is what turns a single reading into a projection. - awk -v iw="$IDLE_W" -v pw="$PEAK_W" -v iv="$IDLE_V" -v pv="$PEAK_V" -v pt="$PEAK_T" \ - -v usb="$USB_TOTAL" -v budget="${USB_BUDGET:-0}" ' - BEGIN { - dw = pw - iw; dv = iv - pv - printf " %-28s %.2f W\n", "rail power idle to peak", dw - printf " %-28s %.4f V\n", "voltage sag idle to peak", dv - if (dw <= 0.2) { print " not enough load delta to derive impedance: raise the stage time"; exit } - di = dw / 0.9 / pv - printf " %-28s %.3f A\n", "input current step", di - r = 0 - # Two runs stepped 0.59A/0.76A and produced 104/82 mOhm from an identical sag: under ~1A the step sits inside the EXT5V ADC noise floor, so dV/dI tracks drift, not resistance. - if (di < 1.0) { - print " step is under 1A: impedance and brownout projections suppressed, they are noise here" - } else if (dv > 0.002) { - r = dv / di - printf " %-28s %.0f mOhm (supply plus cable)\n", "source impedance", r * 1000 - head = (pv - 4.70) / r - printf " %-28s %.2f A more before 4.70V\n", "projected sag headroom", head - } else { - print " sag is below the ADC noise floor: impedance is too low to measure, which is a good sign" - } - board = pw * 1.1451 + 0.5879 - tot = board + usb / 1000.0 * 5.0 - printf " %-28s %.2f W = %.2f A at %.2f V\n", "estimated draw at peak", tot, tot / pv, pv - if (r > 0) printf " %-28s %.2f A total\n", "projected brownout current", tot / pv + (pv - 4.70) / r - printf " %-28s %.1f C of 80 C\n", "thermal headroom", 80 - pt / 1000 - printf " %-28s %d mA of %d mA declared\n", "usb budget headroom", budget - usb, budget - }' - note "rail power excludes USB VBUS, so the USB stage shows up as sag and heat, not as rail watts" - note "the PSU nameplate rating is not readable in software: compare the projected figures to it yourself" -fi - -# --bed: does the 24V bed heater pull down the Pi's 5V rail? Answers "shared/coupled supply" vs "independent". -if [ "$BED" != 0 ]; then - hdr "bed heater / 5V rail coupling test" - MURL=http://127.0.0.1:7125 - - case "$BED" in - '' | *[!0-9]*) bad "--bed needs an integer temperature in C" && exit 2 ;; - esac - if [ "$BED" -lt 40 ] || [ "$BED" -gt 110 ]; then - bad "--bed $BED is outside the sane 40-110 C range" - exit 2 - fi - [ -n "$VCG" ] || { - bad "vcgencmd not available: cannot sample the 5V rail" - exit 1 - } - have curl || { - bad "curl not available: cannot drive the bed" - exit 1 - } - - bed_v5() { vc pmic_read_adc EXT5V_V | sed -n 's/.*=\([0-9.]*\)V/\1/p'; } - bed_thr() { vc get_throttled | cut -d= -f2; } - # Moonraker returns one flat object here, so splitting on separators and taking the value field is enough. - bed_read() { - curl -s --max-time 3 "$MURL/printer/objects/query?heater_bed" 2>/dev/null | - tr ',{}' '\n\n\n' | awk -F': *' ' - /"temperature"/ {t=$2} - /"target"/ {g=$2} - /"power"/ {p=$2} - END {if (t=="") exit 1; printf "%.2f %.2f %.4f\n", t, g, p}' - } - bed_klippy() { curl -s --max-time 3 "$MURL/printer/info" 2>/dev/null | sed -n 's/.*"state": *"\([a-z]*\)".*/\1/p'; } - bed_off() { curl -s --max-time 5 -X POST "$MURL/printer/gcode/script?script=M140%20S0" >/dev/null 2>&1; } - - # This mode commands a heater, so an unreachable moonraker is a hard stop and --force must not bypass it. - BSTATE=$(curl -s --max-time 3 "$MURL/printer/objects/query?print_stats" 2>/dev/null | - sed -n 's/.*"state": *"\([a-z]*\)".*/\1/p') - case "$BSTATE" in - printing | paused) - bad "printer state is '$BSTATE': refusing to command the bed" - exit 1 - ;; - '') - bad "cannot reach moonraker: refusing to command the bed (--force does not apply here)" - exit 1 - ;; - *) note "printer state '$BSTATE'" ;; - esac - KST=$(bed_klippy) - [ "$KST" = ready ] || { - bad "klippy state is '${KST:-unknown}', not ready" - exit 1 - } - - BR=$(bed_read) || { - bad "no heater_bed object: is this printer configured with a heated bed?" - exit 1 - } - B_T0=$(echo "$BR" | cut -d' ' -f1) - awk -v t="$B_T0" -v g="$BED" 'BEGIN{exit !(t > g - 5)}' && { - bad "bed is already at ${B_T0}C: this test needs a cold start to see full heater duty" - exit 1 - } - - warn "this will heat the bed to ${BED}C at full power. Do not touch the bed." - if [ "$ASSUME_YES" != 1 ]; then - [ -t 0 ] || { - bad "stdin is not a tty: rerun with --yes" - exit 1 - } - printf ' type yes to continue: ' - read -r ANS - [ "$ANS" = yes ] || { - note "aborted" - exit 0 - } - fi - - BED_LOG=$(mktemp /tmp/bs-bed-XXXXXX.tsv) - # Any exit path must leave the bed off, including ctrl-c: a hot bed left on unattended is the real hazard. - bed_cleanup() { - bed_off - note "bed commanded off" - } - trap 'bed_cleanup; exit 130' INT TERM - trap 'bed_cleanup' EXIT - - bed_sample() { - local r t pw v th - r=$(bed_read) || return 0 - t=$(echo "$r" | cut -d' ' -f1) - pw=$(echo "$r" | cut -d' ' -f3) - v=$(bed_v5) - th=$(bed_thr) - printf '%s\t%s\t%s\t%s\t%s\t%s\n' "$1" "$2" "$pw" "$t" "${v:-0}" "${th:-NA}" >>"$BED_LOG" - } - - note "phase 1: 20s baseline, bed off" - bed_off - i=0 - while [ "$i" -lt 20 ]; do - bed_sample base "$i" - sleep 1 - i=$((i + 1)) - done - - note "phase 2: heating to ${BED}C (600s cap)" - curl -s --max-time 5 -X POST "$MURL/printer/gcode/script?script=M140%20S${BED}" >/dev/null 2>&1 - i=0 - while [ "$i" -lt 600 ]; do - bed_sample heat "$i" - R=$(bed_read) || break - CT=$(echo "$R" | cut -d' ' -f1) - KS=$(bed_klippy) - if [ "$KS" != ready ]; then - bad "klippy went to '$KS' during the ramp: this is the failure being hunted, see klippy.log" - break - fi - awk -v t="$CT" -v g="$BED" 'BEGIN{exit !(t >= g - 0.5)}' && break - sleep 1 - i=$((i + 1)) - done - - note "phase 3: 60s hold, capturing pwm on/off transitions" - i=0 - while [ "$i" -lt 60 ]; do - bed_sample hold "$i" - sleep 1 - i=$((i + 1)) - done - - note "phase 4: bed off, 10s settle, 20s baseline" - bed_off - sleep 10 - i=0 - while [ "$i" -lt 20 ]; do - bed_sample post "$i" - sleep 1 - i=$((i + 1)) - done - - kv "samples" "$(wc -l <"$BED_LOG") in $BED_LOG" - - # The verdict is gated on 3 sigma of the measured baseline noise, so ADC jitter cannot masquerade as coupling. - awk -F'\t' ' - { - if ($1 == "base" || $1 == "post") { n++; s += $5; ss += $5 * $5; if (bmin == 0 || $5 < bmin) bmin = $5 } - if ($3 >= 0.8) { hn++; hs += $5 } - if ($3 > maxduty) maxduty = $3 - if ($5 > 0 && (vmin == 0 || $5 < vmin)) vmin = $5 - if ($6 != "0x0" && $6 != "NA") thr = $6 - cn++; cx += $3; cy += $5; cxy += $3 * $5; cxx += $3 * $3; cyy += $5 * $5 - } - END { - if (n < 10) { printf " inconclusive: only %d baseline samples\n", n; exit } - mean = s / n - var = ss / n - mean * mean - sd = (var > 0) ? sqrt(var) : 0 - printf " %-28s %.4f V (sd %.4f V, min %.3f V)\n", "baseline 5V", mean, sd, bmin - printf " %-28s %.2f\n", "peak bed duty", maxduty - if (hn < 5) { - printf " %-28s %s\n", "verdict", "INCONCLUSIVE: bed never held >=80% duty for 5s" - exit - } - hm = hs / hn - d = mean - hm - printf " %-28s %.4f V over %d samples\n", "5V at >=80% duty", hm, hn - printf " %-28s %.1f mV\n", "shift under load", d * 1000 - den = sqrt((cxx - cx * cx / cn) * (cyy - cy * cy / cn)) - if (den > 0) printf " %-28s %.3f\n", "corr(bed duty, 5V)", (cxy - cx * cy / cn) / den - printf " %-28s %.3f V\n", "lowest 5V sample", vmin - thr3 = 3 * sd - printf " %-28s %.1f mV\n", "3-sigma noise floor", thr3 * 1000 - if (thr != "") { printf " VERDICT BAD: throttled bits set during the test (%s)\n", thr; exit } - if (vmin < 4.80) { printf " VERDICT BAD: 5V dropped to %.3f V, below the 4.80 V margin\n", vmin; exit } - if (d < thr3) { print " VERDICT OK: no shift above the measured noise floor, rails look independent"; exit } - if (d < 0.050) { printf " VERDICT WARN: %.1f mV shift is real but small: watch it in a closed chassis\n", d * 1000; exit } - printf " VERDICT BAD: %.1f mV shift tracks bed duty, the 5V supply is coupled to the 24V domain\n", d * 1000 - print " this is a hardware fix: bigger DC-DC, thicker/shorter 5V leads, or bulk capacitance at the Pi" - }' "$BED_LOG" - - note "a negative result here does not clear the 24V domain: the Pi cannot see 24V rail sag at all" -fi - -echo diff --git a/scripts/healthcheck/bs-selftest.py b/scripts/healthcheck/bs-selftest.py deleted file mode 100755 index d044dfb2..00000000 --- a/scripts/healthcheck/bs-selftest.py +++ /dev/null @@ -1,533 +0,0 @@ -#!/usr/bin/env python3 -"""Offscreen UI selftest emitting TSV STATUS/name/detail rows for bs-healthcheck.sh: catches render breaks (stale/missing generated forms, icons) a running D-Bus-answering process can hide; side-effect-free (no MainWindow/socket/D-Bus/file writes); unused forms WARN not FAIL.""" - -from __future__ import annotations - -import io -import json -import os -import re -import sys -import urllib.error -import urllib.parse -import urllib.request -import xml.etree.ElementTree as ET # nosec B405 - only ever fed our own repo's .qrc files -from collections.abc import Callable, Iterable -from pathlib import Path - -os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") -os.environ.setdefault("PYTHONDONTWRITEBYTECODE", "1") -sys.dont_write_bytecode = True - -# Walk up to the repo root instead of counting directories, so this script survives being moved. -_HERE = Path(__file__).resolve() -ROOT = next( - (p for p in _HERE.parents if (p / "BlocksScreen").is_dir()), _HERE.parent.parent -) -PKG = ROOT / "BlocksScreen" -UIDIR = PKG / "lib" / "ui" -RESDIR = UIDIR / "resources" -MOONRAKER = os.environ.get("BS_MOONRAKER", "http://localhost:7125") - -if str(PKG) not in sys.path: - sys.path.insert(0, str(PKG)) - -_FAILED = 0 -_APP = None - - -def emit(status: str, name: str, detail: str = "") -> None: - """Write one TSV assertion row.""" - global _FAILED - if status == "FAIL": - _FAILED += 1 - detail = " ".join(str(detail).split())[:400] - sys.stdout.write(f"{status}\t{name}\t{detail}\n") - sys.stdout.flush() - - -def guard(name: str, fn: Callable[[], tuple[str, str]]) -> None: - """Run one assertion, turning any escaping exception into a FAIL rather than killing the run.""" - try: - status, detail = fn() - except Exception as exc: # noqa: BLE001 - a crashing probe is itself the finding - emit("FAIL", name, f"{type(exc).__name__}: {exc}") - return - emit(status, name, detail) - - -def _qapp(): - """One shared offscreen QApplication, kept in a global so PyQt cannot collect it mid-run.""" - global _APP - if _APP is None: - from PyQt6 import QtWidgets - - _APP = QtWidgets.QApplication.instance() or QtWidgets.QApplication([]) - return _APP - - -def _load_module(path: Path): - """Import a file by path under a private name, so it cannot collide with the app's own modules.""" - import importlib.util - - spec = importlib.util.spec_from_file_location(f"_bsselftest_{path.stem}", path) - if spec is None or spec.loader is None: - raise ImportError(f"{path.name}: no loader") - mod = importlib.util.module_from_spec(spec) - spec.loader.exec_module(mod) - return mod - - -_RES_LOADED: list[str] = [] -_RES_KEEPALIVE: list[object] = [] - - -def _load_resources() -> list[str]: - """Register every compiled resource bundle once (so :/ lookups work later); keeps module objects alive on purpose since Qt holds a pointer into their bytes and GC'ing one segfaults the next :/ read.""" - if _RES_LOADED: - return _RES_LOADED - _qapp() - for m in sorted(RESDIR.glob("*_rc.py")): - try: - _RES_KEEPALIVE.append(_load_module(m)) - _RES_LOADED.append(m.name) - except Exception as exc: # noqa: BLE001 - _RES_LOADED.append(f"!{m.name}: {type(exc).__name__}: {exc}") - return _RES_LOADED - - -def _py_sources() -> list[Path]: - return [p for p in PKG.rglob("*.py") if "__pycache__" not in p.parts] - - -_LIVE_UI: set[str] | None = None - - -def _live_ui_modules() -> set[str]: - """Generated modules some other source file imports: only those can break the real UI.""" - global _LIVE_UI - if _LIVE_UI is not None: - return _LIVE_UI - stems = {g.stem for g in UIDIR.glob("*_ui.py")} - live: set[str] = set() - for py in _py_sources(): - if py.parent == UIDIR: - continue - try: - text = py.read_text(errors="replace") - except OSError: - continue - live |= { - s for s in stems if re.search(rf"(? bool: - return ( - path.parent == UIDIR - and path.stem.endswith("_ui") - and path.stem not in _live_ui_modules() - ) - - -# --------------------------------------------------------------------------- resources - - -def t_rc_import() -> tuple[str, str]: - """Every compiled resource bundle imports and registers.""" - loaded = _load_resources() - if not loaded: - return "FAIL", f"no *_rc.py bundles under {RESDIR}" - bad = [x[1:] for x in loaded if x.startswith("!")] - if bad: - return "FAIL", "; ".join(bad) - return "PASS", f"{len(loaded)} bundle(s) registered" - - -def t_qrc_assets() -> tuple[str, str]: - """Every file listed in a .qrc still exists, so the next rcc rebuild cannot silently drop it.""" - qrcs = sorted(RESDIR.glob("*.qrc")) - if not qrcs: - return "SKIP", "no .qrc files" - missing = [] - total = 0 - for q in qrcs: - try: - root = ET.parse(q).getroot() # nosec B314 - only ever fed our own repo's .qrc files - except ET.ParseError as exc: - missing.append(f"{q.name}: malformed ({exc})") - continue - for f in root.iter("file"): - total += 1 - rel = (f.text or "").strip() - if rel and not (q.parent / rel).exists(): - missing.append(f"{q.name}:{rel}") - if missing: - return "FAIL", f"{len(missing)}/{total} listed asset(s) missing: " + ", ".join( - missing[:8] - ) - return "PASS", f"{total} asset(s) present" - - -_RES_REF = re.compile(r'["\'](:/[A-Za-z0-9_\-./]+)["\']') - - -def _resource_refs() -> tuple[dict[str, set[str]], dict[str, set[str]]]: - """Literal :/ paths in source, split into refs from live code and refs from dead generated forms.""" - live: dict[str, set[str]] = {} - dead: dict[str, set[str]] = {} - for py in _py_sources(): - try: - text = py.read_text(errors="replace") - except OSError: - continue - bucket = dead if _is_dead_ui(py) else live - for path in _RES_REF.findall(text): - if "{" in path or "%" in path: - continue - bucket.setdefault(path, set()).add(py.name) - return live, dead - - -def t_resource_refs_resolve() -> tuple[str, str]: - """Every literal :/icon path live code asks for resolves, otherwise that control renders blank.""" - from PyQt6 import QtCore - - _load_resources() - live, _ = _resource_refs() - if not live: - return "SKIP", "no literal resource references found" - missing = [p for p in live if not QtCore.QFile(p).exists()] - if missing: - detail = ", ".join( - f"{p} (in {','.join(sorted(live[p]))})" for p in sorted(missing)[:8] - ) - return "FAIL", f"{len(missing)}/{len(live)} unresolved: {detail}" - return "PASS", f"{len(live)} reference(s) resolve" - - -def t_dead_resource_refs() -> tuple[str, str]: - """Unresolved :/ paths inside generated forms nothing imports: dead weight, not a field fault.""" - from PyQt6 import QtCore - - _load_resources() - _, dead = _resource_refs() - missing = [p for p in dead if not QtCore.QFile(p).exists()] - if missing: - return "WARN", f"{len(missing)} unresolved in unused forms: " + ", ".join( - sorted(missing)[:6] - ) - return "PASS", "" - - -def t_fonts_loadable() -> tuple[str, str]: - """The bundled fonts actually load, otherwise Qt silently substitutes and the layout shifts.""" - from PyQt6 import QtCore, QtGui - - _qapp() - _load_resources() - it = QtCore.QDirIterator( - ":", QtCore.QDir.Filter.Files, QtCore.QDirIterator.IteratorFlag.Subdirectories - ) - fonts = [] - while it.hasNext(): - p = it.next() - if p.lower().endswith((".ttf", ".otf")): - fonts.append(p) - if not fonts: - return "SKIP", "no fonts in the resource tree" - bad = [f for f in fonts if QtGui.QFontDatabase.addApplicationFont(f) == -1] - if bad: - return "FAIL", f"rejected by Qt: {', '.join(bad[:6])}" - return "PASS", f"{len(fonts)} font(s) loaded" - - -# --------------------------------------------------------------------------- ui layer - - -def _ui_pairs() -> list[tuple[Path, Path]]: - return [(u, u.with_name(u.stem + "_ui.py")) for u in sorted(UIDIR.glob("*.ui"))] - - -def t_ui_generated_present() -> tuple[str, str]: - """Every .ui the app uses has its generated counterpart, or that tab comes up blank.""" - live = _live_ui_modules() - missing = [ - u.name for u, g in _ui_pairs() if not g.exists() and u.stem + "_ui" in live - ] - if missing: - return "FAIL", "no generated _ui.py for: " + ", ".join(missing) - return "PASS", f"{len(_ui_pairs())} form(s)" - - -def t_orphan_ui_files() -> tuple[str, str]: - """.ui files with no generated module and no importer: leftovers, and they blur the real set.""" - live = _live_ui_modules() - orphan = [ - u.name for u, g in _ui_pairs() if not g.exists() and u.stem + "_ui" not in live - ] - if orphan: - return "WARN", "never compiled and never imported: " + ", ".join(orphan) - return "PASS", "" - - -_SHAPE = re.compile( - r'setObjectName\("([^"]+)"\)|(Qt\w+\.Q\w+)\(|["\'](:/[A-Za-z0-9_\-./]+)["\']' -) - - -def _shape(src: str) -> list[str]: - """Structural fingerprint (object names, widget classes, resource paths) instead of a text diff, since pyuic6 embeds its own version and the generating machine's absolute path into every output.""" - return sorted(next(g for g in m.groups() if g) for m in _SHAPE.finditer(src)) - - -def t_ui_generated_current() -> tuple[str, str]: - """The generated _ui.py still matches its .ui, so an edited form cannot ship uncompiled.""" - from PyQt6 import uic - - stale = [] - checked = 0 - for u, g in _ui_pairs(): - if not g.exists(): - continue - buf = io.StringIO() - try: - uic.compileUi(str(u), buf) # type: ignore[attr-defined] - except Exception as exc: # noqa: BLE001 - stale.append(f"{u.name}: will not compile ({type(exc).__name__}: {exc})") - continue - checked += 1 - want, have = _shape(buf.getvalue()), _shape(g.read_text(errors="replace")) - if want != have: - delta = set(want) ^ set(have) - stale.append(f"{u.name} ({len(delta)} element(s) differ)") - if stale: - return "WARN", f"{len(stale)}/{checked} need a pyuic6 rerun: " + ", ".join( - stale[:8] - ) - return "PASS", f"{checked} form(s) up to date" - - -def _build_forms(paths: Iterable[Path]) -> tuple[int, list[str]]: - """Build every Ui_* class in the given generated modules onto a host widget.""" - from PyQt6 import QtWidgets - - _qapp() - _load_resources() - built = 0 - bad: list[str] = [] - for g in paths: - try: - mod = _load_module(g) - except Exception as exc: # noqa: BLE001 - bad.append(f"{g.name}: import {type(exc).__name__}: {exc}") - continue - for attr in dir(mod): - if not attr.startswith("Ui_"): - continue - cls = getattr(mod, attr) - if getattr(cls, "setupUi", None) is None: - continue - # setupUi's base class is whatever the form was drawn on; try each plausible host, keep the first error (later ones are just wrong-host noise). - first: Exception | None = None - ok = False - for host in ( - QtWidgets.QWidget, - QtWidgets.QStackedWidget, - QtWidgets.QMainWindow, - QtWidgets.QDialog, - QtWidgets.QTabWidget, - ): - try: - cls().setupUi(host()) - built += 1 - ok = True - break - except Exception as exc: # noqa: BLE001 - first = first or exc - if not ok: - bad.append(f"{g.name}:{attr}: {type(first).__name__}: {first}") - return built, bad - - -def t_widgets_build() -> tuple[str, str]: - """Every form the app imports builds onto a host widget: the real render path, minus the app.""" - live = sorted(g for g in UIDIR.glob("*_ui.py") if g.stem in _live_ui_modules()) - if not live: - return ( - "FAIL", - "no generated form is imported anywhere, the UI cannot be assembled", - ) - built, bad = _build_forms(live) - if bad: - return "FAIL", f"{len(bad)} failed: " + "; ".join(bad[:6]) - if not built: - return "FAIL", "no Ui_* classes found to build" - return "PASS", f"{built} widget class(es) build from {len(live)} module(s)" - - -def t_orphan_forms() -> tuple[str, str]: - """Generated forms nothing imports: harmless in the field, but they mask real breakage here.""" - dead = sorted( - g.stem for g in UIDIR.glob("*_ui.py") if g.stem not in _live_ui_modules() - ) - if dead: - return "WARN", f"{len(dead)} unused generated form(s): " + ", ".join(dead) - return "PASS", "" - - -def t_stylesheets_parse() -> tuple[str, str]: - """Qt swallows malformed stylesheet rules silently, so an unbalanced brace loses whole themes.""" - sheets = list(PKG.rglob("*.qss")) + list(PKG.rglob("*.css")) - if not sheets: - return "SKIP", "no stylesheet files" - bad = [] - for s in sheets: - text = s.read_text(errors="replace") - if text.count("{") != text.count("}"): - bad.append( - f"{s.name}: {text.count('{')} open vs {text.count('}')} close braces" - ) - if bad: - return "FAIL", "; ".join(bad) - return "PASS", f"{len(sheets)} stylesheet(s) balanced" - - -# --------------------------------------------------------------------------- runtime - - -def _moon(path: str, timeout: float = 6.0) -> dict: - url = f"{MOONRAKER}{path}" - if urllib.parse.urlsplit(url).scheme not in ("http", "https"): - raise ValueError(f"refusing non-http(s) BS_MOONRAKER scheme: {url}") - with urllib.request.urlopen(url, timeout=timeout) as fh: # nosec B310 - scheme checked above - return json.load(fh) - - -def t_moonraker_ready() -> tuple[str, str]: - """Moonraker is up and klippy is ready, which is the state the UI needs to leave its splash.""" - try: - res = _moon("/server/info")["result"] - except (urllib.error.URLError, OSError, KeyError, ValueError) as exc: - return "SKIP", f"moonraker not answering: {type(exc).__name__}" - state = res.get("klippy_state", "?") - if res.get("klippy_connected") is not True: - return ( - "FAIL", - f"moonraker is up but klippy_connected=false, klippy_state={state}", - ) - if state != "ready": - return "FAIL", f"klippy_state={state}, the UI will sit on the connection screen" - return "PASS", f"klippy_state={state}" - - -def t_moonraker_objects() -> tuple[str, str]: - """The printer objects the UI reads must exist, or those panels show placeholders forever.""" - required = ( - "toolhead", - "extruder", - "print_stats", - "virtual_sdcard", - "idle_timeout", - "gcode_move", - ) - try: - objs = _moon("/printer/objects/list")["result"]["objects"] - except (urllib.error.URLError, OSError, KeyError, ValueError) as exc: - return "SKIP", f"moonraker not answering: {type(exc).__name__}: {exc}" - missing = [o for o in required if o not in objs] - if missing: - return "FAIL", "klipper is not exposing: " + ", ".join(missing) - return "PASS", f"{len(objs)} object(s) exposed" - - -def t_moonraker_optional_objects() -> tuple[str, str]: - """Objects whose panels degrade rather than break when the printer does not define them.""" - optional = ( - "heater_bed", - "display_status", - "fan", - "filament_switch_sensor", - "bed_mesh", - ) - try: - objs = _moon("/printer/objects/list")["result"]["objects"] - except (urllib.error.URLError, OSError, KeyError, ValueError) as exc: - return "SKIP", f"moonraker not answering: {type(exc).__name__}" - absent = [ - o for o in optional if not any(x == o or x.startswith(o + " ") for x in objs) - ] - if absent: - return "WARN", "not defined on this printer: " + ", ".join(absent) - return "PASS", "" - - -def t_config_parses() -> tuple[str, str]: - """BlocksScreen.cfg parses, so the UI is not silently falling back to untested defaults.""" - import configparser - - env = os.environ.get("BS_CONFIG") - cands = [Path(env)] if env else [] - cands += [ - Path.home() / "printer_data" / "config" / "BlocksScreen.cfg", - ROOT / "BlocksScreen.cfg", - ] - cfg_path = next((c for c in cands if c.is_file()), None) - if cfg_path is None: - return "SKIP", "BlocksScreen.cfg not found" - parser = configparser.ConfigParser(strict=False, inline_comment_prefixes=(";", "#")) - try: - parser.read(cfg_path) - except configparser.Error as exc: - return "FAIL", f"{cfg_path}: {exc}" - return "PASS", f"{cfg_path.name}: {len(parser.sections())} section(s)" - - -def t_no_dev_flag() -> tuple[str, str]: - """BLOCKSCREEN_DEV shipping enabled would leave debug affordances on a customer machine.""" - val = os.environ.get("BLOCKSCREEN_DEV") - unit = Path("/etc/systemd/system/BlocksScreen.service") - in_unit = "" - if unit.is_file(): - for ln in unit.read_text(errors="replace").splitlines(): - if "BLOCKSCREEN_DEV" in ln and not ln.strip().startswith("#"): - in_unit = ln.strip() - if val not in (None, "", "0") or in_unit: - return "WARN", f"env={val!r} unit={in_unit!r}" - return "PASS", "" - - -TESTS: tuple[tuple[str, Callable[[], tuple[str, str]]], ...] = ( - ("compiled resource bundles register", t_rc_import), - ("qrc-listed assets present on disk", t_qrc_assets), - ("literal :/ resource references resolve", t_resource_refs_resolve), - ("bundled fonts load", t_fonts_loadable), - ("every .ui has a generated _ui.py", t_ui_generated_present), - ("generated forms the app imports build", t_widgets_build), - ("generated _ui.py match their .ui", t_ui_generated_current), - ("stylesheets balanced", t_stylesheets_parse), - ("klippy ready via moonraker", t_moonraker_ready), - ("required printer objects exposed", t_moonraker_objects), - ("optional printer objects", t_moonraker_optional_objects), - ("BlocksScreen.cfg parses", t_config_parses), - ("BLOCKSCREEN_DEV not enabled", t_no_dev_flag), - ("no unused generated forms", t_orphan_forms), - ("no orphan .ui files", t_orphan_ui_files), - ("no unresolved icons in unused forms", t_dead_resource_refs), -) - - -def main() -> int: - """Run every assertion and return 1 if any of them failed.""" - only = sys.argv[1] if len(sys.argv) > 1 else "" - for name, fn in TESTS: - if only and only not in name: - continue - guard(name, fn) - return 1 if _FAILED else 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/healthcheck/bs-usb-diag.sh b/scripts/healthcheck/bs-usb-diag.sh deleted file mode 100755 index 4fbf3a82..00000000 --- a/scripts/healthcheck/bs-usb-diag.sh +++ /dev/null @@ -1,1079 +0,0 @@ -#!/usr/bin/env bash -# USB fault forensics for boxes where inserting a flash drive shuts klipper down. -# -# The failure this exists to explain: a USB 3.0+ stick makes klipper report "Lost communication with MCU" or "Timer too close", and there are four physically distinct causes needing different fixes, so guessing is expensive: -# -# 1. power the stick's inrush trips the port current limit, the hub cuts VBUS for the whole -# port group, and the MCU browns out with it -> dmesg "over-current change" -# 2. bus a broken UAS bridge makes the xhci controller reset the link, which bounces sibling -# ports including the MCU's -> "uas_eh_device_reset_handler" -# 3. enum link training fails and retries in a loop, holding the controller and stalling the -# MCU's serial transfers past klipper's deadline -> "error -71", "error -110" -# 4. load mounting exfat/ntfs through FUSE spikes host cpu and the MCU misses its window -# -> klipper "Timer too close" -# -# Read-only in every mode. Never mounts, never sends gcode, never restarts a service. -# -# Usage: -# bs-usb-diag.sh forensic report on the current box + correlated history -# bs-usb-diag.sh --watch [SECS] live capture while the operator inserts the suspect drive -# bs-usb-diag.sh --monitor [SECS] same capture, passive: safe during a print, plug nothing -# bs-usb-diag.sh --check TSV assertions for bs-healthcheck.sh -# bs-usb-diag.sh --history only the historic MCU-shutdown vs USB-event correlation - -set -u - -MODE=report -WATCH_SECS=180 -FORCE=false -MONITOR=false -QUIET=false -NO_REPORT=false - -while [ $# -gt 0 ]; do - case "$1" in - --watch) - MODE=watch - case "${2:-}" in '' | -*) ;; *) - WATCH_SECS=$2 - shift - ;; - esac - ;; - --monitor) - MODE=watch - MONITOR=true - case "${2:-}" in '' | -*) ;; *) - WATCH_SECS=$2 - shift - ;; - esac - ;; - --check) MODE=check ;; - --history) MODE=history ;; - --force) FORCE=true ;; - -q | --quiet) QUIET=true ;; - --no-report) NO_REPORT=true ;; - -h | --help) - sed -n '2,25p' "$0" - exit 0 - ;; - *) - echo "unknown option: $1" >&2 - exit 2 - ;; - esac - shift -done -case "${WATCH_SECS:-x}" in '' | *[!0-9]*) WATCH_SECS=180 ;; esac - -BS_USER="${SUDO_USER:-$(id -un)}" -# Walk up to the repo root instead of counting directories, so this script survives being moved. -BS_PATH=$(dirname -- "$(readlink -f -- "$0")") -while [ "$BS_PATH" != / ] && [ ! -d "$BS_PATH/BlocksScreen" ]; do - BS_PATH=$(dirname -- "$BS_PATH") -done -[ -d "$BS_PATH/BlocksScreen" ] || BS_PATH=$(dirname -- "$(dirname -- "$(readlink -f -- "$0")")") -if [ "$BS_USER" = root ] && [ -d "$BS_PATH/BlocksScreen" ]; then - BS_USER=$(stat -c '%U' "$BS_PATH" 2>/dev/null || echo root) -fi -BS_HOME=$(getent passwd "$BS_USER" | cut -d: -f6) -[ -n "$BS_HOME" ] || BS_HOME="$HOME" -LOGDIR="$BS_HOME/printer_data/logs" -CFGDIR="$BS_HOME/printer_data/config" -MOON="http://localhost:7125" -IS_ROOT=false -[ "$(id -u)" = "0" ] && IS_ROOT=true - -# The field has no SSH, so the report has to land where moonraker already serves logs to the UI. -REPORT="" -if [ "$MODE" != check ] && ! $NO_REPORT && [ -d "$LOGDIR" ]; then - REPORT="$LOGDIR/bs-usb-diag-$(date +%Y%m%d-%H%M%S).log" - : >"$REPORT" 2>/dev/null || REPORT="" - [ -n "$REPORT" ] && $IS_ROOT && [ "$BS_USER" != root ] && chown "$BS_USER" "$REPORT" 2>/dev/null -fi - -if [ -t 1 ] && [ "$MODE" != check ]; then - C_HDR=$'\033[1;36m' C_OK=$'\033[32m' C_WARN=$'\033[33m' C_BAD=$'\033[31m' C_OFF=$'\033[0m' -else - C_HDR="" C_OK="" C_WARN="" C_BAD="" C_OFF="" -fi - -out() { - $QUIET || printf '%s\n' "$*" - [ -n "$REPORT" ] && printf '%s\n' "$*" >>"$REPORT" - return 0 -} -hdr() { out ""; out "${C_HDR}== $* ==${C_OFF}"; } -ok() { out " ${C_OK}ok${C_OFF} $*"; } -bad() { out " ${C_BAD}BAD${C_OFF} $*"; } -susp() { out " ${C_WARN}????${C_OFF} $*"; } -kv() { out "$(printf ' %-28s %s' "$1" "$2")"; } - -# --check speaks TSV so the healthcheck can record each row at its own tier. -emit() { printf '%s\t%s\t%s\n' "$1" "$2" "${3:-}"; } - -# ---------------------------------------------------------------- sysfs helpers - -# Every USB device node, one "syspath" per line, interfaces excluded. -usb_devs() { - local d - for d in /sys/bus/usb/devices/*; do - [ -f "$d/idVendor" ] || continue - echo "$d" - done -} - -sysread() { cat "$1" 2>/dev/null | head -1 | tr -d '\0'; } - -# The interface drivers bound under one device, space separated ("uas", "usb-storage", "cdc_acm"). -dev_drivers() { - local i out="" - for i in "$1":*; do - [ -L "$i/driver" ] || continue - out="$out $(basename "$(readlink -f "$i/driver")")" - done - echo "${out# }" -} - -dev_label() { - local v p m pr - v=$(sysread "$1/idVendor") - p=$(sysread "$1/idProduct") - m=$(sysread "$1/manufacturer") - pr=$(sysread "$1/product") - echo "$v:$p ${m:-?} ${pr:-?}" -} - -# 5000 and 10000 are SuperSpeed: the speeds that carry the inrush and the RF noise. -dev_is_ss() { - case "$(sysread "$1/speed")" in 5000 | 10000 | 20000) return 0 ;; esac - return 1 -} - -# Root hub a device hangs off, which is the blast radius of a controller-level reset. -dev_roothub() { - local b - b=$(basename "$1") - echo "usb${b%%-*}" -} - -# The tty's USB device node: /sys/class/tty/ttyACM0/device is the interface, its parent is the device. -tty_usbdev() { - local p - p=$(readlink -f "/sys/class/tty/$(basename "$1")/device" 2>/dev/null) || return 1 - while [ -n "$p" ] && [ "$p" != / ]; do - [ -f "$p/idVendor" ] && { - echo "$p" - return 0 - } - p=$(dirname "$p") - done - return 1 -} - -# The config files klipper actually loads, so backups and other-variant cfgs stay out. -active_cfgs() { - local root inc g - root="$CFGDIR/printer.cfg" - [ -f "$root" ] || return 0 - echo "$root" - awk '/^\[include /{sub(/^\[include[ \t]+/, ""); sub(/\].*$/, ""); sub(/[ \t]+$/, ""); print}' "$root" | - while read -r inc; do - case "$inc" in - *'*'*) for g in "$CFGDIR"/$inc; do [ -f "$g" ] && echo "$g"; done ;; - *) [ -f "$CFGDIR/$inc" ] && echo "$CFGDIR/$inc" ;; - esac - done -} - -# Serial paths klipper is configured to open, as written (by-id, by-path or a bare node). -mcu_serials() { - local files - files=$(active_cfgs) - [ -n "$files" ] || return 0 - # Strip the inline comment too: klipper takes # and ; as inline prefixes, and the stock printer.cfg ships one on the serial: line itself. - grep -hE '^[[:space:]]*serial:' $files 2>/dev/null | - sed 's/^[[:space:]]*serial:[[:space:]]*//; s/[[:space:]]*[#;].*$//; s/[[:space:]]*$//' | - grep '^/dev/' | sort -u -} - -# ------------------------------------------------------------- journal / klippy - -JOURNAL_OK="" -journal_readable() { - [ -n "$JOURNAL_OK" ] || { - if [ -n "$(journalctl -k -n 1 --no-pager 2>/dev/null)" ]; then JOURNAL_OK=yes; else JOURNAL_OK=no; fi - } - [ "$JOURNAL_OK" = yes ] -} - -# The four mechanisms, as they actually appear in the kernel ring buffer. -USB_PAT='over-current|overcurrent|Cannot enable|not enough power|insufficient available bus power' -USB_PAT="$USB_PAT|uas_eh_|reset (SuperSpeed|high-speed|full-speed|low-speed)|xhci_hcd.*(Error|halt|dying|WARN|Timeout)" -USB_PAT="$USB_PAT|device descriptor read|unable to enumerate|error -71|error -110|error -32|device not accepting address" -USB_PAT="$USB_PAT|USB disconnect|usb_serial_generic_read_bulk_callback|disconnected from ttyUSB|disconnected from ttyACM" -USB_PAT="$USB_PAT|Under-voltage|Voltage normalised|hwmon.*critical" -# Re-enumeration lines aren't faults, but a disconnect without a matching "new ... USB device" is a dead port, while one every few seconds is a reset loop: the operator needs both. -USB_PAT="$USB_PAT|new (SuperSpeed|high-speed|full-speed|low-speed)[^ ]* USB device" - -kernel_usb_events() { journalctl -k -o short-unix --no-pager "$@" 2>/dev/null | grep -aE "$USB_PAT"; } - -# klippy.log rotations, newest last so the correlator sees history in order. -klippy_logs() { - local f - for f in "$LOGDIR"/klippy.log.[0-9]* "$LOGDIR"/klippy.log; do - [ -f "$f" ] && echo "$f" - done -} - -# Correlate every klipper shutdown against kernel USB activity in the same seconds: klippy.log has no per-line clock, but every "Start printer" / "Stats :" line shares one monotonic base, so a shutdown can be placed on the wall clock within one stats interval (1s) and lined up against journal timestamps. -correlate() { - local window="${1:-25}" - command -v python3 >/dev/null 2>&1 || { - echo "python3 missing, correlation unavailable" - return 2 - } - journal_readable || { - echo "kernel journal unreadable, correlation unavailable" - return 2 - } - kernel_usb_events --since "-45 days" >/tmp/.bs-usb-events.$$ 2>/dev/null - klippy_logs >/tmp/.bs-usb-logs.$$ - # Klippy logs outlive the journal by months, so a shutdown older than the journal's first entry has no USB data at all, which must not read the same as data that shows nothing. - local floor - floor=$(journalctl -k -o short-unix --no-pager --since "-45 days" 2>/dev/null | head -1 | cut -d' ' -f1) - python3 - "$window" /tmp/.bs-usb-events.$$ /tmp/.bs-usb-logs.$$ "${floor:-0}" <<'PYEOF' -import re -import sys - -window = float(sys.argv[1]) -try: - floor = float(sys.argv[4]) -except (IndexError, ValueError): - floor = 0.0 -events = [] -with open(sys.argv[2], errors="replace") as fh: - for line in fh: - parts = line.split(None, 1) - if len(parts) != 2: - continue - try: - events.append((float(parts[0]), parts[1].rstrip())) - except ValueError: - continue -events.sort() - -SHUT = re.compile( - r"Lost communication with MCU|Timer too close|Rescheduled timer in the past" - r"|Unable to open serial port|Unable to connect|shutdown: |Transition to shutdown state" - r"|mcu_protocol_error|Move queue overflow|Attempt to update TRSYNC|communication error" -) -START = re.compile(r"Start printer at .*\(([0-9.]+) ([0-9.]+)\)") -STATS = re.compile(r"^Stats ([0-9.]+):") -LOAD = re.compile(r"sysload=([0-9.]+)") -AWAKE = re.compile(r"mcu_awake=([0-9.]+)") -RETR = re.compile(r"bytes_retransmit=([0-9]+)") -INVAL = re.compile(r"bytes_invalid=([0-9]+)") - -hits = [] -with open(sys.argv[3]) as fh: - logs = [x.strip() for x in fh if x.strip()] - -for path in logs: - base_epoch = base_mono = None - now_mono = None - last_stats = "" - try: - src = open(path, errors="replace") - except OSError: - continue - with src: - for line in src: - m = START.search(line) - if m: - base_epoch, base_mono = float(m.group(1)), float(m.group(2)) - now_mono = base_mono - continue - m = STATS.match(line) - if m: - now_mono = float(m.group(1)) - last_stats = line.rstrip() - continue - # Klipper prints its own source into tracebacks, so self._error("Unable to connect") lands in the log looking like a real event; real messages start at column 0, traceback/source lines are indented. - if line[:1].isspace() or line.startswith(("File \"", "Traceback")): - continue - if not SHUT.search(line): - continue - when = None - if base_epoch is not None and now_mono is not None: - when = base_epoch + (now_mono - base_mono) - hits.append((when, path, line.strip()[:160], last_stats)) - -if not hits: - print("no klipper shutdown events found in %d log file(s)" % len(logs)) - sys.exit(0) - -# One shutdown cascades into a dozen lines, so collapse anything inside the same window; a rotated log that begins mid-session carries no epoch anchor, so those collapse by message instead. -merged = [] -seen_untimed = set() -for when, path, text, stats in hits: - if when is None: - key = (path, text[:60]) - if key in seen_untimed: - continue - seen_untimed.add(key) - elif merged and merged[-1][0] is not None and when - merged[-1][0] < window: - continue - merged.append((when, path, text, stats)) - -if floor: - print("kernel journal covers %s onward, anything older cannot be correlated" % __import__( - "time").strftime("%Y-%m-%d %H:%M:%S", __import__("time").localtime(floor))) - -verdicts = [] -for when, path, text, stats in merged: - print("") - stamp = "time unknown, log starts mid-session" if when is None else __import__("time").strftime( - "%Y-%m-%d %H:%M:%S", __import__("time").localtime(when) - ) - print("SHUTDOWN %s (%s)" % (stamp, path.rsplit("/", 1)[-1])) - print(" klipper: %s" % text) - near = [] - if when is not None: - near = [(t, msg) for t, msg in events if abs(t - when) <= window] - nodata = when is None or (floor and when < floor - window) - if near: - for t, msg in near[:14]: - print(" usb %+6.1fs %s" % (t - when, msg[:150])) - elif when is None: - print(" usb (rotated log has no timestamp anchor, cannot correlate)") - elif nodata: - print(" usb (predates the kernel journal, no data)") - else: - print(" usb (no kernel USB activity within +/-%ds)" % window) - - blob = " ".join(m for _, m in near) - cause = [] - if re.search(r"over-current|overcurrent|Cannot enable|not enough power", blob): - cause.append("POWER: the port current limit tripped and VBUS was cut for the whole port group") - if re.search(r"uas_eh_|reset SuperSpeed", blob): - cause.append("BUS: a UAS/xhci device reset bounced the link the MCU shares") - if re.search(r"error -71|error -110|error -32|device descriptor read|unable to enumerate|not accepting address", blob): - cause.append("ENUM: link training failed and retried, stalling the controller") - if re.search(r"Under-voltage", blob): - cause.append("POWER: the SoC itself browned out (PSU cannot carry the stick's inrush)") - if re.search(r"USB disconnect|disconnected from tty", blob): - cause.append("LINK: the MCU's own serial device disconnected") - if "Timer too close" in text and not near: - sl = LOAD.search(stats) - cause.append( - "LOAD: host overload with no USB fault logged (sysload=%s at the last stats line)" - % (sl.group(1) if sl else "?") - ) - if re.search(r"Emergency|M112|Button Pressed|emergency stop", text): - cause = ["OPERATOR: emergency stop, not a fault"] - if not cause: - if when is None: - cause.append("NO DATA: rotated log has no timestamp anchor, correlation impossible") - elif nodata: - cause.append("NO DATA: predates the kernel journal, USB state then is unknowable") - else: - cause.append("UNKNOWN: no USB or load signature, look at wiring/EMI") - for c in cause: - print(" cause -> %s" % c) - verdicts.extend(cause) - for label, rx in (("sysload", LOAD), ("mcu_awake", AWAKE), ("retransmit", RETR), ("invalid", INVAL)): - m = rx.search(stats) - if m: - print(" stats %-10s %s" % (label, m.group(1))) - -print("") -print("%d distinct shutdown event(s)" % len(merged)) -kinds = sorted({c.split(":")[0] for c in verdicts}) -print("dominant class(es): %s" % ", ".join(kinds)) -PYEOF - local rc=$? - rm -f /tmp/.bs-usb-events.$$ /tmp/.bs-usb-logs.$$ - return $rc -} - -# ------------------------------------------------------------------- assertions -# Each returns 0/1 and prints the detail, so both the report and --check share one implementation. - -MCU_DEVS="" -MCU_HUBS="" -resolve_mcus() { - local s node dev - MCU_DEVS="" MCU_HUBS="" - for s in $(mcu_serials); do - node=$(readlink -f "$s" 2>/dev/null) || continue - [ -e "$node" ] || continue - case "$node" in /dev/tty*) ;; *) continue ;; esac - dev=$(tty_usbdev "$node") || continue - MCU_DEVS="$MCU_DEVS $dev" - MCU_HUBS="$MCU_HUBS $(dev_roothub "$dev")" - done - MCU_DEVS="${MCU_DEVS# }" - MCU_HUBS="$(echo "$MCU_HUBS" | tr ' ' '\n' | sort -u | tr '\n' ' ')" -} - -# A bare /dev/ttyUSB0 is assigned in enumeration order, so inserting storage can hand klipper the wrong device on next boot; by-id and by-path survive it. -a_serial_pinned() { - local s loose="" - for s in $(mcu_serials); do - case "$s" in /dev/serial/by-id/* | /dev/serial/by-path/*) ;; *) loose="$loose $s" ;; esac - done - [ -z "$loose" ] || { - echo "serial pinned by bare device node:$loose (enumeration order moves it when storage appears)" - return 1 - } -} - -# Returns 2, not 0, when no port exposes the counter: a Pi 5 can log 58 over-current trips with over_current_count still reading 0, so a green tick here would prove nothing on the worst boxes. -a_no_overcurrent_counters() { - local f n hits="" seen=0 - for f in /sys/bus/usb/devices/*-port*/over_current_count; do - [ -f "$f" ] || continue - n=$(sysread "$f") - case "${n:-x}" in '' | *[!0-9]*) continue ;; esac - seen=1 - [ "$n" -gt 0 ] && hits="$hits $(basename "$(dirname "$f")")=$n" - done - [ -z "$hits" ] || { - echo "ports have latched over-current events:$hits (a stick tripped the limit and VBUS was cut)" - return 1 - } - [ "$seen" = 1 ] || { - echo "no port exposes over_current_count on this kernel, see the kernel-log check instead" - return 2 - } -} - -a_no_overcurrent_journal() { - local hits - journal_readable || return 0 - hits=$(journalctl -k -b --no-pager 2>/dev/null | grep -aiE 'over-current|overcurrent|Cannot enable.*USB cable' | tail -4) - [ -z "$hits" ] || { - echo "$hits" - return 1 - } -} - -a_no_uas_resets() { - local hits - journal_readable || return 0 - hits=$(journalctl -k -b --no-pager 2>/dev/null | grep -aE 'uas_eh_|reset SuperSpeed' | tail -4) - [ -z "$hits" ] || { - echo "$hits" - return 1 - } -} - -a_no_enum_errors() { - local hits - journal_readable || return 0 - hits=$(journalctl -k -b --no-pager 2>/dev/null | - grep -aE 'error -71|error -110|device descriptor read|unable to enumerate|not accepting address' | tail -4) - [ -z "$hits" ] || { - echo "$hits" - return 1 - } -} - -# "disconnected from ttyACM" is usbserial-driver wording, so a cdc_acm board (Beacon, most native-USB MCUs) can drop off the bus all boot without matching it: match its own bus address too. -a_no_mcu_disconnect() { - local hits pat d esc - journal_readable || return 0 - pat='disconnected from ttyUSB|disconnected from ttyACM|usb_serial_generic_read_bulk_callback' - resolve_mcus - for d in $MCU_DEVS; do - esc=$(printf '%s' "$d" | sed 's/\./\\./g') - pat="$pat|usb $esc: USB disconnect|cdc_acm $esc:[^ ]*: device disconnected" - done - hits=$(journalctl -k -b --no-pager 2>/dev/null | grep -aE "$pat" | tail -4) - [ -z "$hits" ] || { - echo "$hits" - return 1 - } -} - -# usbcore autosuspends idle ports, and a resumed port renegotiates while klipper is mid-transfer. -a_mcu_autosuspend_off() { - local d ctrl bad="" - resolve_mcus - [ -n "$MCU_DEVS" ] || return 0 - for d in $MCU_DEVS; do - ctrl=$(sysread "$d/power/control") - [ "$ctrl" = auto ] && bad="$bad $(basename "$d")" - done - [ -z "$bad" ] || { - echo "MCU port(s)$bad set to power/control=auto (a resume renegotiates mid-print)" - return 1 - } -} - -# On a Pi4/CM4 every A port is behind one xhci controller, so this is advisory, not a defect. -a_mcu_not_sharing_ss_hub() { - local d shared="" - resolve_mcus - [ -n "$MCU_DEVS" ] || return 0 - for d in $(usb_devs); do - case " $MCU_DEVS " in *" $d "*) continue ;; esac - dev_is_ss "$d" || continue - case "$MCU_HUBS" in *"$(dev_roothub "$d")"*) shared="$shared $(basename "$d")($(dev_label "$d"))" ;; esac - done - [ -z "$shared" ] || { - echo "SuperSpeed device(s) on the MCU's controller:$shared (a controller reset takes the MCU with it)" - return 1 - } -} - -# UAS is the single most common source of xhci resets on Pi-class hosts. -a_no_uas_bound() { - local d drv hits="" - for d in $(usb_devs); do - drv=$(dev_drivers "$d") - case "$drv" in *uas*) hits="$hits $(basename "$d")($(dev_label "$d"))" ;; esac - done - [ -z "$hits" ] || { - echo "bound to the uas driver:$hits -- pin usb-storage.quirks=VID:PID:u in cmdline.txt to force BOT" - return 1 - } -} - -# ntfs-3g and exfat-fuse cost several times more host cpu than the in-kernel drivers, and klipper's deadline is measured in milliseconds. -a_no_fuse_storage() { - local hits - hits=$(awk '$3 ~ /fuse/ && $1 ~ /^\/dev\// {print $1" ("$3" on "$2")"}' /proc/mounts 2>/dev/null) - [ -z "$hits" ] || { - echo "$hits mounted through FUSE (userspace filesystem, spikes cpu during transfers)" - return 1 - } -} - -# a_no_fuse_storage only fires once a bad stick is already mounted (after the print died); this fires before one ever is, since no in-kernel driver means every customer stick takes FUSE. -a_exfat_in_kernel() { - local missing="" - grep -qw exfat /proc/filesystems 2>/dev/null || modinfo exfat >/dev/null 2>&1 || missing="exfat" - grep -qw ntfs3 /proc/filesystems 2>/dev/null || modinfo ntfs3 >/dev/null 2>&1 || missing="$missing ntfs3" - [ -z "${missing// /}" ] || { - echo "no in-kernel driver for:$missing (Windows formats sticks over 32GB as exfat, so they land on FUSE)" - return 1 - } -} - -# Raising the Pi's own budget hides an oversubscribed hub, it doesn't fix it: the hub still has one upstream lead, and a bus-powered one may only draw 500mA through it regardless of its children. -a_hub_not_oversubscribed() { - local h c n sum name hits="" - for h in /sys/bus/usb/devices/*/; do - name=$(basename "$h") - # Root hubs are fed by the board, not by an upstream port, so their subtree total means nothing. - case "$name" in usb*) continue ;; esac - [ "$(sysread "$h/bDeviceClass")" = 09 ] || continue - sum=0 - for c in "$h"*/bMaxPower; do - [ -f "$c" ] || continue - n=$(sysread "$c" | tr -dc '0-9') - [ -n "$n" ] || n=0 - sum=$((sum + n)) - done - [ "$sum" -gt 500 ] && hits="$hits $name=${sum}mA" - done - [ -z "${hits// /}" ] || { - echo "hub subtree draw exceeds the 500mA a bus-powered hub may take upstream:$hits (fit a self-powered hub)" - return 1 - } -} - -# Live firmware says what booted, config.txt says what boots next, and they diverge exactly when the box is at risk: a line added but never rebooted, or a reflash that silently dropped it again. -a_usb_current_budget() { - local model cfg f live=x persisted=0 - model=$(sysread /proc/device-tree/model) - case "$model" in *"Raspberry Pi 5"*) ;; *) - echo "not a Pi 5, usb_max_current_enable does not exist on this board" - return 2 - ;; - esac - if command -v vcgencmd >/dev/null 2>&1; then - cfg=$(vcgencmd get_config usb_max_current_enable 2>/dev/null | cut -d= -f2) - case "${cfg:-x}" in 0 | 1) live=$cfg ;; esac - fi - for f in /boot/firmware/config.txt /boot/config.txt; do - [ -r "$f" ] || continue - grep -qE '^[[:space:]]*usb_max_current_enable[[:space:]]*=[[:space:]]*1' "$f" && persisted=1 - break - done - if [ "$live" = x ]; then - [ "$persisted" = 1 ] || { - echo "firmware unreadable and no usb_max_current_enable=1 in config.txt: ports may be capped at 600mA" - return 1 - } - echo "vcgencmd unavailable: config.txt carries the line but the running budget was not verified" - return 2 - fi - [ "$live" = 1 ] || { - [ "$persisted" = 1 ] && - echo "usb_max_current_enable=1 is in config.txt but has not been applied: reboot to raise the budget" - echo "Pi 5 running with usb_max_current_enable unset: ports are capped at 600mA total, below one USB3 stick's inrush" - return 1 - } - [ "$persisted" = 1 ] || { - echo "budget is raised in the running firmware but config.txt does not carry it: the next reboot drops back to 600mA" - return 1 - } -} - -# Klipper's 'mcu' rides CAN behind the gs_usb adapter, so an MCU loss with no USB disconnect lands here. -a_can_link_healthy() { - local i ifs d st berr c v bad="" - command -v ip >/dev/null 2>&1 || return 2 - ifs=$(ip -o link show type can 2>/dev/null | sed -n 's/^[0-9]\{1,\}: \([^:@ ]\{1,\}\).*/\1/p') - [ -n "$ifs" ] || { - echo "no CAN interface on this box" - return 2 - } - for i in $ifs; do - d=$(ip -details link show "$i" 2>/dev/null) - case "$d" in *"state UP"*) ;; *) bad="$bad $i:link-down" ;; esac - st=$(printf '%s' "$d" | grep -oE 'state (ERROR-ACTIVE|ERROR-WARNING|ERROR-PASSIVE|BUS-OFF|STOPPED|SLEEPING)' | tail -1 | awk '{print $2}') - case "${st:-ERROR-ACTIVE}" in ERROR-ACTIVE) ;; *) bad="$bad $i:$st" ;; esac - berr=$(printf '%s' "$d" | grep -oE 'berr-counter tx [0-9]+ rx [0-9]+' | awk '{print $3 + $5}') - [ "${berr:-0}" -gt 0 ] 2>/dev/null && bad="$bad $i:berr=$berr" - for c in rx_errors tx_errors rx_dropped tx_dropped rx_over_errors; do - v=$(sysread "/sys/class/net/$i/statistics/$c") - [ "${v:-0}" -gt 0 ] 2>/dev/null && bad="$bad $i:$c=$v" - done - done - [ -z "$bad" ] || { - echo "CAN link degraded:$bad (tx_dropped is the txqueue overflowing, the classic 'Lost communication with MCU')" - return 1 - } -} - -# restart-ms 0 leaves a bus-off CAN link dead until someone reboots, and the field has no SSH. -a_can_recovery_sane() { - local i ifs d rms qlen bad="" - command -v ip >/dev/null 2>&1 || return 2 - ifs=$(ip -o link show type can 2>/dev/null | sed -n 's/^[0-9]\{1,\}: \([^:@ ]\{1,\}\).*/\1/p') - [ -n "$ifs" ] || { - echo "no CAN interface on this box" - return 2 - } - for i in $ifs; do - d=$(ip -details link show "$i" 2>/dev/null) - rms=$(printf '%s' "$d" | grep -oE 'restart-ms [0-9]+' | tail -1 | awk '{print $2}') - [ "${rms:-0}" -gt 0 ] 2>/dev/null || bad="$bad $i:restart-ms=0" - qlen=$(sysread "/sys/class/net/$i/tx_queue_len") - [ "${qlen:-0}" -ge 128 ] 2>/dev/null || bad="$bad $i:txqueuelen=${qlen:-?}" - done - [ -z "$bad" ] || { - echo "CAN recovery weak:$bad (bus-off self-heals only with restart-ms>0, txqueuelen<128 drops frames under load)" - return 1 - } -} - -# A silently read-only boot partition makes every config.txt fix a no-op while tee still prints success. -a_boot_config_writable() { - local f mp opts fs - command -v findmnt >/dev/null 2>&1 || return 2 - for f in /boot/firmware/config.txt /boot/config.txt; do - [ -f "$f" ] && break - done - [ -f "$f" ] || { - echo "no config.txt on this box" - return 2 - } - fs=$(findmnt -n -o FSTYPE -T "$f" 2>/dev/null) - mp=$(findmnt -n -o TARGET -T "$f" 2>/dev/null) - opts=$(findmnt -n -o OPTIONS -T "$f" 2>/dev/null) - case ",$opts," in *,ro,*) - echo "$mp is mounted read-only: config.txt writes fail while tee still echoes success" - return 1 - ;; - esac - case "$fs" in vfat | msdos) ;; *) - echo "$f is on $fs, not the vfat boot partition: firmware reads a different file than this one" - return 1 - ;; - esac -} - -# The field has no SSH, so a journal that dies at reboot leaves a recurring fault permanently undiagnosable. -a_journal_persistent() { - local boots - journal_readable || return 2 - [ -d /var/log/journal ] || { - echo "journal is volatile (no /var/log/journal): every reboot erases the only field evidence" - return 1 - } - boots=$(journalctl --list-boots --no-pager 2>/dev/null | grep -cE '^ *-?[0-9]+ +[0-9a-f]{32}') - [ "${boots:-0}" -ge 2 ] || { - echo "only ${boots:-0} boot retained: anything before the last reboot cannot be correlated" - return 1 - } -} - -# An SD or eMMC stall freezes userspace long enough for klipper to miss timers and drop the MCU. -a_no_storage_io_errors() { - local hits - journal_readable || return 2 - hits=$(journalctl -k -b --no-pager 2>/dev/null | - grep -aE '(mmc[0-9]+|mmcblk[0-9]+|nvme[0-9]+n[0-9]+)[: ].*(error|timeout|timed out|reset|recovery failed)|EXT4-fs .*(error|remounting)' | - tail -4) - [ -z "$hits" ] || { - echo "$hits" - return 1 - } -} - -# A bus-powered hub browning out drops its children with no kernel message, so the sibling cluster is the only trace. -a_no_hub_brownout() { - local oc hit - journal_readable || return 2 - oc=$(journalctl -k -b --no-pager 2>/dev/null | grep -acE 'over-?current') - [ "${oc:-0}" = 0 ] || return 0 - hit=$(journalctl -k -b -o short-unix --no-pager 2>/dev/null | - grep -aE 'usb [0-9]+-[0-9.]+: USB disconnect' | awk ' - { - ts = $1 + 0 - dev = "" - for (i = 1; i <= NF; i++) if ($i == "usb") { dev = $(i + 1); sub(/:$/, "", dev); break } - if (dev == "") next - n = split(dev, part, ".") - if (n < 2) next - hub = part[1] - for (j = 2; j < n; j++) hub = hub "." part[j] - k++; T[k] = ts; H[k] = hub; D[k] = dev - } - END { - for (a = 1; a <= k; a++) { - split("", seen, ":") - seen[D[a]] = 1 - c = 1 - for (b = a + 1; b <= k; b++) { - if (T[b] - T[a] > 5) break - if (H[b] == H[a] && !(D[b] in seen)) { seen[D[b]] = 1; c++ } - } - if (c >= 2) { printf "hub %s lost %d children within 5s\n", H[a], c; exit } - } - }') - [ -z "$hit" ] || { - echo "$hit with no over-current logged: signature of a bus-powered hub browning out, not the Pi limiter" - return 1 - } -} - -a_no_correlated_shutdown() { - local rpt hits - rpt=$(correlate 25 2>/dev/null) - case "$rpt" in - *unavailable*) return 0 ;; - *"no klipper shutdown events found"*) return 0 ;; - esac - # An operator E-stop and an unexplained stop are not USB faults: only a named mechanism counts, - # otherwise every box that ever had its button pressed fails this assertion forever. - hits=$(echo "$rpt" | grep -E 'cause -> (POWER|BUS|ENUM|LINK|LOAD)' | sort -u) - [ -n "$hits" ] || return 0 - echo "$(echo "$rpt" | grep -c '^SHUTDOWN') shutdown(s) in the logs, USB/load-attributable:" - echo "$hits" | head -8 - return 1 -} - -# ---------------------------------------------------------------------- report - -r_host() { - hdr "host and power" - kv "model" "$(sysread /proc/device-tree/model || echo unknown)" - kv "kernel" "$(uname -r)" - kv "cmdline" "$(sysread /proc/cmdline | tr ' ' '\n' | grep -E 'usb|dwc' | tr '\n' ' ')" - if command -v vcgencmd >/dev/null 2>&1; then - local t - t=$(vcgencmd get_throttled 2>/dev/null | cut -d= -f2) - kv "throttled" "$t" - case "${t:-x}" in '' | x | *[!0-9a-fA-Fx]*) ;; *) - [ $((t & 0x1)) -ne 0 ] && bad "undervoltage RIGHT NOW: the PSU cannot carry the current load" - [ $((t & 0x10000)) -ne 0 ] && susp "undervoltage happened earlier this boot (sticky bit)" - ;; - esac - kv "usb_max_current_enable" "$(vcgencmd get_config usb_max_current_enable 2>/dev/null | cut -d= -f2)" - fi - local f n - for f in /sys/bus/usb/devices/*-port*/over_current_count; do - [ -f "$f" ] || continue - n=$(sysread "$f") - case "${n:-0}" in '' | 0 | *[!0-9]*) continue ;; esac - bad "$(basename "$(dirname "$f")") over_current_count=$n" - done -} - -r_topology() { - hdr "usb topology" - resolve_mcus - local d mark drv - for d in $(usb_devs); do - mark=" " - case " $MCU_DEVS " in *" $d "*) mark="MCU" ;; esac - dev_is_ss "$d" && [ "$mark" = " " ] && mark="SS " - drv=$(dev_drivers "$d") - out "$(printf ' %s %-10s %-6s %-7s %-22s %s' \ - "$mark" "$(basename "$d")" "$(sysread "$d/speed")" \ - "$(sysread "$d/bMaxPower")" "${drv:--}" "$(dev_label "$d")")" - done - out "" - kv "MCU serial(s)" "$(mcu_serials | tr '\n' ' ')" - kv "MCU root hub(s)" "${MCU_HUBS:-none resolved}" -} - -r_checks() { - hdr "risk factors" - local name fn tier detail rc - # Same tiers as do_check: an operator who cannot tell a blocker from an advisory learns to skim - # past both, so a FAIL prints BAD and only a WARN prints ????. - while IFS='|' read -r fn tier name; do - [ -n "$fn" ] || continue - detail=$("$fn" 2>&1) - rc=$? - case "$rc" in - 0) ok "$name" && continue ;; - 2) susp "$name (not measurable here)" ;; - *) case "$tier" in FAIL) bad "$name" ;; *) susp "$name" ;; esac ;; - esac - [ -n "$detail" ] && out "$(echo "$detail" | sed 's/^/ /')" - done <<'ROWS' -a_serial_pinned|WARN|MCU serial pinned by stable path -a_no_overcurrent_counters|FAIL|no latched port over-current counters -a_no_overcurrent_journal|FAIL|no over-current in this boot's kernel log -a_no_uas_resets|WARN|no UAS/xhci device resets this boot -a_no_enum_errors|WARN|no USB enumeration errors this boot -a_no_mcu_disconnect|FAIL|MCU serial never disconnected this boot -a_mcu_autosuspend_off|WARN|autosuspend off on the MCU port -a_mcu_not_sharing_ss_hub|WARN|no SuperSpeed device on the MCU's controller -a_no_uas_bound|WARN|no storage bound to the uas driver -a_no_fuse_storage|WARN|no FUSE-mounted storage -a_exfat_in_kernel|WARN|exfat/ntfs handled in-kernel, not by FUSE -a_hub_not_oversubscribed|WARN|no hub carrying more than its upstream share -a_usb_current_budget|FAIL|USB current budget raised -a_can_link_healthy|FAIL|CAN link to the MCU clean -a_can_recovery_sane|WARN|CAN can self-heal from bus-off -a_boot_config_writable|FAIL|boot config.txt actually writable -a_journal_persistent|WARN|kernel journal survives a reboot -a_no_storage_io_errors|WARN|no SD/eMMC I/O errors this boot -a_no_hub_brownout|WARN|no hub brownout signature this boot -ROWS -} - -r_history() { - hdr "klipper shutdowns correlated with USB events" - out "$(correlate 25)" -} - -r_advice() { - hdr "what to do about it" - out " POWER raise the budget (Pi 5: usb_max_current_enable=1 in config.txt with a 5A PSU) or" - out " move the stick to a self-powered hub. A tripped port limit cuts VBUS for every" - out " port in the group, so the MCU dies with the stick." - out " BUS force the drive off UAS: lsusb for its VID:PID, then append" - out " usb-storage.quirks=VID:PID:u to /boot/firmware/cmdline.txt and reboot." - out " Confirm with 'lsusb -t' that it binds usb-storage, not uas." - out " ENUM move the MCU to a different controller than the stick, and use a shielded cable" - out " with a ferrite. USB3 emits broadband noise across 2.4GHz." - out " LOAD keep gcode and the moonraker database off the stick, mount noatime, and prefer" - out " the in-kernel exfat/ntfs3 drivers over the FUSE ones." - out " ALWAYS pin the MCU by /dev/serial/by-id/ (or by-path/) so storage cannot renumber it." -} - -# ----------------------------------------------------------------------- watch - -printer_state() { - curl -s -m 5 "$MOON/printer/objects/query?print_stats" 2>/dev/null | - tr '{},' '\n' | grep '"state"' | head -1 | cut -d'"' -f4 -} - -do_watch() { - local st start i node d present gone was_gone drops gone_at longest ktmp kpid kseen knew - st=$(printer_state) - # --monitor runs the identical loop without the banner: the guard exists only because --watch tells - # the operator to hot-plug a drive, and observing a print is not the same act as provoking it. - if ! $MONITOR; then - case "${st:-unknown}" in - printing | paused | unknown | '') - if $FORCE; then - out "printer state is ${st:-unknown}, --force given, watching anyway" - else - out "refusing: printer state is ${st:-unknown}. Reproducing this fault kills the job." - out "Re-run after the print, or with --force if you accept losing it." - return 2 - fi - ;; - esac - fi - - resolve_mcus - hdr "live capture (${WATCH_SECS}s)" - if $MONITOR; then - out " Passive monitor, printer state ${st:-unknown}. Nothing is plugged, mounted or written." - out " Change nothing while this runs: the point is to see what the box does unprovoked." - else - out " Insert the suspect USB drive NOW. Leave it in. Do not touch anything else." - fi - out " Watching kernel USB events, SoC voltage, host load and the MCU device node." - out "" - start=$(date +%s) - i=0 - # Report the transitions, not the level: one line per second says nothing, while the length of each - # gap is what separates a re-enumeration (under 2s) from a port that stays dead until replug. - gone=0 - was_gone=0 - drops=0 - gone_at=0 - longest=0 - kseen=0 - knew=0 - kpid="" - # Kernel lines are drained into the same timeline as the device state on purpose: the operator has - # to see the over-current or the reset land next to the drop, not in a separate block a minute later. - ktmp=$(mktemp 2>/dev/null) || ktmp="" - if [ -n "$ktmp" ]; then - journalctl -kf -n0 -o short-iso --no-pager >"$ktmp" 2>/dev/null & - kpid=$! - fi - while [ "$i" -lt "$WATCH_SECS" ]; do - present="" - for d in $(mcu_serials); do - node=$(readlink -f "$d" 2>/dev/null) - if [ -e "${node:-/nonexistent}" ]; then present="$present +"; else present="$present -MISSING($d)"; fi - done - case "$present" in - *MISSING*) gone=1 ;; - *) gone=0 ;; - esac - if [ "$gone" = 1 ] && [ "$was_gone" = 0 ]; then - drops=$((drops + 1)) - gone_at=$i - bad "$(date +%T) t=${i}s MCU serial gone (drop #$drops):$present" - elif [ "$gone" = 0 ] && [ "$was_gone" = 1 ]; then - [ $((i - gone_at)) -gt "$longest" ] && longest=$((i - gone_at)) - out " $(date +%T) t=${i}s MCU serial back after $((i - gone_at))s" - fi - was_gone=$gone - if [ -n "$ktmp" ]; then - knew=$(wc -l <"$ktmp" 2>/dev/null) - case "${knew:-x}" in '' | *[!0-9]*) knew=$kseen ;; esac - if [ "$knew" -gt "$kseen" ]; then - sed -n "$((kseen + 1)),${knew}p" "$ktmp" 2>/dev/null | grep -aE "$USB_PAT" | - while IFS= read -r kline; do out " kern $kline"; done - kseen=$knew - fi - fi - if [ $((i % 15)) -eq 0 ]; then - out "$(printf ' %s t=%3ds load=%s throttled=%s mcu=%s' \ - "$(date +%T)" "$i" "$(cut -d' ' -f1 /proc/loadavg)" \ - "$(command -v vcgencmd >/dev/null 2>&1 && vcgencmd get_throttled 2>/dev/null | cut -d= -f2 || echo n/a)" \ - "$present")" - fi - sleep 1 - i=$((i + 1)) - done - [ -n "$kpid" ] && kill "$kpid" 2>/dev/null - [ -n "$ktmp" ] && rm -f "$ktmp" - - hdr "mcu link during the capture" - if [ "$drops" -gt 0 ]; then - bad "MCU serial dropped $drops time(s), longest gap ${longest}s" - out " Under 2s per gap is the device re-enumerating: port power or link reset, not a dead board." - out " A gap that never closes is a port held down until the drive is pulled." - else - ok "MCU serial stayed present for the whole capture" - fi - - hdr "kernel USB events during the capture" - local ev - ev=$(journalctl -k -o short-iso --no-pager --since "@$start" 2>/dev/null | grep -aE "$USB_PAT") - if [ -n "$ev" ]; then out "$ev"; else out " (none)"; fi - - hdr "storage that appeared" - local d2 drv - for d2 in $(usb_devs); do - drv=$(dev_drivers "$d2") - case "$drv" in - *uas* | *usb-storage*) - out " $(basename "$d2") speed=$(sysread "$d2/speed") power=$(sysread "$d2/bMaxPower") driver=$drv $(dev_label "$d2")" - case "$drv" in - *uas*) susp " bound to uas: append usb-storage.quirks=$(sysread "$d2/idVendor"):$(sysread "$d2/idProduct"):u to cmdline.txt" ;; - esac - ;; - esac - done - - hdr "klipper reaction" - local kl - kl=$(tail -400 "$LOGDIR/klippy.log" 2>/dev/null | - grep -aE 'Lost communication|Timer too close|shutdown:|Transition to shutdown|Unable to open serial' | tail -8) - if [ -n "$kl" ]; then - bad "klipper faulted during the capture:" - out "$kl" - else - ok "klipper stayed up for the whole capture" - fi - r_checks -} - -# ----------------------------------------------------------------------- modes - -do_check() { - local row fn tier need name d - # Field 4 marks the rows that read the journal: without it they would silently pass on a box - # whose journal is unreadable, which is the exact false PASS this suite exists to prevent. - for row in \ - "a_no_correlated_shutdown|FAIL|J|no klipper shutdown attributable to USB" \ - "a_no_overcurrent_counters|FAIL|-|no latched USB over-current counters" \ - "a_no_overcurrent_journal|FAIL|J|no USB over-current this boot" \ - "a_no_mcu_disconnect|FAIL|J|MCU serial never disconnected this boot" \ - "a_serial_pinned|WARN|-|MCU serial pinned by stable path" \ - "a_no_uas_resets|WARN|J|no UAS/xhci device resets this boot" \ - "a_no_enum_errors|WARN|J|no USB enumeration errors this boot" \ - "a_mcu_autosuspend_off|WARN|-|autosuspend off on the MCU port" \ - "a_no_uas_bound|WARN|-|no storage bound to the uas driver" \ - "a_no_fuse_storage|WARN|-|no FUSE-mounted storage" \ - "a_mcu_not_sharing_ss_hub|WARN|-|no SuperSpeed device on the MCU's controller" \ - "a_exfat_in_kernel|WARN|-|exfat/ntfs handled in-kernel, not by FUSE" \ - "a_hub_not_oversubscribed|WARN|-|no hub carrying more than its upstream share" \ - "a_usb_current_budget|FAIL|-|USB current budget raised" \ - "a_can_link_healthy|FAIL|-|CAN link to the MCU clean" \ - "a_boot_config_writable|FAIL|-|boot config.txt actually writable" \ - "a_can_recovery_sane|WARN|-|CAN can self-heal from bus-off" \ - "a_journal_persistent|WARN|-|kernel journal survives a reboot" \ - "a_no_storage_io_errors|WARN|J|no SD/eMMC I/O errors this boot" \ - "a_no_hub_brownout|WARN|J|no hub brownout signature this boot"; do - IFS='|' read -r fn tier need name <<<"$row" - if [ "$need" = J ] && ! journal_readable; then - emit SKIP "$name" "kernel journal unreadable" - continue - fi - d=$("$fn" 2>&1) - case $? in - 0) emit PASS "$name" ;; - 2) emit SKIP "$name" "$(echo "$d" | tr '\n' ';' | cut -c1-300)" ;; - *) emit "$tier" "$name" "$(echo "$d" | tr '\n' ';' | cut -c1-300)" ;; - esac - done -} - -case "$MODE" in - check) do_check ;; - history) r_history ;; - watch) do_watch ;; - report) - out "BlocksScreen USB fault forensics $(date -Is) host=$(hostname)" - r_host - r_topology - r_checks - r_history - r_advice - ;; -esac - -if [ -n "$REPORT" ]; then - $QUIET || printf '\nreport written to %s (downloadable from the UI, no SSH needed)\n' "$REPORT" -fi