diff --git a/plugins/python/scripter/icons/reload_script.svg b/plugins/python/scripter/icons/reload_script.svg
new file mode 100644
index 0000000000..86269d0348
--- /dev/null
+++ b/plugins/python/scripter/icons/reload_script.svg
@@ -0,0 +1,79 @@
+
+
\ No newline at end of file
diff --git a/plugins/python/scripter/resources_rc.py b/plugins/python/scripter/resources_rc.py
index 09734cdc5d..3b603b1ade 100644
--- a/plugins/python/scripter/resources_rc.py
+++ b/plugins/python/scripter/resources_rc.py
@@ -1,544 +1,847 @@
# -*- coding: utf-8 -*-
# Resource object code
#
-# Created by: The Resource Compiler for PyQt5 (Qt v5.8.0)
+# Created by: The Resource Compiler for PyQt5 (Qt v5.12.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore
qt_resource_data = b"\
+\x00\x00\x03\x58\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x30\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\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\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x32\x34\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x22\x32\x34\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x78\x6d\x6c\
+\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\
+\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x39\x2e\
+\x34\x38\x38\x2c\x33\x2e\x39\x30\x37\x48\x32\x34\x76\x32\x2e\x37\
+\x39\x31\x48\x39\x2e\x34\x38\x38\x56\x33\x2e\x39\x30\x37\x7a\x20\
+\x4d\x31\x31\x2e\x31\x36\x33\x2c\x38\x2e\x33\x37\x32\x48\x32\x34\
+\x76\x32\x2e\x37\x39\x31\x48\x31\x31\x2e\x31\x36\x33\x56\x38\x2e\
+\x33\x37\x32\x7a\x20\x4d\x31\x31\x2e\x31\x36\x33\x2c\x31\x32\x2e\
+\x38\x33\x37\x48\x32\x34\x76\x32\x2e\x37\x39\x31\x48\x31\x31\x2e\
+\x31\x36\x33\x56\x31\x32\x2e\x38\x33\x37\x7a\x0d\x0a\x09\x20\x4d\
+\x39\x2e\x34\x38\x38\x2c\x31\x37\x2e\x33\x30\x32\x48\x32\x34\x76\
+\x32\x2e\x37\x39\x31\x48\x39\x2e\x34\x38\x38\x56\x31\x37\x2e\x33\
+\x30\x32\x7a\x20\x4d\x32\x2e\x37\x39\x31\x2c\x31\x30\x2e\x36\x30\
+\x34\x63\x30\x2c\x31\x2e\x32\x33\x33\x2c\x31\x2c\x32\x2e\x32\x33\
+\x33\x2c\x32\x2e\x32\x33\x33\x2c\x32\x2e\x32\x33\x33\x48\x36\x2e\
+\x31\x34\x76\x2d\x32\x2e\x32\x33\x33\x6c\x33\x2e\x37\x36\x37\x2c\
+\x33\x2e\x36\x32\x38\x4c\x36\x2e\x31\x34\x2c\x31\x37\x2e\x38\x36\
+\x76\x2d\x32\x2e\x32\x33\x32\x48\x35\x2e\x30\x32\x33\x0d\x0a\x09\
+\x43\x32\x2e\x32\x34\x39\x2c\x31\x35\x2e\x36\x32\x38\x2c\x30\x2c\
+\x31\x33\x2e\x33\x37\x39\x2c\x30\x2c\x31\x30\x2e\x36\x30\x34\x56\
+\x38\x2e\x39\x33\x63\x30\x2d\x32\x2e\x37\x37\x34\x2c\x32\x2e\x32\
+\x34\x39\x2d\x35\x2e\x30\x32\x33\x2c\x35\x2e\x30\x32\x33\x2d\x35\
+\x2e\x30\x32\x33\x48\x36\x2e\x31\x34\x76\x32\x2e\x37\x39\x31\x48\
+\x35\x2e\x30\x32\x33\x63\x2d\x31\x2e\x32\x33\x33\x2c\x30\x2d\x32\
+\x2e\x32\x33\x33\x2c\x31\x2d\x32\x2e\x32\x33\x33\x2c\x32\x2e\x32\
+\x33\x32\x56\x31\x30\x2e\x36\x30\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x0f\xd9\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\
\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\
\x59\x50\x45\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\
\x2d\x2f\x2f\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\
\x31\x2e\x31\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\
\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\
\x68\x69\x63\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\
\x2f\x73\x76\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\
\x67\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\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
\x3d\x22\x43\x61\x70\x61\x5f\x31\x22\x20\x78\x3d\x22\x30\x70\x78\
\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\
\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
\x30\x20\x30\x20\x34\x31\x32\x2e\x37\x36\x20\x34\x31\x32\x2e\x37\
\x36\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\
\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\
\x30\x20\x30\x20\x34\x31\x32\x2e\x37\x36\x20\x34\x31\x32\x2e\x37\
\x36\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\
\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x37\x36\x2e\x34\x39\x33\
\x2c\x33\x31\x30\x2e\x39\x39\x38\x63\x2d\x31\x2e\x35\x37\x37\x2d\
\x32\x39\x2e\x31\x36\x37\x2d\x32\x34\x2e\x39\x37\x32\x2d\x35\x32\
\x2e\x35\x36\x32\x2d\x35\x34\x2e\x31\x33\x39\x2d\x35\x34\x2e\x31\
\x33\x39\x76\x2d\x32\x31\x2e\x37\x32\x68\x2d\x36\x2e\x32\x33\x35\
\x76\x32\x31\x2e\x37\x32\x20\x20\x20\x63\x2d\x32\x39\x2e\x31\x36\
\x37\x2c\x31\x2e\x35\x37\x37\x2d\x35\x32\x2e\x35\x36\x32\x2c\x32\
\x34\x2e\x39\x37\x32\x2d\x35\x34\x2e\x31\x33\x39\x2c\x35\x34\x2e\
\x31\x33\x39\x68\x2d\x32\x31\x2e\x34\x36\x35\x76\x36\x2e\x32\x33\
\x35\x68\x32\x31\x2e\x34\x36\x35\x63\x31\x2e\x35\x37\x37\x2c\x32\
\x39\x2e\x31\x36\x37\x2c\x32\x34\x2e\x39\x37\x32\x2c\x35\x32\x2e\
\x35\x36\x38\x2c\x35\x34\x2e\x31\x33\x39\x2c\x35\x34\x2e\x31\x34\
\x35\x76\x32\x31\x2e\x37\x31\x35\x68\x36\x2e\x32\x33\x35\x76\x2d\
\x32\x31\x2e\x37\x31\x35\x20\x20\x20\x63\x32\x39\x2e\x31\x36\x37\
\x2d\x31\x2e\x35\x37\x36\x2c\x35\x32\x2e\x35\x36\x32\x2d\x32\x34\
\x2e\x39\x37\x38\x2c\x35\x34\x2e\x31\x33\x39\x2d\x35\x34\x2e\x31\
\x34\x35\x68\x32\x36\x2e\x31\x34\x31\x76\x2d\x36\x2e\x32\x33\x35\
\x48\x33\x37\x36\x2e\x34\x39\x33\x7a\x20\x4d\x33\x31\x36\x2e\x31\
\x31\x39\x2c\x33\x36\x35\x2e\x31\x34\x33\x63\x2d\x32\x35\x2e\x37\
\x33\x33\x2d\x31\x2e\x35\x36\x2d\x34\x36\x2e\x33\x34\x35\x2d\x32\
\x32\x2e\x31\x37\x38\x2d\x34\x37\x2e\x39\x30\x33\x2d\x34\x37\x2e\
\x39\x31\x20\x20\x20\x68\x34\x37\x2e\x39\x30\x33\x56\x33\x36\x35\
\x2e\x31\x34\x33\x7a\x20\x4d\x33\x31\x36\x2e\x31\x31\x39\x2c\x33\
\x31\x30\x2e\x39\x39\x38\x68\x2d\x34\x37\x2e\x39\x30\x33\x63\x31\
\x2e\x35\x35\x39\x2d\x32\x35\x2e\x37\x33\x32\x2c\x32\x32\x2e\x31\
\x37\x2d\x34\x36\x2e\x33\x34\x35\x2c\x34\x37\x2e\x39\x30\x33\x2d\
\x34\x37\x2e\x39\x30\x33\x56\x33\x31\x30\x2e\x39\x39\x38\x7a\x20\
\x4d\x33\x32\x32\x2e\x33\x35\x34\x2c\x33\x36\x35\x2e\x31\x34\x33\
\x76\x2d\x34\x37\x2e\x39\x31\x68\x34\x37\x2e\x39\x30\x33\x20\x20\
\x20\x43\x33\x36\x38\x2e\x36\x39\x32\x2c\x33\x34\x32\x2e\x39\x36\
\x35\x2c\x33\x34\x38\x2e\x30\x38\x37\x2c\x33\x36\x33\x2e\x35\x38\
\x33\x2c\x33\x32\x32\x2e\x33\x35\x34\x2c\x33\x36\x35\x2e\x31\x34\
\x33\x7a\x20\x4d\x33\x32\x32\x2e\x33\x35\x34\x2c\x33\x31\x30\x2e\
\x39\x39\x38\x76\x2d\x34\x37\x2e\x39\x30\x33\x63\x32\x35\x2e\x37\
\x33\x32\x2c\x31\x2e\x35\x35\x39\x2c\x34\x36\x2e\x33\x34\x34\x2c\
\x32\x32\x2e\x31\x37\x31\x2c\x34\x37\x2e\x39\x30\x33\x2c\x34\x37\
\x2e\x39\x30\x33\x48\x33\x32\x32\x2e\x33\x35\x34\x7a\x20\x20\x20\
\x20\x4d\x32\x39\x31\x2e\x33\x33\x36\x2c\x39\x30\x2e\x30\x31\x36\
\x63\x2d\x30\x2e\x37\x35\x35\x2d\x34\x2e\x36\x37\x36\x2c\x32\x2e\
\x34\x33\x2d\x39\x2e\x30\x39\x31\x2c\x37\x2e\x31\x30\x36\x2d\x39\
\x2e\x38\x35\x32\x63\x32\x2e\x30\x36\x34\x2d\x30\x2e\x33\x33\x38\
\x2c\x35\x30\x2e\x35\x39\x35\x2d\x38\x2e\x37\x31\x36\x2c\x35\x33\
\x2e\x35\x31\x32\x2d\x35\x30\x2e\x35\x33\x31\x20\x20\x20\x63\x30\
\x2e\x33\x32\x32\x2d\x34\x2e\x36\x37\x37\x2c\x34\x2e\x33\x36\x35\
\x2d\x38\x2e\x32\x35\x37\x2c\x39\x2e\x31\x35\x31\x2d\x37\x2e\x39\
\x37\x34\x63\x34\x2e\x37\x33\x37\x2c\x30\x2e\x33\x33\x35\x2c\x38\
\x2e\x33\x31\x32\x2c\x34\x2e\x34\x34\x35\x2c\x37\x2e\x39\x38\x39\
\x2c\x39\x2e\x31\x37\x63\x2d\x33\x2e\x38\x37\x39\x2c\x35\x35\x2e\
\x35\x31\x32\x2d\x36\x37\x2e\x32\x39\x31\x2c\x36\x36\x2e\x32\x30\
\x31\x2d\x36\x37\x2e\x39\x33\x31\x2c\x36\x36\x2e\x33\x30\x32\x20\
\x20\x20\x63\x2d\x30\x2e\x34\x33\x38\x2c\x30\x2e\x30\x36\x37\x2d\
\x30\x2e\x39\x30\x31\x2c\x30\x2e\x31\x30\x34\x2d\x31\x2e\x33\x35\
\x38\x2c\x30\x2e\x31\x30\x34\x43\x32\x39\x35\x2e\x35\x37\x34\x2c\
\x39\x37\x2e\x32\x33\x35\x2c\x32\x39\x32\x2e\x30\x31\x32\x2c\x39\
\x34\x2e\x32\x2c\x32\x39\x31\x2e\x33\x33\x36\x2c\x39\x30\x2e\x30\
\x31\x36\x7a\x20\x4d\x33\x32\x2e\x33\x38\x33\x2c\x33\x30\x2e\x38\
\x33\x20\x20\x20\x63\x2d\x30\x2e\x33\x32\x39\x2d\x34\x2e\x37\x32\
\x35\x2c\x33\x2e\x32\x34\x39\x2d\x38\x2e\x38\x33\x35\x2c\x37\x2e\
\x39\x37\x31\x2d\x39\x2e\x31\x36\x34\x63\x34\x2e\x38\x37\x34\x2d\
\x30\x2e\x33\x34\x34\x2c\x38\x2e\x38\x34\x31\x2c\x33\x2e\x32\x39\
\x31\x2c\x39\x2e\x31\x37\x2c\x37\x2e\x39\x36\x38\x63\x32\x2e\x39\
\x32\x2c\x34\x31\x2e\x38\x32\x2c\x35\x31\x2e\x34\x34\x31\x2c\x35\
\x30\x2e\x31\x39\x39\x2c\x35\x33\x2e\x35\x31\x32\x2c\x35\x30\x2e\
\x35\x33\x37\x20\x20\x20\x63\x34\x2e\x36\x37\x2c\x30\x2e\x37\x36\
\x31\x2c\x37\x2e\x38\x35\x38\x2c\x35\x2e\x31\x37\x36\x2c\x37\x2e\
\x31\x30\x39\x2c\x39\x2e\x38\x34\x36\x63\x2d\x30\x2e\x36\x37\x39\
\x2c\x34\x2e\x31\x38\x34\x2d\x34\x2e\x32\x34\x31\x2c\x37\x2e\x32\
\x32\x35\x2d\x38\x2e\x34\x37\x33\x2c\x37\x2e\x32\x32\x35\x63\x2d\
\x30\x2e\x34\x35\x37\x2c\x30\x2d\x30\x2e\x39\x31\x36\x2d\x30\x2e\
\x30\x33\x37\x2d\x31\x2e\x33\x37\x39\x2d\x30\x2e\x31\x31\x20\x20\
\x20\x43\x39\x39\x2e\x36\x36\x38\x2c\x39\x37\x2e\x30\x33\x31\x2c\
\x33\x36\x2e\x32\x35\x35\x2c\x38\x36\x2e\x33\x34\x31\x2c\x33\x32\
\x2e\x33\x38\x33\x2c\x33\x30\x2e\x38\x33\x7a\x20\x4d\x33\x33\x30\
\x2e\x35\x36\x32\x2c\x31\x36\x32\x2e\x35\x33\x32\x63\x32\x2e\x34\
\x34\x38\x2c\x30\x2e\x31\x30\x31\x2c\x36\x30\x2e\x39\x32\x32\x2c\
\x33\x2e\x30\x36\x39\x2c\x37\x32\x2e\x36\x35\x35\x2c\x35\x30\x2e\
\x30\x31\x37\x20\x20\x20\x63\x30\x2e\x35\x35\x35\x2c\x32\x2e\x32\
\x32\x39\x2c\x30\x2e\x32\x31\x34\x2c\x34\x2e\x35\x33\x36\x2d\x30\
\x2e\x39\x36\x32\x2c\x36\x2e\x35\x30\x33\x63\x2d\x31\x2e\x31\x38\
\x31\x2c\x31\x2e\x39\x36\x37\x2d\x33\x2e\x30\x36\x32\x2c\x33\x2e\
\x33\x36\x31\x2d\x35\x2e\x32\x39\x31\x2c\x33\x2e\x39\x31\x63\x2d\
\x30\x2e\x36\x37\x2c\x30\x2e\x31\x38\x32\x2d\x31\x2e\x33\x38\x32\
\x2c\x30\x2e\x32\x36\x38\x2d\x32\x2e\x30\x38\x33\x2c\x30\x2e\x32\
\x36\x38\x20\x20\x20\x63\x2d\x33\x2e\x39\x34\x35\x2c\x30\x2d\x37\
\x2e\x33\x36\x37\x2d\x32\x2e\x36\x38\x2d\x38\x2e\x33\x33\x2d\x36\
\x2e\x35\x30\x34\x63\x2d\x38\x2e\x35\x39\x32\x2d\x33\x34\x2e\x33\
\x38\x32\x2d\x35\x36\x2e\x32\x37\x2d\x33\x37\x2e\x30\x31\x2d\x35\
\x36\x2e\x37\x35\x2d\x33\x37\x2e\x30\x32\x37\x63\x2d\x32\x2e\x32\
\x38\x34\x2d\x30\x2e\x30\x39\x35\x2d\x34\x2e\x34\x30\x33\x2d\x31\
\x2e\x30\x37\x38\x2d\x35\x2e\x39\x35\x36\x2d\x32\x2e\x37\x36\x38\
\x20\x20\x20\x63\x2d\x31\x2e\x35\x35\x33\x2d\x31\x2e\x36\x39\x2d\
\x32\x2e\x33\x35\x36\x2d\x33\x2e\x38\x38\x35\x2d\x32\x2e\x32\x35\
\x39\x2d\x36\x2e\x31\x38\x31\x63\x30\x2e\x31\x39\x35\x2d\x34\x2e\
\x36\x31\x32\x2c\x33\x2e\x39\x33\x39\x2d\x38\x2e\x32\x32\x39\x2c\
\x38\x2e\x35\x33\x31\x2d\x38\x2e\x32\x32\x39\x4c\x33\x33\x30\x2e\
\x35\x36\x32\x2c\x31\x36\x32\x2e\x35\x33\x32\x7a\x20\x4d\x37\x33\
\x2e\x36\x38\x36\x2c\x31\x37\x39\x2e\x36\x39\x38\x20\x20\x20\x63\
\x2d\x30\x2e\x34\x37\x32\x2c\x30\x2e\x30\x32\x34\x2d\x34\x38\x2e\
\x31\x39\x33\x2c\x32\x2e\x37\x36\x31\x2d\x35\x36\x2e\x37\x36\x2c\
\x33\x37\x2e\x30\x32\x37\x63\x2d\x30\x2e\x39\x35\x39\x2c\x33\x2e\
\x38\x32\x34\x2d\x34\x2e\x33\x38\x31\x2c\x36\x2e\x35\x30\x34\x2d\
\x38\x2e\x33\x33\x2c\x36\x2e\x35\x30\x34\x63\x2d\x30\x2e\x37\x30\
\x33\x2c\x30\x2d\x31\x2e\x34\x31\x2d\x30\x2e\x30\x38\x36\x2d\x32\
\x2e\x30\x38\x38\x2d\x30\x2e\x32\x36\x38\x20\x20\x20\x63\x2d\x32\
\x2e\x32\x32\x2d\x30\x2e\x35\x34\x39\x2d\x34\x2e\x30\x39\x35\x2d\
\x31\x2e\x39\x34\x33\x2d\x35\x2e\x32\x38\x32\x2d\x33\x2e\x39\x31\
\x63\x2d\x31\x2e\x31\x37\x39\x2d\x31\x2e\x39\x36\x37\x2d\x31\x2e\
\x35\x32\x2d\x34\x2e\x32\x37\x34\x2d\x30\x2e\x39\x36\x35\x2d\x36\
\x2e\x35\x30\x33\x63\x31\x31\x2e\x37\x33\x34\x2d\x34\x36\x2e\x39\
\x34\x37\x2c\x37\x30\x2e\x32\x30\x38\x2d\x34\x39\x2e\x39\x31\x36\
\x2c\x37\x32\x2e\x36\x39\x32\x2d\x35\x30\x2e\x30\x32\x32\x6c\x30\
\x2e\x33\x35\x39\x2d\x30\x2e\x30\x30\x36\x20\x20\x20\x63\x34\x2e\
\x36\x31\x35\x2c\x30\x2c\x38\x2e\x33\x38\x31\x2c\x33\x2e\x36\x31\
\x31\x2c\x38\x2e\x35\x38\x2c\x38\x2e\x32\x31\x37\x43\x38\x32\x2e\
\x30\x39\x38\x2c\x31\x37\x35\x2e\x34\x37\x31\x2c\x37\x38\x2e\x34\
\x32\x2c\x31\x37\x39\x2e\x34\x38\x37\x2c\x37\x33\x2e\x36\x38\x36\
\x2c\x31\x37\x39\x2e\x36\x39\x38\x7a\x20\x4d\x31\x36\x30\x2e\x39\
\x32\x35\x2c\x34\x39\x2e\x31\x30\x36\x20\x20\x20\x63\x2d\x30\x2e\
\x32\x31\x39\x2d\x31\x2e\x37\x30\x38\x2d\x30\x2e\x33\x33\x32\x2d\
\x33\x2e\x34\x32\x38\x2d\x30\x2e\x33\x33\x32\x2d\x35\x2e\x31\x33\
\x33\x63\x30\x2d\x32\x32\x2e\x32\x38\x39\x2c\x31\x38\x2e\x31\x34\
\x2d\x34\x30\x2e\x34\x32\x39\x2c\x34\x30\x2e\x34\x32\x39\x2d\x34\
\x30\x2e\x34\x32\x39\x63\x32\x32\x2e\x32\x39\x33\x2c\x30\x2c\x34\
\x30\x2e\x34\x32\x36\x2c\x31\x38\x2e\x31\x34\x2c\x34\x30\x2e\x34\
\x32\x36\x2c\x34\x30\x2e\x34\x32\x39\x20\x20\x20\x63\x30\x2c\x31\
\x2e\x37\x30\x35\x2d\x30\x2e\x31\x31\x35\x2c\x33\x2e\x34\x31\x39\
\x2d\x30\x2e\x33\x33\x35\x2c\x35\x2e\x31\x33\x33\x63\x32\x34\x2e\
\x32\x36\x36\x2c\x31\x30\x2e\x36\x39\x32\x2c\x34\x35\x2e\x32\x33\
\x36\x2c\x33\x31\x2e\x31\x31\x33\x2c\x35\x39\x2e\x32\x39\x31\x2c\
\x35\x37\x2e\x37\x37\x31\x6c\x31\x2e\x36\x30\x37\x2c\x33\x2e\x30\
\x35\x34\x6c\x2d\x33\x2e\x30\x36\x39\x2c\x31\x2e\x35\x38\x39\x20\
\x20\x20\x63\x2d\x32\x36\x2e\x33\x34\x38\x2c\x31\x33\x2e\x37\x30\
\x37\x2d\x35\x35\x2e\x37\x35\x32\x2c\x32\x30\x2e\x36\x35\x38\x2d\
\x38\x37\x2e\x33\x39\x32\x2c\x32\x30\x2e\x36\x35\x38\x6c\x30\x2c\
\x30\x63\x2d\x34\x36\x2e\x38\x34\x31\x2c\x30\x2d\x38\x36\x2e\x38\
\x30\x34\x2d\x31\x35\x2e\x30\x31\x33\x2d\x31\x30\x36\x2e\x34\x35\
\x37\x2d\x32\x33\x2e\x39\x36\x37\x6c\x2d\x33\x2e\x33\x39\x38\x2d\
\x31\x2e\x35\x35\x33\x6c\x31\x2e\x38\x32\x37\x2d\x33\x2e\x32\x36\
\x31\x20\x20\x20\x43\x31\x31\x37\x2e\x34\x39\x34\x2c\x37\x38\x2e\
\x34\x39\x33\x2c\x31\x33\x37\x2e\x38\x30\x34\x2c\x35\x39\x2e\x33\
\x30\x36\x2c\x31\x36\x30\x2e\x39\x32\x35\x2c\x34\x39\x2e\x31\x30\
\x36\x7a\x20\x4d\x31\x31\x36\x2e\x30\x30\x35\x2c\x32\x39\x38\x2e\
\x32\x33\x35\x63\x31\x2e\x31\x34\x38\x2c\x34\x2e\x35\x39\x32\x2d\
\x31\x2e\x36\x35\x33\x2c\x39\x2e\x32\x36\x32\x2d\x36\x2e\x32\x34\
\x31\x2c\x31\x30\x2e\x34\x31\x32\x20\x20\x20\x63\x2d\x30\x2e\x34\
\x34\x31\x2c\x30\x2e\x31\x32\x32\x2d\x34\x36\x2e\x30\x39\x38\x2c\
\x31\x32\x2e\x33\x39\x38\x2d\x35\x32\x2e\x30\x30\x38\x2c\x35\x33\
\x2e\x30\x33\x37\x63\x2d\x30\x2e\x36\x31\x32\x2c\x34\x2e\x31\x38\
\x39\x2d\x34\x2e\x32\x36\x35\x2c\x37\x2e\x33\x35\x35\x2d\x38\x2e\
\x34\x39\x34\x2c\x37\x2e\x33\x35\x35\x63\x2d\x30\x2e\x34\x31\x31\
\x2c\x30\x2d\x30\x2e\x38\x32\x38\x2d\x30\x2e\x30\x32\x34\x2d\x31\
\x2e\x32\x34\x35\x2d\x30\x2e\x30\x39\x38\x20\x20\x20\x63\x2d\x34\
\x2e\x36\x38\x33\x2d\x30\x2e\x36\x37\x36\x2d\x37\x2e\x39\x34\x36\
\x2d\x35\x2e\x30\x34\x38\x2d\x37\x2e\x32\x36\x35\x2d\x39\x2e\x37\
\x33\x36\x63\x37\x2e\x36\x31\x38\x2d\x35\x32\x2e\x33\x34\x39\x2c\
\x36\x32\x2e\x35\x30\x32\x2d\x36\x36\x2e\x36\x34\x36\x2c\x36\x34\
\x2e\x38\x33\x34\x2d\x36\x37\x2e\x32\x33\x63\x30\x2e\x36\x37\x39\
\x2d\x30\x2e\x31\x37\x2c\x31\x2e\x33\x38\x38\x2d\x30\x2e\x32\x35\
\x36\x2c\x32\x2e\x30\x39\x35\x2d\x30\x2e\x32\x35\x36\x20\x20\x20\
\x43\x31\x31\x31\x2e\x36\x32\x31\x2c\x32\x39\x31\x2e\x37\x33\x32\
\x2c\x31\x31\x35\x2e\x30\x34\x36\x2c\x32\x39\x34\x2e\x33\x39\x39\
\x2c\x31\x31\x36\x2e\x30\x30\x35\x2c\x32\x39\x38\x2e\x32\x33\x35\
\x7a\x20\x4d\x33\x31\x39\x2e\x32\x33\x36\x2c\x32\x32\x32\x2e\x31\
\x34\x35\x63\x2d\x31\x2e\x34\x31\x39\x2c\x30\x2d\x32\x2e\x38\x30\
\x31\x2c\x30\x2e\x31\x35\x32\x2d\x34\x2e\x32\x30\x31\x2c\x30\x2e\
\x32\x31\x39\x20\x20\x20\x63\x32\x2e\x36\x34\x33\x2d\x31\x31\x2e\
\x39\x37\x31\x2c\x34\x2e\x31\x31\x2d\x32\x34\x2e\x35\x32\x37\x2c\
\x34\x2e\x31\x31\x2d\x33\x37\x2e\x35\x30\x33\x63\x30\x2d\x32\x32\
\x2e\x39\x34\x2d\x34\x2e\x32\x38\x37\x2d\x34\x34\x2e\x38\x38\x2d\
\x31\x32\x2e\x37\x33\x32\x2d\x36\x35\x2e\x32\x31\x35\x6c\x2d\x31\
\x2e\x34\x33\x38\x2d\x33\x2e\x34\x34\x39\x6c\x2d\x33\x2e\x33\x31\
\x38\x2c\x31\x2e\x37\x31\x37\x20\x20\x20\x63\x2d\x32\x31\x2e\x38\
\x39\x36\x2c\x31\x31\x2e\x33\x31\x37\x2d\x35\x37\x2e\x33\x30\x35\
\x2c\x31\x37\x2e\x38\x38\x31\x2d\x38\x33\x2e\x31\x34\x37\x2c\x32\
\x30\x2e\x32\x34\x37\x6c\x2d\x32\x2e\x34\x30\x35\x2c\x30\x2e\x32\
\x31\x36\x6c\x2d\x30\x2e\x36\x30\x33\x2c\x32\x2e\x33\x33\x38\x63\
\x2d\x37\x2e\x30\x32\x31\x2c\x32\x37\x2e\x30\x38\x38\x2d\x31\x31\
\x2e\x31\x36\x32\x2c\x36\x30\x2e\x33\x31\x33\x2d\x31\x33\x2e\x35\
\x39\x34\x2c\x39\x31\x2e\x31\x35\x35\x20\x20\x20\x63\x2d\x33\x2e\
\x38\x35\x31\x2d\x34\x39\x2e\x30\x34\x32\x2d\x39\x2e\x35\x30\x38\
\x2d\x39\x30\x2e\x36\x31\x33\x2d\x39\x2e\x36\x30\x33\x2d\x39\x31\
\x2e\x32\x34\x39\x6c\x2d\x30\x2e\x34\x32\x39\x2d\x32\x2e\x39\x34\
\x37\x63\x2d\x34\x35\x2e\x30\x33\x39\x2d\x34\x2e\x38\x32\x2d\x38\
\x33\x2e\x33\x36\x31\x2d\x32\x30\x2e\x33\x37\x32\x2d\x39\x30\x2e\
\x30\x38\x2d\x32\x33\x2e\x34\x33\x35\x6c\x2d\x33\x2e\x31\x35\x37\
\x2d\x31\x2e\x34\x34\x6c\x2d\x31\x2e\x34\x31\x36\x2c\x33\x2e\x31\
\x36\x39\x20\x20\x20\x63\x2d\x39\x2e\x33\x37\x32\x2c\x32\x31\x2e\
\x30\x32\x39\x2d\x31\x34\x2e\x33\x32\x32\x2c\x34\x34\x2e\x38\x35\
\x2d\x31\x34\x2e\x33\x32\x32\x2c\x36\x38\x2e\x38\x39\x33\x63\x30\
\x2c\x37\x39\x2e\x35\x37\x39\x2c\x35\x32\x2e\x39\x38\x38\x2c\x31\
\x34\x34\x2e\x33\x31\x39\x2c\x31\x31\x38\x2e\x31\x32\x2c\x31\x34\
\x34\x2e\x33\x31\x39\x63\x38\x2e\x36\x37\x35\x2c\x30\x2c\x31\x37\
\x2e\x31\x31\x2d\x31\x2e\x32\x33\x2c\x32\x35\x2e\x32\x34\x36\x2d\
\x33\x2e\x34\x31\x20\x20\x20\x63\x35\x2e\x30\x35\x34\x2c\x34\x36\
\x2e\x38\x33\x38\x2c\x34\x34\x2e\x38\x30\x34\x2c\x38\x33\x2e\x34\
\x34\x35\x2c\x39\x32\x2e\x39\x36\x33\x2c\x38\x33\x2e\x34\x34\x35\
\x63\x35\x31\x2e\x35\x36\x39\x2c\x30\x2c\x39\x33\x2e\x35\x32\x39\
\x2d\x34\x31\x2e\x39\x36\x2c\x39\x33\x2e\x35\x32\x39\x2d\x39\x33\
\x2e\x35\x32\x39\x43\x34\x31\x32\x2e\x37\x36\x2c\x32\x36\x34\x2e\
\x31\x31\x32\x2c\x33\x37\x30\x2e\x38\x31\x32\x2c\x32\x32\x32\x2e\
\x31\x34\x35\x2c\x33\x31\x39\x2e\x32\x33\x36\x2c\x32\x32\x32\x2e\
\x31\x34\x35\x7a\x20\x20\x20\x20\x4d\x33\x31\x39\x2e\x32\x33\x36\
\x2c\x34\x30\x32\x2e\x39\x36\x38\x63\x2d\x34\x38\x2e\x31\x33\x35\
\x2c\x30\x2d\x38\x37\x2e\x32\x39\x34\x2d\x33\x39\x2e\x31\x35\x33\
\x2d\x38\x37\x2e\x32\x39\x34\x2d\x38\x37\x2e\x32\x39\x34\x63\x30\
\x2d\x34\x38\x2e\x31\x32\x39\x2c\x33\x39\x2e\x31\x35\x39\x2d\x38\
\x37\x2e\x32\x39\x34\x2c\x38\x37\x2e\x32\x39\x34\x2d\x38\x37\x2e\
\x32\x39\x34\x73\x38\x37\x2e\x32\x39\x34\x2c\x33\x39\x2e\x31\x36\
\x35\x2c\x38\x37\x2e\x32\x39\x34\x2c\x38\x37\x2e\x32\x39\x34\x20\
\x20\x20\x43\x34\x30\x36\x2e\x35\x33\x2c\x33\x36\x33\x2e\x38\x31\
\x35\x2c\x33\x36\x37\x2e\x33\x36\x35\x2c\x34\x30\x32\x2e\x39\x36\
\x38\x2c\x33\x31\x39\x2e\x32\x33\x36\x2c\x34\x30\x32\x2e\x39\x36\
\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x46\x46\x46\
\x46\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x68\
+\x00\x00\x04\x03\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
-\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\
\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
-\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\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\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
-\x61\x70\x61\x5f\x31\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
-\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x34\x31\x2e\x39\x39\x39\x20\x34\x31\x2e\x39\x39\
-\x39\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\
-\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\
-\x30\x20\x30\x20\x34\x31\x2e\x39\x39\x39\x20\x34\x31\x2e\x39\x39\
-\x39\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
-\x72\x65\x73\x65\x72\x76\x65\x22\x20\x77\x69\x64\x74\x68\x3d\x22\
-\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x33\x36\x2e\x30\x36\x38\x2c\x32\x30\x2e\x31\x37\x36\x6c\x2d\
-\x32\x39\x2d\x32\x30\x43\x36\x2e\x37\x36\x31\x2d\x30\x2e\x30\x33\
-\x35\x2c\x36\x2e\x33\x36\x33\x2d\x30\x2e\x30\x35\x37\x2c\x36\x2e\
-\x30\x33\x35\x2c\x30\x2e\x31\x31\x34\x43\x35\x2e\x37\x30\x36\x2c\
-\x30\x2e\x32\x38\x37\x2c\x35\x2e\x35\x2c\x30\x2e\x36\x32\x37\x2c\
-\x35\x2e\x35\x2c\x30\x2e\x39\x39\x39\x76\x34\x30\x20\x20\x63\x30\
-\x2c\x30\x2e\x33\x37\x32\x2c\x30\x2e\x32\x30\x36\x2c\x30\x2e\x37\
-\x31\x33\x2c\x30\x2e\x35\x33\x35\x2c\x30\x2e\x38\x38\x36\x63\x30\
-\x2e\x31\x34\x36\x2c\x30\x2e\x30\x37\x36\x2c\x30\x2e\x33\x30\x36\
-\x2c\x30\x2e\x31\x31\x34\x2c\x30\x2e\x34\x36\x35\x2c\x30\x2e\x31\
-\x31\x34\x63\x30\x2e\x31\x39\x39\x2c\x30\x2c\x30\x2e\x33\x39\x37\
-\x2d\x30\x2e\x30\x36\x2c\x30\x2e\x35\x36\x38\x2d\x30\x2e\x31\x37\
-\x37\x6c\x32\x39\x2d\x32\x30\x20\x20\x63\x30\x2e\x32\x37\x31\x2d\
-\x30\x2e\x31\x38\x37\x2c\x30\x2e\x34\x33\x32\x2d\x30\x2e\x34\x39\
-\x34\x2c\x30\x2e\x34\x33\x32\x2d\x30\x2e\x38\x32\x33\x53\x33\x36\
-\x2e\x33\x33\x38\x2c\x32\x30\x2e\x33\x36\x33\x2c\x33\x36\x2e\x30\
-\x36\x38\x2c\x32\x30\x2e\x31\x37\x36\x7a\x20\x4d\x37\x2e\x35\x2c\
-\x33\x39\x2e\x30\x39\x35\x56\x32\x2e\x39\x30\x34\x6c\x32\x36\x2e\
-\x32\x33\x39\x2c\x31\x38\x2e\x30\x39\x36\x4c\x37\x2e\x35\x2c\x33\
-\x39\x2e\x30\x39\x35\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\
-\x46\x46\x46\x46\x46\x22\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\
+\x59\x50\x45\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\
+\x2d\x2f\x2f\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\
+\x31\x2e\x31\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\
+\x68\x69\x63\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\
+\x2f\x73\x76\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\
+\x67\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\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x61\x70\x61\x5f\x31\x22\x20\x78\x3d\x22\x30\x70\x78\
+\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\
+\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\
+\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x36\x38\x2e\x38\x33\x32\x20\x32\x36\x38\x2e\
+\x38\x33\x32\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\
+\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x32\x36\x38\x2e\x38\x33\x32\x20\x32\x36\
+\x38\x2e\x38\x33\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\
+\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\
+\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x36\x35\
+\x2e\x31\x37\x31\x2c\x31\x32\x35\x2e\x35\x37\x37\x6c\x2d\x38\x30\
+\x2d\x38\x30\x63\x2d\x34\x2e\x38\x38\x31\x2d\x34\x2e\x38\x38\x31\
+\x2d\x31\x32\x2e\x37\x39\x37\x2d\x34\x2e\x38\x38\x31\x2d\x31\x37\
+\x2e\x36\x37\x38\x2c\x30\x63\x2d\x34\x2e\x38\x38\x32\x2c\x34\x2e\
+\x38\x38\x32\x2d\x34\x2e\x38\x38\x32\x2c\x31\x32\x2e\x37\x39\x36\
+\x2c\x30\x2c\x31\x37\x2e\x36\x37\x38\x6c\x35\x38\x2e\x36\x36\x31\
+\x2c\x35\x38\x2e\x36\x36\x31\x48\x31\x32\x2e\x35\x20\x20\x20\x63\
+\x2d\x36\x2e\x39\x30\x33\x2c\x30\x2d\x31\x32\x2e\x35\x2c\x35\x2e\
+\x35\x39\x37\x2d\x31\x32\x2e\x35\x2c\x31\x32\x2e\x35\x63\x30\x2c\
+\x36\x2e\x39\x30\x32\x2c\x35\x2e\x35\x39\x37\x2c\x31\x32\x2e\x35\
+\x2c\x31\x32\x2e\x35\x2c\x31\x32\x2e\x35\x68\x32\x31\x33\x2e\x36\
+\x35\x34\x6c\x2d\x35\x38\x2e\x36\x35\x39\x2c\x35\x38\x2e\x36\x36\
+\x31\x63\x2d\x34\x2e\x38\x38\x32\x2c\x34\x2e\x38\x38\x32\x2d\x34\
+\x2e\x38\x38\x32\x2c\x31\x32\x2e\x37\x39\x36\x2c\x30\x2c\x31\x37\
+\x2e\x36\x37\x38\x20\x20\x20\x63\x32\x2e\x34\x34\x2c\x32\x2e\x34\
+\x33\x39\x2c\x35\x2e\x36\x34\x2c\x33\x2e\x36\x36\x31\x2c\x38\x2e\
+\x38\x33\x39\x2c\x33\x2e\x36\x36\x31\x73\x36\x2e\x33\x39\x38\x2d\
+\x31\x2e\x32\x32\x32\x2c\x38\x2e\x38\x33\x39\x2d\x33\x2e\x36\x36\
+\x31\x6c\x37\x39\x2e\x39\x39\x38\x2d\x38\x30\x43\x32\x37\x30\x2e\
+\x30\x35\x33\x2c\x31\x33\x38\x2e\x33\x37\x33\x2c\x32\x37\x30\x2e\
+\x30\x35\x33\x2c\x31\x33\x30\x2e\x34\x35\x39\x2c\x32\x36\x35\x2e\
+\x31\x37\x31\x2c\x31\x32\x35\x2e\x35\x37\x37\x7a\x22\x20\x66\x69\
+\x6c\x6c\x3d\x22\x23\x46\x46\x44\x41\x34\x34\x22\x2f\x3e\x0a\x3c\
\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0a\
+\x00\x00\x10\xdf\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\
+\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\
+\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\
+\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\
+\x67\x2f\x6e\x73\x23\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\
+\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\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\x0a\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\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x0a\x20\x20\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\
+\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x0a\x20\x20\x20\
+\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\
+\x20\x34\x31\x2e\x39\x39\x39\x20\x34\x31\x2e\x39\x39\x39\x3b\x22\
+\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x34\x31\x2e\x39\x39\x39\x20\x34\x31\x2e\x39\x39\x39\x22\x0a\
+\x20\x20\x20\x79\x3d\x22\x30\x70\x78\x22\x0a\x20\x20\x20\x78\x3d\
+\x22\x30\x70\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x43\x61\x70\
+\x61\x5f\x31\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\
+\x22\x31\x2e\x31\x22\x3e\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\
+\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\
+\x61\x33\x39\x22\x3e\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x3c\x63\
+\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x3c\x64\x63\
+\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\
+\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\
+\x3e\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\
+\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\
+\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x3c\x64\x63\
+\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\
+\x65\x3e\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x3c\x2f\x72\x64\
+\x66\x3a\x52\x44\x46\x3e\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\
+\x3e\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x64\x65\x66\x73\x33\x37\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\
+\x20\x20\x69\x64\x3d\x22\x67\x34\x22\x20\x2f\x3e\x3c\x67\x0a\x20\
+\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x36\x22\x20\x2f\x3e\x3c\x67\
+\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x38\x22\x20\x2f\x3e\
+\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x30\x22\
+\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\
+\x31\x32\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x67\x31\x34\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x67\x31\x36\x22\x20\x2f\x3e\x3c\x67\x0a\x20\
+\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x38\x22\x20\x2f\x3e\x3c\
+\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x32\x30\x22\x20\
+\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x32\
+\x32\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\
+\x22\x67\x32\x34\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x67\x32\x36\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x67\x32\x38\x22\x20\x2f\x3e\x3c\x67\
+\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x30\x22\x20\x2f\
+\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x32\
+\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\
+\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x3b\x66\
+\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\
+\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\
+\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\
+\x72\x69\x78\x28\x32\x2e\x36\x32\x34\x39\x33\x37\x35\x2c\x30\x2c\
+\x30\x2c\x32\x2e\x36\x32\x34\x39\x33\x37\x35\x2c\x2d\x37\x2e\x38\
+\x37\x34\x38\x31\x32\x35\x2c\x2d\x32\x37\x31\x32\x2e\x35\x31\x31\
+\x32\x29\x22\x3e\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\
+\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\
+\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x34\x2c\x33\
+\x20\x76\x20\x31\x36\x20\x68\x20\x31\x20\x38\x20\x31\x20\x63\x20\
+\x31\x2e\x33\x37\x34\x37\x36\x35\x2c\x2d\x31\x2e\x33\x35\x37\x39\
+\x39\x33\x20\x32\x2e\x37\x37\x39\x32\x30\x39\x2c\x2d\x32\x2e\x37\
+\x36\x38\x33\x31\x34\x20\x34\x2c\x2d\x34\x20\x56\x20\x31\x33\x2e\
+\x35\x39\x33\x37\x35\x20\x33\x20\x48\x20\x31\x37\x20\x35\x20\x5a\
+\x20\x6d\x20\x30\x2e\x36\x32\x35\x2c\x30\x2e\x36\x32\x35\x30\x30\
+\x33\x39\x20\x68\x20\x31\x32\x2e\x37\x35\x20\x56\x20\x31\x34\x20\
+\x31\x35\x2e\x30\x30\x30\x30\x30\x34\x20\x48\x20\x31\x34\x20\x76\
+\x20\x31\x2e\x31\x38\x37\x35\x20\x32\x2e\x31\x38\x37\x35\x20\x48\
+\x20\x31\x33\x20\x34\x2e\x36\x32\x35\x20\x5a\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\
+\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x2c\x31\x30\x33\x30\x2e\
+\x33\x36\x32\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x72\x65\x63\x74\x34\x31\x33\x39\x22\x20\x2f\x3e\x3c\x2f\
+\x67\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\
+\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x66\x69\
+\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\
+\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x2d\x37\x22\x0a\x20\x20\x20\
+\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\
+\x72\x69\x78\x28\x31\x2e\x35\x33\x38\x30\x34\x39\x33\x2c\x30\x2c\
+\x30\x2c\x31\x2e\x35\x33\x38\x30\x34\x39\x33\x2c\x34\x2e\x30\x38\
+\x30\x39\x35\x37\x37\x2c\x2d\x31\x35\x38\x30\x2e\x36\x36\x36\x39\
+\x29\x22\x3e\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\
+\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\
+\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x31\x2c\x31\
+\x30\x34\x39\x2e\x33\x36\x32\x32\x20\x63\x20\x2d\x34\x2e\x34\x33\
+\x31\x39\x36\x36\x2c\x30\x20\x2d\x38\x2c\x2d\x33\x2e\x35\x36\x38\
+\x20\x2d\x38\x2c\x2d\x38\x20\x30\x2c\x2d\x31\x2e\x34\x34\x31\x37\
+\x20\x30\x2e\x33\x38\x32\x38\x37\x31\x2c\x2d\x32\x2e\x37\x38\x39\
+\x33\x20\x31\x2e\x30\x34\x34\x39\x32\x32\x2c\x2d\x33\x2e\x39\x35\
+\x35\x31\x20\x6c\x20\x30\x2e\x37\x33\x38\x32\x38\x31\x2c\x30\x2e\
+\x37\x33\x38\x33\x20\x43\x20\x34\x2e\x32\x38\x35\x38\x32\x39\x2c\
+\x31\x30\x33\x39\x2e\x31\x30\x38\x33\x20\x34\x2c\x31\x30\x34\x30\
+\x2e\x31\x39\x39\x37\x20\x34\x2c\x31\x30\x34\x31\x2e\x33\x36\x32\
+\x32\x20\x63\x20\x30\x2c\x33\x2e\x38\x37\x38\x20\x33\x2e\x31\x32\
+\x32\x30\x33\x2c\x37\x20\x37\x2c\x37\x20\x31\x2e\x31\x36\x32\x35\
+\x30\x39\x2c\x30\x20\x32\x2e\x32\x35\x33\x38\x39\x2c\x2d\x30\x2e\
+\x32\x38\x35\x38\x20\x33\x2e\x32\x31\x36\x37\x39\x37\x2c\x2d\x30\
+\x2e\x37\x38\x33\x32\x20\x6c\x20\x30\x2e\x37\x33\x38\x32\x38\x31\
+\x2c\x30\x2e\x37\x33\x38\x33\x20\x63\x20\x2d\x31\x2e\x31\x36\x35\
+\x37\x38\x39\x2c\x30\x2e\x36\x36\x32\x20\x2d\x32\x2e\x35\x31\x33\
+\x33\x36\x34\x2c\x31\x2e\x30\x34\x34\x39\x20\x2d\x33\x2e\x39\x35\
+\x35\x30\x37\x38\x2c\x31\x2e\x30\x34\x34\x39\x20\x7a\x20\x6d\x20\
+\x36\x2e\x39\x35\x35\x30\x37\x38\x2c\x2d\x34\x2e\x30\x34\x34\x39\
+\x20\x2d\x30\x2e\x37\x33\x38\x32\x38\x31\x2c\x2d\x30\x2e\x37\x33\
+\x38\x33\x20\x43\x20\x31\x37\x2e\x37\x31\x34\x31\x37\x32\x2c\x31\
+\x30\x34\x33\x2e\x36\x31\x36\x31\x20\x31\x38\x2c\x31\x30\x34\x32\
+\x2e\x35\x32\x34\x37\x20\x31\x38\x2c\x31\x30\x34\x31\x2e\x33\x36\
+\x32\x32\x20\x63\x20\x30\x2c\x2d\x33\x2e\x38\x37\x38\x20\x2d\x33\
+\x2e\x31\x32\x32\x30\x33\x2c\x2d\x37\x20\x2d\x37\x2c\x2d\x37\x20\
+\x2d\x31\x2e\x31\x36\x32\x35\x31\x2c\x30\x20\x2d\x32\x2e\x32\x35\
+\x33\x38\x39\x2c\x30\x2e\x32\x38\x35\x38\x20\x2d\x33\x2e\x32\x31\
+\x36\x37\x39\x37\x2c\x30\x2e\x37\x38\x33\x32\x20\x6c\x20\x2d\x30\
+\x2e\x37\x33\x38\x32\x38\x31\x2c\x2d\x30\x2e\x37\x33\x38\x33\x20\
+\x63\x20\x31\x2e\x31\x36\x35\x37\x38\x39\x2c\x2d\x30\x2e\x36\x36\
+\x32\x20\x32\x2e\x35\x31\x33\x33\x36\x34\x2c\x2d\x31\x2e\x30\x34\
+\x34\x39\x20\x33\x2e\x39\x35\x35\x30\x37\x38\x2c\x2d\x31\x2e\x30\
+\x34\x34\x39\x20\x34\x2e\x34\x33\x31\x39\x36\x36\x2c\x30\x20\x38\
+\x2c\x33\x2e\x35\x36\x38\x20\x38\x2c\x38\x20\x30\x2c\x31\x2e\x34\
+\x34\x31\x37\x20\x2d\x30\x2e\x33\x38\x32\x38\x37\x31\x2c\x32\x2e\
+\x37\x38\x39\x33\x20\x2d\x31\x2e\x30\x34\x34\x39\x32\x32\x2c\x33\
+\x2e\x39\x35\x35\x31\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x72\x65\x63\x74\x34\x30\x38\x35\x22\x20\x2f\x3e\
+\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\
+\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\
+\x30\x3b\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\
+\x6e\x3a\x6e\x6f\x6e\x65\x3b\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\
+\x72\x61\x74\x69\x6f\x6e\x2d\x6c\x69\x6e\x65\x3a\x6e\x6f\x6e\x65\
+\x3b\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\
+\x2d\x73\x74\x79\x6c\x65\x3a\x73\x6f\x6c\x69\x64\x3b\x74\x65\x78\
+\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x2d\x63\x6f\x6c\
+\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x63\x6c\x69\x70\x2d\
+\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\x65\x72\x6f\x3b\x64\x69\x73\
+\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\
+\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x76\x69\x73\
+\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\
+\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x69\x73\x6f\x6c\x61\x74\
+\x69\x6f\x6e\x3a\x61\x75\x74\x6f\x3b\x6d\x69\x78\x2d\x62\x6c\x65\
+\x6e\x64\x2d\x6d\x6f\x64\x65\x3a\x6e\x6f\x72\x6d\x61\x6c\x3b\x63\
+\x6f\x6c\x6f\x72\x2d\x69\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x69\
+\x6f\x6e\x3a\x73\x52\x47\x42\x3b\x63\x6f\x6c\x6f\x72\x2d\x69\x6e\
+\x74\x65\x72\x70\x6f\x6c\x61\x74\x69\x6f\x6e\x2d\x66\x69\x6c\x74\
+\x65\x72\x73\x3a\x6c\x69\x6e\x65\x61\x72\x52\x47\x42\x3b\x73\x6f\
+\x6c\x69\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\
+\x30\x3b\x73\x6f\x6c\x69\x64\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\
+\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x66\
+\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\
+\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\x65\x72\x6f\x3b\
+\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\
+\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\
+\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\
+\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\
+\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\
+\x79\x3a\x31\x3b\x63\x6f\x6c\x6f\x72\x2d\x72\x65\x6e\x64\x65\x72\
+\x69\x6e\x67\x3a\x61\x75\x74\x6f\x3b\x69\x6d\x61\x67\x65\x2d\x72\
+\x65\x6e\x64\x65\x72\x69\x6e\x67\x3a\x61\x75\x74\x6f\x3b\x73\x68\
+\x61\x70\x65\x2d\x72\x65\x6e\x64\x65\x72\x69\x6e\x67\x3a\x61\x75\
+\x74\x6f\x3b\x74\x65\x78\x74\x2d\x72\x65\x6e\x64\x65\x72\x69\x6e\
+\x67\x3a\x61\x75\x74\x6f\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\
+\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x72\x65\x63\x74\x34\x33\x33\x36\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x78\x3d\x22\x2d\x37\x32\x36\x2e\x34\x35\x31\x31\
+\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x3d\x22\x37\x33\x37\
+\x2e\x33\x39\x30\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x72\x6f\x74\x61\x74\x65\x28\
+\x2d\x34\x35\x29\x22\x20\x2f\x3e\x3c\x72\x65\x63\x74\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\
+\x72\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x74\x65\x78\x74\x2d\x64\
+\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x3a\x6e\x6f\x6e\x65\x3b\x74\
+\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x2d\x6c\
+\x69\x6e\x65\x3a\x6e\x6f\x6e\x65\x3b\x74\x65\x78\x74\x2d\x64\x65\
+\x63\x6f\x72\x61\x74\x69\x6f\x6e\x2d\x73\x74\x79\x6c\x65\x3a\x73\
+\x6f\x6c\x69\x64\x3b\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\
+\x74\x69\x6f\x6e\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\
+\x30\x30\x3b\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\
+\x7a\x65\x72\x6f\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\
+\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\
+\x69\x62\x6c\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\
+\x76\x69\x73\x69\x62\x6c\x65\x3b\x6f\x70\x61\x63\x69\x74\x79\x3a\
+\x31\x3b\x69\x73\x6f\x6c\x61\x74\x69\x6f\x6e\x3a\x61\x75\x74\x6f\
+\x3b\x6d\x69\x78\x2d\x62\x6c\x65\x6e\x64\x2d\x6d\x6f\x64\x65\x3a\
+\x6e\x6f\x72\x6d\x61\x6c\x3b\x63\x6f\x6c\x6f\x72\x2d\x69\x6e\x74\
+\x65\x72\x70\x6f\x6c\x61\x74\x69\x6f\x6e\x3a\x73\x52\x47\x42\x3b\
+\x63\x6f\x6c\x6f\x72\x2d\x69\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\
+\x69\x6f\x6e\x2d\x66\x69\x6c\x74\x65\x72\x73\x3a\x6c\x69\x6e\x65\
+\x61\x72\x52\x47\x42\x3b\x73\x6f\x6c\x69\x64\x2d\x63\x6f\x6c\x6f\
+\x72\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x6f\x6c\x69\x64\x2d\
+\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\
+\x66\x66\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\
+\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\
+\x6e\x6f\x6e\x7a\x65\x72\x6f\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\
+\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\
+\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\
+\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x63\x6f\x6c\x6f\
+\x72\x2d\x72\x65\x6e\x64\x65\x72\x69\x6e\x67\x3a\x61\x75\x74\x6f\
+\x3b\x69\x6d\x61\x67\x65\x2d\x72\x65\x6e\x64\x65\x72\x69\x6e\x67\
+\x3a\x61\x75\x74\x6f\x3b\x73\x68\x61\x70\x65\x2d\x72\x65\x6e\x64\
+\x65\x72\x69\x6e\x67\x3a\x61\x75\x74\x6f\x3b\x74\x65\x78\x74\x2d\
+\x72\x65\x6e\x64\x65\x72\x69\x6e\x67\x3a\x61\x75\x74\x6f\x3b\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x34\x33\x33\x36\
+\x2d\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\
+\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x22\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x3d\
+\x22\x2d\x37\x33\x31\x2e\x36\x39\x35\x30\x37\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x79\x3d\x22\x37\x34\x36\x2e\x38\x38\x30\x33\x37\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x22\x72\x6f\x74\x61\x74\x65\x28\x2d\x34\x35\x29\x22\
+\x20\x2f\x3e\x3c\x2f\x67\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x74\
+\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\
+\x61\x74\x65\x28\x2d\x31\x2e\x35\x31\x35\x39\x38\x39\x39\x2c\x31\
+\x31\x2e\x36\x32\x33\x35\x30\x32\x29\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x67\x31\x31\x35\x33\x22\x3e\x3c\x67\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x30\x30\x22\x20\
+\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x67\x31\x31\x30\x32\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x30\x34\x22\x20\x2f\x3e\
+\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\
+\x31\x30\x36\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x67\x31\x31\x30\x38\x22\x20\x2f\x3e\x3c\x67\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x31\
+\x30\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x67\x31\x31\x31\x32\x22\x20\x2f\x3e\x3c\x67\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x31\x34\x22\
+\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\
+\x22\x67\x31\x31\x31\x36\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x31\x38\x22\x20\x2f\
+\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\
+\x31\x31\x32\x30\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x32\x32\x22\x20\x2f\x3e\x3c\
+\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\
+\x32\x34\x22\x20\x2f\x3e\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x67\x31\x31\x32\x36\x22\x20\x2f\x3e\x3c\x67\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x31\x31\x32\x38\
+\x22\x20\x2f\x3e\x3c\x2f\x67\x3e\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x02\xe2\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\
\x20\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\
\x65\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\
\x2e\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\
\x20\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\
\x65\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\
\x6c\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\
\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\
\x64\x3d\x22\x43\x61\x70\x61\x5f\x31\x22\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\x78\x6d\
\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\
\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x38\x20\x35\x38\x22\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\
\x20\x35\x38\x20\x35\x38\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\
\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\
\x3c\x63\x69\x72\x63\x6c\x65\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\
\x69\x6c\x6c\x3a\x23\x44\x37\x35\x41\x34\x41\x3b\x22\x20\x63\x78\
\x3d\x22\x32\x39\x22\x20\x63\x79\x3d\x22\x32\x39\x22\x20\x72\x3d\
\x22\x32\x39\x22\x2f\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x72\
\x65\x63\x74\x20\x78\x3d\x22\x31\x36\x22\x20\x79\x3d\x22\x31\x36\
\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x46\
\x46\x46\x46\x46\x46\x3b\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\
\x36\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x36\x22\x2f\x3e\
\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x73\x74\x79\x6c\x65\x3d\x22\
\x66\x69\x6c\x6c\x3a\x23\x46\x46\x46\x46\x46\x46\x3b\x22\x20\x64\
\x3d\x22\x4d\x34\x33\x2c\x34\x33\x48\x31\x35\x56\x31\x35\x68\x32\
\x38\x56\x34\x33\x7a\x20\x4d\x31\x37\x2c\x34\x31\x68\x32\x34\x56\
\x31\x37\x48\x31\x37\x56\x34\x31\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\
\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\
\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\
\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\
\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\
\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\
\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\
\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\
\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
\x0a\
-\x00\x00\x04\x03\
+\x00\x00\x03\x68\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
-\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
-\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\
-\x59\x50\x45\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\
-\x2d\x2f\x2f\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\
-\x31\x2e\x31\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\
-\x68\x69\x63\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\
-\x2f\x73\x76\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\
-\x67\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\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x61\x70\x61\x5f\x31\x22\x20\x78\x3d\x22\x30\x70\x78\
-\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\
-\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\
-\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x36\x38\x2e\x38\x33\x32\x20\x32\x36\x38\x2e\
-\x38\x33\x32\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\
-\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x32\x36\x38\x2e\x38\x33\x32\x20\x32\x36\
-\x38\x2e\x38\x33\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\
-\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\
-\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x36\x35\
-\x2e\x31\x37\x31\x2c\x31\x32\x35\x2e\x35\x37\x37\x6c\x2d\x38\x30\
-\x2d\x38\x30\x63\x2d\x34\x2e\x38\x38\x31\x2d\x34\x2e\x38\x38\x31\
-\x2d\x31\x32\x2e\x37\x39\x37\x2d\x34\x2e\x38\x38\x31\x2d\x31\x37\
-\x2e\x36\x37\x38\x2c\x30\x63\x2d\x34\x2e\x38\x38\x32\x2c\x34\x2e\
-\x38\x38\x32\x2d\x34\x2e\x38\x38\x32\x2c\x31\x32\x2e\x37\x39\x36\
-\x2c\x30\x2c\x31\x37\x2e\x36\x37\x38\x6c\x35\x38\x2e\x36\x36\x31\
-\x2c\x35\x38\x2e\x36\x36\x31\x48\x31\x32\x2e\x35\x20\x20\x20\x63\
-\x2d\x36\x2e\x39\x30\x33\x2c\x30\x2d\x31\x32\x2e\x35\x2c\x35\x2e\
-\x35\x39\x37\x2d\x31\x32\x2e\x35\x2c\x31\x32\x2e\x35\x63\x30\x2c\
-\x36\x2e\x39\x30\x32\x2c\x35\x2e\x35\x39\x37\x2c\x31\x32\x2e\x35\
-\x2c\x31\x32\x2e\x35\x2c\x31\x32\x2e\x35\x68\x32\x31\x33\x2e\x36\
-\x35\x34\x6c\x2d\x35\x38\x2e\x36\x35\x39\x2c\x35\x38\x2e\x36\x36\
-\x31\x63\x2d\x34\x2e\x38\x38\x32\x2c\x34\x2e\x38\x38\x32\x2d\x34\
-\x2e\x38\x38\x32\x2c\x31\x32\x2e\x37\x39\x36\x2c\x30\x2c\x31\x37\
-\x2e\x36\x37\x38\x20\x20\x20\x63\x32\x2e\x34\x34\x2c\x32\x2e\x34\
-\x33\x39\x2c\x35\x2e\x36\x34\x2c\x33\x2e\x36\x36\x31\x2c\x38\x2e\
-\x38\x33\x39\x2c\x33\x2e\x36\x36\x31\x73\x36\x2e\x33\x39\x38\x2d\
-\x31\x2e\x32\x32\x32\x2c\x38\x2e\x38\x33\x39\x2d\x33\x2e\x36\x36\
-\x31\x6c\x37\x39\x2e\x39\x39\x38\x2d\x38\x30\x43\x32\x37\x30\x2e\
-\x30\x35\x33\x2c\x31\x33\x38\x2e\x33\x37\x33\x2c\x32\x37\x30\x2e\
-\x30\x35\x33\x2c\x31\x33\x30\x2e\x34\x35\x39\x2c\x32\x36\x35\x2e\
-\x31\x37\x31\x2c\x31\x32\x35\x2e\x35\x37\x37\x7a\x22\x20\x66\x69\
-\x6c\x6c\x3d\x22\x23\x46\x46\x44\x41\x34\x34\x22\x2f\x3e\x0a\x3c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\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\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x61\x70\x61\x5f\x31\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
+\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x34\x31\x2e\x39\x39\x39\x20\x34\x31\x2e\x39\x39\
+\x39\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\
+\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\
+\x30\x20\x30\x20\x34\x31\x2e\x39\x39\x39\x20\x34\x31\x2e\x39\x39\
+\x39\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
+\x72\x65\x73\x65\x72\x76\x65\x22\x20\x77\x69\x64\x74\x68\x3d\x22\
+\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x33\x36\x2e\x30\x36\x38\x2c\x32\x30\x2e\x31\x37\x36\x6c\x2d\
+\x32\x39\x2d\x32\x30\x43\x36\x2e\x37\x36\x31\x2d\x30\x2e\x30\x33\
+\x35\x2c\x36\x2e\x33\x36\x33\x2d\x30\x2e\x30\x35\x37\x2c\x36\x2e\
+\x30\x33\x35\x2c\x30\x2e\x31\x31\x34\x43\x35\x2e\x37\x30\x36\x2c\
+\x30\x2e\x32\x38\x37\x2c\x35\x2e\x35\x2c\x30\x2e\x36\x32\x37\x2c\
+\x35\x2e\x35\x2c\x30\x2e\x39\x39\x39\x76\x34\x30\x20\x20\x63\x30\
+\x2c\x30\x2e\x33\x37\x32\x2c\x30\x2e\x32\x30\x36\x2c\x30\x2e\x37\
+\x31\x33\x2c\x30\x2e\x35\x33\x35\x2c\x30\x2e\x38\x38\x36\x63\x30\
+\x2e\x31\x34\x36\x2c\x30\x2e\x30\x37\x36\x2c\x30\x2e\x33\x30\x36\
+\x2c\x30\x2e\x31\x31\x34\x2c\x30\x2e\x34\x36\x35\x2c\x30\x2e\x31\
+\x31\x34\x63\x30\x2e\x31\x39\x39\x2c\x30\x2c\x30\x2e\x33\x39\x37\
+\x2d\x30\x2e\x30\x36\x2c\x30\x2e\x35\x36\x38\x2d\x30\x2e\x31\x37\
+\x37\x6c\x32\x39\x2d\x32\x30\x20\x20\x63\x30\x2e\x32\x37\x31\x2d\
+\x30\x2e\x31\x38\x37\x2c\x30\x2e\x34\x33\x32\x2d\x30\x2e\x34\x39\
+\x34\x2c\x30\x2e\x34\x33\x32\x2d\x30\x2e\x38\x32\x33\x53\x33\x36\
+\x2e\x33\x33\x38\x2c\x32\x30\x2e\x33\x36\x33\x2c\x33\x36\x2e\x30\
+\x36\x38\x2c\x32\x30\x2e\x31\x37\x36\x7a\x20\x4d\x37\x2e\x35\x2c\
+\x33\x39\x2e\x30\x39\x35\x56\x32\x2e\x39\x30\x34\x6c\x32\x36\x2e\
+\x32\x33\x39\x2c\x31\x38\x2e\x30\x39\x36\x4c\x37\x2e\x35\x2c\x33\
+\x39\x2e\x30\x39\x35\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\
+\x46\x46\x46\x46\x46\x22\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\x0a\
-\x00\x00\x03\x58\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x30\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\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\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x32\x34\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x22\x32\x34\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x78\x6d\x6c\
-\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\
-\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x39\x2e\
-\x34\x38\x38\x2c\x33\x2e\x39\x30\x37\x48\x32\x34\x76\x32\x2e\x37\
-\x39\x31\x48\x39\x2e\x34\x38\x38\x56\x33\x2e\x39\x30\x37\x7a\x20\
-\x4d\x31\x31\x2e\x31\x36\x33\x2c\x38\x2e\x33\x37\x32\x48\x32\x34\
-\x76\x32\x2e\x37\x39\x31\x48\x31\x31\x2e\x31\x36\x33\x56\x38\x2e\
-\x33\x37\x32\x7a\x20\x4d\x31\x31\x2e\x31\x36\x33\x2c\x31\x32\x2e\
-\x38\x33\x37\x48\x32\x34\x76\x32\x2e\x37\x39\x31\x48\x31\x31\x2e\
-\x31\x36\x33\x56\x31\x32\x2e\x38\x33\x37\x7a\x0d\x0a\x09\x20\x4d\
-\x39\x2e\x34\x38\x38\x2c\x31\x37\x2e\x33\x30\x32\x48\x32\x34\x76\
-\x32\x2e\x37\x39\x31\x48\x39\x2e\x34\x38\x38\x56\x31\x37\x2e\x33\
-\x30\x32\x7a\x20\x4d\x32\x2e\x37\x39\x31\x2c\x31\x30\x2e\x36\x30\
-\x34\x63\x30\x2c\x31\x2e\x32\x33\x33\x2c\x31\x2c\x32\x2e\x32\x33\
-\x33\x2c\x32\x2e\x32\x33\x33\x2c\x32\x2e\x32\x33\x33\x48\x36\x2e\
-\x31\x34\x76\x2d\x32\x2e\x32\x33\x33\x6c\x33\x2e\x37\x36\x37\x2c\
-\x33\x2e\x36\x32\x38\x4c\x36\x2e\x31\x34\x2c\x31\x37\x2e\x38\x36\
-\x76\x2d\x32\x2e\x32\x33\x32\x48\x35\x2e\x30\x32\x33\x0d\x0a\x09\
-\x43\x32\x2e\x32\x34\x39\x2c\x31\x35\x2e\x36\x32\x38\x2c\x30\x2c\
-\x31\x33\x2e\x33\x37\x39\x2c\x30\x2c\x31\x30\x2e\x36\x30\x34\x56\
-\x38\x2e\x39\x33\x63\x30\x2d\x32\x2e\x37\x37\x34\x2c\x32\x2e\x32\
-\x34\x39\x2d\x35\x2e\x30\x32\x33\x2c\x35\x2e\x30\x32\x33\x2d\x35\
-\x2e\x30\x32\x33\x48\x36\x2e\x31\x34\x76\x32\x2e\x37\x39\x31\x48\
-\x35\x2e\x30\x32\x33\x63\x2d\x31\x2e\x32\x33\x33\x2c\x30\x2d\x32\
-\x2e\x32\x33\x33\x2c\x31\x2d\x32\x2e\x32\x33\x33\x2c\x32\x2e\x32\
-\x33\x32\x56\x31\x30\x2e\x36\x30\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\
-\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
"
qt_resource_name = b"\
\x00\x05\
\x00\x6f\xa6\x53\
\x00\x69\
\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x08\
+\x0a\xc3\x55\x87\
+\x00\x73\
+\x00\x74\x00\x65\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x09\
\x09\xba\x8f\xa7\
\x00\x64\
\x00\x65\x00\x62\x00\x75\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x07\
-\x09\xc1\x5a\x27\
-\x00\x72\
-\x00\x75\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0b\x63\x55\x87\
-\x00\x73\
-\x00\x74\x00\x6f\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0f\
\x0a\x15\x41\x07\
\x00\x64\
\x00\x65\x00\x62\x00\x75\x00\x67\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0f\x59\x62\xa7\
+\x00\x72\
+\x00\x65\x00\x6c\x00\x6f\x00\x61\x00\x64\x00\x5f\x00\x73\x00\x63\x00\x72\x00\x69\x00\x70\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
\x00\x08\
-\x0a\xc3\x55\x87\
+\x0b\x63\x55\x87\
\x00\x73\
-\x00\x74\x00\x65\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x74\x00\x6f\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x09\xc1\x5a\x27\
+\x00\x72\
+\x00\x75\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
"
-qt_resource_struct = b"\
+qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x03\x5c\
+\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x09\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x13\x39\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xdd\
-\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x16\x2f\
-\x00\x00\x00\x76\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x36\
-\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x13\x49\
+\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x28\x23\
+\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x17\x40\
"
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x03\x5c\
+\x00\x00\x01\x62\x3c\x4f\x2a\xa0\
+\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x09\
+\x00\x00\x01\x62\x3c\x4f\x2a\xa0\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x13\x39\
+\x00\x00\x01\x62\x3c\x4f\x2a\xa0\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x62\x3c\x4f\x2a\xa0\
+\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x28\x23\
+\x00\x00\x01\x62\x3c\x4f\x2a\xa0\
+\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x17\x40\
+\x00\x00\x01\x6b\xc7\xe9\xfc\xa8\
+"
-def qInitResources():
- QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+ rcc_version = 1
+ qt_resource_struct = qt_resource_struct_v1
+else:
+ rcc_version = 2
+ qt_resource_struct = qt_resource_struct_v2
+def qInitResources():
+ QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
- QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+ QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()
diff --git a/plugins/python/scripter/scripter.qrc b/plugins/python/scripter/scripter.qrc
index 2266176553..af00c5dfc3 100644
--- a/plugins/python/scripter/scripter.qrc
+++ b/plugins/python/scripter/scripter.qrc
@@ -1,9 +1,10 @@
icons/debug.svgicons/debug_arrow.svgicons/run.svg
+ icons/reload_script.svgicons/step.svgicons/stop.svg
diff --git a/plugins/python/scripter/ui_scripter/actions/closeaction/closeaction.py b/plugins/python/scripter/ui_scripter/actions/closeaction/closeaction.py
index 3b5b5938fb..5bf2eea4b9 100644
--- a/plugins/python/scripter/ui_scripter/actions/closeaction/closeaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/closeaction/closeaction.py
@@ -1,55 +1,55 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction, QMessageBox
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt
import krita
class CloseAction(QAction):
def __init__(self, scripter, parent=None):
super(CloseAction, self).__init__(parent)
self.scripter = scripter
self.triggered.connect(self.close)
self.setText(i18n("Close"))
self.setObjectName('close')
self.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_Q))
@property
def parent(self):
- return 'File'
+ return 'File',
def close(self):
msgBox = QMessageBox(self.scripter.uicontroller.mainWidget)
msgBox.setInformativeText(i18n("Do you want to save the current document?"))
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
ret = msgBox.exec_()
if ret == QMessageBox.Cancel:
return
if ret == QMessageBox.Save:
if not self.scripter.uicontroller.invokeAction('save'):
return
self.scripter.uicontroller.closeScripter()
diff --git a/plugins/python/scripter/ui_scripter/actions/debugaction/debugaction.py b/plugins/python/scripter/ui_scripter/actions/debugaction/debugaction.py
index ed18515229..a40a328a74 100644
--- a/plugins/python/scripter/ui_scripter/actions/debugaction/debugaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/debugaction/debugaction.py
@@ -1,47 +1,47 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction
from PyQt5.QtGui import QIcon, QPixmap, QKeySequence
from scripter import resources_rc
from PyQt5.QtCore import Qt
import krita
class DebugAction(QAction):
def __init__(self, scripter, parent=None):
super(DebugAction, self).__init__(parent)
self.scripter = scripter
self.triggered.connect(self.debug)
self.setText(i18n("Debug"))
self.setToolTip(i18n("Debug Ctrl+D"))
self.setIcon(QIcon(':/icons/debug.svg'))
self.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_D))
@property
def parent(self):
- return 'toolBar'
+ return 'toolBar',
def debug(self):
if self.scripter.uicontroller.invokeAction('save'):
self.scripter.uicontroller.setActiveWidget(i18n('Debugger'))
self.scripter.debugcontroller.start(self.scripter.documentcontroller.activeDocument)
widget = self.scripter.uicontroller.findTabWidget(i81n('Debugger'))
widget.startDebugger()
diff --git a/plugins/python/scripter/ui_scripter/actions/newaction/newaction.py b/plugins/python/scripter/ui_scripter/actions/newaction/newaction.py
index d446281fad..d75d102826 100644
--- a/plugins/python/scripter/ui_scripter/actions/newaction/newaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/newaction/newaction.py
@@ -1,57 +1,57 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction, QMessageBox
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt
import krita
class NewAction(QAction):
def __init__(self, scripter, parent=None):
super(NewAction, self).__init__(parent)
self.scripter = scripter
self.triggered.connect(self.new)
self.setText(i18n("New"))
self.setObjectName('new')
self.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_N))
@property
def parent(self):
- return 'File'
+ return 'File',
def new(self):
msgBox = QMessageBox(self.scripter.uicontroller.mainWidget)
msgBox.setText(i18n("The document has been modified."))
msgBox.setInformativeText(i18n("Do you want to save your changes?"))
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
ret = msgBox.exec_()
if ret == QMessageBox.Cancel:
return
if ret == QMessageBox.Save:
self.scripter.uicontroller.invokeAction('save')
self.scripter.documentcontroller.clearActiveDocument()
self.scripter.uicontroller.setStatusBar()
self.scripter.uicontroller.clearEditor()
diff --git a/plugins/python/scripter/ui_scripter/actions/openaction/openaction.py b/plugins/python/scripter/ui_scripter/actions/openaction/openaction.py
index eb88385e9d..70dbd5a641 100644
--- a/plugins/python/scripter/ui_scripter/actions/openaction/openaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/openaction/openaction.py
@@ -1,58 +1,58 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction, QFileDialog, QMessageBox
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt
import krita
import os
class OpenAction(QAction):
def __init__(self, scripter, parent=None):
super(OpenAction, self).__init__(parent)
self.scripter = scripter
self.triggered.connect(self.open)
self.setText(i18n("Open"))
self.setObjectName('open')
self.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_O))
@property
def parent(self):
- return 'File'
+ return 'File',
def open(self):
dialog = QFileDialog(self.scripter.uicontroller.mainWidget)
dialog.setNameFilter(i18n("Python Files (*.py)"))
if dialog.exec_():
try:
selectedFile = dialog.selectedFiles()[0]
_, fileExtension = os.path.splitext(selectedFile)
if fileExtension == '.py':
document = self.scripter.documentcontroller.openDocument(selectedFile)
self.scripter.uicontroller.setDocumentEditor(document)
self.scripter.uicontroller.setStatusBar(document.filePath)
except Exception:
QMessageBox.information(self.scripter.uicontroller.mainWidget,
i18n("Invalid File"),
i18n("Open files with .py extension"))
diff --git a/plugins/python/scripter/ui_scripter/actions/reloadaction/reloadaction.py b/plugins/python/scripter/ui_scripter/actions/reloadaction/reloadaction.py
index ec142f21dc..72ac17ba96 100644
--- a/plugins/python/scripter/ui_scripter/actions/reloadaction/reloadaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/reloadaction/reloadaction.py
@@ -1,63 +1,66 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction, QMessageBox
-from PyQt5.QtGui import QKeySequence
+from PyQt5.QtGui import QIcon, QKeySequence
from PyQt5.QtCore import Qt
import krita
class ReloadAction(QAction):
def __init__(self, scripter, parent=None):
super(ReloadAction, self).__init__(parent)
self.scripter = scripter
self.editor = self.scripter.uicontroller.editor
self.triggered.connect(self.reloadFile)
self.setText(i18n("Reload File"))
self.setObjectName('reloadfile')
self.setShortcut(QKeySequence(Qt.ALT + Qt.Key_R))
+ self.setToolTip(i18n('Reload File Alt+R'))
+ self.setIcon(QIcon(':/icons/reload_script.svg'))
+
@property
def parent(self):
- return 'File'
+ return 'File', 'toolBar'
def reloadFile(self):
# get the currently open document's path
curr_doc_fpath = ''
document = self.scripter.documentcontroller._activeDocument
if document is None:
QMessageBox.critical(self.scripter.uicontroller.mainWidget,
i18n("No existing document"),
i18n("Please specify a document by opening it before reloading"))
return
else:
curr_doc_fpath = document.filePath
# clear the editor
self.scripter.documentcontroller.clearActiveDocument()
self.scripter.uicontroller.setStatusBar()
self.scripter.uicontroller.clearEditor()
# reload the document
document = self.scripter.documentcontroller.openDocument(curr_doc_fpath)
self.scripter.uicontroller.setDocumentEditor(document)
self.scripter.uicontroller.setStatusBar(document.filePath)
return document
diff --git a/plugins/python/scripter/ui_scripter/actions/runaction/runaction.py b/plugins/python/scripter/ui_scripter/actions/runaction/runaction.py
index f35452f2b0..a834da3ccb 100644
--- a/plugins/python/scripter/ui_scripter/actions/runaction/runaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/runaction/runaction.py
@@ -1,159 +1,159 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction
from PyQt5.QtGui import QIcon, QKeySequence
from PyQt5.QtCore import Qt
import sys
import traceback
import inspect
from . import docwrapper
import krita
if sys.version_info[0] > 2:
import importlib
from importlib.machinery import SourceFileLoader
else:
import imp
PYTHON27 = sys.version_info.major == 2 and sys.version_info.minor == 7
PYTHON33 = sys.version_info.major == 3 and sys.version_info.minor == 3
PYTHON34 = sys.version_info.major == 3 and sys.version_info.minor == 4
EXEC_NAMESPACE = "__main__" # namespace that user scripts will run in
class RunAction(QAction):
def __init__(self, scripter, parent=None):
super(RunAction, self).__init__(parent)
self.scripter = scripter
self.editor = self.scripter.uicontroller.editor
self.output = self.scripter.uicontroller.findTabWidget(i18n('Output'), 'OutPutTextEdit')
self.triggered.connect(self.run)
self.setText(i18n("Run"))
self.setToolTip(i18n('Run Ctrl+R'))
self.setIcon(QIcon(':/icons/run.svg'))
self.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_R))
@property
def parent(self):
- return 'toolBar'
+ return 'toolBar',
def run(self):
""" This method execute python code from an activeDocument (file) or direct
from editor (ui_scripter/editor/pythoneditor.py). When executing code
from a file, we use importlib to load this module/file and with
"users_script" name. That's implementation seeks for a "main()" function in the script.
When executing code from editor without creating a file, we compile
this script to bytecode and we execute this in an empty scope. That's
faster than use exec directly and cleaner, because we are using an empty scope. """
self.scripter.uicontroller.setActiveWidget(i18n('Output'))
stdout = sys.stdout
stderr = sys.stderr
output = docwrapper.DocWrapper(self.output.document())
if (self.editor._documentModified is True):
output.write("==== Warning: Script not saved! ====\n")
else:
output.write("======================================\n")
sys.stdout = output
sys.stderr = output
script = self.editor.document().toPlainText()
document = self.scripter.documentcontroller.activeDocument
try:
if document and self.editor._documentModified is False:
if PYTHON27:
users_module = self.run_py2_document(document)
else:
users_module = self.run_py3_document(document)
# maybe script is to be execed, maybe main needs to be invoked
# if there is a main() then execute it, otherwise don't worry...
if hasattr(users_module, "main") and inspect.isfunction(users_module.main):
users_module.main()
else:
code = compile(script, '', 'exec')
globals_dict = {"__name__": EXEC_NAMESPACE}
exec(code, globals_dict)
except SystemExit:
# user typed quit() or exit()
self.scripter.uicontroller.closeScripter()
except Exception:
# Provide context (line number and text) for an error that is caught.
# Ordinarily, syntax and Indent errors are caught during initial
# compilation in exec(), and the traceback traces back to this file.
# So these need to be treated separately.
# Other errors trace back to the file/script being run.
type_, value_, traceback_ = sys.exc_info()
if type_ == SyntaxError:
errorMessage = "%s\n%s" % (value_.text.rstrip(), " " * (value_.offset - 1) + "^")
# rstrip to remove trailing \n, output needs to be fixed width font for the ^ to align correctly
errorText = "Syntax Error on line %s" % value_.lineno
elif type_ == IndentationError:
# (no offset is provided for an IndentationError
errorMessage = value_.text.rstrip()
errorText = "Unexpected Indent on line %s" % value_.lineno
else:
errorText = traceback.format_exception_only(type_, value_)[0]
format_string = "In file: {0}\nIn function: {2} at line: {1}. Line with error:\n{3}"
tbList = traceback.extract_tb(traceback_)
tb = tbList[-1]
errorMessage = format_string.format(*tb)
m = "\n**********************\n%s\n%s\n**********************\n" % (errorText, errorMessage)
output.write(m)
sys.stdout = stdout
sys.stderr = stderr
# scroll to bottom of output
bottom = self.output.verticalScrollBar().maximum()
self.output.verticalScrollBar().setValue(bottom)
def run_py2_document(self, document):
""" Loads and executes an external script using Python 2 specific operations
and returns the loaded module for further execution if needed.
"""
try:
user_module = imp.load_source(EXEC_NAMESPACE, document.filePath)
except Exception as e:
raise e
return user_module
def run_py3_document(self, document):
""" Loads and executes an external script using Python 3 specific operations
and returns the loaded module for further execution if needed.
"""
spec = importlib.util.spec_from_file_location(EXEC_NAMESPACE, document.filePath)
try:
users_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(users_module)
except AttributeError as e: # no module from spec
if PYTHON34 or PYTHON33:
loader = SourceFileLoader(EXEC_NAMESPACE, document.filePath)
users_module = loader.load_module()
else:
raise e
return users_module
diff --git a/plugins/python/scripter/ui_scripter/actions/saveaction/saveaction.py b/plugins/python/scripter/ui_scripter/actions/saveaction/saveaction.py
index 887395ba8b..9691666fa1 100644
--- a/plugins/python/scripter/ui_scripter/actions/saveaction/saveaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/saveaction/saveaction.py
@@ -1,63 +1,63 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction, QFileDialog
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt
import krita
class SaveAction(QAction):
def __init__(self, scripter, parent=None):
super(SaveAction, self).__init__(parent)
self.scripter = scripter
self.editor = self.scripter.uicontroller.editor
self.triggered.connect(self.save)
self.setText(i18n("Save"))
self.setObjectName('save')
self.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_S))
@property
def parent(self):
- return 'File'
+ return 'File',
def save(self):
text = self.editor.toPlainText()
fileName = ''
if not self.scripter.documentcontroller.activeDocument:
fileName = QFileDialog.getSaveFileName(self.scripter.uicontroller.mainWidget,
i18n("Save Python File"), '',
i18n("Python File (*.py)"))[0]
if not fileName:
return
# don't validate file name - trust user to specify the extension they want
# getSaveFileName will add ".py" if there is no extension.
# It will strip a trailing period and, in each case, test for file collisions
document = self.scripter.documentcontroller.saveDocument(text, fileName)
if document:
self.scripter.uicontroller.setStatusBar(document.filePath)
else:
self.scripter.uicontroller.setStatusBar('untitled')
self.editor._documentModified = False
self.scripter.uicontroller.setStatusModified()
return document
diff --git a/plugins/python/scripter/ui_scripter/actions/saveasaction/saveasaction.py b/plugins/python/scripter/ui_scripter/actions/saveasaction/saveasaction.py
index 2687e44bfa..d4977ceed8 100644
--- a/plugins/python/scripter/ui_scripter/actions/saveasaction/saveasaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/saveasaction/saveasaction.py
@@ -1,61 +1,61 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction, QFileDialog
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt
import krita
class SaveAsAction(QAction):
def __init__(self, scripter, parent=None):
super(SaveAsAction, self).__init__(parent)
self.scripter = scripter
self.editor = self.scripter.uicontroller.editor
self.triggered.connect(self.save)
self.setText(i18n("Save As"))
self.setObjectName('saveas')
self.setShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_S))
@property
def parent(self):
- return 'File'
+ return 'File',
def save(self):
text = self.editor.toPlainText()
fileName = QFileDialog.getSaveFileName(self.scripter.uicontroller.mainWidget,
i18n("Save Python File"), '',
i18n("Python File (*.py)"))[0]
if not fileName:
return
# don't validate file name - trust user to specify the extension they want
# getSaveFileName will add ".py" if there is no extension.
# It will strip a trailing period and, in each case, test for file collisions
document = self.scripter.documentcontroller.saveDocument(text, fileName, save_as=True)
if document:
self.scripter.uicontroller.setStatusBar(document.filePath)
else:
self.scripter.uicontroller.setStatusBar('untitled')
self.editor._documentModified = False
self.scripter.uicontroller.setStatusModified()
return document
diff --git a/plugins/python/scripter/ui_scripter/actions/settingsaction/settingsaction.py b/plugins/python/scripter/ui_scripter/actions/settingsaction/settingsaction.py
index c5e138e851..a40217d72f 100644
--- a/plugins/python/scripter/ui_scripter/actions/settingsaction/settingsaction.py
+++ b/plugins/python/scripter/ui_scripter/actions/settingsaction/settingsaction.py
@@ -1,50 +1,50 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtWidgets import QAction
from PyQt5.QtCore import Qt
from . import settingsdialog
import krita
class SettingsAction(QAction):
def __init__(self, scripter, parent=None):
super(SettingsAction, self).__init__(parent)
self.scripter = scripter
self.triggered.connect(self.openSettings)
self.settingsDialog = settingsdialog.SettingsDialog(self.scripter)
self.settingsDialog.setWindowModality(Qt.WindowModal)
self.settingsDialog.setFixedSize(400, 250)
self.setText(i18n("Settings"))
@property
def parent(self):
- return 'File'
+ return 'File',
def openSettings(self):
self.settingsDialog.show()
self.settingsDialog.exec_()
def readSettings(self):
self.settingsDialog.readSettings(self.scripter.settings)
def writeSettings(self):
self.settingsDialog.writeSettings(self.scripter.settings)
diff --git a/plugins/python/scripter/uicontroller.py b/plugins/python/scripter/uicontroller.py
index 087d8b1408..3061ca4e46 100644
--- a/plugins/python/scripter/uicontroller.py
+++ b/plugins/python/scripter/uicontroller.py
@@ -1,265 +1,267 @@
"""
Copyright (c) 2017 Eliakin Costa
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from PyQt5.QtCore import Qt, QObject, QFileInfo, QRect
from PyQt5.QtGui import QTextCursor, QPalette
from PyQt5.QtWidgets import (QToolBar, QMenuBar, QTabWidget,
QLabel, QVBoxLayout, QMessageBox,
QSplitter, QSizePolicy)
from .ui_scripter.syntax import syntax, syntaxstyles
from .ui_scripter.editor import pythoneditor
from . import scripterdialog
import importlib
import krita
KEY_GEOMETRY = "geometry"
DEFAULT_GEOMETRY = QRect(600, 200, 400, 500)
# essentially randomly placed
class Elided_Text_Label(QLabel):
mainText = str()
def __init__(self, parent=None):
super(QLabel, self).__init__(parent)
self.setMinimumWidth(self.fontMetrics().width("..."))
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)
def setMainText(self, text=str()):
self.mainText = text
self.elideText()
def elideText(self):
self.setText(self.fontMetrics().elidedText(self.mainText, Qt.ElideRight, self.width()))
def resizeEvent(self, event):
self.elideText()
class UIController(object):
documentModifiedText = ""
documentStatusBarText = "untitled"
def __init__(self):
self.mainWidget = scripterdialog.ScripterDialog(self)
self.actionToolbar = QToolBar('toolBar', self.mainWidget)
self.menu_bar = QMenuBar(self.mainWidget)
self.actionToolbar.setObjectName('toolBar')
self.menu_bar.setObjectName('menuBar')
self.actions = []
self.mainWidget.setWindowModality(Qt.NonModal)
def initialize(self, scripter):
self.editor = pythoneditor.CodeEditor(scripter)
self.tabWidget = QTabWidget()
self.statusBar = Elided_Text_Label()
self.statusBar.setMainText('untitled')
self.splitter = QSplitter()
self.splitter.setOrientation(Qt.Vertical)
self.highlight = syntax.PythonHighlighter(self.editor.document(), syntaxstyles.DefaultSyntaxStyle())
p = self.editor.palette()
p.setColor(QPalette.Base, syntaxstyles.DefaultSyntaxStyle()['background'].foreground().color())
p.setColor(QPalette.Text, syntaxstyles.DefaultSyntaxStyle()['foreground'].foreground().color())
self.editor.setPalette(p)
self.scripter = scripter
self.loadMenus()
self.loadWidgets()
self.loadActions()
self._readSettings() # sets window size
vbox = QVBoxLayout(self.mainWidget)
vbox.addWidget(self.menu_bar)
vbox.addWidget(self.actionToolbar)
self.splitter.addWidget(self.editor)
self.splitter.addWidget(self.tabWidget)
vbox.addWidget(self.splitter)
vbox.addWidget(self.statusBar)
self.mainWidget.setWindowTitle(i18n("Scripter"))
self.mainWidget.setSizeGripEnabled(True)
self.mainWidget.show()
self.mainWidget.activateWindow()
self.editor.undoAvailable.connect(self.setStatusModified)
def loadMenus(self):
self.addMenu(i18n('File'), i18n('File'))
def addMenu(self, menuName, parentName):
parent = self.menu_bar.findChild(QObject, parentName)
self.newMenu = None
if parent:
self.newMenu = parent.addMenu(menuName)
else:
self.newMenu = self.menu_bar.addMenu(menuName)
self.newMenu.setObjectName(menuName)
return self.newMenu
def loadActions(self):
module_path = 'scripter.ui_scripter.actions'
actions_module = importlib.import_module(module_path)
modules = []
for class_path in actions_module.action_classes:
_module = class_path[:class_path.rfind(".")]
_klass = class_path[class_path.rfind(".") + 1:]
modules.append(dict(module='{0}.{1}'.format(module_path, _module),
klass=_klass))
for module in modules:
m = importlib.import_module(module['module'])
action_class = getattr(m, module['klass'])
obj = action_class(self.scripter)
- parent = self.mainWidget.findChild(QObject, i18n(obj.parent))
- self.actions.append(dict(action=obj, parent=parent))
+ obj_parent = obj.parent
+ for name in obj_parent:
+ parent = self.mainWidget.findChild(QObject, i18n(name))
+ self.actions.append(dict(action=obj, parent=parent))
for action in self.actions:
action['parent'].addAction(action['action'])
def loadWidgets(self):
modulePath = 'scripter.ui_scripter.tabwidgets'
widgetsModule = importlib.import_module(modulePath)
modules = []
for class_path in widgetsModule.widgetClasses:
_module = class_path[:class_path.rfind(".")]
_klass = class_path[class_path.rfind(".") + 1:]
modules.append(dict(module='{0}.{1}'.format(modulePath, _module),
klass=_klass))
for module in modules:
m = importlib.import_module(module['module'])
widgetClass = getattr(m, module['klass'])
obj = widgetClass(self.scripter)
self.tabWidget.addTab(obj, obj.objectName())
def invokeAction(self, actionName):
for action in self.actions:
if action['action'].objectName() == actionName:
method = getattr(action['action'], actionName)
if method:
return method()
def findTabWidget(self, widgetName, childName=''):
for index in range(self.tabWidget.count()):
widget = self.tabWidget.widget(index)
if widget.objectName() == widgetName:
if childName:
widget = widget.findChild(QObject, childName)
return widget
def showException(self, exception):
QMessageBox.critical(self.editor, i18n("Error Running Script"), str(exception))
def setDocumentEditor(self, document):
self.editor.clear()
self.editor.moveCursor(QTextCursor.Start)
self.editor._documentModified = False
self.editor.setPlainText(document.data)
self.editor.moveCursor(QTextCursor.End)
def setStatusBar(self, value='untitled'):
self.documentStatusBarText = value
self.statusBar.setMainText(self.documentStatusBarText + self.documentModifiedText)
def setStatusModified(self):
self.documentModifiedText = ""
if (self.editor._documentModified is True):
self.documentModifiedText = " [Modified]"
self.statusBar.setMainText(self.documentStatusBarText + self.documentModifiedText)
def setActiveWidget(self, widgetName):
widget = self.findTabWidget(widgetName)
if widget:
self.tabWidget.setCurrentWidget(widget)
def setStepped(self, status):
self.editor.setStepped(status)
def clearEditor(self):
self.editor.clear()
def repaintDebugArea(self):
self.editor.repaintDebugArea()
def closeScripter(self):
self.mainWidget.close()
def _writeSettings(self):
""" _writeSettings is a method invoked when the scripter starts, making
control inversion. Actions can implement a writeSettings method to
save your own settings without this method to know about it. """
self.scripter.settings.beginGroup('scripter')
document = self.scripter.documentcontroller.activeDocument
if document:
self.scripter.settings.setValue('activeDocumentPath', document.filePath)
else:
self.scripter.settings.setValue('activeDocumentPath', '')
self.scripter.settings.setValue('editorFontSize', self.editor.fontInfo().pointSize())
for action in self.actions:
writeSettings = getattr(action['action'], "writeSettings", None)
if callable(writeSettings):
writeSettings()
# Window Geometry
rect = self.mainWidget.geometry()
self.scripter.settings.setValue(KEY_GEOMETRY, rect)
self.scripter.settings.endGroup()
def _readSettings(self):
""" It's similar to _writeSettings, but reading the settings when the ScripterDialog is closed. """
self.scripter.settings.beginGroup('scripter')
activeDocumentPath = self.scripter.settings.value('activeDocumentPath', '')
if activeDocumentPath:
if QFileInfo(activeDocumentPath).exists():
document = self.scripter.documentcontroller.openDocument(activeDocumentPath)
self.setStatusBar(document.filePath)
self.setDocumentEditor(document)
for action in self.actions:
readSettings = getattr(action['action'], "readSettings", None)
if callable(readSettings):
readSettings()
pointSize = self.scripter.settings.value('editorFontSize', str(self.editor.fontInfo().pointSize()))
self.editor.setFontSize(int(pointSize))
# Window Geometry
rect = self.scripter.settings.value(KEY_GEOMETRY, DEFAULT_GEOMETRY)
self.mainWidget.setGeometry(rect)
self.scripter.settings.endGroup()
def _saveSettings(self):
self.scripter.settings.sync()