diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5fc4a8f..8d97b5d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 0.2.0 ***(May 4, 2021)***
+
+### Bug Fixes
+
+* [Respect the "collapsed" attribute in the business logic](https://github.com/Riverscapes/QRAVEPlugin/issues/8)
+* [Metadata.txt version not updating on plugin build.](https://github.com/Riverscapes/QRAVEPlugin/issues/7)
+* [Acknowledgements Not Updating](https://github.com/Riverscapes/QRAVEPlugin/issues/6)
+* [Toolbar Icons Disabled upon first install](https://github.com/Riverscapes/QRAVEPlugin/issues/5)
+* [Symbology qml not loading correctly](https://github.com/Riverscapes/QRAVEPlugin/issues/4)
+* [Multiple projects open at once](https://github.com/Riverscapes/QRAVEPlugin/issues/3)
+* [Support transparency attribute](https://github.com/Riverscapes/QRAVEPlugin/issues/2)
+
+
## 0.0.1
First version. Everything is new.
\ No newline at end of file
diff --git a/CHECKLIST.md b/CHECKLIST.md
new file mode 100644
index 0000000..bba2292
--- /dev/null
+++ b/CHECKLIST.md
@@ -0,0 +1,13 @@
+# Deployment Checklist
+
+There are a number of steps that have to be performed in the correct order for this plugin to deploy correctly.
+
+NEVER WORK DIRECTLY ON THE MASTER BRANCH
+
+1. Commit and push everything to git
+2. increment the version number in `__version__.py`
+3. Do a compile of all the UI and resources and commit that `pb_tool compile`
+4. Run the `deploy.py` script once and test the local version of the plugin
+5. Do a code review and a pull request to get this onto the master branch
+6. Tag the commit in git with the version number
+7. Run `deploy.py` again. This will produce the zip file to upload
\ No newline at end of file
diff --git a/__version__.py b/__version__.py
index 93fc4ed..cb74299 100644
--- a/__version__.py
+++ b/__version__.py
@@ -1 +1 @@
-__version__ = "0.1.1"
+__version__ = "0.2.0"
diff --git a/config.json b/config.json
index 48f20c3..56177c6 100644
--- a/config.json
+++ b/config.json
@@ -5,12 +5,12 @@
"basemapsInclude": true,
"lastDigestSync": null,
"lastResourceSync": null,
+ "lastBrowsePath": null,
"basemapRegion": "United States"
},
"constants": {
"logCategory": "QRAVE",
"settingsCategory": "QRAVE",
- "project_filepath": "qrave_project_path",
"businessLogicDir": "blXML",
"symbologyDir": "symbology",
"digestSyncFreqHours": 24,
diff --git a/metadata.txt b/metadata.txt
index ea19119..709519b 100644
--- a/metadata.txt
+++ b/metadata.txt
@@ -6,7 +6,7 @@
name=Riverscapes Plugin (QRAVE) DEV_COPY
qgisMinimumVersion=3.0
description=Explore symbolized Riverscapes projects
-version=0.1
+version=0.0.0dev
author=North Arrow Research
email=info@northarrowresearch.com
@@ -20,7 +20,7 @@ repository=https://github.com/Riverscapes/QRAVEPlugin
hasProcessingProvider=no
# Uncomment the following line and add your changelog:
-# changelog=
+changelog=https://github.com/Riverscapes/QRAVEPlugin/blob/master/CHANGELOG.md
# Tags are comma separated with spaces allowed
tags=python,riverscapes,rave
diff --git a/scripts/deploy.py b/scripts/deploy.py
index de55ddd..1860235 100644
--- a/scripts/deploy.py
+++ b/scripts/deploy.py
@@ -5,6 +5,7 @@
import re
import zipfile
+
PLUGIN_NAME = "qrave_toolbar"
UI_DIR = "src/ui"
@@ -52,14 +53,16 @@ def copy_plugin():
return deployfolder
-def move_meta(deployfolder):
+def move_meta(deployfolder, version):
# Metadata must be handled separately
src = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'metadata.txt'))
dst = os.path.abspath(os.path.join(deployfolder, 'metadata.txt'))
with open(src, 'r', encoding="utf8") as f, open(dst, 'w+', encoding="utf8") as wf:
text = f.read()
- wf.write(text.replace(' DEV_COPY', ''))
+ text = text.replace(' DEV_COPY', '')
+ text = text.replace('version=0.0.0dev', 'version={}'.format(version))
+ wf.write(text)
def zip_plugin(deployfolder: str):
@@ -96,7 +99,7 @@ def yesno(msg):
deployfolder = copy_plugin()
- move_meta(deployfolder)
+ move_meta(deployfolder, version)
zip_plugin(deployfolder)
- # deploy_plugin()
+ deploy_plugin()
diff --git a/src/about_dialog.py b/src/about_dialog.py
index c9b0705..0e5e547 100644
--- a/src/about_dialog.py
+++ b/src/about_dialog.py
@@ -23,6 +23,7 @@ def __init__(self, parent=None):
"""Constructor."""
QDialog.__init__(self, parent)
self.setupUi(self)
+
pixmap = QPixmap(':/plugins/qrave_toolbar/RaveAddIn.png').scaled(128, 128)
self.logo.setPixmap(pixmap)
self.website.setText('{0}'.format(CONSTANTS['webUrl']))
diff --git a/src/classes/basemaps.py b/src/classes/basemaps.py
index 350f978..8920656 100644
--- a/src/classes/basemaps.py
+++ b/src/classes/basemaps.py
@@ -6,11 +6,11 @@
import lxml.etree
from .borg import Borg
-from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon
+from qgis.PyQt.QtGui import QStandardItem, QIcon
from qgis.PyQt.QtCore import Qt
from qgis.core import QgsTask, QgsApplication, Qgis
-from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes
+from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes, ProjectTreeData
from .settings import CONSTANTS, Settings
from .util import md5, requestFetch
@@ -66,7 +66,9 @@ def parse_layer(self, root_el, parent: QStandardItem):
try:
title = root_el.find('Title').text
- name = root_el.find('Name').text
+ name_fnd = root_el.find('Name')
+ name = name_fnd.text if name_fnd is not None else title
+
srs = root_el.find('SRS').text.split(' ')[0]
lyr_format = root_el.find('Style/LegendURL/Format').text
@@ -82,7 +84,12 @@ def parse_layer(self, root_el, parent: QStandardItem):
"lyr_format": lyr_format
}
lyr_item.setData(
- QRaveMapLayer(title, QRaveMapLayer.LayerTypes.WMS, urlWithParams, extra_meta), Qt.UserRole)
+ ProjectTreeData(
+ QRaveTreeTypes.LEAF,
+ None,
+ QRaveMapLayer(title, QRaveMapLayer.LayerTypes.WMS, urlWithParams, extra_meta)
+ ),
+ Qt.UserRole)
lyr_item.setToolTip(wrap_by_word(abstract, 20))
except AttributeError as e:
@@ -93,7 +100,7 @@ def parse_layer(self, root_el, parent: QStandardItem):
Qgis.Warning
)
lyr_item = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), root_el.find('Title').text)
- lyr_item.setData({'type': QRaveTreeTypes.BASEMAP_SUB_FOLDER}, Qt.UserRole),
+ lyr_item.setData(ProjectTreeData(QRaveTreeTypes.BASEMAP_SUB_FOLDER), Qt.UserRole),
parent.appendRow(lyr_item)
@@ -120,10 +127,6 @@ def __init__(self):
if 'regions' not in self.__dict__:
self.regions = {}
- def load_capabilities(self):
- # https://hydro.nationalmap.gov/arcgis/services/wbd/MapServer/WmsServer?service=wms&request=GetCapabilities&version=1.0.0
- print('load_capabilities')
-
def load(self):
"""
Parse the XML and return any basemaps you find
@@ -138,12 +141,12 @@ def load(self):
try:
for region in lxml.etree.parse(BASEMAPS_XML_PATH).getroot().findall('Region'):
q_region = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), 'Basemaps')
- q_region.setData({'type': QRaveTreeTypes.BASEMAP_ROOT}, Qt.UserRole),
+ q_region.setData(ProjectTreeData(QRaveTreeTypes.BASEMAP_ROOT), Qt.UserRole),
self.regions[region.attrib['name']] = q_region
for group_layer in region.findall('GroupLayer'):
q_group_layer = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), group_layer.attrib['name'])
- q_group_layer.setData({'type': QRaveTreeTypes.BASEMAP_SUPER_FOLDER}, Qt.UserRole),
+ q_group_layer.setData(ProjectTreeData(QRaveTreeTypes.BASEMAP_SUPER_FOLDER), Qt.UserRole),
q_region.appendRow(q_group_layer)
for layer in group_layer.findall('Layer'):
@@ -153,12 +156,13 @@ def load(self):
meta = {meta.attrib['name']: meta.text for meta in layer.findall('Metadata/Meta')}
# We set the data to be Basemaps to help us load this stuff later
- q_layer.setData(QRaveBaseMap(q_layer, layer_url, meta), Qt.UserRole)
+ q_layer.setData(ProjectTreeData(QRaveTreeTypes.LEAF, None, QRaveBaseMap(q_layer, layer_url, meta)), Qt.UserRole)
q_group_layer.appendRow(q_layer)
except Exception as e:
- self.settings.msg_bar("Error loading basemaps", "Exception: {}".format(e),
- Qgis.Critical)
+ settings = Settings()
+ settings.msg_bar("Error loading basemaps", "Exception: {}".format(e),
+ Qgis.Critical)
def wrap_by_word(s, n):
diff --git a/src/classes/context_menu.py b/src/classes/context_menu.py
index 589a5bd..23b5010 100644
--- a/src/classes/context_menu.py
+++ b/src/classes/context_menu.py
@@ -1,6 +1,6 @@
from qgis.PyQt.QtWidgets import QDockWidget, QWidget, QTreeView, QVBoxLayout, QMenu, QAction
-from qgis.PyQt.QtCore import pyqtSlot
-from qgis.PyQt.QtGui import QIcon
+from qgis.PyQt.QtCore import pyqtSlot, QModelIndex
+from qgis.PyQt.QtGui import QIcon, QStandardItem
class ContextMenu(QMenu):
@@ -25,6 +25,10 @@ class ContextMenu(QMenu):
'Browse Project Folder',
':/plugins/qrave_toolbar/BrowseFolder.png'
),
+ 'OPEN_FILE': (
+ 'Open File',
+ ':/plugins/qrave_toolbar/RaveAddIn_16px.png'
+ ),
'BROWSE_FOLDER': (
'Browse Folder',
':/plugins/qrave_toolbar/BrowseFolder.png'
@@ -60,6 +64,7 @@ class ContextMenu(QMenu):
}
# def __init__(self):
+ # self.menu = ContextMenu()
# super().__init__(self)
def addAction(self, lookup: str, slot: pyqtSlot = None, enabled=True):
diff --git a/src/classes/net_sync.py b/src/classes/net_sync.py
index 00d525e..3da086f 100644
--- a/src/classes/net_sync.py
+++ b/src/classes/net_sync.py
@@ -3,6 +3,7 @@
import os
import json
import pdb
+from glob import glob
from time import time, sleep
from qgis.core import QgsTask, QgsMessageLog, Qgis
@@ -25,10 +26,10 @@ def __init__(self, description):
self.progress = 0
self.downloaded = 0
- self.resource_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'resources')
- self.business_logic_xml_dir = os.path.join(self.resource_dir, CONSTANTS['businessLogicDir'])
- self.symbology_dir = os.path.join(self.resource_dir, CONSTANTS['symbologyDir'])
- self.digest_path = os.path.join(self.resource_dir, 'index.json')
+ self.resource_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
+ self.business_logic_xml_dir = os.path.abspath(os.path.join(self.resource_dir, CONSTANTS['businessLogicDir']))
+ self.symbology_dir = os.path.abspath(os.path.join(self.resource_dir, CONSTANTS['symbologyDir']))
+ self.digest_path = os.path.abspath(os.path.join(self.resource_dir, 'index.json'))
self.initialized = False # self.initialize sets this
self.need_sync = True # self.initialize sets this
@@ -123,12 +124,21 @@ def _syncFiles(self):
self.progress = 0
self.downloaded = 0
+ all_local_files = [os.path.abspath(x) for x in glob(os.path.join(self.resource_dir, '**', '*.?ml'), recursive=True)]
+
+ # Symbologies have directory structure
for remote_path, remote_md5 in symbologies.items():
- local_path = os.path.join(self.symbology_dir, os.path.basename(remote_path))
+ local_path = os.path.abspath(os.path.join(self.symbology_dir, *remote_path.replace('Symbology/qgis/', '').split('/')))
+
+ # There might be subdirs to make here
+ os.makedirs(os.path.dirname(local_path), exist_ok=True)
+
if not os.path.isfile(local_path) or remote_md5 != md5(local_path):
requestDownload(CONSTANTS['resourcesUrl'] + remote_path, local_path, remote_md5)
QgsMessageLog.logMessage("Symobology downloaded: {}".format(local_path), MESSAGE_CATEGORY, level=Qgis.Info)
+
self.downloaded += 1
+ all_local_files = [x for x in all_local_files if x != local_path]
self.progress += 1
self.setProgress(self.progress)
@@ -137,7 +147,9 @@ def _syncFiles(self):
if not os.path.isfile(local_path) or remote_md5 != md5(local_path):
requestDownload(CONSTANTS['resourcesUrl'] + remote_path, local_path, remote_md5)
QgsMessageLog.logMessage("BusinessLogic downloaded: {}".format(local_path), MESSAGE_CATEGORY, level=Qgis.Info)
+
self.downloaded += 1
+ all_local_files = [x for x in all_local_files if x != local_path]
self.progress += 1
self.setProgress(self.progress)
@@ -147,12 +159,22 @@ def _syncFiles(self):
if not os.path.isfile(local_path) or remote_md5 != md5(local_path):
requestDownload(CONSTANTS['resourcesUrl'] + remote_path, local_path, remote_md5)
QgsMessageLog.logMessage("Basemaps downloaded: {}".format(local_path), 'QRAVE', level=Qgis.Info)
+
self.downloaded += 1
+ all_local_files = [x for x in all_local_files if x != local_path]
self.progress += 1
self.setProgress(self.progress)
+ # Now we clean up any files that aren't supposed to be there
+ for dfile in all_local_files:
+ try:
+ # Do a quick (probably redundant check) to make sure this file is in our current folder
+ rel_check = os.path.relpath(dfile, os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
+ if len(os.path.split(rel_check)) < 3:
+ os.remove(dfile)
+ QgsMessageLog.logMessage("Extraneous file removed: {}".format(dfile), 'QRAVE', level=Qgis.Warning)
+ else:
+ QgsMessageLog.logMessage("Can't remove file because it's in the wrong place: {}".format(dfile), 'QRAVE', level=Qgis.Critical)
+ except Exception as e:
+ QgsMessageLog.logMessage("Error deleting file: {}".format(dfile), 'QRAVE', level=Qgis.Critical)
self.setProgress(100)
- # if downloaded == 0:
- # self.set_label('No symbology or xml updates needed. 0 files downloaded')
- # else:
- # self.set_label('Downloaded and updated {}/{} symbology or xml files'.format(downloaded, total))
diff --git a/src/classes/project.py b/src/classes/project.py
index 4a069b4..d0f0509 100644
--- a/src/classes/project.py
+++ b/src/classes/project.py
@@ -2,14 +2,13 @@
import os
from typing import Dict
import lxml.etree
-from .borg import Borg
import traceback
from qgis.core import Qgis
from qgis.PyQt.QtGui import QStandardItem, QIcon, QBrush
from qgis.PyQt.QtCore import Qt
-from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes
+from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes, ProjectTreeData
from .settings import CONSTANTS, Settings
MESSAGE_CATEGORY = CONSTANTS['logCategory']
@@ -17,27 +16,26 @@
BL_XML_DIR = os.path.join(os.path.dirname(__file__), '..', '..', 'resources', CONSTANTS['businessLogicDir'])
-class Project(Borg):
+class Project:
def __init__(self, project_xml_path: str):
- Borg.__init__(self)
self.exists = False
self.meta = None
self.warehouse_meta = None
self.default_view = None
self.views = {}
self.settings = Settings()
- if project_xml_path is not None:
- self.project_xml_path = os.path.abspath(project_xml_path)
- self.project = None
- self.project_type = None
- self.business_logic_path = None
- self.business_logic = None
- self.qproject = None
- self.project_dir = None
- self.exists = os.path.isfile(self.project_xml_path)
- if self.exists:
- self.project_dir = os.path.dirname(self.project_xml_path)
+
+ self.project_xml_path = os.path.abspath(project_xml_path)
+ self.project = None
+ self.project_type = None
+ self.business_logic_path = None
+ self.business_logic = None
+ self.qproject = None
+ self.project_dir = None
+ self.exists = os.path.isfile(self.project_xml_path)
+ if self.exists:
+ self.project_dir = os.path.dirname(self.project_xml_path)
def load(self):
if self.exists is True:
@@ -94,12 +92,6 @@ def _build_tree(self, force=False):
Parse the XML and return any basemaps you find
"""
- if self.business_logic is None or force is True:
- self._load_businesslogic()
-
- if self.project is None or force is True:
- self.load_project()
-
# Maybe the basemaps file isn't synced yet
if self.project_xml_path is None or not os.path.isfile(self.project_xml_path):
self.qproject = None
@@ -122,7 +114,7 @@ def _build_views(self):
self.views = {}
curr_item = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), "Project Views")
- curr_item.setData({'type': QRaveTreeTypes.PROJECT_VIEW_FOLDER}, Qt.UserRole)
+ curr_item.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_VIEW_FOLDER, project=self), Qt.UserRole)
for view in self.business_logic.findall('Views/View'):
name = view.attrib['name']
@@ -134,10 +126,10 @@ def _build_views(self):
view_item = QStandardItem(QIcon(':/plugins/qrave_toolbar/project_view.png'), name)
view_layer_ids = [layer.attrib['id'] for layer in view.findall('Layers/Layer')]
self.views[view_id] = view_layer_ids
- view_item.setData({
- 'type': QRaveTreeTypes.PROJECT_VIEW,
- 'ids': view_layer_ids
- }, Qt.UserRole)
+ view_item.setData(
+ ProjectTreeData(QRaveTreeTypes.PROJECT_VIEW, project=self, data=view_layer_ids),
+ Qt.UserRole
+ )
curr_item.appendRow(view_item)
self.qproject.appendRow(curr_item)
@@ -178,9 +170,9 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None):
if children_container:
curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'))
if is_root is True:
- curr_item.setData({'type': QRaveTreeTypes.PROJECT_ROOT}, Qt.UserRole),
+ curr_item.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_ROOT, project=self, data=dict(children_container.attrib)), Qt.UserRole),
else:
- curr_item.setData({'type': QRaveTreeTypes.PROJECT_FOLDER}, Qt.UserRole),
+ curr_item.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_FOLDER, project=self, data=dict(children_container.attrib)), Qt.UserRole),
for child_node in children_container.xpath('*'):
# Handle any explicit children
@@ -190,7 +182,7 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None):
# Repeaters are a separate case
elif child_node.tag == 'Repeater':
qrepeater = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), child_node.attrib['label'])
- qrepeater.setData({'type': QRaveTreeTypes.PROJECT_REPEATER_FOLDER}, Qt.UserRole),
+ qrepeater.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_REPEATER_FOLDER, project=self, data=children_container.attrib), Qt.UserRole),
curr_item.appendRow(qrepeater)
repeat_xpath = child_node.attrib['xpath']
repeat_node = child_node.find('Node')
@@ -209,6 +201,8 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None):
curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/layers/MultiDot.png'))
elif bl_type == 'raster':
curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/layers/Raster.png'))
+ else:
+ curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'))
# Couldn't find this node. Ignore it.
meta = {meta.attrib['name']: meta.text for meta in new_proj_el.findall('MetaData/Meta')}
@@ -224,7 +218,7 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None):
layer_type = bl_attr['type'] if 'type' in bl_attr else 'unknown'
map_layer = QRaveMapLayer(curr_label, layer_type, layer_uri, bl_attr, meta, layer_name)
- curr_item.setData(map_layer, Qt.UserRole)
+ curr_item.setData(ProjectTreeData(QRaveTreeTypes.LEAF, project=self, data=map_layer), Qt.UserRole)
if not map_layer.exists:
curr_item.setData(QBrush(Qt.red), Qt.ForegroundRole)
@@ -233,6 +227,8 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None):
curr_item.setFont(curr_item_font)
curr_item.setToolTip('File not found: {}'.format(map_layer.layer_uri))
+ elif map_layer.layer_uri:
+ curr_item.setToolTip(map_layer.layer_uri)
if parent:
parent.appendRow(curr_item)
diff --git a/src/classes/qrave_map_layer.py b/src/classes/qrave_map_layer.py
index a3f5062..9d5a2bf 100644
--- a/src/classes/qrave_map_layer.py
+++ b/src/classes/qrave_map_layer.py
@@ -4,7 +4,6 @@
from qgis.core import Qgis, QgsProject, QgsRasterLayer, QgsVectorLayer
from qgis.PyQt.QtCore import Qt, QModelIndex, QUrl
from qgis.PyQt.QtGui import QStandardItem
-
from .settings import CONSTANTS, Settings
SYMBOLOGY_DIR = os.path.join(os.path.dirname(__file__), '..', '..', 'resources', 'symbology')
@@ -18,6 +17,7 @@ class QRaveTreeTypes():
PROJECT_REPEATER_FOLDER = 'PROJECT_REPEATER_FOLDER'
PROJECT_VIEW_FOLDER = 'PROJECT_VIEW_FOLDER'
PROJECT_VIEW = 'PROJECT_VIEW'
+ LEAF = 'LEAF' # any kind of end node: maplayers and other open-able files
# Basemaps have a surprising number of itmes
BASEMAP_ROOT = 'BASEMAP_ROOT'
BASEMAP_SUPER_FOLDER = 'BASEMAP_SUPER_FOLDER'
@@ -25,6 +25,17 @@ class QRaveTreeTypes():
# Note: Add-able layers are all covered by QRaveMapLayer and QRaveBaseMap
+class ProjectTreeData:
+ """This is just a helper class to make sure we have everyhting we need
+ for context menus when we right click
+ """
+
+ def __init__(self, node_type, project=None, data=None):
+ self.type = node_type
+ self.project = project
+ self.data = data
+
+
class QRaveMapLayer():
class LayerTypes():
@@ -32,6 +43,7 @@ class LayerTypes():
LINE = 'line'
POINT = 'point'
RASTER = 'raster'
+ FILE = 'file'
WMS = 'WMS'
def __init__(self,
@@ -44,12 +56,18 @@ def __init__(self,
):
self.label = label
self.layer_uri = layer_uri
+
+ if isinstance(layer_uri, str) and len(layer_uri) > 0 and layer_type != QRaveMapLayer.LayerTypes.WMS:
+ self.layer_uri = os.path.abspath(layer_uri)
+
self.bl_attr = bl_attr
self.meta = meta
+ self.transparency = 0
self.layer_name = layer_name
if layer_type not in QRaveMapLayer.LayerTypes.__dict__.values():
- raise Exception('Layer type "{}" is not valid'.format(layer_type))
+ settings = Settings()
+ settings.log('Layer type "{}" is not valid'.format(layer_type), Qgis.Critical)
self.layer_type = layer_type
self.exists = self.layer_type == QRaveMapLayer.LayerTypes.WMS or os.path.isfile(layer_uri)
@@ -75,7 +93,7 @@ def _addgrouptomap(sGroupName, sGroupOrder, parentGroup):
return thisGroup
@staticmethod
- def add_layer_to_map(item: QStandardItem, project):
+ def add_layer_to_map(item: QStandardItem):
"""
Add a layer to the map
:param layer:
@@ -83,7 +101,10 @@ def add_layer_to_map(item: QStandardItem, project):
"""
# No multiselect so there is only ever one item
- map_layer = item.data(Qt.UserRole)
+ pt_data: ProjectTreeData = item.data(Qt.UserRole)
+ project = pt_data.project
+ map_layer: QRaveMapLayer = pt_data.data
+
settings = Settings()
# Loop over all the parent group layers for this raster
@@ -108,6 +129,13 @@ def add_layer_to_map(item: QStandardItem, project):
# Loop over all the parent group layers for this raster
# ensuring they are in the tree in correct, nested order
+ transparency = 0
+ try:
+ if 'transparency' in map_layer.bl_attr:
+ transparency = int(map_layer.bl_attr['transparency'])
+ except Exception as e:
+ settings.log('Error deriving transparency from layer: {}'.format(e))
+
# Only add the layer if it's not already in the registry
if not QgsProject.instance().mapLayersByName(map_layer.label):
layer_uri = map_layer.layer_uri
@@ -123,10 +151,13 @@ def add_layer_to_map(item: QStandardItem, project):
elif map_layer.layer_type == QRaveMapLayer.LayerTypes.RASTER:
# Raster
rOutput = QgsRasterLayer(layer_uri, map_layer.label)
+ if transparency > 0:
+ rOutput.setOpacity((100 - transparency) / 100)
##########################################
# Symbology
##########################################
+
symbology = map_layer.bl_attr['symbology'] if map_layer.bl_attr is not None and 'symbology' in map_layer.bl_attr else None
# If the business logic has symbology defined
if symbology is not None:
diff --git a/src/classes/settings.py b/src/classes/settings.py
index 45ff841..5039896 100644
--- a/src/classes/settings.py
+++ b/src/classes/settings.py
@@ -1,6 +1,7 @@
import os
import json
import logging
+import html
from qgis.core import QgsMessageLog, Qgis, QgsProject, QgsSettings
@@ -99,4 +100,4 @@ def setValue(self, key, value):
"""
# Set it in the file
self.s.setValue(key, json.dumps({"v": value}))
- self.log("SETTINGS SET: {}={} of type '{}'".format(key, value, str(type(value))), level=Qgis.Info)
+ self.log("SETTINGS SET: {}={} of type '{}'".format(key, value, html.escape(str(type(value)))), level=Qgis.Info)
diff --git a/src/dock_widget.py b/src/dock_widget.py
index 896a7c4..3175d29 100644
--- a/src/dock_widget.py
+++ b/src/dock_widget.py
@@ -24,24 +24,24 @@
from __future__ import annotations
from typing import List, Dict
import os
+import json
-
-from qgis.PyQt import uic
-from qgis.core import Qgis, QgsRasterLayer, QgsVectorLayer, QgsProject
-from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon, QDesktopServices
-from qgis.PyQt.QtWidgets import QDockWidget, QWidget, QTreeView, QVBoxLayout, QMenu, QAction
from qgis.PyQt.QtCore import pyqtSignal, pyqtSlot, Qt, QModelIndex, QUrl
-
-from .classes.settings import Settings, CONSTANTS
-from .classes.basemaps import BaseMaps, QRaveBaseMap
-from .classes.project import Project
-from .classes.context_menu import ContextMenu
-from .classes.qrave_map_layer import QRaveMapLayer, QRaveTreeTypes
+from qgis.PyQt.QtWidgets import QDockWidget, QWidget, QTreeView, QVBoxLayout, QMenu, QAction
+from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon, QDesktopServices
+from qgis.core import Qgis, QgsRasterLayer, QgsVectorLayer, QgsProject
+from qgis.PyQt import uic
+from .ui.dock_widget import Ui_QRAVEDockWidgetBase
from .meta_widget import MetaType
+from .classes.qrave_map_layer import QRaveMapLayer, QRaveTreeTypes
+from .classes.context_menu import ContextMenu
+from .classes.project import Project, ProjectTreeData
+from .classes.basemaps import BaseMaps, QRaveBaseMap
+from .classes.settings import Settings, CONSTANTS
+
# FORM_CLASS, _ = uic.loadUiType(os.path.join(
# os.path.dirname(__file__), 'ui', 'dock_widget.ui'))
-from .ui.dock_widget import Ui_QRAVEDockWidgetBase
ADD_TO_MAP_TYPES = ['polygon', 'raster', 'point', 'line']
@@ -56,18 +56,11 @@ class QRAVEDockWidget(QDockWidget, Ui_QRAVEDockWidgetBase):
def __init__(self, parent=None):
"""Constructor."""
super(QRAVEDockWidget, self).__init__(parent)
- # Set up the user interface from Designer.
- # After setupUI you can access any designer object by doing
- # self., and you can use autoconnect slots - see
- # http://doc.qt.io/qt-5/designer-using-a-ui-file.html
- # widgets-and-dialogs-with-auto-connect
- # self.treeView
self.setupUi(self)
self.menu = ContextMenu()
self.qproject = QgsProject.instance()
- self.qproject.cleared.connect(self.close_project)
- self.qproject.readProject.connect(self.load)
+ self.qproject.cleared.connect(self.close_all)
self.treeView.setContextMenuPolicy(Qt.CustomContextMenu)
self.treeView.customContextMenuRequested.connect(self.open_menu)
@@ -77,131 +70,202 @@ def __init__(self, parent=None):
self.treeView.expanded.connect(self.expand_tree_item)
self.settings = Settings()
- self.project = None
+
self.model = QStandardItemModel()
+ self.loaded_projects: List(Project) = []
+
# Initialize our classes
self.basemaps = BaseMaps()
self.treeView.setModel(self.model)
- self.dataChange.connect(self.load)
- self.load()
+ self.dataChange.connect(self.reload_tree)
+ self.reload_tree()
def expand_tree_item(self, idx: QModelIndex):
item = self.model.itemFromIndex(idx)
- data = item.data(Qt.UserRole)
- if isinstance(data, QRaveBaseMap):
- data.load_layers()
+ item_data = item.data(Qt.UserRole)
+ if item_data and item_data.data and isinstance(item_data.data, QRaveBaseMap):
+ item_data.data.load_layers()
+
+ def _get_project(self, xml_path):
+ try:
+ return next(iter(self.loaded_projects))
+ except Exception:
+ return None
@pyqtSlot()
- def load(self):
- # re-initialize our model
+ def reload_tree(self):
+ # re-initialize our model and reload the projects from file
+ # Try not to do this too often if you can
self.model.clear()
+ self.loaded_projects = []
+ qrave_projects = self.get_project_settings()
- qrave_project_path, type_conversion_ok = self.qproject.readEntry(CONSTANTS['settingsCategory'],
- CONSTANTS['project_filepath'])
+ for project_path in qrave_projects:
+ project = Project(project_path)
+ project.load()
- old_project = self.project.project_xml_path if self.project else None
+ if project is not None and project.exists is True and project.qproject is not None:
+ self.model.appendRow(project.qproject)
+ self.expand_children_recursive(self.model.indexFromItem(project.qproject))
+ self.loaded_projects.append(project)
- if type_conversion_ok is True and os.path.isfile(qrave_project_path):
- self.project = Project(qrave_project_path)
- self.project.load()
# Load the tree objects
self.basemaps.load()
- if self.project is not None and self.project.exists is True and self.project.qproject is not None:
- self.model.appendRow(self.project.qproject)
-
- # If this is a fresh load and the setting is set we load the default view
- if self.project and old_project != self.project.project_xml_path:
- load_default_setting = self.settings.getValue('loadDefaultView')
- if load_default_setting is True \
- and self.project.default_view is not None \
- and self.project.default_view in self.project.views:
- self.add_children_to_map(self.project.qproject, self.project.views[self.project.default_view])
-
# Now load the basemaps
region = self.settings.getValue('basemapRegion')
if self.settings.getValue('basemapsInclude') is True \
and region is not None and len(region) > 0 \
and region in self.basemaps.regions.keys():
self.model.appendRow(self.basemaps.regions[region])
+ self.expand_children_recursive(self.model.indexFromItem(self.basemaps.regions[region]))
+
+ def get_project_settings(self):
+ try:
+ qrave_projects_raw, type_conversion_ok = self.qproject.readEntry(
+ CONSTANTS['settingsCategory'],
+ 'qrave_projects'
+ )
+ qrave_projects = json.loads(qrave_projects_raw)
+
+ if not type_conversion_ok or qrave_projects is None or not isinstance(qrave_projects, list):
+ qrave_projects = []
- # Finally expand all levels
- self.expandChildren()
+ except Exception as e:
+ self.settings.log('Error loading project settings: {}'.format(e), Qgis.Warning)
+ qrave_projects = []
+
+ filtered = [pf for pf in qrave_projects if os.path.isfile(pf)]
+ filtered.reverse()
+ # We Treat this like a stack where the last project in goes on the top.
+ # Element 0 should be the top item
+ return filtered
+
+ def set_project_settings(self, projects: List[str]):
+ self.qproject.writeEntry(CONSTANTS['settingsCategory'], 'qrave_projects', json.dumps(projects))
+
+ @pyqtSlot()
+ def add_project(self, xml_path: str):
+ qrave_projects = self.get_project_settings()
+
+ # If this project is not already in
+ if xml_path not in qrave_projects:
+ qrave_projects.append(xml_path)
+ self.set_project_settings(qrave_projects)
+ self.reload_tree()
+
+ new_project = self._get_project(xml_path)
+
+ # If this is a fresh load and the setting is set we load the default view
+ load_default_setting = self.settings.getValue('loadDefaultView')
+
+ if load_default_setting is True \
+ and new_project.default_view is not None \
+ and new_project.default_view in new_project.views:
+ self.add_children_to_map(new_project.qproject, new_project.views[new_project.default_view])
def closeEvent(self, event):
""" When the user clicks the "X" in the dockwidget titlebar
"""
+ self.hide()
+ self.qproject.removeEntry(CONSTANTS['settingsCategory'], 'enabled')
self.closingPlugin.emit()
event.accept()
- def expandChildren(self, idx: QModelIndex = None):
+ def expand_children_recursive(self, idx: QModelIndex = None, force=False):
+ """Expand all the children of a QTreeView node. Do it recursively
+ TODO: Recursion might not be the best for large trees here.
+
+ Args:
+ idx (QModelIndex, optional): [description]. Defaults to None.
+ force: ignore the "collapsed" business logic attribute
+ """
if idx is None:
idx = self.treeView.rootIndex()
for idy in range(self.model.rowCount(idx)):
child = self.model.index(idy, 0, idx)
- self.expandChildren(child)
+ self.expand_children_recursive(child, force)
item = self.model.itemFromIndex(idx)
- data = item.data(Qt.UserRole) if item is not None else None
- if not self.treeView.isExpanded(idx) and not isinstance(data, QRaveBaseMap):
+ item_data = item.data(Qt.UserRole) if item is not None else None
+
+ # NOTE: This is pretty verbose on purpose
+
+ # This thing needs to have data or it defaults to being expanded
+ if item_data is None or item_data.data is None:
+ collapsed = False
+
+ # Collapsed is an attribute set in the business logic
+ # Never expand the QRaveBaseMap object becsause there's a network call involved
+ elif isinstance(item_data.data, QRaveBaseMap) \
+ or (isinstance(item_data.data, dict) and 'collapsed' in item_data.data and item_data.data['collapsed'] == 'true'):
+ collapsed = True
+
+ else:
+ collapsed = False
+
+ if not self.treeView.isExpanded(idx) and not collapsed:
self.treeView.setExpanded(idx, True)
def default_tree_action(self, idx: QModelIndex):
if not idx.isValid():
return
+
item = self.model.itemFromIndex(idx)
- data = item.data(Qt.UserRole)
+ item_data: ProjectTreeData = item.data(Qt.UserRole)
# This is the default action for all add-able layers including basemaps
- if isinstance(data, QRaveMapLayer):
- QRaveMapLayer.add_layer_to_map(item, self.project)
+ if isinstance(item_data.data, QRaveMapLayer):
+ if item_data.data.layer_type == QRaveMapLayer.LayerTypes.FILE:
+ self.file_system_open(item_data.data.layer_uri)
+ else:
+ QRaveMapLayer.add_layer_to_map(item)
- elif isinstance(data, QRaveBaseMap):
+ elif isinstance(item_data.data, QRaveBaseMap):
# Expand is the default option because we might need to load the layers
- return
-
- elif data is not None and 'type' in data:
-
- if data['type'] in [QRaveTreeTypes.PROJECT_ROOT]:
- self.change_meta(item, data, True)
-
- # For folder-y types we want Expand and contract is already implemented as a default
- elif data['type'] in [
- QRaveTreeTypes.PROJECT_FOLDER,
- QRaveTreeTypes.PROJECT_REPEATER_FOLDER,
- QRaveTreeTypes.PROJECT_VIEW_FOLDER,
- QRaveTreeTypes.BASEMAP_ROOT,
- QRaveTreeTypes.BASEMAP_SUPER_FOLDER,
- QRaveTreeTypes.BASEMAP_SUB_FOLDER
- ]:
- # print("Default Folder Action")
- pass
-
- elif data['type'] == QRaveTreeTypes.PROJECT_VIEW:
- print("Default View Action")
- self.add_view_to_map(item, data)
-
- def item_change(self, postion):
+ pass
+
+ elif item_data.type in [QRaveTreeTypes.PROJECT_ROOT]:
+ self.change_meta(item, item_data, True)
+
+ # For folder-y types we want Expand and contract is already implemented as a default
+ elif item_data.type in [
+ QRaveTreeTypes.PROJECT_FOLDER,
+ QRaveTreeTypes.PROJECT_REPEATER_FOLDER,
+ QRaveTreeTypes.PROJECT_VIEW_FOLDER,
+ QRaveTreeTypes.BASEMAP_ROOT,
+ QRaveTreeTypes.BASEMAP_SUPER_FOLDER,
+ QRaveTreeTypes.BASEMAP_SUB_FOLDER
+ ]:
+ # print("Default Folder Action")
+ pass
+
+ elif item_data.type == QRaveTreeTypes.PROJECT_VIEW:
+ print("Default View Action")
+ self.add_view_to_map(item_data)
+
+ def item_change(self, pos):
"""Triggered when the user selects a new item in the tree
- Args:
- postion ([type]): [description]
+ Args:pos
+ pos ([type]): [description]
"""
indexes = self.treeView.selectedIndexes()
- if len(indexes) < 1 or self.project is None or self.project.exists is False:
- return
# No multiselect so there is only ever one item
item = self.model.itemFromIndex(indexes[0])
- data = item.data(Qt.UserRole)
+ data_item: ProjectTreeData = item.data(Qt.UserRole)
+
+ if len(indexes) < 1 or data_item.project is None or not data_item.project.exists:
+ return
# Update the metadata if we need to
- self.change_meta(item, data)
+ self.change_meta(item, data_item)
- def change_meta(self, item: QStandardItem, data, show=False):
+ def change_meta(self, item: QStandardItem, item_data: ProjectTreeData, show=False):
"""Update the MetaData dock widget with new information
Args:
@@ -209,6 +273,7 @@ def change_meta(self, item: QStandardItem, data, show=False):
data ([type]): [description]
show (bool, optional): [description]. Defaults to False.
"""
+ data = item_data.data
if isinstance(data, QRaveMapLayer):
meta = data.meta if data.meta is not None else {}
self.metaChange.emit(item.text(), MetaType.LAYER, meta, show)
@@ -216,125 +281,26 @@ def change_meta(self, item: QStandardItem, data, show=False):
elif isinstance(data, QRaveBaseMap):
self.metaChange.emit(item.text(), MetaType.NONE, {}, show)
- elif data is not None and 'type' in data:
- if data['type'] == QRaveTreeTypes.PROJECT_ROOT:
- self.metaChange.emit(item.text(), MetaType.PROJECT, {
- 'project': self.project.meta,
- 'warehouse': self.project.warehouse_meta
- }, show)
- elif data['type'] in [
- QRaveTreeTypes.PROJECT_FOLDER,
- QRaveTreeTypes.PROJECT_REPEATER_FOLDER,
- QRaveTreeTypes.PROJECT_VIEW_FOLDER,
- QRaveTreeTypes.BASEMAP_ROOT,
- QRaveTreeTypes.BASEMAP_SUPER_FOLDER,
- QRaveTreeTypes.BASEMAP_SUB_FOLDER
- ]:
- self.metaChange.emit(item.text(), MetaType.FOLDER, data, show)
- else:
+ elif item_data.type == QRaveTreeTypes.PROJECT_ROOT:
+ self.metaChange.emit(item.text(), MetaType.PROJECT, {
+ 'project': item_data.project.meta,
+ 'warehouse': item_data.project.warehouse_meta
+ }, show)
+ elif item_data.type in [
+ QRaveTreeTypes.PROJECT_FOLDER,
+ QRaveTreeTypes.PROJECT_REPEATER_FOLDER,
+ QRaveTreeTypes.PROJECT_VIEW_FOLDER,
+ QRaveTreeTypes.BASEMAP_ROOT,
+ QRaveTreeTypes.BASEMAP_SUPER_FOLDER,
+ QRaveTreeTypes.BASEMAP_SUB_FOLDER
+ ]:
+ self.metaChange.emit(item.text(), MetaType.FOLDER, data, show)
+ elif isinstance(data, dict):
+ # this is just the generic case for any kind of metadata
self.metaChange.emit(item.text(), MetaType.NONE, data, show)
-
- def open_menu(self, position):
-
- indexes = self.treeView.selectedIndexes()
- if len(indexes) < 1:
- return
-
- # No multiselect so there is only ever one item
- idx = indexes[0]
-
- if not idx.isValid():
- return
-
- item = self.model.itemFromIndex(indexes[0])
- data = item.data(Qt.UserRole)
-
- # This is the layer context menu
- if isinstance(data, QRaveMapLayer):
- if data.layer_type == QRaveMapLayer.LayerTypes.WMS:
- self.basemap_context_menu(idx, item, data)
- else:
- self.layer_context_menu(idx, item, data)
-
- # A QARaveBaseMap is just a container for layers
- elif isinstance(data, QRaveBaseMap):
- self.folder_dumb_context_menu(idx, item, data)
-
- elif data is not None and 'type' in data:
-
- if data['type'] == QRaveTreeTypes.PROJECT_ROOT:
- self.project_context_menu(idx, item, data)
-
- elif data['type'] in [
- QRaveTreeTypes.PROJECT_VIEW_FOLDER,
- QRaveTreeTypes.BASEMAP_ROOT,
- QRaveTreeTypes.BASEMAP_SUPER_FOLDER
- ]:
- self.folder_dumb_context_menu(idx, item, data)
-
- elif data['type'] in [
- QRaveTreeTypes.PROJECT_FOLDER,
- QRaveTreeTypes.PROJECT_REPEATER_FOLDER,
- QRaveTreeTypes.BASEMAP_SUB_FOLDER
- ]:
- self.folder_context_menu(idx, item, data)
-
- elif data['type'] == QRaveTreeTypes.PROJECT_VIEW:
- self.view_context_menu(idx, item, data)
-
- self.menu.exec_(self.treeView.viewport().mapToGlobal(position))
-
- # Layer context view
- def layer_context_menu(self, idx: QModelIndex, item: QStandardItem, data: QRaveMapLayer):
- self.menu.clear()
- self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item, self.project), enabled=data.exists)
- self.menu.addAction('VIEW_LAYER_META', lambda: self.change_meta(item, data, True))
-
- if bool(self.get_warehouse_url(data.meta)):
- self.menu.addAction('VIEW_WEB_SOURCE', lambda: self.layer_warehouse_view(data))
-
- self.menu.addAction('BROWSE_FOLDER', lambda: self.file_system_locate(data.layer_uri))
-
- # Basemap context items
- def basemap_context_menu(self, idx: QModelIndex, item: QStandardItem, data: Dict[str, str]):
- self.menu.clear()
- self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item, self.project))
-
- # Folder-level context menu
- def folder_context_menu(self, idx: QModelIndex, item: QStandardItem, data):
- self.menu.clear()
- self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item))
- self.menu.addSeparator()
- self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False))
- self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True))
-
- # Some folders don't have the 'ADD_ALL_TO_MAP' functionality enabled
- def folder_dumb_context_menu(self, idx: QModelIndex, item: QStandardItem, data):
- self.menu.clear()
- self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False))
- self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True))
-
- # View context items
- def view_context_menu(self, idx: QModelIndex, item: QStandardItem, data):
- self.menu.clear()
- self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_view_to_map(item, data))
-
- # Project-level context menu
- def project_context_menu(self, idx: QModelIndex, item: QStandardItem, data):
- self.menu.clear()
- self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(None, False))
- self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(None, True))
-
- self.menu.addSeparator()
- self.menu.addAction('BROWSE_PROJECT_FOLDER', lambda: self.file_system_locate(self.project.project_xml_path))
- self.menu.addAction('VIEW_PROJECT_META', lambda: self.change_meta(item, data, True))
- self.menu.addAction('WAREHOUSE_VIEW', self.project_warehouse_view, enabled=bool(self.get_warehouse_url(self.project.warehouse_meta)))
- self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item))
- self.menu.addSeparator()
- self.menu.addAction('REFRESH_PROJECT_HIERARCHY', self.load)
- self.menu.addAction('CUSTOMIZE_PROJECT_HIERARCHY', enabled=False)
- self.menu.addSeparator()
- self.menu.addAction('CLOSE_PROJECT', self.close_project, enabled=bool(self.project))
+ else:
+ # Do not update the metadata if we have nothing to show
+ self.metaChange.emit(item.text(), MetaType.NONE, {}, show)
def get_warehouse_url(self, wh_meta: Dict[str, str]):
@@ -348,10 +314,10 @@ def get_warehouse_url(self, wh_meta: Dict[str, str]):
return None
- def project_warehouse_view(self):
+ def project_warehouse_view(self, project: Project):
"""Open this project in the warehouse if the warehouse meta entries exist
"""
- url = self.get_warehouse_url(self.project.warehouse_meta)
+ url = self.get_warehouse_url(project.warehouse_meta)
if url is not None:
QDesktopServices.openUrl(QUrl(url))
@@ -362,6 +328,33 @@ def layer_warehouse_view(self, data: QRaveMapLayer):
if url is not None:
QDesktopServices.openUrl(QUrl(url))
+ def close_all(self):
+ for p in range(len(self.loaded_projects)):
+ self.close_project(self.loaded_projects[0])
+
+ def close_project(self, project: Project):
+ """ Close the project
+ """
+ try:
+ qrave_projects_raw, type_conversion_ok = self.qproject.readEntry(
+ CONSTANTS['settingsCategory'],
+ 'qrave_projects'
+ )
+ qrave_projects = json.loads(qrave_projects_raw)
+ if not type_conversion_ok or qrave_projects is None:
+ qrave_projects = []
+ except Exception as e:
+ self.settings.log('Error closing project: {}'.format(e), Qgis.Warning)
+ qrave_projects = []
+
+ # Filter out the project we want to close and reload the tree
+ qrave_projects = [x.project_xml_path for x in self.loaded_projects if x != project]
+
+ # Write the settings back to the project
+ self.qproject.writeEntry(CONSTANTS['settingsCategory'], 'qrave_projects', json.dumps(qrave_projects))
+ self.loaded_projects = qrave_projects
+ self.reload_tree()
+
def file_system_open(self, fpath: str):
"""Open a file on the operating system using the default action
@@ -371,14 +364,6 @@ def file_system_open(self, fpath: str):
qurl = QUrl.fromLocalFile(fpath)
QDesktopServices.openUrl(QUrl(qurl))
- def close_project(self):
- """ Close the project
- """
-
- self.qproject.removeEntry(CONSTANTS['settingsCategory'], CONSTANTS['project_filepath'])
- self.project = None
- self.load()
-
def file_system_locate(self, fpath: str):
"""This the OS-agnostic "show in Finder" or "show in explorer" equivalent
It should open the folder of the item in question
@@ -411,25 +396,27 @@ def _recurse(curritem):
else:
_recurse(item)
- def add_view_to_map(self, item: QStandardItem, data: dict):
+ def add_view_to_map(self, item_data: ProjectTreeData):
"""Add a view and all its layers to the map
Args:
item (QStandardItem): [description]
"""
- self.add_children_to_map(self.project.qproject, data['ids'])
- print('Add view to map')
+ self.add_children_to_map(item_data.project.qproject, item_data.data)
def add_children_to_map(self, item: QStandardItem, bl_ids: List[str] = None):
- """Recursively add all children to the map
+ """Iteratively add all children to the map
Args:
item (QStandardItem): [description]
+ bl_ids (List[str], optional): List of ids to filter by so we don't load everything. this is used for loading views
"""
+
for child in self._get_children(item):
# Is this something we can add to the map?
- data = child.data(Qt.UserRole)
- if isinstance(data, QRaveMapLayer):
+ project_tree_data = child.data(Qt.UserRole)
+ if project_tree_data is not None and isinstance(project_tree_data.data, QRaveMapLayer):
+ data = project_tree_data.data
loadme = False
# If this layer matches the businesslogic id filter
if bl_ids is not None and len(bl_ids) > 0:
@@ -439,16 +426,15 @@ def add_children_to_map(self, item: QStandardItem, bl_ids: List[str] = None):
loadme = True
if loadme is True:
- data.add_layer_to_map(child, self.project)
+ data.add_layer_to_map(child)
- def _get_children(self, root_item: QStandardItem = None):
+ def _get_children(self, root_item: QStandardItem):
"""Recursion is going to kill us here so do an iterative solution instead
https://stackoverflow.com/questions/41949370/collect-all-items-in-qtreeview-recursively
Yields:
[type]: [description]
"""
- root_item = root_item if root_item is not None else self.project.qproject
stack = [root_item]
while stack:
parent = stack.pop(0)
@@ -458,3 +444,119 @@ def _get_children(self, root_item: QStandardItem = None):
yield child
if child.hasChildren():
stack.append(child)
+
+ def _get_parents(self, start_item: QStandardItem):
+ stack = []
+ placeholder = start_item.parent()
+ while placeholder is not None and placeholder != self.model.invisibleRootItem():
+ stack.append(placeholder)
+ placeholder = start_item.parent()
+
+ return stack.reverse()
+
+ def open_menu(self, position):
+
+ indexes = self.treeView.selectedIndexes()
+ if len(indexes) < 1:
+ return
+
+ # No multiselect so there is only ever one item
+ idx = indexes[0]
+
+ if not idx.isValid():
+ return
+
+ item = self.model.itemFromIndex(indexes[0])
+ project_tree_data = item.data(Qt.UserRole) # ProjectTreeData object
+ data = project_tree_data.data # Could be a QRaveBaseMap, a QRaveMapLayer or just some random data
+
+ # This is the layer context menu
+ if isinstance(data, QRaveMapLayer):
+ if data.layer_type == QRaveMapLayer.LayerTypes.WMS:
+ self.basemap_context_menu(idx, item, project_tree_data)
+ elif data.layer_type == QRaveMapLayer.LayerTypes.FILE:
+ self.file_layer_context_menu(idx, item, project_tree_data)
+ else:
+ self.map_layer_context_menu(idx, item, project_tree_data)
+
+ # A QARaveBaseMap is just a container for layers
+ elif isinstance(data, QRaveBaseMap):
+ self.folder_dumb_context_menu(idx, item, project_tree_data)
+
+ elif project_tree_data.type == QRaveTreeTypes.PROJECT_ROOT:
+ self.project_context_menu(idx, item, project_tree_data)
+
+ elif project_tree_data.type in [
+ QRaveTreeTypes.PROJECT_VIEW_FOLDER,
+ QRaveTreeTypes.BASEMAP_ROOT,
+ QRaveTreeTypes.BASEMAP_SUPER_FOLDER
+ ]:
+ self.folder_dumb_context_menu(idx, item, project_tree_data)
+
+ elif project_tree_data.type in [
+ QRaveTreeTypes.PROJECT_FOLDER,
+ QRaveTreeTypes.PROJECT_REPEATER_FOLDER,
+ QRaveTreeTypes.BASEMAP_SUB_FOLDER
+ ]:
+ self.folder_context_menu(idx, item, project_tree_data)
+
+ elif project_tree_data.type == QRaveTreeTypes.PROJECT_VIEW:
+ self.view_context_menu(idx, item, project_tree_data)
+
+ self.menu.exec_(self.treeView.viewport().mapToGlobal(position))
+
+ def map_layer_context_menu(self, idx: QModelIndex, item: QStandardItem, item_data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item), enabled=item_data.data.exists)
+ self.menu.addAction('VIEW_LAYER_META', lambda: self.change_meta(item, item_data, True))
+
+ if bool(self.get_warehouse_url(item_data.data.meta)):
+ self.menu.addAction('VIEW_WEB_SOURCE', lambda: self.layer_warehouse_view(item_data))
+
+ self.menu.addAction('BROWSE_FOLDER', lambda: self.file_system_locate(item_data.data.layer_uri))
+
+ def file_layer_context_menu(self, idx: QModelIndex, item: QStandardItem, item_data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('OPEN_FILE', lambda: self.file_system_open(item_data.data.layer_uri))
+ self.menu.addAction('BROWSE_FOLDER', lambda: self.file_system_locate(item_data.data.layer_uri))
+
+ # Basemap context items
+ def basemap_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item))
+
+ # Folder-level context menu
+ def folder_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item))
+ self.menu.addSeparator()
+ self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False))
+ self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True))
+
+ # Some folders don't have the 'ADD_ALL_TO_MAP' functionality enabled
+ def folder_dumb_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False))
+ self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True))
+
+ # View context items
+ def view_context_menu(self, idx: QModelIndex, item: QStandardItem, item_data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_view_to_map(item_data))
+
+ # Project-level context menu
+ def project_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData):
+ self.menu.clear()
+ self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(None, False))
+ self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(None, True))
+
+ self.menu.addSeparator()
+ self.menu.addAction('BROWSE_PROJECT_FOLDER', lambda: self.file_system_locate(data.project.project_xml_path))
+ self.menu.addAction('VIEW_PROJECT_META', lambda: self.change_meta(item, data, True))
+ self.menu.addAction('WAREHOUSE_VIEW', lambda: self.project_warehouse_view(data.project), enabled=bool(self.get_warehouse_url(data.project.warehouse_meta)))
+ self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item))
+ self.menu.addSeparator()
+ self.menu.addAction('REFRESH_PROJECT_HIERARCHY', self.reload_tree)
+ self.menu.addAction('CUSTOMIZE_PROJECT_HIERARCHY', enabled=False)
+ self.menu.addSeparator()
+ self.menu.addAction('CLOSE_PROJECT', lambda: self.close_project(data.project), enabled=bool(data.project))
diff --git a/src/meta_widget.py b/src/meta_widget.py
index 7d58b95..36f0a21 100644
--- a/src/meta_widget.py
+++ b/src/meta_widget.py
@@ -120,7 +120,14 @@ def load(self, label: str, meta_type: str, meta: dict, show: bool = False):
elif meta_type == MetaType.NONE:
self.treeView.setHeaderHidden(True)
self.treeView.setEnabled(False)
+ self.model.setColumnCount(1)
self.setWindowTitle('Riverscapes MetaData: {}'.format(label))
+ no_item = QStandardItem('This item cannot have metadata')
+ no_item.setTextAlignment(Qt.AlignCenter)
+ no_f = no_item.font()
+ no_f.setItalic(True)
+ no_item.setFont(no_f)
+ root_item.appendRow(no_item)
return
# self.tree.header().setDefaultSectionSize(180)
diff --git a/src/options_dialog.py b/src/options_dialog.py
index 97881a0..f31dcbe 100644
--- a/src/options_dialog.py
+++ b/src/options_dialog.py
@@ -2,8 +2,8 @@
import json
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox
-from qgis.PyQt.QtCore import pyqtSignal
-from qgis.PyQt.QtGui import QIcon
+from qgis.PyQt.QtCore import pyqtSignal, QUrl
+from qgis.PyQt.QtGui import QIcon, QDesktopServices
from qgis.core import Qgis
from .classes.settings import Settings
@@ -47,11 +47,15 @@ def setValues(self):
def commit_settings(self, btn):
role = self.buttonBox.buttonRole(btn)
+
if role == QDialogButtonBox.ApplyRole:
self.settings.setValue('basemapsInclude', self.basemapsInclude.isChecked())
self.settings.setValue('loadDefaultView', self.loadDefaultView.isChecked())
self.settings.setValue('basemapRegion', self.basemapRegion.currentText())
+
elif role == QDialogButtonBox.ResetRole:
self.settings.resetAllSettings()
self.setValues()
+
+ # Emit a datachange so we can trigger other parts of this plugin
self.dataChange.emit()
diff --git a/src/qrave_toolbar.py b/src/qrave_toolbar.py
index 1fd5fd2..bc3a18c 100644
--- a/src/qrave_toolbar.py
+++ b/src/qrave_toolbar.py
@@ -15,6 +15,8 @@
import os.path
from time import time
from functools import partial
+import requests
+
from qgis.utils import showPluginHelp
from qgis.core import QgsTask, QgsApplication, QgsProject
@@ -25,7 +27,6 @@
from .classes.settings import Settings, CONSTANTS
from .classes.net_sync import NetSync
from .classes.basemaps import BaseMaps
-from .classes.project import Project
# Initialize Qt resources from file resources.py
@@ -39,6 +40,9 @@
from . import resources
+RESOURCES_DIR = os.path.join(os.path.dirname(__file__), '..', 'resources')
+
+
class QRAVE:
"""QGIS Plugin Implementation."""
@@ -54,11 +58,15 @@ def __init__(self, iface):
self.iface = iface
self.tm = QgsApplication.taskManager()
self.qproject = QgsProject.instance()
+
self.pluginIsActive = False
self.dockwidget = None
self.metawidget = None
+ # Populated on load from a URL
+ self.acknowledgements = None
+
# initialize plugin directory
self.plugin_dir = os.path.dirname(__file__)
# initialize locale
@@ -98,6 +106,7 @@ def tr(self, message):
def initGui(self):
"""Create the menu entries and toolbar icons inside the QGIS GUI."""
+ self.qproject.readProject.connect(self.onProjectLoad)
self.openAction = QAction(QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'), self.tr(u'Riverscapes Plugin (QRAVE)'), self.iface.mainWindow())
self.openAction.triggered.connect(self.toggle_widget)
@@ -118,20 +127,29 @@ def initGui(self):
m = self.helpButton.menu()
+ # TODO: get the local help working
+ # self.helpAction = QAction(
+ # QIcon(':/plugins/qrave_toolbar/Help.png'),
+ # self.tr('Help'),
+ # self.iface.mainWindow()
+ # )
+ # self.helpAction.triggered.connect(partial(showPluginHelp, None, filename=':/plugins/qrave_toolbar/help/build/html/index'))
+ # self.websiteAction = QAction(
+ # QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'),
+ # self.tr('Website'),
+ # self.iface.mainWindow()
+ # )
+ # self.websiteAction.triggered.connect(lambda: QDesktopServices.openUrl(QUrl("http://rave.riverscapes.xyz")))
+
self.helpAction = QAction(
QIcon(':/plugins/qrave_toolbar/Help.png'),
self.tr('Help'),
self.iface.mainWindow()
)
- self.helpAction.triggered.connect(partial(showPluginHelp, None, filename=':/plugins/qrave_toolbar/help/build/html/index'))
- self.websiteAction = QAction(
- QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'),
- self.tr('Website'),
- self.iface.mainWindow()
- )
- self.websiteAction.triggered.connect(lambda: QDesktopServices.openUrl(QUrl("http://rave.riverscapes.xyz")))
+ self.helpAction.triggered.connect(lambda: QDesktopServices.openUrl(QUrl("http://rave.riverscapes.xyz")))
self.raveOptionsAction = QAction(
+ QIcon(':/plugins/qrave_toolbar/Options.png'),
self.tr('Settings'),
self.iface.mainWindow()
)
@@ -144,6 +162,13 @@ def initGui(self):
)
self.net_sync_action.triggered.connect(lambda: self.net_sync_load(force=True))
+ self.find_resources_action = QAction(
+ QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'),
+ self.tr('Find Resources folder'),
+ self.iface.mainWindow()
+ )
+ self.find_resources_action.triggered.connect(self.locateResources)
+
self.about_action = QAction(
QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'),
self.tr('About QRAVE'),
@@ -152,10 +177,11 @@ def initGui(self):
self.about_action.triggered.connect(self.about_load)
m.addAction(self.helpAction)
- m.addAction(self.websiteAction)
+ # m.addAction(self.websiteAction)
m.addAction(self.raveOptionsAction)
m.addAction(self.net_sync_action)
m.addSeparator()
+ m.addAction(self.find_resources_action)
m.addAction(self.about_action)
self.helpButton.setDefaultAction(self.helpAction)
@@ -163,34 +189,43 @@ def initGui(self):
self.toolbar.addAction(self.openProjectAction)
self.toolbar.addWidget(self.helpButton)
- initialized = self.settings.getValue('initialized')
- if not initialized:
- self.net_sync_load(force=True)
-
- self.reloadGui()
+ # This does a lazy netsync (i.e. it will run it if it feels like it)
+ self.net_sync_load()
- def reloadGui(self):
- plugin_init = self.settings.getValue('initialized')
- self.openAction.setEnabled(plugin_init)
- self.openProjectAction.setEnabled(plugin_init)
+ def onProjectLoad(self, doc):
+ # If the project has the plugin enabled then restore it.
+ qrave_enabled, type_conversion_ok = self.qproject.readEntry(
+ CONSTANTS['settingsCategory'],
+ 'enabled'
+ )
+ if type_conversion_ok and qrave_enabled == '1':
+ self.toggle_widget(forceOn=True)
+ if self.dockwidget is not None:
+ self.dockwidget.reload_tree()
def onClosePlugin(self):
"""Cleanup necessary items here when plugin dockwidget is closed"""
-
- # print "** CLOSING QRAVE DockWidget"
+ if self.metawidget is not None:
+ self.metawidget.hide()
+ if self.dockwidget is not None:
+ self.dockwidget.hide()
# disconnects
self.dockwidget.closingPlugin.disconnect(self.onClosePlugin)
+ self.qproject.readProject.disconnect(self.onProjectLoad)
# remove this statement if dockwidget is to remain
# for reuse if plugin is reopened
- # Commented next statement since it causes QGIS crashe
- # when closing the docked window:
- # self.dockwidget = None
+ self.dockwidget = None
self.pluginIsActive = False
def unload(self):
"""Removes the plugin menu item and icon from QGIS GUI."""
+ if self.metawidget is not None:
+ self.metawidget.hide()
+ if self.dockwidget is not None:
+ self.dockwidget.hide()
+
for action in self.actions:
self.iface.removePluginMenu(
self.tr(u'&Riverscapes Plugin (QRAVE)'),
@@ -199,82 +234,11 @@ def unload(self):
# remove the toolbar
del self.toolbar
- def projectBrowserDlg(self):
- """
- Browse for a project directory
- :return:
- """
- last_project = self.settings.getValue('projectPath')
- last_dir = os.path.dirname(last_project) if last_project is not None else None
-
- dialog_return = QFileDialog.getOpenFileName(self.dockwidget, "Open a Riverscapes project", last_dir, self.tr("Riverscapes Project files (project.rs.xml)"))
- if dialog_return is not None and dialog_return[0] != "" and os.path.isfile(dialog_return[0]):
- # We set the proect path in the project settings. This way it will be saved with the QgsProject file
- self.qproject.writeEntry(CONSTANTS['settingsCategory'], CONSTANTS['project_filepath'], dialog_return[0])
- self.reload_dockwidget()
- if self.dockwidget is None or self.dockwidget.isHidden() is True:
- self.toggle_widget(forceOn=True)
-
- def options_load(self):
- """
- Open the options/settings dialog
- """
- dialog = OptionsDialog()
- if self.dockwidget:
- dialog.dataChange.connect(self.dockwidget.load)
- dialog.exec_()
-
- def about_load(self):
- """
- Open the About dialog
- """
- dialog = AboutDialog()
- dialog.exec_()
-
- def net_sync_load(self, force=False):
- """
- Periodically check for new files
- """
-
- lastDigestSync = self.settings.getValue('lastDigestSync')
- currTime = int(time()) # timestamp in seconds
- plugin_init = self.settings.getValue('initialized')
-
- netsync = NetSync('Sync QRAVE resource files')
-
- # No sync necessary in some cases:
- # 1. if the plugin is not already initialized OR
- # 2. if netsync says it needs a sync (looking for index.json)
- # 3. if the force flag is set
- # 4. if the last was more than `digestSyncFreqHours` hours ago
- if plugin_init \
- and not netsync.need_sync \
- and not force \
- and isinstance(lastDigestSync, int) \
- and ((currTime - lastDigestSync) / 3600) < CONSTANTS['digestSyncFreqHours']:
- return
-
- self.tm.addTask(netsync)
-
- def reload_dockwidget(self):
- """
- The dockwidget may or may not be initialized when we call reload so we
- add a checking step in
-
- This doesn't do any real reloading. We're just triggering the dockwidget emit signal
- and then it does all the heavy lifting
- """
- if self.dockwidget:
- self.dockwidget.dataChange.emit()
- self.reloadGui()
-
def toggle_widget(self, forceOn=False):
"""Toggle the widget open and closed when clicking the toolbar"""
if not self.pluginIsActive:
self.pluginIsActive = True
- # print "** STARTING QRAVE"
-
# dockwidget may not exist if:
# first run of plugin
# removed on close (see self.onClosePlugin method)
@@ -293,7 +257,6 @@ def toggle_widget(self, forceOn=False):
self.dockwidget.closingPlugin.connect(self.onClosePlugin)
# show the dockwidget
- # TODO: fix to allow choice of dock location
self.iface.addDockWidget(Qt.LeftDockWidgetArea, self.dockwidget)
self.iface.addDockWidget(Qt.LeftDockWidgetArea, self.metawidget)
self.dockwidget.show()
@@ -308,3 +271,87 @@ def toggle_widget(self, forceOn=False):
# The metawidget always starts hidden
if self.metawidget is not None:
self.metawidget.hide()
+
+ if self.dockwidget is not None and not self.dockwidget.isHidden():
+ self.qproject.writeEntry(CONSTANTS['settingsCategory'], 'enabled', True)
+ else:
+ self.qproject.removeEntry(CONSTANTS['settingsCategory'], 'enabled')
+
+ def net_sync_load(self, force=False):
+ """
+ Periodically check for new files
+ """
+
+ lastDigestSync = self.settings.getValue('lastDigestSync')
+ currTime = int(time()) # timestamp in seconds
+ plugin_init = self.settings.getValue('initialized')
+
+ self.netsync = NetSync('Sync QRAVE resource files')
+
+ # No sync necessary in some cases:
+ # 1. if the plugin is not already initialized OR
+ # 2. if netsync says it needs a sync (looking for index.json)
+ # 3. if the force flag is set
+ # 4. if the last was more than `digestSyncFreqHours` hours ago
+ if plugin_init \
+ and not self.netsync.need_sync \
+ and not force \
+ and isinstance(lastDigestSync, int) \
+ and ((currTime - lastDigestSync) / 3600) < CONSTANTS['digestSyncFreqHours']:
+ self.netsync = None
+ return
+
+ # Trigger the dockwidget to repaint after the netsync
+ if self.dockwidget is not None:
+ self.netsync.taskCompleted.connect(self.dockwidget.reload_tree)
+
+ # FOR DEBUGGING ONLY. NEVER IN PRODUCTION
+ # self.netsync.run()
+
+ # COMMENT THIS OUT AND USE THE LINE ABOVE FOR SYNCHRONOUS DEBUGGING
+ self.tm.addTask(self.netsync)
+
+ def projectBrowserDlg(self):
+ """
+ Browse for a project directory
+ :return:
+ """
+ last_browse_path = self.settings.getValue('lastBrowsePath')
+ last_dir = os.path.dirname(last_browse_path) if last_browse_path is not None else None
+
+ dialog_return = QFileDialog.getOpenFileName(self.dockwidget, "Open a Riverscapes project", last_dir, self.tr("Riverscapes Project files (project.rs.xml)"))
+ if dialog_return is not None and dialog_return[0] != "" and os.path.isfile(dialog_return[0]):
+ # We set the proect path in the project settings. This way it will be saved with the QgsProject file
+ if self.dockwidget is None or self.dockwidget.isHidden() is True:
+ self.toggle_widget(forceOn=True)
+ self.dockwidget.add_project(dialog_return[0])
+
+ def locateResources(self):
+ """This the OS-agnostic "show in Finder" or "show in explorer" equivalent
+ It should open the folder of the item in question
+
+ Args:
+ fpath (str): [description]
+ """
+ qurl = QUrl.fromLocalFile(RESOURCES_DIR)
+ QDesktopServices.openUrl(qurl)
+
+ def options_load(self):
+ """
+ Open the options/settings dialog
+ """
+ dialog = OptionsDialog()
+ if self.dockwidget:
+ dialog.dataChange.connect(self.dockwidget.dataChange)
+ dialog.exec_()
+
+ def about_load(self):
+ """
+ Open the About dialog
+ """
+ dialog = AboutDialog()
+ if self.acknowledgements is None:
+ self.acknowledgements = requests.get('http://rave.riverscapes.xyz/dotnetack.html').text
+
+ self.acknowledgements.setText(self.acknowledgements)
+ dialog.exec_()
diff --git a/src/resources.py b/src/resources.py
index 513b6b1..e7e5310 100644
--- a/src/resources.py
+++ b/src/resources.py
@@ -9,236 +9,6 @@
from PyQt5 import QtCore
qt_resource_data = b"\
-\x00\x00\x0d\x20\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xb1\x8e\x7c\xfb\x51\x93\
-\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x87\x0f\x00\x00\x8c\x0f\
-\x00\x00\xfd\x52\x00\x00\x81\x40\x00\x00\x7d\x79\x00\x00\xe9\x8b\
-\x00\x00\x3c\xe5\x00\x00\x19\xcc\x73\x3c\x85\x77\x00\x00\x0a\x39\
-\x69\x43\x43\x50\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x49\x43\
-\x43\x20\x70\x72\x6f\x66\x69\x6c\x65\x00\x00\x48\xc7\x9d\x96\x77\
-\x54\x54\xd7\x16\x87\xcf\xbd\x77\x7a\xa1\xcd\x30\xd2\x19\x7a\x93\
-\x2e\x30\x80\xf4\x2e\x20\x1d\x04\x51\x18\x66\x06\x18\xca\x00\xc3\
-\x0c\x4d\x6c\x88\xa8\x40\x44\x11\x11\x01\x45\x90\xa0\x80\x01\xa3\
-\xa1\x48\xac\x88\x62\x21\x28\xa8\x60\x0f\x48\x10\x50\x62\x30\x8a\
-\xa8\xa8\x64\x46\xd6\x4a\x7c\x79\x79\xef\xe5\xe5\xf7\xc7\xbd\xdf\
-\xda\x67\xef\x73\xf7\xd9\x7b\x9f\xb5\x2e\x00\x24\x4f\x1f\x2e\x2f\
-\x05\x96\x02\x20\x99\x27\xe0\x07\x7a\x38\xd3\x57\x85\x47\xd0\xb1\
-\xfd\x00\x06\x78\x80\x01\xa6\x00\x30\x59\xe9\xa9\xbe\x41\xee\xc1\
-\x40\x24\x2f\x37\x17\x7a\xba\xc8\x09\xfc\x8b\xde\x0c\x01\x48\xfc\
-\xbe\x65\xe8\xe9\x4f\xa7\x83\xff\x4f\xd2\xac\x54\xbe\x00\x00\xc8\
-\x5f\xc4\xe6\x6c\x4e\x3a\x4b\xc4\xf9\x22\x4e\xca\x14\xa4\x8a\xed\
-\x33\x22\xa6\xc6\x24\x8a\x19\x46\x89\x99\x2f\x4a\x50\xc4\x72\x62\
-\x8e\x5b\xe4\xa5\x9f\x7d\x16\xd9\x51\xcc\xec\x64\x1e\x5b\xc4\xe2\
-\x9c\x53\xd9\xc9\x6c\x31\xf7\x88\x78\x7b\x86\x90\x23\x62\xc4\x47\
-\xc4\x05\x19\x5c\x4e\xa6\x88\x6f\x8b\x58\x33\x49\x98\xcc\x15\xf1\
-\x5b\x71\x6c\x32\x87\x99\x0e\x00\x8a\x24\xb6\x0b\x38\xac\x78\x11\
-\x9b\x88\x98\xc4\x0f\x0e\x74\x11\xf1\x72\x00\x70\xa4\xb8\x2f\x38\
-\xe6\x0b\x16\x70\xb2\x04\xe2\x43\xb9\xa4\xa4\x66\xf3\xb9\x71\xf1\
-\x02\xba\x2e\x4b\x8f\x6e\x6a\x6d\xcd\xa0\x7b\x72\x32\x93\x38\x02\
-\x81\xa1\x3f\x93\x95\xc8\xe4\xb3\xe9\x2e\x29\xc9\xa9\x4c\x5e\x36\
-\x00\x8b\x67\xfe\x2c\x19\x71\x6d\xe9\xa2\x22\x5b\x9a\x5a\x5b\x5a\
-\x1a\x9a\x19\x99\x7e\x51\xa8\xff\xba\xf8\x37\x25\xee\xed\x22\xbd\
-\x0a\xf8\xdc\x33\x88\xd6\xf7\x87\xed\xaf\xfc\x52\xea\x00\x60\xcc\
-\x8a\x6a\xb3\xeb\x0f\x5b\xcc\x7e\x00\x3a\xb6\x02\x20\x77\xff\x0f\
-\x9b\xe6\x21\x00\x24\x45\x7d\x6b\xbf\xf1\xc5\x79\x68\xe2\x79\x89\
-\x17\x08\x52\x6d\x8c\x8d\x33\x33\x33\x8d\xb8\x1c\x96\x91\xb8\xa0\
-\xbf\xeb\x7f\x3a\xfc\x0d\x7d\xf1\x3d\x23\xf1\x76\xbf\x97\x87\xee\
-\xca\x89\x65\x0a\x93\x04\x74\x71\xdd\x58\x29\x49\x29\x42\x3e\x3d\
-\x3d\x95\xc9\xe2\xd0\x0d\xff\x3c\xc4\xff\x38\xf0\xaf\xf3\x58\x1a\
-\xc8\x89\xe5\xf0\x39\x3c\x51\x44\xa8\x68\xca\xb8\xbc\x38\x51\xbb\
-\x79\x6c\xae\x80\x9b\xc2\xa3\x73\x79\xff\xa9\x89\xff\x30\xec\x4f\
-\x5a\x9c\x6b\x91\x28\xf5\x9f\x00\x35\xca\x08\x48\xdd\xa0\x02\xe4\
-\xe7\x3e\x80\xa2\x10\x01\x12\x79\x50\xdc\xf5\xdf\xfb\xe6\x83\x0f\
-\x05\xe2\x9b\x17\xa6\x3a\xb1\x38\xf7\x9f\x05\xfd\xfb\xae\x70\x89\
-\xf8\x91\xce\x8d\xfb\x1c\xe7\x12\x18\x4c\x67\x09\xf9\x19\x8b\x6b\
-\xe2\x6b\x09\xd0\x80\x00\x24\x01\x15\xc8\x03\x15\xa0\x01\x74\x81\
-\x21\x30\x03\x56\xc0\x16\x38\x02\x37\xb0\x02\xf8\x81\x60\x10\x0e\
-\xd6\x02\x16\x88\x07\xc9\x80\x0f\x32\x41\x2e\xd8\x0c\x0a\x40\x11\
-\xd8\x05\xf6\x82\x4a\x50\x03\xea\x41\x23\x68\x01\x27\x40\x07\x38\
-\x0d\x2e\x80\xcb\xe0\x3a\xb8\x09\xee\x80\x07\x60\x04\x8c\x83\xe7\
-\x60\x06\xbc\x01\xf3\x10\x04\x61\x21\x32\x44\x81\xe4\x21\x55\x48\
-\x0b\x32\x80\xcc\x20\x06\x64\x0f\xb9\x41\x3e\x50\x20\x14\x0e\x45\
-\x43\x71\x10\x0f\x12\x42\xb9\xd0\x16\xa8\x08\x2a\x85\x2a\xa1\x5a\
-\xa8\x11\xfa\x16\x3a\x05\x5d\x80\xae\x42\x03\xd0\x3d\x68\x14\x9a\
-\x82\x7e\x85\xde\xc3\x08\x4c\x82\xa9\xb0\x32\xac\x0d\x1b\xc3\x0c\
-\xd8\x09\xf6\x86\x83\xe1\x35\x70\x1c\x9c\x06\xe7\xc0\xf9\xf0\x4e\
-\xb8\x02\xae\x83\x8f\xc1\xed\xf0\x05\xf8\x3a\x7c\x07\x1e\x81\x9f\
-\xc3\xb3\x08\x40\x88\x08\x0d\x51\x43\x0c\x11\x06\xe2\x82\xf8\x21\
-\x11\x48\x2c\xc2\x47\x36\x20\x85\x48\x39\x52\x87\xb4\x20\x5d\x48\
-\x2f\x72\x0b\x19\x41\xa6\x91\x77\x28\x0c\x8a\x82\xa2\xa3\x0c\x51\
-\xb6\x28\x4f\x54\x08\x8a\x85\x4a\x43\x6d\x40\x15\xa3\x2a\x51\x47\
-\x51\xed\xa8\x1e\xd4\x2d\xd4\x28\x6a\x06\xf5\x09\x4d\x46\x2b\xa1\
-\x0d\xd0\x36\x68\x2f\xf4\x2a\x74\x1c\x3a\x13\x5d\x80\x2e\x47\x37\
-\xa0\xdb\xd0\x97\xd0\x77\xd0\xe3\xe8\x37\x18\x0c\x86\x86\xd1\xc1\
-\x58\x61\x3c\x31\xe1\x98\x04\xcc\x3a\x4c\x31\xe6\x00\xa6\x15\x73\
-\x1e\x33\x80\x19\xc3\xcc\x62\xb1\x58\x79\xac\x01\xd6\x0e\xeb\x87\
-\x65\x62\x05\xd8\x02\xec\x7e\xec\x31\xec\x39\xec\x20\x76\x1c\xfb\
-\x16\x47\xc4\xa9\xe2\xcc\x70\xee\xb8\x08\x1c\x0f\x97\x87\x2b\xc7\
-\x35\xe1\xce\xe2\x06\x71\x13\xb8\x79\xbc\x14\x5e\x0b\x6f\x83\xf7\
-\xc3\xb3\xf1\xd9\xf8\x12\x7c\x3d\xbe\x0b\x7f\x03\x3f\x8e\x9f\x27\
-\x48\x13\x74\x08\x76\x84\x60\x42\x02\x61\x33\xa1\x82\xd0\x42\xb8\
-\x44\x78\x48\x78\x45\x24\x12\xd5\x89\xd6\xc4\x00\x22\x97\xb8\x89\
-\x58\x41\x3c\x4e\xbc\x42\x1c\x25\xbe\x23\xc9\x90\xf4\x49\x2e\xa4\
-\x48\x92\x90\xb4\x93\x74\x84\x74\x9e\x74\x8f\xf4\x8a\x4c\x26\x6b\
-\x93\x1d\xc9\x11\x64\x01\x79\x27\xb9\x91\x7c\x91\xfc\x98\xfc\x56\
-\x82\x22\x61\x24\xe1\x25\xc1\x96\xd8\x28\x51\x25\xd1\x2e\x31\x28\
-\xf1\x42\x12\x2f\xa9\x25\xe9\x24\xb9\x56\x32\x47\xb2\x5c\xf2\xa4\
-\xe4\x0d\xc9\x69\x29\xbc\x94\xb6\x94\x8b\x14\x53\x6a\x83\x54\x95\
-\xd4\x29\xa9\x61\xa9\x59\x69\x8a\xb4\xa9\xb4\x9f\x74\xb2\x74\xb1\
-\x74\x93\xf4\x55\xe9\x49\x19\xac\x8c\xb6\x8c\x9b\x0c\x5b\x26\x5f\
-\xe6\xb0\xcc\x45\x99\x31\x0a\x42\xd1\xa0\xb8\x50\x58\x94\x2d\x94\
-\x7a\xca\x25\xca\x38\x15\x43\xd5\xa1\x7a\x51\x13\xa8\x45\xd4\x6f\
-\xa8\xfd\xd4\x19\x59\x19\xd9\x65\xb2\xa1\xb2\x59\xb2\x55\xb2\x67\
-\x64\x47\x68\x08\x4d\x9b\xe6\x45\x4b\xa2\x95\xd0\x4e\xd0\x86\x68\
-\xef\x97\x28\x2f\x71\x5a\xc2\x59\xb2\x63\x49\xcb\x92\xc1\x25\x73\
-\x72\x8a\x72\x8e\x72\x1c\xb9\x42\xb9\x56\xb9\x3b\x72\xef\xe5\xe9\
-\xf2\x6e\xf2\x89\xf2\xbb\xe5\x3b\xe4\x1f\x29\xa0\x14\xf4\x15\x02\
-\x14\x32\x15\x0e\x2a\x5c\x52\x98\x56\xa4\x2a\xda\x2a\xb2\x14\x0b\
-\x15\x4f\x28\xde\x57\x82\x95\xf4\x95\x02\x95\xd6\x29\x1d\x56\xea\
-\x53\x9a\x55\x56\x51\xf6\x50\x4e\x55\xde\xaf\x7c\x51\x79\x5a\x85\
-\xa6\xe2\xa8\x92\xa0\x52\xa6\x72\x56\x65\x4a\x95\xa2\x6a\xaf\xca\
-\x55\x2d\x53\x3d\xa7\xfa\x8c\x2e\x4b\x77\xa2\x27\xd1\x2b\xe8\x3d\
-\xf4\x19\x35\x25\x35\x4f\x35\xa1\x5a\xad\x5a\xbf\xda\xbc\xba\x8e\
-\x7a\x88\x7a\x9e\x7a\xab\xfa\x23\x0d\x82\x06\x43\x23\x56\xa3\x4c\
-\xa3\x5b\x63\x46\x53\x55\xd3\x57\x33\x57\xb3\x59\xf3\xbe\x16\x5e\
-\x8b\xa1\x15\xaf\xb5\x4f\xab\x57\x6b\x4e\x5b\x47\x3b\x4c\x7b\x9b\
-\x76\x87\xf6\xa4\x8e\x9c\x8e\x97\x4e\x8e\x4e\xb3\xce\x43\x5d\xb2\
-\xae\x83\x6e\x9a\x6e\x9d\xee\x6d\x3d\x8c\x1e\x43\x2f\x51\xef\x80\
-\xde\x4d\x7d\x58\xdf\x42\x3f\x5e\xbf\x4a\xff\x86\x01\x6c\x60\x69\
-\xc0\x35\x38\x60\x30\xb0\x14\xbd\xd4\x7a\x29\x6f\x69\xdd\xd2\x61\
-\x43\x92\xa1\x93\x61\x86\x61\xb3\xe1\xa8\x11\xcd\xc8\xc7\x28\xcf\
-\xa8\xc3\xe8\x85\xb1\xa6\x71\x84\xf1\x6e\xe3\x5e\xe3\x4f\x26\x16\
-\x26\x49\x26\xf5\x26\x0f\x4c\x65\x4c\x57\x98\xe6\x99\x76\x99\xfe\
-\x6a\xa6\x6f\xc6\x32\xab\x32\xbb\x6d\x4e\x36\x77\x37\xdf\x68\xde\
-\x69\xfe\x72\x99\xc1\x32\xce\xb2\x83\xcb\xee\x5a\x50\x2c\x7c\x2d\
-\xb6\x59\x74\x5b\x7c\xb4\xb4\xb2\xe4\x5b\xb6\x58\x4e\x59\x69\x5a\
-\x45\x5b\x55\x5b\x0d\x33\xa8\x0c\x7f\x46\x31\xe3\x8a\x35\xda\xda\
-\xd9\x7a\xa3\xf5\x69\xeb\x77\x36\x96\x36\x02\x9b\x13\x36\xbf\xd8\
-\x1a\xda\x26\xda\x36\xd9\x4e\x2e\xd7\x59\xce\x59\x5e\xbf\x7c\xcc\
-\x4e\xdd\x8e\x69\x57\x6b\x37\x62\x4f\xb7\x8f\xb6\x3f\x64\x3f\xe2\
-\xa0\xe6\xc0\x74\xa8\x73\x78\xe2\xa8\xe1\xc8\x76\x6c\x70\x9c\x70\
-\xd2\x73\x4a\x70\x3a\xe6\xf4\xc2\xd9\xc4\x99\xef\xdc\xe6\x3c\xe7\
-\x62\xe3\xb2\xde\xe5\xbc\x2b\xe2\xea\xe1\x5a\xe8\xda\xef\x26\xe3\
-\x16\xe2\x56\xe9\xf6\xd8\x5d\xdd\x3d\xce\xbd\xd9\x7d\xc6\xc3\xc2\
-\x63\x9d\xc7\x79\x4f\xb4\xa7\xb7\xe7\x6e\xcf\x61\x2f\x65\x2f\x96\
-\x57\xa3\xd7\xcc\x0a\xab\x15\xeb\x57\xf4\x78\x93\xbc\x83\xbc\x2b\
-\xbd\x9f\xf8\xe8\xfb\xf0\x7d\xba\x7c\x61\xdf\x15\xbe\x7b\x7c\x1f\
-\xae\xd4\x5a\xc9\x5b\xd9\xe1\x07\xfc\xbc\xfc\xf6\xf8\x3d\xf2\xd7\
-\xf1\x4f\xf3\xff\x3e\x00\x13\xe0\x1f\x50\x15\xf0\x34\xd0\x34\x30\
-\x37\xb0\x37\x88\x12\x14\x15\xd4\x14\xf4\x26\xd8\x39\xb8\x24\xf8\
-\x41\x88\x6e\x88\x30\xa4\x3b\x54\x32\x34\x32\xb4\x31\x74\x2e\xcc\
-\x35\xac\x34\x6c\x64\x95\xf1\xaa\xf5\xab\xae\x87\x2b\x84\x73\xc3\
-\x3b\x23\xb0\x11\xa1\x11\x0d\x11\xb3\xab\xdd\x56\xef\x5d\x3d\x1e\
-\x69\x11\x59\x10\x39\xb4\x46\x67\x4d\xd6\x9a\xab\x6b\x15\xd6\x26\
-\xad\x3d\x13\x25\x19\xc5\x8c\x3a\x19\x8d\x8e\x0e\x8b\x6e\x8a\xfe\
-\xc0\xf4\x63\xd6\x31\x67\x63\xbc\x62\xaa\x63\x66\x58\x2e\xac\x7d\
-\xac\xe7\x6c\x47\x76\x19\x7b\x8a\x63\xc7\x29\xe5\x4c\xc4\xda\xc5\
-\x96\xc6\x4e\xc6\xd9\xc5\xed\x89\x9b\x8a\x77\x88\x2f\x8f\x9f\xe6\
-\xba\x70\x2b\xb9\x2f\x13\x3c\x13\x6a\x12\xe6\x12\xfd\x12\x8f\x24\
-\x2e\x24\x85\x25\xb5\x26\xe3\x92\xa3\x93\x4f\xf1\x64\x78\x89\xbc\
-\x9e\x14\x95\x94\xac\x94\x81\x54\x83\xd4\x82\xd4\x91\x34\x9b\xb4\
-\xbd\x69\x33\x7c\x6f\x7e\x43\x3a\x94\xbe\x26\xbd\x53\x40\x15\xfd\
-\x4c\xf5\x09\x75\x85\x5b\x85\xa3\x19\xf6\x19\x55\x19\x6f\x33\x43\
-\x33\x4f\x66\x49\x67\xf1\xb2\xfa\xb2\xf5\xb3\x77\x64\x4f\xe4\xb8\
-\xe7\x7c\xbd\x0e\xb5\x8e\xb5\xae\x3b\x57\x2d\x77\x73\xee\xe8\x7a\
-\xa7\xf5\xb5\x1b\xa0\x0d\x31\x1b\xba\x37\x6a\x6c\xcc\xdf\x38\xbe\
-\xc9\x63\xd3\xd1\xcd\x84\xcd\x89\x9b\x7f\xc8\x33\xc9\x2b\xcd\x7b\
-\xbd\x25\x6c\x4b\x57\xbe\x72\xfe\xa6\xfc\xb1\xad\x1e\x5b\x9b\x0b\
-\x24\x0a\xf8\x05\xc3\xdb\x6c\xb7\xd5\x6c\x47\x6d\xe7\x6e\xef\xdf\
-\x61\xbe\x63\xff\x8e\x4f\x85\xec\xc2\x6b\x45\x26\x45\xe5\x45\x1f\
-\x8a\x59\xc5\xd7\xbe\x32\xfd\xaa\xe2\xab\x85\x9d\xb1\x3b\xfb\x4b\
-\x2c\x4b\x0e\xee\xc2\xec\xe2\xed\x1a\xda\xed\xb0\xfb\x68\xa9\x74\
-\x69\x4e\xe9\xd8\x1e\xdf\x3d\xed\x65\xf4\xb2\xc2\xb2\xd7\x7b\xa3\
-\xf6\x5e\x2d\x5f\x56\x5e\xb3\x8f\xb0\x4f\xb8\x6f\xa4\xc2\xa7\xa2\
-\x73\xbf\xe6\xfe\x5d\xfb\x3f\x54\xc6\x57\xde\xa9\x72\xae\x6a\xad\
-\x56\xaa\xde\x51\x3d\x77\x80\x7d\x60\xf0\xa0\xe3\xc1\x96\x1a\xe5\
-\x9a\xa2\x9a\xf7\x87\xb8\x87\xee\xd6\x7a\xd4\xb6\xd7\x69\xd7\x95\
-\x1f\xc6\x1c\xce\x38\xfc\xb4\x3e\xb4\xbe\xf7\x6b\xc6\xd7\x8d\x0d\
-\x0a\x0d\x45\x0d\x1f\x8f\xf0\x8e\x8c\x1c\x0d\x3c\xda\xd3\x68\xd5\
-\xd8\xd8\xa4\xd4\x54\xd2\x0c\x37\x0b\x9b\xa7\x8e\x45\x1e\xbb\xf9\
-\x8d\xeb\x37\x9d\x2d\x86\x2d\xb5\xad\xb4\xd6\xa2\xe3\xe0\xb8\xf0\
-\xf8\xb3\x6f\xa3\xbf\x1d\x3a\xe1\x7d\xa2\xfb\x24\xe3\x64\xcb\x77\
-\x5a\xdf\x55\xb7\x51\xda\x0a\xdb\xa1\xf6\xec\xf6\x99\x8e\xf8\x8e\
-\x91\xce\xf0\xce\x81\x53\x2b\x4e\x75\x77\xd9\x76\xb5\x7d\x6f\xf4\
-\xfd\x91\xd3\x6a\xa7\xab\xce\xc8\x9e\x29\x39\x4b\x38\x9b\x7f\x76\
-\xe1\x5c\xce\xb9\xd9\xf3\xa9\xe7\xa7\x2f\xc4\x5d\x18\xeb\x8e\xea\
-\x7e\x70\x71\xd5\xc5\xdb\x3d\x01\x3d\xfd\x97\xbc\x2f\x5d\xb9\xec\
-\x7e\xf9\x62\xaf\x53\xef\xb9\x2b\x76\x57\x4e\x5f\xb5\xb9\x7a\xea\
-\x1a\xe3\x5a\xc7\x75\xcb\xeb\xed\x7d\x16\x7d\x6d\x3f\x58\xfc\xd0\
-\xd6\x6f\xd9\xdf\x7e\xc3\xea\x46\xe7\x4d\xeb\x9b\x5d\x03\xcb\x07\
-\xce\x0e\x3a\x0c\x5e\xb8\xe5\x7a\xeb\xf2\x6d\xaf\xdb\xd7\xef\xac\
-\xbc\x33\x30\x14\x32\x74\x77\x38\x72\x78\xe4\x2e\xfb\xee\xe4\xbd\
-\xa4\x7b\x2f\xef\x67\xdc\x9f\x7f\xb0\xe9\x21\xfa\x61\xe1\x23\xa9\
-\x47\xe5\x8f\x95\x1e\xd7\xfd\xa8\xf7\x63\xeb\x88\xe5\xc8\x99\x51\
-\xd7\xd1\xbe\x27\x41\x4f\x1e\x8c\xb1\xc6\x9e\xff\x94\xfe\xd3\x87\
-\xf1\xfc\xa7\xe4\xa7\xe5\x13\xaa\x13\x8d\x93\x66\x93\xa7\xa7\xdc\
-\xa7\x6e\x3e\x5b\xfd\x6c\xfc\x79\xea\xf3\xf9\xe9\x82\x9f\xa5\x7f\
-\xae\x7e\xa1\xfb\xe2\xbb\x5f\x1c\x7f\xe9\x9b\x59\x35\x33\xfe\x92\
-\xff\x72\xe1\xd7\xe2\x57\xf2\xaf\x8e\xbc\x5e\xf6\xba\x7b\xd6\x7f\
-\xf6\xf1\x9b\xe4\x37\xf3\x73\x85\x6f\xe5\xdf\x1e\x7d\xc7\x78\xd7\
-\xfb\x3e\xec\xfd\xc4\x7c\xe6\x07\xec\x87\x8a\x8f\x7a\x1f\xbb\x3e\
-\x79\x7f\x7a\xb8\x90\xbc\xb0\xf0\x1b\xf7\x84\xf3\xfb\xe2\xe6\x1d\
-\xc2\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\
-\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\
-\x66\x74\x77\x61\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\
-\x20\x76\x33\x2e\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x2b\
-\x49\x44\x41\x54\x38\x4f\xa5\x52\x4d\x6b\x13\x51\x14\xed\x4f\xc8\
-\x4f\x98\x9f\x50\x14\x5c\xb8\xca\xd2\xe5\xa0\x0d\x64\x19\xc1\x45\
-\x17\x2a\xc1\x85\x04\x41\x1c\x0a\x42\x30\xa8\x11\x29\x1a\x2c\x9d\
-\xb1\x2a\x36\x92\xda\xd9\xd4\x8e\xd1\xda\x11\x6d\xb5\x88\x74\xb0\
-\x56\x63\x1b\x26\xd3\x12\x35\x6d\xa6\xe9\xd3\xa9\xd2\x0f\xcd\xf1\
-\xde\x79\xd6\xd8\xa6\x1b\xf1\xc1\xe1\xdd\x77\xef\x3d\xe7\x7e\xcc\
-\x74\x00\xf8\x2f\xec\xe9\x9c\x98\x09\x70\xab\xb8\x8c\xf4\xed\x0a\
-\x7a\xfa\xe7\xd0\x5b\x28\x63\xe4\xf9\x47\x0a\xb5\xe7\xee\x78\xbc\
-\x71\xd7\x91\x1f\x6f\x40\x2f\x2e\xc1\xab\x6f\xe2\xcb\xda\x16\x44\
-\xb0\x49\xf6\x06\x2e\xe6\x4b\x48\xeb\x0e\x8a\x2f\x16\x29\x75\x0f\
-\x01\x26\xdf\xb3\x57\xe1\x7f\x6b\xc2\x76\x00\x6d\x10\x50\xd3\x12\
-\x6c\xdb\x8e\x80\xbb\xda\xc4\xb9\xde\x49\x8c\x3c\x2d\x13\x65\x97\
-\x00\x57\x5e\xf9\xde\x84\x61\x03\xd1\x14\x60\x58\x80\x58\xe7\x3c\
-\xc0\x13\x40\xf2\x3a\xfb\x04\x2a\x24\x72\x2a\xf3\x98\xdd\x2d\x81\
-\x89\xb7\x6b\x78\x30\xdd\x08\x2b\x33\x99\x93\xf9\x98\x2f\x81\x44\
-\x56\xde\x2c\x16\x4d\x09\xb2\x05\x74\xeb\x1d\x72\xf9\x57\x9c\x22\
-\x05\xee\x3c\xaa\xe3\x93\xf8\x11\xb6\x1a\x4d\xca\xb6\xb3\x26\xd0\
-\x49\xb6\xd2\x2d\x90\xcc\x52\x0b\x74\x54\x4d\x20\x91\x76\x30\xe7\
-\x06\x38\x7a\x66\x88\x5d\x52\x20\x73\x77\x31\x5c\x98\xaa\x49\x52\
-\x67\xb7\x84\x42\x48\x10\x99\xab\xdb\x25\x01\x45\xb5\xa1\xc4\x6d\
-\xd4\xfc\x00\x07\x62\x57\x5b\x02\xe7\x6f\xba\xb4\xed\xad\xb0\x7d\
-\x49\xa4\xe4\x84\xa0\x4e\x64\x65\xd3\xa6\x37\x11\x23\xaa\x49\xb7\
-\x89\x5a\xfd\x2b\xf6\xa9\x97\x39\x24\x05\x72\xf7\x2b\x58\xf0\x37\
-\x68\x76\x49\x54\xe2\x5e\x88\xec\xa0\x14\x88\xa8\x0e\x41\x0a\xa8\
-\x29\x1b\xa5\x72\x15\x5d\x27\x0c\x0e\x49\x81\xd1\xc9\xcf\xb0\x1c\
-\x3f\x5c\x10\x13\x23\x71\x26\x38\x34\x92\x47\x7b\xa1\x37\x93\x0f\
-\x99\x21\x0c\xcb\xc3\x90\x35\x8b\x0b\x37\xc6\x5a\x02\x8c\xcc\xc0\
-\x0c\xe6\xfd\x9f\x54\xf5\x37\x81\xc0\x36\x9f\x6d\xb2\x66\x38\xf8\
-\xb0\xec\xe3\xc8\x71\x9d\xdd\x21\xef\x8f\xc0\xd8\x54\x15\x3d\xb9\
-\x29\xb8\x0d\xfa\x17\xa8\x8a\xaa\x39\xe1\xdc\x0c\xb6\xd9\x37\x5f\
-\x5d\x41\x8c\x5a\xef\x2f\xd0\x77\xdd\x2d\xc0\x18\x7d\x56\xc1\xe9\
-\x4b\xe3\x30\x1e\xbe\xc7\xf4\xec\x02\x96\x68\xdb\xb5\x7a\x10\xce\
-\xcc\x6d\x77\x51\x65\xfd\x2f\x32\x63\x87\xc0\x36\xfa\x0a\xaf\x71\
-\xec\xec\x30\x0e\xc6\xaf\x61\xff\xe1\x2b\x88\x9d\x1c\x40\xa6\xef\
-\x09\x85\xda\x73\xdb\x1c\xff\x06\x74\xfc\x02\xb7\x71\x05\xb6\x87\
-\x1e\x9b\x8a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\xfa\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x00\xc1\x49\x44\x41\x54\x78\x5e\xad\x93\xc1\x0a\xc2\x30\
-\x10\x44\x77\xd5\xbb\xdf\xe0\x17\xd6\x4b\x21\xa5\x10\xa9\xb4\xa4\
-\x47\xfb\xa3\x42\xaf\x5e\xe2\x2c\xa8\x2c\x9b\x04\xf6\xe0\xc0\xb0\
-\xed\x23\x99\xc3\x90\x65\x22\xca\x54\x6a\xcd\x39\x0f\x1a\x30\xf3\
-\x84\x11\xc9\xe8\x40\xa5\x16\x7b\x59\x04\x76\x93\x60\x4f\xc0\x8b\
-\x5c\x6a\x07\x4c\xcc\x1c\x2d\x04\x4b\x18\xa1\x15\x70\x87\xb7\x22\
-\xa4\x7d\x79\x85\x97\xdf\x61\x14\x46\x62\xe8\x01\x67\xb1\xe1\x41\
-\xf1\xa4\xf8\x4c\xdf\x1f\x1d\xa2\x43\x4d\x48\xb2\x9c\x05\xd4\xe5\
-\x2f\xf1\xbf\x01\x52\x1e\xdc\x55\x78\x0f\xcf\x54\xd1\xa8\x4a\x89\
-\xaa\xac\xce\x51\x62\x7f\x02\x98\x91\x4c\xd0\x11\x9e\x54\xf0\x45\
-\x7d\x9f\x15\x0f\x9f\xf3\x3b\x9c\x5a\xbb\xb0\xa1\xdc\xab\xeb\x21\
-\x79\x2e\x8b\xc0\x06\xef\x2e\x3c\xa9\xad\xdd\xbb\x0b\xc1\x42\xb0\
-\x11\x23\x59\xfe\x06\x1b\xf2\x86\xe3\xee\xf9\xf8\x8f\x00\x00\x00\
-\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\x0c\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -274,111 +44,42 @@
\x08\xe1\x21\x7e\x04\xfa\x7a\xe0\xed\xee\x82\x9b\xb3\x13\xb2\xd4\
\x1f\x7f\xd0\x5f\x3e\x78\x06\x85\x27\x79\xf7\xd3\xb4\x5c\x48\x00\
\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x02\xcc\
+\x00\x00\x00\xf7\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x02\x93\x49\x44\x41\x54\x38\xcb\x8d\x93\xcd\x4b\x94\x51\
-\x14\x87\x9f\x7b\xdf\x79\x67\x9c\x69\xc6\x19\x67\x46\xcb\x50\x46\
-\x25\xa3\xa0\x24\x14\xa3\xda\x44\x10\x11\x05\x2e\xfa\xa2\x36\x21\
-\x2d\x72\xd1\xa2\x16\xd2\xa2\x3f\x40\xa2\x4d\x8b\x5a\x87\xd1\xa2\
-\xd0\x56\x42\xb4\x48\xb0\x55\x8b\x3e\x20\xa9\x88\x14\x95\xc9\xb4\
-\xc9\x4a\xa7\x99\x77\x66\x5e\xdf\x8f\x7b\x5b\x68\x8d\x96\x44\x07\
-\x0e\xf7\x5e\xb8\xbf\xe7\x9c\x73\x2f\x3f\xc1\x9a\xb8\x73\x6d\x97\
-\xe6\x3f\xe2\xc2\xc0\x5b\xf1\x6b\x2f\xfe\x04\x1c\x3a\xd7\xfb\x4f\
-\xf1\xd8\xfd\xc1\x75\xe7\xc0\x9f\x17\xb4\xd2\xe4\x17\x26\x36\x14\
-\x27\x1a\xb6\x03\xf0\xab\xc8\xd8\xfd\xc1\xbf\x01\xcb\xae\x4d\xd6\
-\xce\x21\x95\x64\x6b\x28\x85\x58\xd3\xa4\x56\x0a\x80\xe1\xc7\x2b\
-\x6b\x7a\x6d\x07\x7d\x43\x4d\x1d\x2a\xd9\xc9\x62\xb2\x9d\x96\x2d\
-\x5d\x68\xed\x63\x95\x4b\xcc\x4c\x3f\xa1\xcd\x73\x08\x49\x03\xb5\
-\x0a\xe8\xe9\xe9\x61\x64\x64\xa4\x3a\x42\xdf\x50\xd3\xb1\x83\x6d\
-\xbd\x0f\x53\x75\x06\x56\xe4\x11\x25\x69\x22\x75\x10\x69\x44\x68\
-\x6e\xdf\xc3\xd4\xc7\x2c\x8d\x8b\x59\x12\xab\x80\x75\x6f\x70\xea\
-\x56\x2c\xde\x12\xdb\x77\xaf\x20\x9e\x87\x65\x40\x11\x70\x22\xdc\
-\xbd\xfa\x85\x70\x34\xc0\xc9\x6b\x8d\xa0\xe6\x91\xb5\x09\x5e\xcc\
-\x39\x64\x36\x02\xa4\xa3\x99\x7e\x3b\x30\x93\xf4\xc3\x8a\x7c\x25\
-\x88\xd0\x0e\xd9\x77\x15\x62\x29\x83\x62\xb9\x8c\xf6\xc1\x15\x8b\
-\x38\xa6\xc1\xf8\xec\x14\x66\x30\x84\x6b\x17\xaa\x00\xdb\x2d\x1d\
-\xaa\xc8\x3c\xf3\xb3\x9b\x70\x0a\x1e\x52\x38\x68\xad\x71\x1d\x8f\
-\x99\x77\x3f\x70\x95\x47\x4d\x5c\x51\xf2\x7c\xde\x2f\xf8\xec\xcf\
-\xb4\xf2\x7a\xe4\x0a\x41\xa3\x13\xe0\xac\x38\x7d\x2b\x39\xd3\xd0\
-\x26\x5a\x26\x1e\xd4\x31\xff\x2a\x88\x14\x02\x10\x08\xb1\x92\xa0\
-\x69\x3f\xa2\x88\x6e\x2b\xa2\x27\x42\xf4\x9f\x38\x43\xe1\xdb\x57\
-\x3e\xbc\x78\xc6\x85\x81\xb7\x42\x6a\xa5\x72\xa5\x82\x26\xb8\xb9\
-\x4c\xba\xcb\x22\xbd\xd7\xc1\x37\x4c\x64\x48\xd0\xd0\x59\x21\xd5\
-\x61\x61\x47\x72\x7c\x9e\x5b\x40\x2e\x7b\xe4\xa6\xc7\x89\xd6\x25\
-\xab\x23\x78\x2e\x4f\xad\x45\x6f\x5f\xed\xae\x22\xa9\x2e\x4d\x24\
-\x2c\xc8\xbe\xe9\x26\x9c\x5e\xa2\xf9\xf8\x67\x5c\xcb\xa0\x58\x72\
-\xf8\x36\x0e\xfb\x1b\xe2\xf8\xbe\xff\xfb\x3b\x01\xa4\xb5\xe0\xdd\
-\xae\x7c\xa7\x28\x35\xc4\x13\x01\xe2\x49\x89\x1d\x49\xa2\x22\x51\
-\x62\x29\x30\xe3\x1e\xcb\x4b\x06\x69\x27\x4e\x57\xa6\x1e\xe5\xfb\
-\x68\xe5\x57\x01\xa3\x37\xac\x39\xca\x89\x8b\xca\xab\xb1\x23\x9b\
-\x04\xad\xcd\x41\x4e\x5e\x9a\xe4\xf0\xf9\x1c\xdb\x5a\xc2\xd4\x84\
-\x0d\xbc\x59\x49\xcf\xce\x56\x84\x56\xab\x00\xb5\xde\x0b\x8f\xae\
-\x7f\x7c\x70\xba\xbf\x7b\xd2\xca\xcf\xbf\x7c\xe3\x54\x38\x7a\x70\
-\x09\x13\xc9\xf0\xa8\x4b\x6c\xb6\x8d\xbe\x03\xbb\xc9\x34\xa6\x7e\
-\x8b\x94\xaa\x9a\x56\x00\xa1\x55\x90\xbe\x79\x79\x47\x29\x5f\x72\
-\xf9\x54\xb4\x31\x85\xa4\x3e\x1c\xc4\x30\x04\xa9\x5a\x13\x33\x20\
-\x30\xe4\x4a\xae\xb5\xf5\x4f\xfc\x9d\x16\x68\xea\x86\x67\x22\x00\
-\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x03\x75\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
+\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
+\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\
+\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x00\x67\x49\x44\x41\x54\x38\
+\x4f\xc5\x90\x41\x0e\xc0\x20\x08\x04\xfd\xff\xd7\x78\x14\x95\x1a\
+\x70\x21\x2d\x12\x4d\xd3\xc3\xe8\xc6\xc1\x4d\xb4\x31\xf3\x11\x63\
+\xe9\x1b\x82\x03\x2b\xc6\xd2\x37\x22\xba\xf9\xaf\x00\xc1\x81\x15\
+\x33\x24\x17\xb5\x58\x71\xce\x42\x10\x88\xb8\xb7\x27\xba\xa1\x8c\
+\x52\x81\xe6\x88\x38\xc4\x39\x0b\x41\x54\x99\x21\x29\x10\x87\x38\
+\x67\x21\x08\x44\xdc\xf7\x9f\x98\x81\x45\x5b\x05\x19\x8f\x87\x75\
+\xb8\x5d\xdd\x5e\x92\x33\xf6\x07\x9e\x02\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xfa\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x03\x3c\x49\x44\x41\x54\x38\x4f\x4d\x54\xdf\x6f\x94\x45\
-\x14\x3d\xf7\xce\x7c\xdf\xb7\xb5\x0b\xd9\x6e\xdb\x14\x5b\x0c\x62\
-\xc2\x03\x6d\x89\x80\xfe\x01\x26\x3c\xe0\x43\x0b\x94\xdd\xcf\xae\
-\x0a\x2f\xc4\x04\x22\x86\x08\xc1\x44\x2b\x3f\x16\x35\xe1\x89\xc4\
-\xc6\xa8\x04\x23\x88\xd1\x52\xac\x1b\x10\x56\x82\x18\x7e\xfc\x01\
-\x3c\x48\x59\x14\x13\x21\x3e\x68\x8b\x15\xb7\x36\x96\xb2\xdf\x8f\
-\x99\x6b\xa6\xd5\x84\x79\x99\x87\x39\x73\xe6\xdc\x73\xef\x19\xc2\
-\xc2\xa2\xff\x76\x59\xe6\x67\x57\x0e\x64\xfd\x6d\x6b\x59\xad\x6b\
-\x85\x3c\x41\x24\x74\x5f\xf8\xb7\x1b\x30\x57\xce\x36\xe2\xe3\x77\
-\x66\x67\x6b\x8f\xe2\x09\x02\x2a\x1f\x02\x95\xcb\xb0\xdb\x73\xb9\
-\x03\x45\xad\xf7\x66\x8d\x59\x94\x18\x0b\x43\x02\x08\x81\x01\xf8\
-\xcc\x98\x53\xea\x41\x25\x4d\xde\xff\x68\x66\xf7\x01\x41\x59\xdc\
-\x31\x01\xa1\x02\xc6\x6c\x39\x9f\x1f\xd9\x20\x28\xfd\xed\x2e\x2a\
-\x32\x8e\x98\xad\x10\x88\x1c\x07\x04\x62\x95\x85\x6a\x61\xc6\x45\
-\xa5\xce\xbc\xf5\xd7\x73\x61\x18\x8e\x2d\x48\xdf\x96\xcf\xed\x7f\
-\xcd\xf2\x3b\x53\x26\x8d\x29\x6a\x78\xa4\x35\x29\x56\x10\xcf\x03\
-\x89\x40\x8c\x81\x58\x03\x9b\xa4\x22\x41\x90\x74\x68\xed\x1f\x83\
-\x39\xfc\xf1\xf4\xcc\x10\x3d\x15\x04\x2b\x8e\x65\x17\x8d\x73\x62\
-\xbc\x24\x7a\xc8\x4f\xbe\x3d\x44\x8b\xd7\xac\x46\xad\xf4\x12\x98\
-\x19\x4e\x41\x12\xc7\xe8\x3d\x7d\x0a\x73\xb7\x7f\xc6\xaf\x07\xcb\
-\xa2\x82\xc0\x92\xd2\x76\x67\x6c\xd6\xd2\x9e\xb6\xb6\x23\x61\x9a\
-\xee\x99\x25\x32\x12\xc5\x6a\x55\xe5\x6b\x2c\x59\xff\x3c\x26\xab\
-\x55\xd4\x06\x07\xe7\x5f\xef\x19\xf9\x12\x5d\x9b\x0b\x98\xba\x76\
-\x0d\xe3\x1b\x37\x00\x4a\x9b\x2c\x89\x3a\xc3\xea\x28\x7d\xde\xda\
-\x3e\xbe\x2c\x89\x7a\x13\x56\x42\xa9\x61\x23\x06\xab\x46\x4f\x61\
-\x49\x5f\x3f\x26\x2a\x15\xd8\x24\x41\x57\x69\x10\x53\x97\xbe\xc7\
-\x78\x21\x04\x43\x00\xad\xac\x27\x42\x13\x7e\xf0\x0b\x55\xdb\x3b\
-\xea\x8f\x45\x8d\x16\x21\x12\xb0\x22\x49\x13\x58\x93\xa2\xfb\xe4\
-\x67\xe8\x2c\x16\x41\x20\xdc\x3b\x77\x0e\x37\x5f\xde\x02\x26\x02\
-\x69\x0d\x58\x0b\xb6\x82\xb8\x29\x33\x47\x17\xda\x3b\xa6\x9b\xa2\
-\x46\xce\xc2\x11\x80\x20\x82\xa4\xd1\x40\xcf\x89\x13\x58\x5a\x7a\
-\x71\xbe\x03\x93\x95\x0a\x7e\xdc\xba\x05\xec\xf9\x80\xf2\x00\x6b\
-\x40\x56\x90\x34\x05\x73\x74\xb2\xad\xad\xb6\x3c\x4e\xba\x63\x66\
-\x81\x31\x6c\x9c\x61\x23\x5f\xa0\x73\x73\x01\x93\xe7\xab\xb0\x69\
-\x82\xae\x81\x4d\x98\xac\x7e\x8b\x5b\xa5\x41\xb0\xeb\x8e\xd6\xe2\
-\x19\x83\x89\x4c\xe6\x2e\xed\x6e\xcd\x0f\xbf\x60\x64\xd7\x3f\x80\
-\x41\x1c\xa9\x9e\xd1\x51\x74\xf6\xf5\xe1\x0f\x57\x73\xb1\x00\x98\
-\x14\xbd\xa7\xbf\xc2\xe3\xfd\xfd\xb8\x77\xe9\x3b\xd4\x0a\x21\xe0\
-\x69\xd3\x2c\xa2\xce\xb3\xfe\x84\x56\x64\xb3\x2b\x8f\x06\x99\x1f\
-\x90\xa6\x2a\x8d\x23\x5e\x5e\x3e\x48\x8b\xd7\x3c\x83\x9b\xc5\x02\
-\xd8\x5a\x08\x2b\xd8\x34\x85\xeb\xce\x83\x9f\x6e\xe3\xee\xd0\x90\
-\x70\x10\x58\xad\x35\x5e\x35\x0f\x9f\x9d\x1f\xa4\xed\xb9\xfc\xbb\
-\x3b\x80\x7d\x0b\x83\x14\x7b\x14\x78\xe4\x06\x88\xb4\xbf\x90\x12\
-\x67\x2c\x04\x36\x4e\x45\x3c\x9d\x74\x78\x9e\x7f\x5c\xd1\x91\x0f\
-\xee\xd7\xf7\x12\x42\x28\x47\x72\xf8\x72\xfb\xd8\x7a\x6b\x06\xa6\
-\xc5\xc2\x82\x0c\xbb\x08\x88\xb3\x10\x00\x93\x58\x0b\xcb\x10\xd5\
-\x42\x84\xcb\xac\x2f\xbc\x51\xff\x73\x53\x08\x58\x07\x70\x81\x02\
-\x0e\x81\x76\x0e\xb7\xbe\x57\x60\x7a\x3d\x63\xd2\xa6\xd8\x0a\x5c\
-\x20\x9c\x02\x25\x84\x80\x08\x0d\xad\x1b\x67\xc5\x7e\x38\x5c\xaf\
-\xbf\x09\xe7\x99\x0b\xcc\xff\x71\x16\x87\x25\x48\x77\x73\xf3\xea\
-\x8d\x7e\xe6\x95\xa7\x7d\xbd\xae\x45\x64\xa9\x12\xa0\x4e\xf8\xfd\
-\x06\x70\xf5\x9b\x28\xfa\xb4\x36\x33\x73\xfd\x91\x2f\x40\xfe\x05\
-\xdd\xec\x87\x88\x85\x9f\x3f\x1c\x00\x00\x00\x00\x49\x45\x4e\x44\
-\xae\x42\x60\x82\
+\x00\x00\x00\xc1\x49\x44\x41\x54\x78\x5e\xad\x93\xc1\x0a\xc2\x30\
+\x10\x44\x77\xd5\xbb\xdf\xe0\x17\xd6\x4b\x21\xa5\x10\xa9\xb4\xa4\
+\x47\xfb\xa3\x42\xaf\x5e\xe2\x2c\xa8\x2c\x9b\x04\xf6\xe0\xc0\xb0\
+\xed\x23\x99\xc3\x90\x65\x22\xca\x54\x6a\xcd\x39\x0f\x1a\x30\xf3\
+\x84\x11\xc9\xe8\x40\xa5\x16\x7b\x59\x04\x76\x93\x60\x4f\xc0\x8b\
+\x5c\x6a\x07\x4c\xcc\x1c\x2d\x04\x4b\x18\xa1\x15\x70\x87\xb7\x22\
+\xa4\x7d\x79\x85\x97\xdf\x61\x14\x46\x62\xe8\x01\x67\xb1\xe1\x41\
+\xf1\xa4\xf8\x4c\xdf\x1f\x1d\xa2\x43\x4d\x48\xb2\x9c\x05\xd4\xe5\
+\x2f\xf1\xbf\x01\x52\x1e\xdc\x55\x78\x0f\xcf\x54\xd1\xa8\x4a\x89\
+\xaa\xac\xce\x51\x62\x7f\x02\x98\x91\x4c\xd0\x11\x9e\x54\xf0\x45\
+\x7d\x9f\x15\x0f\x9f\xf3\x3b\x9c\x5a\xbb\xb0\xa1\xdc\xab\xeb\x21\
+\x79\x2e\x8b\xc0\x06\xef\x2e\x3c\xa9\xad\xdd\xbb\x0b\xc1\x42\xb0\
+\x11\x23\x59\xfe\x06\x1b\xf2\x86\xe3\xee\xf9\xf8\x8f\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x0c\xb6\x08\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -52446,6 +52147,302 @@
\x15\x2a\x54\xa8\x50\xa1\x42\x85\x0a\x15\x2a\x54\xe8\x63\x4a\x55\
\xf5\xff\x03\xa6\xd8\x01\xea\xbc\x0a\x88\x48\x00\x00\x00\x00\x49\
\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0d\x20\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xb1\x8e\x7c\xfb\x51\x93\
+\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x87\x0f\x00\x00\x8c\x0f\
+\x00\x00\xfd\x52\x00\x00\x81\x40\x00\x00\x7d\x79\x00\x00\xe9\x8b\
+\x00\x00\x3c\xe5\x00\x00\x19\xcc\x73\x3c\x85\x77\x00\x00\x0a\x39\
+\x69\x43\x43\x50\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x49\x43\
+\x43\x20\x70\x72\x6f\x66\x69\x6c\x65\x00\x00\x48\xc7\x9d\x96\x77\
+\x54\x54\xd7\x16\x87\xcf\xbd\x77\x7a\xa1\xcd\x30\xd2\x19\x7a\x93\
+\x2e\x30\x80\xf4\x2e\x20\x1d\x04\x51\x18\x66\x06\x18\xca\x00\xc3\
+\x0c\x4d\x6c\x88\xa8\x40\x44\x11\x11\x01\x45\x90\xa0\x80\x01\xa3\
+\xa1\x48\xac\x88\x62\x21\x28\xa8\x60\x0f\x48\x10\x50\x62\x30\x8a\
+\xa8\xa8\x64\x46\xd6\x4a\x7c\x79\x79\xef\xe5\xe5\xf7\xc7\xbd\xdf\
+\xda\x67\xef\x73\xf7\xd9\x7b\x9f\xb5\x2e\x00\x24\x4f\x1f\x2e\x2f\
+\x05\x96\x02\x20\x99\x27\xe0\x07\x7a\x38\xd3\x57\x85\x47\xd0\xb1\
+\xfd\x00\x06\x78\x80\x01\xa6\x00\x30\x59\xe9\xa9\xbe\x41\xee\xc1\
+\x40\x24\x2f\x37\x17\x7a\xba\xc8\x09\xfc\x8b\xde\x0c\x01\x48\xfc\
+\xbe\x65\xe8\xe9\x4f\xa7\x83\xff\x4f\xd2\xac\x54\xbe\x00\x00\xc8\
+\x5f\xc4\xe6\x6c\x4e\x3a\x4b\xc4\xf9\x22\x4e\xca\x14\xa4\x8a\xed\
+\x33\x22\xa6\xc6\x24\x8a\x19\x46\x89\x99\x2f\x4a\x50\xc4\x72\x62\
+\x8e\x5b\xe4\xa5\x9f\x7d\x16\xd9\x51\xcc\xec\x64\x1e\x5b\xc4\xe2\
+\x9c\x53\xd9\xc9\x6c\x31\xf7\x88\x78\x7b\x86\x90\x23\x62\xc4\x47\
+\xc4\x05\x19\x5c\x4e\xa6\x88\x6f\x8b\x58\x33\x49\x98\xcc\x15\xf1\
+\x5b\x71\x6c\x32\x87\x99\x0e\x00\x8a\x24\xb6\x0b\x38\xac\x78\x11\
+\x9b\x88\x98\xc4\x0f\x0e\x74\x11\xf1\x72\x00\x70\xa4\xb8\x2f\x38\
+\xe6\x0b\x16\x70\xb2\x04\xe2\x43\xb9\xa4\xa4\x66\xf3\xb9\x71\xf1\
+\x02\xba\x2e\x4b\x8f\x6e\x6a\x6d\xcd\xa0\x7b\x72\x32\x93\x38\x02\
+\x81\xa1\x3f\x93\x95\xc8\xe4\xb3\xe9\x2e\x29\xc9\xa9\x4c\x5e\x36\
+\x00\x8b\x67\xfe\x2c\x19\x71\x6d\xe9\xa2\x22\x5b\x9a\x5a\x5b\x5a\
+\x1a\x9a\x19\x99\x7e\x51\xa8\xff\xba\xf8\x37\x25\xee\xed\x22\xbd\
+\x0a\xf8\xdc\x33\x88\xd6\xf7\x87\xed\xaf\xfc\x52\xea\x00\x60\xcc\
+\x8a\x6a\xb3\xeb\x0f\x5b\xcc\x7e\x00\x3a\xb6\x02\x20\x77\xff\x0f\
+\x9b\xe6\x21\x00\x24\x45\x7d\x6b\xbf\xf1\xc5\x79\x68\xe2\x79\x89\
+\x17\x08\x52\x6d\x8c\x8d\x33\x33\x33\x8d\xb8\x1c\x96\x91\xb8\xa0\
+\xbf\xeb\x7f\x3a\xfc\x0d\x7d\xf1\x3d\x23\xf1\x76\xbf\x97\x87\xee\
+\xca\x89\x65\x0a\x93\x04\x74\x71\xdd\x58\x29\x49\x29\x42\x3e\x3d\
+\x3d\x95\xc9\xe2\xd0\x0d\xff\x3c\xc4\xff\x38\xf0\xaf\xf3\x58\x1a\
+\xc8\x89\xe5\xf0\x39\x3c\x51\x44\xa8\x68\xca\xb8\xbc\x38\x51\xbb\
+\x79\x6c\xae\x80\x9b\xc2\xa3\x73\x79\xff\xa9\x89\xff\x30\xec\x4f\
+\x5a\x9c\x6b\x91\x28\xf5\x9f\x00\x35\xca\x08\x48\xdd\xa0\x02\xe4\
+\xe7\x3e\x80\xa2\x10\x01\x12\x79\x50\xdc\xf5\xdf\xfb\xe6\x83\x0f\
+\x05\xe2\x9b\x17\xa6\x3a\xb1\x38\xf7\x9f\x05\xfd\xfb\xae\x70\x89\
+\xf8\x91\xce\x8d\xfb\x1c\xe7\x12\x18\x4c\x67\x09\xf9\x19\x8b\x6b\
+\xe2\x6b\x09\xd0\x80\x00\x24\x01\x15\xc8\x03\x15\xa0\x01\x74\x81\
+\x21\x30\x03\x56\xc0\x16\x38\x02\x37\xb0\x02\xf8\x81\x60\x10\x0e\
+\xd6\x02\x16\x88\x07\xc9\x80\x0f\x32\x41\x2e\xd8\x0c\x0a\x40\x11\
+\xd8\x05\xf6\x82\x4a\x50\x03\xea\x41\x23\x68\x01\x27\x40\x07\x38\
+\x0d\x2e\x80\xcb\xe0\x3a\xb8\x09\xee\x80\x07\x60\x04\x8c\x83\xe7\
+\x60\x06\xbc\x01\xf3\x10\x04\x61\x21\x32\x44\x81\xe4\x21\x55\x48\
+\x0b\x32\x80\xcc\x20\x06\x64\x0f\xb9\x41\x3e\x50\x20\x14\x0e\x45\
+\x43\x71\x10\x0f\x12\x42\xb9\xd0\x16\xa8\x08\x2a\x85\x2a\xa1\x5a\
+\xa8\x11\xfa\x16\x3a\x05\x5d\x80\xae\x42\x03\xd0\x3d\x68\x14\x9a\
+\x82\x7e\x85\xde\xc3\x08\x4c\x82\xa9\xb0\x32\xac\x0d\x1b\xc3\x0c\
+\xd8\x09\xf6\x86\x83\xe1\x35\x70\x1c\x9c\x06\xe7\xc0\xf9\xf0\x4e\
+\xb8\x02\xae\x83\x8f\xc1\xed\xf0\x05\xf8\x3a\x7c\x07\x1e\x81\x9f\
+\xc3\xb3\x08\x40\x88\x08\x0d\x51\x43\x0c\x11\x06\xe2\x82\xf8\x21\
+\x11\x48\x2c\xc2\x47\x36\x20\x85\x48\x39\x52\x87\xb4\x20\x5d\x48\
+\x2f\x72\x0b\x19\x41\xa6\x91\x77\x28\x0c\x8a\x82\xa2\xa3\x0c\x51\
+\xb6\x28\x4f\x54\x08\x8a\x85\x4a\x43\x6d\x40\x15\xa3\x2a\x51\x47\
+\x51\xed\xa8\x1e\xd4\x2d\xd4\x28\x6a\x06\xf5\x09\x4d\x46\x2b\xa1\
+\x0d\xd0\x36\x68\x2f\xf4\x2a\x74\x1c\x3a\x13\x5d\x80\x2e\x47\x37\
+\xa0\xdb\xd0\x97\xd0\x77\xd0\xe3\xe8\x37\x18\x0c\x86\x86\xd1\xc1\
+\x58\x61\x3c\x31\xe1\x98\x04\xcc\x3a\x4c\x31\xe6\x00\xa6\x15\x73\
+\x1e\x33\x80\x19\xc3\xcc\x62\xb1\x58\x79\xac\x01\xd6\x0e\xeb\x87\
+\x65\x62\x05\xd8\x02\xec\x7e\xec\x31\xec\x39\xec\x20\x76\x1c\xfb\
+\x16\x47\xc4\xa9\xe2\xcc\x70\xee\xb8\x08\x1c\x0f\x97\x87\x2b\xc7\
+\x35\xe1\xce\xe2\x06\x71\x13\xb8\x79\xbc\x14\x5e\x0b\x6f\x83\xf7\
+\xc3\xb3\xf1\xd9\xf8\x12\x7c\x3d\xbe\x0b\x7f\x03\x3f\x8e\x9f\x27\
+\x48\x13\x74\x08\x76\x84\x60\x42\x02\x61\x33\xa1\x82\xd0\x42\xb8\
+\x44\x78\x48\x78\x45\x24\x12\xd5\x89\xd6\xc4\x00\x22\x97\xb8\x89\
+\x58\x41\x3c\x4e\xbc\x42\x1c\x25\xbe\x23\xc9\x90\xf4\x49\x2e\xa4\
+\x48\x92\x90\xb4\x93\x74\x84\x74\x9e\x74\x8f\xf4\x8a\x4c\x26\x6b\
+\x93\x1d\xc9\x11\x64\x01\x79\x27\xb9\x91\x7c\x91\xfc\x98\xfc\x56\
+\x82\x22\x61\x24\xe1\x25\xc1\x96\xd8\x28\x51\x25\xd1\x2e\x31\x28\
+\xf1\x42\x12\x2f\xa9\x25\xe9\x24\xb9\x56\x32\x47\xb2\x5c\xf2\xa4\
+\xe4\x0d\xc9\x69\x29\xbc\x94\xb6\x94\x8b\x14\x53\x6a\x83\x54\x95\
+\xd4\x29\xa9\x61\xa9\x59\x69\x8a\xb4\xa9\xb4\x9f\x74\xb2\x74\xb1\
+\x74\x93\xf4\x55\xe9\x49\x19\xac\x8c\xb6\x8c\x9b\x0c\x5b\x26\x5f\
+\xe6\xb0\xcc\x45\x99\x31\x0a\x42\xd1\xa0\xb8\x50\x58\x94\x2d\x94\
+\x7a\xca\x25\xca\x38\x15\x43\xd5\xa1\x7a\x51\x13\xa8\x45\xd4\x6f\
+\xa8\xfd\xd4\x19\x59\x19\xd9\x65\xb2\xa1\xb2\x59\xb2\x55\xb2\x67\
+\x64\x47\x68\x08\x4d\x9b\xe6\x45\x4b\xa2\x95\xd0\x4e\xd0\x86\x68\
+\xef\x97\x28\x2f\x71\x5a\xc2\x59\xb2\x63\x49\xcb\x92\xc1\x25\x73\
+\x72\x8a\x72\x8e\x72\x1c\xb9\x42\xb9\x56\xb9\x3b\x72\xef\xe5\xe9\
+\xf2\x6e\xf2\x89\xf2\xbb\xe5\x3b\xe4\x1f\x29\xa0\x14\xf4\x15\x02\
+\x14\x32\x15\x0e\x2a\x5c\x52\x98\x56\xa4\x2a\xda\x2a\xb2\x14\x0b\
+\x15\x4f\x28\xde\x57\x82\x95\xf4\x95\x02\x95\xd6\x29\x1d\x56\xea\
+\x53\x9a\x55\x56\x51\xf6\x50\x4e\x55\xde\xaf\x7c\x51\x79\x5a\x85\
+\xa6\xe2\xa8\x92\xa0\x52\xa6\x72\x56\x65\x4a\x95\xa2\x6a\xaf\xca\
+\x55\x2d\x53\x3d\xa7\xfa\x8c\x2e\x4b\x77\xa2\x27\xd1\x2b\xe8\x3d\
+\xf4\x19\x35\x25\x35\x4f\x35\xa1\x5a\xad\x5a\xbf\xda\xbc\xba\x8e\
+\x7a\x88\x7a\x9e\x7a\xab\xfa\x23\x0d\x82\x06\x43\x23\x56\xa3\x4c\
+\xa3\x5b\x63\x46\x53\x55\xd3\x57\x33\x57\xb3\x59\xf3\xbe\x16\x5e\
+\x8b\xa1\x15\xaf\xb5\x4f\xab\x57\x6b\x4e\x5b\x47\x3b\x4c\x7b\x9b\
+\x76\x87\xf6\xa4\x8e\x9c\x8e\x97\x4e\x8e\x4e\xb3\xce\x43\x5d\xb2\
+\xae\x83\x6e\x9a\x6e\x9d\xee\x6d\x3d\x8c\x1e\x43\x2f\x51\xef\x80\
+\xde\x4d\x7d\x58\xdf\x42\x3f\x5e\xbf\x4a\xff\x86\x01\x6c\x60\x69\
+\xc0\x35\x38\x60\x30\xb0\x14\xbd\xd4\x7a\x29\x6f\x69\xdd\xd2\x61\
+\x43\x92\xa1\x93\x61\x86\x61\xb3\xe1\xa8\x11\xcd\xc8\xc7\x28\xcf\
+\xa8\xc3\xe8\x85\xb1\xa6\x71\x84\xf1\x6e\xe3\x5e\xe3\x4f\x26\x16\
+\x26\x49\x26\xf5\x26\x0f\x4c\x65\x4c\x57\x98\xe6\x99\x76\x99\xfe\
+\x6a\xa6\x6f\xc6\x32\xab\x32\xbb\x6d\x4e\x36\x77\x37\xdf\x68\xde\
+\x69\xfe\x72\x99\xc1\x32\xce\xb2\x83\xcb\xee\x5a\x50\x2c\x7c\x2d\
+\xb6\x59\x74\x5b\x7c\xb4\xb4\xb2\xe4\x5b\xb6\x58\x4e\x59\x69\x5a\
+\x45\x5b\x55\x5b\x0d\x33\xa8\x0c\x7f\x46\x31\xe3\x8a\x35\xda\xda\
+\xd9\x7a\xa3\xf5\x69\xeb\x77\x36\x96\x36\x02\x9b\x13\x36\xbf\xd8\
+\x1a\xda\x26\xda\x36\xd9\x4e\x2e\xd7\x59\xce\x59\x5e\xbf\x7c\xcc\
+\x4e\xdd\x8e\x69\x57\x6b\x37\x62\x4f\xb7\x8f\xb6\x3f\x64\x3f\xe2\
+\xa0\xe6\xc0\x74\xa8\x73\x78\xe2\xa8\xe1\xc8\x76\x6c\x70\x9c\x70\
+\xd2\x73\x4a\x70\x3a\xe6\xf4\xc2\xd9\xc4\x99\xef\xdc\xe6\x3c\xe7\
+\x62\xe3\xb2\xde\xe5\xbc\x2b\xe2\xea\xe1\x5a\xe8\xda\xef\x26\xe3\
+\x16\xe2\x56\xe9\xf6\xd8\x5d\xdd\x3d\xce\xbd\xd9\x7d\xc6\xc3\xc2\
+\x63\x9d\xc7\x79\x4f\xb4\xa7\xb7\xe7\x6e\xcf\x61\x2f\x65\x2f\x96\
+\x57\xa3\xd7\xcc\x0a\xab\x15\xeb\x57\xf4\x78\x93\xbc\x83\xbc\x2b\
+\xbd\x9f\xf8\xe8\xfb\xf0\x7d\xba\x7c\x61\xdf\x15\xbe\x7b\x7c\x1f\
+\xae\xd4\x5a\xc9\x5b\xd9\xe1\x07\xfc\xbc\xfc\xf6\xf8\x3d\xf2\xd7\
+\xf1\x4f\xf3\xff\x3e\x00\x13\xe0\x1f\x50\x15\xf0\x34\xd0\x34\x30\
+\x37\xb0\x37\x88\x12\x14\x15\xd4\x14\xf4\x26\xd8\x39\xb8\x24\xf8\
+\x41\x88\x6e\x88\x30\xa4\x3b\x54\x32\x34\x32\xb4\x31\x74\x2e\xcc\
+\x35\xac\x34\x6c\x64\x95\xf1\xaa\xf5\xab\xae\x87\x2b\x84\x73\xc3\
+\x3b\x23\xb0\x11\xa1\x11\x0d\x11\xb3\xab\xdd\x56\xef\x5d\x3d\x1e\
+\x69\x11\x59\x10\x39\xb4\x46\x67\x4d\xd6\x9a\xab\x6b\x15\xd6\x26\
+\xad\x3d\x13\x25\x19\xc5\x8c\x3a\x19\x8d\x8e\x0e\x8b\x6e\x8a\xfe\
+\xc0\xf4\x63\xd6\x31\x67\x63\xbc\x62\xaa\x63\x66\x58\x2e\xac\x7d\
+\xac\xe7\x6c\x47\x76\x19\x7b\x8a\x63\xc7\x29\xe5\x4c\xc4\xda\xc5\
+\x96\xc6\x4e\xc6\xd9\xc5\xed\x89\x9b\x8a\x77\x88\x2f\x8f\x9f\xe6\
+\xba\x70\x2b\xb9\x2f\x13\x3c\x13\x6a\x12\xe6\x12\xfd\x12\x8f\x24\
+\x2e\x24\x85\x25\xb5\x26\xe3\x92\xa3\x93\x4f\xf1\x64\x78\x89\xbc\
+\x9e\x14\x95\x94\xac\x94\x81\x54\x83\xd4\x82\xd4\x91\x34\x9b\xb4\
+\xbd\x69\x33\x7c\x6f\x7e\x43\x3a\x94\xbe\x26\xbd\x53\x40\x15\xfd\
+\x4c\xf5\x09\x75\x85\x5b\x85\xa3\x19\xf6\x19\x55\x19\x6f\x33\x43\
+\x33\x4f\x66\x49\x67\xf1\xb2\xfa\xb2\xf5\xb3\x77\x64\x4f\xe4\xb8\
+\xe7\x7c\xbd\x0e\xb5\x8e\xb5\xae\x3b\x57\x2d\x77\x73\xee\xe8\x7a\
+\xa7\xf5\xb5\x1b\xa0\x0d\x31\x1b\xba\x37\x6a\x6c\xcc\xdf\x38\xbe\
+\xc9\x63\xd3\xd1\xcd\x84\xcd\x89\x9b\x7f\xc8\x33\xc9\x2b\xcd\x7b\
+\xbd\x25\x6c\x4b\x57\xbe\x72\xfe\xa6\xfc\xb1\xad\x1e\x5b\x9b\x0b\
+\x24\x0a\xf8\x05\xc3\xdb\x6c\xb7\xd5\x6c\x47\x6d\xe7\x6e\xef\xdf\
+\x61\xbe\x63\xff\x8e\x4f\x85\xec\xc2\x6b\x45\x26\x45\xe5\x45\x1f\
+\x8a\x59\xc5\xd7\xbe\x32\xfd\xaa\xe2\xab\x85\x9d\xb1\x3b\xfb\x4b\
+\x2c\x4b\x0e\xee\xc2\xec\xe2\xed\x1a\xda\xed\xb0\xfb\x68\xa9\x74\
+\x69\x4e\xe9\xd8\x1e\xdf\x3d\xed\x65\xf4\xb2\xc2\xb2\xd7\x7b\xa3\
+\xf6\x5e\x2d\x5f\x56\x5e\xb3\x8f\xb0\x4f\xb8\x6f\xa4\xc2\xa7\xa2\
+\x73\xbf\xe6\xfe\x5d\xfb\x3f\x54\xc6\x57\xde\xa9\x72\xae\x6a\xad\
+\x56\xaa\xde\x51\x3d\x77\x80\x7d\x60\xf0\xa0\xe3\xc1\x96\x1a\xe5\
+\x9a\xa2\x9a\xf7\x87\xb8\x87\xee\xd6\x7a\xd4\xb6\xd7\x69\xd7\x95\
+\x1f\xc6\x1c\xce\x38\xfc\xb4\x3e\xb4\xbe\xf7\x6b\xc6\xd7\x8d\x0d\
+\x0a\x0d\x45\x0d\x1f\x8f\xf0\x8e\x8c\x1c\x0d\x3c\xda\xd3\x68\xd5\
+\xd8\xd8\xa4\xd4\x54\xd2\x0c\x37\x0b\x9b\xa7\x8e\x45\x1e\xbb\xf9\
+\x8d\xeb\x37\x9d\x2d\x86\x2d\xb5\xad\xb4\xd6\xa2\xe3\xe0\xb8\xf0\
+\xf8\xb3\x6f\xa3\xbf\x1d\x3a\xe1\x7d\xa2\xfb\x24\xe3\x64\xcb\x77\
+\x5a\xdf\x55\xb7\x51\xda\x0a\xdb\xa1\xf6\xec\xf6\x99\x8e\xf8\x8e\
+\x91\xce\xf0\xce\x81\x53\x2b\x4e\x75\x77\xd9\x76\xb5\x7d\x6f\xf4\
+\xfd\x91\xd3\x6a\xa7\xab\xce\xc8\x9e\x29\x39\x4b\x38\x9b\x7f\x76\
+\xe1\x5c\xce\xb9\xd9\xf3\xa9\xe7\xa7\x2f\xc4\x5d\x18\xeb\x8e\xea\
+\x7e\x70\x71\xd5\xc5\xdb\x3d\x01\x3d\xfd\x97\xbc\x2f\x5d\xb9\xec\
+\x7e\xf9\x62\xaf\x53\xef\xb9\x2b\x76\x57\x4e\x5f\xb5\xb9\x7a\xea\
+\x1a\xe3\x5a\xc7\x75\xcb\xeb\xed\x7d\x16\x7d\x6d\x3f\x58\xfc\xd0\
+\xd6\x6f\xd9\xdf\x7e\xc3\xea\x46\xe7\x4d\xeb\x9b\x5d\x03\xcb\x07\
+\xce\x0e\x3a\x0c\x5e\xb8\xe5\x7a\xeb\xf2\x6d\xaf\xdb\xd7\xef\xac\
+\xbc\x33\x30\x14\x32\x74\x77\x38\x72\x78\xe4\x2e\xfb\xee\xe4\xbd\
+\xa4\x7b\x2f\xef\x67\xdc\x9f\x7f\xb0\xe9\x21\xfa\x61\xe1\x23\xa9\
+\x47\xe5\x8f\x95\x1e\xd7\xfd\xa8\xf7\x63\xeb\x88\xe5\xc8\x99\x51\
+\xd7\xd1\xbe\x27\x41\x4f\x1e\x8c\xb1\xc6\x9e\xff\x94\xfe\xd3\x87\
+\xf1\xfc\xa7\xe4\xa7\xe5\x13\xaa\x13\x8d\x93\x66\x93\xa7\xa7\xdc\
+\xa7\x6e\x3e\x5b\xfd\x6c\xfc\x79\xea\xf3\xf9\xe9\x82\x9f\xa5\x7f\
+\xae\x7e\xa1\xfb\xe2\xbb\x5f\x1c\x7f\xe9\x9b\x59\x35\x33\xfe\x92\
+\xff\x72\xe1\xd7\xe2\x57\xf2\xaf\x8e\xbc\x5e\xf6\xba\x7b\xd6\x7f\
+\xf6\xf1\x9b\xe4\x37\xf3\x73\x85\x6f\xe5\xdf\x1e\x7d\xc7\x78\xd7\
+\xfb\x3e\xec\xfd\xc4\x7c\xe6\x07\xec\x87\x8a\x8f\x7a\x1f\xbb\x3e\
+\x79\x7f\x7a\xb8\x90\xbc\xb0\xf0\x1b\xf7\x84\xf3\xfb\xe2\xe6\x1d\
+\xc2\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\
+\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\
+\x66\x74\x77\x61\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\
+\x20\x76\x33\x2e\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x2b\
+\x49\x44\x41\x54\x38\x4f\xa5\x52\x4d\x6b\x13\x51\x14\xed\x4f\xc8\
+\x4f\x98\x9f\x50\x14\x5c\xb8\xca\xd2\xe5\xa0\x0d\x64\x19\xc1\x45\
+\x17\x2a\xc1\x85\x04\x41\x1c\x0a\x42\x30\xa8\x11\x29\x1a\x2c\x9d\
+\xb1\x2a\x36\x92\xda\xd9\xd4\x8e\xd1\xda\x11\x6d\xb5\x88\x74\xb0\
+\x56\x63\x1b\x26\xd3\x12\x35\x6d\xa6\xe9\xd3\xa9\xd2\x0f\xcd\xf1\
+\xde\x79\xd6\xd8\xa6\x1b\xf1\xc1\xe1\xdd\x77\xef\x3d\xe7\x7e\xcc\
+\x74\x00\xf8\x2f\xec\xe9\x9c\x98\x09\x70\xab\xb8\x8c\xf4\xed\x0a\
+\x7a\xfa\xe7\xd0\x5b\x28\x63\xe4\xf9\x47\x0a\xb5\xe7\xee\x78\xbc\
+\x71\xd7\x91\x1f\x6f\x40\x2f\x2e\xc1\xab\x6f\xe2\xcb\xda\x16\x44\
+\xb0\x49\xf6\x06\x2e\xe6\x4b\x48\xeb\x0e\x8a\x2f\x16\x29\x75\x0f\
+\x01\x26\xdf\xb3\x57\xe1\x7f\x6b\xc2\x76\x00\x6d\x10\x50\xd3\x12\
+\x6c\xdb\x8e\x80\xbb\xda\xc4\xb9\xde\x49\x8c\x3c\x2d\x13\x65\x97\
+\x00\x57\x5e\xf9\xde\x84\x61\x03\xd1\x14\x60\x58\x80\x58\xe7\x3c\
+\xc0\x13\x40\xf2\x3a\xfb\x04\x2a\x24\x72\x2a\xf3\x98\xdd\x2d\x81\
+\x89\xb7\x6b\x78\x30\xdd\x08\x2b\x33\x99\x93\xf9\x98\x2f\x81\x44\
+\x56\xde\x2c\x16\x4d\x09\xb2\x05\x74\xeb\x1d\x72\xf9\x57\x9c\x22\
+\x05\xee\x3c\xaa\xe3\x93\xf8\x11\xb6\x1a\x4d\xca\xb6\xb3\x26\xd0\
+\x49\xb6\xd2\x2d\x90\xcc\x52\x0b\x74\x54\x4d\x20\x91\x76\x30\xe7\
+\x06\x38\x7a\x66\x88\x5d\x52\x20\x73\x77\x31\x5c\x98\xaa\x49\x52\
+\x67\xb7\x84\x42\x48\x10\x99\xab\xdb\x25\x01\x45\xb5\xa1\xc4\x6d\
+\xd4\xfc\x00\x07\x62\x57\x5b\x02\xe7\x6f\xba\xb4\xed\xad\xb0\x7d\
+\x49\xa4\xe4\x84\xa0\x4e\x64\x65\xd3\xa6\x37\x11\x23\xaa\x49\xb7\
+\x89\x5a\xfd\x2b\xf6\xa9\x97\x39\x24\x05\x72\xf7\x2b\x58\xf0\x37\
+\x68\x76\x49\x54\xe2\x5e\x88\xec\xa0\x14\x88\xa8\x0e\x41\x0a\xa8\
+\x29\x1b\xa5\x72\x15\x5d\x27\x0c\x0e\x49\x81\xd1\xc9\xcf\xb0\x1c\
+\x3f\x5c\x10\x13\x23\x71\x26\x38\x34\x92\x47\x7b\xa1\x37\x93\x0f\
+\x99\x21\x0c\xcb\xc3\x90\x35\x8b\x0b\x37\xc6\x5a\x02\x8c\xcc\xc0\
+\x0c\xe6\xfd\x9f\x54\xf5\x37\x81\xc0\x36\x9f\x6d\xb2\x66\x38\xf8\
+\xb0\xec\xe3\xc8\x71\x9d\xdd\x21\xef\x8f\xc0\xd8\x54\x15\x3d\xb9\
+\x29\xb8\x0d\xfa\x17\xa8\x8a\xaa\x39\xe1\xdc\x0c\xb6\xd9\x37\x5f\
+\x5d\x41\x8c\x5a\xef\x2f\xd0\x77\xdd\x2d\xc0\x18\x7d\x56\xc1\xe9\
+\x4b\xe3\x30\x1e\xbe\xc7\xf4\xec\x02\x96\x68\xdb\xb5\x7a\x10\xce\
+\xcc\x6d\x77\x51\x65\xfd\x2f\x32\x63\x87\xc0\x36\xfa\x0a\xaf\x71\
+\xec\xec\x30\x0e\xc6\xaf\x61\xff\xe1\x2b\x88\x9d\x1c\x40\xa6\xef\
+\x09\x85\xda\x73\xdb\x1c\xff\x06\x74\xfc\x02\xb7\x71\x05\xb6\x87\
+\x1e\x9b\x8a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xd4\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
+\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
+\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\
+\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x01\x44\x49\x44\x41\x54\x38\
+\x4f\x7d\x93\x31\x6a\x86\x40\x10\x85\x2d\xfc\x3b\x11\x41\x5b\x6f\
+\xe0\x01\x2c\xed\x72\x05\x0b\x8b\x94\x5e\x23\x8d\x76\xb1\xf4\x00\
+\x92\x13\x58\x8a\x95\x4d\xc0\x74\x69\x2d\x12\x4c\xb0\x10\x6c\x0d\
+\xca\x9f\xc9\x3c\x41\xd9\xd5\x25\xc2\x87\x3b\xbb\xf3\xde\xee\x0e\
+\x3b\x1a\x11\x6d\x4c\xd3\xf4\x98\xe7\xf9\x43\x5d\xd7\x4f\xeb\xba\
+\x3e\xf3\xdc\xc7\xbe\xf6\x1f\xc7\x60\x9e\xe7\x77\x4d\xd3\x1a\xe6\
+\xcb\x30\x8c\xcf\x30\x0c\xd7\xa2\x28\xa8\xeb\x3a\x1a\xc7\x91\x53\
+\xae\x62\x20\x07\x1c\x8a\xd8\xb6\x4d\x96\x65\x51\x14\x45\xbc\x2c\
+\x0b\x77\xa4\xc0\x71\x9c\x43\x6c\x9a\xe6\x31\x06\x4d\xd3\x70\x8a\
+\x2c\x06\x52\xe0\xba\xee\x96\x9c\xa6\x29\xf1\x95\x28\x49\x92\xc3\
+\xc0\xf3\x3c\x4e\x91\xc5\xe0\x18\x94\x65\x49\xb7\xdb\x6d\x4b\x5e\
+\x96\x85\xa7\x68\xfb\xef\x06\x20\xcb\x32\x4c\xab\x0d\x70\xc4\x3d\
+\x11\x27\xc0\x87\xbf\x68\x80\x7a\x0c\xc3\x80\xa5\xab\x01\x40\xb1\
+\x44\x81\x8a\x73\x41\x25\x03\xb8\x63\x17\x95\x50\x44\x2c\xa8\x64\
+\x00\x70\x4f\x95\x48\x44\x2c\xe8\xc5\x00\x20\x41\x25\x14\xe1\x8d\
+\x7e\x91\xab\x34\xa8\xaa\xea\x22\x38\xc3\x57\xfd\xe1\x2b\xbf\x28\
+\x0d\x00\x3f\x65\xa5\x10\xa0\x4e\xdc\x37\x77\xee\x99\x6f\xa5\x18\
+\xf4\x7d\x4f\xdc\x13\x92\x50\xd7\x75\x8a\xe3\x58\xea\x8d\x8b\x50\
+\x84\xdf\xc1\x9d\x85\x80\x7c\xdf\xa7\xb6\x6d\x79\x5a\xce\x91\x82\
+\x33\x7c\xc4\xb7\x20\x08\x5e\xb9\x2b\x67\xd5\x3a\x11\x69\x7f\x35\
+\x3c\x4f\x0e\x48\x78\xb4\xa4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x03\x1f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0e\xc2\x00\x00\x0e\xc2\x01\x15\x28\
+\x4a\x80\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
+\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\
+\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x8e\x49\x44\x41\x54\
+\x38\x4f\x65\x92\xed\x4b\x53\x71\x14\xc7\xef\x5f\xe3\x0b\x43\x8d\
+\x82\x32\x96\xa1\x88\xa4\x88\x82\xde\x40\x37\xe7\x1e\x02\xdd\x26\
+\xb5\x9a\x6e\x73\x6b\x2e\x7c\x68\xd3\x70\xea\x9c\x3d\xa9\x10\xcb\
+\x59\x54\x93\x32\x5d\x3a\x37\x19\xae\x29\x95\x4f\xe0\x1b\x8d\x96\
+\x73\x84\x03\x5f\x48\xbe\xe9\x85\x69\xeb\xdb\xb9\xbf\xd9\x25\xf0\
+\xc5\xf7\x77\x39\x87\xdf\xe7\x9c\xef\x39\xbf\xcb\x01\x38\xa5\xfb\
+\x3d\xeb\x18\x74\x6f\xa1\xb3\x63\x0d\x6d\xb6\x35\x4a\x9d\xbe\x23\
+\x88\x1d\xc9\x9d\x63\x78\xbd\x7b\x70\x0f\x24\x28\x04\xe7\xec\x5a\
+\xc5\x7c\x18\x98\x9d\xf9\x0d\x59\x8d\x97\xe5\x06\xdd\x2b\xd0\xea\
+\x5e\x41\xa9\x18\x67\xb1\x20\xee\xe0\x20\x8d\x41\xcf\x2e\x66\xde\
+\x1f\x21\x34\xf7\x07\x56\xeb\x32\x4c\xc6\x18\x82\x04\x4e\xbd\xfb\
+\x05\xdb\x9d\x05\x5c\x57\x8f\xc1\xd8\x12\xc4\xd0\x50\x0a\x16\x4b\
+\x0c\xd7\xf8\x11\x56\x80\xc1\x95\x95\x61\x4c\x4f\x1d\xb2\x6e\xa1\
+\xb9\x34\x82\xb3\x19\xd0\xff\xfa\x27\x7c\xbe\x1f\x18\x1e\xde\xc3\
+\x03\x02\x5d\xae\x24\x9a\x0d\x11\x9c\x3f\xd7\x94\x81\x85\x63\x7f\
+\xff\x08\x2a\x65\x98\x6c\x1e\x13\x98\xc6\x40\xff\x16\xca\x4a\x7b\
+\x51\x7a\xb5\x07\xdd\xce\x0d\xea\xb8\xcb\x40\x93\x29\x86\x33\xd9\
+\x0a\x06\x32\xb8\xdb\x99\x44\x7f\x5f\x1c\x8f\x1e\x26\x31\x13\x38\
+\xc2\x90\x27\x0e\x9d\xf6\x19\x02\x81\x6d\xd2\x0e\x5a\x5b\xfd\x64\
+\x79\x01\xf7\x1c\x71\xb2\xbc\x0e\x99\xcc\x07\x69\xed\x08\xaa\xab\
+\x3d\xb4\x1c\x67\x02\xd1\x85\x34\xcd\x7c\x4c\x56\x0f\x51\x56\xe6\
+\x46\x38\x94\x12\xab\x4f\xbe\xfd\x8a\xda\x9a\x61\xd8\xef\x6e\xc2\
+\x64\xde\x40\x93\x6e\x09\xd5\x55\x4f\x51\x54\xd8\x4e\xb0\x63\x5b\
+\x5c\x8e\x30\x63\x41\x81\x1d\xc1\xe0\x77\x11\xf6\xfb\x37\x09\x1e\
+\x25\xcb\x1b\xb8\xa9\x5f\x45\xa3\xe6\x23\xd4\xea\x45\x5c\xa1\x7b\
+\x5c\x9d\x6c\x16\x32\xe9\x04\xea\xe5\x01\xf8\xc6\x0e\x60\xb5\x44\
+\xc1\xf3\x3d\x98\x9c\x8c\x63\xc2\xff\x05\xae\xde\x18\x34\x9a\xe0\
+\x09\xf8\x09\x12\x49\x1f\x2e\xe5\xdf\xc6\xc5\x0b\xfa\x4c\x75\x41\
+\x37\x9a\xa6\xf1\xe4\x71\x8a\x3d\x87\xc9\xf8\x01\x6a\xd5\x38\x15\
+\xf4\x42\xab\x9d\x13\x3b\xf2\xfc\x73\xda\x74\x83\xe8\x8a\x9b\xf0\
+\x6f\xa1\xa3\x7d\x91\x6c\xcd\x33\x50\xd8\xaa\xc3\xf1\x0d\x76\x7b\
+\x66\xc6\x7f\x1d\xd5\xea\x18\xea\xe4\x11\xea\x6a\xa4\xa7\x8b\xb1\
+\x02\xdc\xe8\xe8\x1a\x14\x8a\x17\xe2\x73\xb4\xb5\xad\xc0\x68\x5a\
+\x62\x33\xea\x09\xd4\x10\xc8\xf3\x3e\xd4\xd4\x06\x20\xaf\x8f\x42\
+\x2a\x0b\x91\xe5\x5b\x19\x38\x12\x49\xa0\xa2\xc2\x85\x56\x73\x14\
+\x36\xdb\x67\x64\x67\x2b\x71\x36\x4f\x07\x4d\x63\x98\x75\x2c\x29\
+\x71\x23\x2b\xab\x92\x3a\xb6\xa0\xaa\xea\x25\x7d\xcd\x68\x68\x38\
+\xf9\xc3\x84\x43\x50\x51\x61\x33\xf2\xf3\x0d\x2c\x59\x5c\xac\x44\
+\x79\x79\x3f\x54\xb4\xd5\x9c\x1c\x15\xcb\x75\x76\x2d\x23\x37\x47\
+\x4b\xce\xde\xb0\x58\x90\x08\xff\x2f\x83\xc1\x45\x85\x5a\x70\x59\
+\x62\x46\x5e\x6e\x06\x3e\x2d\x70\x7f\x01\xfd\x94\x6b\x79\x96\xb3\
+\x58\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x03\x81\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -52505,111 +52502,185 @@
\x55\x1d\x19\x19\x19\x1e\xe8\x09\x14\xc3\xfc\x04\xee\x22\xb9\x5c\
\x9f\x94\x2f\x3d\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\
-\x00\x00\x00\xf7\
+\x00\x00\x03\x8c\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x10\x00\x00\x00\x0f\x08\x06\x00\x00\x00\xed\x73\x4f\x2f\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
-\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
-\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\
-\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x00\x67\x49\x44\x41\x54\x38\
-\x4f\xc5\x90\x41\x0e\xc0\x20\x08\x04\xfd\xff\xd7\x78\x14\x95\x1a\
-\x70\x21\x2d\x12\x4d\xd3\xc3\xe8\xc6\xc1\x4d\xb4\x31\xf3\x11\x63\
-\xe9\x1b\x82\x03\x2b\xc6\xd2\x37\x22\xba\xf9\xaf\x00\xc1\x81\x15\
-\x33\x24\x17\xb5\x58\x71\xce\x42\x10\x88\xb8\xb7\x27\xba\xa1\x8c\
-\x52\x81\xe6\x88\x38\xc4\x39\x0b\x41\x54\x99\x21\x29\x10\x87\x38\
-\x67\x21\x08\x44\xdc\xf7\x9f\x98\x81\x45\x5b\x05\x19\x8f\x87\x75\
-\xb8\x5d\xdd\x5e\x92\x33\xf6\x07\x9e\x02\x00\x00\x00\x00\x49\x45\
-\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x03\x4e\
+\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
+\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\
+\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xfb\x49\x44\x41\x54\
+\x38\x4f\x45\x93\xd9\x6b\x13\x61\x14\xc5\xf3\x4f\x08\x82\x8a\x88\
+\x0b\x8a\x88\xfa\x2a\x88\x28\xbe\xf8\x50\x44\xb4\xb8\x81\x20\x3e\
+\x88\x0f\x6e\x55\x5f\x55\xf0\x41\x2a\x22\xfa\xf9\xa0\xb8\x96\x16\
+\x49\x25\x55\x6b\x13\x63\xb5\x4d\x63\xb5\x62\x2d\x5a\xa5\x6a\xd3\
+\xba\x34\x5d\x32\x33\xc9\x64\x9b\x25\xb3\x66\xe4\x78\xa6\x15\x0d\
+\x5c\x72\xf9\x96\xdf\x9c\x7b\xee\xfd\x22\xe1\xef\xb7\x6f\x8a\xc0\
+\x29\x8a\xba\xad\x30\xe4\xd9\xff\xc0\x99\x12\x6e\xa9\x47\x04\xd6\
+\x10\xf3\xc9\xbf\x7b\x61\xe4\x45\xe0\x96\x44\x78\xe7\xdf\x65\x5f\
+\xff\x2e\xbc\xea\x20\xe3\x0d\x2c\xa5\x07\xb6\xd2\x0b\xb7\xdc\x07\
+\xe9\xe5\x56\x98\xd9\xcb\xcc\xd3\xb0\xf3\x7d\xb0\x0b\x7d\xf0\xb4\
+\x01\x78\xd5\x21\xe1\x1b\xbf\xe6\x20\xe1\x97\xdd\xf2\xa0\xa8\xe5\
+\x5a\x78\xf8\x0a\x5c\x35\x06\x73\xf2\x1e\x41\x51\x48\x5d\xab\xa0\
+\x7f\x6d\x82\x2d\xb7\xa3\x36\xdd\x0a\x47\x6d\x87\x36\x7e\x0e\xbe\
+\x96\x84\x5b\xa1\x32\x2a\x89\x84\xb2\x42\x7a\xe5\xeb\x05\x64\x3b\
+\x56\x41\x1b\x39\x0a\xaf\xd4\x0e\xaf\xd2\x01\xf5\xd9\x32\x98\x5f\
+\x0e\x33\x7f\x04\x47\xba\x01\x35\xbd\x05\xf9\xf4\x36\x38\xf9\x76\
+\xc2\xfa\x51\x77\x0a\x21\x40\x16\x96\xdc\xc3\xaf\xdf\x45\xe5\xf3\
+\x49\x48\xb1\x79\xd0\x07\x1b\xe0\xe5\x9a\x51\x4d\xad\x43\xed\xf3\
+\x7e\x78\xca\x35\x54\x52\xeb\xa1\x26\x57\x52\xcd\x1d\x98\x54\x63\
+\x17\x5e\x21\xf4\x63\x16\x60\x17\x52\x94\x7d\x1f\x56\xee\x2e\x8c\
+\xe1\x03\x28\x25\x16\x12\xb2\x0d\xfa\xd0\x4e\x98\x23\x87\xb8\xb6\
+\x17\xda\x9b\x8d\x70\xa5\xab\x2c\xad\x15\xb5\x99\x07\x70\x8a\xfd\
+\x08\x1c\x02\x02\x77\x82\x86\xd0\x9c\x6a\x27\xa5\x3e\x84\x9b\xbb\
+\x04\x63\xa8\x81\x97\x1b\xe1\xcc\xdc\x43\x2d\x7b\x11\x66\xe6\x34\
+\x9c\xec\x79\xd4\xcb\x2d\xa8\x1b\x09\x7a\x90\x40\xdd\x24\xc0\x9d\
+\x16\x11\x4f\xeb\x17\xb9\x54\x03\x26\x63\x4b\x21\x3d\x5e\x88\xe2\
+\xd3\xf9\xa8\xf4\x52\x7a\xe6\x2c\x7e\xbb\x32\x65\x66\x60\x4d\x5d\
+\x85\xfe\x61\x17\xaa\xbd\x6b\xa1\xc6\x17\x41\x49\xac\x46\x79\xf8\
+\x08\x21\x9f\x58\x82\x95\x11\xc6\xc4\x0d\x54\x47\xce\x40\xfb\x72\
+\x1c\xc6\xc7\xdd\xd0\xdf\x6e\x81\xfe\x7e\x27\x3c\xf5\x05\xec\x99\
+\x5b\x30\x47\x4f\x12\x78\x14\xf6\x78\x13\xf3\x26\x18\xe3\xe7\xd9\
+\xea\x28\x02\x7b\xe2\x6f\x17\x68\x88\x39\x45\x63\x94\x36\x38\xd3\
+\x17\x51\x79\xb9\x1a\xd5\xfe\x4d\xac\xfd\x20\x63\x3f\xfd\xd8\x0e\
+\x73\x78\x37\x02\x2d\xca\xda\x63\xb0\xe4\x18\x9c\xd2\x5b\x0e\xd8\
+\x6c\x17\xf2\x04\xa4\x69\x4c\x1b\x2c\xe9\x26\x94\xae\xa5\x28\x26\
+\x97\xc3\x1e\x3b\x41\xc9\x6b\x60\x7e\x6c\x64\x7e\x0c\xa5\xf8\x02\
+\xaa\xda\x01\x5f\xef\xe2\xb9\x87\x04\x0d\xfc\x07\x84\x8e\xda\x52\
+\x0b\x72\xdd\x9b\x21\x77\x6f\x60\x9f\x6f\xc3\x2f\x47\x51\x8c\x2f\
+\x61\x49\xfb\x50\xaf\x25\x61\x8c\x9e\x82\xf4\x64\x31\x4b\x3d\xce\
+\xc9\xec\xa2\x82\x10\xa0\x86\x93\xa8\x0a\xb7\xf2\x4e\x68\x63\xcd\
+\x90\x5f\xef\x21\x9d\xed\x94\xa3\x3c\xd4\x29\x72\x9d\x2b\x38\x89\
+\x27\x38\x75\x71\xf6\xbd\x03\xc6\x8f\x66\x28\xe9\xed\xf0\x08\xf8\
+\x37\x89\x81\xa7\x09\x4f\xfb\x26\x1c\x35\x25\x9c\x42\x42\x58\x4a\
+\x18\x49\x8e\x77\x8f\xc8\x25\x37\x42\xff\x7e\x81\x87\x7b\x09\xa0\
+\xa1\xf9\x6e\x46\x9c\xed\x1e\x10\x9e\x9e\xe1\x5b\xd0\xe7\x1e\x54\
+\xa8\xc2\x37\x7e\x72\x71\x94\x30\x06\x37\x7d\x73\x54\x18\xbf\xae\
+\xf3\x45\x3e\x17\x7e\xed\x9b\xf0\x8c\xb1\xb9\x75\x63\x9c\x7b\x59\
+\xca\x2f\xf2\x72\x24\xf2\x07\x1c\xe6\x0a\xfa\x25\xad\x94\xa9\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\xb8\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
-\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
+\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\
-\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xbd\x49\x44\x41\x54\
-\x38\x4f\xad\x90\x5b\x4c\x92\x61\x18\xc7\xbf\x2b\x2a\x75\x1d\x3c\
-\xa0\xc8\xc1\x13\x22\x28\x68\x8b\x50\xc1\x53\x28\x09\x22\x0a\x86\
-\x86\x82\x98\x76\xe1\xb4\x56\xcd\x19\x1e\x9b\x5b\x69\x5d\x24\xe5\
-\xb2\xad\x35\xab\x99\x7d\xce\xd4\xec\xb3\x41\x88\x69\xa0\xa6\xce\
-\x59\x36\xb2\xd2\x50\xe7\xda\xea\xc2\x74\x1d\x6e\x5a\x5b\x6b\xfa\
-\x04\xec\x4b\x72\xf3\xd2\xdf\xd5\xf3\x3e\xef\xff\xf7\xbc\xcf\x5e\
-\x64\xc7\xa9\x9c\x3b\x16\x54\xf1\x46\xae\x3c\x3d\x9d\x71\xb7\xf4\
-\x85\xe8\x59\x91\x25\xd9\x56\x38\x9c\xf0\x5c\x3d\xc4\xaf\xce\x31\
-\x73\x49\x78\xcc\x4d\xe3\x52\xb1\xe0\x82\x5d\x03\xce\xda\x29\x9f\
-\x9d\xc9\xba\x7d\xce\x96\xf5\x5b\xf7\x41\xb1\xa1\x5b\x50\x40\xd5\
-\x52\x36\x9c\x79\x9b\x0e\xda\x11\x01\x64\x3e\x62\x2f\xc8\xfb\x39\
-\x1c\x97\xf8\x8f\xfa\x79\x35\xd4\xce\xab\xa0\xf2\xb5\x43\x7e\x25\
-\xeb\xac\x59\x54\xc2\xe5\xb5\x42\xa8\x59\x56\x40\xd1\x48\xd2\x37\
-\xa5\x91\x6b\x97\x63\x31\xb3\xd2\xde\xa8\x05\x85\x31\xfa\x57\x1a\
-\x4a\xb7\x49\x7a\xe9\x7e\xb8\x8e\x20\xba\xd9\x5c\x68\xfc\xa4\x85\
-\x53\x2f\xa5\x58\xed\x52\x2e\x34\xad\x69\xe0\xfc\xa2\x1c\xf2\xcd\
-\x71\x33\xaa\x41\x9e\x1a\x8f\xb9\x10\x77\x33\xaa\x84\x68\xc8\x4a\
-\x0a\x1a\xac\xc3\x5b\x08\xe2\x58\x19\x9a\xbf\x9f\x84\xba\x65\x87\
-\xbc\xaa\x86\x4a\xbb\x0c\x54\xe6\xd8\xf1\x3c\x03\x97\x86\x47\xb6\
-\x90\xd2\x19\x54\xcc\x6f\x0b\x7c\x8c\x1f\x11\xa4\x6c\x4a\x0c\x57\
-\xbe\x6a\xa1\xf1\x4b\x01\x54\xcc\x4b\xd7\xf3\xcc\x3c\xab\x6a\x80\
-\x1b\x86\x5f\x6f\x4b\xfc\x9d\x80\x13\x78\x89\x20\x25\xa3\x42\xb8\
-\xb4\x9a\x0f\x0d\x2b\xb9\x50\xf7\x59\x0e\xe5\xb3\xa9\x20\xc3\xd8\
-\x20\x42\xc3\x5d\x1f\xeb\x44\x69\x89\x12\xc8\xcd\x11\x90\x61\x08\
-\x03\x51\x1f\x0d\x8e\x62\x54\xe0\xdf\x27\x02\xaf\xcd\x07\x10\xcd\
-\x70\x02\x1c\x37\xf1\x40\x63\xe5\x83\xac\x8f\x0d\xe2\x6e\x26\xa4\
-\x39\x64\x09\xc6\x4c\xc7\x7d\x44\x66\x62\x80\xc4\x10\x0a\x72\x2b\
-\x1d\x94\x93\x74\xc8\x1e\x0b\x86\x4c\x2b\x15\x62\x6e\xee\xdf\x7c\
-\x04\x29\x7f\x27\xdc\x14\xb6\x23\xa9\xd7\x3f\x24\x01\x25\x5a\x8f\
-\x1a\xc9\xeb\x52\x0b\x05\xc4\xc3\x01\xc0\x6a\xf6\x72\x0f\x28\x99\
-\xe1\xb7\x6a\xa7\x79\x32\xfc\xb8\x85\x14\x94\x4c\xe1\x77\x10\x27\
-\x44\x06\x32\x48\x2d\x64\x48\xec\xf1\x01\xd1\xa0\x2f\xd0\x9b\xf6\
-\xb8\x07\x14\x4c\x1e\x2e\xc9\x1f\x3b\xf8\x51\x31\xc4\x2a\xc3\x5b\
-\x2e\x12\xbb\x48\x05\xb1\xf7\x7c\x6d\x69\x06\x12\x64\x58\x02\x41\
-\xd0\xe5\x03\x91\x7a\xcf\x51\x5e\xc7\x5e\x08\x6e\xd8\xe5\x1e\x90\
-\xf9\x94\x73\x20\xcb\x14\x31\x9e\x3d\xc8\xf8\x99\xda\x43\x7b\x9f\
-\x8c\x92\x6c\xfc\x76\x7f\x3b\xbf\xc3\xef\x47\x9a\x91\xe4\x58\x99\
-\x04\x71\x0f\xbc\x81\xa9\xf7\x34\x33\xf4\x04\x66\xe8\xc5\xdd\x40\
-\xad\x21\xb8\x07\x38\x11\x61\x41\xac\x23\x0f\xa9\x73\xa2\x7e\x1a\
-\x48\x4c\x34\x10\x0f\x50\x40\x88\xf9\x43\x7c\xa7\xf7\x06\xa7\xd5\
-\xeb\x4f\x84\xde\x03\x73\xca\xce\x2c\xa5\x9a\x00\xe1\x57\x09\x39\
-\x2e\xf1\x7f\x92\x50\x5f\x52\x5c\x3b\xb1\xfe\xd0\x2d\xef\x89\xe8\
-\x1b\xfb\xec\xec\x16\xaf\xa9\xc8\x6b\x9e\x4f\x22\xaf\x7b\x94\x86\
-\xb7\x10\x58\x78\x6c\xa7\x40\x90\xbf\xe1\xcb\x27\xde\xa2\xbe\xca\
-\x4e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x01\xd4\
+\x35\x2e\x36\xd0\x83\xad\x5a\x00\x00\x03\x28\x49\x44\x41\x54\x38\
+\x4f\x6d\x93\x5b\x4c\x92\x01\x14\xc7\xbf\x1e\xda\x6a\xbd\x54\xab\
+\x97\xd6\x43\x97\xd5\xd6\xcd\x74\xcd\xd5\x94\x74\x5d\xd1\xfa\xac\
+\x0c\xcb\x34\x45\x58\x11\x68\xa2\x0e\x02\x04\x3f\x4b\x51\x19\xa0\
+\x86\x5c\x04\x8b\x55\x2a\x4a\x6a\x7c\xdd\xd4\x95\xe1\x66\x52\x91\
+\xe9\xd4\xac\x45\x4d\x5b\x45\x37\x69\x76\xd3\xb6\xa6\x49\xfe\x33\
+\x56\xad\xdb\xd9\xfe\xdb\x79\x38\xbf\x73\xd9\xfe\x87\x20\x7e\x0b\
+\xcb\xd9\x3b\xb3\x4c\x0d\x7d\x1b\x4e\xb6\xf5\x16\x1a\x3a\xaf\xde\
+\xca\xb9\x7d\xce\x9b\xe9\x6c\x70\xc9\xea\x1c\x54\x5a\x61\xf3\xda\
+\xdd\xbc\x92\x19\xbf\xd7\xff\xca\x0d\xf6\xde\xa0\xd3\xb7\xef\x1b\
+\x2b\xfb\x9d\x03\xf5\x2f\x5b\x3e\xd9\x5e\xd4\x8f\x95\x0d\x50\x7e\
+\x49\xf7\xce\x31\x96\x23\x79\x24\xaa\xa4\xfa\xa1\xb0\xa4\x53\x1d\
+\xc5\x2e\x5d\xf4\x47\x03\xbd\xbd\x77\x55\x91\xbb\xae\xb1\xcc\x63\
+\x1a\x6a\x78\x75\xd1\xdf\xf6\xb1\x07\xe6\x1e\x3b\x8e\xde\x92\x43\
+\xd1\xc1\x46\x7c\x75\x0a\x98\xea\xea\xf1\xf8\xe2\x3e\xdf\x56\x0d\
+\xed\x08\xdb\x43\x2d\x0c\x34\xd0\xdb\xdc\x33\xf5\xed\xad\x06\x79\
+\x17\x7f\x48\xd7\x2f\x9d\x70\x0c\xd2\x70\x7d\xec\x46\xfb\xd0\x3d\
+\xd0\x2f\x5a\xa0\xba\xa1\xc3\xbe\x0a\x03\x36\x1a\xda\x11\x69\xae\
+\x9b\x08\xaf\x39\xec\x5b\x52\x9a\xa8\x9a\xbb\x38\x72\x1a\xa1\xad\
+\xea\x8d\x48\xb3\xd5\xf4\xa7\xb7\xa6\xf8\xb5\x1e\x11\x6c\x2f\xad\
+\xa0\xdf\xd4\xa2\xde\xeb\x80\xae\xe3\x02\xb2\xea\x5a\xc0\x36\xde\
+\x07\x69\x6e\x43\xf4\x79\x0a\x02\x97\x72\x7c\x75\x15\xcb\xb3\x22\
+\x96\x1f\x4c\x98\x68\x6f\x7e\x56\x65\xf7\x08\xb7\x56\x0c\x4d\x1f\
+\x05\xab\xb7\x14\x5a\x77\x01\x14\x8d\x16\x08\x6b\xaf\xe0\xa0\xb9\
+\x0f\x49\xc6\x47\x48\xb0\x9f\x87\xb8\xa3\x04\xa9\xae\x7c\x2c\xb1\
+\x6e\x1e\x5e\x29\x3c\x20\x26\xcc\x97\x06\x6f\xe4\xd4\x8e\x8c\x71\
+\xf4\x65\xc8\xb8\x9a\x01\xcd\x83\x5c\x88\x2e\x28\xc1\xb3\xd0\x38\
+\x54\xee\x01\xf7\xf8\x13\x24\x97\xdf\x04\xbf\xa9\x1c\x54\x97\x1e\
+\xb1\x97\x33\x30\xff\x78\xe4\xe8\x52\x69\x92\x93\x30\xd2\xaf\x9f\
+\xc9\x6b\xbe\xf8\x53\x0d\x6e\x24\x1b\x25\x48\x6f\xca\x44\x7a\x33\
+\x05\x8e\xbd\x72\x12\xea\x01\x5b\xf3\x14\x89\xda\x46\x70\x4f\x89\
+\x90\x76\x2d\x17\xeb\x6d\xfb\x30\xaf\x60\xbd\x7f\x59\x16\xf7\x31\
+\x51\x6c\x7f\x76\x5d\x52\xf9\x79\x4c\x78\xf2\x03\x0e\xa8\x2f\x23\
+\x41\xa7\x00\xaf\xe9\x30\xd8\x4e\x09\x62\x6d\x15\x88\x2b\x75\x63\
+\x4f\x5e\x0b\x64\x8a\x28\xc8\x8f\x6d\x02\x3b\x7f\x39\x16\xca\x98\
+\xa3\xc1\x1c\x41\x2b\x91\x63\xb9\x2b\x17\x59\xdf\x0d\xa7\x5a\x3e\
+\x81\x67\xf0\x21\xa1\xa0\x1e\x71\x96\x2c\xc4\x5d\x4c\x02\x49\xf3\
+\xb0\xcd\x64\x44\x5c\x9e\x0b\xd4\x24\x8c\xaf\x42\xc4\xec\x9a\x8a\
+\x50\x3e\x6b\x38\x88\xc9\x3d\x42\xa4\x64\xd3\x6b\x32\x4d\x4f\x3c\
+\x3c\xfd\xdb\x71\x8e\x6e\x08\x89\xea\x87\xd8\x58\xa0\x44\xf8\x89\
+\x58\x6c\xaa\xda\x0d\x69\x2e\x13\x4a\x45\x78\x40\xdf\xe1\x1d\x31\
+\x44\x40\xe4\xf6\x29\x83\x44\x28\x99\x3d\x5d\xa0\xee\x54\x71\x35\
+\x03\xbe\xfd\x9a\xe7\x13\xa4\xb2\x0b\xa1\xda\x42\x84\x98\x58\x60\
+\x14\x26\xe1\xa8\x3c\x32\x00\xfd\xad\x18\x92\x78\x1e\x30\x0a\x83\
+\xa5\x5a\x90\x40\xb9\x1a\xf6\xe6\xdf\xf3\x85\xc9\xce\x8c\x6f\x2d\
+\x96\x82\xcc\xe3\x83\x99\xa9\x81\x4a\x2d\x84\x44\xca\xfa\x67\xf2\
+\xe4\x74\xef\x2f\x9b\x86\x44\x67\x2f\xd8\x25\x6d\x2e\x62\x88\xad\
+\x1e\x86\x40\x34\xbc\x59\x50\x34\xba\x25\xdd\xe1\x8f\xe0\xd1\xa3\
+\x1b\x38\x15\x23\x3f\xd7\x26\x49\xe2\xd5\x7f\x9f\x63\xce\xa2\x88\
+\x69\x41\x5b\x32\x82\xc3\xe2\x95\x62\x46\xa2\xd2\xb9\x8e\x25\x7b\
+\x1c\xc2\xe4\xb7\xae\x8d\x3e\x98\x23\x16\xcd\x7e\xff\xe3\xde\x77\
+\x3f\xe1\x6f\xc7\xfa\xe9\xa7\x0a\xc9\x2b\x9f\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\x75\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
-\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
-\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
-\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\
-\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x01\x44\x49\x44\x41\x54\x38\
-\x4f\x7d\x93\x31\x6a\x86\x40\x10\x85\x2d\xfc\x3b\x11\x41\x5b\x6f\
-\xe0\x01\x2c\xed\x72\x05\x0b\x8b\x94\x5e\x23\x8d\x76\xb1\xf4\x00\
-\x92\x13\x58\x8a\x95\x4d\xc0\x74\x69\x2d\x12\x4c\xb0\x10\x6c\x0d\
-\xca\x9f\xc9\x3c\x41\xd9\xd5\x25\xc2\x87\x3b\xbb\xf3\xde\xee\x0e\
-\x3b\x1a\x11\x6d\x4c\xd3\xf4\x98\xe7\xf9\x43\x5d\xd7\x4f\xeb\xba\
-\x3e\xf3\xdc\xc7\xbe\xf6\x1f\xc7\x60\x9e\xe7\x77\x4d\xd3\x1a\xe6\
-\xcb\x30\x8c\xcf\x30\x0c\xd7\xa2\x28\xa8\xeb\x3a\x1a\xc7\x91\x53\
-\xae\x62\x20\x07\x1c\x8a\xd8\xb6\x4d\x96\x65\x51\x14\x45\xbc\x2c\
-\x0b\x77\xa4\xc0\x71\x9c\x43\x6c\x9a\xe6\x31\x06\x4d\xd3\x70\x8a\
-\x2c\x06\x52\xe0\xba\xee\x96\x9c\xa6\x29\xf1\x95\x28\x49\x92\xc3\
-\xc0\xf3\x3c\x4e\x91\xc5\xe0\x18\x94\x65\x49\xb7\xdb\x6d\x4b\x5e\
-\x96\x85\xa7\x68\xfb\xef\x06\x20\xcb\x32\x4c\xab\x0d\x70\xc4\x3d\
-\x11\x27\xc0\x87\xbf\x68\x80\x7a\x0c\xc3\x80\xa5\xab\x01\x40\xb1\
-\x44\x81\x8a\x73\x41\x25\x03\xb8\x63\x17\x95\x50\x44\x2c\xa8\x64\
-\x00\x70\x4f\x95\x48\x44\x2c\xe8\xc5\x00\x20\x41\x25\x14\xe1\x8d\
-\x7e\x91\xab\x34\xa8\xaa\xea\x22\x38\xc3\x57\xfd\xe1\x2b\xbf\x28\
-\x0d\x00\x3f\x65\xa5\x10\xa0\x4e\xdc\x37\x77\xee\x99\x6f\xa5\x18\
-\xf4\x7d\x4f\xdc\x13\x92\x50\xd7\x75\x8a\xe3\x58\xea\x8d\x8b\x50\
-\x84\xdf\xc1\x9d\x85\x80\x7c\xdf\xa7\xb6\x6d\x79\x5a\xce\x91\x82\
-\x33\x7c\xc4\xb7\x20\x08\x5e\xb9\x2b\x67\xd5\x3a\x11\x69\x7f\x35\
-\x3c\x4f\x0e\x48\x78\xb4\xa4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
-\x42\x60\x82\
+\x00\x00\x03\x3c\x49\x44\x41\x54\x38\x4f\x4d\x54\xdf\x6f\x94\x45\
+\x14\x3d\xf7\xce\x7c\xdf\xb7\xb5\x0b\xd9\x6e\xdb\x14\x5b\x0c\x62\
+\xc2\x03\x6d\x89\x80\xfe\x01\x26\x3c\xe0\x43\x0b\x94\xdd\xcf\xae\
+\x0a\x2f\xc4\x04\x22\x86\x08\xc1\x44\x2b\x3f\x16\x35\xe1\x89\xc4\
+\xc6\xa8\x04\x23\x88\xd1\x52\xac\x1b\x10\x56\x82\x18\x7e\xfc\x01\
+\x3c\x48\x59\x14\x13\x21\x3e\x68\x8b\x15\xb7\x36\x96\xb2\xdf\x8f\
+\x99\x6b\xa6\xd5\x84\x79\x99\x87\x39\x73\xe6\xdc\x73\xef\x19\xc2\
+\xc2\xa2\xff\x76\x59\xe6\x67\x57\x0e\x64\xfd\x6d\x6b\x59\xad\x6b\
+\x85\x3c\x41\x24\x74\x5f\xf8\xb7\x1b\x30\x57\xce\x36\xe2\xe3\x77\
+\x66\x67\x6b\x8f\xe2\x09\x02\x2a\x1f\x02\x95\xcb\xb0\xdb\x73\xb9\
+\x03\x45\xad\xf7\x66\x8d\x59\x94\x18\x0b\x43\x02\x08\x81\x01\xf8\
+\xcc\x98\x53\xea\x41\x25\x4d\xde\xff\x68\x66\xf7\x01\x41\x59\xdc\
+\x31\x01\xa1\x02\xc6\x6c\x39\x9f\x1f\xd9\x20\x28\xfd\xed\x2e\x2a\
+\x32\x8e\x98\xad\x10\x88\x1c\x07\x04\x62\x95\x85\x6a\x61\xc6\x45\
+\xa5\xce\xbc\xf5\xd7\x73\x61\x18\x8e\x2d\x48\xdf\x96\xcf\xed\x7f\
+\xcd\xf2\x3b\x53\x26\x8d\x29\x6a\x78\xa4\x35\x29\x56\x10\xcf\x03\
+\x89\x40\x8c\x81\x58\x03\x9b\xa4\x22\x41\x90\x74\x68\xed\x1f\x83\
+\x39\xfc\xf1\xf4\xcc\x10\x3d\x15\x04\x2b\x8e\x65\x17\x8d\x73\x62\
+\xbc\x24\x7a\xc8\x4f\xbe\x3d\x44\x8b\xd7\xac\x46\xad\xf4\x12\x98\
+\x19\x4e\x41\x12\xc7\xe8\x3d\x7d\x0a\x73\xb7\x7f\xc6\xaf\x07\xcb\
+\xa2\x82\xc0\x92\xd2\x76\x67\x6c\xd6\xd2\x9e\xb6\xb6\x23\x61\x9a\
+\xee\x99\x25\x32\x12\xc5\x6a\x55\xe5\x6b\x2c\x59\xff\x3c\x26\xab\
+\x55\xd4\x06\x07\xe7\x5f\xef\x19\xf9\x12\x5d\x9b\x0b\x98\xba\x76\
+\x0d\xe3\x1b\x37\x00\x4a\x9b\x2c\x89\x3a\xc3\xea\x28\x7d\xde\xda\
+\x3e\xbe\x2c\x89\x7a\x13\x56\x42\xa9\x61\x23\x06\xab\x46\x4f\x61\
+\x49\x5f\x3f\x26\x2a\x15\xd8\x24\x41\x57\x69\x10\x53\x97\xbe\xc7\
+\x78\x21\x04\x43\x00\xad\xac\x27\x42\x13\x7e\xf0\x0b\x55\xdb\x3b\
+\xea\x8f\x45\x8d\x16\x21\x12\xb0\x22\x49\x13\x58\x93\xa2\xfb\xe4\
+\x67\xe8\x2c\x16\x41\x20\xdc\x3b\x77\x0e\x37\x5f\xde\x02\x26\x02\
+\x69\x0d\x58\x0b\xb6\x82\xb8\x29\x33\x47\x17\xda\x3b\xa6\x9b\xa2\
+\x46\xce\xc2\x11\x80\x20\x82\xa4\xd1\x40\xcf\x89\x13\x58\x5a\x7a\
+\x71\xbe\x03\x93\x95\x0a\x7e\xdc\xba\x05\xec\xf9\x80\xf2\x00\x6b\
+\x40\x56\x90\x34\x05\x73\x74\xb2\xad\xad\xb6\x3c\x4e\xba\x63\x66\
+\x81\x31\x6c\x9c\x61\x23\x5f\xa0\x73\x73\x01\x93\xe7\xab\xb0\x69\
+\x82\xae\x81\x4d\x98\xac\x7e\x8b\x5b\xa5\x41\xb0\xeb\x8e\xd6\xe2\
+\x19\x83\x89\x4c\xe6\x2e\xed\x6e\xcd\x0f\xbf\x60\x64\xd7\x3f\x80\
+\x41\x1c\xa9\x9e\xd1\x51\x74\xf6\xf5\xe1\x0f\x57\x73\xb1\x00\x98\
+\x14\xbd\xa7\xbf\xc2\xe3\xfd\xfd\xb8\x77\xe9\x3b\xd4\x0a\x21\xe0\
+\x69\xd3\x2c\xa2\xce\xb3\xfe\x84\x56\x64\xb3\x2b\x8f\x06\x99\x1f\
+\x90\xa6\x2a\x8d\x23\x5e\x5e\x3e\x48\x8b\xd7\x3c\x83\x9b\xc5\x02\
+\xd8\x5a\x08\x2b\xd8\x34\x85\xeb\xce\x83\x9f\x6e\xe3\xee\xd0\x90\
+\x70\x10\x58\xad\x35\x5e\x35\x0f\x9f\x9d\x1f\xa4\xed\xb9\xfc\xbb\
+\x3b\x80\x7d\x0b\x83\x14\x7b\x14\x78\xe4\x06\x88\xb4\xbf\x90\x12\
+\x67\x2c\x04\x36\x4e\x45\x3c\x9d\x74\x78\x9e\x7f\x5c\xd1\x91\x0f\
+\xee\xd7\xf7\x12\x42\x28\x47\x72\xf8\x72\xfb\xd8\x7a\x6b\x06\xa6\
+\xc5\xc2\x82\x0c\xbb\x08\x88\xb3\x10\x00\x93\x58\x0b\xcb\x10\xd5\
+\x42\x84\xcb\xac\x2f\xbc\x51\xff\x73\x53\x08\x58\x07\x70\x81\x02\
+\x0e\x81\x76\x0e\xb7\xbe\x57\x60\x7a\x3d\x63\xd2\xa6\xd8\x0a\x5c\
+\x20\x9c\x02\x25\x84\x80\x08\x0d\xad\x1b\x67\xc5\x7e\x38\x5c\xaf\
+\xbf\x09\xe7\x99\x0b\xcc\xff\x71\x16\x87\x25\x48\x77\x73\xf3\xea\
+\x8d\x7e\xe6\x95\xa7\x7d\xbd\xae\x45\x64\xa9\x12\xa0\x4e\xf8\xfd\
+\x06\x70\xf5\x9b\x28\xfa\xb4\x36\x33\x73\xfd\x91\x2f\x40\xfe\x05\
+\xdd\xec\x87\x88\x85\x9f\x3f\x1c\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
\x00\x00\x02\x0a\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -52645,178 +52716,107 @@
\x50\xad\xab\x80\xde\x4e\x6b\x4c\xc5\xba\xe0\xb2\x9f\xc5\x8a\x7f\
\x7e\xce\x86\xf1\x01\x1d\x7a\x84\x89\x53\xd8\x0e\xd4\x00\x00\x00\
\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x03\xb8\
+\x00\x00\x03\x4e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
-\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
-\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\
-\x35\x2e\x36\xd0\x83\xad\x5a\x00\x00\x03\x28\x49\x44\x41\x54\x38\
-\x4f\x6d\x93\x5b\x4c\x92\x01\x14\xc7\xbf\x1e\xda\x6a\xbd\x54\xab\
-\x97\xd6\x43\x97\xd5\xd6\xcd\x74\xcd\xd5\x94\x74\x5d\xd1\xfa\xac\
-\x0c\xcb\x34\x45\x58\x11\x68\xa2\x0e\x02\x04\x3f\x4b\x51\x19\xa0\
-\x86\x5c\x04\x8b\x55\x2a\x4a\x6a\x7c\xdd\xd4\x95\xe1\x66\x52\x91\
-\xe9\xd4\xac\x45\x4d\x5b\x45\x37\x69\x76\xd3\xb6\xa6\x49\xfe\x33\
-\x56\xad\xdb\xd9\xfe\xdb\x79\x38\xbf\x73\xd9\xfe\x87\x20\x7e\x0b\
-\xcb\xd9\x3b\xb3\x4c\x0d\x7d\x1b\x4e\xb6\xf5\x16\x1a\x3a\xaf\xde\
-\xca\xb9\x7d\xce\x9b\xe9\x6c\x70\xc9\xea\x1c\x54\x5a\x61\xf3\xda\
-\xdd\xbc\x92\x19\xbf\xd7\xff\xca\x0d\xf6\xde\xa0\xd3\xb7\xef\x1b\
-\x2b\xfb\x9d\x03\xf5\x2f\x5b\x3e\xd9\x5e\xd4\x8f\x95\x0d\x50\x7e\
-\x49\xf7\xce\x31\x96\x23\x79\x24\xaa\xa4\xfa\xa1\xb0\xa4\x53\x1d\
-\xc5\x2e\x5d\xf4\x47\x03\xbd\xbd\x77\x55\x91\xbb\xae\xb1\xcc\x63\
-\x1a\x6a\x78\x75\xd1\xdf\xf6\xb1\x07\xe6\x1e\x3b\x8e\xde\x92\x43\
-\xd1\xc1\x46\x7c\x75\x0a\x98\xea\xea\xf1\xf8\xe2\x3e\xdf\x56\x0d\
-\xed\x08\xdb\x43\x2d\x0c\x34\xd0\xdb\xdc\x33\xf5\xed\xad\x06\x79\
-\x17\x7f\x48\xd7\x2f\x9d\x70\x0c\xd2\x70\x7d\xec\x46\xfb\xd0\x3d\
-\xd0\x2f\x5a\xa0\xba\xa1\xc3\xbe\x0a\x03\x36\x1a\xda\x11\x69\xae\
-\x9b\x08\xaf\x39\xec\x5b\x52\x9a\xa8\x9a\xbb\x38\x72\x1a\xa1\xad\
-\xea\x8d\x48\xb3\xd5\xf4\xa7\xb7\xa6\xf8\xb5\x1e\x11\x6c\x2f\xad\
-\xa0\xdf\xd4\xa2\xde\xeb\x80\xae\xe3\x02\xb2\xea\x5a\xc0\x36\xde\
-\x07\x69\x6e\x43\xf4\x79\x0a\x02\x97\x72\x7c\x75\x15\xcb\xb3\x22\
-\x96\x1f\x4c\x98\x68\x6f\x7e\x56\x65\xf7\x08\xb7\x56\x0c\x4d\x1f\
-\x05\xab\xb7\x14\x5a\x77\x01\x14\x8d\x16\x08\x6b\xaf\xe0\xa0\xb9\
-\x0f\x49\xc6\x47\x48\xb0\x9f\x87\xb8\xa3\x04\xa9\xae\x7c\x2c\xb1\
-\x6e\x1e\x5e\x29\x3c\x20\x26\xcc\x97\x06\x6f\xe4\xd4\x8e\x8c\x71\
-\xf4\x65\xc8\xb8\x9a\x01\xcd\x83\x5c\x88\x2e\x28\xc1\xb3\xd0\x38\
-\x54\xee\x01\xf7\xf8\x13\x24\x97\xdf\x04\xbf\xa9\x1c\x54\x97\x1e\
-\xb1\x97\x33\x30\xff\x78\xe4\xe8\x52\x69\x92\x93\x30\xd2\xaf\x9f\
-\xc9\x6b\xbe\xf8\x53\x0d\x6e\x24\x1b\x25\x48\x6f\xca\x44\x7a\x33\
-\x05\x8e\xbd\x72\x12\xea\x01\x5b\xf3\x14\x89\xda\x46\x70\x4f\x89\
-\x90\x76\x2d\x17\xeb\x6d\xfb\x30\xaf\x60\xbd\x7f\x59\x16\xf7\x31\
-\x51\x6c\x7f\x76\x5d\x52\xf9\x79\x4c\x78\xf2\x03\x0e\xa8\x2f\x23\
-\x41\xa7\x00\xaf\xe9\x30\xd8\x4e\x09\x62\x6d\x15\x88\x2b\x75\x63\
-\x4f\x5e\x0b\x64\x8a\x28\xc8\x8f\x6d\x02\x3b\x7f\x39\x16\xca\x98\
-\xa3\xc1\x1c\x41\x2b\x91\x63\xb9\x2b\x17\x59\xdf\x0d\xa7\x5a\x3e\
-\x81\x67\xf0\x21\xa1\xa0\x1e\x71\x96\x2c\xc4\x5d\x4c\x02\x49\xf3\
-\xb0\xcd\x64\x44\x5c\x9e\x0b\xd4\x24\x8c\xaf\x42\xc4\xec\x9a\x8a\
-\x50\x3e\x6b\x38\x88\xc9\x3d\x42\xa4\x64\xd3\x6b\x32\x4d\x4f\x3c\
-\x3c\xfd\xdb\x71\x8e\x6e\x08\x89\xea\x87\xd8\x58\xa0\x44\xf8\x89\
-\x58\x6c\xaa\xda\x0d\x69\x2e\x13\x4a\x45\x78\x40\xdf\xe1\x1d\x31\
-\x44\x40\xe4\xf6\x29\x83\x44\x28\x99\x3d\x5d\xa0\xee\x54\x71\x35\
-\x03\xbe\xfd\x9a\xe7\x13\xa4\xb2\x0b\xa1\xda\x42\x84\x98\x58\x60\
-\x14\x26\xe1\xa8\x3c\x32\x00\xfd\xad\x18\x92\x78\x1e\x30\x0a\x83\
-\xa5\x5a\x90\x40\xb9\x1a\xf6\xe6\xdf\xf3\x85\xc9\xce\x8c\x6f\x2d\
-\x96\x82\xcc\xe3\x83\x99\xa9\x81\x4a\x2d\x84\x44\xca\xfa\x67\xf2\
-\xe4\x74\xef\x2f\x9b\x86\x44\x67\x2f\xd8\x25\x6d\x2e\x62\x88\xad\
-\x1e\x86\x40\x34\xbc\x59\x50\x34\xba\x25\xdd\xe1\x8f\xe0\xd1\xa3\
-\x1b\x38\x15\x23\x3f\xd7\x26\x49\xe2\xd5\x7f\x9f\x63\xce\xa2\x88\
-\x69\x41\x5b\x32\x82\xc3\xe2\x95\x62\x46\xa2\xd2\xb9\x8e\x25\x7b\
-\x1c\xc2\xe4\xb7\xae\x8d\x3e\x98\x23\x16\xcd\x7e\xff\xe3\xde\x77\
-\x3f\xe1\x6f\xc7\xfa\xe9\xa7\x0a\xc9\x2b\x9f\x00\x00\x00\x00\x49\
-\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x03\x1f\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
-\x09\x70\x48\x59\x73\x00\x00\x0e\xc2\x00\x00\x0e\xc2\x01\x15\x28\
-\x4a\x80\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
+\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\
-\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x8e\x49\x44\x41\x54\
-\x38\x4f\x65\x92\xed\x4b\x53\x71\x14\xc7\xef\x5f\xe3\x0b\x43\x8d\
-\x82\x32\x96\xa1\x88\xa4\x88\x82\xde\x40\x37\xe7\x1e\x02\xdd\x26\
-\xb5\x9a\x6e\x73\x6b\x2e\x7c\x68\xd3\x70\xea\x9c\x3d\xa9\x10\xcb\
-\x59\x54\x93\x32\x5d\x3a\x37\x19\xae\x29\x95\x4f\xe0\x1b\x8d\x96\
-\x73\x84\x03\x5f\x48\xbe\xe9\x85\x69\xeb\xdb\xb9\xbf\xd9\x25\xf0\
-\xc5\xf7\x77\x39\x87\xdf\xe7\x9c\xef\x39\xbf\xcb\x01\x38\xa5\xfb\
-\x3d\xeb\x18\x74\x6f\xa1\xb3\x63\x0d\x6d\xb6\x35\x4a\x9d\xbe\x23\
-\x88\x1d\xc9\x9d\x63\x78\xbd\x7b\x70\x0f\x24\x28\x04\xe7\xec\x5a\
-\xc5\x7c\x18\x98\x9d\xf9\x0d\x59\x8d\x97\xe5\x06\xdd\x2b\xd0\xea\
-\x5e\x41\xa9\x18\x67\xb1\x20\xee\xe0\x20\x8d\x41\xcf\x2e\x66\xde\
-\x1f\x21\x34\xf7\x07\x56\xeb\x32\x4c\xc6\x18\x82\x04\x4e\xbd\xfb\
-\x05\xdb\x9d\x05\x5c\x57\x8f\xc1\xd8\x12\xc4\xd0\x50\x0a\x16\x4b\
-\x0c\xd7\xf8\x11\x56\x80\xc1\x95\x95\x61\x4c\x4f\x1d\xb2\x6e\xa1\
-\xb9\x34\x82\xb3\x19\xd0\xff\xfa\x27\x7c\xbe\x1f\x18\x1e\xde\xc3\
-\x03\x02\x5d\xae\x24\x9a\x0d\x11\x9c\x3f\xd7\x94\x81\x85\x63\x7f\
-\xff\x08\x2a\x65\x98\x6c\x1e\x13\x98\xc6\x40\xff\x16\xca\x4a\x7b\
-\x51\x7a\xb5\x07\xdd\xce\x0d\xea\xb8\xcb\x40\x93\x29\x86\x33\xd9\
-\x0a\x06\x32\xb8\xdb\x99\x44\x7f\x5f\x1c\x8f\x1e\x26\x31\x13\x38\
-\xc2\x90\x27\x0e\x9d\xf6\x19\x02\x81\x6d\xd2\x0e\x5a\x5b\xfd\x64\
-\x79\x01\xf7\x1c\x71\xb2\xbc\x0e\x99\xcc\x07\x69\xed\x08\xaa\xab\
-\x3d\xb4\x1c\x67\x02\xd1\x85\x34\xcd\x7c\x4c\x56\x0f\x51\x56\xe6\
-\x46\x38\x94\x12\xab\x4f\xbe\xfd\x8a\xda\x9a\x61\xd8\xef\x6e\xc2\
-\x64\xde\x40\x93\x6e\x09\xd5\x55\x4f\x51\x54\xd8\x4e\xb0\x63\x5b\
-\x5c\x8e\x30\x63\x41\x81\x1d\xc1\xe0\x77\x11\xf6\xfb\x37\x09\x1e\
-\x25\xcb\x1b\xb8\xa9\x5f\x45\xa3\xe6\x23\xd4\xea\x45\x5c\xa1\x7b\
-\x5c\x9d\x6c\x16\x32\xe9\x04\xea\xe5\x01\xf8\xc6\x0e\x60\xb5\x44\
-\xc1\xf3\x3d\x98\x9c\x8c\x63\xc2\xff\x05\xae\xde\x18\x34\x9a\xe0\
-\x09\xf8\x09\x12\x49\x1f\x2e\xe5\xdf\xc6\xc5\x0b\xfa\x4c\x75\x41\
-\x37\x9a\xa6\xf1\xe4\x71\x8a\x3d\x87\xc9\xf8\x01\x6a\xd5\x38\x15\
-\xf4\x42\xab\x9d\x13\x3b\xf2\xfc\x73\xda\x74\x83\xe8\x8a\x9b\xf0\
-\x6f\xa1\xa3\x7d\x91\x6c\xcd\x33\x50\xd8\xaa\xc3\xf1\x0d\x76\x7b\
-\x66\xc6\x7f\x1d\xd5\xea\x18\xea\xe4\x11\xea\x6a\xa4\xa7\x8b\xb1\
-\x02\xdc\xe8\xe8\x1a\x14\x8a\x17\xe2\x73\xb4\xb5\xad\xc0\x68\x5a\
-\x62\x33\xea\x09\xd4\x10\xc8\xf3\x3e\xd4\xd4\x06\x20\xaf\x8f\x42\
-\x2a\x0b\x91\xe5\x5b\x19\x38\x12\x49\xa0\xa2\xc2\x85\x56\x73\x14\
-\x36\xdb\x67\x64\x67\x2b\x71\x36\x4f\x07\x4d\x63\x98\x75\x2c\x29\
-\x71\x23\x2b\xab\x92\x3a\xb6\xa0\xaa\xea\x25\x7d\xcd\x68\x68\x38\
-\xf9\xc3\x84\x43\x50\x51\x61\x33\xf2\xf3\x0d\x2c\x59\x5c\xac\x44\
-\x79\x79\x3f\x54\xb4\xd5\x9c\x1c\x15\xcb\x75\x76\x2d\x23\x37\x47\
-\x4b\xce\xde\xb0\x58\x90\x08\xff\x2f\x83\xc1\x45\x85\x5a\x70\x59\
-\x62\x46\x5e\x6e\x06\x3e\x2d\x70\x7f\x01\xfd\x94\x6b\x79\x96\xb3\
-\x58\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x03\x8c\
+\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xbd\x49\x44\x41\x54\
+\x38\x4f\xad\x90\x5b\x4c\x92\x61\x18\xc7\xbf\x2b\x2a\x75\x1d\x3c\
+\xa0\xc8\xc1\x13\x22\x28\x68\x8b\x50\xc1\x53\x28\x09\x22\x0a\x86\
+\x86\x82\x98\x76\xe1\xb4\x56\xcd\x19\x1e\x9b\x5b\x69\x5d\x24\xe5\
+\xb2\xad\x35\xab\x99\x7d\xce\xd4\xec\xb3\x41\x88\x69\xa0\xa6\xce\
+\x59\x36\xb2\xd2\x50\xe7\xda\xea\xc2\x74\x1d\x6e\x5a\x5b\x6b\xfa\
+\x04\xec\x4b\x72\xf3\xd2\xdf\xd5\xf3\x3e\xef\xff\xf7\xbc\xcf\x5e\
+\x64\xc7\xa9\x9c\x3b\x16\x54\xf1\x46\xae\x3c\x3d\x9d\x71\xb7\xf4\
+\x85\xe8\x59\x91\x25\xd9\x56\x38\x9c\xf0\x5c\x3d\xc4\xaf\xce\x31\
+\x73\x49\x78\xcc\x4d\xe3\x52\xb1\xe0\x82\x5d\x03\xce\xda\x29\x9f\
+\x9d\xc9\xba\x7d\xce\x96\xf5\x5b\xf7\x41\xb1\xa1\x5b\x50\x40\xd5\
+\x52\x36\x9c\x79\x9b\x0e\xda\x11\x01\x64\x3e\x62\x2f\xc8\xfb\x39\
+\x1c\x97\xf8\x8f\xfa\x79\x35\xd4\xce\xab\xa0\xf2\xb5\x43\x7e\x25\
+\xeb\xac\x59\x54\xc2\xe5\xb5\x42\xa8\x59\x56\x40\xd1\x48\xd2\x37\
+\xa5\x91\x6b\x97\x63\x31\xb3\xd2\xde\xa8\x05\x85\x31\xfa\x57\x1a\
+\x4a\xb7\x49\x7a\xe9\x7e\xb8\x8e\x20\xba\xd9\x5c\x68\xfc\xa4\x85\
+\x53\x2f\xa5\x58\xed\x52\x2e\x34\xad\x69\xe0\xfc\xa2\x1c\xf2\xcd\
+\x71\x33\xaa\x41\x9e\x1a\x8f\xb9\x10\x77\x33\xaa\x84\x68\xc8\x4a\
+\x0a\x1a\xac\xc3\x5b\x08\xe2\x58\x19\x9a\xbf\x9f\x84\xba\x65\x87\
+\xbc\xaa\x86\x4a\xbb\x0c\x54\xe6\xd8\xf1\x3c\x03\x97\x86\x47\xb6\
+\x90\xd2\x19\x54\xcc\x6f\x0b\x7c\x8c\x1f\x11\xa4\x6c\x4a\x0c\x57\
+\xbe\x6a\xa1\xf1\x4b\x01\x54\xcc\x4b\xd7\xf3\xcc\x3c\xab\x6a\x80\
+\x1b\x86\x5f\x6f\x4b\xfc\x9d\x80\x13\x78\x89\x20\x25\xa3\x42\xb8\
+\xb4\x9a\x0f\x0d\x2b\xb9\x50\xf7\x59\x0e\xe5\xb3\xa9\x20\xc3\xd8\
+\x20\x42\xc3\x5d\x1f\xeb\x44\x69\x89\x12\xc8\xcd\x11\x90\x61\x08\
+\x03\x51\x1f\x0d\x8e\x62\x54\xe0\xdf\x27\x02\xaf\xcd\x07\x10\xcd\
+\x70\x02\x1c\x37\xf1\x40\x63\xe5\x83\xac\x8f\x0d\xe2\x6e\x26\xa4\
+\x39\x64\x09\xc6\x4c\xc7\x7d\x44\x66\x62\x80\xc4\x10\x0a\x72\x2b\
+\x1d\x94\x93\x74\xc8\x1e\x0b\x86\x4c\x2b\x15\x62\x6e\xee\xdf\x7c\
+\x04\x29\x7f\x27\xdc\x14\xb6\x23\xa9\xd7\x3f\x24\x01\x25\x5a\x8f\
+\x1a\xc9\xeb\x52\x0b\x05\xc4\xc3\x01\xc0\x6a\xf6\x72\x0f\x28\x99\
+\xe1\xb7\x6a\xa7\x79\x32\xfc\xb8\x85\x14\x94\x4c\xe1\x77\x10\x27\
+\x44\x06\x32\x48\x2d\x64\x48\xec\xf1\x01\xd1\xa0\x2f\xd0\x9b\xf6\
+\xb8\x07\x14\x4c\x1e\x2e\xc9\x1f\x3b\xf8\x51\x31\xc4\x2a\xc3\x5b\
+\x2e\x12\xbb\x48\x05\xb1\xf7\x7c\x6d\x69\x06\x12\x64\x58\x02\x41\
+\xd0\xe5\x03\x91\x7a\xcf\x51\x5e\xc7\x5e\x08\x6e\xd8\xe5\x1e\x90\
+\xf9\x94\x73\x20\xcb\x14\x31\x9e\x3d\xc8\xf8\x99\xda\x43\x7b\x9f\
+\x8c\x92\x6c\xfc\x76\x7f\x3b\xbf\xc3\xef\x47\x9a\x91\xe4\x58\x99\
+\x04\x71\x0f\xbc\x81\xa9\xf7\x34\x33\xf4\x04\x66\xe8\xc5\xdd\x40\
+\xad\x21\xb8\x07\x38\x11\x61\x41\xac\x23\x0f\xa9\x73\xa2\x7e\x1a\
+\x48\x4c\x34\x10\x0f\x50\x40\x88\xf9\x43\x7c\xa7\xf7\x06\xa7\xd5\
+\xeb\x4f\x84\xde\x03\x73\xca\xce\x2c\xa5\x9a\x00\xe1\x57\x09\x39\
+\x2e\xf1\x7f\x92\x50\x5f\x52\x5c\x3b\xb1\xfe\xd0\x2d\xef\x89\xe8\
+\x1b\xfb\xec\xec\x16\xaf\xa9\xc8\x6b\x9e\x4f\x22\xaf\x7b\x94\x86\
+\xb7\x10\x58\x78\x6c\xa7\x40\x90\xbf\xe1\xcb\x27\xde\xa2\xbe\xca\
+\x4e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\xcc\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x0f\x08\x06\x00\x00\x00\xed\x73\x4f\x2f\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
-\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\
-\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\
-\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\
-\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xfb\x49\x44\x41\x54\
-\x38\x4f\x45\x93\xd9\x6b\x13\x61\x14\xc5\xf3\x4f\x08\x82\x8a\x88\
-\x0b\x8a\x88\xfa\x2a\x88\x28\xbe\xf8\x50\x44\xb4\xb8\x81\x20\x3e\
-\x88\x0f\x6e\x55\x5f\x55\xf0\x41\x2a\x22\xfa\xf9\xa0\xb8\x96\x16\
-\x49\x25\x55\x6b\x13\x63\xb5\x4d\x63\xb5\x62\x2d\x5a\xa5\x6a\xd3\
-\xba\x34\x5d\x32\x33\xc9\x64\x9b\x25\xb3\x66\xe4\x78\xa6\x15\x0d\
-\x5c\x72\xf9\x96\xdf\x9c\x7b\xee\xfd\x22\xe1\xef\xb7\x6f\x8a\xc0\
-\x29\x8a\xba\xad\x30\xe4\xd9\xff\xc0\x99\x12\x6e\xa9\x47\x04\xd6\
-\x10\xf3\xc9\xbf\x7b\x61\xe4\x45\xe0\x96\x44\x78\xe7\xdf\x65\x5f\
-\xff\x2e\xbc\xea\x20\xe3\x0d\x2c\xa5\x07\xb6\xd2\x0b\xb7\xdc\x07\
-\xe9\xe5\x56\x98\xd9\xcb\xcc\xd3\xb0\xf3\x7d\xb0\x0b\x7d\xf0\xb4\
-\x01\x78\xd5\x21\xe1\x1b\xbf\xe6\x20\xe1\x97\xdd\xf2\xa0\xa8\xe5\
-\x5a\x78\xf8\x0a\x5c\x35\x06\x73\xf2\x1e\x41\x51\x48\x5d\xab\xa0\
-\x7f\x6d\x82\x2d\xb7\xa3\x36\xdd\x0a\x47\x6d\x87\x36\x7e\x0e\xbe\
-\x96\x84\x5b\xa1\x32\x2a\x89\x84\xb2\x42\x7a\xe5\xeb\x05\x64\x3b\
-\x56\x41\x1b\x39\x0a\xaf\xd4\x0e\xaf\xd2\x01\xf5\xd9\x32\x98\x5f\
-\x0e\x33\x7f\x04\x47\xba\x01\x35\xbd\x05\xf9\xf4\x36\x38\xf9\x76\
-\xc2\xfa\x51\x77\x0a\x21\x40\x16\x96\xdc\xc3\xaf\xdf\x45\xe5\xf3\
-\x49\x48\xb1\x79\xd0\x07\x1b\xe0\xe5\x9a\x51\x4d\xad\x43\xed\xf3\
-\x7e\x78\xca\x35\x54\x52\xeb\xa1\x26\x57\x52\xcd\x1d\x98\x54\x63\
-\x17\x5e\x21\xf4\x63\x16\x60\x17\x52\x94\x7d\x1f\x56\xee\x2e\x8c\
-\xe1\x03\x28\x25\x16\x12\xb2\x0d\xfa\xd0\x4e\x98\x23\x87\xb8\xb6\
-\x17\xda\x9b\x8d\x70\xa5\xab\x2c\xad\x15\xb5\x99\x07\x70\x8a\xfd\
-\x08\x1c\x02\x02\x77\x82\x86\xd0\x9c\x6a\x27\xa5\x3e\x84\x9b\xbb\
-\x04\x63\xa8\x81\x97\x1b\xe1\xcc\xdc\x43\x2d\x7b\x11\x66\xe6\x34\
-\x9c\xec\x79\xd4\xcb\x2d\xa8\x1b\x09\x7a\x90\x40\xdd\x24\xc0\x9d\
-\x16\x11\x4f\xeb\x17\xb9\x54\x03\x26\x63\x4b\x21\x3d\x5e\x88\xe2\
-\xd3\xf9\xa8\xf4\x52\x7a\xe6\x2c\x7e\xbb\x32\x65\x66\x60\x4d\x5d\
-\x85\xfe\x61\x17\xaa\xbd\x6b\xa1\xc6\x17\x41\x49\xac\x46\x79\xf8\
-\x08\x21\x9f\x58\x82\x95\x11\xc6\xc4\x0d\x54\x47\xce\x40\xfb\x72\
-\x1c\xc6\xc7\xdd\xd0\xdf\x6e\x81\xfe\x7e\x27\x3c\xf5\x05\xec\x99\
-\x5b\x30\x47\x4f\x12\x78\x14\xf6\x78\x13\xf3\x26\x18\xe3\xe7\xd9\
-\xea\x28\x02\x7b\xe2\x6f\x17\x68\x88\x39\x45\x63\x94\x36\x38\xd3\
-\x17\x51\x79\xb9\x1a\xd5\xfe\x4d\xac\xfd\x20\x63\x3f\xfd\xd8\x0e\
-\x73\x78\x37\x02\x2d\xca\xda\x63\xb0\xe4\x18\x9c\xd2\x5b\x0e\xd8\
-\x6c\x17\xf2\x04\xa4\x69\x4c\x1b\x2c\xe9\x26\x94\xae\xa5\x28\x26\
-\x97\xc3\x1e\x3b\x41\xc9\x6b\x60\x7e\x6c\x64\x7e\x0c\xa5\xf8\x02\
-\xaa\xda\x01\x5f\xef\xe2\xb9\x87\x04\x0d\xfc\x07\x84\x8e\xda\x52\
-\x0b\x72\xdd\x9b\x21\x77\x6f\x60\x9f\x6f\xc3\x2f\x47\x51\x8c\x2f\
-\x61\x49\xfb\x50\xaf\x25\x61\x8c\x9e\x82\xf4\x64\x31\x4b\x3d\xce\
-\xc9\xec\xa2\x82\x10\xa0\x86\x93\xa8\x0a\xb7\xf2\x4e\x68\x63\xcd\
-\x90\x5f\xef\x21\x9d\xed\x94\xa3\x3c\xd4\x29\x72\x9d\x2b\x38\x89\
-\x27\x38\x75\x71\xf6\xbd\x03\xc6\x8f\x66\x28\xe9\xed\xf0\x08\xf8\
-\x37\x89\x81\xa7\x09\x4f\xfb\x26\x1c\x35\x25\x9c\x42\x42\x58\x4a\
-\x18\x49\x8e\x77\x8f\xc8\x25\x37\x42\xff\x7e\x81\x87\x7b\x09\xa0\
-\xa1\xf9\x6e\x46\x9c\xed\x1e\x10\x9e\x9e\xe1\x5b\xd0\xe7\x1e\x54\
-\xa8\xc2\x37\x7e\x72\x71\x94\x30\x06\x37\x7d\x73\x54\x18\xbf\xae\
-\xf3\x45\x3e\x17\x7e\xed\x9b\xf0\x8c\xb1\xb9\x75\x63\x9c\x7b\x59\
-\xca\x2f\xf2\x72\x24\xf2\x07\x1c\xe6\x0a\xfa\x25\xad\x94\xa9\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x02\x93\x49\x44\x41\x54\x38\xcb\x8d\x93\xcd\x4b\x94\x51\
+\x14\x87\x9f\x7b\xdf\x79\x67\x9c\x69\xc6\x19\x67\x46\xcb\x50\x46\
+\x25\xa3\xa0\x24\x14\xa3\xda\x44\x10\x11\x05\x2e\xfa\xa2\x36\x21\
+\x2d\x72\xd1\xa2\x16\xd2\xa2\x3f\x40\xa2\x4d\x8b\x5a\x87\xd1\xa2\
+\xd0\x56\x42\xb4\x48\xb0\x55\x8b\x3e\x20\xa9\x88\x14\x95\xc9\xb4\
+\xc9\x4a\xa7\x99\x77\x66\x5e\xdf\x8f\x7b\x5b\x68\x8d\x96\x44\x07\
+\x0e\xf7\x5e\xb8\xbf\xe7\x9c\x73\x2f\x3f\xc1\x9a\xb8\x73\x6d\x97\
+\xe6\x3f\xe2\xc2\xc0\x5b\xf1\x6b\x2f\xfe\x04\x1c\x3a\xd7\xfb\x4f\
+\xf1\xd8\xfd\xc1\x75\xe7\xc0\x9f\x17\xb4\xd2\xe4\x17\x26\x36\x14\
+\x27\x1a\xb6\x03\xf0\xab\xc8\xd8\xfd\xc1\xbf\x01\xcb\xae\x4d\xd6\
+\xce\x21\x95\x64\x6b\x28\x85\x58\xd3\xa4\x56\x0a\x80\xe1\xc7\x2b\
+\x6b\x7a\x6d\x07\x7d\x43\x4d\x1d\x2a\xd9\xc9\x62\xb2\x9d\x96\x2d\
+\x5d\x68\xed\x63\x95\x4b\xcc\x4c\x3f\xa1\xcd\x73\x08\x49\x03\xb5\
+\x0a\xe8\xe9\xe9\x61\x64\x64\xa4\x3a\x42\xdf\x50\xd3\xb1\x83\x6d\
+\xbd\x0f\x53\x75\x06\x56\xe4\x11\x25\x69\x22\x75\x10\x69\x44\x68\
+\x6e\xdf\xc3\xd4\xc7\x2c\x8d\x8b\x59\x12\xab\x80\x75\x6f\x70\xea\
+\x56\x2c\xde\x12\xdb\x77\xaf\x20\x9e\x87\x65\x40\x11\x70\x22\xdc\
+\xbd\xfa\x85\x70\x34\xc0\xc9\x6b\x8d\xa0\xe6\x91\xb5\x09\x5e\xcc\
+\x39\x64\x36\x02\xa4\xa3\x99\x7e\x3b\x30\x93\xf4\xc3\x8a\x7c\x25\
+\x88\xd0\x0e\xd9\x77\x15\x62\x29\x83\x62\xb9\x8c\xf6\xc1\x15\x8b\
+\x38\xa6\xc1\xf8\xec\x14\x66\x30\x84\x6b\x17\xaa\x00\xdb\x2d\x1d\
+\xaa\xc8\x3c\xf3\xb3\x9b\x70\x0a\x1e\x52\x38\x68\xad\x71\x1d\x8f\
+\x99\x77\x3f\x70\x95\x47\x4d\x5c\x51\xf2\x7c\xde\x2f\xf8\xec\xcf\
+\xb4\xf2\x7a\xe4\x0a\x41\xa3\x13\xe0\xac\x38\x7d\x2b\x39\xd3\xd0\
+\x26\x5a\x26\x1e\xd4\x31\xff\x2a\x88\x14\x02\x10\x08\xb1\x92\xa0\
+\x69\x3f\xa2\x88\x6e\x2b\xa2\x27\x42\xf4\x9f\x38\x43\xe1\xdb\x57\
+\x3e\xbc\x78\xc6\x85\x81\xb7\x42\x6a\xa5\x72\xa5\x82\x26\xb8\xb9\
+\x4c\xba\xcb\x22\xbd\xd7\xc1\x37\x4c\x64\x48\xd0\xd0\x59\x21\xd5\
+\x61\x61\x47\x72\x7c\x9e\x5b\x40\x2e\x7b\xe4\xa6\xc7\x89\xd6\x25\
+\xab\x23\x78\x2e\x4f\xad\x45\x6f\x5f\xed\xae\x22\xa9\x2e\x4d\x24\
+\x2c\xc8\xbe\xe9\x26\x9c\x5e\xa2\xf9\xf8\x67\x5c\xcb\xa0\x58\x72\
+\xf8\x36\x0e\xfb\x1b\xe2\xf8\xbe\xff\xfb\x3b\x01\xa4\xb5\xe0\xdd\
+\xae\x7c\xa7\x28\x35\xc4\x13\x01\xe2\x49\x89\x1d\x49\xa2\x22\x51\
+\x62\x29\x30\xe3\x1e\xcb\x4b\x06\x69\x27\x4e\x57\xa6\x1e\xe5\xfb\
+\x68\xe5\x57\x01\xa3\x37\xac\x39\xca\x89\x8b\xca\xab\xb1\x23\x9b\
+\x04\xad\xcd\x41\x4e\x5e\x9a\xe4\xf0\xf9\x1c\xdb\x5a\xc2\xd4\x84\
+\x0d\xbc\x59\x49\xcf\xce\x56\x84\x56\xab\x00\xb5\xde\x0b\x8f\xae\
+\x7f\x7c\x70\xba\xbf\x7b\xd2\xca\xcf\xbf\x7c\xe3\x54\x38\x7a\x70\
+\x09\x13\xc9\xf0\xa8\x4b\x6c\xb6\x8d\xbe\x03\xbb\xc9\x34\xa6\x7e\
+\x8b\x94\xaa\x9a\x56\x00\xa1\x55\x90\xbe\x79\x79\x47\x29\x5f\x72\
+\xf9\x54\xb4\x31\x85\xa4\x3e\x1c\xc4\x30\x04\xa9\x5a\x13\x33\x20\
+\x30\xe4\x4a\xae\xb5\xf5\x4f\xfc\x9d\x16\x68\xea\x86\x67\x22\x00\
\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x0c\xb6\x08\
\x89\
@@ -105008,7 +105008,7 @@
\xe0\x55\xd3\x9e\x2b\x7c\x24\xe1\x69\xe2\xef\x31\x5f\xe2\x1a\x37\
\x34\xd7\x79\xa4\xfd\x75\x1e\xa1\xf7\x0d\xd9\x5d\x54\x13\x1b\x0f\
\x0d\x32\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x06\xd9\
+\x00\x00\x07\x7f\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
@@ -105066,10 +105066,10 @@
\x69\x6c\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\
\x36\x36\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\
\x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\
-\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\
+\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\
\x37\x3a\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\
\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\
-\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\
+\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\
\x37\x3a\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\
\x3a\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\
\x64\x66\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\
@@ -105080,14 +105080,14 @@
\x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
\x31\x2e\x39\x2e\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\
\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x34\
-\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\x37\x3a\
+\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\x37\x3a\
\x30\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\
\x53\x65\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\
\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\
\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\
\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\
\x70\x6d\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\
-\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x73\x41\xe6\x22\x00\x00\
+\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\xf7\xcc\x37\x3a\x00\x00\
\x01\x81\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\
\x39\x36\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xdf\x2b\x83\
\x51\x18\xc7\x3f\xb6\x69\x62\x1a\x71\xe1\xc2\xc5\x12\xae\x4c\x33\
@@ -105114,13 +105114,23 @@
\xec\x67\x9f\xe3\x7b\x08\xaf\xcb\x57\x5d\xc1\xee\x1e\xf4\xcb\x79\
\xe7\xf2\x37\x6e\x48\x67\xe9\x02\x54\x26\x46\x00\x00\x00\x09\x70\
\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x40\x49\x44\x41\x54\x38\x8d\x63\x60\x18\x05\x03\x0f\
-\x18\xf1\xc8\xb1\x33\x30\x30\xc4\x43\xd9\x0b\x19\x18\x18\x7e\x92\
-\x6a\x78\x1a\x03\x03\xc3\x7f\x28\x4e\xc5\xa5\x88\x89\x54\x53\xd1\
-\x01\x0b\x1e\xb9\x85\x50\xdb\x19\x18\x18\x18\x16\x51\x6a\xd1\x28\
-\xa0\x25\x00\x00\x8d\x27\x07\x13\xfc\xb7\x18\x62\x00\x00\x00\x00\
-\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x07\x7f\
+\x00\x00\x00\xe6\x49\x44\x41\x54\x38\x8d\xa5\xd3\x31\x4a\x83\x41\
+\x10\x05\xe0\x2f\x6a\xd0\xc6\x42\x21\x60\x23\x96\x9e\x21\x11\x0c\
+\x88\xa5\x90\xc2\xc6\x53\x78\x05\x21\xd8\xa4\xf2\x1c\x5a\x58\x58\
+\xe4\x0a\x16\xbf\x5d\xaa\x80\x95\x60\x63\x65\xa3\x06\x44\x63\x91\
+\x09\x59\x21\xff\x9f\xac\x3e\x18\x58\xde\xce\x7b\x33\xc3\xce\x32\
+\x43\x03\x75\x7f\x44\x0f\x9f\x78\x46\x33\x57\xdc\x08\xf1\x38\xe2\
+\x3a\x47\xbc\x82\x57\xbc\x24\xdc\x30\xc7\x60\x15\xdf\xb8\xc7\x26\
+\x6e\x71\x85\x51\x49\xfe\x1a\x3a\x11\x8f\x78\xcb\x29\x06\xe7\x66\
+\xa3\x0e\x50\xab\x4a\x6e\xe3\x21\xa2\x1d\xdc\x5d\x62\x30\xc6\x4e\
+\x95\x41\x91\x24\x16\xc1\x9d\xe2\x2b\xb8\xfe\xa2\x76\xe7\x19\xc0\
+\x1e\x8e\x4c\x1e\xa0\x12\x87\x21\x2c\xe2\x0c\xdb\x38\xc1\xc6\x22\
+\xf1\x3c\xec\xe3\x23\x3a\x7a\xc2\xba\xa4\x8d\x26\x6e\x70\x89\xad\
+\x12\x83\xb3\xa4\xf2\x2e\x8e\xa7\x17\x75\x93\x15\x9e\xce\xdb\x2d\
+\x31\x38\x48\x72\xde\xd3\x42\xcb\xae\x72\x0d\x2d\x5c\xc4\x38\xbf\
+\xf0\xaf\xcf\x94\x76\x92\xfd\x9d\x7f\x00\xb6\x9a\x39\x0a\x39\xbf\
+\xef\x13\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x1f\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
@@ -105178,10 +105188,10 @@
\x69\x6c\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\
\x36\x36\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\
\x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\
-\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\
+\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\
\x37\x3a\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\
\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\
-\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\
+\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\
\x37\x3a\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\
\x3a\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\
\x64\x66\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\
@@ -105192,14 +105202,14 @@
\x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
\x31\x2e\x39\x2e\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\
\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x34\
-\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\x37\x3a\
+\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\x37\x3a\
\x30\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\
\x53\x65\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\
\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\
\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\
\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\
\x70\x6d\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\
-\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\xf7\xcc\x37\x3a\x00\x00\
+\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x05\xee\x89\x37\x00\x00\
\x01\x81\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\
\x39\x36\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xdf\x2b\x83\
\x51\x18\xc7\x3f\xb6\x69\x62\x1a\x71\xe1\xc2\xc5\x12\xae\x4c\x33\
@@ -105226,23 +105236,17 @@
\xec\x67\x9f\xe3\x7b\x08\xaf\xcb\x57\x5d\xc1\xee\x1e\xf4\xcb\x79\
\xe7\xf2\x37\x6e\x48\x67\xe9\x02\x54\x26\x46\x00\x00\x00\x09\x70\
\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\xe6\x49\x44\x41\x54\x38\x8d\xa5\xd3\x31\x4a\x83\x41\
-\x10\x05\xe0\x2f\x6a\xd0\xc6\x42\x21\x60\x23\x96\x9e\x21\x11\x0c\
-\x88\xa5\x90\xc2\xc6\x53\x78\x05\x21\xd8\xa4\xf2\x1c\x5a\x58\x58\
-\xe4\x0a\x16\xbf\x5d\xaa\x80\x95\x60\x63\x65\xa3\x06\x44\x63\x91\
-\x09\x59\x21\xff\x9f\xac\x3e\x18\x58\xde\xce\x7b\x33\xc3\xce\x32\
-\x43\x03\x75\x7f\x44\x0f\x9f\x78\x46\x33\x57\xdc\x08\xf1\x38\xe2\
-\x3a\x47\xbc\x82\x57\xbc\x24\xdc\x30\xc7\x60\x15\xdf\xb8\xc7\x26\
-\x6e\x71\x85\x51\x49\xfe\x1a\x3a\x11\x8f\x78\xcb\x29\x06\xe7\x66\
-\xa3\x0e\x50\xab\x4a\x6e\xe3\x21\xa2\x1d\xdc\x5d\x62\x30\xc6\x4e\
-\x95\x41\x91\x24\x16\xc1\x9d\xe2\x2b\xb8\xfe\xa2\x76\xe7\x19\xc0\
-\x1e\x8e\x4c\x1e\xa0\x12\x87\x21\x2c\xe2\x0c\xdb\x38\xc1\xc6\x22\
-\xf1\x3c\xec\xe3\x23\x3a\x7a\xc2\xba\xa4\x8d\x26\x6e\x70\x89\xad\
-\x12\x83\xb3\xa4\xf2\x2e\x8e\xa7\x17\x75\x93\x15\x9e\xce\xdb\x2d\
-\x31\x38\x48\x72\xde\xd3\x42\xcb\xae\x72\x0d\x2d\x5c\xc4\x38\xbf\
-\xf0\xaf\xcf\x94\x76\x92\xfd\x9d\x7f\x00\xb6\x9a\x39\x0a\x39\xbf\
-\xef\x13\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x07\x1f\
+\x00\x00\x00\x86\x49\x44\x41\x54\x38\x8d\xed\xcf\x31\x0a\xc2\x50\
+\x14\x44\xd1\x53\x28\x56\x16\x36\xda\xeb\x42\x22\x58\xba\x34\xdd\
+\x8f\x92\x42\x0b\xc9\x02\x5c\x44\x1a\xad\xb5\x12\x62\x33\x01\x11\
+\x94\xa4\xcf\x85\x29\xde\x7b\x73\xe1\x7f\x06\xfe\xb1\xc2\x35\x59\
+\xf6\x95\x17\xa8\xd0\x24\x55\x76\x9d\xc4\x3d\x9e\x11\x5f\x49\x93\
+\xdd\x0e\xf3\x6f\x69\x83\x12\x87\x0f\xf1\x84\x02\xd3\x64\x8d\x73\
+\x6e\x8f\x74\xcb\xb8\xea\x8f\xa7\x5e\x22\xfe\xa2\x48\xa7\xed\xd7\
+\x70\xcc\x70\xc3\xa8\xc3\x37\xc7\xb8\xc7\x39\xc2\x04\x5b\xcc\x3a\
+\xc8\x2d\xb3\x38\x93\x1e\xce\xc0\x2f\xde\x75\xd0\x24\x07\x6c\x4e\
+\x4a\x79\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\xd9\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
@@ -105300,10 +105304,10 @@
\x69\x6c\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\
\x36\x36\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\
\x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\
-\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\
+\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\
\x37\x3a\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\
\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\
-\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\
+\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\
\x37\x3a\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\
\x3a\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\
\x64\x66\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\
@@ -105314,14 +105318,14 @@
\x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
\x31\x2e\x39\x2e\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\
\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x34\
-\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\x37\x3a\
+\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\x37\x3a\
\x30\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\
\x53\x65\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\
\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\
\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\
\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\
\x70\x6d\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\
-\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x05\xee\x89\x37\x00\x00\
+\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x73\x41\xe6\x22\x00\x00\
\x01\x81\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\
\x39\x36\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xdf\x2b\x83\
\x51\x18\xc7\x3f\xb6\x69\x62\x1a\x71\xe1\xc2\xc5\x12\xae\x4c\x33\
@@ -105348,16 +105352,12 @@
\xec\x67\x9f\xe3\x7b\x08\xaf\xcb\x57\x5d\xc1\xee\x1e\xf4\xcb\x79\
\xe7\xf2\x37\x6e\x48\x67\xe9\x02\x54\x26\x46\x00\x00\x00\x09\x70\
\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x86\x49\x44\x41\x54\x38\x8d\xed\xcf\x31\x0a\xc2\x50\
-\x14\x44\xd1\x53\x28\x56\x16\x36\xda\xeb\x42\x22\x58\xba\x34\xdd\
-\x8f\x92\x42\x0b\xc9\x02\x5c\x44\x1a\xad\xb5\x12\x62\x33\x01\x11\
-\x94\xa4\xcf\x85\x29\xde\x7b\x73\xe1\x7f\x06\xfe\xb1\xc2\x35\x59\
-\xf6\x95\x17\xa8\xd0\x24\x55\x76\x9d\xc4\x3d\x9e\x11\x5f\x49\x93\
-\xdd\x0e\xf3\x6f\x69\x83\x12\x87\x0f\xf1\x84\x02\xd3\x64\x8d\x73\
-\x6e\x8f\x74\xcb\xb8\xea\x8f\xa7\x5e\x22\xfe\xa2\x48\xa7\xed\xd7\
-\x70\xcc\x70\xc3\xa8\xc3\x37\xc7\xb8\xc7\x39\xc2\x04\x5b\xcc\x3a\
-\xc8\x2d\xb3\x38\x93\x1e\xce\xc0\x2f\xde\x75\xd0\x24\x07\x6c\x4e\
-\x4a\x79\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x40\x49\x44\x41\x54\x38\x8d\x63\x60\x18\x05\x03\x0f\
+\x18\xf1\xc8\xb1\x33\x30\x30\xc4\x43\xd9\x0b\x19\x18\x18\x7e\x92\
+\x6a\x78\x1a\x03\x03\xc3\x7f\x28\x4e\xc5\xa5\x88\x89\x54\x53\xd1\
+\x01\x0b\x1e\xb9\x85\x50\xdb\x19\x18\x18\x18\x16\x51\x6a\xd1\x28\
+\xa0\x25\x00\x00\x8d\x27\x07\x13\xfc\xb7\x18\x62\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x07\x84\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -105492,55 +105492,30 @@
\x0a\x77\xbf\xa2\
\x00\x71\
\x00\x72\x00\x61\x00\x76\x00\x65\x00\x5f\x00\x74\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\
+\x00\x10\
+\x07\xe4\x86\xa7\
+\x00\x42\
+\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x46\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x08\
-\x0c\x33\x5e\x87\
-\x00\x48\
-\x00\x65\x00\x6c\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x08\xb8\x58\x27\
+\x00\x74\
+\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0a\
\x08\x4a\xc9\x87\
\x00\x65\
\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x10\
-\x07\xe4\x86\xa7\
-\x00\x42\
-\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x46\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0f\
-\x03\xc9\x22\xe7\
-\x00\x4f\
-\x00\x70\x00\x65\x00\x6e\x00\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x09\
-\x06\x98\x83\x27\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0d\
\x0a\x18\x79\x67\
\x00\x52\
\x00\x61\x00\x76\x00\x65\x00\x41\x00\x64\x00\x64\x00\x49\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x12\
-\x0e\x38\xf6\x07\
-\x00\x52\
-\x00\x61\x00\x76\x00\x65\x00\x41\x00\x64\x00\x64\x00\x49\x00\x6e\x00\x5f\x00\x31\x00\x36\x00\x70\x00\x78\x00\x2e\x00\x70\x00\x6e\
-\x00\x67\
\x00\x08\
-\x08\xb8\x58\x27\
-\x00\x74\
-\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0b\
-\x0c\x6a\x2c\x47\
-\x00\x72\
-\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x0c\x33\x5e\x87\
+\x00\x48\
+\x00\x65\x00\x6c\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0c\
\x06\xdd\x18\x07\
\x00\x6d\
\x00\x65\x00\x74\x00\x61\x00\x64\x00\x61\x00\x74\x00\x61\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x10\
-\x0e\xa3\x7f\x47\
-\x00\x70\
-\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x5f\x00\x76\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0c\
-\x0b\x76\x61\xc7\
-\x00\x41\
-\x00\x64\x00\x64\x00\x54\x00\x6f\x00\x4d\x00\x61\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x06\
\x07\x28\xfc\x93\
\x00\x6c\
@@ -105549,10 +105524,35 @@
\x06\xfa\xa1\x47\
\x00\x4f\
\x00\x70\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x0e\x38\xf6\x07\
+\x00\x52\
+\x00\x61\x00\x76\x00\x65\x00\x41\x00\x64\x00\x64\x00\x49\x00\x6e\x00\x5f\x00\x31\x00\x36\x00\x70\x00\x78\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
\x00\x0e\
\x02\x28\x16\x67\
\x00\x4e\
\x00\x65\x00\x77\x00\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0b\x76\x61\xc7\
+\x00\x41\
+\x00\x64\x00\x64\x00\x54\x00\x6f\x00\x4d\x00\x61\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x06\x98\x83\x27\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x0e\xa3\x7f\x47\
+\x00\x70\
+\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x5f\x00\x76\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x0c\x6a\x2c\x47\
+\x00\x72\
+\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x03\xc9\x22\xe7\
+\x00\x4f\
+\x00\x70\x00\x65\x00\x6e\x00\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x15\
\x07\x00\x43\x07\
\x00\x75\
@@ -105562,10 +105562,6 @@
\x0a\xce\x46\x07\
\x00\x52\
\x00\x61\x00\x73\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x07\
-\x0b\x67\x57\xc7\
-\x00\x44\
-\x00\x6f\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0c\
\x01\xff\x22\xe7\
\x00\x4d\
@@ -105574,6 +105570,10 @@
\x06\xac\xd7\x07\
\x00\x50\
\x00\x6f\x00\x6c\x00\x79\x00\x6c\x00\x69\x00\x6e\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x0b\x67\x57\xc7\
+\x00\x44\
+\x00\x6f\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0b\
\x0f\x0f\x90\xa7\
\x00\x50\
@@ -105584,26 +105584,26 @@
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x10\x00\x00\x00\x03\
-\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\x1e\
-\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x10\x32\
-\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x13\x02\
-\x00\x00\x01\x42\x00\x00\x00\x00\x00\x01\x00\x0c\xd4\x59\
-\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x0c\xdb\xfb\
+\x00\x00\x01\x36\x00\x00\x00\x00\x00\x01\x00\x0c\xcf\xb9\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\xde\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x0c\xd7\x05\
+\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x0c\xc7\x39\
+\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x0c\xc9\x11\
\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x0c\xe2\xae\
-\x00\x00\x01\xa4\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\
-\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x22\
-\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x24\
-\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x0c\xd0\x0c\
-\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7b\
-\x00\x00\x01\x86\x00\x00\x00\x00\x00\x01\x00\x0c\xd8\x3f\
+\x00\x00\x00\xde\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x26\x00\x00\x00\x00\x00\x01\x00\x0c\xd1\x07\
-\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x87\
-\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x0c\xd6\x31\
-\x00\x00\x02\x52\x00\x00\x00\x00\x00\x01\x00\x19\xa7\x2a\
-\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x19\xae\xad\
-\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x19\x98\xba\
+\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x03\x0b\
+\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x02\x10\
+\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x04\x09\
+\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x0c\xd3\x49\
+\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x0c\xba\x15\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x0c\xdc\x8c\
+\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x34\
+\x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x0c\xda\x7e\
\x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x19\xa0\x4d\
+\x00\x00\x02\x5c\x00\x00\x00\x00\x00\x01\x00\x19\xa7\xd0\
+\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x19\x98\xba\
+\x00\x00\x02\x7a\x00\x00\x00\x00\x00\x01\x00\x19\xae\xf3\
\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x19\xb5\xd0\
"
@@ -105614,45 +105614,45 @@
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x10\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\x1e\
+\x00\x00\x01\x36\x00\x00\x00\x00\x00\x01\x00\x0c\xcf\xb9\
\x00\x00\x01\x78\xcb\xf6\xd9\x17\
-\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x10\x32\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\xde\
\x00\x00\x01\x78\xcb\xf6\xd9\x1b\
-\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x13\x02\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x0c\xd7\x05\
\x00\x00\x01\x79\x00\x08\x0a\x2c\
-\x00\x00\x01\x42\x00\x00\x00\x00\x00\x01\x00\x0c\xd4\x59\
+\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x0c\xc7\x39\
\x00\x00\x01\x78\xcb\xf6\xd9\xc3\
-\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x0c\xdb\xfb\
+\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x0c\xc9\x11\
\x00\x00\x01\x78\xcb\xf6\xd9\x1e\
\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x0c\xe2\xae\
\x00\x00\x01\x78\xcb\xf6\xd9\x4c\
-\x00\x00\x01\xa4\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\
+\x00\x00\x00\xde\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x22\
+\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x78\xcb\xf6\xd9\x10\
-\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x24\
+\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x03\x0b\
\x00\x00\x01\x78\xcb\xf6\xd9\xc0\
-\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x0c\xd0\x0c\
+\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x02\x10\
\x00\x00\x01\x78\xcb\xf6\xd9\xca\
-\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7b\
+\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x04\x09\
\x00\x00\x01\x78\xcb\xf6\xd9\x3d\
-\x00\x00\x01\x86\x00\x00\x00\x00\x00\x01\x00\x0c\xd8\x3f\
+\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x0c\xd3\x49\
\x00\x00\x01\x78\xcb\xf6\xd9\xb1\
-\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x0c\xba\x15\
\x00\x00\x01\x78\xcb\xf6\xd9\x14\
-\x00\x00\x01\x26\x00\x00\x00\x00\x00\x01\x00\x0c\xd1\x07\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x0c\xdc\x8c\
\x00\x00\x01\x78\xcb\xf6\xd9\xc7\
-\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x87\
+\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x34\
\x00\x00\x01\x78\xcb\xf6\xd9\x40\
-\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x0c\xd6\x31\
+\x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x0c\xda\x7e\
\x00\x00\x01\x78\xf0\xdf\x37\xd3\
-\x00\x00\x02\x52\x00\x00\x00\x00\x00\x01\x00\x19\xa7\x2a\
+\x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x19\xa0\x4d\
\x00\x00\x01\x78\xf0\x6b\xf4\x30\
-\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x19\xae\xad\
+\x00\x00\x02\x5c\x00\x00\x00\x00\x00\x01\x00\x19\xa7\xd0\
\x00\x00\x01\x78\xf0\x6b\x11\xa0\
\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x19\x98\xba\
\x00\x00\x01\x78\xf0\x6a\xa4\x40\
-\x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x19\xa0\x4d\
+\x00\x00\x02\x7a\x00\x00\x00\x00\x00\x01\x00\x19\xae\xf3\
\x00\x00\x01\x78\xf0\x6c\x59\xc0\
\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x19\xb5\xd0\
\x00\x00\x01\x78\xf0\x6b\x86\xd0\
diff --git a/src/ui/dock_widget.py b/src/ui/dock_widget.py
index 957d557..957fa33 100644
--- a/src/ui/dock_widget.py
+++ b/src/ui/dock_widget.py
@@ -8,7 +8,6 @@
from PyQt5 import QtCore, QtGui, QtWidgets
-
class Ui_QRAVEDockWidgetBase(object):
def setupUi(self, QRAVEDockWidgetBase):
QRAVEDockWidgetBase.setObjectName("QRAVEDockWidgetBase")
@@ -36,3 +35,4 @@ def setupUi(self, QRAVEDockWidgetBase):
def retranslateUi(self, QRAVEDockWidgetBase):
_translate = QtCore.QCoreApplication.translate
QRAVEDockWidgetBase.setWindowTitle(_translate("QRAVEDockWidgetBase", "Riverscapes Toolbar (QRAVE)"))
+
diff --git a/src/ui/options_dialog.ui b/src/ui/options_dialog.ui
index 9b4a439..6ebf95f 100644
--- a/src/ui/options_dialog.ui
+++ b/src/ui/options_dialog.ui
@@ -1,119 +1,119 @@
- Dialog
-
-
-
- 0
- 0
- 365
- 251
-
-
-
- Options
-
-
- -
-
-
- Include basemaps in explorer tree
-
-
-
- -
-
-
-
-
-
- Region
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- -
-
-
- ...
-
-
-
-
-
- -
-
-
- Load default project views when opening projects
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 154
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Reset
-
-
-
-
+ Dialog
+
+
+
+ 0
+ 0
+ 365
+ 251
+
+
+
+ Options
+
+
+ -
+
+
+ Include basemaps in explorer tree
+
-
-
-
- buttonBox
- accepted()
- Dialog
- accept()
-
-
- 248
- 254
-
-
- 157
- 274
-
-
-
-
- buttonBox
- rejected()
- Dialog
- reject()
-
-
- 316
- 260
-
-
- 286
- 274
-
-
-
-
+
+ -
+
+
-
+
+
+ Region
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+ ...
+
+
+
+
+
+ -
+
+
+ Load default project views when opening projects
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 154
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Reset
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ Dialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ Dialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+