aboutsummaryrefslogtreecommitdiffstats
path: root/examples/widgets/painting/svgviewer
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/painting/svgviewer')
-rw-r--r--examples/widgets/painting/svgviewer/files/bubbles.svg215
-rw-r--r--examples/widgets/painting/svgviewer/files/cubic.svg77
-rw-r--r--examples/widgets/painting/svgviewer/files/spheres.svg79
-rwxr-xr-xexamples/widgets/painting/svgviewer/svgviewer.py254
-rw-r--r--examples/widgets/painting/svgviewer/svgviewer.qrc7
-rw-r--r--examples/widgets/painting/svgviewer/svgviewer_rc.py639
6 files changed, 1271 insertions, 0 deletions
diff --git a/examples/widgets/painting/svgviewer/files/bubbles.svg b/examples/widgets/painting/svgviewer/files/bubbles.svg
new file mode 100644
index 0000000..65867da
--- /dev/null
+++ b/examples/widgets/painting/svgviewer/files/bubbles.svg
@@ -0,0 +1,215 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg width="20cm" height="15cm" viewBox="0 0 800 600"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink/"
+ baseProfile="tiny" version="1.2">
+ <title>Spheres</title>
+ <desc>Semi-transparent bubbles on a colored background.</desc>
+ <defs>
+ <!-- Create radial gradients for each bubble. -->
+ <radialGradient id="blueBubble" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" stop-opacity="1" />
+ <stop offset="25%" stop-color="#cdcdff" stop-opacity=".65" />
+ <stop offset="100%" stop-color="#cdaacd" stop-opacity=".75" />
+ </radialGradient>
+ <radialGradient id="redBubble" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" stop-opacity="1" />
+ <stop offset="25%" stop-color="#ffcdcd" stop-opacity=".65" />
+ <stop offset="100%" stop-color="#bbbb99" stop-opacity=".75" />
+ </radialGradient>
+ <radialGradient id="greenBubble" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" stop-opacity="1" />
+ <stop offset="25%" stop-color="#cdffcd" stop-opacity=".65" />
+ <stop offset="100%" stop-color="#99aaaa" stop-opacity=".75" />
+ </radialGradient>
+ <radialGradient id="yellowBubble" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" stop-opacity="1" />
+ <stop offset="25%" stop-color="#ffffcd" stop-opacity=".65" />
+ <stop offset="100%" stop-color="#bbbbaa" stop-opacity=".75" />
+ </radialGradient>
+ <radialGradient id="background" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="400" fx="250" fy="250">
+ <stop offset="0%" stop-color="#ffffee" />
+ <stop offset="100%" stop-color="#ccccaa" />
+ </radialGradient>
+ <linearGradient id="surface" gradientUnits="userSpaceOnUse"
+ x1="-100" y1="200" x2="400" y2="200">
+ <stop offset="0%" stop-color="#ffffcc" />
+ <stop offset="100%" stop-color="#bbbb88" />
+ </linearGradient>
+
+ <!-- Create radial gradients for each circle to make them look like
+ spheres. -->
+ <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="blue" />
+ <stop offset="100%" stop-color="#222244" />
+ </radialGradient>
+ <radialGradient id="redSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="red" />
+ <stop offset="100%" stop-color="#442222" />
+ </radialGradient>
+ <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="green" />
+ <stop offset="100%" stop-color="#113311" />
+ </radialGradient>
+ <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="yellow" />
+ <stop offset="100%" stop-color="#444422" />
+ </radialGradient>
+ <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="50">
+ <stop offset="0%" stop-color="black" stop-opacity="1.0" />
+ <stop offset="100%" stop-color="white" stop-opacity="0.0" />
+ </radialGradient>
+
+ <!-- Define a shadow for each sphere. -->
+ <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" />
+ <g id="bubble">
+ <circle fill="black" cx="0" cy="0" r="50" />
+ <circle fill="#a6ce39" cx="0" cy="0" r="33" />
+ <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
+ L -11,22 L -1,12 Z" />
+ <circle cx="0" cy="0" r="100" />
+ </g>
+ </defs>
+ <g>
+ <rect fill="url(#background)" x="0" y="0" width="800" height="600" />
+ </g>
+
+ <g transform="translate(200,700)">
+ <use xlink:href="#bubble" fill="url(#blueBubble)" />
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="1s" dur="10s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(315,700)">
+ <g transform="scale(0.5,0.5)">
+ <use xlink:href="#bubble" fill="url(#redBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="3s" dur="7s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(80,700)">
+ <g transform="scale(0.65,0.65)">
+ <use xlink:href="#bubble" fill="url(#greenBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="5s" dur="9s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(255,700)">
+ <g transform="scale(0.3,0.3)">
+ <use xlink:href="#bubble" fill="url(#yellowBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="2s" dur="6s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(565,700)">
+ <g transform="scale(0.4,0.4)">
+ <use xlink:href="#bubble" fill="url(#blueBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="4s" dur="8s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(715,700)">
+ <g transform="scale(0.6,0.6)">
+ <use xlink:href="#bubble" fill="url(#redBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="1s" dur="4s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(645,700)">
+ <g transform="scale(0.375,0.375)">
+ <use xlink:href="#bubble" fill="url(#greenBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="0s" dur="11s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(555,700)">
+ <g transform="scale(0.9,0.9)">
+ <use xlink:href="#bubble" fill="url(#yellowBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="3s" dur="7.5s" fill="freeze" repeatCount="indefinite" />
+ </g>
+
+ <g transform="translate(360,700)">
+ <g transform="scale(0.5,0.5)">
+ <use xlink:href="#bubble" fill="url(#blueBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="3s" dur="6s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(215,700)">
+ <g transform="scale(0.45,0.45)">
+ <use xlink:href="#bubble" fill="url(#redBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="5.5s" dur="7s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(420,700)">
+ <g transform="scale(0.75,0.75)">
+ <use xlink:href="#bubble" fill="url(#greenBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="1s" dur="9s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(815,700)">
+ <g transform="scale(0.6,0.6)">
+ <use xlink:href="#bubble" fill="url(#yellowBubble)" />
+ </g>
+ <animateTransform attributeName="transform" type="translate"
+ values="0,0; 0,-800" begin="2s" dur="9.5s" fill="freeze" repeatCount="indefinite" />
+ </g>
+
+ <g transform="translate(225,375)" >
+ <g transform="scale(1.0,0.5)" >
+ <path d="M 0 0 L 350 0 L 450 450 L -100 450 z"
+ fill="url(#surface)" stroke="none" />
+ </g>
+ </g>
+ <g transform="translate(200,0)" >
+ <g transform="translate(200,490) scale(2.0,1.0) rotate(45)" >
+ <rect fill="#a6ce39" x="-69" y="-69" width="138" height="138" />
+ <circle fill="black" cx="0" cy="0" r="50" />
+ <circle fill="#a6ce39" cx="0" cy="0" r="33" />
+ <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
+ L -11,22 L -1,12 Z" />
+ <animateTransform attributeName="transform" type="rotate" values="0; 360"
+ begin="0s" dur="10s" fill="freeze" repeatCount="indefinite" />
+ </g>
+ <g transform="translate(200,375)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" />
+ </g>
+ <g transform="translate(315,440)">
+ <g transform="scale(0.5,0.5)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#redSphere)" cx="0" cy="0" r="100" />
+ </g>
+ </g>
+ <g transform="translate(80,475)">
+ <g transform="scale(0.65,0.65)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" />
+ </g>
+ </g>
+ <g transform="translate(255,525)">
+ <g transform="scale(0.3,0.3)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/examples/widgets/painting/svgviewer/files/cubic.svg b/examples/widgets/painting/svgviewer/files/cubic.svg
new file mode 100644
index 0000000..492bb72
--- /dev/null
+++ b/examples/widgets/painting/svgviewer/files/cubic.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="10cm" height="10cm" viewBox="0 0 1000 1000"
+ xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny">
+ <title>Example cubic02 - cubic Bezier commands in path data</title>
+ <desc>Picture showing examples of "C" and "S" commands,
+ along with annotations showing the control points
+ and end points</desc>
+
+ <rect fill="none" stroke="blue" stroke-width="1" x="1" y="1" width="998" height="998" />
+
+ <!-- Path 1 -->
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="100,200 100,100" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="400,100 400,200" />
+ <path fill="none" stroke="red" stroke-width="5" d="M100,200 C100,100 400,100 400,200" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="200" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="200" r="10" />
+ <circle class="CtlPoint" cx="100" cy="100" r="10" />
+ <circle class="CtlPoint" cx="400" cy="100" r="10" />
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="275">M100,200 C100,100 400,100 400,200</text>
+
+ <!-- Path 2 -->
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="100,500 25,400" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="475,400 400,500" />
+ <path fill="none" stroke="red" stroke-width="5" d="M100,500 C25,400 475,400 400,500" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="500" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="500" r="10" />
+ <circle fill="#888888" stroke="none" cx="25" cy="400" r="10" />
+ <circle fill="#888888" stroke="none" cx="475" cy="400" r="10" />
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="575">M100,500 C25,400 475,400 400,500</text>
+
+ <!-- Path 3 -->
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="100,800 175,700" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="325,700 400,800" />
+ <path fill="none" stroke="red" stroke-width="5" d="M100,800 C175,700 325,700 400,800" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="800" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="800" r="10" />
+ <circle fill="#888888" stroke="none" cx="175" cy="700" r="10" />
+ <circle fill="#888888" stroke="none" cx="325" cy="700" r="10" />
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="875">M100,800 C175,700 325,700 400,800</text>
+
+ <!-- Path 4 -->
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="600,200 675,100" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="975,100 900,200" />
+ <path fill="none" stroke="red" stroke-width="5" d="M600,200 C675,100 975,100 900,200" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="200" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="200" r="10" />
+ <circle fill="#888888" stroke="none" cx="675" cy="100" r="10" />
+ <circle fill="#888888" stroke="none" cx="975" cy="100" r="10" />
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="275">M600,200 C675,100 975,100 900,200</text>
+
+ <!-- Path 5 -->
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="600,500 600,350" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="900,650 900,500" />
+ <path fill="none" stroke="red" stroke-width="5" d="M600,500 C600,350 900,650 900,500" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="500" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="500" r="10" />
+ <circle fill="#888888" stroke="none" cx="600" cy="350" r="10" />
+ <circle fill="#888888" stroke="none" cx="900" cy="650" r="10" />
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="575">M600,500 C600,350 900,650 900,500</text>
+
+ <!-- Path 6 (C and S command) -->
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="600,800 625,700" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="725,700 750,800" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="750,800 775,900" />
+ <polyline fill="none" stroke="#888888" stroke-width="2" points="875,900 900,800" />
+ <path fill="none" stroke="red" stroke-width="5" d="M600,800 C625,700 725,700 750,800
+ S875,900 900,800" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="800" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="750" cy="800" r="10" />
+ <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="800" r="10" />
+ <circle fill="#888888" stroke="none" cx="625" cy="700" r="10" />
+ <circle fill="#888888" stroke="none" cx="725" cy="700" r="10" />
+ <circle fill="#888888" stroke="none" cx="875" cy="900" r="10" />
+ <circle fill="none" stroke="blue" stroke-width="4" cx="775" cy="900" r="9" />
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="945">M600,800 C625,700 725,700 750,800</text>
+ <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="975">S875,900 900,800</text>
+</svg>
diff --git a/examples/widgets/painting/svgviewer/files/spheres.svg b/examples/widgets/painting/svgviewer/files/spheres.svg
new file mode 100644
index 0000000..1deabb5
--- /dev/null
+++ b/examples/widgets/painting/svgviewer/files/spheres.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="8cm" height="8cm" viewBox="0 0 400 400"
+ xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" version="1.2">
+ <title>Spheres</title>
+ <desc>Gradient filled spheres with different colors.</desc>
+ <defs>
+ <!-- Create radial gradients for each circle to make them look like
+ spheres. -->
+ <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="blue" />
+ <stop offset="100%" stop-color="#222244" />
+ </radialGradient>
+ <radialGradient id="redSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="red" />
+ <stop offset="100%" stop-color="#442222" />
+ </radialGradient>
+ <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="green" />
+ <stop offset="100%" stop-color="#113311" />
+ </radialGradient>
+ <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="-50">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="75%" stop-color="yellow" />
+ <stop offset="100%" stop-color="#444422" />
+ </radialGradient>
+ <radialGradient id="shadow" gradientUnits="userSpaceOnUse"
+ cx="0" cy="0" r="100" fx="-50" fy="50">
+ <stop offset="0%" stop-color="black" stop-opacity="1.0" />
+ <stop offset="100%" stop-color="white" stop-opacity="0.0" />
+ </radialGradient>
+
+ <!-- Define a shadow for each sphere. -->
+ <circle id="shadow" fill="url(#shadow)" cx="0" cy="0" r="100" />
+ </defs>
+ <g fill="#ffee99" stroke="none" >
+ <rect x="0" y="0" width="400" height="400" />
+ </g>
+ <g fill="white" stroke="none" >
+ <rect x="0" y="175" width="400" height="225" />
+ </g>
+ <g transform="translate(200,290) scale(2.0,1.0) rotate(45)" >
+ <rect fill="#a6ce39" x="-69" y="-69" width="138" height="138" />
+ <circle fill="black" cx="0" cy="0" r="50" />
+ <circle fill="#a6ce39" cx="0" cy="0" r="33" />
+ <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
+ L -11,22 L -1,12 Z" />
+ <animateTransform attributeName="transform" type="rotate" values="0; 360"
+ begin="0s" dur="10s" fill="freeze" />
+ </g>
+ <g transform="translate(200,175)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" />
+ </g>
+ <g transform="translate(315,240)">
+ <g transform="scale(0.5,0.5)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#redSphere)" cx="0" cy="0" r="100" />
+ </g>
+ </g>
+ <g transform="translate(80,275)">
+ <g transform="scale(0.65,0.65)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" />
+ </g>
+ </g>
+ <g transform="translate(255,325)">
+ <g transform="scale(0.3,0.3)">
+ <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+ <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" />
+ </g>
+ </g>
+</svg>
diff --git a/examples/widgets/painting/svgviewer/svgviewer.py b/examples/widgets/painting/svgviewer/svgviewer.py
new file mode 100755
index 0000000..e16f8f4
--- /dev/null
+++ b/examples/widgets/painting/svgviewer/svgviewer.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python
+
+"""PySide port of the painting/svgviewer example from Qt v4.x"""
+
+import sys
+from PySide2 import QtCore, QtGui, QtOpenGL, QtSvg
+
+import svgviewer_rc
+
+
+class MainWindow(QtGui.QMainWindow):
+ def __init__(self):
+ QtGui.QMainWindow.__init__(self)
+
+ self.currentPath = ""
+
+ self.area = SvgWindow()
+
+ fileMenu = QtGui.QMenu(self.tr("&File"), self)
+ self.openAction = fileMenu.addAction(self.tr("&Open..."))
+ self.openAction.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+O")))
+ self.quitAction = fileMenu.addAction(self.tr("E&xit"))
+ self.quitAction.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+Q")))
+
+ self.menuBar().addMenu(fileMenu)
+
+ rendererMenu = QtGui.QMenu(self.tr("&Renderer"), self)
+ self.nativeAction = rendererMenu.addAction(self.tr("&Native"))
+ self.nativeAction.setCheckable(True)
+
+ if QtOpenGL.QGLFormat.hasOpenGL():
+ self.glAction = rendererMenu.addAction(self.tr("&OpenGL"))
+ self.glAction.setCheckable(True)
+
+ self.imageAction = rendererMenu.addAction(self.tr("&Image"))
+ self.imageAction.setCheckable(True)
+ self.imageAction.setChecked(True)
+
+ rendererGroup = QtGui.QActionGroup(self)
+ rendererGroup.addAction(self.nativeAction)
+
+ if QtOpenGL.QGLFormat.hasOpenGL():
+ rendererGroup.addAction(self.glAction)
+
+ rendererGroup.addAction(self.imageAction)
+
+ self.menuBar().addMenu(rendererMenu)
+
+ self.connect(self.openAction, QtCore.SIGNAL("triggered()"), self.openFile)
+ self.connect(self.quitAction, QtCore.SIGNAL("triggered()"), QtGui.qApp, QtCore.SLOT("quit()"))
+ self.connect(rendererGroup, QtCore.SIGNAL("triggered(QAction *)"), self.setRenderer)
+
+ self.setCentralWidget(self.area)
+ self.setWindowTitle(self.tr("SVG Viewer"))
+
+ def openFile(self, path=""):
+ if path=="":
+ fileName = QtGui.QFileDialog.getOpenFileName(self, self.tr("Open SVG File"),
+ self.currentPath, "*.svg")[0]
+ else:
+ fileName = path
+
+ if fileName!="":
+ self.area.openFile(fileName)
+ if not fileName.startswith(":/"):
+ self.currentPath = fileName
+ self.setWindowTitle(self.tr("%s - SVGViewer") % self.currentPath)
+
+ def setRenderer(self, action):
+ if action == self.nativeAction:
+ self.area.setRenderer(SvgWindow.Native)
+ elif action == self.glAction:
+ if QtOpenGL.QGLFormat.hasOpenGL():
+ self.area.setRenderer(SvgWindow.OpenGL)
+ elif action == self.imageAction:
+ self.area.setRenderer(SvgWindow.Image)
+
+
+class SvgWindow(QtGui.QScrollArea):
+ Native, OpenGL, Image = range(3)
+
+ def __init__(self):
+ QtGui.QScrollArea.__init__(self)
+
+ self.mousePressPos = QtCore.QPoint()
+ self.scrollBarValuesOnMousePress = QtCore.QPoint()
+ self.currentPath = ""
+
+ self.view = QtGui.QWidget(self)
+ self.renderer = SvgWindow.Image
+ self.setWidget(self.view)
+
+ def openFile(self, path):
+ self.currentPath = path
+ self.setRenderer(self.renderer)
+
+ def setRenderer(self, renderer):
+ self.renderer = renderer
+
+ if self.renderer == SvgWindow.OpenGL:
+ if QtOpenGL.QGLFormat.hasOpenGL():
+ view = SvgGLView(self.currentPath, self)
+ else:
+ view = QtGui.QWidget()
+ elif self.renderer == SvgWindow.Image:
+ view = SvgRasterView(self.currentPath, self)
+ else:
+ view = SvgNativeView(self.currentPath, self)
+
+ self.setWidget(view)
+ view.show()
+
+ def mousePressEvent(self, event):
+ self.mousePressPos = QtCore.QPoint(event.pos())
+ self.scrollBarValuesOnMousePress.setX(self.horizontalScrollBar().value())
+ self.scrollBarValuesOnMousePress.setY(self.verticalScrollBar().value())
+ event.accept()
+
+ def mouseMoveEvent(self, event):
+ if self.mousePressPos.isNull():
+ event.ignore()
+ return
+
+ self.horizontalScrollBar().setValue(self.scrollBarValuesOnMousePress.x() - event.pos().x() + self.mousePressPos.x())
+ self.verticalScrollBar().setValue(self.scrollBarValuesOnMousePress.y() - event.pos().y() + self.mousePressPos.y())
+ self.horizontalScrollBar().update()
+ self.verticalScrollBar().update()
+ event.accept()
+
+ def mouseReleaseEvent(self, event):
+ self.mousePressPos = QtCore.QPoint()
+ event.accept()
+
+
+class SvgGLView(QtOpenGL.QGLWidget):
+ def __init__(self, path, parent):
+ QtOpenGL.QGLWidget.__init__(self, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
+
+ self.doc = QtSvg.QSvgRenderer(path, self)
+ self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"),
+ self, QtCore.SLOT("update()"))
+
+ def paintEvent(self, e):
+ p = QtGui.QPainter(self)
+ self.doc.render(p)
+
+ def sizeHint(self):
+ if self.doc:
+ return self.doc.defaultSize()
+ return QtOpenGL.QGLWidget.sizeHint(self)
+
+ def wheelEvent(self, e):
+ diff = 0.1
+ size = QtCore.QSize(self.doc.defaultSize())
+ width = size.width()
+ height = size.height()
+ if e.delta() > 0:
+ width = int(self.width() + self.width() * diff)
+ height = int(self.height() + self.height() * diff)
+ else:
+ width = int(self.width() - self.width() * diff)
+ height = int(self.height() - self.height() * diff)
+
+ self.resize(width, height)
+
+
+class SvgRasterView(QtGui.QWidget):
+ def __init__(self, path, parent):
+ QtGui.QWidget.__init__(self, parent)
+
+ self.buffer = QtGui.QImage()
+ self.m_dirty = False
+
+ self.doc = QtSvg.QSvgRenderer(path, self)
+ self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"), self.poluteImage)
+
+ def paintEvent(self, e):
+ if self.buffer.size() != self.size() or self.m_dirty:
+ self.buffer = QtGui.QImage(self.size(), QtGui.QImage.Format_ARGB32_Premultiplied)
+ p = QtGui.QPainter(self.buffer)
+ p.setViewport(0, 0, self.width(), self.height())
+ p.eraseRect(0, 0, self.width(), self.height())
+ self.doc.render(p)
+
+ pt = QtGui.QPainter(self)
+ pt.drawImage(0, 0, self.buffer)
+
+ def sizeHint(self):
+ if self.doc:
+ return self.doc.defaultSize()
+ return QtGui.QWidget.sizeHint(self)
+
+ def poluteImage(self):
+ self.m_dirty = True
+ self.update()
+
+ def wheelEvent(self, e):
+ diff = 0.1
+ size = QtCore.QSize(self.doc.defaultSize())
+ width = size.width()
+ height = size.height()
+ if e.delta() > 0:
+ width = int(self.width() + self.width() * diff)
+ height = int(self.height() + self.height() * diff)
+ else:
+ width = int(self.width() - self.width() * diff)
+ height = int(self.height() - self.height() * diff)
+
+ self.resize(width, height)
+
+
+class SvgNativeView(QtGui.QWidget):
+ def __init__(self, path, parent):
+ QtGui.QWidget.__init__(self, parent)
+
+ self.doc = QtSvg.QSvgRenderer(path, self)
+ self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"),
+ self, QtCore.SLOT("update()"))
+
+ def paintEvent(self, e):
+ p = QtGui.QPainter(self)
+ p.setViewport(0, 0, self.width(), self.height())
+ self.doc.render(p)
+
+ def sizeHint(self):
+ if self.doc:
+ return self.doc.defaultSize()
+ return QtGui.QWidget.sizeHint(self)
+
+ def wheelEvent(self, e):
+ diff = 0.1
+ size = QtCore.QSize(self.doc.defaultSize())
+ width = size.width()
+ height = size.height()
+ if e.delta() > 0:
+ width = int(self.width() + self.width() * diff)
+ height = int(self.height() + self.height() * diff)
+ else:
+ width = int(self.width() - self.width() * diff)
+ height = int(self.height() - self.height() * diff)
+
+ self.resize(width, height)
+
+
+if __name__ == '__main__':
+ app = QtGui.QApplication(sys.argv)
+
+ window = MainWindow()
+ if len(sys.argv) == 2:
+ window.openFile(sys.argv[1])
+ else:
+ window.openFile(":/files/cubic.svg")
+ window.show()
+ sys.exit(app.exec_())
diff --git a/examples/widgets/painting/svgviewer/svgviewer.qrc b/examples/widgets/painting/svgviewer/svgviewer.qrc
new file mode 100644
index 0000000..77238d6
--- /dev/null
+++ b/examples/widgets/painting/svgviewer/svgviewer.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+ <file>files/cubic.svg</file>
+ <file>files/spheres.svg</file>
+</qresource>
+</RCC>
+
diff --git a/examples/widgets/painting/svgviewer/svgviewer_rc.py b/examples/widgets/painting/svgviewer/svgviewer_rc.py
new file mode 100644
index 0000000..14a5ee6
--- /dev/null
+++ b/examples/widgets/painting/svgviewer/svgviewer_rc.py
@@ -0,0 +1,639 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# Resource object code
+#
+# Created: Tue Jan 10 14:08:21 2006
+# by: The Resource Compiler for PyQt (Qt v4.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x14\xa0\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
+\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\
+\x22\x31\x30\x63\x6d\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\
+\x30\x63\x6d\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x31\x30\x30\x30\x20\x31\x30\x30\x30\x22\x0a\x20\x20\x20\
+\x20\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\
+\x73\x76\x67\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x32\x22\x20\x62\x61\x73\x65\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\
+\x74\x69\x6e\x79\x22\x3e\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\
+\x45\x78\x61\x6d\x70\x6c\x65\x20\x63\x75\x62\x69\x63\x30\x32\x20\
+\x2d\x20\x63\x75\x62\x69\x63\x20\x42\x65\x7a\x69\x65\x72\x20\x63\
+\x6f\x6d\x6d\x61\x6e\x64\x73\x20\x69\x6e\x20\x70\x61\x74\x68\x20\
+\x64\x61\x74\x61\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\
+\x64\x65\x73\x63\x3e\x50\x69\x63\x74\x75\x72\x65\x20\x73\x68\x6f\
+\x77\x69\x6e\x67\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\x20\x6f\x66\
+\x20\x22\x43\x22\x20\x61\x6e\x64\x20\x22\x53\x22\x20\x63\x6f\x6d\
+\x6d\x61\x6e\x64\x73\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\
+\x6c\x6f\x6e\x67\x20\x77\x69\x74\x68\x20\x61\x6e\x6e\x6f\x74\x61\
+\x74\x69\x6f\x6e\x73\x20\x73\x68\x6f\x77\x69\x6e\x67\x20\x74\x68\
+\x65\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x20\x70\x6f\x69\x6e\x74\x73\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x64\x20\x65\x6e\x64\
+\x20\x70\x6f\x69\x6e\x74\x73\x3c\x2f\x64\x65\x73\x63\x3e\x0a\x0a\
+\x20\x20\x3c\x72\x65\x63\x74\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\
+\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x62\x6c\x75\x65\
+\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\
+\x31\x22\x20\x78\x3d\x22\x31\x22\x20\x79\x3d\x22\x31\x22\x20\x77\
+\x69\x64\x74\x68\x3d\x22\x39\x39\x38\x22\x20\x68\x65\x69\x67\x68\
+\x74\x3d\x22\x39\x39\x38\x22\x20\x2f\x3e\x0a\x0a\x20\x20\x3c\x21\
+\x2d\x2d\x20\x50\x61\x74\x68\x20\x31\x20\x2d\x2d\x3e\x0a\x20\x20\
+\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\
+\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\
+\x31\x30\x30\x2c\x32\x30\x30\x20\x31\x30\x30\x2c\x31\x30\x30\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\
+\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\
+\x69\x6e\x74\x73\x3d\x22\x34\x30\x30\x2c\x31\x30\x30\x20\x34\x30\
+\x30\x2c\x32\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\
+\x68\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\
+\x72\x6f\x6b\x65\x3d\x22\x72\x65\x64\x22\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x35\x22\x20\x64\x3d\x22\x4d\
+\x31\x30\x30\x2c\x32\x30\x30\x20\x43\x31\x30\x30\x2c\x31\x30\x30\
+\x20\x34\x30\x30\x2c\x31\x30\x30\x20\x34\x30\x30\x2c\x32\x30\x30\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\
+\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\
+\x22\x31\x30\x30\x22\x20\x63\x79\x3d\x22\x32\x30\x30\x22\x20\x72\
+\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\
+\x20\x63\x78\x3d\x22\x34\x30\x30\x22\x20\x63\x79\x3d\x22\x32\x30\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x63\x69\x72\x63\x6c\x65\x20\x63\x6c\x61\x73\x73\x3d\x22\x43\x74\
+\x6c\x50\x6f\x69\x6e\x74\x22\x20\x63\x78\x3d\x22\x31\x30\x30\x22\
+\x20\x63\x79\x3d\x22\x31\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x6c\
+\x61\x73\x73\x3d\x22\x43\x74\x6c\x50\x6f\x69\x6e\x74\x22\x20\x63\
+\x78\x3d\x22\x34\x30\x30\x22\x20\x63\x79\x3d\x22\x31\x30\x30\x22\
+\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x74\x65\
+\x78\x74\x20\x74\x65\x78\x74\x2d\x61\x6e\x63\x68\x6f\x72\x3d\x22\
+\x6d\x69\x64\x64\x6c\x65\x22\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\
+\x65\x3d\x22\x32\x32\x22\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\
+\x6c\x79\x3d\x22\x56\x65\x72\x64\x61\x6e\x61\x22\x20\x78\x3d\x22\
+\x32\x35\x30\x22\x20\x79\x3d\x22\x32\x37\x35\x22\x3e\x4d\x31\x30\
+\x30\x2c\x32\x30\x30\x20\x43\x31\x30\x30\x2c\x31\x30\x30\x20\x34\
+\x30\x30\x2c\x31\x30\x30\x20\x34\x30\x30\x2c\x32\x30\x30\x3c\x2f\
+\x74\x65\x78\x74\x3e\x0a\x0a\x20\x20\x3c\x21\x2d\x2d\x20\x50\x61\
+\x74\x68\x20\x32\x20\x2d\x2d\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\
+\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\
+\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\
+\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\
+\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x30\x30\x2c\x35\
+\x30\x30\x20\x32\x35\x2c\x34\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\
+\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\
+\x34\x37\x35\x2c\x34\x30\x30\x20\x34\x30\x30\x2c\x35\x30\x30\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\
+\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\
+\x72\x65\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x22\x20\x64\x3d\x22\x4d\x31\x30\x30\x2c\x35\x30\
+\x30\x20\x43\x32\x35\x2c\x34\x30\x30\x20\x34\x37\x35\x2c\x34\x30\
+\x30\x20\x34\x30\x30\x2c\x35\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\
+\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\
+\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
+\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x31\x30\x30\x22\x20\x63\
+\x79\x3d\x22\x35\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\
+\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\
+\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\
+\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x34\x30\
+\x30\x22\x20\x63\x79\x3d\x22\x35\x30\x30\x22\x20\x72\x3d\x22\x31\
+\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x63\x78\x3d\
+\x22\x32\x35\x22\x20\x63\x79\x3d\x22\x34\x30\x30\x22\x20\x72\x3d\
+\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\
+\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x63\
+\x78\x3d\x22\x34\x37\x35\x22\x20\x63\x79\x3d\x22\x34\x30\x30\x22\
+\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x74\x65\
+\x78\x74\x20\x74\x65\x78\x74\x2d\x61\x6e\x63\x68\x6f\x72\x3d\x22\
+\x6d\x69\x64\x64\x6c\x65\x22\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\
+\x65\x3d\x22\x32\x32\x22\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\
+\x6c\x79\x3d\x22\x56\x65\x72\x64\x61\x6e\x61\x22\x20\x78\x3d\x22\
+\x32\x35\x30\x22\x20\x79\x3d\x22\x35\x37\x35\x22\x3e\x4d\x31\x30\
+\x30\x2c\x35\x30\x30\x20\x43\x32\x35\x2c\x34\x30\x30\x20\x34\x37\
+\x35\x2c\x34\x30\x30\x20\x34\x30\x30\x2c\x35\x30\x30\x3c\x2f\x74\
+\x65\x78\x74\x3e\x0a\x0a\x20\x20\x3c\x21\x2d\x2d\x20\x50\x61\x74\
+\x68\x20\x33\x20\x2d\x2d\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x6c\
+\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\
+\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x30\x30\x2c\x38\x30\
+\x30\x20\x31\x37\x35\x2c\x37\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\
+\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\
+\x33\x32\x35\x2c\x37\x30\x30\x20\x34\x30\x30\x2c\x38\x30\x30\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\
+\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\
+\x72\x65\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x22\x20\x64\x3d\x22\x4d\x31\x30\x30\x2c\x38\x30\
+\x30\x20\x43\x31\x37\x35\x2c\x37\x30\x30\x20\x33\x32\x35\x2c\x37\
+\x30\x30\x20\x34\x30\x30\x2c\x38\x30\x30\x22\x20\x2f\x3e\x0a\x20\
+\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\
+\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\
+\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x31\x30\x30\x22\x20\
+\x63\x79\x3d\x22\x38\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\
+\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x34\
+\x30\x30\x22\x20\x63\x79\x3d\x22\x38\x30\x30\x22\x20\x72\x3d\x22\
+\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\
+\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x63\x78\
+\x3d\x22\x31\x37\x35\x22\x20\x63\x79\x3d\x22\x37\x30\x30\x22\x20\
+\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\x38\x38\x38\
+\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\
+\x20\x63\x78\x3d\x22\x33\x32\x35\x22\x20\x63\x79\x3d\x22\x37\x30\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x74\x65\x78\x74\x20\x74\x65\x78\x74\x2d\x61\x6e\x63\x68\x6f\x72\
+\x3d\x22\x6d\x69\x64\x64\x6c\x65\x22\x20\x66\x6f\x6e\x74\x2d\x73\
+\x69\x7a\x65\x3d\x22\x32\x32\x22\x20\x66\x6f\x6e\x74\x2d\x66\x61\
+\x6d\x69\x6c\x79\x3d\x22\x56\x65\x72\x64\x61\x6e\x61\x22\x20\x78\
+\x3d\x22\x32\x35\x30\x22\x20\x79\x3d\x22\x38\x37\x35\x22\x3e\x4d\
+\x31\x30\x30\x2c\x38\x30\x30\x20\x43\x31\x37\x35\x2c\x37\x30\x30\
+\x20\x33\x32\x35\x2c\x37\x30\x30\x20\x34\x30\x30\x2c\x38\x30\x30\
+\x3c\x2f\x74\x65\x78\x74\x3e\x0a\x0a\x20\x20\x3c\x21\x2d\x2d\x20\
+\x50\x61\x74\x68\x20\x34\x20\x2d\x2d\x3e\x0a\x20\x20\x3c\x70\x6f\
+\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\
+\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\
+\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x36\x30\x30\
+\x2c\x32\x30\x30\x20\x36\x37\x35\x2c\x31\x30\x30\x22\x20\x2f\x3e\
+\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\
+\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\
+\x73\x3d\x22\x39\x37\x35\x2c\x31\x30\x30\x20\x39\x30\x30\x2c\x32\
+\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\
+\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x22\x72\x65\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\
+\x69\x64\x74\x68\x3d\x22\x35\x22\x20\x64\x3d\x22\x4d\x36\x30\x30\
+\x2c\x32\x30\x30\x20\x43\x36\x37\x35\x2c\x31\x30\x30\x20\x39\x37\
+\x35\x2c\x31\x30\x30\x20\x39\x30\x30\x2c\x32\x30\x30\x22\x20\x2f\
+\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\
+\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\
+\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x36\x30\
+\x30\x22\x20\x63\x79\x3d\x22\x32\x30\x30\x22\x20\x72\x3d\x22\x31\
+\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\
+\x3d\x22\x39\x30\x30\x22\x20\x63\x79\x3d\x22\x32\x30\x30\x22\x20\
+\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\x38\x38\x38\
+\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\
+\x20\x63\x78\x3d\x22\x36\x37\x35\x22\x20\x63\x79\x3d\x22\x31\x30\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\
+\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\
+\x6e\x65\x22\x20\x63\x78\x3d\x22\x39\x37\x35\x22\x20\x63\x79\x3d\
+\x22\x31\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x74\x65\x78\x74\x20\x74\x65\x78\x74\x2d\x61\x6e\x63\
+\x68\x6f\x72\x3d\x22\x6d\x69\x64\x64\x6c\x65\x22\x20\x66\x6f\x6e\
+\x74\x2d\x73\x69\x7a\x65\x3d\x22\x32\x32\x22\x20\x66\x6f\x6e\x74\
+\x2d\x66\x61\x6d\x69\x6c\x79\x3d\x22\x56\x65\x72\x64\x61\x6e\x61\
+\x22\x20\x78\x3d\x22\x37\x35\x30\x22\x20\x79\x3d\x22\x32\x37\x35\
+\x22\x3e\x4d\x36\x30\x30\x2c\x32\x30\x30\x20\x43\x36\x37\x35\x2c\
+\x31\x30\x30\x20\x39\x37\x35\x2c\x31\x30\x30\x20\x39\x30\x30\x2c\
+\x32\x30\x30\x3c\x2f\x74\x65\x78\x74\x3e\x0a\x0a\x20\x20\x3c\x21\
+\x2d\x2d\x20\x50\x61\x74\x68\x20\x35\x20\x2d\x2d\x3e\x0a\x20\x20\
+\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\
+\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\
+\x36\x30\x30\x2c\x35\x30\x30\x20\x36\x30\x30\x2c\x33\x35\x30\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\
+\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\
+\x69\x6e\x74\x73\x3d\x22\x39\x30\x30\x2c\x36\x35\x30\x20\x39\x30\
+\x30\x2c\x35\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\
+\x68\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\
+\x72\x6f\x6b\x65\x3d\x22\x72\x65\x64\x22\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x35\x22\x20\x64\x3d\x22\x4d\
+\x36\x30\x30\x2c\x35\x30\x30\x20\x43\x36\x30\x30\x2c\x33\x35\x30\
+\x20\x39\x30\x30\x2c\x36\x35\x30\x20\x39\x30\x30\x2c\x35\x30\x30\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\
+\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\
+\x22\x36\x30\x30\x22\x20\x63\x79\x3d\x22\x35\x30\x30\x22\x20\x72\
+\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\
+\x20\x63\x78\x3d\x22\x39\x30\x30\x22\x20\x63\x79\x3d\x22\x35\x30\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\
+\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\
+\x6e\x65\x22\x20\x63\x78\x3d\x22\x36\x30\x30\x22\x20\x63\x79\x3d\
+\x22\x33\x35\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x22\x6e\x6f\x6e\x65\x22\x20\x63\x78\x3d\x22\x39\x30\x30\x22\x20\
+\x63\x79\x3d\x22\x36\x35\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x74\x65\x78\x74\x20\x74\x65\x78\x74\x2d\
+\x61\x6e\x63\x68\x6f\x72\x3d\x22\x6d\x69\x64\x64\x6c\x65\x22\x20\
+\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3d\x22\x32\x32\x22\x20\x66\
+\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3d\x22\x56\x65\x72\x64\
+\x61\x6e\x61\x22\x20\x78\x3d\x22\x37\x35\x30\x22\x20\x79\x3d\x22\
+\x35\x37\x35\x22\x3e\x4d\x36\x30\x30\x2c\x35\x30\x30\x20\x43\x36\
+\x30\x30\x2c\x33\x35\x30\x20\x39\x30\x30\x2c\x36\x35\x30\x20\x39\
+\x30\x30\x2c\x35\x30\x30\x3c\x2f\x74\x65\x78\x74\x3e\x0a\x0a\x20\
+\x20\x3c\x21\x2d\x2d\x20\x50\x61\x74\x68\x20\x36\x20\x28\x43\x20\
+\x61\x6e\x64\x20\x53\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x29\x20\x2d\
+\x2d\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\
+\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x36\x30\x30\x2c\x38\x30\x30\x20\x36\x32\x35\
+\x2c\x37\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\
+\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\
+\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\
+\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\
+\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x37\x32\x35\x2c\x37\
+\x30\x30\x20\x37\x35\x30\x2c\x38\x30\x30\x22\x20\x2f\x3e\x0a\x20\
+\x20\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x20\x66\x69\x6c\x6c\x3d\
+\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\
+\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\
+\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x70\x6f\x69\x6e\x74\x73\x3d\
+\x22\x37\x35\x30\x2c\x38\x30\x30\x20\x37\x37\x35\x2c\x39\x30\x30\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x6c\x69\x6e\x65\
+\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\
+\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x70\
+\x6f\x69\x6e\x74\x73\x3d\x22\x38\x37\x35\x2c\x39\x30\x30\x20\x39\
+\x30\x30\x2c\x38\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\
+\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x22\x72\x65\x64\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x35\x22\x20\x64\x3d\x22\
+\x4d\x36\x30\x30\x2c\x38\x30\x30\x20\x43\x36\x32\x35\x2c\x37\x30\
+\x30\x20\x37\x32\x35\x2c\x37\x30\x30\x20\x37\x35\x30\x2c\x38\x30\
+\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x38\x37\x35\x2c\x39\x30\
+\x30\x20\x39\x30\x30\x2c\x38\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\
+\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\
+\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
+\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x36\x30\x30\x22\x20\x63\
+\x79\x3d\x22\x38\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\
+\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\
+\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\
+\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\x3d\x22\x37\x35\
+\x30\x22\x20\x63\x79\x3d\x22\x38\x30\x30\x22\x20\x72\x3d\x22\x31\
+\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\
+\x6b\x65\x3d\x22\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x63\x78\
+\x3d\x22\x39\x30\x30\x22\x20\x63\x79\x3d\x22\x38\x30\x30\x22\x20\
+\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\x38\x38\x38\
+\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\
+\x20\x63\x78\x3d\x22\x36\x32\x35\x22\x20\x63\x79\x3d\x22\x37\x30\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x38\
+\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\
+\x6e\x65\x22\x20\x63\x78\x3d\x22\x37\x32\x35\x22\x20\x63\x79\x3d\
+\x22\x37\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x23\x38\x38\x38\x38\x38\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x22\x6e\x6f\x6e\x65\x22\x20\x63\x78\x3d\x22\x38\x37\x35\x22\x20\
+\x63\x79\x3d\x22\x39\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\
+\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x22\x62\x6c\x75\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x22\x34\x22\x20\x63\x78\x3d\x22\x37\x37\x35\x22\
+\x20\x63\x79\x3d\x22\x39\x30\x30\x22\x20\x72\x3d\x22\x39\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x74\x65\x78\x74\x20\x74\x65\x78\x74\x2d\
+\x61\x6e\x63\x68\x6f\x72\x3d\x22\x6d\x69\x64\x64\x6c\x65\x22\x20\
+\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3d\x22\x32\x32\x22\x20\x66\
+\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3d\x22\x56\x65\x72\x64\
+\x61\x6e\x61\x22\x20\x78\x3d\x22\x37\x35\x30\x22\x20\x79\x3d\x22\
+\x39\x34\x35\x22\x3e\x4d\x36\x30\x30\x2c\x38\x30\x30\x20\x43\x36\
+\x32\x35\x2c\x37\x30\x30\x20\x37\x32\x35\x2c\x37\x30\x30\x20\x37\
+\x35\x30\x2c\x38\x30\x30\x3c\x2f\x74\x65\x78\x74\x3e\x0a\x20\x20\
+\x3c\x74\x65\x78\x74\x20\x74\x65\x78\x74\x2d\x61\x6e\x63\x68\x6f\
+\x72\x3d\x22\x6d\x69\x64\x64\x6c\x65\x22\x20\x66\x6f\x6e\x74\x2d\
+\x73\x69\x7a\x65\x3d\x22\x32\x32\x22\x20\x66\x6f\x6e\x74\x2d\x66\
+\x61\x6d\x69\x6c\x79\x3d\x22\x56\x65\x72\x64\x61\x6e\x61\x22\x20\
+\x78\x3d\x22\x37\x35\x30\x22\x20\x79\x3d\x22\x39\x37\x35\x22\x3e\
+\x53\x38\x37\x35\x2c\x39\x30\x30\x20\x39\x30\x30\x2c\x38\x30\x30\
+\x3c\x2f\x74\x65\x78\x74\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x0d\xe6\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
+\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\
+\x22\x38\x63\x6d\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x38\x63\
+\x6d\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\
+\x34\x30\x30\x20\x34\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\
+\x20\x62\x61\x73\x65\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\x74\x69\
+\x6e\x79\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x32\
+\x22\x3e\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x53\x70\x68\x65\
+\x72\x65\x73\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x64\
+\x65\x73\x63\x3e\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x66\x69\x6c\
+\x6c\x65\x64\x20\x73\x70\x68\x65\x72\x65\x73\x20\x77\x69\x74\x68\
+\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x74\x20\x63\x6f\x6c\x6f\x72\
+\x73\x2e\x3c\x2f\x64\x65\x73\x63\x3e\x0a\x20\x20\x20\x20\x3c\x64\
+\x65\x66\x73\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x21\x2d\x2d\x20\
+\x43\x72\x65\x61\x74\x65\x20\x72\x61\x64\x69\x61\x6c\x20\x67\x72\
+\x61\x64\x69\x65\x6e\x74\x73\x20\x66\x6f\x72\x20\x65\x61\x63\x68\
+\x20\x63\x69\x72\x63\x6c\x65\x20\x74\x6f\x20\x6d\x61\x6b\x65\x20\
+\x74\x68\x65\x6d\x20\x6c\x6f\x6f\x6b\x20\x6c\x69\x6b\x65\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x70\x68\x65\x72\x65\
+\x73\x2e\x20\x2d\x2d\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x61\
+\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\x3d\
+\x22\x62\x6c\x75\x65\x53\x70\x68\x65\x72\x65\x22\x20\x67\x72\x61\
+\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\
+\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\x30\x22\x20\
+\x72\x3d\x22\x31\x30\x30\x22\x20\x66\x78\x3d\x22\x2d\x35\x30\x22\
+\x20\x66\x79\x3d\x22\x2d\x35\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\
+\x22\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\
+\x22\x77\x68\x69\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\
+\x22\x37\x35\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\
+\x3d\x22\x62\x6c\x75\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\
+\x22\x31\x30\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\
+\x72\x3d\x22\x23\x32\x32\x32\x32\x34\x34\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\
+\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x61\
+\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\x3d\
+\x22\x72\x65\x64\x53\x70\x68\x65\x72\x65\x22\x20\x67\x72\x61\x64\
+\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\
+\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\x30\x22\x20\x72\
+\x3d\x22\x31\x30\x30\x22\x20\x66\x78\x3d\x22\x2d\x35\x30\x22\x20\
+\x66\x79\x3d\x22\x2d\x35\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\
+\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\
+\x77\x68\x69\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\
+\x37\x35\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\
+\x22\x72\x65\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\
+\x30\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\
+\x22\x23\x34\x34\x32\x32\x32\x32\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\
+\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x61\x64\x69\
+\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\x67\
+\x72\x65\x65\x6e\x53\x70\x68\x65\x72\x65\x22\x20\x67\x72\x61\x64\
+\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\
+\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\x30\x22\x20\x72\
+\x3d\x22\x31\x30\x30\x22\x20\x66\x78\x3d\x22\x2d\x35\x30\x22\x20\
+\x66\x79\x3d\x22\x2d\x35\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\
+\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\
+\x77\x68\x69\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\
+\x37\x35\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\
+\x22\x67\x72\x65\x65\x6e\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\
+\x22\x31\x30\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\
+\x72\x3d\x22\x23\x31\x31\x33\x33\x31\x31\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\
+\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x61\
+\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\x3d\
+\x22\x79\x65\x6c\x6c\x6f\x77\x53\x70\x68\x65\x72\x65\x22\x20\x67\
+\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\
+\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\x30\
+\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x20\x66\x78\x3d\x22\x2d\x35\
+\x30\x22\x20\x66\x79\x3d\x22\x2d\x35\x30\x22\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\
+\x74\x3d\x22\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\
+\x72\x3d\x22\x77\x68\x69\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\
+\x74\x3d\x22\x37\x35\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\
+\x6f\x72\x3d\x22\x79\x65\x6c\x6c\x6f\x77\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\
+\x73\x65\x74\x3d\x22\x31\x30\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\
+\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x34\x34\x34\x34\x32\x32\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\
+\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\
+\x20\x69\x64\x3d\x22\x73\x68\x61\x64\x6f\x77\x22\x20\x67\x72\x61\
+\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\
+\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\x30\x22\x20\
+\x72\x3d\x22\x31\x30\x30\x22\x20\x66\x78\x3d\x22\x2d\x35\x30\x22\
+\x20\x66\x79\x3d\x22\x35\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\
+\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\
+\x62\x6c\x61\x63\x6b\x22\x20\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\
+\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\
+\x74\x3d\x22\x31\x30\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\
+\x6c\x6f\x72\x3d\x22\x77\x68\x69\x74\x65\x22\x20\x73\x74\x6f\x70\
+\x2d\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\
+\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x3c\x21\x2d\x2d\x20\x44\x65\x66\x69\x6e\x65\x20\x61\x20\x73\
+\x68\x61\x64\x6f\x77\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x73\
+\x70\x68\x65\x72\x65\x2e\x20\x2d\x2d\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x69\x64\x3d\x22\x73\x68\x61\
+\x64\x6f\x77\x22\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\
+\x73\x68\x61\x64\x6f\x77\x29\x22\x20\x63\x78\x3d\x22\x30\x22\x20\
+\x63\x79\x3d\x22\x30\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\
+\x3c\x67\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x65\x65\x39\x39\
+\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\x20\
+\x3e\x0a\x20\x20\x20\x20\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x30\
+\x22\x20\x79\x3d\x22\x30\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x34\
+\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x30\x30\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x67\x20\
+\x66\x69\x6c\x6c\x3d\x22\x77\x68\x69\x74\x65\x22\x20\x73\x74\x72\
+\x6f\x6b\x65\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x3e\x0a\x20\x20\x20\
+\x20\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x30\x22\x20\x79\x3d\x22\
+\x31\x37\x35\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x34\x30\x30\x22\
+\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x32\x35\x22\x20\x2f\x3e\
+\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x32\x30\x30\x2c\x32\x39\x30\x29\x20\x73\x63\x61\x6c\x65\
+\x28\x32\x2e\x30\x2c\x31\x2e\x30\x29\x20\x72\x6f\x74\x61\x74\x65\
+\x28\x34\x35\x29\x22\x20\x3e\x0a\x20\x20\x20\x20\x3c\x72\x65\x63\
+\x74\x20\x66\x69\x6c\x6c\x3d\x22\x23\x61\x36\x63\x65\x33\x39\x22\
+\x20\x78\x3d\x22\x2d\x36\x39\x22\x20\x79\x3d\x22\x2d\x36\x39\x22\
+\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x33\x38\x22\x20\x68\x65\x69\
+\x67\x68\x74\x3d\x22\x31\x33\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x62\
+\x6c\x61\x63\x6b\x22\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\
+\x22\x30\x22\x20\x72\x3d\x22\x35\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\
+\x23\x61\x36\x63\x65\x33\x39\x22\x20\x63\x78\x3d\x22\x30\x22\x20\
+\x63\x79\x3d\x22\x30\x22\x20\x72\x3d\x22\x33\x33\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\
+\x22\x62\x6c\x61\x63\x6b\x22\x20\x64\x3d\x22\x4d\x20\x33\x37\x2c\
+\x35\x30\x20\x4c\x20\x35\x30\x2c\x33\x37\x20\x4c\x20\x31\x32\x2c\
+\x2d\x31\x20\x4c\x20\x32\x32\x2c\x2d\x31\x31\x20\x4c\x20\x31\x30\
+\x2c\x2d\x32\x34\x20\x4c\x20\x2d\x32\x34\x2c\x31\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x4c\x20\x2d\x31\x31\x2c\x32\x32\
+\x20\x4c\x20\x2d\x31\x2c\x31\x32\x20\x5a\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x61\x6e\x69\x6d\x61\x74\x65\x54\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x4e\x61\
+\x6d\x65\x3d\x22\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x22\x20\x20\
+\x74\x79\x70\x65\x3d\x22\x72\x6f\x74\x61\x74\x65\x22\x20\x76\x61\
+\x6c\x75\x65\x73\x3d\x22\x30\x3b\x20\x33\x36\x30\x22\x0a\x09\x20\
+\x20\x20\x20\x20\x20\x20\x62\x65\x67\x69\x6e\x3d\x22\x30\x73\x22\
+\x20\x64\x75\x72\x3d\x22\x31\x30\x73\x22\x20\x66\x69\x6c\x6c\x3d\
+\x22\x66\x72\x65\x65\x7a\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\
+\x67\x3e\x0a\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x30\x30\
+\x2c\x31\x37\x35\x29\x22\x3e\x0a\x20\x20\x20\x20\x3c\x75\x73\x65\
+\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x73\x68\
+\x61\x64\x6f\x77\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x35\x2c\x35\x35\
+\x29\x20\x73\x63\x61\x6c\x65\x28\x31\x2e\x30\x2c\x30\x2e\x35\x29\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\
+\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\x62\x6c\x75\x65\
+\x53\x70\x68\x65\x72\x65\x29\x22\x20\x63\x78\x3d\x22\x30\x22\x20\
+\x63\x79\x3d\x22\x30\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x20\x2f\
+\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x33\x31\x35\x2c\x32\x34\x30\x29\x22\x3e\x0a\x20\x20\
+\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\
+\x73\x63\x61\x6c\x65\x28\x30\x2e\x35\x2c\x30\x2e\x35\x29\x22\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x3c\x75\x73\x65\x20\x78\x6c\x69\x6e\
+\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x73\x68\x61\x64\x6f\x77\x22\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\
+\x73\x6c\x61\x74\x65\x28\x32\x35\x2c\x35\x35\x29\x20\x73\x63\x61\
+\x6c\x65\x28\x31\x2e\x30\x2c\x30\x2e\x35\x29\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\
+\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\x72\x65\x64\x53\x70\x68\x65\
+\x72\x65\x29\x22\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\
+\x61\x6e\x73\x6c\x61\x74\x65\x28\x38\x30\x2c\x32\x37\x35\x29\x22\
+\x3e\x0a\x20\x20\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x22\x73\x63\x61\x6c\x65\x28\x30\x2e\x36\x35\x2c\x30\
+\x2e\x36\x35\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x75\x73\
+\x65\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x73\
+\x68\x61\x64\x6f\x77\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
+\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x32\x35\x2c\x35\
+\x35\x29\x20\x73\x63\x61\x6c\x65\x28\x31\x2e\x30\x2c\x30\x2e\x35\
+\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\x67\
+\x72\x65\x65\x6e\x53\x70\x68\x65\x72\x65\x29\x22\x20\x63\x78\x3d\
+\x22\x30\x22\x20\x63\x79\x3d\x22\x30\x22\x20\x72\x3d\x22\x31\x30\
+\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\
+\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x32\x35\x35\x2c\x33\x32\x35\x29\x22\x3e\x0a\x20\x20\x20\x20\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x73\x63\x61\
+\x6c\x65\x28\x30\x2e\x33\x2c\x30\x2e\x33\x29\x22\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x3c\x75\x73\x65\x20\x78\x6c\x69\x6e\x6b\x3a\x68\
+\x72\x65\x66\x3d\x22\x23\x73\x68\x61\x64\x6f\x77\x22\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x32\x35\x2c\x35\x35\x29\x20\x73\x63\x61\x6c\x65\x28\
+\x31\x2e\x30\x2c\x30\x2e\x35\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x20\x66\x69\x6c\x6c\x3d\
+\x22\x75\x72\x6c\x28\x23\x79\x65\x6c\x6c\x6f\x77\x53\x70\x68\x65\
+\x72\x65\x29\x22\x20\x63\x78\x3d\x22\x30\x22\x20\x63\x79\x3d\x22\
+\x30\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6d\x02\xc3\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x65\x00\x73\
+\x00\x09\
+\x08\xf6\x8f\xa7\
+\x00\x63\
+\x00\x75\x00\x62\x00\x69\x00\x63\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0b\
+\x08\x32\x87\x47\
+\x00\x73\
+\x00\x70\x00\x68\x00\x65\x00\x72\x00\x65\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+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\x02\x00\x00\x00\x02\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x14\xa4\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\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)
+
+qInitResources()