aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-25 17:40:11 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-29 08:07:54 +0100
commit9289a63d85eaab0a7f286000e07843d3387f8c26 (patch)
tree1dc96d76609c0be2d986a1791fde4f720eae1420 /examples
parentfaa2de3d4758b1c679685d41df0e4634f1069c83 (diff)
Brush up the easing example
- Remove the resource file with the outdated Qt logo and use the builtin PySide logo instead. - Use enum for the line type. - Make line type radio box exclusive. - Use snake case. - Use class imports. Task-number: PYSIDE-1112 Change-Id: Ie3e690ab56f619ec95b36b9101b06fa1e4704e5e Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/widgets/animation/easing/easing.py250
-rw-r--r--examples/widgets/animation/easing/easing.pyproject3
-rw-r--r--examples/widgets/animation/easing/easing.qrc5
-rw-r--r--examples/widgets/animation/easing/easing_rc.py361
-rw-r--r--examples/widgets/animation/easing/form.ui6
-rw-r--r--examples/widgets/animation/easing/ui_form.py12
6 files changed, 140 insertions, 497 deletions
diff --git a/examples/widgets/animation/easing/easing.py b/examples/widgets/animation/easing/easing.py
index 647fbeb34..b3d6f0dff 100644
--- a/examples/widgets/animation/easing/easing.py
+++ b/examples/widgets/animation/easing/easing.py
@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2010 Riverbank Computing Limited.
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -40,30 +40,41 @@
##
#############################################################################
-from PySide6 import QtCore, QtGui, QtWidgets
+from enum import IntEnum
+import sys
+
+from PySide6.QtCore import (Property, QEasingCurve, QObject, QPropertyAnimation,
+ QPoint, QPointF, QRect, QRectF, QSize, Qt)
+from PySide6.QtGui import (QBrush, QColor, QIcon, QLinearGradient, QPainter,
+ QPainterPath, QPen, QPixmap)
+from PySide6.QtWidgets import (QApplication, QGraphicsPixmapItem,
+ QGraphicsItem, QGraphicsScene, QGraphicsView,
+ QListWidget, QListWidgetItem, QWidget)
-import easing_rc
from ui_form import Ui_Form
-class Animation(QtCore.QPropertyAnimation):
- LinearPath, CirclePath = range(2)
+class PathType(IntEnum):
+ LINEAR_PATH = 0
+ CIRCLE_PATH = 1
+
+class Animation(QPropertyAnimation):
def __init__(self, target, prop):
super(Animation, self).__init__(target, prop)
- self.setPathType(Animation.LinearPath)
+ self.set_path_type(PathType.LINEAR_PATH)
- def setPathType(self, pathType):
- self.m_pathType = pathType
- self.m_path = QtGui.QPainterPath()
+ def set_path_type(self, pathType):
+ self._pathType = pathType
+ self._path = QPainterPath()
def updateCurrentTime(self, currentTime):
- if self.m_pathType == Animation.CirclePath:
- if self.m_path.isEmpty():
+ if self._pathType == PathType.CIRCLE_PATH:
+ if self._path.isEmpty():
end = self.endValue()
start = self.startValue()
- self.m_path.moveTo(start)
- self.m_path.addEllipse(QtCore.QRectF(start, end))
+ self._path.moveTo(start)
+ self._path.addEllipse(QRectF(start, end))
dura = self.duration()
if dura == 0:
@@ -71,26 +82,27 @@ class Animation(QtCore.QPropertyAnimation):
else:
progress = (((currentTime - 1) % dura) + 1) / float(dura)
- easedProgress = self.easingCurve().valueForProgress(progress)
- if easedProgress > 1.0:
- easedProgress -= 1.0
- elif easedProgress < 0:
- easedProgress += 1.0
+ eased_progress = self.easingCurve().valueForProgress(progress)
+ if eased_progress > 1.0:
+ eased_progress -= 1.0
+ elif eased_progress < 0:
+ eased_progress += 1.0
- pt = self.m_path.pointAtPercent(easedProgress)
+ pt = self._path.pointAtPercent(eased_progress)
self.updateCurrentValue(pt)
self.valueChanged.emit(pt)
else:
super(Animation, self).updateCurrentTime(currentTime)
+
# PySide6 doesn't support deriving from more than one wrapped class so we use
# composition and delegate the property.
-class Pixmap(QtCore.QObject):
+class Pixmap(QObject):
def __init__(self, pix):
super(Pixmap, self).__init__()
- self.pixmap_item = QtWidgets.QGraphicsPixmapItem(pix)
- self.pixmap_item.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache)
+ self.pixmap_item = QGraphicsPixmapItem(pix)
+ self.pixmap_item.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
def set_pos(self, pos):
self.pixmap_item.setPos(pos)
@@ -98,161 +110,159 @@ class Pixmap(QtCore.QObject):
def get_pos(self):
return self.pixmap_item.pos()
- pos = QtCore.Property(QtCore.QPointF, get_pos, set_pos)
+ pos = Property(QPointF, get_pos, set_pos)
-class Window(QtWidgets.QWidget):
+class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
- self.m_iconSize = QtCore.QSize(64, 64)
- self.m_scene = QtWidgets.QGraphicsScene()
+ self._iconSize = QSize(64, 64)
+ self._scene = QGraphicsScene()
m_ui = Ui_Form()
m_ui.setupUi(self)
- m_ui.easingCurvePicker.setIconSize(self.m_iconSize)
- m_ui.easingCurvePicker.setMinimumHeight(self.m_iconSize.height() + 50)
+ m_ui.easingCurvePicker.setIconSize(self._iconSize)
+ m_ui.easingCurvePicker.setMinimumHeight(self._iconSize.height() + 50)
m_ui.buttonGroup.setId(m_ui.lineRadio, 0)
m_ui.buttonGroup.setId(m_ui.circleRadio, 1)
- dummy = QtCore.QEasingCurve()
+ dummy = QEasingCurve()
m_ui.periodSpinBox.setValue(dummy.period())
m_ui.amplitudeSpinBox.setValue(dummy.amplitude())
m_ui.overshootSpinBox.setValue(dummy.overshoot())
- m_ui.easingCurvePicker.currentRowChanged.connect(self.curveChanged)
- m_ui.buttonGroup.idClicked.connect(self.pathChanged)
- m_ui.periodSpinBox.valueChanged.connect(self.periodChanged)
- m_ui.amplitudeSpinBox.valueChanged.connect(self.amplitudeChanged)
- m_ui.overshootSpinBox.valueChanged.connect(self.overshootChanged)
+ m_ui.easingCurvePicker.currentRowChanged.connect(self.curve_changed)
+ m_ui.buttonGroup.idClicked.connect(self.path_changed)
+ m_ui.periodSpinBox.valueChanged.connect(self.period_changed)
+ m_ui.amplitudeSpinBox.valueChanged.connect(self.amplitude_changed)
+ m_ui.overshootSpinBox.valueChanged.connect(self.overshoot_changed)
- self.m_ui = m_ui
- self.createCurveIcons()
+ self._ui = m_ui
+ self.create_curve_icons()
- pix = QtGui.QPixmap(':/images/qt-logo.png')
- self.m_item = Pixmap(pix)
- self.m_scene.addItem(self.m_item.pixmap_item)
- self.m_ui.graphicsView.setScene(self.m_scene)
+ pix = QPixmap(':/qt-project.org/logos/pysidelogo.png')
+ self._item = Pixmap(pix)
+ self._scene.addItem(self._item.pixmap_item)
+ self._ui.graphicsView.setScene(self._scene)
- self.m_anim = Animation(self.m_item, b'pos')
- self.m_anim.setEasingCurve(QtCore.QEasingCurve.OutBounce)
- self.m_ui.easingCurvePicker.setCurrentRow(int(QtCore.QEasingCurve.OutBounce))
+ self._anim = Animation(self._item, b'pos')
+ self._anim.setEasingCurve(QEasingCurve.OutBounce)
+ self._ui.easingCurvePicker.setCurrentRow(int(QEasingCurve.OutBounce))
- self.startAnimation()
+ self.start_animation()
- def createCurveIcons(self):
- pix = QtGui.QPixmap(self.m_iconSize)
- painter = QtGui.QPainter()
+ def create_curve_icons(self):
+ pix = QPixmap(self._iconSize)
+ painter = QPainter()
- gradient = QtGui.QLinearGradient(0, 0, 0, self.m_iconSize.height())
- gradient.setColorAt(0.0, QtGui.QColor(240, 240, 240))
- gradient.setColorAt(1.0, QtGui.QColor(224, 224, 224))
+ gradient = QLinearGradient(0, 0, 0, self._iconSize.height())
+ gradient.setColorAt(0.0, QColor(240, 240, 240))
+ gradient.setColorAt(1.0, QColor(224, 224, 224))
- brush = QtGui.QBrush(gradient)
+ brush = QBrush(gradient)
# The original C++ code uses undocumented calls to get the names of the
# different curve types. We do the Python equivalant (but without
# cheating)
- curve_types = [(n, c) for n, c in QtCore.QEasingCurve.__dict__.items()
- if isinstance(c, QtCore.QEasingCurve.Type) \
- and c != QtCore.QEasingCurve.Custom \
- and c != QtCore.QEasingCurve.NCurveTypes \
- and c != QtCore.QEasingCurve.TCBSpline]
+ curve_types = [(n, c) for n, c in QEasingCurve.__dict__.items()
+ if isinstance(c, QEasingCurve.Type) \
+ and c != QEasingCurve.Custom \
+ and c != QEasingCurve.NCurveTypes \
+ and c != QEasingCurve.TCBSpline]
curve_types.sort(key=lambda ct: ct[1])
painter.begin(pix)
for curve_name, curve_type in curve_types:
- painter.fillRect(QtCore.QRect(QtCore.QPoint(0, 0), self.m_iconSize), brush)
- curve = QtCore.QEasingCurve(curve_type)
+ painter.fillRect(QRect(QPoint(0, 0), self._iconSize), brush)
+ curve = QEasingCurve(curve_type)
- painter.setPen(QtGui.QColor(0, 0, 255, 64))
- xAxis = self.m_iconSize.height() / 1.5
- yAxis = self.m_iconSize.width() / 3.0
- painter.drawLine(0, xAxis, self.m_iconSize.width(), xAxis)
- painter.drawLine(yAxis, 0, yAxis, self.m_iconSize.height())
+ painter.setPen(QColor(0, 0, 255, 64))
+ x_axis = self._iconSize.height() / 1.5
+ y_axis = self._iconSize.width() / 3.0
+ painter.drawLine(0, x_axis, self._iconSize.width(), x_axis)
+ painter.drawLine(y_axis, 0, y_axis, self._iconSize.height())
- curveScale = self.m_iconSize.height() / 2.0
+ curve_scale = self._iconSize.height() / 2.0
- painter.setPen(QtCore.Qt.NoPen)
+ painter.setPen(Qt.NoPen)
# Start point.
- painter.setBrush(QtCore.Qt.red)
- start = QtCore.QPoint(yAxis,
- xAxis - curveScale * curve.valueForProgress(0))
+ painter.setBrush(Qt.red)
+ start = QPoint(y_axis,
+ x_axis - curve_scale * curve.valueForProgress(0))
painter.drawRect(start.x() - 1, start.y() - 1, 3, 3)
# End point.
- painter.setBrush(QtCore.Qt.blue)
- end = QtCore.QPoint(yAxis + curveScale,
- xAxis - curveScale * curve.valueForProgress(1))
+ painter.setBrush(Qt.blue)
+ end = QPoint(y_axis + curve_scale,
+ x_axis - curve_scale * curve.valueForProgress(1))
painter.drawRect(end.x() - 1, end.y() - 1, 3, 3)
- curvePath = QtGui.QPainterPath()
- curvePath.moveTo(QtCore.QPointF(start))
+ curve_path = QPainterPath()
+ curve_path.moveTo(QPointF(start))
t = 0.0
while t <= 1.0:
- to = QtCore.QPointF(yAxis + curveScale * t,
- xAxis - curveScale * curve.valueForProgress(t))
- curvePath.lineTo(to)
- t += 1.0 / curveScale
+ to = QPointF(y_axis + curve_scale * t,
+ x_axis - curve_scale * curve.valueForProgress(t))
+ curve_path.lineTo(to)
+ t += 1.0 / curve_scale
- painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
- painter.strokePath(curvePath, QtGui.QColor(32, 32, 32))
- painter.setRenderHint(QtGui.QPainter.Antialiasing, False)
+ painter.setRenderHint(QPainter.Antialiasing, True)
+ painter.strokePath(curve_path, QColor(32, 32, 32))
+ painter.setRenderHint(QPainter.Antialiasing, False)
- item = QtWidgets.QListWidgetItem()
- item.setIcon(QtGui.QIcon(pix))
+ item = QListWidgetItem()
+ item.setIcon(QIcon(pix))
item.setText(curve_name)
- self.m_ui.easingCurvePicker.addItem(item)
+ self._ui.easingCurvePicker.addItem(item)
painter.end()
- def startAnimation(self):
- self.m_anim.setStartValue(QtCore.QPointF(0, 0))
- self.m_anim.setEndValue(QtCore.QPointF(100, 100))
- self.m_anim.setDuration(2000)
- self.m_anim.setLoopCount(-1)
- self.m_anim.start()
-
- def curveChanged(self, row):
- curveType = QtCore.QEasingCurve.Type(row)
- self.m_anim.setEasingCurve(curveType)
- self.m_anim.setCurrentTime(0)
-
- isElastic = (curveType >= QtCore.QEasingCurve.InElastic
- and curveType <= QtCore.QEasingCurve.OutInElastic)
- isBounce = (curveType >= QtCore.QEasingCurve.InBounce
- and curveType <= QtCore.QEasingCurve.OutInBounce)
-
- self.m_ui.periodSpinBox.setEnabled(isElastic)
- self.m_ui.amplitudeSpinBox.setEnabled(isElastic or isBounce)
- self.m_ui.overshootSpinBox.setEnabled(curveType >= QtCore.QEasingCurve.InBack
- and curveType <= QtCore.QEasingCurve.OutInBack)
-
- def pathChanged(self, index):
- self.m_anim.setPathType(index)
-
- def periodChanged(self, value):
- curve = self.m_anim.easingCurve()
+ def start_animation(self):
+ self._anim.setStartValue(QPointF(0, 0))
+ self._anim.setEndValue(QPointF(100, 100))
+ self._anim.setDuration(2000)
+ self._anim.setLoopCount(-1)
+ self._anim.start()
+
+ def curve_changed(self, row):
+ curve_type = QEasingCurve.Type(row)
+ self._anim.setEasingCurve(curve_type)
+ self._anim.setCurrentTime(0)
+
+ is_elastic = (curve_type >= QEasingCurve.InElastic
+ and curve_type <= QEasingCurve.OutInElastic)
+ is_bounce = (curve_type >= QEasingCurve.InBounce
+ and curve_type <= QEasingCurve.OutInBounce)
+
+ self._ui.periodSpinBox.setEnabled(is_elastic)
+ self._ui.amplitudeSpinBox.setEnabled(is_elastic or is_bounce)
+ self._ui.overshootSpinBox.setEnabled(curve_type >= QEasingCurve.InBack
+ and curve_type <= QEasingCurve.OutInBack)
+
+ def path_changed(self, index):
+ self._anim.set_path_type(index)
+
+ def period_changed(self, value):
+ curve = self._anim.easingCurve()
curve.setPeriod(value)
- self.m_anim.setEasingCurve(curve)
+ self._anim.setEasingCurve(curve)
- def amplitudeChanged(self, value):
- curve = self.m_anim.easingCurve()
+ def amplitude_changed(self, value):
+ curve = self._anim.easingCurve()
curve.setAmplitude(value)
- self.m_anim.setEasingCurve(curve)
+ self._anim.setEasingCurve(curve)
- def overshootChanged(self, value):
- curve = self.m_anim.easingCurve()
+ def overshoot_changed(self, value):
+ curve = self._anim.easingCurve()
curve.setOvershoot(value)
- self.m_anim.setEasingCurve(curve)
+ self._anim.setEasingCurve(curve)
if __name__ == '__main__':
-
- import sys
- app = QtWidgets.QApplication(sys.argv)
+ app = QApplication(sys.argv)
w = Window()
w.resize(600, 600)
w.show()
diff --git a/examples/widgets/animation/easing/easing.pyproject b/examples/widgets/animation/easing/easing.pyproject
index 2677e28ea..416b9979e 100644
--- a/examples/widgets/animation/easing/easing.pyproject
+++ b/examples/widgets/animation/easing/easing.pyproject
@@ -1,4 +1,3 @@
{
- "files": ["easing.qrc", "ui_form.py", "easing.py", "easing_rc.py",
- "form.ui"]
+ "files": ["easing.py", "form.ui"]
}
diff --git a/examples/widgets/animation/easing/easing.qrc b/examples/widgets/animation/easing/easing.qrc
deleted file mode 100644
index 7e112d3a9..000000000
--- a/examples/widgets/animation/easing/easing.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
- <qresource>
- <file>images/qt-logo.png</file>
- </qresource>
- </RCC> \ No newline at end of file
diff --git a/examples/widgets/animation/easing/easing_rc.py b/examples/widgets/animation/easing/easing_rc.py
deleted file mode 100644
index c0f25d729..000000000
--- a/examples/widgets/animation/easing/easing_rc.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# Resource object code (Python 3)
-# Created by: object code
-# Created by: The Resource Compiler for Qt version 5.14.0
-# WARNING! All changes made in this file will be lost!
-
-from PySide6 import QtCore
-
-qt_resource_data = b"\
-\x00\x00\x14\x1d\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00.\x00\x00\x007\x08\x06\x00\x00\x00s`xd\
-\x00\x00\x13\xe4IDATx\x9cb\xfc\xff\xff?\xc3\
-\xdf\x7f\x7f\x99\x99\x99\x98\xff>x\xf1Xf\xe9\x9eU\
-\x09\x87/\x9e\xb6y\xf7\xe9\xad\x98\xa4\xf2?~Q\xb9\
-\xbf\xfc\xcc\x1c?\xf8\xfe\xfd\xff\xc7\xca\xc5\xc6\xf7F\x9c\
-[\xf6\x96$\xaf\xd25)>\xa5\xcb\xd2\xbcJ\xd7\xc4\
-xd\xef\x08p\x8a>ccf\xff\xc5\x80\x05\xfcg\
-\xf8\xcf\xf4\xef\xff?&\x06\x86\xff\x0c\x8c\x0c\x8c\xff\x19\
-\x19\x18\xff30Bi\x0a\x00\x00\x00\x00\xff\xffb\xfc\
-\xfb\xf7/3\x13\x13\xd3\xdfY\x9b\x17\xa6T\xcfm\xed\
-}\xf3\xe6\x0d\x1f\x17/\xdb\x7f{/aFYEN\
-\x06\x86\x7f\x8c\x0c\x0c\xff\x99\x18\x18\x18\x18\x18\xfe\xfd\xff\
-\xc7\xf0\xe7\xdfo\x86\x7f\xff\xff00002\xb00\
-\xb12p\xb2\xf0|\xe3c\x17z&\xcc%u_\x9c\
-G\xee\xa6\x04\x8f\xc2u\x09^\x85\x9b\xa2\x5cR\xf7\x05\
-8\xc5\x9e\xb1\xb3p\xfc\xc0n\xf5\x7f\xc6\x7f\xff\xff1\
-\xc39$z\x08\x00\x00\x00\xff\xffb\xfc\xff\xff?\xc3\
-\xa4\xb5\xb3s\xf2\xbb\xf3&s\xf2\x09\xffcgc\xfb\
-\xef\x1e,\xc4 !\xc3\xc6\xf8\xed\xeb?FF\x889\
-\x8cp\x0b\x18\x99\xfe320\xfcg```\xf8\xff\
-\xff?\xd3\xbf\xff\x7f\x19\xff\xfc\xff\x03\xf1\xd0\xbf?\x0c\
-\xff\x19\xfe3\xb00\xb22\xb0\xb3p\xff\xe5g\x17~\
-!\xcc%y_\x8cG\xee\xa6\x14\xaf\xe2u\x09\x1e\x85\
-\xeb\xa2<2w\x859%\x9ep\xb0r}\xc5\xe7\xa1\
-\xffpK\x19\xff1b\xf1\x10\x00\x00\x00\xff\xffl\x92\
-\xbd\x0a\xc20\x14F\xbf/\x16\x7f\xd2\x06!\x83\xc6A\
-\xc5]p\xec\xa8\xbb\xcf\xe2k\xbavp(\xa8\x83\xe0\
-\xd6\xb1\x88 $\xf7:\x88[^\xe0\x1c\x0e\x1c6\xb7\
-\xcbv\x7f:\x9e\x85\xea\xe2\x87\xb2\xabKS\x1f\xa6x\
-\xbf\x04f\x90\x03gL\xa0\xfe\x0a\xa9\xc4\x7f\x8fd\xa2\
-D$\x89H\x1a\xa1*0,0.\xac\xb8\x91\xef\xfc\
-$<f\xe5\xf2\xbap\x9b6T\xebv^\xad\xee\xde\
-\x86\xa7\x1d\xba\x9ey\x0fE\xc5(\x94\x04\xf0\x05\x00\x00\
-\xff\xffb\x99\xbcvV\xee\xa7\xef_y\xf9\xb9\xf9\xfe\
-2\xb2\xffeV\xd6\xe4b\xf8\xfd\xeb?\x03#\x13Q\
-\x8ef````\xfc\xcf\xf0\x9f\xf1\xff\x7f\xf4\x18f\
-\xfc\xcf\xca\xc4\xf6\x9f\x8d\x99\x1d\xc9C\x0c\x8c\xff\xfe\xff\
-e\xfe\xf8\xe3\xb5\xc4\xbb\xef\xcf$n\xbc9e\x01\xf1\
-\x103\x03;3\xe7\x7f\x1e6\xc1\xb7\x82\x9c\xe2\x0f\xc5\
-ydo\x8b\xf3(\x5c\x97\xe4U\xb8.\xce#w[\
-\x98K\xe2\x11\x0f\x9b\xc0;&F\xa6\xbf0\xd3\x01\x00\
-\x00\x00\xff\xffbT\x894\xbe\xfb\xf4\xed\x0b%\x86\xff\
-\xcc\xff\x85DX\x18\xbd\xc3E\x88v1\xb9\x00\x9a\x9e\
-\xff1\xa2y\xe8\xef\x7fH\x0c\xfd\xf9\xf7\x9b\xe1\xff\xff\
-\x7f\x0c\x8c\x8c\xcc\x0cl\xcc\x1c\x0c<\xac\xfc\x1f\x049\
-\xc5\x1e\x89r\xcb\xde\x91\xe0Q\xb8&\xc9\xabp\x03\x00\
-\x00\x00\xff\xff\xbc\xd1\xb1\x0d\x800\x10\x03@;\x05T\
-T\xb4\x912\x0e\xa2e\xffE\xc8\xff\xdbT\x94\xb4\x8c\
-p:n\xe7\xb8\x01/s\x1a}\xac8\xae\x1d\x11\x06\
-?\xbe~\x00\x99\xa0^\x90\xadVN\x96\x02\xa9\x84\x5c\
- \x1b\x1e\x00\x00\x00\xff\xff\xb4\x92!\x12\x00 \x0c\xc3\
-\xda[\x81\xff\x7f\x98\xa0&p\x18*s\x11\x11\x0d0\
-\xdd\xd6\xfb=\xbe\x0ca\x81\x91\xae\x92r\xa8\x0c\x96\xbc\
-\x9b\x1d\x00\x00\x00\xff\xff\x94\x94\xb1\x0d\x00 \x0c\xc3\xdc\
-\x96\xffOv\x19\xd8\x10Bp@ly\xc9\xd8\x96\x7f\
-\x22!3\xa8*l\xd1\x05\xc8\x08\xd6'4\xb6W\xc6\
-\x93\xe7\x104\x01\x00\x00\xff\xff\x8c\x91\xc1\x0a\x80 \x10\
-\x05g\xdd5\xa5\xfe\xff;\x83(A\xad\xadKg\xeb\
-\xddg\x18x6\x02F\xc1jB\x9e\x8d\xbd\x1c\xac[\
-!j$M\x09\x01\xaa7N\xefh0\xb2-\x04Q\
-\xfc\xbe>\xac\xef\xed?\xf7\x00\x00\x00\xff\xff\x22\xd9\xe1\
-\xff\xff10pp23|\xfb\xfa\x87\xe1\xf4\xc9\xc7\
-\x0cR\x5c\xea\x0c^&>\x0c\xc6\xaa\x86\x0c\xa2\x02\x22\
-\x0c\x8c\x8c\x0c\x0c_~}`x\xf6\xe9\x1e\xc3\xb5\xd7\
-'\x19\xae\xbe:\xc1\xf0\xf5\xf7'\x06nV>\x9c\x8e\
-gdd`\x80\x95JL\x8cL\x0c\xff\xff\xffg\xf8\
-O\xc0\x13\x00\x00\x00\x00\xff\xff\x22\xc9\xe1\xff\xffC\x1c\
-}\xe7\xc6\x17\x86\xa3\xfb\xde2T\x84T0\x14\x85g\
-0\xb0\xb3\xb32\xfc\x87T\xe9p\xb5Zb\x16\x0c\xae\
-*\xd1\x0c\xcf??`Xsu\x22\xc3\xe9';\x19\
-\xb8\xd8\xf8\x180\x8bM\x06\x86_?\xff1\xb0\xb0\xb0\
-002\xfde\xf8\xf6\xfb\x0b\x03\x0b\x13\x0b\x03+\x13\
-;^\xc7\x03\x00\x00\x00\xff\xff\x22:;\xfe\xff\xc7\xc0\
-\xc0\xce\xc1\xc4p\xe3\xf2W\x86\x9dk_0\xcc.\x9c\
-\xceP\x19\x97\xcb\xc0\xc2\xca\xc4\xf0\xf7\xdf_\x86\xff\xff\
-\xff\xc1+\x9b?\x7f\x7f3\xfc\xfe\x03)\xd2$y\xe5\
-\x19r-\xfa\x19Bt\xf2\x19\xbe\xfd\xfa\xcc\xc0\x04-\
-\x01\xfe\xffg``ecdx\xf5\xec\x0f\xc3\x92Y\
-\x0f\x18<\xc4K\x18\xba\xbc62\xd4\xd8/f0\x94\
-td\xf8\xf1\xe7\x1b\x5c-6\x00\x00\x00\x00\xff\xff\x8c\
-\xd4!\x0e\xc2@\x10@\xd1?3\xbbu\x0d\x06\x01\x0e\
-S\x82D5X$\xa6\x12\x8d \xe1\x04xn\xc4\x01\
-\xb8\x0ci\x10\x08\x0cI1]\xb6\x83B\x92p\x82\xff\
-\xd4\xff\x0b\xfe\x8d<\xee\x99\xcb\xf9\xcai\x7fd\xbbn\
-\xe8SBE15D\x14\xd3\x80I X\xa4\x08\x05\
-\x0e\x0c\xeed\xcf4\x8b\x03\x9b\xf9\x8e\xae\x7f\xa2b\xb8\
-;\xaa\xc2\xad}\x11\xbd\xa4\xaeV\x8c\xe2\x94j\xbcd\
-R\xcex\x0f\x09\xf8\xfd\xe4\x0f\x00\x00\x00\xff\xff\x22:\
-\xc4\x19\x19\x99\x18\x0e\xee~\xce\xa0\xa9\xac\xcbP\x16\x95\
-\xcb\xc0\xc0\xc0\xc0\xc0\xca\xc2\xc2\xc0\xc8\xc8\xc8\xf0\xff?\
-$\x99\xdcx{\x92\xa1fC:\x83Oe\x04\xc3\xda\
-C[\xa0!\xc6\x08\x0f\xb9\x10\xed<\x06EAm\x86\
-\x9f\x7f\xbe10313\xfc\xff\xc7\xc8\xf0\xf4\xf1\x17\
-\x06m%U\x06\x19Qi\xa8c\x19\x18\xfe\x13Q\x12\
-\x01\x00\x00\x00\xff\xff\x84\xd4+\x0e\xc2@\x14F\xe1\xf3\
-\xdf\xa6L\x05\xeb@\xa0P,\x02\x0dIu\x05\x0e\xc9\
-\x1eX\x09\x8a-\x90`p$x\x12\x14b\x12\x02\x02\
-\x0c\x8f\xb6w\xb0\x18\xc2\x0e\x8e\xf8r\xfe\x86\xa7\x04\x9d\
- \xe2\xe9M<\xde\x99M*B^\xd0\xb4\x0d\x92\xf0\
-\xe4H\xe2p\xdd\xb3\xd8L\x89\xb6\xe5\xd6\xdd1\x9e\x97\
-,\xd7+L\xc2\xdd\xf1\xd4\x92g\x81Q\xaf\xa2\xf6\x1a\
-\x99x=\xc4\xe5\xfcd\xd8\x1f\x00|\xed4\xc3d\x98\
-\x0c\xfd\xe0\xf2\x01\x00\x00\xff\xff\x22\x1c\xe2\xff!e\xf5\
-\x8d+\x1f\x19\x04\x84\xc4\x19\xfc\xad=\x19\x18\x18\x18\x18\
-\x98\xa1-0Xdn\xbe1\x8b\xe1\xdf\xff\xbf\x0c\xec\
-\x0c\x02\x0c\xa6\xe6\x92\x0cr\x9a\x22\x0cU3\xda\x18\xbe\
-\xff\x82\x84.#\xb4\x086\x94t`\x90\xe1Wf`\
-b\xfd\xc5\xf0\xf2\xc5g\x86\xdf/\xdf3X\xe9\x98 \
-,c``\xf8\xf5\xf7;\xc3\xd7\xdf\x9f\x18\xbe\xff\xf9\
-\xca\xf0\xeb/\xf6V1\x00\x00\x00\xff\xff\x22\xe8p&\
-f\x06\x86\x9f\xdf\x19\x18\xee\xdf\xfb\xc8`\xa9c\xc4 \
-%,\x09\x0f\xe5\xff\x0c\xff\x19\x18\x19\x99\x18>\xfcx\
-\xcd\xf0\xe0\xfdU\x06\x0e\x16.\x86?\xff~3\xfc\xfe\
-\xf3\x87ASG\x90\xe1\xe1\xe3\xfb\x0c\x07.\x1c\x85\x84\
-\xe6\xff\x7f\x0c\x7f\xff\xfde`g\xe1d\xe0\xfdd\xc4\
-\xb0b\xfeC\x86d\xd3F\x86\xcd3v0\xb8\x988\
-@\x03\x03R\xc8)\x08j3\x98\xc9\xb83h\x88\x98\
-0H\xf2(`u\x17\x00\x00\x00\xff\xff\xc2[\x1c\xfe\
-\xff\xcf\xc0\xc0\xc2\xc2\xc8\xf0\xfe\xdd_\x86\xef\xef\x7f0\
-X\xe9\x9aB\x1c\xf1\xef\x1f\x03\x133\xa4\xbcedd\
-dx\xf9\xe5!\xc3\x97_\x1f\x19\xd8Y\xb8 \xc9\xe2\
-\xef\x7f\x06a16\x06\x06\xe6\x7f\x0c\xa7\xae\x9dc\xf0\
-4s\x85\xe7\x03\x06\x06\x06\x06MQ3\x86w\x8f\xfa\
-\x19T\xc5\xb4\x194\xe5\xd5\x18\xfe\xfe\xfb\x0bu8$\
-\x16-e\xbd\x19,d<\x19\x18\x19\x99\x18\x9e\x7f\xbe\
-\xcf\xd0\xb0/\x02\xc3m\x00\x00\x00\x00\xff\xff\xc2\x1f\xe2\
-\xff\x19\x18\x98\x98\x19\x19\xde\xbf\xfd\xcd\xc0\xf0\x8f\x99A\
-_E\x8b\x81\x81\x81\x81\x81\x11\xde\x02\x83D\xed\x9bo\
-\xcf\x19\xfe\xfc\xfb\xcd\xc0\xc8\xc0\xc8\xc0\xc8\x08I\xab\x9c\
-\xdcL\x0c\xcc\x5c,\x0c7\x1f\xdf\x83\xebad\x82\xe8\
-\xd3S\xd1d\xe0\xe2\xe3g\xf8\xf3\xf7\x0fn\x8b\x09T\
-@\x00\x00\x00\x00\xff\xff\x22\x98T\x18\x19\x19\x18>\xbc\
-\xff\xc5\xc0\xc4\xce\xc9\xa0 !\x07\x11\x83\x86\x1c\xcc\xe8\
-O?\xdeB\x9a\xa1P\xfe\xbf\x7f\x0c\x0c\xac\xac\x0c\x0c\
-\xdc\xdc\xac\x0c\xcf\xdf\xbc\x84X\xc4\xc8\x04\xd7'%,\
-\xc1\xa0\xa9&\xc5p\xf1\xfe%\x86\xa7\xaf\x9f\xc3C\x1a\
-\x06\xfe\xfc\xfd\xcb\xf0\xfb\xcf?\x14\xbb\xd0\x01\x00\x00\x00\
-\xff\xff\x22\x5cs\xfeg`\xf8\xfc\xe97\x03/\x177\
-\x83(\xbf0\xd43\xd0N\x15T\xc9\xb7\xdf\x9fQ<\
-\xc2\xc0\x00\xc9\x1b\x1c\x1c,\x0c\xef?\x7f\x82\xeb\xf9\x0f\
-\x0dINvN\x86\x88(-\x86\xd4\xced\x06\x13i\
-\x17\x86\xc3S72\xfc\xff\xff\x9f\xe1\x1f\xc3?\x06f\
-Ff\x86\xed7\x172\xec\xba\xbd\x82A\x84[\x92\x01\
-\xa9\xef\x80\x02\x00\x00\x00\x00\xff\xff|\x95M\x0a\x80 \
-\x18D\x9f\xf9C\x88P\xf7\xbf['\x886-41\
-\xfdZ\xb8\x11\x8a\xf6\x03\xf3\x86\x19\x98\x7fp\xd5w\x9e\
-b!\xf8\x85\xe0\xc3\xa7,\xdf\x91\xf1,DzS\xce\
-i\xe2\x95(\xb5`\xb5\x05\x81\x860)\x85\xb7+\xd6\
-\x18\x8c\x1e\x11z\xf4\xd4N\xf6\xbc\x91\xe4\xa0\xb6\x8a\xd3\
-\xf3\xcb\xf3\x01\x00\x00\xff\xff\x84\x97\xc1\x0a\x800\x0cC\
-_\xb7\xae\x9b\xc5\xff\xffW\xad\x16\x0f\x9ed\x03\xef!\
-y\x10\x08\xe4\x7f\xc7\x81\x88d\xb3AW[j\x22c\
-:\x1e\x22\xa0Z8\xe2\xe4\xbac\x82\xf3\xb6\x93\x99|\
-{zM\x8aT\x9a\x0c\xac:]}\x99\xf9\x00\x00\x00\
-\xff\xff\x22\xaa\x1c\xff\xfb\xf7?\x03\x0b33\x03\x13\x13\
-\x13\xb2\xf9p\x00i\xf5\xa1\xbb\x1c\x92\xb1\xff\xfe\xfb\x0b\
-u *`eb\x83&\x1dli\x18\xd2:\xfc\xff\
-\xff\x1f\xceZ\x14\x00\x00\x00\xff\xff\x22\xb2\xad\x02)\xf6\
-\x18q\xf6\xe7\xb0\x97\x00\x8cP)l\xb2L\x8c\xc4\x0d\
-!\xe0\x02\x00\x00\x00\x00\xff\xff\x22\xca\xe1LL\x8c\x0c\
-\x7f\xff\xfdc\xf8\x87\xa5I\xca\xc0\xc0\x80\xbdZ\x86:\
-\x98\x91\x11{\xb9@i\xcf\x08\x00\x00\x00\xff\xff\x22\xaa\
-8da\x85\xa4\xd5\xdf\x7f~\xc3\x1d\x85\x0cX\x18Y\
-\xb1\xb6\x9d\xff\xfd\xfd\xcf\xc0\xcc\xc4\xc4\xc0\x84e\x80\xe6\
-\xf7\xbf\x9f\xd0\xa2\x8e\xbc\x918\x00\x00\x00\x00\xff\xff\x22\
-\x1c\xe2\x8c\x0c\x0c\xec\xec,\x0c\xdf~|g\xf8\xf1\x0b\
-{\xbb\x81\x95\x99\x1d\xc3\xfe\xff\x0c\x0c\x0c\x7f\xfe\xfec\
-`eee`aFv8$\xfc\x7f\xfc\xf9\x06-\
-\x22\xc9\x03\x00\x00\x00\x00\xff\xff\x22Xs2220\
-psC\xfa\x96\x1f\xbf~\x82\x0a\xff\x87;\x8e\x81\x81\
-\x81\x81\x93\x95\x9b\x012\xa8\x89p\xda\xff\x7f\x0c\x0c\xbf\
-\x7f\xfde\xe0d\xe7\x80\x14\x85P\x09X>\xf9\xfa\xeb\
-#$\x89\x91\xe9r\x00\x00\x00\x00\xff\xff\x22*\x8d\xf3\
-\xf2\xb12|\xff\xf1\x8d\xe1\xe5\xfb\xd7\x10\x07\xffG8\
-\x90\x81\x81\x81\x81\x87M\x80\x81\x81\x01)\xf4\x18!\x0e\
-\xff\xf9\xf3/\x03\x1f\x17/D\x0e\xaa\x89\x91\x81\x91\xe1\
-\xcf\xbf\xdf\x0c\x9f~\xbec`fd!\xd8\xb7\xc4\x05\
-\x00\x00\x00\x00\xff\xff\xc2\xefp\xa8\x03\xf8\x05\xd9\x18\x18\
-\xfe\xfcd\xb8\xf7\xec!\xd4\xe1\xa8\x96\x09p\x88\xa2t\
-\xb3\x18\x19\x19\x18\xfe\xfc\x81T\x5cb\x82B\x0c\x0c\x0c\
-\x90\x9e\x10\xcc\x8d\x9f~\xbe\x838\x9c\x89\x85\x81\xdc \
-\x07\x00\x00\x00\xff\xff\x22\x18\xe2\x7f\xff\xfdg\xe0\x17d\
-a``a`\xb8x\xe7*\x9a\xbf a.\xc2%\
-\xc5\xc0\xc6\xc2\x09))\xa0\xed\xf7\x9f?\xfe3\xfc\xfc\
-\xf6\x87A^B\x06\xeeYX\xe8\xbe\xfc\xf2\x88\xe1\xeb\
-\xaf\x8f\x0c\xcc\x8c\xccd\xa7q\x00\x00\x00\x00\xff\xff\xc2\
-\xebpFF\x06\x86\xbf\x7f\xfe3\xf0\xf011\xf0\x0a\
-s2\x9c\xbcz\x8e\x81\x81\x81\x81\x81\x19^\x11A\x1c\
-.\xca-\xc3 \xc0.\xc2\xf0\x17\xdaOdbf`\
-\xf8\xfc\xe1\x0f\x03\xc3\xaf\xff\x0c\xba\xca\x9aP\xd3\x10-\
-\xbe{\xef.3\xfc\xfe\xfb\x0b\x9a\xc6\x91\x9d\x8eHN\
-L\x8cL\x0c\xac,,\x0c\xcc\xcc\xd8\xcb{\x00\x00\x00\
-\x00\xff\xff\x22\x5c\xe5\xffc``eg`PP\xe2\
-g8{\xe32\xc3\xa3W\x8f\xa1]6H\xfb\xfa\xdf\
-\xff\x7f\x0c\x9c\xac<\x0cJB:\x0c\xbf\xfe\xfdd`\
-d`b`bbdx\xfa\xe8;\x03+'/\x83\
-\x8d\xae\x05\xc4\x22\xa4n\xd8\xb5W'\x18X\xa0\xc9\x04\
-\xa5<\x87\xfa\x81\x87M\x90\xe1\xeb\xef\x8f\x0c/\xdf\xbd\
-ax\xf7\xf1#\xd6\x16\x22\x00\x00\x00\xff\xff\x22\xaa8\
-\xfc\xf7\xf7?\x83\x9a\x06/\xc3\xe7\x8fo\x186\x1f\xdb\
-\xc9\xc0\xc0\xc0\x80Q\x8d\xdb+\x860\xfc\xfb\xfb\x97\x81\
-\x99\xed\x1f\xc3\xcfoL\x0c\xa7\x8e>`\x08u\xf2f\
-P\x93Qa\xf8\xf7\xef\x1f\x03##$$\x9f|\xba\
-\xc3p\xfb\xedE\x06\x0eV.\x06V6&\x86\xcf\xdf\
-\xbe000@jfXmj%\xef\xc5`-\x92\
-\xc0\xa0\xfc'\x80!Uw\x02\x83(\x8f4$\x86\x90\
-<\x00\x00\x00\x00\xff\xff\x22\xaa\x02\xfa\xfd\xeb?\x83\x84\
-\x0c\x1b\x83\x84\x12\x1f\xc3\xf4\xf5\x8b\x18~\xfd\xf9\xc5\xc0\
-\xc2\xcc\xcc\xf0\x9f\xe1?|\xe4I[\xcc\x82!L/\
-\x9f\xe1\xd3\xa7\xef\x0c[\xd6=d\xb0\xd5sa\x98\x98\
-\xd7\x0a5\x83\x91\xe1\x1f\x03\xc4\xa3\xfb\xef\xadb\xf8\xfa\
-\xeb\x13\x03\x0b\x0b3\x83\x98\x18'\xc3\xc3\x17O\x19\x9e\
-\xbf{\x01\x0dpH\x90\xf3\xb2\x093\x14\xb9\xb60\xb4\
-%\xb418\xe9:3\xc0\x87\xe7\x90\x9a\x1c\x00\x00\x00\
-\x00\xff\xff\x22\xae\xad\xc2\xc0\xc0\xf0\x9f\xf1\x1f\x83\xad\x93\
-\x04\xc3\xd5[\x17\x19\xa6\xac\x9b\xcd\xc0\xc0\xc0\xc0\xf0\xfb\
-\xcf\x1f\xb8\xc3\xfe\xff\xff\xcf\xe0\xa7\x91\xc1Pg\xb7\x86\
-aM\xf9F\x86\xbd\x13\xd70\x88\xf0\x8b@\xc6V\x18\
-\xfe203\xb20\xdc{w\x99\xe1\xd0\x83\xf5\x0c\xdc\
-l|\x0c\xbf~\xfdfP\xd7\xe1g\xf8\xf8\xf1\x15\xc3\
-\xca=\x9b \xf6\xfc\x83\xe5\x03\xb4!8,9\x18\x00\
-\x00\x00\xff\xff\x22j\x08\x8e\x91\x91\x81\xe1\xf7\xcf\xff\x0c\
-\x122,\x0c\xd6\xee2\x0c\x95S\xdb\x18L5\x8d\x18\
-lu-\x19~\xff\xf9\xcd\xc0\xc4\xc4\xc4\xc0\xcc\xc4\xc4\
-\xf0\xff\xff?\x06U)U\x06U)H)\x02I\xbf\
-\xff\x19\x98\x19Y\x18>\xfd|\xc70\xe7l-\xc3\xdf\
-\x7f\xbf\x19\xd8Y8\x19~\xff\xfe\xc7 $\xc6\xcc\xe0\
-\x1a(\xcb\xd0\xb1\xaa\x9bA\x5cX\x94!\xc4\xde\x9f\x81\
-\x99\x81\x91\xe1\xff\xff\x7f\x0c\x9f\x7f}`x\xf8\xe1:\
-\xc3\xa9';\x19\xde|{\xc6\xc0\xca\xcc\x86\xd2R\x04\
-\x00\x00\x00\xff\xffb\xe4\xf1\x90\xfb\xcf\xc8\xc8\xc0\xf0\xeb\
-\xe7\x7f\x06YEv\x06\xb7@\xdc\x03\xfb\xff\xff30\
-pp03\x9c:\xf2\x96\xe1\xe6\xf9\xbf\x0cKkf\
-3xY:B\xcauh\x1a\xfe\xf7\xff\x1f\xc3\xff\xff\
-\x90\x92\x076\x9e\xf8\xe4\xe3m\x86\xe9\xa7\xca\x18\x9e~\
-\xba\xcb\xc0\xc9\xca\x03\x1f\xfc\xfc\xff\x9f\x81\x81\x9d\x9d\x89\
-\xe1\xcb\x97_\x0c/_~eP\x93Qf\x10\x17\x12\
-c\xf8\xf1\xe7\x1b\xc3\xfb\xef/\x19>\xfex\x03\xcf\xfc\
-\xe8\x19\x14\x00\x00\x00\xff\xff\x22\xc9\xe10\xcb89Y\
-\x18\x1e\xde\xff\xccp\xf1\xf4G\x06o\xfdP\x86d\xcf\
-x\x06\x1d%M\x06Vho\x06\xe6\xe0o\xbf?3\
-\xac\xbd:\x99\xe1\xf0\x83\x0d\x0c\x7f\xfe\xfd\x82\x8c\x02\xa0\
-\x8d\xd8\xc2\x86\xacYX\x98\x18~\xfc\xfa\xc1\xf0\xfb\xcf\
-\x1f\xc8\x8c\x03\x13+\xb4\xe4a\xc4:\xca\x0b\x00\x00\x00\
-\xff\xff\x22y\x0e\x82\x91\x91\x81\xe1\xfb\xb7?\x0c2r\
-\xdc\x0c~\xe1\xd2\x0cw\x1971\x18%X1\xb4.\
-\xeec````\xf8\xfb\x17a\xc9\x9f\x7f\xbf\x18\x0e\
-\xde_\xcb\xc0\xc0\xc0\xc0\xc0\xc5\xca\x8b\xd5\x01\x8cL\x90\
-Q\x81\x9f?\xff203\xb01p\xb0r3\xb0\xb3\
-p203B'\x0b\xb0\x0fM\xff\x07\x00\x00\x00\xff\
-\xff\x22k\xf2\x84\x91\x89\x81\xe1\xd7\xaf\x7f\x0c?\xbe\xfd\
-ePS\x15g\x10\x94\xe0e\xd8zl\x0f\x03\x03\x03\
-\x03\x03\x1333<\xc9\xf0\xb1\x0b3\xb8\xa9\xc60|\
-\xf8\xf1\x8a\xe1\xe3\xcf\xb7\xd04\x8f=*\x19\x19\x19P\
-z=x\xdb0\xff\x19\xfe\x00\x00\x00\x00\xff\xff\x22k\
-F\x02n\xd1?\x06\x86\xff\x8c\x7f\x18\xd45\x04\x19\xce\
-\x1c\xbd\xcap\xe9\xde\x15\x06=%\x1d\xc8\x80\x11\xb4v\
-\x0d\xd4\xcaf\x90\xe1Sex\xf1\xe9\x11\xc3\xb1'\x9b\
-\x19>\xfcx\x85\xb3\xfdN\x84\xad\xff\xff\xfd\xff\xc3\xc8\
-\xcf.\xfa\x0c\x00\x00\x00\xff\xff\xa2l\xba\x8a\x91\x81\xe1\
-\xf7\xef\xff\x0c\xea\xba\xbc\x0c\x7f\xfe\x7fc\x98\xb1q!\
-\x03\x03\x03\x03\xc3\x9f\xbf\x7f\xe0\x0d1\x16FV\x06+\
-9\x1f\x86 \x9d,\x06^6\x01\x86\xbf\xff\xfe0\xe0\
-\xcc@\x04\x00\x13#\xe3\xbf\xdf\x7f\x7f2\xa8\x0a\x1b\xed\
-\x07\x00\x00\x00\xff\xff\xa2\xc8\xe1\x8c\x8c\x0c\x0c\x7f\x7f\xff\
-g\xe0\x15`dpt\x97e\x98\xb9v1\xc3\xf6\x13\
-{\x19\xd8X\xd9\xe0\x0e\xff\xcf\xf0\x9f\x88\xf9\x1f\xa2\xc0\
-\xff\xff\x0c\xff\x99\x98\x99\xd8~;(\x06\xcf\x02\x00\x00\
-\x00\xff\xff\xa2x\x82\x90\x91\x89\x81\xe1\xe7\x8f\x7f\x0c\xda\
-\x86<\x0c\xf6>\xc2\x0ci\x932\x19fl\x9a\xcf\xf0\
-\xe1\xf3g\x86\xff\xff\x11m\x94o\xbf?3\xfc\xf9\xff\
-\x1b\xe7\xc8\x14\x0e\xd3\xff322\xfdcbd\xfe\xc3\
-\xc2\xc4\xfa\xfb\xfd\xf7W\x8c\x0e\x0a\xa1S\xd4E\x8d\x8e\
-\x03\x00\x00\x00\xff\xff\x22\xb98\xc4\x05`e\xfc\xb7\xef\
-\xbf\x19\x9e<\xfd\xc0 ) \xc5\xa0()\xc7\xc0\xce\
-\xc6\xce\xf0\xfd\xf7g\x86\x8f?\xdeAG\xbc0\xd36\
-db\x16\xba\x82\x02\xba\xd8\xe0?\xc3?\xe6\x7f\xff \
-\x0b\x1c\xfe\xfe\xfb\xfd\xef\xf7\xdf_L\xb6\xf2A+R\
-M[bX\x98X\xfe\x02\x00\x00\x00\xff\xff\x22;s\
-bX\xce\xc8\xc0\xf0\xe3\xfb_\x06\x16ff\x065\x15\
-1\x86_\xbf\xbf1\xdc\xffx\x09>\xb5\x0d\x9df\xf9\
-\x0fY\x09\xc1\x04o\xe3\xfeg\xf8\xc7\xfc\xf7\xdf_\xc6\
-\xbf\xff~3\xfe\xfd\xf7\x87\xe1\xef\xbf\xbf\x0c\x8c\x0c\x90\
-~,\x17+\xdf\x17qN\xb1\xc7\xa2\x5c2\xb7\xcdd\
-\xdc\x97\x9a\xcbz\xac\x82\x0c\xb4\xffg\x04\x00\x00\x00\xff\
-\xffb\x81\xacz\xf8O\x95\x09pH\xf3\xfa?\xc3\xcf\
-\x1f\x7f\xfe32\xb2\xfc\xe7de\x83/\xd7\xf8\xf7\xff\
-/\xf3\xdf\x7f\x7f\x18\x7f\xff\xfb\xcd\xf8\xe7\xdf\x1f\x86\x7f\
-\xff k^\xd8 \x0e\xfc*\xc0!\xffX\x94[\xe6\
-\xb6$\xaf\xc2uI^\xc5\xab\x92\xbc\x0a7E\xb8\xa4\
-\x1e\xf0q\x08\xbdfbd\xfe\xc7\xc0\xc0\xc0\xf0\xff\xff\
-?&\x06h\xac\x00\x00\x00\x00\xff\xffb\xf9\xf3\xe7\x0f\
-\x03\x1b\x1b\xdb?\x06\x86\xdfL$%?\x88S\xff3\
-22\xa0\x85\xe0\x7f\xe6\x7f\xff\xff0\xfe\xfe\xfb\x8b\xf1\
-\xef\x9f\xdf\xf0\x10dafg\xe0f\xe5\xfb*\xc6!\
-\xffX\x94[\xfa\x0e\xc4\x81JW%x\x14n\x8ar\
-K\xddGv :\x80,\xc8\xf9\xcf\xc0\xc4\xc8\x0c\xcf\
-\xe5\x00\x00\x00\x00\xff\xffb\x11\x13\x10~\xf2\xf4\xeds\
-Yvf\xee\xbf\xff\xff30cw<\xe3\x7f\xa4\xc5\
-.(i\x10\x11\x82\x103Ya\x0e\xe4\x16}\x22\xca\
--s[\x82W\xe1\xba\x14\xaf\xe25\x09\x1e\x85\x9b\x22\
-\xdc\xd2\xf7\xf99\x84^\xe1r\xe0\xff\xff\xff\x98\xff\xc3\
-c\x1f\xba\x18\x81\x91\xf1?\x13\x96![\x00\x00\x00\x00\
-\xff\xffb\xd9\xd3\xbf\xc1.\xa4.n\xd3\xc5+\x97t\
-Y\x98\xa5\xfeB\x06S\x99\xfe31\x22V\x01\xfd\xfd\
-\xff\x87\xf1\xcf_\xc8\x0a\x86\xbf\xff\xa1!\xc8\xc4\xce\xc0\
-\xcd\xc6\xf7]\x94C\x0e\x12\x82<\x8a\xd7$y\x15\xaf\
-I\xf0\xca\xdf\x10\xe5\x96\xb9\xcf\xcf.\xf4\x8a\x89\x09\xb7\
-\x03\xffA\x17\xcc@\x03\x05\xb2\x04\x84\x91\xe9/\xb1\x91\
-\x0e\x00\x00\x00\xff\xffb\xfc\xff\xff?\xc3\xeb\x8fo\x84\
-\xbdJ\xa27?\xfev\xd928F\xee\xdf\xd7o\xdf\
-\x99\xfe3@\x062Y\x99\xd8\x18\xb8Xy?\x09p\
-\x88=\x11\xe1\x96\xbe#\xc1\xa3pC\x92W\xe1\x9a8\
-\x8f\xfcMQn\xa9\x07\xfc\xec\xc2x\x1d\x88-\x04\x89\
-t\x1b^\x00\x00\x00\x00\xff\xffb\xfc\xf3\xf7\x0f33\
-\x13\xf3\xdfW\xef\xde\xf3f\xcfN\xde.\xa1\xfdVO\
-\x96O\xfd\xac\x04\xaf\xc2ui>\x95KR\xbc\x8a\xd7\
-\xc4\xb8e\xef\x08p\x8a\xbedfb\xc6\xde\xe2\xf9\xff\
-\x8f\xf9\x1f\xc3?h\xc3\x96\x11i\xa9\x13\xd9\x9dx\x82\
-\x00\x00\x00\x00\xff\xff\x03\x00<\x1e\x17\xa6\x18\xe4\xa8\x9e\
-\x00\x00\x00\x00IEND\xaeB`\x82\
-"
-
-qt_resource_name = b"\
-\x00\x06\
-\x07\x03}\xc3\
-\x00i\
-\x00m\x00a\x00g\x00e\x00s\
-\x00\x0b\
-\x05R\xbf'\
-\x00q\
-\x00t\x00-\x00l\x00o\x00g\x00o\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\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01e\xaf\x16\xd2\x99\
-"
-
-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)
-
-qInitResources()
diff --git a/examples/widgets/animation/easing/form.ui b/examples/widgets/animation/easing/form.ui
index 61a792115..2397b1787 100644
--- a/examples/widgets/animation/easing/form.ui
+++ b/examples/widgets/animation/easing/form.ui
@@ -62,7 +62,7 @@
<bool>true</bool>
</property>
<attribute name="buttonGroup">
- <string>buttonGroup</string>
+ <string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
@@ -72,7 +72,7 @@
<string>Circle</string>
</property>
<attribute name="buttonGroup">
- <string>buttonGroup</string>
+ <string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
@@ -198,7 +198,7 @@
<buttongroups>
<buttongroup name="buttonGroup">
<property name="exclusive">
- <bool>false</bool>
+ <bool>true</bool>
</property>
</buttongroup>
</buttongroups>
diff --git a/examples/widgets/animation/easing/ui_form.py b/examples/widgets/animation/easing/ui_form.py
index 49aaf2ff0..d7e79ebd2 100644
--- a/examples/widgets/animation/easing/ui_form.py
+++ b/examples/widgets/animation/easing/ui_form.py
@@ -3,19 +3,19 @@
################################################################################
## Form generated from reading UI file 'form.ui'
##
-## Created by: Qt User Interface Compiler version 5.14.0
+## Created by: Qt User Interface Compiler version 6.2.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
-from PySide6.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
- QRect, QSize, QUrl, Qt)
-from PySide6.QtGui import (QColor, QFont, QIcon, QPixmap)
+from PySide6.QtCore import *
+from PySide6.QtGui import *
from PySide6.QtWidgets import *
+
class Ui_Form(object):
def setupUi(self, Form):
- if Form.objectName():
+ if not Form.objectName():
Form.setObjectName(u"Form")
Form.resize(545, 471)
self.gridLayout = QGridLayout(Form)
@@ -45,7 +45,7 @@ class Ui_Form(object):
self.lineRadio = QRadioButton(self.groupBox_2)
self.buttonGroup = QButtonGroup(Form)
self.buttonGroup.setObjectName(u"buttonGroup")
- self.buttonGroup.setExclusive(False)
+ self.buttonGroup.setExclusive(True)
self.buttonGroup.addButton(self.lineRadio)
self.lineRadio.setObjectName(u"lineRadio")
self.lineRadio.setChecked(True)