diff options
Diffstat (limited to 'examples/widgets/mainwindows/application')
3 files changed, 431 insertions, 445 deletions
diff --git a/examples/widgets/mainwindows/application/application.py b/examples/widgets/mainwindows/application/application.py index d68e77b41..e17c0cae4 100644 --- a/examples/widgets/mainwindows/application/application.py +++ b/examples/widgets/mainwindows/application/application.py @@ -1,275 +1,261 @@ +# Copyright (C) 2013 Riverbank Computing Limited. +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +from __future__ import annotations -############################################################################# -## -## Copyright (C) 2013 Riverbank Computing Limited. -## Copyright (C) 2016 The Qt Company Ltd. -## Contact: http://www.qt.io/licensing/ -## -## This file is part of the Qt for Python examples of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:BSD$ -## You may use this file under the terms of the BSD license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of The Qt Company Ltd nor the names of its -## contributors may be used to endorse or promote products derived -## from this software without specific prior written permission. -## -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -## $QT_END_LICENSE$ -## -############################################################################# - -from PySide2 import QtCore, QtGui, QtWidgets - -import application_rc - -class MainWindow(QtWidgets.QMainWindow): +from argparse import ArgumentParser, RawTextHelpFormatter +import sys + +from PySide6.QtCore import (QByteArray, QFile, QFileInfo, QSaveFile, QSettings, + QTextStream, Qt, Slot) +from PySide6.QtGui import QAction, QIcon, QKeySequence +from PySide6.QtWidgets import (QApplication, QFileDialog, QMainWindow, + QMessageBox, QTextEdit) + +import application_rc # noqa: F401 + + +class MainWindow(QMainWindow): def __init__(self): - super(MainWindow, self).__init__() + super().__init__() - self.curFile = '' + self._cur_file = '' - self.textEdit = QtWidgets.QTextEdit() - self.setCentralWidget(self.textEdit) + self._text_edit = QTextEdit() + self.setCentralWidget(self._text_edit) - self.createActions() - self.createMenus() - self.createToolBars() - self.createStatusBar() + self.create_actions() + self.create_menus() + self.create_tool_bars() + self.create_status_bar() - self.readSettings() + self.read_settings() - self.textEdit.document().contentsChanged.connect(self.documentWasModified) + self._text_edit.document().contentsChanged.connect(self.document_was_modified) - self.setCurrentFile('') + self.set_current_file('') self.setUnifiedTitleAndToolBarOnMac(True) def closeEvent(self, event): - if self.maybeSave(): - self.writeSettings() + if self.maybe_save(): + self.write_settings() event.accept() else: event.ignore() - def newFile(self): - if self.maybeSave(): - self.textEdit.clear() - self.setCurrentFile('') + @Slot() + def new_file(self): + if self.maybe_save(): + self._text_edit.clear() + self.set_current_file('') + @Slot() def open(self): - if self.maybeSave(): - fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self) + if self.maybe_save(): + fileName, filtr = QFileDialog.getOpenFileName(self) if fileName: - self.loadFile(fileName) + self.load_file(fileName) + @Slot() def save(self): - if self.curFile: - return self.saveFile(self.curFile) + if self._cur_file: + return self.save_file(self._cur_file) - return self.saveAs() + return self.save_as() - def saveAs(self): - fileName, filtr = QtWidgets.QFileDialog.getSaveFileName(self) + @Slot() + def save_as(self): + fileName, filtr = QFileDialog.getSaveFileName(self) if fileName: - return self.saveFile(fileName) + return self.save_file(fileName) return False + @Slot() def about(self): - QtWidgets.QMessageBox.about(self, "About Application", - "The <b>Application</b> example demonstrates how to write " - "modern GUI applications using Qt, with a menu bar, " - "toolbars, and a status bar.") - - def documentWasModified(self): - self.setWindowModified(self.textEdit.document().isModified()) - - def createActions(self): - self.newAct = QtGui.QAction(QtGui.QIcon(':/images/new.png'), "&New", - self, shortcut=QtGui.QKeySequence.New, - statusTip="Create a new file", triggered=self.newFile) - - self.openAct = QtGui.QAction(QtGui.QIcon(':/images/open.png'), - "&Open...", self, shortcut=QtGui.QKeySequence.Open, - statusTip="Open an existing file", triggered=self.open) - - self.saveAct = QtGui.QAction(QtGui.QIcon(':/images/save.png'), - "&Save", self, shortcut=QtGui.QKeySequence.Save, - statusTip="Save the document to disk", triggered=self.save) - - self.saveAsAct = QtGui.QAction("Save &As...", self, - shortcut=QtGui.QKeySequence.SaveAs, - statusTip="Save the document under a new name", - triggered=self.saveAs) - - self.exitAct = QtGui.QAction("E&xit", self, shortcut="Ctrl+Q", - statusTip="Exit the application", triggered=self.close) - - self.cutAct = QtGui.QAction(QtGui.QIcon(':/images/cut.png'), "Cu&t", - self, shortcut=QtGui.QKeySequence.Cut, - statusTip="Cut the current selection's contents to the clipboard", - triggered=self.textEdit.cut) - - self.copyAct = QtGui.QAction(QtGui.QIcon(':/images/copy.png'), - "&Copy", self, shortcut=QtGui.QKeySequence.Copy, - statusTip="Copy the current selection's contents to the clipboard", - triggered=self.textEdit.copy) - - self.pasteAct = QtGui.QAction(QtGui.QIcon(':/images/paste.png'), - "&Paste", self, shortcut=QtGui.QKeySequence.Paste, - statusTip="Paste the clipboard's contents into the current selection", - triggered=self.textEdit.paste) - - self.aboutAct = QtGui.QAction("&About", self, - statusTip="Show the application's About box", - triggered=self.about) - - self.aboutQtAct = QtGui.QAction("About &Qt", self, - statusTip="Show the Qt library's About box", - triggered=qApp.aboutQt) - - self.cutAct.setEnabled(False) - self.copyAct.setEnabled(False) - self.textEdit.copyAvailable.connect(self.cutAct.setEnabled) - self.textEdit.copyAvailable.connect(self.copyAct.setEnabled) - - def createMenus(self): - self.fileMenu = self.menuBar().addMenu("&File") - self.fileMenu.addAction(self.newAct) - self.fileMenu.addAction(self.openAct) - self.fileMenu.addAction(self.saveAct) - self.fileMenu.addAction(self.saveAsAct) - self.fileMenu.addSeparator() - self.fileMenu.addAction(self.exitAct) - - self.editMenu = self.menuBar().addMenu("&Edit") - self.editMenu.addAction(self.cutAct) - self.editMenu.addAction(self.copyAct) - self.editMenu.addAction(self.pasteAct) + QMessageBox.about(self, "About Application", + "The <b>Application</b> example demonstrates how to write " + "modern GUI applications using Qt, with a menu bar, " + "toolbars, and a status bar.") + + @Slot() + def document_was_modified(self): + self.setWindowModified(self._text_edit.document().isModified()) + + def create_actions(self): + icon = QIcon.fromTheme(QIcon.ThemeIcon.DocumentNew, QIcon(':/images/new.png')) + self._new_act = QAction(icon, "&New", self, shortcut=QKeySequence.New, + statusTip="Create a new file", triggered=self.new_file) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.DocumentOpen, QIcon(':/images/open.png')) + self._open_act = QAction(icon, "&Open...", self, + shortcut=QKeySequence.Open, statusTip="Open an existing file", + triggered=self.open) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.DocumentSave, QIcon(':/images/save.png')) + self._save_act = QAction(icon, "&Save", self, + shortcut=QKeySequence.Save, + statusTip="Save the document to disk", triggered=self.save) + + self._save_as_act = QAction("Save &As...", self, + shortcut=QKeySequence.SaveAs, + statusTip="Save the document under a new name", + triggered=self.save_as) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.ApplicationExit) + self._exit_act = QAction(icon, "E&xit", self, shortcut="Ctrl+Q", + statusTip="Exit the application", triggered=self.close) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.EditCut, QIcon(':/images/cut.png')) + self._cut_act = QAction(icon, "Cu&t", self, shortcut=QKeySequence.Cut, + statusTip="Cut the current selection's contents to the clipboard", + triggered=self._text_edit.cut) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.EditCopy, QIcon(':/images/copy.png')) + self._copy_act = QAction(icon, "&Copy", + self, shortcut=QKeySequence.Copy, + statusTip="Copy the current selection's contents to the clipboard", + triggered=self._text_edit.copy) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.EditPaste, QIcon(':/images/paste.png')) + self._paste_act = QAction(icon, "&Paste", + self, shortcut=QKeySequence.Paste, + statusTip="Paste the clipboard's contents into the current " + "selection", + triggered=self._text_edit.paste) + + icon = QIcon.fromTheme(QIcon.ThemeIcon.HelpAbout) + self._about_act = QAction(icon, "&About", self, + statusTip="Show the application's About box", + triggered=self.about) + + self._about_qt_act = QAction("About &Qt", self, + statusTip="Show the Qt library's About box", + triggered=qApp.aboutQt) # noqa: F821 + + self._cut_act.setEnabled(False) + self._copy_act.setEnabled(False) + self._text_edit.copyAvailable.connect(self._cut_act.setEnabled) + self._text_edit.copyAvailable.connect(self._copy_act.setEnabled) + + def create_menus(self): + self._file_menu = self.menuBar().addMenu("&File") + self._file_menu.addAction(self._new_act) + self._file_menu.addAction(self._open_act) + self._file_menu.addAction(self._save_act) + self._file_menu.addAction(self._save_as_act) + self._file_menu.addSeparator() + self._file_menu.addAction(self._exit_act) + + self._edit_menu = self.menuBar().addMenu("&Edit") + self._edit_menu.addAction(self._cut_act) + self._edit_menu.addAction(self._copy_act) + self._edit_menu.addAction(self._paste_act) self.menuBar().addSeparator() - self.helpMenu = self.menuBar().addMenu("&Help") - self.helpMenu.addAction(self.aboutAct) - self.helpMenu.addAction(self.aboutQtAct) + self._help_menu = self.menuBar().addMenu("&Help") + self._help_menu.addAction(self._about_act) + self._help_menu.addAction(self._about_qt_act) - def createToolBars(self): - self.fileToolBar = self.addToolBar("File") - self.fileToolBar.addAction(self.newAct) - self.fileToolBar.addAction(self.openAct) - self.fileToolBar.addAction(self.saveAct) + def create_tool_bars(self): + self._file_tool_bar = self.addToolBar("File") + self._file_tool_bar.addAction(self._new_act) + self._file_tool_bar.addAction(self._open_act) + self._file_tool_bar.addAction(self._save_act) - self.editToolBar = self.addToolBar("Edit") - self.editToolBar.addAction(self.cutAct) - self.editToolBar.addAction(self.copyAct) - self.editToolBar.addAction(self.pasteAct) + self._edit_tool_bar = self.addToolBar("Edit") + self._edit_tool_bar.addAction(self._cut_act) + self._edit_tool_bar.addAction(self._copy_act) + self._edit_tool_bar.addAction(self._paste_act) - def createStatusBar(self): + def create_status_bar(self): self.statusBar().showMessage("Ready") - def readSettings(self): - settings = QtCore.QSettings("Trolltech", "Application Example") - pos = settings.value("pos", QtCore.QPoint(200, 200)) - size = settings.value("size", QtCore.QSize(400, 400)) - self.resize(size) - self.move(pos) - - def writeSettings(self): - settings = QtCore.QSettings("Trolltech", "Application Example") - settings.setValue("pos", self.pos()) - settings.setValue("size", self.size()) - - def maybeSave(self): - if self.textEdit.document().isModified(): - ret = QtWidgets.QMessageBox.warning(self, "Application", - "The document has been modified.\nDo you want to save " - "your changes?", - QtWidgets.QMessageBox.Save | QtWidgets.QMessageBox.Discard | - QtWidgets.QMessageBox.Cancel) - if ret == QtWidgets.QMessageBox.Save: + def read_settings(self): + settings = QSettings('QtProject', 'Application Example') + geometry = settings.value('geometry', QByteArray()) + if geometry.size(): + self.restoreGeometry(geometry) + + def write_settings(self): + settings = QSettings('QtProject', 'Application Example') + settings.setValue('geometry', self.saveGeometry()) + + def maybe_save(self): + if self._text_edit.document().isModified(): + ret = QMessageBox.warning(self, "Application", + "The document has been modified.\nDo you want to save " + "your changes?", + QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) + if ret == QMessageBox.Save: return self.save() - elif ret == QtWidgets.QMessageBox.Cancel: + elif ret == QMessageBox.Cancel: return False return True - def loadFile(self, fileName): - file = QtCore.QFile(fileName) - if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): - QtWidgets.QMessageBox.warning(self, "Application", - "Cannot read file %s:\n%s." % (fileName, file.errorString())) + def load_file(self, fileName): + file = QFile(fileName) + if not file.open(QFile.ReadOnly | QFile.Text): + reason = file.errorString() + QMessageBox.warning(self, "Application", f"Cannot read file {fileName}:\n{reason}.") return - inf = QtCore.QTextStream(file) - QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) - self.textEdit.setPlainText(inf.readAll()) - QtWidgets.QApplication.restoreOverrideCursor() + inf = QTextStream(file) + with QApplication.setOverrideCursor(Qt.WaitCursor): + self._text_edit.setPlainText(inf.readAll()) - self.setCurrentFile(fileName) + self.set_current_file(fileName) self.statusBar().showMessage("File loaded", 2000) - def saveFile(self, fileName): + def save_file(self, fileName): error = None - QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) - file = QtCore.QSaveFile(fileName) - if file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): - outf = QtCore.QTextStream(file) - outf << self.textEdit.toPlainText() - if not file.commit(): - error = "Cannot write file %s:\n%s." % (fileName, file.errorString()) - else: - error = "Cannot open file %s:\n%s." % (fileName, file.errorString()) - QtWidgets.QApplication.restoreOverrideCursor() + with QApplication.setOverrideCursor(Qt.WaitCursor): + file = QSaveFile(fileName) + if file.open(QFile.WriteOnly | QFile.Text): + outf = QTextStream(file) + outf << self._text_edit.toPlainText() + if not file.commit(): + reason = file.errorString() + error = f"Cannot write file {fileName}:\n{reason}." + else: + reason = file.errorString() + error = f"Cannot open file {fileName}:\n{reason}." if error: - QtWidgets.QMessageBox.warning(self, "Application", error) + QMessageBox.warning(self, "Application", error) return False - self.setCurrentFile(fileName) + self.set_current_file(fileName) self.statusBar().showMessage("File saved", 2000) return True - def setCurrentFile(self, fileName): - self.curFile = fileName - self.textEdit.document().setModified(False) + def set_current_file(self, fileName): + self._cur_file = fileName + self._text_edit.document().setModified(False) self.setWindowModified(False) - if self.curFile: - shownName = self.strippedName(self.curFile) + if self._cur_file: + shown_name = self.stripped_name(self._cur_file) else: - shownName = 'untitled.txt' + shown_name = 'untitled.txt' - self.setWindowTitle("%s[*] - Application" % shownName) + self.setWindowTitle(f"{shown_name}[*] - Application") - def strippedName(self, fullFileName): - return QtCore.QFileInfo(fullFileName).fileName() + def stripped_name(self, fullFileName): + return QFileInfo(fullFileName).fileName() if __name__ == '__main__': - - import sys - - app = QtWidgets.QApplication(sys.argv) - mainWin = MainWindow() - mainWin.show() - sys.exit(app.exec_()) + argument_parser = ArgumentParser(description='Application Example', + formatter_class=RawTextHelpFormatter) + argument_parser.add_argument("file", help="File", + nargs='?', type=str) + options = argument_parser.parse_args() + + app = QApplication(sys.argv) + main_win = MainWindow() + if options.file: + main_win.load_file(options.file) + main_win.show() + sys.exit(app.exec()) diff --git a/examples/widgets/mainwindows/application/application.pyproject b/examples/widgets/mainwindows/application/application.pyproject index 0e0413982..a9365ed1a 100644 --- a/examples/widgets/mainwindows/application/application.pyproject +++ b/examples/widgets/mainwindows/application/application.pyproject @@ -1,3 +1,3 @@ { - "files": ["application.qrc", "application.py", "application_rc.py"] + "files": ["application.qrc", "application.py"] } diff --git a/examples/widgets/mainwindows/application/application_rc.py b/examples/widgets/mainwindows/application/application_rc.py index 2a392bea7..bc8336765 100644 --- a/examples/widgets/mainwindows/application/application_rc.py +++ b/examples/widgets/mainwindows/application/application_rc.py @@ -1,88 +1,11 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 5.14.0 +# Created by: The Resource Compiler for Qt version 6.2.2 # WARNING! All changes made in this file will be lost! -from PySide2 import QtCore +from PySide6 import QtCore qt_resource_data = b"\ -\x00\x00\x04\xa3\ -\x89\ -PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ -\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ -\x00\x00\x00\x04gAMA\x00\x00\xd6\xd8\xd4OX2\ -\x00\x00\x00\x19tEXtSoftware\ -\x00Adobe ImageRead\ -yq\xc9e<\x00\x00\x045IDATX\xc3\xe5\ -\x97\xcd\x8fTE\x14\xc5\x7f\xb7\xea\xd6{\xaf\xdbn\xc7\ -\xf9@\x9d\x89FM4\x99D\x8d\x1aH\x98\xc4\x8c\x1f\ -\x1b\xfe\x02L\x5c\xf1\x07\x18\x16.M\x5ckX\xc3\x8e\ -\xc4\x8d\x1b\x17\xce\x82htA\x5c\x18\x0d\xe2\xc4\xc6\x00\ -=`PQ\x19`\x02\xa2\x0e\x0c\x83\xd3\xfd^\xf7\x94\ -\x8b\xaa\xee\xf9`\xe6\x0d\x84Q\x16VR\xa9\xce{\xb7\ -\xeb\x9e:\xf7\xd4\xa9z\xea\xbd\xe7~6\xe5>\xb7>\ -\x80]\xbbv\xbd\x03\xec\xfd\x8f\xf2N5\x1a\x8d\x03\xeb\ -\x19\xd8\xbb\xef\xbd\xa3;\x1f\x1fv\x00\x9c<:\xcf\xcc\ -\x977X\x9c\xef\xdcS\xa6\xda\xa0\xf2\xdck\x03\xbc\xb8\ -g\x10\x80\x8b\x7f\x16|\xf8\xee\x1e\x80\xdb\x00p\xfc\xec\ -\x1c\xdf?0\x04x.\xfd\xb8\xc0\xfe\xb7\xceo\xcbr\ -\x0f\x1dy\x9a\x0b#\x96\xd3\x9f\x1fd\xfc\xd5}\x9bk\ -@E\xb0\x16@xp,#\xcb\xb2m\x0100\x96\ -a\x8dP\x1b|\x14#%\x22\x14+\xd8\x18\x91\xd5\x95\ -s\xe7\xce\x83*\xb8\x04\xd2\x14\xb2\x0c\xd2,\x8cI\x0a\ -I\x12\xdew:\x90\xe7\x90\xb7\xa1\xd5\x82v+\x8em\ -(r\xb2\xfa8\xd6\x0a\xe3\xaf\xbcIk\xf1\xfa\xe6\x00\ -\xac\x15\xac\x15\x04\xb0F\xd8\xbd{\xe7\x16k\xeb\x86\xae\ -\x80Z\xa8V\x81\xeamQ\x8d\xaf\x04\xb5\x82\xf7\xa0\xa6\ -\x84\x01g\x055\x82\x08\xa8\x0a\x95,\xc3# \x1e\x08\ -\xc0\xf0\x1e/\x02\xde#\x12&\x15|\x88#\xc4!\x1e\ -<!^@MX\x18@\xd7J\x89\x06\xac\xa0\xdac\ -\x00\x9a3\xbf\x05\x8aS\x07i\x02\x95\x04\xb24\xf6\x04\ -\x12\x07N\xa1\xe8@^@+\x8f\xbd\x05K9\xb4s\ -\xc8\x0bT\x87q=\x00*\xe5%p1@\xd509\ -\xf9\xd2\xd6\x0a\xf3>\xd0\xaf\x16\xaa\x1b\x8b\xf6\xd8'a\ -a\xbd\x1c%% \x00\xf0\x81\x8d4M\xa3:\xc3\xb3\ -\x98\x11\x89l\x07\xdac\x09V\x98_)F\xfca\xcd\ -r\x7fa\x1d-\xd1\x80:\x09TI\x18O4/\xe0\ -\x9d\x85\xc4!\x89\xc3g\x09\x92i\xd8\x11\x89\xe2\x13\x87\ -X\x8b\xefv\x91\xbc\x80\xbc\x03\xed\x02\xdfj#\xed\x02\ -\xf2\x02\x9fwP\x1dE\xd5 x:\xebTx\x9b\x06\ -\x9c3x\x0f\x03\x8f$\xbc\xfe\xf2\xf3wh\xe86h\ -\xa4\xbe\xf1\xeb\xc6\xfc\xdf\xb1\x04R^\x82DM_\x84\ -\x8f\x0d\xa58\xe7\xb6\xc5\x88\x9e\x18K\xb9v\xb3\x03\x08\ -\x9dR\x11\xaa\x90\xb8P\xefZ\xc50}\xb1\xcb@\xc5\ -\xb0\x0e\xf4&\xadW\xf9U.\xe1\xe1\xc6\xd22\xf5\xcc\ -p}\xc9\x84-\xe9J\x19\x10\x9c\x1a\xc0s\xe5f\x97\ -+7\xbb\xacQW?\xd7\xaad~\xc5'\xa2)\xac\ -\x05\x15\xc3\x9c\x0b\xb5w\xa6l\x17\xa8\xc1\xa9 \xc8\x1a\ -5\xaf\x9b5\x1a\x8fY1\x9e\xfe{\xe9\xef\x14\x00\xf1\ -\x82\xef\x9bX0+WV\x02U!\xd1\x90\xfc\xe7S\ -\xdf\xf2\xeb\x99\x13,-\xde\xb8\xa7\xfaWj\x03<\xf5\ -\xecN\x9eya\x02\x0f\xa83[1\x10\x03|\x87\xf7\ -\xf7\xbf\xc1\xc2\xc2\x02\xb7n\xdd\xa2(\x0aD\x04k-\ -\xd6ZT\x15U\xc59\x87\xaab\xad\xc5\x98\xf0\xdf\xe5\ -\xe5e\xf2<\xef\xf7#\xcd\xf9\xb8\xf2-\x18pVP\ -\x17\x18\xdc1:\xb6rO8~\x9c\xe9\xe9i\x8c1\ -x\xef\x99\x98\x98`rr\xf2\x8eY\xd81:\xd6\xdf\ -\x86\xae\xd4\x09Up6\xac\xa2V\xaf\xf7k933\ -\xc3\xd0\xd0\x10\xd6Z\xbc\xf74\x9b\xcd\xbb\x02P\xab\xd7\ -p\xd1\x88\xb4\xd4\x88\x14\x9c\x0b'\x5c\xa0*\x00\xa8V\ -\xabdY\xd6\xa7\xb87\xdeis\x1a\xa9\x17AK\xad\ -8\x1e\xc7\xbd#\xb4\xd7\x8c1\x88D\xdf\x8f:\xb8\xab\ -\x9b\xaf5\xa8\x0d\xf3\xf6\x18.=\x8e\x83)m\xe3\xd5\ -\xdb\x12\xa9\xf7\xe5Vl\xad\xf4\x91\x0e\x8e\x0c\xc3\xf2\xef\ -\xdb\x02\xe0\xa1\x91a\xd4\xc2\xb5+\x97Y\x9c\xbf\xbe\x05\ -\x036\xf8\xc0`\xad\x02\x0b\xdb\xc3\xc0P\xad\xc2\xec\xc5\ -K\x9c\xfd\xee\x1b\xce\x9f\x9c\x9e\x03\xa66\x04`$^\ -J\x05\x12\x0b\xed\x91'\xa9=\x0co\x1f8\xc8f\xc7\ -\x81':\xf1*\xe75\x1e2\x81\x14(\xbap\xf9\xea\ -U\xce4\x8e\xd1\xfc\xfa\x8b\xb9\xd9\x1fN\x1d\x02\x0eo\ -\x08\xe0\xb3\x8f>\xe0\xa7\xd3'W\x99\xe9\xda\xa3\x86U\ -\xe6\xbb\x1e\x04\x1b<_\x1do|w\xee\x8f\xd9_\x0e\ -\x01\x87\x1b\x8d\xc6_\x1b\x01\x98\x9a\xfe\xf4\xe3\x7f\xf5s\ -l}\xf25\x00\xe2\xb7\xda\x81\xff\xdd\xd7\xf1?M\xf0\ -K\xb9\xe8F\x89\xaf\x00\x00\x00\x00IEND\xaeB\ -`\x82\ \x00\x00\x08\x19\ \x89\ PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ @@ -215,91 +138,62 @@ H\x8f\xaa\x1e/\x9a5\xe6\xc7\x7fz\xf3-Wx\xac\ \xff\xdam\x8a\xdda\x99\xd5\x1b\xb6\xd8k\xbb^2\xbe\ /\x89\xff\x01f\xb9_\xfc\x11\x80=\xcf\x00\x00\x00\x00\ IEND\xaeB`\x82\ -\x00\x00\x05+\ +\x00\x00\x03T\ \x89\ PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ \x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ \x00\x00\x00\x04gAMA\x00\x00\xd6\xd8\xd4OX2\ \x00\x00\x00\x19tEXtSoftware\ \x00Adobe ImageRead\ -yq\xc9e<\x00\x00\x04\xbdIDATX\xc3\xed\ -WkL\x93W\x18>#q\xc92\xe9\x16\x97\xa8T\ -e8\x9d\x02\x15\xf6\x03\x872\x93\x01f,[p\xc4\ -0\xff`\xa2.\x1a:\x1dN\x03\xba1\x89[\xb3\x80\ -\xd9\x0c\x84\x02\x19X\x1c\x14\x8b\x85\xb2\x82\x95^\xe4f\ -\x0b\x8e1\xf8\xc3F\xcb-\x81\x15\xdc\xa8\xc2\x1c\x1b\xb7\ -ji\x91\xf2\xee\xbc\x87\xaf\x0c\xdc\xb8\x0da\xd9\xb2\x93\ -<\xed\x97\xf3}\xfd\xde\xe7\xbc\xef\xf3^J\x00\x80\xfc\ -\x93 \xff\x0a\x02t\x09(D\x14\xd9\x14q\x14\x01+\ -F\x80\xae\xddd\xdd\xc6f\x22L\xf8\x95\xc4\x8bG\xc8\ -\xa1\xd3\xf7\xc8\x8e\x97;82a+A \x85\x9c\xbe\ -0H.\xdd\x80\x19@2\xabyM\xf4\xbe\xfbr\x13\ -hd\x06\x91\x04^\xa3Q\xf4\x06\xee\x85G\xf5\xd0\xbd\ -\x83\xcbM \x9b\x9d\xf6@t/\xbd\x162= \x89\ -?H\xa5,\x1b\x01\x8c1y\xc1\xbb\x9d\x88K\xc6\xd7\ -\xc6&\x0e\xa0\x10\xb9\xfdB\xfe\xc5+6F\x8c\x12\x5c\ -N\x02\x93\xa7\xa7\xa7\x0d\xcc\xd39\xb9\x98c6\x14\x0a\ -\xd2\xe4\xa3+A \x8c)\x9e*\xdf7G\xeb\xdc{\ -\xb5\xcc\x89\x9e@D\x96T\x83+,\x0b6FH\x08\ -\x13\xf5d*{.T\x03\x01\xf8\x037\xbf\xc0\x0e4\ -*T\xdfb\x88R\xd5,X\x03t\x1d\x16\x08\x04z\ -EU\xf5\xc8\xa0mt\xc2\xd4s\xf7!\xbesQ\x95\ -\x90\xae\x8f\xd0\x13\xcf\xe5\x94\x83\x87\xb4\x02\x9e\xcc.\x03\ -\xd4\x06\xdd\xaf\x99\xcb\xb0\xaf\xaf\xaf>\xbf\xd2`\xb5\xdb\ -\xed\x80\xf8y\xe4>\xc4^\xab\xb4\xb9\x88/\x86\x80'\ -\xd3\xc0g\xf9\x8e\x19\xf5`\xd7^3\xbav\xdas\xee\ -h\xd8\xc7\xc7G\x9f\xab\xab\xb0\x0e\x0f\x0d\xc1\x10\x87\xb2\ -\xf6.\xe7\x967\xf7wsa\xd8\xbd\xe8^\x80/f\ -\x9a\xa0\x86\xdf\xa96B\xf7\xf0\x03\xd8\x19\x9f\xd4\xcf\xa5\ -\xe7\x1a\x8a\x98-~\xfem\x97T\x1ak__\x1f\xb8\ -\xd0\xd1s\x07br\x15VN\xc4\x87\x97\xd4\x8c0\x14\ -\xe9\x15\xb7\x1e8\x1c\x0e@\xa4\xd6\x191\x9e\x85\x9b\x05\ -~m\xa9%\x1a[\x97\xd9\x0c\xe6.\x0a\xf3$\x14\xdf\ -6\x8e{\xbd\x1e\xd1\xcdB\xc8\x09o\xa9\x04<\xd1\xbd\ -V\xab\x15\x10w\x7f\x1b\x84\xf3\x92\x5c\xbbR\xa9\x84\xfa\ -\xfaz0\x99L\x0cu\xdf5\xc1Q\xb1d\x18\xc9Q\ -D>\xb6v\xcc\xb4@O\x93_~\xd3\xd6\xdf\xdf\x0f\ -2\x99\x0cD\x22\x11\xa8T*\x90J\xa5\xa0\xd1h \ -K[9\xbe\xe9\x95\xe0\x1f\xb8S\xafy,\xf3\x00\x97\ -\x8e\x22\x9e\xc7\x86\xe6S)\x19\xf6\x82\x82\x02\xe6\xe2\xa0\ -\xa0 \xe0\xf1x`\xb1X@[^\x01\xfb\xcf&\x0c\ --\xa6S\xceg\x94\xcf\x09L\x83\xe2[{\xe6\xc2`\ -\x9a\xb2\x14\x14\x0a\x05\x88\xc5b\xc8\xcc\xcc\x84\xa2\xa2\x22\ -P\xab\xd5\xd0\xd9\xd9\xc9`\xec\xfe\xc9\xb9\xc9\xdb\xa7u\ -.\xb7\xcfK\x80\xae\xb7\xd8)p\x0e\xc0j\x97\xacx\ -\x88\xca\x7f\x82\xe2)\x89\x0e>\x97+![\x96\x0f\x07\ -c\xe3G\x84\x1f&\xd8\x92rd\x8eo\x1a\xbf\x07\xa3\ -\xd1\x08-\xad-\xf0\xcb\xc0 \x1c8\xf1\xbe\x05\xb3b\ -\xc1\x04\x5ci\x84\x85\x85\x84F\xdc&\xe72\xac,\xcf\ -3\xb5\x13\xec;\xe3\xba\xd33\xaf\x82\xe5\xfez\x89\x06\ -\x9e\xde\xfcb\x1b\xf7<\x92\x8d{f\xabO[\xca5\ -\xedXCC=444\x80\xa5\xb7\x172\x14\xc5\xc3\ -\xf3\xe9\xc0e<\x92\xe5(\x9e6]\xe5\x9c*2x\ -}\xf4\x83.Zl\x121\x0c\x1b%\xeaq\xf7/\xcb\ -'\xef\x05\x87_\xfe\xd3\xe4D\x0bLh\xf4\xc9>u\ -\x95\x1e\x0c\x06\x03\xb4\xb7\xb7\xc3\xd7\xc6\x961\xae\x81\x09\ -f\xf16m8h<I::e\xf8b\x81\x83D\ -\xbdWC\xb6\x0a^\x9b*\xc3\x94\x5c\xb0B\x0f\xab$\ -\xb4\x04\x9fJ\xaa\x9bC71(\xd4O\xf2\x0a\xc7t\ -:\x1d\xd4\xd6\xd6\x82\xc9|\xdb\xb9a\x9b\xf7_\xeab\ -\xb2\xe5~\x9cu\x1f\x0d\xf3\xb2\xd4N\xf2\xf6\xb1\xeb.\ -\xb6\xae\x94\xc3\x90l\x97U\xc1KW\xab\x80\x9cMn\ -Z\xd0\x1cI\xbd\xb1\xe7\x88\xb0\xef\xcaW\xc5PZZ\ -\x0a\x1d?\xf6L\x04\x06\x87t<\xaa\x0b\xc2\x84F\x8d\ -\x07\xc8o\x02\xd9\xf9\xaa~\x9a\xf10F\x8e6 \xaf\ -\xbcJxCi\x00\x92(\x1d\x98\xcd\x95\xb3y\xc3}\ -=\xbf\xf9Dj\xa6].\x97CSK+D\x1c{\ -\xf7\xce\xf4\x14%\xae\xf1\x8a\xf5w\x9c\xf5p\x02\xc2\xd9\ -\x0f\x89\xd1\x81\x03O\x8e\xf7\xdc\xd2i\xe7\xf3\xdfu\xfc\ -o\x14.6\xd2\xef\xd8\x17iI\xbe,\x9d\xc8\xd3\x96\ -;\xa7\x0f1\x8c%\xc6\xdf\x9f\xbaw_q5\xa0A\ -l\xb5\x08\x8c\xf9\x94\xf1\xe0\xf03K\x9a|h\x13Z\ -\xbd\xce\xa3\xd9kOH\xf7\x0c\x0f\xb0\x0f\xfe\xf3\x87\xc8\ -\xf9/\xee\xb9In\x00\xf6{>\xed\xf7\x08\x1e*>\ -]\xe5X\xaa\xf1GZ\xf5\xb6Y\x0b\x11\x1d\xb3C\xc9\ -\x918\x099\xf9\xa9\x96!\xfa\x5c\x1a\x0d\xcf\xb3\xff\xff\ -7\xfcO\x13\xf8\x1d\xe7\x87\x19\xb9D\xc3\x01\xcf\x00\x00\ -\x00\x00IEND\xaeB`\x82\ +yq\xc9e<\x00\x00\x02\xe6IDATX\xc3\xd5\ +\x97\xcdN\x13a\x14\x86\xeb5\x94\x95{q\xe1\xd2\xc4\ +\xe0\x05\xb8\xe2\x0e\x5c\xb8\xf4\x02\x5c\xb10\xea\x05\x18\x96\ +&bX\xb8\xb0\x91X \xd1\x9d\xbf\x89\xa4\x14\xb1R\ +\xa4HE\x94\xfe\xd0\x02C\xff\xa6\x9d\x19\xa6e\x80\xe3\ +y{\xfa\x85QJ\x82\xc9!\x86I\xde\x9c3\xa7\xf3\ +\xcd\xfb\x9c\xf3M\x9bN\x84\x88\x22\xffS\x91s\x01\xc0\ +\xc7\xd5\x90n\xff\xa5\xfb\xac\xc7==d\x0d\xa9\x02\xf0\ +12<<\xbcj4::\xba\x19V<\x1e\xaf&\ +\x93\xc9V:\x9dv\x13\x89Dk`` \xcdkn\ +h\x02\xa48\xd2\xe1\xe1q\x99\xba\xef\xb7\xc9\xb2,\xda\ +\xdf\xdf'\x86\xf1x\xcd\x18\xeb\x8a\x1a@?\xf3\xb0\x1c\ +\xc7\xa5Lf\xb9\x0b\x14\x04\x01\xc5b\xb1:\xaf{p\ +\x1a\x88S\x01\x1c\x1c\x10ww\xb2l\xdb\xa1\xf9\xf9\xcf\ +d\x0e\xd7u\xe9\xf9\xc4D\x17B\x05\x00&{\xc1\xc9\ +\xaa7\x1cJ\xce\xcdS\xf8p]\x0f\x8b\x17T\x00\x82\ +\x10@gO\x14\xce\xed\xa6G\x1fgf\xe9\xf5\x9b\xb7\ +\x14\x9f\x9c\xa4\xa9\xa9iz\xf7\xfe\x03E\xa3\xd1e^\ +\x7fA\x05\xc0\xef\x10\xed\xb6%\x86\x85\x9a\xe3\x05\x94]\ +\xcd\xd1\xe4\xf4+z2\xfe\x94\x9e\xc5^\xd0Lb\x0e\ +\x8b\x17U\x00\xda\x81\x18\xf5\x13 <\xff\x90j\xcd6\ +\x157\xab\x94/nS\x89c\x8d\xb7\x85\xd7~Q\x01\ +\xf0y\xcc\xcd]\x1e\xb5\xc7{\xdb\xee\x9f;\xbe\xe4\x88\ +]\xb8\xbd\xee\xe2\x94\xca3\xe0u\xe4\xc6uWb\xd8\ +\x109\xea\xe63D\xd4\x01\xa7\x06\xe0\xf4:\xad9\x22\ +\x98\x98hr\x80\x98kPS\x9d\x00\x00*-\xb91\ +\xe2NS\x8c\x10\x0d\x04\xf2m\xfb(\xb6|E\x00\x9b\ +;\xdbj\xfci\x8e<l\x88\x1a\xae9\x13\x80:\x8f\ +\xb7T#*\xd7\xc5\x04\x06\x06\x005(\x9c\x17\xab\xbc\ +%\xbb\xca\x13\xc0Ma\x0e\x15*rn\xcc~Z\x02\ +hj\xdd\xad\xf1\x94'\x00S\xdc\x1cqm[@`\ +\x9a\xab\x1cu\x9e\xeb\x81A\x15G\x11\xc0j\x891\x0c\ +\xd6w\x04 \x0cd&b\xb6iu\x8b\xa8\xaa\x09P\ +\xb6\xc5\xbc\xd0\x03\xf8\xbe)c\x87)`\x0c\x18\x84\x1c\ +\x00[ME\x00t\x03S\x98\xad\x94\xc5\x1c\xe7F\xe6\ +\x1c\x00\xc8q]\xa9\xa1\x08\x80\xfd\xfcV\x12s3\x01\ +\x085\x18B\xe8\xda|\x8e)\xa8N\x00[\x00\x03\xc8\ +\x98g6\x04\x002\xe6\x85\xde\xf8\x17\x0b\xfc,\xd8\x8a\ +\x00\x18g:O\xb4T\x14#\x98\x02\x00\x02\x0c>\xfb\ +\xc5S(\xf0C\xb8fI\xf7k\xf9R\x87\xd7\xbeT\ +\x01\xc8U\x8f\xbaN\xadK\x0e\x90\xaf\x85\xde\xb7\xc2\x92\ +=O\xa6\xb3\xde\xa3\xb1q\xeb\xda\xd0\xf5\x15\x98\xb3n\ +\xa9\x00l4\xa4k\x18\xff\xe0\x11\x7fZ\x17S\xd4\x13\ +\x0bYo\xe4\xee\xbd\xe2\xa5\xc1\xcbK|m\x8cu\x87\ +5\xa8\xfa\xb7\x1c\xdde\xd9<\x8f\x1f\x19\xfe\x9e\xcf\x1e\ +7\xbd\xc9\xbax&oF\x00h\xf2\xff\x81\x99\x94\x9e\ +\xe9?\xbf\x19\x01B\xd3\xf4\xfc\xbd\x9c\x9e\xa5~\x03Q\ +l%\xa1\x92\x95\x0aw\x00\x00\x00\x00IEND\xae\ +B`\x82\ \x00\x00\x05:\ \x89\ PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ @@ -386,62 +280,91 @@ gSuV\x00\x8d\x8d\x8dn\x8b\xc5\x82\x81\x81\x81H\ mm\xad377WV\xd3\xdd\x00\xf8\x7fFL\xc2\ A\x99n\xd7\xdfC9V\x18\x85p\xc8\x04\x00\x00\x00\ \x00IEND\xaeB`\x82\ -\x00\x00\x03T\ +\x00\x00\x05+\ \x89\ PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ \x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ \x00\x00\x00\x04gAMA\x00\x00\xd6\xd8\xd4OX2\ \x00\x00\x00\x19tEXtSoftware\ \x00Adobe ImageRead\ -yq\xc9e<\x00\x00\x02\xe6IDATX\xc3\xd5\ -\x97\xcdN\x13a\x14\x86\xeb5\x94\x95{q\xe1\xd2\xc4\ -\xe0\x05\xb8\xe2\x0e\x5c\xb8\xf4\x02\x5c\xb10\xea\x05\x18\x96\ -&bX\xb8\xb0\x91X \xd1\x9d\xbf\x89\xa4\x14\xb1R\ -\xa4HE\x94\xfe\xd0\x02C\xff\xa6\x9d\x19\xa6e\x80\xe3\ -y{\xfa\x85QJ\x82\xc9!\x86I\xde\x9c3\xa7\xf3\ -\xcd\xfb\x9c\xf3M\x9bN\x84\x88\x22\xffS\x91s\x01\xc0\ -\xc7\xd5\x90n\xff\xa5\xfb\xac\xc7==d\x0d\xa9\x02\xf0\ -12<<\xbcj4::\xba\x19V<\x1e\xaf&\ -\x93\xc9V:\x9dv\x13\x89Dk`` \xcdkn\ -h\x02\xa48\xd2\xe1\xe1q\x99\xba\xef\xb7\xc9\xb2,\xda\ -\xdf\xdf'\x86\xf1x\xcd\x18\xeb\x8a\x1a@?\xf3\xb0\x1c\ -\xc7\xa5Lf\xb9\x0b\x14\x04\x01\xc5b\xb1:\xaf{p\ -\x1a\x88S\x01\x1c\x1c\x10ww\xb2l\xdb\xa1\xf9\xf9\xcf\ -d\x0e\xd7u\xe9\xf9\xc4D\x17B\x05\x00&{\xc1\xc9\ -\xaa7\x1cJ\xce\xcdS\xf8p]\x0f\x8b\x17T\x00\x82\ -\x10@gO\x14\xce\xed\xa6G\x1fgf\xe9\xf5\x9b\xb7\ -\x14\x9f\x9c\xa4\xa9\xa9iz\xf7\xfe\x03E\xa3\xd1e^\ -\x7fA\x05\xc0\xef\x10\xed\xb6%\x86\x85\x9a\xe3\x05\x94]\ -\xcd\xd1\xe4\xf4+z2\xfe\x94\x9e\xc5^\xd0Lb\x0e\ -\x8b\x17U\x00\xda\x81\x18\xf5\x13 <\xff\x90j\xcd6\ -\x157\xab\x94/nS\x89c\x8d\xb7\x85\xd7~Q\x01\ -\xf0y\xcc\xcd]\x1e\xb5\xc7{\xdb\xee\x9f;\xbe\xe4\x88\ -]\xb8\xbd\xee\xe2\x94\xca3\xe0u\xe4\xc6uWb\xd8\ -\x109\xea\xe63D\xd4\x01\xa7\x06\xe0\xf4:\xad9\x22\ -\x98\x98hr\x80\x98kPS\x9d\x00\x00*-\xb91\ -\xe2NS\x8c\x10\x0d\x04\xf2m\xfb(\xb6|E\x00\x9b\ -;\xdbj\xfci\x8e<l\x88\x1a\xae9\x13\x80:\x8f\ -\xb7T#*\xd7\xc5\x04\x06\x06\x005(\x9c\x17\xab\xbc\ -%\xbb\xca\x13\xc0Ma\x0e\x15*rn\xcc~Z\x02\ -hj\xdd\xad\xf1\x94'\x00S\xdc\x1cqm[@`\ -\x9a\xab\x1cu\x9e\xeb\x81A\x15G\x11\xc0j\x891\x0c\ -\xd6w\x04 \x0cd&b\xb6iu\x8b\xa8\xaa\x09P\ -\xb6\xc5\xbc\xd0\x03\xf8\xbe)c\x87)`\x0c\x18\x84\x1c\ -\x00[ME\x00t\x03S\x98\xad\x94\xc5\x1c\xe7F\xe6\ -\x1c\x00\xc8q]\xa9\xa1\x08\x80\xfd\xfcV\x12s3\x01\ -\x085\x18B\xe8\xda|\x8e)\xa8N\x00[\x00\x03\xc8\ -\x98g6\x04\x002\xe6\x85\xde\xf8\x17\x0b\xfc,\xd8\x8a\ -\x00\x18g:O\xb4T\x14#\x98\x02\x00\x02\x0c>\xfb\ -\xc5S(\xf0C\xb8fI\xf7k\xf9R\x87\xd7\xbeT\ -\x01\xc8U\x8f\xbaN\xadK\x0e\x90\xaf\x85\xde\xb7\xc2\x92\ -=O\xa6\xb3\xde\xa3\xb1q\xeb\xda\xd0\xf5\x15\x98\xb3n\ -\xa9\x00l4\xa4k\x18\xff\xe0\x11\x7fZ\x17S\xd4\x13\ -\x0bYo\xe4\xee\xbd\xe2\xa5\xc1\xcbK|m\x8cu\x87\ -5\xa8\xfa\xb7\x1c\xdde\xd9<\x8f\x1f\x19\xfe\x9e\xcf\x1e\ -7\xbd\xc9\xbax&oF\x00h\xf2\xff\x81\x99\x94\x9e\ -\xe9?\xbf\x19\x01B\xd3\xf4\xfc\xbd\x9c\x9e\xa5~\x03Q\ -l%\xa1\x92\x95\x0aw\x00\x00\x00\x00IEND\xae\ -B`\x82\ +yq\xc9e<\x00\x00\x04\xbdIDATX\xc3\xed\ +WkL\x93W\x18>#q\xc92\xe9\x16\x97\xa8T\ +e8\x9d\x02\x15\xf6\x03\x872\x93\x01f,[p\xc4\ +0\xff`\xa2.\x1a:\x1dN\x03\xba1\x89[\xb3\x80\ +\xd9\x0c\x84\x02\x19X\x1c\x14\x8b\x85\xb2\x82\x95^\xe4f\ +\x0b\x8e1\xf8\xc3F\xcb-\x81\x15\xdc\xa8\xc2\x1c\x1b\xb7\ +ji\x91\xf2\xee\xbc\x87\xaf\x0c\xdc\xb8\x0da\xd9\xb2\x93\ +<\xed\x97\xf3}\xfd\xde\xe7\xbc\xef\xf3^J\x00\x80\xfc\ +\x93 \xff\x0a\x02t\x09(D\x14\xd9\x14q\x14\x01+\ +F\x80\xae\xddd\xdd\xc6f\x22L\xf8\x95\xc4\x8bG\xc8\ +\xa1\xd3\xf7\xc8\x8e\x97;82a+A \x85\x9c\xbe\ +0H.\xdd\x80\x19@2\xabyM\xf4\xbe\xfbr\x13\ +hd\x06\x91\x04^\xa3Q\xf4\x06\xee\x85G\xf5\xd0\xbd\ +\x83\xcbM \x9b\x9d\xf6@t/\xbd\x162= \x89\ +?H\xa5,\x1b\x01\x8c1y\xc1\xbb\x9d\x88K\xc6\xd7\ +\xc6&\x0e\xa0\x10\xb9\xfdB\xfe\xc5+6F\x8c\x12\x5c\ +N\x02\x93\xa7\xa7\xa7\x0d\xcc\xd39\xb9\x98c6\x14\x0a\ +\xd2\xe4\xa3+A \x8c)\x9e*\xdf7G\xeb\xdc{\ +\xb5\xcc\x89\x9e@D\x96T\x83+,\x0b6FH\x08\ +\x13\xf5d*{.T\x03\x01\xf8\x037\xbf\xc0\x0e4\ +*T\xdfb\x88R\xd5,X\x03t\x1d\x16\x08\x04z\ +EU\xf5\xc8\xa0mt\xc2\xd4s\xf7!\xbesQ\x95\ +\x90\xae\x8f\xd0\x13\xcf\xe5\x94\x83\x87\xb4\x02\x9e\xcc.\x03\ +\xd4\x06\xdd\xaf\x99\xcb\xb0\xaf\xaf\xaf>\xbf\xd2`\xb5\xdb\ +\xed\x80\xf8y\xe4>\xc4^\xab\xb4\xb9\x88/\x86\x80'\ +\xd3\xc0g\xf9\x8e\x19\xf5`\xd7^3\xbav\xdas\xee\ +h\xd8\xc7\xc7G\x9f\xab\xab\xb0\x0e\x0f\x0d\xc1\x10\x87\xb2\ +\xf6.\xe7\x967\xf7wsa\xd8\xbd\xe8^\x80/f\ +\x9a\xa0\x86\xdf\xa96B\xf7\xf0\x03\xd8\x19\x9f\xd4\xcf\xa5\ +\xe7\x1a\x8a\x98-~\xfem\x97T\x1ak__\x1f\xb8\ +\xd0\xd1s\x07br\x15VN\xc4\x87\x97\xd4\x8c0\x14\ +\xe9\x15\xb7\x1e8\x1c\x0e@\xa4\xd6\x191\x9e\x85\x9b\x05\ +~m\xa9%\x1a[\x97\xd9\x0c\xe6.\x0a\xf3$\x14\xdf\ +6\x8e{\xbd\x1e\xd1\xcdB\xc8\x09o\xa9\x04<\xd1\xbd\ +V\xab\x15\x10w\x7f\x1b\x84\xf3\x92\x5c\xbbR\xa9\x84\xfa\ +\xfaz0\x99L\x0cu\xdf5\xc1Q\xb1d\x18\xc9Q\ +D>\xb6v\xcc\xb4@O\x93_~\xd3\xd6\xdf\xdf\x0f\ +2\x99\x0cD\x22\x11\xa8T*\x90J\xa5\xa0\xd1h \ +K[9\xbe\xe9\x95\xe0\x1f\xb8S\xafy,\xf3\x00\x97\ +\x8e\x22\x9e\xc7\x86\xe6S)\x19\xf6\x82\x82\x02\xe6\xe2\xa0\ +\xa0 \xe0\xf1x`\xb1X@[^\x01\xfb\xcf&\x0c\ +-\xa6S\xceg\x94\xcf\x09L\x83\xe2[{\xe6\xc2`\ +\x9a\xb2\x14\x14\x0a\x05\x88\xc5b\xc8\xcc\xcc\x84\xa2\xa2\x22\ +P\xab\xd5\xd0\xd9\xd9\xc9`\xec\xfe\xc9\xb9\xc9\xdb\xa7u\ +.\xb7\xcfK\x80\xae\xb7\xd8)p\x0e\xc0j\x97\xacx\ +\x88\xca\x7f\x82\xe2)\x89\x0e>\x97+![\x96\x0f\x07\ +c\xe3G\x84\x1f&\xd8\x92rd\x8eo\x1a\xbf\x07\xa3\ +\xd1\x08-\xad-\xf0\xcb\xc0 \x1c8\xf1\xbe\x05\xb3b\ +\xc1\x04\x5ci\x84\x85\x85\x84F\xdc&\xe72\xac,\xcf\ +3\xb5\x13\xec;\xe3\xba\xd33\xaf\x82\xe5\xfez\x89\x06\ +\x9e\xde\xfcb\x1b\xf7<\x92\x8d{f\xabO[\xca5\ +\xedXCC=444\x80\xa5\xb7\x172\x14\xc5\xc3\ +\xf3\xe9\xc0e<\x92\xe5(\x9e6]\xe5\x9c*2x\ +}\xf4\x83.Zl\x121\x0c\x1b%\xeaq\xf7/\xcb\ +'\xef\x05\x87_\xfe\xd3\xe4D\x0bLh\xf4\xc9>u\ +\x95\x1e\x0c\x06\x03\xb4\xb7\xb7\xc3\xd7\xc6\x961\xae\x81\x09\ +f\xf16m8h<I::e\xf8b\x81\x83D\ +\xbdWC\xb6\x0a^\x9b*\xc3\x94\x5c\xb0B\x0f\xab$\ +\xb4\x04\x9fJ\xaa\x9bC71(\xd4O\xf2\x0a\xc7t\ +:\x1d\xd4\xd6\xd6\x82\xc9|\xdb\xb9a\x9b\xf7_\xeab\ +\xb2\xe5~\x9cu\x1f\x0d\xf3\xb2\xd4N\xf2\xf6\xb1\xeb.\ +\xb6\xae\x94\xc3\x90l\x97U\xc1KW\xab\x80\x9cMn\ +Z\xd0\x1cI\xbd\xb1\xe7\x88\xb0\xef\xcaW\xc5PZZ\ +\x0a\x1d?\xf6L\x04\x06\x87t<\xaa\x0b\xc2\x84F\x8d\ +\x07\xc8o\x02\xd9\xf9\xaa~\x9a\xf10F\x8e6 \xaf\ +\xbcJxCi\x00\x92(\x1d\x98\xcd\x95\xb3y\xc3}\ +=\xbf\xf9Dj\xa6].\x97CSK+D\x1c{\ +\xf7\xce\xf4\x14%\xae\xf1\x8a\xf5w\x9c\xf5p\x02\xc2\xd9\ +\x0f\x89\xd1\x81\x03O\x8e\xf7\xdc\xd2i\xe7\xf3\xdfu\xfc\ +o\x14.6\xd2\xef\xd8\x17iI\xbe,\x9d\xc8\xd3\x96\ +;\xa7\x0f1\x8c%\xc6\xdf\x9f\xbaw_q5\xa0A\ +l\xb5\x08\x8c\xf9\x94\xf1\xe0\xf03K\x9a|h\x13Z\ +\xbd\xce\xa3\xd9kOH\xf7\x0c\x0f\xb0\x0f\xfe\xf3\x87\xc8\ +\xf9/\xee\xb9In\x00\xf6{>\xed\xf7\x08\x1e*>\ +]\xe5X\xaa\xf1GZ\xf5\xb6Y\x0b\x11\x1d\xb3C\xc9\ +\x918\x099\xf9\xa9\x96!\xfa\x5c\x1a\x0d\xcf\xb3\xff\xff\ +7\xfcO\x13\xf8\x1d\xe7\x87\x19\xb9D\xc3\x01\xcf\x00\x00\ +\x00\x00IEND\xaeB`\x82\ \x00\x00\x06m\ \x89\ PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ @@ -547,6 +470,83 @@ n\x11`p\xf0\xfdt___\xfa\xcc\x993\xa6\xc5\ \xa5\xd0\x8fx\x02\x89\xb5\x9ec!D\x18x\x13\xd8O\ is\x06\xb4\xf8\xb1\xfa\x1f\xbd\xfa*_\xf2\xd8\x15\x9d\ \x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x04\xa3\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x04gAMA\x00\x00\xd6\xd8\xd4OX2\ +\x00\x00\x00\x19tEXtSoftware\ +\x00Adobe ImageRead\ +yq\xc9e<\x00\x00\x045IDATX\xc3\xe5\ +\x97\xcd\x8fTE\x14\xc5\x7f\xb7\xea\xd6{\xaf\xdbn\xc7\ +\xf9@\x9d\x89FM4\x99D\x8d\x1aH\x98\xc4\x8c\x1f\ +\x1b\xfe\x02L\x5c\xf1\x07\x18\x16.M\x5ckX\xc3\x8e\ +\xc4\x8d\x1b\x17\xce\x82htA\x5c\x18\x0d\xe2\xc4\xc6\x00\ +=`PQ\x19`\x02\xa2\x0e\x0c\x83\xd3\xfd^\xf7\x94\ +\x8b\xaa\xee\xf9`\xe6\x0d\x84Q\x16VR\xa9\xce{\xb7\ +\xeb\x9e:\xf7\xd4\xa9z\xea\xbd\xe7~6\xe5>\xb7>\ +\x80]\xbbv\xbd\x03\xec\xfd\x8f\xf2N5\x1a\x8d\x03\xeb\ +\x19\xd8\xbb\xef\xbd\xa3;\x1f\x1fv\x00\x9c<:\xcf\xcc\ +\x977X\x9c\xef\xdcS\xa6\xda\xa0\xf2\xdck\x03\xbc\xb8\ +g\x10\x80\x8b\x7f\x16|\xf8\xee\x1e\x80\xdb\x00p\xfc\xec\ +\x1c\xdf?0\x04x.\xfd\xb8\xc0\xfe\xb7\xceo\xcbr\ +\x0f\x1dy\x9a\x0b#\x96\xd3\x9f\x1fd\xfc\xd5}\x9bk\ +@E\xb0\x16@xp,#\xcb\xb2m\x0100\x96\ +a\x8dP\x1b|\x14#%\x22\x14+\xd8\x18\x91\xd5\x95\ +s\xe7\xce\x83*\xb8\x04\xd2\x14\xb2\x0c\xd2,\x8cI\x0a\ +I\x12\xdew:\x90\xe7\x90\xb7\xa1\xd5\x82v+\x8em\ +(r\xb2\xfa8\xd6\x0a\xe3\xaf\xbcIk\xf1\xfa\xe6\x00\ +\xac\x15\xac\x15\x04\xb0F\xd8\xbd{\xe7\x16k\xeb\x86\xae\ +\x80Z\xa8V\x81\xeamQ\x8d\xaf\x04\xb5\x82\xf7\xa0\xa6\ +\x84\x01g\x055\x82\x08\xa8\x0a\x95,\xc3# \x1e\x08\ +\xc0\xf0\x1e/\x02\xde#\x12&\x15|\x88#\xc4!\x1e\ +<!^@MX\x18@\xd7J\x89\x06\xac\xa0\xdac\ +\x00\x9a3\xbf\x05\x8aS\x07i\x02\x95\x04\xb24\xf6\x04\ +\x12\x07N\xa1\xe8@^@+\x8f\xbd\x05K9\xb4s\ +\xc8\x0bT\x87q=\x00*\xe5%p1@\xd509\ +\xf9\xd2\xd6\x0a\xf3>\xd0\xaf\x16\xaa\x1b\x8b\xf6\xd8'a\ +a\xbd\x1c%% \x00\xf0\x81\x8d4M\xa3:\xc3\xb3\ +\x98\x11\x89l\x07\xdac\x09V\x98_)F\xfca\xcd\ +r\x7fa\x1d-\xd1\x80:\x09TI\x18O4/\xe0\ +\x9d\x85\xc4!\x89\xc3g\x09\x92i\xd8\x11\x89\xe2\x13\x87\ +X\x8b\xefv\x91\xbc\x80\xbc\x03\xed\x02\xdfj#\xed\x02\ +\xf2\x02\x9fwP\x1dE\xd5 x:\xebTx\x9b\x06\ +\x9c3x\x0f\x03\x8f$\xbc\xfe\xf2\xf3wh\xe86h\ +\xa4\xbe\xf1\xeb\xc6\xfc\xdf\xb1\x04R^\x82DM_\x84\ +\x8f\x0d\xa58\xe7\xb6\xc5\x88\x9e\x18K\xb9v\xb3\x03\x08\ +\x9dR\x11\xaa\x90\xb8P\xefZ\xc50}\xb1\xcb@\xc5\ +\xb0\x0e\xf4&\xadW\xf9U.\xe1\xe1\xc6\xd22\xf5\xcc\ +p}\xc9\x84-\xe9J\x19\x10\x9c\x1a\xc0s\xe5f\x97\ ++7\xbb\xacQW?\xd7\xaad~\xc5'\xa2)\xac\ +\x05\x15\xc3\x9c\x0b\xb5w\xa6l\x17\xa8\xc1\xa9 \xc8\x1a\ +5\xaf\x9b5\x1a\x8fY1\x9e\xfe{\xe9\xef\x14\x00\xf1\ +\x82\xef\x9bX0+WV\x02U!\xd1\x90\xfc\xe7S\ +\xdf\xf2\xeb\x99\x13,-\xde\xb8\xa7\xfaWj\x03<\xf5\ +\xecN\x9eya\x02\x0f\xa83[1\x10\x03|\x87\xf7\ +\xf7\xbf\xc1\xc2\xc2\x02\xb7n\xdd\xa2(\x0aD\x04k-\ +\xd6ZT\x15U\xc59\x87\xaab\xad\xc5\x98\xf0\xdf\xe5\ +\xe5e\xf2<\xef\xf7#\xcd\xf9\xb8\xf2-\x18pVP\ +\x17\x18\xdc1:\xb6rO8~\x9c\xe9\xe9i\x8c1\ +x\xef\x99\x98\x98`rr\xf2\x8eY\xd81:\xd6\xdf\ +\x86\xae\xd4\x09Up6\xac\xa2V\xaf\xf7k933\ +\xc3\xd0\xd0\x10\xd6Z\xbc\xf74\x9b\xcd\xbb\x02P\xab\xd7\ +p\xd1\x88\xb4\xd4\x88\x14\x9c\x0b'\x5c\xa0*\x00\xa8V\ +\xabdY\xd6\xa7\xb87\xdeis\x1a\xa9\x17AK\xad\ +8\x1e\xc7\xbd#\xb4\xd7\x8c1\x88D\xdf\x8f:\xb8\xab\ +\x9b\xaf5\xa8\x0d\xf3\xf6\x18.=\x8e\x83)m\xe3\xd5\ +\xdb\x12\xa9\xf7\xe5Vl\xad\xf4\x91\x0e\x8e\x0c\xc3\xf2\xef\ +\xdb\x02\xe0\xa1\x91a\xd4\xc2\xb5+\x97Y\x9c\xbf\xbe\x05\ +\x036\xf8\xc0`\xad\x02\x0b\xdb\xc3\xc0P\xad\xc2\xec\xc5\ +K\x9c\xfd\xee\x1b\xce\x9f\x9c\x9e\x03\xa66\x04`$^\ +J\x05\x12\x0b\xed\x91'\xa9=\x0co\x1f8\xc8f\xc7\ +\x81':\xf1*\xe75\x1e2\x81\x14(\xbap\xf9\xea\ +U\xce4\x8e\xd1\xfc\xfa\x8b\xb9\xd9\x1fN\x1d\x02\x0eo\ +\x08\xe0\xb3\x8f>\xe0\xa7\xd3'W\x99\xe9\xda\xa3\x86U\ +\xe6\xbb\x1e\x04\x1b<_\x1do|w\xee\x8f\xd9_\x0e\ +\x01\x87\x1b\x8d\xc6_\x1b\x01\x98\x9a\xfe\xf4\xe3\x7f\xf5s\ +l}\xf25\x00\xe2\xb7\xda\x81\xff\xdd\xd7\xf1?M\xf0\ +K\xb9\xe8F\x89\xaf\x00\x00\x00\x00IEND\xaeB\ +`\x82\ " qt_resource_name = b"\ @@ -555,29 +555,29 @@ qt_resource_name = b"\ \x00i\ \x00m\x00a\x00g\x00e\x00s\ \x00\x08\ -\x08\xc8Xg\ -\x00s\ -\x00a\x00v\x00e\x00.\x00p\x00n\x00g\ -\x00\x08\ \x06\xc1Y\x87\ \x00o\ \x00p\x00e\x00n\x00.\x00p\x00n\x00g\ \x00\x07\ -\x0a\xc7W\x87\ -\x00c\ -\x00u\x00t\x00.\x00p\x00n\x00g\ +\x04\xcaW\xa7\ +\x00n\ +\x00e\x00w\x00.\x00p\x00n\x00g\ \x00\x08\ \x06|Z\x07\ \x00c\ \x00o\x00p\x00y\x00.\x00p\x00n\x00g\ \x00\x07\ -\x04\xcaW\xa7\ -\x00n\ -\x00e\x00w\x00.\x00p\x00n\x00g\ +\x0a\xc7W\x87\ +\x00c\ +\x00u\x00t\x00.\x00p\x00n\x00g\ \x00\x09\ \x0a\xa8\xbaG\ \x00p\ \x00a\x00s\x00t\x00e\x00.\x00p\x00n\x00g\ +\x00\x08\ +\x08\xc8Xg\ +\x00s\ +\x00a\x00v\x00e\x00.\x00p\x00n\x00g\ " qt_resource_struct = b"\ @@ -585,18 +585,18 @@ qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00h\x00\x00\x00\x00\x00\x01\x00\x00\x171\ -\x00\x00\x01e\xaf\x16\xd2\x9d\ -\x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x00\x11\xf3\ -\x00\x00\x01e\xaf\x16\xd2\x9d\ -\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x04\xa7\ -\x00\x00\x01e\xaf\x16\xd2\x9d\ +\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x08\x1d\ +\x00\x00\x01z\xe7\xee'\x09\ +\x00\x00\x00<\x00\x00\x00\x00\x00\x01\x00\x00\x0bu\ +\x00\x00\x01z\xe7\xee'\x09\ \x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01e\xaf\x16\xd2\x9d\ -\x00\x00\x00|\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x89\ -\x00\x00\x01e\xaf\x16\xd2\x9d\ -\x00\x00\x00>\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xc4\ -\x00\x00\x01e\xaf\x16\xd2\x9d\ +\x00\x00\x01z\xe7\xee'\x09\ +\x00\x00\x00~\x00\x00\x00\x00\x00\x01\x00\x00\x1cS\ +\x00\x00\x01z\xe7\xee'\x09\ +\x00\x00\x00f\x00\x00\x00\x00\x00\x01\x00\x00\x15\xe2\ +\x00\x00\x01z\xe7\xee'\x09\ +\x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x00\x10\xb3\ +\x00\x00\x01z\xe7\xee'\x09\ " def qInitResources(): |