调整项目布局

master
pbyhqr72x 3 years ago
parent 35c498e56a
commit fc6e00103f

@ -1,5 +1,15 @@
3rdparty为第三方库
doc放相关文档
##
doc放相关文档及操作视频
##
src源代码
moderl为uml图
#######
DstImages Srcimages分别为对照片加工处理后 前的图片文件夹
Videos为无人机拍摄视频的一个测试视频
calibration存放棋盘标定照片及其代码
reconstruction存放稀疏重建、稠密重建、点云过滤对应代码及相关开源.exe
SystemUi存放三维重建部分的控制和对应ui界面代码
VideoToPhoto为视频转图片代码
_main_ui为主界面代码用来调用连接无人机、视频转照片、照片三维重建三个功能其中video文件夹中为视频、照片处理功能及其对应ui界面
##
model为一部分uml图

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

@ -0,0 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="main.*" />
</list>
</option>
</inspection_tool>
</profile>
</component>

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/test.iml" filepath="$PROJECT_DIR$/.idea/test.iml" />
</modules>
</component>
</project>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
</module>

@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="acd6b1a4-80ac-4e2a-91ee-278681216708" name="变更" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2BWe7EhgvqvsCQAuAgnnyzynigu" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/Users/xinluo/PycharmProjects/test&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;configurable.group.language&quot;
}
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Users\xinluo\PycharmProjects\test" />
<recent name="C:\Users\xinluo\PycharmProjects\test\_main_ui" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Users\xinluo\PycharmProjects\test\video\src\" />
</key>
</component>
<component name="RunManager" selected="Python.main (1)">
<configuration name="main (1)" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="test" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/_main_ui" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/_main_ui/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="test" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="myWin" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="test" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/SystemUI" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/SystemUI/myWin.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="ui_main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="test" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/_main_ui" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/_main_ui/ui_main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="video2x_gui (1)" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="test" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/_main_ui/video/src" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/_main_ui/video/src/video2x_gui.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="video_to_photo" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="test" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/video_to_photo.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.main (1)" />
<item itemvalue="Python.myWin" />
<item itemvalue="Python.video2x_gui (1)" />
<item itemvalue="Python.video_to_photo" />
<item itemvalue="Python.ui_main" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="acd6b1a4-80ac-4e2a-91ee-278681216708" name="变更" comment="" />
<created>1657026098981</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1657026098981</updated>
</task>
<servers />
</component>
</project>

@ -0,0 +1,31 @@
import os
'''
该路径存储原始的图片重命名后会覆盖掉原始的图片所以在重命名之前选择复制一份以免被失误重命名
建议在路径中使用\\ 双斜杠
'''
path = 'C:\\Users\\xinluo\\PycharmProjects\\test\\images'
# 绝对路径
filelist = os.listdir(path)
'''
起始数字重命名的第一个文件的名字会加1
'''
i = 10000
# 仅用于数字开头的图片命名方法
for item in filelist:
#print('item name is ',item)
# jpg\png\bmp\xml 任何格式都支持,但是需要手动修改格式类型
if item.endswith('.jpg'):
i = i + 1
# 第一张图片命名为1.png
name = str(i)
# 将数字转换为字符串才能命名
src = os.path.join(os.path.abspath(path),item)
# 原始图像的路径
dst = os.path.join(os.path.abspath(path),name + '.jpg')
# 目标图像路径
try:
os.rename(src,dst)
print('rename from %s to %s'%(src,dst))
# 将转换结果在终端打印出来以便检查
except:
continue

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,6 @@
# SFM_PMVS_3DReconstruct_python
SFM PMVS 3D sparse to dense reconstruct in python.
![image](https://github.com/CaptainEven/SFM_PMVS_3DReconstruct_python/blob/master/sparse.jpg)
![image](https://github.com/CaptainEven/SFM_PMVS_3DReconstruct_python/blob/master/dense_2.jpg)

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainWin.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(950, 601)
Dialog.setMinimumSize(QtCore.QSize(950, 601))
Dialog.setMaximumSize(QtCore.QSize(950, 601))
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(50, 40, 291, 51))
font = QtGui.QFont()
font.setFamily("华文琥珀")
font.setPointSize(18)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(550, 50, 231, 31))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.line = QtWidgets.QFrame(Dialog)
self.line.setGeometry(QtCore.QRect(0, 100, 951, 20))
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(290, 270, 381, 51))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(14)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.push_button = QtWidgets.QPushButton(Dialog)
self.push_button.setGeometry(QtCore.QRect(390, 370, 151, 41))
self.push_button.setObjectName("pushButton")
self.text_browser = QtWidgets.QTextBrowser(Dialog)
self.text_browser.setGeometry(QtCore.QRect(0, 470, 951, 131))
self.text_browser.setObjectName("textBrowser")
self.reTranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def reTranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "HJ Grad_Design"))
self.label_2.setText(_translate("Dialog", "*------相机标定--------*"))
self.label_3.setText(_translate("Dialog", "请选择拍摄有黑白棋盘格的图片"))
self.push_button.setText(_translate("Dialog", "点击选择图片"))
self.text_browser.setHtml(_translate("Dialog",
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>601</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>950</width>
<height>601</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>950</width>
<height>601</height>
</size>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>50</x>
<y>40</y>
<width>291</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<family>华文琥珀</family>
<pointsize>18</pointsize>
</font>
</property>
<property name="text">
<string>HJ Grad_Design</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>550</x>
<y>50</y>
<width>231</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>幼圆</family>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>*------相机标定--------*</string>
</property>
</widget>
<widget class="Line" name="line">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>951</width>
<height>20</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>290</x>
<y>270</y>
<width>381</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<family>幼圆</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>请选择拍摄有黑白棋盘格的图片</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>390</x>
<y>370</y>
<width>151</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>点击选择图片</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowser">
<property name="geometry">
<rect>
<x>0</x>
<y>470</y>
<width>951</width>
<height>131</height>
</rect>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,499 @@
# encoding=utf-8
import sys
from SystemUI.startupWin import *
from SystemUI.mainWin import *
from PyQt5.QtWidgets import *
import datetime
from PyQt5 import QtCore
import time
from calibration import calibration
from reconstruction import rec_config
from reconstruction.spare import sfmui
from reconstruction.dense import PMVSui, Dense_filterui
from SystemUI import mainWin
import numpy as np
import vispy.scene
from vispy.scene import visuals
class EmittingStr(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str) # 定义一个发送str的信号
def write(self, text):
self.textWritten.emit(str(text))
class StartWin(QMainWindow, Ui_MainWindow_):
# welcome_page = []
def __init__(self, parent=None):
#继承父类的__init__
super(StartWin, self).__init__(parent)#等同于super().__init__(parent)
self.setupUi(self)
# self.welcome_page.append(self.label)
# self.welcome_page.append(self.pushButton)
self.addWidgets()
# 设置窗体无边框
# self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
# 设置文本框及按钮
def addWidgets(self):
self.set_name_tip = QtWidgets.QLabel(self.centralwidget)
self.set_name_tip.setText("请输入工程文件名")
self.set_name_tip.setGeometry(QtCore.QRect(400, 350, 180, 40))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.set_name_tip.setFont(font)
self.set_name_tip.setObjectName("setnametip")
self.set_name_tip.close()
self.line_edit = QtWidgets.QLineEdit(self.centralwidget)
self.line_edit.setGeometry(QtCore.QRect(350, 390, 250, 40))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.line_edit.setFont(font)
self.line_edit.setObjectName("LineEdit")
self.line_edit.close()
self.name_sub_button = QtWidgets.QPushButton(self.centralwidget)
self.name_sub_button.setGeometry(QtCore.QRect(400, 438, 70, 40))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.name_sub_button.setFont(font)
self.name_sub_button.setObjectName("namesubButton")
self.name_sub_button.setText("确认")
self.name_sub_button.close()
self.cancle_button = QtWidgets.QPushButton(self.centralwidget)
self.cancle_button.setGeometry(QtCore.QRect(480, 438, 70, 40))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.cancle_button.setFont(font)
self.cancle_button.setObjectName("cancleButton")
self.cancle_button.setText("取消")
self.cancle_button.close()
# # 加到数组中
# self.welcome_page.append(self.setnametip)
# self.welcome_page.append(self.LineEdit)
# self.welcome_page.append(self.namesubButton)
# self.welcome_page.append(self.cancleButton)
# 绑定事件
self.push_button.clicked.connect(self.setName)
self.cancle_button.clicked.connect(self.cancleSetName)
self.name_sub_button.clicked.connect(self.subName)
def getProjectName(self):
return self.project_name
def setName(self):
self.push_button.close()
self.cancle_button.show()
self.name_sub_button.show()
self.set_name_tip.show()
self.line_edit.show()
def cancleSetName(self):
self.push_button.show()
self.cancle_button.close()
self.name_sub_button.close()
self.set_name_tip.close()
self.line_edit.close()
def subName(self):
Input_text = self.line_edit.text()
if Input_text != "":
self.project_name = Input_text
# print(Input_text)
else:
self.project_name = "Project-" + str(datetime.datetime.now()).split()[0] # 默认工程文件名
print("project name:", self.project_name)
# 保存文件名到txt文件中
with open("../project_name.txt", "w") as f:
f.write(self.project_name)
f.close()
Start.close()
main_win.show()
class MainWin(QDialog, Ui_Dialog):
def __init__(self, parent=None):
super(MainWin, self).__init__(parent)
self.setupUi(self)
# 下面将输出重定向到textBrowser中
#将系统输出和报错重定向到textBrowser中
sys.stdout = EmittingStr(textWritten=self.outputWritten)
sys.stderr = EmittingStr(textWritten=self.outputWritten)
#相应标定文件夹
self.push_button.clicked.connect(self.openCaliImages)
self.text_browser.close()
self.addWidgets()
def addWidgets(self):
self.label_4 = QtWidgets.QLabel(self)
self.label_4.setGeometry(QtCore.QRect(290, 230, 381, 51))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(14)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_4.setText("相机标定完毕,请选择重建图片")
self.label_4.close()
self.reconsbtn = QtWidgets.QPushButton(self)
self.reconsbtn.setGeometry(QtCore.QRect(340, 320, 240, 41))
self.reconsbtn.setObjectName("reconsbtn")
self.reconsbtn.setText("点击选择重建图片文件夹")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.reconsbtn.setFont(font)
#相应稀疏重建
self.reconsbtn.clicked.connect(self.recons)
self.reconsbtn.close()
self.label_5 = QtWidgets.QLabel(self)
self.label_5.setGeometry(QtCore.QRect(290, 230, 381, 51))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(14)
self.label_5.setFont(font)
self.label_5.setObjectName("label_4")
self.label_5.setText("稀疏重建完成,现在开始稠密重建")
self.label_5.close()
self.preview_sparse_btn = QtWidgets.QPushButton(self)
self.preview_sparse_btn.setGeometry(QtCore.QRect(340, 380, 240, 41))
self.preview_sparse_btn.setObjectName("sparsebtn")
self.preview_sparse_btn.setText("点击显示稀疏重建结果")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.preview_sparse_btn.setFont(font)
#显示稀疏重建结果
self.preview_sparse_btn.clicked.connect(self.showSparse)
self.preview_sparse_btn.close()
self.dense_recons_btn = QtWidgets.QPushButton(self)
self.dense_recons_btn.setGeometry(QtCore.QRect(340, 320, 240, 41))
self.dense_recons_btn.setObjectName("reconsbtn")
self.dense_recons_btn.setText("点击开始稠密重建")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.dense_recons_btn.setFont(font)
#相应稠密重建
self.dense_recons_btn.clicked.connect(self.denseRecons)
self.dense_recons_btn.close()
self.label_6 = QtWidgets.QLabel(self)
self.label_6.setGeometry(QtCore.QRect(290, 230, 381, 51))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(14)
self.label_6.setFont(font)
self.label_6.setObjectName("label_4")
self.label_6.setText("重建完成,还需过滤掉一些杂点")
self.label_6.close()
self.filter_btn = QtWidgets.QPushButton(self)
self.filter_btn.setGeometry(QtCore.QRect(355, 320, 240, 41))
self.filter_btn.setObjectName("filterbtn")
self.filter_btn.setText("点击开始点云过滤")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.filter_btn.setFont(font)
#相应点云过滤
self.filter_btn.clicked.connect(self.pointFilter)
self.filter_btn.close()
self.preview_dense_back_btn = QtWidgets.QPushButton(self)
self.preview_dense_back_btn.setGeometry(QtCore.QRect(355, 380, 240, 41))
self.preview_dense_back_btn.setObjectName("previewdensebackbtn")
self.preview_dense_back_btn.setText("点击显示稠密重建结果")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.preview_dense_back_btn.setFont(font)
self.preview_dense_back_btn.clicked.connect(self.showDenseWithBack)
self.preview_dense_back_btn.close()
self.label_7 = QtWidgets.QLabel(self)
self.label_7.setGeometry(QtCore.QRect(440, 230, 381, 51))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(14)
self.label_7.setFont(font)
self.label_7.setObjectName("label_4")
self.label_7.setText("重建完成!")
self.label_7.close()
self.finish_btn = QtWidgets.QPushButton(self)
self.finish_btn.setGeometry(QtCore.QRect(370, 320, 240, 41))
self.finish_btn.setObjectName("reconsbtn")
self.finish_btn.setText("完成")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.finish_btn.setFont(font)
#回到开始ui界面
self.finish_btn.clicked.connect(self.recFinish)
self.finish_btn.close()
self.show_final_btn = QtWidgets.QPushButton(self)
self.show_final_btn.setGeometry(QtCore.QRect(370, 380, 240, 41))
self.show_final_btn.setObjectName("showfinalbtn")
self.show_final_btn.setText("点击显示足部重建结果")
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.show_final_btn.setFont(font)
self.show_final_btn.clicked.connect(self.showFinal)
self.show_final_btn.close()
def outputWritten(self, text):
cursor = self.text_browser.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.text_browser.setTextCursor(cursor)
self.text_browser.ensureCursorVisible()
def showInVispy(self, path):
# Make a canvas and add simple view
canvas = vispy.scene.SceneCanvas(keys='interactive', show=True)
view = canvas.central_widget.add_view()
# 读取点云
with open(path, "r") as f:
lines = f.readlines()
lines = lines[13:]
points = np.ones((len(lines), 3))
colors = []
for i in range(len(lines)):
points[i, :3] = list(map(float, lines[i].strip("\n").split(" ")[:3]))
colors.append(tuple(list(map(float, lines[i].strip("\n").split(" ")[-3:]))))
colors = np.array(colors) / 255
# create scatter object and fill in the data
scatter = visuals.Markers()
scatter.set_data(points[:, :3], edge_color=None, face_color=colors, size=4)
view.add(scatter)
view.camera = 'turntable' # or try 'arcball'
# add a colored 3D axis for orientation
axis = visuals.XYZAxis(parent=view.scene)
if sys.flags.interactive != 1:
vispy.app.run()
def openCaliImages(self):
self.cali_img_dir = QFileDialog.getExistingDirectory(self, "选取文件夹", "../") # 起始路径
calibration.cali_img_dir = self.cali_img_dir
#标定相机函数
self.cali_thead = cali()
self.cali_thead.signal.connect(self.callback1)
self.cali_thead.start()
self.label_3.setText("正在进行相机标定,请等候片刻")
self.label_3.setGeometry(QtCore.QRect(290, 230, 381, 51))
self.text_browser.show()
self.push_button.close()
def recons(self):
self.rec_img_dir = QFileDialog.getExistingDirectory(self, "选取文件夹", "../") # 起始路径
rec_config.image_dir = self.rec_img_dir
#稀疏重建函数设置signal为false完成重建后设置signal为true
self.rect_head = rec()
self.rect_head.signal.connect(self.callback2)
self.rect_head.start()
self.text_browser.show()
# self.label_4.setGeometry(QtCore.QRect(190, 270, 381, 51))
self.label_4.setText("正在进行稀疏重建,请等候片刻...")
self.reconsbtn.close()
def denseRecons(self):
PMVSui.CMVS.image_dir = self.rec_img_dir
# print(self.rec_img_dir)
#稠密重建函数
self.denserecthead = DenseRec()
self.denserecthead.signal.connect(self.callback3)
self.denserecthead.start()
# self.textBrowser.show()
# self.label_5.setGeometry(QtCore.QRect(190, 270, 381, 51))
self.label_5.setText("正在进行稠密重建,请等候片刻...")
self.dense_recons_btn.close()
self.preview_sparse_btn.close()
def pointFilter(self):
self.pfilt = PointFilt()
self.model_path = QFileDialog.getExistingDirectory(self, "选取路径", "../") # 起始路径
#直接返回点云过滤完成,实际还没实现点云过滤
self.pfilt.signal.connect(self.callback4)
self.pfilt.start()
# self.text_browser.show()
# self.label_6.setGeometry(QtCore.QRect(190, 270, 381, 51))
self.label_6.setText("正在进行过滤多余点云,请等候片刻")
self.filter_btn.close()
self.preview_dense_back_btn.close()
def recFinish(self):
#关闭main_win
main_win.close()
Start.show()
Start.push_button.show()
#关闭按钮
Start.set_name_tip.close()
Start.cancle_button.close()
Start.name_sub_button.close()
Start.line_edit.close()
def showSparse(self):
sfmui.save_sparse()
self.showInVispy(self.rec_img_dir + '/sparse.ply')
def showDenseWithBack(self):
# # 将ply转换成txt
# with open("../reconstruction/dense/pmvs/models/option-0000.ply", "r+") as f:
# lines = f.readlines()
# with open('../reconstruction/dense/pmvs/models/dense.txt', "w") as f:
# for i in range(13, len(lines)):
# if lines[i] != '':
# f.write(" ".join(lines[i].split()[:3]) + "\n")
self.showInVispy('../reconstruction/dense/pmvs/models/option-0000.ply')
def showFinal(self):
self.showInVispy(self.model_path + '/' + Start.getProjectName() + '.ply')
def callback1(self, i):
# self.label_3.setText("aa")
print("=============相机标定完成=============")
# self.mythead.terminate()
main_win.close()
main_win.show()
self.label_3.close()
self.push_button.close()
# self.textBrowser.close()
self.label_4.show()
self.reconsbtn.show()
self.label_2.setText("*------稀疏重建--------*")
def callback2(self, i):
# self.label_3.setText("aa")
print("=============稀疏重建完成=============")
main_win.close()
main_win.show()
self.label_4.close()
# self.reconsbtn.close()
# self.textBrowser.close()
self.label_5.show()
self.dense_recons_btn.show()
self.preview_sparse_btn.show()
self.label_2.setText("*------稠密重建--------*")
def callback3(self, i):
# self.label_3.setText("aa")
print("=============稠密重建完成=============")
main_win.close()
main_win.show()
self.label_5.close()
# self.densereconsbtn.close()
# self.previewsparsebtn.close()
# self.textBrowser.close()
self.label_2.setText("*------过滤点云--------*")
self.label_6.show()
self.filter_btn.show()
self.preview_dense_back_btn.show()
def callback4(self, i):
# self.label_3.setText("aa")
print("=============点云过滤完成=============")
main_win.close()
main_win.show()
self.label_6.close()
# self.filterbtn.close()
# self.previewdensebackbtn.close()
# self.textBrowser.close()
self.label_2.setText("*------完成--------*")
self.label_7.show()
self.finish_btn.show()
self.show_final_btn.show()
def getModelPath(self):
return self.model_path
class cali(QtCore.QThread): # 建立相机标定子线程
signal = QtCore.pyqtSignal(bool)
def __init__(self):
super(cali, self).__init__()
def run(self):
print("===========现在开始相机标定===========")
calibration.Cailbration()
# time.sleep(2)
self.signal.emit(True)
class rec(QtCore.QThread):
signal = QtCore.pyqtSignal(bool)
def __init__(self):
super(rec, self).__init__()
def run(self):
print("===========现在开始稀疏重建===========")
sfmui.sfm_rec()
# time.sleep(2)
self.signal.emit(True)
class DenseRec(QtCore.QThread):
signal = QtCore.pyqtSignal(bool)
def __init__(self):
super(DenseRec, self).__init__()
def run(self):
print("===========现在开始稠密重建===========")
PMVSui.denserec()
time.sleep(3)
self.signal.emit(True)
class PointFilt(QtCore.QThread):
signal = QtCore.pyqtSignal(bool)
def __init__(self):
super(PointFilt, self).__init__()
def run(self):
print("===========现在开始点云过滤===========")
#Dense_filterui.pointfilter(mainWin.getmodelpath(),Start.getprojectname())
# time.sleep(2)
self.signal.emit(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
Start = StartWin()
Start.show()
main_win = MainWin()
sys.exit(app.exec_())

@ -0,0 +1,628 @@
# -*- coding: utf-8 -*-
# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.13.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore
qt_resource_data = b"\
\x00\x00\x23\xb5\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\xc8\x00\x00\x00\xc8\x08\x06\x00\x00\x00\xad\x58\xae\x9e\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
\x01\x78\xa5\x3f\x76\x00\x00\x05\xfa\x69\x54\x58\x74\x58\x4d\x4c\
\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\
\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\
\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\
\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\
\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\
\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\
\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\
\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\
\x43\x6f\x72\x65\x20\x35\x2e\x36\x2d\x63\x31\x34\x35\x20\x37\x39\
\x2e\x31\x36\x33\x34\x39\x39\x2c\x20\x32\x30\x31\x38\x2f\x30\x38\
\x2f\x31\x33\x2d\x31\x36\x3a\x34\x30\x3a\x32\x32\x20\x20\x20\x20\
\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\
\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\
\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\
\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\x65\
\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\
\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\
\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\x20\
\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\
\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\
\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\x6d\
\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\x3a\
\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\
\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x20\x78\x6d\x6c\
\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\
\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\
\x74\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x70\
\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\
\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\
\x6f\x74\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x20\x78\x6d\
\x70\x3a\x43\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\x3d\x22\x41\
\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\
\x43\x20\x32\x30\x31\x39\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\
\x22\x20\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x65\x44\x61\x74\x65\
\x3d\x22\x32\x30\x32\x30\x2d\x30\x33\x2d\x32\x31\x54\x31\x39\x3a\
\x30\x36\x3a\x30\x33\x2b\x30\x38\x3a\x30\x30\x22\x20\x78\x6d\x70\
\x3a\x4d\x65\x74\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\
\x30\x32\x30\x2d\x30\x33\x2d\x32\x31\x54\x31\x39\x3a\x30\x36\x3a\
\x30\x33\x2b\x30\x38\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\x6f\
\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x30\x2d\x30\
\x33\x2d\x32\x31\x54\x31\x39\x3a\x30\x36\x3a\x30\x33\x2b\x30\x38\
\x3a\x30\x30\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x49\x6e\x73\x74\x61\
\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x37\
\x33\x64\x33\x65\x64\x66\x38\x2d\x33\x61\x65\x31\x2d\x36\x64\x34\
\x62\x2d\x39\x63\x35\x35\x2d\x65\x32\x64\x32\x64\x37\x30\x35\x37\
\x64\x36\x31\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x44\x6f\x63\x75\x6d\
\x65\x6e\x74\x49\x44\x3d\x22\x61\x64\x6f\x62\x65\x3a\x64\x6f\x63\
\x69\x64\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x36\x36\x32\
\x35\x65\x62\x36\x36\x2d\x33\x39\x33\x31\x2d\x64\x38\x34\x38\x2d\
\x38\x62\x35\x38\x2d\x34\x33\x61\x35\x30\x33\x35\x37\x36\x61\x61\
\x65\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x4f\x72\x69\x67\x69\x6e\x61\
\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\
\x2e\x64\x69\x64\x3a\x62\x65\x61\x66\x36\x32\x39\x35\x2d\x63\x39\
\x33\x33\x2d\x33\x31\x34\x65\x2d\x62\x66\x66\x65\x2d\x63\x34\x31\
\x34\x37\x63\x32\x33\x34\x62\x35\x36\x22\x20\x64\x63\x3a\x66\x6f\
\x72\x6d\x61\x74\x3d\x22\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\
\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\x72\
\x4d\x6f\x64\x65\x3d\x22\x33\x22\x20\x70\x68\x6f\x74\x6f\x73\x68\
\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\x73\
\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2d\x32\x2e\x31\
\x22\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\x74\x6f\x72\
\x79\x3e\x20\x3c\x72\x64\x66\x3a\x53\x65\x71\x3e\x20\x3c\x72\x64\
\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\
\x6e\x3d\x22\x63\x72\x65\x61\x74\x65\x64\x22\x20\x73\x74\x45\x76\
\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\
\x70\x2e\x69\x69\x64\x3a\x62\x65\x61\x66\x36\x32\x39\x35\x2d\x63\
\x39\x33\x33\x2d\x33\x31\x34\x65\x2d\x62\x66\x66\x65\x2d\x63\x34\
\x31\x34\x37\x63\x32\x33\x34\x62\x35\x36\x22\x20\x73\x74\x45\x76\
\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x30\x2d\x30\x33\x2d\
\x32\x31\x54\x31\x39\x3a\x30\x36\x3a\x30\x33\x2b\x30\x38\x3a\x30\
\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\
\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\
\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x32\x30\x31\x39\x20\
\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x2f\x3e\x20\x3c\x72\x64\
\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\
\x6e\x3d\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\
\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\
\x69\x69\x64\x3a\x37\x33\x64\x33\x65\x64\x66\x38\x2d\x33\x61\x65\
\x31\x2d\x36\x64\x34\x62\x2d\x39\x63\x35\x35\x2d\x65\x32\x64\x32\
\x64\x37\x30\x35\x37\x64\x36\x31\x22\x20\x73\x74\x45\x76\x74\x3a\
\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x30\x2d\x30\x33\x2d\x32\x31\
\x54\x31\x39\x3a\x30\x36\x3a\x30\x33\x2b\x30\x38\x3a\x30\x30\x22\
\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\
\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\
\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x32\x30\x31\x39\x20\x28\x57\
\x69\x6e\x64\x6f\x77\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\
\x68\x61\x6e\x67\x65\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x2f\x72\
\x64\x66\x3a\x53\x65\x71\x3e\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\
\x48\x69\x73\x74\x6f\x72\x79\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x44\
\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x20\x3c\x2f\x72\x64\
\x66\x3a\x52\x44\x46\x3e\x20\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\x65\
\x74\x61\x3e\x20\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x65\x6e\
\x64\x3d\x22\x72\x22\x3f\x3e\x0f\xe2\x86\x18\x00\x00\x1d\x61\x49\
\x44\x41\x54\x78\x9c\xed\x9d\x79\xb8\x1d\x45\x99\x87\xdf\x9b\x4e\
\x62\x12\x03\x84\x2c\x6c\x82\x5c\x43\xc0\x88\x04\x54\x32\x20\x5b\
\x00\x25\x2c\x91\x45\xb6\xd1\x01\x71\x64\x51\x14\x88\xb8\x04\x71\
\xc6\x05\x82\x0e\xca\xe6\x06\xc8\x00\x22\xe2\x00\x02\x01\x64\xc7\
\x05\x21\x28\x44\xd9\x04\x13\x96\x40\x10\x6e\x42\x24\x0b\x81\x04\
\x12\xc2\x92\xf4\x3d\xf3\xc7\xef\x1c\x72\x52\xa7\xba\xcf\xe9\xbd\
\xcf\xb9\xf5\x3e\x4f\x3f\xf7\xb9\xbd\x54\xd7\xe9\xae\xaf\xab\xea\
\xab\x6f\xe9\xaa\x54\x2a\x38\x1c\x0e\x3b\xfd\x8a\xae\x80\xc3\x51\
\x66\x9c\x80\x38\x1c\x21\x38\x01\x71\x38\x42\x70\x02\xe2\x70\x84\
\xe0\x04\xc4\xe1\x08\xc1\x09\x88\xc3\x11\x82\x13\x10\x87\x23\x04\
\x27\x20\x0e\x47\x08\x4e\x40\x1c\x8e\x10\x9c\x80\x38\x1c\x21\x38\
\x01\x71\x38\x42\xe8\x1f\xf9\x82\xae\xae\x2c\xea\xe1\x70\xe4\xc6\
\xea\x08\xf6\x87\x91\x05\xc4\x11\x89\x41\x40\x37\x30\xba\xfa\xf7\
\xbd\xc0\x06\xc0\x48\x60\x44\x75\x1b\x0a\x0c\xa9\x9e\xbf\x0e\x7a\
\x27\xab\x81\xe5\xd5\x7d\x2b\x81\x15\xc0\xcb\x75\xdb\x22\x60\x1e\
\xd0\x03\x3c\x57\xfd\xfb\x66\xa6\xbf\xa4\x8f\xd2\x15\xd5\x9a\xd7\
\xf5\x20\x81\x8c\x06\xc6\x03\xe3\xaa\xdb\xb6\x48\x28\xf2\x78\x60\
\x15\x24\x24\x33\x81\x59\xd5\xed\x61\x24\x3c\x0e\x83\x28\x3d\x88\
\x13\x90\x78\xf4\x03\x3e\x02\xec\x0a\x4c\x00\x76\x02\x36\x2a\xb4\
\x46\x76\x16\x02\x7f\x05\xfe\x0c\xdc\x07\x3c\x0a\xf8\x85\xd6\xa8\
\x04\x38\x01\xc9\x86\x91\xc0\x3e\xc0\x7e\xc0\xde\xc0\xa8\x62\xab\
\x13\x8b\x57\x80\xbb\x80\xdb\x81\x3b\x80\x25\xc5\x56\xa7\x18\x9c\
\x80\xa4\xc7\x08\xe0\x10\xe0\x70\xe0\x63\x80\x97\x52\xb9\x15\x34\
\x97\x58\x02\xbc\x0e\xbc\x0a\xf4\xb2\x66\xee\x51\x9b\x8b\xf4\x03\
\xd6\x03\xde\xcd\x9a\x79\x4b\x5a\x2f\xc0\x07\xa6\x03\xd7\x02\x37\
\x56\xeb\xd3\x27\x70\x02\x92\x8c\x77\x01\x07\x02\x9f\x03\x26\x02\
\x03\x62\x96\xf3\x02\x9a\x0b\xcc\x41\x73\x81\xe7\xd1\x3c\x61\x01\
\x6a\x8c\x71\x5c\x39\xbb\x90\x90\x6c\x8c\xe6\x37\xef\x43\x73\x9f\
\x2d\xd1\xbc\x67\xb3\x98\x75\x5d\x85\x7a\x96\xcb\x81\x9b\xaa\xff\
\x77\x2c\x4e\x40\xe2\xb1\x15\x70\x3c\x12\x8c\xe1\x11\xaf\x5d\x08\
\xdc\xcf\x9a\x71\xfe\x4c\x60\x69\x9a\x95\x6b\x91\xf5\x91\x72\xe0\
\xc3\x68\x7e\xb4\x0b\xd1\xe7\x46\x8b\x81\x2b\x80\x5f\x00\xcf\xa4\
\x5a\xbb\x92\xe0\x04\x24\x1a\xbb\x01\x53\x80\xfd\x69\x7d\xe1\xf4\
\x55\xf4\xc5\xfd\x1d\x70\x37\xe5\xd6\x16\x8d\x46\xc3\xc3\x7d\x81\
\xbd\xd0\x90\xad\x15\x7a\x81\xdb\x80\x73\x81\xbf\x64\x53\xb5\x62\
\x70\x02\xd2\x9c\x2e\x34\xb7\xf8\x06\xb0\x43\x8b\xd7\xcc\x05\xae\
\x07\x6e\x01\x66\xa0\xf9\x42\xbb\xd1\x1f\xd8\x19\x38\x00\xcd\xab\
\x36\x6f\xf1\xba\x87\x81\xb3\x81\x1b\x90\xe0\xb4\x35\x4e\x40\x82\
\xe9\x42\x8d\xe3\x7b\x68\x28\xd2\x8c\xc5\xc0\x6f\xd0\x44\xf6\x6f\
\xc4\x9b\x37\x94\x95\x2e\xe0\xa3\xc0\xa7\x80\xff\x40\x0b\x98\xcd\
\x98\x09\x7c\x17\x7d\x24\xda\xf6\x59\x38\x01\xb1\xb3\x17\xf0\x03\
\xb4\x98\x17\x46\x2f\xf0\x47\x34\x06\xbf\x99\x0e\x9f\xb0\x56\x19\
\x00\x1c\x04\x1c\x87\x14\x13\xcd\x86\x9a\x0f\x03\xff\x8d\x9e\x53\
\xdb\xe1\x04\x64\x6d\xc6\xa0\xe1\xc1\xc1\x4d\xce\x5b\x0e\x5c\x06\
\xfc\x14\x69\x9b\xfa\x2a\xdd\xc0\xc9\xc0\xb1\x48\xdd\x1c\xc6\x6f\
\xd1\x30\xf5\xd9\x8c\xeb\x94\x2a\x4e\x40\xc4\x50\xe0\x74\x60\x32\
\x30\x30\xe4\xbc\x17\x81\x9f\x01\x17\x03\xcb\x32\xaf\x55\xfb\x30\
\x0c\x69\xf5\xbe\x0c\x6c\x12\x72\xde\xdb\xc0\xf9\xe8\x59\xaf\xc8\
\xbc\x56\x29\xe0\x04\x44\xab\xdd\x17\x11\x3e\x09\x5d\x84\x86\x5c\
\x97\x00\x6f\xe4\x51\xa9\x36\x65\x10\x12\x94\xff\x02\x36\x0c\x39\
\x6f\x2e\x70\x02\x5a\xa1\x2f\x35\x7d\x59\x40\x46\x01\x3f\x01\x8e\
\x08\x39\x67\x19\xf0\x43\xe0\x02\xb4\x8a\xed\x68\x8d\x77\x03\x27\
\x01\xdf\x44\xbd\x4b\x10\x57\x03\x5f\x45\x0a\x8e\x52\xd2\x57\x05\
\x64\x12\xf0\x4b\x82\xbf\x72\xab\x51\x6f\x71\x1a\x7d\xd4\x06\x29\
\x25\x46\x02\x53\x81\x2f\x10\xec\x2e\xb1\x18\x38\x9a\x92\xf6\x26\
\x51\x04\xa4\x13\x3c\x0a\x07\xa1\xde\xe0\x36\x82\x85\xe3\x5e\x64\
\x7d\x7b\x22\x4e\x38\x92\xb2\x04\x3d\xc7\x0f\xa3\xe7\x6a\x63\x03\
\xf4\x3e\x2e\x00\x06\xe7\x54\xaf\x4c\x68\xf7\x1e\x64\x2c\x5a\xbc\
\xfb\x60\xc0\xf1\xa5\xc0\x29\xa8\x67\x69\x5b\xbd\x7d\x89\xe9\x42\
\x3d\xc5\xb9\xc8\xcc\xc5\xc6\x13\xc0\x61\xc0\xec\xbc\x2a\xd5\x8c\
\xbe\xd2\x83\x1c\x02\x3c\x48\xb0\x70\xdc\x00\x6c\x8d\x54\xb7\x4e\
\x38\xb2\xa1\x82\x3e\x3e\x5b\xa3\xe7\x6d\xe3\x83\xe8\x3d\x1d\x9a\
\x57\xa5\xd2\xa4\x1d\x05\xc4\x43\x93\xec\xeb\xb1\xeb\xe9\x5f\x03\
\x8e\x42\x5f\xad\x85\x39\xd6\xab\x2f\xb3\x10\x3d\xef\xa3\xd0\xf3\
\x37\x59\x07\x98\x86\xd6\xa3\xd2\x72\x19\xc8\x85\x76\x1b\x62\x0d\
\x45\x66\x1f\x93\x02\x8e\xcf\x00\x3e\x83\x4c\xcb\x1d\xc5\xd0\x0d\
\x5c\x85\x6c\xbe\x6c\xdc\x81\xcc\x5b\x0a\x5b\x33\xe9\xd4\x21\xd6\
\x26\xc8\x75\xd4\x26\x1c\x15\xe0\x2c\x60\x77\x9c\x70\x14\x4d\x0f\
\x7a\x0f\x67\x61\x1f\xda\x4e\x42\xd6\xc1\x61\x8b\x8f\xa5\xa1\x5d\
\x7a\x90\x6d\x80\x3b\x81\x4d\x2d\xc7\x96\x23\x1f\x8e\x1b\xf3\xac\
\x90\xa3\x25\x0e\x41\x4e\x58\xeb\x5a\x8e\xcd\x47\xc2\x32\x2b\xd7\
\x1a\xd1\x79\xeb\x20\xff\x86\xfc\x2e\x6c\x4e\x4c\x73\x90\xf7\x5f\
\x69\x34\x24\x8e\x06\xc6\x22\x2f\xc5\xf7\x5b\x8e\xbd\x82\xac\x1e\
\x1e\xcc\xb3\x42\x9d\x34\xc4\xda\x0d\x39\x26\xd9\x84\xe3\x2f\xc8\
\x5c\xdb\x09\x47\xb9\x99\x8d\xa2\xbe\xfc\xc9\x72\x6c\x38\xb2\x08\
\x9e\x90\x6b\x8d\x22\x50\x66\x01\xd9\x0b\xf5\x1c\xb6\xee\xf9\x37\
\xc8\x2c\xfb\x95\x5c\x6b\xe4\x88\xcb\x52\x34\x9c\xfa\xb5\xe5\xd8\
\xba\x68\xf8\x3c\x31\xd7\x1a\xb5\x48\x59\x05\x64\x37\xe4\x8b\x31\
\xc4\x72\xec\x3c\xe0\x48\xe0\xad\x5c\x6b\xe4\x48\xca\xdb\x68\xae\
\x78\x9e\xe5\xd8\x10\x34\x0c\xdb\x2d\xc7\xfa\xb4\x44\x19\x05\x64\
\x07\xe0\x56\xec\xc2\x31\x15\xf9\x8f\xbb\x85\xbf\xf6\xa4\x82\xde\
\xdf\x54\xcb\xb1\x21\xe8\xbd\xb7\xea\x02\x9d\x0b\x65\x9b\xa4\x8f\
\x03\xee\x41\xa1\x6d\xea\xa9\x20\xc7\x9c\x73\xb3\xbc\xb9\x23\x57\
\x4e\x41\xaa\x60\xb3\x41\xbd\x02\xec\x41\x86\xda\xad\x76\xd5\x62\
\x6d\x8a\xc2\x64\xda\x54\xb9\x53\xb0\x77\xcd\x8e\xf6\x66\x0a\x70\
\x8e\x65\xff\x7c\x34\xb1\x9f\x9f\xc5\x4d\xdb\x51\x8b\x35\x04\x59\
\x7f\xda\x84\x63\x2a\x4e\x38\x3a\x95\x73\xb1\x0f\xb7\x36\x45\x2b\
\xee\xb6\x61\x76\xae\x94\x41\x40\x3c\xa4\x95\xda\xce\x72\xec\x3c\
\xe4\xca\xe9\xe8\x5c\x4e\xc7\xfe\x01\x1c\x87\xda\x45\xa1\xb6\x5b\
\x65\x10\x90\xff\x41\x8b\x7d\x26\x57\xa1\x71\xaa\xa3\xf3\x39\x05\
\xbd\x6f\x93\x03\x81\x33\x73\xae\xcb\x5a\x14\x3d\x07\x39\x14\x59\
\x79\x9a\x85\xde\x8d\x56\x58\xdf\x4e\xf3\x66\x8e\x52\x33\x10\xad\
\x7b\xed\x69\xec\xaf\xa0\x20\x77\x41\xe6\xf4\x91\x69\x97\x49\xfa\
\x07\x50\x30\x36\x73\x21\xf0\x59\x64\x09\xfa\x52\x5a\x37\x72\xb4\
\x0d\xa3\x90\x45\xf6\x18\x63\xff\x72\x60\x47\xe0\xa9\x34\x6e\xd2\
\x0e\x93\xf4\xc1\xc8\x9f\xc3\x14\x8e\xd7\x50\xe4\x43\x27\x1c\x7d\
\x93\x97\xd0\xb0\xca\xf4\x29\x59\x07\xb5\x97\xdc\xdd\x77\x8b\x12\
\x90\xb3\x91\x17\x5a\x3d\x15\xe0\x18\x9c\x6d\x55\x5f\xe7\x29\xd4\
\x0e\xcc\xcf\xfc\xd6\xa8\xdd\xe4\x4a\x11\x02\x32\x09\x39\xfd\x9b\
\xd4\x82\x23\x3b\x1c\x37\x60\x17\x86\x13\x81\x4f\xe4\x59\x91\xbc\
\xe7\x20\x23\x81\xc7\x69\x8c\x3e\xf2\x57\x64\x87\xd3\xe7\xf3\xe7\
\x39\xde\xc1\x43\x56\x15\xa6\x7d\xd6\x22\xa4\x02\x8e\x3d\x0c\x2f\
\xf3\x1c\xe4\x27\x34\x0a\xc7\x6b\x28\xd0\x9b\x13\x0e\x47\x3d\x3e\
\x72\x9f\x36\x13\x11\x6d\x88\xda\x51\x2e\xe4\x29\x20\xfb\x22\x2b\
\x5c\x93\x13\xe9\xdb\xc1\xa2\x1d\xc1\xcc\xc3\x3e\x1c\x3f\x82\xe0\
\xb8\x04\xa9\x92\xd7\x10\x6b\x28\x1a\x5a\x99\xb1\x72\xaf\x47\x3a\
\x6e\x87\x23\x8c\x69\x28\x6a\x4a\x3d\xf3\x50\x48\xa1\xc8\xc1\x1f\
\xca\x38\xc4\x3a\x8d\x46\xe1\x58\x8a\x22\xaf\x3b\x1c\xcd\x98\x4c\
\xe3\x50\xeb\xbd\xe4\x60\x86\x94\x87\x80\x6c\x89\x5d\x10\xa6\xe0\
\xe2\x56\x39\x5a\x63\x21\x6a\x2f\x26\x93\x51\xfb\xca\x8c\x3c\x04\
\xe4\x1c\x94\x5a\xb9\x9e\xe9\x28\xda\x85\xc3\xd1\x2a\x97\xa3\x76\
\x53\xcf\x40\x32\xf6\x11\xca\x7a\x0e\x32\x11\xf8\x83\xb1\xcf\x07\
\x3e\x84\xe6\x24\x0e\x47\x14\xb6\x01\x1e\xa3\xd1\xc2\x77\x6f\x22\
\xa4\x83\x2b\xcb\x1c\xa4\x0b\x59\xea\x9a\x5c\x82\x13\x0e\x47\x3c\
\x1e\x47\xed\xc7\xe4\x4c\x1a\x0d\x5e\x53\x21\xcb\x1e\xe4\x20\xe4\
\x88\x5f\xcf\x32\x34\x66\x74\x29\x08\x1c\x71\x19\x81\x0c\x5a\x87\
\x19\xfb\x3f\x89\x02\x7d\x34\xa5\x0c\x3d\x48\x17\x70\x86\x65\xff\
\x0f\x70\xc2\xe1\x48\xc6\xcb\xa8\x1d\x99\x9c\x41\x06\xed\x39\xab\
\x1e\xe4\x30\xa4\xbb\xae\x67\x11\xb0\x05\x2e\xed\x19\x00\xbe\xbe\
\x84\x5f\x40\x66\xff\x9b\xa3\x58\xb5\x43\x90\x69\xf7\x7c\xa4\xe7\
\x7f\x0c\xb8\xc4\x83\x37\x0b\xaa\x66\x59\x19\x02\x3c\x47\xa3\x55\
\xc6\xe1\x68\x6d\x2d\x94\x28\x3d\x08\x95\x4a\x25\xd2\xe6\x41\x2b\
\xdb\x03\x1e\x54\x8c\xed\x2b\x2d\x5e\xdb\xd1\x5b\xf5\xcf\x31\xe8\
\x83\x51\x69\x61\x9b\x0d\xec\x5b\x74\xbd\x4b\xb8\x9d\xec\x35\xb6\
\xb1\x07\x5a\xb9\x36\x4a\x7b\xcf\xa2\x07\xd9\x03\x19\x99\xd5\xb3\
\x00\x18\x4d\x1f\xff\x12\xfa\x4a\x03\x77\x1e\x7a\x46\x51\xb9\x1c\
\xf8\x8e\x07\xff\xf2\xe5\x50\x76\x28\xb2\x50\x78\x11\xf8\x99\xd7\
\xb8\x90\xd6\xe9\x0c\x42\xbd\xc8\xc6\xc6\xfe\x3d\x81\xe9\x61\x17\
\x16\xdd\x83\xdc\x64\x91\xec\x53\x4a\xf0\xc5\x29\x74\x43\x39\xfd\
\x96\xd0\x5a\xaf\x11\xb4\x3d\x0b\x7c\x1a\xa9\xca\xeb\xf7\xff\x13\
\x18\x59\xf4\x6f\x2c\x60\x9b\xe2\x35\xb6\xb5\x9b\x9a\x5d\x57\x64\
\x0f\xb2\x15\x72\x78\xa9\x9f\x2c\xad\x00\x36\x43\x1a\xac\x3e\x89\
\xaf\xa4\x32\x73\x08\xce\x0a\x9b\x06\x67\x7a\xf0\xad\x0c\xcb\x2f\
\x23\xc3\x80\x17\x50\x4f\x5a\xa3\x17\x45\x94\x9f\x13\x74\x51\x91\
\x5a\xac\x63\x2d\x65\x5e\x4a\xdf\x16\x8e\x01\x28\x77\x78\x96\xc2\
\x01\x52\xab\xf7\x35\x96\xd1\xb8\x2e\xd2\x0f\x38\x2e\xad\x1b\xa4\
\xd9\x83\x0c\x44\xd2\xbc\x41\xdd\xbe\x5e\xa4\xb9\xea\x89\x51\xb7\
\xb6\xc7\xd7\x33\xb9\x8b\x7c\x82\x32\x3f\xe5\x35\xba\x31\xf7\x05\
\xba\xd1\x10\xb3\xfe\xc3\xbc\x18\x8d\x5a\xac\x51\x71\x8a\xea\x41\
\x0e\x60\x6d\xe1\x00\x35\x8e\x9e\x14\xef\xd1\x36\xf8\x52\x45\x4e\
\xa7\x35\xe1\x78\x1c\xf8\x1e\x70\x3c\x72\x06\x8a\xb3\x56\x74\x77\
\x8c\x6b\x3a\x81\x1e\x1a\xcd\x4c\x36\xc0\x1e\x6b\x2d\x3a\x29\x4e\
\xd2\xef\xb0\x4c\x98\x0e\x2d\xc1\x44\x2e\xf7\x0d\x69\x99\xe6\xd1\
\x7c\xd2\xbd\x12\x4d\xba\xbb\x8c\xeb\xd7\x41\x66\x3a\xab\x5a\x28\
\xa3\xb6\x2d\x46\x6b\x00\x63\x8a\xfe\xfd\x05\x6c\x87\x7a\x8d\x6d\
\xef\xce\xa0\xf3\x8b\x98\xa4\x8f\x40\xaa\xdc\x01\x75\xfb\x42\xbb\
\xb9\x2c\xf1\xf5\x1c\xc6\x01\xdf\xac\xfe\x9d\x0f\x5c\x01\xdc\xe8\
\x65\xa8\x6a\xae\xde\xf7\x60\x1a\x17\x49\x83\x38\xd6\x53\x9e\xf1\
\xa0\xf2\x26\xa2\xe4\x32\x5e\x84\x6a\xbc\x8e\x02\x1e\x5c\xea\xe9\
\x9d\xd4\xca\xda\x02\xa5\xb3\x1b\x0c\xfc\x1d\x78\xc2\x83\xd5\x11\
\xca\x2d\x33\x03\xd1\x07\xa9\x7e\xe1\x70\x15\x5a\x7c\x6d\xe8\x8d\
\x8b\x50\xf3\x1e\x67\x91\xe0\x9f\x14\xf4\xf5\x5e\x17\x45\xe8\xeb\
\xc5\xae\x26\xdd\x3e\xa3\xfb\x7e\x00\x65\xe1\x6d\xf5\x8b\x7f\x46\
\x0b\x65\x7a\x11\xca\x33\xb7\xd7\x81\x6f\x57\xcb\x38\xc1\x72\xfc\
\xda\x12\x7c\xf9\xd3\xdc\x7e\x6c\x69\x83\x9f\xb7\x9d\x1b\xa5\xbd\
\xa7\x25\x20\x7f\xb4\x54\x6e\xe7\xbc\x1f\x12\x52\xef\x3d\xdb\xa4\
\xe1\xbc\x01\x5c\x88\xdc\x35\xfb\x27\xbc\x5f\x17\xea\xa1\x7e\x8c\
\x7a\xa6\x56\x1a\x6e\x2f\x70\x6b\x8b\xe5\xdf\xd7\x62\x99\x61\xdb\
\x3c\xb4\x88\x68\x3b\x76\x72\x09\x1a\x76\x5a\xdb\x4e\x96\x36\x78\
\x57\x19\x04\x64\x84\x07\xab\x8d\x8a\xf5\x78\xc6\xb8\x3a\x07\xe1\
\x18\x87\x1a\x7f\x94\xc6\xf3\x14\x0a\x9c\xfc\x9e\x88\xf7\x1a\x8e\
\xd2\x89\x4d\x8f\x78\xbf\x0a\x70\x51\x8b\xf7\xd8\x25\xc6\xef\x89\
\xba\x3d\x45\xc2\x8f\x44\x89\xb6\x2e\x0f\xe6\x1a\xed\x70\xb5\x67\
\x59\x40\x8d\xd2\xde\xd3\xd0\xcd\xef\xc3\x3b\xef\xf4\x1d\xa6\xa1\
\x17\x90\x0b\xbe\xbe\xe4\x37\x23\xf3\x83\x28\x8c\x45\xe3\xf5\x33\
\x7c\x78\x00\xc5\x0a\x7e\x12\x98\x8b\x26\xd0\xbd\xa8\xec\x41\x48\
\x33\xb2\x1d\xb0\x2b\x4a\x13\x36\xd4\x56\x60\x78\x35\xb9\xc0\x83\
\xaf\xb4\x78\xfe\x30\x1a\x9f\x6b\x3d\x2b\x49\x27\x7f\x86\x47\x67\
\xcc\x45\x2a\xa8\xdd\x7d\xbd\x6e\x9f\x87\x9c\xa9\xae\x8e\x5f\x6a\
\xf2\x1e\xe4\x4a\x43\x6a\x2b\x1e\xec\x9a\x63\xcf\x31\x00\xb8\x85\
\x6c\xbf\xb4\x49\xb7\x55\xc0\x5e\x11\x7f\xd7\xa6\xc8\x0a\xc1\x56\
\xde\x73\x68\x02\x7a\x11\x4a\x66\x9a\xa4\x07\x59\xbf\x04\x5f\xff\
\xb4\xb6\x5d\x2d\x6d\xf1\xaa\x24\x3d\x48\x52\x01\xe9\xe7\xc1\x22\
\xa3\x42\xcb\xbc\x1c\xbb\x6d\xb4\x76\x50\xb4\x00\x84\x6d\x8f\x03\
\xbb\xc4\xfc\x6d\xa7\x59\xca\x5b\x05\x1c\x52\x77\xce\xce\xc0\x6f\
\x89\x2f\x28\x0b\x80\xaf\x02\x63\x4b\xd0\xc0\x93\x6e\xfd\xab\xed\
\xaf\xbe\x3d\x2e\xaa\xb6\xd3\x42\x04\x64\xbc\x45\x62\xaf\xcb\x51\
\x38\xd6\x8f\xd9\x28\xf2\xd8\x7a\x91\x13\x4f\x52\x45\xc0\x57\x50\
\x8f\xb1\x02\x98\x09\x1c\x1e\x70\xde\x5e\x28\xf1\x65\xdc\xfa\xae\
\x46\x79\xcc\xdb\x5d\x50\xae\xb3\xb4\xc9\xf1\x45\x09\xc8\xd7\x2c\
\x95\x39\x26\x47\x01\xb9\xb3\xc9\x4b\x5f\x81\x42\xc3\xfc\xb4\xda\
\xc8\xf2\x10\x8c\xd5\xc0\x2f\x30\x5e\x4a\xc2\xdf\xe9\x01\xeb\xd1\
\x44\xf1\x81\xec\xbd\x7e\x9e\xb0\xfe\x6f\x55\xeb\x3f\x81\xf6\x9c\
\xc0\x1f\x6d\x69\x93\x5f\x2b\x4a\x40\xae\xb7\x54\x66\x8b\x9c\x84\
\x63\x22\xcd\x87\x15\xa7\xd5\x9d\xff\x2e\x34\x1c\x7b\x3e\x61\x03\
\x0a\xdb\x6e\x25\xa3\x75\x96\x16\x9f\xc9\x20\x64\x72\x92\xd6\xef\
\x79\x00\x99\x6c\x78\x25\x68\xf8\xad\x6e\x5b\x58\xda\xe4\xf5\x71\
\x05\x24\xe9\x4a\xfa\x02\x60\xa3\xba\xff\x17\xd2\xe8\xc0\x92\x09\
\xbe\x1a\xe3\xfe\x21\xa7\xf4\x78\xf0\x3e\xcb\x75\x43\xd0\x4b\xff\
\x38\x5a\x0b\xd9\x81\x77\xda\x57\x64\xde\x04\xfe\x84\x86\x36\xd3\
\x3c\xad\x50\x17\x86\xaf\xb0\x38\xb3\x52\x2e\xb6\x82\x7e\xd7\xff\
\x22\x4b\x84\x57\x52\x2e\x3f\x0b\x42\xdb\x65\x5e\x29\xd8\xc6\xd0\
\x68\x73\x9f\x4b\xac\x5d\x5f\x1a\x9c\x7f\x35\x39\x6d\x9c\xd7\x42\
\x78\x21\x5f\x9e\x8e\x7b\xa1\xbc\xdc\x5b\x23\xff\xf0\x51\x34\x1a\
\x72\xf6\x22\xf3\x99\x39\xa8\xdc\x19\xc0\x3d\x5e\xf3\x7a\xe4\x86\
\x2f\xc3\xc8\x3f\x87\x9c\x92\x54\x35\xbc\x04\xb8\x18\x79\x30\x2e\
\x4e\x50\x4e\xd6\xd8\x62\xf9\x6e\x89\x16\x91\x23\x09\x48\x92\x75\
\x90\xed\x2d\xfb\xee\x4f\x50\x5e\x14\xbe\xdc\xe4\xf8\xaf\x68\x31\
\x53\x95\xa7\xb9\xc9\x25\xd5\xad\xe6\xbf\xb1\x31\xb2\x2f\xab\x45\
\x84\x7c\x03\xad\x46\xbf\xe8\x95\x7b\xcd\x60\x36\xc1\x42\xf0\x0a\
\xb0\x3b\x5a\x17\x38\x10\xad\xe7\x44\xed\x39\x47\x22\xa7\xac\x13\
\x7d\xb8\x12\x99\xab\xdc\x17\xbf\xba\x99\x31\x83\x46\x01\xd9\x9e\
\xaa\x80\x44\x22\xc1\x1c\xe4\x2c\xcb\x58\x6f\xf7\x9c\xc6\xda\xaf\
\x12\x3c\x6e\x5e\x05\x6c\x55\x82\xb1\x70\x21\x1b\xb2\xbf\xb2\x3d\
\x97\x49\xc6\x79\xbb\xa0\xa8\x97\xa6\xfb\x6e\x54\x85\xc4\x1f\x81\
\x8f\x17\xfd\xbb\x8d\x6d\x77\xaf\xb1\x6d\x9e\x55\x3b\x9e\xd7\x1c\
\xe4\x76\x1a\x73\x34\x8c\x20\xe3\x31\xaa\x2f\xa7\xfc\x30\xdf\x87\
\xb3\x3d\x38\x35\xcb\x3a\x94\x1d\x5f\xf9\x33\x3e\x81\x86\x8b\x33\
\x81\x6b\xbc\x80\xa1\x97\xaf\x9e\xe4\x28\x94\xac\x26\xee\xf0\xab\
\x02\x3c\x88\xe6\x63\x3f\xf2\x14\xbb\xaa\x48\x86\xd3\x58\x87\x3b\
\xa9\xb6\xd7\xbc\xe6\x20\x73\x51\x08\xfa\x1a\x2f\x18\xff\x67\x82\
\x2f\x35\xe6\x97\x42\x4e\xf9\x06\x5a\x38\xfb\xa7\xa7\x17\xe7\x68\
\x01\x1f\xae\x05\xfe\x3d\x85\xa2\x16\xa2\x15\xfe\xf3\xbd\x62\x23\
\xad\xcc\x43\xee\x16\xf5\xff\x6f\x0e\xf9\x78\x14\x0e\x36\x6e\x0e\
\xfa\x52\x65\x8a\x2f\xfb\xa4\xdd\x9b\x9c\x76\x36\xf0\x34\xf0\x37\
\x1f\x7e\x58\xd5\xec\x38\x9a\xd3\x9b\x52\x39\x1b\x01\x53\x81\x39\
\x3e\x5c\xe9\x87\x6b\x1a\xb3\xc4\x6c\x8f\x9b\x11\x23\x8d\x74\x5c\
\x01\xe9\xa6\x31\x58\x70\xf4\x09\x50\x74\x46\xd0\x9a\xdf\x75\x3f\
\xa4\xbe\x3d\x15\x98\xe5\xc3\x65\xbe\x45\xe5\xeb\x58\x8b\xb4\x03\
\x78\x8c\x40\x29\xf7\x6e\xf6\x61\x9a\x2f\xdb\xb2\x3c\x31\xdb\x63\
\x17\x6a\xb7\x91\x48\x22\x20\x26\xcf\xc5\x2c\x2b\x0a\x13\x63\x5e\
\x77\x0c\x30\xd3\x87\x0b\x7d\x69\x62\x1c\x75\x54\x83\x4b\x8c\x0a\
\x39\x65\x2e\xf2\x7c\x8c\x33\x64\xed\x87\x34\x4a\x4f\xfa\x70\x4e\
\x8e\xcf\xdf\xd6\x1e\xbb\xa3\x16\x92\xa6\x80\x3c\x1f\xb3\xac\x28\
\x1c\x91\xe0\xda\xa1\xc8\xb3\xee\x6e\x5f\x6b\x38\x8e\x35\x6c\x8c\
\xa2\x3e\x06\xf1\x90\xa7\x90\x4e\x1f\x42\xae\xcb\xab\x62\xdc\x63\
\x1d\x94\x25\xea\xef\xbe\xca\xc9\x1a\x5b\x7b\xec\x8e\x5a\x48\x5c\
\x01\xd9\xdc\xb2\xaf\x27\x66\x59\x51\x48\x23\x7c\xce\x38\x34\xec\
\xfa\x9a\x1f\x7f\x05\xbd\xd3\xb8\x0e\xd9\x7a\x05\x31\x1d\xc0\x83\
\x99\x9e\x1c\xc5\x36\x43\x1f\xab\x7f\xc6\xb8\xd7\x66\xc0\x0c\x1f\
\x3e\x15\xe3\xda\x28\xf4\x58\xf6\x75\x47\x2d\x24\xae\x80\x98\xe1\
\x7d\xa0\x2e\x40\x40\x16\xf8\xe9\xc6\x7c\x1a\x84\x62\xe4\x9e\x9e\
\x62\x99\x6d\x87\x0f\xc3\x7d\xb8\x06\xcd\xd7\x82\x58\x89\x6c\xb2\
\xde\xc1\x93\x09\xf9\x6f\x50\x4f\xf0\x45\xa2\x0b\xca\x60\xe0\x1a\
\x3f\xd9\x88\xa0\x19\xb6\xf6\x18\x36\x8c\xb4\x12\x77\x25\x7d\xb8\
\xf1\x7f\x2f\xd9\xeb\xbe\xf7\x6b\x72\xfc\x66\x60\x3c\xf0\x9e\x08\
\x65\x7e\xdb\x57\x24\x8c\x2f\x7a\xe9\x69\x71\x32\xa5\x3a\x5f\x98\
\x84\x3c\x39\xc7\xa0\xb5\x8b\x38\x3d\xe1\x60\xa4\xb8\x58\xa7\xc9\
\x79\x0f\x79\xf0\xb0\xed\x80\x27\x6b\xe9\x8b\x7d\x05\xd6\xde\x0e\
\xcd\xf5\x3e\x1f\xa1\x3e\x57\xf8\xb0\xa9\x27\xcd\x63\xda\xbc\x8c\
\xde\x69\x7d\x27\x60\xb6\xdb\xe6\xc4\x5c\x49\x9f\x61\xac\x52\x2e\
\xce\x61\x85\xf8\x56\x42\x56\x75\xab\xe7\x0c\x40\x21\x38\x6f\xa3\
\xf5\x15\xe2\xd5\xc0\x27\x4b\xb0\xfa\xdb\xec\xf7\x0f\x04\x3e\x0b\
\x3c\xd3\xe2\xef\x4a\x6b\xdb\x31\x62\x3d\xb7\x43\xbd\x52\x94\x7b\
\x1c\x98\xd1\x73\x7b\xc9\x68\xa7\x33\x3c\xa2\xb5\xf9\xb8\x02\xf2\
\xb4\x71\xe3\xd9\x39\x34\x90\x39\x21\x0f\x78\x81\xe5\xfc\x2d\xd1\
\xd8\xda\x16\xfe\xc7\xb6\x6d\x5b\xb4\x10\x84\xfc\xf6\xfd\xd1\x42\
\x6c\x9e\x82\x51\x01\xbe\x9d\xa0\xce\xef\x47\x86\x8d\xad\xdc\xe7\
\x4d\x60\x9f\x0c\x9e\xdd\x6c\xa3\x9d\x3e\x9d\x97\x80\x98\xd1\x23\
\xee\xcf\xb8\x81\x6c\x80\xc6\x94\x41\x0f\xf8\xc6\x90\x6b\x4f\x24\
\xdc\x76\xab\xb6\xcd\x01\xd6\x2b\x5a\x18\x8c\xba\x77\xa1\x40\xcc\
\x51\x22\x2c\xa6\xb5\xdd\x00\x0c\x4e\xe1\x37\x1c\x45\xb0\x6f\x7d\
\xfd\xf6\x10\x30\x24\xe5\x67\x68\x8e\x74\xe6\x46\x15\x90\xb8\x93\
\xf4\x75\x8d\xff\xb3\x1e\xbf\x6f\x06\xbc\x3b\xe4\x78\xa0\x89\xb7\
\xa7\x18\x58\xe3\x80\x27\x9a\xdc\x63\x0c\x70\x56\xf4\xaa\x65\xca\
\x04\x14\x1d\x3f\xeb\xc8\xf0\x26\xbf\xf5\x14\xce\xf3\x8d\xa4\x05\
\x79\xf0\x7f\x48\xfb\xb8\xa2\xc9\xa9\xe3\x91\x2a\x39\x4d\x7c\xe3\
\xff\xf5\xa2\x16\x10\x57\x40\xcc\x55\xf4\x95\x31\xcb\x69\x95\xe1\
\xac\x31\x3d\xb7\x61\x9d\x44\xd6\xf0\x64\x87\xb3\x07\xcd\xb5\x2d\
\xc7\x97\x65\x8d\xc4\xd7\xcb\xbc\x23\xe7\xdb\xae\x44\x8e\x51\x9f\
\x4e\xb3\x50\x0f\x1e\x45\xc1\x25\x9a\x19\xb2\xfe\xcc\x8f\x33\x91\
\x0e\x26\x71\xbb\x8c\x2b\x20\xa6\xd5\x67\x9c\x85\xa3\x28\xbc\x07\
\x4d\x52\x83\x98\xd7\xac\x00\x4f\xce\x3e\xbb\x21\x63\xba\x30\x6e\
\x8f\x50\xaf\x4c\xf0\xf5\x5e\xae\x24\x9d\xb8\x57\xad\xb0\x04\x38\
\x1f\xb9\xab\x7e\xc9\xcb\x20\x9e\xb2\x27\x4f\xc7\x3d\x69\xde\x68\
\x6d\x79\xd0\xe3\x62\xb6\xcb\xb0\x51\x88\x95\xb8\x5d\xf7\x80\xe6\
\xa7\xa4\xca\x46\x21\xc7\x5e\xa3\xc5\x2f\x85\x07\x0b\x7c\xad\x7f\
\x9c\x13\x72\xda\x16\x3e\xec\xed\xc9\x57\xa2\x28\xb6\xa1\xb9\x59\
\x4d\x2f\x0a\x72\xb7\x10\x4d\x72\x5b\x4e\x60\x5f\xe5\x0d\xe4\x0d\
\xf9\x20\x70\x8b\xd7\x7c\x08\x94\x18\x4f\xe6\x3e\x27\x11\x12\xb0\
\x1b\xd8\xc7\x87\x2d\xbd\x90\x0c\x51\x09\x88\xdc\xde\xe3\x0a\xc8\
\x2a\xf2\x15\x92\xd1\x21\xc7\x96\x12\xc1\xcb\xcf\x83\x73\x7d\xe5\
\x32\x99\x10\x7c\x0a\x47\xfa\x8a\xeb\x5a\xd4\xda\xc8\x89\x84\x0f\
\x29\x5f\x40\xaa\xe9\x42\x7d\xe0\xe3\xe0\xc1\xe5\xbe\xa2\xcc\x07\
\xb9\x2c\x0c\x45\x71\xba\x4e\xc8\xe0\xf6\x91\xbd\x41\xe3\x0e\xb1\
\xcc\x2f\x76\xd6\xc2\x32\x22\xe4\xd8\x02\x14\xdd\x24\x0a\x9f\x43\
\x9a\x93\x20\x76\x22\x7a\x18\xd3\x34\x39\x32\xe4\xd8\x32\x60\xff\
\x76\x14\x8e\x3a\x2e\x46\x3d\x7f\x10\x61\xfe\x3e\x51\x30\xdb\xe5\
\xeb\x51\x0b\x88\x2b\x20\x66\xe3\xca\x7a\xac\x1c\x16\x29\xe5\x35\
\x1a\xb5\x15\xcd\x98\x8b\x62\x3f\x05\xb1\x25\xe1\x73\x9e\xcc\xa8\
\xfa\xc4\x87\x8d\x95\xef\xf5\x72\xf0\xbd\xc9\x12\x0f\xfe\x41\x13\
\xad\xa2\x2f\x0f\xc7\xa4\x24\x6e\x97\x71\x05\xc4\x94\xfe\xb4\x7d\
\x09\x4c\xd6\x0f\x39\xb6\x94\x88\x02\x52\x1d\x3a\x5d\x47\xf8\x64\
\xf4\xe0\x28\x65\xa6\xc8\x76\x4d\x8e\xdf\x98\x4b\x2d\xb2\x67\x6a\
\x93\xe3\x69\x68\xd2\x3c\xe3\xff\x57\xa3\x16\x10\xb7\x61\x9b\x59\
\x9a\xc2\x86\x40\x69\x10\x66\x2f\xb4\x94\x18\x73\x05\x4f\xf9\x13\
\xc3\x86\x66\x59\x5b\x9b\x06\xd1\xec\xab\x97\x87\xdf\x4d\xe6\x78\
\xf0\x7b\xc2\xb3\x7d\x85\xcd\x3b\x5b\xc5\x54\x19\x47\xce\x2e\x16\
\x57\x40\x4c\xc3\xc4\x34\x75\xd7\x36\xc2\x16\x78\x96\x7a\xe1\xf3\
\x89\x30\x6e\x0e\x39\xb6\x67\xcc\x32\xb3\x26\xaa\xb6\xaa\xcc\x5c\
\x1a\x72\xcc\x5c\x8c\x8e\x83\xf9\xe1\x8e\x6c\x50\x1b\x57\x8b\x65\
\x06\x0d\x1b\x81\x5e\x5c\xdc\x86\xda\x8c\xb0\xaf\xea\x9b\xbe\x34\
\x3e\x91\x1a\x8e\xa7\xaf\xc9\x1f\x08\x1e\xeb\x0e\xf4\x35\x17\x58\
\x1d\x50\x76\xd4\x79\x4f\x2b\x75\x5a\x45\xb8\xf6\xaa\x56\xaf\x2e\
\xf2\x5f\x5d\x4f\x1b\x1f\x2d\x84\x4e\x0e\x38\x9e\x54\x40\xba\x68\
\xfc\x70\xbf\x14\xb5\x90\xb8\x0f\xd9\x5c\x11\xed\x87\x84\x24\x4e\
\xfa\xe2\x56\x08\xeb\xe9\x4e\x21\xf8\x21\x07\x52\x6d\xdd\xcd\xd4\
\x7e\x2f\x10\x2c\x08\x35\x6b\xe1\xd4\xf0\x55\x5e\x33\x01\x69\x36\
\x77\x6a\x17\x7a\x09\xff\xc8\x24\x9d\x60\x8f\xa0\xb1\xdd\x14\xd6\
\x83\x80\x34\x4d\x59\x09\x48\x18\x43\x89\x9e\xed\xa9\x55\xc2\x94\
\x03\x45\x91\xf5\x70\xb6\x2c\x98\x13\xec\xa8\xd8\x34\x9f\x91\xdb\
\x67\xdc\x39\xc8\x5c\xcb\xbe\xee\x98\x65\x39\x1c\x59\xd0\x6d\xd9\
\xd7\x13\xb5\x90\xb8\x02\x62\xbb\x91\x0b\xab\xe3\x28\x13\xdd\x96\
\x7d\xcf\x47\x2d\x24\x4d\x01\x49\x43\x2d\xe7\x70\xa4\xc5\x16\x96\
\x7d\x3d\x51\x0b\x49\x22\x20\xe6\x04\xb5\x14\x66\xe2\x0e\x47\x15\
\x5b\x7b\xec\x89\x5a\x48\x5c\x01\x79\x03\x69\x78\xea\xd9\x36\x66\
\x59\x0e\x47\x16\x8c\x33\xfe\x9f\x47\x0c\x07\xb0\x24\xba\xf4\x27\
\x58\x3b\x58\xf5\x66\x48\xc3\x92\x67\x06\xa2\x5e\xe4\x3f\xf0\xb7\
\x0c\xca\xee\x47\xf6\x26\x34\x9d\x46\xd4\xf6\x34\x0c\x85\x87\x4d\
\x5b\x5b\x38\x9c\xc6\x40\xea\xcd\x3c\x4a\xad\x24\x11\x90\x59\x34\
\x86\xe2\x19\x07\xdc\x9b\xa0\xcc\xa8\x54\x90\xf1\xde\x35\x39\xde\
\xd3\x91\x12\xbe\xfc\x7c\x4e\x20\x7d\x01\x31\x7b\x0f\x88\x99\x9a\
\x2e\xc9\x17\xd2\x66\x6e\xfd\xe1\x04\xe5\xc5\xc1\x23\x7f\xe7\x2d\
\x47\x7a\xf4\x27\x1b\x8b\x00\x5b\x18\xd5\x58\xee\x01\x49\x04\xe4\
\x11\xcb\xbe\x5d\x12\x94\x17\x17\x27\x20\xed\x4b\x56\xa6\x49\x3b\
\x5b\xf6\xd9\xda\x6b\x53\x92\x08\xc8\xb3\x34\xfa\x77\xef\x9a\xa0\
\xbc\x30\xc2\x4c\x12\x9c\x80\xb4\x2f\x03\x48\xbe\x62\x6e\xc3\x6c\
\x87\x0b\x89\x99\x9e\x23\xe9\x24\x74\x86\xf1\xff\x46\xd8\xf5\xcf\
\x49\x09\xf3\x39\x2f\xd2\xf3\xcf\x91\x8c\x6d\x88\x11\x2f\xb7\x09\
\xa3\x69\x8c\x61\x60\xb6\xd3\x96\x49\x2a\x20\xb6\xac\xb6\xbb\x27\
\x2c\xd3\x46\x98\x1d\x7f\x5e\x91\x3f\x1c\x29\xe2\xcb\x5a\xf7\x7b\
\x04\xb7\xc1\x65\x31\x8b\xb6\xb5\xbf\xd8\xd9\x97\x93\x4e\x90\x6c\
\x01\xdb\xf6\x25\x3c\x6a\x45\x1c\xc2\x1c\x9b\x46\xfb\xf0\x01\x3a\
\xcb\x4f\xa2\x93\xf1\x90\xd7\xe4\x8f\x08\xef\x3d\xe2\x66\x2c\xb3\
\x05\x39\xff\x4b\xcc\xb2\x12\x25\xf1\x04\x49\xff\x02\xd6\x4e\x87\
\xf0\x2a\x32\x35\x4e\xcd\x5f\xc2\x57\xce\xc1\xad\xd2\x2a\xcf\xd1\
\x16\x5c\xe2\xc1\xf1\x11\xaf\xe9\x8f\x2c\x76\xeb\x1d\xec\x16\x23\
\xcb\xde\x77\xbc\x4e\xf3\x48\xe2\x59\xa3\x17\xe5\xc9\xae\x67\x3d\
\x14\x15\x24\x4d\x96\xa7\x5c\x9e\xa3\xdc\x54\x80\x6f\xc5\xb8\xee\
\xa3\x34\x7a\x9f\xde\x45\x82\xf0\x4d\x69\xac\x14\xdb\xc2\x63\x1e\
\x94\x42\xb9\xf5\x74\x82\x83\x90\xa3\x75\x26\x7b\xf1\x7c\x8b\x6c\
\xed\x2e\x51\xa4\xcc\x34\x04\xe4\xf7\x34\x0e\xa7\x0e\x27\xdd\x39\
\x41\xe2\x20\xca\x8e\xb6\xa0\x02\x9c\x09\xfc\x3c\xc6\xb5\x5d\xa8\
\xdd\xd5\xe3\xd3\x38\xc2\x89\x44\x1a\x02\xf2\x32\x70\x8f\xb1\x6f\
\x73\x60\xc7\x14\xca\xae\x11\x27\x17\x9e\xa3\xfd\x38\x03\xf8\x4e\
\xcc\x20\x1c\x3b\xd2\x98\x3b\x73\x3a\x31\xfc\xd0\xeb\x49\xcb\x18\
\xef\x3a\xcb\xbe\x34\xc3\xe6\x64\x91\xa2\xcb\x51\x1e\x5e\x42\xe9\
\x16\x4e\x4f\x10\xee\xd5\xd6\xde\xae\x4d\x50\x27\x20\xb9\x16\xab\
\xc6\x48\xe0\x45\xd6\x5e\xd5\x5e\x84\x2c\x2a\x53\x99\x3f\xf8\xf0\
\x49\xe0\xbb\x68\x21\xd2\xa9\x74\xdb\x9b\x7e\x68\xe4\xf1\x08\xf0\
\x18\x70\xa1\x97\x2c\xc7\xe5\x00\xe4\x7e\xb1\x61\xdd\xbe\x55\xc0\
\x26\x58\xe6\x32\x51\xb4\x58\x69\x09\x08\xc0\x9d\x68\x0d\xa4\x9e\
\xc3\x50\xa6\x22\x87\x23\x4b\x0e\x05\xae\x37\xf6\xfd\x8e\x80\xc4\
\xaf\x79\xaa\x79\xeb\xb9\xcc\xb2\xef\xf3\x29\x96\xef\x70\x04\x61\
\x6b\x67\xb6\xf6\x18\x99\x34\x7b\x90\x81\xa8\x9b\xab\x5f\x34\xec\
\x45\x43\xa2\x9e\x18\x75\x73\x38\x5a\xa1\x1b\x29\x71\xea\x3f\xf6\
\x8b\x91\x03\x9f\x75\x78\x5f\x54\x0f\xf2\x36\x70\x85\xa5\xfc\x2f\
\xa7\x78\x0f\x87\xc3\x64\x32\x8d\xed\xf8\x0a\x52\x9a\xfb\xa6\xd9\
\x83\x80\xcc\x41\x66\xb3\xf6\x24\x7a\x05\x92\xe6\x65\x11\xeb\xe6\
\x70\x34\x63\x18\x1a\xb5\xd4\x07\x0e\xec\x45\xb6\x79\xcf\x04\x5d\
\x54\x54\x0f\x02\xaa\xd4\x2d\xc6\xbe\xa1\x28\x95\xb1\xc3\x91\x36\
\xc7\xd1\x18\x55\xf3\x56\x42\x84\x23\x2a\x69\xf7\x20\xa0\x6c\xb2\
\xe6\xc2\xe1\x02\x64\xa7\x1f\x39\xfc\xbc\xc3\x11\xc0\x20\x34\xf7\
\xd8\xc4\xd8\xbf\x27\x5a\x20\x0c\xa4\xc8\x1e\x04\x54\xb9\x87\x8c\
\x7d\x1b\x13\xdd\x32\xd3\xe1\x08\xe3\x0b\x34\x0a\xc7\xc3\x34\x11\
\x8e\xa8\x64\xd1\x83\x80\xd6\x3f\xa6\x19\xfb\x16\xa1\x5e\x24\xeb\
\x9c\xea\x8e\xce\x67\x08\x4a\x24\xb4\xa1\xb1\xff\x70\x1a\xd7\x43\
\x1a\x28\xba\x07\x01\xa5\x09\x33\xf3\xe8\x6d\x88\x52\x00\x3b\x1c\
\x49\x39\x89\x46\xe1\x98\x49\x06\xe9\xe9\xb2\xea\x41\x40\xa6\xc7\
\x37\x19\xfb\x96\xa1\x90\x90\x49\xcc\x0a\x1c\x7d\x9b\x11\x28\x87\
\xba\x19\x4b\xeb\x60\x1a\xdb\x9b\x95\x32\xf4\x20\x20\x6d\x96\x19\
\x6a\x65\x18\xf2\x43\x76\x38\xe2\x72\x06\x8d\xc2\xf1\x08\xe1\xe9\
\xf4\x62\x93\x65\x0f\x02\x30\x11\xa5\x39\xab\x67\x35\x0a\x30\xf7\
\x78\xa4\x1b\x3b\x1c\x8a\x82\xf2\x28\x8d\xb1\x14\xf6\x26\x82\xdf\
\x47\x59\x7a\x10\x50\xa5\xcd\x75\x91\xfe\xc0\xf9\x38\x8b\x5c\x47\
\x34\xba\x50\xbb\x31\x85\xe3\x56\x12\x3a\x45\x85\x91\x47\x70\xe6\
\x29\x34\x46\x25\xd9\x03\x38\x3a\x87\x7b\x3b\x3a\x87\xa3\x51\xbb\
\xa9\xe7\x6d\xe0\xeb\x59\xde\x34\x0f\x01\x99\x03\x5c\x60\xd9\x7f\
\x2e\x8d\x01\xbe\x1c\x0e\x1b\x1b\xa1\xf6\x62\x72\x3e\x6a\x5f\x99\
\x91\xf5\x1c\xa4\xc6\x50\x1a\xd3\x25\x80\x74\xd6\xa6\x1f\xb1\xc3\
\x61\x32\x0d\xad\xad\xd5\x33\x0f\xcd\x49\x22\x47\xbc\x29\xd3\x1c\
\xa4\xc6\x0a\xe0\x4b\x96\xfd\x87\x01\x47\xe4\x54\x07\x47\x7b\xf2\
\x69\x1a\x85\x03\xd4\x9e\x32\x0f\x07\x95\x57\x0f\x52\xe3\x2a\x1a\
\x05\xe2\x35\x14\x69\xaf\x27\x49\xc1\x8e\x8e\xe4\xbd\xc8\x25\xd7\
\x54\xeb\x5e\x0d\x1c\x19\xb7\xd0\xa2\x5c\x6e\x5b\x61\x14\x4a\x64\
\x62\xae\x82\xce\x00\x26\x90\x62\x34\x46\x47\xdb\xe3\x01\x77\xa3\
\x76\x51\xcf\x22\x94\x20\x27\x76\xb4\x92\x32\x0e\xb1\x6a\xbc\x84\
\x4c\x94\xcd\x1a\xee\x0c\x7c\x3f\xe7\xba\x38\xca\xcd\xf7\x69\x14\
\x8e\x0a\x6a\x3f\x89\x42\xf9\x44\xa1\x88\x1c\x7c\xb7\x01\x17\x5a\
\xf6\x9f\x0a\x1c\x92\x73\x5d\x1c\xe5\xe4\x10\xd4\x1e\x4c\x7e\x8e\
\xda\x4f\x6e\xe4\x3d\xc4\xaa\x31\x18\x99\x26\x6f\x6d\xec\x7f\x0d\
\x05\x00\x9b\x9d\xc6\x4d\x1c\x6d\xc9\x58\xe0\x01\x94\x1e\xa1\x9e\
\x27\x81\xf1\xa4\x10\x65\xb3\xcc\x43\xac\x1a\x6f\x20\xcd\x84\xa9\
\x85\x58\x17\xad\x8c\xa6\x9d\xd4\xd1\xd1\x1e\x0c\x47\xef\xdf\x14\
\x8e\xe5\xa8\xbd\xe4\x1e\x82\xb6\xc8\x34\xc7\x4f\x01\xc7\xd0\x38\
\x1f\x19\x83\xd6\x47\x06\xe6\x5e\x23\x47\x91\x0c\x44\xeb\x1d\x63\
\x8c\xfd\x15\xd4\x4e\x9e\xca\xbd\x46\x14\x9f\x07\xfc\x7a\xe0\x1c\
\xcb\xfe\x8f\xa1\x24\x3c\xce\x5e\xab\x6f\xd0\x85\xde\xf7\xc7\x2c\
\xc7\xce\xa5\x05\x27\xa8\xac\x28\x6a\x0e\x52\x8f\x87\x1c\x5d\x0e\
\xb4\x1c\x3b\x0f\xd9\x72\x39\x3a\x9b\x73\xb0\xbf\xe7\x5b\xd0\x84\
\x3d\x55\xf5\x7f\x99\xd7\x41\x82\x18\x8a\xd6\x42\x6c\x09\xe0\x4f\
\x07\xa6\x66\x71\x53\x47\x29\x38\x0d\xbd\x63\x93\x59\x28\xad\x78\
\xea\xab\xe5\xed\x28\x20\x00\x9b\x02\x7f\xad\xfe\x35\x99\x82\x7a\
\x13\x47\x67\xf1\x75\xec\x46\x88\xf3\x51\x96\xb2\xf9\x59\xdc\xb4\
\x1d\xb4\x58\x36\xe6\x03\x93\x80\x57\x2c\xc7\x82\xba\x60\x47\xfb\
\x32\x05\xfb\xfc\x73\x29\x6a\x07\x99\x08\x47\x54\xca\x24\x20\xa0\
\x6e\x75\x12\x4a\x04\x5a\x4f\x17\x7a\x98\xa7\xe5\x5e\x23\x47\x16\
\x9c\x86\xde\xa7\x39\x1c\x79\x15\x45\x64\x9f\x95\x7b\x8d\x02\x28\
\xd3\x10\xab\x9e\x09\x28\x9d\x82\x2d\x07\xfa\x79\xc0\x29\xc4\xcb\
\x42\xe4\x28\x96\x2e\x94\x0c\xc9\x36\x1a\x58\x89\x84\xc3\x96\x5a\
\x3c\x55\xda\x75\x0e\x62\x32\x11\x45\xa9\xb0\x09\xc9\xd5\x48\x37\
\x1e\x96\x3f\xdd\x51\x2e\x06\x00\xbf\x00\x3e\x6b\x39\xb6\x12\x45\
\x25\x31\xe3\x17\x64\x42\xa7\x08\x08\xa8\x27\xb1\xad\xac\x82\xbe\
\x34\x07\x63\x9f\xb3\x38\xca\xc5\xfa\x68\x11\xf0\xe3\x96\x63\xcb\
\x81\xfd\xc9\xa1\xe7\xa8\xd1\xae\x93\x74\x1b\x7f\x46\x3d\x89\x4d\
\x08\x26\x20\xd5\xf0\xd8\x5c\x6b\xe4\x88\xca\x58\xf4\x9e\x6c\xc2\
\xb1\x14\xd8\x8b\x1c\x85\x23\x2a\x65\x17\x10\x80\x07\x51\x40\x62\
\x9b\x56\xe3\xfd\xc8\xb0\xcd\x59\x01\x97\x93\x83\xd1\xfb\xb1\x7d\
\xc4\xe6\xa3\x20\x0c\x0f\xe6\x59\xa1\xa8\xb4\x83\x80\x80\xc2\x4a\
\x7e\x14\x79\x97\x99\xac\x8b\x4c\x11\xce\x44\xab\xf2\x8e\xe2\xf1\
\xd0\xfb\xb8\x01\xfb\xf0\xf8\x31\xf4\x3e\xcd\xf0\xb4\xa5\xa3\xec\
\x73\x10\x93\xa1\x28\xe5\xb4\x35\x39\x23\x70\x3f\xf0\x19\x9c\xfb\
\x6e\x91\x74\x03\x57\xa2\x55\x70\x1b\x77\xa2\x94\xcd\x99\xfb\x93\
\x07\xd1\x49\x73\x10\x93\x15\xc0\x01\x48\x87\x6e\xfb\x95\xbb\x00\
\xff\x20\x81\xbf\xb2\x23\x11\x47\xa0\xe7\x6f\x13\x8e\x0a\x7a\x6f\
\x07\x50\xa0\x70\x44\xa5\xdd\x7a\x90\x7a\x0e\x05\x2e\x07\xd6\x09\
\x38\x3e\x0d\xe5\xaf\x5b\x94\x5b\x8d\xfa\x2e\x1b\xa2\x18\x55\x41\
\x21\x9c\x56\xa0\xc0\x6f\x85\x59\xe5\xd6\xd3\x49\x6a\xde\x66\x8c\
\x45\xe3\x5c\xd3\x33\xb1\xc6\x52\x64\xef\xf3\x2b\xdc\xc2\x62\x16\
\x74\x01\x9f\x43\x8b\xb7\x41\x4e\x6e\x4f\x22\x67\xa7\x42\xfc\x39\
\x6c\x74\xf2\x10\xcb\x64\x36\x72\xc3\xbc\x10\xbb\x00\xac\x8f\xfc\
\x0c\xee\x26\x58\x88\x1c\xf1\xd8\x1a\xf8\x13\x7a\xbe\x36\xe1\xa8\
\xa0\xf7\x32\x9e\x12\x09\x47\x54\xda\x5d\x40\x40\x6e\x98\x27\xa1\
\xc5\xa6\xa0\xe1\xd4\x1e\x68\x6c\x7c\x21\x30\x32\x9f\x6a\x75\x2c\
\x23\xd1\x73\xfc\x07\x52\xbf\xdb\x58\x8c\xe6\x1a\x27\x51\x80\x9b\
\x6c\x9a\x74\x82\x80\xd4\xb8\x03\xf9\x93\x5c\x1d\x70\xbc\x3f\x70\
\x02\x8a\xe5\xfa\x0d\xec\x26\x2c\x8e\x60\x86\xa0\xe7\x36\x07\x3d\
\x47\x33\xca\x7a\x8d\xab\xd1\x7b\xb8\x3d\xa7\x7a\x65\x4a\xbb\xcf\
\x41\x82\x98\x04\x5c\x44\x63\x2c\xe0\x7a\x16\x01\x3f\x00\x2e\xc6\
\x65\xdf\x0d\x63\x10\x4a\xc0\xfa\x4d\xc2\x83\x8d\xcf\x43\xe1\x40\
\xef\xc8\xa3\x52\x49\xe8\x4b\x93\xf4\x30\x86\x22\x4f\xb5\xc9\x84\
\x07\x80\xf8\x17\xd2\xc0\x5c\x8c\x52\xc4\x39\xc4\x30\x94\x49\x76\
\x32\x76\x27\xb6\x1a\x6f\xa3\xe7\x37\x95\x36\x51\xdf\x3a\x01\x59\
\x9b\x31\xc8\x6b\xed\xa0\x26\xe7\x2d\x07\x2e\x03\x7e\x4a\xdf\x5e\
\x68\xec\x06\x4e\x06\x8e\x25\x58\x85\x5e\xe3\x16\xa4\x25\x7c\x36\
\xe3\x3a\xa5\x8a\x13\x10\x3b\xfb\xa2\xfc\x88\xe3\x9b\x9c\xd7\x8b\
\x32\x16\x5d\x8a\x1a\xc0\xaa\x8c\xeb\x55\x06\x06\xa0\xa0\x19\xc7\
\xa1\x74\x66\xcd\xe6\xa6\x8f\x00\xdf\x06\x7e\x97\x71\xbd\x32\xc1\
\x09\x48\x30\x5d\xa8\x27\x99\x0a\x6c\xdb\xc2\xf9\x8b\xd0\xa4\xf3\
\x3a\x64\x74\xd7\x49\x6b\x29\x5d\xc0\x0e\xc8\xec\xe3\x08\x1a\x03\
\x8a\xdb\x98\x05\x7c\x17\x25\xcc\x6c\xdb\x67\xe1\x04\xa4\x39\xfd\
\xd0\x4a\xfc\xa9\xc0\xf6\x2d\x5e\x33\x17\xad\xce\xdf\x8a\xcc\xb7\
\x57\x67\x53\xb5\x4c\xe9\x8f\x02\x85\x1f\x80\x16\xef\xba\x5b\xbc\
\xee\x11\xe0\x2c\xb4\x28\xdb\x9b\x49\xcd\x72\xc4\x09\x48\x34\xf6\
\x44\xe3\xe8\xfd\x68\x5d\xed\xfd\x2a\x70\x17\x52\x65\xde\x0b\x3c\
\x97\x4d\xd5\x52\x61\x34\xf2\x9d\xd9\x0f\xd8\x07\x58\xaf\xc5\xeb\
\x2a\x48\x23\x75\x1e\x70\x4f\x36\x55\x2b\x06\x27\x20\xf1\xd8\x0a\
\xa9\x29\xff\x93\xe8\xb1\x81\x17\x02\xf7\x21\x6b\xe2\x47\xd1\x22\
\xda\xb2\x34\x2b\xd7\x22\xc3\xd0\xd0\xf1\x23\xc8\x60\x70\x57\xa2\
\xe7\x81\x5c\x0c\xfc\x1a\xb9\xc7\x3e\x9d\x66\xe5\xca\x82\x13\x90\
\x64\x0c\x46\x0e\x58\x47\x21\x2f\xb8\xa0\x05\xb1\x66\xcc\x43\x63\
\xf6\x67\x90\x56\xec\xf9\xea\xdf\x17\x81\x97\x13\xd4\x6f\x04\xb0\
\x09\x1a\x1e\xbd\xaf\xfa\x77\x2b\xb4\x38\x17\xb6\xee\x13\xc6\x6a\
\xd4\x23\xfe\x12\xcd\x2f\xde\x4e\x50\xbf\xd2\xe3\x04\x24\x3d\x46\
\x22\xaf\xb8\x4f\x21\x73\x95\xb4\x1c\xb2\x7a\x91\x90\x2c\x41\x01\
\x0b\x96\x56\xf7\xbf\x55\xfd\x7f\x08\xf0\xae\xea\xbe\xf5\xab\xff\
\x8f\x44\xc2\x91\x96\xf5\x83\x0f\x4c\x47\x0a\x88\x1b\xab\x75\xe9\
\x13\x38\x01\xc9\x86\x51\x48\x05\xba\x5f\xf5\xef\xa8\x62\xab\x13\
\x8b\x97\x50\xe4\x90\x3b\xab\x7f\x73\xcb\xd4\x54\x26\x9c\x80\x64\
\x4f\x3f\x34\xce\x9f\x80\xc6\xf9\x3b\x51\xce\x9c\xef\x0b\x51\x38\
\xd7\xfb\x91\x32\xe1\xef\x74\x80\x16\x2a\x29\x4e\x40\x8a\x61\x34\
\x5a\x84\xdc\x16\xcd\x07\xc6\xa1\x39\x42\x5e\x3c\x8f\xe6\x3c\xb3\
\x90\xaf\xf7\xc3\x94\x5b\xbb\x56\x18\x4e\x40\xca\xc3\x60\xd6\x4c\
\xa4\xbb\xd1\x24\x7a\x43\x34\x97\xa8\x6d\xeb\xb1\x66\xbe\x31\x0c\
\x2d\xe0\x55\x58\xa3\x05\x7b\x0b\xa5\xa6\x5b\x82\xe6\x2d\x2f\x23\
\x4d\xd3\x5c\x34\xe9\xef\x41\xc2\xd1\xd6\x66\xe5\x79\xe2\x04\xc4\
\xe1\x08\x21\x53\x01\x71\x38\xfa\x12\x9d\xe4\x30\xe5\x70\xa4\x8e\
\x13\x10\x87\x23\x04\x27\x20\x0e\x47\x08\x4e\x40\x1c\x8e\x10\x9c\
\x80\x38\x1c\x21\x38\x01\x71\x38\x42\x70\x02\xe2\x70\x84\xe0\x04\
\xc4\xe1\x08\xc1\x09\x88\xc3\x11\x82\x13\x10\x87\x23\x84\xff\x07\
\xc1\x7c\xe5\xf9\xc0\x53\xea\xcb\x00\x00\x00\x00\x49\x45\x4e\x44\
\xae\x42\x60\x82\
"
qt_resource_name = b"\
\x00\x06\
\x07\x03\x7d\xc3\
\x00\x69\
\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
\x00\x08\
\x05\xe2\x59\x27\
\x00\x6c\
\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"
qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x70\xfc\xc5\x79\xec\
"
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
rcc_version = 1
qt_resource_struct = qt_resource_struct_v1
else:
rcc_version = 2
qt_resource_struct = qt_resource_struct_v2
def qInitResources():
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="images">
<file>logo.png</file>
</qresource>
</RCC>

@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'startupWin.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow_(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(950, 601)
MainWindow.setMinimumSize(QtCore.QSize(950, 601))
MainWindow.setMaximumSize(QtCore.QSize(950, 601))
font = QtGui.QFont()
font.setFamily("宋体")
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setMinimumSize(QtCore.QSize(950, 601))
self.centralwidget.setMaximumSize(QtCore.QSize(950, 601))
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(350, 110, 250, 250))
self.label.setStyleSheet("image: url(:/images/logo.png);")
self.label.setText("")
self.label.setObjectName("label")
self.push_button = QtWidgets.QPushButton(self.centralwidget)
self.push_button.setGeometry(QtCore.QRect(350, 390, 250, 40))
font = QtGui.QFont()
font.setFamily("幼圆")
font.setPointSize(10)
self.push_button.setFont(font)
self.push_button.setStyleSheet("")
self.push_button.setAutoDefault(False)
self.push_button.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setEnabled(True)
self.menubar.setGeometry(QtCore.QRect(0, 0, 950, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setEnabled(True)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Graduation_design"))
self.push_button.setText(_translate("MainWindow", "点击开始三维重建"))

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>601</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>950</width>
<height>601</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>950</width>
<height>601</height>
</size>
</property>
<property name="font">
<font>
<family>宋体</family>
</font>
</property>
<property name="windowTitle">
<string>Graduation_design</string>
</property>
<widget class="QWidget" name="centralwidget">
<property name="minimumSize">
<size>
<width>950</width>
<height>601</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>950</width>
<height>601</height>
</size>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>350</x>
<y>110</y>
<width>250</width>
<height>250</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">image: url(:/images/logo.png);</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>350</x>
<y>390</y>
<width>250</width>
<height>40</height>
</rect>
</property>
<property name="font">
<font>
<family>幼圆</family>
<pointsize>10</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>点击开始足部重建</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</widget>
<resources>
<include location="resource.qrc"/>
</resources>
<connections/>
</ui>

@ -0,0 +1,46 @@
import PIL.Image
import numpy
import os
import shutil
def sum_right(path):
img = PIL.Image.open(path)
array = numpy.array(img)
num = array.sum(axis=0)
print(type(num))
res_left = 0
res_right = 0
for i in range(256,512):
res_right += num[i]
print(res_right)
# if __name__ == '__main__':
# dir2 = r"C:\Users\xinluo\PycharmProjects\pythonProject\Camera Roll"
# dir1 = r"C:\Users\xinluo\PycharmProjects\pythonProject\Saved Pictures"
# names = os.listdir(dir1)
# n = len(names)
# print("文件数量",n)
# res = 0
# average_5 = 25565356
# average_25 = 26409377
# average_5_right = 10006019
# #average_tmp = (average_25+average_5)//2
# count = 0
# #show(os.path.join(dir1, "uni4F6C.png"))
# for i in range(n):
# #取图片
# img = PIL.Image.open(os.path.join(dir1,names[i]))
# file = os.path.join(dir1,names[i])
# rmfile = os.path.join(dir2,names[i])
# array = numpy.array(img)
# num = array.sum(axis=0)
# res_right = 0
# for i in range(256, 512):
# res_right += num[i]
# average_5_right += res_right/n
#
# if (res_right > average_5_right).all():
# shutil.copyfile(file, rmfile)
# os.remove(file)
# count += 1
# print(average_5_right)
# print(count)

@ -0,0 +1,27 @@
# -*- coding: UTF-8 -*-
import argparse
import cv2
import os
# 使用方法命令行cd到脚本所在文件夹python picture.py -i "图片路径"
#便历图片,合格则保存,不合格则删除
def variance_of_laplacian(image):
# 使用拉普拉斯算子提取图像边缘信息,计算边缘的平均方差
return cv2.Laplacian(image, cv2.CV_64F).var()
def read_path(file_pathname):
#遍历该目录下的所有图片文件
for filename in os.listdir(file_pathname):
print(filename)
image = cv2.imread(file_pathname+'/'+filename)
# 取图片的灰度通道
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
fm = variance_of_laplacian(gray)
# 如果得分比阈值低,认为是模糊
if fm < 100.0:
os.remove(file_pathname+'/'+filename)
#read_path(r"C:\Users\xinluo\PycharmProjects\pythonProject\Saved Pictures")
#print(os.getcwd())

@ -0,0 +1,50 @@
import cv2
import argparse
import os
def parse_args():
"""
Parse input arguments
"""
parser = argparse.ArgumentParser(description='Process pic')
parser.add_argument('--input', help='video to process', dest='input', default=None, type=str)
parser.add_argument('--output', help='pic to store', dest='output', default=None, type=str)
# default为间隔多少帧截取一张图片
parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=10, type=int)
# input为输入视频的路径 output为输出存放图片的路径
args = parser.parse_args(['--input', r'C:\Users\xinluo\PycharmProjects\test\Videos\test.mp4', '--output', r'C:\Users\xinluo\PycharmProjects\test\SrcImages'])
return args
def process_video(i_video, o_video, num):
cap = cv2.VideoCapture(i_video)
num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)
expand_name = '.jpg'
if not cap.isOpened():
print("Please check the path.")
cnt = 0
count = 0
while 1:
ret, frame = cap.read()
cnt += 1
# how
# many
# frame
# to
# cut
if cnt % num == 0:
count += 1
cv2.imwrite(os.path.join(o_video, str(count) + expand_name), frame)
if not ret:
break
if __name__ == '__main__':
args = parse_args()
if not os.path.exists(args.output):
os.makedirs(args.output)
print('Called with args:')
print(args)
process_video(args.input, args.output, args.skip_frame)

@ -0,0 +1,22 @@
import os
from PIL import Image, ImageFile
# ImageFile.LOAD_TRUNCATED_IMAGES = True #如果图片太大报错可以使用这个
def pixel():
b = 0
dir = r'C:\Users\xinluo\PycharmProjects\pythonProject\Camera Roll' # 需要处理的图片目录
files = os.listdir(dir) # 得到需要处理的所有图片
files.sort() # 对图片进行排序
for each_bmp in files: # 遍历图片,进行筛选
each_bmp_root = os.path.join(dir, each_bmp) # 得到每个图片路径
image = Image.open(each_bmp_root) # 打开每个图片
img = image.convert('RGB') # 转化成RGB其实图片大多都是RGB即使灰度图也不一定转RGB看需求
width = img.size[0] # 获取图像的宽和长
height = img.size[1]
if (width < 650) or (height < 650): # 判断图形尺寸有一条边小于600像素的直接删除
os.remove(each_bmp_root)

Binary file not shown.

@ -0,0 +1,2 @@
*.pyc

File diff suppressed because it is too large Load Diff

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Wanderson M. Pimenta
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,28 @@
# Python Interface - PySide2/PyQt5(optional) (MODERN / FLAT GUI)
> ## :gift: **//// DONATE ////**
> ## 🔗 Donate (Gumroad): https://gum.co/mHsRC
> **Warning**: use PySide2 and PyQt5 in version 5.15.2 or > (**pip install pyside2==5.15.2**)!
![image_1](https://user-images.githubusercontent.com/60605512/82736094-50887300-9cfd-11ea-8e9a-c2fbbf97d983.PNG)
Project created using Python, Qt Designer and PySide2.
I hope it helps everyone who is starting now in the Python world.
This project works very well with Windows, however on Linux and macOS there are some font size problems and the custom title bar does not work very well.
# REQUERIMENTS:
> ```sh
> pip install pyside2==5.15.2
> ```
> PySide2 and PyQt5 in version 5.15.1 **are causing problems** due to several updates in process.
# RUN FILE:
main.py
# ADD MENUS
![add-MENUS](https://user-images.githubusercontent.com/60605512/94625100-56372c00-028e-11eb-978e-22165d8f77c8.png)
# Youtube Video:
> https://www.youtube.com/watch?v=iaIooM9FlRI

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save