summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/gui.pro4
-rw-r--r--noncore/net/wellenreiter/gui/hexwindow.cpp35
-rw-r--r--noncore/net/wellenreiter/gui/hexwindow.h38
-rw-r--r--noncore/net/wellenreiter/gui/logwindow.cpp38
-rw-r--r--noncore/net/wellenreiter/gui/logwindow.h38
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp11
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiterbase.cpp93
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiterbase.h11
8 files changed, 176 insertions, 92 deletions
diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro
index fbe2c11..6b9944d 100644
--- a/noncore/net/wellenreiter/gui/gui.pro
+++ b/noncore/net/wellenreiter/gui/gui.pro
@@ -1,11 +1,11 @@
DESTDIR = $(OPIEDIR)/bin
TEMPLATE = app
CONFIG = qt warn_on debug
#CONFIG = qt warn_on release
-HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h
-SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp
+HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h logwindow.h hexwindow.h
+SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp logwindow.cpp hexwindow.cpp
INCLUDEPATH += $(OPIEDIR)/include ../daemon
DEPENDPATH += $(OPIEDIR)/include ../daemon
LIBS += -lqpe -lopie -L../libwellenreiter/source -lwellenreiter
INTERFACES = wellenreitertemplate.ui
TARGET = wellenreiter
diff --git a/noncore/net/wellenreiter/gui/hexwindow.cpp b/noncore/net/wellenreiter/gui/hexwindow.cpp
new file mode 100644
index 0000000..91aa6f7
--- a/dev/null
+++ b/noncore/net/wellenreiter/gui/hexwindow.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** 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 "hexwindow.h"
+#include <qmultilineedit.h>
+
+MHexWindow::MHexWindow( QWidget * parent, const char * name, WFlags f )
+ :QVBox( parent, name, f )
+{
+ ledit = new QMultiLineEdit( this );
+
+ // FIXME: Set properties( font, read-only, etc...)
+
+};
+
+void MHexWindow::log( QString text )
+{
+
+ ledit->append( text );
+
+};
+
+
diff --git a/noncore/net/wellenreiter/gui/hexwindow.h b/noncore/net/wellenreiter/gui/hexwindow.h
new file mode 100644
index 0000000..eec1be0
--- a/dev/null
+++ b/noncore/net/wellenreiter/gui/hexwindow.h
@@ -0,0 +1,38 @@
+/**********************************************************************
+** 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 HEXWINDOW_H
+#define HEXWINDOW_H
+
+#include <qvbox.h>
+
+class QString;
+class QMultiLineEdit;
+
+class MHexWindow: public QVBox
+{
+
+ public:
+ MHexWindow( QWidget * parent = 0, const char * name = "MHexWindow", WFlags f = 0 );
+
+ void log( QString text );
+
+ protected:
+ QMultiLineEdit* ledit;
+
+};
+
+#endif
+
diff --git a/noncore/net/wellenreiter/gui/logwindow.cpp b/noncore/net/wellenreiter/gui/logwindow.cpp
new file mode 100644
index 0000000..dafb429
--- a/dev/null
+++ b/noncore/net/wellenreiter/gui/logwindow.cpp
@@ -0,0 +1,38 @@
+/**********************************************************************
+** 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 "logwindow.h"
+#include <qmultilineedit.h>
+#include <qdatetime.h>
+
+MLogWindow::MLogWindow( QWidget * parent, const char * name, WFlags f )
+ :QVBox( parent, name, f )
+{
+ ledit = new QMultiLineEdit( this );
+
+ // FIXME: Set properties( font, read-only, etc...)
+
+};
+
+void MLogWindow::log( QString text )
+{
+ QTime time = QTime::currentTime();
+ QString line;
+ line.sprintf( "[%s] %s", (const char*) time.toString(), (const char*) text );
+ ledit->append( line );
+
+};
+
+
diff --git a/noncore/net/wellenreiter/gui/logwindow.h b/noncore/net/wellenreiter/gui/logwindow.h
new file mode 100644
index 0000000..325f8d0
--- a/dev/null
+++ b/noncore/net/wellenreiter/gui/logwindow.h
@@ -0,0 +1,38 @@
+/**********************************************************************
+** 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 LOGWINDOW_H
+#define LOGWINDOW_H
+
+#include <qvbox.h>
+
+class QString;
+class QMultiLineEdit;
+
+class MLogWindow: public QVBox
+{
+
+ public:
+ MLogWindow( QWidget * parent = 0, const char * name = "MLogWindow", WFlags f = 0 );
+
+ void log( QString text );
+
+ protected:
+ QMultiLineEdit* ledit;
+
+};
+
+#endif
+
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 11cdaef..e983b4d 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -1,179 +1,188 @@
/**********************************************************************
** 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.
**
***********************************************************************/
// Qt
#include <qpushbutton.h>
// Standard
#include <unistd.h>
#include <sys/types.h>
// Local
#include "wellenreiter.h"
#include "scanlistitem.h"
+#include "logwindow.h"
+#include "hexwindow.h"
#include "../libwellenreiter/source/sock.hh" // <--- ugly path, FIX THIS!
#include "../libwellenreiter/source/proto.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 )
{
+ logwindow->log( "(i) Wellenreiter has been started." );
+
connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) );
netview->setColumnWidthMode( 1, QListView::Manual );
//
// setup socket for daemon communication and start poller
//
daemon_fd = commsock( GUIADDR, GUIPORT );
if ( daemon_fd == -1 )
+ {
+ logwindow->log( "(E) Couldn't get file descriptor for commsocket." );
qDebug( "D'oh! Could not get file descriptor for daemon-->gui communication socket." );
+ }
else
startTimer( 700 );
}
Wellenreiter::~Wellenreiter()
{
// no need to delete child widgets, Qt does it all for us
}
void Wellenreiter::handleMessage()
{
// FIXME: receive message and handle it
qDebug( "received message from daemon." );
char buffer[128];
int result = recvcomm( &daemon_fd, (char*) &buffer, sizeof(buffer) );
qDebug( "received %d from recvcomm", result );
/*
typedef struct {
int net_type; 1 = Accesspoint ; 2 = Ad-Hoc
int ssid_len; Length of SSID
int channel; Channel
int wep; 1 = WEP enabled ; 0 = disabled
char mac[64]; MAC address of Accesspoint
char bssid[128]; BSSID of Accesspoint
} wl_network_t;
*/
- qDebug( "Sniffer sent: '%s'", buffer );
+ qDebug( "Sniffer sent: '%s'", (const char*) &buffer );
+ hexwindow->log( (const char*) &buffer );
if ( result == NETFOUND ) /* new network found */
{
+ logwindow->log( "(i) found new network" );
qDebug( "Sniffer said: new network found." );
wl_network_t n;
get_network_found( &n, (char*) &buffer );
qDebug( "Sniffer said: net_type is %d.", n.net_type );
qDebug( "Sniffer said: MAC is %s", (const char*) &n.mac );
//n.bssid[n.ssid_len] = "\0";
QString type;
if ( n.net_type == 1 )
type = "managed";
else
type = "adhoc";
addNewItem( type, n.bssid, QString( (const char*) &n.mac ), n.wep, n.channel, 0 );
}
else
{
qDebug( "unknown sniffer command." );
}
}
bool Wellenreiter::hasMessage()
{
// FIXME: do this in libwellenreiter, not here!!!
fd_set rfds;
FD_ZERO( &rfds );
FD_SET( daemon_fd, &rfds );
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 10;
int result = select( daemon_fd+1, &rfds, NULL, NULL, &tv );
return FD_ISSET( daemon_fd, &rfds );
}
void Wellenreiter::timerEvent( QTimerEvent* e )
{
qDebug( "checking for message..." );
if ( hasMessage() )
{
handleMessage();
}
else
{
qDebug( "no message :(" );
}
}
void Wellenreiter::addNewItem( QString type, QString essid, QString macaddr, 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, macaddr, wep, channel, signal );
}
else
{
new MScanListItem( netview, type, essid, macaddr, 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
addNewItem( "managed", "DummyNet", "04:00:20:EF:A6:43", true, 6, 80 );
addNewItem( "adhoc", "DummyNet", "40:03:A3:E7:56:22", false, 11, 30 );
QString command ("98");
diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp
index d938561..7849e12 100644
--- a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp
@@ -1,126 +1,129 @@
/**********************************************************************
** 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 "wellenreiterbase.h"
#include <qheader.h>
#include <qlabel.h>
#include <qlistview.h>
#include <qmultilineedit.h>
#include <qpushbutton.h>
#include <opie/otabwidget.h>
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qimage.h>
#include <qpixmap.h>
+#include "logwindow.h"
+#include "hexwindow.h"
+
static const char* const image0_data[] = {
"150 105 949 2",
"g0 c #000000",
"g3 c #000008",
"g1 c #000400",
"i5 c #000408",
"g2 c #080000",
"hD c #080008",
"hB c #080400",
"g4 c #080408",
"gA c #080808",
"gz c #080c08",
"kk c #080c10",
"ij c #100000",
"kQ c #100408",
"hA c #100c10",
"gB c #101010",
"lD c #101410",
"ie c #180000",
"iC c #180400",
"gC c #181418",
"lb c #181810",
"gy c #181818",
"kM c #181c18",
"j2 c #182018",
"lB c #200000",
"jx c #200408",
"jv c #201820",
"hY c #201c20",
"iz c #202020",
"ho c #202420",
"lR c #290000",
"lS c #290008",
"mi c #292429",
"gx c #292829",
"iB c #292c29",
"hC c #312c29",
"im c #312c31",
"hj c #313031",
"mR c #313431",
"kP c #390000",
"ku c #393439",
"hi c #393831",
"kt c #393839",
"kN c #393c39",
"ii c #410000",
"mE c #413c41",
"gw c #414041",
"hX c #414441",
"lf c #41444a",
"kD c #4a0000",
"g5 c #4a444a",
"iK c #4a484a",
"mS c #4a4c4a",
"jw c #520008",
"hn c #524c4a",
"hp c #524c52",
"hT c #525052",
"lx c #52505a",
"hG c #525552",
"jh c #5a555a",
"iL c #5a595a",
"gv c #5a5d5a",
"iJ c #620000",
"mq c #625d62",
"hU c #626162",
"l8 c #626562",
"ig c #6a0000",
"jk c #6a0400",
"ik c #6a246a",
"hH c #6a286a",
"jM c #6a656a",
"hm c #6a696a",
"mj c #6a6d6a",
"i1 c #730008",
"kr c #732c73",
"mm c #733073",
"le c #736d73",
"gY c #737173",
"mh c #737573",
"lA c #7b0000",
"i6 c #7b347b",
"hE c #7b387b",
"lu c #7b6d10",
"kh c #7b797b",
"kj c #7b7d7b",
"lc c #830000",
"kW c #830400",
"mA c #833c83",
"gZ c #834083",
"lF c #836900",
"bd c #836d00",
"fO c #836d08",
"lv c #836d10",
"c8 c #837100",
"cq c #837108",
@@ -1029,253 +1032,179 @@ static const char* const image0_data[] = {
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtaRay.nQtQtQtQtQtcYcZc0QtQtQta#.1aT.cQtQtc1as.GQtQt.a#Hb3#5QtaaaTc2QtQtc3bbb5c4Qtc0c5c6.nQtc7c8c9bFQt.taSbbd.QtQtd#b1daQtQtQtQtQtdbdcddQtQtQtQtQtde#0aBQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtdfam.iQtQtQtQtQtdgdh#UQtQtQt#gdidjQtQtQt.xdkbmQt.mdlaTa2QtaF#HcGb#Qtdmbt#HdnQt.gbbdo#eQtaiaJdpQtQtdqaTdr#gQtb7aJds.DQtQtQtQtdtbTduQtQtQtQtQtdvdwdxQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtdyQtQtQtQtQtQtQtQtQtbydz#mQtQtQtQtQt#8dA.NQtQtQtdBaTdCQtQtagaTdD#oQtbBb1#VQt.bb5#H#uQtdEaT#H#kQtcVaTdFQtb9b5aTdG.nQtdHb1dIQtdJdKbddL#sQtQtQtdMb1dN.nQtQtQtQtdObedPQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbSQtQtQtQtQtQtQtQt.nc2dQ#UQtQtQtQt.Daz#y.DQtQtQtdRbt#QQt.DdSaTaFQt.FaTak#UQt##btdTQtdUdk#HdV.iadbbdW.ib7aTa4dXQt#WbTc..aQtdYbbdZ#CQtQtQtd0#Ad1#eQtQtQtQtdtbUd2QtQtQtQtQtQtQtQtQt#eQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.Sd3.3QtQtQtQtQtQt.id4#4d5QtQtQt.ndnbdd6.3QtQt#EaTaqavQt.Sbbd7Qt#5b3aTbOd8aqaTd9.2bcaTc5e.Qte#aX.9Qtdjc5bg.ac#ccaTea#s.n#H#HebQtQtQtecedcqee.iQtQtQtcVcxefQtQtQtQtQtQtQtegeh.pQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQteiejdYQtQtQtQtQtQt.nekbtcjQtQtQt.aelbdem.nQt.menbdeoQt.nbRbt.pQt.Gbt#xQtepbta5QtdUaJ#HeqaIeraTesb7#A#Het.DcnaTeuevQtewaJex.iQtQtcp#AaTey.dQtQtQtezbUeAQtQtQtQtQtQtQta7.BeBQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQteCaUeDQtQtQtQtQtQt.i#8b1eEQtQtQteF#Mbd.j.nQteGb3#H#wa#eHbbeIeJ#laTb3b6bcaTb5eKeLaTc5eies#Hb5aY#SaT#HeMQtcCaT#8QtbKaTaTeN#bQta1awaTeOePQtQtQtaicxdN.iQtQtQtQtQtQtckeQeRQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#CeS##ay.iQtQtQtQt.iekbTeTQtQtQtaIbnaT.4QtQt.9bTdHQteUa4eV.mcN#AaT.6.JaJeVbOeWaJeXeYeZaJbucOe0#A#Hcz#FaJafe1.W#A#HeS#UQt.AcG#He2e3QtQt#Je4bTe5.mQtQtQtQt.ne6e7e8e9QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQta0Qtf.QtQtQtQtQtQtQtQtQtf#fabdfb.bQtQtQtQt.id4cxbP.nQtQteC#H#HaFQt.nbub1eEQt.Gb1bfQtfced.Gfdfec5.8#n#Hc5fffg#Hfhfib5eXbefjca#HfkflcaaTasfmQtfncvaTafebQtQt#ve7fofp#eQtQtQtQtaCd6bdfqePQtQtQtQtQtQtQtQtQt.tQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.d.FfrQt.nQtQtQtQtQtQtQt.Dfsft#AfuQtQtQtQt.iekbT##aMQtQtfvbtbR.aQtbQaT#AfwesaT#hfx.uaT#hfy#AaTfzdFfAfBfCfDfAcdfEafbTfFeYaTaJfGfH#HbxfIQt.dfJ#Ha4fKQtQt.g#HaJfL#U.nQtQtQtfMfNfOfP#gQtQtQtQtQtQtQtQtQta1.a.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.L.mfQeLfRQtQtQtQtQtQtQta##ecbb1aGdq#OQtQt.idFb1#HfS.nQtfTaT##.ifUcuaTaPaYfVaT#re.azd1fWfyfXfY.DfZ#ef0.nf1.i#5a6f2#ef3bLexeN#2edcHd..wdKaT#HeO.a#Of4aTf5d1f6a#QtQt#JcCb1f7f8f9QtQtQtQtQtQtQtg.g##i.dgaQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgbaL.Oay.aQtQtQtQtQtQt.afFbTaTgcgdQtQt.neka4aTge.a.ia5aJgfQteB#A#HcedgbUgg.Dev.d.dQtQtQtQtQt.mQt#U.i.k.n#eQt.mQt.dQt.i.aghgi.kgjaTbx#K#e.mgkaTbxazgl.iQt.aameXbtgm.A.iQtQtQtQtQt.i#vbIe2bl.n.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQteFgnc.cvgoQtQtQtQtQtQtQtghgpc8awaNQtQt.id4edaTgq#5czafaTgr.i#xaTc.d.gsQtQtQtQtQtgtgugvgwgxgygzgAgAgAgAgBgCgxgwgvgD.AgEQtQtQtfvcbftgFgGgHaTgIcHgJgKQtfRgLaTedgM#e.nQtQtQtQtQtgNgLbdgOgPQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.i.ighgQafgRgSQtQtQtQtQtgTdZ#HcQdjaMQt.iekaJaTfJcggU#HaJgVgWgX#U.iQtQt.dgYgZgBg0g0g1g0g0g0g2g0g3g0g4g1g0g0g3g0g3g0gCg5g6bFQt#g.D#Ug7bbbx#HfP.mQtg8a4#Hg9h..iQtQtQtQtdvh###brhahb#eQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.qQtc#QtQtQtQtQtQtQtQtQtQtQtQtQthceacqb1aiay#mQtQtQtf1bL#H#HaThd.w.aekc5#Hhee.hfc8hgbjQtQtQthhhig0g0g0g0g0g0g0g0g0g0g0g0g0g0g0hjhkhlhmhnhog4g0g0g0gAhphq.LQtdxcEazhrhscn##c5eXhthuQtQtQtf.dqgVc5bbhvhw.Da#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.m.actaM.AQtQtQtQtQtQtQtQtQtQtQt.m#ecRbUbbhxbKQt.nQt#gelafbxaThxcj#e#Z#AeXeughhy#gQtcDhzhAg0g0hBhCgCg0hDg0g0g0g0g0g0g0g0g0g3g0hE#UQtQtQt.khFhGgyg0g0g0hHhIQt.a.D.AhJbbbx#HcWhKQtQtQtbKhL#HcQfBhMe3QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.aQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#bQteKhNa3hOdM#J#LQtQtQtQtQtQtQtQtQtbZcEcqaT#Hd6fRQthPhQc.gI#Hc5cAhRhSbieA.nQt.dhTg1g0g0gyhUf1hVg0g0g0g0g0g0g0g0g0g0g0g0g0g0g0gyhcQtQtQtQtQt#6hWhXhBg0g0hYhl.LQtcyhZaTh0h1Qth2h3#HaT#Hash4h5h6QtQtQtQtQtQtQtQtQtQtQtc#Qth7baab.i.tQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.aQth8h9i.cGgVbXdYQtQtQtQtQtQtQt.dhQexg9aTg9dja9#e#eekaJi#aJafiaibQt#gicg0g0g0hYidQtQt#Ug1g1g0g0g0g3ieifigihiiijg0g3g0g2g0ik#eQtQtQtQtQtQtQt#Cilg0g0g0iminQt#giofZc7e#bt#H#A#Hiphw.a.nQtQtQtQtQtQtQt.nQtdYbX#9diekcoe9Qt.nQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbG.acliqd1af##irisit#mQtQtQtQt.nbliuaTc5aTcviviwcdaTd1ix#6QtiygCg0g0iziA#6QtQtQtiBg0g0g0g0iCiDiEiFiEiGiHiIiJg0g3g0g0g0gvQtQtQtQtQtQtQtQtQt.diKg0g0g1iLQtQtQtdgb1#HgIfBgOgPQtQtQtQtQt.nQtiMiNiOiPe7cHiQiRfY.i.2QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.m.acliSf7iTaTiUiVb7iWQtQtQt.AiXfLaJeXaJi#iYeb.D.niZiBg1g0gyidQtQtQtQtQti0g0g0g1g0i1iHi2iFiEiHiEi3iEiHi4g2i5g0g0g1.dQtQtQtQtQtQtQtQtQtQtgPi6g0g3gyi7QtQti8e2i9f6.dQtQtQtj.j#dUjajb#AbbjciQjdf2.a.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtjeQtc#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtd8.Dfmiqhvc8bbfojfdzgN.cb##Udac9aTdsjgQth6hmg1g0g1jhaVQtQtQtQtQt.Lgxg0g0g0g2jiiEjjiHjjiEjjiHjjiHiGjkg0g3g0g0hmQtQtQtQtQtQtQtQtQtQtQt.#jlgzg0g0iKePQtjm.aaCjnjojpe4b5aTfoaTaTf7gOjq.dgEQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#OQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#UaM#F.fjrj#js#O#gQt.iQtQtQtQtQtQtQtQtQtQtQt.D.mjgjtc.g9aTbT#Hhxai.ufKjuaIQthIjvg0g1iz.dQtQtQtQtQtQtQt.dg0g1g0g2jwiEi3iEiEiHjjiEiHiEiFiEiHjxg0g0g0hj.nQtQtQtQtQtQtQtQtQtQtQtQt.ahXg3g0hAgY.nQt.cbgbTaTbxeXg9jyhMjq#e.dQtQtQtQtQtQtQtQtQtQtQt.aQtjzjncPaFam.n.aQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQta#Qtb#.djAjBjCjDjEfVaijFjGiNecitb9Qta0Qt.nQtQtQthP.addiRfLaf#Hc5fOiwhsjHhog0g0g0g0gBgDQtQtQtQtQtQtQtjIg0g0g0g0i3i3iEjJiHjjiEjKiEjjiHjjiHiJg0g0g0gzQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtjLizg0g2gzjMjN#gfFjOdsgOjP.djQQtQtQtQtQt.tQtjR.ia7iNdbjS#taUekjTjUagbjQt#bQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.aQtbF#UjVeyeOjWbdbTaTaJi#iUcCjXcVc7ec#J#gQt#U#ejYjZfIj0.ij1g0i5g0g3g0g3g0g0j2#UQtQtQtQtQtg6g0g0g0ijj3iEj4iEiFiEiHiEjJiEiHiEiHj5g0g0g0g4fxQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.ij6g0i5g0gBbjQtj7.d#eQt.iQte6jncjamj8dQj9bxaTbUfOk.k#kaev.a.dQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgaQteP#gf2kbkckdfBaTbbcxbb#H#Hke##gLgrkfdFkg.LQtkhg0g0g0g0g0g0g0g0g0g4ki.#QtQtQtkjg0g0g0g2iHi3iEjjiEjKiEjjiHjjiHjjiHiDg0g0g0g0#gQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQthhgAg0g0kk.DQtQtklkmgVccjfb5#Hb1bdaTcqkne5kof2#ghsQta#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.iQtkp#efYgifKkqdsg9aTaJ#HaJ#H#Ai#c7.n.ahGhAg0g0g0g3g0g0g0g3g0krfxQtQtj1g0g0g0g2ksiEi3iEiHiEjKiEiHiEjKiEj4j3g0g0g0g4bFQtQtQtQtQtQtQtQtQtQtQtQtQtQt.Dktg0g0gAkug6.ditcCdkaTaJaTbtc8ipkvkwebiZcDQt.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQta#Qths.dkxdLkyhgdsazaTedbdkzkAQtkBhXg0g0g0g0g0g0g0g0g0gAkjQtjNg0g0g0g0kCi4iHjjiEjjiHjjiEjjiHiFiHkDg0g0g0gBQtQtQtQtQtQtQtQtQtQtQtQtQtQtkEkkg0g0gxkF.n.wg#aTaTaTkGd1gMeAkHin.igEQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQt#g.mkIkJgXkKfLce.DQt.dkLkMhDg0g3g0g4g0g0g0g0kNkOgzg0g0g1kPiEiHiEjKiEiHiEi3iEiEiEiIkQg0g0g0gZQtQtQtQtQtQtQtQtQtQtQtQt.dkRg0g0gAkSkTQtjzkUfBkqkykVgt.D#gQt.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQt.nQt.nQt.qQt.3Qtbj#edP.a.3Qt.n.diKg0g0g0g0g3g0g0g0g0gAg1g0g0g0g0kWiHjKiEjKiEjKiHiFkXiFiig0g0g0g0kFQtQtQtQtQtQtQtQtQtQtQtgPhYg0g0izhlkYQt#mkZhK#UbjQt#sQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQt.mQt#g.nbX#Jcpk0fR#vk1j#k2gdk3j.k4jzk5dvbKcpk6gSdUbScVk7g8k8j8k9ezjXl.jal#g7aikUcCdQe0ladjfJjb#hcVQtQtQtkFlbg0g1g0g0g0g0g0g0g0g0g0g2g0ijlciEj4iEi3iEiHiEjKldg0g0g0g0gyQtQtQtQtQtQtQtQtQtQtQtlegAg0g1lf#g.nQt#UlgcA#yezlhj8k7eDlicVgSk6cpbKdYfuc7jogdljj#lklllmjnh2itdv.ij.Qt.dQt.mQtQtQtQtQtQt",
"QtQtQtQtQtQt#OQt.w.iln.slodne.b8lplqcRlrlsh0jyjyf7ltlulvfOlwbdbdbdcxbdbbbdb1bdaTbbb1aTaTaTc5#Hc5eXgI#HgI#HgIfeaT.O.aQtQteRlxg0g0g0g0g0g0g0g0g0g0g0g0g0g0kPlylziEjjiElAlBg0g2g0g0g0lCQtQtQtQtQtQtQtQtQthWhYg0g0lDkhQt.tk0ezb5aTgIeXc5#Hc5aTb1aTaTbdcxbdlElFcxbdbdlFlwfOlGf7kdh4lHkylqfvkg.C.saO.n#mQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQt.nQt.iQt.aQt.mQt.dQt#g.n.A.abF.Dfx#efZiZlIhQf2kJd2gilJlKlLlMfKlNdNe8eOlOfplPdsiphvgQftfAaflQaT.j.iQt.DkOimg1g0g0g0g0g0g0g0g0g0g0g0g0g0ielRlSijg0g0g3g0hDg0kSQtQtQtQtQtQtQtQtgthEg0g0g0lTlUQtlVdQaTbT#Hg9cHgQhvlWlXlYexlZdNjdfKl0dul1d2eel2l3fZ#gfx.mbj.n#gQt.DQt.aQt.iQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQtQtQta#Qt#oQt#6QtfUQtf#.il4.mkT.deR#Ul5d.l2h5jYl6jAQtQtQt.n.igYgyg0g0g0g0g0g0g0g3g0g0g0g0g0g0g0g0g0g0g0g0g0iL.tQtQtQtQtQt#Nl7iKg0g0g0g1l8#NQtaWl9dam.m#mambf6bZ#gcU.dmc.ifUQtfUQtbGQtQtQt.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgtQtQtQt.il3bjQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQtQtQtQtQtQtQte9mdkMg0g0g0g0g0g0g0g0g0g0g0g0g0g0g1g0g0g0gymemfhIj1leilizgAg0g0g0g0gAmg.dQtQtQt.aQt.iQtQtQtQtQtQtQtQtQt.ml3.AQtQtQt.Al3.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgtg0gYQtQt.Dg0hT.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.t.dmhmig0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g1g0g0gAkF.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtl3g0hUQtQtQtmjg0mkQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtl3g0mlQtQtf1g0hXQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbji7hTizg0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g4g0g0lDmmlDg0gyi7.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbFmnhIQtQtQthmg0jLQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtgPiLf1Qt#NgvjNQtavhUjLQtQtQtQtl7l8gvhTmoQtQtlUg0l8QtQt.dg0g5.LQtQtQtmpjMiLjhhhQtQt.ahUmqiLmqkhQtQtQtQtQtQtQtmri0ms.a.nQtQtQtQtQtQtQtcDmthmhXizgAg0g0g0g0g0g0g0g0g0g0g0hAgxiLkhiLlDg0gxhq.tQt.tmugvmql8#eQtQtQtQtlUjMiLjhhhQtQt.ahpkEQtQtkFizg0kugv.mQtQt.LmogvgvhG.AQtQtgtiLgvhUhIQtQtQtQtQtQtQt",
"QtQtQtQtQtQtj1g0mvQtl3g0kSQt.mg0mw.nQtQtmxg0gAlDgBmqQtQthqg0mlQtQtfxg0hXQtQtQthmg0gAgygBmn.iQtmyg0g4gChAg0hjQtQtQt.nmzgzg0g0g0g0mAe9QtQtQtQtQtQtQtQtQt.d.mgtkOgDmBjMkSgvkSjMmBgDmCj7QtmDgZg0g0mE#eQtQtQtQtmig0gzg4gB.mQtQtmhg0g4gyhAmn.aQtjNg0gvQt.nmFg0g4gzgyjNQt.amGg0hAgCgChhQtQtmgg0gAg4g1khQtQtQtQtQtQt",
"QtQtQtQtQtQtkFg0kFQtlUg0iLQtcDg0iKQtQt.Dg0gxmp.dhc.n.nQtlUg0l8QtQt.dg0iK.LQthcg0homkhc.daVQtQtmkg0iKhc#ekNg0lUQtQtmHg0g0g0kMhGkhgvgweRQtQtQtQtQtQtQtQtQtQtQtQtQt.LQt.#Qt.#Qt.tQtQtQtkhhAg0g4iL.mQtQtQtQtarizlDl7iLg0msQtbFg1izmIhc.d#NQtQtl7g0iLQtQtavhTg0mJcDQtQthlg0iKgt.dhcQtQtQtgYg0mhmKg0gw.LQtQtQtQtQt",
"QtQtQtQtQtQtg6g0j1Qtl3g0mLQt.mg0mM.iQtkFg0gylTiKgwi0QtQthqg0mlQtQtf1g0hXQtQthFg0kMgwmGgwmNQtQtmpg0gvQtQtmBg0mCQt.ngzg0g0ktl5Qt.nQtf1mx.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.mmvkMg0g0lDkhQtQtQtQtQtQtQthYiz.dl3gxmfQtkOg0gygwmGgwmNQtQtjNg0iLQtQtQthmg0jLQtQtQthGg0mimGg5lTlUQtQtmxg0mC.mgZiLQtQtQtQtQtQt",
"QtQtQtQtQtQtkFg0kFQtgtg0gvQtcDg0iKQtQtjlg0gChohogyhm.LQtlUg0l8QtQt.dg0iK.tQtgDg0lDgxizkMgvQtQtmkg0iLQtQtgYg0jLQtlUg0g0gAjNQtQtQtQtQtmr#gQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtjLizg0g0g0gxmOQtQtQtQtQtQtQt#6izkMQt.t.n#6QtkFg0gBmiizgygvQtQtl7g0iLQtQtQtjMg0kEQtQt.niKg0hYhohokMhlQtQtmhg0msQtmPQt.nQtQtQtQtQt",
"QtQtQtQtQtQthFg0mgQtl3g0kSQt.mg0mw.iQtmrg4ku.D.A.i.dQtQthqg0mlQtQtfxg0hXQtQtmQg0hEe9.n#NQtQtQtmpg4iLQtQtmBg0kOQtl3g0g0hY.nQtQtQtQtQtQt.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.mi7iBg0g0g0g0ilf1QtQtQtQtQtQtQtQtQthYiz#gQtQtQtQtl7g0kuf1.n.AQtQtQtjNg0iLQtQtQtjMg0hhQtQtQthmg0gv.i.A.n.DQtQtmxg0kOQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtf1hAgAgwiBg0gCg5mRg0iKQtQtQtkNg0iBmSgwlCQtQtjNg0l8QtQt#eg0hX.LQtavktg0hjiKgwmuQtQtmIg0iLQtQtmjg0msQtmThAg0gBbjQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtkhizg0g0g0g0gygucFQtQtQtQtQtQtQtQtQtarhYkMQtQtQtQtQtargwg0imiKhXkjQtQtl7g0iLQtQtQtidg0gCgw.dQt.dkMg1ktiKgwhqQtQtmhg0hIQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtmekuizikimgxizikhomB.nQtQt.mhGhHizgyl8QtQt#eiBg6QtQtbjmmhmQtQtQte9mUgxizgykS.aQtmVgxkhQtQthFhohqQtQtgvg4g0mvQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQte9mBgyg0g0g0g0g4gwl3.aQtQtQtQtQtQtQtQtQtQtQthTmw#eQtQtQtQtQtmTmLmiizgykS.aQteRkrkhQtQtQt#ekShoiklUQtQtl3gwmiizhYhIQtQti7mihqQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtbD.nbj.ibj.ibj.iavQtQtQtQtQtaV.ibjQt.nQt.tQtavQtQtQtcFQt.nQtQtQt.L.n#N.ibDQtQtQtaVQtQtQt.LQt.#QtQt.niBg0lD#gQtQtQtQtQtQtQtQtQtQtQtQtQtQt#NmWktg1g0g0g0g0g0hogD.nQtQtQtQtQtQtQtQtQtQtQtQt.nQtcFQtQtQtQtQtQtQt.LQt#N.ibDQtQtQtcFQtQtQtQtQt.L.n#NQtQtQtQtQt#N.i#NQtQtQt.LQt.#QtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#UkMg0lDmX.aQtQtQtQtQtQtQtQtQtj7g6kNgAg0g1g0g0g0g0gChze9QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQthqgyg0g0hohmhWgt#UlUiAgYgwlDg0g0g0g0g0g0g0g0hAhTl3#6QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#Uktg0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g4gymnmpQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtkjmig0g0g0g0g0g0g0g0g0g0g0g0gzkNmh#g#6QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtcDg6hXmigBg4g1g4gAgCgxlTgYl7.AQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbFmYmphWmOl7in.mavQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"};
/*
* Constructs a WellenreiterBase which is a child of 'parent', with the
* name 'name' and widget flags set to 'f'
*/
WellenreiterBase::WellenreiterBase( QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl )
{
QPixmap image0( ( const char** ) image0_data );
if ( !name )
setName( "WellenreiterBase" );
resize( 191, 294 );
setCaption( tr( "Wellenreiter" ) );
WellenreiterBaseLayout = new QVBoxLayout( this );
WellenreiterBaseLayout->setSpacing( 2 );
WellenreiterBaseLayout->setMargin( 0 );
TabWidget = new OTabWidget( this, "TabWidget", OTabWidget::Global );
ap = new QWidget( TabWidget, "ap" );
apLayout = new QVBoxLayout( ap );
apLayout->setSpacing( 2 );
apLayout->setMargin( 2 );
netview = new QListView( ap, "netview" );
netview->addColumn( tr( "SSID" ) );
netview->addColumn( tr( "Sig" ) );
netview->addColumn( tr( "AP" ) );
netview->addColumn( tr( "Chn" ) );
netview->addColumn( tr( "W" ) );
netview->addColumn( tr( "T" ) );
netview->setFrameShape( QListView::StyledPanel );
netview->setFrameShadow( QListView::Sunken );
netview->setRootIsDecorated( TRUE );
apLayout->addWidget( netview );
TabWidget->addTab( ap, "wellenreiter/networks", tr( "Networks" ) );
- Log = new QWidget( TabWidget, "Log" );
- LogLayout = new QVBoxLayout( Log );
- LogLayout->setSpacing( 2 );
- LogLayout->setMargin( 2 );
-
- Log_2 = new QMultiLineEdit( Log, "Log_2" );
- Log_2->setText( tr( "11/18 18:15 - log started\n"
-"11/19 20:13 - new net : \"ELAN\"\n"
-"11/19 20:15 - new station : \"pegasus\"" ) );
- LogLayout->addWidget( Log_2 );
- TabWidget->addTab( Log, "wellenreiter/log", tr( "Log" ) );
-
- tab = new QWidget( TabWidget, "tab" );
- tabLayout = new QGridLayout( tab );
- tabLayout->setSpacing( 2 );
- tabLayout->setMargin( 2 );
-
- Log_2_2 = new QMultiLineEdit( tab, "Log_2_2" );
- QPalette pal;
- QColorGroup cg;
- cg.setColor( QColorGroup::Foreground, white );
- cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
- cg.setColor( QColorGroup::Light, white );
- cg.setColor( QColorGroup::Midlight, QColor( 223, 223, 223) );
- cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
- cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
- cg.setColor( QColorGroup::Text, white );
- cg.setColor( QColorGroup::BrightText, white );
- cg.setColor( QColorGroup::ButtonText, white );
- cg.setColor( QColorGroup::Base, black );
- cg.setColor( QColorGroup::Background, black );
- cg.setColor( QColorGroup::Shadow, black );
- cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
- cg.setColor( QColorGroup::HighlightedText, white );
- pal.setActive( cg );
- cg.setColor( QColorGroup::Foreground, white );
- cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
- cg.setColor( QColorGroup::Light, white );
- cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) );
- cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
- cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
- cg.setColor( QColorGroup::Text, white );
- cg.setColor( QColorGroup::BrightText, white );
- cg.setColor( QColorGroup::ButtonText, white );
- cg.setColor( QColorGroup::Base, black );
- cg.setColor( QColorGroup::Background, black );
- cg.setColor( QColorGroup::Shadow, black );
- cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
- cg.setColor( QColorGroup::HighlightedText, white );
- pal.setInactive( cg );
- cg.setColor( QColorGroup::Foreground, QColor( 128, 128, 128) );
- cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
- cg.setColor( QColorGroup::Light, white );
- cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) );
- cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
- cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
- cg.setColor( QColorGroup::Text, QColor( 128, 128, 128) );
- cg.setColor( QColorGroup::BrightText, white );
- cg.setColor( QColorGroup::ButtonText, QColor( 128, 128, 128) );
- cg.setColor( QColorGroup::Base, black );
- cg.setColor( QColorGroup::Background, black );
- cg.setColor( QColorGroup::Shadow, black );
- cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
- cg.setColor( QColorGroup::HighlightedText, white );
- pal.setDisabled( cg );
- Log_2_2->setPalette( pal );
- QFont Log_2_2_font( Log_2_2->font() );
- Log_2_2_font.setFamily( "adobe-courier" );
- Log_2_2_font.setPointSize( 8 );
- Log_2_2->setFont( Log_2_2_font );
- Log_2_2->setText( tr( "00 0a 20 00 a8 00 e2 00 ...ESD..\n"
-"00 0a 20 00 a8 00 e2 00 .*&23...\n"
-"00 0a 20 00 a8 00 e2 00 ........\n"
-"00 0a 20 00 a8 00 e2 00 ........\n"
-"00 0a 20 00 a8 00 e2 00 ........\n"
-"00 0a 20 00 a8 00 e2 00 ...BRA22" ) );
+ logwindow = new MLogWindow( TabWidget, "Log" );
+ TabWidget->addTab( logwindow, "wellenreiter/log", tr( "Log" ) );
- tabLayout->addWidget( Log_2_2, 0, 0 );
- TabWidget->addTab( tab, "wellenreiter/hex", tr( "Hex" ) );
+ hexwindow = new MHexWindow( TabWidget, "tab" );
+ TabWidget->addTab( hexwindow, "wellenreiter/hex", tr( "Hex" ) );
about = new QWidget( TabWidget, "about" );
aboutLayout = new QGridLayout( about );
aboutLayout->setSpacing( 6 );
aboutLayout->setMargin( 11 );
PixmapLabel1_3_2 = new QLabel( about, "PixmapLabel1_3_2" );
PixmapLabel1_3_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, PixmapLabel1_3_2->sizePolicy().hasHeightForWidth() ) );
PixmapLabel1_3_2->setFrameShape( QLabel::Panel );
PixmapLabel1_3_2->setFrameShadow( QLabel::Sunken );
PixmapLabel1_3_2->setLineWidth( 2 );
PixmapLabel1_3_2->setMargin( 0 );
PixmapLabel1_3_2->setMidLineWidth( 0 );
PixmapLabel1_3_2->setPixmap( image0 );
PixmapLabel1_3_2->setScaledContents( TRUE );
PixmapLabel1_3_2->setAlignment( int( QLabel::AlignCenter ) );
aboutLayout->addWidget( PixmapLabel1_3_2, 0, 0 );
TextLabel1_4_2 = new QLabel( about, "TextLabel1_4_2" );
QFont TextLabel1_4_2_font( TextLabel1_4_2->font() );
TextLabel1_4_2_font.setFamily( "adobe-helvetica" );
TextLabel1_4_2_font.setPointSize( 10 );
TextLabel1_4_2->setFont( TextLabel1_4_2_font );
TextLabel1_4_2->setText( tr( "<p align=center>\n"
"<hr>\n"
"Max Moser<br>\n"
"Martin J. Muench<br>\n"
"Michael Lauer<br><hr>\n"
"<b>www.remote-exploit.org</b>\n"
"</p>" ) );
TextLabel1_4_2->setAlignment( int( QLabel::AlignCenter ) );
aboutLayout->addWidget( TextLabel1_4_2, 1, 0 );
TabWidget->addTab( about, "wellenreiter/about", tr( "About" ) );
WellenreiterBaseLayout->addWidget( TabWidget );
button = new QPushButton( this, "button" );
button->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, button->sizePolicy().hasHeightForWidth() ) );
button->setText( tr( "Start Scanning" ) );
WellenreiterBaseLayout->addWidget( button );
// tab order
setTabOrder( button, netview );
setTabOrder( netview, TabWidget );
TabWidget->setCurrentTab( tr( "Networks" ) );
}
/*
* Destroys the object and frees any allocated resources
*/
WellenreiterBase::~WellenreiterBase()
{
// no need to delete child widgets, Qt does it all for us
}
/*
* Main event handler. Reimplemented to handle application
* font changes
*/
bool WellenreiterBase::event( QEvent* ev )
{
bool ret = QWidget::event( ev );
if ( ev->type() == QEvent::ApplicationFontChange ) {
- QFont Log_2_font( Log_2->font() );
- Log_2_font.setFamily( "adobe-courier" );
- Log_2_font.setPointSize( 8 );
- Log_2->setFont( Log_2_font );
+ //QFont Log_2_font( Log_2->font() );
+ //Log_2_font.setFamily( "adobe-courier" );
+ //Log_2_font.setPointSize( 8 );
+ //Log_2->setFont( Log_2_font );
QFont TextLabel1_4_2_font( TextLabel1_4_2->font() );
TextLabel1_4_2_font.setFamily( "adobe-helvetica" );
TextLabel1_4_2_font.setPointSize( 10 );
TextLabel1_4_2->setFont( TextLabel1_4_2_font );
}
return ret;
}
diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.h b/noncore/net/wellenreiter/gui/wellenreiterbase.h
index b133d28..b7bd820 100644
--- a/noncore/net/wellenreiter/gui/wellenreiterbase.h
+++ b/noncore/net/wellenreiter/gui/wellenreiterbase.h
@@ -1,60 +1,57 @@
/**********************************************************************
** 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 WELLENREITERBASE_H
#define WELLENREITERBASE_H
#include <qvariant.h>
#include <qwidget.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QLabel;
class QListView;
class QListViewItem;
-class QMultiLineEdit;
class QPushButton;
class OTabWidget;
+class MLogWindow;
+class MHexWindow;
class WellenreiterBase : public QWidget
{
Q_OBJECT
public:
WellenreiterBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~WellenreiterBase();
OTabWidget* TabWidget;
QWidget* ap;
QListView* netview;
- QWidget* Log;
- QMultiLineEdit* Log_2;
- QWidget* tab;
- QMultiLineEdit* Log_2_2;
+ MLogWindow* logwindow;
+ MHexWindow* hexwindow;
QWidget* about;
QLabel* PixmapLabel1_3_2;
QLabel* TextLabel1_4_2;
QPushButton* button;
protected:
QVBoxLayout* WellenreiterBaseLayout;
QVBoxLayout* apLayout;
- QVBoxLayout* LogLayout;
- QGridLayout* tabLayout;
QGridLayout* aboutLayout;
bool event( QEvent* );
};
#endif // WELLENREITERBASE_H