From 8ccab171db5ef40c10dabbc99e4df5bc0282b6db Mon Sep 17 00:00:00 2001 From: Chenglei98 <44131164+Chenglei98@users.noreply.github.com> Date: Sat, 17 Sep 2022 10:52:03 +0800 Subject: [PATCH] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 淮安部署版本 --- .gitignore | 5 + .qmake.stash | 24 + 123.txt | 30 + Makefile | 863 ++++++++++++++ black | Bin 0 -> 163840 bytes camera.cpp | 1173 ++++++++++++++++++ camera.h | 397 +++++++ log | 34 + main.cpp | 30 + make.sh | 2 + parameter | 13 + parameter.cpp | 4 + parameter.h | 23 + read_buffer.py | 20 + start_qt.sh | 8 + sys_parameter | 2 + thread.cpp | 376 ++++++ thread.h | 83 ++ tobacco_v1_0 | Bin 0 -> 310512 bytes tobacco_v1_0.pro | 81 ++ tobacco_v1_0.pro.user | 216 ++++ tobacco_v1_0.pro.user.3134a74 | 216 ++++ tobacco_v1_0.pro.user.501d48d | 216 ++++ tobacco_v1_0.pro.user.9db08b5 | 216 ++++ tobacco_v1_0.pro.user.cfde348 | 216 ++++ white | Bin 0 -> 163840 bytes widget.cpp | 1537 ++++++++++++++++++++++++ widget.h | 188 +++ widget.ui | 2099 +++++++++++++++++++++++++++++++++ 29 files changed, 8072 insertions(+) create mode 100644 .gitignore create mode 100644 .qmake.stash create mode 100644 123.txt create mode 100644 Makefile create mode 100644 black create mode 100644 camera.cpp create mode 100644 camera.h create mode 100644 log create mode 100644 main.cpp create mode 100644 make.sh create mode 100644 parameter create mode 100644 parameter.cpp create mode 100644 parameter.h create mode 100644 read_buffer.py create mode 100644 start_qt.sh create mode 100644 sys_parameter create mode 100644 thread.cpp create mode 100644 thread.h create mode 100644 tobacco_v1_0 create mode 100644 tobacco_v1_0.pro create mode 100644 tobacco_v1_0.pro.user create mode 100644 tobacco_v1_0.pro.user.3134a74 create mode 100644 tobacco_v1_0.pro.user.501d48d create mode 100644 tobacco_v1_0.pro.user.9db08b5 create mode 100644 tobacco_v1_0.pro.user.cfde348 create mode 100644 white create mode 100644 widget.cpp create mode 100644 widget.h create mode 100644 widget.ui diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f3e296 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.o +saved_image +.qmake.stash +doc +log diff --git a/.qmake.stash b/.qmake.stash new file mode 100644 index 0000000..e1d04e4 --- /dev/null +++ b/.qmake.stash @@ -0,0 +1,24 @@ +QMAKE_CXX.INCDIRS = \ + /usr/include/c++/7 \ + /usr/include/x86_64-linux-gnu/c++/7 \ + /usr/include/c++/7/backward \ + /usr/lib/gcc/x86_64-linux-gnu/7/include \ + /usr/local/include \ + /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed \ + /usr/include/x86_64-linux-gnu \ + /usr/include +QMAKE_CXX.LIBDIRS = \ + /usr/lib/gcc/x86_64-linux-gnu/7 \ + /usr/lib/x86_64-linux-gnu \ + /usr/lib \ + /lib/x86_64-linux-gnu \ + /lib +QMAKE_CXX.QT_COMPILER_STDCXX = 201402L +QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 7 +QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 5 +QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_GCC_MAJOR_VERSION \ + QMAKE_GCC_MINOR_VERSION \ + QMAKE_GCC_PATCH_VERSION diff --git a/123.txt b/123.txt new file mode 100644 index 0000000..c2d5175 --- /dev/null +++ b/123.txt @@ -0,0 +1,30 @@ +connect plc success +>>> connect to monitor successfully! >>> +>>> load system parameter successfully! >>> + welcome dk ! + Display ID: SF3000-GE04K-10C-00 00:26:ac:a1:00:9d [192.168.15.105] + Display ID: FX10e 70:f8:e7:b0:07:c4 [169.254.128.27] +set ip success +*** Unable to connect to FX10e 70:f8:e7:b0:07:c4 [169.254.128.27] +*** init camera error, error code: -1 *** +>>> try to init camera again... >>> + Display ID: SF3000-GE04K-10C-00 00:26:ac:a1:00:9d [192.168.15.105] + Display ID: FX10e 70:f8:e7:b0:07:c4 [192.168.123.3] +set ip success +>>> Successfully connected to FX10e 70:f8:e7:b0:07:c4 [192.168.123.3] + +>>> load calibration init success! >>> +>>> Connecting to SF3000-GE04K-10C-00 00:26:ac:a1:00:9d [192.168.15.105] +>>> Successfully connected to SF3000-GE04K-10C-00 00:26:ac:a1:00:9d [192.168.15.105] + +>>> init camera successfully + hello dk ! +>>> spec threshold 4 send to python +>>> rgb threshold 6 send to python +new connection to lower machine! +receive message from suhandong +start +queue buffer successfully... +running on 0 +queue buffer successfully... +>>> start acquisition >>> diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..97481f2 --- /dev/null +++ b/Makefile @@ -0,0 +1,863 @@ +############################################################################# +# Makefile for building: tobacco_v1_0 +# Generated by qmake (3.1) (Qt 5.9.5) +# Project: tobacco_v1_0.pro +# Template: app +# Command: /usr/lib/qt5/bin/qmake -o Makefile tobacco_v1_0.pro +############################################################################# + +MAKEFILE = Makefile + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I/opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include -isystem /usr/include/opencv2 -I/home/dt/下载/libmodbus-3.1.6/install/include/modbus -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -isystem /usr/include/libdrm -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = tobacco_v1_01.0.0 +DISTDIR = /home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0/.tmp/tobacco_v1_01.0.0 +LINK = g++ +LFLAGS = -Wl,-O1 +LIBS = $(SUBLIBS) -L/opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/lib/ -lEbTransportLayerLib -lPtUtilsLib -lPvBase -lPvCameraBridge -lPvGenICam -lPvPersistence -lPvStream -lPvTransmitter -lSimpleImagingLib -lEbUtilsLib -lPtConvertersLib -lPvAppUtils -lPvBuffer -lPvDevice -lPvGUI -lPvSerial -lPvSystem -lPvVirtualDevice -L/usr/lib/x86_64-linux-gnu/ -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lmodbus -lQt5Widgets -lQt5Gui -lQt5Network -lQt5Core -lGL -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + widget.cpp \ + camera.cpp \ + thread.cpp \ + parameter.cpp moc_widget.cpp \ + moc_camera.cpp \ + moc_thread.cpp +OBJECTS = main.o \ + widget.o \ + camera.o \ + thread.o \ + parameter.o \ + moc_widget.o \ + moc_camera.o \ + moc_thread.o +DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + tobacco_v1_0.pro widget.h \ + camera.h \ + thread.h \ + parameter.h main.cpp \ + widget.cpp \ + camera.cpp \ + thread.cpp \ + parameter.cpp +QMAKE_TARGET = tobacco_v1_0 +DESTDIR = +TARGET = tobacco_v1_0 + + +first: all +####### Build rules + +$(TARGET): ui_widget.h $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: tobacco_v1_0.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + tobacco_v1_0.pro \ + /usr/lib/x86_64-linux-gnu/libQt5Widgets.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Gui.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Network.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Core.prl + $(QMAKE) -o Makefile tobacco_v1_0.pro +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +tobacco_v1_0.pro: +/usr/lib/x86_64-linux-gnu/libQt5Widgets.prl: +/usr/lib/x86_64-linux-gnu/libQt5Gui.prl: +/usr/lib/x86_64-linux-gnu/libQt5Network.prl: +/usr/lib/x86_64-linux-gnu/libQt5Core.prl: +qmake: FORCE + @$(QMAKE) -o Makefile tobacco_v1_0.pro + +qmake_all: FORCE + + +all: Makefile $(TARGET) + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents widget.h camera.h thread.h parameter.h $(DISTDIR)/ + $(COPY_FILE) --parents main.cpp widget.cpp camera.cpp thread.cpp parameter.cpp $(DISTDIR)/ + $(COPY_FILE) --parents widget.ui $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_predefs_make_all: moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) moc_predefs.h +moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -O2 -Wall -W -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: moc_widget.cpp moc_camera.cpp moc_thread.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_widget.cpp moc_camera.cpp moc_thread.cpp +moc_widget.cpp: thread.h \ + camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h \ + parameter.h \ + widget.h \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0 -I/opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include -I/usr/include/opencv2 -I/home/dt/下载/libmodbus-3.1.6/install/include/modbus -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/7 -I/usr/include/x86_64-linux-gnu/c++/7 -I/usr/include/c++/7/backward -I/usr/lib/gcc/x86_64-linux-gnu/7/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include widget.h -o moc_widget.cpp + +moc_camera.cpp: /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h \ + camera.h \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0 -I/opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include -I/usr/include/opencv2 -I/home/dt/下载/libmodbus-3.1.6/install/include/modbus -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/7 -I/usr/include/x86_64-linux-gnu/c++/7 -I/usr/include/c++/7/backward -I/usr/lib/gcc/x86_64-linux-gnu/7/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include camera.h -o moc_camera.cpp + +moc_thread.cpp: camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h \ + thread.h \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0 -I/opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include -I/usr/include/opencv2 -I/home/dt/下载/libmodbus-3.1.6/install/include/modbus -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/7 -I/usr/include/x86_64-linux-gnu/c++/7 -I/usr/include/c++/7/backward -I/usr/lib/gcc/x86_64-linux-gnu/7/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include thread.h -o moc_thread.cpp + +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: ui_widget.h +compiler_uic_clean: + -$(DEL_FILE) ui_widget.h +ui_widget.h: widget.ui \ + /usr/lib/qt5/bin/uic + /usr/lib/qt5/bin/uic widget.ui -o ui_widget.h + +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean + +####### Compile + +main.o: main.cpp widget.h \ + thread.h \ + camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h \ + parameter.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +widget.o: widget.cpp widget.h \ + thread.h \ + camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h \ + parameter.h \ + ui_widget.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o widget.o widget.cpp + +camera.o: camera.cpp camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o camera.o camera.cpp + +thread.o: thread.cpp thread.h \ + camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o thread.o thread.cpp + +parameter.o: parameter.cpp parameter.h \ + camera.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDevice.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvLinkLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvResult.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBaseLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfo.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterArray.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenICamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenString.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenParameterList.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenTypes.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenApi.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenInteger.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnum.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenEnumEntry.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenFloat.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCommand.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenBoolean.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenRegister.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvGenCategory.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEnums.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStream.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBuffer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvBufferLib.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPayloadType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImage.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvPixelType.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartContainer.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvMultiPartSection.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvChunkData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvImageJPEG.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvRawData.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvH264AccessUnit.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvStreamGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystem.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvSystemEventSink.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvNetworkAdapter.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvInterface.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoGEV.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoPleoraProtocol.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvUSBHostController.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoUSB.h \ + /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include/PvDeviceInfoU3V.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o parameter.o parameter.cpp + +moc_widget.o: moc_widget.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_widget.o moc_widget.cpp + +moc_camera.o: moc_camera.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_camera.o moc_camera.cpp + +moc_thread.o: moc_thread.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_thread.o moc_thread.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/black b/black new file mode 100644 index 0000000000000000000000000000000000000000..29faf4799b341c2a583bd9c9112029a357453963 GIT binary patch literal 163840 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 file contains detailed implementation of class Camera. + * Such as initialize camera, enum camera, start capture, callback function, etc. + * which refers to the hyperspectral camera(FX10e). + */ + +#include "camera.h" +#include "unistd.h" + +float file_explosure; +vector mroi; +vector valid; +int R; +int G; +int B; + +Camera* camera; +RGB_Camera* rgb_camera; + +float* send_buf = nullptr; +float* send_temp_buf = nullptr; +float* send_valid_buf = nullptr; + +float* save_valid_buf = nullptr; + +QSemaphore ready_to_send(0); //光谱图像信号量 +QSemaphore ready_to_send_rgb(0); //rgb图像信号量 + +uint8_t* send_rgb_buf = nullptr; +//uint8_t* send_temp_rgb_buf = nullptr; + +uint8_t* channel_b = nullptr; +uint8_t* channel_g = nullptr; +uint8_t* channel_r = nullptr; +uint8_t* temp_rgb = nullptr; + +uint16_t* lines_buf = nullptr; + + +std::vector channel_rgb; + +/*test for callback function, not used +int on_data_callback(uint8_t* buffer, uint64_t frame_size, uint64_t frame_number) +{ + cout << ">>> frame_number: " << frame_number << " " << "frame_size: " << frame_size << endl; + cv::Mat mat(1000, 3840, CV_8UC1, buffer); + //cv::imwrite("./a.png", mat); + return 0; +} +*/ + +Camera::Camera(QObject *parent) : QObject(parent) +{ +} + +Camera::~Camera() +{ + free_stream_buffers(); + + if( lStream != nullptr ) + { + lStream->Close(); + PvStream::Free(lStream); + cout << ">>> close and free lstream >>>" << endl; + } + + if( lDevice != nullptr ) + { + lDevice->Disconnect(); + PvDevice::Free(lDevice); + cout << ">>> disconnect and free camera device >>>" << endl; + } + + if( capture_thread != nullptr) + delete capture_thread; + + delete [] send_buf; + delete [] send_temp_buf; + + delete [] white_buf; + delete [] black_buf; + + cout << "dkkkkkkkkkkkkkkk" << endl; +} + +/** + * @details
Steps to initialize the hyperspectral camera:
+ * 1. Enumerate and connect to the camera
+ * 2. Configure the camera parameters
+ * 3. Creates stream object
+ * 4. Configure stream for GigE Vision devices
+ * 5. Create stream buffers
+ * 6. Map the GenICam AcquisitionStart and AcquisitionStop commands
+ * 7. New object capture_thread
+ * 8. Allocate memory for every buffers
+ */
+int Camera::init_camera()
+{
+    // 1.Enumerate the camera
+    int status = enum_connect_camera();
+    if(status != 0)
+        return -1;
+
+    // 2.Configure the camera parameters
+    status = config_camera();
+    if(status != 0)
+        return -2;
+
+//    get_camera_parameters();
+
+    // 3.Creates stream object
+    status = open_stream();
+    if(status != 0)
+        return -3;
+
+    // 4.Configure stream for GigE Vision devices
+    status = configure_stream();
+    if(status != 0)
+        return -4;
+
+    // 5.Create stream buffers
+    create_stream_buffers();
+
+    // Get device parameters need to control streaming
+    PvGenParameterArray *lDeviceParams = lDevice->GetParameters();
+
+    // 6.Map the GenICam AcquisitionStart and AcquisitionStop commands
+    lStart = dynamic_cast( lDeviceParams->Get( "AcquisitionStart" ) );
+    lStop = dynamic_cast( lDeviceParams->Get( "AcquisitionStop" ) );
+
+    // 7.New object capture_thread
+    capture_thread = new CaptureThread();
+
+    //获取波段数
+    PvGenInteger* lheight = parameter_array->GetInteger("Height");
+
+    lheight->GetValue(m_height);
+
+    single_frame_size = SPEC_WIDTH * m_height;
+    multi_frame_size = single_frame_size * SPEC_HEIGHT;
+
+    // 8.Allocate memory for every buffers
+    white_buf = new float[single_frame_size];
+    black_buf = new float[single_frame_size];
+
+    send_buf = new float[multi_frame_size];
+    send_temp_buf = new float[multi_frame_size];
+    send_valid_buf = new float[SPEC_WIDTH * valid.size() * SPEC_HEIGHT];   //此处m_height要改成valid
+
+    sum_mat_for_calibration = cv::Mat(m_height, SPEC_WIDTH, CV_32F, cv::Scalar(0));
+    eps = cv::Mat(m_height, SPEC_WIDTH, CV_32F, cv::Scalar(0.00000001));   ///GetDeviceCount();
+
+        for ( uint32_t y = 0; y < lDeviceCount ; y++ )
+        {
+            lDeviceInfo = lSystem.GetInterface(x)->GetDeviceInfo( y );
+
+            cout << "    Display ID: " << lDeviceInfo->GetDisplayID().GetAscii() << endl;
+
+            const PvDeviceInfoGEV* lDeviceInfoGEV = dynamic_cast( lDeviceInfo );
+
+            if ( lDeviceInfoGEV != nullptr ) // Is it a GigE Vision device?
+            {
+//                cout << "    MAC Address: " << lDeviceInfoGEV->GetMACAddress().GetAscii() << endl;
+//                cout << "    IP Address: " << lDeviceInfoGEV->GetIPAddress().GetAscii() << endl;
+//                cout << "    Serial number: " << lDeviceInfoGEV->GetSerialNumber().GetAscii() << endl << endl;
+                if(!strcmp("70:f8:e7:b0:07:c4", lDeviceInfoGEV->GetMACAddress().GetAscii()))
+                {
+                    lResult = PvDeviceGEV::SetIPConfiguration("70:f8:e7:b0:07:c4", "192.168.123.3", "255.255.255.0", "192.168.123.1");
+                    while( !lResult.IsOK() ){
+//                        cout << "set ip again" << endl;
+                        lResult = PvDeviceGEV::SetIPConfiguration("70:f8:e7:b0:07:c4", "192.168.123.3", "255.255.255.0", "192.168.123.1");
+                    }
+                    cout << "set ip success" << endl;
+
+                    lDeviceInfo = lSystem.GetInterface(x)->GetDeviceInfo(y);
+                    lLastDeviceInfo = lDeviceInfo;
+                    break;
+                }
+                else
+                {
+//                    cout << "not this!" << endl;
+                    continue;
+                }
+            }    
+        }
+    }
+
+    // Connect to the last device found
+    if ( lLastDeviceInfo != nullptr )
+    {
+        // Creates and connects the device controller based on the selected device.
+        lDevice = PvDevice::CreateAndConnect( lLastDeviceInfo, &lResult );
+        if ( !lResult.IsOK() )
+        {
+            cout << "*** Unable to connect to " << lLastDeviceInfo->GetDisplayID().GetAscii() << endl;
+            if(lDevice != nullptr){
+                PvDevice::Free(lDevice);
+                lDevice = nullptr;
+            }
+            lLastDeviceInfo = nullptr;
+            return -1;
+        }
+        else
+        {
+            cout << ">>> Successfully connected to " << lLastDeviceInfo->GetDisplayID().GetAscii() << endl;
+            cout << endl;
+            // Load parameters of the camera
+            parameter_array = lDevice->GetParameters();
+
+            return 0;
+        }
+    }
+    else
+    {
+        cout << "*** No device found! ***" << endl;
+        return -2;
+    }
+}
+
+int Camera::open_stream()
+{
+    PvResult lResult;
+    // Open stream to the GigE Vision or USB3 Vision device
+//    cout << ">>> Opening stream to device." << endl;
+    lStream = PvStream::CreateAndOpen( lLastDeviceInfo->GetConnectionID(), &lResult);
+    if ( (lStream == nullptr) || !lResult.IsOK() )
+    {
+        cout << "*** Unable to stream from " << lLastDeviceInfo->GetDisplayID().GetAscii() << ". ***" << endl;
+        PvStream::Free(lStream);
+        PvDevice::Free(lDevice);
+        return -1;
+    }
+    return 0;
+}
+
+int Camera::configure_stream()
+{
+    // If this is a GigE Vision device, configure GigE Vision specific streaming parameters
+    PvDeviceGEV* lDeviceGEV = dynamic_cast( lDevice );
+    if ( lDeviceGEV != nullptr )
+    {
+        PvStreamGEV *lStreamGEV = static_cast( lStream );
+        // Negotiate packet size
+        lDeviceGEV->NegotiatePacketSize();
+        // Configure device streaming destination
+        lDeviceGEV->SetStreamDestination( lStreamGEV->GetLocalIPAddress(), lStreamGEV->GetLocalPort() );
+//        cout << ">>> configure stream successfully!" << endl;
+        return 0;
+    }
+    else
+    {
+        cout << "*** configure stream failed! ***" << endl;
+        return -1;
+    }
+}
+
+void Camera::create_stream_buffers()
+{
+    // Reading payload size from device
+    uint32_t lSize = lDevice->GetPayloadSize();
+
+    // Use BUFFER_COUNT or the maximum number of buffers, whichever is smaller
+    uint32_t lBufferCount = ( lStream->GetQueuedBufferMaximum() < BUFFER_COUNT ) ? lStream->GetQueuedBufferMaximum() : BUFFER_COUNT;
+    // Allocate buffers
+    for( uint32_t i=0; iAlloc( static_cast( lSize ) );
+
+        // Add to external list - used to eventually release the buffers
+        lbufferlist.push_back(lBuffer);
+    }
+//    cout << ">>> create stream buffers successfully" << endl;
+}
+
+void Camera::free_stream_buffers()
+{
+    bufferlist::iterator iter = lbufferlist.begin();
+    while( iter != lbufferlist.end() )
+    {
+        delete *iter;
+        iter++;
+    }
+    // Clear the buffer list
+    lbufferlist.clear();
+}
+
+
+void Camera::set_MROI(const vector &vec)
+{
+    bool mroi_status = false;
+    parameter_array->SetBooleanValue("MROI_Enable", mroi_status);
+
+    int n = vec.size() / 2;
+
+    parameter_array->SetIntegerValue("MROI_Index", n);
+    parameter_array->SetIntegerValue("MROI_Y", 1081);
+    parameter_array->SetIntegerValue("MROI_H", 0);
+
+    //{100, 5, 300, 5}
+    for( int i=0, j=0; iSetIntegerValue("MROI_Index", i);
+        parameter_array->SetIntegerValue("MROI_Y", vec[j]);
+        parameter_array->SetIntegerValue("MROI_H", vec[j+1]);
+    }
+
+
+    mroi_status = true;
+    parameter_array->SetBooleanValue("MROI_Enable", mroi_status);
+
+}
+
+int Camera::config_camera()
+{
+    PvResult lResult;
+    //实际测试发现,快men有时无法自动打开,需要使用以下代码人为打开
+    lResult = parameter_array->SetIntegerValue("MotorShutter_PulseFwd", 100);
+    ::sleep(1);
+    lResult = parameter_array->SetIntegerValue("MotorShutter_PulseRev", 100);
+    ::sleep(1);
+    lResult = parameter_array->SetIntegerValue("MotorShutter_PulseFwd", 200);
+    ::sleep(1);
+    lResult = parameter_array->SetIntegerValue("MotorShutter_PulseRev", 200);
+
+    //设置触发模式为 外触发,线路Line0,上升沿触发
+    lResult = parameter_array->SetEnumValue("TriggerMode", "On");
+    lResult = parameter_array->SetEnumValue("TriggerSource", "Line0");
+
+
+    //Set BinningVertical
+    lResult = parameter_array->SetIntegerValue("BinningVertical", 1);
+    if ( !lResult.IsOK() )
+    {
+        cout << "*** Unable to set  *** " << endl;
+        return -1;
+    }
+
+    //设置数据格式为12位
+    lResult = parameter_array->SetEnumValue("PixelFormat", "Mono12");
+    if ( !lResult.IsOK() )
+    {
+        cout << "*** Unable to set  *** " << endl;
+        return -1;
+    }
+
+    //Set gain
+    lResult = parameter_array->SetFloatValue("Gain", m_gain);
+    if ( !lResult.IsOK() )
+    {
+        cout << "*** Unable to set  *** " << endl;
+        return -1;
+    }
+
+    //Set MROI
+    set_MROI(mroi);
+
+    //Set ExposureTime
+    lResult = parameter_array->SetFloatValue("ExposureTime", file_explosure);
+    if ( !lResult.IsOK() )
+    {
+        cout << "*** Unable to set  *** " << endl;
+        return -1;
+    }
+    return 0;
+}
+
+
+void Camera::get_camera_parameters()
+{
+    PvResult lResult;
+
+    //Get BinningVertical
+    PvGenInteger* lbinningvertical = parameter_array->GetInteger("BinningVertical");
+    int64_t binning = 0;
+    lResult = lbinningvertical->GetValue(binning);
+    if( !lResult.IsOK() )
+        cout << "*** Unable to get  *** " << endl;
+    else
+        cout <<">>> BinningVertical: " << binning << endl;
+
+    //Get Gain
+    PvGenFloat* lgain = parameter_array->GetFloat("Gain");
+    double gain = 0.0f;
+    lResult = lgain->GetValue(gain);
+    if( !lResult.IsOK() )
+        cout << "*** Unable to get  *** " << endl;
+    else
+        cout <<">>> Gain: " << gain << endl;
+
+    //Get Height
+    PvGenInteger* lheight = parameter_array->GetInteger("Height");
+    int64_t height = 0;
+    lResult = lheight->GetValue(height);
+    if( !lResult.IsOK() )
+        cout << "*** Unable to get  *** " << endl;
+    else
+        cout <<">>> Height: " << height << endl;
+
+    //Get Width
+    PvGenInteger* lwidth = parameter_array->GetInteger("Width");
+    int64_t width = 0;
+    lResult = lwidth->GetValue(width);
+    if( !lResult.IsOK() )
+        cout << "*** Unable to get  *** " << endl;
+    else
+        cout <<">>> Width: " << width << endl;
+
+    //Get AcquisitionFrameRate
+    PvGenFloat* lframerate = parameter_array->GetFloat("AcquisitionFrameRate");
+    double framerate = 0.0f;
+    lResult = lframerate->GetValue(framerate);
+    if( !lResult.IsOK() )
+        cout << "*** Unable to get  *** " << endl;
+    else
+        cout <<">>> AcquisitionFrameRate: " << framerate << endl;
+
+    //Get ExposureTime
+    PvGenFloat* lexposuretime = parameter_array->GetFloat("ExposureTime");
+    double exposuretime = 0.0f;
+    lResult = lexposuretime->GetValue(exposuretime);
+    if( !lResult.IsOK() )
+        cout << "*** Unable to get  *** " << endl;
+    else
+        cout << ">>> ExposureTime: " << exposuretime << endl;
+
+    //查看触发模式
+    PvString mode;
+    PvGenEnum* ltriggermode = parameter_array->GetEnum("TriggerMode");
+    ltriggermode->GetValue(mode);
+    cout << ">>> TriggerMode: " << mode.GetAscii() << endl;
+    ltriggermode = parameter_array->GetEnum("TriggerSource");
+    ltriggermode->GetValue(mode);
+    cout << ">>> TriggerSource: " << mode.GetAscii() << endl;
+    cout << endl;
+}
+
+void Camera::start_acquisition()
+{
+    // Queue all buffers in the stream
+    bufferlist::iterator iter = lbufferlist.begin();
+    while( iter != lbufferlist.end() )
+    {
+        lStream->QueueBuffer(*iter);
+        iter++;
+    }
+    cout << "queue buffer successfully..." << endl;
+
+    // Enable streaming and send the AcquisitionStart command
+//    cout << "Enabling streaming and sending AcquisitionStart command." << endl;
+    lDevice->StreamEnable();
+    lStart->Execute();
+
+    // start a new thread CaptureThread
+    capture_thread->stop_mutex.lock();
+    capture_thread->m_stop = false;
+    capture_thread->stop_mutex.unlock();
+    capture_thread->start();
+}
+
+void Camera::stop_acquisition()
+{
+    //线程停止!
+    capture_thread->exit_thread();
+    capture_thread->wait();
+    if(capture_thread->isFinished())
+    {
+        cout << ">>> capture thread stopped successfully" << endl;
+    }
+}
+
+ void Camera::register_callback_calibration()
+ {
+     register_data_callback(onDataCallback_calibration);
+ }
+
+ void Camera::register_callback_acquisition()
+ {
+     register_data_callback(onDataCallback_acquisition);
+ }
+
+ int Camera::init_calibration_load()
+ {
+     FILE* fp = fopen("./white", "rb");
+     fread(white_buf, 4, single_frame_size, fp);
+     fclose(fp);
+     fp = fopen("./black", "rb");
+     fread(black_buf, 4, single_frame_size, fp);
+     fclose(fp);
+     white_mat = cv::Mat(m_height, SPEC_WIDTH, CV_32F, white_buf);
+     black_mat = cv::Mat(m_height, SPEC_WIDTH, CV_32F, black_buf);
+
+     cout << ">>> load calibration init success! >>> " << endl;
+//     emit camera->send_calibration_finished_message();
+     return 0;
+ }
+
+ void Camera::load_calibration()
+ {
+     cout << ">>> loading calibration file......" << endl;
+     FILE* fp = fopen("./white", "rb");
+     fread(white_buf, 4, single_frame_size, fp);
+     fclose(fp);
+     cout << ">>> white file loaded successfully! >>>" << endl;
+
+     fp = fopen("./black", "rb");
+     fread(black_buf, 4, single_frame_size, fp);
+     fclose(fp);
+     cout << ">>> black file loaded successfully! >>>" << endl;
+
+     white_mat = cv::Mat(m_height, SPEC_WIDTH, CV_32F, white_buf);
+     black_mat = cv::Mat(m_height, SPEC_WIDTH, CV_32F, black_buf);
+
+     cout << ">>> load calibration finished! >>> " << endl;
+     emit camera->send_calibration_finished_message();
+ }
+
+
+//definition of calibration callback function 校正回调函数
+static uint16_t calibration_frame_count = 0;
+int onDataCallback_calibration(uint8_t *buffer, uint64_t frame_size, uint64_t frame_number)
+{
+    //采集黑白帧
+    cout << ">>> acquisition number: " << calibration_frame_count << endl;
+    if( camera->capture_black_flag || camera->capture_white_flag )
+    {
+        if( calibration_frame_count != CALIBRATION_FRAMES )
+        {
+            cv::Mat temp = cv::Mat(camera->m_height, SPEC_WIDTH, CV_16U, buffer);
+            temp.convertTo(temp, CV_32F);
+            camera->sum_mat_for_calibration += temp;
+            calibration_frame_count++;
+            return 0;
+        }
+        else
+        {
+            camera->stop_acquisition();
+            if( camera->capture_black_flag )
+            {
+                camera->capture_black_flag = false;
+                camera->black_mat = camera->sum_mat_for_calibration / CALIBRATION_FRAMES;
+                FILE* fp = fopen("./black", "wb");
+                fwrite(camera->black_mat.data, camera->m_height*SPEC_WIDTH*4, 1, fp);
+                fclose(fp);
+                cout << ">>> black frame acquisition OK! >>>" << endl;
+                camera->sum_mat_for_calibration = cv::Mat(camera->m_height, SPEC_WIDTH, CV_32F, cv::Scalar(0));  //clear sum mat
+            }
+            else if( camera->capture_white_flag )
+            {
+                camera->capture_white_flag = false;
+                camera->white_mat = camera->sum_mat_for_calibration / CALIBRATION_FRAMES;
+                FILE* fp = fopen("./white", "wb");
+                fwrite(camera->white_mat.data, camera->m_height*SPEC_WIDTH*4, 1, fp);
+                fclose(fp);
+                cout << ">>> white frame acquisition OK! >>>" << endl;
+                camera->sum_mat_for_calibration = cv::Mat(camera->m_height, SPEC_WIDTH, CV_32F, cv::Scalar(0));  //clear sum mat
+            }
+            calibration_frame_count = 0;
+            camera->unregister_data_callback();
+            return 0;
+        }
+    }
+    return 0;
+}
+
+//definition of acquisition callback function 采集回调函数
+static uint16_t send_show_frame_count = 0;
+/**
+ * @brief Acquisition callback function
+ * @param buffer
+ * @param frame_size
+ * @param frame_number
+ * @return
+ * @details splice 256 buffers into a whole image,
+ */
+int onDataCallback_acquisition(uint8_t *buffer, uint64_t frame_size, uint64_t frame_number)
+{
+//    if(frame_number % REALHEIGHT == 0)
+//        cout << ">>> " << frame_number << endl;
+
+    memcpy(channel_r + send_show_frame_count * SPEC_WIDTH * 2, buffer+2048 * R, SPEC_WIDTH * 2);
+    memcpy(channel_g + send_show_frame_count * SPEC_WIDTH * 2, buffer+2048 * G, SPEC_WIDTH * 2);
+    memcpy(channel_b + send_show_frame_count * SPEC_WIDTH * 2, buffer+2048 * B, SPEC_WIDTH * 2);
+
+//    校正后图片拼接
+    cv::Mat img = cv::Mat(camera->m_height, SPEC_WIDTH, CV_16U, buffer);
+    img.convertTo(img, CV_32F);
+
+//    if(frame_size == 88)
+//    {
+//        img = camera->black_mat;
+//    }
+//   calibrate operation 校正操作
+    cv::Mat calibrated_img = (img - camera->black_mat) / (camera->white_mat - camera->black_mat + camera->eps);
+
+    memcpy( (send_temp_buf + send_show_frame_count * camera->single_frame_size), calibrated_img.data, camera->single_frame_size * 4);
+
+    send_show_frame_count++;
+
+    if( send_show_frame_count == SPEC_HEIGHT )
+    {
+        send_show_frame_count = 0;
+
+        channel_rgb.emplace_back(cv::Mat(SPEC_HEIGHT, SPEC_WIDTH, CV_16UC1, channel_r));
+        channel_rgb.emplace_back(cv::Mat(SPEC_HEIGHT, SPEC_WIDTH, CV_16UC1, channel_g));
+        channel_rgb.emplace_back(cv::Mat(SPEC_HEIGHT, SPEC_WIDTH, CV_16UC1, channel_b));
+
+        cv::Mat temp;
+        cv::merge(channel_rgb, temp);
+        memcpy(temp_rgb, temp.data, SPEC_HEIGHT * SPEC_WIDTH * 6);
+        channel_rgb.clear();
+
+        memcpy(send_buf, send_temp_buf, camera->multi_frame_size * 4);
+
+        //release semaphore
+        ready_to_send.release();
+
+        //emit to ui
+        camera->send_data_to_ui(temp_rgb);
+    }
+    return 0;
+}
+
+/*----------CaptureThread 采集线程----------*/
+ CaptureThread::CaptureThread(QObject *parent) : QThread(parent), m_stop(false)
+ {}
+
+ void CaptureThread::run()
+ {
+     /*----将线程绑定至8号cpu,提高线程效率----*/
+     cpu_set_t get;
+     cpu_set_t mask;
+     int num = sysconf(_SC_NPROCESSORS_CONF);
+//     pthread_t thread_id = pthread_self();
+//     cout << thread_id << endl;
+     CPU_ZERO(&mask);
+     CPU_SET(0, &mask);
+     sched_setaffinity(0, sizeof(mask), &mask);
+     CPU_ZERO(&get);
+     sched_getaffinity(0, sizeof(get), &get);
+     for(int i=0; ilStop->Execute();
+
+             // Disable streaming on the device
+             camera->lDevice->StreamDisable();
+
+             // Abort all buffers from the stream and dequeue
+             camera->lStream->AbortQueuedBuffers();
+
+             // Retrieve the buffers left in stream
+             while ( camera->lStream->GetQueuedBufferCount() > 0 )
+             {
+                 PvBuffer *lBuffer = nullptr;
+                 PvResult lOperationResult;
+                 camera->lStream->RetrieveBuffer( &lBuffer, &lOperationResult, 1000 );
+             }
+             return;
+         }
+         stop_mutex.unlock();
+         PvBuffer *lBuffer = nullptr;
+         PvResult lOperationResult;
+
+         // Retrieve next buffer
+         PvResult lResult = camera->lStream->RetrieveBuffer( &lBuffer, &lOperationResult, 1000 );
+         if ( lResult.IsOK() )
+         {
+             if ( lOperationResult.IsOK() )
+             {
+                 // We now have a valid buffer. This is where you would typically process the buffer.
+                 // Get image data
+//                 uint64_t frame_size = camera->lDevice->GetPayloadSize();
+                 uint8_t* image = lBuffer->GetDataPointer();
+
+                 //callback function
+                 camera->data_callback(image, 0, lBuffer->GetBlockID());
+             }
+             else
+             {
+//                 camera->data_callback(camera->padding_frame, 88, 0);
+//                 cout << "spec error: "<< lOperationResult.GetCodeString().GetAscii() << endl; // Non OK operational result
+
+             }
+
+             // Re-queue the buffer in the stream object
+             camera->lStream->QueueBuffer( lBuffer );
+         }
+//         else
+//             cout << "*** spec Retrieve buffer failurer: " << lResult.GetCodeString().GetAscii() << endl; // Retrieve buffer failure
+     }
+ }
+
+ void CaptureThread::exit_thread()
+ {
+     stop_mutex.lock();
+     m_stop = true;
+     stop_mutex.unlock();
+ }
+
+ /*-------------RGB_CAMERA---------------------*/
+ RGB_Camera::RGB_Camera(QObject *parent) : QObject(parent)
+ {
+ }
+
+ RGB_Camera::~RGB_Camera()
+ {
+     free_stream_buffers();
+
+     if( lStream != nullptr )
+     {
+         lStream->Close();
+         PvStream::Free(lStream);
+         cout << ">>> rgb_camera: close and free lstream >>>" << endl;
+     }
+
+     if( lDevice != nullptr )
+     {
+         lDevice->Disconnect();
+         PvDevice::Free(lDevice);
+         cout << ">>> rgb_camera: disconnect and free camera device >>>" << endl;
+     }
+
+     if( rgb_capture_thread != nullptr)
+         delete rgb_capture_thread;
+
+
+     cout << "rgb_camera: dkkkkkkkkkkkkkkk" << endl;
+ }
+
+ int RGB_Camera::init_camera()
+ {
+     int status = enum_connect_camera();
+     if(status != 0)
+         return -1;
+
+     status = config_camera();
+     if(status != 0)
+         return -2;
+
+//     get_camera_parameters();
+
+     status = open_stream();
+     if(status != 0)
+         return -3;
+
+     status = configure_stream();
+     if(status != 0)
+         return -4;
+
+     create_stream_buffers();
+
+     rgb_capture_thread = new RGB_CaptureThread();
+
+     send_rgb_buf = new uint8_t[RGB_HEIGHT * RGB_WIDTH * 3];
+
+     return 0;
+ }
+
+ int RGB_Camera::enum_connect_camera()
+ {
+     PvResult lResult;
+     lResult = lSystem.Find();
+     if ( !lResult.IsOK() )
+     {
+         cout << "*** PvSystem::Find Error: " << lResult.GetCodeString().GetAscii();
+         return -1;
+     }
+     uint32_t lInterfaceCount = lSystem.GetInterfaceCount();
+     for ( uint32_t x = 0; x < lInterfaceCount; x++ )
+     {
+         if(lLastDeviceInfo != nullptr)
+             break;
+         uint32_t lDeviceCount = lSystem.GetInterface(x)->GetDeviceCount();
+         for ( uint32_t y = 0; y < lDeviceCount ; y++ )
+         {
+             lDeviceInfo = lSystem.GetInterface(x)->GetDeviceInfo( y );
+
+             const PvDeviceInfoGEV* lDeviceInfoGEV = dynamic_cast( lDeviceInfo );
+             if ( lDeviceInfoGEV != nullptr ) // Is it a GigE Vision device?
+             {
+//                 cout << "    MAC Address: " << lDeviceInfoGEV->GetMACAddress().GetAscii() << endl;
+//                 cout << "    IP Address: " << lDeviceInfoGEV->GetIPAddress().GetAscii() << endl;
+//                 cout << "    Serial number: " << lDeviceInfoGEV->GetSerialNumber().GetAscii() << endl << endl;
+ //                lLastDeviceInfo = lDeviceInfo;
+                 if(!strcmp("00:26:ac:a1:00:9d", lDeviceInfoGEV->GetMACAddress().GetAscii()))
+                 {
+                     PvDeviceGEV::SetIPConfiguration("00:26:ac:a1:00:9d", "192.168.15.105", "255.255.255.0", "192.168.15.1");
+                     lLastDeviceInfo = lDeviceInfo;
+                     break;
+                 }
+                 else
+                 {
+//                     cout << "rgb: not this!" << endl;
+                     continue;
+                 }
+             }
+         }
+     }
+
+     // Connect to the last device found
+     if ( lLastDeviceInfo != nullptr )
+     {
+         cout << ">>> Connecting to " << lLastDeviceInfo->GetDisplayID().GetAscii() << endl;
+
+         // Creates and connects the device controller based on the selected device.
+         lDevice = PvDevice::CreateAndConnect( lLastDeviceInfo, &lResult );
+         if ( !lResult.IsOK() )
+         {
+             cout << "*** Unable to connect to " << lLastDeviceInfo->GetDisplayID().GetAscii() << endl;
+             PvDevice::Free(lDevice);
+             return -1;
+         }
+         else
+         {
+             cout << ">>> Successfully connected to " << lLastDeviceInfo->GetDisplayID().GetAscii() << endl;
+             cout << endl;
+             // Load parameters of the camera
+             parameter_array = lDevice->GetParameters();
+             return 0;
+         }
+     }
+     else
+     {
+         cout << "*** No device found! ***" << endl;
+         return -2;
+     }
+ }
+
+ void RGB_Camera::get_camera_parameters()
+ {
+     PvResult lResult;
+
+     //Get Height
+     PvGenInteger* lheight = parameter_array->GetInteger("SensorHeight");
+     int64_t height = 0;
+     lResult = lheight->GetValue(height);
+     if( !lResult.IsOK() )
+         cout << "*** Unable to get  *** " << endl;
+     else
+         cout <<">>> Height: " << height << endl;
+
+     //Get Width
+     PvGenInteger* lwidth = parameter_array->GetInteger("SensorWidth");
+     int64_t width = 0;
+     lResult = lwidth->GetValue(width);
+     if( !lResult.IsOK() )
+         cout << "*** Unable to get  *** " << endl;
+     else
+         cout <<">>> Width: " << width << endl;
+
+     //Get AcquisitionFrameRate
+     PvGenFloat* lframerate = parameter_array->GetFloat("AcquisitionLineRate");
+     double framerate = 0.0f;
+     lResult = lframerate->GetValue(framerate);
+     if( !lResult.IsOK() )
+         cout << "*** Unable to get  *** " << endl;
+     else
+         cout <<">>> AcquisitionLineRate: " << framerate << endl;
+
+     //Get ExposureTime
+     PvGenFloat* lexposuretime = parameter_array->GetFloat("CommonExposureTime");
+     double exposuretime = 0.0f;
+     lResult = lexposuretime->GetValue(exposuretime);
+     if( !lResult.IsOK() )
+         cout << "*** Unable to get  *** " << endl;
+     else
+         cout << ">>> ExposureTime: " << exposuretime << endl;
+
+     //查看触发模式
+     PvString mode;
+     PvGenEnum* ltriggermode = parameter_array->GetEnum("LineTriggerMode");
+     ltriggermode->GetValue(mode);
+     cout << ">>> TriggerMode: " << mode.GetAscii() << endl;
+     ltriggermode = parameter_array->GetEnum("LineTriggerSource");
+     ltriggermode->GetValue(mode);
+     cout << ">>> TriggerSource: " << mode.GetAscii() << endl;
+     cout << endl;
+ }
+
+ int RGB_Camera::open_stream()
+ {
+     PvResult lResult;
+     // Open stream to the GigE Vision or USB3 Vision device
+     lStream = PvStream::CreateAndOpen( lLastDeviceInfo->GetConnectionID(), &lResult);
+     if ( (lStream == nullptr) || !lResult.IsOK() )
+     {
+         cout << "*** Unable to stream from " << lLastDeviceInfo->GetDisplayID().GetAscii() << ". ***" << endl;
+         PvStream::Free(lStream);
+         PvDevice::Free(lDevice);
+         return -1;
+     }
+     return 0;
+ }
+
+ int RGB_Camera::config_camera()
+ {
+     PvGenParameterArray *lDeviceParams = lDevice->GetParameters();
+     lStart = dynamic_cast( lDeviceParams->Get( "AcquisitionStart" ) );
+     lStop = dynamic_cast( lDeviceParams->Get( "AcquisitionStop" ) );
+     lUserSetLoad = dynamic_cast( lDeviceParams->Get( "UserSetLoad" ) );
+     Whitecal = dynamic_cast( lDeviceParams->Get( "FFCCalPRNU" ) );
+     Blackcal = dynamic_cast( lDeviceParams->Get( "FFCCalFPN" ) );
+     lUserSave = dynamic_cast( lDeviceParams->Get( "UserSetSave" ) );
+     lFFCUserSetSave = dynamic_cast( lDeviceParams->Get( "FFCUserSetSave" ) );
+
+     PvResult lResult = parameter_array->SetEnumValue("UserSetSelector", "UserSet3");
+     if(!lResult.IsOK()){
+         cout << "set userset3 failed" << endl;
+         return -1;
+     }
+     lResult = lUserSetLoad->Execute();
+     if(!lResult.IsOK()){
+         cout << "userset load failed" << endl;
+         return -1;
+     }
+
+     //    //设置触发模式为 外触发,线路Line0,上升沿触发
+     lResult = parameter_array->SetEnumValue("LineTriggerMode", "On");
+     if(!lResult.IsOK()){
+         cout << "set triggermode failed" << endl;
+         return -1;
+     }
+
+     lResult = parameter_array->SetEnumValue("LineTriggerSource", "Line2");
+     if(!lResult.IsOK()){
+         cout << "set triggersource failed" << endl;
+         return -1;
+     }
+
+     return 0;
+ }
+
+ int RGB_Camera::configure_stream()
+ {
+     // If this is a GigE Vision device, configure GigE Vision specific streaming parameters
+     PvDeviceGEV* lDeviceGEV = dynamic_cast( lDevice );
+     if ( lDeviceGEV != nullptr )
+     {
+         PvStreamGEV *lStreamGEV = static_cast( lStream );
+         // Negotiate packet size
+         PvResult lresult =  lDeviceGEV->NegotiatePacketSize();
+         if( !lresult.IsOK() )
+             cout << "negotiate packet size failed" << endl;
+         // Configure device streaming destination
+         lresult = lDeviceGEV->SetStreamDestination( lStreamGEV->GetLocalIPAddress(), lStreamGEV->GetLocalPort() );
+         if( !lresult.IsOK() )
+             cout << "set stream destination failed" << endl;
+ //        cout << ">>> configure stream successfully!" << endl;
+         return 0;
+     }
+     else
+     {
+         cout << "*** configure stream failed! ***" << endl;
+         return -1;
+     }
+ }
+
+ void RGB_Camera::create_stream_buffers()
+ {
+     // Reading payload size from device
+     uint32_t lSize = lDevice->GetPayloadSize();
+//     cout << "payloadsize =  " << lSize << endl;
+ //    cout << lStream->GetQueuedBufferMaximum() << endl;
+
+     // Use BUFFER_COUNT or the maximum number of buffers, whichever is smaller
+     uint32_t lBufferCount = ( lStream->GetQueuedBufferMaximum() < 16 ) ? lStream->GetQueuedBufferMaximum() : 16;
+//     cout << "lbuffercount = " << lBufferCount << endl;
+
+     // Allocate buffers
+     for( uint8_t i=0; iAlloc( static_cast( lSize + 500 ) );
+         if(!lresult.IsOK())
+             cout << "dk failed" << endl;
+
+         // Add to external list - used to eventually release the buffers
+         lbufferlist.push_back(lBuffer);
+     }
+//     cout << ">>> rgb: create stream buffers successfully" << endl;
+ }
+
+ void RGB_Camera::free_stream_buffers()
+ {
+     bufferlist::iterator iter = lbufferlist.begin();
+     while( iter != lbufferlist.end() )
+     {
+         delete *iter;
+         iter++;
+     }
+     // Clear the buffer list
+     lbufferlist.clear();
+ }
+
+ void RGB_Camera::start_acquisition()
+ {
+     // Queue all buffers in the stream
+     bufferlist::iterator iter = lbufferlist.begin();
+     while( iter != lbufferlist.end() )
+     {
+         lStream->QueueBuffer(*iter);
+         iter++;
+     }
+     cout << "queue buffer successfully..." << endl;
+
+     // Enable streaming and send the AcquisitionStart command
+ //    cout << "Enabling streaming and sending AcquisitionStart command." << endl;
+     lDevice->StreamEnable();
+     lStart->Execute();
+
+     // start a new thread CaptureThread
+     rgb_capture_thread->stop_mutex.lock();
+     rgb_capture_thread->m_stop = false;
+     rgb_capture_thread->stop_mutex.unlock();
+     rgb_capture_thread->start();
+ }
+
+ void RGB_Camera::stop_acquisition()
+ {
+     //线程停止!
+     rgb_capture_thread->exit_thread();
+     rgb_capture_thread->wait();
+     if(rgb_capture_thread->isFinished())
+     {
+         cout << ">>>rgb capture thread stopped successfully" << endl;
+     }
+ }
+
+ /*--------rgb_capture thread---------------------*/
+ RGB_CaptureThread::RGB_CaptureThread(QObject *parent) : QThread(parent), m_stop(false)
+ {}
+
+ void RGB_CaptureThread::run()
+ {
+     /*----将线程绑定至6号cpu,提高线程效率----*/
+//     cpu_set_t get;
+//     cpu_set_t mask;
+//     int num = sysconf(_SC_NPROCESSORS_CONF);
+////     pthread_t thread_id = pthread_self();
+////     cout << thread_id << endl;
+//     CPU_ZERO(&mask);
+//     CPU_SET(1, &mask);
+//     sched_setaffinity(1, sizeof(mask), &mask);
+//     CPU_ZERO(&get);
+//     sched_getaffinity(1, sizeof(get), &get);
+//     for(int i=0; ilStop->Execute();
+
+             // Disable streaming on the device
+             rgb_camera->lDevice->StreamDisable();
+
+             // Abort all buffers from the stream and dequeue
+             rgb_camera->lStream->AbortQueuedBuffers();
+
+             // Retrieve the buffers left in stream
+             while ( rgb_camera->lStream->GetQueuedBufferCount() > 0 )
+             {
+                 PvBuffer *lBuffer = nullptr;
+                 PvResult lOperationResult;
+                 rgb_camera->lStream->RetrieveBuffer( &lBuffer, &lOperationResult, 1000 );
+             }
+             return;
+         }
+         stop_mutex.unlock();
+         PvBuffer *lBuffer = nullptr;
+         PvResult lOperationResult;
+
+         // Retrieve next buffer
+         PvResult lResult = rgb_camera->lStream->RetrieveBuffer( &lBuffer, &lOperationResult, 1000 );
+         if ( lResult.IsOK() )
+         {
+             if ( lOperationResult.IsOK() )
+             {
+                 // We now have a valid buffer. This is where you would typically process the buffer.
+                 // Get image data
+//                 uint64_t frame_size = camera->lDevice->GetPayloadSize();
+                 uint8_t* image = lBuffer->GetDataPointer();
+                 memcpy(send_rgb_buf, image, RGB_HEIGHT * RGB_WIDTH * 3);
+                 rgb_camera->send_rgbdata_to_ui(send_rgb_buf);
+
+                 ready_to_send_rgb.release();
+             }
+             else{
+//                  memset(send_rgb_buf, 0, RGB_HEIGHT * RGB_WIDTH * 3);
+//                  ready_to_send_rgb.release();
+//                cout << "rgb error: "<< lOperationResult.GetCodeString().GetAscii() << endl; // Non OK operational result
+             }
+             // Re-queue the buffer in the stream object
+             rgb_camera->lStream->QueueBuffer( lBuffer );
+         }
+//         else
+//             cout << "*** rgb Retrieve buffer failure: " << lResult.GetCodeString().GetAscii() << endl; // Retrieve buffer failure
+     }
+ }
+
+ void RGB_CaptureThread::exit_thread()
+ {
+     stop_mutex.lock();
+     m_stop = true;
+     stop_mutex.unlock();
+ }
diff --git a/camera.h b/camera.h
new file mode 100644
index 0000000..6f72bf8
--- /dev/null
+++ b/camera.h
@@ -0,0 +1,397 @@
+/**
+ * @file camera.h
+ * @author DingKun & ChengLei
+ * @date 2022.3.5
+ * @brief The file contains a class named Camera
+ * @details The file contains a class named Camera
+ * which refers to the hyperspectral camera(FX10e).
+ *
+ * The Camera class in this file contains the operation
+ * and parameters of the hyperspectral camera(FX10e).
+ */
+
+#ifndef CAMERA_H
+#define CAMERA_H
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "iostream"
+#include 
+#include 
+#include "opencv.hpp"
+#include 
+#include 
+#include 
+
+using namespace std;
+
+extern float file_explosure;
+extern vector mroi;
+extern vector valid;
+extern int R;
+extern int G;
+extern int B;
+
+class CaptureThread;
+//Ebus图像传输流队列的大小
+#define BUFFER_COUNT 64
+//光谱数据的宽度
+#define SPEC_WIDTH 1024
+//光谱数据的高度
+#define SPEC_HEIGHT 256
+//有效的谱段
+#define VALIDBANDS 22
+//采集校正时取平均的图像数
+#define CALIBRATION_FRAMES 35
+//光谱相机的数字增益
+#define GAIN 2.0f
+// 光谱mask高度宽度
+#define SPEC_MASK_HEIGHT 1024
+#define SPEC_MASK_WIDTH 1024
+// RGB mask高度宽度
+#define RGB_MASK_HEIGHT 1024
+#define RGB_MASK_WIDTH 1024
+// RGB图像的高度宽度
+#define RGB_HEIGHT 1024
+#define RGB_WIDTH 4096
+
+/**
+ * @brief Indicate a pointer to function
+ */
+typedef int(*callback_ptr)(uint8_t*, uint64_t, uint64_t);
+
+/**
+ * @brief List contains pointer to PvBuffer
+ */
+typedef std::list bufferlist;
+
+/**
+ * @brief Callback function runs when camera captures one frame
+ * @param buffer The image data in one frame
+ * @param frame_size The size of the buffer in one frame
+ * @param frame_number The number of the frame
+ * @return Indicate the status of operation
+ */
+int on_data_callback(uint8_t* buffer, uint64_t frame_size, uint64_t frame_number);
+
+int onDataCallback_calibration(uint8_t* buffer, uint64_t frame_size, uint64_t frame_number);
+
+int onDataCallback_acquisition(uint8_t* buffer, uint64_t frame_size, uint64_t frame_number);
+
+/**
+ * @brief The Camera class
+ * @details
+ * 
Hyperspectral camera model: Specim FX10e
+ * etThe class contains the operation and paramers of the hyperspectral camera(FX10e).
+ * Steps to control the hyperspectral camera:
+ * 1. Selects a device
+ * 2. Connect the PvDevice, opens the PvStream
+ * 3. Allocates the buffers
+ * 4. Starts acquistion
+ * 5. Retrieve/process/free incoming buffers
+ * 6. Stops acquisition
+ */ +class Camera : public QObject +{ + Q_OBJECT +public: + PvDevice* lDevice = nullptr; ///< Camera device handler + PvStream* lStream = nullptr; ///< Stream handler + bufferlist lbufferlist; ///< buffer list to manage memory + + PvGenCommand *lStart; ///< GenICam command to start capture + PvGenCommand *lStop; ///< GenICam command to stop capture + + PvSystem lSystem; + const PvDeviceInfo* lLastDeviceInfo = nullptr; ///< DeviceInfo handler + const PvDeviceInfo *lDeviceInfo = nullptr; + + PvGenParameterArray* parameter_array = nullptr; ///< ParameterArray handler + callback_ptr data_callback = nullptr; ///< Pointer to function which type is callback_ptr + + CaptureThread* capture_thread = nullptr; + + bool capture_black_flag = false; ///< flag to capture black frame + bool capture_white_flag = false; ///< flag to capture white frame + + cv::Mat sum_mat_for_calibration; + cv::Mat eps; ///The function contains all the needed operations before the camera works. + * Use function to initialize camera at first when you want to capture images.
+ */ + int init_camera(); + + /** + * @brief Enumerate and connect to the camera + * @return Status + * @retval 0 The camera is connected successfully + * @retval -1 lSystem.Find() error + * @retval -2 lLastDeviceInfo is NULL, camera not found + */ + int enum_connect_camera(); + + /** + * @brief Connect to the camera + * @details Be sure to enumerate the camera first and lLastDeviceInfo is not NULL + * @return Status + * @retval 0 Connect to the camera successfully + * @retval -1 PvDevice::CreateAndConnect() error + * @retval -2 lLastDeviceInfo is NULL + */ + int connect_camera(); + + /** + * @brief Get the parameters of camera + */ + void get_camera_parameters(); + + /** + * @brief Set MROI + * @details
Setting MROI needs to happen as following sequence of commands:
+     * 1. Disable MROI
+     * 2. Clear old MROI indexes & values
+     * 3. Set new MROI indexes & values
+     * 4. Set STOP INDEX after the last known MROI index
+     *    FX10/FX10e the STOP INDEX: MROI top offset = 1081, MROI height = 0
+     * 5. Enable MROI
+ * @param vec Vector contains mroi parameters + */ + void set_MROI(const vector &vec); + + /** + * @brief Config the parameters of camera + * @return Status + * @retval 0 Configure camera parameters successfully + * @retval -1 Failed to configure camera parameters + */ + int config_camera(); + + /** + * @brief Open stream to the GigE Vision or USB3 Vision device + * @return Status + * @retval 0 The stream is opened successfully + * @retval -1 lStream is NULL or PvStream::CreateAndOpen() error + */ + int open_stream(); + + /** + * @brief Configure streaming for GigE Vision devices + * @return Status + * @retval 0 Configure stream successfully + * @retval -1 lDeviceGEV is NULL + * @details First, we use a dynamic cast to determine if the PvDevice object represents a GigE Vision device. If it is a + * GigE Vision device, we do the required configuration. If it is a USB3 Vision device, no stream configuration is + * required for this sample. When we create a pointer to the PvStream object, we use a static cast (because we already + * know that the PvStream object represents a stream from a GigE Vision device (PvStreamGEV), and no checking is required) + */ + int configure_stream(); + + /** + * @brief Create stream buffers to allocate memory for the received images + * @details PvStream contains two buffer queues: an “input” queue and an “output” queue. First, we add PvBuffer + * objects to the input queue of the PvStream object by calling PvStream::QueueBuffer once per buffer. As images + * are received, PvStream populates the PvBuffers with images and moves them from the input queue to the output queue. + * The populated PvBuffers are removed from the output queue by the application (using PvStream::RetrieveBuffer), + * processed, and returned to the input queue (using PvStream::QueueBuffer) + * + * The memory allocated for PvBuffer objects is based on the resolution of the image and the bit depth of the + * pixels (the payload) retrieved from the device using PvDevice::GetPayloadSize. The device returns the number of bytes + * required to hold one buffer, based on the configuration of the device + */ + void create_stream_buffers(); + + /** + * @brief Start acquisition + * @author ChengLei + * @details The function send start command to camera in order to start acquisition. + * It will start a new thread CaptureThread to get image buffer from stream. + */ + void start_acquisition(); + + /** + * @brief Stop acquisition + * @author ChengLei + * @details The function send stop command to camera in order to stop acquisition. + */ + void stop_acquisition(); + + /** + * @brief Free stream buffers + * @author Chenglei + * @attention Remenber to free stream buffers before exiting the program + */ + void free_stream_buffers(); + + /** + * @brief Register callback function + * @param ptr Pointer to the callback function + */ + inline void register_data_callback(callback_ptr ptr){ + data_callback = ptr; + } + + /** + * @brief Unregister callback function + */ + void unregister_data_callback(){ + data_callback = nullptr; + } + + /** + * @brief Register callback function for calibration + */ + void register_callback_calibration(); + + /** + * @brief Register callback function for acquisition + */ + void register_callback_acquisition(); + + int init_calibration_load(); + +signals: + void send_calibration_finished_message(); + void send_data_to_ui(uint8_t*); + +public slots: + /** + * @brief Load calibration file for black frame and white frame + * @details read "./black" and "./white" files for black_buf and white_buf + */ + void load_calibration(); +}; + +/*--------------fx10 capturethread-------------------*/ + +/** + * @brief The CaptureThread class + * @details CaptureThread runs when camera starts capture. + * Processing to captured buffers depends on callback function which registered before + */ +class CaptureThread: public QThread +{ Q_OBJECT + +private: + + +protected: + /** + * @brief CaptureThread runs when camera starts capture + * @details Processing to captured buffers depends on callback function which registered before + */ + void run(); + + +public: + QMutex stop_mutex; + bool m_stop = false; + explicit CaptureThread(QObject *parent = NULL); + void exit_thread(); +}; + +/*-------------rgb_camera thread--------------*/ +class RGB_CaptureThread: public QThread +{ Q_OBJECT + +private: + + +protected: + /** + * @brief CaptureThread runs when camera starts capture + * @details Processing to captured buffers depends on callback function which registered before + */ + void run(); + + +public: + bool m_stop = false; + QMutex stop_mutex; + explicit RGB_CaptureThread(QObject *parent = NULL); + void exit_thread(); +}; + + +/* -----------------------RGB_CAMERA--------------------- */ +class RGB_Camera : public QObject +{ + Q_OBJECT +public: + PvDevice* lDevice = nullptr; ///< Camera device handler + PvStream* lStream = nullptr; ///< Stream handler + bufferlist lbufferlist; ///< buffer list to manage memory + + PvGenCommand *lStart; ///< GenICam command to start capture + PvGenCommand *lStop; ///< GenICam command to stop capture + PvGenCommand *lUserSetLoad; + PvGenCommand *Blackcal; + PvGenCommand *Whitecal; + PvGenCommand *lUserSave; + PvGenCommand *lFFCUserSetSave; + + PvSystem lSystem; + const PvDeviceInfo* lLastDeviceInfo = nullptr; ///< DeviceInfo handler + const PvDeviceInfo *lDeviceInfo = nullptr; + + PvGenParameterArray* parameter_array = nullptr; ///< ParameterArray handler + RGB_CaptureThread* rgb_capture_thread = nullptr; + +// double m_gain = 2; +// double m_exposuretime; +// double m_framerate; + + explicit RGB_Camera(QObject *parent = nullptr); + + ~RGB_Camera(); + + int init_camera(); + int enum_connect_camera(); + int connect_camera(); + int config_camera(); + void get_camera_parameters(); + int open_stream(); + int configure_stream(); + void create_stream_buffers(); + void start_acquisition(); + void stop_acquisition(); + void free_stream_buffers(); +signals: + void send_rgbdata_to_ui(uint8_t*); +}; + + +#endif // CAMERA_H diff --git a/log b/log new file mode 100644 index 0000000..fa73c7d --- /dev/null +++ b/log @@ -0,0 +1,34 @@ +2022 08.24 10:24:08 On +2022 08.24 10:25:16 Off +2022 08.24 10:30:59 On +2022 08.24 10:32:00 Off +2022 08.24 10:35:27 On +2022 08.24 10:36:37 Off +2022 08.24 10:38:57 On +2022 08.24 10:40:31 Off +2022 08.24 10:55:44 On +2022 08.24 10:55:48 Off +2022 08.24 10:56:33 On +2022 08.24 10:56:44 Off +2022 08.24 11:01:34 On +2022 08.24 11:06:28 On +2022 08.24 13:44:44 On +2022 08.24 14:11:26 On +2022 08.24 15:29:14 On +2022 08.24 15:41:32 On +2022 08.24 15:48:04 On +2022 08.24 15:58:33 On +2022 08.24 16:04:39 On +2022 08.24 16:08:21 On +2022 08.24 16:18:27 On +2022 08.24 16:20:15 On +2022 08.24 16:22:59 On +2022 08.24 16:25:58 On +2022 08.24 16:31:16 On +2022 08.24 16:32:35 On +2022 08.24 16:35:44 On +2022 08.24 16:37:29 On +2022 08.24 16:46:17 On +2022 08.24 17:10:04 Off +2022 08.24 17:15:07 On +2022 08.24 17:21:01 On diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..ddafc49 --- /dev/null +++ b/main.cpp @@ -0,0 +1,30 @@ +#include "widget.h" +#include +#include "pthread.h" +#include "unistd.h" +#include "sys/types.h" +#include "sys/sysinfo.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + Widget w; + w.show(); +// cpu_set_t get; +// cpu_set_t mask; +// int num = sysconf(_SC_NPROCESSORS_CONF); +// pthread_t thread_id = pthread_self(); +// cout << thread_id << endl; +// CPU_ZERO(&mask); +// CPU_SET(6, &mask); +// sched_setaffinity(0, sizeof(mask), &mask); +// CPU_ZERO(&get); +// sched_getaffinity(0, sizeof(get), &get); +// for(int i=0; i + + + + +class Parameter{ +public: + QTime lamp_timer; + uint32_t lamp_used_time = 0; + string password; + vector file_info = vector(2); + uint32_t valve_cnt_vector[256] = {0}; + QDateTime current_time; +}; + + + + +#endif // PARAMETER_H diff --git a/read_buffer.py b/read_buffer.py new file mode 100644 index 0000000..54fbf63 --- /dev/null +++ b/read_buffer.py @@ -0,0 +1,20 @@ +import numpy as np +import matplotlib.pyplot as plt + +img_names = [f"mask_result{i}" for i in range(23, 40)] +mask_names = [f"padding_result{i}" for i in range(23, 40)] + +for img_name, mask_name in zip(img_names,mask_names): + with open(img_name, "rb") as f: + data = f.read() + with open(mask_name, "rb") as f: + data_mask = f.read() + img = np.frombuffer(data, dtype=np.uint8).reshape((1024, 256, -1)) + mask = np.frombuffer(data_mask, dtype=np.uint8).reshape((1024, 256, -1)) + fig, axs = plt.subplots(2, 1, constrained_layout=True) + axs[0].imshow(img) + #axs[0].set_title(f'mask_result{i}') + axs[1].imshow(mask) + #axs[1].set_title(f'padding_result{i}') + plt.title(f"img : {img_name}") + plt.show() diff --git a/start_qt.sh b/start_qt.sh new file mode 100644 index 0000000..f2a1250 --- /dev/null +++ b/start_qt.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +echo "123456" | sudo -S dpkg -i /home/dt/eBUS_SDK_Ubuntu-18.04-x86_64-6.2.8-5877.deb +sleep 6 +echo "123456" | sudo -S chmod 777 /dev/ttyS0 +sleep 20 +cd /home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0 +./tobacco_v1_0 > /home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0/123.txt diff --git a/sys_parameter b/sys_parameter new file mode 100644 index 0000000..f2304a0 --- /dev/null +++ b/sys_parameter @@ -0,0 +1,2 @@ +151248 +100 diff --git a/thread.cpp b/thread.cpp new file mode 100644 index 0000000..14eae40 --- /dev/null +++ b/thread.cpp @@ -0,0 +1,376 @@ +/** + * @file thread.cpp + * @author DingKun & ChengLei + * @date 2022.3.15 + * @brief The file contains the details about implementation of three thread class SendThread,RecvThread,SaveThread and one class SaveBuf + * @details SendThread sends image to python.RecvThread receives mask image from python.SaveThread save three + * images by turns.SaveBuf maintenances the saved images. + */ + +#include "thread.h" +#include "unistd.h" +#include "fcntl.h" +#include "sys/types.h" +#include "sys/stat.h" +#include "modbus.h" + + +#define FIFO_PATH "/tmp/dkimg.fifo" +#define FIFO_MASK "/tmp/dkmask.fifo" +#define FIFO_RGB "/tmp/dkrgb.fifo" +#define FIFO_MASK_RGB "/tmp/dkmask_rgb.fifo" + +#define ACQUISITION_ENABLE + +extern QSemaphore ready_to_send; +extern QSemaphore ready_to_send_rgb; +extern int file_threshold; +extern int file_threshold_rgb; +extern int file_padding; + +extern float* send_buf; +extern float* send_valid_buf; + +extern uint8_t* send_rgb_buf; + +extern modbus_t* plc; + +uint8_t* recvbuf = nullptr; +uint8_t* recvbuf_rgb = nullptr; +extern uint8_t* temp_rgb; + +extern Camera* camera; + +SaveBuf* save_buf_queue = new SaveBuf(); + +uint8_t* merge_mask = new uint8_t[256 * 1024]; +uint8_t* merge_mask_rgb = new uint8_t[256 * 1024]; +//uint8_t* merge_bit2byte = new uint8_t[32 * 1024]; +//uint8_t* merge_bit2byte_rgb = new uint8_t[32 * 1024]; + +uint8_t* send_mask_guo = new uint8_t[32 * 1024]; + +SendThread::SendThread(QObject *parent) : QThread(parent) +{ + recvbuf = new uint8_t[SPEC_MASK_HEIGHT * SPEC_MASK_WIDTH]; + recvbuf_rgb = new uint8_t[RGB_MASK_HEIGHT * RGB_MASK_WIDTH]; +} + +SendThread::~SendThread() +{ + if( recvbuf ) delete recvbuf; + if( recvbuf_rgb ) delete recvbuf_rgb; +} + +void SendThread::run() +{ + //建立管道 + if(access(FIFO_PATH, F_OK) == -1) + { + int res = mkfifo(FIFO_PATH, 0777); + if(res < 0) + { + cout << "make img fifo failed!" << endl; + return; + } + } + if(access(FIFO_MASK, F_OK) == -1) + { + int res = mkfifo(FIFO_MASK, 0777); + if(res < 0) + { + cout << "make mask fifo failed!" << endl; + return; + } + } + if(access(FIFO_RGB, F_OK) == -1) + { + int res = mkfifo(FIFO_RGB, 0777); + if(res < 0) + { + cout << "make rgb fifo failed!" << endl; + return; + } + } + if(access(FIFO_MASK_RGB, F_OK) == -1) + { + int res = mkfifo(FIFO_MASK_RGB, 0777); + if(res < 0) + { + cout << "make mask_rgb fifo failed!" << endl; + return; + } + } + + int fd_img = open(FIFO_PATH, O_WRONLY); + int fd_rgb = open(FIFO_RGB, O_WRONLY); + + string str = to_string(file_threshold); + int ret = write(fd_img, str.c_str(), str.size()); + if(ret > 0) + cout << ">>> spec threshold " << file_threshold << " send to python" << endl; + + str = to_string(file_threshold_rgb); + ret = write(fd_rgb, str.c_str(), str.size()); + if(ret > 0) + cout << ">>> rgb threshold " << file_threshold_rgb << " send to python" << endl; + + uint8_t padding_hash[256] = {0}; + uint8_t padding_hash_rgb[256] = {0}; + + while(1) + { + ready_to_send.acquire(); //block if no send_buf is ready! + ready_to_send_rgb.acquire(); + + int k = 0; + for( int i = 0; i < SPEC_HEIGHT; i++ ) + { + for(uint j = 0; j < valid.size(); j++ ) + { + memcpy(send_valid_buf + SPEC_WIDTH * k, send_buf + (i * camera->m_height + valid[j]) * 1024, + sizeof(float) * SPEC_WIDTH); + k++; + } + } + /*存图功能*/ + + if(save_flag == true) + { + static int file_index = 0; + string spec_filename = "./saved_img/spec" + to_string(file_index); + FILE *fp = fopen(spec_filename.c_str(), "wb"); + fwrite(send_valid_buf, SPEC_HEIGHT * SPEC_WIDTH * valid.size() * 4, 1, fp); + fclose(fp); + string rgb_filename = "./saved_img/rgb" + to_string(file_index); + fp = fopen(rgb_filename.c_str(), "wb"); + fwrite(send_rgb_buf, RGB_HEIGHT * RGB_WIDTH * 3, 1, fp); + fclose(fp); + file_index++; + cout << "save img success!" << endl; + } + /////////////////////////////// + + //发送给python + write(fd_img, send_valid_buf, SPEC_WIDTH * valid.size() * SPEC_HEIGHT * sizeof(float)); + + write(fd_rgb, send_rgb_buf, RGB_HEIGHT * RGB_WIDTH * 3); + + int fd = open(FIFO_MASK, O_RDONLY); + read(fd, recvbuf, SPEC_MASK_HEIGHT * SPEC_MASK_WIDTH); + close(fd); + fd = open(FIFO_MASK_RGB, O_RDONLY); + read(fd, recvbuf_rgb, RGB_MASK_HEIGHT * RGB_MASK_WIDTH); + close(fd); + +// save_buf_queue->enqueue(send_valid_buf, (char*)recvbuf); + + //send mask to ui + emit send_mask((char*)recvbuf); //mask********************************************* + emit send_mask_rgb((char*)recvbuf_rgb); + + /*mask图像转换喷阀通道 宽度1024像素对应256个喷阀,1024/256=4,每一行转换为256个bit, + *总共32个字节,最终发送给下位机的数据大小为(32*1024字节)*/ + + //光谱mask阀通道转换 + int sum = 0; + for(int i=0; i 0) ? (merge_mask[i/4] = 1) : (merge_mask[i/4] = 0); + sum = 0; + } + //rgb mask阀通道转换 + sum = 0; + for(int i=0; i 0) ? (merge_mask_rgb[i/4] = 1) : (merge_mask_rgb[i/4] = 0); + sum = 0; + } + + //延长喷阀开启时间,纵向拉长像素 + uint8_t temp_buf[1024 * 256] = {0}; + for(int i=0; i<1024; ++i) + { + if(i == 0) + { + for(int j=0; j<256; ++j) + { + while(padding_hash[j] > 0) + { + temp_buf[padding_hash[j]*256 + j] = 1; + --padding_hash[j]; + } + } + } + for(int j=0; j<256; ++j) + { + if(merge_mask[i * 256 + j] == 1) + { + temp_buf[i * 256 + j] = 1; + int padding = 0; + while(padding < file_padding) + { + if(i + padding >= 1024) + { + padding_hash[j] = file_padding - padding; + break; + } + else + { + temp_buf[(i + padding) * 256 + j] = 1; + ++padding; + } + } + } + } + } + + uint8_t temp_buf_rgb[1024 * 256] = {0}; + for(int i=0; i<1024; ++i) + { + if(i == 0) + { + for(int j=0; j<256; ++j) + { + while(padding_hash_rgb[j] > 0) + { + temp_buf[padding_hash_rgb[j]*256 + j] = 1; + --padding_hash_rgb[j]; + } + } + } + for(int j=0; j<256; ++j) + { + if(merge_mask_rgb[i * 256 + j] == 1) + { + temp_buf_rgb[i * 256 + j] = 1; + int padding = 0; + while(padding < file_padding) + { + if(i + padding >= 1024) + { + padding_hash_rgb[j] = file_padding - padding; + break; + } + else + { + temp_buf_rgb[(i + padding) * 256 + j] = 1; + ++padding; + } + } + } + } + } + + //计算喷伐开启次数 + /* + for(int i=0; i=0; --j) +// temp = (temp << 1) | temp_buf[i + j]; +// merge_bit2byte[i/8] = temp; +// } +// for(int i=0; i<256*1024; i+=8) +// { +// uint8_t temp = 0; +// for(int j=7; j>=0; --j) +// temp = (temp << 1) | temp_buf_rgb[i + j]; +// merge_bit2byte_rgb[i/8] = temp; +// } + //合并两个mask + for(int i=0; i<256*1024; i+=8) + { + uint8_t temp = 0; + uint8_t temp_rgb = 0; + for(int j=7; j>=0; --j) + { + temp = (temp << 1) | temp_buf[i + j]; + temp_rgb = (temp_rgb << 1) | temp_buf_rgb[i + j]; + } + temp |= temp_rgb; + send_mask_guo[i/8] = temp; + } + + emit send_valve_data(send_mask_guo); + } +} + +SaveBuf::SaveBuf() +{ + buf = new float[SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT * SAVEIMGNUMBER]; + mask = new char[1024 * 256 * SAVEIMGNUMBER]; + buf_copy = new float[SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT * SAVEIMGNUMBER]; + mask_copy = new char[1024 * 256 * SAVEIMGNUMBER]; +} + +SaveBuf::~SaveBuf() +{ + delete [] buf; + delete [] mask; + delete [] buf_copy; + delete [] mask_copy; +} + +void SaveBuf::enqueue(float* buf_tmp, char* mask_tmp) +{ + mutex.lock(); + memcpy(buf + index * SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT, buf_tmp, SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT * 4); + memcpy(mask + index * 1024 * 1024, mask_tmp, 1024 * 1024); + mutex.unlock(); + index++; +// cout << "save index ==================" << index << endl; + if(index >= SAVEIMGNUMBER) + index = 0; +} + +void SaveBuf::save() +{ + mutex.lock(); + memcpy(buf_copy, buf, SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT * SAVEIMGNUMBER * 4); + memcpy(mask_copy, mask, 1024 * 1024 * SAVEIMGNUMBER); + mutex.unlock(); + char* filename; + QDateTime time = QDateTime::currentDateTime(); + QString str = time.toString("yyyyMMddhhmmss"); + for( int i = 0; i < SAVEIMGNUMBER; i++) + { + QString mask_name = str + "mask" + QString::number(i); + filename = mask_name.toLatin1().data(); + FILE* fp = fopen(filename, "wb"); + fwrite(mask_copy + i * 1024 * 1024, 1024 * 1024, 1, fp); + fclose(fp); + + QString buf_name = str + "buf" + QString::number(i) + ".raw"; + filename = buf_name.toLatin1().data(); + fp = fopen(filename, "wb"); + fwrite(buf_copy + i * SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT, SPEC_WIDTH * VALIDBANDS * SPEC_HEIGHT * 4, 1, fp); + fclose(fp); + cout << ">>> save success"; + } +} + +//savethread保存图片线程,该线程保持一个环形队列始终存放实时图像 +SaveThread::SaveThread(QObject *parent) : QThread(parent) +{} + +void SaveThread::run() +{ +// cout << "save thread running" << endl; + while (1) + { + + save_flag.acquire(); + save_buf_queue->save(); + cout << "acquired!!" << endl; + } +} + diff --git a/thread.h b/thread.h new file mode 100644 index 0000000..82fe736 --- /dev/null +++ b/thread.h @@ -0,0 +1,83 @@ +/** + * @file thread.h + * @author DingKun & ChengLei + * @date 2022.3.15 + * @brief The file contains three thread class SendThread,RecvThread,SaveThread and one class SaveBuf + * @details SendThread sends image to python.RecvThread receives mask image from python.SaveThread save three + * images by turns.SaveBuf maintenances the saved images. + */ + +#ifndef THREAD_H +#define THREAD_H + +#include +#include +#include +#include +#include +#include +#include "camera.h" + +#define SAVEIMGNUMBER 2 + +/** + * @brief The SendThread class + * @details SendThread contains a send_server and a send_socket connect to python process. + * It detects if send_buf is ready to send by semaphore.If send_buf is ready to send, it obtains valid + * bands in send_buf then send to python process by send_socket + */ +class SendThread: public QThread +{ Q_OBJECT +protected: + /** + * @brief It detects if send_buf is ready to send by semaphore.If send_buf is ready to send, it obtains valid + * bands in send_buf then send to python process by send_socket. Also, if the ACQUISITION_ENABLE flag is defined, + * it is responsible for saving both calibrated image and raw image, but the mission of sending to python is stopped. + */ + void run(); + +public: + explicit SendThread(QObject *parent = NULL); + ~SendThread(); + + volatile bool save_flag = false; + +signals: + void send_valve_data(uint8_t* spec_mask); + void send_to_up_machine(float*); + void send_mask(char* buf); + void send_mask_rgb(char* buf); +}; + + +class SaveBuf +{ +public: + SaveBuf(); + ~SaveBuf(); + void enqueue(float* buf_tmp, char* mask_tmp); + void save(); + +private: + QMutex mutex; + + float* buf; + char* mask; + float* buf_copy; + char* mask_copy; + + int index = 0; +}; + +class SaveThread: public QThread +{ Q_OBJECT +protected: + void run(); + +public: + explicit SaveThread(QObject *parent = NULL); + QSemaphore save_flag; +}; + + +#endif // THREAD_H diff --git a/tobacco_v1_0 b/tobacco_v1_0 new file mode 100644 index 0000000000000000000000000000000000000000..e61a1b03c6e36cd88ea827249c1f65d8089ef52d GIT binary patch literal 310512 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 literal 0 HcmV?d00001 diff --git a/tobacco_v1_0.pro b/tobacco_v1_0.pro new file mode 100644 index 0000000..9ecbf90 --- /dev/null +++ b/tobacco_v1_0.pro @@ -0,0 +1,81 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2022-03-06T19:05:49 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = tobacco_v1_0 +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +UI_DIR += ./ + +SOURCES += \ + main.cpp \ + widget.cpp \ + camera.cpp \ + thread.cpp \ + parameter.cpp + +HEADERS += \ + widget.h \ + camera.h \ + thread.h \ + parameter.h + +FORMS += \ + widget.ui + + +LIBS += -L/opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/lib/ -lEbTransportLayerLib \ + -lPtUtilsLib \ + -lPvBase \ + -lPvCameraBridge \ + -lPvGenICam \ + -lPvPersistence \ + -lPvStream \ + -lPvTransmitter\ + -lSimpleImagingLib \ + -lEbUtilsLib \ + -lPtConvertersLib \ + -lPvAppUtils \ + -lPvBuffer \ + -lPvDevice \ + -lPvGUI \ + -lPvSerial \ + -lPvSystem \ + -lPvVirtualDevice + +INCLUDEPATH += /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include +DEPENDPATH += /opt/pleora/ebus_sdk/Ubuntu-18.04-x86_64/include + + +LIBS += -L/usr/lib/x86_64-linux-gnu/ -lopencv_core \ + -lopencv_imgproc \ + -lopencv_highgui \ + -lopencv_imgcodecs \ + +INCLUDEPATH += /usr/include/opencv2 +DEPENDPATH += /usr/include/opencv2 + +LIBS += -L/usr/lib/x86_64-linux-gnu/ -lmodbus +INCLUDEPATH += /home/dt/下载/libmodbus-3.1.6/install/include/modbus + +#RESOURCES += \ +# image_use.qrc + + diff --git a/tobacco_v1_0.pro.user b/tobacco_v1_0.pro.user new file mode 100644 index 0000000..157fb79 --- /dev/null +++ b/tobacco_v1_0.pro.user @@ -0,0 +1,216 @@ + + + + + + EnvironmentId + {3134a746-b29c-4a8f-8071-aa79d42fc02d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + 桌面 + 桌面 + {3bf39791-694f-41b0-8dcf-bfce0aa84de8} + 0 + 0 + 0 + + /home/dt/2022.8.1/tobacco_v1_0 + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 1 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + 在本地部署 + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + tobacco_v1_0 + + Qt4ProjectManager.Qt4RunConfiguration:/home/dt/tobacco_huaian/aaaaa/2022.8.21/2022.8.20/tobacco_v1_0/tobacco_v1_0.pro + true + + tobacco_v1_0.pro + false + + /home/dt/2022.8.1/tobacco_v1_0 + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/tobacco_v1_0.pro.user.3134a74 b/tobacco_v1_0.pro.user.3134a74 new file mode 100644 index 0000000..6f04505 --- /dev/null +++ b/tobacco_v1_0.pro.user.3134a74 @@ -0,0 +1,216 @@ + + + + + + EnvironmentId + {3134a746-b29c-4a8f-8071-aa79d42fc02d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + 桌面 + 桌面 + {3bf39791-694f-41b0-8dcf-bfce0aa84de8} + 0 + 0 + 0 + + /home/dt/2022.8.1/tobacco_v1_0 + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 1 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + 在本地部署 + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + tobacco_v1_0 + + Qt4ProjectManager.Qt4RunConfiguration:/home/dt/2022.8.1/tobacco_v1_0/tobacco_v1_0.pro + true + + tobacco_v1_0.pro + false + + /home/dt/2022.8.1/tobacco_v1_0 + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/tobacco_v1_0.pro.user.501d48d b/tobacco_v1_0.pro.user.501d48d new file mode 100644 index 0000000..25ae13a --- /dev/null +++ b/tobacco_v1_0.pro.user.501d48d @@ -0,0 +1,216 @@ + + + + + + EnvironmentId + {501d48d5-9987-478d-af86-7722c8e8d808} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + 桌面 + 桌面 + {12453195-ba84-48d3-aaa4-8461ede8ab5c} + 0 + 0 + 0 + + /home/lzy/2022.6.14/tobacco_v1_0 + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 1 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + 在本地部署 + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + tobacco_v1_0 + tobacco_v1_02 + Qt4ProjectManager.Qt4RunConfiguration:/home/lzy/2022.8.1/tobacco_v1_0/tobacco_v1_0.pro + true + + tobacco_v1_0.pro + false + + /home/lzy/2022.6.14/tobacco_v1_0 + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/tobacco_v1_0.pro.user.9db08b5 b/tobacco_v1_0.pro.user.9db08b5 new file mode 100644 index 0000000..227f286 --- /dev/null +++ b/tobacco_v1_0.pro.user.9db08b5 @@ -0,0 +1,216 @@ + + + + + + EnvironmentId + {9db08b5e-f7e3-4ec9-8b00-e647974b4cff} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {c3ee8908-68b5-4ade-bc91-1c663943909c} + 0 + 0 + 0 + + /home/chenglei/Documents/Tobacco_project/2022.8.9_restart/tobacco_v1_0 + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 1 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + 在本地部署 + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + tobacco_v1_0 + tobacco_v1_02 + Qt4ProjectManager.Qt4RunConfiguration:/home/chenglei/Documents/Tobacco_project/2022.8.20/2022.8.14/tobacco_v1_0/tobacco_v1_0.pro + true + + tobacco_v1_0.pro + false + + /home/chenglei/Documents/Tobacco_project/2022.8.9_restart/tobacco_v1_0 + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/tobacco_v1_0.pro.user.cfde348 b/tobacco_v1_0.pro.user.cfde348 new file mode 100644 index 0000000..4bf81d2 --- /dev/null +++ b/tobacco_v1_0.pro.user.cfde348 @@ -0,0 +1,216 @@ + + + + + + EnvironmentId + {cfde348c-c666-4b94-a936-53deb6e48232} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {e3fa18b5-f763-4038-947c-caf36c58ed7b} + 0 + 0 + 0 + + /home/nvidia/tobacco_v1_0 + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + tobacco_v1_0 + + Qt4ProjectManager.Qt4RunConfiguration:/home/nvidia/tobacco_v1_0/tobacco_v1_0.pro + true + + tobacco_v1_0.pro + false + + /home/nvidia/tobacco_v1_0 + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/white b/white new file mode 100644 index 0000000000000000000000000000000000000000..e8111f92889ddce94518c54041ef1f45a3565631 GIT binary patch literal 163840 zcmYJcdt8-Qn&-O_5h0G`IEv%RhtWxko#Uk)hoc``a-0PB+cviC#B`jPwrniRB9=ys zF<3^40Ra&(UbY|tA{P<2AOa$6Vp)`yC6<;LV<5&5O9i|HMBEw`4C?v*-j({yAN#W} z@B6Oxtmn3#+j@4>$&Z|_(H}c2dsaIe-d*i<`>y8u8fWaqwa)O@);ZHF);l{E#XDWa zpE&3Dt#^JuWrH*4y?AG3-A1RkIl<{2w$bV7N_5UWli(cxJl+|TyU`hvk>Cs-ndEHp zNp`k%Cfo0!XOo=uMaj&Q>};8m;;er)#hH`6*;%+X)fwqZbvhhr&hgXJoH4JYI%D7B zw@YbG@4Qs!{MS>RF)e9McVe1zu7A2SXT;~s^SLu}$W~|i#I4SzH@7k7=g!70TbX;i zGo;DIH5YJicebqA#xvWQW4p6*?GCQ*U>z=J<9U}e&TpqP=gM|x?>Vkb-R_*5vV(iL zHk;qyb2&RkxtvW2E@xEL4q({f4366A3}3o~`L^5hG@ab$tY5s%8FzXsFl_^8+nuiV zZO+)2Gq`8Bvo|f*=|4G__2)76UT1oDfzv;>5Los(Ju3>G;qC(9-wQkitY@#&Q(nke z+*iSSauJ{NnRg$r0%y{(Le^CTZ3>+8H?qiH1VAS_w#wZ4cVrSFIVrN@fF>BrLjNM-BYjB_#^L&Z3@PeB)mq61J;5xwC+^nMnesF^;y$(1% z6H4Ht5@+zW5@*sn#?LNs29+}I35|2W>7G%-T>Q3dzcVy)zcc*KerMFA5@+<75@_V+ zbpYNw06(~)<3Z>64F`eK4UU+9u&%kGU8!^K%u;7i$3b}DAoFuyJ@<4Qcnh~4a7K9r zFXKjQjeM_iJ39*8jC+u42f;%rv@QkKgTPb@j!T`rfu*eZAT%w7Hf5}j*W@zzybO2` zv9?33U7yRqv3Xu&g+?Ca_fqC5gZ~b~X9w-ETWU+~xuPZkuRqsEfTMgj^Br_X-xBVC zXZrzX*uw*?&kg?{;5YF4s03OGhoXtw>3E~m**5MFvUrGR55cQt$RX<=tJguUv!06@ z%Z;3w`5h;C&QS_&c`at%k#1+wG~j&opfmFAgRBqueGW1Qzdr@t=EVx+ zhxX<0G2<^TXIx%=W&C~!-YI9Ua`Zqs zyi{&K7k%q6-wz{m<-l5o?36M0A*VO<5ObD7w=(8Cgx)E4h73InuOD`{Ek6uRE5Ugc zYdL~^YRy&5U&Zw!$W9eJUkNQM!6EmYu0&5%Fb8WW0N&My;fo4*K zPl~4vPlQI6vHpY3`Nzv_z6n}(kUgP{vBBL)$?*YTKLFi~?CIVpFFe)_-w$y+BSN_6 zc`39oJlb$svg(Fk%An&xXm0o~@@;6y+(D%WkvAiQg>&G=F^A9{JPWOpj`6*u+}TnK z&g#q2m+;E)O0FFN_k6w#&rCSNIxB4&)GszTE1UzZ;0OO$(FLB)=6$C4svLb+4y?%D zh;nEsJ~#v%htMnVLFXa(9XcWt=_{dScR8>_%T=NgI$=t=%}ciYoB&S&hoGhONf|uJ znpcBE`*-j>^^pBtcrP3bpDr-?YaCR{ckn)hXO2rhBljmtovtOU?<(>*37XBSu;+@& zg(p^(!wcYGN+mp0f&S*z2_F_5vE{MjI`0dsp-(k>w3^RHo$gad!P`;zqMCJ7!#_vt zch{0?^g%7OsO6p-^wkmcKrJ+=W&B!r|0wIIfp==y_o~qqdL4z%9s-I|81M0Am$6twgs-X1L~C4Gy7QYbCk{`FdW3F5rbs>APe; zY85nKebPB$t1IA7WI0gRDv&{=qvpSktSpthRyZT_4%<2-{EnWhbc*hh+3-6@;QK1* zUIpJALEo8cg>#OeKdRWfD{MaMJ%=7TT>)QL!FQFm4s-izUStVblO9X&u0T$avvTBp zD07A&|5laFi{VQv;g3q29!bZHEP7Tj_GQ*mCH=tlmx1HGDrm~QD=X3ERg8Cp`H!&2 z9AU38?{od3;hk!Dwi>=i2c4}(4;xx~ht&YbQFy9`=Z~U8s^Os;o;?aYqUjNv-i33x zR(zDXYni*&rej>P=vKozMWdt432psrp$jza;Q6aHz*372tbtFe;fZSGg8QIjebEv0 zu;4!e?T)|;mF#KA*bMM^9NL1jD6izO3YkThCs#2CbZ1Y9$kYB|bZYdND#l{Js5yeH z!!sM;hf_z8J>jt$SvblXs?j?&;P@zOKMF0XnU~+o^{PQ{YwfkrkM}pseeN0Hr0%GF zEz-q0vT7K+2KYVTvKE=Bg-^jnh6kG00;30+@SxK@%z8aqY%e9M}{;F`}f&F9cmqa$*z9Jcpt zS9=9~F5RU)r}hDompb|Z_fc5Ih?>7WYu^9XQPp@SutvU#eIYwU{5 z3h;`KgHE0lwlb>u?F9M-=Z*mi@P-SGczcsL80&V*kw;oDu%ER!*K zAD0CznXEShSnwfzG8n@Jj&?BSHsob1Jn%Vt-xg?y4_u!HZPL)`o8j9O_TRp5U$xQ%5$Tf_aaJohoQ{e*RW z0u4UF=339bv<^P{1i4$!wGE8F0lxbbJgnon4ajdiV|)e<~lpyb=CQKt>bb z*?4fUk^2*&G3$CQ8GW4yJgntZ5_{z)aFYyPlE7;c>)OO#vI#wx%sj**P9`%R-(8!S ze-nJR33xUGUkZ9V1^!Hd2Ajcq3Uo+ePfUS7c#lqDo=tpD#V*(czL{gJeUbzX0gsJ_L^+uWH+C8qjSwGeCcj%uifA%3%@R#d9uMp4)E_r z7Ivc(cLO)PI3XKZ*bP2&87~`pXG7~;_OcxCxd%Sa1+HAy!*_QMaOI-o_t@9cyK}+i z9`KqAFXTdJzQ4VP@p7SmF6-jiJBoYcz!y2doeR$Pz-zh4a1MHhd!A=w!{>m%9O#w9 z^EvR5=FYKU3O&0A`PhU0&V?6p!6P!Yb`Rqj`AT2OoG!+_rTO;oo(H}1m?sy$&O-<8 zfnUt?!6S39v4QEeT;-T6;AJoC-3t%o z!M}OXBM<)F!##W1bMkp+FLdCyM?AxP(PQ##oaVg8ST?@6H$-scv93MLsW{YL=FEqd zj5jimJ$^6a<)a(&4Zhr5XWZUdW*u$IiEB+JMzv15u?V~uvF1Y7S_qyB`3-$JqX;;N zdEFsCb#fp3iDFsk)tUQ{(<0Vf#F~k5y~DkycppkE>tP{lDTFT=Yu-L&z6jn`JZvB1 z>|_2S?kj|M_F>Zy!x~Zy?-V09`*;V_ zk4}T57}Jsm?vT*{sm~1A#=c=8T;5%3=j971J7?EE02)P%SLwV7mG&7cRjkJ9eZJh_(}4W zkKZM{=G!`;Axm>f{_}wsUD%V0PDlSA?uYM7;Dh~)L!35F*ADPZF?b~onNN(i zs)Y4%t*?YR6*DdYS0&Jcn9k`E_L76h57&FW=miTgL0JM7De0De_JJ9MXa`KkwR17Ux3o-TiuS*A@7myiS zwtV)n&x2oEmm{mM@_T^zAGy9H`G;rGak1Ocp&bRbT&GtcgXpT@k&M@eycD5#icDO( zr4|_*iyUSY17|UG;qyCu_D6?JBwkO`DmNn8dMaX**IOW>ILrdAC+{l^u`T%>d8yMX1iktfs zH$MRH9Rzmb|4T}t%RzJ|1L2pJ5 z+0XnM8yP%B?h(Bb`?7M2+BdYfpd-Rc;0f@aC!K!K=BcE0=p}MpN$cQ4_G7m%`v^JA z`Ee!aNV6{lm129L&torQb9b?KUc~ON-vgX`7+ZN({F&9+=t%vJ-{Z3zeYhK#@S|?+ z0{&gd)-G_ooBQy^Chy|D3}~8xTxa4N?8K(q34L7Pd?&KAgX=pOV<-4^VFPSqu5G}$ zm1|pBKR$Th=iu#g_TR1OhjirRb8wcrjy+%< zI%X|nt%YaT@cuD$j73J)fa}%h^AFKA9|Ge_##_O?9{|%bbk=Y1(W4mWmt6lPx?vG8 z|BCy61rPrkSeBw2egh3Z;F+cDlPl3LF+BGn_pSmrs~PVjWa(pmTg`o%>tn|L7`gfw zIbX}Q-!k@k=((2l$3m0e0@o+N`3ds6p5Hcb&!>#N9$LnMm(Sqa&v^DzXtDu$i3i^a z=-veGB{pz10UB*&584Q>H-e8u#wQlACJ~r6vd1N&LlPM?2|dB@Q<9OfB<4$o|K;-& zFL?g*_tEBB`bzL#kOB<&^;47CyNC~5N(P2x@V<%XphZm*uy2A7HbHOwp2Rvf+2a=u zPGrwXLQnDgm^5HY=Xdc3d^1x1zYE>46M4vl?|0#IW}^>h`TbeQ;4bi<1w2{sXg2)4n{~>+S6pc~ zGP?_zKt>+!VhrL7qxmgmH~8NLUlNZ<$VQ*#fWvI~C7XG(p(lR%kZkx1pSpt>LDg>7 zZT$0?mK=Bx-+eo=fit{jW`pBw@J;ODU3}G(iV+aAcy~8r@>^C8>)Q<;k;gIF$Ry+Y z<)G6{tRkdoxBZ*$i3rj2#4P4u51+yhegpd$A3x%%{L>up4}8UpJv;|FGjPi{PM=5& zA}j}78QVCzB!~58+xj7FH9p4zgO~J)JhPN%kLO^o$mZSyP4*zy@>BLQCcZHKN9;x8 zpLkZ_(|5}MkbS?`_K|x7@#Qn~*dO=8gZSimxwgGtzj!Y^o5$MsAb# z@+wvVtncCXbnZcS6N4b`p?E>%TKNvd1eTd+h0ESqCa$0uji-yaORIsVuz^F~ zF`uJv$(Lq7!?%~;EE~CS4u0(w*~Qq)_*mMUU*E;+) zd@QX)aEAu4zu|W`ZYi+WDZfhbpU_C^Z;s3VD}*oc`-o$NzowXg_DJoG{O*u#PJK;} zY$)uA*YIaf8NWZu%YHkWIK_FzmQ~}UaoMvo6$>E#P$Yk_5PQ_b6ZD(>%-FXSyC{Ut z+&`rNSyU{7*U19p0>1*kr?L(^AiD^9g5Pn(PM}N6W8sDSsTWe5A~e$Y5S4ZEix{uW z%$fAm_=@36!4de*8G+whFWUnf!cTjz{7~`PUhuA%*Iw3$y!1&f#6x-9FFqiC1aG<% z_dsuAfbdP!syu8j@k}1L(2Nx0f}U>kY$+M})|CLtcYUz` zoo#$6)r!R>W0MavHC(E1YPgKe_zL4uv!FU7)o4YRV3VJd-$w3**qAp{_9L-@TKrUh z{5|a6oGYeYEqp03)FC^_P;Xih>&2Evc4U8QZE?x?%X4_)A4?V#t81y192ofzjzZ7m znb=3rGW17Sp{+M!FaE4Uh?_JH!Va$yo#6*x>|kO;!dK;5`Tp3$Vc4~A$!0DFr^I-O zF{ZCnEQ0Ik19u`i!M)FhTYACOZtQ-=5Jea1iTYRN`zzjL;s}zzs8z-`uWuE<$+s8o ziBYjG#UX;0k*`WFhQ9a>(5P{X@r%>D_W_@3{DA8sI7``Y<2Y#S0q|;UYx!d_3l!_Z zzMg?Uep2faj^z_$n|Im*#~IOX#Q2mdEe7gS0Nq1~*#aS%QNK1JMVVkeRK;RUK2gvVN#e;o0RTE!(w zY+og489rzS@d*5V)gYRq?CdH0l-cfjukmPp+c3@321n_O@}Xe-i#?Cf|8R zexu@3ilr!S73Zgz7xyj4pCOJQpHMgxUSe8=8+>h^_pC6l=n~c3;r9}QQ2n852V=L( z|5qGBzP|ifJ)>HngXoG<>;Tn19YkLrgtw^qp*}Gpqzsr@jEqwiTJ4}rra-`}h!?4e>Airo++T4?qz#WgDH#1{s) z!e8$!#XaQ1A@krXeI4nrZ-g|su&Tp9}8U6zA8=@RV7(6a-h0XJs;De7zI3zPE!r4Vj_yAiKi;-#4Er~ zJ*wgtTD#UEo`@dfhK8&?g!m0{Da8w=k319DJ0=y``-bcX6N6?iV!zOL*)85?bU%3- z>4k=Oi7lg#dehjiCrSUaCoGb!qx=)k2NJg>mam+Q@<)ng*0&Nr$KHozpDB+OGL%~4KJH^Lk-kz)Qu}{Hmh3S0L4K3{Bt2LEs@5(&NS!eIS#UnK z6uFh)Ys4P7U$#f%d2%Lvm))V7W92JkYbd{=yt?#kNRwjAvb>A2GtfiiPMb5poqYZbbO^rJJ1*{XaSwIf)N{{2z8(EU z-8Y|uN_U_ax1%4oqKmg8Q(NJ~&(U3<1MlbTQCrZpTj1BN$nzFp!taaU3?5Q}7k__R zDta%K@lwG-D)6U5Ki+HcIk#*AmnrZfIr=>O$yA=J)o=Kh*OHO3MC4&3G*3kT;QybD z=Xv~p>oexV|F8d)*uZ+8T?dZWA>+S=PuGFJwX7)?{#p&3A2OEw{#ATm2`|Th_Z5uw z0XpzE>|OZ(r{70!E`px_0bUkh??myw2%Id&?))WVz7Gsbq1F4)^*8997@l3m`wDn} zCF6a_JS&-h730Rh+pFNokGQ^uaX*5WKW6MT#29`H3~P|#PoN3)0K^3%LO#KsS;zhB z_|Cb4T519=Yb~E5PoMI>9=Tl)PUCq0l;_s-d>rx;kFJYn{siQ5BfPv3ToVttm?CjwJ4x-JR4C4jGu{GJRiaJFGFbdTM_ej&agrgUm2dwB-< zkRQK`>%^PJ>_nD#Lf=gI2p-JKfKPWKzgf_q8j##fcn2PB+6CR=)6xuNUDq>!7hWE= zi}8tRUCRQlESv9RU*3g$?t+gq(Vf(pbYy~?EcTX6_)@V0#lz(PXQ4-Tfm`Yb@QXt- zkfA{QeV3l0R^YvC_#PkqH2M4C%H`#7zwz0lCgq?zd0E5)$me@AjSt(nMKJ@#Bk;Kw zD;9uk&cdHx2z)P7mvCG%i4R_b|6j5j{PEm%Vi3a=m*BYzS>RT&jBM7L4XtyK8~oJc z1B?)ezx#Pc`!?&#JMFpM&2-4!+@C=6sd7MVyIUsAiz!y7BQF2Qdcm zji^b)P^QZ#Gqn=74#mG}nZmd;SuZ%KZ#8R=zO@J5#s9~LSB^||4Z->3B!BkpRO_VN zucu3X9zOcYLU3aIUg_`oap?T(CeP)bp}aPJ_#)$X=8TZvVeD_kl4bh^b!ZCJ{3DrK2dqd$V>9?xJC{@aRKiC~v0`4V9sgTCwCV%ovpO8uF)Oh@um$9E ztIkFBF^Us7;>ll=*KeGyGfb+9K~{#zr-!ds5<9ws9TZJ$ftmr;t%RnUe7^iwccOUB z_{g$b6l0Sur1}y0!;W~#onjN%MGuu*m9K61ZG1iJUW}jbCp$^75=&_jzOZLq_`B2L zk9hd5MSdLq2>GtI<>YViZDf}yx7c)2^%nS0RHvHAnS|q^U*(1tB4B_XH<+NE;*k)R5?@pT-LArjQmOQn|By? z6~2{d+IvoUR#Tr6ldC*AK3XEaH8!*IX38-tH#65?`CjEy@zt^2l{-^Dui;&Cl8MG{ z*ZB&a6G~sH-{qqy|EYW+w)q158r2F!G46EbI%VUVb5P37>Nn-mbpA;`gWi?rYn+Y$ zxE)`#N_7XyPvf)V7brI?Um|R^$=k_q4NW!nyX2~)K>0T8%3OGQ9BW-*>Tl#jHf~Wa zN`9bfA7tMm!|+YVqMvJzkRj#b7EY6<5i_99LNx-)xv7pp_r`MOu5FzBRRgp9K*H#^rK-z-jX0CT2BKB7$%{G0R&{L+h@|EgC`Ryl3*ofq);FPmJqYLSEU$$R>i z*?f?5#rTR1!>xmPil7 zi&Mml!~nv`IS)7fxpKxy$H+6UQZ5<4ksNgRQst-dlP`f=a=abaIn&gKA5X1HNE7#+ zAb-9Ue{dmZZ;F+pCf`p!IGVh+^77t!sx#nxPkkBtDY7zAX9dlfsPP*(=fjyi<;3Ol zhn^KI`1I$P<8_TeuAG_zoi)>$tBz5e-NN@*U2|A9HP4(os$a~RBhHA0-@(^^L%zW-b4YwpdPDUT zje|^#(Gd^+h`FdK|)f=I|;8~rURBgEAqyANR zDO;}pPS``mXyB^}s)N#gYIKis*xF0Arz?l9`a}8fiVFwl zYadrUntg7X@&Lvc4}VQ@LldX&C{QgJ{y%nr>f%&CpqQ>|6P4drP9uGy_D5p8b*k-T zf0)PK%RVfdO>?O(HteDNW$N}GDUL6{U-eJQd6*hYhl4m~mFg0t8_-RUB8bKQo_+ zDE?8~a`L2Ssh@Ah=bx$^YbJ1J@Qe!><@e)TW$ZvUwu7^6$ifcrx&s<+haUKC zz=xKcZbBXXuBKsVELLK@>+1W7M_enhRpf>aQBDsL=3zU!*em<@(J_rcvlVky4>SN{R67P7tt!0>B+{||U{G0!ex?4^7s7Lc}_dt<=EDrD_L?p?_^ zE0E2Pp#6vJN2`#L55dJp_%$DMeKqS|!?jrCZ8hstoMJ8Wb4K9e$J|GKK-6zp(;E2l z6RxjgPS)j1OaR|MrX`N?W4(6OTM3K(meDV$@a?DJ+g_2pkauT%v3PaB-uS0M9m;VlUO+DX9nJ%E6Tjn}fUDia33QIe)sBC@-T1+( zos};fyPbSL=Ma=PY#45GjH+Mvf26Yu$9()2XW?s2Gh-<}EZ-+*gmUAm*(Vp=$-a<@uRcTmlEyXnhlLq` zB50WzSLX>rBk@0G$uBl}?Z_ecq$}~Gh`sthV$R`;#gbc`@PBlE%qylYHfbIE!yDMH zXR)EFLsdRTcC7MLs)zTVjK4cvc^T|E;`Yi(DPJW&EbJkBCpLD@73CjIzDW0~&x2yd zwjXl5gz?p1Lbjv1PxYS452*H2c?;zzWiu*o7DrA9iNmCDH}Zms;h@ww$UhE=mSE|$+{>gLAR@3)_okFR`}d>!R2lzVDCulY=_ zNOgyEXJQxAqax=$lLwKluX;$;BC6j)`bu)D*d(e?mH(h|I<8}%WT>u`*ugpcg-&c* z@)fGl>z&25p~`K^Kf*6b!2h|94TK%19G>mJQJ<`Qp!_M-Amoft{smukn$F$J*8{KQ z{Zz}UoK8a)wsAXjsK)Mr2FkIihEaKN*J#!~%ESpoWBHkm6YTBaWc+k|<7}N*P^~ro zC-_sGM)4lmH5~=m75Kd2ZpC4UkYZXF^l474UPE_h^}d&k7G|-`5!l zopVqPM0$nnDEX--Mxnfcd|T1MuA7GEl%rC-tTjl(!@mJ{GK>vpHm51OJ(?>-8BZ4~c zvkEkqdXUIxkxz<$a+>%;6MZItRsA9g=g1E+Ia=A^^4nV0kO$n3T~GctG*b1{@(WcD zuh@d>42+H_eV72Mg1Ovqwo>Om^`xGXQM(s6fi}C%S4k0b~wQ8I{Jq+3;)Jn zY#5HOxBx#hke(IvKPkLWhP=?{g7d}oMf4UKeHfWjj|$EbpBE3{PtxZi;%Yg(!#Ufr z^jG0LbA9V!_^F)n@ipnM5gJ(zzaBzV>BNws#(xfbsG4i= zlLt>a$fplgjRAh*JMtItvG7^d&quhB&#K-t@-y3(GY&N*;+4uCo&P;#^I?6f=}i+6 zLQf9$?sxF){^rBTG2^{=7+;HLz>DsQ-ChnI=wCDS zFg!tj8{{Er9lchb(+lSuXT4|X8OG1k9EZ_8oN4yse0MCkKE_$`6g{gR5cHei+;__q z`dn-m&D67m^W5*!KVn5CI*jwt)%2^N|BlXd&ppF+U+7A|8Nn9mVqR!x_bvfXiYKTi zM$UWm4M|g<9DO%Ej>IeSf$LvIc54kj)%&JlxO&gPbM!fhOD+drI^S-3(x~4~oJDV( z40OXSuJhSF12~tk?yKkpdKX1`;Tv>F(mL^-dIHhkB$vJ|v+1AmmU_&T0i$?abq?_G zJn=7a6k;iDoy46^ncqX2=+%^_S^(yN?;|e(CovL-1KMydLb{|k&D2K}4mRJ#N0oIZ z?xQv9TtvfV^{_z}ke`Oj@XSKsp{_zP7U?wganYQLT_`T&>7u_&w|XQYW1N+dPVzQW zk3nqnZ?#W~b=vumQK}7-pKo#nva4h_X$%Hb%^t^GzZO`TOzy_IU>bjD3N6rD3u>_X4#j6(Qp%0rmgf^s&B zrK`><;wt-4F?QD^>baWPBZ-MBUMssx^)j9b%0;M#LpB02_%~H2sTd#j0%x_Fe5lJL zCLWPToP+w>uxjP5$Xil3?4F_AVFtJ)mzitwpJCOR&>;(+$^@6Ht5%&g`A_QnRY%>j z#>E=d|7{0!-ogH}owaR)zqi3F^n^>>%GlKPN2(5B3$Ze4_{-B-XFB-R8GQWyS)0K_ zI`|?s(2)usr@;f888?mJ$^TAH0p3mUM+$sH-8tWb^U3!w+=PBj0#@qBGm{vH_j%;1 zFD1YS3EY!_%qw3lzt;G)v2T6K-0Q)M@q@#vKLM|N&RfG6AM^SM7*;{gk68CA;HK6; zI|ewGL!S?jrxn1p938hD9$AhaSqg1_1x=QqxC@b)Md*lM!jFr= z!(wvt(a6Scm_HhsSc;5(z@88T9#%l_72Gd>|0D4D5q1^l0yuM^c)(o$)%?De@u^9e z_%XDL1rD79Sc5)_MJEy$c!%$At%H8+nPVOM(mLRZ{7H;zCUyU>;k!qvUWJ_acJ+lI=ikIxeHZ*nKY*x7^5wIb zkD8UCyWx{vJd1ywM-D$*^)2wa&ho#fntJO0$!*I=uW#j?KRNIER<33LT#vs+zB#dj z1&s41zH%D*^O@$1zw+fdBUB?KzhC)b<#;)_PA*z!YR5lUy*GKf*OaR>IX#^*4?Sz@ zZ0Dxn`$pj-XAozcrCM+NMsnkg=kaUFkH`6$bH6%ct{izBXE5s*Q~$eEHLLj7_`}NM zrLV+~U&(WWRO@Q4E3c(9!+K76SJgMo^{2KN9pLswFOH>-lG-QPzpBSp-IC5xCml0& zpgK#g99T@Q^o8n{bskuLx^m^_oUzUjc_wH)#WB&v3#3=&zbHOR&KmurJdpB5%DpOg zr@BwYB%@a0<1EI{Ag3ljNdBYFXY0&j(JKiw)Yw2J4wCdNWde_1^S~os9 zv0LpG%7dv6Pc@|SCzW@Kd>eapAvXC1lgo4aD%XU)O#EH_3Uz)jG!@$vn@+Z}`o;z4 z%Vy9%i(OAGr1~-H%%O5DgzEpKJs5Zq(SyO({3& zKBXLm&KKenco}OjHX?hydKf0HV{cw!d_SE(Q@x?`LVwGbsn?}!_27K@4VqhasC;Dk z(W-By&a=$qGIc&t`@M2NbI*_?n5|wr*m>k&lz(aR!3Rn)J@eeBurslZlI0{|jC@#~ zW7L|pUfDFg=j1<;pT&M|$YPEe!Yy|H9PBIkU5P*UGF+>Bv<`As4%U{b{2;y{Iak&F zDwn5vSi4ShjET3zS-cOzw@ff`h2W9K7q;&wx2`%%o%?MoQ;yHXI8+;~xQ*fsIwx$` z_r9r`P3k|%XX@;w^3C!URA;R?h-yCV-aN!jloyU3qdc+Z#D5|eCq7i3M>#FMhcD$b zzLn0W))(o#t@20WJMv)9mE#64v#>L_%YFuz%dpK~HvU5JNMnD;yaK<`k54%(<$P3I zYM+TF-=ut?cv`t`#c>ovQ9eua>O8FSS;C`dg*mHg_b!A^^ZUeK#@CZ?sM>ec%-gYp zc;xArY(n`%CNC%6(-~*g)2d!Xwf4%tD0gM|Y$X=dL`|z~NX4M+Sk$YEDUqMUC$5|- zdsK3TKLmYSrU)+lbZlbrk;6ehLu`NblT@$7h=ug!bjX*X*Cu`NA{OFz-~+XFs{baw zMOP*8sCN{7)*`Fm$4cO-gr4#R=vVa~eI#q>Yk5*V^XSv}Dt-4J;^)xkt#B*-+vwXD zmrNhTMP_{2{pxk+>7q~5Bz%_DJpV}kP9=7Md?LQ%`!v02{EEt{>Ir%nUQo|I(<3v^ z51+~(--Y^TPZ#k7Y;yH$Rs2G{uKa9B25YDPsw1B3)EtY4E7ub5p|59Cf?^P|>6M=q zp48`6atj_h@M*50r`qM0;M1IzZz8`%eI4-$>Cq?qUp*I(zgQRQsQSqJ_Da47cDxP@G8pn8*<9$#(C>El&L{G^@!jicoI@qQgY zyq?})@%X08gzpNT$A3DHexa|JXNBoW>K#@I&x1qgQ(uHn*kXEms^3`fHT57fy&xU& z>I13%pq21%6?n&AoQdx{jXr!!)WeMTcAkHQo_wq55jO7#^i@B^BjA~SfW=3kJ-too ziP(@Oo>7le`JM0v^ppQAzqjcmya%HjwTdRaY3jFF1+NNL_>x|U<2SHAdPaJ>)R$HL1LJ*V^gF2u>o0(1Va3 zsnQ|y`$PxRD{_9Ha03kVUep-wQ}idK-=n9TzJ=NJP)p%;hB0q}yLNgv(pN3wDm^wQ zg2!gzw+b0#j903Gy^1}H=jm^l-p#9mo`;F*X;_V1(xdXVqws+G8UpY6qpYEZ`RKp- zIz1pC(Z_KKeGexbWgVusXMHPhU#f!MN1)45_y#y5t8G3BJjWaSTc~)FP zF$2XFA}>{=@2c1jgjagQUE>`&SFbzuv`u;nAI?@^N^pA)nWxX(+>|P0hW>IT%nKdV z_N2=gP$@E< zMV~!-;3}rkQJ`mk?su1uzFV#y#N59GnR_aF64O9;ijSn%q#qO~X?R!i&VJ2auX75j zO;PQN;;%aAq4>S_LC*y3bBgVoeL#Df;`GX0D4rklitIbpDJb5pGZ^yIiEU$7s*Wb- zJ^9htXKSb}x~94!d~|XeI`gmd^63-xS$PTS(THO!Uar`L&TOb3wqVl!sq-wd>%!f# zLsSzX`%h;yI6HF&Tee%auHu;5rxh!uhUb!*SGJ+f_ZMC;bxa{m*okhQCvT&;g2vJs zv=8ZQh}NZAFx74(9aEhd`yuZ(k4+uyiC3pHOa}l*xNY=khc^3?}R7mt#@)Kwuy_qX$R}) zw+k-pft~Q9zLWp=Q$4^o@J4@mANAhb0^K+V5dS$mtQY6{>(ZDb9bK1>-o)p>U}^wb zYUx#fiaP%_sn{Qzp~q(ExEXm!!G6|x|0L*u&pC?v|B6lEGa21sUaDcQ?Agd#6TtsQ zaFxJ)pTSRY@Nyh`^g8%_Jv3YkewA1M7(K4qdwl-0>czJT8Bk7sB{W%y9$Cp6K7hW< zxn~(Nw-k7nfvaW6!~2Z0gx4>*|5uFtAHel1X!i@?;tasDXn1WgeDiB?{XXM<0De~x z3s?@0=?4%NgZzBNydN_DNATWi*0zc{R?`P9PU)$O$85|cusUn!KM(6&3)cX>i%7um^T&v*@7Y}?vsB%y>Vb5I z)~-P=(zzh{mBcB}sBYN!*P3hm2F5QVFUXm2)$OV-%AAEY@y5_pbQiw&`02{wlG{Sh zC`PD!sB*EPk;E;Jqley>-E8zvLl(I%>M)h}Q%@_Sw^ReF^Gk|%qBrq*rC+7TTObkBQ@>a~BQ`B|ta4(?hbbSZ{F~zIu`g4TI0c`V98vgE*~sd*Z*mOk zmoEFwJwvf`lMiv6kUfa4{}6k019rwJ(-T|$^VPpxcCPwot6#429kN$tpQ;DA?7PN6 z%9E&fz3ec0=-$E}W}M(_^t->#{!Ly&{lE2}0g*$n&)zb*5angGr>h5UBV;j?}+wq2cBlQGUZ*XJJs3)-2puAg92R1Ts0=pORJbW>1 zAN?OPST=Js^`i1o8qb@YjB>Qf8L7TheXW%139H68i8Hwv^|4Y9d-dX1 zEJJY})w)K$jqMW+tf}&+P42ev0{I$vNPN}SsXUzVx%8WC0r_aE*Hs)x`DXpEgmN)D zd#YGY5_zDQ7R5iv>%=qHb@Sg1;dfMT3cW@G!z14D@y94+fY54Lxy6DuEBTd0k`<2>OC(1t2a$J#Qx>~KJ4E8 zt5FO~XMMw8QysQs)X2Z$GobQ!zzC% zoT!hp`sVBZH`J$JJ?`rlALTo~0)9oL>nLO4LyVSxauj|$3YSd>kpC!HSUbL3ShajG^|H?Y>j$g0;8c^SA`K$VW4b7>0cjiB9+}_>a2YRz@%MYla@`UmpG%ea=U!x4HRE|Je}kJ_>Kp=YOo}!><2& z=uM-Cejk0#6Xr8C-_nLGSTD2l5NO z^YG!&bCNs#pNo5j^d0-bJM{domA)5E>Fxivc|J6N9`srKrvZMfdiytS;eQGy@gD$F z<&(vR~0RMHG9`G$|%(^13YR&4AUkl9YD__evyuZx< zSOl_bc$U8X)79@@;~Zt(!1L}=8*i0U>1{vR$VTK44`X=1wZV~k$cJRq zLOc5Iq6>d=MyZeBSfn5RttGvI;F<~P@9=E?Q2$3TNS`o98t?!?M zg883>h!Fiw>|p`;oz4GtAfNglkKQ!>mxFLkpM2sB`mcxd3iF=^9izYWAGj4N1yleJiEd0rT9w! zCE*>W|0OWJ_BD>H9o|Kcv@M6n(OKg0;Cy<@XEMiN=ocn93_nZnRIY_r&g(x8h{q(t zTaOi&Krb<0;a0;_y@Aqqk{{k@5(A)>7bFsh2{ zsr+}sY2rU4;8)@WvPbkkABt6~#wpIv)E}r9gJNH@*Yw{_s?_46V;1N+(-%T@S~`Q`_BDAH)eVKaWzU+Jg3dcA{;l&_iluAc?LCLB z%3iBDu3Zq^~mGvsS)<2pSEgzV|8YjGt0cEcau-$ zJaqa*`tMT{5D~JQ^-*&@Lg$UC8(75oYyX|dBK6rVJK>L=>>;WN;J@FzJJ^@Eb8Q=N zZ?|7L+1vU3bH>?*y|INoVjFbhj6fJ?1M1R|In@Zz|830{cpx2FOhd1vf+x-ftTH}i zlsB2@Hp3Ux2rM*p0_q*FzH_QIpZ~i2Novpw$Y3^KDE9{CNp`VII|9N>NQM;iN1 zDmprqb)`X%RNzlzeOrK+^_|;_p4pE4=>PFD(cSc|%gclh$W;&9%{~hrS7d{?Y_6L; zw0f)h8&peL)l&(qm0d-^i+8)`~_-@6sOldI=@eKQ;O5+e}RtJ`-5i%dr>_9JG4Z< z@gGOa(EaF`-gAoUN^hZ4(EU+W+CR`sT#tQ=|9-&^@;0+Cj7En{MfS6g+IvduMg3=v z5{SrR^5`OrS@xO#;zhb;E!NZsE&P8z4W1E?iYi~8f6W?Gne}j#8nf>ZAw787CdpXJ}oZTRf zbpzRIg|Az|*G**a7IJb6+}>jTTgb#M)_#-mZ!+g?bjfYzy#xL4aNiyD<}KEH8=kqv z*tZz_7JJw&aCwWhwsTJ#_-O~1?dZgI=z0@4+R$q^_`MAoGcY#!w6XqH=z9ZRV_jET z(Hrf^Rx9+mf$ZEsFSfImHt5V6r`$yLfh+7L_uK?0?ZA4IF@YnG?_KTo{7KVp^BimG z19zu|qc-Rv7+US|f|l`nay$C56}f0b7u@8Xbw_Kio5<-cZ2ep4o15shoA6dUb85Vs z$j%+;b_aalK}POy?GAM7KsGzUX(#aCW&NGNc^CP;i*C9LUvxvmd*J9EH0c7z_mHc5 z@PYa6DZdMjyO{efwCzIY==~l%*M*+EZ$JP2l>4ls8-D0UcJ8x(a4orub=?QY{5JF+ zd(BH(g|;O!s{KteHZ!YWK7nR+QEDs(6s}Z z?O?19*7*Z?>;S(%U@vyEj!t{5!mS;^)WtYm=&&wucpo0Q&%W{iIy``04_NPg*6s!O z_mRWy$3&bA-}BooN#^*8s9~y-Gis@LbrR+;2u2E4bHoP?H>FGypw=SxDC8# z<2?MeF6hyLF6m?)KY+Im`#omC4~&0@F~J#l>kaI*WuZ6l2b*V_eC~iJ$;@qJ;s@-T zJFNLObYTo+%iDYt9cbjDelfB!@-}jDlY4ol{XIC_&MY@dY~OX zx{W@&4UKQ3({7``_`UoVbKiy+Zz1ou;bY|V0&`630FFD@g4{a|UTo@szFo}G0sY~( zhxgDCUhvk<9_F=i11!d3tYhPP8V_tzZb)s1<;Rig(I!Szvd?Q|A5?sqoKE1 z!%c8~+m^ZLlH17DZRG4WW8H)YZu30&Sk%s#?a<*SeA15YLJzI_0X^FRpZ~yk%wfUT zeRqL_b)4>k7mwe5VkD=p_>_d-i zeh$g_5&3)qO?u#k9%P~ietXO~kD=KkWZ*Gl{|IjM{V_Cq%$yIP=_B;p6Lbdmy!#NC zA0cO&=STSFNBHa^YyS~_^MJV?K$jnZ{XXvxuqD0V!V6#C=iZ0#EceV|%wptfl^1yK zGmn?wz;F9qXy1j7mn`v0>0*vf_8nx!2f28q6S#h0FT2CNcfiXXo5#Z*c48ArZo0tr zUG~gwo|mq<58k_Z&I=yl5r-E%3Z4gyhYSbYW8Q9?ryLGsXoOzK?;FV7Fl1~@H}@L( z&AHOWT*&ld$znJ2p!X&j-Iw#;J$SVnUNAaQyczrQeQ?>0te`Wx@3UVq4>*wg&hP7n zj=)yrMSi^C;UPNZ0c(8-pFKc69>QY}pdYv`dk7xP=dgzlkr^-h%0uYzBQQKd4t_*_ z9zq}JeBlxP_d{gwAw2k)IUd>k5E}UyI_UdjXz&==o}hc4Aj7=-@Jirw-(&W+M~wdn zo$?5n9w2kT)QaA_;sqZMurbg#$;h2UJlD;9!k@vp|Ku*0Ey= z{304ZK!@@^*o&TIE$v#z1Mu_!UHl{SKLq!zo%z$dfu&uqAMq(z>zYUK?PKWr82$E$ zu^+>8PtXaEfzj~#_fy2LkHO1hc=!oAu?N_D(Nn#Q*~6Gm;H@X{?-O*Y@F0GE1g?aK zUe?$PeS6UP$VFNYGTMuM&;txlSbGoq64z><07DOa+XJ1R;+OTZXZ3Qe7rN-x!`gc6 z-&{+2m|M?2LD%#E|5JFg7h381Pw++`O+qD82cIaz%%xaK6K$v z;O;4F>jm~+@XuOSvX;8X$b#e+e6&19w?9Va9`Vli+(+=#W9a+{o|ioGdjQY$7`$k$ zkwX|Oz6aZjH5Rkpp}pXz$A-0WkbynY^#neBVy~^^I_oR|_DA6J^iy=sQ{H>w>8JL3 zb4EzFJjT{$-UKhS@xs&hSqt(vTe{$Z&F_-Oh=mVqzHZ!td`y%Kz#AhTuzp>;&&$ha zc>j#{U@x)<&%6uoq0hx%O>e?eDfjV*y5ZCN@SAy6uJytz$jEkN{TO@nWG}daj~6pe z?E_$ch)nzlzdZz>z_-{7%-z5UFSAcKCESG;?2p(&4a0u`Z@1tz?8D19Sr7KqGWNR} z*ihJs>D}y;lh8vJcG(qd#346<>n8khi?v`&vZsbsW0R)cgg$MIi*4(|ULAJ>yxjmU zY|L@|?rsI9R=(eWKW^|m_Fh#h>uQ5G?Obn1=iCIBxA=}-H&wQ*_D=TA3eA55z0rz} zZ$*Z%J72~=jc#N8t-vGO`38Fpw)dRBGWK=WaUC4VmcGvO*SYsP_Tn{gh0Q+ATx%=C zZuhx??gXw1?AzBEZ(1ApYh`Wi;P)oq+gXSC-J974Ow8xQ{M%cZqZOTe9p3pXaQ_up zucDjqF}7R*Z_V&_6EcIJllT>My~I72;McF<=ZoycUxD+B$ngc%be{E{=lKiB(s_8H z0XR>ymImbW6#LgHp8X^1IR$_H5!pD&_Z9Kn?`_0*ghT)&X_d5To^S-JR=KKeBn)(kP z^{`T|(GjnDHS$i>k13X~*uCQau@@B|RXmee=7eL&!ZCh74$mKF?Z<)Z_wa5#JpBiF z{}15c59~#}I!^%C9~tY9(Em?7`zQ3xpIGl{Wa2dUG@w7uK$AbSm;9M^pJUu};Qt&x z%6Vvb0eQz)uDSqTz61_@gfC6Q+A1$Ib;*bUV6wn9-!CJO_Lw8KC^!( zP5Tl2{m9(L77HqU%ze_ue6M)KJWr61C#;YCCFE~9y$3nbs}~xu&n)eQ&w5#NFYE2) zxnAh?6uEf{&Yr?AKQZP{;PNME_Y^tM{v}=h6Lxnmdo|CMvA;cfii|$xS;pw*dTcMx zXur@troBP?8?d!%&-e))`4fEj6uSL{E_jB{dJca+hew|A&THv2{E0r+-UlqtkogzD z`~o^WhYq}aUoh@7c>5{)#Z%_|30Qlf?Ni_d_NYE=qdsW*4EcQq9$xU>VYTdXSn1s_ z7{g%|{)5A6+~Tk**S7@mZ>=DV|>74y4(R?Y}tt8ywZtYK|$ z`dKmI1FWR)23Vf|GytCRv)uazSRomHR^$*rYwpbcR$FI(YwiKy0jAy#aFoOAsjn3> zw7(T}PB>!S|Ktk|S1U;X>1)ls?Q1_5`U7kDFRc9^ z`dMNB=3|9b!|!8#tolDXtcEA>)4%q!nhJgF>ynqqOAf|DcKRGv)FgOfx&v6?opZ=T z)N^#&3uOC+EeGCa_$#Cjxj^nZU!eb<+wwAZ<}>^V`1Le=TGNNVd(NKqoW1uMdm^7( z`_SjldFDBGsK$SW4uePEdyXDu>~|O^`8j(EW0vSUvig&OE%XN;EAoM4wx1PoRrH1K z@!;f7(5SG#74;ST2=Dk$h9u2=_g8$FpjXd>0QB}yne)yyregSu3tMwVW{U>;8IDGMsJeLn$?BBroK_774&(wCI0AZ^S#S@29*#K9R|ZlGmTmr{LwObO$))x~rZ0 z-te*7UV>hW`=O(lTiX8EqUs1g`OP%KLuDZ zEdwlX>_BkjkB%E?wS41m&GjD$Eb#NRfmZB?0q|vj6}2jW`vNR?n?L-^eYJXKAaf6d z_5sM#K=9yih5p9h3jUu1t=?GyR^gn1R&+Guo$N%9a6EuDLbrL~?OzALrvq36zeoC`%LdrGH|LW9(9s_na_wIRSmFOXz$zT<51a#l zaey`c`2g_fZ&lXue3U=(JkV;K4J|(#XhphsJrJGv-Rp0KzXm;*4P;#dkrD3s1Mi;> zMBj0JF4s3h;{yZW+W}VCLueWYTwT!fJbGwQe=B_@GUx=y_t4c@zRU-%(B*UANALem zFJ#k;zJJ+|=eX}5pf&3W`+5K}2Hf|M+f4Z73UL3`ylbBN2!ER&{f7;N_N?Vwe_;1V zW`H+sAb1@J?pe!_fmZmR2iiOs(&W#0@cQTQZbSe&Ai#<{&D!P%KyP@wCIHzIKL^-6 z-1KIE6;v7kEd!uw061p6|H1l00?^?B$Xg(~B9MKL&z?A^&fnEmytE7&{;U90b7Q%=IQ?PJam;2O_6|;P53YeBdCS zdkJ0i62A?yqBjkK{|2#V4YGn?ykr$_eF=Vl37&ch9KU3F$^(I!x$dye0@maih&~1O z-}AaU5Pl8-o`I}kAbT(}UyrQc;@ZN2=oUVg1V9h)^XowLULbZ(AlDf0pAGyuS9o6v zod1>UlLFZ{Sm!su-;d851KEen{SCukLXKZT2fl=@@RHTxc!_;D5FY1cfrFvoU|1k} z8$34)?|gq0Xytstx`P6(u&_Y%HS@0vWG@b|!u~Vg&jg}dnB!jpp=SWL3v)f=-qqmi z@Az#n&rXCUe;LT$Y-s8JJJvgjd$+Ns{m}2<7>LFpg{x z_L*V*(4{`CsUN(IY`y3QP1xVjH(}N2k^Ss*=+d}QWa?jJm-r#`=(T0YYXLeV6*>B& zbehpGjkCFy#tWS*y()Vy=O6pSOGZak)*;XT3!RLP)cQRCD!q-|mdnmT?i8(=ja^5ZvP0guwH+Rq9H zvkzZokMvb+>nVP@v2kTjE3Q<(nApDs)UmrjH2YeXih3@d1a$n@h5{c`KB)68Q z*hL$*yJ9Hh7aw28x4OplYs3q#vPXZ9Ekl0u$`$NIrZXwMw0J__`kA0(IDPzr!Cs&UnAaAFc=fdhES=eAs$m`~%OQz&AVr z4o=!}mhh#g@Ig-DpZy7VPJ_$S*lZ2VeFj>cVGV!Aj{7q<;aOn)3(x)qI{gJ$8}UIe zU{8Jt-M<2lUqaunfUOCa01H1qy7KGJv0*@i!LhjsnH`(1eP9(I~?Z^Xfyd1Vp@Cnpo`Ccj6%A<9dv zFsqa2$h#5WkF&@b4DPn$m5P@u9;y6PSNDL&|DULHkIT9~|36kr z9ylscGnTb*t!N#{=Av3ruHmXh(?xTIomjI)YlX97&5Ck~YmKrN)e4y{^}Fz2(RQUtT#uUYFNic=d*Z z^nLt4*B``>_8onI*AoY6v%tI8?fs7O!;=r^-VYyw>j1w$$T&|6TzBP;BeeYyt`qp< zg2jO+$iF4v<;ZsUgGontezE=`$^`GeRqh?%MdT1|#^-Tx*US&O=fW?nly3-_yrcz8 zd=FekpfG1~t)Z4RDUd5pdmuyS_f7~>J#zUL_IFFu#g4|7q;kfSjy zUwIGpGaNpnC1CsdTaPf;z&pGEwx4o{eh4Q%^a%X~UgFG9zSj2+F)k1B%+6aJ^Jd^y z3a$@62Cq@QLXL&f1O>8yunU=@&S{c(gsiZqFU#9OqXt*-<_piQx|GS)M~q#{1@F9tVdU2a_GUE@!p) z1bkd3hQ_uY0CqYoh6Jawc6ETma$aP8dXVq)z*M8LjloQrk6?@UgGcy*|98Sp1y@gi zZ@D>OtcnN0x<3+Yoy0nI680?THt_#nIt{2P|Tv0om$u)6c={WE|-aM|7@;3rxUgoxOp|0Ybop03f9Xfu=go{d_UH4_=3z!#eydd zC|xPeW_@2G{-E5cov`Kjd=~igpw9)L^B#DxANS#YV#1;}_?#i|F?UfWIG4CSod&d| z^B&hJR)=yiWm%ngCZ7FIayOm8D%1ycCV!B%G`!dCh0mBsy$q&K3*c?QsbbNB#XSGs zI1`R9>$xM;5n~_~E()$Fa`yLpKgt|$KRn7@0WRkyzL$F|8AAVl zu!H#--fcd9v9sw{_`c%i9g58_t$P@oaEtPc`mgMx>1R5Y@vn6|%yoi~x#~9On~oSC zn7fOye>!u`llZ&N)t4ntc9{Q;FqimS=&QN+;s0Vx%RR`Kl?@PEQ@7iwuY>${08+6Ph|frni?15d&;ZmJ9BAYIE{kqRmsCm!Xw!1FcQ zEY3O1Vb>pK4LZy`?cCA98hMy`j4{j{sgJSwn!wk_UCo?z)%Wxd=19s{ofx=~+Cuor zQrpaa+6g?y7n94@i7}w?4AEtxT1yFT|bjE>KwzIg=b(N zz8i3)JVE*vu-!&5_(}Z!6KvfK-v0#8b!mJIbJmW9^)|OlI3>GI`jS9M&L=B?}P)w&MxlKc|i3C@Pbo1$M`YZwDmpsjv-+0{^0Ga;A)bOB=lSAaQU~x=Eo(c0iJ7CA;~KMh z)+^w!mN6HeN?S5N)vxooP{zt~c!2`&3!G`&Se|JP?J*B7f#2nmeZJcN!XK@q-`0U) zo}qu;0yY^I`g8eVp6NgIUvP=sQ9OJ}`S1BYiay)SGd&p(zZxIopPKKCr_aJumBurN z!)II{4}RzP!(HgF@F>5xkH>R=@Xac&u{dCyoN4i37C5he#51qN!@u(V1~{^AflG@# z#qYeTS8#3kvF!iF4=6n2)Y!dRmvOzJr}DgT70-Z&9u53O>mJUBZ^^zY@D7dd!%MUW zEM8Oq{=5w=zYgwh2-tOWH`=!wI1>B}Pm%R*cxApMHvvw)CzPZ7a-T1ZVey&IRsDQC zK7JZ7c={IV06wDRHMzo5WBgNGpHpMpV_hSB z#LwkY;342Aa%=eiA^4m2P=|F1ocl9)itoMOiEB&(i$8lR*O%Ae{72y@ckoPa(kBHE!J*S_sku&JC0 z?LIfmeFfJuCK!|Q_>Nuu3o)*13-iPS%xB-gPab8xx!Cb5FB!&o$3Sft_yOkY%#WDI zcCeQJB=G*l&jx+51fQH zOwN9M0^8&)19zeSBJ-m#E~8h&(=o?q|F8?|i#$N!I|`4wW>Ci)!hBM9L6~Dart}4P zi3+%bQ5;K|ELY_zjOEVECnJ~#&VVQB=KRjui(OLk8aC_=!H1ReF#fcQwMEdC48RsX z8J{CswV0M?eb6%{4Qt2FIKVmR)Ef4K5%HO#4{2NuwyF%8ujXse2)+bn1D|DIg@z2h zXkNG-KMQD=Oh%)=a|3nNLi=w3=WL{m>ee?<#~XS6 z4b=O3+NcGrvmP9`9$Oae`ua7r=bj>ezWDuhI68q1EiO8w?z!Ea*QU z*h`;7bNP&VA+(Kg>Tl6IzeZoWD@q&f2Dk2pCqTnE@hiToM-IBtyxaGI1^042wWw%; zZ{9~AQA>xG5G}O&;>IQ;V zK<#Dg{b=OS4rD#IpSo1%c>r5ool`sgI_Lx=;}1|ja%k<0DStZ%4%HULW*?0nZsmd4 zEAMu>HS`A)!gVuWVw^p=pS~0Hc{K~T2lp$w_yBdWpSn{cdVn&^%^jfsw8wM{l@r?O zTWAZ*-~w{g%)uGJA+(JZ!+(bz2Uk%EPjNOnyNlH*$XmcWJp3Jf7hUQz@EpC>u`$Mn ze?!09PoF_^8bJfNoZsiP)Boip(5->p(~Ee$iGHms*qPsQYt$$3Uw`-pu(bGEKV@?# zZGSMzJaG049rUjb>~wI>lO5D4dWY#~CiYVYVLTS3THw)G>(D8IMz;I{f@o_wkqq0X*k3P>LrTWzC(}W zy=)WDgLAn+?uF+lMZ-G|og+F;b-9Ie&`V}mKj<#*q8*>7J)`I&7k?MybkqupyVO8h zUY|kDVsWwe1q<@5wKJ)2_>H=~V3oy3sBbh6z2FVjALlo)(r~edoB)_3m-Pxf6km#+ zw;X?R9k_NhpKsupTd={=Km@|=L1EAK&naVA_2I8Lls+!yW!PNeF#Bh=>+`W-yT zaCs`Q>Or|JaOs{S)E(T)gd?$6`QgL#FK};$7)@*`H-es{NnHl_$z?qr%9`CZ*!jw(gG8e(GBS|D<2LasoP!^Nz8$ z1U*bvSIhoA^ZpU~3BK^r;z`bL2>x^HA+uQ>4A^x)zYn7w&~rqGa;$v56jP?+eDvQbvl}zF>qC5!T96R^-P3M zL>F4ypZzh zj{Br2y5a%!#rHT5?yzjYchm{v0{yOIw&rR2Jp6*3WZ=Ol;|xCEBd-NEo{CQPub~dq z_(V<$K709;jt2OF8MMhR?5GvA&WjxV`D`AT%j zgXBcNqi(*Vo|vQFW6n6AxvuFT$1^XFZ0FtwX(RNzeV8MbqCbXzl`m);>^uWslMi2) zbCh~yJ}R|;s2M^>fYvFl4`VCE_GV0WgQJ7%sQwz9dosB2gMg>oz}^Lm^+BD4tq5N* zLhcQFb_rS?aJ<@qNFMmUH^0UFLin3T%BQHUK?ieL!06)k;)(iqu{(bzPRHMk4>&q5 zaAe}oXdJd9I4^D-b}<;a>}~8y?AxSao$wVSO^lPH*n(|n#cI@d$y34AUI=dkkF35-&2dgn7(Z&F)MYt_)r93&g4wTS z&e<3@pn1OIM{Nsw3V6x*_JCPSld(asqbyG|x6KYbVcr|m?bTr}Q~yUg6n$ofW1Rn(Lw%OoL+ESDc)qt8udfH~ zf^&*kxh;+RQ_jfQYE-h(KW&6R=1NBRo^DB#u~s}-NCw0c}`d($}e}_pdY}^ zRIR7pI-eBduL`aY9Eu!GWjXx-jfa{u%b)%au*qNGL9XI^Zs?PdJau2-ooCU6EdbBp zYmFbP9tNGkH~jV%yhU&D2AD;iMb3UWg|pxdEQ<3-}O8=m2FXLOG7L>0e5llKqqJ0E}b4b%hgSzRgr zW41SA{xzRN-Um!q0Eh4k_=63BH_E(}@90nT^`_4S%iYg8?fQf9>qgZ8c46(|ycBqZ z^TF?f;UWGO_>$_c`5k_y;@@hJ@BxDh%Q{mxXgpdj3%pEp99#`LpbqM@@z2y@InOZ& z?&Y5+&fz}k$GQJ@`3$acBlo*9XhuBNviltBdFn3UI_J@*6X?%J@j*8O+ZT>9imzwXi9p$3nDAxxcg>$Uq*S_zZ7KN)< zOXpa1jAs9je*Gx(3v-zN6)aW{hCP6tpayf}4CapWS(g%-uluW0WzKp~?P$Wle6IB~`~};&He8$j5a)M&CV78{Q$YV1-yU>ga@7&~vm z9i}liKNsfe+*2J-jNui|Cyc)@n2+Hf()O!qW&L3MMC0fy%lIAsz&S@gGASB#iutz$9@x1{TdFz{ zn`s=rs!Z2O#rjtcU}GJ?-aEkh+Rk}kpdnzLuHP~* z8|Ohh)q7uKI}sy!{yyv%;^k%$$8j#Plf;IVChx{R-$mW;!X7aGl6bo|V||Is=)Dsh zKn&izR(t}j+$Y3mV(wQD{;B64Xz8DvNBP0nQ|4mFqrKlb z8~c71zkQ6I@i8{+bnY>OvY3m*96sdkd=ni2d0@>0=DsxMC^K)fdm6cyjeDe;2f{sJ zDlQ}sYCCcB=gq`Us>8mRMcvGb-KS&pCtUXv=I}Yp;Sp?LbpH=Wu$AUgmueE`aliSr z!>3$tKG*(~wn76?v=EzR5jYv$f21CJaxv|(n05vCpShHJgb(PnlzS|td`qzp8)!4M z0L05Tj%nl?EASJck2p#l4O&HcnrM@iv~Lr~HL>pN|8J&#SF^6KX3bxNO=Yb78paQL zi#hASfNQ~T>%dOn{k|Kx|L3f^E!bVez?XsZiG9z@{2Y9y?tdL+*ZMQvG-$} zxPBAQ)`X4OM7dY-o7}-xzJCFS6k>cf9wb({h`7+cQEWE+`_FtuJBjs)z3B{(G?+Nh ze)O##yC~0Y+FXqZaf@T%52m3Z7!hTijB;(>i670rY7h2Zh%L?P`W1GzG1hPelS7=R z@zv2j#1O9hn&+lpcQe)wUCWpdcbqwh_{Qtu6b64ozak!a4!ps3;wXuON;;3%B;!Jf zQRw?Ebw{i$aZc(MvX8aVX8e{KaD3%C#A8mCTOeML7{ane=npt2vi)1?IK(TI^!|pj z8V~&q_|dp4wGZ%ZJ=7==!%aCN+l^BuzViuVwB$#=<++K$N>#@Bd%{BF@SIk#`zVNiEqKq_c_k}4Bv1vT8OFKix{!S8}?yi`HbJv-d;~WM6Ls_ zBK08kZETy`2yl5CzQ;Ixm2vO{#NX*d7h}}F5?=b<#2@t;yl%xmxd8l}D5gf&0H$f4 zF9vF7EX#oqYeDRx_$j_0-YeD&G<);GcNJ~^AFq(bDuGz z@;iRc+hk0xn5&)s3D2sNbrT8nsT=f}XG-4r))i7=$ z>AawARv(_eMI6O(H{oCAKF#wv{#MpMa9!!m-*b(?J5=n0`(-Vxd%!pc?CyBVvz)RJ zD-y#$*UArrk%))P-No85!B~|;l#O+Rn3nibbQ1WR<3<`YLcHY#@-*UG^%L+)Xko;Y zd7F5>0dKHg4hXCT7WbK5n>z-Ax%2^p^~Krxf9r2W50CFx{YdddpBa9lD>$Ks*L~pj zen$fbLX1nCN!oU{K%HxnvIVxr~W{BN&Eu9{g^M zi}i2(N!{dQF^)j2QT7bjemz)_7!q;e#)JAn`F|?s_o7_j#=<#r4{|zk9cXjf;ozpBeCc zcfrR!$@e1Wi+#)+0(SiV=pBQJ4zX8 z4|NZhV`~wwBtKNMfLP%z>I~oo?+d;KH4W-|3a_x9gVB4o}k{~=rUh|6CF(b zJONK~8{7!oZRQ~OQsx<-RehCwLCI@qui#772xTn|JcTh-_NU19z#+*w6-{MKO$&9< za*)1>MxbIJc=6u>FXr8jPy0Q6ujogA1ujQxBd*l8t^Pp&GI(pPF%sa(ci{@+(Wa&t z0~36{mDgdreWuS#oUU#Y|IHyWtG*~~#Yc$8$m1L^X>EV)((qq=yVwx>G!tz5mN*>D zKHcB+g$FxUAA8N+>NNNt{B5j+dL-kZ^y}M~^EMe9CI@LOG&-ii@RM+L>t1c$n&& zjDu1~rA}0RmHeK4!}&=q3>;7dPUu(o(ulKi4yxQCE~l@I34DV%y={#g8uok}yy8md zwC}NL7-Oe1Up;S|tH(kgwj4gvF*b;6y$S9eD$aKvFeZ%8Wy~Sh8VdtY^jl*&;09Xw zJPmvPJf2(5=0D6O8O$Y?Ko!>Jc;#Kc}~C=@+DFD6tzDUzX3Bp&hKFH z`k&!LydQnm?X>3{Fi116Uhn`f(jK3xe}NC^VcP{AK}&kT{h1#Hy^MO~xUIpim-mT- z$1&ckZLsY8P@>k9%Iyn4Lk&V$c@o9T$+8|7J&Mh6^Hw>Olh zK11y^T)=E_$v5Es%i%ftp3q02(Q163=c8|zWx+?y1@$Mjh4@D^!|#P?Evin}hZ%Gi9+!D3JPMlW_Q%NN9fhvX(&W?04(@h1n3{|KBxerlJPuT+hWc-r^}wHa;wz`LKIQRvnsra>=h zk(U4`Uk7e}#8?bJ8+)eS30%eVjqgH0tG7l;hP9ucOw-7!EOD*?^!mNk0zv zKdvDh;dvsI z@qM0iLhxV9aftKPx!BI~LcVNgc`D;_jqS_E0AM;#u$VeX+;r zuZBD52A|L(&q@2e#_{wM;~%RN=dlrH zhFDQ;19hDG7aR|bJ(#a28Q-OUTOLsjtQ@l3CGodt^3={b&&TpROhO+<{AlS)v9Mfy z@NuZutA5`3QC%l<3uDN6qqaX|vcq}A`G9fqYq>x;i65$6<8_{#8)FUJpZ_7}p+VHY zP`uN)Qn@hv0+|pd|%xY94UG`IR|+GuN}XJYmZ?}-Wt{r;~~@y#L)(7 zgXDqpu4FEGS)P@#*opqw0B7+h^_0PXVticDRBcN2aIWpzCfKalX8Hrw9IH>3JJ(;( zwg#-fN&A@G5U*ly&r(N?t=j;m!S0Tnjqh|Sxsu2U5!oJe*u}-{}gic^dr|% z13AB*CpXxe{?x9KKPMB{VF7j-VzaYPI2WxLDYqmMI%+Iiuw%Uvhu!Xf}GiBP$ zeKyf18@WH2e-pmr)A2iBKpr(PXyF_*={4kJBR5;cK5;6(?E6>I)=kWVD`{JE$1S6M zmr|fIRW9+|=u~Er|SwsHJ(H~*M zO=tcMc~!%HDC`{p=C8WVy}HS3&VGy)7uK*Yg3r2hG^iTr0x8$UjhXEqVFQ`HXUs({B(w zLHj1kv7P55ms|4}lu?WyVn(XT7gqnuE-)%N{J`?PU;{J;rQq?gU*p3g4*|Kv z$~u#K=wb5?k!xiNIZxyYu7x9*;EOyf`C!(G<~0j>ip+mj^bq-s`k8AB4&pp>7<|pM znFGOG2O+P~#^L+u6XeQ57g2E`$3^Ae%+&%ehPO!HvX67%1l9!{932WbFd1CjXFqcQ zJj5+!y#d(3YH9|6WNX2N_6SD$&YudLJ02;Mjs9MsGl69Eqwfq$mMAKW5V@t*LD zPw%JykjrW&oFkZ}=45kSiF5YT_sC(hOU}`}S7840+PGdD=b+Iz81h^dUIA`LiO#Pn#7I<~9&%KaE#f+8 z;>DH5M#yRCt1}LuxQj6itfQ0ECSa%H*N<%Hxxo+SQ7BmKGx%(l1HXGGU#!t^1N!#W zC+M$?8)=*hYx_`QO28~?@AYBoXO5gLx54+QHig(nKd=XDF`I)$p`YU~QIF+u{9U6Q21>;V{)f*3nwl;1hCkNdfdX)T1IISzx z)cF~{{TM!L@?GG9rwk9fG9 zF%I{%3ynZNm>$i5u{-h%=BIO9#>Iif(aJPmBcA}@K--nBJYff97*7BmA3)5^VD%id zSMT6+G)~1>kIZK3{r{TI5 z$PWbU(mY=czn=p)rH{tGZ(p`w=o403qJ~7Dvpx!SH0I)xhf;r}{-k)Pu}a^u)?4T3 zbI>=bSxP#Oy4gzoVbjRH6pRA<=TJ9jkHoOmiNsHs*W`R{L%6b$mR~-MzQ&j{PQgAW z|051nH>&2Nd=@_BlfWqWUbMAxcVVxA0mO7-N8{s-*{S$9$AANkAvK0uzhL@YZ2Y2N zSLZGXxGEbzYw2IGg%1R*l}>&SZE7)pR@ZkroNZGH;<=B?eaWnVbPTnz??yV1sOp077{9dDb`hj&Ic5DurhR%vdy)|Ix0fZ*KiH_+&V^aVve8 zV?9m|A^$^hGdS=@@jutWhaX?6?>od?>qA#N)4Yvw@GjQ{H>UrBcxo_l5}zYafm#0- z^aqYD^#|f=@o&pP>UM{*6O?%$xE73?IY^BH_!jIhhY%Sr9>;h6jy`L1LBz-W^D)0Q z@ePe%@&9L>^C+*MgSokfTJX9Dh^K%Pu@A`G7!M`Sk(Dnm$NRhV2XLD@4%^rLX4`RCyOQu@Tx;&pL3T+3_nBlMLIscUot(Q#mOv?Ik6)fLD?fS-?0 zw^^Ysj7JyCt058_)-2%sA5&jZ>y)}hd(`qfaQ_DCVUEM^ZGVubDH+0Z{)9T|OdGt!d2lg4Z|Mts zMl%r8eY^}e^LyHOI{*ER^1+)JOXd6(i)kFeys?D&;U?A)<{|UfxTfl#FjmeOt)i*; z2`1~a4|YRwG4Z1_&C|%dG!RW6TC=2RnA4rBbp@7+0iZdZk$);>*O-k@yO?SeC;8)hDpwEYN42etC_oJFb|A}YkWlh z5zWrRz|oangzjsr+^+T!bHunX_pA4GzH=@uT^ZIcbrJQiu&$xIHNUJ{W^MTFC)%+q zjBVB*fvrqzw76j7!QekM7i9C3gUx)hvLiNE#X-CUo% zh!2vJ_cn9HnrGPj+T<$i%xeJo6wlp8JE8UO+DcuJr|{TT<}P!SZwC8s;<_7Ivp2Dp zqxB!Lk>AKQ_n2D$&#?#Aa4)d_l(m$nna|DqznXpkF70g2x{$ZfoOWdcKI0zvyO-nt z2LHy5T!JlBk1f84KC%eg2Y-6|eAX9y?e7t9|H>yk*DP#-nb-?6S#Rnn7drik?DxVx z7xC@vC3E(NT!Vd}#t{EMhP`568jn4~erOZeU!47gi`w7;mQTb^fCqTc{f6G-ybq|~ zsoeiVc#e;__6%$kUK8v1ua55@vu=HiO+1HZoDHU!g-&1&HrpKfTLhaWLfd@8^AR8L z*j)N?gmEyJ<3FX$pJHFBU6_x3;`>6%zYxr|kp5p!A70G5UC(nZ29quU|1Ra+2HKOn zfSJqa8_QX{ms20)N9f$h_Z8T`D=8nj0m&6mG!?8rV+HN_8SApYlcTR?CC>}ja$YlS zy_##m1x!Q7-yiN}kL}S+pIU>BNBcZSeu4S4&zjY=GkNym6)GpJqHL?^`{W>4%srEr zGrovZXs`_A)W3f-b-InVGq*ha&;{W9V)B6Y2DkSHuanPOZ9vY${I{1_k+aRwF3z`a z?W7;>r0<5<67ytcM|M(|=I?}aI!r!oa$B2QFqS{`A-DwcM{gXyn`hlcf8+Y(H#Tp% zIjM^tic)`jumR0s@fCGLp75RKEDw39&5>Nv8?61Nxd*}L&xHKR)rsUMxX*Y4@IN`q z%~dD|P;)Yx0kE|G{PZm$KW|63Zzu!b$yIFb)#gro?;G+P=iUA__g9Cok20CV_-p#S z`HuN*5*)(_{PJib%wcZs!_u40Z6HQBMnYYVzI*uq{pDcWz2;9Kx9|dT8kdpx;1;w3 zImGe|6#srpKMNXx${k>Buzr3e9KsZ0BCZB&-xu<^*1sYyX5P@(n2L{b*a0vEzVZQL zePa-eD+t=;#va<-@QLRIy}LSi<8S30)!mAF%we5=CO&;M^x0Q|LoNi@G=XO(hie*7 zAr4BKWE_GyY59-54C)y?Mn8WnhcSN8++FA|q9L!bS_iM&c!O9cV5ia-z*=vLo5;6} z_Mqq??0N7yNFV1^3IDW;{ml{hL2II#g`{dSZA4HN|Qu z^yQ|XiME>j59asQA8sy&vd-p?G^jhUyW7+f_LF1jZ0(Av5B!p#|A{)DRaU~@1> z+||KiU$KjX6KCF09t(*A``47#1>-q8r z{>OR>E>k;eEOlF&>y3KtU`wj`^&C0(^2e|(8^rwKzxYyYbk<|@I~oI!GzpA75gi%6 zLUBOOG|uf$PD_05;x@GlV(#h{auM?G;0M+|afR!7HJp0oIr!20iRZQV@!8>Li<^gC z{RQ?^C;e^M8h^(()lVNPntwO}(ErR-6W9Za= zi)YMPY5c#wh{oltvBXul_R1&d-&SuZ&yoEEc1c^XMf4|^b(XilMpwxZuf)!vt!W!9-gSJKW7K#(aO@m%1LT8yuQCQl ztQ_Jr;;yFu#p&lDPAC5`Yn6UD^h_U_lUt>4Kf?~FgZs0UN z>$^5bkvK)(M_s2n$*P~5=YjUXziDiNIW^U^G%hz!Y2b0h@z$%nmE$YaA$H$6a1T6h z&NT7>L>Zgp3CPMf*Mk2s4hDz#ne;d1)4+%;LOIly=IqDrLYt}oUA)|K8TLMYWpiK_ zPdo`95Oy)PvU%aFS+OgLUi-*wS?&UMuTYY(vvx9%M@hfe3bN;Ez1_zvqpAIdm zcDy+(jgK{VrFpExr^bMqyCIgt5MP`59GbV`w+8>_?!t~N=2<@qakAET%kQZ7kL}lL z>8bm>gKs}4$K0omtKeTY9!I=ty@`2>yMQO)M9QmzzFe(B{W|JtC>RNSYWgq0M$@S~ zV)FGho10T!K+SzyY4Ee>U&6h<8SJJ|qWZ{J(i$;=o+uYU7w&f6eo3VmvLNu5SwM)chp< zas#&h8RjJ6zgFr7Kcu{qIaf=Qc~Kq1V4nHP zpxM_St)IAUjTn{wOurJ3=AKKua|$@_u-_^FPU?c^$=+-q4BGR`bI^W+u`?eD{aU@a zdj9x!uK9!D7q^tZimjzs3T|%9L;msjgTx@x$tAA1_>5h5EFg%gp>;A=ijmJ^P1%Z1|8}FQ9p30Km zHbA>e{hNHFdH~m_=1%(X(Kz9ok;9O?6w}vTpq5g7 zChI%8O|?$uvewShu9MHuhakV9E=t{0{VP0Y3UdR~Fp|1tX1!U){}mfRC2FhukB<{f>a#l+B$nU9?du0AxEy8i^f&1`I-k1795$}$7ndj@ubvHtAoTlyi-K9%QS zPviH<=XaESh;Mg)-1j-B8e44w?N&`4O`r|m;+hjUj{O#2c?XWdJsjCvFZuy>1qU#1 z8udP%I(1)A_r{yaF*7M6xd!IXqJ6~wALIL(h5d{sU=VtQyFQ^0&f%V)#IS#U>L=7w zg!-R{ouW2iKK*$%V}LhQx`Jj){L08K!TMbu$Ezc1#TB^=wp`!d?AfqDaX zcUumICr9A&WndVv_+IvUSpFI1{EYD;R+kG{#WUigAHR~Z1h?``6a8ovb&CK0Hgg9w z!*QSyc+%K`H9TiC&$OCrH*;@dF;3+i3@LN3yqDANw2ogs{g|Rs4x;E513&^9>iOH^~R`yQD`5dZLd>^;zcE?_c#{C468@abng_YKdd zZyF5%_*oxw!S(u!^~DFxf96a2)zzT~9-!nk_dw!Y_GM}ABnD?+mp8%X>|@~GD;4|D z0u;H268kK@7O;M8fA=wfyPL?^zCLJ#^~;;Hqp%ELA^vD%*JE+T7c=(3zsAFwTd=4N zEO87RKUVEKa{~Hy@pbV;HT3R-g#Y{gfX&sq%NbU!7te?MhH>-EF~A(!740{92=!?< zKZ#HDD*emyv+%a;flzZT^XhbTR%mwh-RYy#S19iq+3vgyHb*-iIr|WO{1EqnuO-Hy z@dkXM_(qe4o$&45Wz16W^|_Ch`!bbZjt{UH%`f{SIM*9r9gBTFUmqc#7ZKZp4>7t` zT`}eBWSlxU9PM`A?UWl%KwdZ&`wK5DAME)Z-9p|!_hLvdLd(9x+-t@hgDW0JlZ<}Z z+-s5T`k3*F_2D&CE}A(U+$UGv`kr+l7LCKU0W+d&i^WZsu!j6I@W=Y@^v`G)YtPDw zH}=q9s81Yw{VeRkYvJ%0V$c5E;9zrxpAdEW`Qg?acM3{hhrz@b4wF(Xw5o{m*x_sa`+#)L?rW?=2Qq4=c_S z1B=nbZDKZUZ?TfPQ{#d4K^eEF?@djdTHB;3uWrQArHe`QL$Us&jn0{d4TPN&71j=Sin3$*cNpG zb3{jq-Ke{M+BW!FFTyU~9PD4?d(Dxiy;G5dA0-~U1$#%_V(y-{eqsgu8Y?*lzfVan zcHRtidaT3K@cE43e)#On&nYKhZlR)wc>g{1@-6i+f;z-s*W3y2rVs7DkbbaB zE$odJi2Or-x_jjRh~lp@@3@O`kL$hE#Q>w$f?W?<`?rFOt1n> z0LC%Dpqzx5$yi?FgyYlVu_cWG4p_i^)8?Fazm4WQLtL-AV)G1|hd>{&*ic`1_8qk6 zi=ho1vyNAD^*as=%fJYqQa`72jSt1W#y?}{vj>6k%$XmBxMcT1D0$5oY%!sERY z|BP_XZoY$cqJ5|XIFcxs%sItaZOhs6JFwi-a4@N0yb|i?m4GwFgyw5&-WGDrwWO1u zZ3D5&#EwU|f-h%=Jo#1Y!H=_yt0q@|e{!vjGOrwY@J}Kq`joEVGxE5nbmRKn&}Wbz zoqX$!Jwl%L>gPi~c=NKgTxL%DkPEK#FXpP_dc;bL_iFB@E@zQ<@V7ia{m|Io^tr)L zo4$qmFJ~N$rwt~Bxk?Vhy${rP`;2lHwy`nhrO5$z#p2~7;x6$Xxbaz@i7{OJIdxHK zF8_G?BhL<2HV)l9cILA)r(4`S-l+?7#})lYEKNSV;UTA7?mx-xAEhs!$Fn`#m3Hq+ zzaY=v1zq7$0=BL$31gyYD&wIGdH22})}FD^wuboop&Wk&IqqhXH=ewFfh4GvJEuSx8Y+P+jKU~Bn=S7a?dueSvc7t*LmVtg<$aOyBo^UP& zqr!NSo3M|%#v31@Zo-@z<}8-)H@C1hM3nW>ydl-tO11yR2f|veuBB{|{tP%m96MWvfh4VJ^{F}j+o52BK|C$ZlXFWFcM%rRMw#_=~pSb=wa{UilOFJ}! zAMhdHvl{yz9r?wpIo`N&_H`dfzQ1c$a?j7Oy&L%tOqst7tXR+emhhSV3P&%%{z315 z^L+043C|G0-k$?5oy~c(z**??7korHJ_1us1OI)9tv(fh?1$Xv1Nu}gn0PW+>wT^{ z84dq<@WgnyjPV@z7T2DDJwE|o%-i_zCvv}cc^2^hqz}OHQ>m9}+;cj|eFRpS4pyzB zFU$mEeoXm42CL8JS;##YnZ+~A2B*xyCX0Zv&;qn1z-|hsqg@305;B013;d`(#4d)oQF&34-NF|<=~WMJmWH+Z8`lx4L~Dx z+X!}{E*sbzpiHd3ihHi2yiGBVrFbGa0%wT*o4_*0Sirx`TFp6Y!G=xXQTTxMYruBR ze5bAU!qv1iQ$F+ohtLunR0FUIj7D6+dU*t64cv>Mk#a5Pe(X(2f6({8@iO*oM?2#F z=#67`@yy2gM=6iFBzAL+T|5(eVY5eQ`j)WYr@DZ~8`uXr(YSy6AUsrWaQuBy#{DkN z-xcGm@-p`@Pq4T7d*l+pSD*KWdVlvnX5a5~g3ey8fBic2^~C*`AJ%uTe!h+V^bPk` zcdnn_J;}|#2WBV6U#x7NJh8HS2q#TqZ{0J|)DUYgzouSSKX-JTapLBt!siX%t~r_U zcMCbX7Wo@m-*fPz-{Lj#%cHGVBdkwaKX~pgKCe{sYfeD?@DXtSV#e!E#xpt|{q4r$ zi^bhr*c^NM8QovDc&C18_XGg}ZEkUOo3VWbiBZ(YEca;qrGDw`JHSExz=HTlThW{9 zdvgyiHNg74&3&F*gHIT~R!pPrR4uletLRqdYc#&@+ht5{>mK8BLrk{$($#nsJ!G7B z(1RNnsn6B&mAs~AUEUTB6dja$Ec3nPSK`M83y2%kk{e@coVPLX`AzD+jX{=wR$r#> zi~B873(Ir$2>y9{4gMrnP#a#J-W)IH40p|p4#giZ5YE3;{+)GsIBRHP;MvtW zsy)?jrT@vj|LSiIHl)55wUhc@il4={+|PG>1^OzY@c!<}mH7zYj|JVOT0r;P(|#`h zJ?ryx*x}!b39vbw7KlW5T7z_L(UNPU0HnR4(c17vRF4zsh zrj6Mir0B{VOLjCU-&0lW@wk;FS=S=F68Al_mcKYY(K7D z_-e3&sy_ff;e+y8`l2!ik;fU^udxUBzX&_)O|T8V7JWPVq1<pE1w{?uKk>K98Si3?dIy1SCHo@d>#Bte^G<%-UIs4)f~v}6nqKa@lc2@cW*Xx z!|9W+m=bu7^eyl|6X0wv0k0jVo#qG4r!lzZnX|pk18?p)pqpRDivBIdk?}MHthA4@(~UAxW^H*f zv^lq;eS%N0>f?|nta(0t^FE)I+~Ch)f3v?<^EKVUPzmrDVK1>H-V4v@L4WH(`Fnsb zdZ6E7zp+yju$vR$84|$wyx#A@bMye0vgg>`9$>8m`f~zfy$62j9%x>Aa38MmRS(8g zcWiz42J1omX^+@@%Ubp)EAIiH(w%;+68;w{L|_b{BCad zk`|7c3icy!c=|8Eynh8#oz0$NUBJ7~fPasJ!JZUnQI0#vtv-y3J#t_y-W|-Tuv$T0CfmP6cf8oUEKq46zm08b1nDk%U*EcY4^}e z-y%Q3v+ZSXxHIS@<2dd?+mSuns1NtSOPa)aL z9;|U(`wM)z#;rZf7um%%trH zgjd_(?mT~}Z?9ij-W@DR{q&{2_J(@s;5qX?VJ>))-x_(&OStBbIqwPD=W6b88}mT- z?(~B&_OtT4$J)APf&2;meKqA~V1QB}Z7N`oazL!1m~3EDmeuO!-;t zt6lH{9|ZqH^EJV@Ps{|3)@#>d^=z^H zo%^wS7s6HF1(wGr(lQ(${vWw6+9dZba&JOoEVLE%^T+bN^kRKKL)$9Ek{IJ*+)V5J z)W?{UV{5tVxAvH8edbH}KHlg2Yl9xZe5Yy@+}GNewyfv$S%v+~BHN7zBp*1jf@RN` z|C`*nubQ{Y97Ap3K(xnC;D>|*Ft)j5NYFeNO+^oV?Oy!!d$5h8VDzuRk5TXoG5_E% zaa+yWv6iUv~li|0lO_%`MpGo4M9Tu+s+4F}{C2_xv2J zq2K>=xPvv=qsGr?N3z=yM_pIP9++59$}=bZy~ihw`oQZErO$Xx1oKIhG&P3FPVd&KAQuef!8wH)f|XuBGxy8UmLmB3h>Sfa9;5F zXAWY2z-w3W9IL@#P28gye{&OBht=GBbqwEUA2ToD8rnpxZZ5xdl;d-rZ4FpyJvg3x ze>rRE6U6?Lm!at5bznDg1PolmGp^$}cpKvXEAMFrM>SKw?A36EZAhEV|ZgBq-zsubj!)?AbwMypvHt&4;oBE>lX`53k z#A@n$-Z;Y;&A>ORZ7o==z8lO9$LQX3=0;buseaJB^6o<}->NS$vi&&YfccPkX?^AD zti-~`J{j*EVi55o&JR9aa}8$>f~RCobdNc6kEorl{ahbi@VV+MtxI73b{>D9dGbQ$ z(YKhd@g3{0j_ut9c8&KB=j&cu>YU2%#dr7~+NyV$%VK^y+hF5#DaX^yqv}HOWs66P+Q6h|J8v`3@?Cwb``pJdzw0MBAFz-4g)7g&R=bq7_Lz1x>ud_^;@jHa*c2;*Zy@`Jtg~C?`?cY)+q+@A zu^+SknTjdyH;kWgd%!F$YlA)Rch_EhF?m;V-oH8SO8pM3+hg3C-%|C zrVKweM>6&}KD+cYS@W?$3%&#|XJAX_VN0?Pnf{`pRs6=f@1E6VUtovwTjV5g(z#$j zo-6Yau`_-R{RmSy_EsB>xiZl~;r9QNDriA96kXK;`&a-2b`d#|TKU|$_sL^`WzzATO$R&Op^r_U8+G>(bwWSL>=pcO){TCo^26Bl z_3k+aHvKo;#e8_0CFF1-x3aJNCVroyFO=ip9L#~;dVcWrxi6PmWA~+ZFD~z!ekOh9 zA^m+E|4V!@_i}IgqI-1d2Q(M9dq5SuBbE>S%YB=oTdA8sCJJ&f#uJuODXM#j%wa6Nq|9y^q}&+4i@%lCJ%g~6l6#n`1g z@nvDZw$TS_TD6a{ZLb7x{f$0gyL+t^e*YLdasW2#o$e)tJv!3yK_8!M+3C}t;Nygk zk-N$1N&iHH?fz0~ecdOl_B85#Gh9#xb`qR%H&#$@vPC7~_g)y{8|c^{iZ`zFy|$>6VK z=GPQ#u~hD#%Gl-moypi~$;=Ze^toi(JsEqRW49-Bon-1e8C;mkT$fB4lW5Z<+AtYg zE*bohNZ(Du=a$IzlCY(dV)yT8NTe>|8ZL3%aLkv9%o&N`*97d}1TYGp*NI8RW(l+_ zZMPk)1*T}dA53~3xFIdzz`6vm&E?`zF{*ey>{sr-;^M;01H3;gmZXlp7vq4Zx+XH` z(oah17dItPcijK#MC?-T{|DZi11>JS0vwi0IV;0n>vjL)zWv04;F$kW|5I%X%61ZU z|Ego(ec0(+;J)%Iu;e!$$9?|}9t9`4pL<>=yh(C+*=NN_H4DIbkMepod~O^=nLYu} zodmX9mI!VI|NS=stdq$4#rGEa^e>VaZ`4y=67vnOJCfikljtu=^sOYyNZU?N1o!fN zKXw0?WUiS+pG`&!LOcFGnfgqozEkL*DfmuPsEZUd5h?V;6viHH{#VXaWARBgTvG$GBk5ah`Ne%FC3808_t@#$b8ClF>fY z(PIHq=k5yplU$SS9JvcTdmi_?lRnUccA~FD=LI|*KQ@tiNMa65xhM zrxfOI#^v3i-7*h^``f;Ge@~)M(hq3+$_b3KG|D%W_OGSy{2uONE@O&*l+%+ja58ng z4L;$KMB0jDsoSzIXj_g?KQkFVh;rXcy%cgiu9J6V5`8h$ePp|1mO38EnC}|?%X}m$ z)B*KSmynDH2%?58i~@!!Qf{J^5I>UhFzXw61M|LDBNXBuYB`%Ctmln*xp#7>O{HlfXV-F?^I*EqWCNH8MN*Rx*|1T#$&nXUgHhe za=#85iP(M=_(Y7)@;~!EWd9FrewKDGw&zp&TEO%hxi372`46iT(a@a-_g+a^`QMxv z<_XFD6`#rTSV=5R;T2pnJJf?YDYEkMM_ef{PPuM^um2Rk&nMahtm|vw2hiH7V^p_g z3}tQ&Iyv@#GS@)SLqVGxUy9F;n7NLD;ELuDr&~M1{ejHmMXW4-Nb_B*C(gV5Tl|su zIs3G6EPhdP{~MQV-m~UTY6ZkuQ7{Nxz+`g&uiTA~^hH+62aH0h4avdke>J0DGVX7`zTYDH!wBHDI^3lw&Qp#8(sd zLTf&-iR%-e{u+DRb!y@s?)#?(Uec$5y1n}|%_<{-e-QNK- zy~DlU0h_+deI|pSrttcZ@_xks=nGDs30@`6V9YGA*=)EbUL)s#)z$aUfjjtw`ZN9? zzyGWA!Jwal@z|r_{7=y+=+~bQw)~X3CXV5T1z`9^l$*T_TFh;*1gwe1|JtQ!F&Zda z1E0x%xPtxv9$W#oMa%yJua#&dhJMDglkfjEa_?_Z%O7yQ8vOcKsMm4S^?LXEWADEq z;&%1|To<^Q?8xWfSaSIv+Q4xw{MW)W+g=;tWj0U;E$~OQ*_!p7yMZ>?!2S8$yM^cD z_q4Ut!5Z4>bLxP64i};sfN$t%XrW%d;P>710rmHLIc^`mV72Y|-5>jwI{1cr@1BT=Id4WYzyDSLDdil)H5NFZ zGFNBf6I^Rtp&C@RvfS@&Fj6P=ZpJU-6Kuvex}JM=6L;|pXjRpti^Hl*jEe+QtPeir zg6o;@$A!2+x$DNSn4g!Uc|DWQe`fs}4c>@=wHD#ax>>9V#=j11g|Ezgd8>a4wz>{H zQ;l!zQ*cuseRtrYV(jfU@X%On+FjVWH{;J>t!(_W96$X3Q0%&AdEbgp???Dq{=qq2 z^d)tt9avM-!N^x>4}!IJfTMoqIjp(;vG14hUxaJnd(6ELEVB{c;$OkpFJe2tp?!^Q zIbUq6O$lb(j6Z?<=!dEJ4cEJe>t$fCe@odH%K7t|^D{5)L3zPvoq2C(59M3Kv&F?> zGn_{`Pv$v0fhA^P$AYb@pXb@`<6ihkD^J00z~0pkEw4(V-(tI6h|Th!U>~)lV|(AJ zO`Zt;33iEgRpkWi);`!4qp)M&$CkfeI|Li39@}KKIEK0y4o>S5d^cJ6iaHvsN9^J2 zd3NlWlGm_*9;a^b|3tQfUGlN{zXLz4MlscKAp0eXzLWL(qY@kEl_{dQE|OkMthy-hmXizg6}mk_e0YE0dnxDslH*_U{`f*i z2Y+92y?SK)Iq)0#mHJ}A?tg&mm`5M_3H^&Yw5UC6zm(YX}$J3?R5=!;KfAhUyNj*#O}LHn>N^rEicpFYw*d<$L1`@PY6cq zh+-o?EN%u@-Blqo=b13}_&z4QS z52d~tPx_wqU#cB$uI6=($KmV5C*?RPTZA18chNY8v5*=ts{BUIi}o*U`)_!bX~E7G z8`a&2t=$05J0}Hfm;y(XNzb8J-@LPO4-%sg<|1OQ|^`bq~ zxNlFMwHFwsC-|Wk__`;3q8D}`*NAeBJA2ZPdorhR+>JfyTdA~7PwY>w`E*b0xm5aR zPv-7a+8~wdrf@%ag=k6)yJWru4xN=ko2Ae%QW#tO|ECmeQeJyfc)n!jz~mTyEiMKh zfl=fX%6~w8gUQ5dwf|+@9cOI)n)bLvd`y41(Ru+F4&v1-;0E~)ecYAh)XN0$$&K`l zq7?cZ{o+Z=@bgsq8~x-D;I5a!Rtu7u7m_&!9JCz#Qz~x5M-Dd3SkOchF~k1+JV0r}E^9vdNv`cGG_>x}WCEE4sUT_g<)O|13lU{H<{NBdS#XoKRTK9fU&#|e4Na4OcwAHuU| z{Unt>P1)#&mG^`?v3?qt)Av@=PycKk@H|)Y+%NQmlcfLe?nz&we}9w8^-`&yRMwMJ z=6Cw>`JR(XdvktmPq>y)AC=d64eD_geZHY5Sh5%EN3Ym*s#o-6E_Q770w?uiKHxq- zaxsIz|^x0nAH;uVGjlRnFUTMswY0T?sjEP?K zr!<~94O^iX<@7oD{CC@tFFzT>$Ycn#z^#=+^7q`(EiBYa0)mC{aC$;^L@t!Z!v zeV8Nv3lB7!vA2QmajDE>sm$}#>4s3wqE%dH9_2m8?<0C*Q!(zhrNpkEzJ=cog}Tjq zgTA#O6`m!PIg0*rS5L0f6W%sFcT$u&=pWSY)9@E-1D8=Wm9aLQ{(Tnp@IKtrpDF98 z6xIfgd70m<;XB@@>>0KvVsIRIup9|oro7G@@}DX21k61p@HbmocTaL{ zg?HM@dYp?b5Qj~J7NvC=Jny-zfAio3-qc?JpMMf__GWzs@LrqXc+s9^{RzGu-$g+@ z+Lxnn=jhao%V}G~Z=?8sH~xsH%;E2ZremrTQdnRJvJphN$Vr~R9P3&c$jxXsv zx#XZD^!UP!Xbrih`$NWJQdo~;-19Gj-bO!4^$O#DSaS!fa|k{VwMfQatQ8Y`X@`hkqHLbopbe!P8CPVRQnM)B+f@ zz6?x7eEXQCV6g_Uc0I?lciyZ8;4Sp?!{>6&T&`&h0P*(3<44BV@r*OT-_yB2`2UHI zD9=aW<_~$UDd2sy|HCJPb>9ZxlK=m7eE!YvfGytzJHHDKevkU%l~3-!m*fwo<5RA~ zZ#t8E%!a23etz@&#f>D6|9P|s4Rg5`x&4RE$JYzSpYthLeIaEdpI_PnFejhm>Up+B zl%Hot0&8uVWZj$aBkK2FW%cRU|wT% z=ETLi=a@OdT85(^DkJWP*d6y+kDF%<5B}?c#z&i*C+LL!Z$GAzA^4NYzhkbBf*A^jk;uUu{nK8S8`pjap9aWpQ+i6`8szoZxQFFPuO|8^}Q4R z<~Q&w{th22F_8M^j1`RQ!@TxJ&{3`QPHJ{|LYPV_ffypl#C!oqdcoU=zpe zN zztHa#d>xgi1Ut85Qn1^rOISm%7K7op!RJ=;IM@{bm20&=2mM%ubHFZ>u!pgY#abN= z`ZTopdA}Xp{hM%4{XHeQzQTF>BVyP4F5u*f2eJL}1=o%U*r4=g>~nOl+VF)}fEn-! zw+)6fz;_V)9sfYbFnvtera6i93+}lgG3GbZ2T?Q?|JV807}(?WKMQtF?zz~)XQwiD zu)F(VV|2!T*o2Mz6gJ0EaLaG8V>@YIVE^O)$leV0xDNl$5AhMc2r|_I9?x2@h`;*@Gn2$^Rwt_@zv<-)<;-c%QY_H|Ea-0Z2J_%1sjys2FzF7MZY!}22LOzjAs98 z9K&a@V)h-_e?J9_e6Mef{*0Zdk38!+>Jm(v{-*Xa=N8jG`0e7bL5m*3zx}c=cm-ZH z*9ISE&NRwSUF-AKUnTdWuRCk0zE1d}HSj*8)hqu-%I%hW;srtnJS;W0SZ3n)mO)20PQ~x8jI&=HxWy_H^n-9FfkP z1GYFngFcc$yPt+#mw~;TL7isMchle{(kO2Rzo%2b>Ga`rct2h>a0M&*z9XHvFAaV% zjX5P9J1-q9lg@L2X$GdjF^Ol==__ECp=tEJG}ftJJOfy>sTb=OxNJ1vKLdYW+>3Dl z1`_MMD*qssV2pt~`ELad93O zuyfU;JsG257I0hXMZEr!M*H=GcLT?L0dKJvOfn{wa)4+43jR0+e0X}m;f}Y;g}lHd z#eLye?w}2#jx(>|9+DW)}#G?m_dDIfQxMF4CbfP=>Hk?&vf3?SxYjo7c$@#(&5$8u_ZFV zbLsFG@GFwAp0=YgRwslR3R7ZAV-DG~l<)=D@Agw9-d+(`SE4JuyxqcY*s- zsm~_(A8@wgwK|b!YNC#K&)yt(io%Vw%eCOlPN6QcpP(Nv{s;&!p22((sjsx@);CoiRY&jmQAIq|EOr= z%926-Wzd(ney0p<8-I7KFiw_-G1U=GV=kcH8EXZ9%wV1hb)Phe@kg7KJf1<{w0%ya zPoG9R^8e`5m~T&Gym9@;4ETf7uoq~rll)G3-lrd5%=kWwvHmr6ltEwV$~cARX?Yp` z;&;?#_g*m`PY$862mR~;>a~h7u#&#Efa7MsIb6z^Uq`)BFBKOu*8iDKn^DKR(%@s$ z=u6@M=52guyqC{P=UMpeR_b>*^-Ebw9%qhup4U(L++y8Qmff_^UCcY1;6{EC`l@Zz z+MWLTIQM@m^kw;ujs}jQulYQ39rbmLgYkj)XgSC@c()gN0XdPtS;=jdUIhQrmP+5J zPfn4q;JI$@1)mi7m8#nq_pdvSm|GedtME5+V^KKH__5T(2JW$)W0{X4+d1|Oc!+E0 zzs#+23^_f+deC~l+LIov74W$$PiR`UqW3w5?j+Hb}ysGl^Cf;zppq1t-#1mszHT0I!LvH|EK&kx78rNN>14LZO$ z)??R=<|px`>|t%5jUC5&ThyjTEoiQc&q_Z|>;q+r8%f#w8_R)~uphd@Tx~}*n(+4W z&*ld4J{7;g7R3fNr-M9vJohwqE58Y@8XcN(Nyc-OEecvZV{YQE4!#~Wj6SQ!$$_g+ zR2L~%Vr+%Bs?U@(3_gMQQFB$Q2WVMqPNG{-9^M}e`q{iU@L96Ii1}{a zyP$f7`>~=y#{X#yam9t|jfpo#6CGa~;*IOq{Xd${JihKZd*f-VLd}S+X;U(c5lqEc zGW-xjMJ*|Ypu{#QLr}yTgUJ|6D2>5{4r0()qqbDF>6*5x=^CoiHQjI5+f7ufX{-Ic z-}jh5?klobI!4LIC-(D6)*JDAZovPV#P^F{ zyKx<#tpht!qmA5d`hU|VtOVnd+wIU*Tzfefa5-GVQg9|%^X(<*qQ#Y9&kl>g)x-%r zBp0v{EdjLxMjMNc&-zeu(@*>seuLcgyYzQAbIqCX7S;nGA3pi;)B=iXmX~ zkI@BuOdEZM54;|~FF6Ex2~A;;;@Ukv761}3EB*vCLPY^NoqF^T?y_cx8p(N;J+;akF=8GR&cHa-;=}du0-m0 zO;@kvSyq7Sm*c-D_M^ix+HomZd@C+Cx-K~h4Lvn0tpinf5dT-8v44a7apdz<3vcZX$7}9c=7P39@h`FM8_oNHzn)s* z#%-HV-Q3g00I7#h+ySmfS8hICCZ8&7KvUE_GH%WQ36d9=p2)reb@3E%g@Xnlys zF>jH$x#$Apmm-IewM~t$HWoE~&R*Dx#Q0th_D0i`gH|VT2blUta~bjX5OV*3*Hf{r zZ-d|QrMLGdUVFB2!JPXYe9v#dRUV5b=w1BNSBcThk;VCj!S}&wmfsWDH~$%UM!3(4 z^U(jk1&%!e9E=uNy|;OMjA_na3zwJ|d3Gu~M~s)+Zn3YqisdEqp8-?P#9zM2JXi9a z;N)CmDUC5?y&4<-MtzUfD_MvB9r2&Wd#cH7{g1c<-}MyMm?n{}H~r zJ30RCSgY&aVf~UPxKrOU{?lVvx977yZst1V-*H`TE9X9Y$$NsaKO_$ATyQz-xACW9 za((MnFR-@4jhbsIy9MmedTTzWf^le)UjTz2htKBP99_f{icU(8y22y1N> zKG}_G>(!5=>+VZ@Ov@Yw$9g7uZF7gi_d^Ba?h z@A7c)-2!k3alkd#fDem2R=0(iT(nLwHQIpZ=?Ye}GNk5wtJVeCq3J?8y7o2QruS zKX4Adw~h6a=u2&UTU(m8c?X<_|D|$=`~!9mzNN|<{aO4TUr_eTYDe*toCZD_f~^Cu z(y)=|!SC9-O>H-A0Njb%sBj;8^FH1P%$`ICde#CL*v*9lkzwmd2f{rBrX(G7&603m$0$nurhJWr$nNJRJV$ zEZQHgD7`Q5@eihAlsl^#Rfi3Rew^RncU9-mp5*?{0#h8V{uLh&skP5}7GKkZ(6`D3 zsMW1G9iHh$`T(7K#Vzt4__B$^uU?7&^!3mq+Xw2H9UB#^^iPG4+;OIVSo<}FlfkdK zjo7kaXl-b5Tl!Y8_Yql~ADlA>ECR02-v`Wc9C)u+;F`SqyJK&6XFO-I7GyCdvcN&z z8DAXtQ8(sX7MxW#@I5#rt2^Ve8~7Q!zor|uau)Vmy!YG)7-taI9s_O~ zDozHctYRE(0w=AfP2UD9+{c&!Pn16GIcV>RVtcVZJi#aWFS(~Z%*!vq#8>O54IgmH zy>Y+Uhs4-ZCn4StcfUBa8*K((Lx0%znI&M#HJK@_U-wtO`yI#Sfk$tlpL^1O6S7#dvasWM z(YHDKc4xg7V}du&@6LI;GY-1b7hp|zg2Y8|1&_n)zzx)XEyn{Fa2;)U8*K;<_gNe6 za%~Il#CFkloO3(l^*z@h+OmK(aUstR&mxvDSnQYuyH&&Y+yM?fKF(FYJ#bxi3vF^1 z{a6U7}q(!2V25tl|IdV4eW;P!1#RDaScvRitD>^EL_KMu=E(lUzLS^M)o5!=?ZpGK~OvET;!Ex8ThW}(sT-&&plD5zT8P8Mo8UBX;;b$=)MoL3EoNFG$GZ3p~E{EK|;A2~A zY@oP8%z__~xXtRlh#%+}xm3;bWc?9yELi8px+3NiG>>BbvE<@HZ(O`9a%v@xvyLJD zQtB49JZ{Z}sBhfzxbe&68m ztcBoZ^b_fe!0`Ium%$e-;Xaq7{P>AGmU7H8?rS;6S*H;mCVeIE6Yv$w;26+p5W`V@ zl)3oVfZtcc;qZ6jT8<&N9yRmYyR4Z|@oL>efTH7IID@SiY0_ zHHZNk9`W5px1w+VKk`a3H_WM4KXNblHSl|rK6d^-ZCnpHe<6DIlgN{L1@SoOe9Uuf zo-lpVh4+~kEObBSO)9t{^7NPswek^k=j1sOhnJ0smwt1xcT+<;dmphqgYa>W^jPBddk+^#QxyEbk2iagiV*CpJ1P1#MfBH@}&blbQEv2~A> z1Buw`ipin>^q8_%+T~iF`OiED{$(`=HLnFXpcc2Z3E$^5aL!@i9<`773d_IOjt;z^ zcLliQDf}V(dQE&CkE2PwMlH8o0quFeel~4x+5p?7>1uEjd`o&?p7V1sbx$-Gedy!r z(BGO(EpQ8bU-g;eQO$#T2#&#CQM+CIU+gJjwAD?hXU{2wr}#0n5gGl_Jq!c0 z*V2~-YRSPGZQ(O5_*okb|J_0`!fW^d_v*@g)=v%2xSTQdU9?Z}nc)8;f z(Tp+TLW~Dd|K0p6wH%%o{^CvbrojUgp3JddVJE%`@5VZ0%yZ^jJpWkMp+{{GuH6aU z>LPVB%sb|kdUf^j@<8I?hD*R);A6*F5=cOFJU4Ps@$s7I4vrS=h#4!a@A~ub3u_eM3B$#qYY)-e9H^ct0APRRuPgkRsjQ2(MH!nsyAi8YD! zqVdb%!CX`H@##CyNHRY@39WU@jf|6bna>@-jQBJ2t^j|&iVmTxdIdNm)~VJJ%)|HP zj2K_cx5NxNA9cv#PgNV<(5z+|jGtuwgY&CzX3jr>uliM9BkddgtKjC>?H{o7KKy+I z%!^;M;dnR*eCzci(cx&i3l$L_?`husv2S*L&Gw^-u z2yk4#z*$Z6z)xT$ebC}uadF-je7WC>F1PGgR#e{Wn78jg&C%(=4g z$JQ5v@BhNH{~GS4$mgR!X21s(#G0CYCC{6|SjYpr;a_j~gnIx->+e=`l0KYvK-c2? zqI7gCJafbGf$Q6oa31eCCS$znM;A-h{+aRF8_e7<3;v=z=K!07Z5vm>dw|vRw$P@t zz??ncLw*Avb}kt9^ep;=_L`K%zT1N}D~oxV#k|U5U+m7kgTt9G&A-ZG-vNu$mNlfX#v^at`G1=(r} zn1g(lHw+A)!Mty!9p44_zs-BbMXIgfLlQIK{a)q1&gGtIm&8S!w;Vh_m-d*{9WH@3 z9^9Qa=UERC=QCz1XcK;ycLi;=e-Ch557t`v5_qOWmF)u`Qb$`4v8}n6)$oO9axT`L zoPD|fQF4g%!Ta3Lkz9Wy{l&UbINLQxE`+{1g+BQU?KW8sfi>q0v48Y=!5i|Fp)*K= z=^Y#L2=-;}Za4<`t=0!)&ZvD6-xu7#xcPwjatQZv4(IR6Jb0OB?8LE|v?H8D8{=Kx zM9qzRhjCDammAZBJ#wpiMQ9WgcZ6Q7>Kk=}kq1Kkk$E~Y*k9c)>8 zANcN3jb%rk3#8e{9^Kho!5!(M{TOztIXKD19ae$~88QTIVDaFX~|`GA~h%(z6>6qoLpQ7N1a&fQRg~*lzN&KTqzqYI3-BSr0Z{ z2VPu*|Cjo1-Bxlg>j);m$q9G}>%@~=@Vw>ZSX+XR8eBVY5!jWu^z`{~5G~-(7W4ze zm-qP&Up_hSTE9kPKa=0hKwEBZK>X?tP3CuBp)UZR*AZ`j2RZldZ$wWp8XvY?z!-eX zW4Xr$o{<`X14i(ipTT4B>Pbw%>U#7LpYy!+oQpVt$@u-@4q7ITfg3O@qvKy| z&OR{zGHdfqfrpp|-kk={B~E|;8L4}!UO5wv;cNWY-@q3{tbSYHS+wu0RGfa>AoJ+Y zhPyC+pPGoB(eNK(ygq(@V)RSjpU?mExo*VYm%m6{eiqt^BdN7G6TJV)Qrcx1I9i{5 zf_q!R`Sj7Rq%Xky#AH}suXq==9FF~^p59T^(z|I5zoW)uI`#98TTfe9^C8LK4e&VY z(GQRla?(bgk$e#6kYE1}c%2iHoZI~SNw^^X9+X7u0WWZB=sil0rk3A1tHAxle$3(+ z^!|%Z-AVidb;YS$WjzgZ$%)I&vzGZ5c>S8Fu~BrZ--GL^cWGVjB=w*w$s4EMK8^p) zA7|cdYvv}_llu)GEB{!}5w(jF`{A!gE3dxYI$}Aun>&--AAQ14-_#AQ{9lPvC%=X{ z*NqQqc^u9AF8F|Nm?IyW)0&)TPo;A`H0jlmXRD@Ne6H38|NAuX{_*I^pGJps`7d$b zW%!f3;?q7se><9>L&f5e&)C{5=3q9zaV45_b0Syn0CzWp{@hq!>%*8APMv-ILtJ|T zuOpb#6U66SgFJ8Mb~ZnC!(EZz*xbeDY-%4UMpsLuj~+kx4D?ClRcm~L9*nJ4 zN&mb2fjPj^yApeZzu$N#bF1aop|M(y5Bv=CEyEcU z^4V_IpFy!6nRm*V?3#AC&Iu8d?eER=Wv;ixesZp?RcM@yb#K@R7JmRv_V2{|@_Eq| zuK(NM2pS6_Ze7iN`7EA^IC}Gnsh!eSZw_a3QL9DI{*m9N8>cQ83|=SqR66UT>%6h@ zsl3j_ztF|=pBWsnT!6ku z`DZy?+d@6O8gO$w6|IpEMiUN3DSba;rPXhy4+n3pU=1%1T%=u{cQAgiy6{n#48^|2 z51ZIeUr_kJi`IZqci`j3S624-@LMNlsFnVO1ArGuTm;6#k6CdGxaK3y0lrP);@3Sd z_Tr~t<1)Ux11$bAFLboxHuoFvtG<};_QT#k7aa62@Z3tUDmnml^J%^C#e&DguyW$Y zh^wQof5@0sj@ubN<(kvgeY20wVQ=f@v7CE#;4L`@akHF7O}ltS3>m&UHPB_PV3UW@ z8sgtqgQ$-{pQM@x_2&Mz_`mQSXk-&rVg~)n#vX?c(Ky{yEaZrYc`Y6r7)G79+=={$ z`eN~C#bj|MpPhrv-3ttY4^f?jvDoqzVk6@tP?()=B3g{qEFm8=y%3)$QNjDn0Fy( z9h}q~+934PHn|A<3Lo!lp#x~@7CzpVYZ`oWy%L-u3;P153N6>NCdNHpjodefq2o{sjD9c(R)2i0d#1mU;+z z5pxJs?}ZJ;GuB)a&ytsip9Bs>&P|@rW6Zt{xYjBjVxO`msNZPo z%R0hZBA?c937Va+z^ROp(!IF`xKyr94y~k!`OW9;a6cJCn0LfZr#;4f?aTb@>^*~P z;bF{|r>;MP`!i-)UdFg{ecq+#!%1Z83s?Un7s2P#tZK7zm4M-4Lbb%VTtYX)2g z{DN`iCI5zd=*v3u6l>qt@C3AxW4gXO+{gpyjdF>fScEoWsxbiiaKR?SXjibaF#+|b zp|J)-*F21d0RE&k6WovQJm>cCan|k+{(?VHr!K}77ZuJ16QN^ox*CkNM4v0Z&>Zmc zr}%2&7u37wAIrE|6L?*IF{e=Of_0nt`ONXIFJOFPq0~E-T^H?ROu3wxnkTvA%(sF! zsl1l9{!q;|`vh_H#=2K+_W5~kVj1KJ)CiPaC+7i|^|50sI4w2$h1EWjvGC~XTi}$s ziTBaBfcw%1@%<0*1$V(6T!A*?IX*iD-s4{QB{(WMulx(;Ja}$=_WGA|AB|UHKgRuw zjO__L^P}=na9QYGGXELeSJ4`9=}*ju{lKWjfllV`F2{G{bFQV|`hVO)+A=te!@$j(#J7Q`YudrgbM)=Q2V4o3z5;GwP!HOf z_b>B4502nl{r+e-o&`T&1J>p|>K){QGS80r>O55kphiSZO-)v4NA#h$)T-wQtZZC} z^S$n{0={oI8Gjlad$2J1UeOCAxh7uPa47QXf@<1)D1W` z#pbR_9;=R`;2)f?KhFo(nGRQIP6V|{j&s+h`eN@@PBP*WDkifwofP9Bw=vF@{RQh9 ze2AJS`!EeIqG&*9rP5FFc;g<_6|hzjt5P%|>>;^Xb3v9}$3D@SwdQ#KM?;vL07v~2 zID314|dil*qj_c8`><~whJKFv zD>?hJm$0XplR&;)Za)7u?6k*O^M2ymgV`TG#_s9Q{`N5UaYfinYN5<+pv|OhWG)1? zZ`woV&8&EjeTg{E!r5pBjtYLjctKz0kToA<@tM5e!anpHeI;@m}pIU$WHl>^X@PHA?@hnsx}`rWz2JWyYx z@oiq{erwwCW5NSif3*2x;(%WxR-oKmT*NJ(jn?^R;*p!cVnyV_{*C(Q$jx2w59%~h zGs~J<<`35|n|~X1yl$q}0C~;x^4h_9)Z~66YKf(#Z37>YZ|zWWuf4woKRWpZ-}oMV z!1pOGAnmaY;KmKSx7Of#aQQkgzb|-zyHZ-zi|rB89Dk&?xjA#4Kq2{3~;eI_?yuRe9bd_!?nKQS;@u!J~0f`I7lBp zn`6J@8ZDd;PUE>2z9;X&Kw|iNMV-XNNAuw#h=V{&U%$N--eM8B+8BwYjqR&$U1rM6!6yR`2|>u3+L{yN%pE!TmESxesit?RhP z2DkugLXb~?B>DF)0RPY21pb%DF}J?C`!>Nftfzg+yT60{{f`p+(LdrqDkkgeU&}ex zrZfZvBWW6F5p4@cSxilwT z%W^n?6W|CA0^6U>*c?iYwL9?R6XTLxMy)66gSVc_i~1VLBghw5fbM0z^)jrh&e$%B zoSWtjZJI}{`&4qw4ereRu)dD9!pP%29PEFN`LoRlhPc!z^H-(RCPSINC-*vSi$Tn2AIouj;$0?()66IZ8i z?yKTO@DBaZ>Q|z12k(mCtvQta0Cj3!z-N9N8hmv9MYozC3{K${?tci^;=YU#$k`Wv zIJxU87aBk1|EwveqGS5n_*(q=J;d5-3cx2r!$&TkYOc1*N5sk4?dY7$Hd)5n_JG{`XZsG!{byW5`&qLlj|XYlil@NF-+_%ggN?wi+IboH-_)wNV>_qy!bZN7 zy=X}IFwH$}9K3M^X@ju`_wYMxdH1E}i?QXw`1Pl;N8#&idPS_N{Vi@a-km+lJr>Qr zf91X#SBL@CGJx^RVvlmKlCw7ET3@t#tH-3D!m|ww9oqkV(k&hM?o@LagdW}eV&)N0 z8y^~Y@YZSE?^e$LslHlmTkQ6k5%+6eEcNGNczJI5iIM}sDzl7X;JK&!8TU@!rJQ}y z8h|g=<%ua17jeIQS2RE#BJ}rFFL3SO;^$_6jF<%43x9Fh81oKdYoO7W-#6~U`0rE< z#Z%Fip4+{(shfTP?QLxXco6V$%S6rx7WLVzC)M;fFliR{L_OI3Q~DkJZcQt3yV@6h z66VbJGd1bSUh+`H366(bN=N&`oRYV49_366eol>|@%}l_!a@CtxkK)6<6jyJB6nbY zcfMQ4oOn*Y3;t>xzrQkcjns+?TY^?c`%*{#viA@(kA6>2R;iWn+QNQJMLcS|4kI(RSE< z=BTKjPoC`47~?~*CC{MG;XuT^j&WlT%3ATSyv4H;pI%*w&4q5n7+*CHVl87tjA1c$ zMJ-G2n|#&-Z26;le6f`A0`OYsyTy~{BFmW0u@m&`s-Fd?gVWUXh~<4RZZ3aOZVUVP z)9{mtwGCTto39<_Ym_t&cg-wbiwQ4qWmG)8bVLU7RMO)wC99yqqEnyrN-OAedAb5EM@3E`X%i$99 zz}Y?dER$G+SKufH!d-MRE*}oz{?I|l^`+5Q#{RS?Y3F`$4YQ4<$0na44+fV27h~Rl zmdC+M#1|BO05_Az3+;^Druqlt6!Ko;@BQ@mIL1s%@VoMhrF%zAlX(>7NzG?sZ3*j4 zm@_f)k>ioIbENIYdPaLVW{u%8zlOQtos;UTaz2zR2wq2yG-qG66Y>PCvAekr`hlWb z;XBb17`xrl0q*8q?!6XXs1@$vaK|>B$sFS?7=LgFO@BjMQN!4*3a&OC?!f#K#+S4W zN4wAfo}29$hZD(i#P402gt&aTsuLbK%*3{w0R~a(J4DxEJPI?f&XALc?JW z4l#DYVtELB;a~E;Gx+$T&|(w~KyPqT#1n|k zBs4ymC7iD&I5PXF=5+rLZmi-x#=L#W`b^w=%^{;N-aI|}{*99}o=Yrmeo}MJmNv-?gSVTp zJC|W^zRQ06n))yHjsc-jwU$VEJ$|WESpUh9oYs$hkJy01&(Q;5qq%R@j8Z3n#;j}1 zwVDOY!Mm_G;26w>nEPm~DGk47ZEKecRU63~MV=+sAb9|Do96C@;~#9!B??s|xp4{i#f5u0@6I{6i z{AI*z%4!7<2@qa>pPkg}DTfvCraigAjVf7E-aq<86U`=Yht=yRMEhpBm=eYIw z>62jmwZv`vTEj8o$5rUOSAlO=aqgAq_Lp-#;?yUSGjLujcyl3I^@VT|^Z9HJ`T+2A zFLT|`f^$$uPtLq;GtiL30gzL#o!WT~pOAB(I)T}Tm>U2dVE6gMCNC zYm5Zb))R+7y};+b0Pn&9EE|q*e>nbe>IWP&5?}gQIFAX$wVSV>dVK3A^XyZ>|I@i| z^7Kuj=6(NWur9BG)-Cu39lm(dH4SU(tExFY)&H{6Aa8 z{jP>vF#p0DbO!5agLV9F9eAAFjpgfjc0QxNW6m_{?46W^)3HxBaji|X4RIU`sL9uL zGyS?5PK4Z#51NyoJbv@&x1pQh8O#N_32tNq{gLGFx|EK<>y))}%|lkwHXG^xpWroi z(Wlg#TfjK_1DgCFB7a`mU}~*_?XAyd&2~Ab#<$H)pT-{50b7UK9e<`KXAg4jbq4=$ zWo%A^10aT__{^v?SGkZJeE*1Cc~zJ0g$+!djgyI^&!koe`Q!8MM+fjMvHIVk`@fmk zm^9+w@%yLht#^SFqozmesl>`qN8LPm*4a`=Q(qi9{E8g>{=4AM=E51wiP{|H2atEP z#2j={56$?Sno)2E_3#6ChAzO`zUHL2maiOK-80{i)s0uEe1!XGB>sPY@&(jI9@g6Z#nr4AmGBMZD7S90 zb%YBqCuSdgzOeHU6LYhTrjQwpTUWMvYu0&&)B_TQg6f_0AGiXfOWmbJNBT)1Gi6 zrK{mD`UH<+Z8I@^c|G?3D_oPBWK}0vqm0<7M?+)bxf4~vxA>ejuSI?Va|60gnm@3; zC%FawEQf-23a-VR1(nyr`3$2ia^M5@u`Sh3h%xxAbL0Z_+2t(6D~&h7n-F8BhQQo# zO@9k5gf_NuU+!Dl!umYbf{T5cbAyvEuFzIj*NiR={dWp??i+E=E$0{)2d=6GkLJSz zv+tB2z~3YEo3g)jz;*^-$vs$mN=$5=T=h!z4(ij`GaoZX-5LSx8N|L>^UNFv;?J5a z_RQhxAi!G3hF{e<2)QO>&dmSdUu)&1k?Wyo0C64%8;8bkUlX^o|AM*7t_!_{`?g$y zT)h~+`~Ym+J%P`)Z{@(vr|14(`abr+Af6+s<{J*;-`p$rZmhdF+w&AnG2a^)`%|v{ z0oa+CkHkk@i~G*~4d3;QecxQ~)+@8^tyPw`jN{hhAD|uT-T|M!h)to-egL+_vEWwl zy!jaQ%^RCobgS)vuYm8$FSGy1!8a&!{fN8Et~39?HPEdWA9V@KcA7sD-2HIGtvFt+ zXP*7CTpDBUUyP$iBG-j=`YO+09`s{;nO~EAIk7&*eQqOT?O<|eenI?D89X6%=^cj+ zza~!SK;nRY6Z)Z|DRB;K9vU~)4hLzjWPjIi7i$e;+Z-ST*~~NeF1ZBjI~Xft&Ovh< zReb|52VOUCK+`iZ*N&Zg8F5H`Vh0oQ;gF{z> zL3;$Q%sks1iui30QgiZ)?&pc{b?et{?+GqFHF!Del4)1A4acs;2G-{!mnW7luZNqs zO5V%Z4mqj7;@X)N=V>c5E>EP7mM}-sz=p)mngi2Z2yNwZRS}D2E=o09+Q3a$qh)%~ zehYq9&6TwgGWSG3TGQONsx70Pc$tsOyeI0Psxst$b?a5yLUuFR!!Hk{)sZ1W4?rH-c0sil$gVf2ITu6E1Xgz7x3D`wscb6Hx4u_}YP z50_>Qd20_^>m=<6=I$5V&$V%kYpKVpy-IO!f94+VWQ|;|UywC*hPoJdpJLZqxl}km zFo?WG>x0ST*y7&8d@^BbopcBgw0`@{iE&8dvt2fQ)|W4{sH_m zLN1Xxxh{N|`u`jg8Sq(hJB?3(pFXB9?sFdiXTY2Itj2Dsxrsb8kweB>0cy2Ux!Z~P zO67~0XIu8sTW*Y0R~+ zZ(5$m{0rtQG1sa3Bx7XEgKwUhvcE^KGKHSsVE(jZrjS%31`uk8(YJr-rWjDDG`q^n+TQ;=>{@Y54)h z@X+6L7zZaYPP)KV7C1JUo9D1UvsX7YfX9=LY1ZGbxDo%*EoDK%_l-?%^gTa6uKZ_D|8?8Ex9+U8(;4&(b1SckTuksZQ*!=7z! z!J5-qPgqm53FH?F{$#8t>(D9gg{&LIlj#HTC8jqgP18@TKP}wE@v zCpn+*jn}WbJ8Tzi3-=X$2kIzm9_D->@b`2%PdHKdKI@vKV&%}G$p^@{S4?I-+6V_i zp4OUc&>NsFQ2UU$gY^wtv1S1r>YuP#&ez7lzESs!e=_G;Vuu^dv&}yG1NK5A`L$ob zm-s{AoxFp|6G;BD+UN0)p2XijSX(Q6{?-+2`ak@z9}-7ROm;;MuT|tt>y^eFqh{HT z-QY!PlRdf%Oh?|e2d$k(ErG`E;9K$Cc5wPO{M=iKCI6Aw?Ja2Sw}3gR({|)$H0PVa zn48d+ZvwZXBmamvfa$~mOf+AhKL54&+*kA2YB2OlatxYhE&&ckvwo&I>sH|BUJOSN zbp&g&%yTy%Ts;qL8aV+pZ{ ztd8D)@*Iwx!};fOo_TNw3plQo-?oCm@%=xvh&EjWepmCqgy&ie_d>qCiR4cppJH97 z1h{<#ZLyNRA_o8PRkY8l)cZH7-kQ&3pl zk@?Pxe3(_2lK0{)P}2|E@w_5Hsuw}m4&>|>C74) z@6)IiYRzuHE89t3xgW{l_XC^(`hko-d_Ii)eK&*if2TG8&CPe@5TF)GVm)={J|*^s zI(nIB^P7|TJD&4j3)ZKGUFB%r?}3AOki387_czy|dHrjt|C#*-=k9M^`KbG0oPzJI zxhLmf9)gxya6EXS_EWILN6vNP`-|lhf`5>=DE@EMG_CG!oj&IOz2qL;MP0mWxW*sV z1#vFwrC9&2?p!zw_y%jrm%pe60vwX276F|D+J)S|fNwqz{G7rae~j1!F}869m7{t7 zp4Q`zcnS3rwnygp$TygCyEzKEUVgmV`^c+se;4sA9azJz=6(-zEu)>upO`#?8UZV; zO+bE=>C}Uz?P^|&wz2k$Yn-|YaeKqY&}R6V{EY2w?nL9CtP@^&hW!GEQ!W?EbqCSk ztee&mFMXQp!to}$~@;em#DRMT{Z@0z)*oD}Q+~2^P z%%|{mWjFC z>#*Cg4^y?|&^v3p%WsQ~t>b5%zP#@O#~W86w%7k$u?mjnD)E`Q79#&)X{p=?yv`%y zKrmeQz;9y3y!+vhr|?QAFK$1cX%+udQ=y1l6Xstu*G$0;jEQ=%D_WSslNk%U%})X5 zgMYG4PTA|$v;%VyqteE`s{t`*f;Ox%dg2rJM4w-+h(2p=fW&@0qp=x}>tw*Qy}@|v0e5vB<0olN4aU-2#2OvOT5+&r&>Fyu=d+#9 zvCfo@fxEn%&sSQngRx5vQ0oyl!wXvDBeR6{hGT0tMGRAewLMDte5rGq|M%weQ}}H= zb7u@OO(!__;069go{~SIHR3+(tJ*&^SLh>a3MMCj6?X?lZny*=d|&LYXJhObFI4ce zc{btm8W=m^YI7WyjfuJ*p4TzZ^b>WN&^i?!#I@in(pV^8x$UTA>C1P%jet zhulY*TU)traJ}=(`Cai8d>m_lv1i)Aspml_WnUHD3QshawRsNX_c6xtNAx}MWaf*p z?uxvUI=2*e4Zl)8D>P#AUFnSdqBYF3lUY};WuAONUYPgg`)H?J<5Oa;$o(W{z=P&8 z&(^_r)o^b3)0XA5E!<8<7hXf;z!(R8_#B;8%2pr6eZZYMSLK2V-hhLiAaBK(V=k+E z$^8vn#XniIdc#5se-7|G~r1*Xo2)K0dI3b=R#qDsR^K z1mB~Fk-shc0bJ0|SR!UDV@R}@I$9CG-tix4bKOu6v^I z>Jl825&W`R75 zzF_$Q;a3%(Sf^h6<2Y2mX1zguqjDIj`ix5s_oFNXzh#kyin8Z{#3t1CGW-Ut1iaeC^6lFUNW0#yp4hH|;NT&9=dlsnJm{Wt~ZD^~j}JBgULEYIM}}n}0>^kKCGZ z_U2Bidq;nRdok-pKj!wgjCb||{V3+Ia;#U@sQF~?XS~bXR`-s4&#qs_zFI3++cWnp zZ4>N}d+_^^Ys(seIlpJ_G!plIKYP&ZsFzn+6aUM%TTibdN1d)VF+8&C6zgO~XXa5C zUT_2Er_z^TZf9#2S~FPPfVrUbo0u0`?ps?$KaV~Ub5^-FR^(u(@%xC~i}U8(9(k#A z*73XRjZCTdzFXkG$#!{0xpGciZCaDSvM5{%X2^O1(0M zfcwY#vOWO0-tK4vd$)nPH{)ym9(=nI?7I=H2<|7wyz1^GdF7HRU$OrF>UXIdc+@Je zF0Zq|t*3xrmnL|T1K=rh0W1TPF9Xvq0w1?>Zwv6%&*OgPa*a9g3bVn_v%%-H!2Qkq zPaeQ~XMjPcpo?$f{wKpve8q1jfWN{1o5z!9-*|v=2L=3$9C@fd0e*Y#a$UF^2!i^?%w#eD`n)C0~K%r}BK%>N|8gpBwu>o!E#O zJYzHdZgTiP=nEczx&=+$W`o7Qh1d8NOgtOx%=;^;aroGGsoaL`1LyD@#{AC(=Pv+L zFMvZ?Kszi<#Q{_wwTM`HVj+%QOuH?nt%w1rUJ4(vjO&?8aRv8748XH1;3X1#M(jUz z7b>1wOu7_u9JiMCL~}4Z!S9IM=&+KuSjzR`0^orP586Q+?MQI| z`M2#!<@;+mo_v1ii|6tCFOJX3UN^pE7yY)2-@rFf!!oTG<8bIN`6E& zEb1THO}p*sZ9dD&g=y?{k^8@$b7l;ou3upXY)oom(8fm4UQmH)9=^B4%DGhxYs&)a#EWjL@Cdq^kjFwWVB@5xD6^%>fmfgQ2W zxR=wZ19(3%4ik-iAZOCnD@;0suRG@lXQkcN|OQN-Cy^1=5jp!+^jcZj*mLKWF^BV`m{g6MjIhXZl|0v8G8cElNCIHITp)bv>o^zypC;Eeh=pcCpG6rd*!`k+f&P-AAQ&z3^AP?5j`V@ zq+l`k*t;|PADC(=_jL;#!8&<@;84U~awjE2Ic7euhw#V3;j|BdV>nC97d*-T_MFo5 z(JO$vTh0MP{VnWaeWQWB*xUZZ~cm>%P5Amj&9w#v?ZL8+)UbFbsYTeO*p8p*?YH} zGn2jeVEy3W%ICqD;B&R<>IYiR0nZa-A(qs4Zv0C27hw3u*yHO1pV?OKYsSaO>sZ6b zeO*7envE2vJvBI{mJU2qA=fSDbMU8mHsqnw`|`X~@DY<+BbD>=w0*Ia{XN*^L2QE4 z#rD_&y!Y6qZsPdBNck7iXGe=g)BuT*~Q3me!xyJB+2@xkzS zjQyhY;P4v1v_3Dq+O24jHe2(Pbs#_Dm8!o&w?yn+-8-ROs_3j14~-M!Je_={ts__$ zs7+%1(8NcKQLd%-$vKm_i19j*G00ky_81)ILmYDl{N_5=k8Ak-DUAKQ7~2m~gXB8y zm$j*7IhkaeuDEPf^j1QDIWc*y>_`n7`gFcu=yA0=jKl-8~xG%?res*oBw!XB- zqqNI6tP6)QHcn-}-2t~Yk3@uKS&)@)bh-J0B&T=-q?x} zgJnHa*R3UEUxCtdQaAoQqNiTcgA!cbL)qwWnw+*`d2yb zN5=0z9H)$3YMrXBat_G>S&KETmvfuGnHd~s{b^!;#s+Iw4t$Gie8XMrU+__l9XWOh z^ZKvY(A8l-o5!YdA!BAm%n|3W^{wPl>ULPxHlrVOqDrM;{rwn5I{PpGn^;?um1W zsnVIV83WDn!!_VQ6Cc47bq%gY4yWoHI215e`HP|bsDG8``9WSdIEhrfn|XnOn(u_$ zf#Xs$Egx3#p3f>rE53)t8oWAv@+ z!`(lnMUjsyzXwb_6>ax+Fe{k2ax_>Jo}p?pd<1-gan$O!#kA@$ivJ7ma}s?BCnR@b z|El4$7M&UtYya3D@-}Ma%sV2lWB#A~wX{Rm;Q1=vQ$rQLWMxM9L@ya!-qh00RlY{Bsao|)m^gf^c z?pjxn&Du8KwTrPmjQ2Ot_RoP~;h4;YTzI*B54;iARih(j)~8Xn6V7n7`cUyOb88yw z2beq^-%INV)__i|6K}w70Ddh+pCf=HkM*hU>n54|7z@CeR7?$&Y^j}S~@US(eqa1 zgsqp-sj?&i&sQYV)0k?VR1xk>7ze&Wz8^p(fT(JA&MPZ>BLW^|Ole!BlH^ z<16093m@&$onX0L_?vft9l`w6U@NTlMSb;=+rZsFfgPw}PtL#eQ@%%U zzBz^Ulgl>pJvrpEHh?daV7eq2bv4JX0oRHb*APpv8r-`QZTbrQ@L<&Q68O)fu3Tv; zwE)gq0*+n^rl(Hb9r(aUs)?TuuAB=NM)&_w3z&2^--VC8az``IGlTO^0c%eIKQ`g7 zrXJvBQID_wq47M|c+S(YE zVEZuIp#h#^H0R~F?@oZn_!68w2~J`%+WaPtnF=py}1AWuL`2Xh3hB`@H*RA1F(ktd+%I(UjTXf4*lRiGUprl557 zsuZ_S`}~?zo`&4riPW`<1|(?LxPJMp#VI}~Z_8%%0^8sVexi-H)1Ty#ICdA$OfA1h ze@5T1i)Rt<@1WlpW81gVX4`qrcCdXryb-*?uXZtRcA;~CA2`aI6uW4zovCxAP1r?T z!fyJM90Ogb8*u;6wBat!3ukrl&$JOd0d)lGCcz~rpW8_+Dg59jbGJjCBP$Nq8t+E0mlc+1*_@EO;_ zQ=Fpqf&WK)Oh@dsnA5HQ;X1uLu~vcyE|DYX2J+wh z)lV6iJ&DG`XRog0_#*DB8rvQ1MN0?Pq3Z+tlpf7}W{Tx)1L8ZrhTGVO?<+d8$MBrQ zdnAsd-Euo%fAV^g_Tqoruj0K9?DJ|oc)ta0$W`E_zTD@0Ufbaa_+O0Quu(kEbNm`^ z=C5!r_kyRmrpL?QlnkX0(TcS9gahry-|6x}(WXh-FQ<^_-vmbrKTx`Ny!Zc#_uvzH z@O~QkQx6EfAcI#$(gtq=P)e=Yy-7j~O5TGn^a*RH<6 z*n{?g?1THUr+}SOc_Q+$dBe;@eT7zX1IO1=fJ{!J_p{yXz# zc-YW2r+Z!Qs~;HaLU7sXfy<0N@f?M-gX>9L1kZCHd`csI`aL{NCv_?8qnVv)CqDlT ze&u|yDA==ox|$YvuCm~Z@~6rTv7fW=TI<67srh5L=_>q@2kRdMvs8zDTK_70BL4G| zHh6+z;E7)FB3pQdO|;VvFnkyGQ1&+U2HL~Tzv4OnLYsi~GX}cnVjsLp+x8AyK`lvb z8Tt);#p+@b$ML+p>K{VGfxS_c!E?S&TVOYo?d0#D#U0?NgY^aQ{P%GmSKzyb-$)zG zx!K#R-&F&n4_cqJxJdsq`1u2PzHy9;Qv2FGy3B*$MI2qzPkzt%`W7wHK5BLxTj1_5 z)Y*Z{yN2E=#lyYHeq78N1J74q%zAS&V{|UMC-};mQD~wn&Ckp0l$bXKKeH|!$^7^_ zjx~pGZX@TI?-*u|Ee}55HNxwr^#UvZkvRzW)^xRN1lMPN*k;;Iwq?^#^zl3JEcoFY zZ=xT-T5?ZC$1s)-;Q8V9(jLRU86^h@2aqT3mjhv3Tt#~n!EZbRe*BO*cRX5!ao8d+ z>ARO}h*+zF#bC=r;O9<*as!26e(XW>D_Eyg zPRnDA^-+r|b~i3UTh4qY>Q>SQtFOSW<2&=TR-O_15|1xDi1$0dtGRLp`j7DG!w<^& zi4l$QQp;I2N-Lg!rg>89yeM zSTGLm?*cd-*42`K({`*c*6Gfl3U;0o_OqO*F?7iZ!GEbus4Zh{9ZK7;Bc`V`Y;O6m zyeq)Shk%V6`3(ND`rXhvq;l(;ZvyVN`~b#9JLBOxeVB}u{`&0EN{wKCZDg&!PQE18 z?B?fKr}tJTL|eckx6TElRMJnhlk+9TEx*cN-nY#OuEe-R*Kqk9^LaUcOHQJ%=?i(w z`iFuik;^h3P%c1T*=KUx%0XKzJp(ME|5I(1ct*{Z+KQUfS*Ney{_{h3;q%sSXG}JL zN6?s9Cnp_@l9w0$Qnh8)@^xM~w$+%a%@Wr*2h8zf4I%UW=qpWWs^CQA9P+k=uA}u- z#y;A(x=vtBG+E};QM=Lfe{f?>wDZm2paJ}zm?3MqSp#0}gBou63gc7MY!nTED*)Sy zI~$Kg&+)Zb8$3+Bgn2{NcAK*%XIkjK)p}UZSN@_2&O^Vg_pP2K{~5J4a9Snw^>VP^ zQT(0AGbVZ754eXXV-A}uISEda7i!zebHNRnb6Bm8KH5}`B;sytH~B#IeCB|W^V7%N z-XAWbHgI?5TWB`c^BlyV88hX0Gp~#F<@{YL9)#yM7ERvef1HFGI@b^D7g@_l%xDe! zjDZn%qh3V4d@3&QHFYQ6E6+HUvH3^6`#pkbtUW5ZDE_F{3HEXpH{{GqGnf{ zMjJ=_M$LYE5}V@_ISBUL0g+EkE>pdod_?}St{=wlW6S;1-?8rhF4lm=ajui zeEa2>;om=NJ9vs%{mRll{JWUzwSwo+zYhZQ4xbOUp2zRL@e`{*>Z>QlhgO4E*>h?KPCo>cNb| zIDRNtas*sK1K4#mSb9A8dSWV`pso`!1)He>@K6)aJOw_ZiD#Y4_fx5JH;wP6@*LA> zcj^KBxtX@4-rqUR;PPg;lCL?(*KinLb8i2iMf=UBJ;`T~_8o22l6qBihU++V4!p}e zj+@8t=JPzZ$pZRlAsBfPTm_puZ#y$lSDZ~p!S?}-yAK`W4F zy+!l_<;!X773dujoP+p*(JQ$Y`4`?=iJoI6F%|snvxJ?t5p7S8D!M zJ8iIyF$ng5jNFk6wsPz?xQ1=?(NE|mw$l#gnrw%oVw}#Rmf-Q!r6dn!eqB5Fz5`BR z2mHhixQm^%!w$Hlo$y6F>6ab!<4&G!Cu7}O7UUs(9KNdu__yaCxRasK4AYe)>2|$IIiIm=GM#T47Tn;GXXw77(4uVVh>J+N0^R&rj+@{XT|^J*k=C+ zQ=f}%`fBJ9GRMQWJ&Zo#cf8)=_|U}|zIX8#c$pa6^mJ~y_a<~9B9e0Edl z2=dp0ch1Joxu#QUo%Vfl8F*v~*km?18sBD37Ir*-xw1pKH!yqiov{X6tI>O^n-ujM z%EowJaQqzjj=pL#XumvgexYj@?ewU*N8oITN2+*_Hn}?Z3)`UJ2HN~EeWGv%`>_sQ z$FmL*V{s4QC*zq)o51!ByukTI1HcOZfbNp16kRegb{oQ(#Vbb@w=P)%Y9*%Ep; z=QDGy)7X>o#k*(gPiWW}@6}*bJjL_&WIqOjx?le-)0WBY z!3|u+oB-b@nLE}_G3SZ%D%lTvCk-6{e~Wi-;@ zgMv#mhO1_jdI{#~@yyNN2VYr~9z3d?YFa+QJG_4CUcRhr#F_gW|Ue8@Y7cP$bqd|{{x{l(@FSVm(OeM5T{J%@_Qd}~?gR0eHg^(^z#2~GGtJ$NPa9oE!Jn8X zYh!MRU)8Y~kLA2K7lQnh_M-fuF&M_6G(KU!IhP~$D`g+P0OrR(RQt6&4s#THRopF) zSA8=Ysn4*pPp1!F3~sY3gMQBe1S~MnkjfUEp8W5yy~YM7>7wf4O)1 z%D9jem(iv+!E?j;J&&#a5qv)S9WWaW0BcoSViQ8hfO!OD%-{RdI`ZiFy$80~Orha~iu7x&g?N2SntXE)$m)Z7@u#(Gy0sBqj~iRzCeyw?Swc|4xw!h?NH9K z%md>(#QEmsRC8dx9etfCp6o#04*~CP5jTdGz*w#PsodjFoD<(@!3|*A{fKWM&O>Zo zbSsz^Eq2{I@@xF26+BG-7I}c&C2BJwHm>fk=DiU26Q_Wd+kCa{L(nqhfQ>&0Ebg2W z!y5bJ{I#~S{$Jx~)P$s$vu8aE7F$9aZumuG(Ub4d-;|zj|AU3$escDO`vG4&HpIT> z7#1hnCbo@pTuvc{r*G$)?=yzTfl_`MZ2_j2|1e)iWsQ7+oQwERUdlG)-ll-n;Ro~A z!cW1a$cwbpitYJqpWt(hH#A<)T*qoo)Yz$IDZXAFBXliwzoU=nPh+o)fvU;~{fL^w zsuT1Zu;#ob56t(YX7Qri_pOGK)THb@>qy8bDuQ29?*KC=4PM->P#|~AaT6hre>%z87 ztPg&>?j6?m7`xks%{I89j92_;m%j>nl(TTl?UAZMKW&1_WaPH-_*k1}~ z>whxVOpU7h8+`wG_O=_r_1DLIG#0OIE9)X_qWhNd#A<)jCg3Z=hvnX%xJXUuFTBQH z*b6ttdMc+O_w1Ugon?*hvO}?3u$!t^x(~(LW?ZUz%k-|SiP$s7`pTQAIZb@Tz5F-M zDeta7PTimSH~pIWQ7fLZ#v0h>3^2?#-k*m*|E-_xc+jk0|p(r9BjV~{K{+W60q1JupqJRd5cr|?b3QJ zLW{l-Y`g$p^n7sV0&uta@X`8H_b>a9S={G0{Pr83u^IpWOfcDWIE(2#{}lY?UxEd{ z0{czEM?W5&0XhCE#`5fA!Ifj-J;s8`8@TTgVB(QH%Lwq?=iq(({7()`;r^UypMr}% z=9xbMw|;^@d?>%K2PY5X9K*Rk@&t|^0|(K_d#-WB1hCX3c!aOG=gFM=E86@k+TZ`D z;G=E=hfd*{rg1MbxE{F)pN!go`E}+goXNAzgkvCgU{7io^!kS1e?uRTH{b$t1`Pfd z4kZ3oOeSYw|2g2^x!j+z0(0SM<`M6(fY0XB)(gPf%<8RUxLqm z3A_aueT)3SQtn|X_q2q+%V@u4Jd^bn;RcAi$XvRDwp@-c-rS2TQre8{msh}BBp3t4 z8hBjEGVXUd05?!^-Y)upc|lFfT(A#?&6pxu>^!ftGV3H%3O6z^1Ju(!k!}>sQH@ ziA}Gqp5B){hAa0lCOH1_J@hGBo8)fpmAN`7;uI>L0_&6WFukk%!fx6Te(o-`3h)BS zWz^pITwIPOpd>g0YbPdV=raTxoCFupC;qSR&YJlkxPrf8_40asg@JSB2C`pf?YjcI zn)-?6U@V^n2hu?j~_Og%4+eTd)OWG)8Ii7(MLSBzpl1$~sI=j-!i&3qNxzZcl1 zA+);c>|F;llH%a-uZz9)!-lM{N1><1z) z#8`^@V%Gj0fv*Y=67z#IuyHGEjJpz3vS%C(Uhft4CQ?3`H0&&}f7=|fCERa+>{9$w zYHCw{?th{$YYN|%9Ds4U)xG(yt($ae$o2VjCH^db#HLx z>Hy5uAU-$uf_|&2yY&rXtKX&ljy;O)-FQ>z@r^Ss{~jL`HeD)bJK9up)$2>qH&Ff} zHYm1*bu-oLR((cWyumX(W!qsh(`L4n{?Pi7v?bhtxjD_hps!JFfbXr7 z?Y^%alV1m38pXIrW1?0fe;?yr@L{;ucVOSYFvdvjpW%tXSjLoyyXDEszh|6}mYd># z@Rod9{b|gt8<}T6grwAlTZUiz%J^ODRcdjV z1AQHvT<;h#Klx3xMf4{&Tmpad_lV7r*HDvfUI2Z~;!Uw+dw=|)URV`7;<72ks5uC*ML_+(!F6!`RrZe_b5_V`Mz-&+%#n%!OLH5X{H; zlF!MxT`r9F{V8mk_AZPu^d{Ja02Vp zP|4|G%biIZT)-NIPpR&Aj&bf8e60UipR)7GHZYDPg<*Lv^OdTjFBu9Z{FnYoe3B!7 zv8BiH_d#r3#<7^eoF2w+TYs?rAvL<#?r3dm|BP>MEH^ClYHv2^#c8aH6AUGp`l{cY^X{AcYlMxkXQ{YL+&*-*P{On|v2)DD@`wyj)# zkUqOaj>Pp4Y&(eid`VwFbDFl3yU`zC*GWAFxb<4_%Sdp4I-hq5oGP{~7$>&-1>1ax z-xYi(K2-Ce57+vzzVylJgU&o0y!Ltckgd5ZrcLXmhF)JSeS2)=R5X`@d18#WlAn-6 zaeXzW&Nb6DxcGY4X8NKd@Am-%oWk7c#4(=-ADQ!ep6%UVc*=2dJ%RbvWf<#WKUv#X z>~Cz7c+GK|!s+B=NX4K%uI>u_SHOLN*~~RyEQ?sT;ubzXGBn7>y(H80vD02Wk3M(t zZT1)ZT>w_^0q!2db9amQ0^?V#iDSLplA(d+%MW1wfcI0iNG1ecH^++kR&u7HF~5ek z#An^Q%@=;}PUe9$k89vs=SlvBwDF#}cI_tS+rb=rm9aA%_hM)U>WjhoVEpWt#nb$M zmAd-C{N{>ROJ8&hy8LnI^Ls{aS#|1p2b;eQJ^m}4|6#^PB7FXN--Z6#xF72(%VU&2 z&HlA3Vs09a2Y-We_5b@ksT{aj&gby28*7o$`}Bv`;C>wswxziw>G^xdE*I; z3u<}XSP3)<#17ep=IAj$i}7>D6sadNPejw-=r`KI{5IytQ-@+~iTx!PqCUc0&F1$J zo68xPm$~kDaS!IrkTWn}vUQ(Rd3(^P7&~WdQE^4sB_(a_y@S;q$^WoNzr~z_zgIKk z8dbHKxV_(UA6*$AkHt02$>V{vCLxx29s-(r7!+`SQdwIlk_N%+TBU@v3a$^)pOt9(SQ zZurCX9~JM4eB$}fXrp7_;+N76m6tC+0Dlj$WY!QjCbYUYd(ge$_O5%eW(9sPd)@tq zeg9YR1HaMM3teg6OW3)@+hz1rQz}o--ot+6|N73_yRc{9F1HXm2IKE)9+q=uFYXG* za5&ei{GWb+xerGzzb^Msx*FT+1T}PO3yg1|{ceLFIi73dYtV zZ%5%fCWimX;cyNkINujw&^hJqVE2Zs&?JAQ&b{1dR>5b)~9T;pT>)t`Y6KjU+> z0297|t7z!mdg^GdJr1lk4*c85vrmNE_!2+$q!btM|3sa8T-NpZ|Lhe%Iso2M^#rd=Br=`}6)>uh;duURP7|EVe(J|7U~e=P*`t!QgW_?)jWc zEu4mR0`ob~`HV#^=U9tw;5){A0lZ2b7+*z+#SnG5B!_*cQLQ8!12>}%VHL-`BEH?+$D6s9dpIWgKn&T(F}HF~@J%naF#ZQPU$Fh?7WT1^dA65Y zh5c-MKU@u5LHAa!S1bE&0eiP_{q}?N(V~>_`6sC4LoI=r z{~&zALB@wVg3gCIKXd@p59AacK{sJ90=Y48|8VO9j&TmhIF@7A=ba*kcRfKrb9IE+ zH+W(spri3Mdtub2@%lsjd=~Wjm5=gy^YdWo%G1HjiNv7=*-yM!8eJR_m=e_%_g#b^l2|Dz|Om zlssMvpEDniexbC1*d4rH@ifN)rcZeXP9>jX{h8Wl&S5a?K00SPjLJXAV+4JH`YyFz z>J4JUz$0+18S^*>a`5#V*zW?yV4b*$b3h+vPS#_QGgT9&UQDgDH4^HMt;?3{a1Ae+ zEswxj|35g}hgpXg@f_$M_*d(x#U|D&N4xNPFL>hfLY_^0t=8Opv@xx<(&p#InDILN z2Z&XvSIv9XSdAE8TzfFY`Q{wWF)hCxN7rt@6>J-!;GLxtp8H+rl^zqnM+RHxUQL z`&A5NyvSoz^bUEfx-|AXQjUe#<2o=?V*>NToC&cF@tg5?a_6vp^K<6LyarWW8OvJ7 zmFx8f{@>_W>P-YLWNaFf%|nLYY9^cu*0HM}cMQx4r0?TC=}qi_UP7H?)ke7>FxB6A z#*bpoz^SDEiu-47$T2uqt!0n)0iTaUcRhyOY@+;u?-NtBV@|6-s6a2t`{ouBnCI!~ zZ2xR>0$=d{o!pZPz4yT4{~@MujuI=>zsT=t@KVRs*mF%Mn12yZ$?-6bjD!A;_P$W_ zDwkCEIk>aUoDctx3GrsMONiqlBe*W7GY7YZxnkX>S_*X@$(`j4#9eSPJ(y2$SP^iU zW1n{l*99&?p2ay4i7*$RAqV;-x$K^7`z7+g7lKv0f<>tTO@6^~4EbWcO>5rc{K(m- zJ@2^%zEN(OBaiNtA~zx54n#~e!B_Y-Vd_zCyJ1L8(`w-DRv z9qBz{e^qgxev;PJi!to2l=)onffCzQJWVa_Da7Yj5vwPM`hNQ>+S97$_TU9r`Dm#B zwH8+ma>3vHAOEaDU={rBb5^t6&GsD#b;tHtP5v$0nnAtn@R0u#Z;FG&7h$mvc>{;{T8{R6A~O74v}R|MUxuM8GIuZ2PpTb+0>3eCe9T zy_UqtJ-}fGtvy1nt=6)+1%9=>-UGA^(a^^=f7=-yJ*C`k3=k%i0 z4<+pyu}!#-T}#b3+Pl`CH+p%wHkzY0@0wR5Pr|iDhb}HNm#=46e4N2i`hgaY5C5CP zw^u^diR6>NN0a@XI&9{^72wr#(3p>=wtDvItY_d$`hi-nZO@j(TCgkLcYans^PFkm z+3V1kw**Wm_RGyy0}n1kPwl+ZPgJhanl7)2&kHpSa+BUCIlo|>=5Y^L+wlzRQBBC{ zi_7X3aBbO+98t+^^2Dcu2PcAGnI}~nt!v=C!LNE$IEVBjP=_uSjSS>+0?C zl6$HCdwlkS;8$oL%=C%Y&9kqM8HZZ$@h~2Gd06`{FX#PdEl*ny{=PWWfvAUw_ceK2 zAAm3}_8E0;&`%)lb#N^Ft%s!b^VZYr4`J_%G~UyDUN3`awH}Rd5q#f%rE&rGKrKAk zTKh0=dTr{Js~4S~m2L1A@%_9RIGFM#)(oznItuj>)*-0ZcaCTL%Xtr{a1L|&@h~6U zww?`TXYdSO!Sl67zaZ8R{+EB0uaZ+p{w?!1#u|zKzqjt~wB)zF?u25^GpAxYazD;tx=H2yT(vMzGozgqd9`THftXG2>;z{di z)pUya#oN}y`J6OY6CFYP_)qaXdfZ*a-IowIjtzap^cB-LTyMLq+lYJ7#+uvGW2^im zazp>J9?$1B&ks2G%&SA~liaqPy)mCP3ejqg>wTWN@Dugd^4gr>B`(I7gSMv5Tv@#C z4!mFVb1?s@#GakO`sBc@Q7|_k$8XJ`b%gTZRrfI-qvX56`f#Ih@0E{ueI~I*v2~U_ zzy8fWXD}wG@*IbosF=cj{>GS*+fu9AhOWWd<@y(o#4%4nd$3P4-u%nZ_AeCsgL$rN z17m`Zk`91(T6hnfwGd7J2z=R=>;-dv9(!!T<sar~dv zVKun2k>d*a>6#TQ$=?Q_yQZEi(U7kIhc5$HF9SE%!(lAtc$a|7z6TR8f?HU~w(-|{ z(z<$nPn-|8fZqQ#>hF8c=3Hljuk7tdo&VF{f^EOy7$>u>Dd5RT;O9wT+)12YB{=*m z^3fAGr!T?YUxE!MfR)FB?LX)HW5C;AaL%7|PU9J$FTkYZ8Dlg8_yLyQF_mM*J7CVY zjH6xx(>d>IxR4p-o8bX&pT#(e{bzAZvpHUS1=O&exr_^bfz#%K^X4%QwdCMy!GPa^ zaqU@vPr$kb;Nd#9rM`h40w1CUXup`(t#?=guEz7Ar?mk~dA}YGXF0fh1-N%5Tm>}& z+ZfX~8o;>?ytfMczKUzPI*#?#SrlD~)`Dvi9k>?kZoVFWg|TblP1bTu>o`Ze7jvlv zn7T$9k^SdN46P2xEE>1pJ@AkG=&}a1iTP;E`yL z0`mV`_QbiRjPComZshMf;Un>eIsAi+JM%Kvz7b&jv(TUPY+-!&b6oV0qy|NQ$g z@CE2^j{R6%CliSr=iJDur*DXRN3 zx1y%e9`5P{eOBv9TRw|t@x44#|7)IsSgxMG$s4Fm)HkN|pYZ&%;P?;m-IIy?%n_nh zRcC1)!yJ?vOt+&)w!SfP^lA@FF5o!Egk$pAo&PNVM~Od&5lcS@?rZn|HLH4im0w3( z3PzM0$hys(06YNCb+JV8BCr%WEqf!DT}<5Fj`JZGp}y9Al?~;be#bsXaSYdnI4A9w z#Am-JcD@~5=H%e3Yh10DwY8hpTpCCC+uVy zIcRp(@j93EW6Ml2HVWKA!5-oca<%Gy^+~JSVJraWa-KXAxOcUAZ0@(G$OB&^4UZ+ zr#F~i%q43&tv$6r+>gA0^THm5j;mfrdNivY)_YBlcXLJJE$5}R!PZfm+jD#7$>W-L zI3D>Jxg3vGJY?O6e)RS`HUDd^xV`<24dK)Wq{=Gu%Y|jnxq5U4jN`Yy8oueNS=2E93#>wK0sXzw-v)c(x8*fSUkYxhGPWmoh;NtJ z$(*5|ORNp`zVTY?OTiC0V1@a_?;mmh^bGkvJq`2ynxr>%Z&E7&o}P=wS9s9y0C+$Nr0+3HUgDBI5<7vsPIQB{s-!07(`#b9ij=Pz^$%E!+a2%|MdUY4xz`fbe{5tb= zvblHWXGgHwdgk$!>bk+5Xu;)Gatg^4&kP=R_7SXliFF5D>iVO{cKr;-IVJ`UK690) zhcQk*F6IQYjtG4)^G?A_?&;v)Ub6zfcY1Q={s%1iZt%FTOT$xrw0?5uJT zC*hf&PA>pF;ql~JrwsWMAuRGSJo!- zwxxG)9Y1z$Gj|N0YY5m*{;0B!pPd26i(BQG@@fKBj^j*n;Nsn;p5dG_@8)m%kBOV> zZpJeYk9T{R>(5{ON9G~(SkF9t@b$`z4CEfTm2*FbdCcq45zON+>>=QI;J3F8Z#jAr zmhF-&;Cu020?hsWVtVe8@0jCVo&WgKbqPN8RbBCkzYRb9d+?%vH~87>FRyQX%@vH_ z+o9KjxZOUJk!rp>7(9Ou-^atgBBwpiSnj)9{7oOj`_JUr^n?FC{WSBs(W{To*n1$o zBR%{E)7!5-z58~sPkOw2y^7!T-sXI{x8)NWTe<(b^E;V70QB0_JHS5cl4GnNV9{f7F8Z%o*S zgOzzTG3=|vwbz-`=Wl8>)x;VztJ}10&z|3M(fx)TqU)KzlZ3gSp=l#a*ECw){&7!l;dAtw>qo8lrJKRO z)Ry-mSB%CyuiIK)TMK?%4Q5*3$fGKB?-=9G~_gl{88*=y7^-pHs zmEh;e;A-&yVt9b6ufWG&f}y|U*d~B4$AbmOz$1(ympq1Z{ep8G2W}sSZsH5hyMk>@ zAb&pT`o_s$GltU`%WwIO1_11znpMph%mBB}AcsAR|7W9Hp93a^2N*0rL4Cqm^Vlys zfG%MFQNb&){@U-ru))K?-i67z_!z#12B7;wFg|q-Qx}nEU(B_&kKhun$&xts&s?*V z9Ckh9yc~{$egXHvo$RCrV3gRK-2Z@8@DPn)=%4|p=)DHsXKg&+pP90raaqH$tJyby zzaHGb9-d(%TuZ3)_iw!c3*NE^LlfJ^Tkt_RorDd19fW_JNSMK-e51fetScb|F3T4`l{cDo2oy+b!%l@_QSdCXU;G$Q(E9F z$oG@qFFofVz6a<8?rUXV2N(~$DJ}))qxVl7a{$bakHGGrdC6~NuJ1k!&vKakhCTv% z0C*o%95m-|e*tv;OUT1hyRR2udOG<2KI+Wx;dj@dg-^}}Cl3ief9Xs4yGN*}mp{xu ztj;LZoz|ZK1}~r$ zr-%CWxQ7Y3ZN2`~%%|N0{=H004>o@YOia$&{)OV~64nxXVaZ)Kwt}1c$)&nJoXlDd zHs^QheAbDftU8vtXgGd9<)N51*)#&`MtOxE1taF2)8A(1m| zaX+lt=)+zAtj9FhtA5nHu(^u1A;jj>LOd=`P8eowanODK*z-@HC+kt=4fNfLM#!0h zv&H4skGqDpvBsrc!!e)XItgEJ1#4#&ueU=pd^B(bdYL5-VLjwEk3ns-8hi6s3BABX z_fQ{OFMeW;1*hv_XAabQQ?WzZF~;SyfZxRvSyGy$i3+|ZH_MELAh`^a-OUD;I<7>|7YARKW|=z zXE0hn^8#5*c-~$^oH31OD7g-Gk@`vNd2Gzneq@;c^B(xde%$68N`J$?&Nh!lOg@qLn*5isvcBZjwbtBjjIGa5;3UlR$?+S5 zn)_3~tS(WVzFtq_D0Ru|64fxOb5u*Ir@0tXoab@b=huEw{uKP0`0^rRmotfV=r3jO zsq{bDTa6f}Kk?V}a9(+%iSx-%7}MJ;v80HxT133T_F|ogYstZS+~%*;U#4aeQ$NCf zHUqF&-{ndfiAL=LpxV8#tyr7%0lUbFDlKWBf7a_Y}vEmRU`UK5B9c)~0&?YE|`hS7Xrj zaL^z)M&^#IMw%xk|GUVs3D`*=E$4sbABb^ZCa&GbocT^piaEU-E{J>6`%fHH_c<7& zir&j@XTqJ)M}0kgt%idm9u57y(kFsjI?z+=M&6&n&%N}(rcby%$4agjbMSlAncUa# z0{`OuGJ0~#vO=*`40W)OW&6x;5#e%`y6_jjbwk-p*L4)8`lLqX|K7A z2ZLw1`Bd|rZDZ^s2)-bfnco<4oN*6sa?tjTibl?0|J(;FnBVehoy}#6bGc8zkJeh- z>rk95ruN!+&FnjB9fMw8MbDT^<-MFAa@)n=7Veq4ztX20pLX#^+r#1{@ZHY>wzQ9- z`*mODI}=!cT+?zN=f2A07!tt2V>pJH++!cWTlA3c@P2iB96R@_ItcNFyod9y^bYnr z&K#;*3tp=a>p^w``xke>$y6K+zVG&|t2i612*#9e@jZLT*;g)B06+69#&MXq)P81X za()5NSKSvdYUSx%gZt=jR%`z?uJK&^*3sK+68++SLjU?P^g0{K^}T=|at&b0fn4|B zgue0ivadKB-1#babSiz(ZgxBNtz*7i_W$v$Jp_v%GxrQ`+~j)3I7Gc4nV*k_wc2$~ zUASw!m@VfQjKe?WEO`#V85M43%no=z!ef+y@8FVB`mwHpIsHjq7kutB*KnTnWy^ey zxywAx>qalRkHo+9g1f?V2$1~JDM(=(pl@d=&yDd2Ngc3@5Fz_W(;-lDht zmJZB;4)C$u6WiJLO2?PaP3^$_$gy!erFYm1?@XQ>^qil}cDb)SMvo)&TRz{TBl(aH ztalyxPDh?;9r+Hu=vQ}ygGpk}b!1KG$eilP@g>3kCV~0+?B6@GezM;z`U1wdj@5x1 zXc`;(^(FKQ96|lP{9ng8!S7{%8hDV*Z{bMZY|nZ5J+AGS+~+qj2N*MZ?X^YW7#48f zU(2?$9Utb*#=uLsPT1=&IhW5LV~yauezy2A#@il-*DyXS=v{aNW898&?=N=kn3=sdu_PJ2Ld;em&Y9VmO0Re?X}}KJc}Gd zY#8_5vT#qwCUGwxfHRoMdUF$f{NQX{U!v=|7uSUOn)O8BWQy+Oy-|!uAGX0*xlOqa zdnL+`s%dcT(Q83oUH(1ptB+@>wO48p>(5gkB)=PK(e&9@x2T7Oxrmk&SgBe6DU z`K{lH*J+L-Mn)@W+^nWYzZvU*tb>eH`|M(W{8kTS{e)htHD?hkQ1_#kv9YOnt>}8< z-@f_^%5@Xhqo>f5EK+?GtVB(39r?w6<}i!r@c|fuE?|Y8aZOBRR)d}G4PZ_le}#Rk;aBLV zun*6^x$C*+>N5C$;yU;S`UarY$lKDy_1?s}tKaY%`r2l$EgpXO|HV346R?SK!|xAn zAaC?KY8>PSHge52aLi~t&RGiwv<40c|Hcw{p28-!y_>NNnvp;4s^=j{tf6 z_My(+y8foIN8n)S54i3q+rrzAUKedcsKKX3NFV>QTSEP~JprvP(nl|=g!-afwe|XR zQTu%|dG%pIOI}|FMt%y;5ey#hOGnOKuXr(d-WKrb!|;9s!}^o)Q+YagfERzz|DZ3@ zr!-zC1a7aqNKG$T{^F3U*MGU{L@+PfdGqjT&!geze|_cjt|~uYdR5 zv+GGDmd}0-?cq)2<4$MY{byKaEWVxTR_)ae8f7)3a{V-;M9jVLw|#uFl$2xq_lq{6+&MW>;IC`Z{aqPsQ3``Ni;| z)F7K*mm_ukwq8`tx4n}yx~oCuZ}Qpshsk+9ACAY~Z`RDKhqu?4_4oQO*Zr0CwK8aw z>;B3b+l=nA58ufP+Eq1i<}}R@SLB!z4*4)OZt5-d?lOOG9$I~6)k`6^&f1Hf9sH=q zFZm;Q_g@n45x3`D#k2K3w26NqcE6fO;PFxFTZ?9#0g_}>v zehmyg5T?`ko)0{0mlF8p?)Bm^)ypTvvr!m?14nCqY*P~nbzSmP7r~coCe*w4NL0of{ zIYh=GgV?EbGQl-)mgXu&5~Z<{w-y>`%+THopa znJK|P%DkZZQ~LqAU+dHLplW+K#8dgh(P3{>Q_Q}>vFbk6rK(L=lPbQ}W6JSSuPf(d z&M@sBu>^Q&G2^}+{6j2Rc{=fAT1R3>V(Fe>0LCWm8u2ReT?^y*To{|8XP8S@Fqgn+ zO+ORsfl=OLF5MFFne$0pCtgwa8_%wKHJITrc;Yqi$$cF;t|a2Nj=T=;xVt0su_Nc7 z#B(Hx`z9IgBMFSxiR~v5t9Ak#bYhK6;`((0^LApqlelh4+-H35i6rg~ey&U6`5+GJ zNIb{>&h_;UaeR~iY`{W=pMWj6cf_KpSpi?=OcN8pDYS4uT}IyXeDFnAu+|G4_rQP` zV&DezqGA^Nvq!7BZ=NBy`mAdS_ZIw{>yf?Svu@)a9>leLf_YL6M{r8G##Ncb_uMx% zSG4E6z#xnKK6tS&`<}#od?Ls5`!gBW(EB^{s2GIxtbND{C${7B-*7*J$>o^5uhq-j z8{S^%g|E=(o$cB)TwEjWFmIf5l^O~D9w4v4HkqelSaG#I(es}TxG?#*tRJj-WnY-% zrSJP)T$>ayYb|e6dIvx6cjWqX zgxg7iFHYiKNQz(Q(%*2+O1RDol2|vulw0^2oy2{W1gDS`zt-jFCo#^%5qcLL+_x$F5U;y$=B{GB?V?~Loj{nRNwrgfjQZ?;#l zvJ=ndP8?q+)`L#WJAN0l-w6Bd$T1C1;(5*g13R%kcjDT1VqSM*tdhA7$#9X$+!x8L z!Dq40vzQ0`-o$HTl8GadIgezxI$ke4i}6n;KJtH#f&C{8OXB`u{d&bXL z0H^Uw?=8N=9F-rCo6LC7XD`nO_}BXL;MwN~p3&ZR${Tf&5Wn=7V4UK(W?E~^-+^7!D9;5d0E!ZP| zC+_1}DvxiE5A~H1o*ViiM7yXB{mmQ68HnrkJ=TL$4VJx-%o&vJg6}xu^NYBWaq&4X7aQ;4@LkX` z+N;Ezg1#lj+cj4Nt|Bjw`~iA7Yc6w%-SY>4Ex<7P180?>mqiz>2bg|ZdLoK<^0weL zw&o~#QTn9yJqqU3A6@_SgJA7YFP%OSPrw_{U&9Bar=!unxdjYH&UWH{@YP=Q0(-z; zd%(Z={=d8njJXqhwgZe0A26vIyk)KTc5>I~1BPrPKfD#K^=9(+_yFQBU;kng7=0t# z3%%-N!_b_6C2K)p5e0{zpcaP71?Nsv1`u0!dSS!KKlhL(L0b@@lA5I-W z)|dRQ0LPCZmp+Db7#qj@MbA(JaLIVSOHY8#6Zkz5?Lg=O(0KVYeDkXqm+5c<)tocl z1CPz7z5w69X0ZS8*}O*He+oST-kAr6p2yhNGG5<-&#C+GS4%$pJI-|hxZb`1)ckK; z$lr??D?APh7qYL#jNf9m`#qR>3Az5I9AiD#YdP3?8Doj}AO3$Oo6!6(Xn<2t+Ygt5 z20#5t@%I|8Bbxr6_6DTp{}7&i(U7;-hfxo|jBz`$wt|a9vxNlju;Y`OGWynV7bZ>$i{Xq6rv{A3*PY zjGMg!TH&s&4+uYTAAuPyT=U=sn4N&nUwb(Pd;o7a!11+leW(Gr1ioO!A@*^Iu}}wq z_aB^C&F%EX7;_Xp8 zj~?Fq*8b}Wkb+h}g6`ki^_og_1ph$C&v)$|;P2G!5!N@pgCD8={`3!M8$*5nFnj`k zq8^|3x7okY{ov)-TOWZR>J9J#NbEr$KzvP-e`^f@-=oeT?^SqXGVhRzn}^lCoceH|c9#721CM{_Klpk8{1x;u?vo zsJF+1KpzW&^F-Tl|R6Jdro|&yWW3#oA6#1@14tQ|6&aA5Y+q7J_q`p z>oI7*aQ#~JWl7ym4c02O4mlhrbp!T7h_(0=Y61!|*oNhM^fNTZpFP;h+~Q z`y%Kh^kG)NVQ;@E8Z~RM9S^-*QvMH}#JO@V=n;CLZGeB)yEXf@z{jLN$#>yy<$bd* zW3BEDKLQ6LC!#N(^|IwnaJ}S{^Bej7duru)#`(;!22>AreXaDIt69M|;8aqx;3i(> zyF5oCUBddWMy<3VW2g8 zQrZTuTq_R+w|qnB6PA0ansfAVOE_1w>Gq+w-@J9^75@!2YSx$6->b$g=tPPiBQK4Q zzPWArb$zlU19_fa#q+ZV+5?{7dd>N~ln1vjKeBTm*AGm;H+==wH|tGj?>7Ay)r1%9f#+{^ z+rdAfWHw`oSArgd@>y!^y=HnksK?hUT~DC8H1vRFjM3-te~+UdK||Q|d;R`GUA{U+ z^*C{#%oWuC&kh=#qANq4y0tLHj|E>Kxk5eu^a!#hCht|}F7r4m%wc;hI>)WkN&gd^ z;V$mMwbo6N^Fa4#pANnM+>Sm<_8YMN$J&>~zTw*GX{_H^q>ma#w2k}V)5tHxy(#(_ z*Qn7{V{DBu*XkF>AHiRu^q-9XSJZ01Yz~4sgs)|*pivx3%0-capDb^>#30X5}wxleMf zQ{di1E1^e)nt1!8>jS2CTs?R>^%3ezMvkuo@TJ{TX`Wc+iD0Dgtz|!zTa&2lx z)R9=LY_3~fY{{s=zsLcqp)jADw*?)_t@1Ex*vSFE%Jz!+JlxKYp5STE!!x0OPyQ_$ zg*Q2_`_Whs6MO%t56?uaW8I4y4}TlO>QkPxG_hw|eZU*|1-!>zA>xb;Npzne#ISk8`cp1pE$=L zXXcuwMn;dZf<46K)Uk*ioSXJ%Fn-okUcHGrA&g@=27`4xK?U{tXsFQxm=R86&J0XmzX9Iy26(JmI7fIwUr&C4 zT>c>5BNy*HNc}AEU&V{mRWLVpqhtCBoYbViYc&zy=bjmGj%%W0rJg1CQr98=Z*je0 zY);`iQ={QMsi%Xz4P8s+{XAc_S=KqJE0d4ayTE&eTCb%u?04i3>kp@jk{k@*&51cfglS9kBRGkl> zn*y&@gT{ocpaBWe}pPaqpRNfTyb8<#)wemx7YH*rqRYCJ2r)F(Y z(!uaJk!ojn@wEuCg@UDe_k&h!kaFRL^)*N_R?*X}dJqYA{cfR`_2V@PRh|)WnC6@EcIoq4_RvALSDV% zZ09@pooBuI?vg>=$G0$-i&-DG2k#5DmwBVnags~YV^&`o`_d+|mX-dK=NDMs9Jswg z^&i&THDMCZk0zc49f-x~FH(0Jamg^AchsTUXG0yob!9%^?Rz0!ci;BTO#5ZH4_!NA z!{i;r>8w@XvGxpL{em;FXR~XpeOD8P5nr)SIS74a^fzg|oEo&JiD9B4PSM9SZ7nel zpVenZ?{sOo$b>GWud>Kl#!-^sQSJ&utgnx`N|f2A-=211{nBk~lWbjn$DGuZv@AYwOLs7oHq+ z0Bu96!Jc>l97LzD7GRL|0N?Q4Z@_q8bDUGaev>(tuiz*qavo#ITaN`_j|G?e8~y*7 zFZld;yznZ(#1qMRS907_!Nk+}%yh6?HTCKA04SMB&Kb=A;B3ZWHW*YM06yZQ&=0Vw znVSE*=YxOegH7jij`P9yX#cy@!=PXR=dgfds^h(d@!tjQJ+DP@CV2mMS;FVOXWaRj zv;_Q$?*B#jkS@!?-^<}*(Awjl5UFm6dniOAjqn8iO?|~AeE;zJcU&uXu3_xgGH&Ml z*P*wk2g66}&_2+YAr}1nqw6=u^ZjYpG=Yyda$XylBOBP(26&QCCs23uhWIwppVT{$ zo`ct|Wvtfl8r;K^tKb+`GN#Memt4eVGzB{u|4>iT)N>Ela}RS24(X&l%sYH0M(kuP zo2fO3vb|=;V+Yr*8O*;E%)b*3Vh8-g4vxjYcX9r3Pg8gCxn1xpdQ`@kuQB+M7&zZL z7J3b2!Bf2$V@|^zT&vfGx|V(LBXAJw={G<OvuIBJ=7Ie>=wpDNfjv6)F>D&k zHcmUjwM54g)7QZ7(c`eUbv{QJ$57u89jM2Fy%4#V=UWG4AB012Fs*P-2l)H}j^!Zd z!#+Md%5n4E_4EZjjWyu5!;BH!;FcrwUpUJ9_z{kFtvJrLf)}Aq!g?b;4P(pT5sKh1 z1|8?Vw|^l#%2P);w8JOW~a4jp;C((NWPlk%#$KszUXwN>bJIXo{)}iv3 zspIH#glpZ#{NQs_4sahG;XcK;VHn><>ydNSVUCyc%A$9}EI6GZ^gB7k@x84l19}hq z6mw%od5vRZyZPtB_po1m9#WEyu>E6<(_xMsAINR?jbuA7yG^_x`f=P7?f(ET^sxOA zk1%hJT`y0Qw}oB_Xi7>3!S|edoH+p}!)NrEsr)ydv(#-wx&-fs$a?!VqW?G#P6ho) z%6@Rl9QcqX@L7+5-NbqJ!%2RDpXn#EP3j%~2mTw4x6QMmUwq#0{0$}_3C@i1bE$X_ zz6Jh7F9mU;-nIHas6&yD(feF4!@L^y`AXn4>d%w60aLyX4+FQOSB*XE^wcSO2L9s< zYEk~;-<;DBxe>f}sC)6eqHtP2`cK&VLeEC~>(so5_ar_Nk->rYlBconrT)J5r?X~7 ze;sk1nw9LWfnSg}QJdG;YKr~#YD{dn8BE`7su z)7m}#_1ng%!QtAh1DoH)_MW6Jhijkx0O!n@Skt5TkekKvs(V{jBf8Kp3fubP0D-e`}`jL zNZx1O4y0e_(?9ek#pkHv;8E_=Eq-olM{Y^)O1G=$Hl{X6I48 z-WoZK#n+)0Nxm;(8NAtCYAv4#^_Kc@=1k+e_-yFu=Y3H5Z?ALU8Rhh%%p?1A#yWY= zI0u=3I~mg&J^ndtjH=ns7Gex9m@89GkhunoqcmGvLL(f$#b~F>fd9nc#NdQRF+a z6Xej)$DYb-p6AW-n0mP|?p()`pAb`{JIg8wHL8w*yp+C)dZL!Lh5N>y4X#Cc?x+7L zcv0BXTCe()zjI7|f|k{uriCZ-{^uM^f8z90;C$}%9)~l$m2vIm_c?~!d7XQ`egnKQ zx-|QSG>s)5Z)W`W!ZS|ehng&}i^rlbMqUj(;}rV@@ZJ%9X^6M`vOjn~_fvOT@V3;4 zQs2+Aq41-h2R=iuQhiFy6=p3#Gxl$IjU94c#{2eN^jh#8;%PY#ub&=~DgEFTQ_0Pt zYqO_HWJJgj+5=v{kjOxJ1-1!J&%7JV0Kci9x?HaLI(albSPO1tKj0kkj2>w6PioIR zCiTqr0Ze`&jDy!UaR~QZqq;!2I%r5sbL#7&kG}kly#%vg`~Un;(JH>f=k(eWt7U%3w&sR9B>nls zvITqOLV^ZJZbV-^y&v=*th5G+nl<;QuYc26y+F9Oe`dSt{lKa2*P1r#knCrtFRGlq z`RI5*n{UiNi^t%z@nVpFQwykvYToa{|7z* z>c_;u>Yel=jrR;(p`Rmj4qT`=M%+^`&AL9uiSK*t9)lh~dhqE9+16K&h~T?op9gyZ zdTiFR*{e`oYffE133*R_`sK`>51zmN94Y%bKdwpHF1Xq*YWG>M%H;OoukHzaoZ72+ zpTqHi544smdu!kby^p-#T*s`JjIp+6Ud>!S^(Q%C`>0Q*Zv2J#%*#xwaRK6g&!-tn2{Gm+;(v+F<4Abhj*kuu+7 zoo=L$xhFn*uFogp9=LR45xoVhQH`#5o#dG2^Ybg#mp43KIeqx(WY#U>FuiDt-weHJ z%V+U?N#i-WjpxdZ#0nqbHO;ZuS5PglIVPW%_NS7AXnUA*D{wt#TQ9lZu|Mu}{gv%m zoY;eP;&D9(k8*B9LtZVf z8_!_kvE0Xv*NEF^5-SjASpRHHUb2Z=>FUGeb&0#-0IKc-U*IF4SDLs%+!F0V?|^Aw zrjaeg<@mJW!EU{PeFO6H=o7ej54qMDI0gT}7k7apb`hKJ1fMk%$IvgJca;1-zJXn~ zgJ-sZ;kJ?!-^#u>gFEOqKVTF4+QjxYf)h9LxedhM_{x!^&W(XB-)KZ@pr?ET$G8&R z{Bm;Jc;Fwa2d^w4ZeI*ELR50bT+Z(5?!M zHI40j11_ipKUNZJO$Gye#%p*0JYCK?eFkP3!#2GP3(6Ecx@-gy8|2tFEnZ=IGKKu*X&~3JNORs01$jm%1|eSSGLA!RvhY=a3rHLTcX7^Pws9El3eIB$ z+`^^$g^1M;GbgQ|kRuE@JbwThf@^r~Dly6t_yu@@xrgHzzx4e>T&vJ)p`bk)i-Cu@ zx8O41M{)|`7D}k~D3H4V=d0?g^`APdX z9^~E#ztgJJdbDvr!wq!ecnZNz^mE9%4Qx)`M_xD2NiGI{WD49zo_qwH%R!H?jkyT- zLBEKcX{>YTLb7f6@B!AK)ZKiPdj#wTmmt?* zeM$Wc@LEKS67(7N7i_#-Pg*bz_+BiV`@KC5^m`EN^M1103!WDT!DJuuxm@CKd>IP% zpbt5fXB2oSieIhRy7F|MjRWBWuHm_uk5A$Stm|kOe4eGPbzgz+RSS{&8QW;jv+hB3 zAYgfWKiD_H{fVFQGr(5==6h(v3ODoK+dfCZNnBGgRNWisRDKP%t%5W8KQtFV_qmCV z-+2`=w+%4`>D?%Q3 z7aYN7Jj)01-f!R~+F2Jv&bv39HGL=bd-VL`zLns_rk+99;xks=M`J5G8$Krv*DJ$* zIQ9~XfbsR<{gE#)j^SIK6gGOM)4Wx06$WVw&+4)kz0=Q z4CB7&67YZajqqNDaBL~epKIwwGC)1jVeVnM0q}f^S|xZXxT}h%!SrVw<=*7k-GRB7 z&fJ^e{dbJHe3bQz&)-eYU;Inu#ylop^InMeLhb^NzDvx^ym~+{P2wzNRpCwdj=KpfY~Sm|ep4d4!mQd7O0_ zb7mF#BeY5OE!1<=9vhBr={d$G_9_g0JnYXQPZ8z#?1NHz4%-I9m%q$-q7{-0P#+bk zX59C{y&V?cbFU4Q?~~`GZ|g|zM|_XeHS6X#L~q>sIQ z4N_lM^Mfvv|J9ostJz0G4XU+M_MS}W1g82Aaq&~&)73#A;b-jwXJ2S*Vr#Bo`{4P! zEqwpOfOkt~qvd$Q_!AtDMxri_&rY|#l{&Aka29_6FXwR&feF2)>Pz&#a{jwEs28yx zOT`rHz~Do8-##%lE4&Ao_p2G7|FBk^?>q?HfL=C*pMdMZ@a5;T-3N$W@t3i_Onh%| zzpO8bm9yZCz6zX*Ua-d0)~!XlaJ;`1v%=SLy!Kkj`<UY+>=L%lc#Y^z2FSdgve3JX~@}>6sf_2&j9OtOnP;xJ<=Pp?O`=KVC;{$ zCe`pPZ~$@_Wfz+_<64l5w1zC!LhaXB#{2*=_1}Vrj2w@jE8B&J3GSx+q~PUI{3iI7 zx*fS6dq!AiX5T$EzKLVRwPJg*HJFNevV>*erxC#)M?F~KX09b372*r~QiubZz6%~- zo^#C#*F)EJ#_*=V%h?x1K1D9zN8d|1y6jH_r>f_r+w%Oy4EEO46C?XZ@WV{F8ji&= z$bJB<*HtVgHk03y4}mAB@8@| z6mz%sg0RPf{TbAq$g9YYsVTCaNi9iHDdW>FaA#_@^vTh?#NI7x8^oT4o581GY+tW= zk7KzO9E%1k^`XGkc>LymjUx$6heNdK%xo6E{(Vg&3D|x>`?h3BpGq(8z z>kZt7UNCY!_C8V9r3T)4Q2a-@GIVUeEQwyoFd@9jebB`$3tfNKa>NM#m-B zXun%u%b3S=oM*1S)HMfAAYS4b@dD43E8&~zja$5%=MMd%d{$&97z-IosL3Vn8%;#AUf>dW`Vko%zh41AlG5YW1e_*47gH?9$`Q_(9M9wpyN#Yl41H z4XIjFHI-3xd5L|)I+xy&wX~nytLrNF{wh7NjGwIacU@;a?d>|r+V{6GhV~0DXn%}2 zl>AMUxa4-8ksUcd^sSy}=z(}V9>?30ykw9uGqD9Z%baO#@p^3Qs*9%TrN+;A<7{%1 zQ^gm-n?3E=esBUc0C&@)eQwCH=1$lRz6d=7GE;UE+w34F-T~feCRetD=kj*&##V6d zW-!PWVwuh0^38m1Ggy5S@qJSqYp$NW5j=v1yu*6-x0aY?EiwOEFtYyi*0Zk!6Vgxq zz2)T1m&Gw}(^znS{bKf4$9Bk_zo8%CJYuG~e18sjdM5Z{I+zu#Kemea>RT|zG=5Jd zk2n=BfS;Sc=2$AhM$`k`Jee^mC!Q(?n~c7`v6a71{fxeUW5D)fiSIuL2aIP7=^5C6 zGWcW)xyP^h{5RwntH1{CqncQ22JxFeGr_L(14I{)I)5hTHyg}8hnO(@mJi537hiyG zHE<7e!AbM@{CtkLmTOQ8{;1{H-~yH`04IjNfay;z0!vx<@I9F3d(LwS+omsKH+&L1 z*AqXA{g*M;%ee+{B-Bml4^Vj#o(k#IQ>@3Auhu>RtB4KJ2b>dnF_sO*v;Xfs4rNpJaUoo_=S5`QKShOp2EP`F%g1Iv=lw@#Ol)P_NNXPG$wiw47^(XG3rN z2?l--ex*j?@r@kUcJivtj8`*r0zBWone%G~FEtatZRckj*L^G3WDCbdFUgTx_&zlV zRa>~8TN#I~a3<(SuGz-9ZDTv?N}?RccH-jgT#IJrBwiHd&73pyFJ%W~LS4#LK`)R# zaTjw3ZA#3V6?m#k>~#_2Jn4M_H&8KU4`Zx9VT|$J!#xq>vwInXyGF}JcJVA0Uo`_d^ z-yVQ_EcQlduU+uPd1Q9QuRas;7e5 z05Ci?6l#JB7SlU1mzso$VCbh0GdASOXTT2@kcS8Jrp_0`o5M7ZF9#r3h>l>vA;t)N ze(NE)2K*Za(C5KiJvcjmKwBJF=MNXxAK*L=FpuFGM;!!zH1L=FXFw^!L9!T3(@z%p1Jxr+T-1Ar0?U|1)j}6H|PiCedB#$iM8#iSiA_V z^ek9t0pBGjEccL50B)wXr1DWXib>*ko>NPBom{H>vEOCDv}h`(+A|mJ2RUPVS7zN7 zbRK!X1EYOS9`^6>1Pkm{$@3IUT=!R=h3otb*!@1vW1{>!&mUrau~uPfz$G=6JpZbQ z`%faq{TJuc60o59_44~UAMl-h-Snt59%74u3S&R|626>aTdw9;1m#BIP{^V-L@&%7w z?~ZUC#fKEKN548YfXI!{^Pu$FNyn)H0c`xF6qE{!yDyJVD6wFv3AECi1C3FmBB>fPBj7cw)gY)e6z1%Y!Y~L1zJ(YT)&pA4k1sbKXzU>c?91JIid84 z+&5b}#s)C(BsoBN0DQ9t^WC2X3|KPA{IFP9T&SOESOerBtyl5hvS&)s&(+;<&PA+4 z1>kS4S!JCZ4c7|Xtv;w^Q|Paf@=oCD>~)zqCg?)kwtXhmxmtUq$Evjzu4jdR5sx!Z z)`huKa4Wg9S2>Qa*)PXq|EwQ%J}LE_Ly7AZKi66Ff#!zuj13E1lf7N^wUReTPge^7 z5Aa;j?NsjMJokWi|E6Ar^MX?>Z6H^dCTGI+1GAaS%PAyZwus!?V6GS3jQRlc`D!ZU zTg32j4_EXTVt?yctUt;h0G7QDe4j%uRm|Gpdtji6U_|n_`kzL?e+9oLui73A3&s;O z6_uI~hBL_j0spX%!p-2OllW|V=EEP@K6-`X-Doo&;yT?3o^RuP8BfRBTwrXO*dp+e zjqjqJ=pX7`oR{(}@;vq(O=w}f_HkX>fv-4E^#fU#sncODT}IyZl)!sf|0I_8yv1_) zhxtBShx%pfa1!AOs$L5E2kW3bFMULv=hjK7DG-ZWFJr!2t%P}9Yf5rH04K7og168n zCyLj_$$b9y@Vfq+@t!ch=6eeng9@-Ge2CjpTOq!6pX#ooU`q89`h1GV%I&A#%Ix|q`%EMpxcNaFXLvf8fyjZ32Z+e=cemV#ebQz zJ=k|S`~F&duMUIH+`_iuAN4{?U#h1R$C3%R!5Hh!m+@2eD}fu6!%~}XZC|8|^GMDh zTub|Qs@aeyk#8uu9^Pw`b#ri%kMjE~=6XU{3yMmKJNmoUgPEW5*=}EEo~u7)J2x@JC%G~D;K7?WjfE3O zSL#pA3OMpCbaQCs%y*l=kO!CB_ow1))<3vsV=$jra>drK8c$iH>a#<9-_%T;c3#j8 zxNmDx)qsli?c-JWirhM!H0Nh56!+mHMv@D!dxPigUpQxCFFADk2Kp?j8fo6b_{KHa zyail*BXP)4*Ll_iVjQ^$pRv(_a_ht}Gl?T(@DOMdT)*`ZHx|vj+xQ#q171Aq3C8B< z?)!(>ZHY0e+Sbqmy=tU7=0jjbbii*|e@#CCa+xLc0x-{MeYLgPMOW_Sd;7r=d%;pM zVvgN$tP~xw3w(w4`f2O_$?eVu&y|y#y(7vtqQu49!M#!9qOHW#o5Ac&;1crs1MvWu zq2^yLIlA&fddy8&OB}SG7>3{L@Bny&ob-rQ#N}w$TfnJv8i?UTzCZumdbWuN{<+_y zk6z4ke-T)xj<|jSSP*Z0YVQ+TW)la|2e3mme}Budf5WkY(T9J{xqMBW^fh_TO14qS z{wMSLS77{!;D#@Wy*?qvFXucy1t)z5R{j)hR?fD|!B(Gvg+B+URFJFvigTO-2APVs z;2ZGMx8S5{;Mpqh!F0|g^aD(Pat3i5zJNVv@co(bpSlIJz@oDmhtMA&GFab$8n90d z=RcQmvY%ls@!)*U=R0tFEivE%;=x+>TL&&tA3$BejD>9Pd(L$c=ZZG~^#Fx8Eae(6 zWn0ULGnaA=)JH6f^8>3dHz(h~99hA5(Qo0}m0TM*fCjmNRpj|svEN4KQ6tBfZ6%k*%04G#X+H z;k-6nuYwq3xR-N-6QFlt@nieruZ#7Y#`6De`fLnBGsAcE)J&;on-{+d36#L?MTfIVFx7IjbFPx(mp$$$AJe*6Oya3#e zHa`2tpdqlAV%v}-oS*#`^h!`WAa0?@LOXhoyn_Z|9r??L-3FhDs6RN&_0f-ky!}Qw z2I`8?G7hHA4FTbgIoh@D&7iSkk%@czpQ2fjY5=hpkJhYBMaIe1plyKxXX<0 zhd5r>v7>C0x`j2?M}Uc14zcYvI2H2wPw}~OF#cI$BRGa@&@@~?{l-wah=Yukx(Rp^ z_<@vn;4{z?)NobM|V??Uh(? zE6-46~o!~R}IO7P`e4O_=Z=bcrkMRry|BA`7 zKc$}rS^|6USdV5;i$wBQ`OgLpyZ%~qcKysjs-az6NE#(4G?p$9kj zZ?DUgcfg%r1|Fn1k#p@MufqB8+n&C1CSrX*)0hl~JkGX01=}6-JAo@HI>dAQ$?)uS z-10NPC}klxTJUS?=F!5d8Srn9%echjmkUUFhi5do2K94l&XYSk4vfqBK@*X%%>UUh z`3d#><@Y;oL4TjJpPWB_AWD{v73QM7n$`KsrN~{GYqloEo+QRrWkVUCq0EPa#zkDCeT>nC+$+Q_ zInx+xYI$<*632(wPy8=$WlZROrnjqOp4aUd&vZBr>WV6+9KSyQS>n4!=E!<^8)8dx zB4Q~uDf%)*1`|`=&s?l0--Et0k$jXGOAMR*kvS_c+I(YS@KQ54b6>!aId>7;7Jy0C z5H~M?7a$(jN2=*N;$`Zy^;8f;we<)&LUjPf{l?1nDu{bFy-d!HytH}R=m_xsDa70N z1}_f%oU9p*dt!sl%onTaR~L}gf#2_uLmI;MKtr$IK9RrG-rJ+4YNWgkd86Nf$$Jw| zqGzynCekHbKmB9X-o$!|HRas+%mti(H`bqRL7!v|jhu-39Pbh9HS}Y(&x&3Q_N5ea z>iwW^NZlLo4;O+RdWB;uni{abI6VDN;rmTLBmdVu-2eKesC}{?!TO}MWAHNE|LPX3 zYe?O$4wrj&67%drw)G;|{(bZq?cih{WB+&h8dw;ttG`2H5033ybppIb&9BF*{=a4g zp9i~HC($&P#$YC|d+vmQ|BC+z zPW(umN{*IVfy{5o9ghH4btk_{j@vqb`t!hYOTc8`Ti44x`H*>2sxBWsVI^EZlh;a} zGyDYl=lW~a`dc@_wOs-Kk`*|P_%%KcK7?yj{xZK?yk_zQfzwcT;d#}cp#M0StXdxp zu@>`(oVoMVT(SK`^vhKXAZD{aX!&)_;a(iyXmYrxhdi!%YyD>G-T+_Yt6*+9c^$tm z=Um7cr=AKn1UHI#b5^@e#_mlp=QGUf;c5fe??}dP8^;ncNAG)l_6Qgf{3(VOuj-j* zzTX}xj$f$5z<*?nSeWsw_Fm$>55cb7M{4n-yyoYu9Z-*9PfL45#(Tm3mV0h-@J+Mk zLJv24yk>tI^zUlk^M|Xm4?TF|eQWMPOCRAFdUM?tI48u$9QO$Re$w#?_o`fjnjg6z zz2zF;g%d%8omQoOAXzc5_-Xlb>f1=8NZS37@%0zCZBm)?rrkwkD1k2U8pH?umJ6C!7`kr)QuUP%$p6`sxJ42+A6yNciBnf8@<{=_&Jsy0&1TC|#+#!DVU z$Tj%PFS?WX>N@H|yKziAiKBiRVgvOBO=F3N-l3luTKmkDaQuy}<_M@=iyF7^>_xZW zc%=POUO_JUq`2Oo;4S%bF#e@HlNJzj5Qpf`<#R9h(!f7hTOj|Q`5YQcjzf+kF={O@ zI>dT%GCU8h*)1M#Zo>Q=IlaZi#7_o2Z1E-J0`Xio=NKCXZW!1KKG_GBpg(){K4NgR z(BvUg>dlRs_oNTNb$i$jdDPo?gHdL>@9)a*C+P$5&Njv$ z95=CvIC&!&mVST*>ihMLTTk4$mTR+yye$}W;cC9Ons^0G`Ww`YPZXb`^`F~74g}0P znI3n~*MrGJ&40~`g~aI#iACuHkoz6SUki4c2c{5Lw^cGe zmBjm%V7|%BgGr3pL~!kw%#Deh(|A5B{vQoq_!z7-3e5KjG1w=}uhG0$4we}U-uH7~ z^1Vrn!4!Vv6Q&ZUv7ck#5Q9~L_o^7XDy{+ggG;9K+36h9bnwOu@XAcKF_YMheuX#8 z0>kiAKAUmDFMwW#v1N0>V$?4zn9H@9&zNyum!fUJHz4D|1#GJ}e%@In3mBh;Y=1Gw zxS0GZK7r$xa4p~f((y=Gw**|el+e^Rp=z>+H&_hpQ~+5`JG)^lx^ zvfV`-%QD7V&j5Nub^`x5Y>Us6nzOdE-K|_J^ZHxBd7HtCTloBDFyJP(v5B#OHyW^o z>lpe=7QV8Dxe@TbT7jaeTX}B_`+;M^W3X_}cCeaS0yG8VnmNuW=idxYrY>O2PR4{D zmLKh8yVMHIrI*EeY6K4L=Dfi8VE5)Ag3wnS@!T#;k zz{KEV#Qx}D#+t+58^`$O)uRLD%d9Qf&+F94bi;381oZ{@8di0c4~TJ1s57_)Pl6Ko zf(G*bBl-I_YYM>s)F;RZWR&BL*vH&G_!#evl%!B!pkHFbBGF+g z^7R!d8HL`ygc^o-&>gf_?<_xn7O9ZDe!X=@t=u2zC-6s*? z{OGqpt;0F=Jf-&EHNNl$j;|r)PQ~wKXHXLnr4|7EpVE(gqkYozR4yWQKIa6McP+Gk zs-6qJpT19=7Q6$>hN8blQ_$8f=&j{Dd=rd4%Z}3zR4~tRsL@2+X=gJ+d z+5dt21@mNo%Jb!q*4TrM&~u3~^&GS=+Pr% za@ypi#Z@8SE&k`(@flbcZJF9Sb!KYL{GJ**>*3XHTc59%PW^Y;LY^OBXY=)X7Zkh& zMnW@J{xZ1sUjbiPZ=HIoIx?Pja04Y5_}mq%fkE@tv-=v)#M$7p6WBl4(t3kL@Vwe$ zHGS&Y^h~s_&sg7hJvo|mS=MI8i~UQR%~XOCX7to?+=Eb83V7B@A6 zP5%+_pm|F*?P6VX)7EFm!yBvA9N-xa&ms>|IES&ALd?PSO{)r6)A5Q725&#ca~G^F zhV^|vXS|_Cq%bw;+Ve9Q(?fcV%A1t8nv+}E$K%IY|IGKp$0RZrPYGIi=bt{n=GD!y%l$Yexf9eng1gAGCQk=L zZU!fg2>C_(6P8>bbkyc05~JqB!FOeRwzKn=>+uLnrCV&Qn)e`hMWO#OsZJ4&&I?7Y=|NP~&pu6gmvZ+IWP1s4KemGK~RuNMBKGv~^EW_;v*r~bp5OfhWUs~!_|o_#{yx&Dpi zP5cc;HK%9YWm`LbqF}X;iGjxx6B7@c8x-5C_m6w}FauH<@s_vn$g(%N7(w_pLZ zyxA8L|4#~<*t#_PX9hj5I&yX6nIE#vX#t<9s}`qKohX+8u2>81_Zs{}jEb+~fRIbm zjtb#kWa90t9g0(0eu^+8PGqmVx|0zm>vwdpL_6bH34!R zXbQM@%FfU$fpw=9t_^-f9f9|)_l!ADw`p$I-dnL{Y9r9DljkkJ-`WN^0Pv-~x|~ZT zqqwioIF!$FY`NDiW-QMSIsVKK;UsQwjbq>F1k~}{vqn9Db+6V4)m#ydO}_wj?rIzo zqa4GN@B^p9CEUdRK4mO!1-rnD#63*=vcH!Zk3Mi8XM=Oz3;v_(D)eEnHa%e&7<>vi z=T?rJoV@yFYv~gv1?hBqI=U%jmacE!+ z+QEA~5$1bd4d)4_PJi2R;4{ylgthY`t=G>2atA5-a(xLxILE@(aNWvhHT|3CrX_&?8LZ zcMm?FpeH8ZWn9yqcl+k<Lv$hL50Qhlz?To|Z-F^P)x1%o8 zAD@}VX-$v#JO%%gr-?s%p9x%q&v;`s^A_e5Quc>uj9SB*E6Dp3d#J_q`J%6P+FFkJ zUXF)cgStBF4oVw*CZjt$jpsI;zj{mYfAR}HyNMZYhDRVDWNoMCRh%d@-WtV2#T=g2PJ zqo(>T@~A_}tK$1#@K!TiN;9})JD6cR+t~(Y-3m6^0&d+xJhBPw-9+pjJpYTw(+|E6 zedga<2kxK;;N`2qk&PT@BhPK>$Okln1saLZ!J7;5vx}@C&jw!Yg}(hGbIOas4~vN9 z(ZF9-$M+X-UCEJ8oKK8T?!N$?eU;jK{P-WFFWdiz z2~6`PIC27Ue+9Uvg71IAc1D4xNAdb7u+L~P!Y6#^6aM~`^Bcn)8qc{;Hy|}Yvyuo=Cg0OfJxsmw%@T2dIvleY6I%t0Q;Y`nB!fS;{!nGymlPmNAxS0Kos{Cp9pB%b5qunKR27FY!Ei{VN;d+>1JZtR?6! zx}gbx2goU0#h6n+07sDd;YzM?@D->UxsvU!T+VTV|NAfDKI53Kr2Zgj zJ#i{pezf~lBe%h2fc-B)vpxmdONc<)a;%z^Tw=nc;+C^vf*VPT z1w*aLR!x%zAq=OjOs)&P&i(o$93$9r*%YeJ=e+%Kxq5f*J?DJS_nhzhywCGKubO}I z1=J!~U$C2J*gpoQLiE5Y|kjsu=l?%sNTeF5|vtR5pD zae;hAB{c!8A+5W?|0(OIsgokFV17Z}wj8WJ0$KD_da|W6;x+QSU_tvi6eeAhct-!f zUbvp9Wp}Mh^2p%ybU$Oe?_29gf z#8khkcO}Ni%GpJnt`DHtOstY`1DC8sSBy4Uov*zm60875_1!vW{cPl|_2C(Ko?{2Y zTHh?z)c-!c;CQh%g6#&U*zeom55_@#U1|dEu!Glbat>&Q?=PUWUFA6ODuq)+8=YN8 ztc@1Fin?396|KRu4~E>Zc?o|@u3PUs`EE5CdLb6NxVGpJ97Eq<%E2qV5WWri5ZQl2 zUe&lp-a-99>t(iCORR&2-TohX1IT&nt6<%pTtWE*#1X^>=4QmS=Jg$GHIzvYk~a7U z@UVX~=j8kgza!@0c5^apTgh?4FUU2hZ?Fb2>G!!pyanbx4cweY(w07V7p?SG^9ge>OtcqShE+)~$d|=!bJyN>v z=Grq~&Be$e87GY#^V~Tuayvb*29DJu+CHPXGGlqpbtA7e;M=F+u*6pQ@)@s}Ed^7c zsVyu4HxQ2}-uivS!5fID(fsSz+VX>ocG>yLy{E z99$)fOZvo_QR-6gR{Zci5Jxk?zL^^b@=Rtct1Q4 z5^ub<#_tjL%jfA~w^$>W4(`9i*i0JdhnBv1Kl|SRUh0PX>w}B`SKV*SCB3}W2{;cN zYjx=I_tq`wr68UctDE1jkB43c*1C)J%dSODgthC7U z0%wbV<;5MR;;0;FU@7a>^;lD9E$1x9s)wERcQRiC$!25Zjsol_SepL+-QApgG_-v0JuNPO$+;HAG-w;s9zHPm{9&tRWD(#h$!kez{qD$v8Ih?)hHEWte$_Pvs04%yZP+&)kxEtM=Q# zp&jOw!1V*>0Km8t%;{@lKzor!e}$oY*$#Z3@8$2Q$X#?S>TduC{S5l`>)?BOo$7gK z-?pk9jKh1JH@Sk`Ua>p#o*IAqg_!@6w{Ko94rY8lV!Hvy%bpqFaeU(D78s{}eh2S5 zdaJ$i34Z6@yg!D=9Q_eeEqLHDj;R)|&spvh#?X9=_+8xVH84k@S3seQ`|=?${}Hao zX8N2SzLRT;=idU?;bHqg=mS8njwX6*)YAh255Q&Q0GiM9*$Ve#-wlp+ChlW-di4zL zYsB)A|BzcZ_cMKteZR~*^T+=6>UqkRGGFlAv*)UOzP(<}37J=@9%GCvImddQ0Uz5# zj`ufsCT!t6`TcZ;b8fO8f%7}W@n&N#)xOVfeJ-!>c(5JwbL1!e_ju;8f1fY<2&i)? z{>8klFh9d_9rgL+bA`X3Rc8_2jA}U41(@&gyF*W)Hz4n&Uf;Zrc?Ih@a<5qf!2DtU zJFm=z=;K)N7WY`axytxng7cr_dS3~BjD8RL=X*cd_d^|wbp>g31ksPk8Y(qO=Gb|L zmw>fPV@=Bcq7KZwI_p>|eD-zX=V%fk`mMIM-;LW4KBjT?AKLCZ@LEU+~LUcEKrsh$j8d-@s1z z+qYcgoa}cGuKX15J9^|5mi)~5fPdSmm2Vv8e9yq)ivRKZ>pu-H`jHs^2e^|{V6X4N j1}DK7X!UoU084=T-@)r|&v)#jpLx;8x%7dFdN=+D0mneP literal 0 HcmV?d00001 diff --git a/widget.cpp b/widget.cpp new file mode 100644 index 0000000..4182a97 --- /dev/null +++ b/widget.cpp @@ -0,0 +1,1537 @@ +#include "widget.h" +#include "ui_widget.h" +#include "camera.h" +#include "QDebug" +#include +#include +#include +#include +#include "fcntl.h" +#include "unistd.h" + +#define parameter_file "./parameter" +#define log_file "./log" +#define sys_file "./sys_parameter" + +#define LONG_SEND 100 + +extern Camera* camera; +extern RGB_Camera* rgb_camera; +int file_encoder; +int file_delay; +int file_delay_rgb; +int file_valve; +int file_threshold; +int file_threshold_rgb; +string file_mroi; +string file_valid; + +int file_padding; + +modbus_t* plc; + +Widget::Widget(QWidget *parent) : + QWidget(parent), + ui(new Ui::Widget) +{ + ui->setupUi(this); + + /*--- set spinbox ---*/ + set_spinbox_range(); + + /*--- ui init ---*/ + set_ui(true); + + /*--- connect to plc, open power ---*/ + int s = connect_modbus(); + if(s == 0) + ui->lab_plc_isconnect->setStyleSheet("QLabel{background-color: rgb(0, 255, 0);}"); + + /*--- client socket to monitor ---*/ + connect_monitor(); + + /*--- server socket to guo ---*/ + server_to_lowermachine = new QTcpServer(); + server_to_lowermachine->listen(QHostAddress::Any, 13452); + //---------------------------- + + /*--- load parameter document ---*/ + load_parameter_doc(); + + /*--- load system parameter ---*/ + parameter = new Parameter(); + load_system_parameter(); + + /*--- camera init ---*/ + camera = new Camera(); + rgb_camera = new RGB_Camera(); + + /* thread init */ + send_thread = new SendThread(); +// save_thread = new SaveThread(); + + cout << " welcome dk ! " << endl; + int res = 0; + res = camera->init_camera(); + while(res != 0) + { + static int cnt_1 = 0; + cnt_1++; + if(cnt_1 == 5) + { + cout << "camera init failed for 5 times!" << endl; + break; + } + cout << "*** init camera error, error code: " << res << " ***" << endl; + cout << ">>> try to init camera again... >>>" << endl; + res = camera->init_camera(); + } + if(res == 0) + { + if(camera->init_calibration_load() == 0) + ui->lab_info->setText("校正已完成"); + ui->lab_spec_isconnect->setStyleSheet("QLabel{background-color:rgb(0, 255, 0);}"); + } + + res = rgb_camera->init_camera(); + while(res != 0) + { + static int cnt_2 = 0; + cnt_2++; + if(cnt_2 == 3) + { + cout << "camera init failed for 3 times!" << endl; + break; + } + cout << "*** init rgb_camera error, error code: " << res << " ***" << endl; + cout << ">>> try to init rgb_camera again... >>>" << endl; + res = rgb_camera->init_camera(); + } + if(res == 0) + ui->lab_rgb_isconnect->setStyleSheet("QLabel{background-color:rgb(0, 255, 0);}"); + +// time_log(1); + + cout << ">>> init camera successfully " << endl; + + connect_signal(); + + /* thread run */ + send_thread->start(); +// save_thread->start(); + /* everything seems to be ok ?*/ + cout << " hello dk ! " << endl; + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '6'; + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } +} + +Widget::~Widget() +{ +// time_log(0); + + modbus_close(plc); + modbus_free(plc); + + if( camera != nullptr ) + delete camera; + if( rgb_camera != nullptr ) + delete rgb_camera; + + if( server_to_lowermachine != nullptr ) + delete server_to_lowermachine; + if( lower_machine != nullptr ) + delete lower_machine; + if( up_machine != nullptr ) + delete up_machine; + if( send_thread != nullptr ) + delete send_thread; + if( save_thread != nullptr ) + delete save_thread; + if( ui != nullptr) + delete ui; + if( parameter != nullptr ) + delete parameter; +} + +void Widget::set_spinbox_range() +{ + ui->spinbox_explosure->setRange(0.0f, 2000.0f); + ui->spinbox_explosure->setDecimals(2); + ui->spinbox_encoder->setRange(0, 1000); + ui->spinbox_delaytime->setRange(0, 9999); + ui->spinbox_delaytime_rgb->setRange(0, 9999); + ui->spinbox_valve->setRange(0, 9999); + ui->spinbox_R->setRange(0, 500); + ui->spinbox_G->setRange(0, 500); + ui->spinbox_B->setRange(0, 500); + ui->spinBox_channel->setRange(1, 256); + ui->spinBox_channel->setWrapping(true); + ui->spinbox_threshold->setRange(1,16); + ui->spinbox_threshold->setWrapping(true); + ui->spinbox_threshold_rgb->setRange(1,16); + ui->spinbox_threshold_rgb->setWrapping(true); +} + +void Widget::set_ui(bool fullscreen) +{ + ui->tabWidget->findChildren().at(0)->hide(); + ui->tabWidget->setCurrentIndex(0); + if(fullscreen) + this->showFullScreen(); + ui->spinBox_channel->setValue(1); + ui->btn_stop->setEnabled(false); + ui->btn_save_disenable->setEnabled(false); + ui->btn_capture->setEnabled(false); + ui->btn_close_conveyor->setEnabled(false); + ui->btn_close_lamp->setEnabled(false); +} + +void Widget::connect_monitor() +{ + up_machine = new QTcpSocket(); + up_machine->connectToHost("192.168.11.4", 9001); + uint8_t cnt = 0; + while(!up_machine->waitForConnected(-1)) + { + if(cnt == 1) + { + delete up_machine; +// up_machine = nullptr; + return; + } + cout << ">>> trying to connect monitor again... >>>" << endl; + up_machine->connectToHost("192.168.10.4", 9001); + sleep(1); + cnt++; + } + + cout << ">>> connect to monitor successfully! >>> " << endl; + connect(up_machine, SIGNAL(readyRead()), this, SLOT(readfrom_up_machine())); + ui->lab_upmachine_isconnect_2->setStyleSheet("QLabel{background-color:rgb(0, 255, 0);}"); +} + +void Widget::load_parameter_doc() +{ + ifstream fin; + fin.open(parameter_file); + string str; + vector config; + while(getline(fin, str)) + config.push_back(str); + + /* 1.曝光时间 + * 2.分频系数 + * 3.延时时间 + * 4.rgb延时时间 + * 5.喷阀分频系数 + * 6.MROI + * 789.RGB + * 10.有效谱段 + * 11.threshold_for_model + * 12.threshold_rgb + * 13.padding + */ + file_explosure = atof(config[0].c_str()); + file_encoder = atoi(config[1].c_str()); + file_delay = atoi(config[2].c_str()); + file_delay_rgb = atoi(config[3].c_str()); + file_valve = atoi(config[4].c_str()); + file_mroi = config[5]; + R = atoi(config[6].c_str()); + G = atoi(config[7].c_str()); + B = atoi(config[8].c_str()); + file_valid = config[9]; + file_threshold = atoi(config[10].c_str()); + file_threshold_rgb = atoi(config[11].c_str()); + file_padding = atoi(config[12].c_str()); + + ui->lineEdit_MROI->setText(QString::fromStdString(file_mroi)); + ui->lineEdit_VALID->setText(QString::fromStdString(file_valid)); + + const char* s = file_mroi.c_str(); + char* p; + + p = strtok((char*)s, ","); + do + { + mroi.push_back(atoi(p)); + p = strtok(NULL, ","); + }while(p); + + s = file_valid.c_str(); + p = strtok((char*)s, ","); + do + { + valid.push_back(atoi(p)); + p = strtok(NULL, ","); + }while(p); + + ui->spinbox_explosure->setValue(file_explosure); + ui->spinbox_delaytime->setValue(file_delay); + ui->spinbox_delaytime_rgb->setValue(file_delay_rgb); + ui->spinbox_encoder->setValue(file_encoder); + ui->spinbox_valve->setValue(file_valve); + ui->spinbox_R->setValue(R); + ui->spinbox_G->setValue(G); + ui->spinbox_B->setValue(B); + ui->spinbox_threshold->setValue(file_threshold); + ui->spinbox_threshold_rgb->setValue(file_threshold_rgb); + ui->spinbox_padding->setValue(file_padding); +} + +void Widget::load_system_parameter() +{ + ifstream fin; + string str_tmp; + /*sys_file存储形式 + 1.光源时长 + 2.密码 + */ + fin.open(sys_file); + int index = 0; + while(getline(fin, str_tmp)){ + parameter->file_info[index] = str_tmp; + ++index; + } + fin.close(); + parameter->lamp_used_time = std::stol(parameter->file_info[0]); + parameter->current_time = QDateTime::currentDateTime(); + + cout << ">>> load system parameter successfully! >>> " << endl; +} + +void Widget::connect_signal() +{ + connect(ui->btn_goto_sort, &QPushButton::clicked, this, + [=]() + { + ui->tabWidget->setCurrentIndex(1); + } + ); + connect(ui->btn_3to0, &QPushButton::clicked, this, + [=](){ui->tabWidget->setCurrentIndex(0);} + ); + + connect(ui->btn_start, SIGNAL(clicked()), this, SLOT(On_btn_start_clicked())); + connect(ui->btn_stop, SIGNAL(clicked()), this, SLOT(On_btn_stop_clicked())); + connect(ui->btn_1to0, &QPushButton::clicked, this, + [=](){ui->tabWidget->setCurrentIndex(0);} + ); + connect(ui->btn_0to3, &QPushButton::clicked, this, + [=](){ui->tabWidget->setCurrentIndex(3);} + ); + + connect(ui->btn_black, SIGNAL(clicked()), this, SLOT(On_btn_black_clicked())); + connect(ui->btn_white, SIGNAL(clicked()), this, SLOT(On_btn_white_clicked())); + connect(ui->btn_1to2, &QPushButton::clicked, this, + [=](){ui->tabWidget->setCurrentIndex(4);} + ); + connect(ui->btn_2to1, &QPushButton::clicked, this, + [=](){ui->tabWidget->setCurrentIndex(1);} + ); + + connect(ui->btn_exit, &QPushButton::clicked, this, + [=]() + { + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '4'; + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } + if(lower_machine != nullptr) + lower_machine->close(); + sleep(1); + system("poweroff"); + } + ); + + connect(ui->btn_load_calibration, SIGNAL(clicked()), camera, SLOT(load_calibration())); + connect(ui->btn_capture, SIGNAL(clicked()), this, SLOT(On_btn_capture_clicked())); + + connect(camera, SIGNAL(send_data_to_ui(uint8_t*)), this, SLOT(get_data(uint8_t*))); + connect(rgb_camera, SIGNAL(send_rgbdata_to_ui(uint8_t*)), this, SLOT(get_rgb_data(uint8_t*))); + connect(send_thread, SIGNAL(send_mask(char*)), this, SLOT(get_mask(char*))); + connect(send_thread, SIGNAL(send_mask_rgb(char*)), this, SLOT(get_mask_rgb(char*))); + + connect(camera, &Camera::send_calibration_finished_message, this, + [=]() + { + cout << "fsdfsd" << endl; + QMessageBox::information(this, "提示", "load success!"); + ui->lab_info->setText("加载校正文件成功"); + } + ); + + connect(server_to_lowermachine, &QTcpServer::newConnection, this, + [=]() + { + cout << "new connection to lower machine!" << endl; + lower_machine = server_to_lowermachine->nextPendingConnection(); + ui->lab_lowermachine_isconnect->setStyleSheet("QLabel{background-color:rgb(0, 255, 0);}"); + connect(lower_machine, SIGNAL(readyRead()), this, SLOT(readfrom_lower_machine())); + } + ); + connect(send_thread, SIGNAL(send_valve_data(uint8_t*)), this, SLOT(get_valve_data(uint8_t*))); +// connect(send_thread, SIGNAL(send_to_up_machine(float*)), this, SLOT(get_send_to_up_machine(float*))); +// connect(up_machine, SIGNAL(readyRead()), this, SLOT(readfrom_up_machine())); + connect(ui->btn_send_single, SIGNAL(clicked()), this, SLOT(On_btn_sendsingle_clicked())); +// connect(ui->btn_autosend, SIGNAL(clicked()), this, SLOT(On_btn_autosend_clicked())); + connect(ui->btn_threshold_ok, SIGNAL(clicked()), this, SLOT(On_btn_threshold_clicked())); + //2022.8.8 +// connect(lower_machine, SIGNAL(readyRead()), this, SLOT(readfrom_lower_machine())); + +} + +void Widget::send_after_start() +{ + QString delay_time = QString::fromStdString((to_string(file_delay))); + if(delay_time.size() == 0) + return; +// QString delay_time_rgb = QString::fromStdString((to_string(file_delay_rgb))); +// if(delay_time_rgb.size() == 0) +// return; + QString divide_parameter = QString::fromStdString((to_string(file_encoder))); + if(divide_parameter.size() == 0) + return; + QString sv_parameter = QString::fromStdString((to_string(file_valve))); + if(sv_parameter.size() == 0) + return; + int len_delay = delay_time.size(); +// int len_delay_rgb = delay_time_rgb.size(); + int len_divide = divide_parameter.size(); + int len_sv = sv_parameter.size(); + QByteArray delay_byte = delay_time.toLatin1(); +// QByteArray delay_byte_rgb = delay_time_rgb.toLatin1(); + QByteArray divide_byte = divide_parameter.toLatin1(); + QByteArray sv_byte = sv_parameter.toLatin1(); + + uint8_t* delay_buf = new uint8_t[len_delay + 8]; + delay_buf[0] = 0xAA; + delay_buf[1] = 0x00; + delay_buf[2] = len_delay + 2; + delay_buf[3] = 's'; + delay_buf[4] = 'a'; + memcpy(delay_buf + 5, delay_byte.data(), len_delay); + delay_buf[len_delay + 5] = 0xFF; + delay_buf[len_delay + 6] = 0xFF; + delay_buf[len_delay + 7] = 0xBB; + if(lower_machine->isWritable()) + lower_machine->write((const char*)delay_buf, len_delay+8); + delete [] delay_buf; + +// uint8_t* delay_rgb_buf = new uint8_t[len_delay_rgb + 8]; +// delay_rgb_buf[0] = 0xAA; +// delay_rgb_buf[1] = 0x00; +// delay_rgb_buf[2] = len_delay_rgb + 2; +// delay_rgb_buf[3] = 's'; +// delay_rgb_buf[4] = 'b'; +// memcpy(delay_rgb_buf + 5, delay_byte_rgb.data(), len_delay_rgb); +// delay_rgb_buf[len_delay_rgb + 5] = 0xFF; +// delay_rgb_buf[len_delay_rgb + 6] = 0xFF; +// delay_rgb_buf[len_delay_rgb + 7] = 0xBB; +// if(lower_machine->isWritable()) +// lower_machine->write((const char*)delay_rgb_buf, len_delay_rgb+8); +// delete [] delay_rgb_buf; + + uint8_t* divide_buf = new uint8_t[len_divide + 8]; + divide_buf[0] = 0xAA; + divide_buf[1] = 0x00; + divide_buf[2] = len_divide + 2; + divide_buf[3] = 's'; + divide_buf[4] = 'c'; + memcpy(divide_buf + 5, divide_byte.data(), len_divide); + divide_buf[len_divide + 5] = 0xFF; + divide_buf[len_divide + 6] = 0xFF; + divide_buf[len_divide + 7] = 0xBB; + if(lower_machine->isWritable()) + lower_machine->write((const char*)divide_buf, len_divide+8); + delete [] divide_buf; + + uint8_t* valve_divide_buf = new uint8_t[len_sv + 8]; + valve_divide_buf[0] = 0xAA; + valve_divide_buf[1] = 0x00; + valve_divide_buf[2] = len_sv + 2; + valve_divide_buf[3] = 's'; + valve_divide_buf[4] = 'v'; + memcpy(valve_divide_buf + 5, sv_byte.data(), len_sv); + valve_divide_buf[len_sv + 5] = 0xFF; + valve_divide_buf[len_sv + 6] = 0xFF; + valve_divide_buf[len_sv + 7] = 0xBB; + if(lower_machine->isWritable()) + lower_machine->write((const char*)valve_divide_buf, 12); + delete [] valve_divide_buf; + + uint8_t start_command[9] = {0}; + start_command[0] = 0xAA; + start_command[1] = 0x00; + start_command[2] = 0x03; + start_command[3] = 's'; + start_command[4] = 't'; + start_command[5] = 0xFF; + start_command[6] = 0xFF; + start_command[7] = 0xFF; + start_command[8] = 0xBB; + if(lower_machine != nullptr && lower_machine->isWritable()) + lower_machine->write((const char*)start_command, 9); +} + +void Widget::On_btn_start_clicked() +{ + ui->btn_stop->setEnabled(true); + ui->btn_start->setEnabled(false); + ui->btn_black->setEnabled(false); + ui->btn_rgb_black->setEnabled(false); + ui->btn_white->setEnabled(false); + ui->btn_rgb_white->setEnabled(false); + + qApp->processEvents(); + + //设置触发模式为 外触发,线路Line0,上升沿触发 + PvResult lResult; + lResult = camera->parameter_array->SetEnumValue("TriggerMode", "On"); + if ( !lResult.IsOK() ) + { + cout << "*** Set Internal TriggerMode Failed! *** " << endl; + return; + } + lResult = camera->parameter_array->SetEnumValue("TriggerSource", "Line0"); + if ( !lResult.IsOK() ) + { + cout << "*** Set Internal TriggerSource Failed! *** " << endl; + return; + } + + lResult = rgb_camera->parameter_array->SetEnumValue("LineTriggerMode", "On"); + if(!lResult.IsOK()){ + cout << "set triggermode failed" << endl; + return; + } + + lResult = rgb_camera->parameter_array->SetEnumValue("LineTriggerSource", "Line2"); + if(!lResult.IsOK()){ + cout << "set triggersource failed" << endl; + return; + } + + //plc + plc_auto_start(); + + /*记录时长开始*/ + parameter->lamp_timer.start(); + + camera->register_callback_acquisition(); + + camera->start_acquisition(); + + rgb_camera->start_acquisition(); + + ui->lab_info->setText("开始"); + cout << ">>> start acquisition >>>" << endl; + ui->btn_1to2->setEnabled(false); + //send to lower_machine + if(lower_machine != nullptr && lower_machine->isWritable()) + send_after_start(); + is_running = true; + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '1'; + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } +// camera->get_camera_parameters(); +} + +void Widget::On_btn_stop_clicked() +{ + camera->stop_acquisition(); + rgb_camera->stop_acquisition(); + + uint8_t stop_command[9] = {0}; + stop_command[0] = 0xAA; + stop_command[1] = 0x00; + stop_command[2] = 0x03; + stop_command[3] = 's'; + stop_command[4] = 'p'; + stop_command[5] = 0xFF; + stop_command[6] = 0xFF; + stop_command[7] = 0xFF; + stop_command[8] = 0xBB; + if(lower_machine != nullptr && lower_machine->isWritable()) + { + lower_machine->write((const char*)stop_command, 9); + lower_machine->flush(); + } + is_running = false; + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '2'; + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } + + plc_auto_stop(); + + /*停止计时器记录时长*/ + uint32_t time_elapsed = parameter->lamp_timer.elapsed() / 1000; + parameter->lamp_used_time += time_elapsed; + + camera->unregister_data_callback(); + ui->lab_info->setText("停止"); + cout << ">>> stop acquisition >>>" << endl; + ui->btn_1to2->setEnabled(true); + + parameter->file_info[0] = to_string(parameter->lamp_used_time); + ofstream fout; + fout.open(sys_file, ios::out | ios::trunc); + for(auto s : parameter->file_info) + fout << s << endl; + fout.close(); +// cout << "used time: " << parameter->file_info[0] << endl; + ui->btn_start->setEnabled(true); + ui->btn_stop->setEnabled(false); + ui->btn_black->setEnabled(true); + ui->btn_rgb_black->setEnabled(true); + ui->btn_white->setEnabled(true); + ui->btn_rgb_white->setEnabled(true); +} + + +void Widget::On_btn_black_clicked() +{ + //更改触发模式并设置行频 + PvResult lResult; + lResult = camera->parameter_array->SetEnumValue("TriggerMode", "Off"); + if ( !lResult.IsOK() ) + { + cout << "*** Set Internal TriggerMode Failed! *** " << endl; + return; + } + lResult = camera->parameter_array->SetFloatValue("AcquisitionFrameRate", 100.0); + if ( !lResult.IsOK() ) + { + cout << "*** Unable to set *** " << endl; + return; + } + ui->lab_info->setText("正在校正..."); + qApp->processEvents(); + + camera->register_callback_calibration(); + camera->capture_black_flag = true; + camera->start_acquisition(); + ui->lab_info->setText("校正完成"); +} + +void Widget::On_btn_white_clicked() +{ + //更改触发模式并设置行频 + PvResult lResult; + lResult = camera->parameter_array->SetEnumValue("TriggerMode", "Off"); + if ( !lResult.IsOK() ) + { + cout << "*** Set Internal TriggerMode Failed! *** " << endl; + return; + } + lResult = camera->parameter_array->SetFloatValue("AcquisitionFrameRate", 100.0); + if ( !lResult.IsOK() ) + { + cout << "*** Unable to set *** " << endl; + return; + } + ui->lab_info->setText("正在校正..."); + qApp->processEvents(); + + camera->register_callback_calibration(); + camera->capture_white_flag = true; + camera->start_acquisition(); + ui->lab_info->setText("校正完成"); +} + +void Widget::On_btn_capture_clicked() +{ + save_thread->save_flag.release(1); +} + +void Widget::get_data(uint8_t *buff) +{ + img = cv::Mat(SPEC_HEIGHT, SPEC_WIDTH, CV_16UC3, buff); + img.convertTo(img, CV_32FC3); + img = img / 4095 * 255; + img.convertTo(img, CV_8UC3); + +// const unsigned char *pSrc = (const unsigned char*)img.data; +// QImage image(pSrc, img.cols, img.rows, img.step, QImage::Format_RGB888); //三通道 +// QPixmap pix = QPixmap::fromImage(image.scaled(ui->lab_show_img->width(), ui->lab_show_img->height(), Qt::KeepAspectRatio)); +// ui->lab_show_img->setPixmap(pix); +// ui->lab_show_img->show(); +} + +void Widget::get_rgb_data(uint8_t *buff) +{ + img_rgb = cv::Mat(RGB_HEIGHT, RGB_WIDTH, CV_8UC3, buff); +} + +void Widget::get_mask(char *get_buf) +{ + //256*1024 + /*异物显示为rgb全白,再与原始图像叠加,白色像素代表异物*/ + std::vector mask_rgb; + cv::Mat mask_show = cv::Mat(SPEC_MASK_HEIGHT, SPEC_MASK_WIDTH, CV_8UC3); + cv::Mat mask = cv::Mat(SPEC_MASK_HEIGHT, SPEC_MASK_WIDTH, CV_8UC1, get_buf); + mask *= 255; + mask_rgb.push_back(mask); + mask_rgb.push_back(mask); + mask_rgb.push_back(mask); + cv::merge(mask_rgb, mask_show); + cv::resize(mask_show, mask_show, cv::Size(SPEC_WIDTH, SPEC_HEIGHT), 0, 0, cv::INTER_LINEAR); + cv::Mat add_img = cv::Mat(SPEC_HEIGHT, SPEC_WIDTH, CV_8UC3); + cv::add(img, mask_show, add_img); + + const unsigned char *pSrc_img = (const unsigned char*)add_img.data; + QImage image_img(pSrc_img, add_img.cols, add_img.rows, add_img.step, QImage::Format_RGB888); //三通道 + QPixmap pix_img = QPixmap::fromImage(image_img.scaled(ui->lab_show_img->width(), ui->lab_show_img->height(), Qt::KeepAspectRatio)); + ui->lab_show_img->setPixmap(pix_img); + ui->lab_show_img->show(); + //mask,暂时用不到了 +// const unsigned char *pSrc_mask = (const unsigned char*)mask_show.data; +// QImage image_mask(pSrc_mask, mask_show.cols, mask_show.rows, mask_show.step, QImage::Format_RGB888); +// QPixmap pix_mask = QPixmap::fromImage(image_mask.scaled(ui->lab_show_mask->width(),ui->lab_show_mask->height(),Qt::KeepAspectRatio)); +// ui->lab_show_rgb->setPixmap(pix_mask); +// ui->lab_show_rgb->show(); + + /* + //灰度图显示,白色为杂质,取消了RGB显示功能,有利于速度提升,内存减少占用 + //修改于2022年6月21日 + cv::Mat mask = cv::Mat(REALHEIGHT, REALWIDTH, CV_8UC1, get_buf); + mask *= 255; + const unsigned char *pSrc = (const unsigned char*)mask.data; + QImage image(pSrc, mask.cols, mask.rows, mask.step, QImage::Format_Grayscale8); + QPixmap pix = QPixmap::fromImage(image.scaled(ui->lab_show_mask->width(),ui->lab_show_mask->height(),Qt::KeepAspectRatio)); + ui->lab_show_mask->setPixmap(pix); + ui->lab_show_mask->show(); + */ +} + +void Widget::get_mask_rgb(char *get_buf) +{ + std::vector mask_rgb; + cv::Mat mask_show = cv::Mat(RGB_MASK_HEIGHT, RGB_MASK_WIDTH, CV_8UC3); + cv::Mat mask = cv::Mat(RGB_MASK_HEIGHT, RGB_MASK_WIDTH, CV_8UC1, get_buf); + mask *= 255; + mask_rgb.push_back(mask); + mask_rgb.push_back(mask); + mask_rgb.push_back(mask); + cv::merge(mask_rgb, mask_show); + cv::resize(mask_show, mask_show, cv::Size(RGB_WIDTH, RGB_HEIGHT), 0, 0, cv::INTER_LINEAR); + cv::Mat add_img = cv::Mat(RGB_HEIGHT, RGB_WIDTH, CV_8UC3); + cv::add(img_rgb, mask_show, add_img); + + const unsigned char *pSrc_img = (const unsigned char*)add_img.data; + QImage image_img(pSrc_img, add_img.cols, add_img.rows, add_img.step, QImage::Format_RGB888); //三通道 + QPixmap pix_img = QPixmap::fromImage(image_img.scaled(ui->lab_show_img->width(), ui->lab_show_img->height(), Qt::KeepAspectRatio)); + ui->lab_show_rgb->setPixmap(pix_img); + ui->lab_show_rgb->show(); +} + +void Widget::get_valve_data(uint8_t *valve_data) +{ + uint8_t* mask_buf = new uint8_t[32 * 1024 + 8]; + mask_buf[0] = 0xAA; + //mask_buf[1]和mask_buf[2]表示数据长度 + mask_buf[1] = 0x80; + mask_buf[2] = 0x02; + mask_buf[3] = 'd'; + mask_buf[4] = 'a'; + memcpy(mask_buf + 5, valve_data, 32*1024); + mask_buf[32*1024+5] = 0xFF; + mask_buf[32*1024+6] = 0xFF; + mask_buf[32*1024+7] = 0xBB; + + if(lower_machine != nullptr && lower_machine->state() == QAbstractSocket::ConnectedState) + { + lower_machine->write((const char*)mask_buf, 1024 * 32 + 8); + lower_machine->flush(); +// lower_machine->write((const char*)mask_buf_rgb, 1024 * 32 + 8); +// lower_machine->flush(); +// cout << ">>> send to guoyiren successfully! >>>" << endl; + } + else + { + camera->stop_acquisition(); + rgb_camera->stop_acquisition(); + //up_machine->write("111"); + cout << "*** lower machine connect failed! *** " << endl; + ui->lab_lowermachine_isconnect->setStyleSheet("QLabel{background-color: rgb(237, 212, 0);}"); + } + + delete [] mask_buf; +} + + +void Widget::get_send_to_up_machine(float* sendbuf) +{ + cout << "suuuuuuuu" << endl; + if(connect_to_monitor && send_to_up_machine) + { + cout << SPEC_HEIGHT*SPEC_WIDTH*valid.size()*sizeof(float) << endl; + uint32_t len = up_machine->write((const char*)sendbuf, SPEC_HEIGHT*SPEC_WIDTH*valid.size()*sizeof(float)); + up_machine->flush(); + cout << ">>> send img finished! >>>" << len << endl; + } +} + +void Widget::readfrom_up_machine() +{ + cout << "receive message from suhandong" << endl; + char recvbuf[4] = {0}; + up_machine->read(recvbuf, 4); + char ch = recvbuf[0]; + switch (ch) + { + //开始 + case '1': + cout << "start" << endl; + if(is_running == false) + { + ui->tabWidget->setCurrentIndex(1); + On_btn_start_clicked(); + } + break; + //停止 + case '2': + cout << "stop" << endl; + if(is_running == true) + On_btn_stop_clicked(); + break; + case '3': + cout << "lamp" << endl; + send_lamp_time_to_monitor(); + break; //灯光时长 + //关机 + case '4': + cout << "poweroff" << endl; + if(is_running == true) + { + On_btn_stop_clicked(); + } + sleep(2); + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '4'; + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } + system("poweroff"); + break; + default:break; + } +} + +void Widget::readfrom_lower_machine()//2022.8.8 +{ + if(is_running == false) + return; + cout << ">>> receive error >>>" << endl; + char recvbuf[8] = {0}; + int ret = lower_machine->read(recvbuf, 8); + if(ret > 0){ //收到error信息 + //执行restart操作 + restart_from_error(); + cout << ">>> restart ! >>>" << endl; + } + +} + +void Widget::On_btn_sendsingle_clicked() +{ + int val = ui->spinBox_channel->value() - 1; + QString valve_x = QString::fromStdString(to_string(val)); + int len_valve_x = valve_x.size(); + QByteArray valve_byte = valve_x.toLatin1(); + uint8_t* sendbuf = new uint8_t[len_valve_x + 8]; + sendbuf[0] = 0xAA; + sendbuf[1] = 0x00; + sendbuf[2] = len_valve_x + 2; + sendbuf[3] = 't'; + sendbuf[4] = 'e'; + memcpy(sendbuf + 5, valve_byte.data(), len_valve_x); + sendbuf[len_valve_x + 5] = 0xFF; + sendbuf[len_valve_x + 6] = 0xFF; + sendbuf[len_valve_x + 7] = 0xBB; + if(lower_machine != nullptr) + { + lower_machine->write((const char*)sendbuf, len_valve_x + 8); +// cout << "send single " << val+1 << " success" << endl; + } + delete [] sendbuf; +} + +void Widget::On_btn_autosend_clicked() +{ + uint8_t start_test[11] = {0}; + start_test[0] = 0xAA; + start_test[1] = 0x00; + start_test[2] = 0x05; + start_test[3] = 't'; + start_test[4] = 'e'; + start_test[5] = '2'; + start_test[6] = '5'; + start_test[7] = '7'; + start_test[8] = 0xFF; + start_test[9] = 0xFF; + start_test[10] = 0xBB; + if(lower_machine != nullptr) + { + lower_machine->write((const char*)start_test, 11); + cout << "send autosend success" << endl; + } +} + +void Widget::on_btn_1_clicked() +{ + parameter->password += "1"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_2_clicked() +{ + parameter->password += "2"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_3_clicked() +{ + parameter->password += "3"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_4_clicked() +{ + parameter->password += "4"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_5_clicked() +{ + parameter->password += "5"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_6_clicked() +{ + parameter->password += "6"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_7_clicked() +{ + parameter->password += "7"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_8_clicked() +{ + parameter->password += "8"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_9_clicked() +{ + parameter->password += "9"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_0_clicked() +{ + parameter->password += "0"; + int len = parameter->password.size(); + ui->line_password->setText(QString(len, '*')); +} + +void Widget::on_btn_clear_clicked() +{ + parameter->password.clear(); + ui->line_password->setText(""); +} + +void Widget::on_btn_del_clicked() +{ + int len = parameter->password.size(); + if(len > 0){ + parameter->password.pop_back(); + --len; + ui->line_password->setText(QString(len, '*')); + } +} + +void Widget::on_btn_ensure_clicked() +{ + if(parameter->password != parameter->file_info[1]){ + //密码错误 + QMessageBox::information(this, "提示", "密码错误!"); + parameter->password.clear(); + ui->line_password->setText(""); + } + else{ + //密码正确 + parameter->password.clear(); + ui->line_password->setText(""); + ui->tabWidget->setCurrentIndex(2); + ui->btn_capture->setEnabled(true); + } +} + +void Widget::on_btn_back_clicked() +{ + parameter->password.clear(); + ui->tabWidget->setCurrentIndex(0); +} + +void Widget::on_btn_send_plus_clicked() +{ + int send_val = 0; + int val = ui->spinBox_channel->value(); + send_val = val - 1; + QString valve_x = QString::fromStdString(to_string(send_val)); + int len_valve_x = valve_x.size(); + QByteArray valve_byte = valve_x.toLatin1(); + uint8_t* sendbuf = new uint8_t[len_valve_x + 8]; + sendbuf[0] = 0xAA; + sendbuf[1] = 0x00; + sendbuf[2] = len_valve_x + 2; + sendbuf[3] = 't'; + sendbuf[4] = 'e'; + memcpy(sendbuf + 5, valve_byte.data(), len_valve_x); + sendbuf[len_valve_x + 5] = 0xFF; + sendbuf[len_valve_x + 6] = 0xFF; + sendbuf[len_valve_x + 7] = 0xBB; + if(lower_machine != nullptr) + { + lower_machine->write((const char*)sendbuf, len_valve_x + 8); +// cout << "send single " << val << " success" << endl; + } + val += 1; + if(val == 257) + val = 1; + ui->spinBox_channel->setValue(val); + delete [] sendbuf; +} + +void Widget::on_btn_send_min_clicked() +{ + int send_val = 0; + int val = ui->spinBox_channel->value(); + send_val = val - 1; + QString valve_x = QString::fromStdString(to_string(send_val)); + int len_valve_x = valve_x.size(); + QByteArray valve_byte = valve_x.toLatin1(); + uint8_t* sendbuf = new uint8_t[len_valve_x + 8]; + sendbuf[0] = 0xAA; + sendbuf[1] = 0x00; + sendbuf[2] = len_valve_x + 2; + sendbuf[3] = 't'; + sendbuf[4] = 'e'; + memcpy(sendbuf + 5, valve_byte.data(), len_valve_x); + sendbuf[len_valve_x + 5] = 0xFF; + sendbuf[len_valve_x + 6] = 0xFF; + sendbuf[len_valve_x + 7] = 0xBB; + if(lower_machine != nullptr) + { + lower_machine->write((const char*)sendbuf, len_valve_x + 8); + cout << "send single " << val << " success" << endl; + } + val -= 1; + if(val == 0) + val = 256; + ui->spinBox_channel->setValue(val); + delete [] sendbuf; +} + +void Widget::time_log(int state) +{ + ofstream logfile; + logfile.open(log_file, ios::app); + QDateTime current_time = QDateTime::currentDateTime(); + string str = current_time.toString("yyyy MM.dd hh:mm:ss").toStdString(); + if(state == 1) + logfile << str << " On" << endl; + else + logfile << str << " Off" << endl; + logfile.close(); +} + +void Widget::send_lamp_time_to_monitor() +{ + uint8_t send_buf[6] = {0}; + send_buf[0] = 0xAA; + memcpy(send_buf+1, (uint8_t*)¶meter->lamp_used_time, 4); + send_buf[5] = 0xBB; + if(up_machine != nullptr) + { + up_machine->write((const char*)send_buf, 6); + up_machine->flush(); + cout << "send lamp" << endl; + } +} + +void Widget::On_btn_threshold_clicked() +{ + file_threshold = ui->spinbox_threshold->value(); + int fd = open("/tmp/dkimg.fifo", O_WRONLY); + string str = to_string(file_threshold); + int ret = write(fd, str.c_str(), str.size()); + if(ret > 0) + cout << "threshold send success " << file_threshold << endl; + + file_threshold_rgb = ui->spinbox_threshold_rgb->value(); + fd = open("/tmp/dkrgb.fifo", O_WRONLY); + str = to_string(file_threshold_rgb); + ret = write(fd, str.c_str(), str.size()); + if(ret > 0) + cout << "threshold send success " << file_threshold_rgb << endl; + +} + +void Widget::on_btn_set_lower_clicked() +{ + file_delay = ui->spinbox_delaytime->value(); + file_delay_rgb = ui->spinbox_delaytime_rgb->value(); + file_encoder = ui->spinbox_encoder->value(); + file_valve = ui->spinbox_valve->value(); + file_padding = ui->spinbox_padding->value(); +} + +void Widget::on_btn_set_camera_clicked() +{ + file_explosure = ui->spinbox_explosure->value(); + file_delay = ui->spinbox_delaytime->value(); + file_delay_rgb = ui->spinbox_delaytime_rgb->value(); + file_encoder = ui->spinbox_encoder->value(); + file_valve = ui->spinbox_valve->value(); + file_mroi = ui->lineEdit_MROI->text().toStdString(); + file_valid = ui->lineEdit_VALID->text().toStdString(); + R = ui->spinbox_R->value(); + G = ui->spinbox_G->value(); + B = ui->spinbox_B->value(); + file_threshold = ui->spinbox_threshold->value(); + file_threshold_rgb = ui->spinbox_threshold_rgb->value(); + file_padding = ui->spinbox_padding->value(); + +} + +void Widget::on_btn_set_clicked() +{ + //保存配置文件至本地 + file_explosure = ui->spinbox_explosure->value(); + file_encoder = ui->spinbox_encoder->value(); + file_delay = ui->spinbox_delaytime->value(); + file_delay_rgb = ui->spinbox_delaytime_rgb->value(); + file_valve = ui->spinbox_valve->value(); + file_mroi = ui->lineEdit_MROI->text().toStdString(); + file_valid = ui->lineEdit_VALID->text().toStdString(); + R = ui->spinbox_R->value(); + G = ui->spinbox_G->value(); + B = ui->spinbox_B->value(); + file_threshold = ui->spinbox_threshold->value(); + file_threshold_rgb = ui->spinbox_threshold_rgb->value(); + file_padding = ui->spinbox_padding->value(); + + vector config; + config.push_back(to_string(file_explosure)); + config.push_back(to_string(file_encoder)); + config.push_back(to_string(file_delay)); + config.push_back(to_string(file_delay_rgb)); + config.push_back(to_string(file_valve)); + config.push_back(file_mroi); + config.push_back(to_string(R)); + config.push_back(to_string(G)); + config.push_back(to_string(B)); + config.push_back(file_valid); + config.push_back(to_string(file_threshold)); + config.push_back(to_string(file_threshold_rgb)); + config.push_back(to_string(file_padding)); + + ofstream outfile; + outfile.open(parameter_file, ios::out | ios::trunc); + for(auto s : config) + outfile << s << endl; +} + +void Widget::on_btn_rgb_white_clicked() +{ + //设置触发模式为 内触发 + ui->lab_info->setText("正在校正..."); + ui->btn_rgb_black->setEnabled(false); + ui->btn_rgb_white->setEnabled(false); + qApp->processEvents(); + PvResult lResult = rgb_camera->parameter_array->SetEnumValue("LineTriggerMode", "Off"); + if(!lResult.IsOK()){ + cout << "set triggermode failed" << endl; + return; + } + lResult = rgb_camera->parameter_array->SetFloatValue("AcquisitionLineRate", 4800.0f); + + lResult = rgb_camera->Whitecal->Execute(); + sleep(6); + rgb_camera->lFFCUserSetSave->Execute(); + + lResult = rgb_camera->parameter_array->SetEnumValue("LineTriggerMode", "On"); + lResult = rgb_camera->parameter_array->SetEnumValue("LineTriggerSource", "Line2"); + rgb_camera->lUserSave->Execute(); + + ui->btn_rgb_black->setEnabled(true); + ui->btn_rgb_white->setEnabled(true); + ui->lab_info->setText("校正完成"); +} + +void Widget::on_btn_rgb_black_clicked() +{ + cout << "rgb_black" << endl; + ui->btn_rgb_black->setEnabled(false); + ui->btn_rgb_white->setEnabled(false); + //设置触发模式为 外触发,线路Line0,上升沿触发 + PvResult lResult = rgb_camera->parameter_array->SetEnumValue("LineTriggerMode", "Off"); + if(!lResult.IsOK()){ + cout << "set triggermode failed" << endl; + return; + } + lResult = rgb_camera->parameter_array->SetFloatValue("AcquisitionLineRate", 4800.0f); + + lResult = rgb_camera->Blackcal->Execute(); + sleep(6); + ui->btn_rgb_black->setEnabled(true); + ui->btn_rgb_white->setEnabled(true); +} + +void Widget::on_btn_save_enable_clicked() +{ + send_thread->save_flag = true; + ui->btn_save_enable->setEnabled(false); + ui->btn_save_disenable->setEnabled(true); +} + +void Widget::on_btn_save_disenable_clicked() +{ + send_thread->save_flag = false; + ui->btn_save_enable->setEnabled(true); + ui->btn_save_disenable->setEnabled(false); +} + +void Widget::restart_from_error()//2022.8.8 +{ + //停止相机采图 + camera->stop_acquisition(); + rgb_camera->stop_acquisition(); + //给下位机发送停止命令 + uint8_t stop_command[9] = {0}; + stop_command[0] = 0xAA; + stop_command[1] = 0x00; + stop_command[2] = 0x03; + stop_command[3] = 's'; + stop_command[4] = 'p'; + stop_command[5] = 0xFF; + stop_command[6] = 0xFF; + stop_command[7] = 0xFF; + stop_command[8] = 0xBB; + if(lower_machine != nullptr && lower_machine->isWritable()) + { + lower_machine->write((const char*)stop_command, 9); + lower_machine->flush(); + } + is_running = false; + //延时1s + sleep(1); + //开始相机采集 + camera->start_acquisition(); + rgb_camera->start_acquisition(); + + if(lower_machine != nullptr && lower_machine->isWritable()) + send_after_start(); + is_running = true; + cout << "restart success" << endl; +} + +int Widget::connect_modbus() +{ + int status = 0; + plc = modbus_new_rtu("/dev/ttyS0", 9600, 'N', 8, 1); + modbus_set_slave(plc, 16); //设置modbus从机地址 + status = modbus_connect(plc); + if(status == -1) + { + cout << "modbus connect failed" << endl; + return -1; + } + modbus_set_response_timeout(plc, 0, 1000000); + cout << "connect plc success" << endl; + + return 0; +} + +int Widget::plc_command(int times, int coil_addr, int status) +{ + int ret; + while (times--) + { + ret = modbus_write_bit(plc, coil_addr, status); + if(ret == 1) + return 0; + } + + cout << "write plc failed" << endl; + return -1; + +} + +int Widget::plc_open_power() +{ + int state; + state = plc_command(1, MODE_SET_ADDR, 0); //自动模式 + state = plc_command(1, POWER_AUTO_ADDR, 1); + if(state != 0){ + cout << "open power failed" << endl; + return -1; + } + return 0; +} + +int Widget::plc_close_power() +{ + int state; + state = plc_command(1, MODE_SET_ADDR, 0); //自动模式 + state = plc_command(1, POWER_AUTO_ADDR, 0); + if(state != 0){ + cout << "close power failed" << endl; + return -1; + } + return 0; +} + +void Widget::on_btn_open_conveyor_clicked() +{ + int state; + state = plc_command(3, MODE_SET_ADDR, 1); //手动模式 + sleep(1); + state = plc_command(3, BRUSH_ADDR, 1); + state = plc_command(3, CONVEYOR_ADDR, 1); + + ui->btn_open_conveyor->setEnabled(false); + ui->btn_close_conveyor->setEnabled(true); +} + +void Widget::on_btn_close_conveyor_clicked() +{ + int state; + state = plc_command(3, MODE_SET_ADDR, 1); //手动模式 + sleep(1); + state = plc_command(3, BRUSH_ADDR, 0); + state = plc_command(3, CONVEYOR_ADDR, 0); + + ui->btn_open_conveyor->setEnabled(true); + ui->btn_close_conveyor->setEnabled(false); +} + +void Widget::on_btn_open_lamp_clicked() +{ + int state; + state = plc_command(3, MODE_SET_ADDR, 1); //手动模式 + sleep(1); + state = plc_command(3, DRAUGHT_FAN_ADDR, 1); + state = plc_command(3, LAMP_FORCE, 1); + + ui->btn_open_lamp->setEnabled(false); + ui->btn_close_lamp->setEnabled(true); +} + +void Widget::on_btn_close_lamp_clicked() +{ + int state; + state = plc_command(3, MODE_SET_ADDR, 1); //手动模式 + sleep(1); + state = plc_command(3, DRAUGHT_FAN_ADDR, 0); + state = plc_command(3, LAMP_FORCE, 0); + + ui->btn_open_lamp->setEnabled(true); + ui->btn_close_lamp->setEnabled(false); +} + +int Widget::plc_auto_start() +{ + int state; + state = plc_command(3, MODE_SET_ADDR, 0); //自动模式 + sleep(1); + state = plc_command(3, BRUSH_AUTO_ADDR, 1); + state = plc_command(3, DRAUGHT_FAN_AUTO_ADDR, 1); + state = plc_command(3, CONVEYOR_AUTO_ADDR, 1); + sleep(2); + state = plc_command(3, LAMP_AUTO_ADDR, 1); + sleep(2); + ui->btn_open_lamp->setEnabled(false); + ui->btn_close_lamp->setEnabled(true); + ui->btn_open_conveyor->setEnabled(false); + ui->btn_close_conveyor->setEnabled(true); + return 0; +} + +int Widget::plc_auto_stop() +{ + int state; + state = plc_command(3, MODE_SET_ADDR, 0); //自动模式 + sleep(1); + state = plc_command(3, BRUSH_AUTO_ADDR, 0); + state = plc_command(3, DRAUGHT_FAN_AUTO_ADDR, 0); + state = plc_command(3, CONVEYOR_AUTO_ADDR, 0); + state = plc_command(3, LAMP_AUTO_ADDR, 0); + ui->btn_open_lamp->setEnabled(true); + ui->btn_close_lamp->setEnabled(false); + ui->btn_open_conveyor->setEnabled(true); + ui->btn_close_conveyor->setEnabled(false); + return 0; +} + +void Widget::on_btn_exit_2_clicked() +{ + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '4'; + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } + if(lower_machine != nullptr) + lower_machine->close(); + sleep(1); + system("reboot"); +} + +void Widget::on_btn_0to3_2_clicked() +{ + up_machine = new QTcpSocket(); + up_machine->connectToHost("192.168.11.4", 9001); + if(up_machine->waitForConnected(1000)) + { + cout << ">>> connect to monitor successfully! >>> " << endl; + connect(up_machine, SIGNAL(readyRead()), this, SLOT(readfrom_up_machine())); + ui->lab_upmachine_isconnect_2->setStyleSheet("QLabel{background-color:rgb(0, 255, 0);}"); + if(up_machine != nullptr && up_machine->isWritable()) + { + uint8_t send_buf[3] = {0}; + send_buf[0] = 0xAA; + send_buf[1] = '7'; //重新连接 + send_buf[2] = 0xBB; + up_machine->write((const char*)send_buf, 3); + up_machine->flush(); + } + } + else + { + cout << "connect to monitor failed" << endl; + delete up_machine; + } +} + +void Widget::on_btn_send_single_long_clicked() +{ + int val = ui->spinBox_channel->value() - 1; + QString valve_x = QString::fromStdString(to_string(val)); + int len_valve_x = valve_x.size(); + QByteArray valve_byte = valve_x.toLatin1(); + uint8_t* sendbuf = new uint8_t[len_valve_x + 8]; + sendbuf[0] = 0xAA; + sendbuf[1] = 0x00; + sendbuf[2] = len_valve_x + 2; + sendbuf[3] = 't'; + sendbuf[4] = 'e'; + memcpy(sendbuf + 5, valve_byte.data(), len_valve_x); + sendbuf[len_valve_x + 5] = 0xFF; + sendbuf[len_valve_x + 6] = 0xFF; + sendbuf[len_valve_x + 7] = 0xBB; + int cnt = 0; + if(lower_machine != nullptr) + { + while(++cnt <= LONG_SEND) + { + lower_machine->write((const char*)sendbuf, len_valve_x + 8); + lower_machine->flush(); + usleep(50000); + } + } + delete [] sendbuf; +} + +void Widget::on_btn_autosend_valve_clicked() +{ + if(lower_machine == nullptr) + return; + ui->btn_autosend_valve->setEnabled(false); + ui->btn_3to0->setEnabled(false); + qApp->processEvents(); + for(int i=0; i<256; ++i) + { + string str_index = to_string(i); + string show = to_string(i+1); + int len_valve_x = str_index.size(); + uint8_t* sendbuf = new uint8_t[len_valve_x + 8]; + sendbuf[0] = 0xAA; + sendbuf[1] = 0x00; + sendbuf[2] = len_valve_x + 2; + sendbuf[3] = 't'; + sendbuf[4] = 'e'; + memcpy(sendbuf + 5, str_index.data(), len_valve_x); + sendbuf[len_valve_x + 5] = 0xFF; + sendbuf[len_valve_x + 6] = 0xFF; + sendbuf[len_valve_x + 7] = 0xBB; + ui->label_valve_index->setText((const char*)show.c_str()); + qApp->processEvents(); + lower_machine->write((const char*)sendbuf, len_valve_x + 8); + lower_machine->flush(); + delete [] sendbuf; + usleep(300000); + } + ui->btn_autosend_valve->setEnabled(true); + ui->btn_3to0->setEnabled(true); +} + + +void Widget::on_radioButton_manul_2_clicked(bool checked) +{ + ui->groupBox_2->setEnabled(checked); + ui->groupBox->setEnabled(!checked); + ui->btn_autosend_valve->setEnabled(checked); +} + +void Widget::on_radioButton_manul_clicked(bool checked) +{ + ui->groupBox->setEnabled(checked); + ui->groupBox_2->setEnabled(!checked); +} diff --git a/widget.h b/widget.h new file mode 100644 index 0000000..7cb9b28 --- /dev/null +++ b/widget.h @@ -0,0 +1,188 @@ +#ifndef WIDGET_H +#define WIDGET_H + +#include +#include "thread.h" +#include "camera.h" +#include "fstream" +#include "parameter.h" +#include "modbus.h" + +#define MODE_SET_ADDR 0x0800 +#define CONVEYOR_ADDR 0x0A0F +#define LAMP_ADDR 0x0A0E +#define POWER_ADDR 0x0A12 +#define DRAUGHT_FAN_ADDR 0x0A13 +#define BRUSH_ADDR 0x0A14 +#define LAMP_FORCE 0x0814 + +#define CONVEYOR_AUTO_ADDR 0x0A26 +#define LAMP_AUTO_ADDR 0x0A27 +#define BRUSH_AUTO_ADDR 0x0A28 +#define POWER_AUTO_ADDR 0x0A29 +#define DRAUGHT_FAN_AUTO_ADDR 0x0A2A + +namespace Ui { +class Widget; +} +// THIS IS THE FIRST M +class Widget : public QWidget +{ + Q_OBJECT + +public: + explicit Widget(QWidget *parent = 0); + ~Widget(); + + SendThread* send_thread = nullptr; + SaveThread* save_thread = nullptr; + + cv::Mat img; + cv::Mat img_rgb; + QTcpServer* server_to_lowermachine = nullptr; + QTcpSocket* lower_machine = nullptr; + + QTcpSocket* up_machine = nullptr; //上位机socket + + Parameter* parameter = nullptr; + + bool connect_to_monitor = false; + bool send_to_up_machine = false; + + volatile bool is_running = false; + + void set_spinbox_range(); + void set_ui(bool fullscreen); + void connect_monitor(); + void load_parameter_doc(); + void load_system_parameter(); + void connect_signal(); + + //communication protocal 通信协议 + void send_after_start(); + + //记录相机开启关闭日志 + void time_log(int state); + + void send_lamp_time_to_monitor(); + + void restart_from_error();//2022.8.8 + + int connect_modbus(); + + int plc_command(int times, int coil_addr, int status); + + int plc_open_power(); + + int plc_close_power(); + + int plc_auto_start(); + + int plc_auto_stop(); + +private slots: + void get_data(uint8_t* buff); + void get_rgb_data(uint8_t* buff); + + void On_btn_start_clicked(); + + void On_btn_stop_clicked(); + + void On_btn_black_clicked(); //采集黑帧图片 + + void On_btn_white_clicked(); //采集白帧图片 + + void On_btn_capture_clicked(); + + void get_mask(char* get_buf); + + void get_mask_rgb(char* get_buf); + + void get_valve_data(uint8_t* valve_data); + + void get_send_to_up_machine(float* sendbuf); + + void readfrom_up_machine(); + + void readfrom_lower_machine();//2022.8.8 + + void On_btn_sendsingle_clicked(); + + void On_btn_autosend_clicked(); + + void on_btn_1_clicked(); + + void on_btn_2_clicked(); + + void on_btn_3_clicked(); + + void on_btn_4_clicked(); + + void on_btn_5_clicked(); + + void on_btn_6_clicked(); + + void on_btn_7_clicked(); + + void on_btn_8_clicked(); + + void on_btn_9_clicked(); + + void on_btn_0_clicked(); + + void on_btn_clear_clicked(); + + void on_btn_del_clicked(); + + void on_btn_ensure_clicked(); + + void on_btn_back_clicked(); + + void on_btn_send_plus_clicked(); + + void on_btn_send_min_clicked(); + + void On_btn_threshold_clicked(); + + void on_btn_set_lower_clicked(); + + void on_btn_set_camera_clicked(); + + void on_btn_set_clicked(); + + void on_btn_rgb_white_clicked(); + + void on_btn_rgb_black_clicked(); + + void on_btn_save_enable_clicked(); + + void on_btn_save_disenable_clicked(); + + + + void on_btn_open_conveyor_clicked(); + + void on_btn_close_conveyor_clicked(); + + void on_btn_open_lamp_clicked(); + + void on_btn_close_lamp_clicked(); + + + void on_btn_exit_2_clicked(); + + void on_btn_0to3_2_clicked(); + + void on_btn_send_single_long_clicked(); + + void on_btn_autosend_valve_clicked(); + + void on_radioButton_manul_2_clicked(bool checked); + + void on_radioButton_manul_clicked(bool checked); + +private: + Ui::Widget *ui; +}; + +#endif // WIDGET_H diff --git a/widget.ui b/widget.ui new file mode 100644 index 0000000..53d0aa3 --- /dev/null +++ b/widget.ui @@ -0,0 +1,2099 @@ + + + Widget + + + + 0 + 0 + 1024 + 768 + + + + Widget + + + + + 0 + 0 + 1024 + 768 + + + + 3 + + + + Tab 1 + + + + + 220 + 120 + 691 + 81 + + + + + 36 + + + + 欢迎使用烟梗异物智能分选系统 + + + + + + 150 + 340 + 181 + 81 + + + + + 24 + + + + 进入分选 + + + + + + 710 + 340 + 181 + 81 + + + + + 24 + + + + 喷阀测试 + + + + + + 220 + 530 + 551 + 94 + + + + 连接状态: + + + + + 0 + 32 + 100 + 50 + + + + + 100 + 50 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 14 + + + + 上位机: + + + + + + 80 + 40 + 31 + 31 + + + + + 31 + 31 + + + + + 10 + + + + background-color: rgb(237, 212, 0); + + + + + + + + + 100 + 32 + 100 + 50 + + + + + 100 + 50 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 14 + + + + 下位机: + + + + + + 180 + 40 + 31 + 31 + + + + + 31 + 31 + + + + + 10 + + + + background-color: rgb(237, 212, 0); + + + + + + + + + 220 + 32 + 100 + 50 + + + + + 100 + 50 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 14 + + + + PLC: + + + + + + 260 + 40 + 31 + 31 + + + + + 31 + 31 + + + + + 10 + + + + background-color: rgb(237, 212, 0); + + + + + + + + + 300 + 30 + 100 + 50 + + + + + 100 + 50 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 14 + + + + 光谱相机: + + + + + + 385 + 40 + 31 + 31 + + + + + 31 + 31 + + + + + 10 + + + + background-color: rgb(237, 212, 0); + + + + + + + + + 420 + 30 + 100 + 50 + + + + + 100 + 50 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 14 + + + + 彩色相机: + + + + + + 505 + 40 + 31 + 31 + + + + + 31 + 31 + + + + + 10 + + + + background-color: rgb(237, 212, 0); + + + + + + + + + + 20 + 60 + 191 + 191 + + + + + + + image/njfu.jpg + + + + + + 830 + 560 + 121 + 51 + + + + + 14 + + + + 重新连接 + + + + + + Tab 2 + + + + + 310 + 220 + 111 + 31 + + + + + 14 + + + + UpArrowCursor + + + color: rgb(52, 101, 164); + + + 光谱图像 + + + Qt::AlignCenter + + + + + + 310 + 450 + 101 + 31 + + + + + 14 + + + + UpArrowCursor + + + color: rgb(52, 101, 164); + + + 彩色图像 + + + Qt::AlignCenter + + + + + + 10 + 490 + 700 + 175 + + + + background-color: rgb(238, 238, 236); + + + + + + + + + 570 + 690 + 131 + 31 + + + + + 10 + + + + + + + + + + 10 + 260 + 700 + 175 + + + + background-color: rgb(238, 238, 236); + + + + + + + + + 710 + 160 + 301 + 531 + + + + + 20 + + + + 命令窗口 + + + + + 10 + 50 + 130 + 50 + + + + + 20 + + + + background-color: rgb(115, 210, 22); + + + 开始分选 + + + + + + 160 + 50 + 130 + 50 + + + + + 20 + + + + background-color: rgb(245, 121, 0); + + + 停止分选 + + + + + + 160 + 150 + 130 + 50 + + + + + 20 + + + + 彩色白场 + + + + + + 10 + 150 + 130 + 50 + + + + + 20 + + + + 彩色黑场 + + + + + + 160 + 220 + 130 + 50 + + + + + 20 + + + + 光谱白场 + + + + + + 10 + 220 + 130 + 50 + + + + + 20 + + + + 光谱黑场 + + + + + + 10 + 460 + 130 + 50 + + + + + 20 + + + + 参数设置 + + + + + + 160 + 460 + 130 + 50 + + + + + 20 + + + + 返回 + + + + + + 10 + 320 + 130 + 50 + + + + + 20 + + + + 开传送带 + + + + + + 160 + 320 + 130 + 50 + + + + + 20 + + + + 关传送带 + + + + + + 10 + 390 + 130 + 50 + + + + + 20 + + + + 开启光源 + + + + + + 160 + 390 + 130 + 50 + + + + + 20 + + + + 关闭光源 + + + + + + + 10 + 10 + 191 + 190 + + + + + 0 + 190 + + + + + + + image/njfu.jpg + + + + + + 210 + 90 + 741 + 41 + + + + + 24 + + + + UpArrowCursor + + + color: rgb(52, 101, 164); + + + 南京林业大学机械电子工程学院智能分选团队研发 + + + Qt::AlignCenter + + + + + + Tab3 + + + + + 0 + 0 + 301 + 71 + + + + + 28 + + + + 参数设置界面 + + + + + + 680 + 500 + 170 + 70 + + + + + 36 + + + + 返回 + + + + + + 480 + 500 + 170 + 70 + + + + + 20 + + + + 保存配置文件 + + + + + + 10 + 60 + 401 + 311 + + + + + 16 + + + + 相机参数 + + + + + 10 + 20 + 131 + 81 + + + + + 24 + + + + 曝光时间 + + + + + + 160 + 39 + 120 + 51 + + + + + + + 10 + 100 + 111 + 81 + + + + + 24 + + + + MROI + + + + + + 10 + 170 + 141 + 81 + + + + + 24 + + + + 谱段索引 + + + + + + 160 + 190 + 231 + 50 + + + + + + + 160 + 120 + 231 + 51 + + + + + + + 250 + 250 + 131 + 51 + + + + + 16 + + + + 保存后请重启 + + + + + + + 10 + 370 + 401 + 321 + + + + + 16 + + + + 下位机参数 + + + + + 250 + 200 + 120 + 41 + + + + + + + 250 + 40 + 120 + 41 + + + + + + + 20 + 190 + 191 + 41 + + + + + 24 + + + + 喷阀分频系数 + + + + + + 20 + 140 + 231 + 41 + + + + + 24 + + + + 编码器分频系数 + + + + + + 250 + 140 + 120 + 41 + + + + + + + 20 + 40 + 201 + 41 + + + + + 24 + + + + 光谱延时时间 + + + + + + 250 + 250 + 121 + 51 + + + + + 26 + + + + 确认 + + + + + + 150 + 250 + 81 + 41 + + + + + + + 20 + 250 + 121 + 41 + + + + + 24 + + + + padding + + + + + + 20 + 90 + 201 + 41 + + + + + 24 + + + + RGB延时时间 + + + + + + 250 + 90 + 120 + 41 + + + + + + + + 470 + 40 + 431 + 91 + + + + + 16 + + + + 彩色图像显示谱段设置 + + + + + 20 + 50 + 41 + 31 + + + + + 24 + + + + R + + + + + + 50 + 40 + 81 + 41 + + + + + + + 160 + 50 + 41 + 31 + + + + + 24 + + + + G + + + + + + 190 + 40 + 81 + 41 + + + + + + + 300 + 50 + 41 + 31 + + + + + 24 + + + + B + + + + + + 330 + 40 + 81 + 41 + + + + + + + + 470 + 150 + 431 + 151 + + + + + 16 + + + + 模型参数设置 + + + + + 10 + 40 + 131 + 41 + + + + + 24 + + + + 光谱阈值 + + + + + + 150 + 40 + 120 + 41 + + + + + + + 280 + 100 + 101 + 41 + + + + + 20 + + + + 确认 + + + + + + 10 + 100 + 131 + 41 + + + + + 24 + + + + 彩色阈值 + + + + + + 150 + 100 + 120 + 41 + + + + + + + + 480 + 330 + 141 + 61 + + + + + 20 + + + + 保存图片 + + + + + + 640 + 330 + 141 + 61 + + + + + 20 + + + + 不保存图片 + + + + + + 480 + 410 + 130 + 50 + + + + + 20 + + + + 加载 + + + + + + 640 + 410 + 130 + 50 + + + + + 20 + + + + 抓取图片 + + + + + + 780 + 620 + 181 + 81 + + + + + 24 + + + + background-color: rgb(239, 41, 41); + + + 关机 + + + + + + 570 + 620 + 181 + 81 + + + + + 24 + + + + background-color: rgb(245, 121, 0); + + + 重启 + + + + + + Tab4 + + + + + 700 + 440 + 170 + 70 + + + + + 36 + + + + 返回 + + + + + true + + + + 80 + 260 + 551 + 91 + + + + + 16 + + + + 手动喷阀测试 + + + + + 20 + 40 + 71 + 41 + + + + + 24 + + + + 通道 + + + + + + 220 + 40 + 101 + 41 + + + + + 20 + + + + 测试 + + + + + + 100 + 40 + 111 + 41 + + + + + + + 330 + 40 + 41 + 41 + + + + + 20 + + + + + + + + + + + 380 + 40 + 41 + 41 + + + + + 20 + + + + - + + + + + + 430 + 40 + 101 + 41 + + + + + 18 + + + + 连续测试 + + + + + + false + + + + 80 + 390 + 541 + 161 + + + + + 16 + + + + 自动喷阀测试 + + + + + 20 + 40 + 221 + 41 + + + + + 24 + + + + 所有通道1-256 + + + + + + 170 + 100 + 67 + 41 + + + + + 24 + + + + 1 + + + + + + 20 + 100 + 161 + 41 + + + + + 24 + + + + 当前通道: + + + + + false + + + + 250 + 40 + 101 + 41 + + + + + 20 + + + + 测试 + + + + + + + 90 + 10 + 301 + 71 + + + + + 36 + + + + 喷阀测试界面 + + + + + + 80 + 100 + 171 + 111 + + + + + 16 + + + + 选择模式 + + + + + 20 + 40 + 112 + 23 + + + + 手动模式 + + + true + + + + + + 20 + 80 + 112 + 23 + + + + 自动模式 + + + false + + + + + + + Tab5 + + + + + 380 + 80 + 261 + 51 + + + + + + + 380 + 150 + 80 + 80 + + + + + 28 + + + + 1 + + + + + + 470 + 150 + 80 + 80 + + + + + 28 + + + + 2 + + + + + + 560 + 150 + 80 + 80 + + + + + 28 + + + + 3 + + + + + + 380 + 240 + 80 + 80 + + + + + 28 + + + + 4 + + + + + + 470 + 240 + 80 + 80 + + + + + 28 + + + + 5 + + + + + + 560 + 240 + 80 + 80 + + + + + 28 + + + + 6 + + + + + + 380 + 330 + 80 + 80 + + + + + 28 + + + + 7 + + + + + + 470 + 330 + 80 + 80 + + + + + 28 + + + + 8 + + + + + + 560 + 330 + 80 + 80 + + + + + 28 + + + + 9 + + + + + + 470 + 420 + 80 + 80 + + + + + 28 + + + + 0 + + + + + + 560 + 420 + 80 + 80 + + + + + 28 + + + + background-color: rgb(239, 41, 41); + + + <— + + + + + + 650 + 330 + 80 + 80 + + + + + 28 + + + + background-color: rgb(115, 210, 22); + + + 确认 + + + + + + 380 + 420 + 80 + 80 + + + + + 28 + + + + CLR + + + + + + 650 + 420 + 80 + 80 + + + + + 28 + + + + + + + 返回 + + + + + + + + +