Codebase list engauge-digitizer / ff49f6d
Imported Upstream version 9.1 Tobias Winchen 7 years ago
16 changed file(s) with 223 addition(s) and 68 deletion(s). Raw diff Collapse all Expand all
8888 --Package(s)-- --Comment--
8989 libfftw3-dev For computing fourier transforms. Tested with 3.3.3-7
9090 libjpeg-dev For reading jpeg image files (optional)
91 liblog4cpp-dev For logging. Tested with 1.0.4
92 libpng12-dev For reading png image files (optional)
91 liblog4cpp-dev For logging. Tested with 1.0.4. Alternately, use log4cpp_null
92 at https://github.com/markummitchell/log4cpp_null
9393 libopenjpeg-dev For reading jpeg2000 image files (optional). Compiles
9494 with version 2.1.7 but not with version 2.1.3
95 libpng12-dev For reading png image files (optional)
9596
9697 In Debian and Ubuntu distributions, the following packages are required for
9798 building Engauge for your own use:
99100 --Package(s)-- --Comment--
100101 libfftw3-dev Required for all distributions
101102 libjpeg-dev Required for all distributions
102 liblog4cpp5-dev Replaces liblog4cpp-dev that is suggested above
103 liblog4cpp5-dev Replaces liblog4cpp-dev that is suggested above. Alternately,
104 use log4cpp_null at https://github.com/markummitchell/log4cpp_null
103105 libpng12-dev Required for all distributions
104106 libqt5sql5-sqlite
105107 qtbase5-dev
106108 qtbase5-dev-tools
107109 qttools5-dev
108110 qttools5-dev-tools
111
112 Optional packages that are manually downloaded and installed:
113
114 poppler Works with version 0.44.0 and 0.45.0
109115
110116 4) Run qmake on this file to generate make files. The qmake executable will
111117 display what functionality will, and what functionality will not, be included
77 Less Easy - By downloading pre-built binaries for Windows and Linux. The pre-built binaries are available
88 from the engauge6 project on github.com, at:
99
10 https://github.com/markummitchell/engauge6/releases
10 https://github.com/markummitchell/engauge-digitizer/releases
11
12 ***************************************************************************
13 * *
14 * Special instructions for AppImage releases, which require 'fuse': *
15 * 1) 'sudo apt-get install fuse' *
16 * 2) 'sudo modprobe fuse' *
17 * 3) 'sudo usermod -a -G fuse <username>' *
18 * 4) Logout and then log back in. These steps are only performed once *
19 * *
20 ***************************************************************************
1121
1222 Difficult - By downloading the source code and building Engauge according to the steps in the INSTALL file in
1323 the highest level directory. The initial build process can take as little as 15 minutes or as long
00 <?xml version="1.0" encoding="UTF-8"?>
11 <!DOCTYPE QtCreatorProject>
2 <!-- Written by QtCreator 3.0.1, 2016-07-17T17:20:43. -->
2 <!-- Written by QtCreator 3.0.1, 2016-07-30T12:37:45. -->
33 <qtcreator>
44 <data>
55 <variable>ProjectExplorer.Project.ActiveTarget</variable>
1818 # Be verbose
1919 set -x
2020
21 # Sanity checks
22 if [[ -z "$QTDIR" || $QTDIR == *"qt-3"* || $QTDIR == *"qt-4"* ]] ; then
23 echo "Environment variable QTDIR must point to a qt5 installation"
24 exit 1
25 fi
26
2127 # TODO: move to a library function
2228 git_pull_rebase_helper()
2329 {
3036 if [ -z "$NO_DOWNLOAD" ] ; then
3137 # Enable EPEL repository; needed for recent Qt and
3238 # install dependencies
33 sudo yum -y install wget epel-release git make libtool \
39 if [[ "$ARCH" = "i686" ]] ; then
40 sudo yum -y install wget epel-release git make libtool \
3441 libzip-devel libxml2-devel libxslt-devel libsqlite3x-devel \
3542 libudev-devel libusbx-devel libcurl-devel libssh2-devel mesa-libGL-devel sqlite-devel \
3643 tar gzip which make mesa-libEGL coreutils grep wget cmake gcc gcc-c++
44 else
45 sudo yum -y install wget epel-release git make libtool \
46 libzip-devel libxml2-devel libxslt-devel \
47 libudev-devel libusb-devel libcurl-devel libssh2-devel mesa-libGL-devel sqlite-devel \
48 tar gzip which make mesa-libEGL coreutils grep wget cmake gcc gcc-c++
49 fi
3750
3851 # Determine which architecture should be built
3952 if [[ "$(/bin/arch)" = "i686" || "$(/bin/arch)" = "x86_64" ]] ; then
5972 # EPEL is awesome - fresh Qt5 for old base systems
6073 sudo yum -y install qt5-qtbase-devel \
6174 qt5-qtsvg-devel qt5-linguist qt5-qtconnectivity-devel \
62 qt5-qttools-devel qt5-qttools log4cpp-devel fftw-devel \
75 qt5-qttools-devel qt5-qttools fftw-devel \
6376 qt5-qttools-libs-help qt5-qttools-libs-clucene
6477 fi
6578
6679 if [ -z "$NO_DOWNLOAD" ] ; then
6780 # Install AppImageKit build dependencies
68 sudo yum -y install binutils fuse glibc-devel glib2-devel fuse-devel gcc zlib-devel libpng12 # Fedora, RHEL, CentOS
81 sudo yum -y install binutils fuse glibc-devel glib2-devel fuse-devel gcc zlib-devel libpng-devel # Fedora, RHEL, CentOS
6982
7083 # Build AppImageKit
7184 if [ ! -d AppImageKit ] ; then
8497 mkdir -p $HOME/$APP/$APP.AppDir
8598 cd $HOME/$APP
8699
87 # Get latest engauge-digitizer project from git
100 # Get latest engauge-digitizer and log4cpp_null projects from git
88101 if [ ! -d engauge-digitizer ] ; then
89102 git clone https://github.com/markummitchell/engauge-digitizer.git
90103 fi
92105 git_pull_rebase_helper
93106 cd ..
94107
108 if [ ! -d log4cpp_null ] ; then
109 git clone https://github.com/markummitchell/log4cpp_null.git
110 fi
111 cd log4cpp_null
112 git_pull_rebase_helper
113 cd ..
114
95115 mkdir -p $HOME/$APP/$APP.AppDir/usr/bin
96116
117 # Build log4cpp
118 LOG4CPP_HOME=$HOME/$APP/log4cpp_null
119 cd $LOG4CPP_HOME
120 qmake-qt5 log4cpp.pro
121 make
122 cd ..
123
124 # Build engauge. Version is displayed
97125 cd $HOME/$APP/engauge-digitizer
98126
99 # Figure out $VERSION
100127 VERSION=$(git rev-parse --short=8 HEAD)
101128 echo $VERSION
102129
103 export ENGAUGE_RELEASE=1
104 qmake-qt5 engauge.pro
130 qmake-qt5 engauge.pro DEFINES+=APPIMAGE_RELEASE CONFIG+=pdf
105131 #Hack to nodebug
106132 sed -i 's/ -g / /g' Makefile
133 make clean
107134 make
135
136 if [ ! -e ./bin/engauge ]; then
137 echo "bin/engauge executable was not created relative to directory `pwd`"
138 exit 1
139 fi
108140
109141 cp ./bin/engauge $HOME/$APP/$APP.AppDir/usr/bin
110142 cp ./src/img/bannerapp_64.xpm $HOME/$APP/$APP.AppDir/engauge.xpm
141173 # FIXME: How to find out which subset of plugins is really needed? I used strace when running the binary
142174 mkdir -p ./usr/lib/qt5/plugins/
143175
144 if [ -e $(dirname /usr/li*/qt5/plugins/bearer) ] ; then
145 PLUGINS=$(dirname /usr/li*/qt5/plugins/bearer)
146 else
147 PLUGINS=../../5.5/gc*/plugins/
148 fi
149 echo $PLUGINS # /usr/lib64/qt5/plugins if build system Qt is found
176 # QTDIR can point to personal installation of Qt which can contain Help/Print modules that may be missing from official install
177 PLUGINS=$QTDIR/plugins
178
150179 cp -r $PLUGINS/bearer ./usr/lib/qt5/plugins/
151180 cp -r $PLUGINS/iconengines ./usr/lib/qt5/plugins/
152181 cp -r $PLUGINS/imageformats ./usr/lib/qt5/plugins/
153182 cp -r $PLUGINS/platforminputcontexts ./usr/lib/qt5/plugins/
154183 cp -r $PLUGINS/platforms ./usr/lib/qt5/plugins/
155184 cp -r $PLUGINS/platformthemes ./usr/lib/qt5/plugins/
156 #cp -r $PLUGINS/sensors ./usr/lib/qt5/plugins/
185 cp -r $PLUGINS/sqldrivers ./usr/lib/qt5/plugins/
157186 cp -r $PLUGINS/xcbglintegrations ./usr/lib/qt5/plugins/
158187
159188 if [ -e $(dirname /usr/li*/libicudata.so.42) ] ; then
164193 echo $LIB
165194 cp -a $LIB/libicu* usr/lib
166195
196 # Poppler library, unlike fftw3, is dynamic so library must be copied
197 cp -L $POPPLER_LIB/libpoppler-cpp.so usr/lib
198 cp -L $POPPLER_LIB/libpoppler-cpp.so.0 usr/lib
199 cp -L $POPPLER_LIB/libpoppler.so usr/lib
200 cp -L $POPPLER_LIB/libpoppler.so.61 usr/lib
201 cp -L $POPPLER_LIB/libpoppler-qt5.so usr/lib
202 cp -L $POPPLER_LIB/libpoppler-qt5.so.1 usr/lib
203
167204 export LD_LIBRARY_PATH=./usr/lib/:../../5.5/gc*/lib/:$LD_LIBRARY_PATH
168 ldd bin/engauge | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
205 ldd $HOME/$APP/engauge-digitizer/bin/engauge | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
169206 ldd usr/lib/qt5/plugins/platforms/libqxcb.so | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
170207
171208 # Copy in the indirect dependencies
276313 FOUND=$(find "${APPDIR}" -type f -name "${FILE}" 2>/dev/null)
277314 echo $FOUND
278315 if [ ! -z "$FOUND" ] ; then
279 fatal "Blacklisted file ${FOUND} found"
316 echo "Blacklisted file ${FOUND} found"
317 exit 1
280318 fi
281319 done
282320
288326 # GTK theme is broken
289327 rm usr/lib/libgtk* usr/lib/libgdk* usr/lib/libpango* || true
290328
291
292329 cd ..
293330 find $APP.AppDir/
294331
7070 cp /usr/lib/i386-linux-gnu/libicudata.so.52 $STAGINGDIR
7171 cp /usr/lib/i386-linux-gnu/libicui18n.so.52 $STAGINGDIR
7272 cp /usr/lib/i386-linux-gnu/libicuuc.so.52 $STAGINGDIR
73 cp /usr/lib/liblog4cpp.so.5 $STAGINGDIR
73 cp $LOG4CPP_HOME/lib/liblog4cpp.so.1 $STAGINGDIR
74 cp $POPPLER_LIB/libpoppler.so $STAGINGDIR
75 cp $POPPLER_LIB/libpoppler.so.61 $STAGINGDIR
76 cp $POPPLER_LIB/libpoppler-cpp.so $STAGINGDIR
77 cp $POPPLER_LIB/libpoppler-cpp.so.0 $STAGINGDIR
78 cp $POPPLER_LIB/libpoppler-qt5.so $STAGINGDIR
79 cp $POPPLER_LIB/libpoppler-qt5.so.1 $STAGINGDIR
7480 cp /usr/lib/i386-linux-gnu/libQt5CLucene.so.5 $STAGINGDIR
7581 cp /usr/lib/i386-linux-gnu/libQt5Core.so.5 $STAGINGDIR
7682 cp /usr/lib/i386-linux-gnu/libQt5DBus.so.5 $STAGINGDIR
8793 echo "***Rebuilding release executable" &&
8894 export ENGAUGE_RELEASE=1 &&
8995 cd ../.. &&
90 qmake engauge.pro &&
96 qmake engauge.pro CONFIG+=pdf &&
9197 make clean &&
9298 make &&
9399 cd dev/linux
1212 <key>CFBundleExecutable</key>
1313 <string>Engauge Digitizer</string>
1414 <key>CFBundleVersion</key>
15 <string>9.0</string>
15 <string>9.1</string>
1616 <key>CFBundleShortVersionString</key>
17 <string>9.0</string>
17 <string>9.1</string>
1818 <key>LSApplicationCategoryType</key>
1919 <string>public.app-category.utilities</string>
2020 <key>CFBundleIdentifier</key>
44 Id='1262BCFA-A719-4249-85CC-8C4085E08644'
55 UpgradeCode='00A6792B-65ED-4894-A48B-B95D63C62CC6'
66 Language='1033' Codepage='1252'
7 Version='9.0'>
7 Version='9.1'>
88 <Package Id='*' Keywords='Installer' Description="Engauge Digitizer Installer"
99 Comments='Engauge Digitizer is available from github.com' Manufacturer='Engauge Open Source Developers'
1010 InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
00 # engauge.pro : Builds make files for engauge executable
11 #
22 # Comments:
3 # 1) This builds 'release' executables by default, to greatly reduce the chances of a 'debug' build getting deployed.
3 # 1) Version numbers for the packages mentioned in the following comments are documented in the BUILD file
4 # 2) This builds 'release' executables by default, to greatly reduce the chances of a 'debug' build getting deployed.
45 # To get a 'debug' build, add 'CONFIG=debug' to the qmake command line:
56 # qmake CONFIG=debug
6 # 2) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires:
7 # 1) previous installation of OpenJPEG 2.1 development package
7 # 3) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires:
8 # 1) previous installation of OpenJPEG development package
89 # 2) OPENJPEG_INCLUDE environment variable pointing to directory with openjpeg.h
910 # 3) OPENJPEG_LIB environment variable pointing to directory with libopenjp2.so
1011 # Sample command lines:
1112 # qmake CONFIG+=jpeg2000
1213 # qmake "CONFIG+=debug jpeg2000"
1314 # At some point, Qt may provide its own support for this format, at which point this can be skipped
14 # 3) Add 'pdf' to the qmake command line to include support for PDF input files. Requires
15 # 1) previous installation of the poppler-qt5 development package. Engauge has been tested with versions 0.24.5 and 0.44.0
15 # 4) Add 'pdf' to the qmake command line to include support for PDF input files. Requires
16 # 1) previous installation of the poppler-qt5 development package
1617 # 2) POPPLER_INCLUDE environment variable pointing to directory containing poppler-qt5.h
1718 # 3) POPPLER_LIB environment variable pointing to directory containing libpoppler-qt5.so
1819 # Sample command lines:
1920 # qmake CONFIG+=pdf
2021 # qmake "CONFIG+=debug pdf"
21 # 4) Set environment variable HELPDIR to override the default directory for the help files. On the command line, use
22 # 5) Set environment variable HELPDIR to override the default directory for the help files. On the command line, use
2223 # qmake "DEFINES+=HELPDIR=<directory>". The <directory> is absolute or relative to the application executable directory
23 # 5) Gratuitous warning about import_qpa_plugin in Fedora is due to 'CONFIG=qt' but that option takes care of
24 # 6) Gratuitous warning about import_qpa_plugin in Fedora is due to 'CONFIG=qt' but that option takes care of
2425 # include/library files in an automated and platform-independent manner, so it will not be removed
2526 #
2627 # More comments are in the INSTALL file, and below
696697 LIBS += -lfftw3 -llog4cpp
697698 }
698699
700 linux-* {
701 INCLUDEPATH += $$(FFTW_HOME)/include \
702 $$(LOG4CPP_HOME)/include
703 LIBS += -L/$$(FFTW_HOME)/lib -L$$(LOG4CPP_HOME)/lib
704 }
705
699706 INCLUDEPATH += src \
700707 src/Background \
701708 src/Callback \
3737 QVector<QString> &distanceGraphBackward,
3838 QVector<QString> &distancePercentBackward) const
3939 {
40 m_strategies [connectAs]->calculateGeometry (points,
41 modelCoords,
42 modelMainWindow,
43 transformation,
44 funcArea,
45 polyArea,
46 x,
47 y,
48 distanceGraphForward,
49 distancePercentForward,
50 distanceGraphBackward,
51 distancePercentBackward);
40 if (transformation.transformIsDefined()) {
41
42 m_strategies [connectAs]->calculateGeometry (points,
43 modelCoords,
44 modelMainWindow,
45 transformation,
46 funcArea,
47 polyArea,
48 x,
49 y,
50 distanceGraphForward,
51 distancePercentForward,
52 distanceGraphBackward,
53 distancePercentBackward);
54 }
5255 }
53
242242 m_model->setItem (HEADER_ROW_FUNC_AREA, COLUMN_HEADER_VALUE, new QStandardItem (funcArea));
243243 m_model->setItem (HEADER_ROW_POLY_AREA, COLUMN_HEADER_VALUE, new QStandardItem (polyArea));
244244
245 int row = NUM_HEADER_ROWS;
246 int index = 0;
247 for (; index < points.count(); row++, index++) {
248
249 const Point &point = points.at (index);
250
251 QPointF posGraph;
252 transformation.transformScreenToRawGraph (point.posScreen (),
253 posGraph);
254
255 m_model->setItem (row, COLUMN_BODY_X, new QStandardItem (x [index]));
256 m_model->setItem (row, COLUMN_BODY_Y, new QStandardItem (y [index]));
257 m_model->setItem (row, COLUMN_BODY_INDEX, new QStandardItem (QString::number (index + 1)));
258 m_model->setItem (row, COLUMN_BODY_DISTANCE_GRAPH_FORWARD, new QStandardItem (distanceGraphForward [index]));
259 m_model->setItem (row, COLUMN_BODY_DISTANCE_PERCENT_FORWARD, new QStandardItem (distancePercentForward [index]));
260 m_model->setItem (row, COLUMN_BODY_DISTANCE_GRAPH_BACKWARD, new QStandardItem (distanceGraphBackward [index]));
261 m_model->setItem (row, COLUMN_BODY_DISTANCE_PERCENT_BACKWARD, new QStandardItem (distancePercentBackward [index]));
262 m_model->setItem (row, COLUMN_BODY_POINT_IDENTIFIERS, new QStandardItem (point.identifier()));
245 if (transformation.transformIsDefined()) {
246
247 int row = NUM_HEADER_ROWS;
248 int index = 0;
249 for (; index < points.count(); row++, index++) {
250
251 const Point &point = points.at (index);
252
253 QPointF posGraph;
254 transformation.transformScreenToRawGraph (point.posScreen (),
255 posGraph);
256
257 m_model->setItem (row, COLUMN_BODY_X, new QStandardItem (x [index]));
258 m_model->setItem (row, COLUMN_BODY_Y, new QStandardItem (y [index]));
259 m_model->setItem (row, COLUMN_BODY_INDEX, new QStandardItem (QString::number (index + 1)));
260 m_model->setItem (row, COLUMN_BODY_DISTANCE_GRAPH_FORWARD, new QStandardItem (distanceGraphForward [index]));
261 m_model->setItem (row, COLUMN_BODY_DISTANCE_PERCENT_FORWARD, new QStandardItem (distancePercentForward [index]));
262 m_model->setItem (row, COLUMN_BODY_DISTANCE_GRAPH_BACKWARD, new QStandardItem (distanceGraphBackward [index]));
263 m_model->setItem (row, COLUMN_BODY_DISTANCE_PERCENT_BACKWARD, new QStandardItem (distancePercentBackward [index]));
264 m_model->setItem (row, COLUMN_BODY_POINT_IDENTIFIERS, new QStandardItem (point.identifier()));
265 }
263266 }
264267
265268 // Unselect everything
88 #include <QHash>
99 #include <QObject>
1010
11 const ImportCropping DEFAULT_IMPORT_CROPPING = IMPORT_CROPPING_NEVER; // Traditional, and simplest, option
11 const ImportCropping DEFAULT_IMPORT_CROPPING = IMPORT_CROPPING_MULTIPAGE_PDFS; // Traditional, and simplest, option
1212
1313 ImportCroppingUtilBase::ImportCroppingUtilBase()
1414 {
6161 {
6262 QString pathAndFile; // Return empty value in OSX which is unused
6363
64 #if !defined(OSX_RELEASE) && !defined(WIN_RELEASE)
64 #if !defined(OSX_RELEASE) && !defined(WIN_RELEASE) && !defined(APPIMAGE_RELEASE)
6565 QProcessEnvironment env;
6666
6767 // Make multiple attempts until a directory is found where the log file can be written
55
66 #include "Version.h"
77
8 const char *VERSION_NUMBER = "9.0";
8 const char *VERSION_NUMBER = "9.1";
99
1010 QString engaugeWindowTitle()
1111 {
0 -errorreport ../test/add_points_without_transform.xml -regression -reset
0 <ErrorReport>
1 <Application VersionNumber="9.0"/>
2 <Document AxesPointsRequired="0" VersionNumber="9.0">
3 <Image Height="622" Width="640"><![CDATA[AAAAAYlQTkcNChoKAAAADUlIRFIAAAKAAAACbggCAAAAr+EkhgAAAAlwSFlzAAAOxAAADusBhzc2dgAAHORJREFUeJzt3cmV28iWBmCijyzhItc6bUIZkQbolBlvKTPylAFlhFzoWmuRrqAXLPFRxMDAeGP4vpWkBEkgEImf92JQ1/f9BchV13XDf/RrC+W6/1J3fpMB4Hz/E70CANAiAQwAAQQwAAQQwAAQQAADQAABDAABBDAABBDAABBAAANAAAEMAAEEMAAEEMAAEEAAA0AAAQwAAQQwAAQQwAAQ4Ev0CvCbruvuf+77PnBNYCmzFxYRwGdzkALgUkEAP+bZqH1DLjY+qwnvl3ttqOjtZd6K+TCqwUkyP3QNDkhZSg3g9N/YakKrcbf9aA/CJfkA6OiXufICeK8vy5So6zrHEVrmAFiTkgJ4auaNHpFN01LMB+pwP8rg+qTPgcZ3/ehhzQGwXMUE8HA+zf8qPv20jpNMDR59bpv8tPtkMEXY96vDomPg44+EcbaKCeAnS2ez43XR+r53EKFlT/N/0QHN0S9bZTyIY8vkow52Os1yAKxVAQFs8gFQn1Jb0PsaPVVz/8epsykvvwrs3jWd+fTEHw1/mvhxK16eiXVbMTWeKYO55SvjirVdeqJxdGLPr0DiO2dr+0ye+V1OHMbV54NPq0C27/qlo5T+JkVPvxmFBfBpu2FjdmZywnJ0NVKuYJpZ/4Lux913K1IGc2qZlM86Z8ynPuXljC1ovz/aPqopI1PcsDzaZdfvMkp1HHYWyb0FHZJkWz6067qc0/flj17+NH2ZfS39xH23ImUwN06bXZZJt+5YlsncTrR9VHPb3sAEWn082f7++35QVgqrgE/w1ClatMtX9CcPMux3Jd7JM78Jjz8N/OK/9Kv0jluRMphLb53auLaPs3R+c1Lm3vDlhR71dp8DibvvceGy7mDeZdcvGqWpn+Z52DmCAB5338erd3YO31VfpsLUCy8T6x91O9DqU++7bMWw/TV8h9FlLgmHsJdf2p4+66AD0Ms7ShMzPhO7zIHEWXfoaJzw67Zx128fpWwPOyfIvQUdYnt3Locj1EHrcOYN/t0vu7/z0q0YzcWX/7JlrfZ956PfsEQeVVGQWneWCrhOK46wUV8g0n+dFl3im7h8rL0OJSld6JoOW/PKmgONa3xnqYCfVTAJKtiEocCN2nKCcN9PudkYpVVOj6O18/VlC6O0VIUV8MwkOOcWOge43RnSik+DZWt49v1iKg4YpS0qDGC2O/NYn3LZ5LoLf5pKrPku9BE3cRVh9w0ZvcKxJvveU7TX005qJYDJ1DlX/7Zm4+MUWjNzKXtlSbxl17czSrurMIA3fvcnHzJ4F+seceD36G7+jrJDp+UJpx722vWBo1Su3APYqa8Qdfyq1LEV6dKfyPEk5QEyhdpxW+5vNTwinZYuu3/Q7rt+yyjVNPESFXYVtDBujTpsRym3JzV4EFyq7/s6nhd26K6vZpQOVVgAF8Ek25cMvmzY6kUvlL7pRgPmoA96/OtB8/+45/aYVDMKCOCajr85r3wdz5opdyt2eSDJzOa3cxwsdw40qPGdVUAAD2W4n5Y+pCl/Wa3t6i9hWW3FUDuhGCjzOZBiOP9rva+slPXcSxkBPHouIeddlfO6zci52ZC+bjlvxbyZK0jT32RLSbHLCuRglzmQ+VYnrl7ioXL1rt8+SuX+wm5XRgBfpq8fmZleJ4f0zDTK/OvCjJnVLmijct6Kl0efXTrJq6+IHh2fUvb7o3VzIP1HL0d446AtOgB2D9I/YvWu33GUZj7l5WeVKPfbkB7N3JKU5y4ZrlX+d1UN1zCfFU6/LTjnrRgafZjf1JJHf/rUChT3xMEd58DqF07t2S3foqYicPvqTb1P4q7f8itW1i/sjoqpgG8yv6aujrvcch7kRY3obLdiKGVV0zdn6Ya/nLcFjeSjc9b85PFZ8Vkza3jarn/5VuVOsy1KqoDvZu71nln4HKPfUkucWDNftx8XCDdTB1/K2YrL7KpuXMn0dJ+ft/n3b0atngMvjzOrB3ajxANg4rTZuOt3GaX5lVn9bvnzeDAACFBYCxoA6iCAASCAAAaAAAIYAAIIYAAIIIABIIAABoAAAhgAAghgAAgggAEggAAGgAACGAACCGAACCCAASCAAAaAAAIYAAIIYAAIIIABIIAABoAAAhgAAghgAAgggAEggAAGgAACGAACCGAACJBpAHdd13Vd9FoAwFG+RK/Ab4QuAI3IrgLu+77v++i1AIBj5RXAoheARuQVwADQCAEMAAEEMAAEEMAAECCv25DSuWEJgGylXFNcagCPblvXdZ8/P89fmcxd367rhuXH+/fbH/74+z+7rlEWVg9L9YzMKMMyyrCMur5dUxYrNYA51C1677l7T+K7KiMZ4EwCmGc/3r8/5eswbkUywEYCmP96KnxnzEeyMAZ4SQBzuSyJ3imPrx3W0AA8ySuAn65tvv/VIyoPtXte/vH3f2QwwDz3ATftx/v3g5LylsG7vy1ANfKqgFW6Zzq6SFUHA8xQAbfouML3iToYYEpeFTBH236x1VLqYIBRKuCG3ILw/CxUBwMMCeAmnNZzniKDAZ5oQdfv4+u3HDrA9wzOYWUAwqmAK/fj/fuf//wVvRb/ujXAlcIAFwHM+WQwwEUA1y3by49lMIAArla26Xsjg4HGCWDCyGCgZQK4TpmXv3cyGGiWAK5QKel7I4OBNgng2pSVvjcyGGiQACYLMhhojQCuSonl750MBpoigOtRdPoCtEYAkxFFMNAOAVwJ5S9AWQRwDWpKX0Uw0AgBDAABBHDxaip/bxTBQAsEcNnqS98bGQxUTwADQAABXLBay98bRTBQNwFcqrrTF6B6ArhIjaSvIhiomAAGgAACuDyNlL83imCgVgK4ME2l740MBqokgAEggAAuSYPl740iGKiPAAaAAAK4GM2WvzeKYKAyAphiyGCgJgK4DI2XvwD1EcCURBEMVEMAF0D5C1AfAUxhFMFAHQRw7pS/AFUSwJRHEQxUQABnTfk7RQYDpRPAABBAAOdL+TtPEQwUTQADQAABnCnlbwpFMFCuLyte03Xd/c993y9aftTtTaYWS/kIACjL4gr4KSZfhisrKH/TKYKBQi2rgG9x+1iSdl3Xdd18kTr10+G7zSwMADVZUAHPFLvq4B0pf5dSBAMlWtyC3qtgHS1/AaARMVdBS1/2pQgGirPmKuhD3bvZbcaz/jNAIwIq4MTy93Z51ylrBACn65NNLb/X+4wuNrXkyaN0jo+v36JXoWwGEMhEShqe3YJOP/vb9/1MBTz6Dl3Xff783LJ6sX68fz9i/a9v16KHJd2iAWxnWJYyMqMMyyjDMur6dk1Z7NQWtJbyDGd/t3MpFlCQgHPAtTaQASDdeY+iVP7OUP7uRREMlGJBAM9Urv3g4ZTb/2cFgQ1AxZZdhHW7MOopGvdqKY8mbgv9auUvQINOehTlinK24tuNOJQuNFCENbchzefi6E8T7ztasTKlU/4CtCnmWdBwKEUwkD8BHEn5C9AsAQwAAQRwGOXvoXShgcwJYAAIIIBjKH9PoAgGciaAASCAAA6g/AVAAFMzXWggWwIYAAII4LPpP59MEQzkSQADQAABfCrlLwA3Apj66UIDGRLAABBAAJ9H/zmQIhjIjQAGgAACmFYogoGsCOCT6D8D8EgAA0AAAXwG5W8mdKGBfAhgAAgggGmLIhjIhAA+nP4zAEMCGAACCOBjKX8zpAsN5EAAA0CAL9ErAAH++Ps/H+/RKwG0TQV8IP1nAKYIYAAIIICPovzN3J///OVSLCCQAAaAAAIYAAII4EPoPxfBDcFAIAEMAAEEMAAEEMD7038uiC40EEUAA0AAAbwz5W9xFMFACAEMAAEEMAAEEMB70n8ulC40cD4BDAABBPBulL8ApBPAcLnoQgOn+3LQ+3Zdd/9z3/dLX/Io8eUAUJBDKuCnKJ1K1proPwOwyP4BfIvb/sFlSQb3A7uvIYzShQbOtHMAzwRtxXWw8heApQ5pQT+VrapYAHjiKmj4L11o4DRHXQW92r1TXUrdrP8MwBrDi562mHrPlM9atHonjU6Cj6/foleBPdmhwHYpiZlRBfwUq7dSuOu60bgd/ceu6z5/fh60elN+vH8//0MXub5dM1/DEDPD8vF+abmrYcKMMiyjDMuo69s1ZbF8zwFnVeZO0X8GYJ18AxiiuBQLOIEAXk/5C8BqHkUJAAF2DuCZE7ePP+p+mXkrsU0gXWjgaPtfBd33/TBcU66oGk3cbC/F0n8GYIt8H0WZ2/2+ALCjoy7Cmn9oxuiPsn3UBm3ShQYO5SroNfSfAdhIAANAAAEMk3ShgeMIYADKUNkXYgG8mBPAAGwngGGOLjRkor7iRwADQAABvEx9X8EACCGA4QVdaAhXZfEjgAEggABeoMqvYACEEMDwmi40sDsBDEDWau0+CuBUtc4AEimCgX0JYAAIIIAByFfF3UcBnKTiGUA6XWhgRwIYAAIIYAAyVXf3UQDDArrQwF4E8Gt1fwUDIIQABiBH1Rc/AhiW0YUGdiGAX6j+KxgAIQQwANlpofgRwLCYLjSwnQCe08JXMABCCGAACCCAYQ1daDhOI91HATypkRkAQAgBDAABBDCspAsNR2in+yiAASCAAB7XzlcwAEIIYFhPFxr21VTxI4ABIIAAHtHUVzAAQghgALLQWvEjgGETp4GBdQTws9a+ggEQQgADQAABDFvpQsN2DXYfBfBvGpwBAIQQwAAQYE0Adw/WvWr0hd2EFWsIJ9OFhi3a7D4uDuCnREwJyNEczTBZ25wBAIT4smjpW2r2ff/4L13XPf7LqKcFbu8z+sKXbwUAFVhQAc/UrPPlrJSlBbrQsE6z3cfFLein7BSlALCCq6D/1exXMABCxATwfDfbxc8UShcalmq5+ImsgOfb12IYgJr1yaaW3+t9RhebWnLfQfj4+m3fN6RZ5hIsUuuvTEoaLrsNabvhjUxT+r6fqYBH36Hrus+fnyvW6sf793UvLML17Vrx1q123LB8vF+KbqmZMKMMy6iNw3LrP39eCv59GXV9u6YsdmoLOj19T1b04RKAEp0XwNmmLwCc74xHUV6kLy1xLTSQYkEAz8RnP3g45WMwr7uY2SXQABVr+Qakm2UXYd0ujHqKxvS6dpipT8k9+omL1hAAipDvoyiPuN0IzqELDby05jak+Vwc/jQxR8UtQCP0ny+eBQ0AIQQwHEIXGpgngAE4lf7zjQAGgAACGAACCGA4itPAMKT/fCeAASCAAAaAAAIYDqQLDUwRwACcxAngRwIYAAIIYDiWLjQwSgADcAb95ycCGAACCGA4nC40MCSAATic/vOQAAaAAAIYzqALDTwRwAAcS/95lAAGgAACGE6iCw08EsAAHEj/eYoABoAAAhgAAghgOI/TwMCdAAbgKE4AzxDAABBAAMOpdKGBGwEMwCH0n+cJYAAIIIDhbLrQwOVy+RK9AgBUSP95Std1tz+ogAHgVH3fX3oBDADn6i7d5f8EMERwGpi66T+nEMAAEEAAA8Dp/lcAQxBdaGql//xad7m4DQkAztT3/e0PKmAACCCAASCAAIYwTgNTHyeA0wlgAAgggAEggACGSLrQ1ET/eZHsbkO6/zcRl4drtQGgMnlVwI/pO/wrAFQjowC+xW3/4CKDaYAuNHXQf14qlwCeCVoZDEB9cgngm6eTvs4BA1CrvAIYgBLpP68ggCGe08DQIAEMABH6PEytzPy/QzU+vn6LXgVYyewdSgm+7B7EkWg0g7uu+/z5ef7KZO76djUsQxkOy8f7JYezaBmOTA4My6jbsPx4/25wHl3frimLaUEDQAABDAAB8gpgj6KkZa6FpkRuQFotlwCeua7KJVcA1Ceji7D6vu+67qnqlb4AVCmXCvim9yhKgHJ8fP2m/7xaXgF8GfxvSNAUp4GhHdkFMAC0QAADsMaP9+9//vNX9FoUTABDXnShoRECGAACCGAAFvP8je0EMAAEEMCQHaeBoQUCGAACCGAAlnECeBcCGHKkCw3VE8AAEEAAA7CA/vNeBDBkShca6iaAASCAAAYglf7zjgQwAAQQwJAvp4GhYgIYgCT6z/sSwAAQQABD1nShoVYCGIDX9J93J4ABIIAAhtzpQkOVBDAABBDAALzgBPARBDAUQBca6iOAASCAAAZgjv7zQQQwAAQQwFAGp4GhMgIYgEn6z8cRwAAQQABDMXShoSYCGIBx+s+HEsAAEEAAQ0l0oaEaAhiAEfrPRxPAABBAAENhdKGhDgIYAAIIYACeOQF8AgEM5dGFhgoIYAAIIIAB+I3+8zkEMBRJFxpK92XpC7quu/+57/t1Lxx97dMC6z4FAIqwrAJ+ysipyBy+arhk4msBOJP+82kWBPAtMvsHl+Qc7X/3+IbzSyp/YYouNBQtNYBngvZlBg9DVKwC0LhlLein4JSjADXRfz6Tq6ABIEBMAM83tEcv2gKGnAaGgg0veho1tfCiN5l/1aLVO2FkoAgfX79FrwKVMJd2lBKFi+8D3u5+NfVwdYeLdV03Grej/9h13efPz91WtBbXt6thGapmWH68f993Q6oZmX21MCwr5lILw7LC9e2asthIC7r73b6rNZW+Q8pcSKELDYU69RxwevoCQN1GWtAHBaT0BciWG5DOd8ajKC/SF46kCw0lSg3gmewcXjz1dPJ43YlkdyIBULEFV0H3fT+8LGtRUTvM1MeXTz0aOv39AVhB/zlEvo+idL8vpNOFhuIsvg/4ZSi+vMF39TsDQDU8CxqgafrPUQQwVEIXGsoigAEggAAGaJf+cyABDPXQhYaCCGAACCCAARql/xxLAANAAAEMVXEaGEohgAFapP8cTgADQAABDLXRhYYiCGAACCCAAZrjBHAOBDBUSBca8ieAASCAAAZoi/5zJgQw1EkXGjIngAEggAAGaIj+cz4EMFRLFxpyJoABIIAABmiF/nNWBDDUTBcasiWAASCAAAZogv5zbgQwVE4XGvIkgAEggAAGqJ/+c4YEMNRPFxoyJIABIIAAhiYoglum/5wnAQwAAQQwAAQQwNAKXeg26T9nSwADQAABDAABBDA0RBe6NfrPORPAABBAAANAAAEMbdGFhkwIYIA6OQGcOQEMAAEEMDRHFxpy8OWg9+267v7nvu9XvOpR+jsAcNF/LsEhFfBTjk7FKgA0a/8AvsVt/+CyMIP7gd1XEhqnCw3hdg7gmaBVBwOcQ/+5CIe0oJ9qViUsADxxFTQ0ShcaYh11FfQW92a10hlgKf3nUmRdAXdd58wxAHUaXnK8xdR7rvusmZUMGCmo0cfXb9GrwM7s0xykZNz6FvRTbXpEKPZ9v+jRHF3Xff783H01Snd9uxqWIcNy8+P9+9M4GJlRpQzLrf/8eTmpBV3KsJzs+nZNWSzrFjQA1Gp9AOsJQwVcCw1RPIoSoBKufy7LzgE8Uwo//aj7ZebdJDecQBEMIfa/D/h25dS6S7RGE1d/G+Al5W9xsn4UpbPLANTqqKugX16fNfpTF3ZBCF1oOJ/bkACKp/9cIgEMAAEEMHC56ELD6QQwQNn0nwslgAEggAAG/qULXSLlb7kEMAAEEMAAEGD/R1EC5frj7/98vEevBMn0n4umAgaAAAIYoEjK39IJYOA3f/7zl2uh4QQCGAACCGDgmRuC86f/XAEBDAABBDBAYZS/dRDAwAhdaDiaAAaAAAIYGKcIzpP+czUEMAAEEMAAEEAAA5N0oXOj/1wTAQwAAQQwMEcRnA/lb2UEMAAEEMAAEEAAAy/oQudA/7k+AhgAAghg4DVFcCzlb5UEMAAEEMAAEEAAA0l0oaPoP9dKAANAAAEMpFIEn0/5WzEBDAABBDAABBDAwAK60GfSf66bAAaAAAIYWEYRDLsQwAA50n+ungAGgAACGFhMF/poyt8WCGAACCCAgTUUwbCRAAbIi/5zI74sfUHXdfc/932/9CWjbu8ztVjipwBAQZZVwE8Z+TJZgYrpQh9B+duOBRXwLW4f69Gu67que1mhTi0wfMOZhQGgJqkV8Eyxqw6GZimC96X8bcqyFvSO1epo+QsAjYi5Clr6AjxR/rYmu9uQul+iVwRIogsN6wQEcGL5K4aBdih/W9SnmVp40Zssesn8Gp48SsC8j6/folehbAawMilpOHIb0lPduW/apZ/97ft+pgIefYeu6z5/fm5ZvSpd366GZciwTFk3Mj/ev9c9nodOmFv5+3kprwL2ezTq+nZNWezUFrSWMtTKmWBYaqQCPrrBq4EMcOfsb7POexSl8hfqpgiGRVIDeKZsffrR/H1E6eWvwAaqp/xt2YIKuP/1fxY9RuyO/eTud48fChRBEQzpTnoU5Ypy1u1GQN2Uv41bfBX0y5txR3+acv+uO32hAopgSJTdoygBWqD8RQADO1MEQwoBDOxPBs9T/nIRwAAQQgADh1AET1H+ciOAASCAAAaOoggeUv5yJ4ABIIAABg6kCH6k/OWRAAaOJYNhlAAGOIPylycCGDicIhiGBDDA4ZS/DAlg4AyKYHgigAGOpfxllAAGTqIIhkcCGOBAyl+mCGDgPIpguBPAwKmaymDlLzMEMMAhpC/zBDBwtqaKYJgigAH2p/zlJQEMBKi7CJa+pBDAAHuSviQSwECMuotgeEkAA+xG+Us6AQyEqawIlr4sIoCBSNVksPRlKQEMBKsmg2ERAQzEKz2Dlb+sIICBLJSbwdKXdQQwkIsSM1j6spoABoAAAhjISFlFsPKXLQQwkJdSMlj6spEABrKTfwZLX7YTwECO8s9g2EgAA5nKNoOVv+xCAAP5yjCDpS97EcBA1rLKYOnLjgQwkLusMhj2IoCBAuSQwcpf9iWAAV77+PpN+rIvAQyUIaoI/vH+/cf79z//+ev8j6ZuX6JXACDVLYNPq0Rvef/vx70JYHaWaQB3XXe5XPq+j14RIC/nZPBv0QvHyCuAb7kLMOPQDBa9nCavAL78qnolMTDjfj54x6QUvZwsrwDWcwYS3ZLy8bKs1dkpegmRVwADLPKYmvcwTo9S0UsgAQxU4p6jKWWx6CWcAAZqM1oWX37vWotewnV5nnZ9eRuSq7SApT6+frtcLh6pwQlSsrXUAJ56VZ6bE8uwjDIsU4zMKMMyyrCMShyWgBb0U/Fq5wHQIM+CBoAAARWwkhcAVMAAEEAAA0CAvO4Dfro+6/5XXWsAKpPXFeRTd/dmtZIAsF1eAQwAjXAOGAACCGAACCCAASCAAAaAAAIYAAIIYAAIIIABIEBeT8Ja7fEJHu5svnikycD8/zDd7PyZGpY250/i/5Ta4Gx5OTINTpjhJq+YMDVUwFMPsITul/llZv5apZRhacroaIyOT2uzJX1kWDFhiq+Ah1/hbzOm4m9e6QzC5dcgTB0ymp0/88PyuEwjnjb2NjJPM6HN2ZIyMqNL1m20DbB0wpRdAc8cPnxH4/LqiNDs/GnqQJkiJUvanC2Np+wWKROm7AC+eZoQ5geLmD+kM1tYZH7C1BDAABBo/jLPKcWfA2aG/1CZLVqePxV3lTdK6ay2NmHWpe9FADdi9fyAS8Pzp8FNTpRydUX1o7f9hjQBXKf0CxdhqPH500h+rDA1Mm1OmPvW3W/WWrq9zgE3oe5fA47W1PyRvlPSR6a10XtM4kUvFMAA/5K+U4zMvHUjI4ABLhcZM83IHKSGAG7t4XDsy/zhkpwxDc4W6bvF/IQpO4Bn5oTp8qiFw8QK5k+i6udPyga2OVvW7frqJ8xQ+v/N8PijGq5SW7TljRj9BWhwWFL+k5YG58/LYWlt/swExuj1vTMLVCZxZFqbMJfkTZ6fMGVXwDceDvdS3/eGZYr585L5c2e2pGhzwoxu8vyEqaECBoDi1FABA0BxBDAABBDAABBAAANAAAEMAAEEMAAEEMAAEEAAA0AAAQwAAQQwAAQQwAAQ4P8Bi2bMgYfRJ78AAAAASUVORK5CYII=]]></Image>
4 <CoordSystem>
5 <General ExtraPrecision="1" CursorSize="3"/>
6 <Coords UnitsX="0" UnitsThetaString="Degrees (DDD.DDDDD)" UnitsY="0" TypeString="Cartesian" Type="0" UnitsRadiusString="Number" ScaleXThetaString="Linear" UnitsTimeString="HH:MM:SS" UnitsRadius="0" Coords="0" UnitsDate="3" ScaleXTheta="0" ScaleYRadiusString="Linear" UnitsYString="Number" UnitsXString="Number" ScaleYRadius="0" UnitsTime="2" UnitsTheta="0" UnitsDateString="YYYY/MM/DD"/>
7 <DigitizeCurve CursorInnerRadius="5" CursorStandardCross="True" CursorLineWidth="2" CursorSize="1"/>
8 <Export PointsSelectionFunctions="0" PointsIntervalUnitsFunctions="1" PointsIntervalRelations="10" PointsSelectionFunctionsString="InterpolateAllCurves" Delimiter="0" LayoutFunctionsString="AllPerLine" PointsSelectionRelations="0" PointsIntervalUnitsRelations="1" HeaderString="Simple" XLabel="x" OverrideCsvTsv="True" PointsIntervalFunctions="10" LayoutFunctions="0" Header="1" PointsSelectionRelationsString="Interpolate" DelimiterString="Commas">
9 <CurveNamesNotExported/>
10 </Export>
11 <AxesChecker Mode="1" LineColor="6" Seconds="3"/>
12 <GridDisplay StopY="1" CountX="2" StartX="0" CountY="2" StartY="0" StepX="1" StepY="1" DisableX="0" Color="0" ColorString="Black" DisableY="0" Stable="False" StopX="1"/>
13 <GridRemoval StopY="0" DefinedGridLines="False" CoordDisableYString="Count" CoordDisableX="0" CountX="2" StartX="0" CoordDisableXString="Count" CoordDisableY="0" CountY="2" StartY="0" CloseDistance="10" StepX="0" StepY="0" Stable="False" StopX="0"/>
14 <PointMatch PointSize="48" ColorCandidate="7" ColorCandidateString="Yellow" ColorAcceptedString="Green" ColorRejected="6" ColorAccepted="4" ColorRejectedString="Red"/>
15 <Segments LineColorString="Green" LineColor="4" MinLength="2" LineWidth="4" PointSeparation="25" FillCorners="False"/>
16 <Curve CurveName="Axes">
17 <ColorFilter SaturationLow="50" Mode="2" ForegroundLow="0" HueHigh="360" ValueLow="0" IntensityHigh="50" HueLow="180" CurveName="Axes" ForegroundHigh="10" IntensityLow="0" SaturationHigh="100" ModeString="Intensity" ValueHigh="50"/>
18 <CurveStyle CurveName="Axes">
19 <LineStyle ConnectAsString="ConnectSkipForAxisCurve" Color="8" ColorString="Transparent" ConnectAs="4" Width="0"/>
20 <PointStyle Shape="1" LineWidth="1" ShapeString="Cross" Color="6" ColorString="Red" Radius="10"/>
21 </CurveStyle>
22 <CurvePoints/>
23 </Curve>
24 <CurvesGraphs>
25 <Curve CurveName="Curve1">
26 <ColorFilter SaturationLow="50" Mode="2" ForegroundLow="0" HueHigh="360" ValueLow="0" IntensityHigh="50" HueLow="180" CurveName="Curve1" ForegroundHigh="10" IntensityLow="0" SaturationHigh="100" ModeString="Intensity" ValueHigh="50"/>
27 <CurveStyle CurveName="Curve1">
28 <LineStyle ConnectAsString="FunctionSmooth" Color="1" ColorString="Blue" ConnectAs="0" Width="1"/>
29 <PointStyle Shape="1" LineWidth="1" ShapeString="Cross" Color="1" ColorString="Blue" Radius="10"/>
30 </CurveStyle>
31 <CurvePoints/>
32 </Curve>
33 </CurvesGraphs>
34 </CoordSystem>
35 <OperatingSystem WordSize="32" Endian="LittleEndian"/>
36 <File Imported="True"/>
37 <CmdMediator>
38 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
39 <Point ScreenX="90" ScreenY="264" Identifier="Curve1&#x9;point&#x9;0" Ordinal="1"/>
40 <Point ScreenX="98" ScreenY="240" Identifier="Curve1&#x9;point&#x9;1" Ordinal="1"/>
41 <Point ScreenX="105" ScreenY="216" Identifier="Curve1&#x9;point&#x9;2" Ordinal="1"/>
42 </Cmd>
43 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
44 <Point ScreenX="109" ScreenY="204" Identifier="Curve1&#x9;point&#x9;3" Ordinal="3.5"/>
45 <Point ScreenX="118" ScreenY="181" Identifier="Curve1&#x9;point&#x9;4" Ordinal="3.5"/>
46 <Point ScreenX="128" ScreenY="158" Identifier="Curve1&#x9;point&#x9;5" Ordinal="3.5"/>
47 </Cmd>
48 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
49 <Point ScreenX="135" ScreenY="142" Identifier="Curve1&#x9;point&#x9;6" Ordinal="6.5"/>
50 <Point ScreenX="147" ScreenY="120" Identifier="Curve1&#x9;point&#x9;7" Ordinal="6.5"/>
51 <Point ScreenX="161" ScreenY="99" Identifier="Curve1&#x9;point&#x9;8" Ordinal="6.5"/>
52 </Cmd>
53 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
54 <Point ScreenX="184" ScreenY="86" Identifier="Curve1&#x9;point&#x9;9" Ordinal="9.5"/>
55 <Point ScreenX="206" ScreenY="95" Identifier="Curve1&#x9;point&#x9;10" Ordinal="9.5"/>
56 <Point ScreenX="222" ScreenY="113" Identifier="Curve1&#x9;point&#x9;11" Ordinal="9.5"/>
57 <Point ScreenX="234" ScreenY="135" Identifier="Curve1&#x9;point&#x9;12" Ordinal="9.5"/>
58 </Cmd>
59 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
60 <Point ScreenX="241" ScreenY="149" Identifier="Curve1&#x9;point&#x9;13" Ordinal="13.5"/>
61 <Point ScreenX="250" ScreenY="172" Identifier="Curve1&#x9;point&#x9;14" Ordinal="13.5"/>
62 </Cmd>
63 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
64 <Point ScreenX="265" ScreenY="211" Identifier="Curve1&#x9;point&#x9;15" Ordinal="15.5"/>
65 <Point ScreenX="273" ScreenY="235" Identifier="Curve1&#x9;point&#x9;16" Ordinal="15.5"/>
66 <Point ScreenX="281" ScreenY="258" Identifier="Curve1&#x9;point&#x9;17" Ordinal="15.5"/>
67 </Cmd>
68 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
69 <Point ScreenX="286" ScreenY="274" Identifier="Curve1&#x9;point&#x9;18" Ordinal="18.5"/>
70 <Point ScreenX="293" ScreenY="298" Identifier="Curve1&#x9;point&#x9;19" Ordinal="18.5"/>
71 <Point ScreenX="300" ScreenY="322" Identifier="Curve1&#x9;point&#x9;20" Ordinal="18.5"/>
72 </Cmd>
73 <Cmd Type="CmdAddPointsGraph" CurveName="Curve1" Description="Add graph points">
74 <Point ScreenX="305" ScreenY="337" Identifier="Curve1&#x9;point&#x9;21" Ordinal="21.5"/>
75 <Point ScreenX="312" ScreenY="361" Identifier="Curve1&#x9;point&#x9;22" Ordinal="21.5"/>
76 <Point ScreenX="320" ScreenY="385" Identifier="Curve1&#x9;point&#x9;23" Ordinal="21.5"/>
77 </Cmd>
78 </CmdMediator>
79 <Error Context="Shift+Control+E" Comment="userTriggered" File="src/main/MainWindow.cpp" Line="1355"/>
80 </Document>
81 </ErrorReport>