author | mickeyl <mickeyl> | 2002-11-26 19:37:54 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2002-11-26 19:37:54 (UTC) |
commit | ac4f32931212847803534a72eb5e951bd01e6ff5 (patch) (side-by-side diff) | |
tree | b4769af43d5894f68ae2e8a3f9813d64e03841ce | |
parent | 5698d4fb5134c9d493f5a3f81675e7d094597203 (diff) | |
download | opie-ac4f32931212847803534a72eb5e951bd01e6ff5.zip opie-ac4f32931212847803534a72eb5e951bd01e6ff5.tar.gz opie-ac4f32931212847803534a72eb5e951bd01e6ff5.tar.bz2 |
stations belonging to one net (SSID) are shown in tree structure
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.cpp | 17 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.h | 28 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlistitem.cpp | 30 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlistitem.h | 10 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 29 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.h | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.ui | 318 | ||||
-rw-r--r-- | noncore/net/wellenreiter/wellenreiter.pro | 4 |
8 files changed, 406 insertions, 31 deletions
diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp new file mode 100644 index 0000000..f907afc --- a/dev/null +++ b/noncore/net/wellenreiter/gui/scanlist.cpp @@ -0,0 +1,17 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include "scanlist.h" + diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h new file mode 100644 index 0000000..5cf3053 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/scanlist.h @@ -0,0 +1,28 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef SCANLIST_H +#define SCANLIST_H + +#include <qlistview.h> + +class QString; + +class MScanList: public QListView +{ +}; + +#endif + diff --git a/noncore/net/wellenreiter/gui/scanlistitem.cpp b/noncore/net/wellenreiter/gui/scanlistitem.cpp index 3a5ac4e..63caefb 100644 --- a/noncore/net/wellenreiter/gui/scanlistitem.cpp +++ b/noncore/net/wellenreiter/gui/scanlistitem.cpp @@ -6,43 +6,59 @@ ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "scanlistitem.h" #include <qpe/resource.h> #include <assert.h> #include <qpixmap.h> const int col_type = 0; +const int col_essid = 0; const int col_sig = 1; -const int col_essid = 2; -const int col_ap = 3; -const int col_channel = 4; -const int col_wep = 5; +const int col_ap = 2; +const int col_channel = 3; +const int col_wep = 4; +const int col_traffic = 5; MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString ap, bool wep, int channel, int signal ) - :QListViewItem( parent, QString::null, QString::null, essid, ap, - QString::null, QString::null ) + :QListViewItem( parent, essid, ap, QString::null, QString::null, QString::null ) { + qDebug( "creating scanlist item" ); + decorateItem( type, essid, ap, wep, channel, signal ); +} +MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString ap, + bool wep, int channel, int signal ) + :QListViewItem( parent, essid, ap, QString::null, QString::null, QString::null ) +{ qDebug( "creating scanlist item" ); + decorateItem( type, essid, ap, wep, channel, signal ); +} + +void MScanListItem::decorateItem( QString type, QString essid, QString ap, bool wep, int channel, int signal ) +{ + qDebug( "decorating scanlist item" ); // set icon for managed or adhoc mode QString name; name.sprintf( "wellenreiter/%s", (const char*) type ); setPixmap( col_type, Resource::loadPixmap( name ) ); // set icon for wep (wireless encryption protocol) if ( wep ) setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); // rename the pixmap! // set channel and signal text setText( col_sig, QString::number( signal ) ); setText( col_channel, QString::number( channel ) ); -} + + listView()->triggerUpdate(); + +}
\ No newline at end of file diff --git a/noncore/net/wellenreiter/gui/scanlistitem.h b/noncore/net/wellenreiter/gui/scanlistitem.h index 133551a..a786482 100644 --- a/noncore/net/wellenreiter/gui/scanlistitem.h +++ b/noncore/net/wellenreiter/gui/scanlistitem.h @@ -19,23 +19,33 @@ #include <qlistview.h> class QString; class MScanListItem: public QListViewItem { public: MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString ap, bool wep, int channel, int signal ); + MScanListItem::MScanListItem( QListViewItem* parent, + QString type, + QString essid, + QString ap, + bool wep, + int channel, + int signal ); + + protected: + virtual void decorateItem( QString type, QString essid, QString ap, bool wep, int channel, int signal ); }; #endif diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 96ab7bd..afb010c 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -22,32 +22,33 @@ #include <unistd.h> #include <sys/types.h> // Local #include "wellenreiter.h" #include "scanlistitem.h" #include "../libwellenreiter/source/sock.hh" // <--- ugly path, FIX THIS! #include "../daemon/source/config.hh" // <--- ugly path, FIX THIS! Wellenreiter::Wellenreiter( QWidget* parent, const char* name, WFlags fl ) : WellenreiterBase( parent, name, fl ) { connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) ); + netview->setColumnWidthMode( 1, QListView::Manual ); // // setup socket for daemon communication and start poller // daemon_fd = commsock( DAEMONADDR, DAEMONPORT ); if ( daemon_fd == -1 ) qDebug( "D'oh! Could not get file descriptor for daemon socket." ); else startTimer( 700 ); } Wellenreiter::~Wellenreiter() { // no need to delete child widgets, Qt does it all for us @@ -73,29 +74,53 @@ bool Wellenreiter::hasMessage() } void Wellenreiter::timerEvent( QTimerEvent* e ) { // qDebug( "checking for message..." ); if ( hasMessage() ) { handleMessage(); } else { // qDebug( "no message :(" ); } } +void Wellenreiter::addNewStation( QString type, QString essid, QString ap, bool wep, int channel, int signal ) +{ + // FIXME: this code belongs in customized QListView, not into this class + + // search, if we had an item with this essid once before + + QListViewItem* item = netview->firstChild(); + + while ( item && ( item->text( 0 ) != essid ) ) + { + qDebug( "itemtext: %s", (const char*) item->text( 0 ) ); + item = item->itemBelow(); + } + if ( item ) + { + qDebug( "found!" ); + new MScanListItem( item, type, essid, ap, wep, channel, signal ); + } + else + { + new MScanListItem( netview, type, essid, ap, wep, channel, signal ); + } +} + void Wellenreiter::buttonClicked() { // FIXME: communicate with daemon and set button text according to state button->setText( "Stop Scanning" ); // add some icons, so that we can see if this works - new MScanListItem( netview, "managed", "MyNet", "04:00:20:EF:A6:43", true, 6, 80 ); - new MScanListItem( netview, "adhoc", "YourNet", "40:03:A3:E7:56:22", false, 11, 30 ); + addNewStation( "managed", "MyNet", "04:00:20:EF:A6:43", true, 6, 80 ); + addNewStation( "adhoc", "YourNet", "40:03:A3:E7:56:22", false, 11, 30 ); } diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h index 206f364..b0f41e3 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.h +++ b/noncore/net/wellenreiter/gui/wellenreiter.h @@ -20,28 +20,29 @@ class QTimerEvent; class Wellenreiter : public WellenreiterBase { Q_OBJECT public: Wellenreiter( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~Wellenreiter(); protected: virtual void timerEvent( QTimerEvent* ); public slots: void buttonClicked(); + void addNewStation( QString type, QString essid, QString ap, bool wep, int channel, int signal ); private: int daemon_fd; // socket filedescriptor for udp communication socket bool hasMessage(); void handleMessage(); //void readConfig(); //void writeConfig(); }; #endif diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.ui b/noncore/net/wellenreiter/gui/wellenreiterbase.ui index fbfe716..b290b49 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.ui +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.ui @@ -1,30 +1,30 @@ <!DOCTYPE UI><UI> <class>WellenreiterBase</class> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>WellenreiterBase</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>203</width> + <width>191</width> <height>294</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>Wellenreiter</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> <vbox> <property stdset="1"> <name>margin</name> @@ -57,180 +57,455 @@ <string>Networks</string> </attribute> <vbox> <property stdset="1"> <name>margin</name> <number>2</number> </property> <property stdset="1"> <name>spacing</name> <number>2</number> </property> <widget> <class>QListView</class> <column> <property> <name>text</name> - <string>Net</string> + <string>SSID</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> <string>Sig</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> - <string>SSID</string> + <string>AP</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> - <string>AP</string> + <string>Chn</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> - <string>Chn</string> + <string>W</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> - <string>WEP</string> + <string>T</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <property stdset="1"> <name>name</name> <cstring>netview</cstring> </property> <property stdset="1"> <name>frameShape</name> <enum>StyledPanel</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Sunken</enum> </property> + <property stdset="1"> + <name>rootIsDecorated</name> + <bool>true</bool> + </property> </widget> </vbox> </widget> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>Log</cstring> </property> <attribute> <name>title</name> <string>Log</string> </attribute> <vbox> <property stdset="1"> <name>margin</name> <number>2</number> </property> <property stdset="1"> <name>spacing</name> <number>2</number> </property> <widget> <class>QMultiLineEdit</class> <property stdset="1"> <name>name</name> <cstring>Log</cstring> </property> + <property stdset="1"> + <name>text</name> + <string>11/18 18:15 - log started +11/19 20:13 - new net : "ELAN" +11/19 20:15 - new station : "pegasus"</string> + </property> </widget> </vbox> </widget> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> - <cstring>About</cstring> + <cstring>tab</cstring> </property> <attribute> <name>title</name> - <string>About</string> + <string>Hex</string> </attribute> - <vbox> + <grid> <property stdset="1"> <name>margin</name> - <number>8</number> + <number>2</number> </property> <property stdset="1"> <name>spacing</name> <number>2</number> </property> - <widget> + <widget row="0" column="0" > + <class>QMultiLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>Log_2</cstring> + </property> + <property stdset="1"> + <name>palette</name> + <palette> + <active> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>192</red> + <green>192</green> + <blue>192</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>223</red> + <green>223</green> + <blue>223</blue> + </color> + <color> + <red>96</red> + <green>96</green> + <blue>96</blue> + </color> + <color> + <red>128</red> + <green>128</green> + <blue>128</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>128</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </active> + <disabled> + <color> + <red>128</red> + <green>128</green> + <blue>128</blue> + </color> + <color> + <red>192</red> + <green>192</green> + <blue>192</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>220</red> + <green>220</green> + <blue>220</blue> + </color> + <color> + <red>96</red> + <green>96</green> + <blue>96</blue> + </color> + <color> + <red>128</red> + <green>128</green> + <blue>128</blue> + </color> + <color> + <red>128</red> + <green>128</green> + <blue>128</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>128</red> + <green>128</green> + <blue>128</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>128</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </disabled> + <inactive> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>192</red> + <green>192</green> + <blue>192</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>220</red> + <green>220</green> + <blue>220</blue> + </color> + <color> + <red>96</red> + <green>96</green> + <blue>96</blue> + </color> + <color> + <red>128</red> + <green>128</green> + <blue>128</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + <color> + <red>0</red> + <green>0</green> + <blue>128</blue> + </color> + <color> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </inactive> + </palette> + </property> + <property stdset="1"> + <name>font</name> + <font> + <family>adobe-courier</family> + <pointsize>8</pointsize> + </font> + </property> + <property stdset="1"> + <name>text</name> + <string>00 0a 20 00 a8 00 e2 00 ...ESD.. +00 0a 20 00 a8 00 e2 00 .*&23... +00 0a 20 00 a8 00 e2 00 ........ +00 0a 20 00 a8 00 e2 00 ........ +00 0a 20 00 a8 00 e2 00 ........ +00 0a 20 00 a8 00 e2 00 ...BRA22</string> + </property> + </widget> + </grid> + </widget> + <widget> + <class>QWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>about</cstring> + </property> + <attribute> + <name>title</name> + <string>About</string> + </attribute> + <grid> + <property stdset="1"> + <name>margin</name> + <number>11</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget row="0" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> - <cstring>PixmapLabel1_3</cstring> + <cstring>PixmapLabel1_3_2</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>0</hsizetype> <vsizetype>0</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>frameShape</name> <enum>Panel</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Sunken</enum> </property> @@ -249,79 +524,82 @@ <property stdset="1"> <name>pixmap</name> <pixmap>image0</pixmap> </property> <property stdset="1"> <name>scaledContents</name> <bool>true</bool> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> - <widget> + <widget row="1" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> - <cstring>TextLabel1_4</cstring> + <cstring>TextLabel1_4_2</cstring> </property> <property stdset="1"> <name>font</name> <font> <family>adobe-helvetica</family> <pointsize>10</pointsize> </font> </property> <property stdset="1"> <name>text</name> - <string>Max Moser | Martin J. Muench<br> -Steffen Kewitz | Dario Luethi<br> -Karl Schoepf | Michael Lauer<p> -<b>www.remote-exploit.org</b></string> + <string><p align=center> +<hr> +Max Moser<br> +Martin J. Muench<br> +Michael Lauer<br><hr> +<b>www.remote-exploit.org</b> +</p></string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> - </vbox> + </grid> </widget> </widget> <widget> <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>button</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>1</hsizetype> <vsizetype>0</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>text</name> <string>Start Scanning</string> </property> </widget> </vbox> </widget> <images> <image> <name>image0</name> - <data format="XPM.GZ" length="49140">789ced9dd953233bd6e0dffbafb8d17aeb98d08737b063621e3060c0d86076ccc43c68cb54eeac063331fffb483ae708432db7aa6fd5a5fa8bea0c6ef1b3944ae9e4d974324dffd7bffeb89a4dfff8d77ffde3fe413c64ea0f65c5dd1fffd28f55b5fcdfffe77ffddf7ffcb3d55bfba3b5d6733f1b9d3fdafffc1ffff867a6ff507fb0b5f0bfc069e47e6083dc85f6621119da93c0fd78fe6564683f47c6f3331b39b4db23e43ef221b2022e5bc4ad707e3ef2dc8af3ad9e91693e67c8d8dfce80fde1b9be47eee2789b81e3fcf36b649caf3d0676fdc3f8550bb98fe34f2343fb03b2022eb781db6bc0f5ade7769c7fd145c6f9172d607f46984f8aac902f81fd11d6bb83dc05aef7030f68fc7a1c398cdf4860d77f10e63f41ee03e77364059c5d78eeb488f37de24e2bb4bf0077d6809b297217b87a0a1ce7534960d70ee32f91fbd85f440eedd523b202cec37abb2d1aaf59027754379c6f0f80bb6bc07982dc05ae7a9145e022b088f77f17b88dedd91a721f3903a6f3f30132b63787c80ab8683cf7da24ffb20fdc56bd607f4d02dc5903ceb681e9fc6c440cedb904ee61ffba8c0cfdaf917bd05e04f9f744a78bed57c87de0620cecfa0373e401b0a5760d9c6f785e6f47f93f0077d43acc5f0177d7809b1cb8a781736c5f6f01d7d7c83d6cdf0a1cef4771888cf6581f0077bbeb20ef4de43ef22eb2022ee1fac28d0febc7f1d707d85f216be07ce879a343d76b6e80bb6aa313daf7807b6bc0cd0bf07a0fb8ea226be04c026fb4b0bf40c6fe358c2fa33c67c06e3c1938451e00d719b206ff532d89a13d8fdc0fe39773e00d3cbf5c43c6fe55db73bf13ed731b19d75f752283ff5a00af0fa05dee206be0f42c32f4cf8961becd8818e6a78f81375a70be6a450ee7a7bbc4e8bf9f2243bcd0c4e0ff8a5706fff1420cd7cba6c83d38df9c10e3f9bdc8e01f97c4e8ef6e2387f6f4017980fe4b450eed4d8d8cebcd2f80fb2d90bf3d2186f6aa42ee61ff70bffa513fe41098e45d3f460eeb91b07e49f2d4456490e79218e4c92e917bd05f2c2387fee28c18fb5f4706f9d1f5507ef55164f0efa7c4fdb0de344346fd613b91c13f56c4703d398e1cdad51e315c2f3d8e0cf1219e0ff22f5e88c1ff378618e65332648df1f52172385f4d88e1fe26b11dc64f0e8961fc642332f813b8bfb28ffa980b621c6f1639b4d72931c6b3b5c8613cf3420cfebda4f3c97fd7c4b0be9cfae37ab367648dbc493ce886fec1fe075db2fff21a781ddb932b60d297e42232e8cb3531e6570b64bcdf298f0cf7b326c6fb3d8f1cdaf52131dae71e32ea3bab88e17cf51219ece19618f5738318d653e07afb680fa215399ccf3788e17c612387fb25d788e17e8a2632f8874362b89fe51931c6ff0531ccc7a23cfa684faa881cc6d36362b89eb98c0cfa6888517f9ac8413f14cd07f303b3838cf66218319c2fdb91c3f9e901319c5f2591a17d468cf9401d19da73640de7ebe7c8a13d591243ffba4f0cf2a987c08316c6f30931c6dbc3c8a0df2d6238bf29917bc015ac57517c6b401fd4466fa0827e1c210f80cb4364d4b7641d98f4c53c10a37f4a23837cbbc8e83f7564e8cf2f2287fe6c8b18f58b4706fdda27c6fcf39618e69bac21a3fd681d19c6df2386f1f93832ccf78e18f44198c8e06f06c4a8cf343f949796c8e83fcd75e430be10c438fe7e64d0179a3fea4b3a21c6fcf29e18aec7b07d80fe525f13e3f9dbc470be3e8f0cfe3525467d42fd1850bef61239e857c28931df32c4309fba8d3cc0f68c18f5a946467fdc14c4a87fc1de4437e6673932e5c30530c57f7d094cf1beb6c4a06f458a8cf943b11319f47f482cc0de7681fb984fd87d62682f8f90513f734d2ce0fe2f9151df14b5a3be25f7c8186fc59018daed2872682fc7c470fdea1a7880fed70e22833f3c2506fde22f91c3fd662531faa35664b0a73d62bcde1c19ed4fdc1063fccf2387f3654d0ce3b34564f06f9a18f44fa27c07684f524686f926c4a0bff69e18f4519e23a33fd58a18fdef2631e8b338890ce71f1183be9af5c8a1bd3823c67c60022cd0dfa615319e7f1619f2ad1762f4e7ddc8415f9a7d6290b77944c67c26a3fe685f4d468cf7e795c1be401f54cc67f62283bd7060caa715e8aba2fc59dac8505f3a2006ff5f7689d1bff791299f9e4686fa504d8cf9ce2432ec67b691311f2acf8941bfe50532ce37cf88411f15e8a3227b55b79161bd2fc4589f5a10437c9057c838ffac8a0cfb871131d6bfba91437b3e21c67ceb9018ede10c19f3bf84cea7f8b41519f261ba1eaebf9e4586f63b62b8dff50e32ea7f7d4c0cfa5fa0bca27f784646fb559dc8905fe4c4a84f783f0718ffd80531d82bbf8f0cf676498cf5882d62184f513bc6bbac2486f192d80ee3c97562b0ffe43a32d4b3e8fa1ac667e0ff94c078c75b9161fe9618fc41222383bd3e1283bd9a0619fd95782286f34d8718ecbf584606ff704b0ce3a583c860cf77c4286f5c8f10e87ff689e17c7d1519eeff1931c6a7227268af0cb2c1f836891cdaf3205f19e36d9920a3ff48ef81e3fe7a8a8cf6626564b0b71131dacb2532ee87d45664d80f6d12e37e248f0ce39d1083bd9417c818bfc53131fa978dc8b01fda23c6fcb42106fbd24fc0e43f742f32d87f9b18fd85890cf968498cf9808d0cf580383ee67b5d64949fbc890cfee19618d6a3ef2283ffe2c4e8ff526218bf7e8e0cfe202106fbb2edc8605f2d64aa4fcc22837c778871bff91819ee0f8d8ffe203f8c0cfe60410cf6586a62d0bfa442a6fd2d8d8ff753dbc8703f4f88717faa8831df3e2286f5971bc4983fc7f325d813ca6380f1811d13a37fee4406ff79420cf2970b625c2f23c6fdda9018ae27d0de0658ff353232f48fed580fb5c4707e8af783f2a1ea2e32ac779318f3f7edc8e04f46c4587fd391a17d8e8cf951d310c3f5135c8fa0fcf195a1fe734a0cf353cf91433baf89d17fee45867c674e0cd72b503e02f5d5ec13633cd88a0ce3b78931df3b8c0cfe9dc613b81f3a8b0cf9e306319ccfaf2387f3f91131d6737722433e89fe4318e8cf68fd06e54be31bf0e7ea2a72b087349e8ffe7a1919e2451c0fe463509eb28df9e966e4d0df0c89613cbb1139b4db3d62184fa13ecb75cc2fae88a13d47ff2c85d4a11dec57d3f39ee21199f2cf5164c827b13dd6af603e3afa571119f24b1c9ff22b711019f62347c460ff6a3d32f8e75364f467f69a18eb4dd3c860cf8c18c6636d62f0afd91e31e88f54c8e87fd28218fab3abc860df0b62b01f652243be1619c64fbb91a11dfc811e603e9ecd2283ff32c4b03ed32346ff1b19f7fbc4185fd22362accfac4506f95c1363bd619d18eb6b3c32ccb724c6eb9f12e3f3a52b62d02783fa3220f9df470ed7e787c430be9a13837c921b627c3e45d71fe0f81932de9f748f18fd63420cf65d6f45067f5811c37809c4774dfbbdfa8418f77b9bc894ff9d47867ac733318ca72f90d13fd9adc890ef2e88a1bfc2f90a83cff366c4b07e7d1b39cc4f8c89617d964786f59d12c3f816f2032ddbe84f0791c11fe6c4301edf21c6fc79428cf929da935cc7f9dc13c3f5f93a31e6bb93c8e0afe87aeb309e8ae7a33fdb25467f358e0cfe0aed5562fe2c46c4309ecc22833fa6f90818cf7622c3fd3f464679e94d62d50be7a33eaa36b4e778bfd53ab4d7c17fab1ee5dfe60938faa34362ccf70e9029df6913637eb7034cf989b921467fb41919f2154d8cfa76818cfeb3bc24c67acf6e64d84f8d88f1f9cc1d313eef3691211f6d1183fcab3564f4c7668b18ebf77d62ccaf3ac4385e3c1ff3896762acc7dc13e3f39e7362dc1f0d91e9799722c6fd31f547ffcc683ee89f8bc8707d7b458cf644f743c3fdb60b6081fb85ac20c6f10f8971ffba1d19fc9b25467bdc8a0ccfbfee89e1faf68c18f4b7ee44067d34c4303f3543c67c291d13e37ae87a3de86f501f291f4a92c8e04faf89b15eb51519ecf50199f29dd3c890ef3c11a3bd0c80651bb84279397f02fbef93c8e1fa66490cf36b0e8871bc2932e677669318fab3dbc8e0af3262d027f11019ea0fa82f12f339cd88d19fd4c4703f18ea9bc27c8da7c4e8df4e22433e9713c3fd4bfbc4b09e04f54da1bfcbee89a15d6f470eed15ae5709e022f85ba5633d208d0cfb4f8b4cefc7c1fc5ff31fd0274dfec694c8e83fcc3c32ec3f07c4b87fa0fe986f95b79141ff47c4585fae8931bf10c8986f552931be6fd48f0cf59c0b62b4b7d80ef6a61431c62b9a0fd68305e8bb8efb9b0131e8a31a4506fb64c4b8ff6a88e17e155bc8e87f6d418cf5830531ee576e88e17ae51531c6f72131eeb7a7c418cf4c64f0073531e84ba32387f6f20919f393ea2a32c8b34d8cfba7d81fdfff20c67c25a5f9607e92cc89f17935ad1ffd431ecfc77ad93131aea702a6fc447589d19ed622833d3e2363fe50dd12e3fe0aef27c5fbec8e18fdc73c32d8d31819f3a9f48918f7631bc00af323bd881cda654a0cf34dce23c37e8c23637e94df4686fa6a8f18ce671b91c1bfc4feb8dfdb8e1ce6cf515e0afd732d8971ffbf1f19f21d430cebafd78935f89b7b64f4df8a4586fce98818fae7417f74cc878a0764f237a7c064fff91132c6ebb2034cf589ec2132f88f3131eedfb691a97e70460cfa9b5a62b89fec8618fdf52531eeaf7bc894af6f20a3be57d41ff373f61419ea1f347fcccf33bc1ee5dfd54564b0979418f3efd81fe37f9f18f59b18e363b54e8cf13b8b0cfe6e4e8cf5852232c4ef6762cc6f0432fa07731b19fc55430ce3311d398c976d10a3bd9f1183fe954362d01f83f793e26bb54b8cfada8a0cfe8d13e37c5564b0ef783ee8a3c0fb19f3f703628ca7a79141ffcf89e17cf9888cf26aa87d1dda0bbc9f0ad79f5e11e3f3c05706fbce88717f83f743a17f946564f0279c18ed758f18e65fcc2287f6e68818ed17e5a1b13e24f622c3fef09c18c613979143bb9c12c378756cd726b42f91311f611d62e89fed470efdcb75e22409f2c2fba705b4e7c17f6913fdc70d32fa0f510393bd57a7c8a8afe90b32daa73a8e0cf53dea8ffebd02f919d9c6f7291262b4ef2362ec7f8e8cf6a6ebc8a15d97c4a00ff91d31eaf70d31ea778f18d66f2d32f99f3362bcde5a64f0670362b4c72531c6cbbbc8903f4486eb37c7c4707d7d808cf2e391e17a6a8718aec7cbc8e04faf88f1fa4f9121dec7f1e07ae935b0427fa867c4b8bf7f2486f1782f32d8534e8ccf03fa91417fbbc4a0dfd94964885f0219efa77c21c6fb534706fba3f9a0be171531e8bb8de7a37dd0fc30df900fc4d05fb52387fe35ad0fe55330608df3b1696488f78a18c73f2086f1d38dc8613cb58b8cf3e1c3c8613c5110a3ff4b2287f3936d62b31eda9f91d1fff03931fa9f3432d837c40f63da707e11fc85598fef073591a19e79024cf14e5d10e3fe6e3d32d8e70419eda5388f0cf5a91931eaef3331ee6fe97aa8ef664a8cf5c0bdc8a07f67c4a8ef6564b0b71762b4b7d81fd65f1d032bf42fe69018ae573e47867870478cf1658d18e3eb3e318caf86c8249f2362cc3f1f23c3fe571263fca988d11e0e22433c9d12c3fd6de27870fd5221e3fd904fc468cf9618c6e79b91a13e3a2046fbe591613ff3408cf1658718d74ffd51fe723332c42b9217c653761619ec5d10833e972791e17a25315ccfec02533ce50f91c11f8d88d13ee791c378e69418c64b1f2387f60ce7a351bef63632f86f1a0fe525ae90713d222586eb37636294978d0cfe19f5cde0fcf99218cee7e791c1dff58971feadc8b0be0219fd939811e37a4e2387fe15cacbe0fd34adc8102f13e204fc49d8af98982fe4adc8f03e13e8538c67421263bd1becd190fdc9cbc8600fb11df437dd2286f557fbc8685f451e19ea4919319e3f24c6e7c38218d65710a3fd988bc860cf53621c7f408cefd39c10a3fc6691c19f537ff45fd5416488bfa7c4b8df9491c13e2a62cc47d78871feb83eca3f8d880cfab44f8cf16b2b32e8eb0b31e693c7c4a8afd7c8e88fe42e31eaff5a64f02747c4185fdbc4305ede8f1cdad93632fa177b438cf28ceda8df8618f431c5fb45f655bf32f80f1c2fdad71e31c65b868cf652d9c8a15d4c8871bc8618aecf50ff0dce9fbd10c37c441519f203418cf3c7fb6d70fe9c4586f13831f4cf0691437e6f51df9336b4277b91437b19ee57b21ef3fd2932d50bee22c3fb460d30d94f2d9051ffed3a31b48bddc810af4f89319e2d90295ed3f8a8efa2438cf7a3240679246791e1fe5b608df929af88515f5f19f4e99118e463ef2207f9646364d46fa189f1f9541219e2594e0cd76b26c4787fda91c3f83543c678cbe87a143f362243fb0131dae311318c571c2353bdff2132e8b72146ffff1c39c88337c4985fde4786f8d221467dea470ed767a80f643fac2086f1741e19ece79c18e5cf2287f1d43e32ca2f798c1cda35ae9fec45d2f570fe8c4586f90c89f17af3c8613c83fa9890be8c23837c4e89d1be772383fc89d11ff04762e82fee2283bc50de09debf2ad87392c4f7f77722c3fbb23d648aaf9dc8f0fec82d327e3fbeda0326fb328a18ec2b83eb27642f8926c6f787d691a9def91019ec619318e3078d87fe32e94406796c11a37d3062941f8d87f66023633e974586ebf78951bf1e22837ed1f8a81f493b32f8bf0932d5b3cac8606f2931d69bae8831bf5e4606fda2eba33ee5608f09c5173627c6fc6d1219ce9f12e37af623c37ab68951ffee2283fc2e9151fe2c8b0cf2df25c678524486ebaf11c3f83c891cc69733648a673d621cef3832ccb724c6f14691413e37c814df4e22c37c3bc478fe3432d82bf88f24daa720c6fe3232d85b1799d6b7881cda39ca33a1f9eac8a1fd18efafff1ff0efe35b8fdff2fabee3b7bcbeeff82dafef3b7ecbebfb8edff2fabee3b7bcbeeff8d5e5c5d947cfe0edf1cbcb4b70f9d173583d7e797929ae3f7a0eabc72f2f2fc3938f9ec3eaf1cbcb2bfd6d8fdf7370cbb38f9ec3eaf1cbcb2be7c547cf61f5f8e5e555f2eaa3e7b07afcf2f2aa79f3d173583d7e6d7971cd6ff8ed47cf62f5f895e4c5ef3ef3d93dfff4b3c78f9be3af242f2789c53bd6fc893f7ff2d90766b0bf92bcf8f2339fbdf0cd4f3e1b7edc1c7f297949bef5ee9305dfe63bef3e1bf1dd8f9be347caebbd5df13dbeff499f313f78f7c984ab8f9af147eb179fbee3fc1d4b7ec88fde7d36e3c71f37e38fd52f7eb21a13f9293fe3e7effa5cf0cb77e75cf1f947cdf8c3f56bebad4df26b3e79c353bec65befce69bf3b67f477cef883e5d5e1dd37dce3ebef7a6cf0feaa7cf8920f187f65c698f83b67fcc1f21a31b92a0da6d83bdd6186bda97fb194d9379cb1fc6b57f8d1c7df2daf4f6262ce3b2bab2f58f9b637ab58cd9ad5feece68d846fdfc78c9f7bfcfdfaf5b65ecaf7572d90ddb17bf6a62f7b646f727ef6c456f27da77fcbfff6f23a612f2ba4d8265bc9d7d916db5e695db01d36622bf929db632b391a1bbfcf36fe1bca6bc4de64a06cc2a28638f91cb21509b00736632b11d3e9db313b59693f65676fc6fee9b5eb8ff0f7ec7c755fedfcd1f50a5db0fad53ff129bb6457aff190cdd9355b8bd4626db6eafdbaacf7b91ac77fbcbca66cd5676db0feab0f6203b1922d08c66662255f105228162522b4306f7c7ff6f36bb17f97bc566b566c281291c69685b0af355491895cc48abd289d7eb5459482a8c54aac1437e256ace893b8fff9959ebf475e5c3a4b59598b7810517e4e5e0bf1145b9ec552c47820369d7ef1d733c5506c918f12db6247ace4f662976faedaf9cf91dddfa55f626f7597ec64b4ffea9bc5581c08f4ea7c2ea6e2905a9ce55e8a2331437a11c7227a7b712ace44dc6df23b712156769ae2eae7ace3eff35f2e335dd5b0b918c796425c0bf4e25c8b9668939e888ee83a6b45c9f213a77bbd38c28d587fcde5c4c6ea3e40f47f568decef93172bc4e095a43351d21b5149214926a7523909a164d941f82b6a2809994a2bf1e9ad489dec56338b3d19f745b2e03df1933cffcf93d7273b9f8598cb95dd8e3032ae494a16df9390b5d891e8d5d986bc91b7548190776229eff1ec5327c957e93fcac5ebbe403e899f56b3f899fa259fdfca4c2e5dae1e7db97c79d523b92987126bd1725bee4892d0ae93ca1ee558725f8e25e6bae2464e246621fc511eca98e5ca192b7f5edefa73ed51beab848a27166d92ddc913798a9f337926d177f35c5e90c79797f24ace2143e5525ecb35f06c625bb664ac83b131bb96316f7596d97d3f8f1fb7c7fcb9f2e253d97bc76b62234a73ddc545b44921e486ec873efb4ebf06905729eef46b4385770c79c7e7fa2a64af4aca1d15df0c0b7ff908b35a95a854bda9f8f03bf503df58f9d9fe5e3cf3f62aab5c15b44ede88253d2d532559a4aad88cfab05bd15535f82cd5a81baa55881b75ab3053759fdf2af46aea413daa37f50cae65effd53cd5f595e5cab27b552811195dbf3a115b25db6c92f70a5995aca5079e00bf5a236657816a98652ab2d152a166ac7e9d4c8cb51edbacff654e8adc6ea404dc0de18535375f8ce674af5432b183f5e5eefdf07e42335532b7e4c9d881d85125367f28a9d939498f17b433e55e7ce0a41d72ee49558c28ad5a5ba51210b957772a8e61035d5b5fb7d0d64c40f544bbdd5e68eeafe58dfff33f44bf5f89b9aba28d43a5b796b84956a03722fbe90b7e0c358a3fa4e97423490fb9a43cd423c7afdd22ce4654c6a1dc6d5522d353e83d49a5d6b1346cd5c5f2356aa3fea52273a5de1f1a773fd15e4c535bf666f7cacdad656c74f74ae0b7e83bf3bbfa583cfd7b5bae121dbd08dfbecc67b1d7d2b6fc4d2d7b89c5dd7fa4e3b3fa51fd8cc492eec3ff5423f69b476bdd42f7ae5dd013dd45b7ab5f638e5fb7f3d4efe1cffe562bf547cd593e81d3dd2b84711777c20350f5aa1f7c49487fbaef7d9a5daf4b50971efe431f667eb03676d5bdae98cded5537da89d65ea993ed6273e66babc4b39c906dbd6674ee7569e5dea0b7da957f6907a2e1271f967f3fe2879f9bba9aff5da6a64d22dddd6f83b7bd01ddd45aff3a27b3e4f7367ac3bbfe5744dacb14b6dbdc7d71bcebf5d6a9767e8811c1aeefd9b188aae61fe5c23a436d2e7f52e9de8fa3f0741d73289ba312b9668acc9cc0f798ef4a3e4653e79cbd4e55a6d53bee6f35c8ac654f4fcdad46ead61d7235edc6f37be862fd7d5d25707b9525b2ed772f1cfdc4aed7e7bf6d6e57add416c74bf854a9779504be3ecd22ccc93dc31cf54e7374bf7f9cbeb735cb329f7cc0f7aa7e747c98b2f74c6baef3e1be9b1d9d291cdb6386387b00eaecd8ed39d0ddfcb8ca4f6f509e3763f624730be6095bc327bee937ddd639766ec6b644ebf0e5c14dd713a78639c859aa98b977bbea2630e5ddb91c1ddbb39663373624ee35513756bce3eb9bfe762fbf32bf97be415de0db93617eccdf77d78622e456ed08f70adfb4e0fe6d0879d39e91cf838c95d4e60ae431cdd74bab3665ae2c0fddb66dced25b59e9a8e936e575ae6f69bbaaba7722cce5dde35757d7a6cd7ed172f9d4cb1c26d364c5fb5cc803c81f3fa3ce16f73b28425e2df7dcbf347fa2fae1399a8e4dd13eac4c82b7541324d12b993a47efe7c9a58f77b1632b45a5ef915f0b1d3b989eb95bb7de32d97665f74d96552246552499dd449c39c74921b77c6b5e3dbc45968722fbac94312e265b2f0b13379a21c307956b7c9f26d7e2f1ff976f2f22debf9d9f20a33dc942619aedecfe451346a9960f521d9666db9c34bdf23d9519b4e370ec45d3292c36437d9634b97436daa6daf576a2bd94fc65ebfdc5d3870b1734b666ce0fd5932717aa69d76362eb74d9c7dea64ea9f81cb521cbbdf0f9390dfb2ae70bae5fcd84afeececf93299257fe17da81f1f1fd94972c22a71fa7a577992187593e027c9993c71ab0e5937b32e8eb95524e7f226b9e08dbef7fac1343f723a73a1f2e4d2fd7b95cc936bd19573fd98ac79fdd2829d8bae58262dde0dfa7692b8ac3ee968eb7eef266187cfe6c9babbe646d28fb3d0c920e5294bffd2fb297f455eb2e022fdcc6e2355a9963ba9797d0f307934979aab8285b5245eab2ed3c43fff9173af7bcef78dfdfe914fd3d4f4f938b569a6a72c61aea79ea6795ab8fe655a399dbb927b69ad9cbea54d7aa39c9f13d3d459727aa736dcef4bf0636cec24739f3ea4f1a98ab8327337a745f299dde4f7bc6ffdd7f4cbb9d2fdf4c99c7f524b1da5cfe992cdd2e827d4bed731a777a19a936e3a9f56fb77bdd493d3a7593a4cdccad963bac59fc2bfdb5ecfd21d73978ed2dd742fdd4f47ea301dbbbde44d7a90cc9d64bae9249db24bd94a0fb9646be991fbfd269d852c77c09c5ea6c72a56c8d293f4343d4bcfd9a72bd0b2e4936faf60fc557be4a7e9457a998cd377cf63c45d3a5713974fb58c803cc3c5ca3bb5747a71eddf084fd79c5c2abe9bb6fc5f6d747bc32c6dbb4f46a623cecc49da49b7d36eda33dbe9ba394d379cfcfb6c4d14f2211d9853cb55ea3cfc5458d3d7853ee54bf314fcdaa165ac6b5d166ba539b10a6a686caeb55a5a6d8d7d5709b0a9b56ca18eec77d4c77e84ffe2dae6629d5f389ff5c63a2d4b0fd48d9b7d6143dd3ec44acf95b3bfc4edb4bbb676b1f0c5fb2035d32d756b1b7b93dcd9db373e7aea3c4f9b27f68e8fd89d93f534e8f5c2657cb9bdb70ff6d12e9cc45becda9cf2a97df2bf8b33fbec75864bbde62cf8ca2eedcb9b67930bbba974d295477cf47dcf297f94bf4fb6ed50eda90dbb655676715cba156deb63710ccf86bc1f337d27b11d5168215c34b4239eb0898b867bfad4eed27ed8dd813dbb6fc7f6c04eecd41eda233c66f6d87d72e05a4eec8bc59c34dd54937469cfecb9bd70235eeac25ed9b9fbfccabaacc3f4ed5afab8f24e86b62df7f98e6ddbceb7afef47cb2bbc2b9f38e9b8b8657b76e5fd08bb619c6fd14fbaeb7d57f2981817eb747aa44e6cdffb193bc878c6143e73cc442633656799768709ffd559e27e5c00c82c7e92c28f3dceb22cf73b6ff6e0f4b29d1572e8f4ec323d773ab9c84a79c32eb32aab5fb5356b32e743e545769bddb17febcd94ef95977fffe56b75a4ecdef454cbf9ada138a5bd63da57a98f8852670f7c6959625cecbbcc1e4d275be8e3ec099ef3f069f69c2d51425f3a5eb2cd6c986d65dbd98e935ef8cc1e65a36c973b5d33b94ec459b697ed676356b9bced2a3bc8b0f69a4a23ecc0ed0d86d9343bcc8ec4bff91ecff7eb97bb7713d5131bc917b4994fcda97679b59bd94c25fcc45b027b4812677d2d27b199bac88e8561339757dddafbecc4c72c6db2d3ec2cacff3cbb707aa3b3cbcf48cbebd555821554fb98cdb36b3bc5b6b5ace57c9b34db593beb809ee9adac1b6674a292ace7753cddcdd693de9facefabf5d87fc71e59e332ccfd6c43d659df2cd99cb5def7e05a2d74a25a3e6a99b98f9dd920e76acf5efa7c4acb9ce5424edc4ec5edbded6d2ec1ceec3457693fffba86b95ed9fdeb9544959b3c7152762d799a0dbd9e69965ba9f32ccff9222ff2d26bb6b3fc695ee575fe856f53aa717e93df2a291ef8eed7f2b17fdf7fb91837cdeff2fbfc415b3bc81f93f7395892f3e42173fbbeacd25df9c4eed2e0bbf285cfcdf3a7fcd9eb5d8e1698a779b05ed576b223bf95e69bf930dfcab7f39d7c84fae57c59befbdef79859be87e3ece7e330ee41baae676e977ee53c818bbff92473d9c62779a2df95e9fc51dce88ecb0fd7f2e99f7dfbedaffa7b25c4b9baca0fcd8958b22a3fca67f9f14acd6b248ff213bf07741170233fcdcfd4a18b5827f9b9afd9e760793abfccafe839643e273dcaaff3b5bc95b7f34edecd7bf97abe8112f33af6190f9af7f30144898283cf72198acbf7ec65bafb36167a8914ac70e95ca1dcd6bf287461d25ef2b8fa5effcf9217ce60eaa556245617a974e1bcc8d44e81efe364eda2488ffd3ed0eb56519a75b3ed265939c99860832bb582a2a6b85834c54d719bb78bbbe2defd3c38a9f58ac72c2916d023ef7f6e1eb6533c79a9da6911aafac532e9162f5651842c368ba1d92fb60abf7f18163b4e52a374e0f4ee9bebfadf22af62f7db9ead989631e96d7e984df5b11ca6f7c59e296d8ba572a9dafa5c3b3d33bad8779ad0b8086782268ce56a667a6a279441140779a79838594d9cb426c5d4ffe4dde230ead8d6e7e7c05971640f837e0efc5eb1985926ae8ae3e2a438753bf02d97c9dcfb8a86cbf7dbc599bdb5a75f5fd3fb1ae8b7e997e88b0d76ce6d715e0c8b8be2b2b87276fe853d97b3c14eb15fccd59ef75dcae7403331e44fe9acb82ed6b8cc5a452b68c865d17e7b66dec79c2b291a27ad0727a9bb2029ffdf3b6f9945a7e85266f1653f23ce5d04f0523dcba48f28ee8e8dfd3e43b65c865115bd6cbd387319ec17fe6e8adb8d768bf5e2582fd244ecf2e3b7f1f25bed51b89d88d393a362a3e8178392972c6d8b61294a592ab3911fab5dd695c5eb5b4c99d3727de5fcc2b1f36bbec670969f65fba5767913c5b9993d79bbe692fcbc2e132fad320569959674ccf9b10d3cfbf0eb71bfcc729f9124f6b0cccba22cd383b2324ea7cadade96abdf1771b1b0bc61997c2c84be286fd99e348929efca7b3992cefbb377f1f4dfc8bf245f28563e948fc95372582ee48ebf77c13759adcb273d2c9fcd069b974bbfef33a7e54bb9991e9643be28b79c5f5abce6e74e2edbe5cab767b31c3dfda81c3929ed7a9d02dd7292031deb951807335b7ef2ddd277f35c9463b89e9df98cb83cb0b7e1f9b9b38b72524ed4855e2ba766ab3cf479a1ba4dcfcaa372561e2777e2fccb7fb3e7aff87b9bb9ddf25179920ecad3f2ac3c4ffddb5a4397340e7d365f5eb0ca5edb517969eeca2b9f179531f6ad1cb6bca6bff155ae45ef05d6f846b750bfd6a20e967f36bfecd9e5febe67cb84671b65bbecd8819a167bfef9935aca1d27a756d94d36ca9e5b4399ed73fd6779ff0f8a8f0bae4b5f79e9d98774566e18ed7d97afbdfb1f36cb17e5b3dbe7b2ec1ab3f89819f87fcb3ee88ad73f90573940ff758f129bc2bf15af18c9597df52fa999ed4ac06ea992994b04f363ad75cfcfc9ddd32b7d9c4f2a5569b35eb8ff388bf9e6772c7e743ddaf9b945b66f6f2b639eab247b325a9cf91a81dca9d2ca1e3f54599e7c26673f2ad79cbc0ae22a77d9c4742536867f9dc7ef550579bfafcda22acb56e835a92a3e727b56eb63a2d4556d4eec5ab2ac9a7c9c3cfe596cfc3be4f57ac0be5176aa9bea3663d55d7aac663e5af1a4baaf1ec2fe106a0e24a3c76a01994066aaa7579df2ff7a5d73b96b275faf9eb1ff17bff3eec65fa266bd549b2ea358af86e96eb95125d596dd33863dfc9577f37fcefb262b3f77febd2cbe906e176e867adf3f7b74d96a1b73f155cbf495861821ab6de7db2d48ccfd38ddaa769c7ec5e85a7de1fd67dbc953d83364c3cae7122fd56ed6556d17eb16ec07bc63fea9bcf89475cb25eba90736aff66c995eb171b55f0cab7175504daa6975581d55b3ea5825d549755a9d99fdea5c0fab8bacac2ecb6975953c974fd5bcd8aaaeb3420caba1d6662b59abd674373d7279f5a30e4fe6f9a2aaaa56f65ae35a3dfc1e7154b97cabe290db3b79754a5b75a264a79fcffeaa6ef0f0a6ea95e1899de857eb5ab2c3e4b9da7073bb488655dfcdf5ac3ae5072a3187e94bf95c9cb8750d8a61cd6b568b72e276e8c759c3b262d39cb335a8e77e595e3e9fe54b5ed4923fd44af74d478d6a5d1bfd5c27759a6745afe8595ddb3aabf3f4ac2e5c8c71878b893b72e8328b1073e4d0fd1bfc85af73f93a94af4bc04f9a49cd2fe05bedc9715d7e465af1a89eeaaaaef35631a99bfaa6be0549faa3fe4c14cb0d68567d5fce9d077facfdd3da2d5f6f4dae601e2e1ac2bcc27cebc77a11e6bd532feac2ade5c9eaf23caf6ae7776b936eba98be23b724e7c7abdfd7fcb23d066b5a403dc8d7d079e2325f97bd676dcb1433dbe57e3a4f5d7ca997394f07d5ad39b30ff54bbd590febad74566f9b97942587f54efa508f8cce27d9d476d3653a12cbdae51df55e187b542df2fdcfea18edba37ebfd7a1caa1360b9ceef559f3c9db67bd9154af2a09ef04eedf22adc5b546e3bdbcda6f5617d54cf9287fad8bcb83de3ac3e31697d6acecca03eabcfd3f5f2a4dcaf2f9cd58e988ff6235cf7275afc639e77c0bf3e77f1efd9888aebb4c565aa92c7fad279fccd4c24c7aa5d5fe9d3fa2cafcb97fcbed8c0b799dc7dc864acfa7de2d33e3d0afee6bb6e9d7a1e7da1a9affdbbfa32add7f479ddaadb75a7ee5aa516754f6fe6fd7a9d276e5e0bf7a3e97deaeff5fc7f4d5e760fac9b2fea73f91defeebd9f652aea0d1733bf629ba483765af7eb41d62ab7aa6ebe975f42460ad1a2e194977f5e37bc9dd4e70de66d0dabcfbfff6f57fca5fcdeef4d42a667b69de5c87f3f4afb7d5cde6f4423bf2ab3af48d2650fd59fff2de0fadccd1333914665baf9ee19ff1579f9ab37e19dbeb4efe6f103fe4eaa9c16cfb9cc3f57bb7f7f58f0ed4d52df7bad2b9ebfa586a5589366583dcfdc6ea2fcee6f32bc9797ed143ced7bbf60c7a57f977496abd751eb797d6dc7b96cc23728ea899b71788f39f37b8f8c63bedc64655ef0629c859a9d38cf55e3b8c95ddc5a5913974d51d44d293e799b409ba6cab6f264d5dade1d677652f0725ef020ad49166aeefcb1a9edb8c9ebebd7b7e5eac9dbb964a32aec3babcadf954ada317c93869f36d68eed38bbb6219ad8bd82bb95aaecddb389f7f2f27bb8a601ddf17148ba9ca7c1bf90d1dc7abdafefedac09ef8266bba45fe5feab7ef9fb668fecd4f54abd0f69eebc36d8e3b0737c212fdfdc632eef8ee6a1f9cc13069ec88edd7339ff49b328f3eac58eab97326f3c3f95077cda3c672a9cbd24e9b851a5aff4b8abcd400a8d08d79e66674df8bbb77ec7e56bd9aee74b6839b453af15eede6d86bb70ece61924dbf0903fdbcc94f3afc9abaa2077f6ba53f0f0a44be7e1d9b4f75176d264793fbb87a7e86ff52b1f78fdcadcfdce761aedfe15503b6d7c5630c8eecd69f5e8fa87ccab1982a49c8fbf2ee7fe39f6d7dec9f2e37adf147e1e4132e53cc8df16fcf59b5662925fd6f7b5d33a27c5d25b9faf4a365bd97dde87efb8d5735855b01b27db665b876fcc67433f47bb17d6163c72e65b45e3f613f6809f7e595ebe06556ea16f1aa17eed7a3df19274d1e9c08d7b50d46ff5ebd57f65732f057bd06cba9f3db04e7a3ed12c5cff279f75816e55a2be825899f69bdb6f8d554eb31a88a521337d1305f334bfe4497d6e27b5bbc795af7d4d57e7e2f5abe0af76409e26bb7633f33a96f9fc8d6ca979e2d34c156f9e827c49bf7cecf3ab7cd5afe2283c81dfc9769c7e6f79997fa25feededb13bf0eebeeb493da98f40baee9ef999f613d818856aebc53dd147f5ecf0a2bce281a385d7f57311495bfaacbad1ff9c83f6f0a7778d6b8f8e1a4367eab5f6e24a719e0cbb8d77ffff4d2adcddd892159b2d7d166ec73f5afe8971bb1e19ff82fef878acc56d26c37cc65fac95bfd7af55fcd815bcb55e366cc3a70ef9d7e5998a3d7af6a0163fbf9bdd5a83fd32fee63e7ebd3b6bdf4334f88bc7ebdbee3e5a553c9b4cf470dbee1b5aa5f5e5ed9f3abaed9314fdcda46300faf5fd56732b8f7f2729675e6bcf5819f997f9fa399927e71edfd4f3e6f0eed01ecdffcd541bfcca99797d739310b75ba176fb54db0da668be618321e7fcf8ebcef812af1b71d5c96f3d72cc369cbfeeaf782a27e4df2b45af96ea898d883f004779027e5da7bfdca5ffc0a5d0fe19fb438bd3295f0b3ce7649bfdec7c6cfc9cb8dd9af9c06e7bbf9beb7aa7cd779ef0568a4d3b5eb6ccd6b3749c94935444a396d127ac2958a66e6cfb4d3eac5fbcee6d84e20c638dddd81d9b8b86d210efff9d13cba98f8ba5fb2ee6e9d7fa91eea329d9bd567dfcd5133027b84b924c7659fe21dbbab5eb29d7c17fc95f37907be678ef959f1ec62ed67ea3f9fcb57a5d360b7f34ce454edfb7fc54a2d5326fe731e24e8fcc494da74ca17f17ba0a7c11a13d98fe768fc7c0a39381f79fd75b1ecabef7eb04e73e2b4757537be634fbe6cb7fe19df7bbdf3d7641db78e7e9ca75e691bbdfefd1dae7d3f37ef7773fd7379fd1d876afb18e7f2f3d3cfe94a7396e5d523d4b2a2151e67a79fcbd3fedee3e3fe1e5fb68b56b6e3727963f754bb9ee4579974f676ff693e9fcbfafc67fd4d89ff0c79051d137fbe4fb4d3266db21ff91decff5479f91ca15cfb724dc21e568f8d28cb5f41af7e0d79f9c365c4799e34d2cec2fba9d665332ea2d60799ace7cd2ff6ffd6f42bc8cb1f5c2bd69cbbbda969f6eb793e961df1d5e78b1f77fc1af2facf397ecbebfb8edff2fabee3b7bcbeeff82dafef3b7ecbebfb8edff2fabee39fffef7ffee3ff03258d12dd</data> + <data format="XPM.GZ" length="47155">789ced9d5773233bb2a0dfe7579c18bcddd8c01529dad8d807ca1bca93721bfb0053552847798ad4c6fef74d203321ca749fd669a39e889e0a9dd64754a1508974481435fffd5f7f9d1feefdf55ffffdafbb7b759f9bbf8c53b77ffd977da8ebf9fffe3fffebfffeebdf8df6d25f8da5f65ffd56ffafe6bfffc7bffe9d2dfd65fe124be17f819723f70237885bd89eb723637b33708faf776b9143bb5b21a6ebb35664bc7e40dc237e2236c865c9dcc0fb179e1b71bce51131f5e706c4747eb682ec0fcfd51a718bfa4b02c7f1e7abc43c5e62383ff45f69e21ef53f8f8ce3dd2336c84513b9b944d787f134e3f88b19318dbf9822fb2bc2f35c101be4fc09d91fa1fd8ab8855c1d07ee73ffd549e4d07f9d23c3f9fd30fe19710f395f2136c82e3cff728339af99971ba1bd405e5e42ae8f895bc8e561e0389ef20119dab1ff9cb847e7df470eede53eb141cec3f9ad06f757af232f9b56b83e7b446e2d21bb73e21672954656a1ffa00f2d15f5bf8dccedf92e710fb93e2136c845b85fbb19f57d82ccedee9ab91deccd8d90db4bc8d52c329ebf49dcc6f6c20556c0389e21711f399b125b6adff1dc6946f9dc20b76d07ef3f46ee3490ab1e711b39cf024779142531db3f71b3d5c1f16e11f7908b3d64e80fdb6be23e725d105be43cf897ee32cbafbc456e9aee7238bf465e5e42ae12e48e45ce2e90bb0d3adf11b7e9fce00fba3ada770779b9d5d5617cebc43de4ea01b963d1be4bec4f77fbd85e16c496ce379e7bcb51bfcf88495ef50079d9f470bc97c860ee38be0de44e1fcfd796d822a70791d17f4c99717ca687dc6de0f9e62672383f5d6126ffb71919dbbbcce45f8e22a37dd2fdba6d3cdf3698f1fc621e19fd49cd4cfe41450eede935719fec7d1a39b4d70fc416e59353ffbd06ca3b5b63c6f692e4d76bd3f9d81ee7bb1a21b75abd707dbd49dc23de2336c85a23b3fcabf5c8e1f915f517e5bd1519e579cf8cf216dcdec6f3551a19fb7b62a6f37723a3bcef98c9bf9f47467926c4a43fe22632c6930366ec5f679143bb91ccd87f3a8c8cf3df6226ffdb67467f5a907cba96f447460ee71bcd8cf39dcc2287f684c767b1bfa41d19fd03ea83eeb13e9e30537f4791437b75c74cf1602f72e8cfee33a37f2d0531fbd72566d487dc12f7919d23b6c42573bf15ce0ff3db6f45fb7f446e196aaf90db4bc8c93932eb47721a19f5639d19e7afde60a6fe0431cd7fd28d1caed7c7cc34ff0f9171fe3bcc64cf34fe2ee9bbe0fec9dfe866641c5f9b99aed7c83dd27fb519399c2f2f99f17cd18c1ce64f3f32e3fc8a5e64d4f76d669cdfd230e37c6634fe1ed98b3e8c8cfac8f723ff645b91511f4b66d29f2c72d00f6399f17e96e4db23fbb0d7cc78bd9e470ed7a71bcca47fb11df52fdd65a6782d23633b3f9fc5ebcd71e4d09e0c9829de26cca82fd510b9dfa0f8fcc08cf1d23d4646fdde66c6ebeb3b62d2bf3ae4137d03fa68024f88fbc8459f98e3e93133b6e78659a13de07c18d617bbc54cfec944c6f912c4ec2f0b663c5f1e440ee78b6b66d2af5164d4af35669caf648998ecc3ac46c6feee99b13fb91919f5618319f5415c46c67c29f647f33920267f69bb91f17ea7ccd89fba8a8cfac1cf43fa91f27828ff1333e43efbc39499ce9f33e3f95645c6f31f9829ff3a27e67c6b2772d09f84fba7f85c6c3393bed0fcf5fbd43e6426fd3924267f5bdf32537b580fa8568cf79698d653f51099f5ab3c41ee35900d33cda7de66a6f8f2484cf14ce5ccd89edd46c6f82390fbe4bfb2d3c8a8af23669c3f398b1ce42b2433f9972c7268afb89df455f499297e5e470ee7ab6566ec4fe491b1bf783eceaf4e89491fd571e4d02e7bcca81f9963c6f9d637c4e48fcc0a33f9af2933ea8b9a45c6eb2b66d48744470eed45ec9fe2e71eb2227f95e6cc78bd6d46c6eb2f98c97fe9c8a88f07cca81f96f441513ee07699e9fc6b66d2af95c8a1bd0cfe5219ce07dc13728fdaeb8ab88f9ca3be98a82f743ecfafb98d8cfea3474cfe446c32e3fcc9dbc828ff23669c0f531293ffc8b83ff21fc95964d48f15669cffe43232de7f0d5991ff90e3c8a83f7d669cff248f8cf373ca8cf3635789493f55c24cd74b66caff7b91511f6a66ec2f6d4646f9cf9951fe058f5791be64cc341e1b399c5f717f0ae7bfd88f8cf33f234eb0bd1a47c6f90efaa5a3ffca1d31e94b992377ac467db5c83de615e47e0339594356e43fcc6964cc6fa7cc383f7a2932ce4fc58cf2b5a3c8980f1f1093ffb06366d287f5c8d81fdf9fe64bdd4746f96e122b8a372232f65f33e3f5f22472b85eee30e3fc9b8bc8e84f06c4099e2f4a669adfd88ef36baac8617e52ee8fe76f3b32ea0fcb3b41f95b9a0fdd24ffb41a399c6f0f99b1bf6c1439b467f7ccd89fbe24ee607bd566c676d72056da86e709fe5edb18ff503eb6dba6f68ab88f5ccf90fbd45e67c4dcfe446c91ad46e6f9caae22a37fd8254ea8be73c78cf367869183fcd53533ce5fba1c19d7fbfbc8ba49faf3cc38ff8e19af97abcc64afe7cce49fe9f97587eeaf98f17ef28299f4a11519e74733637ffa2c32b6df31e3fce493c8417e15c94b93ff503c1ef21fea2232eadf2533f6971d460efd25c7c409b219339b76b89efa374d6ccf69fca683ed55985fd38ef5ab5562f23fd52332d73fac41e67a4775cf8cf977bd456cb1ffec01b9d74076a7c46d83e3191153bda53091b1ff23e43ed55b4a494cf97bd121a6fbd5fbc88aee57b69061be31bfbc8a1ce6dbee31533d8ec6a7c9bfd803666c173632fa936566d417a52387f9131bc4e44fcc9c99e6b760c6f9956d6443fe4226cc94af6691d19fcc98717ed306333e7fb2494cfae70c33b69bf3c8a1bda4f9300ab9c0f1d9580fde898cf5a55d62d297a21d19eb0b383ecbf5348de3b35c3f53e791b17e7ecf4cebc50933adf72c31d7d3ee2263fd789399ea157964dc5fba26a67a48c9fd51beef9688399f477bb0bd3eca43df12f3f3a0bc2ceba71e47c6e78fedb41f74c64cf5097ade3e3d4fd68f8cf5c40133ed371d450eedf93533d507b97fcee7b99dea41499399d6b36791f1790f99511ed545646c3f20e6faf72533f96bb447abc8be0b9a6f45fa540e8913621a8f267f9fde32a3fe27a8afe0bfc81f1f4646ff79c64cf58371648c972531f973d78d8cf678cf8cd78ba3c8687fd7cc148f3b91c3f825df9ffc753561a67c6c3732fae735667cfe9a9f4f59b4c77d62f2df7a2332fa7b7efe04cfcf43bb8dfe3b5f26267b4caf9063bdba4d4cfa963e33eaeb2533e9db3631ef4fb423637d719999ead7adc8d85f9f19f5ad4c88b99efec84cf6ba1a19fb8fe753fda76446fd4c4f91b93ea4c691b19ee398c9be2f23633d3963a67af61a31adaff59099f60fb722e3faf99699ea8f0791717db54e4cebb1fc2632aec722633e5570ffe46fea33624bfa7184ccfec69691d17f56cc78beda21667fd98a8cfee08199f693f622633cbf62c6fef48c98f71b0691713e793c5c6fbe888cf72379f5b9beec98e9fe9b9171fe27cc542f3e67a6fad82533fabbf28699d6ffd4bf22ff2b5698b13f9b47c6f872c28cf3af7acc54cf8a8cfe4a917ef0fad3de46c67ac11e33ad279e88299f287723e37ae49299eab5fb91717d6a99299f7d8c8cedf7c4e43feb2933ce9f237fa19ba41f5d64f687c51d31dd2f3d66a67a483b7268d7fbccb41e6912d37a493522a3bf3e60267f18dbd1df157564d4ff1133e9ff12b2a5f5919a440ee7679bccd89f5a898cf1bb60c6feaa56e424b40b62ca87c43e33c9ef2e7238bfbc664ed3202fbe5e617b8ee349627d721e19e3778b98eb43e8ef12f68706e72f89feed2832d69707c414ffd54d64d4df0766b417f3ccb85f3b24e67cc044c6eb0f99a95ebec74cef57dc32a3ff5227c4ec9f3366aa7f6f47c6fd879419fda3de898cebc76366ec3f3d8f8cf57985ccf5eaf28a19f3fd521353fd211f30e3fca4fbc4e4bfca75666cafef892dcd27c69744517eea6691717fabcb4cefe7907c15f9d3748799f627469131de4c99a9fe5131533de62a32d6632e98c9ff90fc95a2f94a2387fee536335e6f6a66f43fc93d33ad9f1f89139cbf749599f66ff87e5c1fd98b8cf91be93bd737aa2566b4df6a9798f2abf43032ae0fbbcc646f07c4645f35e9834e687ee8fe96facb6464ccd73433e5578e19ed3b5d8a8cfea04facf07cf91419fd439b99fce969e4707db2c19c74427f3c1ef26ff29899fcdb46e470bdeb20274dbcde0679259db85f5132e3fc1a45ccf1b1cf4cf9c90d32d797ed1a33d9e72432e6278a99ea3d5bc4e43fca9499f61fb623633df89699de671a31d3fb47379171bf5232537c7824e67ce98c19cfaffacc641f4366b2874d66aac7cc98697db242ccef13ed30d37ed32e33cabfea2073fccf369871fe6a1519e7ef8c19afaf493eaa4dfdf1f98af2912366ca67c6c409ed4715ccb41f9033537df39899de37a2f37593f6a3bacc74fe9c99ea672b91d11f4c98a9be11fb43fb777d66b46f9310533e91ae3353bd82e4c1f5aea48a8cf9c70333d56f4e23637ca7e7e5fa56d5888cf9c22a33c99bf4d390fdd4245fd3217ba2f1b27d2bba9eed533498697e0f99c99ef722633c217925946fc84766bc5eee4746ffb2c68cfda5e3c8a1ddd2fc24e49fd49419cfcfd623a37fbc20267f637b91717c7de634b4e7f83ccff15a23b33fb04fc464dfb61319eb0bebccf4fee23231bf1f741219e3f51633ed472a665aff6c10537e50f2fdc97fb983c8b81f3460a6fda6a5c8383ebe1fd52b9464467f20e8fcb8ffd160467fa07b91319f3f66a6fc7d8b99e253464cf1389b30d3fa7d9f99e24d2f32fa8b3633e96b1939b417242fdda1fccd30d3fb009619edd7ec32a3fd16e7c4bcfee84746f96c31e3f9f22132d6b7693cb15ec3e773bde68299fc2ddf8fec355791b1fe1319e591a13d265cdf3177cc54afbc8a8cf54e6ee7fae50e33f697707f148f9d6626ffdb8d8cf2a5f98df6bbce4cf19ce697edb11c440eedea9699fa3b62467b1343621a8fa899713ca21319fdc326335e9f92fe26e47fa4881cce974d663cdf1d460eeb938ce49d36b13dd9891cda8bb09e493b6c9ff92d31e5ef658dccfb8bce4646fb1e32d3fea221e6fdc03d66b4af94afa7f5b288e753be76c84cfb09c7c8acaf9523267d2c7bcca8bfa2888cf16a8719e38f13c85c5f2cbb91519f6b663c5f5e45467b1833a3be543931c5bf2a63a678771519d7c36bcc542fbc898cf1ae62a6f8d022e6fdd2f5c8586fda61a6fd844e64acffef33933d3e32a33e174bcc147f4e89d95e2f99c9be1a91d1be8e9869bc9dc8d8cecf47faa9769179fd9d5f3153fc9291437bb5cc8cd7d717c4645f8ac61fed633932dadb15339e9fed460efa6f497e29dddf88c8685f4366b2e7bbc8683f0931d9bfbc67a6f189c8e17ca189155d8ff39bc6fdb8f3c8582fd822e6f7f1d723637b9398be4f23509f53b6bfb2434cfa933e10f3fe6c1a19f7cfaf98c9bedac8ba49ebd37b66bc5e3c31537cd823a6fd365330d37eda61648caf3d667a7f629b99ec639919e55532533c2b6e23e37eee2e33c5b32933eddf9e46467b8fedf47e456cc7fb553c7e92873863a6fd09c74cf6bec28cfd155d66d237d4d794fd8fbe8b8cf5b59a19fb4b67ccf4fc0d628aeff95964bcfe8499ae7f64c6f198edc8989ff499295e0862f22f158f87f301ee9ff7af633bca53c476cab72a66f43f629519ef67683e0de9a3dc62a67ce69a99ea8f5d66f27745648c1f47ccb4de7fe6d0aef8f9693e521aafa5f5919d32d3fae58299e4d78d8cfd1966aa179c47c6fae30133fa4f3b898cf1fe8919fd8f9b47467f5232e37813d2374bf6a45b91b19eccfdf1fed579641c6fbc9ec61baf27f93499c9dfdf450ee331fc3ce4eff24b66f4777210398c37df27267bb5cb9171bc9299c6d767a6f16591717e53665a5fcd23633ec6e3a1fc2a3b8b8ced1d66f2e7e3c8285f6e27fdc96c641c1fdf8fe2a1569131de3c30537eb71e19e5c7f343f1486491311e90fdf1fad1de44467dd860a6787717199f2f63a6fe93c8686fa47f9cbf8a0b66ec4f6d44c6fb5966f28764cf319f9d32d3f57b91b1fd9199f4632d323e2f8f87e4552e45c6fb1b66babe8e8cfa45f188e3b5d861a6f355648cbfa4bf1c9f651e39b44b9277cae39d440eed477cbf94f9cff1adc71f797decf823af8f1d7fe4f5b1e38fbc3e76fc91d7c78e3ff2fad8f1bbcb4b8acf1ec1cbe3779717484c7df608168fdf5d5e527ff6085e1ebfbdbc8cb49f3d86c5e3b79757f2d9237879fcf6f24a65f6d963583c7e7b7939997ff618168fdf5e5e852c3f7b0c8bc76f2faf4ad69f3d86c5e3f796979cc82b79fdd9a3583c7e2779c99b773ebb95776f3efbc431fe4ef20249bcf2eda05f0f72fafab3cf1ce1ef242ff9f8ce6733397ff3d9d3e78df17792174862f08a73b922575f7db6f69919c667caebb565c975b9f1e69c4db9f5ea13f5996bcacfd5afd7b98274af58c96db9f3eab3ddcff4609fad5f8b31510ee59edc7f75ce813c7c798d3c92c79f35e24fd7afd7feeae465b54bd67224c7afce397dc56bbf72c49fedefe5d90b3a9717afda2fe5d2a2fdc947d990cd055efeb5f5c44fd6af35d97a218db6ecbc6aefcade8b4f8cecbfe0fcb58efedce357cbeb4d4c7ce1e1a512f265bb104209bd78be308b7d885f5c4dfcf5faf5b25e2a37162d50242215d9e2b9c28917d99628c442bd42ae895fbc1eff0c7b140b4f28b59888ab85b6eb97fe5bdc885bb1b08214f7e26181a6afb38d9f7d7c827ead8917eb1e317bf6d8321773b1b0da11991888d9c2b556ac88857c5fac89f5177dff74dfff29faf5228b077f74b2409b42bdf04f5b62fb391e8a1db1fbbc1a1243b12716f2357100d9d93b358eff747981575fc841c591387ef641e2448c16dac6a05f0bf9963813e722ee80880b71f9a2dffce7d7627f95bc166b56e24a2c89c6023717e4b52c5aa21daf9a807eed89986388ae58c82e445f81e89f59fd824cecd7c80bd68193452b535a99d8962baba2cec85aa52a4648e540bf460bd7e5aa601f251255aa6aa1ad96f3c5cac5cf5965fe2afd529397e3570b31515dab1b754b4f79aceed4f3332bb1a51e14550c45ad1e55f4fe6aae9e1622c58d1aa895853e5f5581fed3e4f53a33556b2ad6e541c3d6558c016a536db19ea86db52316563fa07bbbfc3b58e3f03997537b8beb0031fe5935b25f282fa51662993a5087516f3aea4851cd410ed5c9b384c4a31aa9b1228fafced4b9a2ec563440760b9986b857d1f7ab25792e3aef8fe2f795d79b954f0e3ab5e8e52f55948b3a867522e98a5a06bf442de2c8ffd55eee4919957264006b1ca92813d555bde77581ea2ffab5ff14791dddeb576b412d20578f9150359ff5482bad791f481b6dd9e38b0b35d209e7583ad59926ab167d9deb027f97f7bad451421053e5eb91fc67c80b9ef0d5da4e2522e6a622d1134d5e5f8cf5b5a64c533a7dcb1e5fdfe97bfd80be482a3dd58ff1da998efb20620a59ec734672afdfec87fcb835e6cff65ffa55b5453faabdf8fb8aba613f234ef5aa0e2b47b9a1ad5ec7bcca5b1d7c4eb1c0e7fa7a335ca9e09c2db653bdad77f073f87d570ff5deab7bbeaad9fecef292f5cb7aa83ed087cf6de08f484bf4115ba42cc580cf1156ed68cafef5891e71ad02ac71aca95ff87caca9eaa8cff585be7c3982d733f69bcb6b0292587a66d1817c9d2a10e24e4ce4013dd5be6ee8947e6fea651df44bb740bfda3ae8a0ee824ef5bc4ee9be6e1b89566a845186ea6372d918f3aa1e0691e48756c87ebcbc5e8f4fae99c4a4cf6c3255b217334ec7d5b76ecaae5f1bcadae46a84ba660a0d3917f6684a3d32c1ab8380b4a9b1ee6326f0fb155aa6b93637e245b5dfdc9abb1f5bb3f819fa655eb1689b87c53aa89066cab9976aa30f13daf85c2bd8924ecd0c6b169041807e9979c8cb0ed5c8044f6e06ba61289737ab62d7a0df0329eb1d5e27a084cdba59a885981ff0aef5cfb14779f232bfd61db3a9636494ca6c498a8c665b6bac008a433d922103353ba033a16e6386907fa558e3d2c766cfec63cd022417ecd81c9a234399ae393123b3a05de6d49c99f38531d572e3fbe3e4cff25fea58cd17335673612e0df9312564032c2eacb84d43ddc94d94a2d8d2cbbe36a114c823e46666596bd0af16fcb6e4ff7eb3efd1744dcff47dcc94f7ea446b1bb22d2b74c32e589ed5d6d8059db689585a5c5ffe6ef28211a6aa5ed4329b59c7de456436b79c6dce6ce9f33459db0a2c12e4a436c416e823588fadc1bf6d59bfaf9b8164aebc7f53b9dab161ed696fd4c8defabc5e77e1b3bbe74ab6bdd723bb50b7b653fb68677f3fe65f272ffbe62d1a788ab97d5aacd58b9e1df0feb55d81670d350495c16f6bbe86af5774c3570725e814e45af0bc765d8de0b7d25b179cb581b1117edbf49a66b740a7b6e1df1dbbabad1d729ddfeec1e7fbcfda6d0f74620fbf3cf6cf9097cf835e7f2227a6698f9e23965c534f62ce5a608f41778efca7f604f4cadbd706fc5bfaf385d0f77604e78c6d09fa75ea6b64a05f6732074d1aa9963df7b5568897d2473f7b016d975cd7b74b62601bcf5558d0b5b16dbe1daff8476faaff487b942776592ebff824b72dd1b26d969f9d801e74f01c01baa36e7c9c94de0b757d1cd5cb10e30e6c4f794bebcba686f868da0978a844a873bf536b0bd3d619440c61a02d51e22ed460b712cac1129358739324ec09c0ebcf92f4e538932c71fff42dcf1febbf923c29ec8b1d7d39494a0d7914914a2a6d933abc69522720bde42ae4b4a06bfe09e426e81cf899e41af2aeb6d72fb503b2b851dbc92d48e74e77c500d8e77413e08704a49d3caa9d6446d9ebb58f9dc99c73c0e4498f9357f9bdeaca95e41f7bfe1fedef9355354e5eec20ca5cf47423a17daf6443ec41482bbcc4924d88875be25189644beb643bd911e0f121b7efe8907725bbc930e8579edc41ec6cab0b71e2fd59b2e7f32ef8ade7d78ba0a5a364dfef81ab86821c2e3948c857a9dcccc08fbdc86c4c991c25dff17ecf8f8f8f62353911422dd4d2650e3a364a46f414db1a7443b6424b1fe2d816486eac5ac92964f6fb5e3f6447ee80ce9cea83e40cfe3d4f2e924b58473e988364c9eb9779121b6a47a549439e057d3bf13e4f0ecc26fcde4cd0da779216dcb3fd9c7181a677926ed24bfa1f7b9e1f272f05f954fa4ead2915a9d236d5cfef017a3f6666fa106356b2ea3d4ef0f013fd80ba079618d68f29f81fb999da34316dd913e09b4c3b4dd34c6ca52ecd41e7ce7592160672b5b44c2b03999aba4b4126e904d60c239061b8a79826ddf42abd7ef6e96ad5ff3596f42679274e7ee47debefd32f69e5467afb4e2d752dbd4befc5208d3910ea18e85da8b5a4530df9ba8f6dfa08ec6a903e2677f0af4b67f221fc3bf77a963ed98d7490aea4abe95a3a30365d57a91ea51bc905486627dd4c41ea7a966efb71a4e0e7542b0dd57d09d285f6a118f3b8d2bd743f3d480fc53bdf45520da9bebddaffbdf62887b24e8f9261faca27282112581637d4a6bd11072831bb01f9d5567ae29f2205af2384ccd3b10109c1daf022850c4bdc26523dd9467a96ced3f3f402e47e299274494ed206f8c1b6eaa44de0653d4c66e0b39a100bb7ac948f7637f8b50358231ca42d90741bfae8600d4dec9855dd48bb692f7d6589190856e4d2661f5891ff18ff9569359407e0b35ebe1da8d20d0d72c94c16e2958f95b01e1c65899f515869ef646081c94af04989cdf438cbe45a3205ad5d58c9780fe4f77b6409994382ecdbe11395b90c3ecf0a880e33b12b125967a5ff5d3d6595d719a9540d167c9fd572f0626f321753bd9d347525271fdba7fc51fe3ed9c826469a6976f5f27378a26bd383b8b58fe3b4adc482c46e44db3ca9147ebb85b1cf200a8290b285f770b2fbec219b668fd92c9b674fd9808e956c153e7984963539c828e6a653a3d3fb6c23dbccb6a0c76db395ed646099e97106f11526620f24b920956c3f1b6a9b1d64ff20e7ff71f111e63b07e91ca9343bce1672fd6c04b9f79639b285f75dde8f416c1ba53b26cbc6decf64a7d95976ce3b86601d17d925c865098e46f8ef52d6849f65f869d127cbf4b39ab5b38e5f790bd04b31cebab03a9f81c51f7a1dcc7aaa25b6b2be93cf9a65a74ec0dae1d629a77f4d7eefdf7ff95a1dc9f93faa76037e2b57735e3ba60d3d0c1171e4ac7c849cb534b03e749084bbd4f45cc6fb3cceb99c24f485c315ae7495abddc45d81f4f0d381bb76377208d2989975f5e46edd9d99080179dbb9bb77147152696fb253581b6837758fb032fb87b5b08feb97ac6135e2f793bf5017973578fa633d8691cdf42ec64e912515c436b03b37338548c4a518405ef5903937f731cbacb9273708125971aba0374b6eed1d79814eb9755e8fcad26db84db05694e496db0eef69809dba1dd43373e668375cefbaa1d7f174c5ed25cb7ff37c5ff5feffc41e7d2e9decba7db5ec0eec9ed811c3b7e7e84bb36e6e7cd4b21d1f3bdda13b3232dbf6f99419b86377a2f36410d645d68dc8cee66e9c36dce9d7750cce320b63e9b83377ee82fdba0b57793d3373770933b3e41a70dfa65bf69a0d3f77aee5daee0bfbdede665c572ba5c1affc60793dcf83ebb97e2ecd6676aacfedeb37c1ad3b4a66591f3c701f7c571fb42af1be2b173e37cf55aebddee586f4e3220f3111bc5023faade53cc9d33ccb5d9ee705f92cf06579f9daf788d5bcc26bf23a0ffa9c5fa597a69b085f3ff3f137bf062b546ff2c449a86e9c8bbe05bf6aae7ceefff578f9bdfe5e6f827556f98d6da8149299dbfc2e5f783f15f2f72a7ff06b40f899e6d3fcd14074b48d7ce66bf6f9dc5b1e3ce3533ee07dc87c85f5285fcdd7f2f57c037e36f3ad7c3bdf2189f963fa7624d2e6bb182572d277c85020dfcbb6d39597b1d04b24dfcbf7f383fc30e99aadfc283f865c2f97ef547d7eb4bc68047590da49dacd21dfcac7f9a9eee6b4272807f9793af4eb40af5bf945a2c1c74cf24b908cd7a379be906be54b1c17f306c8a819a4b5053fcbe1df56d6ccdb78c6fbbb64d961de09529de7ddd05f2f69e6fdb4c36717b210765ca8428b81d685c98f0a9b3641efbeb9aeff2df22a926fdb5bb13dc8c7ebfcc64d4d4febf4aa48ed53b62f8d16626c9501cbb477057877d771759055a3706a6137570e21b7a20ca2c8f3f5a2c8b7e087ffddca378b9275cc7de109a5282ac8d7bc7eeefab5620133a9568b4971555cc30a1cf43cbdf2158db49b1d143790bdac7ffd99c4c1c7e5e5bd8ada131b322d6e0b51dc89031fd3beb4e602eda98bacb807ef0e128235e3969ba95c3ea4bbc5838218e6b68b69b09aa7373b959672ae66f1483ab58e120b3a1674ad987166f1653f23953b0fb174905d84886274e6d7197a969c67fd62eef68a1bc860bfb08febfd72f1544ccca1da5035e4ff2fe2e5b7daa3cf57b490b618142bc56ab156acc37a2f2f368acd7c3f31f9bdee63bd829fc21d4a652df88521f8355f6338c81fdd5db1057913c7b995ecd537a58aede8bb96bdb48a1dd2afdd051ddba173fee63bb6c5307f0ad1e1a9d82bf645966e1407f60e74ea109ee168413afedc63589d75f37dab8b1371afc649598c8ab10a79e1e2774b3e22af97f2d71b625c9c26f3e4a038d3d6cf5df04d63b35a9c9b53884b06b28c2cec1526c54571996e174b322fbc5f6a2fe4e74b4573713f3aeb90b48ac24babc53a1524873ab655b4495eadf46ff67be07e1dbadf8a7ff2a22b6d587f825d241dd09f42d545cf1e157d9f17ea717a50ca52940ad6afeacbef107c8fbff7ebfae410e6ae59ead294365d81fb6a33d3da67f365224436cc6ecbd46e9499cf8b4af74e36d52a73fe1b5f65c1de0b64b31c74ea856e05fd8a79ec7bb59997877359c881cb12f758caaaac21c73745eaf79f744343ac3637e524699757695364ee0eede86bc70f8a8f3067e5b548d28b2c4f77cb1bd0fcbed739bf3ef4f94f2e4cd77b02b78959fc426600ff96b7a82b455c2f967731260689f1bf45abe0eb5afacd77975f8c68adbcc7d552f990417cccefcdaa2dfd98604eef4d2fbf2ea7e563a2f34bff36c1b7bf63f1a3ebd17e7edc9db4e5cc0ecbb9cbec9d7af235026dcba7125650e50af8e2b75a3628bdc5ec3397ab79eb456c0cff82756e95ac5f5fddb128d7cb329c352b37609e1e33e163a21a959bb691ed2583722b9fc8fcef62e3af90d7f381eb465997dbe54e765eeea6439378bb00590ecbbdb03ec49a03cb68bf3cc04c206b94872f758b62e57abe5d1ed1f9975fbcaf2d8f690e4eca918f75e5385d296fca79799af96f2f65dff36efecf905788e1fc73e3dfcb820801ab6c0b31d3ff0e33ceb9f8a265c213c695d05279067ab54b56b8eb75ab3c07fd8af58bf20bd6981dba0b5c33b8aabcf0efec97976e578c43ac7bf397527e84bc423d338395ccb9d831d7e5527a2ca665a3106533b3e57221cb16cc58db4ef52eb476b2133bd627e6b4ec66bdb257f4ca7ef2549c57b25095c8ba2a2f2166daa364a952b6487720af768632d472a3d2d9738d6bf1f06bc4a2321423a31fab6c3ce39db70ffc5125c1c337aad43f818fcf556606629e3c550ec6d64dd6aadc9c662765c75ceb5d7b913e986e7195d9aa2844555655551713d7ccefed14a2aba43a6efd3579f97c563ecabc9ac8bbeaca4e12a97bd57575638eabdbeace2d15f3629e76abfbeaa19aa607d5236413fe559819fc57c34f8839dad7ed83bff0752e5f87f27509fc4913359207e85f93e36af68eb4e2511e56f3ea09e36435a8565092fea8def9f6863b43cdaad64ae7f3aa722979f2f97cb69d9ce3386064615c38de6abdda08e3b6d546f508cfb299764beb5ad55639af6ed229c4f45579a70ee464f11d902fdb63b0a61c6307d7ccfdacc981547a03563e33888797f965b5ed8e20a3d8b1cd2caf76aadd6a58eda5bbd5bedd4f7ac94175905e5787f62ebf76d3ec28bd4f072aad8e406645e87bad3cc8eb77758c33d7a43aae4ef2822dd7fbbdf2cd9b1ad9bd5b27498e2ac8e8aa537b846b8bac6fb6b22337adceaaf3ea22995597761fd68cbbd5927da81afeff41a16a56cbe925644533596b583504ff4631f3ed1ae647f8aff87d02e1bf7be66b5247f7e9d8ef43829eb6c0e38fa44d8ec136da56564dd72e2eaa4e31e06b214e5d70d5ef1d9ff65682c317df75dbafbad11736aa9e7f575f9d557d0b4b995ad4aad669478334cc58dadaf8fd281c1bbf4ffd51cfff7df2ca586279b5cc55e58f48988fa45fdb72ef6bb61975705e27750a6bd04695e455fe940de219833ae3bcfc7dddf076522d735d580ee0f70fffed8aefcaef7d4618aa8412acc48dbee71b7412ecbd76f5dfd4efbf22c901645a7f5b43a9bc45d30aac061baf3ffcfdd2ef9197bf7b1dde584e61cceefc9ff6f37ce822efba51fef40d526aa16fafebca6772f3bcfb2d352cbd514f7c9ddf1fae86f5eb3b95f48fc92b3bcc8769c3fb856c5a785f3075e3e75eab6ed5cba66e54875dc66a0c230edfa20b9598b6a4f3eaeb622f1f16ce85effac02a685cdfe4c3faa67cf5d784eadb7ca9be7b5b25366b353c8d3b7f616d2f0e5855cdf261e9f26190d6ccdd789f26efeb876c5adf80178bf5ea6afc6a2cd765c8eacb0d3f2bb0569aa29ce5b0becaa6f06c9b68afd97d3e041ab374bf242fbf86aba7a83b3e0e499885fa119fa8f6d17f00235ca9c3777ddc4dd4afd9b37ef97983e79cc35913ef43ea79d08655bf7274fc1ed8a47ecaa216d583f7de999116ee7d0f39ff5abd52ec9527d9b43c29f6ea15e0d5a20bfdae6597e1eaf567e9047b7e82bbada0146a17ee3d77833ad4b1c28a6b1aeebf115a9eb2b9d70aa9eacd300bab30ce20d93a0b4fd182b586fb9abcca0dcc9dbdeef83ab859f395ca30fe3093f5b5b4cee02efa4bfdca77bd7e3903f7bdaa4b38c762edb42e7d9b33222961b455f01ef5164a0ad6459ba5f3fbd85f7b27cbf7eb7d53f8e171bab0726f41b47cfec6db6dfe54ad41bc1c8214efbcf5f9aa64bdedc782df71abbaf854c16e4670d60ebebbef2a3fc6ccefd1d0de13c4ec25f0a73ef23eca05ab7d638f1db0ea06f9a621e9d75ea83ff819995723e8f7315f7aa55fd17f392fefbdec11e6ebb1de47ebcc687f027463a95ef5b38bba55de576d8c9569a39e7d6bac92753dc5588a99e9e2e12e7cd516c63eabd323af9b30e2c5b178fde2dd9045ffe540bbea1cce6b63fe86b654afc2d35fe62f7cdc97f42bc4bee9a27e157ec76ad55db92bd0efdacbfc8d7e7979aff9e700eff204cf348dfa35e4392be83aafedc5c2f7c6eadbbfaf6785510c633498d5af6aeba2e3ef1a62edc4e780618657ea1cae98e3589ef50b7a0299a32f93139fc1b90bff6ca0f1155bb2d7d1faf065f6f35a5e5e3feaec8dfff27ee8366b950f7eff58e698e7bce7bfea23bf079df461c4240dd0af168ed1eb5779807dfbf1bdf4f37fa75fb2cebb0bbb6d55da787b8ed7af67b97be9940f69c3af494846fb2fe5e5dcb3ae81e7cfe1d926380eaf5fe5c1db3bbc9657da70fe3d98c730b2d5ac5d1fb37ec17cf9bbadd427d923aedffcdd51bf44e2e5e5754e4d7d9dce15de6aebf0ee42bdcd630c198f9fb351f03d2b1fc97021163e6719f3ecc1bc539f50b7eea2dc5be4ec31ece0eebaf3b278ad5fb90d4ff818d6d43e5b6e94f77ed4ee86f5eb756c7c4f5e7066523ee44f7909ebba99ff17bcf70a6a82acdda6dbf2dacd5202a9e277ed8abae61d2ec8d5c7feca6c5e86bf16579f6633f4336e03343e8c063c7c0be3f0df1fd0dfcac27aa905b3f5c5bf910699cee3e2de773daa87688f3896e4b8bc659f07f1e7c45de525fa2bd0f9477f2658659052dead73f7cedf96792f5fd56b72022bcf9c7fd4c273a95319be371d56e39ea9cd6c3cdbb91c7a6b84f3d6f81afefc88feff38c063ac783ff7759f25f6eb33d0d685d538f8ceb5afeca34d701c2f3e1bfa7e9ec7b2d88ee35cbc9fcc999fc7faf7f2fa158718fb1807f9f9f97bba5274b30e58ff205bac8fadbaa7ef7bb7f9471c9ff7f7f8205acc516720973fcb7c6d6f9c0f20863e566fde65720337aa967fd6df94f8cf9057d0b1fb6f5827ceeb49fddbfc8df2cffefb9865f1959ac453b95f3b91fd0e7ac5c767cb2b64c41d770e525b09efa7b632bf8a9b55a3eca2eafedabf7df92dc7e7cb0b0fbd515fd4d7eeac3e80f5df44d6ea9b728d5f7ffc2ef2fa4f39fec8eb63c71f797decf823af8f1d7fe4f5b1e38fbc3e76fc91d7c78e7fffbffff9afff0fde60a61c</data> </image> </images> <tabstops> <tabstop>button</tabstop> <tabstop>netview</tabstop> <tabstop>TabWidget</tabstop> </tabstops> </UI> diff --git a/noncore/net/wellenreiter/wellenreiter.pro b/noncore/net/wellenreiter/wellenreiter.pro index 6f07ac4..4bbfa5b 100644 --- a/noncore/net/wellenreiter/wellenreiter.pro +++ b/noncore/net/wellenreiter/wellenreiter.pro @@ -1,11 +1,11 @@ DESTDIR = $(OPIEDIR)/bin TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release -HEADERS = gui/mainwindowbase.h gui/wellenreiter.h gui/scanlistitem.h -SOURCES = gui/main.cpp gui/wellenreiter.cpp gui/scanlistitem.cpp +HEADERS = gui/mainwindowbase.h gui/wellenreiter.h gui/scanlistitem.h gui/scanlist.h +SOURCES = gui/main.cpp gui/wellenreiter.cpp gui/scanlistitem.cpp gui/scanlist.cpp INCLUDEPATH += $(OPIEDIR)/include gui daemon DEPENDPATH += $(OPIEDIR)/include gui daemon LIBS += -lqpe -Llibwellenreiter/source -lwellenreiter INTERFACES = gui/wellenreiterbase.ui TARGET = wellenreiter |