diff --git a/README.md b/README.md
index 5f9b501..0372a50 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,9 @@ The Qt components can be embedded in your own Qt interfaces and usually have
a `stage` entrypoint that you should pass a `pxr.Usd.Stage` instance.
However, a simple example Editor UI is also available to run standalone.
+
+![USD Editor](/assets/images/editor_screenshot.png "USD Editor")
+
If you have the `usd_qtpy` package you can for example run it like:
```
diff --git a/assets/images/editor_screenshot.png b/assets/images/editor_screenshot.png
new file mode 100644
index 0000000..188ec3e
Binary files /dev/null and b/assets/images/editor_screenshot.png differ
diff --git a/usd_qtpy/__main__.py b/usd_qtpy/__main__.py
index edb8b6d..4286844 100644
--- a/usd_qtpy/__main__.py
+++ b/usd_qtpy/__main__.py
@@ -23,11 +23,13 @@ def main():
from pxr import Usd # noqa
from qtpy import QtWidgets # noqa
from usd_qtpy.editor import EditorWindow # noqa
+ from usd_qtpy.style import load_stylesheet
stage = Usd.Stage.Open(filepath)
app = QtWidgets.QApplication()
dialog = EditorWindow(stage=stage)
- dialog.resize(600, 600)
+ dialog.resize(1200, 600)
+ dialog.setStyleSheet(load_stylesheet())
dialog.show()
app.exec_()
diff --git a/usd_qtpy/editor.py b/usd_qtpy/editor.py
index 00e2fb0..d7891ae 100644
--- a/usd_qtpy/editor.py
+++ b/usd_qtpy/editor.py
@@ -1,6 +1,6 @@
import logging
-from qtpy import QtWidgets
+from qtpy import QtWidgets, QtCore
from . import (
prim_hierarchy,
@@ -17,13 +17,22 @@
HAS_VIEWER = False
-class EditorWindow(QtWidgets.QDialog):
+class EditorWindow(QtWidgets.QWidget):
"""Example editor window containing the available components."""
def __init__(self, stage, parent=None):
super(EditorWindow, self).__init__(parent=parent)
- self.setWindowTitle("USD Editor")
+ title = "USD Editor"
+ if stage:
+ name = stage.GetRootLayer().GetDisplayName()
+ title = f"{title}: {name}"
+ self.setWindowTitle(title)
+
+ self.setWindowFlags(
+ self.windowFlags() |
+ QtCore.Qt.Dialog
+ )
layout = QtWidgets.QVBoxLayout(self)
splitter = QtWidgets.QSplitter(self)
diff --git a/usd_qtpy/layer_diff.py b/usd_qtpy/layer_diff.py
index 5b1c007..36c3af6 100644
--- a/usd_qtpy/layer_diff.py
+++ b/usd_qtpy/layer_diff.py
@@ -1,3 +1,4 @@
+import contextlib
import difflib
from qtpy import QtWidgets, QtCore
@@ -6,6 +7,39 @@
from .lib.qt import DifflibSyntaxHighlighter
+@contextlib.contextmanager
+def preserve_scroll(scroll_area):
+ """Preserve scrollbar positions by percentage after context."""
+ def get_percent(scrollbar):
+ value = scrollbar.value()
+ minimum = scrollbar.minimum()
+ maximum = scrollbar.maximum()
+ if value <= minimum:
+ return 0
+ if value >= maximum:
+ return 1
+ if minimum == maximum:
+ return 0
+ return (value - minimum) / (maximum - minimum)
+
+ def set_percent(scrollbar, percent):
+ minimum = scrollbar.minimum()
+ maximum = scrollbar.maximum()
+ value = minimum + ((maximum - minimum) * percent)
+ scrollbar.setValue(value)
+
+ horizontal = scroll_area.horizontalScrollBar()
+ h_percent = get_percent(horizontal)
+ vertical = scroll_area.verticalScrollBar()
+ v_percent = get_percent(vertical)
+ try:
+ yield
+ finally:
+ print(h_percent, v_percent)
+ set_percent(horizontal, h_percent)
+ set_percent(vertical, v_percent)
+
+
class LayerDiffWidget(QtWidgets.QDialog):
"""Simple layer ASCII diff text view"""
# TODO: Add a dedicated 'toggle listen' and 'refresh' button to the widget
@@ -26,7 +60,8 @@ def __init__(self,
text_edit = QtWidgets.QTextEdit()
# Force monospace font for readability
- text_edit.setStyleSheet('* { font-family: "Courier"; }')
+ text_edit.setProperty("font-style", "monospace")
+ text_edit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
highlighter = DifflibSyntaxHighlighter(text_edit)
text_edit.setPlaceholderText("Layers match - no difference detected.")
@@ -59,16 +94,18 @@ def refresh(self):
a_ascii = layer_a.ExportToString()
b_ascii = layer_b.ExportToString()
- # Print diff
- self._text_edit.clear()
- for line in difflib.unified_diff(
+ generator = difflib.unified_diff(
a_ascii.splitlines(),
b_ascii.splitlines(),
fromfile=self._layer_a_label or f"{layer_a.identifier} (A)",
tofile=self._layer_b_label or f"{layer_b.identifier} (B)",
lineterm=""
- ):
- self._text_edit.insertPlainText(f"{line}\n")
+ )
+
+ with preserve_scroll(self._text_edit):
+ self._text_edit.clear()
+ for line in generator:
+ self._text_edit.insertPlainText(f"{line}\n")
def on_layers_changed(self, notice, sender):
# TODO: We could also cache the ASCII of the USD files so that on
diff --git a/usd_qtpy/layer_editor.py b/usd_qtpy/layer_editor.py
index 9906f59..0e6e15a 100644
--- a/usd_qtpy/layer_editor.py
+++ b/usd_qtpy/layer_editor.py
@@ -2,6 +2,7 @@
import contextlib
import logging
from functools import partial
+from typing import List
from qtpy import QtWidgets, QtCore, QtGui
@@ -11,6 +12,7 @@
from .tree.base import AbstractTreeModelMixin
from .lib.qt import schedule, iter_model_rows
from .layer_diff import LayerDiffWidget
+from .resources import get_icon
log = logging.getLogger(__name__)
@@ -53,18 +55,22 @@ def set_tips(widget, tip):
class LayerItem(TreeItem):
- __slots__ = ('layer', 'parent_layer')
+ __slots__ = ('layer', 'stack')
- def __init__(self, layer: Sdf.Layer, parent_layer: Sdf.Layer = None):
- if parent_layer:
- separator = "<--sublayer-->"
- key = separator.join([parent_layer.identifier, layer.identifier])
- else:
- key = layer.identifier
+ def __init__(self, layer: Sdf.Layer, parents: List[Sdf.Layer] = None):
+
+ # The key is the full layer stack (all parents) joined together
+ # by a unique separator so the layer identifier can uniquely appear
+ # anywhere on the layer stack
+ parents = parents or []
+ stack = list(parents)
+ stack.append(layer)
+ separator = "<--sublayer-->"
+ key = separator.join(stack_layer.identifier for stack_layer in stack)
super(LayerItem, self).__init__(key=key)
self.layer = layer
- self.parent_layer = parent_layer
+ self.stack = stack
class LayerStackModel(AbstractTreeModelMixin, QtCore.QAbstractItemModel):
@@ -284,15 +290,15 @@ def set_stage(self, stage):
return
self._stage = stage
+ self.refresh()
- if self._listeners:
- self.log.debug("Revoking Tf.Notice listeners: %s", self._listeners)
- # Tf.Notice.Revoke(self._listeners)
- for listener in self._listeners:
- listener.Revoke()
-
- self._listeners.clear()
+ def register_listeners(self):
+ stage = self._stage
if stage and stage.GetPseudoRoot():
+ if self._listeners:
+ # Remove any existing listeners
+ self.revoke_listeners()
+
self.log.debug("Adding Tf.Notice Listeners..")
# Listen to changes
self._listeners.append(Tf.Notice.Register(
@@ -327,7 +333,14 @@ def set_stage(self, stage):
# self.on_layers_changed,
# ))
- self.refresh()
+ def revoke_listeners(self):
+ if self._listeners:
+ self.log.debug("Revoking Tf.Notice listeners: %s", self._listeners)
+ # Tf.Notice.Revoke(self._listeners)
+ for listener in self._listeners:
+ listener.Revoke()
+
+ self._listeners.clear()
@contextlib.contextmanager
def reset_context(self):
@@ -351,8 +364,8 @@ def refresh(self):
return
def add_layer(layer: Sdf.Layer, parent=None):
- parent_layer = parent.layer if parent else None
- layer_item = LayerItem(layer, parent_layer=parent_layer)
+ parent_layers = parent.stack if parent else None
+ layer_item = LayerItem(layer, parents=parent_layers)
item_tree.add_items(layer_item, parent=parent)
for sublayer_path in layer.subLayerPaths:
@@ -406,24 +419,16 @@ def __init__(self, layer, stage, parent=None):
# Identifier label as display name
label = QtWidgets.QLabel("", parent=self)
- resources = os.path.join(os.path.dirname(__file__),
- "resources",
- "feathericons")
-
# Save changes button
- save_icon = QtGui.QIcon(os.path.join(resources, "save.svg"))
- save = QtWidgets.QPushButton(self)
+ save = QtWidgets.QPushButton(get_icon("save"), "", self)
set_tips(
save, "Save layer to disk"
)
- save.setIcon(save_icon)
save.setFixedWidth(25)
save.setFixedHeight(25)
# Set edit target (active or not button)
- edit_icon = QtGui.QIcon(os.path.join(resources, "edit-2.svg"))
- edit_target_btn = QtWidgets.QPushButton(self)
- edit_target_btn.setIcon(edit_icon)
+ edit_target_btn = QtWidgets.QPushButton(get_icon("edit-2"), "", self)
edit_target_btn.setCheckable(True)
set_tips(
edit_target_btn,
@@ -515,7 +520,6 @@ def on_save_layer(self):
# TODO: Prompt for filepath if layer is anonymous?
# TODO: Allow making filepath relative to parent layer?
log.debug(f"Saving: {layer}")
- log.debug(layer.ExportToString())
layer.Save()
# TODO: Do not update using this but base it off of signals from
# Sdf.Notice.LayerDidSaveLayerToFile
@@ -599,6 +603,7 @@ def on_view_context_menu(self, point):
def show_layer_as_text():
text_edit = QtWidgets.QTextEdit(parent=self)
+ text_edit.setProperty("font-style", "monospace")
text_edit.setPlainText(layer.ExportToString())
text_edit.setWindowTitle(layer.identifier)
text_edit.setWindowFlags(QtCore.Qt.Dialog)
@@ -692,9 +697,11 @@ def on_add_layer(self, index):
log.debug("Adding sublayer: %s", filename)
layer.subLayerPaths.append(filename)
+ def showEvent(self, event):
+ self.model.register_listeners()
+
def hideEvent(self, event: QtGui.QCloseEvent) -> None:
# TODO: This should be on a better event when we know the window
# will be gone and unused after. The `closeEvent` doesn't seem
# to trigger by default on closing a parent dialog?
- log.debug("Clearing stage connection..")
- self.model.set_stage(None) # clear listeners on close
\ No newline at end of file
+ self.model.revoke_listeners()
diff --git a/usd_qtpy/lib/qt.py b/usd_qtpy/lib/qt.py
index 2573412..f91da8b 100644
--- a/usd_qtpy/lib/qt.py
+++ b/usd_qtpy/lib/qt.py
@@ -1,7 +1,7 @@
import re
import sys
import logging
-from qtpy import QtCore, QtGui
+from qtpy import QtCore, QtGui, QtWidgets
class SharedObjects:
@@ -93,3 +93,26 @@ def highlightBlock(self, text):
# Format the full block
self.setFormat(0, len(text), char_format)
return
+
+
+class DropFilesPushButton(QtWidgets.QPushButton):
+ """QPushButton that emits files_dropped signal when dropping files on it"""
+
+ files_dropped = QtCore.Signal(list)
+
+ def __init__(self, *args, **kwargs):
+ super(DropFilesPushButton, self).__init__(*args, **kwargs)
+ self.setAcceptDrops(True)
+
+ def dragEnterEvent(self, event):
+ if event.mimeData().hasUrls():
+ event.acceptProposedAction()
+ else:
+ super(DropFilesPushButton, self).dragEnterEvent(event)
+
+ def dropEvent(self, event):
+ if event.mimeData().hasUrls():
+ self.files_dropped.emit(event.mimeData().urls())
+ event.acceptProposedAction()
+ else:
+ super(DropFilesPushButton, self).dropEvent(event)
diff --git a/usd_qtpy/lib/usd.py b/usd_qtpy/lib/usd.py
index 79af1d1..f610b1a 100644
--- a/usd_qtpy/lib/usd.py
+++ b/usd_qtpy/lib/usd.py
@@ -36,7 +36,7 @@ def get_prim_types_by_group() -> dict:
"""
plug_reg = Plug.Registry()
- schema_reg = Usd.SchemaRegistry()
+ schema_reg = Usd.SchemaRegistry
# Get schema types by plug-in group
types_by_group = defaultdict(list)
@@ -141,20 +141,42 @@ def move_prim_spec(layer, src_prim_path, dest_prim_path):
src_prim_path = Sdf.Path(src_prim_path)
dest_prim_path = Sdf.Path(dest_prim_path)
+ if src_prim_path == dest_prim_path:
+ return
+
+ src_name = src_prim_path.name
dest_parent = dest_prim_path.GetParentPath()
dest_name = dest_prim_path.name
with Sdf.ChangeBlock():
- reparent_edit = Sdf.NamespaceEdit.ReparentAndRename(
- src_prim_path,
- dest_parent,
- dest_name,
- -1
- )
-
- edit = Sdf.BatchNamespaceEdit()
- edit.Add(reparent_edit)
- if not layer.Apply(edit):
+ if dest_parent == src_prim_path.GetParentPath():
+ # Rename, keep parent
+ edit = Sdf.NamespaceEdit.Rename(
+ src_prim_path,
+ dest_name
+ )
+
+ else:
+ if src_name == dest_name:
+ # Reparent, keep name
+ edit = Sdf.NamespaceEdit.Reparent(
+ src_prim_path,
+ dest_parent,
+ -1
+ )
+
+ else:
+ # Reparent and rename
+ edit = Sdf.NamespaceEdit.ReparentAndRename(
+ src_prim_path,
+ dest_parent,
+ dest_name,
+ -1
+ )
+
+ batch_edit = Sdf.BatchNamespaceEdit()
+ batch_edit.Add(edit)
+ if not layer.Apply(batch_edit):
logging.warning("Failed prim spec move: %s -> %s",
src_prim_path,
dest_prim_path)
@@ -201,5 +223,9 @@ def remove_spec(spec):
elif isinstance(spec, Sdf.PropertySpec):
# Relationship and Attribute specs
del spec.owner.properties[spec.name]
+
+ elif isinstance(spec, Sdf.VariantSetSpec):
+ del spec.owner.variantSets[spec.name]
+
else:
raise TypeError(f"Unsupported spec type: {spec}")
\ No newline at end of file
diff --git a/usd_qtpy/lib/usd_merge_spec.py b/usd_qtpy/lib/usd_merge_spec.py
new file mode 100644
index 0000000..33d908e
--- /dev/null
+++ b/usd_qtpy/lib/usd_merge_spec.py
@@ -0,0 +1,86 @@
+from typing import Union
+from pxr import Sdf
+
+from .qt import report_error
+
+
+@report_error
+def should_copy_value_fn(
+ spec_type: Sdf.SpecType,
+ field: str,
+ src_layer: Sdf.Layer,
+ src_path: Sdf.Path,
+ field_in_src: bool,
+ dest_layer: Sdf.Layer,
+ dest_path: Sdf.Path,
+ field_in_dest: bool
+) -> Union[bool, tuple[bool, object]]:
+ if field_in_dest and field_in_src:
+ if field == "specifier":
+ # Do not downgrade specifier to Over but do upgrade to Def
+ # We only copy "SpecifierDef"
+ value = src_layer.GetObjectAtPath(src_path).GetInfo(field)
+ if value == Sdf.SpecifierOver or value == Sdf.SpecifierClass:
+ return False
+ else:
+ return True
+ elif field == "typeName":
+ # Only override empty type name
+ existing_value = dest_layer.GetObjectAtPath(dest_path).GetInfo(
+ field)
+ return not existing_value
+
+ # TODO: For xform operations merge them together?
+ # TODO: For payloads/references merge them together?
+
+ return True
+
+
+@report_error
+def should_copy_children_fn(
+ children_field: str,
+ src_layer: Sdf.Layer,
+ src_path: Sdf.Path,
+ field_in_src: bool,
+ dest_layer: Sdf.Layer,
+ dest_path: Sdf.Path,
+ field_in_dest: bool
+) -> Union[bool, tuple[bool, list, list]]:
+ if field_in_dest and not field_in_src:
+ # Keep existing children
+ return False
+ if field_in_dest and field_in_src:
+ # Copy over children with matching names but preserve existing children
+ # that have no new match
+ src = src_layer.GetObjectAtPath(src_path)
+ dest = dest_layer.GetObjectAtPath(dest_path)
+ src_children = src.GetInfo(children_field)
+ dest_children = dest.GetInfo(children_field)
+ src_children_lookup = set(src_children)
+ keep_children = [
+ child for child in dest_children
+ if child not in src_children_lookup
+ ]
+
+ return True, src_children, src_children + keep_children
+
+ return True
+
+
+def copy_spec_merge(src_layer: Sdf.Layer,
+ src_path: Sdf.Path,
+ dest_layer: Sdf.Layer,
+ dest_path: Sdf.Path) -> bool:
+ """Copy spec while merging into the existing opinions instead of replacing.
+
+ The children hierarchy will be merged so that existing children will be
+ preserved, but new children will be applied on top of the existing ones,
+ including overlaying onto existing children prims with the same name.
+
+ For copying values onto existing prims:
+ - specifier is only copied if copied spec sets `Sdf.SpecifierDef`
+ - type name is only copied if original spec had no or empty type name
+
+ """
+ return Sdf.CopySpec(src_layer, src_path, dest_layer, dest_path,
+ should_copy_value_fn, should_copy_children_fn)
diff --git a/usd_qtpy/prim_delegate.py b/usd_qtpy/prim_delegate.py
new file mode 100644
index 0000000..031e9a4
--- /dev/null
+++ b/usd_qtpy/prim_delegate.py
@@ -0,0 +1,113 @@
+from qtpy import QtWidgets, QtCore, QtGui
+
+
+class DrawRectsDelegate(QtWidgets.QStyledItemDelegate):
+ """Draws rounded rects 'tags' to the right hand side of items.
+
+ The tags to be drawn should be returned by index's data via the
+ BlockTagsRole on this class. The returned data should be a list
+ with dicts defining each tag:
+ {
+ "text": "text", # text value in the block
+ "background-color": "#FFFFFF", # background color
+ "color": "#FF9999" # text color
+ }
+
+ These tags are clickable and will emit the `rect_clicked` event with
+ the model's index and the `str` value of the tag.
+
+ """
+
+ RectDataRole = QtCore.Qt.UserRole + 1001
+
+ rect_clicked = QtCore.Signal(QtCore.QEvent, QtCore.QModelIndex, dict)
+
+ def iter_rects(self, blocks, option):
+ """Yield each QRect used for drawing"""
+
+ rect = QtCore.QRect(option.rect)
+ padding_topbottom = 2
+ padding_sides = 4
+ width = 30
+ for i, _block_data in enumerate(blocks):
+
+ # Calculate left by computing offset from
+ # right hand side to align right
+ i = i + 1
+ right = rect.right()
+ left = right - (width * i) - (
+ 2 * i * padding_sides) + padding_sides
+ yield QtCore.QRect(left, rect.top() + padding_topbottom,
+ width, rect.height() - padding_topbottom * 2)
+
+ def paint(self, painter, option, index):
+
+ super(DrawRectsDelegate, self).paint(painter, option, index)
+
+ corner_radius = 5
+ painter.setRenderHint(QtGui.QPainter.Antialiasing)
+ blocks = index.data(self.RectDataRole) or []
+
+ for block_data, block_rect in zip(blocks, self.iter_rects(blocks,
+ option)):
+
+ text = block_data.get("text", "")
+ background_color = QtGui.QColor(block_data.get("background-color",
+ "#FF9999"))
+ text_color = QtGui.QColor(block_data.get("color", "#FFFFFF"))
+ painter.setPen(text_color)
+
+ # Draw the block rect
+ path = QtGui.QPainterPath()
+ path.addRoundedRect(block_rect, corner_radius, corner_radius)
+ painter.fillPath(path, background_color)
+
+ # Draw text in the block - vertically centered
+ point = block_rect.topLeft()
+ point.setY(point.y() + block_rect.height() * 0.5)
+
+ painter.drawText(block_rect, QtCore.Qt.AlignCenter, text)
+
+ def editorEvent(self, event, model, option, index) -> bool:
+ if (
+ isinstance(event, QtGui.QMouseEvent)
+ and event.type() == QtCore.QEvent.MouseButtonPress
+ and event.button() == QtCore.Qt.LeftButton
+ ):
+ blocks = index.data(self.RectDataRole) or []
+ if blocks:
+ point = event.position().toPoint()
+ for block, rect in zip(blocks,
+ self.iter_rects(blocks, option)):
+ if rect.contains(point):
+ self.rect_clicked.emit(event, index, block)
+ event.accept()
+ return True
+
+ return super(DrawRectsDelegate, self).editorEvent(event,
+ model,
+ option,
+ index)
+
+ def helpEvent(self,
+ event: QtGui.QHelpEvent,
+ view: QtWidgets.QAbstractItemView,
+ option: QtWidgets.QStyleOptionViewItem,
+ index: QtCore.QModelIndex) -> bool:
+ if event.type() == QtCore.QEvent.ToolTip:
+
+ blocks = index.data(self.RectDataRole) or []
+ for block_data, block_rect in zip(blocks, self.iter_rects(blocks,
+ option)):
+ if block_rect.contains(event.pos()):
+ QtWidgets.QToolTip.showText(
+ event.globalPos(),
+ block_data.get("tooltip", ""),
+ view
+ )
+ return True
+
+ return super(DrawRectsDelegate, self).helpEvent(event,
+ view,
+ option,
+ index)
diff --git a/usd_qtpy/prim_hierarchy.py b/usd_qtpy/prim_hierarchy.py
index 214cbbc..b92646b 100644
--- a/usd_qtpy/prim_hierarchy.py
+++ b/usd_qtpy/prim_hierarchy.py
@@ -1,358 +1,13 @@
-import logging
-import os
-import contextlib
-
-from qtpy import QtWidgets, QtGui, QtCore
-from pxr import Usd, Sdf, Tf
-
-
-from .lib.qt import report_error
-from .lib.usd import get_prim_types_by_group, rename_prim
-
-
-@contextlib.contextmanager
-def layout_change_context(model):
- """Context manager to ensure model layout changes are propagated if an
- exception is thrown.
- """
- model.layoutAboutToBeChanged.emit()
- try:
- yield
- finally:
- model.layoutChanged.emit()
-
-
-class PrimTypeIconProvider:
- """Return icon for a `Usd.Prim` based on type name with caching
-
- Note: Currently very simple/rudimentary implementation
- """
- # TODO: We might want to colorize the icon in the model based on some
- # other piece of data. We might a custom icon painter then?
-
- def __init__(self):
- self._type_to_icon = {}
-
- self._root = os.path.join(os.path.dirname(__file__),
- "resources",
- "feathericons")
-
- def get_icon_from_type_name(self, type_name):
- if type_name in self._type_to_icon:
- return self._type_to_icon[type_name]
-
- # Icon by type matches
- # TODO: Rewrite the checks below to be based off of the base type
- # instead of the exact type so that inherited types are also caught
- # as material, light, etc.
- if type_name == "Scope":
- name = "crosshair.svg"
- elif type_name == "":
- name = "help-circle.svg"
- elif type_name == "Xform":
- name = "move.svg"
- elif type_name == "Camera":
- name = "video.svg"
- # Maybe use `prim.IsA(prim_type)` but preferably we can go based off
- # of only the type name so that cache makes sense for all types
- elif type_name in {"Material", "NodeGraph", "Shader"}:
- name = "globe.svg"
- elif type_name in {"Mesh",
- "Capsule",
- "Cone",
- "Cube",
- "Cylinder",
- "Sphere"}:
- name = "box.svg"
- elif type_name.endswith("Light"):
- name = "sun.svg"
- elif type_name.startswith("Render"):
- name = "zap.svg"
- elif type_name.startswith("Physics"):
- name = "wind.svg"
- else:
- name = None
-
- # Define icon
- icon = None
- if name:
- path = os.path.join(self._root, name)
- icon = QtGui.QIcon(path)
-
- self._type_to_icon[type_name] = icon
- return icon
-
- def get_icon(self, prim):
- type_name = prim.GetTypeName()
- return self.get_icon_from_type_name(type_name)
-
-
-class HierarchyModel(QtCore.QAbstractItemModel):
-
- PrimRole = QtCore.Qt.UserRole + 1
-
- def __init__(self, stage, *args, **kwargs):
- super(HierarchyModel, self).__init__(*args, **kwargs)
-
- self._stage = None
- self._listener = None
- self._prims = {}
- self._indices = {}
- self._icon_provider = PrimTypeIconProvider()
- self.log = logging.getLogger("HierarchyModel")
-
- # Set stage
- self.set_stage(stage)
-
- @property
- def stage(self):
- return self._stage
-
- @property
- def root(self):
- # Quick access to pseudoroot of stage
- return self._stage.GetPseudoRoot() if self._stage else None
-
- def set_stage(self, value):
- """Resets the model for use with a new stage.
-
- If the stage isn't valid, this effectively becomes an empty model.
- """
- if value == self._stage:
- return
-
- self._stage = value
- with self.reset_context():
- is_valid_stage = bool(self._stage and self._stage.GetPseudoRoot())
- if is_valid_stage:
- # Listen to state changes of the stage to stay in sync
- self._listener = Tf.Notice.Register(
- Usd.Notice.ObjectsChanged,
- self.on_objects_changed,
- self._stage
- )
-
- @contextlib.contextmanager
- def reset_context(self):
- """Reset the model via context manager.
-
- During the context additional changes can be done before the reset
- of the model is 'finished', like e.g. changing Tf.Notice listeners.
- """
- self.beginResetModel()
- try:
- self._indices.clear()
- self._prims.clear()
- self._listener = None
- yield
- finally:
- self.endResetModel()
-
- @report_error
- def on_objects_changed(self, notice, sender):
- """Update changes on TfNotice signal"""
- resynced_paths = notice.GetResyncedPaths()
- resynced_paths = [path for path in resynced_paths if path.IsPrimPath()]
-
- if not resynced_paths:
- return
-
- self.log.debug("received changed prim signal: %s", resynced_paths)
-
- # For now do full reset since that seems less buggy than the manual
- # method below.
- # TODO: Fix sync object change
- # TODO: Do not error on deactivating prims
- with self.reset_context():
- # Remove all persistent indexes
- existing = self.persistentIndexList()
- null = [QtCore.QModelIndex()] * len(existing)
- self.changePersistentIndexList(existing, null)
- return
-
- with layout_change_context(self):
- persistent_indices = self.persistentIndexList()
- index_to_path = {}
- for index in persistent_indices:
- prim = index.internalPointer()
- path = prim.GetPath()
-
- for resynced_path in resynced_paths:
- common_path = resynced_path.GetCommonPrefix(path)
- # if the paths are siblings or if the
- # index path is a child of resynced path, you need to
- # update any persistent indices
- are_siblings = (
- common_path == resynced_path.GetParentPath()
- and common_path != path
- )
- index_is_child = (common_path == resynced_path)
-
- if are_siblings or index_is_child:
- index_to_path[index] = path
-
- from_indices = []
- to_indices = []
- for index, path in index_to_path.items():
- new_prim = self.stage.GetPrimAtPath(path)
- if new_prim.IsValid():
- # Update existing index
- self.log.debug("update: update %s to new prim: %s",
- path,
- new_prim)
- new_row = self._prim_to_row_index(new_prim)
- if index.row() != new_row:
- self.remove_path_cache(path)
- for i in range(self.columnCount(QtCore.QModelIndex())):
- from_indices.append(index)
- to_indices.append(self.createIndex(
- new_row, index.column(), new_prim)
- )
- else:
- # Removed index
- self.log.debug("update: removing path index: %s", path)
- from_indices.append(index)
- to_indices.append(QtCore.QModelIndex())
- self.changePersistentIndexList(from_indices, to_indices)
-
- self.log.debug("Current cache: %s", self._indices)
-
- def remove_path_cache(self, path):
- """Remove Sdf.Path cache entry from internal reference"""
- path_str = path.pathString
- self._indices.pop(path_str)
- self._prims.pop(path_str)
-
- def _prim_to_row_index(self, prim):
- """Return the row index for Usd.Prim under its parent"""
-
- if not prim.IsValid():
- return 0
-
- # Find the index of prim under the parent
- if prim.IsPseudoRoot():
- return 0
- else:
- # TODO: Optimize this!
- parent = prim.GetParent()
- prim_path = prim.GetPath()
- children = list(parent.GetAllChildren())
- for i, child_prim in enumerate(children):
- if child_prim.GetPath() == prim_path:
- return i
-
- # region Qt methods
- def createIndex(self, row, column, id):
- # We need to keep a reference to the prim otherwise it'll get
- # garbage collected - because `createIndex` does not hold a counted
- # reference to the object. So we do it ourselves, returning existing
- # created indices if the `id` matches a previous iteration. Is this ok?
- prim = id
- path = prim.GetPath().pathString
- if path in self._indices:
- return self._indices[path]
- self._prims[path] = prim
-
- index = super(HierarchyModel, self).createIndex(row, column, prim)
- self._indices[path] = index
- return index
-
- def flags(self, index):
- # Make name editable
- if index.column() == 0:
- return (
- QtCore.Qt.ItemIsEnabled
- | QtCore.Qt.ItemIsSelectable
- | QtCore.Qt.ItemIsEditable
- )
- return super(HierarchyModel, self).flags(index)
-
- def setData(self, index, value, role):
- if role == QtCore.Qt.EditRole:
- if index.column() == 0:
- # Rename prim
- prim = index.internalPointer()
- if not value:
- # Keep original name
- return False
-
- rename_prim(prim, value)
- return True
-
- return super(HierarchyModel, self).setData(index, value, role)
-
- def columnCount(self, parent):
- return 1
-
- def rowCount(self, parent):
- if parent.column() > 0:
- return 0
-
- if not parent.isValid():
- # Return amount of children for root item
- return len(self.root.GetAllChildren())
-
- prim = parent.internalPointer()
- if not prim or not prim.IsValid():
- self.log.error("Parent prim not found for row count: %s", parent)
- return 0
-
- return len(list(prim.GetAllChildren()))
-
- def index(self, row, column, parent):
-
- if not self.hasIndex(row, column, parent):
- return QtCore.QModelIndex()
-
- if not parent.isValid():
- parent_prim = self.root
- else:
- parent_prim = parent.internalPointer()
-
- if not parent_prim or not parent_prim.IsValid():
- self.log.error("Invalid parent prim for index: %s", parent)
- return QtCore.QModelIndex()
-
- children = list(parent_prim.GetAllChildren())
- if row > len(children):
- return QtCore.QModelIndex()
+from functools import partial
- prim = children[row]
- return self.createIndex(row, column, prim)
+from qtpy import QtWidgets, QtCore
+from pxr import Sdf
- def parent(self, index):
- if not index.isValid():
- return QtCore.QModelIndex()
-
- prim = index.internalPointer()
- if prim is None or prim.IsPseudoRoot() or not prim.IsValid():
- return QtCore.QModelIndex()
-
- # If it has no parents we return the pseudoroot as an invalid index
- parent_prim = prim.GetParent()
- if parent_prim is None or parent_prim.IsPseudoRoot():
- return QtCore.QModelIndex()
-
- row = self._prim_to_row_index(parent_prim)
- return self.createIndex(row, 0, parent_prim)
-
- def data(self, index, role):
- if not index.isValid():
- return
-
- if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
- prim = index.internalPointer()
- return prim.GetName()
-
- if role == QtCore.Qt.DecorationRole:
- # icon
- prim = index.internalPointer()
- return self._icon_provider.get_icon(prim)
-
- if role == QtCore.Qt.ToolTipRole:
- prim = index.internalPointer()
- return prim.GetTypeName()
- # endregion
+from .lib.usd import get_prim_types_by_group
+from .prim_delegate import DrawRectsDelegate
+from .prim_hierarchy_model import HierarchyModel
+from .references import ReferenceListWidget
+from .variants import CreateVariantSetDialog
class View(QtWidgets.QTreeView):
@@ -366,25 +21,20 @@ def __init__(self, *args, **kwargs):
self.setHeaderHidden(True)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.on_context_menu)
+ self._delegate = DrawRectsDelegate(parent=self)
+ self.setItemDelegateForColumn(0, self._delegate)
+ self._delegate.rect_clicked.connect(self.on_prim_tag_clicked)
def on_context_menu(self, point):
- """Shows menu with loader actions on Right-click.
-
- Registered actions are filtered by selection and help of
- `loaders_from_representation` from avalon api. Intersection of actions
- is shown when more subset is selected. When there are not available
- actions for selected subsets then special action is shown (works as
- info message to user): "*No compatible loaders for your selection"
-
- """
index = self.indexAt(point)
model = self.model()
stage = model.stage
- parent = index.internalPointer()
+ parent = index.data(HierarchyModel.PrimRole)
if not parent:
parent = stage.GetPseudoRoot()
+ parent_path = parent.GetPath()
menu = QtWidgets.QMenu(self)
@@ -392,7 +42,7 @@ def create_prim(action):
type_name = action.text()
# Ensure unique name
- base_path = parent.GetPath().AppendChild(type_name)
+ base_path = parent_path.AppendChild(type_name)
prim_path = base_path
i = 1
while stage.GetPrimAtPath(prim_path):
@@ -410,38 +60,110 @@ def create_prim(action):
stage.DefinePrim(prim_path, type_name)
model.endInsertRows()
- # Some nice quick access types
- menu.addAction("Def")
- menu.addAction("Scope")
- menu.addAction("Xform")
- menu.addSeparator()
- menu.addAction("Cone")
- menu.addAction("Cube")
- menu.addAction("Cylinder")
- menu.addAction("Sphere")
- menu.addSeparator()
- menu.addAction("DistantLight")
- menu.addAction("DomeLight")
- menu.addAction("RectLight")
- menu.addAction("SphereLight")
- menu.addSeparator()
- menu.addAction("Camera")
- menu.addSeparator()
+ # Create Prims
+ create_prim_menu = menu.addMenu("Create Prim")
+
+ create_prim_menu.addAction("Def")
+ create_prim_menu.addAction("Scope")
+ create_prim_menu.addAction("Xform")
+ create_prim_menu.addSeparator()
+ create_prim_menu.addAction("Cone")
+ create_prim_menu.addAction("Cube")
+ create_prim_menu.addAction("Cylinder")
+ create_prim_menu.addAction("Sphere")
+ create_prim_menu.addSeparator()
+ create_prim_menu.addAction("DistantLight")
+ create_prim_menu.addAction("DomeLight")
+ create_prim_menu.addAction("RectLight")
+ create_prim_menu.addAction("SphereLight")
+ create_prim_menu.addSeparator()
+ create_prim_menu.addAction("Camera")
+ create_prim_menu.addSeparator()
# TODO: Cache this submenu?
types_by_group = get_prim_types_by_group()
- all_registered_menu = menu.addMenu("All Registered")
+ all_registered_menu = create_prim_menu.addMenu("All Registered")
for group, types in types_by_group.items():
group_menu = all_registered_menu.addMenu(group)
- for t in types:
- group_menu.addAction(t)
+ for type_name in types:
+ group_menu.addAction(type_name)
+
+ create_prim_menu.triggered.connect(create_prim)
+
+ # Set and clear default prim
+ if parent_path.IsRootPrimPath():
+ # This prim is a primitive directly under root so can be an
+ # active prim
+ if parent == stage.GetDefaultPrim():
+ label = "Clear default prim"
+ action = menu.addAction(label)
+ tip = (
+ "Clear the default prim from the stage's root layer.\n"
+ )
+ action.setToolTip(tip)
+ action.setStatusTip(tip)
+ action.triggered.connect(partial(stage.ClearDefaultPrim))
+ else:
+ label = "Set as default prim"
+ action = menu.addAction(label)
+ tip = "Set prim as default prim on the stage's root layer."
+ action.setToolTip(tip)
+ action.setStatusTip(tip)
+ action.triggered.connect(partial(stage.SetDefaultPrim, parent))
+
+ # Allow referencing / payloads / variants management
+ if not parent_path.IsAbsoluteRootPath():
+ action = menu.addAction("Add reference/payload..")
+ action.triggered.connect(partial(
+ self.on_manage_prim_reference_payload, parent)
+ )
+
+ def _add_variant_set(prim):
+ # TODO: maybe directly allow managing the individual variants
+ # from the same UI; and allow setting the default variant
+ # Prompt for a variant set name
+ name = CreateVariantSetDialog.get_variant_set_name(parent=self)
+ if name is not None:
+ # Create the variant set, even allowing to create it
+ # without populating a variant name
+ prim.GetVariantSets().AddVariantSet(name)
- menu.triggered.connect(create_prim)
+ action = menu.addAction("Create Variant Set")
+ action.triggered.connect(partial(_add_variant_set, parent))
# Get mouse position
global_pos = self.viewport().mapToGlobal(point)
menu.exec_(global_pos)
+ def on_manage_prim_reference_payload(self, prim):
+ widget = ReferenceListWidget(prim=prim, parent=self)
+ widget.resize(800, 300)
+ widget.show()
+
+ def on_prim_tag_clicked(self, event, index, block):
+ text = block.get("text")
+ if text == "DFT":
+ # Allow to clear the prim from a menu
+ model = self.model()
+ stage = model.stage
+ menu = QtWidgets.QMenu(parent=self)
+ action = menu.addAction("Clear default prim")
+ tip = (
+ "Clear the default prim from the stage's root layer.\n"
+ )
+ action.setToolTip(tip)
+ action.setStatusTip(tip)
+ action.triggered.connect(partial(stage.ClearDefaultPrim))
+ point = event.position().toPoint()
+ menu.exec_(self.mapToGlobal(point))
+
+ elif text == "REF":
+ prim = index.data(HierarchyModel.PrimRole)
+ self.on_manage_prim_reference_payload(prim)
+
+ elif text == "VAR":
+ raise NotImplementedError("To be implemented")
+
class HierarchyWidget(QtWidgets.QDialog):
def __init__(self, stage, parent=None):
@@ -449,6 +171,7 @@ def __init__(self, stage, parent=None):
self.setWindowTitle("USD Outliner")
layout = QtWidgets.QVBoxLayout(self)
+ layout.setContentsMargins(0, 0, 0, 0)
model = HierarchyModel(stage=stage)
view = View()
@@ -457,4 +180,4 @@ def __init__(self, stage, parent=None):
self.model = model
self.view = view
- layout.addWidget(view)
\ No newline at end of file
+ layout.addWidget(view)
diff --git a/usd_qtpy/prim_hierarchy_cache.py b/usd_qtpy/prim_hierarchy_cache.py
new file mode 100644
index 0000000..4125c2e
--- /dev/null
+++ b/usd_qtpy/prim_hierarchy_cache.py
@@ -0,0 +1,145 @@
+import logging
+from typing import List, Dict
+
+from pxr import Usd, Sdf
+
+
+log = logging.getLogger(__name__)
+
+
+class Proxy:
+ def __init__(self, prim: Usd.Prim):
+ self._prim: Usd.Prim = prim
+ self._children: List[Sdf.Path] = []
+
+ def refresh_children(self, predicate):
+ self._children = [
+ child_prim.GetPath()
+ for child_prim in self._prim.GetFilteredChildren(predicate)
+ ]
+
+ def get_children(self) -> List[Sdf.Path]:
+ return self._children
+
+ def get_prim(self) -> Usd.Prim:
+ return self._prim
+
+
+class HierarchyCache:
+ def __init__(self,
+ root: Usd.Prim,
+ predicate: Usd.PrimDefaultPredicate):
+ self._predicate = predicate
+ self._path_to_proxy: Dict[Sdf.Path, Proxy] = {}
+
+ self._register_prim(root)
+ self._root: Proxy = self._path_to_proxy[root.GetPath()]
+ self._invalid_prim: Proxy = Proxy(Usd.Prim())
+
+ def _register_prim(self, prim: Usd.Prim):
+ path = prim.GetPath()
+ if path not in self._path_to_proxy:
+ proxy = Proxy(prim)
+ self._path_to_proxy[path] = proxy
+ proxy.refresh_children(self._predicate)
+
+ @property
+ def root(self) -> Proxy:
+ return self._root
+
+ @property
+ def predicate(self):
+ return self._predicate
+
+ def __contains__(self, item) -> bool:
+ return item in self._path_to_proxy
+
+ def __getitem__(self, item):
+ return self.get_proxy(item)
+
+ def get_proxy(self, path: Sdf.Path) -> Proxy:
+ return self._path_to_proxy[path]
+
+ def get_child(self, proxy: Proxy, index: int) -> Proxy:
+ if not proxy or not proxy.get_prim():
+ return self._invalid_prim
+ if index >= self.get_child_count(proxy):
+ return self._invalid_prim
+
+ child_path = proxy.get_children()[index]
+
+ if child_path not in self._path_to_proxy:
+ child_prim = proxy.get_prim().GetChild(child_path.name)
+ self._register_prim(child_prim)
+
+ return self._path_to_proxy[child_path]
+
+ def get_parent(self, proxy: Proxy):
+ prim = proxy.get_prim()
+ path = prim.GetPath()
+ parent_path = path.GetParentPath()
+ return self._path_to_proxy[parent_path]
+
+ def get_child_count(self, proxy: Proxy) -> int:
+ if not proxy or not proxy.get_prim():
+ return 0
+
+ return len(proxy.get_children())
+
+ def _invalidate_subtree(self, path: Sdf.Path):
+ proxy = self._path_to_proxy.get(path)
+ if proxy is not None:
+ prim = proxy.get_prim()
+ if prim.IsValid() and self.predicate(prim):
+ for child in proxy.get_children():
+ self._invalidate_subtree(child)
+ proxy.refresh_children(self.predicate)
+ else:
+ self._delete_subtree(path)
+ else:
+ log.debug("Skipping invalidation of uninstantiated path '%s'",
+ path.pathString)
+
+ def _delete_subtree(self, path: Sdf.Path):
+ if self._path_to_proxy.pop(path, None) is None:
+ log.debug("Deleting instantiated path: '%s'", path)
+ else:
+ log.debug("Skipping deletion of uninstantiated path: '%s'", path)
+
+ def resync_subtrees(self, paths: set[Sdf.Path]):
+ root_path = Sdf.Path("/")
+ if root_path in paths:
+ # Resync all
+ unique_parents = {root_path}
+ else:
+ unique_parents = {path.GetParentPath() for path in paths}
+
+ for parent_path in unique_parents:
+ proxy = self._path_to_proxy.get(parent_path)
+ if not proxy:
+ continue
+
+ log.debug("Updating children of parent: '%s'", parent_path)
+ original_children = set(proxy.get_children())
+ proxy.refresh_children(self.predicate)
+ new_children = set(proxy.get_children())
+
+ for child_path in original_children.union(new_children):
+ self._invalidate_subtree(child_path)
+
+ def is_root(self, proxy):
+ return self._root.get_prim() == proxy.get_prim()
+
+ def get_row(self, proxy: Proxy) -> int:
+ if not proxy:
+ return 0
+
+ if self.is_root(proxy):
+ return 0
+
+ parent_path = proxy.get_prim().GetPath().GetParentPath()
+ parent = self._path_to_proxy[parent_path]
+
+ prim = proxy.get_prim()
+ path = prim.GetPath()
+ return parent.get_children().index(path)
\ No newline at end of file
diff --git a/usd_qtpy/prim_hierarchy_model.py b/usd_qtpy/prim_hierarchy_model.py
new file mode 100644
index 0000000..24106c7
--- /dev/null
+++ b/usd_qtpy/prim_hierarchy_model.py
@@ -0,0 +1,332 @@
+import logging
+import contextlib
+from typing import Union, Optional
+
+from qtpy import QtCore
+from pxr import Usd, Sdf, Tf
+
+from .lib.qt import report_error
+from .lib.usd import rename_prim
+from .prim_type_icons import PrimTypeIconProvider
+from .prim_delegate import DrawRectsDelegate
+from .prim_hierarchy_cache import HierarchyCache, Proxy
+
+
+@contextlib.contextmanager
+def layout_change_context(model: QtCore.QAbstractItemModel):
+ """Context manager to ensure model layout changes are propagated if an
+ exception is thrown.
+ """
+ model.layoutAboutToBeChanged.emit()
+ try:
+ yield
+ finally:
+ model.layoutChanged.emit()
+
+
+class HierarchyModel(QtCore.QAbstractItemModel):
+ """Base class for adapting a stage's prim hierarchy for Qt ItemViews
+
+ Most clients will want to use a configuration of the `HierachyStandardModel`
+ which has a standard set of columns and data or subclass this to provide
+ their own custom set of columns.
+
+ Clients are encouraged to subclass this module because it provides both
+ robust handling of change notification and an efficient lazy population.
+ This model listens for TfNotices and emits the appropriate Qt signals.
+ """
+ PrimRole = QtCore.Qt.UserRole + 1
+
+ def __init__(
+ self,
+ stage: Usd.Stage=None,
+ predicate=Usd.TraverseInstanceProxies(Usd.PrimIsDefined |
+ ~Usd.PrimIsDefined),
+ parent=None,
+ ) -> None:
+ """Instantiate a QAbstractItemModel adapter for a UsdStage.
+
+ It's safe for the 'stage' to be None if the model needs to be
+ instantiated without knowing the stage its interacting with.
+
+ 'predicate' specifies the prims that may be accessed via the model on
+ the stage. A good policy is to be as accepting of prims as possible
+ and rely on a QSortFilterProxyModel to interactively reduce the view.
+ Changing the predicate is a potentially expensive operation requiring
+ rebuilding internal caches, making not ideal for interactive filtering.
+ """
+ super(HierarchyModel, self).__init__(parent=parent)
+
+ self._predicate = predicate
+ self._stage = None
+ self._index: Union[None, HierarchyCache] = None
+ self._listeners = []
+ self._icon_provider = PrimTypeIconProvider()
+ self.log = logging.getLogger("HierarchyModel")
+
+ # Set stage
+ self.set_stage(stage)
+
+ @property
+ def stage(self):
+ return self._stage
+
+ @stage.setter
+ def stage(self, stage):
+ self.set_stage(stage)
+
+ def set_stage(self, stage: Usd.Stage):
+ """Resets the model for use with a new stage.
+
+ If the stage isn't valid, this effectively becomes an empty model.
+ """
+ if stage == self._stage:
+ return
+
+ self.revoke_listeners()
+
+ self._stage = stage
+ with self.reset_model():
+ if self._is_stage_valid():
+ self._index = HierarchyCache(
+ root=stage.GetPrimAtPath("/"),
+ predicate=self._predicate
+ )
+ self.register_listeners()
+ else:
+ self._index = None
+
+ def _is_stage_valid(self):
+ return self._stage and self._stage.GetPseudoRoot()
+
+ def register_listeners(self):
+ """Register Tf.Notice listeners"""
+
+ if self._listeners:
+ # Do not allow to register more than once, clear old listeners
+ self.revoke_listeners()
+
+ if self._is_stage_valid():
+ # Listen to state changes of the stage to stay in sync
+ self._listeners.append(Tf.Notice.Register(
+ Usd.Notice.ObjectsChanged,
+ self.on_objects_changed,
+ self._stage
+ ))
+
+ def revoke_listeners(self):
+ """Revoke Tf.Notice listeners"""
+ for listener in self._listeners:
+ listener.Revoke()
+ self._listeners.clear()
+
+ @contextlib.contextmanager
+ def reset_model(self):
+ """Reset the model via context manager.
+
+ During the context additional changes can be done before the reset
+ of the model is 'finished', like e.g. changing Tf.Notice listeners.
+ """
+ self.beginResetModel()
+ try:
+ yield
+ finally:
+ self.endResetModel()
+
+ @report_error
+ def on_objects_changed(self, notice, sender):
+ resynced_paths = notice.GetResyncedPaths()
+ resynced_paths = {
+ path for path in resynced_paths if path.IsPrimPath()
+ # Also include the absolute root path (e.g. layer muting)
+ or path.IsAbsoluteRootPath()
+ }
+ if not resynced_paths:
+ return
+
+ # Include parents so we can use it as lookup for the "sibling" check
+ resynced_paths_and_parents = resynced_paths.copy()
+ resynced_paths_and_parents.update(
+ path.GetParentPath() for path in list(resynced_paths)
+ )
+ with layout_change_context(self):
+ persistent_indices = self.persistentIndexList()
+ index_to_path = {}
+ for index in persistent_indices:
+ index_prim = index.internalPointer().get_prim()
+ index_path = index_prim.GetPath()
+ if (
+ index_path in resynced_paths_and_parents
+ or index_path.GetParentPath() in resynced_paths_and_parents
+ ):
+ index_to_path[index] = index_path
+
+ self._index.resync_subtrees(resynced_paths)
+
+ from_indices = []
+ to_indices = []
+ for index in index_to_path:
+ path = index_to_path[index]
+
+ if path in self._index:
+ new_proxy = self._index.get_proxy(path)
+ new_row = self._index.get_row(new_proxy)
+
+ if index.row() != new_row:
+ for _i in range(
+ self.columnCount(QtCore.QModelIndex())
+ ):
+ from_indices.append(index)
+ to_indices.append(self.createIndex(
+ new_row, index.column(), new_proxy)
+ )
+ else:
+ from_indices.append(index)
+ to_indices.append(QtCore.QModelIndex())
+ self.changePersistentIndexList(from_indices, to_indices)
+
+ def _prim_to_row_index(self,
+ path: Sdf.Path) -> Optional[QtCore.QModelIndex]:
+ """Given a path, retrieve the appropriate model index."""
+ if path in self._index:
+ proxy = self._index[path]
+ row = self._index.get_row(proxy)
+ return self.createIndex(row, 0, proxy)
+
+ def _index_to_prim(self,
+ model_index: QtCore.QModelIndex) -> Optional[Usd.Prim]:
+ """Retrieve the prim for the input model index
+
+ External clients should use `UsdQt.roles.HierarchyPrimRole` to access
+ the prim for an index.
+ """
+ if model_index.isValid():
+ proxy = model_index.internalPointer() # -> Proxy
+ if type(proxy) is Proxy:
+ return proxy.get_prim()
+
+ # region Qt methods
+ def flags(self, index):
+ # Make name editable
+ if index.column() == 0:
+ return (
+ QtCore.Qt.ItemIsEnabled
+ | QtCore.Qt.ItemIsSelectable
+ | QtCore.Qt.ItemIsEditable
+ )
+ return super(HierarchyModel, self).flags(index)
+
+ def setData(self, index, value, role):
+ if role == QtCore.Qt.EditRole:
+ if index.column() == 0:
+ # Rename prim
+ prim = self._index_to_prim(index)
+ if not value:
+ # Keep original name
+ return False
+
+ rename_prim(prim, value)
+ return True
+
+ return super(HierarchyModel, self).setData(index, value, role)
+
+ def columnCount(self, parent):
+ return 1
+
+ def rowCount(self, parent):
+ if not self._is_stage_valid():
+ return 0
+
+ if parent.column() > 0:
+ return 0
+
+ if not parent.isValid():
+ return 1
+
+ parent_proxy = parent.internalPointer()
+ return self._index.get_child_count(parent_proxy)
+
+ def index(self, row, column, parent):
+ if not self._is_stage_valid():
+ return QtCore.QModelIndex()
+
+ if not self.hasIndex(row, column, parent):
+ self.log.debug("Index does not exist: %s %s %s", row, column, parent)
+ return QtCore.QModelIndex()
+
+ if not parent.isValid():
+ # We assume the root has already been registered.
+ root = self._index.root
+ return self.createIndex(row, column, root)
+
+ parent_proxy = parent.internalPointer()
+ child = self._index.get_child(parent_proxy, row)
+ return self.createIndex(row, column, child)
+
+ def parent(self, index):
+ if not self._is_stage_valid():
+ return QtCore.QModelIndex()
+
+ if not index.isValid():
+ return QtCore.QModelIndex()
+
+ proxy = index.internalPointer()
+ if proxy is None:
+ return QtCore.QModelIndex()
+
+ if self._index.is_root(proxy):
+ return QtCore.QModelIndex()
+
+ parent_proxy = self._index.get_parent(proxy)
+ parent_row = self._index.get_row(parent_proxy)
+ return self.createIndex(parent_row, index.column(), parent_proxy)
+
+ def data(self, index, role):
+ if not self._is_stage_valid():
+ return
+
+ if not index.isValid():
+ return
+
+ if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
+ prim = index.internalPointer().get_prim()
+ return prim.GetName()
+
+ if role == QtCore.Qt.DecorationRole:
+ # icon
+ prim = index.internalPointer().get_prim()
+ return self._icon_provider.get_icon(prim)
+
+ if role == QtCore.Qt.ToolTipRole:
+ prim = index.internalPointer().get_prim()
+ return prim.GetTypeName()
+
+ if role == self.PrimRole:
+ return index.internalPointer().get_prim()
+
+ if role == DrawRectsDelegate.RectDataRole:
+ prim = index.internalPointer().get_prim()
+ rects = []
+ if prim == self.stage.GetDefaultPrim():
+ rects.append(
+ {"text": "DFT",
+ "tooltip": "This prim is the default prim on "
+ "the stage's root layer.",
+ "background-color": "#553333"}
+ )
+ if prim.HasAuthoredPayloads() or prim.HasAuthoredReferences():
+ rects.append(
+ {"text": "REF",
+ "tooltip": "This prim has one or more references "
+ "and/or payloads.",
+ "background-color": "#333355"},
+ )
+ if prim.HasVariantSets():
+ rects.append(
+ {"text": "VAR",
+ "tooltip": "One or more variant sets exist on this prim.",
+ "background-color": "#335533"},
+ )
+
+ return rects
+ # endregion
diff --git a/usd_qtpy/prim_spec_editor.py b/usd_qtpy/prim_spec_editor.py
index d76ed0f..856ac97 100644
--- a/usd_qtpy/prim_spec_editor.py
+++ b/usd_qtpy/prim_spec_editor.py
@@ -1,11 +1,13 @@
import logging
from pxr import Usd, Tf, Sdf
-from PySide2 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
-from .lib.qt import schedule
+from .lib.qt import schedule, report_error
from .lib.usd import remove_spec, LIST_ATTRS
+from .lib.usd_merge_spec import copy_spec_merge
from .tree.simpletree import TreeModel, Item
+from .prim_type_icons import PrimTypeIconProvider
log = logging.getLogger(__name__)
@@ -25,32 +27,86 @@ def shorten(s, width, placeholder="..."):
return "{}{}".format(s[:width], placeholder)
+class ListProxyItem(Item):
+ """Item for entries inheriting from Sdf ListProxy types.
+
+ These are:
+ - Sdf.PrimSpec.variantSetNameList
+ - Sdf.PrimSpec.referenceList
+ - Sdf.PrimSpec.payloadList
+
+ """
+ def __init__(self, proxy, value, data):
+ super(ListProxyItem, self).__init__(data)
+ self._list_proxy = proxy
+ self._list_value = value
+
+ def delete(self):
+ self._list_proxy.remove(self._list_value)
+
+
+class MapProxyItem(Item):
+ """Item for entries inheriting from Sdf.MapEditProxy.
+
+ These are:
+ - Sdf.PrimSpec.variantSets
+ - Sdf.PrimSpec.variantSelections
+ - Sdf.PrimSpec.relocates
+
+ """
+ def __init__(self, proxy, key, data):
+ super(MapProxyItem, self).__init__(data)
+ self._key = key
+ self._proxy = proxy
+
+ def delete(self):
+ # Delete the key from the parent proxy view
+ del self._proxy[self._key]
+
+
+class SpecifierDelegate(QtWidgets.QStyledItemDelegate):
+ """Delegate for "specifier" key to allow editing via combobox"""
+
+ def createEditor(self, parent, option, index):
+ editor = QtWidgets.QComboBox(parent)
+ editor.addItems(list(SPECIFIER_LABEL.values()))
+ return editor
+
+ def setEditorData(self, editor, index):
+ value = index.data(QtCore.Qt.EditRole)
+ editor.setCurrentText(value)
+
+
class StageSdfModel(TreeModel):
"""Model listing a Stage's Layers and PrimSpecs"""
- Columns = [
- "name", "specifier", "typeName", "default", "type",
- # "variantSelections", "variantSetNameList", "variantSets",
- # "referenceList", "payloadList", "relocates"
- ]
-
+ # TODO: Add support for
+ # - "variantSelections",
+ # - "variantSetNameList",
+ # - "variantSets",
+ # - "relocates"
+ Columns = ["name", "specifier", "typeName", "default", "type"]
Colors = {
"Layer": QtGui.QColor("#008EC5"),
"PseudoRootSpec": QtGui.QColor("#A2D2EF"),
"PrimSpec": QtGui.QColor("#A2D2EF"),
+ "VariantSetSpec": QtGui.QColor("#A2D2EF"),
"RelationshipSpec": QtGui.QColor("#FCD057"),
"AttributeSpec": QtGui.QColor("#FFC8DD"),
+ "reference": QtGui.QColor("#C8DDDD"),
+ "payload": QtGui.QColor("#DDC8DD"),
+ "variantSetName": QtGui.QColor("#DDDDC8"),
}
def __init__(self, stage=None, parent=None):
super(StageSdfModel, self).__init__(parent)
self._stage = stage
- from .prim_hierarchy import PrimTypeIconProvider
self._icon_provider = PrimTypeIconProvider()
def setStage(self, stage):
self._stage = stage
+ @report_error
def refresh(self):
self.clear()
@@ -73,7 +129,7 @@ def refresh(self):
def _traverse(path):
spec = layer.GetObjectAtPath(path)
if not spec:
- # ignore target list binding entries
+ # ignore target list binding entries or e.g. variantSetSpec
items_by_path[path] = Item({
"name": path.elementString,
"path": path,
@@ -113,19 +169,38 @@ def _traverse(path):
type_name = spec.typeName
spec_item["typeName"] = type_name
- # TODO: Implement some good UX for variants, references,
- # payloads and relocates
- # "variantSelections",
- # "variantSets",
- # for variant_selection in spec.variantSelections:
- # selection_item = Item({
- # "name": "TEST",
- # "type": "variantSelection"
- # })
- # spec_item.add_child(selection_item)
+ for attr in [
+ "variantSelections",
+ "relocates",
+ # Variant sets is redundant because these basically
+ # refer to VariantSetSpecs which will actually be
+ # traversed path in the layer anyway
+ # TODO: Remove this commented key?
+ # "variantSets"
+ ]:
+ proxy = getattr(spec, attr)
+
+ # `prim_spec.variantSelections.keys()` can fail
+ # todo: figure out why this workaround is needed
+ try:
+ keys = list(proxy.keys())
+ except RuntimeError:
+ continue
+
+ for key in keys:
+ proxy_item = MapProxyItem(
+ key=key,
+ proxy=proxy,
+ data={
+ "name": key,
+ "default": proxy.get(key), # value
+ "type": attr
+ }
+ )
+ spec_item.add_child(proxy_item)
for key in [
- #"variantSetName", # todo: these don't have `.assetPath`
+ "variantSetName",
"reference",
"payload"
]:
@@ -134,18 +209,38 @@ def _traverse(path):
changes_for_type = getattr(list_changes,
change_type)
for change in changes_for_type:
- list_change_item = Item({
- "name": change.assetPath,
- # Strip off "Items"
- "default": change_type[:-5],
- "type": key
- })
+
+ if hasattr(change, "assetPath"):
+ # Sdf.Reference and Sdf.Payload
+ name = change.assetPath
+ else:
+ # variantSetName
+ name = str(change)
+
+ list_change_item = ListProxyItem(
+ proxy=changes_for_type,
+ value=change,
+ data={
+ "name": name,
+ # Strip off "Items"
+ "default": change_type[:-5],
+ "type": key,
+ "typeName": key,
+ "parent": changes_for_type
+ }
+ )
spec_item.add_child(list_change_item)
if list_changes:
spec_item[key] = str(list_changes)
elif isinstance(spec, Sdf.AttributeSpec):
- spec_item["default"] = shorten(str(spec.default), 60)
+ value = spec.default
+ spec_item["default"] = shorten(str(value), 60)
+
+ type_name = spec.roleName
+ if not type_name and value is not None:
+ type_name = type(value).__name__
+ spec_item["typeName"] = type_name
items_by_path[path] = spec_item
@@ -157,6 +252,33 @@ def _traverse(path):
parent_item = items_by_path.get(parent, layer_item)
parent_item.add_child(item)
+ def flags(self, index):
+
+ if index.column() == 1: # specifier
+ item = index.internalPointer()
+ spec = item.get("spec")
+ # Match only exact PrimSpec type; we do not want PseudoRootSpec
+ if spec and type(spec) is Sdf.PrimSpec:
+ return (
+ QtCore.Qt.ItemIsEnabled |
+ QtCore.Qt.ItemIsSelectable |
+ QtCore.Qt.ItemIsEditable
+ )
+
+ return super(StageSdfModel, self).flags(index)
+
+ def setData(self, index, value, role):
+
+ if index.column() == 1: # specifier
+ item = index.internalPointer()
+ spec = item.get("spec")
+ if spec and isinstance(spec, Sdf.PrimSpec):
+ lookup = {
+ label: key for key, label in SPECIFIER_LABEL.items()
+ }
+ value = lookup[value]
+ spec.specifier = value
+
def data(self, index, role):
if role == QtCore.Qt.ForegroundRole:
@@ -206,19 +328,20 @@ def __init__(self):
super(FilterListWidget, self).__init__()
self.addItems([
"Layer",
- "PseudoRootSpec",
+ # This is hidden since it's usually not filtered to
+ # "PseudoRootSpec",
"PrimSpec",
+ " reference",
+ " payload",
+ " variantSetName",
"AttributeSpec",
"RelationshipSpec",
+ "VariantSetSpec",
- # PrimSpec changes
- "variantSetName",
- "reference",
- "payload",
-
- "variantSelections",
- "variantSets",
- "relocates"
+ # TODO: Still to be implemented in the StageSdfModel
+ # "variantSelections",
+ # "variantSets",
+ # "relocates"
])
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
@@ -230,7 +353,7 @@ def __init__(self, stage, parent=None):
self.setWindowTitle("USD Layer Spec Editor")
layout = QtWidgets.QVBoxLayout(self)
- self.setContentsMargins(0, 0, 0, 0)
+ layout.setContentsMargins(0, 0, 0, 0)
splitter = QtWidgets.QSplitter()
filter_list = FilterListWidget()
@@ -250,7 +373,7 @@ def __init__(self, stage, parent=None):
def _on_filter_selection_changed(self):
items = self.filter_list.selectedItems()
- types = {item.text() for item in items}
+ types = {item.text().strip() for item in items}
self.editor.proxy.set_types_filter(types)
self.editor.view.expandAll()
@@ -274,9 +397,18 @@ def __init__(self, stage=None, parent=None):
view.setIndentation(10)
view.setIconSize(QtCore.QSize(20, 20))
view.setStyleSheet(
- "QTreeView::item { height: 20px; padding: 0px; margin: 1px 5px 1px 5px; }")
+ "QTreeView::item {"
+ " height: 20px;"
+ " padding: 1px 5px 1px 5px;"
+ " margin: 0px;"
+ "}"
+ )
+ specifier_delegate = SpecifierDelegate(self)
+ view.setItemDelegateForColumn(1, specifier_delegate)
view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
view.setUniformRowHeights(True)
+ view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
+ view.customContextMenuRequested.connect(self.on_context_menu)
auto_refresh = QtWidgets.QCheckBox("Auto Refresh on Stage Changes")
auto_refresh.setChecked(True)
@@ -294,6 +426,7 @@ def __init__(self, stage=None, parent=None):
self.model = model
self.proxy = proxy
self.view = view
+ self._specifier_delegate = specifier_delegate
auto_refresh.stateChanged.connect(self.set_refresh_on_changes)
refresh.clicked.connect(self.on_refresh)
@@ -340,6 +473,28 @@ def hideEvent(self, event):
# Remove any callbacks if they exist
self.set_refresh_on_changes(False)
+ def on_context_menu(self, point):
+
+ menu = QtWidgets.QMenu(self.view)
+
+ action = menu.addAction("Delete")
+ action.triggered.connect(self.on_delete)
+
+ move_menu = menu.addMenu("Move to layer")
+
+ stage = self.model._stage
+ for layer in stage.GetLayerStack():
+ action = move_menu.addAction(layer.GetDisplayName())
+ action.setData(layer)
+
+ def move_to(action):
+ layer = action.data()
+ self.move_selection_to_layer(layer)
+
+ move_menu.triggered.connect(move_to)
+
+ menu.exec_(self.view.mapToGlobal(point))
+
def on_refresh(self):
self.model.refresh()
self.proxy.invalidate()
@@ -350,26 +505,96 @@ def on_refresh(self):
self.view.resizeColumnToContents(3)
self.view.resizeColumnToContents(4)
- def on_delete(self):
- selection_model = self.view.selectionModel()
- rows = selection_model.selectedRows()
+ def delete_indexes(self, indexes):
specs = []
- for row in rows:
- item = row.data(TreeModel.ItemRole)
+ deletables = []
+ for index in indexes:
+ item = index.data(TreeModel.ItemRole)
spec = item.get("spec")
if item.get("type") == "PseudoRootSpec":
continue
if spec:
specs.append(spec)
+ elif hasattr(item, "delete"):
+ # MapProxyItem and ListProxyItem entries
+ deletables.append(item)
- if not specs:
- return
+ if not specs and not deletables:
+ return False
with Sdf.ChangeBlock():
for spec in specs:
log.debug(f"Removing spec: %s", spec.path)
remove_spec(spec)
+ for deletable in deletables:
+ deletable.delete()
+ return True
+
+ def on_delete(self):
+
+ selection_model = self.view.selectionModel()
+ rows = selection_model.selectedRows()
+ has_deleted = self.delete_indexes(rows)
+ if has_deleted and not self._listeners:
+ self.on_refresh()
+
+ def move_selection_to_layer(self, target_layer):
+ """Move Sdf.Spec to another Sdf.Layer
+
+ Note: If moved to a PrimSpec path already existing in the target layer
+ then any opinions on that PrimSpec or it children are removed. It
+ replaces the prim spec. It does not merge into an existing PrimSpec.
+
+ """
+
+ selection_model = self.view.selectionModel()
+ rows = selection_model.selectedRows()
+
+ specs = []
+ for index in rows:
+ item = index.data(TreeModel.ItemRole)
+ spec = item.get("spec")
+ if item.get("type") == "PseudoRootSpec":
+ continue
+
+ if spec:
+ specs.append(spec)
+
+ # Get highest paths in the spec selection and exclude any selected
+ # children since those will be moved along anyway
+ paths = {spec.path.pathString for spec in specs}
+ top_specs = []
+ for spec in specs:
+
+ skip = False
+ parent_path = spec.path.pathString.rsplit("/", 1)[0]
+ while "/" in parent_path:
+ if parent_path in paths:
+ skip = True
+ break
+ parent_path = parent_path.rsplit("/", 1)[0]
+ if skip:
+ continue
+
+ top_specs.append(spec)
+
+ if not top_specs:
+ return
+
+ # Now we need to create specs up to each top spec's path in the
+ # target layer if these do not exist yet.
+ for spec in top_specs:
+ src_layer = spec.layer
+
+ prim_path = spec.path.GetPrimPath()
+ if not target_layer.GetPrimAtPath(prim_path):
+ Sdf.CreatePrimInLayer(target_layer, prim_path)
+ copy_spec_merge(src_layer, spec.path, target_layer, spec.path)
+
+ # Delete the specs on the original layer
+ for spec in top_specs:
+ remove_spec(spec)
if not self._listeners:
self.on_refresh()
diff --git a/usd_qtpy/prim_type_icons.py b/usd_qtpy/prim_type_icons.py
new file mode 100644
index 0000000..3f5eb98
--- /dev/null
+++ b/usd_qtpy/prim_type_icons.py
@@ -0,0 +1,61 @@
+from .resources import get_icon
+
+
+class PrimTypeIconProvider:
+ """Return icon for a `Usd.Prim` based on type name with caching
+
+ Note: Currently very simple/rudimentary implementation
+ """
+ # TODO: We might want to colorize the icon in the model based on some
+ # other piece of data. We might need a custom icon painter then?
+
+ def __init__(self):
+ self._type_to_icon = {}
+
+ def get_icon_from_type_name(self, type_name):
+ if type_name in self._type_to_icon:
+ return self._type_to_icon[type_name]
+
+ # Icon by type matches
+ # TODO: Rewrite the checks below to be based off of the base type
+ # instead of the exact type so that inherited types are also caught
+ # as material, light, etc.
+ if type_name == "Scope":
+ name = "crosshair"
+ elif type_name == "":
+ name = "help-circle"
+ elif type_name == "Xform":
+ name = "move"
+ elif type_name == "Camera":
+ name = "video"
+ # Maybe use `prim.IsA(prim_type)` but preferably we can go based off
+ # of only the type name so that cache makes sense for all types
+ elif type_name in {"Material", "NodeGraph", "Shader"}:
+ name = "globe"
+ elif type_name in {"Mesh",
+ "Capsule",
+ "Cone",
+ "Cube",
+ "Cylinder",
+ "Sphere"}:
+ name = "box"
+ elif type_name.endswith("Light"):
+ name = "sun"
+ elif type_name.startswith("Render"):
+ name = "zap"
+ elif type_name.startswith("Physics"):
+ name = "wind"
+ else:
+ name = None
+
+ # Define icon
+ icon = None
+ if name:
+ icon = get_icon(name)
+
+ self._type_to_icon[type_name] = icon
+ return icon
+
+ def get_icon(self, prim):
+ type_name = prim.GetTypeName()
+ return self.get_icon_from_type_name(type_name)
diff --git a/usd_qtpy/references.py b/usd_qtpy/references.py
new file mode 100644
index 0000000..8393433
--- /dev/null
+++ b/usd_qtpy/references.py
@@ -0,0 +1,364 @@
+import os
+from collections import namedtuple, defaultdict
+from functools import partial
+
+from qtpy import QtWidgets, QtCore
+from pxr import Sdf, Usd
+
+from .resources import get_icon
+from .lib.qt import DropFilesPushButton
+from .prim_hierarchy_model import HierarchyModel
+
+
+class PickPrimPath(QtWidgets.QDialog):
+
+ picked_path = QtCore.Signal(Sdf.Path)
+
+ def __init__(self, stage, prim_path, parent=None):
+ super(PickPrimPath, self).__init__(parent=parent)
+
+ layout = QtWidgets.QVBoxLayout(self)
+
+ model = HierarchyModel(stage=stage)
+ view = QtWidgets.QTreeView()
+ view.setModel(model)
+ view.setHeaderHidden(True)
+ view.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+
+ layout.addWidget(view)
+
+ if prim_path:
+ # Set selection to the given prim path if it exists
+ pass
+
+ # Add some standard buttons (Cancel/Ok) at the bottom of the dialog
+ buttons = QtWidgets.QDialogButtonBox(
+ QtWidgets.QDialogButtonBox.Ok |
+ QtWidgets.QDialogButtonBox.Cancel,
+ QtCore.Qt.Horizontal,
+ self
+ )
+ layout.addWidget(buttons)
+
+ self.model = model
+ self.view = view
+
+ view.doubleClicked.connect(self.accept)
+ buttons.accepted.connect(self.accept)
+ buttons.rejected.connect(self.reject)
+ self.accepted.connect(self.on_accept)
+
+ def on_accept(self):
+ indexes = self.view.selectedIndexes()
+ if not indexes:
+ return
+
+ index = indexes[0]
+ prim = index.data(HierarchyModel.PrimRole)
+ if not prim:
+ return
+ path = prim.GetPath()
+ self.picked_path.emit(path)
+
+
+class RefPayloadWidget(QtWidgets.QWidget):
+ """Widget for a single payload/reference entry.
+
+ Used by `ReferenceListWidget`
+ """
+
+ delete_requested = QtCore.Signal()
+
+ def __init__(self, item=None, item_type=None, parent=None):
+ super(RefPayloadWidget, self).__init__(parent=parent)
+
+ if item is None and item_type is None:
+ raise ValueError(
+ "Arguments `item` and/or `item_type` must be passed"
+ )
+ if item_type is None:
+ item_type = type(item)
+
+ self._original_item = item
+ self._item_type = item_type
+
+ layout = QtWidgets.QHBoxLayout(self)
+
+ filepath = QtWidgets.QLineEdit()
+ filepath.setPlaceholderText(
+ "Set filepath to USD or supply file identifier"
+ )
+ filepath.setMinimumWidth(400)
+
+ browser = QtWidgets.QPushButton(get_icon("folder"), "")
+ default_prim_label = QtWidgets.QLabel(" Prim:")
+ auto_prim = QtWidgets.QCheckBox("auto")
+ auto_prim.setToolTip(
+ "When enabled the default prim defined in the USD file will be "
+ "used.\nIf the USD file defines no default prim the first prim "
+ "will be used instead.\n"
+ "When disabled, a default prim can be explicitly set in the field "
+ "to the right."
+ )
+ default_prim = QtWidgets.QLineEdit()
+ default_prim.setPlaceholderText("Pick prim path")
+
+ pick_default_prim = QtWidgets.QPushButton(get_icon("edit-2"), "")
+ pick_default_prim.setToolTip("Select default prim...")
+ delete = QtWidgets.QPushButton(get_icon("x"), "")
+ delete.setToolTip("Delete")
+
+ auto_prim.setChecked(True)
+ default_prim.setEnabled(False)
+ if item:
+ filepath.setText(item.assetPath)
+ has_prim_path = bool(item.primPath)
+ if has_prim_path:
+ auto_prim.setChecked(False)
+ default_prim.setEnabled(True)
+ default_prim.setText(item.primPath.pathString)
+
+ layout.addWidget(filepath)
+ layout.addWidget(browser)
+ layout.addWidget(default_prim_label)
+ layout.addWidget(auto_prim)
+ layout.addWidget(default_prim)
+ layout.addWidget(pick_default_prim)
+ layout.addWidget(delete)
+
+ self.filepath = filepath
+ self.auto_prim = auto_prim
+ self.default_prim = default_prim
+ self.pick_default_prim = pick_default_prim
+
+ auto_prim.stateChanged.connect(self.on_auto_prim_changed)
+ pick_default_prim.clicked.connect(self.on_pick_prim)
+ browser.clicked.connect(self.on_browse)
+ delete.clicked.connect(self.delete_requested)
+
+ def on_auto_prim_changed(self, state):
+ self.default_prim.setEnabled(not state)
+
+ def on_pick_prim(self):
+
+ filepath = self.filepath.text()
+ if not filepath:
+ raise ValueError("No file set")
+
+ prim_path = self.default_prim.text()
+
+ if not os.path.exists(filepath):
+ raise ValueError(f"File does not exist: {filepath}")
+
+ stage = Usd.Stage.Open(filepath)
+ picker = PickPrimPath(stage=stage, prim_path=prim_path, parent=self)
+
+ def on_picked(path):
+ if path:
+ self.default_prim.setText(path.pathString)
+ self.auto_prim.setChecked(False)
+
+ picker.picked_path.connect(on_picked)
+ picker.exec_()
+
+ def on_browse(self):
+ filename, _filter = QtWidgets.QFileDialog.getOpenFileName(
+ parent=self,
+ caption="Sublayer USD file",
+ filter="USD (*.usd *.usda *.usdc);",
+ dir=self.filepath.text() or None
+ )
+ if filename:
+ self.filepath.setText(filename)
+
+ @property
+ def item(self):
+
+ # Do not return a valid item if no path is set
+ asset_path = self.filepath.text()
+ if not asset_path:
+ return
+
+ # Construct a new item based on current settings
+ item_kwargs = {}
+ if self._original_item and isinstance(self._original_item, Sdf.Reference):
+ # Preserve custom data for references; payloads do not have this
+ item_kwargs["customData"] = self._original_item.customData
+ if self._original_item:
+ # Preserve layer offset
+ item_kwargs["layerOffset"] = self._original_item.layerOffset
+
+ default_prim = Sdf.Path()
+ if not self.auto_prim.isChecked():
+ default_prim = Sdf.Path(self.default_prim.text())
+
+ # Create a new instance of the same type as the current item value
+ return self._item_type(
+ assetPath=asset_path,
+ primPath=default_prim,
+ **item_kwargs
+ )
+
+ @property
+ def original_item(self):
+ return self._original_item
+
+
+class ReferenceListWidget(QtWidgets.QDialog):
+ """Manage lists of references/payloads for a single prim"""
+ def __init__(self, prim, parent=None):
+ super(ReferenceListWidget, self).__init__(parent=parent)
+
+ title = "USD Reference/Payload Editor"
+ if prim and prim.IsValid():
+ title = f"{title}: {prim.GetPath().pathString}"
+ self.setWindowTitle(title)
+
+ layout = QtWidgets.QVBoxLayout(self)
+ layout.addWidget(QtWidgets.QLabel("References"))
+ references = QtWidgets.QVBoxLayout()
+ references.setContentsMargins(0, 0, 0, 0)
+ layout.addLayout(references)
+
+ add_icon = get_icon("plus")
+ add_button = DropFilesPushButton(add_icon, "")
+ add_button.setToolTip("Add reference")
+ add_button.clicked.connect(self.on_add_reference)
+ add_button.files_dropped.connect(partial(self.on_dropped_files,
+ "references"))
+ layout.addWidget(add_button)
+
+ layout.addWidget(QtWidgets.QLabel("Payloads"))
+ payloads = QtWidgets.QVBoxLayout()
+ payloads.setContentsMargins(0, 0, 0, 0)
+ layout.addLayout(payloads)
+
+ add_button = DropFilesPushButton(add_icon, "")
+ add_button.setToolTip("Add payload")
+ add_button.clicked.connect(self.on_add_payload)
+ add_button.files_dropped.connect(partial(self.on_dropped_files,
+ "payloads"))
+ layout.addWidget(add_button)
+
+ layout.addStretch()
+
+ # Add some standard buttons (Cancel/Ok) at the bottom of the dialog
+ buttons = QtWidgets.QDialogButtonBox(
+ QtWidgets.QDialogButtonBox.Ok |
+ QtWidgets.QDialogButtonBox.Cancel,
+ QtCore.Qt.Horizontal,
+ self
+ )
+ layout.addWidget(buttons)
+
+ buttons.accepted.connect(self.accept)
+ buttons.rejected.connect(self.reject)
+
+ self.prim = prim
+ self.references_layout = references
+ self.payloads_layout = payloads
+
+ self.refresh()
+
+ self.accepted.connect(self.on_accept)
+
+ def refresh(self):
+
+ def clear(layout):
+ while layout_item:= layout.takeAt(0):
+ widget = layout_item.widget()
+ if widget:
+ widget.deleteLater()
+
+ clear(self.payloads_layout)
+ clear(self.references_layout)
+
+ # Store items and widgets for the references
+ prim = self.prim
+
+ stack = prim.GetPrimStack()
+
+ # Get all references/payloads across the prim stack
+ references = []
+ payloads = []
+ for prim_spec in stack:
+ for reference in prim_spec.referenceList.GetAppliedItems():
+ references.append(reference)
+ for payload in prim_spec.payloadList.GetAppliedItems():
+ payloads.append(payload)
+
+ for reference in references:
+ self._add_widget(self.references_layout, item=reference)
+
+ for payload in payloads:
+ self._add_widget(self.payloads_layout, item=payload)
+
+ def on_dropped_files(self, key, urls):
+ files = [url.toLocalFile() for url in urls]
+ if key == "references":
+ for filepath in files:
+ self._add_widget(self.references_layout,
+ item=Sdf.Reference(assetPath=filepath))
+ elif key == "payloads":
+ for filepath in files:
+ self._add_widget(self.payloads_layout,
+ item=Sdf.Payload(assetPath=filepath))
+
+ def on_add_payload(self):
+ self._add_widget(self.payloads_layout, item_type=Sdf.Payload)
+
+ def on_add_reference(self):
+ self._add_widget(self.references_layout, item_type=Sdf.Reference)
+
+ def _add_widget(self, layout, item=None, item_type=None):
+ def remove_widget(layout, widget):
+ index = layout.indexOf(widget)
+ if index >= 0:
+ layout.takeAt(index)
+ widget.deleteLater()
+
+ widget = RefPayloadWidget(item=item, item_type=item_type)
+ widget.delete_requested.connect(partial(remove_widget, layout, widget))
+ layout.addWidget(widget)
+
+ def on_accept(self):
+ Change = namedtuple("change", ["old", "new"])
+
+ # Get the configured references/payloads
+ items = defaultdict(list)
+ for key, layout in {
+ "references": self.references_layout,
+ "payloads": self.payloads_layout
+ }.items():
+ for i in range(layout.count()):
+ layout_item = layout.itemAt(i)
+ widget = layout_item.widget() # -> RefPayloadWidget
+
+ new_item = widget.item
+ if not new_item:
+ # Skip empty entries
+ continue
+ change = Change(old=widget.original_item, new=new_item)
+ items[key].append(change)
+
+ # Update all prim specs on the prim's current stack to the references
+ # TODO: Preserve references/payloads specs across the different layers
+ # and only update the changes that have an original item and remove
+ # entries not amongst the new changes + ensure ordering is correct
+ # For now we completely clear all specs
+ prim = self.prim
+ for prim_spec in list(prim.GetPrimStack()):
+ if prim_spec.expired:
+ continue
+
+ # Remove any opinions on references/payloads
+ prim_spec.referenceList.ClearEdits()
+ prim_spec.payloadList.ClearEdits()
+
+ references = prim.GetReferences()
+ for reference_item in items["references"]:
+ references.AddReference(reference_item.new)
+
+ payloads = prim.GetPayloads()
+ for payload_item in items["payloads"]:
+ payloads.AddPayload(payload_item.new)
diff --git a/usd_qtpy/resources/__init__.py b/usd_qtpy/resources/__init__.py
new file mode 100644
index 0000000..643365a
--- /dev/null
+++ b/usd_qtpy/resources/__init__.py
@@ -0,0 +1,13 @@
+import os
+from qtpy import QtGui
+
+
+FEATHERICONS_ROOT = os.path.join(os.path.dirname(__file__), "feathericons")
+
+
+def get_icon_path(name):
+ return os.path.join(FEATHERICONS_ROOT, f"{name}.svg")
+
+
+def get_icon(name):
+ return QtGui.QIcon(get_icon_path(name))
diff --git a/usd_qtpy/resources/feathericons/folder.svg b/usd_qtpy/resources/feathericons/folder.svg
new file mode 100644
index 0000000..5b83752
--- /dev/null
+++ b/usd_qtpy/resources/feathericons/folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/usd_qtpy/resources/feathericons/plus.svg b/usd_qtpy/resources/feathericons/plus.svg
new file mode 100644
index 0000000..6261c6c
--- /dev/null
+++ b/usd_qtpy/resources/feathericons/plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/usd_qtpy/resources/feathericons/x.svg b/usd_qtpy/resources/feathericons/x.svg
new file mode 100644
index 0000000..63d5966
--- /dev/null
+++ b/usd_qtpy/resources/feathericons/x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/usd_qtpy/style/LICENSE b/usd_qtpy/style/LICENSE
new file mode 100644
index 0000000..63249bb
--- /dev/null
+++ b/usd_qtpy/style/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2020 Orbi Tools s.r.o.
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/usd_qtpy/style/__init__.py b/usd_qtpy/style/__init__.py
new file mode 100644
index 0000000..ca231a0
--- /dev/null
+++ b/usd_qtpy/style/__init__.py
@@ -0,0 +1,164 @@
+import os
+import json
+import collections
+import logging
+
+from .color_defs import parse_color
+
+log = logging.getLogger(__name__)
+
+current_dir = os.path.dirname(os.path.abspath(__file__))
+
+
+class _Cache:
+ stylesheet = None
+ font_ids = None
+
+ tools_icon_color = None
+ default_entity_icon_color = None
+ disabled_entity_icon_color = None
+ deprecated_entity_font_color = None
+
+ colors_data = None
+ objected_colors = None
+
+
+def get_style_image_path(image_name):
+ # All filenames are lowered
+ image_name = image_name.lower()
+ # Male sure filename has png extension
+ if not image_name.endswith(".png"):
+ image_name += ".png"
+ filepath = os.path.join(current_dir, "images", image_name)
+ if os.path.exists(filepath):
+ return filepath
+ return None
+
+
+def _get_colors_raw_data():
+ """Read data file with stylesheet fill values.
+
+ Returns:
+ dict: Loaded data for stylesheet.
+ """
+ data_path = os.path.join(current_dir, "data.json")
+ with open(data_path, "r") as data_stream:
+ data = json.load(data_stream)
+ return data
+
+
+def _convert_color_values_to_objects(value):
+ """Parse all string values in dictionary to Color definitions.
+
+ Recursive function calling itself if value is dictionary.
+
+ Args:
+ value (dict, str): String is parsed into color definition object and
+ dictionary is passed into this function.
+
+ Raises:
+ TypeError: If value in color data do not contain string of dictionary.
+ """
+ if isinstance(value, dict):
+ output = {}
+ for _key, _value in value.items():
+ output[_key] = _convert_color_values_to_objects(_value)
+ return output
+
+ if not isinstance(value, str):
+ raise TypeError((
+ "Unexpected type in colors data '{}'. Expected 'str' or 'dict'."
+ ).format(str(type(value))))
+ return parse_color(value)
+
+
+def _load_stylesheet():
+ """Load strylesheet and trigger all related callbacks.
+
+ Style require more than a stylesheet string. Stylesheet string
+ contains paths to resources which must be registered into Qt application
+ and load fonts used in stylesheets.
+
+ Also replace values from stylesheet data into stylesheet text.
+ """
+ from . import qrc_resources
+
+ qrc_resources.qInitResources()
+
+ style_path = os.path.join(current_dir, "style.css")
+ with open(style_path, "r") as style_file:
+ stylesheet = style_file.read()
+
+ data = _get_colors_raw_data()
+
+ data_deque = collections.deque()
+ for item in data.items():
+ data_deque.append(item)
+
+ fill_data = {}
+ while data_deque:
+ key, value = data_deque.popleft()
+ if isinstance(value, dict):
+ for sub_key, sub_value in value.items():
+ new_key = "{}:{}".format(key, sub_key)
+ data_deque.append((new_key, sub_value))
+ continue
+ fill_data[key] = value
+
+ for key, value in fill_data.items():
+ replacement_key = "{" + key + "}"
+ stylesheet = stylesheet.replace(replacement_key, value)
+ return stylesheet
+
+
+def _load_font():
+ """Load and register fonts into Qt application."""
+ from qtpy import QtGui
+
+ # Check if font ids are still loaded
+ if _Cache.font_ids is not None:
+ for font_id in tuple(_Cache.font_ids):
+ font_families = QtGui.QFontDatabase.applicationFontFamilies(
+ font_id
+ )
+ # Reset font if font id is not available
+ if not font_families:
+ _Cache.font_ids = None
+ break
+
+ if _Cache.font_ids is None:
+ _Cache.font_ids = []
+ fonts_dirpath = os.path.join(current_dir, "fonts")
+ font_dirs = []
+ font_dirs.append(os.path.join(fonts_dirpath, "Noto_Sans"))
+ font_dirs.append(os.path.join(
+ fonts_dirpath,
+ "Noto_Sans_Mono",
+ "static",
+ "NotoSansMono"
+ ))
+
+ loaded_fonts = []
+ for font_dir in font_dirs:
+ for filename in os.listdir(font_dir):
+ if os.path.splitext(filename)[1] not in [".ttf"]:
+ continue
+ full_path = os.path.join(font_dir, filename)
+ font_id = QtGui.QFontDatabase.addApplicationFont(full_path)
+ _Cache.font_ids.append(font_id)
+ font_families = QtGui.QFontDatabase.applicationFontFamilies(
+ font_id
+ )
+ loaded_fonts.extend(font_families)
+
+ if log.isEnabledFor(logging.DEBUG):
+ log.debug("Registered font families: %s", ", ".join(loaded_fonts))
+
+
+def load_stylesheet():
+ """Load and return OpenPype Qt stylesheet."""
+
+ if _Cache.stylesheet is None:
+ _Cache.stylesheet = _load_stylesheet()
+ _load_font()
+ return _Cache.stylesheet
diff --git a/usd_qtpy/style/color_defs.py b/usd_qtpy/style/color_defs.py
new file mode 100644
index 0000000..6970358
--- /dev/null
+++ b/usd_qtpy/style/color_defs.py
@@ -0,0 +1,391 @@
+"""Color definitions that can be used to parse strings for stylesheet.
+
+Each definition must have available method `get_qcolor` which should return
+`QtGui.QColor` representation of the color.
+
+# TODO create abstract class to force this method implementation
+
+Usage: Some colors may be not be used only in stylesheet but is required to
+use them in code too. To not hardcode these color values into code it is better
+to use same colors that are available fro stylesheets.
+
+It is possible that some colors may not be used in stylesheet at all and thei
+definition is used only in code.
+"""
+
+import re
+
+
+def parse_color(value):
+ """Parse string value of color to one of objected representation.
+
+ Args:
+ value(str): Color definition usable in stylesheet.
+ """
+ modified_value = value.strip().lower()
+ if modified_value.startswith("hsla"):
+ return HSLAColor(value)
+
+ if modified_value.startswith("hsl"):
+ return HSLColor(value)
+
+ if modified_value.startswith("#"):
+ return HEXColor(value)
+
+ if modified_value.startswith("rgba"):
+ return RGBAColor(value)
+
+ if modified_value.startswith("rgb"):
+ return RGBColor(value)
+ return UnknownColor(value)
+
+
+def create_qcolor(*args):
+ """Create QtGui.QColor object.
+
+ Args:
+ *args (tuple): It is possible to pass initialization arguments for
+ Qcolor.
+ """
+ from qtpy import QtGui
+
+ return QtGui.QColor(*args)
+
+
+def min_max_check(value, min_value, max_value):
+ """Validate number value if is in passed range.
+
+ Args:
+ value (int, float): Value which is validated.
+ min_value (int, float): Minimum possible value. Validation is skipped
+ if passed value is None.
+ max_value (int, float): Maximum possible value. Validation is skipped
+ if passed value is None.
+
+ Raises:
+ ValueError: When 'value' is out of specified range.
+ """
+ if min_value is not None and value < min_value:
+ raise ValueError("Minimum expected value is '{}' got '{}'".format(
+ min_value, value
+ ))
+
+ if max_value is not None and value > max_value:
+ raise ValueError("Maximum expected value is '{}' got '{}'".format(
+ min_value, value
+ ))
+
+
+def int_validation(value, min_value=None, max_value=None):
+ """Validation of integer value within range.
+
+ Args:
+ value (int): Validated value.
+ min_value (int): Minimum possible value.
+ max_value (int): Maximum possible value.
+
+ Raises:
+ TypeError: If 'value' is not 'int' type.
+ """
+ if not isinstance(value, int):
+ raise TypeError((
+ "Invalid type of hue expected 'int' got {}"
+ ).format(str(type(value))))
+
+ min_max_check(value, min_value, max_value)
+
+
+def float_validation(value, min_value=None, max_value=None):
+ """Validation of float value within range.
+
+ Args:
+ value (float): Validated value.
+ min_value (float): Minimum possible value.
+ max_value (float): Maximum possible value.
+
+ Raises:
+ TypeError: If 'value' is not 'float' type.
+ """
+ if not isinstance(value, float):
+ raise TypeError((
+ "Invalid type of hue expected 'int' got {}"
+ ).format(str(type(value))))
+
+ min_max_check(value, min_value, max_value)
+
+
+class UnknownColor:
+ """Color from stylesheet data without known color definition.
+
+ This is backup for unknown color definitions which may be for example
+ constants or definition not yet defined by class.
+ """
+ def __init__(self, value):
+ self.value = value
+
+ def get_qcolor(self):
+ return create_qcolor(self.value)
+
+
+class HEXColor:
+ """Hex color definition.
+
+ Hex color is defined by '#' and 3 or 6 hex values (0-F).
+
+ Examples:
+ "#fff"
+ "#f3f3f3"
+ """
+ regex = re.compile(r"[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$")
+
+ def __init__(self, color_string):
+ red, green, blue = self.hex_to_rgb(color_string)
+
+ self._color_string = color_string
+ self._red = red
+ self._green = green
+ self._blue = blue
+
+ @property
+ def red(self):
+ return self._red
+
+ @property
+ def green(self):
+ return self._green
+
+ @property
+ def blue(self):
+ return self._blue
+
+ def to_stylesheet_str(self):
+ return self._color_string
+
+ @classmethod
+ def hex_to_rgb(cls, value):
+ """Convert hex value to rgb."""
+ hex_value = value.lstrip("#")
+ if not cls.regex.match(hex_value):
+ raise ValueError("\"{}\" is not a valid HEX code.".format(value))
+
+ output = []
+ if len(hex_value) == 3:
+ for char in hex_value:
+ output.append(int(char * 2, 16))
+ else:
+ for idx in range(3):
+ start_idx = idx * 2
+ output.append(int(hex_value[start_idx:start_idx + 2], 16))
+ return output
+
+ def get_qcolor(self):
+ return create_qcolor(self.red, self.green, self.blue)
+
+
+class RGBColor:
+ """Color defined by red green and blue values.
+
+ Each color has possible integer range 0-255.
+
+ Examples:
+ "rgb(255, 127, 0)"
+ """
+ def __init__(self, value):
+ modified_color = value.lower().strip()
+ content = modified_color.rstrip(")").lstrip("rgb(")
+ red_str, green_str, blue_str = (
+ item.strip() for item in content.split(",")
+ )
+ red = int(red_str)
+ green = int(green_str)
+ blue = int(blue_str)
+
+ int_validation(red, 0, 255)
+ int_validation(green, 0, 255)
+ int_validation(blue, 0, 255)
+
+ self._red = red
+ self._green = green
+ self._blue = blue
+
+ @property
+ def red(self):
+ return self._red
+
+ @property
+ def green(self):
+ return self._green
+
+ @property
+ def blue(self):
+ return self._blue
+
+ def get_qcolor(self):
+ return create_qcolor(self.red, self.green, self.blue)
+
+
+class RGBAColor:
+ """Color defined by red green, blue and alpha values.
+
+ Each color has possible integer range 0-255.
+
+ Examples:
+ "rgba(255, 127, 0, 127)"
+ """
+ def __init__(self, value):
+ modified_color = value.lower().strip()
+ content = modified_color.rstrip(")").lstrip("rgba(")
+ red_str, green_str, blue_str, alpha_str = (
+ item.strip() for item in content.split(",")
+ )
+ red = int(red_str)
+ green = int(green_str)
+ blue = int(blue_str)
+ if "." in alpha_str:
+ alpha = int(float(alpha_str) * 100)
+ else:
+ alpha = int(alpha_str)
+
+ int_validation(red, 0, 255)
+ int_validation(green, 0, 255)
+ int_validation(blue, 0, 255)
+ int_validation(alpha, 0, 255)
+
+ self._red = red
+ self._green = green
+ self._blue = blue
+ self._alpha = alpha
+
+ @property
+ def red(self):
+ return self._red
+
+ @property
+ def green(self):
+ return self._green
+
+ @property
+ def blue(self):
+ return self._blue
+
+ @property
+ def alpha(self):
+ return self._alpha
+
+ def get_qcolor(self):
+ return create_qcolor(self.red, self.green, self.blue, self.alpha)
+
+
+class HSLColor:
+ """Color defined by hue, saturation and light values.
+
+ Hue is defined as integer in rage 0-360. Saturation and light can be
+ defined as float or percent value.
+
+ Examples:
+ "hsl(27, 0.7, 0.3)"
+ "hsl(27, 70%, 30%)"
+ """
+ def __init__(self, value):
+ modified_color = value.lower().strip()
+ content = modified_color.rstrip(")").lstrip("hsl(")
+ hue_str, sat_str, light_str = (
+ item.strip() for item in content.split(",")
+ )
+ hue = int(hue_str) % 360
+ if "%" in sat_str:
+ sat = float(sat_str.rstrip("%")) / 100
+ else:
+ sat = float(sat_str)
+
+ if "%" in light_str:
+ light = float(light_str.rstrip("%")) / 100
+ else:
+ light = float(light_str)
+
+ int_validation(hue, 0, 360)
+ float_validation(sat, 0, 1)
+ float_validation(light, 0, 1)
+
+ self._hue = hue
+ self._saturation = sat
+ self._light = light
+
+ @property
+ def hue(self):
+ return self._hue
+
+ @property
+ def saturation(self):
+ return self._saturation
+
+ @property
+ def light(self):
+ return self._light
+
+ def get_qcolor(self):
+ color = create_qcolor()
+ color.setHslF(self.hue / 360, self.saturation, self.light)
+ return color
+
+
+class HSLAColor:
+ """Color defined by hue, saturation, light and alpha values.
+
+ Hue is defined as integer in rage 0-360. Saturation and light can be
+ defined as float (0-1 range) or percent value(0-100%). And alpha
+ as float (0-1 range).
+
+ Examples:
+ "hsla(27, 0.7, 0.3, 0.5)"
+ "hsla(27, 70%, 30%, 0.5)"
+ """
+ def __init__(self, value):
+ modified_color = value.lower().strip()
+ content = modified_color.rstrip(")").lstrip("hsla(")
+ hue_str, sat_str, light_str, alpha_str = (
+ item.strip() for item in content.split(",")
+ )
+ hue = int(hue_str) % 360
+ if "%" in sat_str:
+ sat = float(sat_str.rstrip("%")) / 100
+ else:
+ sat = float(sat_str)
+
+ if "%" in light_str:
+ light = float(light_str.rstrip("%")) / 100
+ else:
+ light = float(light_str)
+
+ alpha = float(alpha_str)
+
+ int_validation(hue, 0, 360)
+ float_validation(sat, 0, 1)
+ float_validation(light, 0, 1)
+ float_validation(alpha, 0, 1)
+
+ self._hue = hue
+ self._saturation = sat
+ self._light = light
+ self._alpha = alpha
+
+ @property
+ def hue(self):
+ return self._hue
+
+ @property
+ def saturation(self):
+ return self._saturation
+
+ @property
+ def light(self):
+ return self._light
+
+ @property
+ def alpha(self):
+ return self._alpha
+
+ def get_qcolor(self):
+ color = create_qcolor()
+ color.setHslF(self.hue / 360, self.saturation, self.light, self.alpha)
+ return color
diff --git a/usd_qtpy/style/data.json b/usd_qtpy/style/data.json
new file mode 100644
index 0000000..392752f
--- /dev/null
+++ b/usd_qtpy/style/data.json
@@ -0,0 +1,83 @@
+{
+ "palette": {
+ "grey-base": "#2C313A",
+ "grey-light": "#373D48",
+ "grey-lighter": "#434a56",
+ "grey-lightest": "#4E5565",
+ "grey-input": "#353A45",
+ "grey-dark": "#21252B",
+
+ "text-darker": "#99A3B2",
+ "text-base": "#D3D8DE",
+ "text-lighter": "#F0F2F5",
+
+ "blue-base": "hsl(200, 20%, 60%)",
+ "blue-light": "hsl(200, 40%, 80%)",
+
+ "green-base": "hsl(155, 55%, 55%)",
+ "green-light": "hsl(155, 80%, 80%)"
+ },
+ "color": {
+ "font": "#D3D8DE",
+ "font-hover": "#F0F2F5",
+ "font-disabled": "#5b6779",
+ "font-view-selection": "#ffffff",
+ "font-view-hover": "#F0F2F5",
+
+ "bg": "#2C313A",
+ "bg-inputs": "#21252B",
+ "bg-buttons": "rgb(67, 74, 86)",
+ "bg-buttons-hover": "rgb(81, 86, 97)",
+ "bg-buttons-checked": "rgb(121, 136, 157)",
+ "bg-inputs-disabled": "#2C313A",
+ "bg-buttons-disabled": "#434a56",
+
+ "bg-splitter": "#434a56",
+ "bg-splitter-hover": "rgba(168, 175, 189, 0.3)",
+
+ "bg-menu-separator": "rgba(75, 83, 98, 127)",
+
+ "bg-scroll-handle": "#4B5362",
+
+ "bg-view": "#21252B",
+ "bg-view-header": "#373D48",
+ "bg-view-hover": "rgba(168, 175, 189, .3)",
+ "bg-view-alternate": "rgb(36, 42, 50)",
+ "bg-view-disabled": "#2C313A",
+ "bg-view-alternate-disabled": "#2C313A",
+ "bg-view-selection": "rgba(92, 173, 214, .4)",
+ "bg-view-selection-hover": "rgba(92, 173, 214, .8)",
+
+ "border": "#373D48",
+ "border-hover": "rgb(92, 99, 111)",
+ "border-focus": "rgb(92, 173, 214)",
+
+ "restart-btn-bg": "#458056",
+
+ "delete-btn-bg": "rgb(201, 54, 54)",
+ "delete-btn-bg-disabled": "rgba(201, 54, 54, 64)",
+
+ "icon-tools": "#ffffff",
+ "icon-alert-tools": "#AA5050",
+ "icon-entity-default": "#65bbc5",
+ "icon-entity-disabled": "#808080",
+ "font-entity-deprecated": "#666666",
+ "overlay-messages": {
+ "close-btn": "#D3D8DE",
+ "bg-success": "#458056",
+ "bg-success-hover": "#55a066",
+ "bg-error": "#AD2E2E",
+ "bg-error-hover": "#C93636",
+ "bg-info": "rgb(63, 98, 121)",
+ "bg-info-hover": "rgb(81, 146, 181)"
+ },
+ "tab-widget": {
+ "bg": "#21252B",
+ "bg-selected": "#434a56",
+ "bg-hover": "#373D48",
+ "color": "#99A3B2",
+ "color-selected": "#F0F2F5",
+ "color-hover": "#F0F2F5"
+ }
+ }
+}
diff --git a/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Bold.ttf b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Bold.ttf
new file mode 100644
index 0000000..54ad879
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Bold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans/NotoSans-BoldItalic.ttf b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-BoldItalic.ttf
new file mode 100644
index 0000000..530a828
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-BoldItalic.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Italic.ttf b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Italic.ttf
new file mode 100644
index 0000000..27ff1ed
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Italic.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Regular.ttf b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Regular.ttf
new file mode 100644
index 0000000..10589e2
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans/NotoSans-Regular.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans/OFL.txt b/usd_qtpy/style/fonts/Noto_Sans/OFL.txt
new file mode 100644
index 0000000..c985727
--- /dev/null
+++ b/usd_qtpy/style/fonts/Noto_Sans/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2012 Google Inc. All Rights Reserved.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/NotoSansMono-VariableFont_wdth,wght.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/NotoSansMono-VariableFont_wdth,wght.ttf
new file mode 100644
index 0000000..9dabd9e
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/NotoSansMono-VariableFont_wdth,wght.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/OFL.txt b/usd_qtpy/style/fonts/Noto_Sans_Mono/OFL.txt
new file mode 100644
index 0000000..c985727
--- /dev/null
+++ b/usd_qtpy/style/fonts/Noto_Sans_Mono/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2012 Google Inc. All Rights Reserved.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/README.txt b/usd_qtpy/style/fonts/Noto_Sans_Mono/README.txt
new file mode 100644
index 0000000..b8a8fdb
--- /dev/null
+++ b/usd_qtpy/style/fonts/Noto_Sans_Mono/README.txt
@@ -0,0 +1,99 @@
+Noto Sans Mono Variable Font
+============================
+
+This download contains Noto Sans Mono as both a variable font and static fonts.
+
+Noto Sans Mono is a variable font with these axes:
+ wdth
+ wght
+
+This means all the styles are contained in a single file:
+ NotoSansMono-VariableFont_wdth,wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for Noto Sans Mono:
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Thin.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraLight.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Light.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Regular.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Medium.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-SemiBold.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Bold.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraBold.ttf
+ static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Black.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-Thin.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraLight.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-Light.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-Regular.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-Medium.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-SemiBold.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-Bold.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraBold.ttf
+ static/NotoSansMono_Condensed/NotoSansMono_Condensed-Black.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Thin.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraLight.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Light.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Regular.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Medium.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-SemiBold.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Bold.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraBold.ttf
+ static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Black.ttf
+ static/NotoSansMono/NotoSansMono-Thin.ttf
+ static/NotoSansMono/NotoSansMono-ExtraLight.ttf
+ static/NotoSansMono/NotoSansMono-Light.ttf
+ static/NotoSansMono/NotoSansMono-Regular.ttf
+ static/NotoSansMono/NotoSansMono-Medium.ttf
+ static/NotoSansMono/NotoSansMono-SemiBold.ttf
+ static/NotoSansMono/NotoSansMono-Bold.ttf
+ static/NotoSansMono/NotoSansMono-ExtraBold.ttf
+ static/NotoSansMono/NotoSansMono-Black.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them freely in your products & projects - print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Black.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Black.ttf
new file mode 100644
index 0000000..75fe4b4
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Black.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Bold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Bold.ttf
new file mode 100644
index 0000000..9cefe49
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Bold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-ExtraBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-ExtraBold.ttf
new file mode 100644
index 0000000..9961afc
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-ExtraBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-ExtraLight.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-ExtraLight.ttf
new file mode 100644
index 0000000..03ab3f8
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-ExtraLight.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Light.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Light.ttf
new file mode 100644
index 0000000..19a5af2
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Light.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Medium.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Medium.ttf
new file mode 100644
index 0000000..6223154
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Medium.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Regular.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Regular.ttf
new file mode 100644
index 0000000..a850b21
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Regular.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-SemiBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-SemiBold.ttf
new file mode 100644
index 0000000..0f4dffc
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-SemiBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Thin.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Thin.ttf
new file mode 100644
index 0000000..0ecd83c
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono/NotoSansMono-Thin.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Black.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Black.ttf
new file mode 100644
index 0000000..77ef132
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Black.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Bold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Bold.ttf
new file mode 100644
index 0000000..41dbc9e
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Bold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraBold.ttf
new file mode 100644
index 0000000..640ae09
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraLight.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraLight.ttf
new file mode 100644
index 0000000..02fe86a
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-ExtraLight.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Light.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Light.ttf
new file mode 100644
index 0000000..a0dfac1
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Light.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Medium.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Medium.ttf
new file mode 100644
index 0000000..72a1fa5
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Medium.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Regular.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Regular.ttf
new file mode 100644
index 0000000..8e8591c
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Regular.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-SemiBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-SemiBold.ttf
new file mode 100644
index 0000000..b7843ce
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-SemiBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Thin.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Thin.ttf
new file mode 100644
index 0000000..42f4493
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_Condensed/NotoSansMono_Condensed-Thin.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Black.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Black.ttf
new file mode 100644
index 0000000..6ad6ad9
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Black.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Bold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Bold.ttf
new file mode 100644
index 0000000..4cdda15
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Bold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraBold.ttf
new file mode 100644
index 0000000..0d42882
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraLight.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraLight.ttf
new file mode 100644
index 0000000..c3b01f9
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-ExtraLight.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Light.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Light.ttf
new file mode 100644
index 0000000..be5b120
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Light.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Medium.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Medium.ttf
new file mode 100644
index 0000000..5fbb4d9
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Medium.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Regular.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Regular.ttf
new file mode 100644
index 0000000..eac82bf
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Regular.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-SemiBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-SemiBold.ttf
new file mode 100644
index 0000000..9a75e32
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-SemiBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Thin.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Thin.ttf
new file mode 100644
index 0000000..b710820
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_ExtraCondensed/NotoSansMono_ExtraCondensed-Thin.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Black.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Black.ttf
new file mode 100644
index 0000000..ef0f93a
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Black.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Bold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Bold.ttf
new file mode 100644
index 0000000..bb7091a
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Bold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraBold.ttf
new file mode 100644
index 0000000..a737a65
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraLight.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraLight.ttf
new file mode 100644
index 0000000..2a95000
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-ExtraLight.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Light.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Light.ttf
new file mode 100644
index 0000000..07906bd
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Light.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Medium.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Medium.ttf
new file mode 100644
index 0000000..89d75e3
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Medium.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Regular.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Regular.ttf
new file mode 100644
index 0000000..0c654e7
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Regular.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-SemiBold.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-SemiBold.ttf
new file mode 100644
index 0000000..e93689f
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-SemiBold.ttf differ
diff --git a/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Thin.ttf b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Thin.ttf
new file mode 100644
index 0000000..b4f1804
Binary files /dev/null and b/usd_qtpy/style/fonts/Noto_Sans_Mono/static/NotoSansMono_SemiCondensed/NotoSansMono_SemiCondensed-Thin.ttf differ
diff --git a/usd_qtpy/style/images/branch_closed.png b/usd_qtpy/style/images/branch_closed.png
new file mode 100644
index 0000000..135cd0b
Binary files /dev/null and b/usd_qtpy/style/images/branch_closed.png differ
diff --git a/usd_qtpy/style/images/branch_closed_on.png b/usd_qtpy/style/images/branch_closed_on.png
new file mode 100644
index 0000000..0ba35bd
Binary files /dev/null and b/usd_qtpy/style/images/branch_closed_on.png differ
diff --git a/usd_qtpy/style/images/branch_open.png b/usd_qtpy/style/images/branch_open.png
new file mode 100644
index 0000000..1a83955
Binary files /dev/null and b/usd_qtpy/style/images/branch_open.png differ
diff --git a/usd_qtpy/style/images/branch_open_on.png b/usd_qtpy/style/images/branch_open_on.png
new file mode 100644
index 0000000..c09f5fd
Binary files /dev/null and b/usd_qtpy/style/images/branch_open_on.png differ
diff --git a/usd_qtpy/style/images/checkbox_checked.png b/usd_qtpy/style/images/checkbox_checked.png
new file mode 100644
index 0000000..8875dca
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_checked.png differ
diff --git a/usd_qtpy/style/images/checkbox_checked_disabled.png b/usd_qtpy/style/images/checkbox_checked_disabled.png
new file mode 100644
index 0000000..5e136e3
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_checked_disabled.png differ
diff --git a/usd_qtpy/style/images/checkbox_checked_focus.png b/usd_qtpy/style/images/checkbox_checked_focus.png
new file mode 100644
index 0000000..356d46d
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_checked_focus.png differ
diff --git a/usd_qtpy/style/images/checkbox_checked_hover.png b/usd_qtpy/style/images/checkbox_checked_hover.png
new file mode 100644
index 0000000..f0a2a78
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_checked_hover.png differ
diff --git a/usd_qtpy/style/images/checkbox_indeterminate.png b/usd_qtpy/style/images/checkbox_indeterminate.png
new file mode 100644
index 0000000..bd82661
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_indeterminate.png differ
diff --git a/usd_qtpy/style/images/checkbox_indeterminate_disabled.png b/usd_qtpy/style/images/checkbox_indeterminate_disabled.png
new file mode 100644
index 0000000..c4de5ed
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_indeterminate_disabled.png differ
diff --git a/usd_qtpy/style/images/checkbox_indeterminate_focus.png b/usd_qtpy/style/images/checkbox_indeterminate_focus.png
new file mode 100644
index 0000000..5468622
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_indeterminate_focus.png differ
diff --git a/usd_qtpy/style/images/checkbox_indeterminate_hover.png b/usd_qtpy/style/images/checkbox_indeterminate_hover.png
new file mode 100644
index 0000000..430a980
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_indeterminate_hover.png differ
diff --git a/usd_qtpy/style/images/checkbox_unchecked.png b/usd_qtpy/style/images/checkbox_unchecked.png
new file mode 100644
index 0000000..eb5890f
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_unchecked.png differ
diff --git a/usd_qtpy/style/images/checkbox_unchecked_disabled.png b/usd_qtpy/style/images/checkbox_unchecked_disabled.png
new file mode 100644
index 0000000..4b1d788
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_unchecked_disabled.png differ
diff --git a/usd_qtpy/style/images/checkbox_unchecked_focus.png b/usd_qtpy/style/images/checkbox_unchecked_focus.png
new file mode 100644
index 0000000..76e3238
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_unchecked_focus.png differ
diff --git a/usd_qtpy/style/images/checkbox_unchecked_hover.png b/usd_qtpy/style/images/checkbox_unchecked_hover.png
new file mode 100644
index 0000000..6053315
Binary files /dev/null and b/usd_qtpy/style/images/checkbox_unchecked_hover.png differ
diff --git a/usd_qtpy/style/images/combobox_arrow.png b/usd_qtpy/style/images/combobox_arrow.png
new file mode 100644
index 0000000..5805d98
Binary files /dev/null and b/usd_qtpy/style/images/combobox_arrow.png differ
diff --git a/usd_qtpy/style/images/combobox_arrow_disabled.png b/usd_qtpy/style/images/combobox_arrow_disabled.png
new file mode 100644
index 0000000..e271f7f
Binary files /dev/null and b/usd_qtpy/style/images/combobox_arrow_disabled.png differ
diff --git a/usd_qtpy/style/images/combobox_arrow_on.png b/usd_qtpy/style/images/combobox_arrow_on.png
new file mode 100644
index 0000000..5805d98
Binary files /dev/null and b/usd_qtpy/style/images/combobox_arrow_on.png differ
diff --git a/usd_qtpy/style/images/down_arrow.png b/usd_qtpy/style/images/down_arrow.png
new file mode 100644
index 0000000..e271f7f
Binary files /dev/null and b/usd_qtpy/style/images/down_arrow.png differ
diff --git a/usd_qtpy/style/images/down_arrow_disabled.png b/usd_qtpy/style/images/down_arrow_disabled.png
new file mode 100644
index 0000000..5805d98
Binary files /dev/null and b/usd_qtpy/style/images/down_arrow_disabled.png differ
diff --git a/usd_qtpy/style/images/down_arrow_on.png b/usd_qtpy/style/images/down_arrow_on.png
new file mode 100644
index 0000000..e271f7f
Binary files /dev/null and b/usd_qtpy/style/images/down_arrow_on.png differ
diff --git a/usd_qtpy/style/images/left_arrow.png b/usd_qtpy/style/images/left_arrow.png
new file mode 100644
index 0000000..f808d2d
Binary files /dev/null and b/usd_qtpy/style/images/left_arrow.png differ
diff --git a/usd_qtpy/style/images/left_arrow_disabled.png b/usd_qtpy/style/images/left_arrow_disabled.png
new file mode 100644
index 0000000..f5b9af8
Binary files /dev/null and b/usd_qtpy/style/images/left_arrow_disabled.png differ
diff --git a/usd_qtpy/style/images/left_arrow_on.png b/usd_qtpy/style/images/left_arrow_on.png
new file mode 100644
index 0000000..f808d2d
Binary files /dev/null and b/usd_qtpy/style/images/left_arrow_on.png differ
diff --git a/usd_qtpy/style/images/right_arrow.png b/usd_qtpy/style/images/right_arrow.png
new file mode 100644
index 0000000..9b0a4e6
Binary files /dev/null and b/usd_qtpy/style/images/right_arrow.png differ
diff --git a/usd_qtpy/style/images/right_arrow_disabled.png b/usd_qtpy/style/images/right_arrow_disabled.png
new file mode 100644
index 0000000..5c0bee4
Binary files /dev/null and b/usd_qtpy/style/images/right_arrow_disabled.png differ
diff --git a/usd_qtpy/style/images/right_arrow_on.png b/usd_qtpy/style/images/right_arrow_on.png
new file mode 100644
index 0000000..9b0a4e6
Binary files /dev/null and b/usd_qtpy/style/images/right_arrow_on.png differ
diff --git a/usd_qtpy/style/images/transparent.png b/usd_qtpy/style/images/transparent.png
new file mode 100644
index 0000000..bf9514e
Binary files /dev/null and b/usd_qtpy/style/images/transparent.png differ
diff --git a/usd_qtpy/style/images/up_arrow.png b/usd_qtpy/style/images/up_arrow.png
new file mode 100644
index 0000000..abcc724
Binary files /dev/null and b/usd_qtpy/style/images/up_arrow.png differ
diff --git a/usd_qtpy/style/images/up_arrow_disabled.png b/usd_qtpy/style/images/up_arrow_disabled.png
new file mode 100644
index 0000000..b9c8e3b
Binary files /dev/null and b/usd_qtpy/style/images/up_arrow_disabled.png differ
diff --git a/usd_qtpy/style/images/up_arrow_on.png b/usd_qtpy/style/images/up_arrow_on.png
new file mode 100644
index 0000000..abcc724
Binary files /dev/null and b/usd_qtpy/style/images/up_arrow_on.png differ
diff --git a/usd_qtpy/style/pyqt5_resources.py b/usd_qtpy/style/pyqt5_resources.py
new file mode 100644
index 0000000..55d4e3e
--- /dev/null
+++ b/usd_qtpy/style/pyqt5_resources.py
@@ -0,0 +1,1575 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+
+qt_resource_data = b"\
+\x00\x00\x07\xad\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00\x78\xcc\x44\x0d\
+\x00\x00\x05\x52\x69\x54\x58\x74\x58\x4d\x4c\x3a\x63\x6f\x6d\x2e\
+\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\x00\x00\x00\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\x69\x6e\x3d\x22\xef\
+\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\x30\x4d\x70\x43\x65\
+\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\x7a\x6b\x63\x39\x64\
+\x22\x3f\x3e\x0a\x3c\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\x62\x65\x3a\x6e\x73\
+\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\x6d\x70\x74\x6b\x3d\
+\x22\x58\x4d\x50\x20\x43\x6f\x72\x65\x20\x35\x2e\x35\x2e\x30\x22\
+\x3e\x0a\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\
+\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\
+\x73\x23\x22\x3e\x0a\x20\x20\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
+\x74\x3d\x22\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x65\
+\x78\x69\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\
+\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\
+\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x74\x69\
+\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\
+\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\x31\x2e\x30\
+\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\
+\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x0a\x20\x20\x20\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\
+\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\
+\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x0a\x20\x20\
+\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\
+\x6e\x73\x69\x6f\x6e\x3d\x22\x37\x22\x0a\x20\x20\x20\x65\x78\x69\
+\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\x6f\
+\x6e\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x65\x78\x69\x66\x3a\x43\
+\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\x31\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\x67\x65\x57\x69\x64\x74\x68\
+\x3d\x22\x37\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\
+\x67\x65\x4c\x65\x6e\x67\x74\x68\x3d\x22\x31\x30\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\
+\x55\x6e\x69\x74\x3d\x22\x32\x22\x0a\x20\x20\x20\x74\x69\x66\x66\
+\x3a\x58\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\
+\x2e\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\
+\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x2e\x30\x22\x0a\x20\
+\x20\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\
+\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x0a\x20\x20\x20\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x34\x33\x3a\x33\x35\x2b\x30\x32\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x34\x33\x3a\x33\x35\x2b\x30\x32\x3a\
+\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\
+\x65\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x41\x6c\x74\x3e\
+\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x78\x6d\
+\x6c\x3a\x6c\x61\x6e\x67\x3d\x22\x78\x2d\x64\x65\x66\x61\x75\x6c\
+\x74\x22\x3e\x62\x72\x61\x6e\x63\x68\x5f\x63\x6c\x6f\x73\x65\x3c\
+\x2f\x72\x64\x66\x3a\x6c\x69\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\
+\x64\x66\x3a\x41\x6c\x74\x3e\x0a\x20\x20\x20\x3c\x2f\x64\x63\x3a\
+\x74\x69\x74\x6c\x65\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\
+\x66\x3a\x6c\x69\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\
+\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\x70\x72\x6f\x64\x75\x63\x65\
+\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x73\
+\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x66\
+\x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
+\x31\x2e\x39\x2e\x32\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x34\x33\x3a\x33\x35\x2b\x30\x32\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\x24\xe1\x35\x97\x00\x00\
+\x01\x83\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\xcf\x2b\x44\
+\x51\x14\xc7\x3f\x66\x68\xfc\x18\x8d\x62\x61\x31\x65\x12\x16\x42\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99\x51\x7e\x6d\x66\x9e\x79\x33\
+\x6a\xde\x78\xbd\x37\xd2\x64\xab\x6c\xa7\x28\xb1\xf1\x6b\xc1\x5f\
+\xc0\x56\x59\x2b\x45\xa4\x64\xa7\xac\x89\x0d\x7a\xce\x9b\x51\x23\
+\x99\x73\x3b\xf7\x7c\xee\xf7\xde\x73\xba\xf7\x5c\x70\x44\xd3\x8a\
+\x66\x56\xfa\x41\xcb\x64\x8d\x70\x28\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a\x3a\xf1\xc6\x14\x53\x9f\x8c\x8c\x46\x29\x6b\xef\
+\xb7\x54\xd8\xf1\xba\xdb\xae\x55\xfe\xdc\xbf\x56\xb7\x98\x30\x15\
+\xa8\xa8\x16\x1e\x56\x74\x23\x2b\x3c\x26\x3c\xb1\x9a\xd5\x6d\xde\
+\x12\x6e\x52\x52\xb1\x45\xe1\x13\xe1\x2e\x43\x2e\x28\x7c\x63\xeb\
+\xf1\x22\x3f\xdb\x9c\x2c\xf2\xa7\xcd\x46\x34\x1c\x04\x47\x83\xb0\
+\x2f\xf9\x8b\xe3\xbf\x58\x49\x19\x9a\xb0\xbc\x9c\x36\x2d\xbd\xa2\
+\xfc\xdc\xc7\x7e\x89\x3b\x91\x99\x8e\x48\x6c\x15\xf7\x62\x12\x26\
+\x44\x00\x1f\xe3\x8c\x10\x64\x80\x5e\x86\x64\x1e\xa0\x9b\x3e\x7a\
+\x64\x45\x99\x7c\x7f\x21\x7f\x8a\x65\xc9\x55\x64\xd6\xc9\x61\xb0\
+\x44\x92\x14\x59\xba\x44\x5d\x91\xea\x09\x89\xaa\xe8\x09\x19\x69\
+\x72\x76\xff\xff\xf6\xd5\x54\xfb\xfb\x8a\xd5\xdd\x01\xa8\x7a\xb4\
+\xac\xd7\x76\x70\x6d\xc2\x57\xde\xb2\x3e\x0e\x2c\xeb\xeb\x10\x9c\
+\x0f\x70\x9e\x29\xe5\x2f\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9e\x75\x38\xbd\x28\x69\xf1\x6d\x38\xdb\x80\xe6\x7b\x3d\x66\xc4\
+\x0a\x92\x53\xdc\xa1\xaa\xf0\x72\x0c\xf5\xb3\xd0\x78\x05\xb5\xf3\
+\xc5\x9e\xfd\xec\x73\x74\x07\xd1\x35\xf9\xaa\x4b\xd8\xd9\x85\x0e\
+\x39\xef\x59\xf8\x06\x8e\xfd\x67\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00\x72\x49\x44\x41\x54\x18\x95\x6d\xcf\x31\x0a\
+\xc2\x50\x14\x44\xd1\xe8\x02\xb4\x57\x08\xd6\x49\x61\x99\x4a\x43\
+\x74\x15\x82\xab\x49\x36\x28\xee\x40\x04\xdb\xa8\x95\x58\x78\x2c\
+\xf2\x09\xe1\xf3\x07\xa6\x9a\xfb\xe0\xbe\x0c\x1b\xb4\x58\x64\x71\
+\x70\x30\xe4\x82\x55\x0a\x38\xe3\x8b\x1b\x8a\x14\x70\xc4\x1b\x3d\
+\x76\x29\x60\x8b\x07\x3e\xa8\xe6\xd1\xfe\x0b\x9d\x85\x8e\x57\x0d\
+\x5e\x78\xa2\x9e\x0e\xa7\x20\x74\x47\x39\x1d\xf6\xe1\x95\x2b\xd6\
+\xb1\x44\x8e\x0e\xcb\x58\xf0\x0f\x52\x8a\x79\x18\xdc\xe2\x02\x70\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x06\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x00\x31\xac\xdc\x63\
+\x00\x00\x04\xb0\x69\x54\x58\x74\x58\x4d\x4c\x3a\x63\x6f\x6d\x2e\
+\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\x00\x00\x00\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\x69\x6e\x3d\x22\xef\
+\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\x30\x4d\x70\x43\x65\
+\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\x7a\x6b\x63\x39\x64\
+\x22\x3f\x3e\x0a\x3c\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\x62\x65\x3a\x6e\x73\
+\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\x6d\x70\x74\x6b\x3d\
+\x22\x58\x4d\x50\x20\x43\x6f\x72\x65\x20\x35\x2e\x35\x2e\x30\x22\
+\x3e\x0a\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\
+\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\
+\x73\x23\x22\x3e\x0a\x20\x20\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
+\x74\x3d\x22\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x65\
+\x78\x69\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\
+\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\
+\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x74\x69\
+\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\
+\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\x31\x2e\x30\
+\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\
+\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x0a\x20\x20\x20\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\
+\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\
+\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x0a\x20\x20\
+\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\
+\x6e\x73\x69\x6f\x6e\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x65\x78\
+\x69\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\
+\x6f\x6e\x3d\x22\x37\x22\x0a\x20\x20\x20\x65\x78\x69\x66\x3a\x43\
+\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\x31\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\x67\x65\x57\x69\x64\x74\x68\
+\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x49\x6d\
+\x61\x67\x65\x4c\x65\x6e\x67\x74\x68\x3d\x22\x37\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\
+\x55\x6e\x69\x74\x3d\x22\x32\x22\x0a\x20\x20\x20\x74\x69\x66\x66\
+\x3a\x58\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\
+\x2e\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\
+\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x2e\x30\x22\x0a\x20\
+\x20\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\
+\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x0a\x20\x20\x20\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\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\x66\x3a\
+\x6c\x69\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x61\
+\x63\x74\x69\x6f\x6e\x3d\x22\x70\x72\x6f\x64\x75\x63\x65\x64\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\
+\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x66\x66\x69\
+\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\x31\x2e\
+\x39\x2e\x32\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\x35\x2d\x33\
+\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\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\x85\x9d\x9f\x08\x00\x00\x01\x83\
+\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\xcf\x2b\x44\x51\x14\
+\xc7\x3f\x66\x68\xfc\x18\x8d\x62\x61\x31\x65\x12\x16\x42\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99\x51\x7e\x6d\x66\x9e\x79\x33\x6a\xde\
+\x78\xbd\x37\xd2\x64\xab\x6c\xa7\x28\xb1\xf1\x6b\xc1\x5f\xc0\x56\
+\x59\x2b\x45\xa4\x64\xa7\xac\x89\x0d\x7a\xce\x9b\x51\x23\x99\x73\
+\x3b\xf7\x7c\xee\xf7\xde\x73\xba\xf7\x5c\x70\x44\xd3\x8a\x66\x56\
+\xfa\x41\xcb\x64\x8d\x70\x28\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a\x3a\xf1\xc6\x14\x53\x9f\x8c\x8c\x46\x29\x6b\xef\xb7\x54\
+\xd8\xf1\xba\xdb\xae\x55\xfe\xdc\xbf\x56\xb7\x98\x30\x15\xa8\xa8\
+\x16\x1e\x56\x74\x23\x2b\x3c\x26\x3c\xb1\x9a\xd5\x6d\xde\x12\x6e\
+\x52\x52\xb1\x45\xe1\x13\xe1\x2e\x43\x2e\x28\x7c\x63\xeb\xf1\x22\
+\x3f\xdb\x9c\x2c\xf2\xa7\xcd\x46\x34\x1c\x04\x47\x83\xb0\x2f\xf9\
+\x8b\xe3\xbf\x58\x49\x19\x9a\xb0\xbc\x9c\x36\x2d\xbd\xa2\xfc\xdc\
+\xc7\x7e\x89\x3b\x91\x99\x8e\x48\x6c\x15\xf7\x62\x12\x26\x44\x00\
+\x1f\xe3\x8c\x10\x64\x80\x5e\x86\x64\x1e\xa0\x9b\x3e\x7a\x64\x45\
+\x99\x7c\x7f\x21\x7f\x8a\x65\xc9\x55\x64\xd6\xc9\x61\xb0\x44\x92\
+\x14\x59\xba\x44\x5d\x91\xea\x09\x89\xaa\xe8\x09\x19\x69\x72\x76\
+\xff\xff\xf6\xd5\x54\xfb\xfb\x8a\xd5\xdd\x01\xa8\x7a\xb4\xac\xd7\
+\x76\x70\x6d\xc2\x57\xde\xb2\x3e\x0e\x2c\xeb\xeb\x10\x9c\x0f\x70\
+\x9e\x29\xe5\x2f\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9e\x75\
+\x38\xbd\x28\x69\xf1\x6d\x38\xdb\x80\xe6\x7b\x3d\x66\xc4\x0a\x92\
+\x53\xdc\xa1\xaa\xf0\x72\x0c\xf5\xb3\xd0\x78\x05\xb5\xf3\xc5\x9e\
+\xfd\xec\x73\x74\x07\xd1\x35\xf9\xaa\x4b\xd8\xd9\x85\x0e\x39\xef\
+\x59\xf8\x06\x8e\xfd\x67\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x6d\x49\x44\x41\x54\x18\x95\x75\xcf\xc1\x09\xc2\x50\
+\x10\x84\xe1\xd7\x85\x07\x9b\xd0\x43\x40\xd2\x82\x78\x14\x7b\x30\
+\x57\x21\x8d\x84\x60\x3f\x62\x4b\x7a\x48\xcc\x97\x83\xfb\x30\x04\
+\xdf\x9c\x86\x7f\x67\x99\xdd\x84\x0d\xaa\x54\x10\x6a\x6c\x13\x1e\
+\xbe\xba\xfe\x09\x35\x31\x7b\xe6\x8d\x0f\x26\x1c\x17\xa1\x53\xb0\
+\x11\x87\x0c\x2f\x01\x07\xec\xb0\x0f\x3f\xe1\xbc\xae\x69\xa3\xe6\
+\x85\x77\xf8\x5b\xe9\xf0\xbb\x9f\xfa\xd2\x83\x39\xdc\xa3\x5b\xf3\
+\x19\x2e\xa8\x89\xb5\x30\xf7\x43\xa0\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x01\xdc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x8e\x49\x44\x41\x54\x68\x81\xed\
+\x9a\xaf\x4e\xc3\x50\x14\x87\xbf\x6e\x1d\x0a\x1c\x41\x1e\x83\x04\
+\xc4\x0c\x6a\x41\x10\x04\x82\x80\x9e\xe7\x05\x78\x80\x21\x78\x01\
+\x5e\x00\x8f\xc2\x00\x72\x41\x90\x3d\xc2\x40\x31\x73\xe4\x32\x14\
+\xc1\xec\x4f\x82\x68\x1b\xb6\x65\xed\x28\xeb\x76\xda\xe5\x7e\xae\
+\xf7\x5c\xf1\xfb\xda\x7b\x6f\x9a\xdc\xe3\x11\xa2\xaa\xdb\xc0\x35\
+\x50\x03\xf6\x81\x0a\xf9\x62\x00\xb4\x81\x16\x70\x23\x22\x3d\x00\
+\x0f\x40\x55\x8f\x81\x7b\x60\xc7\x2c\x5e\x3a\xba\x40\x5d\x44\x5e\
+\xbc\xf0\xcd\xbf\x51\x9c\xf0\x11\x5d\x60\xaf\x44\xb0\x6c\x8a\x16\
+\x1e\x82\xcc\x0d\x9f\x60\xcd\x4f\x33\x5a\x71\x98\xbf\x52\x9e\x7a\
+\xae\xf9\x04\x1b\x76\x9c\x91\x88\xf8\x2b\x0a\x94\x0a\x55\x1d\x32\
+\x29\x71\x50\x22\x7f\xa7\x4d\x1a\x2a\x25\xeb\x04\x8b\xe2\x04\xac\
+\x71\x02\xd6\x38\x01\x6b\x9c\x80\x35\x4e\xc0\x1a\x27\x60\xcd\xdc\
+\xdf\x66\x55\x3d\x01\x0e\x81\xcd\xe5\xc7\x99\x60\x08\xbc\x03\x4f\
+\x22\xf2\x1d\x37\x29\x56\x40\x55\x7d\xe0\x01\x38\xcf\x3e\x5b\x2a\
+\x3a\xaa\x7a\x2a\x22\x1f\xb3\x8a\x49\x4b\xe8\x0a\xfb\xf0\x00\xbb\
+\xc0\x5d\x5c\x31\x49\xe0\x2c\xfb\x2c\xff\xe6\x48\x55\xb7\x66\x15\
+\x0a\xbf\x89\x93\x04\x9e\x57\x96\x62\x3e\xaf\x22\xf2\x35\xab\x90\
+\x24\x70\x0b\x3c\x2e\x27\x4f\x2a\x3a\xc0\x65\x5c\x31\xf6\x14\x12\
+\x91\x21\x70\x51\xd8\x63\x34\x42\x44\x9a\x40\x33\xc3\x60\x99\xb2\
+\xd6\x9b\xb8\x10\x38\x01\x6b\x9c\x80\x35\x4e\xc0\x1a\x27\x60\x8d\
+\x13\xb0\x66\x2d\x04\x06\xd6\x21\x16\xa0\xef\x13\x5c\xdf\x57\xc7\
+\x06\xcb\xe1\x6d\x60\x1e\x99\xbe\x66\x6d\xfb\x04\xbd\x07\xd5\x39\
+\x13\xf3\x4a\xab\xf8\xad\x06\x61\xd7\x47\x3d\x1c\x28\x0a\x51\xb3\
+\x47\xcf\x8b\x46\xc2\x2f\xd1\xe0\xb7\xdd\x66\xc3\x28\x5c\x1c\x7d\
+\x26\xdb\x6d\x3e\x01\x7e\x00\x25\xf8\x5a\x43\x55\x4e\x3a\x7f\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xef\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xa1\x49\x44\x41\x54\x68\x81\xed\
+\x9a\xbf\x4e\xc2\x50\x14\x87\xbf\x96\xe2\xa4\x9b\x71\xbc\x8b\x1b\
+\xea\xc0\xe2\x44\x1c\x8c\x83\x83\xd1\x81\x89\x84\xd1\x17\xf0\x01\
+\x70\xc0\x07\xf0\x05\x1c\x49\x9c\xba\xa8\x23\x71\x30\x3c\x02\x76\
+\x92\xe5\x8e\x04\x27\xe3\xc2\x9f\xc4\xa1\x6d\x04\x42\x8b\x95\xc2\
+\xa1\xe4\x7e\x5b\x7b\xee\xf0\xfb\x9a\x7b\x6f\x9a\x9c\x63\x11\x50\
+\x75\xbd\x5d\xe0\x16\x28\x01\x87\x40\x9e\xf5\x62\x00\xb4\x81\x16\
+\x50\x6f\x94\x0b\x3d\x00\x0b\xa0\xea\x7a\xa7\xc0\x23\xb0\x27\x16\
+\x2f\x19\x5d\xa0\xd2\x28\x17\x5e\xad\xe0\xcb\xbf\x93\x9d\xf0\x21\
+\x5d\xe0\xc0\xc6\xdf\x36\x59\x0b\x0f\x7e\xe6\x9a\x83\xbf\xe7\xa7\
+\x19\xad\x38\xcc\x5f\xc9\x4d\x3d\x97\x1c\xfc\x03\x3b\xce\xa8\x51\
+\x2e\x38\x2b\x0a\x94\x88\xaa\xeb\x0d\x99\x94\x38\xb2\x59\xbf\xdb\
+\x26\x09\x79\x5b\x3a\xc1\xa2\x18\x01\x69\x8c\x80\x34\x46\x40\x1a\
+\x23\x20\x8d\x11\x90\xc6\x08\x48\x33\xf7\xb7\x59\x6b\x7d\x06\x1c\
+\x03\xdb\xcb\x8f\x33\xc1\x10\xf0\x80\x67\xa5\xd4\x77\xd4\xa2\x48\
+\x01\xad\xb5\x03\xb8\xc0\x65\xfa\xd9\x12\xd1\xd1\x5a\x9f\x2b\xa5\
+\x3e\x66\x15\xe3\xb6\xd0\x0d\xf2\xe1\x01\xf6\x81\x87\xa8\x62\x9c\
+\xc0\x45\xfa\x59\xfe\xcd\x89\xd6\x7a\x67\x56\x21\xf3\x87\x38\x4e\
+\xe0\x65\x65\x29\xe6\xf3\xa6\x94\xfa\x9a\x55\x88\x13\xb8\x07\x9e\
+\x96\x93\x27\x11\x1d\xe0\x3a\xaa\x18\x79\x0b\x29\xa5\x86\xc0\x55\
+\x66\xaf\xd1\x10\xa5\x54\x13\x68\xa6\x18\x2c\x55\x36\xfa\x10\x67\
+\x02\x23\x20\x8d\x11\x90\xc6\x08\x48\x63\x04\xa4\x31\x02\xd2\x6c\
+\x84\xc0\x40\x3a\xc4\x02\xf4\x1d\xfc\xf6\x7d\x71\xec\x65\x2e\xe8\
+\x06\xae\x23\xd3\x6d\xd6\xb6\x83\x3f\x7b\x50\x9c\xb3\x70\x5d\x69\
+\xd9\x40\x1d\xbf\x6d\x9f\x35\xba\xc0\x9d\x1d\x4c\x7d\x54\xc8\x96\
+\x44\x38\xec\xd1\xb3\xc2\x37\xc1\xd0\x47\x8d\xdf\x71\x9b\x2d\xa1\
+\x70\x51\xf4\x99\x1c\xb7\xf9\x04\xf8\x01\x6f\xed\x58\x63\x2d\xfd\
+\xb2\x59\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
+\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
+\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x00\xa0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1c\x1f\x24\
+\xc6\x09\x17\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
+\x05\xff\xcf\xc3\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x0e\
+\xa3\x21\x9c\xc3\x68\x88\x61\x1a\x0a\x00\x00\x6d\x84\x09\x75\x37\
+\x9e\xd9\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
+\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
+\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x01\x69\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x1b\x49\x44\x41\x54\x68\x81\xed\
+\xda\xb1\x6d\xc2\x40\x14\x87\xf1\xcf\xc7\x91\x09\x50\x86\x70\x42\
+\x41\x4f\xc5\x0a\xae\x90\xbc\x0a\x29\xc8\x2a\x96\x52\x79\x05\x2a\
+\x46\x20\x1e\xc2\x82\x05\x48\x90\x52\xdc\x59\x01\x4b\x51\x62\x45\
+\xe2\xef\x93\xde\xaf\xb3\x45\xf1\x3e\xcb\xa6\xb9\x97\x11\x95\x75\
+\x33\x03\x5e\x80\x25\xf0\x0c\x4c\x19\x97\x0f\xe0\x00\xec\x81\x6d\
+\x55\xe4\x47\x80\x0c\xa0\xac\x9b\x15\xf0\x06\x3c\xca\xc6\x1b\xa6\
+\x05\xd6\x55\x91\xef\xb2\xf8\xe4\xdf\x49\x67\xf8\x4e\x0b\x3c\x39\
+\xc2\x6b\x93\xda\xf0\x10\x66\xde\x78\xc2\x3b\xdf\x77\xb9\xf3\x30\
+\x7f\x35\xe9\x5d\x2f\x3d\xe1\x83\xbd\x76\xa9\x8a\xdc\xdf\x69\xa0\
+\x41\xca\xba\xf9\xe4\x36\x62\xee\x18\xdf\xbf\xcd\x10\x53\xa7\x9e\
+\xe0\xbf\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\
+\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\
+\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x11\x4e\xc0\
+\x53\x75\xf6\x84\xe3\xfb\xc5\xd5\xcd\x49\x3c\x0d\x1c\xa3\xfe\x31\
+\xeb\xc1\x13\x76\x0f\x16\xbf\xfc\x70\xac\xf6\x0e\xd8\x12\x8e\xed\
+\x53\xd3\x02\xaf\x2e\x6e\x7d\xac\x49\x2b\xa2\x5b\xf6\x38\x66\xdd\
+\x9d\xb8\xf4\xb1\xe1\x7b\xdd\xe6\x41\x34\xdc\x4f\xce\xdc\xae\xdb\
+\x9c\x00\xbe\x00\x9f\xf6\x34\x3e\x36\x4f\x37\x81\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
+\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
+\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
+\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
+\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x04\x33\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xe5\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x4d\x88\x1c\x45\x14\xc7\x7f\x33\x3b\x89\x2e\x18\xf1\x33\x1e\
+\x92\x8b\x8b\xa2\x26\x06\x14\x2f\xa2\x39\x88\x15\x89\xa9\x18\x15\
+\xd1\xca\x06\x0f\x91\x05\x3d\x88\x62\x6e\x42\xc0\x1c\x12\xc4\x83\
+\x07\x15\x0d\x42\x14\x89\x04\xa2\x96\x44\x59\x22\x2f\x46\x7d\x8a\
+\xb0\x22\x08\x1e\x34\xbb\x22\x46\x8c\x2c\x88\xba\xc4\x88\x82\x5f\
+\xc9\x46\x3d\x54\x0f\x8c\xbd\xdd\x5d\xdd\xd3\x61\xa7\x07\xfc\xdd\
+\xa6\xfa\xd5\xab\xf7\xea\xf3\xdf\xd5\xd3\x22\xc1\x58\x77\x11\xb0\
+\x03\x58\x0b\x5c\x0d\x2c\xa1\x59\x9c\x02\xa6\x81\x29\x60\xa7\x8a\
+\x3f\x0e\xd0\x02\x30\xd6\xdd\x0c\xbc\x02\x2c\x1f\x58\x78\xd5\x98\
+\x03\xb6\xa8\xf8\xf7\x5b\x49\xcf\xcf\x30\x3c\xc1\x77\x99\x03\x56\
+\xb7\x09\xd3\x66\xd8\x82\x87\x10\xf3\x63\x1d\xc2\x9c\x4f\x73\x7a\
+\x91\x83\x29\xcb\x48\xea\xf7\xda\x0e\x61\xc1\xf6\x72\x5a\xc5\x77\
+\x16\x29\xa0\x4a\x18\xeb\xe6\xf9\x6f\x12\x6b\xda\x34\x6f\xb7\xa9\
+\xc2\x92\xf6\xa0\x23\xa8\xcb\xff\x09\x0c\x9a\xa1\x4f\xa0\xa9\xbb\
+\xcd\x3d\xc0\x5d\xc0\x4b\x2a\xfe\xdd\x22\xdb\xc6\x8d\x80\xb1\xee\
+\x11\xc0\x03\xe3\xc0\x61\x63\xdd\x6e\x63\x5d\xee\x4e\xd9\xa8\x04\
+\x8c\x75\xe3\xc0\x53\x3d\x45\x2d\xe0\x41\xe0\x85\xbc\x3a\x8d\x99\
+\x42\xc6\xba\x75\xc0\xcb\x24\x02\x33\xc5\x56\x63\xdd\x91\xac\x7a\
+\x8d\x18\x01\x63\xdd\x75\xc0\x1b\xc0\xd2\x02\xb3\x0d\x59\x85\x03\
+\x4f\xc0\x58\x77\x19\x20\xc0\xb2\x88\xe9\x8b\x59\x85\x03\x4d\xc0\
+\x58\x77\x09\x70\x98\xb8\x1a\x7e\x52\xc5\xbf\x9a\xf5\x60\x60\x09\
+\x18\xeb\x96\x01\x87\x80\xb1\x88\xe9\x3e\xe0\xd1\xbc\x87\x03\x49\
+\xc0\x58\xb7\x14\x78\x13\xb8\x36\x62\xfa\x36\x30\xa1\xe2\xff\xc9\
+\x33\x58\xf4\x04\x8c\x75\x6d\x42\xaf\x9a\x88\xe9\x27\xc0\xdd\x2a\
+\x7e\xbe\xc8\x68\x10\x23\xf0\x34\xe0\x22\x36\x5f\x01\x1b\x55\xfc\
+\x6f\x31\x67\xa5\x12\x30\xd6\xb5\x92\x9e\xab\x85\xb1\x6e\x3b\xf0\
+\x70\xc4\xec\x7b\x60\x7d\xf7\xd6\x21\x46\x61\x50\x49\xe0\xdb\x80\
+\x3f\x80\x69\x63\xdd\x9a\x52\x91\x66\xfb\x9a\x00\x1e\x8f\x98\xfd\
+\x02\xdc\xaa\xe2\xbf\x2d\xeb\x37\x37\x81\x44\x7f\x4c\x12\x8e\xf6\
+\xb3\x80\xab\x80\xf7\x8c\x75\x57\x94\x75\xde\xe3\x6b\x13\xb0\x27\
+\x62\xf6\x17\x70\x87\x8a\xff\xbc\x8a\xef\xa2\x11\x78\x0e\xd8\x94\
+\x2a\x5b\x0e\xa8\xb1\xee\xd2\xb2\x0d\x18\xeb\x6e\x00\x5e\x63\xe1\
+\x0b\x79\x2f\x7f\x03\xf7\xaa\xf8\x0f\xcb\xfa\xed\x92\x99\x40\xd2\
+\x63\x0f\xe4\xd4\x59\x41\x18\x89\x15\x31\xe7\xc6\xba\x55\xc0\x41\
+\x60\x34\x62\xfa\x90\x8a\x3f\x10\xf3\x97\x45\xde\x08\x5c\x10\xa9\
+\x37\x46\x48\xe2\xe2\x3c\x03\x63\xdd\x4a\xc2\x29\x1b\xf3\xb5\x4b\
+\xc5\x3f\x1f\xb1\xc9\x25\x2f\x81\xfd\x84\x7d\xb8\x88\x2b\x81\x77\
+\x8c\x75\xe7\xa5\x1f\x18\xeb\xce\x27\x04\xbf\x32\xe2\x63\x8f\x8a\
+\xdf\x11\x8d\xb2\x80\xcc\x04\x54\xfc\x29\x82\xfa\xcb\x94\xb0\x3d\
+\x5c\x03\x1c\x32\xd6\x9d\xd3\x2d\x30\xd6\x8d\x12\xa6\xcd\xaa\x48\
+\xdd\x49\x82\xd6\xaf\x45\xee\x22\x56\xf1\x27\x80\x5b\x80\xa3\x11\
+\x1f\xd7\x03\x07\x8d\x75\xa3\xc6\xba\x11\xc2\x82\xbd\x31\x52\x67\
+\x0a\x18\x57\xf1\xb5\x6f\x00\x0b\xcf\x01\x15\xff\x23\xb0\x0e\x98\
+\x8d\xf8\xb9\x09\x38\x40\xd8\x2a\xd3\x3b\x57\x9a\x69\xe0\x76\x15\
+\xff\x67\xc9\x18\x0b\x89\x9e\xae\x2a\x7e\x96\xa0\x5b\x7e\x88\x98\
+\x6e\x00\x26\x22\x36\xb3\x84\x83\xea\xe7\x72\xe1\xc5\x29\x25\x0f\
+\x54\xfc\xd7\x84\x91\xf8\xa9\x46\x5b\x27\x08\x12\xe1\xbb\x1a\x3e\
+\x16\x50\x5a\xdf\xa8\xf8\x19\x60\x3d\xf0\x6b\x1f\xed\xfc\x0e\xdc\
+\xa6\xe2\xbf\xec\xa3\x6e\x21\x95\x04\x9a\x8a\xff\x14\xd8\x98\x04\
+\x54\x96\x79\x60\xb3\x8a\xff\xb8\x4a\x5b\x65\xa9\xac\x30\x55\xfc\
+\x14\x70\x27\x41\xbb\x94\xe1\x7e\x15\xff\x56\xd5\x76\xca\xd2\x97\
+\x44\x4e\x6e\xcb\x36\x13\x7a\xb7\x88\xed\x2a\x7e\x6f\x3f\x6d\x94\
+\xa5\x6f\x8d\xaf\xe2\x27\x81\xad\x04\x21\x96\xc5\xb3\x2a\xfe\x89\
+\x7e\xfd\x97\xa5\xd6\x4b\x8a\x8a\xdf\x0f\xdc\xc7\xc2\x35\xb1\x1b\
+\xd8\x56\xc7\x77\x59\x6a\xdf\xcc\xa9\xf8\x7d\xc6\xba\x8f\x08\x07\
+\xd8\xb9\xc0\x07\xc9\x3a\x59\x14\xce\xc8\xd5\xa2\x8a\xff\x06\x78\
+\xe6\x4c\xf8\xaa\x4a\x9b\xf0\x05\x7c\x58\x39\xd9\x21\x68\x93\xde\
+\xfb\x99\x91\xe4\x6b\x60\x13\x49\xbf\xd5\x4d\x77\x08\xca\x30\x7d\
+\xc1\x54\xf4\xfa\xd7\x24\xa6\xda\xc0\x4e\xc2\x67\xfb\x61\x63\x0e\
+\xd8\xd5\x4e\xee\x5f\xb6\x30\x5c\x49\x74\xff\xec\x71\x7c\x04\xe0\
+\xd8\xd1\x99\x63\x63\x97\xaf\xde\x0b\x9c\x4d\xf8\xf0\x7d\x21\xcd\
+\x9b\x46\x27\x81\xcf\x80\xd7\x01\xa7\xe2\xbf\x00\xf8\x17\x5d\x81\
+\x0b\x38\xb3\xfa\x20\x9c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x01\xfc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xae\x49\x44\x41\x54\x68\x81\xed\
+\x9a\xbd\x4a\x03\x41\x14\x46\x4f\x36\x1b\xb0\xd0\x4a\xf1\x01\x14\
+\xab\x68\x91\xc6\x2a\x58\xb8\x16\xb2\x88\x76\x0b\xe9\x7d\x01\x1f\
+\x40\x8b\xf8\x00\xbe\x80\x85\x9d\x30\x62\xa3\x32\x55\xc6\x42\xf2\
+\x02\x42\x92\x46\x83\x7d\x48\x27\x36\xf9\x01\x8b\xdd\x40\x12\xb2\
+\x89\x6b\x7e\x66\x37\xcc\xe9\x76\xef\x14\xdf\x59\xee\x0c\x0b\x77\
+\x52\x04\x38\xae\xb7\x01\x5c\x01\x79\x60\x17\xc8\x10\x2f\xda\x40\
+\x05\x28\x03\x45\x25\x45\x13\x20\x05\xe0\xb8\xde\x21\x70\x0f\x6c\
+\x6a\x8b\x17\x8d\x06\x50\x50\x52\xbc\xa6\x82\x2f\x5f\x25\x39\xe1\
+\x7b\x34\x80\xac\x85\xdf\x36\x49\x0b\x0f\x7e\xe6\x4b\x1b\xbf\xe7\
+\x87\xe9\x2e\x38\xcc\x5f\x49\x0f\x3d\xe7\x6d\xfc\x0d\xdb\x4f\x57\
+\x49\x61\x2f\x28\x50\x24\x1c\xd7\xeb\x30\x28\xb1\x67\x11\xbf\xd3\
+\x26\x0a\x19\x4b\x77\x82\x69\x31\x02\xba\x31\x02\xba\x31\x02\xba\
+\x31\x02\xba\x31\x02\xba\x31\x02\xba\x99\xf8\xdb\xec\xb8\xde\x11\
+\xb0\x0f\xac\xce\x3f\xce\x00\x1d\xa0\x06\x3c\x2b\x29\x7e\xc2\x16\
+\x85\x0a\x38\xae\x67\x03\x8f\xc0\xe9\xec\xb3\x45\xa2\xee\xb8\xde\
+\xb1\x92\xe2\x73\x54\x71\x5c\x0b\x5d\xa0\x3f\x3c\xc0\x36\x70\x1b\
+\x56\x1c\x27\x70\x32\xfb\x2c\xff\xe6\xc0\x71\xbd\xb5\x51\x85\xc4\
+\x6f\xe2\x71\x02\x2f\x0b\x4b\x31\x99\x37\x25\xc5\xf7\xa8\xc2\x38\
+\x81\x1b\xe0\x69\x3e\x79\x22\x51\x07\xce\xc3\x8a\xa1\xa7\x90\x92\
+\xa2\x03\x9c\x25\xf6\x18\xed\xa1\xa4\x28\x01\xa5\x19\x06\x9b\x29\
+\x4b\xbd\x89\x13\x81\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\
+\x8d\x11\xd0\xcd\x52\x08\xb4\x75\x87\x98\x82\x96\x8d\x3f\xbe\xcf\
+\xf5\xbd\x4c\x07\xd3\xc0\x38\x32\x3c\x66\xad\xd8\xf8\x77\x0f\x72\
+\x13\x16\xc6\x95\xb2\x05\x14\xf1\xc7\xf6\x49\xa3\x01\x5c\x5b\xc1\
+\xad\x8f\x02\xc9\x92\xe8\x5d\xf6\x68\xa6\x01\xbe\x3e\xaa\x5f\x5b\
+\x3b\xd9\x3b\x60\x05\x7f\xf0\xbd\x4e\xfc\xda\xa8\x05\xbc\x03\x0f\
+\x80\xa7\xa4\xa8\x01\xfc\x02\x51\xab\x5c\x8a\x3f\xde\xe3\x59\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1f\x20\xb9\
+\x8d\x77\xe9\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x06\xe6\x7c\x60\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+\x64\x60\x60\x62\x60\x48\x11\x40\xe2\x20\x73\x19\x90\x8d\x40\x02\
+\x00\x23\xed\x08\xaf\x64\x9f\x0f\x15\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x07\x30\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x00\x31\xac\xdc\x63\
+\x00\x00\x04\xb0\x69\x54\x58\x74\x58\x4d\x4c\x3a\x63\x6f\x6d\x2e\
+\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\x00\x00\x00\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\x69\x6e\x3d\x22\xef\
+\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\x30\x4d\x70\x43\x65\
+\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\x7a\x6b\x63\x39\x64\
+\x22\x3f\x3e\x0a\x3c\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\x62\x65\x3a\x6e\x73\
+\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\x6d\x70\x74\x6b\x3d\
+\x22\x58\x4d\x50\x20\x43\x6f\x72\x65\x20\x35\x2e\x35\x2e\x30\x22\
+\x3e\x0a\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\
+\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\
+\x73\x23\x22\x3e\x0a\x20\x20\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
+\x74\x3d\x22\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x65\
+\x78\x69\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\
+\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\
+\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x74\x69\
+\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\
+\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\x31\x2e\x30\
+\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\
+\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x0a\x20\x20\x20\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\
+\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\
+\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x0a\x20\x20\
+\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\
+\x6e\x73\x69\x6f\x6e\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x65\x78\
+\x69\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\
+\x6f\x6e\x3d\x22\x37\x22\x0a\x20\x20\x20\x65\x78\x69\x66\x3a\x43\
+\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\x31\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\x67\x65\x57\x69\x64\x74\x68\
+\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x49\x6d\
+\x61\x67\x65\x4c\x65\x6e\x67\x74\x68\x3d\x22\x37\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\
+\x55\x6e\x69\x74\x3d\x22\x32\x22\x0a\x20\x20\x20\x74\x69\x66\x66\
+\x3a\x58\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\
+\x2e\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\
+\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x2e\x30\x22\x0a\x20\
+\x20\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\
+\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x0a\x20\x20\x20\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x33\x33\x3a\x31\x34\x2b\x30\x32\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x33\x33\x3a\x31\x34\x2b\x30\x32\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\x66\x3a\
+\x6c\x69\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x61\
+\x63\x74\x69\x6f\x6e\x3d\x22\x70\x72\x6f\x64\x75\x63\x65\x64\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\
+\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x66\x66\x69\
+\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\x31\x2e\
+\x39\x2e\x32\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\x35\x2d\x33\
+\x31\x54\x31\x32\x3a\x33\x33\x3a\x31\x34\x2b\x30\x32\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\x48\x8b\x5b\x5e\x00\x00\x01\x83\
+\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\xcf\x2b\x44\x51\x14\
+\xc7\x3f\x66\x68\xfc\x18\x8d\x62\x61\x31\x65\x12\x16\x42\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99\x51\x7e\x6d\x66\x9e\x79\x33\x6a\xde\
+\x78\xbd\x37\xd2\x64\xab\x6c\xa7\x28\xb1\xf1\x6b\xc1\x5f\xc0\x56\
+\x59\x2b\x45\xa4\x64\xa7\xac\x89\x0d\x7a\xce\x9b\x51\x23\x99\x73\
+\x3b\xf7\x7c\xee\xf7\xde\x73\xba\xf7\x5c\x70\x44\xd3\x8a\x66\x56\
+\xfa\x41\xcb\x64\x8d\x70\x28\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a\x3a\xf1\xc6\x14\x53\x9f\x8c\x8c\x46\x29\x6b\xef\xb7\x54\
+\xd8\xf1\xba\xdb\xae\x55\xfe\xdc\xbf\x56\xb7\x98\x30\x15\xa8\xa8\
+\x16\x1e\x56\x74\x23\x2b\x3c\x26\x3c\xb1\x9a\xd5\x6d\xde\x12\x6e\
+\x52\x52\xb1\x45\xe1\x13\xe1\x2e\x43\x2e\x28\x7c\x63\xeb\xf1\x22\
+\x3f\xdb\x9c\x2c\xf2\xa7\xcd\x46\x34\x1c\x04\x47\x83\xb0\x2f\xf9\
+\x8b\xe3\xbf\x58\x49\x19\x9a\xb0\xbc\x9c\x36\x2d\xbd\xa2\xfc\xdc\
+\xc7\x7e\x89\x3b\x91\x99\x8e\x48\x6c\x15\xf7\x62\x12\x26\x44\x00\
+\x1f\xe3\x8c\x10\x64\x80\x5e\x86\x64\x1e\xa0\x9b\x3e\x7a\x64\x45\
+\x99\x7c\x7f\x21\x7f\x8a\x65\xc9\x55\x64\xd6\xc9\x61\xb0\x44\x92\
+\x14\x59\xba\x44\x5d\x91\xea\x09\x89\xaa\xe8\x09\x19\x69\x72\x76\
+\xff\xff\xf6\xd5\x54\xfb\xfb\x8a\xd5\xdd\x01\xa8\x7a\xb4\xac\xd7\
+\x76\x70\x6d\xc2\x57\xde\xb2\x3e\x0e\x2c\xeb\xeb\x10\x9c\x0f\x70\
+\x9e\x29\xe5\x2f\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9e\x75\
+\x38\xbd\x28\x69\xf1\x6d\x38\xdb\x80\xe6\x7b\x3d\x66\xc4\x0a\x92\
+\x53\xdc\xa1\xaa\xf0\x72\x0c\xf5\xb3\xd0\x78\x05\xb5\xf3\xc5\x9e\
+\xfd\xec\x73\x74\x07\xd1\x35\xf9\xaa\x4b\xd8\xd9\x85\x0e\x39\xef\
+\x59\xf8\x06\x8e\xfd\x67\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x97\x49\x44\x41\x54\x18\x95\x6d\xcf\xb1\x6a\x02\x41\
+\x14\x85\xe1\x6f\xb7\xb6\xd0\x27\x48\x3d\x56\x69\x03\xb1\xb4\x48\
+\x3b\x6c\xa5\xf1\x39\xf6\x59\x02\x56\x42\xba\x61\x0a\x0b\x3b\x1b\
+\x1b\x6b\x41\x18\x02\x29\x6d\xe3\xbe\x82\xcd\x06\x16\xd9\xdb\xdd\
+\x9f\xff\x5c\xee\xa9\x62\x2a\x13\x4c\x73\x13\x6e\x46\x26\xa6\xf2\
+\x82\xae\x46\x8b\xdf\x98\xca\xfb\x88\xb4\xc0\x0f\xda\x1a\x5b\x74\
+\xd8\xc7\x54\xc2\x40\x9a\x63\x8f\x3f\x7c\x55\x3d\x7c\xc5\x09\x77\
+\xbc\xa1\xc2\x19\x33\x2c\x72\x13\x2e\xd5\xe0\xc2\x12\x07\x5c\x51\
+\x23\xe0\x23\x37\xe1\xa8\x4f\x0e\x7f\xda\x60\xd7\xaf\x9f\xb9\x09\
+\xdf\x63\x05\xff\xe5\x75\x4c\x65\xf5\xcc\x1f\x0d\x33\x2c\x83\xb6\
+\x06\x44\x83\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\xfb\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xad\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x4f\xa8\x15\x55\x1c\xc7\x3f\xf7\xbe\xab\xf2\x20\xa3\x22\x6d\
+\xa1\x7c\x21\x09\x2a\x4b\x28\xda\x44\xb9\x88\x52\x4c\xcc\x6a\x51\
+\xf9\xa4\x85\xf1\xa0\x16\x51\xe4\x2e\x10\x74\x51\x44\x8b\x16\x15\
+\x25\x81\xb5\x28\x04\xad\xc0\xe2\x61\x64\xf6\x97\xe0\x45\x10\xb4\
+\xa9\x27\x44\x45\xc4\x17\xa2\x12\x35\x0a\x2a\xff\x3c\xab\xc5\x99\
+\x5b\xd7\x79\x33\x73\xce\xdc\x6b\x6f\xee\x05\x3f\xbb\x39\xf3\x3b\
+\xbf\xf3\xfb\x9d\x33\xe7\x9c\xef\x9c\x99\x16\x19\xb6\x2f\x06\x76\
+\x00\xab\x81\xab\x81\x05\x0c\x17\xa7\x80\x19\x60\x1a\x78\x4c\xd2\
+\x11\x80\x16\x80\xed\x9b\x81\xbd\xc0\xd2\xc6\xc2\xab\xc7\x61\x60\
+\xb3\xa4\x0f\x5b\x59\xcf\x1f\x62\x74\x82\xef\x72\x18\xb8\xaa\x4d\
+\x78\x6c\x46\x2d\x78\x08\x31\x6f\xef\x10\x9e\xf9\x3c\xa7\xe7\x39\
+\x98\x54\xc6\x72\xd7\xab\x3b\x84\x09\xdb\xcb\x69\x49\x9d\x79\x0a\
+\xa8\x16\xb6\x67\x39\x33\x89\x55\x6d\x86\x6f\xb5\xa9\xc3\x82\x76\
+\xd3\x11\x0c\xca\xb9\x04\x9a\xe6\x5c\x02\xff\x07\xb6\xef\xb6\xbd\
+\xd7\xf6\xda\x98\xed\xd0\x25\x60\xfb\x11\xe0\x75\x60\x02\x38\x68\
+\x7b\xa7\xed\xd2\x95\x72\xa8\x12\xb0\x3d\x01\x3c\xdd\x53\xd4\x02\
+\x1e\x04\x5e\x2c\xab\x33\x34\x1b\x96\xed\x35\xc0\x2b\x64\x02\x33\
+\xc7\x16\xdb\x5f\x16\xd5\x1b\x8a\x11\xb0\x7d\x1d\xf0\x06\xb0\xb0\
+\xc2\x6c\x7d\x51\x61\xe3\x09\xd8\xbe\x0c\x78\x1b\x58\x1c\x31\x7d\
+\xa9\xa8\xb0\xd1\x04\x6c\x5f\x02\x1c\x24\xae\x86\x9f\x92\xf4\x6a\
+\xd1\x8d\xc6\x12\xb0\xbd\x18\x38\x00\xac\x88\x98\xee\x06\x1e\x2d\
+\xbb\xd9\x48\x02\xb6\x17\x02\x6f\x02\xd7\x46\x4c\xdf\x01\x26\x25\
+\xfd\x5d\x66\x30\xef\x09\xd8\x6e\x13\x7a\xf5\x96\x88\xe9\x67\xc0\
+\x5d\x92\x66\xab\x8c\x9a\x18\x81\x67\x80\x7b\x22\x36\x5f\x03\x1b\
+\x24\xfd\x1e\x73\x96\x94\x80\xed\x56\xd6\x73\x03\x61\x7b\x1b\xf0\
+\x70\xc4\xec\x47\x60\x5d\xf7\xd4\x21\x46\x65\x50\x59\xe0\x5b\x81\
+\x3f\x81\x19\xdb\xab\x92\x22\x2d\xf6\x35\x09\x3c\x11\x31\xfb\x15\
+\xb8\x55\xd2\xf7\xa9\x7e\x4b\x13\xc8\xf4\xc7\x14\x61\x6b\x5f\x04\
+\x5c\x09\xbc\x6f\xfb\xf2\x54\xe7\x3d\xbe\x36\x02\xbb\x22\x66\x27\
+\x80\x3b\x24\x7d\x51\xc7\x77\xd5\x08\x3c\x0f\x6c\xcc\x95\x2d\x05\
+\x3e\xb0\x7d\x69\x6a\x03\xb6\x6f\x00\x5e\x63\xee\x0b\x79\x2f\x7f\
+\x01\xf7\x4a\xfa\x38\xd5\x6f\x97\xc2\x04\xb2\x1e\x7b\xa0\xa4\xce\
+\x32\xc2\x48\x2c\x8b\x39\xb7\xbd\x12\xd8\x0f\x8c\x47\x4c\x1f\x92\
+\xb4\x2f\xe6\xaf\x88\xb2\x11\xb8\x28\x52\x6f\x05\x21\x89\x25\x65\
+\x06\xb6\x97\x13\x76\xd9\x98\xaf\xc7\x25\xbd\x10\xb1\x29\xa5\x2c\
+\x81\x3d\x84\x75\xb8\x8a\x2b\x80\x77\x6d\x5f\x90\xbf\x61\xfb\x42\
+\x42\xf0\xcb\x23\x3e\x76\x49\xda\x11\x8d\xb2\x82\xc2\x04\x24\x9d\
+\x22\xa8\xbf\x42\x09\xdb\xc3\x35\xc0\x01\xdb\xe7\x75\x0b\x6c\x8f\
+\x13\x1e\x9b\x95\x91\xba\x53\x04\xad\x3f\x10\xa5\x93\x58\xd2\x31\
+\x60\x2d\xf0\x4d\xc4\xc7\xf5\xc0\x7e\xdb\xe3\xb6\xc7\x08\x13\xf6\
+\xc6\x48\x9d\x69\x60\x42\xd2\xc0\x27\x80\x95\xfb\x80\xa4\x9f\x81\
+\x35\x80\x23\x7e\x6e\x02\xf6\x11\x96\xca\xfc\xca\x95\x67\x06\xb8\
+\x5d\xd2\xf1\xc4\x18\x2b\x89\xee\xae\x92\x4c\xd0\x2d\x3f\x45\x4c\
+\xd7\x03\x93\x11\x1b\x13\x36\xaa\x5f\xd2\xc2\x8b\x93\x24\x0f\x24\
+\x7d\x4b\x18\x89\xa3\x03\xb4\x75\x8c\x20\x11\x7e\x18\xc0\xc7\x1c\
+\x92\xf5\x8d\xa4\x43\xc0\x3a\xe0\xb7\x3e\xda\xf9\x03\xb8\x4d\xd2\
+\x57\x7d\xd4\xad\xa4\x96\x40\x93\xf4\x39\xb0\x21\x0b\x28\x95\x59\
+\x60\x93\xa4\x4f\xeb\xb4\x95\x4a\x6d\x85\x29\x69\x1a\xb8\x93\xa0\
+\x5d\x52\xb8\x5f\xd2\x5b\x75\xdb\x49\xa5\x2f\x89\x2c\xe9\x3d\x60\
+\x13\xa1\x77\xab\xd8\x26\xe9\xe5\x7e\xda\x48\xa5\x6f\x8d\x2f\x69\
+\x0a\xd8\x42\x10\x62\x45\x3c\x27\xe9\xc9\x7e\xfd\xa7\x32\xd0\x4b\
+\x8a\xa4\x3d\xc0\x7d\xcc\x9d\x13\x3b\x81\xad\x83\xf8\x4e\x65\xe0\
+\x93\x39\x49\xbb\x6d\x7f\x42\xd8\xc0\xce\x07\x3e\xca\xe6\xc9\xbc\
+\x70\x56\x8e\x16\x25\x7d\x07\x3c\x7b\x36\x7c\xd5\xa5\x4d\xf8\x02\
+\x3e\xaa\x9c\xec\x10\xb4\x49\xef\xf9\xcc\x58\xf6\x35\x70\x18\xc9\
+\xbf\xd5\xcd\x74\x08\xca\x30\x7f\xc0\x54\xf5\xfa\x37\x4c\x4c\x8f\
+\xfe\xaf\x06\xd9\xf9\xcb\xe6\xac\x60\x54\xe8\xfe\xec\x71\xe4\xdf\
+\x8f\x09\xd9\x48\x6c\xe7\xbf\xdf\x6d\xaa\xce\xea\x9b\xe0\x24\x67\
+\xfe\x6e\x73\x14\xe0\x1f\x0a\x43\x12\x6b\x4f\xfd\x3f\x13\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x5b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x0d\x49\x44\x41\x54\x68\x81\xed\
+\xda\xb1\x6d\x02\x41\x10\x46\xe1\x77\xc7\xe2\x0a\x2c\x87\xd3\x00\
+\x38\x20\x27\x72\x17\x14\x83\x03\x37\xe3\x2e\x1c\x51\x02\x34\x30\
+\x21\xc2\x0d\x60\x90\x1c\xec\x9e\x0c\x27\x59\xf6\x09\x89\xff\x56\
+\x9a\x2f\x63\x45\x30\x0f\x0e\x92\x9d\x86\xc2\xdd\x1f\x81\x57\x60\
+\x09\xcc\x81\x29\xe3\xf2\x05\x6c\x81\x0d\xf0\x66\x66\x07\x80\x06\
+\xc0\xdd\x5f\x80\x77\xe0\x49\x36\xde\x30\x7b\x60\x65\x66\x1f\x4d\
+\xf9\xe4\x77\xd4\x33\x7c\x67\x0f\xcc\x5a\xf2\x63\x53\xdb\xf0\x90\
+\x67\x5e\x27\xf2\x33\xdf\x77\xbe\xf3\x30\xff\x35\xe9\xbd\x5e\x26\
+\xf2\x0f\xf6\xd2\xd9\xcc\xd2\x9d\x06\x1a\xc4\xdd\x4f\x5c\x47\x3c\
+\xb7\x8c\xef\xdf\x66\x88\x69\xab\x9e\xe0\x56\x11\xa0\x16\x01\x6a\
+\x11\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\
+\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\xa0\
+\x16\x01\x6a\x11\xa0\xd6\x92\x6f\xc0\x6b\x75\x4c\xe4\xeb\xfb\xc5\
+\xc5\xe1\xa4\xdc\x06\x8e\x51\xff\x9a\x75\x9b\xc8\xbb\x07\x8b\x3f\
+\xde\x38\x56\x9b\xfa\x57\x0d\xca\xd6\xc7\xaa\x1c\xd4\xa2\x5b\xf6\
+\x38\x34\xdd\x49\xf9\x26\xd6\xfc\xac\xdb\x3c\x88\x86\xfb\xcd\x91\
+\xeb\x75\x9b\x4f\x80\x6f\x56\x01\x36\x1e\x77\x0d\xa5\x42\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\xdd\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00\x78\xcc\x44\x0d\
+\x00\x00\x05\x52\x69\x54\x58\x74\x58\x4d\x4c\x3a\x63\x6f\x6d\x2e\
+\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\x00\x00\x00\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\x69\x6e\x3d\x22\xef\
+\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\x30\x4d\x70\x43\x65\
+\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\x7a\x6b\x63\x39\x64\
+\x22\x3f\x3e\x0a\x3c\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\x62\x65\x3a\x6e\x73\
+\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\x6d\x70\x74\x6b\x3d\
+\x22\x58\x4d\x50\x20\x43\x6f\x72\x65\x20\x35\x2e\x35\x2e\x30\x22\
+\x3e\x0a\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\
+\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\
+\x73\x23\x22\x3e\x0a\x20\x20\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
+\x74\x3d\x22\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x65\
+\x78\x69\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\
+\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\
+\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x74\x69\
+\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\
+\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\x31\x2e\x30\
+\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\
+\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x0a\x20\x20\x20\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\
+\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\
+\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x0a\x20\x20\
+\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\
+\x6e\x73\x69\x6f\x6e\x3d\x22\x37\x22\x0a\x20\x20\x20\x65\x78\x69\
+\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\x6f\
+\x6e\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x65\x78\x69\x66\x3a\x43\
+\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\x31\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\x67\x65\x57\x69\x64\x74\x68\
+\x3d\x22\x37\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\
+\x67\x65\x4c\x65\x6e\x67\x74\x68\x3d\x22\x31\x30\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\
+\x55\x6e\x69\x74\x3d\x22\x32\x22\x0a\x20\x20\x20\x74\x69\x66\x66\
+\x3a\x58\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\
+\x2e\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\
+\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x2e\x30\x22\x0a\x20\
+\x20\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\
+\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x0a\x20\x20\x20\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x34\x33\x3a\x30\x39\x2b\x30\x32\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x34\x33\x3a\x30\x39\x2b\x30\x32\x3a\
+\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\
+\x65\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x41\x6c\x74\x3e\
+\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x78\x6d\
+\x6c\x3a\x6c\x61\x6e\x67\x3d\x22\x78\x2d\x64\x65\x66\x61\x75\x6c\
+\x74\x22\x3e\x62\x72\x61\x6e\x63\x68\x5f\x63\x6c\x6f\x73\x65\x3c\
+\x2f\x72\x64\x66\x3a\x6c\x69\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\
+\x64\x66\x3a\x41\x6c\x74\x3e\x0a\x20\x20\x20\x3c\x2f\x64\x63\x3a\
+\x74\x69\x74\x6c\x65\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\
+\x66\x3a\x6c\x69\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\
+\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\x70\x72\x6f\x64\x75\x63\x65\
+\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x73\
+\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x66\
+\x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
+\x31\x2e\x39\x2e\x32\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\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x34\x33\x3a\x30\x39\x2b\x30\x32\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\x58\xad\xf2\x80\x00\x00\
+\x01\x83\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\xcf\x2b\x44\
+\x51\x14\xc7\x3f\x66\x68\xfc\x18\x8d\x62\x61\x31\x65\x12\x16\x42\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99\x51\x7e\x6d\x66\x9e\x79\x33\
+\x6a\xde\x78\xbd\x37\xd2\x64\xab\x6c\xa7\x28\xb1\xf1\x6b\xc1\x5f\
+\xc0\x56\x59\x2b\x45\xa4\x64\xa7\xac\x89\x0d\x7a\xce\x9b\x51\x23\
+\x99\x73\x3b\xf7\x7c\xee\xf7\xde\x73\xba\xf7\x5c\x70\x44\xd3\x8a\
+\x66\x56\xfa\x41\xcb\x64\x8d\x70\x28\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a\x3a\xf1\xc6\x14\x53\x9f\x8c\x8c\x46\x29\x6b\xef\
+\xb7\x54\xd8\xf1\xba\xdb\xae\x55\xfe\xdc\xbf\x56\xb7\x98\x30\x15\
+\xa8\xa8\x16\x1e\x56\x74\x23\x2b\x3c\x26\x3c\xb1\x9a\xd5\x6d\xde\
+\x12\x6e\x52\x52\xb1\x45\xe1\x13\xe1\x2e\x43\x2e\x28\x7c\x63\xeb\
+\xf1\x22\x3f\xdb\x9c\x2c\xf2\xa7\xcd\x46\x34\x1c\x04\x47\x83\xb0\
+\x2f\xf9\x8b\xe3\xbf\x58\x49\x19\x9a\xb0\xbc\x9c\x36\x2d\xbd\xa2\
+\xfc\xdc\xc7\x7e\x89\x3b\x91\x99\x8e\x48\x6c\x15\xf7\x62\x12\x26\
+\x44\x00\x1f\xe3\x8c\x10\x64\x80\x5e\x86\x64\x1e\xa0\x9b\x3e\x7a\
+\x64\x45\x99\x7c\x7f\x21\x7f\x8a\x65\xc9\x55\x64\xd6\xc9\x61\xb0\
+\x44\x92\x14\x59\xba\x44\x5d\x91\xea\x09\x89\xaa\xe8\x09\x19\x69\
+\x72\x76\xff\xff\xf6\xd5\x54\xfb\xfb\x8a\xd5\xdd\x01\xa8\x7a\xb4\
+\xac\xd7\x76\x70\x6d\xc2\x57\xde\xb2\x3e\x0e\x2c\xeb\xeb\x10\x9c\
+\x0f\x70\x9e\x29\xe5\x2f\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9e\x75\x38\xbd\x28\x69\xf1\x6d\x38\xdb\x80\xe6\x7b\x3d\x66\xc4\
+\x0a\x92\x53\xdc\xa1\xaa\xf0\x72\x0c\xf5\xb3\xd0\x78\x05\xb5\xf3\
+\xc5\x9e\xfd\xec\x73\x74\x07\xd1\x35\xf9\xaa\x4b\xd8\xd9\x85\x0e\
+\x39\xef\x59\xf8\x06\x8e\xfd\x67\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00\xa2\x49\x44\x41\x54\x18\x95\x55\xcf\xb1\x4a\
+\xc3\x31\x00\xc4\xe1\x2f\xff\xb9\x93\xa3\x93\xb8\xa5\x8b\x0f\x20\
+\x55\x44\x10\x5c\x3a\x84\x2c\x1d\x5c\x7c\x0f\xb7\x8e\x3e\x4a\x88\
+\xa3\xb8\x08\x6d\x05\xbb\x77\xc8\xea\xe2\x0b\x74\x6f\xe9\xd2\x42\
+\x7a\x70\x70\xf0\xe3\x0e\x2e\xa4\xd2\xae\xf0\x8a\xf7\x9a\xe3\x56\
+\xa7\x01\xd7\x78\xc3\x32\x95\x76\x79\x06\x6b\x8e\xdf\x78\xc1\x18\
+\xbf\xa9\xb4\xf1\x09\x86\x53\x48\xa5\x3d\xe2\x03\x3b\x4c\x6b\x8e\
+\xab\xd0\xcf\xa4\xd2\x6e\xf0\x89\x0b\xdc\x0f\xce\xb5\x3f\x3a\x20\
+\x0c\x5d\xeb\x01\x3f\x18\xe1\xa9\xe6\xb8\x1e\x8e\x60\x86\x2f\x6c\
+\x71\x5b\x73\x5c\x40\x48\xa5\xdd\x61\x81\x0d\x9e\x6b\x8e\xff\xfd\
+\xcf\x3f\xcc\x31\xe9\x01\x1c\x00\x73\x52\x2d\x71\xe4\x4a\x1b\x69\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x9e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8\x2e\x00\x00\x00\x22\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1\x42\x48\x2a\x0c\x19\
+\x18\x18\x91\x05\x10\x2a\xd1\x00\x00\xca\xb5\x07\xd2\x76\xbb\xb2\
+\xc5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd5\x35\xa3\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x06\xfe\x9f\x67\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+\x64\x60\x60\x62\x60\x60\x34\x44\xe2\x20\x73\x19\x90\x8d\x40\x02\
+\x00\x64\x40\x09\x75\x86\xb3\xad\x9c\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
+\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
+\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x00\x9e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8\x2e\x00\x00\x00\x22\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1\x42\x48\x2a\x0c\x19\
+\x18\x18\x91\x05\x10\x2a\xd1\x00\x00\xca\xb5\x07\xd2\x76\xbb\xb2\
+\xc5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x57\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x09\x49\x44\x41\x54\x68\x81\xed\
+\xda\xcd\x6d\xc2\x40\x14\x45\xe1\xf3\x8c\x49\x05\x51\x9a\x48\x36\
+\xec\x59\xd1\x05\xc5\x90\x45\x6a\xa3\x04\x52\x04\x88\x34\x60\x82\
+\x6e\x16\x33\xf9\xb1\xa5\x28\x44\x48\x5c\x5b\x7a\xdf\x8e\xc1\x8b\
+\x77\x8c\xcd\x66\x26\xa8\x24\xdd\x03\xcf\xc0\x12\x78\x02\xe6\x8c\
+\xcb\x09\xd8\x01\x5b\xe0\x25\x22\x8e\x5f\xdf\x48\x5a\x49\xda\x6b\
+\x3a\xf6\x92\x56\x00\xa1\x72\xe7\x5f\x81\x07\xc7\x6d\xbd\xc2\x01\
+\x78\x6c\x28\x8f\xcd\xd4\x86\x87\x32\xf3\xa6\xa5\x3c\xf3\x43\xe7\
+\x1b\x0f\x73\xa9\xd9\xe0\xf3\x32\x24\x75\xf4\x5f\xd8\x73\x44\xb4\
+\x37\x1c\xea\x62\x92\xde\xe9\x47\x9c\x1a\xc6\xf7\x6f\xf3\x1f\xf3\
+\xc6\x3d\xc1\xb5\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\
+\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\
+\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\xad\xa1\
+\xec\x80\x4f\x55\xd7\x52\xb6\xef\x17\x3f\x16\x67\x75\x37\x70\x8c\
+\x86\xdb\xac\xbb\x96\x72\xf6\x60\xf1\xc7\x85\x63\xb5\x9d\xfe\x51\
+\x83\x7a\xea\x63\x5d\x17\xa6\xe2\x00\xac\x23\xe2\x18\x9f\x2b\xf5\
+\x97\xd8\xf0\x7d\xdc\xe6\xce\x34\xdc\x6f\x3a\xfa\xc7\x6d\xde\x00\
+\x3e\x00\x47\xd7\xea\xb1\xad\x69\xe1\xd6\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x12\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xc4\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x5f\x88\x94\x55\x18\xc6\x7f\x33\x3b\x1a\x0b\x19\x15\x66\x17\
+\xca\x03\x49\x50\x4d\x09\x4a\x37\x51\x5e\x44\x29\x26\x66\x05\x5b\
+\xb9\xd2\x82\xb1\x50\x17\x91\x24\x74\x11\x08\x7a\xa1\x44\x17\x5d\
+\x54\x94\x04\xd6\x45\xe1\xa2\x15\x4c\xb1\x18\x99\xfd\x25\xd8\x08\
+\x82\x6e\x6a\x5d\xa4\x22\xe2\x81\xa8\x96\xd5\x28\xe8\x9f\xae\xd5\
+\xc5\xf9\xb6\xc6\xd9\xf9\xbe\x73\x66\xc6\x76\x66\xc0\xdf\xdd\x9c\
+\xef\x3d\xef\x79\x9f\x73\xe6\x9c\xf3\x7e\xdf\x39\x25\x32\x46\x6a\
+\x53\x4b\x81\xdd\xc0\x5a\xe0\x3a\x60\x11\xbd\xc5\x69\x60\x12\x98\
+\x00\xf6\x8c\x0d\x55\x67\x00\x4a\x00\x23\xb5\xa9\x5b\x80\x43\xc0\
+\xb2\xae\x85\xd7\x1a\xd3\xc0\xd6\xb1\xa1\xea\x07\xa5\xac\xe7\x8f\
+\xd1\x3f\xc1\xcf\x31\x0d\x5c\x5b\x26\xfc\x6d\xfa\x2d\x78\x08\x31\
+\xef\xaa\x10\xfe\xf3\x8d\x9c\x59\xe0\x60\x52\x19\x68\xf8\xbd\xb6\
+\x42\x98\xb0\xf5\x9c\x19\x1b\xaa\x56\x16\x28\xa0\x96\x18\xa9\x4d\
+\xcd\x72\xb6\x88\x55\x65\x7a\x6f\xb5\x69\x85\x45\xe5\x6e\x47\xd0\
+\x29\xe7\x05\x74\x9b\xf3\x02\xfe\x0f\x6c\xdf\x63\xfb\x90\xed\xf5\
+\x31\xdb\x9e\x13\x60\xfb\x11\xe0\x35\x60\x18\x38\x6a\x7b\x9f\xed\
+\xdc\x95\xb2\xa7\x04\xd8\x1e\x06\x9e\xaa\x2b\x2a\x01\x0f\x01\x2f\
+\xe4\xd5\xe9\x19\x01\xb6\xd7\x01\x2f\x93\x25\x98\x0d\x6c\xb3\xfd\
+\x68\xb3\x7a\x3d\x21\xc0\xf6\xf5\xc0\xeb\xc0\xe2\x02\xb3\x8d\xcd\
+\x0a\xbb\x2e\xc0\xf6\x95\xc0\x5b\xc0\x92\x88\xe9\x8b\xcd\x0a\xbb\
+\x2a\xc0\xf6\xe5\xc0\x51\xe2\xd9\xf0\x93\x92\x5e\x69\xf6\xa0\x6b\
+\x02\x6c\x2f\x01\x8e\x00\x2b\x23\xa6\x07\x80\xc7\xf2\x1e\x76\x45\
+\x80\xed\xc5\xc0\x1b\xc0\x9a\x88\xe9\xdb\xc0\xa8\xa4\xbf\xf3\x0c\
+\x16\x5c\x80\xed\x32\xa1\x57\x6f\x8d\x98\x7e\x0a\xdc\x2d\x69\xb6\
+\xc8\xa8\x1b\x23\xf0\x34\x70\x6f\xc4\xe6\x4b\x60\x93\xa4\x5f\x63\
+\xce\x92\x04\xd8\x2e\x65\x3d\xd7\x11\xb6\x77\x02\xdb\x23\x66\xdf\
+\x03\x1b\x24\xcd\xa4\xf8\x2c\x0c\x2a\x0b\x7c\x07\xf0\x3b\x30\x69\
+\x7b\x55\x52\xa4\xcd\x7d\x8d\x02\x8f\x47\xcc\x7e\x06\x6e\x93\xf4\
+\x6d\xaa\xdf\x5c\x01\x59\xfe\x31\x4e\xd8\xda\x2f\x00\xae\x01\xde\
+\xb3\x7d\x55\xaa\xf3\x3a\x5f\x9b\x81\xfd\x11\xb3\x3f\x81\x3b\x25\
+\x7d\xde\x8a\xef\xa2\x11\x78\x0e\xd8\xdc\x50\xb6\x0c\x78\xdf\xf6\
+\x15\xa9\x0d\xd8\xbe\x11\x78\x95\xf9\x2f\xe4\xf5\xfc\x05\xdc\x27\
+\xe9\xa3\x54\xbf\x73\x34\x15\x90\xf5\xd8\x83\x39\x75\x96\x13\x46\
+\x62\x79\xcc\xb9\xed\x2a\x70\x18\x18\x8c\x98\x3e\x2c\xa9\x16\xf3\
+\xd7\x8c\xbc\x11\xb8\x34\x52\x6f\x25\x41\xc4\x65\x79\x06\xb6\x57\
+\x10\x76\xd9\x98\xaf\xbd\x92\x9e\x8f\xd8\xe4\x92\x27\xe0\x20\x61\
+\x1d\x2e\xe2\x6a\xe0\x1d\xdb\x17\x37\x3e\xb0\x7d\x09\x21\xf8\x15\
+\x11\x1f\xfb\x25\xed\x8e\x46\x59\x40\x53\x01\x92\x4e\x13\xb2\xbf\
+\x2f\x22\xf5\x57\x03\x47\x6c\x5f\x38\x57\x60\x7b\x90\xf0\xb7\xa9\
+\x46\xea\x8e\x13\x72\xfd\x8e\xc8\x9d\xc4\x92\x4e\x02\xeb\x81\xaf\
+\x22\x3e\x6e\x00\x0e\xdb\x1e\xb4\x3d\x40\x98\xb0\x37\x45\xea\x4c\
+\x00\xc3\x92\x3a\xfe\x02\x58\xb8\x0f\x48\xfa\x11\x58\x07\x38\xe2\
+\xe7\x66\xa0\x46\x58\x2a\x1b\x57\xae\x46\x26\x81\x3b\x24\xfd\x91\
+\x18\x63\x21\xd1\xdd\x55\x92\x09\x79\xcb\x0f\x11\xd3\x8d\xc0\x68\
+\xc4\xc6\x84\x8d\xea\xa7\xb4\xf0\xe2\x24\xa5\x07\x92\xbe\x26\x8c\
+\xc4\x89\x0e\xda\x3a\x49\x48\x11\xbe\xeb\xc0\xc7\x3c\x92\xf3\x1b\
+\x49\xc7\x80\x0d\xc0\x2f\x6d\xb4\xf3\x1b\x70\xbb\xa4\xe3\x6d\xd4\
+\x2d\xa4\xa5\x04\x4d\xd2\x67\xc0\xa6\x2c\xa0\x54\x66\x81\x2d\x92\
+\x3e\x69\xa5\xad\x54\x5a\xce\x30\x25\x4d\x00\x77\x11\x72\x97\x14\
+\x1e\x90\xf4\x66\xab\xed\xa4\xd2\x56\x8a\x2c\xe9\x5d\x60\x0b\xa1\
+\x77\x8b\xd8\x29\xe9\xa5\x76\xda\x48\xa5\xed\x1c\x5f\xd2\x38\xb0\
+\x8d\x90\x88\x35\xe3\x59\x49\x4f\xb4\xeb\x3f\x95\x8e\x5e\x52\x24\
+\x1d\x04\xee\x67\xfe\x9c\xd8\x07\xec\xe8\xc4\x77\x2a\x1d\x1f\x25\
+\x49\x3a\x60\xfb\x63\xc2\x06\x76\x11\xf0\x61\x36\x4f\x16\x84\x73\
+\x72\x16\x26\xe9\x1b\xe0\x99\x73\xe1\xab\x55\xca\x84\x13\xf0\x7e\
+\xe5\x54\x85\x90\x9b\xd4\x7f\x9f\x19\xc8\x4e\x03\x7b\x91\xc6\xb7\
+\xba\xc9\x0a\x21\x33\x6c\xfc\xc0\x54\xf4\xfa\xd7\x4b\x4c\x94\x81\
+\x3d\x84\x63\xfb\x7e\x63\x1a\xd8\x5b\xce\x6e\x7d\x6c\xa5\xbf\x44\
+\xcc\x5d\xf6\x98\xf9\xf7\x30\x21\xbb\xf4\xb1\x8b\xff\xae\xdb\x14\
+\x7d\xab\xef\x06\xa7\x38\xfb\xba\xcd\x09\x80\x7f\x00\xc4\x1e\x10\
+\x29\x33\x5b\x85\xf7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x01\xe1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x93\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x3b\x4e\xc3\x40\x10\x86\xbf\x71\x1c\x2a\xe8\x10\xe5\x36\x94\
+\xd0\xa4\xa1\x8a\x28\x22\x0a\x0a\x44\x9f\x9e\x0b\x70\x80\x50\x70\
+\x01\x2e\xc0\x15\x68\x80\x13\xa0\x1c\x21\x50\x91\x66\xbb\x44\xa1\
+\x42\x34\x79\x68\x28\x6c\x1e\xb1\xfc\x48\x08\xc9\xda\xd2\x7e\x9d\
+\x77\x5c\xfc\x9f\xb3\x1e\x39\xda\x11\x62\x54\x75\x17\xb8\x02\x9a\
+\xc0\x21\x50\xa7\x5c\x4c\x80\x1e\xd0\x05\xae\x45\x64\xf4\x5d\x51\
+\xd5\x96\xaa\x0e\xb4\x3a\x0c\x54\xb5\x05\x20\x1a\x3d\xf9\x67\x60\
+\xcf\xc5\x63\x5d\x81\x21\x70\x10\x10\x6d\x9b\xaa\x85\x87\x28\x73\
+\x27\x24\xda\xf3\x49\x66\x1b\x0e\xb3\x28\xb5\xc4\x75\x53\x54\x75\
+\xcc\xfc\x0b\x3b\x13\x91\x70\x83\xa1\x16\x46\x55\xa7\xcc\x4b\x4c\
+\x02\xca\xd7\x6d\x96\xa1\x1e\xb8\x4e\xb0\x2a\x5e\xc0\x35\x5e\xc0\
+\x35\x5e\xc0\x35\x5e\xc0\x35\x5e\xc0\x35\x5e\xc0\x35\x85\x9f\xcd\
+\xd6\xda\x13\xe0\x08\xd8\x5e\x7f\x9c\x39\xa6\xc0\x0b\xf0\x60\x8c\
+\xf9\xc8\xba\x49\x54\x55\x13\x6b\x33\x11\x09\xad\xb5\x21\x70\x07\
+\x9c\xaf\x31\xe4\x22\xf4\x81\x53\x63\xcc\x6b\xca\xff\x81\xdc\x2d\
+\x74\x89\xfb\xf0\x00\xfb\xc0\x6d\x56\x31\x4f\xe0\xec\xff\xb3\xfc\
+\x99\x63\x6b\xed\x4e\x5a\xa1\xf2\x2f\x71\x9e\xc0\xe3\xc6\x52\x14\
+\xf3\x64\x8c\x79\x4f\x2b\xe4\x09\xdc\x00\xf7\xeb\xc9\xb3\x14\x7d\
+\xe0\x22\xab\x98\xd9\x85\xbe\x2e\xca\xd4\x46\xd3\xba\x50\xa1\x40\
+\x99\x58\xb6\x8d\x56\x02\x2f\xe0\x1a\x2f\xe0\x1a\x2f\xe0\x1a\x2f\
+\xe0\x1a\x2f\xe0\x1a\x2f\xe0\x9a\x80\xe8\x04\xbc\xaa\x8c\x43\xa2\
+\xe3\xfb\xc6\xaf\xc5\x5a\xfc\xd9\x5a\x46\x92\xc7\xac\xbd\x90\x68\
+\xf6\xa0\x51\x70\x63\x59\xe9\x56\x7f\xd4\x20\x9e\xfa\x68\xc7\x0b\
+\x55\x61\x08\xb4\x45\x64\x24\x5f\x2b\xf1\x2f\xd1\xe1\x67\xdc\x66\
+\xcb\x51\xb8\x2c\xc6\xcc\x8f\xdb\xbc\x01\x7c\x02\x6d\x77\x23\xb3\
+\xd4\x95\x53\x76\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x01\x76\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x28\x49\x44\x41\x54\x68\x81\xed\
+\xda\xb1\x4a\xc3\x50\x14\x87\xf1\x2f\x37\xb7\xe0\xae\xf8\x00\x82\
+\x53\x75\xe8\xde\xc9\x6c\x79\x80\x40\x1f\x46\x87\xfa\x22\x6e\x42\
+\xdc\xb3\xc5\xa9\x2f\x20\xb4\x5d\x3a\x74\x0f\x7d\x82\x6a\xc1\xe1\
+\xa6\x50\xb3\x68\x10\xfa\xcf\x85\xf3\xdb\x52\x3a\x9c\xaf\xdc\x66\
+\x39\x37\xa1\x95\xe5\xc5\x15\xf0\x04\x4c\x81\x3b\x60\xc4\xb0\x7c\
+\x02\x4b\x60\x01\xcc\xeb\xaa\xdc\x01\x24\x00\x59\x5e\x3c\x00\xaf\
+\xc0\xb5\x6c\xbc\x7e\x1a\x60\x56\x57\xe5\x7b\xd2\xfe\xf2\x2b\xe2\
+\x19\xfe\xa8\x01\xc6\x8e\x70\x6c\x62\x1b\x1e\xc2\xcc\x8f\x9e\x70\
+\xe6\xbb\x0e\x67\x1e\xe6\xaf\xd2\xce\xf3\xd4\x13\xfe\xb0\xa7\x0e\
+\x75\x55\xfa\x33\x0d\xd4\x4b\x96\x17\x5f\xfc\x8c\xb8\x77\x0c\xef\
+\x6d\xd3\xc7\xc8\xa9\x27\xf8\x2f\x0b\x50\xb3\x00\x35\x0b\x50\xb3\
+\x00\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\
+\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\x35\
+\x0b\x50\x73\x84\x0d\x78\xac\xf6\x9e\xb0\xbe\x9f\x9c\x7c\x98\xb6\
+\xdb\xc0\x21\xea\xae\x59\x97\x9e\x70\xf7\x60\xf2\xcb\x17\x87\x6a\
+\xe1\x80\x39\x61\x6d\x1f\x9b\x06\x78\x76\xed\xad\x8f\x19\x71\x45\
+\x1c\x2f\x7b\xec\x52\x80\xed\x66\xb5\xbd\xb9\x1d\xbf\x00\x17\x84\
+\xc5\xf7\x25\xc3\x3b\x46\x7b\xe0\x03\x78\x03\x8a\xba\x2a\xd7\x00\
+\xdf\xa4\xb5\x36\xa2\xca\x99\x74\x47\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
+\x52\x2b\x9c\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
+\x05\x73\x3e\xc0\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x4e\
+\x8a\x00\x9c\x93\x22\x80\x61\x1a\x0a\x00\x00\x29\x95\x08\xaf\x88\
+\xac\xba\x34\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x7e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x05\x17\x69\x54\x58\x74\x58\x4d\x4c\
+\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\
+\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\
+\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\
+\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\
+\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\
+\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\
+\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\
+\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\
+\x43\x6f\x72\x65\x20\x37\x2e\x31\x2d\x63\x30\x30\x30\x20\x37\x39\
+\x2e\x37\x61\x37\x61\x32\x33\x36\x2c\x20\x32\x30\x32\x31\x2f\x30\
+\x38\x2f\x31\x32\x2d\x30\x30\x3a\x32\x35\x3a\x32\x30\x20\x20\x20\
+\x20\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\
+\x74\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\
+\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\
+\x62\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\
+\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\
+\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\
+\x65\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\
+\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\x6f\x75\x72\
+\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\
+\x68\x6f\x74\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x20\x78\
+\x6d\x70\x3a\x43\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\x3d\x22\
+\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\
+\x32\x32\x2e\x35\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x20\
+\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x65\x44\x61\x74\x65\x3d\x22\
+\x32\x30\x32\x31\x2d\x31\x31\x2d\x31\x30\x54\x31\x37\x3a\x33\x39\
+\x3a\x30\x32\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\
+\x65\x74\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\
+\x31\x2d\x31\x31\x2d\x31\x30\x54\x31\x37\x3a\x33\x39\x3a\x30\x32\
+\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\x6f\x64\x69\
+\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\x31\x31\x2d\
+\x31\x30\x54\x31\x37\x3a\x33\x39\x3a\x30\x32\x2b\x30\x31\x3a\x30\
+\x30\x22\x20\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3d\x22\x69\x6d\
+\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x49\
+\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\
+\x69\x64\x3a\x66\x31\x37\x65\x62\x62\x32\x33\x2d\x65\x36\x32\x61\
+\x2d\x33\x39\x34\x36\x2d\x61\x39\x37\x35\x2d\x64\x34\x66\x36\x61\
+\x62\x34\x34\x64\x34\x30\x39\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x44\
+\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\
+\x69\x64\x3a\x66\x31\x37\x65\x62\x62\x32\x33\x2d\x65\x36\x32\x61\
+\x2d\x33\x39\x34\x36\x2d\x61\x39\x37\x35\x2d\x64\x34\x66\x36\x61\
+\x62\x34\x34\x64\x34\x30\x39\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x4f\
+\x72\x69\x67\x69\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\
+\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x66\x31\x37\x65\x62\
+\x62\x32\x33\x2d\x65\x36\x32\x61\x2d\x33\x39\x34\x36\x2d\x61\x39\
+\x37\x35\x2d\x64\x34\x66\x36\x61\x62\x34\x34\x64\x34\x30\x39\x22\
+\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\x72\
+\x4d\x6f\x64\x65\x3d\x22\x33\x22\x20\x70\x68\x6f\x74\x6f\x73\x68\
+\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\x73\
+\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2d\x32\x2e\x31\
+\x22\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\x74\x6f\x72\
+\x79\x3e\x20\x3c\x72\x64\x66\x3a\x53\x65\x71\x3e\x20\x3c\x72\x64\
+\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\
+\x6e\x3d\x22\x63\x72\x65\x61\x74\x65\x64\x22\x20\x73\x74\x45\x76\
+\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\
+\x70\x2e\x69\x69\x64\x3a\x66\x31\x37\x65\x62\x62\x32\x33\x2d\x65\
+\x36\x32\x61\x2d\x33\x39\x34\x36\x2d\x61\x39\x37\x35\x2d\x64\x34\
+\x66\x36\x61\x62\x34\x34\x64\x34\x30\x39\x22\x20\x73\x74\x45\x76\
+\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x31\x31\x2d\
+\x31\x30\x54\x31\x37\x3a\x33\x39\x3a\x30\x32\x2b\x30\x31\x3a\x30\
+\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\
+\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\
+\x6f\x74\x6f\x73\x68\x6f\x70\x20\x32\x32\x2e\x35\x20\x28\x57\x69\
+\x6e\x64\x6f\x77\x73\x29\x22\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\
+\x53\x65\x71\x3e\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\
+\x74\x6f\x72\x79\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\
+\x44\x46\x3e\x20\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\
+\x20\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\
+\x72\x22\x3f\x3e\x07\x62\x0c\x81\x00\x00\x00\x0d\x49\x44\x41\x54\
+\x08\x1d\x63\xf8\xff\xff\x3f\x03\x00\x08\xfc\x02\xfe\xe6\x0c\xff\
+\xab\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x9f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x14\x1f\xf9\
+\x23\xd9\x0b\x00\x00\x00\x23\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x0d\xe6\x7c\x80\xb1\x18\x91\x05\x52\x04\xe0\x42\x08\x15\x29\x02\
+\x0c\x0c\x8c\xc8\x02\x08\x95\x68\x00\x00\xac\xac\x07\x90\x4e\x65\
+\x34\xac\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1c\x1f\x24\
+\xc6\x09\x17\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
+\x05\xff\xcf\xc3\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x0e\
+\xa3\x21\x9c\xc3\x68\x88\x61\x1a\x0a\x00\x00\x6d\x84\x09\x75\x37\
+\x9e\xd9\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd5\x35\xa3\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x06\xfe\x9f\x67\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+\x64\x60\x60\x62\x60\x60\x34\x44\xe2\x20\x73\x19\x90\x8d\x40\x02\
+\x00\x64\x40\x09\x75\x86\xb3\xad\x9c\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
+\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
+\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x03\xff\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xb1\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x4f\x68\x1e\x45\x18\xc6\x7f\x9b\x26\x85\x82\x15\x15\xab\x42\
+\xcb\x03\x06\x05\xa9\x0a\x8a\xb7\x52\x3c\xd4\x96\xaa\xb5\xe0\x41\
+\xad\xc5\x43\x25\xa0\x07\x51\xcc\x4d\x28\xb4\x07\x45\x3c\x78\xb0\
+\xa0\x52\x50\x0f\x8a\x50\xf5\x50\xa5\x28\xc6\xbf\xa8\x34\x20\x08\
+\x9e\x4c\x41\xc5\x83\x3c\x20\xd2\x90\x2a\x0a\xfe\x69\x92\x3a\x1e\
+\x66\x8d\x5f\xd6\xdd\x9d\xfd\xf6\x8b\xd9\x2f\xd0\xdf\xed\x9b\x79\
+\xe7\x9d\xe7\x9d\xd9\x99\x79\x67\xbf\xcd\xc8\x09\x21\x5c\x0a\x1c\
+\x06\xb6\x03\xd7\x01\x63\x0c\x17\x0b\xc0\x0c\x30\x0d\x3c\x9e\x65\
+\xd9\xdc\x52\x4d\x08\x61\x47\x08\xe1\x74\x58\x3b\x9c\x0e\x21\xec\
+\x00\xc8\x42\x1c\xf9\x53\xc0\x65\x5d\x0c\xeb\x00\xcc\x02\xd7\x8e\
+\x10\x1f\x9b\xb5\x26\x1e\xa2\xe6\x43\xa3\xc4\x67\xbe\xc8\xb9\x55\
+\x16\xd3\x94\x75\x85\xdf\xdb\xb3\x10\xc2\x3c\xcb\x17\xec\xb9\x2c\
+\xcb\x46\x57\x51\x54\x63\x42\x08\x8b\x2c\x0f\x62\x61\x84\xe1\xdb\
+\x6d\xfa\x61\x6c\xa4\x6b\x05\x83\x72\x3e\x80\xae\x39\x1f\xc0\xff\
+\x81\xed\xbb\x6d\xbf\x66\x7b\x57\xca\x36\x0b\x21\x84\x42\x59\xa7\
+\xdb\xa8\xed\x47\x81\x23\xf9\xcf\x00\x1c\x05\x26\x25\x2d\x94\x6c\
+\xa3\xc3\x35\x03\xb6\xef\x05\x9e\xe9\x29\xca\x80\x87\x80\x17\xab\
+\xda\x0c\xcd\x81\x65\x7b\x27\xf0\x0a\x51\x74\x91\x03\xb6\xbf\x2a\
+\x6b\x37\x14\x33\x60\xfb\x26\xe0\x4d\x60\x7d\x8d\xd9\x6d\x65\x85\
+\x9d\x07\x60\xfb\x2a\xe0\x5d\x60\x63\xc2\xf4\xa5\xb2\xc2\x4e\x03\
+\xb0\x7d\x39\xf0\x3e\xe9\x6c\xf8\x69\x49\xaf\x97\x55\x74\x16\x80\
+\xed\x8d\xc0\x14\x30\x9e\x30\x7d\x15\x78\xac\xaa\xb2\x93\x00\x6c\
+\xaf\x07\xde\x02\x6e\x4c\x98\xbe\x07\x4c\x48\x2a\x6e\xf5\x4b\xac\
+\x7a\x00\xb6\x47\x88\xa3\x7a\x4b\xc2\xf4\x0b\xe0\x2e\x49\x8b\x75\
+\x46\x5d\xcc\xc0\x11\xe0\x9e\x84\xcd\xb7\xc0\x1e\x49\xbf\xa5\x9c\
+\x35\x0a\xc0\x76\x96\x8f\xdc\x40\xd8\x3e\x08\x3c\x92\x30\xfb\x11\
+\xd8\x2d\x69\x2e\x61\x07\x24\x02\xc8\x85\x4f\x02\x7f\x00\x33\xb6\
+\xaf\x6f\xa4\xb4\xdc\xd7\x04\xf0\x64\xc2\xec\x17\xe0\x56\x49\xdf\
+\x37\xf5\x5b\x99\x0b\xd9\x1e\x03\x8e\x03\x7b\x7b\xea\x66\x81\x9b\
+\x25\x7d\xd3\xb4\x03\x00\xdb\x7b\x89\x8b\xb6\x78\xa7\xed\xe5\x2c\
+\x71\xe4\x3f\xab\x32\xe8\x37\x17\x7a\x8e\xe5\xe2\x21\xee\xd7\x1f\
+\xdb\xbe\xb2\x56\x71\x0f\xb6\xb7\x01\x6f\x14\x3b\x2e\xf0\x17\x70\
+\x5f\x9d\xf8\x2a\x4a\x03\xc8\x47\xec\xc1\x8a\x36\x9b\x81\x8f\x6c\
+\x6f\x4e\x39\xb7\xbd\x15\x78\x1b\xd8\x90\x30\x7d\x58\xd2\xf1\x94\
+\xbf\x32\xaa\x66\xe0\x92\x44\xbb\x71\x62\x10\x9b\xaa\x0c\x6c\x6f\
+\x21\x9e\xb2\x29\x5f\x4f\x48\x3a\x9a\xb0\xa9\xa4\x2a\x80\x63\xc4\
+\x7d\xb8\x8e\x6b\x80\x0f\x6c\x5f\x54\xac\xb0\x7d\x31\x51\xfc\x96\
+\x84\x8f\x17\x24\x1d\x4e\xaa\xac\xa1\x34\x00\x49\x0b\xc4\xec\xaf\
+\x34\x85\xed\xe1\x06\x60\xca\xf6\x05\xff\x14\xd8\xde\x40\x7c\x6c\
+\xb6\x26\xda\x9e\x20\xe6\xfa\x03\x51\x7b\x23\xcb\x93\xad\x93\xc0\
+\xd5\x09\x3f\x9f\x02\xb7\x03\xf3\xc4\xdd\xa6\xb8\xf8\x8b\x4c\x03\
+\xbb\x24\xfd\xd9\x8f\xd8\xb2\x5d\x28\x79\xa5\xb4\x2d\x62\x10\x4a\
+\xf8\x9f\x22\x1e\x42\x13\x09\xbb\x19\xe2\x56\xfc\x73\x23\xd5\x3d\
+\xb4\x0a\x00\x96\x72\xf6\x93\xc0\x15\xfd\x76\x5a\xc0\xc0\x36\x49\
+\x3f\xb4\x69\xdc\xfa\x4e\x2c\xe9\x3b\x60\x27\x70\xa6\x4d\xc7\x39\
+\x3f\x11\x0f\xaa\x56\xe2\xab\x68\x9c\xdf\x48\x3a\x05\xec\x06\x7e\
+\x6d\xd1\xcf\xef\xc0\x1d\x92\xbe\x6e\xd1\xb6\x96\xbe\x12\x34\x49\
+\x5f\x02\x7b\x72\x41\x4d\x59\x04\xf6\x49\xfa\xbc\x9f\xbe\x9a\xd2\
+\x77\x86\x29\x69\x1a\xb8\x93\x98\xbb\x34\xe1\x01\x49\xef\xf4\xdb\
+\x4f\x53\x5a\xa5\xc8\x92\x3e\x04\xf6\x11\x47\xb7\x8e\x83\x92\x5e\
+\x6e\xd3\x47\x53\x5a\xe7\xf8\x92\x4e\x00\x07\x88\x89\x58\x19\xcf\
+\x4a\x7a\xaa\xad\xff\xa6\x0c\x74\x49\x91\x74\x0c\xb8\x9f\xff\xae\
+\x89\xe7\x81\xc9\x41\x7c\x37\x65\x45\xde\x8d\xda\x1e\x27\x9e\xbe\
+\x17\x02\x9f\xe4\xeb\x64\xc5\x69\x7d\x90\x0d\x0b\x55\x07\xd9\x42\
+\x37\x72\x56\x84\xf9\x51\x62\x6e\xd2\xfb\x7e\x66\x5d\x1e\xe9\x30\
+\x52\xbc\xd5\xcd\x8c\x12\x33\xc3\xe2\x0b\xa6\xba\xeb\xdf\x30\x31\
+\xbd\xf6\x3f\x35\xc8\xbf\xfa\xd8\x9f\x17\xac\x15\x66\x81\xfd\x59\
+\x96\xcd\x2d\xfd\x99\x90\xcf\xc4\x21\xfe\xfd\xdc\xa6\xee\x5d\x7d\
+\x17\xcc\xb3\xfc\x73\x9b\x33\x00\x7f\x03\xd9\x1a\xfb\xdb\xbb\xa7\
+\x8f\x07\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x08\
+\x06\xc5\x8e\xa5\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x79\x00\x70\x00\x65\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x11\
+\x0b\xda\x30\xa7\
+\x00\x62\
+\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x0f\
+\x06\x53\x25\xa7\
+\x00\x62\
+\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x01\x87\xae\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x20\
+\x0f\xd4\x1b\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1b\
+\x03\x5a\x32\x27\
+\x00\x63\
+\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\
+\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x02\x9f\x05\x87\
+\x00\x72\
+\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x04\xa2\xfc\xa7\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1c\
+\x0e\x3c\xde\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x01\x2e\x03\x27\
+\x00\x63\
+\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x15\
+\x03\x27\x72\x67\
+\x00\x63\
+\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\
+\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1d\
+\x09\x07\x81\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x23\
+\x06\xf2\x1a\x47\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\
+\x00\x6e\x00\x67\
+\x00\x17\
+\x0c\x65\xce\x07\
+\x00\x6c\
+\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\
+\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x05\x8f\x9d\x07\
+\x00\x62\
+\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x14\
+\x07\xec\xd1\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x16\
+\x01\x75\xcc\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x04\x5e\x2d\xa7\
+\x00\x62\
+\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x5f\x00\x6f\x00\x6e\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x01\x73\x8b\x07\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x11\
+\x00\xb8\x8c\x07\
+\x00\x6c\
+\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x11\
+\x01\x1f\xc3\x87\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x0c\
+\x06\xe6\xe6\x67\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1c\
+\x08\x3f\xda\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x66\x00\x6f\x00\x63\x00\x75\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x03\x0e\xe4\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x20\
+\x09\xd7\x1f\xa7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x66\x00\x6f\x00\x63\x00\x75\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1f\
+\x0a\xae\x27\x47\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x18\
+\x03\x8e\xde\x67\
+\x00\x72\
+\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\
+\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x0c\xe2\x68\x67\
+\x00\x74\
+\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x70\x00\x61\x00\x72\x00\x65\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x15\
+\x0f\xf3\xc0\x07\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\
+\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x03\x8d\x04\x47\
+\x00\x72\
+\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x0e\
+\x0e\xde\xfa\xc7\
+\x00\x6c\
+\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x17\
+\x0c\xab\x51\x07\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\
+\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x05\x11\xe0\xe7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x66\x00\x6f\x00\x63\x00\x75\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct_v1 = b"\
+\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\x16\x00\x02\x00\x00\x00\x20\x00\x00\x00\x03\
+\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x33\x3b\
+\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x33\xe5\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x15\xf1\
+\x00\x00\x03\x86\x00\x00\x00\x00\x00\x01\x00\x00\x32\x99\
+\x00\x00\x03\x26\x00\x00\x00\x00\x00\x01\x00\x00\x29\x59\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xbb\
+\x00\x00\x01\x30\x00\x00\x00\x00\x00\x01\x00\x00\x13\x37\
+\x00\x00\x04\x56\x00\x00\x00\x00\x00\x01\x00\x00\x36\x8b\
+\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x16\x9b\
+\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\
+\x00\x00\x05\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x44\xc9\
+\x00\x00\x05\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x00\
+\x00\x00\x03\x58\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xb8\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x13\xdb\
+\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x00\x46\xc1\
+\x00\x00\x02\xce\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x26\
+\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x07\xb1\
+\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x34\x8e\
+\x00\x00\x02\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x7c\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x5a\
+\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x00\x35\x30\
+\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x17\x45\
+\x00\x00\x04\x90\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xa1\
+\x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x86\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x7c\
+\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x46\x17\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xa4\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x14\x84\
+\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x45\x6d\
+\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x10\x9b\
+\x00\x00\x05\x74\x00\x00\x00\x00\x00\x01\x00\x00\x44\x26\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x16\x00\x02\x00\x00\x00\x20\x00\x00\x00\x03\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x33\x3b\
+\x00\x00\x01\x7b\xe9\x78\x46\xdd\
+\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x33\xe5\
+\x00\x00\x01\x7b\xe9\x78\x46\xdb\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x15\xf1\
+\x00\x00\x01\x7b\xe9\x78\x46\xd9\
+\x00\x00\x03\x86\x00\x00\x00\x00\x00\x01\x00\x00\x32\x99\
+\x00\x00\x01\x7b\xe9\x78\x46\xe0\
+\x00\x00\x03\x26\x00\x00\x00\x00\x00\x01\x00\x00\x29\x59\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc7\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xbb\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc5\
+\x00\x00\x01\x30\x00\x00\x00\x00\x00\x01\x00\x00\x13\x37\
+\x00\x00\x01\x7b\xe9\x78\x46\xdd\
+\x00\x00\x04\x56\x00\x00\x00\x00\x00\x01\x00\x00\x36\x8b\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc4\
+\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x16\x9b\
+\x00\x00\x01\x7b\xe9\x78\x46\xda\
+\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\
+\x00\x00\x01\x7b\xe9\x78\x46\xd9\
+\x00\x00\x05\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x44\xc9\
+\x00\x00\x01\x7b\xe9\x78\x46\xde\
+\x00\x00\x05\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x00\
+\x00\x00\x01\x7b\xe9\x78\x46\xde\
+\x00\x00\x03\x58\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xb8\
+\x00\x00\x01\x7b\xe9\x78\x46\xd7\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x13\xdb\
+\x00\x00\x01\x7b\xe9\x78\x46\xda\
+\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x00\x46\xc1\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc4\
+\x00\x00\x02\xce\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x26\
+\x00\x00\x01\x7b\xe9\x78\x46\xd8\
+\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x07\xb1\
+\x00\x00\x01\x7b\xe9\x78\x46\xd8\
+\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x34\x8e\
+\x00\x00\x01\x7b\xe9\x78\x46\xdf\
+\x00\x00\x02\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x7c\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc5\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x5a\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc2\
+\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x00\x35\x30\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc8\
+\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x17\x45\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc3\
+\x00\x00\x04\x90\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xa1\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc6\
+\x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x86\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc7\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x7b\xe9\x78\x46\xd7\
+\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x7c\
+\x00\x00\x01\x7b\xe9\x78\x46\xdc\
+\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x46\x17\
+\x00\x00\x01\x7b\xe9\x78\x46\xdb\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xa4\
+\x00\x00\x01\x7d\x0a\xb7\x38\x27\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x14\x84\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc9\
+\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x45\x6d\
+\x00\x00\x01\x7b\xe9\x78\x46\xdc\
+\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x10\x9b\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc6\
+\x00\x00\x05\x74\x00\x00\x00\x00\x00\x01\x00\x00\x44\x26\
+\x00\x00\x01\x7b\xe9\x78\x46\xdf\
+"
+
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+ rcc_version = 1
+ qt_resource_struct = qt_resource_struct_v1
+else:
+ rcc_version = 2
+ qt_resource_struct = qt_resource_struct_v2
+
+
+def qInitResources():
+ QtCore.qRegisterResourceData(
+ rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data
+ )
+
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(
+ rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data
+ )
diff --git a/usd_qtpy/style/pyside2_resources.py b/usd_qtpy/style/pyside2_resources.py
new file mode 100644
index 0000000..2aa84d0
--- /dev/null
+++ b/usd_qtpy/style/pyside2_resources.py
@@ -0,0 +1,1494 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed Nov 10 17:40:15 2021
+# by: The Resource Compiler for PySide2 (Qt v5.12.5)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+
+qt_resource_data = b"\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x07\xad\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00x\xccD\x0d\
+\x00\x00\x05RiTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \
+\x0a branch_close<\
+/rdf:li>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\
+/rdf:RDF>\x0a\x0a$\xe15\x97\x00\x00\
+\x01\x83iCCPsRGB IEC61\
+966-2.1\x00\x00(\x91u\x91\xcf+D\
+Q\x14\xc7?fh\xfc\x18\x8dba1e\x12\x16B\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3\
+j\xdex\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\
+\xc0VY+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\
+\x99s;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8a\
+fV\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\
+\xb7T\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\
+\xa8\xa8\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\
+\x12nRR\xb1E\xe1\x13\xe1.C.(|c\xeb\
+\xf1\x22?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0\
+/\xf9\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\
+\xfc\xdc\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&\
+D\x00\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>z\
+dE\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0\
+D\x92\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19i\
+rv\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\
+\xac\xd7vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\
+\x0fp\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9eu8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\
+\x0a\x92S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\
+\xc5\x9e\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e\
+9\xefY\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00rIDAT\x18\x95m\xcf1\x0a\
+\xc2P\x14D\xd1\xe8\x02\xb4W\x08\xd6Ia\x99JC\
+t\x15\x82\xabI6(\xee@\x04\xdb\xa8\x95Xx,\
+\xf2\x09\xe1\xf3\x07\xa6\x9a\xfb\xe0\xbe\x0c\x1b\xb4Xdq\
+p0\xe4\x82U\x0a8\xe3\x8b\x1b\x8a\x14p\xc4\x1b=\
+v)`\x8b\x07>\xa8\xe6\xd1\xfe\x0b\x9d\x85\x8eW\x0d\
+^x\xa2\x9e\x0e\xa7 tG9\x1d\xf6\xe1\x95+\xd6\
+\xb1D\x8e\x0e\xcbX\xf0\x0fR\x8ay\x18\xdc\xe2\x02p\
+\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x043\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xe5IDATh\x81\xed\
+\x9aM\x88\x1cE\x14\xc7\x7f3;\x89.\x18\xf13\x1e\
+\x92\x8b\x8b\xa2&\x06\x14/\xa29\x88\x15\x89\xa9\x18\x15\
+\xd1\xca\x06\x0f\x91\x05=\x88bnB\xc0\x1c\x12\xc4\x83\
+\x07\x15\x0dB\x14\x89\x04\xa2\x96DY\x22/F}\x8a\
+\xb0\x22\x08\x1e4\xbb\x22F\x8c,\x88\xba\xc4\x88\x82_\
+\xc9F=T\x0f\x8c\xbd\xdd]\xdd\xd3a\xa7\x07\xfc\xdd\
+\xa6\xfa\xd5\xab\xf7\xea\xf3\xdf\xd5\xd3\x22\xc1Xw\x11\xb0\
+\x03X\x0b\x5c\x0d,\xa1Y\x9c\x02\xa6\x81)`\xa7\x8a\
+?\x0e\xd0\x020\xd6\xdd\x0c\xbc\x02,\x1fXx\xd5\x98\
+\x03\xb6\xa8\xf8\xf7[I\xcf\xcf0<\xc1w\x99\x03V\
+\xb7\x09\xd3f\xd8\x82\x87\x10\xf3c\x1d\xc2\x9cOsz\
+\x91\x83)\xcbH\xea\xf7\xda\x0ea\xc1\xf6rZ\xc5w\
+\x16)\xa0J\x18\xeb\xe6\xf9o\x12k\xda4o\xb7\xa9\
+\xc2\x92\xf6\xa0#\xa8\xcb\xff\x09\x0c\x9a\xa1O\xa0\xa9\xbb\
+\xcd=\xc0]\xc0K*\xfe\xdd\x22\xdb\xc6\x8d\x80\xb1\xee\
+\x11\xc0\x03\xe3\xc0ac\xddnc]\xeeN\xd9\xa8\x04\
+\x8cu\xe3\xc0S=E-\xe0A\xe0\x85\xbc:\x8d\x99\
+B\xc6\xbau\xc0\xcb$\x023\xc5Vc\xdd\x91\xacz\
+\x8d\x18\x01c\xddu\xc0\x1b\xc0\xd2\x02\xb3\x0dY\x85\x03\
+O\xc0Xw\x19 \xc0\xb2\x88\xe9\x8bY\x85\x03M\xc0\
+Xw\x09p\x98\xb8\x1a~R\xc5\xbf\x9a\xf5``\x09\
+\x18\xeb\x96\x01\x87\x80\xb1\x88\xe9>\xe0\xd1\xbc\x87\x03I\
+\xc0X\xb7\x14x\x13\xb86b\xfa60\xa1\xe2\xff\xc9\
+3X\xf4\x04\x8cumB\xaf\x9a\x88\xe9'\xc0\xdd*\
+~\xbe\xc8h\x10#\xf04\xe0\x226_\x01\x1bU\xfc\
+o1g\xa5\x120\xd6\xb5\x92\x9e\xab\x85\xb1n;\xf0\
+p\xc4\xec{`}\xf7\xd6!FaPI\xe0\xdb\x80\
+?\x80ic\xdd\x9aR\x91f\xfb\x9a\x00\x1e\x8f\x98\xfd\
+\x02\xdc\xaa\xe2\xbf-\xeb77\x81D\x7fL\x12\x8e\xf6\
+\xb3\x80\xab\x80\xf7\x8cuW\x94u\xde\xe3k\x13\xb0'\
+b\xf6\x17p\x87\x8a\xff\xbc\x8a\xef\xa2\x11x\x0e\xd8\x94\
+*[\x0e\xa8\xb1\xee\xd2\xb2\x0d\x18\xebn\x00^c\xe1\
+\x0by/\x7f\x03\xf7\xaa\xf8\x0f\xcb\xfa\xed\x92\x99@\xd2\
+c\x0f\xe4\xd4YA\x18\x89\x151\xe7\xc6\xbaU\xc0A\
+`4b\xfa\x90\x8a?\x10\xf3\x97E\xde\x08\x5c\x10\xa9\
+7FH\xe2\xe2<\x03c\xddJ\xc2)\x1b\xf3\xb5K\
+\xc5?\x1f\xb1\xc9%/\x81\xfd\x84}\xb8\x88+\x81w\
+\x8cu\xe7\xa5\x1f\x18\xeb\xce'\x04\xbf2\xe2c\x8f\x8a\
+\xdf\x11\x8d\xb2\x80\xcc\x04T\xfc)\x82\xfa\xcb\x94\xb0=\
+\x5c\x03\x1c2\xd6\x9d\xd3-0\xd6\x8d\x12\xa6\xcd\xaaH\
+\xddI\x82\xd6\xafE\xee\x22V\xf1'\x80[\x80\xa3\x11\
+\x1f\xd7\x03\x07\x8du\xa3\xc6\xba\x11\xc2\x82\xbd1Rg\
+\x0a\x18W\xf1\xb5o\x00\x0b\xcf\x01\x15\xff#\xb0\x0e\x98\
+\x8d\xf8\xb9\x098@\xd8*\xd3;W\x9ai\xe0v\x15\
+\xffg\xc9\x18\x0b\x89\x9e\xae*~\x96\xa0[~\x88\x98\
+n\x00&\x226\xb3\x84\x83\xea\xe7r\xe1\xc5)%\x0f\
+T\xfc\xd7\x84\x91\xf8\xa9F['\x08\x12\xe1\xbb\x1a>\
+\x16PZ\xdf\xa8\xf8\x19`=\xf0k\x1f\xed\xfc\x0e\xdc\
+\xa6\xe2\xbf\xec\xa3n!\x95\x04\x9a\x8a\xff\x14\xd8\x98\x04\
+T\x96y`\xb3\x8a\xff\xb8J[e\xa9\xac0U\xfc\
+\x14p'A\xbb\x94\xe1~\x15\xffV\xd5v\xca\xd2\x97\
+DNn\xcb6\x13z\xb7\x88\xed*~o?m\x94\
+\xa5o\x8d\xaf\xe2'\x81\xad\x04!\x96\xc5\xb3*\xfe\x89\
+~\xfd\x97\xa5\xd6K\x8a\x8a\xdf\x0f\xdc\xc7\xc25\xb1\x1b\
+\xd8V\xc7wYj\xdf\xcc\xa9\xf8}\xc6\xba\x8f\x08\x07\
+\xd8\xb9\xc0\x07\xc9:Y\x14\xce\xc8\xd5\xa2\x8a\xff\x06x\
+\xe6L\xf8\xaaJ\x9b\xf0\x05|X9\xd9!h\x93\xde\
+\xfb\x99\x91\xe4k`\x13I\xbf\xd5Mw\x08\xca0}\
+\xc1T\xf4\xfa\xd7$\xa6\xda\xc0N\xc2g\xfbac\x0e\
+\xd8\xd5N\xee_\xb60\x5cIt\xff\xecq|\x04\xe0\
+\xd8\xd1\x99cc\x97\xaf\xde\x0b\x9cM\xf8\xf0}!\xcd\
+\x9bF'\x81\xcf\x80\xd7\x01\xa7\xe2\xbf\x00\xf8\x17]\x81\
+\x0b8\xb3\xfa \x9c\x00\x00\x00\x00IEND\xaeB\
+`\x82\
+\x00\x00\x01W\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x09IDATh\x81\xed\
+\xda\xcdm\xc2@\x14E\xe1\xf3\x8cI\x05Q\x9aH6\
+\xecY\xd1\x05\xc5\x90Ej\xa3\x04R\x04\x884`\x82\
+n\x163\xf9\xb1\xa5(DH\x5c[z\xdf\x8e\xc1\x8b\
+w\x8c\xcdf&\xa8$\xdd\x03\xcf\xc0\x12x\x02\xe6\x8c\
+\xcb\x09\xd8\x01[\xe0%\x22\x8e_\xdfHZI\xdak\
+:\xf6\x92V\x00\xa1r\xe7_\x81\x07\xc7m\xbd\xc2\x01\
+xl(\x8f\xcd\xd4\x86\x872\xf3\xa6\xa5<\xf3C\xe7\
+\x1b\x0fs\xa9\xd9\xe0\xf32$u\xf4_\xd8sD\xb4\
+7\x1c\xeab\x92\xde\xe9G\x9c\x1a\xc6\xf7o\xf3\x1f\xf3\
+\xc6=\xc1\xb52\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0\
+-\x03\xdc2\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0-\
+\x03\xdc2\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0\xad\xa1\
+\xec\x80OU\xd7R\xb6\xef\x17?\x16gu7p\x8c\
+\x86\xdb\xac\xbb\x96r\xf6`\xf1\xc7\x85c\xb5\x9d\xfeQ\
+\x83z\xeac]\x17\xa6\xe2\x00\xac#\xe2\x18\x9f+\xf5\
+\x97\xd8\xf0}\xdc\xe6\xce4\xdco:\xfa\xc7m\xde\x00\
+>\x00G\xd7\xea\xb1\xadi\xe1\xd6\x00\x00\x00\x00IE\
+ND\xaeB`\x82\
+\x00\x00\x01\xfc\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xaeIDATh\x81\xed\
+\x9a\xbdJ\x03A\x14FO6\x1b\xb0\xd0J\xf1\x01\x14\
+\xabh\x91\xc6*X\xb8\x16\xb2\x88v\x0b\xe9}\x01\x1f\
+@\x8b\xf8\x00\xbe\x80\x85\x9d0b\xa32U\xc6B\xf2\
+\x02B\x92F\x83}H'6\xf9\x01\x8b\xdd@\x12\xb2\
+\x89k~f7\xcc\xe9v\xef\x14\xdfY\xee\x0c\x0bw\
+R\x048\xae\xb7\x01\x5c\x01y`\x17\xc8\x10/\xda@\
+\x05(\x03E%E\x13 \x05\xe0\xb8\xde!p\x0fl\
+j\x8b\x17\x8d\x06PPR\xbc\xa6\x82/_%9\xe1\
+{4\x80\xac\x85\xdf6I\x0b\x0f~\xe6K\x1b\xbf\xe7\
+\x87\xe9.8\xcc_I\x0f=\xe7m\xfc\x0d\xdbOW\
+Ia/(P$\x1c\xd7\xeb0(\xb1g\x11\xbf\xd3\
+&\x0a\x19Kw\x82i1\x02\xba1\x02\xba1\x02\xba\
+1\x02\xba1\x02\xba1\x02\xba\x99\xf8\xdb\xec\xb8\xde\x11\
+\xb0\x0f\xac\xce?\xce\x00\x1d\xa0\x06<+)~\xc2\x16\
+\x85\x0a8\xaeg\x03\x8f\xc0\xe9\xec\xb3E\xa2\xee\xb8\xde\
+\xb1\x92\xe2sTq\x5c\x0b]\xa0?<\xc06p\x1b\
+V\x1c'p2\xfb,\xff\xe6\xc0q\xbd\xb5Q\x85\xc4\
+o\xe2q\x02/\x0bK1\x997%\xc5\xf7\xa8\xc28\
+\x81\x1b\xe0i>y\x22Q\x07\xce\xc3\x8a\xa1\xa7\x90\x92\
+\xa2\x03\x9c%\xf6\x18\xed\xa1\xa4(\x01\xa5\x19\x06\x9b)\
+K\xbd\x89\x13\x81\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\
+\x8d\x11\xd0\xcdR\x08\xb4u\x87\x98\x82\x96\x8d?\xbe\xcf\
+\xf5\xbdL\x07\xd3\xc082\xaa_[\
+;\xd9;`\x05\x7f\xf0\xbdN\xfc\xda\xa8\x05\xbc\x03\x0f\
+\x80\xa7\xa4\xa8\x01\xfc\x02Q\xab\x5c\x8a?\xde\xe3Y\x00\
+\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x01i\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x1bIDATh\x81\xed\
+\xda\xb1m\xc2@\x14\x87\xf1\xcf\xc7\x91\x09P\x86pB\
+AO\xc5\x0a\xae\x90\xbc\x0a)\xc8*\x96Ry\x05*\
+F \x1e\xc2\x82\x05H\x90R\xdcY\x01KQbE\
+\xe2\xef\x93\xde\xaf\xb3E\xf1>\xcb\xa6\xb9\x97\x11\x95u\
+3\x03^\x80%\xf0\x0cL\x19\x97\x0f\xe0\x00\xec\x81m\
+U\xe4G\x80\x0c\xa0\xac\x9b\x15\xf0\x06<\xca\xc6\x1b\xa6\
+\x05\xd6U\x91\xef\xb2\xf8\xe4\xdfIg\xf8N\x0b<9\
+\xc2k\x93\xda\xf0\x10f\xdex\xc2;\xdfw\xb9\xf30\
+\x7f5\xe9]/=\xe1\x83\xbdv\xa9\x8a\xdc\xdfi\xa0\
+A\xca\xba\xf9\xe46b\xee\x18\xdf\xbf\xcd\x10S\xa7\x9e\
+\xe0\xbf,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x02\
+\xd4,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x02\xd4\
+,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x11N\xc0\
+Su\xf6\x84\xe3\xfb\xc5\xd5\xcdI<\x0d\x1c\xa3\xfe1\
+\xeb\xc1\x13v\x0f\x16\xbf\xfcp\xac\xf6\x0e\xd8\x12\x8e\xed\
+S\xd3\x02\xaf.n}\xacI+\xa2[\xf68f\xdd\
+\x9d\xb8\xf4\xb1\xe1{\xdd\xe6A4\xdcO\xce\xdc\xae\xdb\
+\x9c\x00\xbe\x00\x9f\xf64>6O7\x81\x00\x00\x00\x00\
+IEND\xaeB`\x82\
+\x00\x00\x03\xfb\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xadIDATh\x81\xed\
+\x9aO\xa8\x15U\x1c\xc7?\xf7\xbe\xab\xf2 \xa3\x22m\
+\xa1|!\x09*K(\xdaD\xb9\x88RL\xccjQ\
+\xf9\xa4\x85\xf1\xa0\x16Q\xe4.\x10tQD\x8b\x16\x15\
+%\x81\xb5(\x04\xad\xc0\xe2ad\xf6\x97\xe0E\x10\xb4\
+\xa9'DE\xc4\x17\xa2\x125\x0a*\xff<\xab\xc5\x99\
+[\xd7y3s\xce\xdcko\xee\x05?\xbb9\xf3;\
+\xbf\xf3\xfb\x9d3\xe7\x9c\xef\x9c\x99\x16\x19\xb6/\x06v\
+\x00\xab\x81\xab\x81\x05\x0c\x17\xa7\x80\x19`\x1axL\xd2\
+\x11\x80\x16\x80\xed\x9b\x81\xbd\xc0\xd2\xc6\xc2\xab\xc7a`\
+\xb3\xa4\x0f[Y\xcf\x1fbt\x82\xefr\x18\xb8\xaaM\
+xlF-x\x081o\xef\x10\x9e\xf9<\xa7\xe79\
+\x98T\xc6r\xd7\xab;\x84\x09\xdb\xcbiI\x9dy\x0a\
+\xa8\x16\xb6g93\x89Um\x86o\xb5\xa9\xc3\x82v\
+\xd3\x11\x0c\xca\xb9\x04\x9a\xe6\x5c\x02\xff\x07\xb6\xef\xb6\xbd\
+\xd7\xf6\xda\x98\xed\xd0%`\xfb\x11\xe0u`\x028h\
+{\xa7\xed\xd2\x95r\xa8\x12\xb0=\x01<\xddS\xd4\x02\
+\x1e\x04^,\xab34\x1b\x96\xed5\xc0+d\x023\
+\xc7\x16\xdb_\x16\xd5\x1b\x8a\x11\xb0}\x1d\xf0\x06\xb0\xb0\
+\xc2l}Qa\xe3\x09\xd8\xbe\x0cx\x1bX\x1c1}\
+\xa9\xa8\xb0\xd1\x04l_\x02\x1c$\xae\x86\x9f\x92\xf4j\
+\xd1\x8d\xc6\x12\xb0\xbd\x188\x00\xac\x88\x98\xee\x06\x1e-\
+\xbb\xd9H\x02\xb6\x17\x02o\x02\xd7FL\xdf\x01&%\
+\xfd]f0\xef\x09\xd8n\x13z\xf5\x96\x88\xe9g\xc0\
+]\x92f\xab\x8c\x9a\x18\x81g\x80{\x226_\x03\x1b\
+$\xfd\x1es\x96\x94\x80\xedV\xd6s\x03a{\x1b\xf0\
+p\xc4\xecG`]\xf7\xd4!FePY\xe0[\x81\
+?\x81\x19\xdb\xab\x92\x22-\xf65\x09<\x111\xfb\x15\
+\xb8U\xd2\xf7\xa9~K\x13\xc8\xf4\xc7\x14ak_\x04\
+\x5c\x09\xbco\xfb\xf2T\xe7=\xbe6\x02\xbb\x22f'\
+\x80;$}Q\xc7w\xd5\x08<\x0fl\xcc\x95-\x05\
+>\xb0}ij\x03\xb6o\x00^c\xee\x0by/\x7f\
+\x01\xf7J\xfa8\xd5o\x97\xc2\x04\xb2\x1e{\xa0\xa4\xce\
+2\xc2H,\x8b9\xb7\xbd\x12\xd8\x0f\x8cGL\x1f\x92\
+\xb4/\xe6\xaf\x88\xb2\x11\xb8(Ro\x05!\x89%e\
+\x06\xb6\x97\x13v\xd9\x98\xaf\xc7%\xbd\x10\xb1)\xa5,\
+\x81=\x84u\xb8\x8a+\x80wm_\x90\xbfa\xfbB\
+B\xf0\xcb#>vI\xda\x11\x8d\xb2\x82\xc2\x04$\x9d\
+\x22\xa8\xbfB\x09\xdb\xc35\xc0\x01\xdb\xe7u\x0bl\x8f\
+\x13\x1e\x9b\x95\x91\xbaS\x04\xad?\x10\xa5\x93X\xd21\
+`-\xf0M\xc4\xc7\xf5\xc0~\xdb\xe3\xb6\xc7\x08\x13\xf6\
+\xc6H\x9di`B\xd2\xc0'\x80\x95\xfb\x80\xa4\x9f\x81\
+5\x80#~n\x02\xf6\x11\x96\xca\xfc\xca\x95g\x06\xb8\
+]\xd2\xf1\xc4\x18+\x89\xee\xae\x92L\xd0-?EL\
+\xd7\x03\x93\x11\x1b\x136\xaa_\xd2\xc2\x8b\x93$\x0f$\
+}K\x18\x89\xa3\x03\xb4u\x8c \x11~\x18\xc0\xc7\x1c\
+\x92\xf5\x8d\xa4C\xc0:\xe0\xb7>\xda\xf9\x03\xb8M\xd2\
+W}\xd4\xad\xa4\x96@\x93\xf49\xb0!\x0b(\x95Y\
+`\x93\xa4O\xeb\xb4\x95Jm\x85)i\x1a\xb8\x93\xa0\
+]R\xb8_\xd2[u\xdbI\xa5/\x89,\xe9=`\
+\x13\xa1w\xab\xd8&\xe9\xe5~\xdaH\xa5o\x8d/i\
+\x0a\xd8B\x10bE<'\xe9\xc9~\xfd\xa72\xd0K\
+\x8a\xa4=\xc0}\xcc\x9d\x13;\x81\xad\x83\xf8Ne\xe0\
+\x939I\xbbm\x7fB\xd8\xc0\xce\x07>\xca\xe6\xc9\xbc\
+pV\x8e\x16%}\x07<{6|\xd5\xa5M\xf8\x02\
+>\xaa\x9c\xec\x10\xb4I\xef\xf9\xccX\xf65p\x18\xc9\
+\xbf\xd5\xcdt\x08\xca0\x7f\xc0T\xf5\xfa7LL\x8f\
+\xfe\xaf\x06\xd9\xf9\xcb\xe6\xac`T\xe8\xfe\xecq\xe4\xdf\
+\x8f\x09\xd9Hl\xe7\xbf\xdfm\xaa\xce\xea\x9b\xe0$g\
+\xfens\x14\xe0\x1f\x0aC\x12kO\xfd?\x13\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x03\xff\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xb1IDATh\x81\xed\
+\x9aOh\x1eE\x18\xc6\x7f\x9b&\x85\x82\x15\x15\xabB\
+\xcb\x03\x06\x05\xa9\x0a\x8a\xb7R<\xd4\x96\xaa\xb5\xe0A\
+\xad\xc5C%\xa0\x07Q\xccM(\xb4\x07E\x80\xae9\x1f\xc0\xff\
+\x81\xed\xbbm\xbff{W\xca6\x0b!\x84BY\xa7\
+\xdb\xa8\xedG\x81#\xf9\xcf\x00\x1c\x05&%-\x94l\
+\xa3\xc35\x03\xb6\xef\x05\x9e\xe9)\xca\x80\x87\x80\x17\xab\
+\xda\x0c\xcd\x81e{'\xf0\x0aQt\x91\x03\xb6\xbf*\
+k7\x143`\xfb&\xe0M`}\x8d\xd9me\x85\
+\x9d\x07`\xfb*\xe0]`c\xc2\xf4\xa5\xb2\xc2N\x03\
+\xb0}9\xf0>\xe9l\xf8iI\xaf\x97Ut\x16\x80\
+\xed\x8d\xc0\x140\x9e0}\x15x\xac\xaa\xb2\x93\x00l\
+\xaf\x07\xde\x02nL\x98\xbe\x07LH*n\xf5K\xac\
+z\x00\xb6G\x88\xa3zK\xc2\xf4\x0b\xe0.I\x8bu\
+F]\xcc\xc0\x11\xe0\x9e\x84\xcd\xb7\xc0\x1eI\xbf\xa5\x9c\
+5\x0a\xc0v\x96\x8f\xdc@\xd8>\x08<\x920\xfb\x11\
+\xd8-i.a\x07$\x02\xc8\x85O\x02\x7f\x003\xb6\
+\xafo\xa4\xb4\xdc\xd7\x04\xf0d\xc2\xec\x17\xe0VI\xdf\
+7\xf5[\x99\x0b\xd9\x1e\x03\x8e\x03{{\xeaf\x81\x9b\
+%}\xd3\xb4\x03\x00\xdb{\x89\x8b\xb6x\xa7\xed\xe5,\
+q\xe4?\xab2\xe87\x17z\x8e\xe5\xe2!\xee\xd7\x1f\
+\xdb\xbe\xb2Vq\x0f\xb6\xb7\x01o\x14;.\xf0\x17p\
+_\x9d\xf8*J\x03\xc8G\xec\xc1\x8a6\x9b\x81\x8fl\
+oN9\xb7\xbd\x15x\x1b\xd8\x900}X\xd2\xf1\x94\
+\xbf2\xaaf\xe0\x92D\xbbqb\x10\x9b\xaa\x0clo\
+!\x9e\xb2)_OH:\x9a\xb0\xa9\xa4*\x80c\xc4\
+}\xb8\x8ek\x80\x0fl_T\xac\xb0}1Q\xfc\x96\
+\x84\x8f\x17$\x1dN\xaa\xac\xa14\x00I\x0b\xc4\xec\xaf\
+4\x85\xed\xe1\x06`\xca\xf6\x05\xff\x14\xd8\xde@|l\
+\xb6&\xda\x9e \xe6\xfa\x03Q{#\xcb\x93\xad\x93\xc0\
+\xd5\x09?\x9f\x02\xb7\x03\xf3\xc4\xdd\xa6\xb8\xf8\x8bL\x03\
+\xbb$\xfd\xd9\x8f\xd8\xb2](y\xa5\xb4-b\x10J\
+\xf8\x9f\x22\x1eB\x13\x09\xbb\x19\xe2V\xfcs#\xd5=\
+\xb4\x0a\x00\x96r\xf6\x93\xc0\x15\xfdvZ\xc0\xc06I\
+?\xb4i\xdc\xfaN,\xe9;`'p\xa6M\xc79\
+?\x11\x0f\xaaV\xe2\xabh\x9c\xdfH:\x05\xec\x06~\
+m\xd1\xcf\xef\xc0\x1d\x92\xben\xd1\xb6\x96\xbe\x124I\
+_\x02{rAMY\x04\xf6I\xfa\xbc\x9f\xbe\x9a\xd2\
+w\x86)i\x1a\xb8\x93\x98\xbb4\xe1\x01I\xef\xf4\xdb\
+OSZ\xa5\xc8\x92>\x04\xf6\x11G\xb7\x8e\x83\x92^\
+n\xd3GSZ\xe7\xf8\x92N\x00\x07\x88\x89X\x19\xcf\
+Jz\xaa\xad\xff\xa6\x0ctI\x91t\x0c\xb8\x9f\xff\xae\
+\x89\xe7\x81\xc9A|7eE\xde\x8d\xda\x1e'\x9e\xbe\
+\x17\x02\x9f\xe4\xebd\xc5i}\x90\x0d\x0bU\x07\xd9B\
+7rV\x84\xf9Qbn\xd2\xfb~f]\x1e\xe90\
+R\xbc\xd5\xcd\x8c\x123\xc3\xe2\x0b\xa6\xba\xeb\xdf01\
+\xbd\xf6?5\xc8\xbf\xfa\xd8\x9f\x17\xac\x15f\x81\xfdY\
+\x96\xcd-\xfd\x99\x90\xcf\xc4!\xfe\xfd\xdc\xa6\xee]}\
+\x17\xcc\xb3\xfcs\x9b3\x00\x7f\x03\xd9\x1a\xfb\xdb\xbb\xa7\
+\x8f\x07\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
+R+\x9c\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05s>\xc0XL\xc8\x5c&dY&d\xc5pN\
+\x8a\x00\x9c\x93\x22\x80a\x1a\x0a\x00\x00)\x95\x08\xaf\x88\
+\xac\xba4\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1c\x1f$\
+\xc6\x09\x17\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05\xff\xcf\xc3XL\xc8\x5c&dY&d\xc5p\x0e\
+\xa3!\x9c\xc3h\x88a\x1a\x0a\x00\x00m\x84\x09u7\
+\x9e\xd9#\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01[\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x0dIDATh\x81\xed\
+\xda\xb1m\x02A\x10F\xe1w\xc7\xe2\x0a,\x87\xd3\x00\
+8 'r\x17\x14\x83\x037\xe3.\x1cQ\x0240\
+!\xc2\x0d`\x90\x1c\xec\x9e\x0c'Y\xf6\x09\x89\xffV\
+\x9a/cE0\x0f\x0e\x92\x9d\x86\xc2\xdd\x1f\x81W`\
+\x09\xcc\x81)\xe3\xf2\x05l\x81\x0d\xf0ff\x07\x80\x06\
+\xc0\xdd_\x80w\xe0I6\xde0{`ef\x1fM\
+\xf9\xe4w\xd43|g\x0f\xccZ\xf2cS\xdb\xf0\x90\
+g^'\xf23\xdfw\xbe\xf30\xff5\xe9\xbd^&\
+\xf2\x0f\xf6\xd2\xd9\xcc\xd2\x9d\x06\x1a\xc4\xddO\x5cG<\
+\xb7\x8c\xef\xdff\x88i\xab\x9e\xe0V\x11\xa0\x16\x01j\
+\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\
+\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\
+\x16\x01j\x11\xa0\xd6\x92o\xc0kuL\xe4\xeb\xfb\xc5\
+\xc5\xe1\xa4\xdc\x06\x8eQ\xff\x9au\x9b\xc8\xbb\x07\x8b?\
+\xde8V\x9b\xfaW\x0d\xca\xd6\xc7\xaa\x1c\xd4\xa2[\xf6\
+84\xddI\xf9&\xd6\xfc\xac\xdb<\x88\x86\xfb\xcd\x91\
+\xebu\x9bO\x80oV\x016\x1ew\x0d\xa5B\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\x9f\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x14\x1f\xf9\
+#\xd9\x0b\x00\x00\x00#IDAT\x08\xd7c`\xc0\
+\x0d\xe6|\x80\xb1\x18\x91\x05R\x04\xe0B\x08\x15)\x02\
+\x0c\x0c\x8c\xc8\x02\x08\x95h\x00\x00\xac\xac\x07\x90Ne\
+4\xac\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x07\xdd\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00x\xccD\x0d\
+\x00\x00\x05RiTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \
+\x0a branch_close<\
+/rdf:li>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\
+/rdf:RDF>\x0a\x0aX\xad\xf2\x80\x00\x00\
+\x01\x83iCCPsRGB IEC61\
+966-2.1\x00\x00(\x91u\x91\xcf+D\
+Q\x14\xc7?fh\xfc\x18\x8dba1e\x12\x16B\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3\
+j\xdex\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\
+\xc0VY+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\
+\x99s;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8a\
+fV\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\
+\xb7T\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\
+\xa8\xa8\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\
+\x12nRR\xb1E\xe1\x13\xe1.C.(|c\xeb\
+\xf1\x22?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0\
+/\xf9\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\
+\xfc\xdc\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&\
+D\x00\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>z\
+dE\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0\
+D\x92\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19i\
+rv\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\
+\xac\xd7vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\
+\x0fp\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9eu8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\
+\x0a\x92S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\
+\xc5\x9e\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e\
+9\xefY\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00\xa2IDAT\x18\x95U\xcf\xb1J\
+\xc31\x00\xc4\xe1/\xff\xb9\x93\xa3\x93\xb8\xa5\x8b\x0f \
+UD\x10\x5c:\x84,\x1d\x5c|\x0f\xb7\x8e>J\x88\
+\xa3\xb8\x08m\x05\xbbw\xc8\xea\xe2\x0bto\xe9\xd2B\
+zpp\xf0\xe3\x0e.\xa4\xd2\xae\xf0\x8a\xf7\x9a\xe3V\
+\xa7\x01\xd7x\xc32\x95vy\x06k\x8e\xdfx\xc1\x18\
+\xbf\xa9\xb4\xf1\x09\x86SH\xa5=\xe2\x03;Lk\x8e\
+\xab\xd0\xcf\xa4\xd2n\xf0\x89\x0b\xdc\x0f\xce\xb5?: \
+\x0c]\xeb\x01?\x18\xe1\xa9\xe6\xb8\x1e\x8e`\x86/l\
+q[s\x5c@H\xa5\xdda\x81\x0d\x9ek\x8e\xff\xfd\
+\xcf?\xcc1\xe9\x01\x1c\x00sR-q\xe4J\x1bi\
+\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x07\x06\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x001\xac\xdcc\
+\x00\x00\x04\xb0iTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0a\x85\x9d\x9f\x08\x00\x00\x01\x83\
+iCCPsRGB IEC6196\
+6-2.1\x00\x00(\x91u\x91\xcf+DQ\x14\
+\xc7?fh\xfc\x18\x8dba1e\x12\x16B\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3j\xde\
+x\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\xc0V\
+Y+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\x99s\
+;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8afV\
+\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\xb7T\
+\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\xa8\xa8\
+\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\x12n\
+RR\xb1E\xe1\x13\xe1.C.(|c\xeb\xf1\x22\
+?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0/\xf9\
+\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\xfc\xdc\
+\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&D\x00\
+\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>zdE\
+\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0D\x92\
+\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19irv\
+\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\xac\xd7\
+vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\x0fp\
+\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9eu\
+8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\x0a\x92\
+S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\xc5\x9e\
+\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e9\xef\
+Y\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00mIDAT\x18\x95u\xcf\xc1\x09\xc2P\
+\x10\x84\xe1\xd7\x85\x07\x9b\xd0C@\xd2\x82x\x14{0\
+W!\x8d\x84`?bKzH\xcc\x97\x83\xfb0\x04\
+\xdf\x9c\x86\x7fg\x99\xdd\x84\x0d\xaaT\x10jl\x13\x1e\
+\xbe\xba\xfe\x0951{\xe6\x8d\x0f&\x1c\x17\xa1S\xb0\
+\x11\x87\x0c/\x01\x07\xec\xb0\x0f?\xe1\xbc\xaei\xa3\xe6\
+\x85w\xf8[\xe9\xf0\xbb\x9f\xfa\xd2\x839\xdc\xa3[\xf3\
+\x19.\xa8\x89\xb50\xf7C\xa0\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1f \xb9\
+\x8dw\xe9\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xe6|```B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b`H\x11@\xe2 s\x19\x90\x8d@\x02\
+\x00#\xed\x08\xafd\x9f\x0f\x15\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b``4D\xe2 s\x19\x90\x8d@\x02\
+\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x01v\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01(IDATh\x81\xed\
+\xda\xb1J\xc3P\x14\x87\xf1/7\xb7\xe0\xae\xf8\x00\x82\
+Su\xe8\xde\xc9ly\x80@\x1fF\x87\xfa\x22nB\
+\xdc\xb3\xc5\xa9/ \xb4]:t\x0f}\x82j\xc1\xe1\
+\xa6P\xb3h\x10\xfa\xcf\x85\xf3\xdbR:\x9c\xaf\xdcf\
+97\xa1\x95\xe5\xc5\x15\xf0\x04L\x81;`\xc4\xb0|\
+\x02K`\x01\xcc\xeb\xaa\xdc\x01$\x00Y^<\x00\xaf\
+\xc0\xb5l\xbc~\x1a`VW\xe5{\xd2\xfe\xf2+\xe2\
+\x19\xfe\xa8\x01\xc6\x8eplb\x1b\x1e\xc2\xcc\x8f\x9ep\
+\xe6\xbb\x0eg\x1e\xe6\xaf\xd2\xce\xf3\xd4\x13\xfe\xb0\xa7\x0e\
+uU\xfa3\x0d\xd4K\x96\x17_\xfc\x8c\xb8w\x0c\xef\
+m\xd3\xc7\xc8\xa9'\xf8/\x0bP\xb3\x005\x0bP\xb3\
+\x005\x0bP\xb3\x005\x0bP\xb3\x005\x0bP\xb3\x00\
+5\x0bP\xb3\x005\x0bP\xb3\x005\x0bP\xb3\x005\
+\x0bPs\x84\x0dx\xac\xf6\x9e\xb0\xbe\x9f\x9c|\x98\xb6\
+\xdb\xc0!\xea\xaeY\x97\x9ep\xf7`\xf2\xcb\x17\x87j\
+\xe1\x809am\x1f\x9b\x06xv\xed\xad\x8f\x19qE\
+\x1c/{\xecR\x80\xedf\xb5\xbd\xb9\x1d\xbf\x00\x17\x84\
+\xc5\xf7%\xc3;F{\xe0\x03x\x03\x8a\xba*\xd7\x00\
+\xdf\xa4\xb56\xa2\xca\x99tG\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b``4D\xe2 s\x19\x90\x8d@\x02\
+\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1c\x1f$\
+\xc6\x09\x17\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05\xff\xcf\xc3XL\xc8\x5c&dY&d\xc5p\x0e\
+\xa3!\x9c\xc3h\x88a\x1a\x0a\x00\x00m\x84\x09u7\
+\x9e\xd9#\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x00\x9e\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
+\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
+\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xef\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xa1IDATh\x81\xed\
+\x9a\xbfN\xc2P\x14\x87\xbf\x96\xe2\xa4\x9bq\xbc\x8b\x1b\
+\xea\xc0\xe2D\x1c\x8c\x83\x83\xd1\x81\x89\x84\xd1\x17\xf0\x01\
+p\xc0\x07\xf0\x05\x1cI\x9c\xba\xa8#q0<\x02v\
+\x92\xe5\x8e\x04'\xe3\xc2\x9f\xc4\xa1m\x04B\x8b\x95\xc2\
+\xa1\xe4~[{\xee\xf0\xfb\x9a{o\x9a\x9cc\x11P\
+u\xbd]\xe0\x16(\x01\x87@\x9e\xf5b\x00\xb4\x81\x16\
+Po\x94\x0b=\x00\x0b\xa0\xeaz\xa7\xc0#\xb0'\x16\
+/\x19]\xa0\xd2(\x17^\xad\xe0\xcb\xbf\x93\x9d\xf0!\
+]\xe0\xc0\xc6\xdf6Y\x0b\x0f~\xe6\x9a\x83\xbf\xe7\xa7\
+\x19\xad8\xcc_\xc9M=\x97\x1c\xfc\x03;\xce\xa8Q\
+.8+\x0a\x94\x88\xaa\xeb\x0d\x99\x948\xb2Y\xbf\xdb\
+&\x09y[:\xc1\xa2\x18\x01i\x8c\x804F@\x1a\
+# \x8d\x11\x90\xc6\x08H3\xf7\xb7Yk}\x06\x1c\
+\x03\xdb\xcb\x8f3\xc1\x10\xf0\x80g\xa5\xd4w\xd4\xa2H\
+\x01\xad\xb5\x03\xb8\xc0e\xfa\xd9\x12\xd1\xd1Z\x9f+\xa5\
+>f\x15\xe3\xb6\xd0\x0d\xf2\xe1\x01\xf6\x81\x87\xa8b\x9c\
+\xc0E\xfaY\xfe\xcd\x89\xd6zgV!\xf3\x878N\
+\xe0ee)\xe6\xf3\xa6\x94\xfa\x9aU\x88\x13\xb8\x07\x9e\
+\x96\x93'\x11\x1d\xe0:\xaa\x18y\x0b)\xa5\x86\xc0U\
+f\xaf\xd1\x10\xa5T\x13h\xa6\x18,U6\xfa\x10g\
+\x02# \x8d\x11\x90\xc6\x08Hc\x04\xa41\x02\xd2l\
+\x84\xc0@:\xc4\x02\xf4\x1d\xfc\xf6}q\xece.\xe8\
+\x06\xae#\xd3m\xd6\xb6\x83?{P\x9c\xb3p]i\
+\xd9@\x1d\xbfm\x9f5\xba\xc0\x9d\x1dL}T\xc8\x96\
+D8\xec\xd1\xb3\xc27\xc1\xd0G\x8d\xdfq\x9b-\xa1\
+pQ\xf4\x99\x1c\xb7\xf9\x04\xf8\x01o\xedXc-\xfd\
+\xb2Y\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x070\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x001\xac\xdcc\
+\x00\x00\x04\xb0iTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0aH\x8b[^\x00\x00\x01\x83\
+iCCPsRGB IEC6196\
+6-2.1\x00\x00(\x91u\x91\xcf+DQ\x14\
+\xc7?fh\xfc\x18\x8dba1e\x12\x16B\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3j\xde\
+x\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\xc0V\
+Y+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\x99s\
+;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8afV\
+\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\xb7T\
+\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\xa8\xa8\
+\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\x12n\
+RR\xb1E\xe1\x13\xe1.C.(|c\xeb\xf1\x22\
+?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0/\xf9\
+\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\xfc\xdc\
+\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&D\x00\
+\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>zdE\
+\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0D\x92\
+\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19irv\
+\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\xac\xd7\
+vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\x0fp\
+\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9eu\
+8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\x0a\x92\
+S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\xc5\x9e\
+\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e9\xef\
+Y\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x97IDAT\x18\x95m\xcf\xb1j\x02A\
+\x14\x85\xe1o\xb7\xb6\xd0'H=Vi\x03\xb1\xb4H\
+;l\xa5\xf19\xf6Y\x02VB\xbaa\x0a\x0b;\x1b\
+\x1bkA\x18\x02)m\xe3\xbe\x82\xcd\x06\x16\xd9\xdb\xdd\
+\x9f\xff\x5c\xee\xa9b*\x13Ls\x13nF&\xa6\xf2\
+\x82\xaeF\x8b\xdf\x98\xca\xfb\x88\xb4\xc0\x0f\xda\x1a[t\
+\xd8\xc7T\xc2@\x9ac\x8f?|U=|\xc5\x09w\
+\xbc\xa1\xc2\x193,r\x13.\xd5\xe0\xc2\x12\x07\x5cQ\
+#\xe0#7\xe1\xa8O\x0e\x7f\xda`\xd7\xaf\x9f\xb9\x09\
+\xdfc\x05\xff\xe5uLe\xf5\xcc\x1f\x0d3,\x83\xb6\
+\x06D\x83\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xdc\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x8eIDATh\x81\xed\
+\x9a\xafN\xc3P\x14\x87\xbfn\x1d\x0a\x1cA\x1e\x83\x04\
+\xc4\x0cjA\x10\x04\x82\x80\x9e\xe7\x05x\x80!x\x01\
+^\x00\x8f\xc2\x00rA\x90=\xc2@1s\xe42\x14\
+\xc1\xecO\x82h\x1b\xb6e\xed(\xebv\xda\xe5~\xae\
+\xf7\x5c\xf1\xfb\xda{o\x9a\xdc\xe3\x11\xa2\xaa\xdb\xc05\
+P\x03\xf6\x81\x0a\xf9b\x00\xb4\x81\x16p#\x22=\x00\
+\x0f@U\x8f\x81{`\xc7,^:\xba@]D^\
+\xbc\xf0\xcd\xbfQ\x9c\xf0\x11]`\xafD\xb0l\x8a\x16\
+\x1e\x82\xcc\x0d\x9f`\xcdO3Zq\x98\xbfR\x9ez\
+\xae\xf9\x04\x1bv\x9c\x91\x88\xf8+\x0a\x94\x0aU\x1d2\
+)qP\x22\x7f\xa7M\x1a*%\xeb\x04\x8b\xe2\x04\xac\
+q\x02\xd68\x01k\x9c\x805N\xc0\x1a'`\xcd\xdc\
+\xdffU=\x01\x0e\x81\xcd\xe5\xc7\x99`\x08\xbc\x03O\
+\x22\xf2\x1d7)V@U}\xe0\x018\xcf>[*\
+:\xaaz*\x22\x1f\xb3\x8aIK\xe8\x0a\xfb\xf0\x00\xbb\
+\xc0]\x5c1I\xe0,\xfb,\xff\xe6HU\xb7f\x15\
+\x0a\xbf\x89\x93\x04\x9eW\x96b>\xaf\x22\xf25\xab\x90\
+$p\x0b<.'O*:\xc0e\x5c1\xf6\x14\x12\
+\x91!pQ\xd8c4BD\x9a@3\xc3`\x99\xb2\
+\xd6\x9b\xb8\x108\x01k\x9c\x805N\xc0\x1a'`\x8d\
+\x13\xb0f-\x04\x06\xd6!\x16\xa0\xef\x13\x5c\xdfW\xc7\
+\x06\xcb\xe1m`\x1e\x99\xbefm\xfb\x04\xbd\x07\xd59\
+\x13\xf3J\xab\xf8\xad\x06a\xd7G=\x1c(\x0aQ\xb3\
+G\xcf\x8bF\xc2/\xd1\xe0\xb7\xddf\xc3(\x5c\x1c}\
+&\xdbm>\x01~\x00%\xf8ZCUN:\x7f\x00\
+\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x05~\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x05\x17iTXtXML\
+:com.adobe.xmp\x00\x00\
+\x00\x00\x00 \
+ \x07b\x0c\x81\x00\x00\x00\x0dIDAT\
+\x08\x1dc\xf8\xff\xff?\x03\x00\x08\xfc\x02\xfe\xe6\x0c\xff\
+\xab\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\x9e\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
+\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
+\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xe1\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x93IDATh\x81\xed\
+\x9a;N\xc3@\x10\x86\xbfq\x1c*\xe8\x10\xe56\x94\
+\xd0\xa4\xa1\x8a(\x22\x0a\x0aD\x9f\x9e\x0bp\x80Pp\
+\x01.\xc0\x15h\x80\x13\xa0\x1c!P\x91f\xbbD\xa1\
+B4yh(l\x1e\xb1\xfcH\x08\xc9\xda\xd2~\x9d\
+w\x5c\xfc\x9f\xb3\x1e9\xda\x11bTu\x17\xb8\x02\x9a\
+\xc0!P\xa7\x5cL\x80\x1e\xd0\x05\xaeEd\xf4]Q\
+\xd5\x96\xaa\x0e\xb4:\x0cT\xb5\x05 \x1a=\xf9g`\
+\xcf\xc5c]\x81!p\x10\x10m\x9b\xaa\x85\x87(s\
+'$\xda\xf3If\x1b\x0e\xb3(\xb5\xc4uSTu\
+\xcc\xfc\x0b;\x13\x91p\x83\xa1\x16FU\xa7\xccKL\
+\x02\xca\xd7m\x96\xa1\x1e\xb8N\xb0*^\xc05^\xc0\
+5^\xc05^\xc05^\xc05^\xc05\x85\x9f\xcd\
+\xd6\xda\x13\xe0\x08\xd8^\x7f\x9c9\xa6\xc0\x0b\xf0`\x8c\
+\xf9\xc8\xbaITU\x13k3\x11\x09\xad\xb5!p\x07\
+\x9c\xaf1\xe4\x22\xf4\x81Sc\xcck\xca\xff\x81\xdc-\
+t\x89\xfb\xf0\x00\xfb\xc0mV1O\xe0\xec\xff\xb3\xfc\
+\x99ck\xedNZ\xa1\xf2/q\x9e\xc0\xe3\xc6R\x14\
+\xf3d\x8cyO+\xe4\x09\xdc\x00\xf7\xeb\xc9\xb3\x14}\
+\xe0\x22\xab\x98\xd9\x85\xbe.\xca\xd4F\xd3\xbaP\xa1@\
+\x99X\xb6\x8dV\x02/\xe0\x1a/\xe0\x1a/\xe0\x1a/\
+\xe0\x1a/\xe0\x1a/\xe0\x9a\x80\xe8\x04\xbc\xaa\x8cC\xa2\
+\xe3\xfb\xc6\xaf\xc5Z\xfc\xd9ZF\x92\xc7\xac\xbd\x90h\
+\xf6\xa0QpcY\xe9V\x7f\xd4 \x9e\xfah\xc7\x0b\
+Ua\x08\xb4Ed$_+\xf1/\xd1\xe1g\xdcf\
+\xcbQ\xb8,\xc6\xcc\x8f\xdb\xbc\x01|\x02mw#\xb3\
+\xd4\x95Sv\x00\x00\x00\x00IEND\xaeB`\x82\
+\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x04\x12\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xc4IDATh\x81\xed\
+\x9a_\x88\x94U\x18\xc6\x7f3;\x1a\x0b\x19\x15f\x17\
+\xca\x03IPM\x09J7Q^D)&f\x05[\
+\xb9\xd2\x82\xb1P\x17\x91$t\x11\x08z\xa1D\x17]\
+T\x94\x04\xd6E\xe1\xa2\x15L\xb1\x18\x99\xfd%\xd8\x08\
+\x82nj]\xa4\x22\xe2\x81\xa8\x96\xd5(\xe8\x9f\xae\xd5\
+\xc5\xf9\xb6\xc6\xd9\xf9\xbesf\xc6vf\xc0\xdf\xdd\x9c\
+\xef=\xefy\x9fs\xe6\x9c\xf3~\xdf9%2Fj\
+SK\x81\xdd\xc0Z\xe0:`\x11\xbd\xc5i`\x12\x98\
+\x00\xf6\x8c\x0dUg\x00J\x00#\xb5\xa9[\x80C\xc0\
+\xb2\xae\x85\xd7\x1a\xd3\xc0\xd6\xb1\xa1\xea\x07\xa5\xac\xe7\x8f\
+\xd1?\xc1\xcf1\x0d\x5c[&\xfcm\xfa-x\x081\
+\xef\xaa\x10\xfe\xf3\x8d\x9cY\xe0`R\x19h\xf8\xbd\xb6\
+B\x98\xb0\xf5\x9c\x19\x1b\xaaV\x16(\xa0\x96\x18\xa9M\
+\xcdr\xb6\x88Uezo\xb5i\x85E\xe5nG\xd0\
+)\xe7\x05t\x9b\xf3\x02\xfe\x0fl\xdfc\xfb\x90\xed\xf5\
+1\xdb\x9e\x13`\xfb\x11\xe05`\x188j{\x9f\xed\
+\xdc\x95\xb2\xa7\x04\xd8\x1e\x06\x9e\xaa+*\x01\x0f\x01/\
+\xe4\xd5\xe9\x19\x01\xb6\xd7\x01/\x93%\x98\x0dl\xb3\xfd\
+h\xb3z=!\xc0\xf6\xf5\xc0\xeb\xc0\xe2\x02\xb3\x8d\xcd\
+\x0a\xbb.\xc0\xf6\x95\xc0[\xc0\x92\x88\xe9\x8b\xcd\x0a\xbb\
+*\xc0\xf6\xe5\xc0Q\xe2\xd9\xf0\x93\x92^i\xf6\xa0k\
+\x02l/\x01\x8e\x00+#\xa6\x07\x80\xc7\xf2\x1evE\
+\x80\xed\xc5\xc0\x1b\xc0\x9a\x88\xe9\xdb\xc0\xa8\xa4\xbf\xf3\x0c\
+\x16\x5c\x80\xed2\xa1Wo\x8d\x98~\x0a\xdc-i\xb6\
+\xc8\xa8\x1b#\xf04po\xc4\xe6K`\x93\xa4_c\
+\xce\x92\x04\xd8.e=\xd7\x11\xb6w\x02\xdb#f\xdf\
+\x03\x1b$\xcd\xa4\xf8,\x0c*\x0b|\x07\xf0;0i\
+{UR\xa4\xcd}\x8d\x02\x8fG\xcc~\x06n\x93\xf4\
+m\xaa\xdf\x5c\x01Y\xfe1N\xd8\xda/\x00\xae\x01\xde\
+\xb3}U\xaa\xf3:_\x9b\x81\xfd\x11\xb3?\x81;%\
+}\xde\x8a\xef\xa2\x11x\x0e\xd8\xdcP\xb6\x0cx\xdf\xf6\
+\x15\xa9\x0d\xd8\xbe\x11x\x95\xf9/\xe4\xf5\xfc\x05\xdc'\
+\xe9\xa3T\xbfs4\x15\x90\xf5\xd8\x839u\x96\x13F\
+by\xcc\xb9\xed*p\x18\x18\x8c\x98>,\xa9\x16\xf3\
+\xd7\x8c\xbc\x11\xb84Ro%A\xc4ey\x06\xb6W\
+\x10v\xd9\x98\xaf\xbd\x92\x9e\x8f\xd8\xe4\x92'\xe0 a\
+\x1d.\xe2j\xe0\x1d\xdb\x177>\xb0}\x09!\xf8\x15\
+\x11\x1f\xfb%\xed\x8eFY@S\x01\x92N\x13\xb2\xbf\
+/\x22\xf5W\x03Gl_8W`{\x90\xf0\xb7\xa9\
+F\xea\x8e\x13r\xfd\x8e\xc8\x9d\xc4\x92N\x02\xeb\x81\xaf\
+\x22>n\x00\x0e\xdb\x1e\xb4=@\x98\xb07E\xeaL\
+\x00\xc3\x92:\xfe\x02X\xb8\x0fH\xfa\x11X\x078\xe2\
+\xe7f\xa0FX*\x1bW\xaeF&\x81;$\xfd\x91\
+\x18c!\xd1\xddU\x92\x09y\xcb\x0f\x11\xd3\x8d\xc0h\
+\xc4\xc6\x84\x8d\xea\xa7\xb4\xf0\xe2$\xa5\x07\x92\xbe&\x8c\
+\xc4\x89\x0e\xda:IH\x11\xbe\xeb\xc0\xc7<\x92\xf3\x1b\
+I\xc7\x80\x0d\xc0/m\xb4\xf3\x1bp\xbb\xa4\xe3m\xd4\
+-\xa4\xa5\x04M\xd2g\xc0\xa6,\xa0Tf\x81-\x92\
+>i\xa5\xadTZ\xce0%M\x00w\x11r\x97\x14\
+\x1e\x90\xf4f\xab\xed\xa4\xd2V\x8a,\xe9]`\x0b\xa1\
+w\x8b\xd8)\xe9\xa5v\xdaH\xa5\xed\x1c_\xd28\xb0\
+\x8d\x90\x885\xe3YIO\xb4\xeb?\x95\x8e^R$\
+\x1d\x04\xeeg\xfe\x9c\xd8\x07\xec\xe8\xc4w*\x1d\x1f%\
+I:`\xfbc\xc2\x06v\x11\xf0a6O\x16\x84s\
+r\x16&\xe9\x1b\xe0\x99s\xe1\xabU\xca\x84\x13\xf0~\
+\xe5T\x85\x90\x9b\xd4\x7f\x9f\x19\xc8N\x03{\x91\xc6\xb7\
+\xba\xc9\x0a!3l\xfc\xc0T\xf4\xfa\xd7KL\x94\x81\
+=\x84c\xfb~c\x1a\xd8[\xcen}l\xa5\xbfD\
+\xcc]\xf6\x98\xf9\xf70!\xbb\xf4\xb1\x8b\xff\xae\xdb\x14\
+}\xab\xef\x06\xa78\xfb\xba\xcd\x09\x80\x7f\x00\xc4\x1e\x10\
+)3[\x85\xf7\x00\x00\x00\x00IEND\xaeB`\
+\x82\
+"
+
+qt_resource_name = b"\
+\x00\x08\
+\x06\xc5\x8e\xa5\
+\x00o\
+\x00p\x00e\x00n\x00p\x00y\x00p\x00e\
+\x00\x06\
+\x07\x03}\xc3\
+\x00i\
+\x00m\x00a\x00g\x00e\x00s\
+\x00\x0e\
+\x04\xa2\xfc\xa7\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x0b\xda0\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00.\x00p\x00n\x00g\
+\
+\x00\x1d\
+\x09\x07\x81\x07\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x1c\
+\x08?\xdag\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00#\
+\x06\xf2\x1aG\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\
+\x00n\x00g\
+\x00\x12\
+\x01.\x03'\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\
+\x00g\
+\x00\x1c\
+\x0e<\xde\x07\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+\x00\x14\
+\x07\xec\xd1\xc7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00.\
+\x00p\x00n\x00g\
+\x00\x1a\
+\x05\x11\xe0\xe7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00\x18\
+\x03\x8e\xdeg\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\
+\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x15\
+\x03'rg\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\
+\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x03\x8d\x04G\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\
+\x00g\
+\x00\x16\
+\x01u\xcc\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00.\x00p\x00n\x00g\
+\x00\x17\
+\x0c\xabQ\x07\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
+\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x15\
+\x0f\xf3\xc0\x07\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\
+\x00.\x00p\x00n\x00g\
+\x00\x14\
+\x04^-\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00_\x00o\x00n\x00.\
+\x00p\x00n\x00g\
+\x00\x0f\
+\x06S%\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00o\x00p\x00e\x00n\x00.\x00p\x00n\x00g\
+\x00\x17\
+\x0ce\xce\x07\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
+\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x0e\
+\x0e\xde\xfa\xc7\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x1f\
+\x0a\xae'G\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x00\xb8\x8c\x07\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\
+\x00\x0f\
+\x02\x9f\x05\x87\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x1b\
+\x03Z2'\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\
+\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x01s\x8b\x07\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\x00 \
+\x0f\xd4\x1b\xc7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x05\x8f\x9d\x07\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00o\x00p\x00e\x00n\x00_\x00o\x00n\x00.\x00p\x00n\
+\x00g\
+\x00\x1a\
+\x01\x87\xaeg\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x0c\xe2hg\
+\x00t\
+\x00r\x00a\x00n\x00s\x00p\x00a\x00r\x00e\x00n\x00t\x00.\x00p\x00n\x00g\
+\x00\x0c\
+\x06\xe6\xe6g\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00 \
+\x09\xd7\x1f\xa7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x01\x1f\xc3\x87\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\
+\x00\x1a\
+\x03\x0e\xe4\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+"
+
+qt_resource_struct = b"\
+\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\x16\x00\x02\x00\x00\x00 \x00\x00\x00\x03\
+\x00\x00\x04\x1e\x00\x00\x00\x00\x00\x01\x00\x000\x5c\
+\x00\x00\x05\xfc\x00\x00\x00\x00\x00\x01\x00\x00F\x05\
+\x00\x00\x01<\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xec\
+\x00\x00\x04\xa6\x00\x00\x00\x00\x00\x01\x00\x002S\
+\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xf7\
+\x00\x00\x05:\x00\x00\x00\x00\x00\x01\x00\x00<\x1c\
+\x00\x00\x04F\x00\x00\x00\x00\x00\x01\x00\x001\x06\
+\x00\x00\x06$\x00\x00\x00\x00\x00\x01\x00\x00F\xae\
+\x00\x00\x02B\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xa9\
+\x00\x00\x04j\x00\x00\x00\x00\x00\x01\x00\x001\xaa\
+\x00\x00\x02r\x00\x00\x00\x00\x00\x01\x00\x00\x1bS\
+\x00\x00\x02\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x05\
+\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xa3\
+\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x16\x02\
+\x00\x00\x05\x10\x00\x00\x00\x00\x00\x01\x00\x004\xe8\
+\x00\x00\x03`\x00\x00\x00\x00\x00\x01\x00\x00&\x84\
+\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x00C~\
+\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xec\
+\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x03\
+\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x91\
+\x00\x00\x00r\x00\x00\x00\x00\x00\x01\x00\x00\x08Z\
+\x00\x00\x05\xb6\x00\x00\x00\x00\x00\x01\x00\x00D \
+\x00\x00\x03\xda\x00\x00\x00\x00\x00\x01\x00\x00.\xe2\
+\x00\x00\x00J\x00\x00\x00\x00\x00\x01\x00\x00\x00\xa9\
+\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x00-\x8e\
+\x00\x00\x02\xce\x00\x00\x00\x00\x00\x01\x00\x00\x1dV\
+\x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x00=\xfc\
+\x00\x00\x01f\x00\x00\x00\x00\x00\x01\x00\x00\x10\x96\
+\x00\x00\x03\xb8\x00\x00\x00\x00\x00\x01\x00\x00.8\
+\x00\x00\x04\xca\x00\x00\x00\x00\x00\x01\x00\x002\xf5\
+\x00\x00\x03\x02\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x00\
+"
+
+
+def qInitResources():
+ QtCore.qRegisterResourceData(
+ 0x01, qt_resource_struct, qt_resource_name, qt_resource_data
+ )
+
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(
+ 0x01, qt_resource_struct, qt_resource_name, qt_resource_data
+ )
diff --git a/usd_qtpy/style/pyside6_resources.py b/usd_qtpy/style/pyside6_resources.py
new file mode 100644
index 0000000..125fcb6
--- /dev/null
+++ b/usd_qtpy/style/pyside6_resources.py
@@ -0,0 +1,1522 @@
+# Resource object code (Python 3)
+# Created by: object code
+# Created by: The Resource Compiler for Qt version 6.4.1
+# WARNING! All changes made in this file will be lost!
+
+from PySide6 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1f \xb9\
+\x8dw\xe9\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xe6|```B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b`H\x11@\xe2 s\x19\x90\x8d@\x02\
+\x00#\xed\x08\xafd\x9f\x0f\x15\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x04\x12\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xc4IDATh\x81\xed\
+\x9a_\x88\x94U\x18\xc6\x7f3;\x1a\x0b\x19\x15f\x17\
+\xca\x03IPM\x09J7Q^D)&f\x05[\
+\xb9\xd2\x82\xb1P\x17\x91$t\x11\x08z\xa1D\x17]\
+T\x94\x04\xd6E\xe1\xa2\x15L\xb1\x18\x99\xfd%\xd8\x08\
+\x82nj]\xa4\x22\xe2\x81\xa8\x96\xd5(\xe8\x9f\xae\xd5\
+\xc5\xf9\xb6\xc6\xd9\xf9\xbesf\xc6vf\xc0\xdf\xdd\x9c\
+\xef=\xefy\x9fs\xe6\x9c\xf3~\xdf9%2Fj\
+SK\x81\xdd\xc0Z\xe0:`\x11\xbd\xc5i`\x12\x98\
+\x00\xf6\x8c\x0dUg\x00J\x00#\xb5\xa9[\x80C\xc0\
+\xb2\xae\x85\xd7\x1a\xd3\xc0\xd6\xb1\xa1\xea\x07\xa5\xac\xe7\x8f\
+\xd1?\xc1\xcf1\x0d\x5c[&\xfcm\xfa-x\x081\
+\xef\xaa\x10\xfe\xf3\x8d\x9cY\xe0`R\x19h\xf8\xbd\xb6\
+B\x98\xb0\xf5\x9c\x19\x1b\xaaV\x16(\xa0\x96\x18\xa9M\
+\xcdr\xb6\x88Uezo\xb5i\x85E\xe5nG\xd0\
+)\xe7\x05t\x9b\xf3\x02\xfe\x0fl\xdfc\xfb\x90\xed\xf5\
+1\xdb\x9e\x13`\xfb\x11\xe05`\x188j{\x9f\xed\
+\xdc\x95\xb2\xa7\x04\xd8\x1e\x06\x9e\xaa+*\x01\x0f\x01/\
+\xe4\xd5\xe9\x19\x01\xb6\xd7\x01/\x93%\x98\x0dl\xb3\xfd\
+h\xb3z=!\xc0\xf6\xf5\xc0\xeb\xc0\xe2\x02\xb3\x8d\xcd\
+\x0a\xbb.\xc0\xf6\x95\xc0[\xc0\x92\x88\xe9\x8b\xcd\x0a\xbb\
+*\xc0\xf6\xe5\xc0Q\xe2\xd9\xf0\x93\x92^i\xf6\xa0k\
+\x02l/\x01\x8e\x00+#\xa6\x07\x80\xc7\xf2\x1evE\
+\x80\xed\xc5\xc0\x1b\xc0\x9a\x88\xe9\xdb\xc0\xa8\xa4\xbf\xf3\x0c\
+\x16\x5c\x80\xed2\xa1Wo\x8d\x98~\x0a\xdc-i\xb6\
+\xc8\xa8\x1b#\xf04po\xc4\xe6K`\x93\xa4_c\
+\xce\x92\x04\xd8.e=\xd7\x11\xb6w\x02\xdb#f\xdf\
+\x03\x1b$\xcd\xa4\xf8,\x0c*\x0b|\x07\xf0;0i\
+{UR\xa4\xcd}\x8d\x02\x8fG\xcc~\x06n\x93\xf4\
+m\xaa\xdf\x5c\x01Y\xfe1N\xd8\xda/\x00\xae\x01\xde\
+\xb3}U\xaa\xf3:_\x9b\x81\xfd\x11\xb3?\x81;%\
+}\xde\x8a\xef\xa2\x11x\x0e\xd8\xdcP\xb6\x0cx\xdf\xf6\
+\x15\xa9\x0d\xd8\xbe\x11x\x95\xf9/\xe4\xf5\xfc\x05\xdc'\
+\xe9\xa3T\xbfs4\x15\x90\xf5\xd8\x839u\x96\x13F\
+by\xcc\xb9\xed*p\x18\x18\x8c\x98>,\xa9\x16\xf3\
+\xd7\x8c\xbc\x11\xb84Ro%A\xc4ey\x06\xb6W\
+\x10v\xd9\x98\xaf\xbd\x92\x9e\x8f\xd8\xe4\x92'\xe0 a\
+\x1d.\xe2j\xe0\x1d\xdb\x177>\xb0}\x09!\xf8\x15\
+\x11\x1f\xfb%\xed\x8eFY@S\x01\x92N\x13\xb2\xbf\
+/\x22\xf5W\x03Gl_8W`{\x90\xf0\xb7\xa9\
+F\xea\x8e\x13r\xfd\x8e\xc8\x9d\xc4\x92N\x02\xeb\x81\xaf\
+\x22>n\x00\x0e\xdb\x1e\xb4=@\x98\xb07E\xeaL\
+\x00\xc3\x92:\xfe\x02X\xb8\x0fH\xfa\x11X\x078\xe2\
+\xe7f\xa0FX*\x1bW\xaeF&\x81;$\xfd\x91\
+\x18c!\xd1\xddU\x92\x09y\xcb\x0f\x11\xd3\x8d\xc0h\
+\xc4\xc6\x84\x8d\xea\xa7\xb4\xf0\xe2$\xa5\x07\x92\xbe&\x8c\
+\xc4\x89\x0e\xda:IH\x11\xbe\xeb\xc0\xc7<\x92\xf3\x1b\
+I\xc7\x80\x0d\xc0/m\xb4\xf3\x1bp\xbb\xa4\xe3m\xd4\
+-\xa4\xa5\x04M\xd2g\xc0\xa6,\xa0Tf\x81-\x92\
+>i\xa5\xadTZ\xce0%M\x00w\x11r\x97\x14\
+\x1e\x90\xf4f\xab\xed\xa4\xd2V\x8a,\xe9]`\x0b\xa1\
+w\x8b\xd8)\xe9\xa5v\xdaH\xa5\xed\x1c_\xd28\xb0\
+\x8d\x90\x885\xe3YIO\xb4\xeb?\x95\x8e^R$\
+\x1d\x04\xeeg\xfe\x9c\xd8\x07\xec\xe8\xc4w*\x1d\x1f%\
+I:`\xfbc\xc2\x06v\x11\xf0a6O\x16\x84s\
+r\x16&\xe9\x1b\xe0\x99s\xe1\xabU\xca\x84\x13\xf0~\
+\xe5T\x85\x90\x9b\xd4\x7f\x9f\x19\xc8N\x03{\x91\xc6\xb7\
+\xba\xc9\x0a!3l\xfc\xc0T\xf4\xfa\xd7KL\x94\x81\
+=\x84c\xfb~c\x1a\xd8[\xcen}l\xa5\xbfD\
+\xcc]\xf6\x98\xf9\xf70!\xbb\xf4\xb1\x8b\xff\xae\xdb\x14\
+}\xab\xef\x06\xa78\xfb\xba\xcd\x09\x80\x7f\x00\xc4\x1e\x10\
+)3[\x85\xf7\x00\x00\x00\x00IEND\xaeB`\
+\x82\
+\x00\x00\x01\xef\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xa1IDATh\x81\xed\
+\x9a\xbfN\xc2P\x14\x87\xbf\x96\xe2\xa4\x9bq\xbc\x8b\x1b\
+\xea\xc0\xe2D\x1c\x8c\x83\x83\xd1\x81\x89\x84\xd1\x17\xf0\x01\
+p\xc0\x07\xf0\x05\x1cI\x9c\xba\xa8#q0<\x02v\
+\x92\xe5\x8e\x04'\xe3\xc2\x9f\xc4\xa1m\x04B\x8b\x95\xc2\
+\xa1\xe4~[{\xee\xf0\xfb\x9a{o\x9a\x9cc\x11P\
+u\xbd]\xe0\x16(\x01\x87@\x9e\xf5b\x00\xb4\x81\x16\
+Po\x94\x0b=\x00\x0b\xa0\xeaz\xa7\xc0#\xb0'\x16\
+/\x19]\xa0\xd2(\x17^\xad\xe0\xcb\xbf\x93\x9d\xf0!\
+]\xe0\xc0\xc6\xdf6Y\x0b\x0f~\xe6\x9a\x83\xbf\xe7\xa7\
+\x19\xad8\xcc_\xc9M=\x97\x1c\xfc\x03;\xce\xa8Q\
+.8+\x0a\x94\x88\xaa\xeb\x0d\x99\x948\xb2Y\xbf\xdb\
+&\x09y[:\xc1\xa2\x18\x01i\x8c\x804F@\x1a\
+# \x8d\x11\x90\xc6\x08H3\xf7\xb7Yk}\x06\x1c\
+\x03\xdb\xcb\x8f3\xc1\x10\xf0\x80g\xa5\xd4w\xd4\xa2H\
+\x01\xad\xb5\x03\xb8\xc0e\xfa\xd9\x12\xd1\xd1Z\x9f+\xa5\
+>f\x15\xe3\xb6\xd0\x0d\xf2\xe1\x01\xf6\x81\x87\xa8b\x9c\
+\xc0E\xfaY\xfe\xcd\x89\xd6zgV!\xf3\x878N\
+\xe0ee)\xe6\xf3\xa6\x94\xfa\x9aU\x88\x13\xb8\x07\x9e\
+\x96\x93'\x11\x1d\xe0:\xaa\x18y\x0b)\xa5\x86\xc0U\
+f\xaf\xd1\x10\xa5T\x13h\xa6\x18,U6\xfa\x10g\
+\x02# \x8d\x11\x90\xc6\x08Hc\x04\xa41\x02\xd2l\
+\x84\xc0@:\xc4\x02\xf4\x1d\xfc\xf6}q\xece.\xe8\
+\x06\xae#\xd3m\xd6\xb6\x83?{P\x9c\xb3p]i\
+\xd9@\x1d\xbfm\x9f5\xba\xc0\x9d\x1dL}T\xc8\x96\
+D8\xec\xd1\xb3\xc27\xc1\xd0G\x8d\xdfq\x9b-\xa1\
+pQ\xf4\x99\x1c\xb7\xf9\x04\xf8\x01o\xedXc-\xfd\
+\xb2Y\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1c\x1f$\
+\xc6\x09\x17\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05\xff\xcf\xc3XL\xc8\x5c&dY&d\xc5p\x0e\
+\xa3!\x9c\xc3h\x88a\x1a\x0a\x00\x00m\x84\x09u7\
+\x9e\xd9#\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x01i\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x1bIDATh\x81\xed\
+\xda\xb1m\xc2@\x14\x87\xf1\xcf\xc7\x91\x09P\x86pB\
+AO\xc5\x0a\xae\x90\xbc\x0a)\xc8*\x96Ry\x05*\
+F \x1e\xc2\x82\x05H\x90R\xdcY\x01KQbE\
+\xe2\xef\x93\xde\xaf\xb3E\xf1>\xcb\xa6\xb9\x97\x11\x95u\
+3\x03^\x80%\xf0\x0cL\x19\x97\x0f\xe0\x00\xec\x81m\
+U\xe4G\x80\x0c\xa0\xac\x9b\x15\xf0\x06<\xca\xc6\x1b\xa6\
+\x05\xd6U\x91\xef\xb2\xf8\xe4\xdfIg\xf8N\x0b<9\
+\xc2k\x93\xda\xf0\x10f\xdex\xc2;\xdfw\xb9\xf30\
+\x7f5\xe9]/=\xe1\x83\xbdv\xa9\x8a\xdc\xdfi\xa0\
+A\xca\xba\xf9\xe46b\xee\x18\xdf\xbf\xcd\x10S\xa7\x9e\
+\xe0\xbf,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x02\
+\xd4,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x02\xd4\
+,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x11N\xc0\
+Su\xf6\x84\xe3\xfb\xc5\xd5\xcdI<\x0d\x1c\xa3\xfe1\
+\xeb\xc1\x13v\x0f\x16\xbf\xfcp\xac\xf6\x0e\xd8\x12\x8e\xed\
+S\xd3\x02\xaf.n}\xacI+\xa2[\xf68f\xdd\
+\x9d\xb8\xf4\xb1\xe1{\xdd\xe6A4\xdcO\xce\xdc\xae\xdb\
+\x9c\x00\xbe\x00\x9f\xf64>6O7\x81\x00\x00\x00\x00\
+IEND\xaeB`\x82\
+\x00\x00\x07\x06\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x001\xac\xdcc\
+\x00\x00\x04\xb0iTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0a\x85\x9d\x9f\x08\x00\x00\x01\x83\
+iCCPsRGB IEC6196\
+6-2.1\x00\x00(\x91u\x91\xcf+DQ\x14\
+\xc7?fh\xfc\x18\x8dba1e\x12\x16B\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3j\xde\
+x\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\xc0V\
+Y+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\x99s\
+;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8afV\
+\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\xb7T\
+\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\xa8\xa8\
+\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\x12n\
+RR\xb1E\xe1\x13\xe1.C.(|c\xeb\xf1\x22\
+?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0/\xf9\
+\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\xfc\xdc\
+\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&D\x00\
+\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>zdE\
+\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0D\x92\
+\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19irv\
+\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\xac\xd7\
+vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\x0fp\
+\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9eu\
+8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\x0a\x92\
+S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\xc5\x9e\
+\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e9\xef\
+Y\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00mIDAT\x18\x95u\xcf\xc1\x09\xc2P\
+\x10\x84\xe1\xd7\x85\x07\x9b\xd0C@\xd2\x82x\x14{0\
+W!\x8d\x84`?bKzH\xcc\x97\x83\xfb0\x04\
+\xdf\x9c\x86\x7fg\x99\xdd\x84\x0d\xaaT\x10jl\x13\x1e\
+\xbe\xba\xfe\x0951{\xe6\x8d\x0f&\x1c\x17\xa1S\xb0\
+\x11\x87\x0c/\x01\x07\xec\xb0\x0f?\xe1\xbc\xaei\xa3\xe6\
+\x85w\xf8[\xe9\xf0\xbb\x9f\xfa\xd2\x839\xdc\xa3[\xf3\
+\x19.\xa8\x89\xb50\xf7C\xa0\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b``4D\xe2 s\x19\x90\x8d@\x02\
+\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x07\xad\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00x\xccD\x0d\
+\x00\x00\x05RiTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \
+\x0a branch_close<\
+/rdf:li>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\
+/rdf:RDF>\x0a\x0a$\xe15\x97\x00\x00\
+\x01\x83iCCPsRGB IEC61\
+966-2.1\x00\x00(\x91u\x91\xcf+D\
+Q\x14\xc7?fh\xfc\x18\x8dba1e\x12\x16B\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3\
+j\xdex\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\
+\xc0VY+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\
+\x99s;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8a\
+fV\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\
+\xb7T\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\
+\xa8\xa8\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\
+\x12nRR\xb1E\xe1\x13\xe1.C.(|c\xeb\
+\xf1\x22?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0\
+/\xf9\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\
+\xfc\xdc\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&\
+D\x00\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>z\
+dE\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0\
+D\x92\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19i\
+rv\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\
+\xac\xd7vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\
+\x0fp\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9eu8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\
+\x0a\x92S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\
+\xc5\x9e\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e\
+9\xefY\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00rIDAT\x18\x95m\xcf1\x0a\
+\xc2P\x14D\xd1\xe8\x02\xb4W\x08\xd6Ia\x99JC\
+t\x15\x82\xabI6(\xee@\x04\xdb\xa8\x95Xx,\
+\xf2\x09\xe1\xf3\x07\xa6\x9a\xfb\xe0\xbe\x0c\x1b\xb4Xdq\
+p0\xe4\x82U\x0a8\xe3\x8b\x1b\x8a\x14p\xc4\x1b=\
+v)`\x8b\x07>\xa8\xe6\xd1\xfe\x0b\x9d\x85\x8eW\x0d\
+^x\xa2\x9e\x0e\xa7 tG9\x1d\xf6\xe1\x95+\xd6\
+\xb1D\x8e\x0e\xcbX\xf0\x0fR\x8ay\x18\xdc\xe2\x02p\
+\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\x9f\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x14\x1f\xf9\
+#\xd9\x0b\x00\x00\x00#IDAT\x08\xd7c`\xc0\
+\x0d\xe6|\x80\xb1\x18\x91\x05R\x04\xe0B\x08\x15)\x02\
+\x0c\x0c\x8c\xc8\x02\x08\x95h\x00\x00\xac\xac\x07\x90Ne\
+4\xac\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x070\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x001\xac\xdcc\
+\x00\x00\x04\xb0iTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0aH\x8b[^\x00\x00\x01\x83\
+iCCPsRGB IEC6196\
+6-2.1\x00\x00(\x91u\x91\xcf+DQ\x14\
+\xc7?fh\xfc\x18\x8dba1e\x12\x16B\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3j\xde\
+x\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\xc0V\
+Y+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\x99s\
+;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8afV\
+\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\xb7T\
+\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\xa8\xa8\
+\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\x12n\
+RR\xb1E\xe1\x13\xe1.C.(|c\xeb\xf1\x22\
+?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0/\xf9\
+\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\xfc\xdc\
+\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&D\x00\
+\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>zdE\
+\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0D\x92\
+\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19irv\
+\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\xac\xd7\
+vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\x0fp\
+\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9eu\
+8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\x0a\x92\
+S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\xc5\x9e\
+\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e9\xef\
+Y\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x97IDAT\x18\x95m\xcf\xb1j\x02A\
+\x14\x85\xe1o\xb7\xb6\xd0'H=Vi\x03\xb1\xb4H\
+;l\xa5\xf19\xf6Y\x02VB\xbaa\x0a\x0b;\x1b\
+\x1bkA\x18\x02)m\xe3\xbe\x82\xcd\x06\x16\xd9\xdb\xdd\
+\x9f\xff\x5c\xee\xa9b*\x13Ls\x13nF&\xa6\xf2\
+\x82\xaeF\x8b\xdf\x98\xca\xfb\x88\xb4\xc0\x0f\xda\x1a[t\
+\xd8\xc7T\xc2@\x9ac\x8f?|U=|\xc5\x09w\
+\xbc\xa1\xc2\x193,r\x13.\xd5\xe0\xc2\x12\x07\x5cQ\
+#\xe0#7\xe1\xa8O\x0e\x7f\xda`\xd7\xaf\x9f\xb9\x09\
+\xdfc\x05\xff\xe5uLe\xf5\xcc\x1f\x0d3,\x83\xb6\
+\x06D\x83\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x03\xff\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xb1IDATh\x81\xed\
+\x9aOh\x1eE\x18\xc6\x7f\x9b&\x85\x82\x15\x15\xabB\
+\xcb\x03\x06\x05\xa9\x0a\x8a\xb7R<\xd4\x96\xaa\xb5\xe0A\
+\xad\xc5C%\xa0\x07Q\xccM(\xb4\x07E\x80\xae9\x1f\xc0\xff\
+\x81\xed\xbbm\xbff{W\xca6\x0b!\x84BY\xa7\
+\xdb\xa8\xedG\x81#\xf9\xcf\x00\x1c\x05&%-\x94l\
+\xa3\xc35\x03\xb6\xef\x05\x9e\xe9)\xca\x80\x87\x80\x17\xab\
+\xda\x0c\xcd\x81e{'\xf0\x0aQt\x91\x03\xb6\xbf*\
+k7\x143`\xfb&\xe0M`}\x8d\xd9me\x85\
+\x9d\x07`\xfb*\xe0]`c\xc2\xf4\xa5\xb2\xc2N\x03\
+\xb0}9\xf0>\xe9l\xf8iI\xaf\x97Ut\x16\x80\
+\xed\x8d\xc0\x140\x9e0}\x15x\xac\xaa\xb2\x93\x00l\
+\xaf\x07\xde\x02nL\x98\xbe\x07LH*n\xf5K\xac\
+z\x00\xb6G\x88\xa3zK\xc2\xf4\x0b\xe0.I\x8bu\
+F]\xcc\xc0\x11\xe0\x9e\x84\xcd\xb7\xc0\x1eI\xbf\xa5\x9c\
+5\x0a\xc0v\x96\x8f\xdc@\xd8>\x08<\x920\xfb\x11\
+\xd8-i.a\x07$\x02\xc8\x85O\x02\x7f\x003\xb6\
+\xafo\xa4\xb4\xdc\xd7\x04\xf0d\xc2\xec\x17\xe0VI\xdf\
+7\xf5[\x99\x0b\xd9\x1e\x03\x8e\x03{{\xeaf\x81\x9b\
+%}\xd3\xb4\x03\x00\xdb{\x89\x8b\xb6x\xa7\xed\xe5,\
+q\xe4?\xab2\xe87\x17z\x8e\xe5\xe2!\xee\xd7\x1f\
+\xdb\xbe\xb2Vq\x0f\xb6\xb7\x01o\x14;.\xf0\x17p\
+_\x9d\xf8*J\x03\xc8G\xec\xc1\x8a6\x9b\x81\x8fl\
+oN9\xb7\xbd\x15x\x1b\xd8\x900}X\xd2\xf1\x94\
+\xbf2\xaaf\xe0\x92D\xbbqb\x10\x9b\xaa\x0clo\
+!\x9e\xb2)_OH:\x9a\xb0\xa9\xa4*\x80c\xc4\
+}\xb8\x8ek\x80\x0fl_T\xac\xb0}1Q\xfc\x96\
+\x84\x8f\x17$\x1dN\xaa\xac\xa14\x00I\x0b\xc4\xec\xaf\
+4\x85\xed\xe1\x06`\xca\xf6\x05\xff\x14\xd8\xde@|l\
+\xb6&\xda\x9e \xe6\xfa\x03Q{#\xcb\x93\xad\x93\xc0\
+\xd5\x09?\x9f\x02\xb7\x03\xf3\xc4\xdd\xa6\xb8\xf8\x8bL\x03\
+\xbb$\xfd\xd9\x8f\xd8\xb2](y\xa5\xb4-b\x10J\
+\xf8\x9f\x22\x1eB\x13\x09\xbb\x19\xe2V\xfcs#\xd5=\
+\xb4\x0a\x00\x96r\xf6\x93\xc0\x15\xfdvZ\xc0\xc06I\
+?\xb4i\xdc\xfaN,\xe9;`'p\xa6M\xc79\
+?\x11\x0f\xaaV\xe2\xabh\x9c\xdfH:\x05\xec\x06~\
+m\xd1\xcf\xef\xc0\x1d\x92\xben\xd1\xb6\x96\xbe\x124I\
+_\x02{rAMY\x04\xf6I\xfa\xbc\x9f\xbe\x9a\xd2\
+w\x86)i\x1a\xb8\x93\x98\xbb4\xe1\x01I\xef\xf4\xdb\
+OSZ\xa5\xc8\x92>\x04\xf6\x11G\xb7\x8e\x83\x92^\
+n\xd3GSZ\xe7\xf8\x92N\x00\x07\x88\x89X\x19\xcf\
+Jz\xaa\xad\xff\xa6\x0ctI\x91t\x0c\xb8\x9f\xff\xae\
+\x89\xe7\x81\xc9A|7eE\xde\x8d\xda\x1e'\x9e\xbe\
+\x17\x02\x9f\xe4\xebd\xc5i}\x90\x0d\x0bU\x07\xd9B\
+7rV\x84\xf9Qbn\xd2\xfb~f]\x1e\xe90\
+R\xbc\xd5\xcd\x8c\x123\xc3\xe2\x0b\xa6\xba\xeb\xdf01\
+\xbd\xf6?5\xc8\xbf\xfa\xd8\x9f\x17\xac\x15f\x81\xfdY\
+\x96\xcd-\xfd\x99\x90\xcf\xc4!\xfe\xfd\xdc\xa6\xee]}\
+\x17\xcc\xb3\xfcs\x9b3\x00\x7f\x03\xd9\x1a\xfb\xdb\xbb\xa7\
+\x8f\x07\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01[\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x0dIDATh\x81\xed\
+\xda\xb1m\x02A\x10F\xe1w\xc7\xe2\x0a,\x87\xd3\x00\
+8 'r\x17\x14\x83\x037\xe3.\x1cQ\x0240\
+!\xc2\x0d`\x90\x1c\xec\x9e\x0c'Y\xf6\x09\x89\xffV\
+\x9a/cE0\x0f\x0e\x92\x9d\x86\xc2\xdd\x1f\x81W`\
+\x09\xcc\x81)\xe3\xf2\x05l\x81\x0d\xf0ff\x07\x80\x06\
+\xc0\xdd_\x80w\xe0I6\xde0{`ef\x1fM\
+\xf9\xe4w\xd43|g\x0f\xccZ\xf2cS\xdb\xf0\x90\
+g^'\xf23\xdfw\xbe\xf30\xff5\xe9\xbd^&\
+\xf2\x0f\xf6\xd2\xd9\xcc\xd2\x9d\x06\x1a\xc4\xddO\x5cG<\
+\xb7\x8c\xef\xdff\x88i\xab\x9e\xe0V\x11\xa0\x16\x01j\
+\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\
+\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\
+\x16\x01j\x11\xa0\xd6\x92o\xc0kuL\xe4\xeb\xfb\xc5\
+\xc5\xe1\xa4\xdc\x06\x8eQ\xff\x9au\x9b\xc8\xbb\x07\x8b?\
+\xde8V\x9b\xfaW\x0d\xca\xd6\xc7\xaa\x1c\xd4\xa2[\xf6\
+84\xddI\xf9&\xd6\xfc\xac\xdb<\x88\x86\xfb\xcd\x91\
+\xebu\x9bO\x80oV\x016\x1ew\x0d\xa5B\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x05~\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x05\x17iTXtXML\
+:com.adobe.xmp\x00\x00\
+\x00\x00\x00 \
+ \x07b\x0c\x81\x00\x00\x00\x0dIDAT\
+\x08\x1dc\xf8\xff\xff?\x03\x00\x08\xfc\x02\xfe\xe6\x0c\xff\
+\xab\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x043\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xe5IDATh\x81\xed\
+\x9aM\x88\x1cE\x14\xc7\x7f3;\x89.\x18\xf13\x1e\
+\x92\x8b\x8b\xa2&\x06\x14/\xa29\x88\x15\x89\xa9\x18\x15\
+\xd1\xca\x06\x0f\x91\x05=\x88bnB\xc0\x1c\x12\xc4\x83\
+\x07\x15\x0dB\x14\x89\x04\xa2\x96DY\x22/F}\x8a\
+\xb0\x22\x08\x1e4\xbb\x22F\x8c,\x88\xba\xc4\x88\x82_\
+\xc9F=T\x0f\x8c\xbd\xdd]\xdd\xd3a\xa7\x07\xfc\xdd\
+\xa6\xfa\xd5\xab\xf7\xea\xf3\xdf\xd5\xd3\x22\xc1Xw\x11\xb0\
+\x03X\x0b\x5c\x0d,\xa1Y\x9c\x02\xa6\x81)`\xa7\x8a\
+?\x0e\xd0\x020\xd6\xdd\x0c\xbc\x02,\x1fXx\xd5\x98\
+\x03\xb6\xa8\xf8\xf7[I\xcf\xcf0<\xc1w\x99\x03V\
+\xb7\x09\xd3f\xd8\x82\x87\x10\xf3c\x1d\xc2\x9cOsz\
+\x91\x83)\xcbH\xea\xf7\xda\x0ea\xc1\xf6rZ\xc5w\
+\x16)\xa0J\x18\xeb\xe6\xf9o\x12k\xda4o\xb7\xa9\
+\xc2\x92\xf6\xa0#\xa8\xcb\xff\x09\x0c\x9a\xa1O\xa0\xa9\xbb\
+\xcd=\xc0]\xc0K*\xfe\xdd\x22\xdb\xc6\x8d\x80\xb1\xee\
+\x11\xc0\x03\xe3\xc0ac\xddnc]\xeeN\xd9\xa8\x04\
+\x8cu\xe3\xc0S=E-\xe0A\xe0\x85\xbc:\x8d\x99\
+B\xc6\xbau\xc0\xcb$\x023\xc5Vc\xdd\x91\xacz\
+\x8d\x18\x01c\xddu\xc0\x1b\xc0\xd2\x02\xb3\x0dY\x85\x03\
+O\xc0Xw\x19 \xc0\xb2\x88\xe9\x8bY\x85\x03M\xc0\
+Xw\x09p\x98\xb8\x1a~R\xc5\xbf\x9a\xf5``\x09\
+\x18\xeb\x96\x01\x87\x80\xb1\x88\xe9>\xe0\xd1\xbc\x87\x03I\
+\xc0X\xb7\x14x\x13\xb86b\xfa60\xa1\xe2\xff\xc9\
+3X\xf4\x04\x8cumB\xaf\x9a\x88\xe9'\xc0\xdd*\
+~\xbe\xc8h\x10#\xf04\xe0\x226_\x01\x1bU\xfc\
+o1g\xa5\x120\xd6\xb5\x92\x9e\xab\x85\xb1n;\xf0\
+p\xc4\xec{`}\xf7\xd6!FaPI\xe0\xdb\x80\
+?\x80ic\xdd\x9aR\x91f\xfb\x9a\x00\x1e\x8f\x98\xfd\
+\x02\xdc\xaa\xe2\xbf-\xeb77\x81D\x7fL\x12\x8e\xf6\
+\xb3\x80\xab\x80\xf7\x8cuW\x94u\xde\xe3k\x13\xb0'\
+b\xf6\x17p\x87\x8a\xff\xbc\x8a\xef\xa2\x11x\x0e\xd8\x94\
+*[\x0e\xa8\xb1\xee\xd2\xb2\x0d\x18\xebn\x00^c\xe1\
+\x0by/\x7f\x03\xf7\xaa\xf8\x0f\xcb\xfa\xed\x92\x99@\xd2\
+c\x0f\xe4\xd4YA\x18\x89\x151\xe7\xc6\xbaU\xc0A\
+`4b\xfa\x90\x8a?\x10\xf3\x97E\xde\x08\x5c\x10\xa9\
+7FH\xe2\xe2<\x03c\xddJ\xc2)\x1b\xf3\xb5K\
+\xc5?\x1f\xb1\xc9%/\x81\xfd\x84}\xb8\x88+\x81w\
+\x8cu\xe7\xa5\x1f\x18\xeb\xce'\x04\xbf2\xe2c\x8f\x8a\
+\xdf\x11\x8d\xb2\x80\xcc\x04T\xfc)\x82\xfa\xcb\x94\xb0=\
+\x5c\x03\x1c2\xd6\x9d\xd3-0\xd6\x8d\x12\xa6\xcd\xaaH\
+\xddI\x82\xd6\xafE\xee\x22V\xf1'\x80[\x80\xa3\x11\
+\x1f\xd7\x03\x07\x8du\xa3\xc6\xba\x11\xc2\x82\xbd1Rg\
+\x0a\x18W\xf1\xb5o\x00\x0b\xcf\x01\x15\xff#\xb0\x0e\x98\
+\x8d\xf8\xb9\x098@\xd8*\xd3;W\x9ai\xe0v\x15\
+\xffg\xc9\x18\x0b\x89\x9e\xae*~\x96\xa0[~\x88\x98\
+n\x00&\x226\xb3\x84\x83\xea\xe7r\xe1\xc5)%\x0f\
+T\xfc\xd7\x84\x91\xf8\xa9F['\x08\x12\xe1\xbb\x1a>\
+\x16PZ\xdf\xa8\xf8\x19`=\xf0k\x1f\xed\xfc\x0e\xdc\
+\xa6\xe2\xbf\xec\xa3n!\x95\x04\x9a\x8a\xff\x14\xd8\x98\x04\
+T\x96y`\xb3\x8a\xff\xb8J[e\xa9\xac0U\xfc\
+\x14p'A\xbb\x94\xe1~\x15\xffV\xd5v\xca\xd2\x97\
+DNn\xcb6\x13z\xb7\x88\xed*~o?m\x94\
+\xa5o\x8d\xaf\xe2'\x81\xad\x04!\x96\xc5\xb3*\xfe\x89\
+~\xfd\x97\xa5\xd6K\x8a\x8a\xdf\x0f\xdc\xc7\xc25\xb1\x1b\
+\xd8V\xc7wYj\xdf\xcc\xa9\xf8}\xc6\xba\x8f\x08\x07\
+\xd8\xb9\xc0\x07\xc9:Y\x14\xce\xc8\xd5\xa2\x8a\xff\x06x\
+\xe6L\xf8\xaaJ\x9b\xf0\x05|X9\xd9!h\x93\xde\
+\xfb\x99\x91\xe4k`\x13I\xbf\xd5Mw\x08\xca0}\
+\xc1T\xf4\xfa\xd7$\xa6\xda\xc0N\xc2g\xfbac\x0e\
+\xd8\xd5N\xee_\xb60\x5cIt\xff\xecq|\x04\xe0\
+\xd8\xd1\x99cc\x97\xaf\xde\x0b\x9cM\xf8\xf0}!\xcd\
+\x9bF'\x81\xcf\x80\xd7\x01\xa7\xe2\xbf\x00\xf8\x17]\x81\
+\x0b8\xb3\xfa \x9c\x00\x00\x00\x00IEND\xaeB\
+`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1c\x1f$\
+\xc6\x09\x17\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05\xff\xcf\xc3XL\xc8\x5c&dY&d\xc5p\x0e\
+\xa3!\x9c\xc3h\x88a\x1a\x0a\x00\x00m\x84\x09u7\
+\x9e\xd9#\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xdc\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x8eIDATh\x81\xed\
+\x9a\xafN\xc3P\x14\x87\xbfn\x1d\x0a\x1cA\x1e\x83\x04\
+\xc4\x0cjA\x10\x04\x82\x80\x9e\xe7\x05x\x80!x\x01\
+^\x00\x8f\xc2\x00rA\x90=\xc2@1s\xe42\x14\
+\xc1\xecO\x82h\x1b\xb6e\xed(\xebv\xda\xe5~\xae\
+\xf7\x5c\xf1\xfb\xda{o\x9a\xdc\xe3\x11\xa2\xaa\xdb\xc05\
+P\x03\xf6\x81\x0a\xf9b\x00\xb4\x81\x16p#\x22=\x00\
+\x0f@U\x8f\x81{`\xc7,^:\xba@]D^\
+\xbc\xf0\xcd\xbfQ\x9c\xf0\x11]`\xafD\xb0l\x8a\x16\
+\x1e\x82\xcc\x0d\x9f`\xcdO3Zq\x98\xbfR\x9ez\
+\xae\xf9\x04\x1bv\x9c\x91\x88\xf8+\x0a\x94\x0aU\x1d2\
+)qP\x22\x7f\xa7M\x1a*%\xeb\x04\x8b\xe2\x04\xac\
+q\x02\xd68\x01k\x9c\x805N\xc0\x1a'`\xcd\xdc\
+\xdffU=\x01\x0e\x81\xcd\xe5\xc7\x99`\x08\xbc\x03O\
+\x22\xf2\x1d7)V@U}\xe0\x018\xcf>[*\
+:\xaaz*\x22\x1f\xb3\x8aIK\xe8\x0a\xfb\xf0\x00\xbb\
+\xc0]\x5c1I\xe0,\xfb,\xff\xe6HU\xb7f\x15\
+\x0a\xbf\x89\x93\x04\x9eW\x96b>\xaf\x22\xf25\xab\x90\
+$p\x0b<.'O*:\xc0e\x5c1\xf6\x14\x12\
+\x91!pQ\xd8c4BD\x9a@3\xc3`\x99\xb2\
+\xd6\x9b\xb8\x108\x01k\x9c\x805N\xc0\x1a'`\x8d\
+\x13\xb0f-\x04\x06\xd6!\x16\xa0\xef\x13\x5c\xdfW\xc7\
+\x06\xcb\xe1m`\x1e\x99\xbefm\xfb\x04\xbd\x07\xd59\
+\x13\xf3J\xab\xf8\xad\x06a\xd7G=\x1c(\x0aQ\xb3\
+G\xcf\x8bF\xc2/\xd1\xe0\xb7\xddf\xc3(\x5c\x1c}\
+&\xdbm>\x01~\x00%\xf8ZCUN:\x7f\x00\
+\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xfc\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xaeIDATh\x81\xed\
+\x9a\xbdJ\x03A\x14FO6\x1b\xb0\xd0J\xf1\x01\x14\
+\xabh\x91\xc6*X\xb8\x16\xb2\x88v\x0b\xe9}\x01\x1f\
+@\x8b\xf8\x00\xbe\x80\x85\x9d0b\xa32U\xc6B\xf2\
+\x02B\x92F\x83}H'6\xf9\x01\x8b\xdd@\x12\xb2\
+\x89k~f7\xcc\xe9v\xef\x14\xdfY\xee\x0c\x0bw\
+R\x048\xae\xb7\x01\x5c\x01y`\x17\xc8\x10/\xda@\
+\x05(\x03E%E\x13 \x05\xe0\xb8\xde!p\x0fl\
+j\x8b\x17\x8d\x06PPR\xbc\xa6\x82/_%9\xe1\
+{4\x80\xac\x85\xdf6I\x0b\x0f~\xe6K\x1b\xbf\xe7\
+\x87\xe9.8\xcc_I\x0f=\xe7m\xfc\x0d\xdbOW\
+Ia/(P$\x1c\xd7\xeb0(\xb1g\x11\xbf\xd3\
+&\x0a\x19Kw\x82i1\x02\xba1\x02\xba1\x02\xba\
+1\x02\xba1\x02\xba1\x02\xba\x99\xf8\xdb\xec\xb8\xde\x11\
+\xb0\x0f\xac\xce?\xce\x00\x1d\xa0\x06<+)~\xc2\x16\
+\x85\x0a8\xaeg\x03\x8f\xc0\xe9\xec\xb3E\xa2\xee\xb8\xde\
+\xb1\x92\xe2sTq\x5c\x0b]\xa0?<\xc06p\x1b\
+V\x1c'p2\xfb,\xff\xe6\xc0q\xbd\xb5Q\x85\xc4\
+o\xe2q\x02/\x0bK1\x997%\xc5\xf7\xa8\xc28\
+\x81\x1b\xe0i>y\x22Q\x07\xce\xc3\x8a\xa1\xa7\x90\x92\
+\xa2\x03\x9c%\xf6\x18\xed\xa1\xa4(\x01\xa5\x19\x06\x9b)\
+K\xbd\x89\x13\x81\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\
+\x8d\x11\xd0\xcdR\x08\xb4u\x87\x98\x82\x96\x8d?\xbe\xcf\
+\xf5\xbdL\x07\xd3\xc082\xaa_[\
+;\xd9;`\x05\x7f\xf0\xbdN\xfc\xda\xa8\x05\xbc\x03\x0f\
+\x80\xa7\xa4\xa8\x01\xfc\x02Q\xab\x5c\x8a?\xde\xe3Y\x00\
+\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\x9e\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
+\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
+\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b``4D\xe2 s\x19\x90\x8d@\x02\
+\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\x9e\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
+\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
+\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x07\xdd\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00x\xccD\x0d\
+\x00\x00\x05RiTXtXML:com.\
+adobe.xmp\x00\x00\x00\x00\x00\
+xpacket begin=\x22\xef\
+\xbb\xbf\x22 id=\x22W5M0MpCe\
+hiHzreSzNTczkc9d\
+\x22?>\x0a\x0a \x0a \x0a \x0a \
+\x0a branch_close<\
+/rdf:li>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\
+/rdf:RDF>\x0a\x0aX\xad\xf2\x80\x00\x00\
+\x01\x83iCCPsRGB IEC61\
+966-2.1\x00\x00(\x91u\x91\xcf+D\
+Q\x14\xc7?fh\xfc\x18\x8dba1e\x12\x16B\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3\
+j\xdex\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\
+\xc0VY+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\
+\x99s;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8a\
+fV\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\
+\xb7T\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\
+\xa8\xa8\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\
+\x12nRR\xb1E\xe1\x13\xe1.C.(|c\xeb\
+\xf1\x22?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0\
+/\xf9\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\
+\xfc\xdc\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&\
+D\x00\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>z\
+dE\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0\
+D\x92\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19i\
+rv\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\
+\xac\xd7vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\
+\x0fp\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9eu8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\
+\x0a\x92S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\
+\xc5\x9e\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e\
+9\xefY\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00\xa2IDAT\x18\x95U\xcf\xb1J\
+\xc31\x00\xc4\xe1/\xff\xb9\x93\xa3\x93\xb8\xa5\x8b\x0f \
+UD\x10\x5c:\x84,\x1d\x5c|\x0f\xb7\x8e>J\x88\
+\xa3\xb8\x08m\x05\xbbw\xc8\xea\xe2\x0bto\xe9\xd2B\
+zpp\xf0\xe3\x0e.\xa4\xd2\xae\xf0\x8a\xf7\x9a\xe3V\
+\xa7\x01\xd7x\xc32\x95vy\x06k\x8e\xdfx\xc1\x18\
+\xbf\xa9\xb4\xf1\x09\x86SH\xa5=\xe2\x03;Lk\x8e\
+\xab\xd0\xcf\xa4\xd2n\xf0\x89\x0b\xdc\x0f\xce\xb5?: \
+\x0c]\xeb\x01?\x18\xe1\xa9\xe6\xb8\x1e\x8e`\x86/l\
+q[s\x5c@H\xa5\xdda\x81\x0d\x9ek\x8e\xff\xfd\
+\xcf?\xcc1\xe9\x01\x1c\x00sR-q\xe4J\x1bi\
+\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x03\xfb\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xadIDATh\x81\xed\
+\x9aO\xa8\x15U\x1c\xc7?\xf7\xbe\xab\xf2 \xa3\x22m\
+\xa1|!\x09*K(\xdaD\xb9\x88RL\xccjQ\
+\xf9\xa4\x85\xf1\xa0\x16Q\xe4.\x10tQD\x8b\x16\x15\
+%\x81\xb5(\x04\xad\xc0\xe2ad\xf6\x97\xe0E\x10\xb4\
+\xa9'DE\xc4\x17\xa2\x125\x0a*\xff<\xab\xc5\x99\
+[\xd7y3s\xce\xdcko\xee\x05?\xbb9\xf3;\
+\xbf\xf3\xfb\x9d3\xe7\x9c\xef\x9c\x99\x16\x19\xb6/\x06v\
+\x00\xab\x81\xab\x81\x05\x0c\x17\xa7\x80\x19`\x1axL\xd2\
+\x11\x80\x16\x80\xed\x9b\x81\xbd\xc0\xd2\xc6\xc2\xab\xc7a`\
+\xb3\xa4\x0f[Y\xcf\x1fbt\x82\xefr\x18\xb8\xaaM\
+xlF-x\x081o\xef\x10\x9e\xf9<\xa7\xe79\
+\x98T\xc6r\xd7\xab;\x84\x09\xdb\xcbiI\x9dy\x0a\
+\xa8\x16\xb6g93\x89Um\x86o\xb5\xa9\xc3\x82v\
+\xd3\x11\x0c\xca\xb9\x04\x9a\xe6\x5c\x02\xff\x07\xb6\xef\xb6\xbd\
+\xd7\xf6\xda\x98\xed\xd0%`\xfb\x11\xe0u`\x028h\
+{\xa7\xed\xd2\x95r\xa8\x12\xb0=\x01<\xddS\xd4\x02\
+\x1e\x04^,\xab34\x1b\x96\xed5\xc0+d\x023\
+\xc7\x16\xdb_\x16\xd5\x1b\x8a\x11\xb0}\x1d\xf0\x06\xb0\xb0\
+\xc2l}Qa\xe3\x09\xd8\xbe\x0cx\x1bX\x1c1}\
+\xa9\xa8\xb0\xd1\x04l_\x02\x1c$\xae\x86\x9f\x92\xf4j\
+\xd1\x8d\xc6\x12\xb0\xbd\x188\x00\xac\x88\x98\xee\x06\x1e-\
+\xbb\xd9H\x02\xb6\x17\x02o\x02\xd7FL\xdf\x01&%\
+\xfd]f0\xef\x09\xd8n\x13z\xf5\x96\x88\xe9g\xc0\
+]\x92f\xab\x8c\x9a\x18\x81g\x80{\x226_\x03\x1b\
+$\xfd\x1es\x96\x94\x80\xedV\xd6s\x03a{\x1b\xf0\
+p\xc4\xecG`]\xf7\xd4!FePY\xe0[\x81\
+?\x81\x19\xdb\xab\x92\x22-\xf65\x09<\x111\xfb\x15\
+\xb8U\xd2\xf7\xa9~K\x13\xc8\xf4\xc7\x14ak_\x04\
+\x5c\x09\xbco\xfb\xf2T\xe7=\xbe6\x02\xbb\x22f'\
+\x80;$}Q\xc7w\xd5\x08<\x0fl\xcc\x95-\x05\
+>\xb0}ij\x03\xb6o\x00^c\xee\x0by/\x7f\
+\x01\xf7J\xfa8\xd5o\x97\xc2\x04\xb2\x1e{\xa0\xa4\xce\
+2\xc2H,\x8b9\xb7\xbd\x12\xd8\x0f\x8cGL\x1f\x92\
+\xb4/\xe6\xaf\x88\xb2\x11\xb8(Ro\x05!\x89%e\
+\x06\xb6\x97\x13v\xd9\x98\xaf\xc7%\xbd\x10\xb1)\xa5,\
+\x81=\x84u\xb8\x8a+\x80wm_\x90\xbfa\xfbB\
+B\xf0\xcb#>vI\xda\x11\x8d\xb2\x82\xc2\x04$\x9d\
+\x22\xa8\xbfB\x09\xdb\xc35\xc0\x01\xdb\xe7u\x0bl\x8f\
+\x13\x1e\x9b\x95\x91\xbaS\x04\xad?\x10\xa5\x93X\xd21\
+`-\xf0M\xc4\xc7\xf5\xc0~\xdb\xe3\xb6\xc7\x08\x13\xf6\
+\xc6H\x9di`B\xd2\xc0'\x80\x95\xfb\x80\xa4\x9f\x81\
+5\x80#~n\x02\xf6\x11\x96\xca\xfc\xca\x95g\x06\xb8\
+]\xd2\xf1\xc4\x18+\x89\xee\xae\x92L\xd0-?EL\
+\xd7\x03\x93\x11\x1b\x136\xaa_\xd2\xc2\x8b\x93$\x0f$\
+}K\x18\x89\xa3\x03\xb4u\x8c \x11~\x18\xc0\xc7\x1c\
+\x92\xf5\x8d\xa4C\xc0:\xe0\xb7>\xda\xf9\x03\xb8M\xd2\
+W}\xd4\xad\xa4\x96@\x93\xf49\xb0!\x0b(\x95Y\
+`\x93\xa4O\xeb\xb4\x95Jm\x85)i\x1a\xb8\x93\xa0\
+]R\xb8_\xd2[u\xdbI\xa5/\x89,\xe9=`\
+\x13\xa1w\xab\xd8&\xe9\xe5~\xdaH\xa5o\x8d/i\
+\x0a\xd8B\x10bE<'\xe9\xc9~\xfd\xa72\xd0K\
+\x8a\xa4=\xc0}\xcc\x9d\x13;\x81\xad\x83\xf8Ne\xe0\
+\x939I\xbbm\x7fB\xd8\xc0\xce\x07>\xca\xe6\xc9\xbc\
+pV\x8e\x16%}\x07<{6|\xd5\xa5M\xf8\x02\
+>\xaa\x9c\xec\x10\xb4I\xef\xf9\xccX\xf65p\x18\xc9\
+\xbf\xd5\xcdt\x08\xca0\x7f\xc0T\xf5\xfa7LL\x8f\
+\xfe\xaf\x06\xd9\xf9\xcb\xe6\xac`T\xe8\xfe\xecq\xe4\xdf\
+\x8f\x09\xd9Hl\xe7\xbf\xdfm\xaa\xce\xea\x9b\xe0$g\
+\xfens\x14\xe0\x1f\x0aC\x12kO\xfd?\x13\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
+R+\x9c\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05s>\xc0XL\xc8\x5c&dY&d\xc5pN\
+\x8a\x00\x9c\x93\x22\x80a\x1a\x0a\x00\x00)\x95\x08\xaf\x88\
+\xac\xba4\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xe1\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x93IDATh\x81\xed\
+\x9a;N\xc3@\x10\x86\xbfq\x1c*\xe8\x10\xe56\x94\
+\xd0\xa4\xa1\x8a(\x22\x0a\x0aD\x9f\x9e\x0bp\x80Pp\
+\x01.\xc0\x15h\x80\x13\xa0\x1c!P\x91f\xbbD\xa1\
+B4yh(l\x1e\xb1\xfcH\x08\xc9\xda\xd2~\x9d\
+w\x5c\xfc\x9f\xb3\x1e9\xda\x11bTu\x17\xb8\x02\x9a\
+\xc0!P\xa7\x5cL\x80\x1e\xd0\x05\xaeEd\xf4]Q\
+\xd5\x96\xaa\x0e\xb4:\x0cT\xb5\x05 \x1a=\xf9g`\
+\xcf\xc5c]\x81!p\x10\x10m\x9b\xaa\x85\x87(s\
+'$\xda\xf3If\x1b\x0e\xb3(\xb5\xc4uSTu\
+\xcc\xfc\x0b;\x13\x91p\x83\xa1\x16FU\xa7\xccKL\
+\x02\xca\xd7m\x96\xa1\x1e\xb8N\xb0*^\xc05^\xc0\
+5^\xc05^\xc05^\xc05^\xc05\x85\x9f\xcd\
+\xd6\xda\x13\xe0\x08\xd8^\x7f\x9c9\xa6\xc0\x0b\xf0`\x8c\
+\xf9\xc8\xbaITU\x13k3\x11\x09\xad\xb5!p\x07\
+\x9c\xaf1\xe4\x22\xf4\x81Sc\xcck\xca\xff\x81\xdc-\
+t\x89\xfb\xf0\x00\xfb\xc0mV1O\xe0\xec\xff\xb3\xfc\
+\x99ck\xedNZ\xa1\xf2/q\x9e\xc0\xe3\xc6R\x14\
+\xf3d\x8cyO+\xe4\x09\xdc\x00\xf7\xeb\xc9\xb3\x14}\
+\xe0\x22\xab\x98\xd9\x85\xbe.\xca\xd4F\xd3\xbaP\xa1@\
+\x99X\xb6\x8dV\x02/\xe0\x1a/\xe0\x1a/\xe0\x1a/\
+\xe0\x1a/\xe0\x1a/\xe0\x9a\x80\xe8\x04\xbc\xaa\x8cC\xa2\
+\xe3\xfb\xc6\xaf\xc5Z\xfc\xd9ZF\x92\xc7\xac\xbd\x90h\
+\xf6\xa0QpcY\xe9V\x7f\xd4 \x9e\xfah\xc7\x0b\
+Ua\x08\xb4Ed$_+\xf1/\xd1\xe1g\xdcf\
+\xcbQ\xb8,\xc6\xcc\x8f\xdb\xbc\x01|\x02mw#\xb3\
+\xd4\x95Sv\x00\x00\x00\x00IEND\xaeB`\x82\
+\
+\x00\x00\x01W\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x09IDATh\x81\xed\
+\xda\xcdm\xc2@\x14E\xe1\xf3\x8cI\x05Q\x9aH6\
+\xecY\xd1\x05\xc5\x90Ej\xa3\x04R\x04\x884`\x82\
+n\x163\xf9\xb1\xa5(DH\x5c[z\xdf\x8e\xc1\x8b\
+w\x8c\xcdf&\xa8$\xdd\x03\xcf\xc0\x12x\x02\xe6\x8c\
+\xcb\x09\xd8\x01[\xe0%\x22\x8e_\xdfHZI\xdak\
+:\xf6\x92V\x00\xa1r\xe7_\x81\x07\xc7m\xbd\xc2\x01\
+xl(\x8f\xcd\xd4\x86\x872\xf3\xa6\xa5<\xf3C\xe7\
+\x1b\x0fs\xa9\xd9\xe0\xf32$u\xf4_\xd8sD\xb4\
+7\x1c\xeab\x92\xde\xe9G\x9c\x1a\xc6\xf7o\xf3\x1f\xf3\
+\xc6=\xc1\xb52\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0\
+-\x03\xdc2\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0-\
+\x03\xdc2\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0\xad\xa1\
+\xec\x80OU\xd7R\xb6\xef\x17?\x16gu7p\x8c\
+\x86\xdb\xac\xbb\x96r\xf6`\xf1\xc7\x85c\xb5\x9d\xfeQ\
+\x83z\xeac]\x17\xa6\xe2\x00\xac#\xe2\x18\x9f+\xf5\
+\x97\xd8\xf0}\xdc\xe6\xce4\xdco:\xfa\xc7m\xde\x00\
+>\x00G\xd7\xea\xb1\xadi\xe1\xd6\x00\x00\x00\x00IE\
+ND\xaeB`\x82\
+\x00\x00\x01v\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01(IDATh\x81\xed\
+\xda\xb1J\xc3P\x14\x87\xf1/7\xb7\xe0\xae\xf8\x00\x82\
+Su\xe8\xde\xc9ly\x80@\x1fF\x87\xfa\x22nB\
+\xdc\xb3\xc5\xa9/ \xb4]:t\x0f}\x82j\xc1\xe1\
+\xa6P\xb3h\x10\xfa\xcf\x85\xf3\xdbR:\x9c\xaf\xdcf\
+97\xa1\x95\xe5\xc5\x15\xf0\x04L\x81;`\xc4\xb0|\
+\x02K`\x01\xcc\xeb\xaa\xdc\x01$\x00Y^<\x00\xaf\
+\xc0\xb5l\xbc~\x1a`VW\xe5{\xd2\xfe\xf2+\xe2\
+\x19\xfe\xa8\x01\xc6\x8eplb\x1b\x1e\xc2\xcc\x8f\x9ep\
+\xe6\xbb\x0eg\x1e\xe6\xaf\xd2\xce\xf3\xd4\x13\xfe\xb0\xa7\x0e\
+uU\xfa3\x0d\xd4K\x96\x17_\xfc\x8c\xb8w\x0c\xef\
+m\xd3\xc7\xc8\xa9'\xf8/\x0bP\xb3\x005\x0bP\xb3\
+\x005\x0bP\xb3\x005\x0bP\xb3\x005\x0bP\xb3\x00\
+5\x0bP\xb3\x005\x0bP\xb3\x005\x0bP\xb3\x005\
+\x0bPs\x84\x0dx\xac\xf6\x9e\xb0\xbe\x9f\x9c|\x98\xb6\
+\xdb\xc0!\xea\xaeY\x97\x9ep\xf7`\xf2\xcb\x17\x87j\
+\xe1\x809am\x1f\x9b\x06xv\xed\xad\x8f\x19qE\
+\x1c/{\xecR\x80\xedf\xb5\xbd\xb9\x1d\xbf\x00\x17\x84\
+\xc5\xf7%\xc3;F{\xe0\x03x\x03\x8a\xba*\xd7\x00\
+\xdf\xa4\xb56\xa2\xca\x99tG\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+"
+
+qt_resource_name = b"\
+\x00\x08\
+\x06\xc5\x8e\xa5\
+\x00o\
+\x00p\x00e\x00n\x00p\x00y\x00p\x00e\
+\x00\x06\
+\x07\x03}\xc3\
+\x00i\
+\x00m\x00a\x00g\x00e\x00s\
+\x00\x17\
+\x0ce\xce\x07\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
+\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x1a\
+\x03\x0e\xe4\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+\x00 \
+\x0f\xd4\x1b\xc7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+\x00\x15\
+\x03'rg\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\
+\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x01\x1f\xc3\x87\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\
+\x00\x0e\
+\x04\xa2\xfc\xa7\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x1b\
+\x03Z2'\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\
+\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x02\x9f\x05\x87\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x01.\x03'\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\
+\x00g\
+\x00\x1c\
+\x0e<\xde\x07\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x06S%\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00o\x00p\x00e\x00n\x00.\x00p\x00n\x00g\
+\x00\x0e\
+\x0e\xde\xfa\xc7\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x0b\xda0\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00.\x00p\x00n\x00g\
+\
+\x00\x15\
+\x0f\xf3\xc0\x07\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\
+\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x05\x8f\x9d\x07\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00o\x00p\x00e\x00n\x00_\x00o\x00n\x00.\x00p\x00n\
+\x00g\
+\x00\x1a\
+\x05\x11\xe0\xe7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00\x16\
+\x01u\xcc\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x0c\xe2hg\
+\x00t\
+\x00r\x00a\x00n\x00s\x00p\x00a\x00r\x00e\x00n\x00t\x00.\x00p\x00n\x00g\
+\x00\x17\
+\x0c\xabQ\x07\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
+\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x1d\
+\x09\x07\x81\x07\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x03\x8d\x04G\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\
+\x00g\
+\x00\x1a\
+\x01\x87\xaeg\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00.\x00p\x00n\x00g\
+\x00#\
+\x06\xf2\x1aG\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\
+\x00n\x00g\
+\x00\x0c\
+\x06\xe6\xe6g\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x00\xb8\x8c\x07\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\
+\x00\x0f\
+\x01s\x8b\x07\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\x00\x14\
+\x04^-\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00_\x00o\x00n\x00.\
+\x00p\x00n\x00g\
+\x00\x14\
+\x07\xec\xd1\xc7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00.\
+\x00p\x00n\x00g\
+\x00\x18\
+\x03\x8e\xdeg\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\
+\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00 \
+\x09\xd7\x1f\xa7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00\x1c\
+\x08?\xdag\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00\x1f\
+\x0a\xae'G\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x16\x00\x02\x00\x00\x00 \x00\x00\x00\x03\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x04\xb8\x00\x00\x00\x00\x00\x01\x00\x008:\
+\x00\x00\x01{\xe9xF\xdd\
+\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x07]\
+\x00\x00\x01{\xe9xF\xdb\
+\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x09\xfc\
+\x00\x00\x01{\xe9xF\xd9\
+\x00\x00\x04\xe0\x00\x00\x00\x00\x00\x01\x00\x008\xe4\
+\x00\x00\x01{\xe9xF\xe0\
+\x00\x00\x03 \x00\x00\x00\x00\x00\x01\x00\x00'R\
+\x00\x00\x01}\x0f$Y\x81\
+\x00\x00\x04\x14\x00\x00\x00\x00\x00\x01\x00\x003\xb8\
+\x00\x00\x01}\x0f$Y~\
+\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x09X\
+\x00\x00\x01{\xe9xF\xdd\
+\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x00\xaa\
+\x00\x00\x01}\x0f$Y~\
+\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x06\xb3\
+\x00\x00\x01{\xe9xF\xda\
+\x00\x00\x01V\x00\x00\x00\x00\x00\x01\x00\x00\x08\xaf\
+\x00\x00\x01{\xe9xF\xd9\
+\x00\x00\x03\xea\x00\x00\x00\x00\x00\x01\x00\x003\x14\
+\x00\x00\x01{\xe9xF\xde\
+\x00\x00\x05`\x00\x00\x00\x00\x00\x01\x00\x00Ef\
+\x00\x00\x01{\xe9xF\xde\
+\x00\x00\x05\x04\x00\x00\x00\x00\x00\x01\x00\x009\x86\
+\x00\x00\x01{\xe9xF\xd7\
+\x00\x00\x014\x00\x00\x00\x00\x00\x01\x00\x00\x08\x06\
+\x00\x00\x01{\xe9xF\xda\
+\x00\x00\x02\xe6\x00\x00\x00\x00\x00\x01\x00\x00#O\
+\x00\x00\x01}\x0f$Y}\
+\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x1b\
+\x00\x00\x01{\xe9xF\xd8\
+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x13\
+\x00\x00\x01{\xe9xF\xd8\
+\x00\x00\x04\x9a\x00\x00\x00\x00\x00\x01\x00\x007\x98\
+\x00\x00\x01{\xe9xF\xdf\
+\x00\x00\x04N\x00\x00\x00\x00\x00\x01\x00\x005\x98\
+\x00\x00\x01}\x0f$Y\x7f\
+\x00\x00\x052\x00\x00\x00\x00\x00\x01\x00\x00Ag\
+\x00\x00\x01}\x0f$Y|\
+\x00\x00\x05\xdc\x00\x00\x00\x00\x00\x01\x00\x00G\xef\
+\x00\x00\x01}\x0f$Y\x82\
+\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00.\xdd\
+\x00\x00\x01}\x0f$Y}\
+\x00\x00\x05\x96\x00\x00\x00\x00\x00\x01\x00\x00F\x0a\
+\x00\x00\x01}\x0f$Y\x80\
+\x00\x00\x06\x1a\x00\x00\x00\x00\x00\x01\x00\x00IJ\
+\x00\x00\x01}\x0f$Y\x81\
+\x00\x00\x02d\x00\x00\x00\x00\x00\x01\x00\x00\x13\xc7\
+\x00\x00\x01{\xe9xF\xd7\
+\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01{\xe9xF\xdc\
+\x00\x00\x03v\x00\x00\x00\x00\x00\x01\x00\x00.3\
+\x00\x00\x01{\xe9xF\xdb\
+\x00\x00\x03R\x00\x00\x00\x00\x00\x01\x00\x00(\xb1\
+\x00\x00\x01}\x0f$k\xb6\
+\x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xa6\
+\x00\x00\x01}\x0f$Y\x82\
+\x00\x00\x02B\x00\x00\x00\x00\x00\x01\x00\x00\x13\x1d\
+\x00\x00\x01{\xe9xF\xdc\
+\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc0\
+\x00\x00\x01}\x0f$Y\x80\
+\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x1bx\
+\x00\x00\x01{\xe9xF\xdf\
+"
+
+
+def qInitResources():
+ QtCore.qRegisterResourceData(
+ 0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(
+ 0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
diff --git a/usd_qtpy/style/qrc_resources.py b/usd_qtpy/style/qrc_resources.py
new file mode 100644
index 0000000..85f9122
--- /dev/null
+++ b/usd_qtpy/style/qrc_resources.py
@@ -0,0 +1,34 @@
+import qtpy
+
+
+initialized = False
+resources = None
+if qtpy.API == "pyside6":
+ from . import pyside6_resources as resources
+elif qtpy.API == "pyside2":
+ from . import pyside2_resources as resources
+elif qtpy.API == "pyqt5":
+ from . import pyqt5_resources as resources
+
+
+def qInitResources():
+ global resources
+ global initialized
+ if resources is not None and not initialized:
+ initialized = True
+ resources.qInitResources()
+
+
+def qCleanupResources():
+ global resources
+ global initialized
+ if resources is not None:
+ initialized = False
+ resources.qCleanupResources()
+
+
+__all__ = (
+ "resources",
+ "qInitResources",
+ "qCleanupResources"
+)
diff --git a/usd_qtpy/style/resources.qrc b/usd_qtpy/style/resources.qrc
new file mode 100644
index 0000000..077f074
--- /dev/null
+++ b/usd_qtpy/style/resources.qrc
@@ -0,0 +1,36 @@
+
+
+ images/combobox_arrow.png
+ images/combobox_arrow_disabled.png
+ images/branch_closed.png
+ images/branch_closed_on.png
+ images/branch_open.png
+ images/branch_open_on.png
+ images/combobox_arrow_on.png
+ images/down_arrow.png
+ images/down_arrow_disabled.png
+ images/down_arrow_on.png
+ images/left_arrow.png
+ images/left_arrow_disabled.png
+ images/left_arrow_on.png
+ images/right_arrow.png
+ images/right_arrow_disabled.png
+ images/right_arrow_on.png
+ images/up_arrow.png
+ images/up_arrow_disabled.png
+ images/up_arrow_on.png
+ images/checkbox_checked.png
+ images/checkbox_checked_hover.png
+ images/checkbox_checked_focus.png
+ images/checkbox_checked_disabled.png
+ images/checkbox_unchecked.png
+ images/checkbox_unchecked_hover.png
+ images/checkbox_unchecked_focus.png
+ images/checkbox_unchecked_disabled.png
+ images/checkbox_indeterminate.png
+ images/checkbox_indeterminate_hover.png
+ images/checkbox_indeterminate_focus.png
+ images/checkbox_indeterminate_disabled.png
+ images/transparent.png
+
+
diff --git a/usd_qtpy/style/style.css b/usd_qtpy/style/style.css
new file mode 100644
index 0000000..fe0dffe
--- /dev/null
+++ b/usd_qtpy/style/style.css
@@ -0,0 +1,710 @@
+/*
+Enabled vs Disabled logic in most of stylesheets
+
+- global font color
+ Enabled - should be same globally except placeholders
+ Disabled - font color is greyed out
+
+- global active/hover
+ Enabled - color motive of borders and bg color
+ - combobox, slider, views, buttons, checkbox, radiobox, inputs
+
+- QLineEdit, QTextEdit, QPlainTextEdit, QAbstractSpinBox
+ Enabled - bg has lighter or darker color
+ Disabled - bg has same color as background
+
+- QComboBox, QPushButton, QToolButton
+ Enabled - slightly lighter color
+ Disabled - even lighter color
+*/
+
+* {
+ font-size: 9pt;
+ font-family: "Noto Sans";
+ font-weight: 450;
+ outline: none;
+}
+
+*[font-style="monospace"] {
+ font-family: "Noto Sans Mono";
+}
+
+QWidget {
+ color: {color:font};
+ background: {color:bg};
+ border-radius: 0px;
+}
+
+QWidget:disabled {
+ color: {color:font-disabled};
+}
+
+/* Some DCCs have set borders to solid color */
+QScrollArea {
+ border: none;
+}
+
+QLabel {
+ background: transparent;
+}
+
+/* Inputs */
+QAbstractSpinBox, QLineEdit, QPlainTextEdit, QTextEdit {
+ border: 1px solid {color:border};
+ border-radius: 0.2em;
+ background: {color:bg-inputs};
+ padding: 0.1em;
+}
+
+QAbstractSpinBox:disabled, QLineEdit:disabled, QPlainTextEdit:disabled, QTextEdit:disabled {
+ background: {color:bg-inputs-disabled};
+}
+QAbstractSpinBox:hover, QLineEdit:hover, QPlainTextEdit:hover, QTextEdit:hover{
+ border-color: {color:border-hover};
+}
+QAbstractSpinBox:focus, QLineEdit:focus, QPlainTextEdit:focus, QTextEdit:focus{
+ border-color: {color:border-focus};
+}
+
+QAbstractSpinBox:up-button {
+ margin: 0px;
+ background-color: transparent;
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-top-right-radius: 0.3em;
+ border-top: 0px solid transparent;
+ border-right: 0px solid transparent;
+ border-left: 1px solid {color:border};
+ border-bottom: 1px solid {color:border};
+}
+
+QAbstractSpinBox:down-button {
+ margin: 0px;
+ background-color: transparent;
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-bottom-right-radius: 0.3em;
+ border-bottom: 0px solid transparent;
+ border-right: 0px solid transparent;
+ border-left: 1px solid {color:border};
+ border-top: 1px solid {color:border};
+}
+
+QAbstractSpinBox:up-button:focus, QAbstractSpinBox:down-button:focus {
+ border-color: {color:border-focus};
+}
+QAbstractSpinBox::up-arrow, QAbstractSpinBox::up-arrow:off {
+ image: url(:/openpype/images/up_arrow.png);
+ width: 0.5em;
+ height: 1em;
+ border-width: 1px;
+}
+QAbstractSpinBox::up-arrow:hover {
+ image: url(:/openpype/images/up_arrow_on.png);
+ bottom: 1;
+}
+QAbstractSpinBox::up-arrow:disabled {
+ image: url(:/openpype/images/up_arrow_disabled.png);
+}
+QAbstractSpinBox::up-arrow:pressed {
+ image: url(:/openpype/images/up_arrow_on.png);
+ bottom: 0;
+}
+
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::down-arrow:off {
+ image: url(:/openpype/images/down_arrow.png);
+ width: 0.5em;
+ height: 1em;
+ border-width: 1px;
+}
+QAbstractSpinBox::down-arrow:hover {
+ image: url(:/openpype/images/down_arrow_on.png);
+ bottom: 1;
+}
+QAbstractSpinBox::down-arrow:disabled {
+ image: url(:/openpype/images/down_arrow_disabled.png);
+}
+QAbstractSpinBox::down-arrow:hover:pressed {
+ image: url(:/openpype/images/down_arrow_on.png);
+ bottom: 0;
+}
+
+/* Buttons */
+QPushButton {
+ text-align:center center;
+ border: 0px solid transparent;
+ border-radius: 0.2em;
+ padding: 3px 5px 3px 5px;
+ background: {color:bg-buttons};
+ min-width: 0px; /* Substance Painter fix */
+}
+
+QPushButton:hover {
+ background: {color:bg-buttons-hover};
+ color: {color:font-hover};
+}
+
+QPushButton:pressed {}
+
+QPushButton:disabled {
+ background: {color:bg-buttons-disabled};
+}
+
+QPushButton:checked {
+ background: {color:bg-buttons-checked};
+}
+
+QPushButton::menu-indicator {
+ subcontrol-origin: padding;
+ subcontrol-position: right;
+ width: 8px;
+ height: 8px;
+ padding-right: 5px;
+}
+
+QToolButton {
+ border: 0px solid transparent;
+ background: {color:bg-buttons};
+ border-radius: 0.2em;
+ padding: 2px;
+}
+
+QToolButton:hover {
+ background: {color:bg-buttons-hover};
+ color: {color:font-hover};
+}
+
+QToolButton:disabled {
+ background: {color:bg-buttons-disabled};
+}
+
+QToolButton[popupMode="1"], QToolButton[popupMode="MenuButtonPopup"] {
+ /* make way for the popup button */
+ padding-right: 20px;
+}
+
+QToolButton::menu-button {
+ width: 16px;
+ background: transparent;
+ border: 1px solid transparent;
+ border-left: 1px solid qlineargradient(x1:0, y1:0, x2:0, y2:1, stop: 0 transparent, stop:0.2 {color:font}, stop:0.8 {color:font}, stop: 1 transparent);
+ padding: 3px 0px 3px 0px;
+ border-radius: 0;
+}
+
+QToolButton::menu-arrow {
+ /* Offset arrow a little bit to center. */
+ left: 1px; top: 1px;
+}
+
+QToolButton::menu-arrow:open {
+ /* Don't offset arrow on open. */
+ left: 0px; top: 0px;
+}
+
+/* QMenu */
+QMenu {
+ border: 1px solid #555555;
+ background: {color:bg-inputs};
+}
+
+QMenu::icon {
+ padding-left: 7px;
+}
+
+QMenu::item {
+ padding: 6px 25px 6px 10px;
+}
+
+QMenu::item:selected {
+ background: {color:bg-view-hover};
+}
+
+QMenu::item:selected:hover {
+ background: {color:bg-view-hover};
+}
+
+QMenu::right-arrow {
+ min-width: 10px;
+}
+QMenu::separator {
+ background: {color:bg-menu-separator};
+ height: 2px;
+ margin-right: 5px;
+}
+
+/* Combobox */
+QComboBox {
+ border: 1px solid {color:border};
+ border-radius: 0.2em;
+ padding: 1px 3px 1px 3px;
+ background: {color:bg-inputs};
+}
+QComboBox:hover {
+ border-color: {color:border-hover};
+}
+QComboBox:disabled {
+ background: {color:bg-inputs-disabled};
+}
+
+/* QComboBox must have explicitly set Styled delegate! */
+QComboBox QAbstractItemView {
+ border: 1px solid {color:border};
+ background: {color:bg-inputs};
+}
+
+QComboBox QAbstractItemView::item:selected {
+ background: {color:bg-view-hover};
+ color: {color:font};
+ padding-left: 0px;
+}
+
+QComboBox QAbstractItemView::item:selected:hover {
+ background: {color:bg-view-hover};
+}
+
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: center right;
+ width: 15px;
+ border-style: none;
+ border-left-style: solid;
+ border-left-color: {color:border};
+ border-left-width: 1px;
+}
+QComboBox::down-arrow, QComboBox::down-arrow:on, QComboBox::down-arrow:hover, QComboBox::down-arrow:focus
+{
+ image: url(:/openpype/images/combobox_arrow.png);
+}
+
+/* Splitter */
+QSplitter::handle {
+ border: 3px solid transparent;
+}
+
+QSplitter::handle:horizontal, QSplitter::handle:vertical, QSplitter::handle:horizontal:hover, QSplitter::handle:vertical:hover {
+ /* must be single like because of Nuke*/
+ background: transparent;
+}
+
+/* SLider */
+QSlider::groove {
+ border: 1px solid #464b54;
+ border-radius: 0.3em;
+ background: {color:bg-inputs};
+}
+QSlider::groove:horizontal {
+ height: 8px;
+}
+
+QSlider::groove:vertical {
+ width: 8px;
+}
+
+QSlider::groove:hover {
+ border-color: {color:border-hover};
+}
+QSlider::groove:disabled {
+ background: {color:bg-inputs-disabled};
+}
+QSlider::groove:focus {
+ border-color: {color:border-focus};
+}
+QSlider::handle {
+ /* must be single like because of Nuke*/
+ background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5,stop: 0 {palette:blue-base},stop: 1 {palette:green-base});
+ border: 1px solid #5c5c5c;
+ width: 10px;
+ height: 10px;
+
+ border-radius: 5px;
+}
+
+QSlider::handle:horizontal {
+ margin: -2px 0;
+}
+QSlider::handle:vertical {
+ margin: 0 -2px;
+}
+
+QSlider::handle:disabled {
+ /* must be single like because of Nuke*/
+ background: qlineargradient(x1:0, y1:0,x2:1, y2:1,stop:0 {color:bg-buttons},stop:1 {color:bg-buttons-disabled});
+}
+
+/* Tab widget*/
+QTabWidget::pane {
+ border-top-style: none;
+}
+
+/* move to the right to not mess with borders of widget underneath */
+QTabWidget::tab-bar {
+ alignment: left;
+}
+
+/* avoid QTabBar overrides in Substance Painter */
+QTabBar {
+ text-transform: none;
+ font-weight: normal;
+}
+
+QTabBar::tab {
+ text-transform: none;
+ font-weight: normal;
+ border-top: 1px solid {color:border};
+ border-left: 1px solid {color:border};
+ border-right: 1px solid {color:border};
+ padding: 5px;
+ background: {color:tab-widget:bg};
+ color: {color:tab-widget:color};
+}
+
+QTabBar::tab:selected {
+ border-left-color: {color:tab-widget:bg-selected};
+ border-right-color: {color:tab-widget:bg-selected};
+ border-top-color: {color:border-focus};
+ background: {color:tab-widget:bg-selected};
+ color: {color:tab-widget:color-selected};
+}
+
+QTabBar::tab:!selected {}
+QTabBar::tab:!selected:hover {
+ background: {color:tab-widget:bg-hover};
+ color: {color:tab-widget:color-hover};
+}
+QTabBar::tab:first {}
+QTabBar::tab:first:selected {}
+QTabBar::tab:last:!selected {
+ border-right: 1px solid {color:border};
+}
+QTabBar::tab:last:selected {}
+QTabBar::tab:only-one {}
+
+QHeaderView {
+ border: 0px solid {color:border};
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QHeaderView::section {
+ background: {color:bg-view-header};
+ padding: 4px;
+ border-top: 0px; /* Substance Painter fix */
+ border-right: 1px solid {color:bg-view};
+ border-radius: 0px;
+ text-align: center;
+ color: {color:font};
+ font-weight: bold;
+}
+QHeaderView::section:first {
+ border-left: none;
+}
+QHeaderView::section:last {
+ border-right: none;
+}
+QHeaderView::section:only-one {
+ border-left: none;
+ border-right: none;
+}
+
+QHeaderView::down-arrow {
+ image: url(:/openpype/images/down_arrow.png);
+ padding-right: 4px;
+ subcontrol-origin: padding;
+ subcontrol-position: center right;
+}
+
+QHeaderView::up-arrow {
+ image: url(:/openpype/images/up_arrow.png);
+ padding-right: 4px;
+ subcontrol-origin: padding;
+ subcontrol-position: center right;
+}
+
+/* Checkboxes */
+QCheckBox {
+ background: transparent;
+}
+
+QCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+
+QAbstractItemView::indicator:checked, QCheckBox::indicator:checked {
+ image: url(:/openpype/images/checkbox_checked.png);
+}
+QAbstractItemView::indicator:checked:focus, QCheckBox::indicator:checked:focus {
+ image: url(:/openpype/images/checkbox_checked_focus.png);
+}
+QAbstractItemView::indicator:checked:hover, QAbstractItemView::indicator:checked:pressed, QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:pressed {
+ image: url(:/openpype/images/checkbox_checked_hover.png);
+}
+QAbstractItemView::indicator:checked:disabled, QCheckBox::indicator:checked:disabled {
+ image: url(:/openpype/images/checkbox_checked_disabled.png);
+}
+
+QAbstractItemView::indicator:unchecked, QCheckBox::indicator:unchecked {
+ image: url(:/openpype/images/checkbox_unchecked.png);
+}
+QAbstractItemView::indicator:unchecked:focus, QCheckBox::indicator:unchecked:focus {
+ image: url(:/openpype/images/checkbox_unchecked_focus.png);
+}
+QAbstractItemView::indicator:unchecked:hover, QAbstractItemView::indicator:unchecked:pressed, QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:pressed {
+ image: url(:/openpype/images/checkbox_unchecked_hover.png);
+}
+QAbstractItemView::indicator:unchecked:disabled, QCheckBox::indicator:unchecked:disabled {
+ image: url(:/openpype/images/checkbox_unchecked_disabled.png);
+}
+
+QAbstractItemView::indicator:indeterminate, QCheckBox::indicator:indeterminate {
+ image: url(:/openpype/images/checkbox_indeterminate.png);
+}
+QAbstractItemView::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:focus {
+ image: url(:/openpype/images/checkbox_indeterminate_focus.png);
+}
+QAbstractItemView::indicator:indeterminate:hover, QAbstractItemView::indicator:indeterminate:pressed, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed {
+ image: url(:/openpype/images/checkbox_indeterminate_hover.png);
+}
+QAbstractItemView::indicator:indeterminate:disabled, QCheckBox::indicator:indeterminate:disabled {
+ image: url(:/openpype/images/checkbox_indeterminate_disabled.png);
+}
+
+/* Views QListView QTreeView QTableView */
+QAbstractItemView {
+ border: 0px solid {color:border};
+ border-radius: 0px;
+ background: {color:bg-view};
+ alternate-background-color: {color:bg-view-alternate};
+ /* Mac shows selection color on branches. */
+ selection-background-color: transparent;
+}
+
+QAbstractItemView::item {
+ /* `border: none` hide outline of selected item. */
+ border: none;
+}
+
+QAbstractItemView:disabled{
+ background: {color:bg-view-disabled};
+ alternate-background-color: {color:bg-view-alternate-disabled};
+ border: 1px solid {color:border};
+}
+
+QAbstractItemView::item:hover {
+ background: {color:bg-view-hover};
+}
+
+QAbstractItemView::item:selected {
+ background: {color:bg-view-selection};
+ color: {color:font-view-selection};
+}
+
+QAbstractItemView::item:selected:active {
+ color: {color:font-view-selection};
+}
+
+/* Same as selected but give ability to easy change it */
+QAbstractItemView::item:selected:!active {
+ background: {color:bg-view-selection};
+ color: {color:font-view-selection};
+}
+
+QAbstractItemView::item:selected:hover {
+ background: {color:bg-view-selection-hover};
+}
+
+/* Row colors (alternate colors) are from left - right */
+QAbstractItemView:branch {
+ background: transparent;
+}
+
+QAbstractItemView::branch:open:has-children:!has-siblings,
+QAbstractItemView::branch:open:has-children:has-siblings {
+ border-image: none;
+ image: url(:/openpype/images/branch_open.png);
+ background: transparent;
+}
+QAbstractItemView::branch:open:has-children:!has-siblings:hover,
+QAbstractItemView::branch:open:has-children:has-siblings:hover {
+ border-image: none;
+ image: url(:/openpype/images/branch_open_on.png);
+ background: transparent;
+}
+
+QAbstractItemView::branch:has-children:!has-siblings:closed,
+QAbstractItemView::branch:closed:has-children:has-siblings {
+ border-image: none;
+ image: url(:/openpype/images/branch_closed.png);
+ background: transparent;
+}
+QAbstractItemView::branch:has-children:!has-siblings:closed:hover,
+QAbstractItemView::branch:closed:has-children:has-siblings:hover {
+ border-image: none;
+ image: url(:/openpype/images/branch_closed_on.png);
+ background: transparent;
+}
+
+QAbstractItemView::branch:has-siblings:!adjoins-item {
+ border-image: none;
+ image: url(:/openpype/images/transparent.png);
+ background: transparent;
+}
+
+QAbstractItemView::branch:has-siblings:adjoins-item {
+ border-image: none;
+ image: url(:/openpype/images/transparent.png);
+ background: transparent;
+}
+
+QAbstractItemView::branch:!has-children:!has-siblings:adjoins-item {
+ border-image: none;
+ image: url(:/openpype/images/transparent.png);
+ background: transparent;
+}
+
+CompleterView {
+ border: 1px solid #555555;
+ background: {color:bg-inputs};
+}
+
+CompleterView::item:selected {
+ background: {color:bg-view-hover};
+}
+
+CompleterView::item:selected:hover {
+ background: {color:bg-view-hover};
+}
+
+CompleterView::right-arrow {
+ min-width: 10px;
+}
+CompleterView::separator {
+ background: {color:bg-menu-separator};
+ height: 2px;
+ margin-right: 5px;
+}
+
+/* Progress bar */
+QProgressBar {
+ border: 1px solid {color:border};
+ font-weight: bold;
+ text-align: center;
+}
+
+QProgressBar:horizontal {
+ height: 20px;
+}
+QProgressBar:vertical {
+ width: 20px;
+}
+
+QProgressBar::chunk {
+ /* must be single like because of Nuke*/
+ background: qlineargradient(x1: 0, y1: 0.5,x2: 1, y2: 0.5,stop: 0 {palette:blue-base},stop: 1 {palette:green-base});
+}
+
+/* Scroll bars */
+QScrollBar {
+ background: {color:bg-inputs};
+ border-radius: 4px;
+ border: 1px transparent {color:bg-inputs};
+}
+
+QScrollBar:horizontal {
+ height: 15px;
+ margin: 3px 3px 3px 6px;
+}
+
+QScrollBar:vertical {
+ width: 15px;
+ margin: 6px 3px 3px 3px;
+}
+
+QScrollBar::handle {
+ background: {color:bg-scroll-handle};
+ border-radius: 4px;
+}
+
+QScrollBar::handle:horizontal {
+ min-width: 5px;
+}
+
+QScrollBar::handle:vertical {
+ min-height: 5px;
+}
+
+QScrollBar::add-line:horizontal {
+ margin: 0px 3px 0px 3px;
+ width: 0px;
+ height: 0px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal {
+ margin: 0px 3px 0px 3px;
+ height: 0px;
+ width: 0px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on {
+ height: 0px;
+ width: 0px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on {
+ height: 0px;
+ width: 0px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal {
+ background: none;
+}
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
+ background: none;
+}
+
+QScrollBar::sub-line:vertical {
+ margin: 3px 0px 3px 0px;
+ height: 0px;
+ width: 0px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical {
+ margin: 3px 0px 3px 0px;
+ height: 0px;
+ width: 0px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on {
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+
+QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on {
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
+ background: none;
+}
+
+
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ background: none;
+}
diff --git a/usd_qtpy/tree/simpletree.py b/usd_qtpy/tree/simpletree.py
index 415d2fe..458be20 100644
--- a/usd_qtpy/tree/simpletree.py
+++ b/usd_qtpy/tree/simpletree.py
@@ -1,6 +1,6 @@
import logging
-from PySide2 import QtCore
+from qtpy import QtCore
log = logging.getLogger(__name__)
@@ -27,7 +27,7 @@ def data(self, index, role):
if not index.isValid():
return None
- if role == QtCore.Qt.DisplayRole:
+ if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
item = index.internalPointer()
column = index.column()
@@ -46,7 +46,6 @@ def headerData(self, section, orientation, role):
if role == QtCore.Qt.DisplayRole:
if section < len(self.Columns):
return self.Columns[section]
- return
return super(TreeModel, self).headerData(section, orientation, role)
@@ -54,6 +53,10 @@ def flags(self, index):
flags = QtCore.Qt.ItemIsEnabled
item = index.internalPointer()
+ if item is None:
+ log.warning("No item found for index: %s", index)
+ return flags
+
if item.get("enabled", True):
flags |= QtCore.Qt.ItemIsSelectable
diff --git a/usd_qtpy/variants.py b/usd_qtpy/variants.py
new file mode 100644
index 0000000..fc44104
--- /dev/null
+++ b/usd_qtpy/variants.py
@@ -0,0 +1,36 @@
+from qtpy import QtWidgets, QtCore
+
+
+class CreateVariantSetDialog(QtWidgets.QDialog):
+ """Prompt for variant set name"""
+ def __init__(self, parent=None):
+ super(CreateVariantSetDialog, self).__init__(parent=parent)
+
+ self.setWindowTitle("Create Variant Set")
+
+ form = QtWidgets.QFormLayout(self)
+
+ name = QtWidgets.QLineEdit()
+ form.addRow(QtWidgets.QLabel("Variant Set Name:"), name)
+
+ # Add some standard buttons (Cancel/Ok) at the bottom of the dialog
+ buttons = QtWidgets.QDialogButtonBox(
+ QtWidgets.QDialogButtonBox.Ok |
+ QtWidgets.QDialogButtonBox.Cancel,
+ QtCore.Qt.Horizontal,
+ self
+ )
+ form.addRow(buttons)
+
+ buttons.accepted.connect(self.accept)
+ buttons.rejected.connect(self.reject)
+
+ self.name = name
+
+ @classmethod
+ def get_variant_set_name(cls, parent=None):
+ prompt = cls(parent=parent)
+ if prompt.exec_() == QtWidgets.QDialog.Accepted:
+ name = prompt.name.text()
+ if name:
+ return name