Added a new client for isdnlog based on KDE

This commit is contained in:
Stefan Luethje 1998-05-10 23:33:14 +00:00
parent 9563c0618d
commit 2ddc20cd0c
30 changed files with 6481 additions and 0 deletions

View File

@ -0,0 +1,238 @@
# Generated automatically from Makefile.in by configure.
# Makefile.in generated automatically by automake 1.2 from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
SHELL = /bin/sh
srcdir = .
top_srcdir = ..
prefix = /opt/kde
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
sbindir = ${exec_prefix}/sbin
libexecdir = ${exec_prefix}/libexec
sysconfdir = ${prefix}/etc
sharedstatedir = ${prefix}/com
localstatedir = ${prefix}/var
libdir = ${exec_prefix}/lib
infodir = ${prefix}/info
mandir = ${prefix}/man
includedir = ${prefix}/include
oldincludedir = /usr/include
pkgdatadir = $(datadir)/kisdnlog
pkglibdir = $(libdir)/kisdnlog
pkgincludedir = $(includedir)/kisdnlog
top_builddir = ..
ACLOCAL = aclocal
AUTOCONF = autoconf
AUTOMAKE = automake
AUTOHEADER = autoheader
INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
transform = s,x,x,
NORMAL_INSTALL = true
PRE_INSTALL = true
POST_INSTALL = true
NORMAL_UNINSTALL = true
PRE_UNINSTALL = true
POST_UNINSTALL = true
build_alias = i586-pc-linux-gnu
build_triplet = i586-pc-linux-gnu
host_alias = i586-pc-linux-gnu
host_triplet = i586-pc-linux-gnu
target_alias = i586-pc-linux-gnu
target_triplet = i586-pc-linux-gnu
CC = gcc
CFLAGS = -g -Wall -DDEBUG
CPP = gcc -E
CXX = c++
CXXFLAGS = -g -Wall -DDEBUG
GLINC = @GLINC@
GLLIB = @GLLIB@
GMSGFMT = /usr/bin/msgfmt
KDE_INCLUDES = -I/opt/kde/include
KDE_LDFLAGS = -L/opt/kde/lib
LDFLAGS =
LIBCOMPAT =
LIBJPEG = -L${topdir} -ljpegkde
LIBOBJS = @LIBOBJS@
LIBSOCKET =
LN_S = ln -s
MAKEINFO = makeinfo
MOC = /usr/bin/moc
MSGFMT = /usr/bin/msgfmt
PACKAGE = kisdnlog
PAMINC = @PAMINC@
PAMLIBPATHS = @PAMLIBPATHS@
PAMLIBS = @PAMLIBS@
QT_INCLUDES = -I/usr/lib/qt/include
QT_LDFLAGS = -L/usr/lib
RANLIB = @RANLIB@
USE_NLS = yes
VERSION = 0.1
XGETTEXT = /usr/bin/xgettext
XPMINC = @XPMINC@
XPMLIB = @XPMLIB@
X_INCLUDES = -I/usr/X11R6/include
X_LDFLAGS = -L/usr/X11R6/lib
all_includes = -I/opt/kde/include -I../.. -I../../tools -I../../connect -I../../../lib -I/usr/lib/qt/include -I/usr/X11R6/include
all_libraries = -L/opt/kde/lib ../../connect/*.o ../../../lib/libisdn.a -L/usr/lib -L/usr/X11R6/lib
kde_appsdir = $(prefix)/share/applnk
kde_cgidir = $(prefix)/cgi-bin
kde_confdir = $(prefix)/share/config
kde_datadir = $(prefix)/share/apps
kde_htmldir = $(prefix)/share/doc/HTML
kde_icondir = $(prefix)/share/icons
kde_includes = /opt/kde/include
kde_libraries = /opt/kde/lib
kde_locale = $(prefix)/share/locale
kde_mimedir = $(prefix)/share/mimelnk
kde_minidir = $(prefix)/share/icons/mini
kde_toolbardir = $(prefix)/share/toolbar
kde_wallpaperdir = $(prefix)/share/wallpaper
qt_includes = /usr/lib/qt/include
qt_libraries = /usr/lib
topdir = /home/global/misc/develop/c/isdn4k-utils/isdnlog/client
data_DATA = isdnlog.xpm
datadir = $(prefix)/share/apps/kisdnlog/pics
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
DATA = $(data_DATA)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
default: all
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu pixmaps/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
install-dataDATA: $(data_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(datadir)
@list='$(data_DATA)'; for p in $$list; do \
if test -f $(srcdir)/$$p; then \
echo " $(INSTALL_DATA) $(srcdir)/$$p $(datadir)/$$p"; \
$(INSTALL_DATA) $(srcdir)/$$p $(datadir)/$$p; \
else if test -f $$p; then \
echo " $(INSTALL_DATA) $$p $(datadir)/$$p"; \
$(INSTALL_DATA) $$p $(datadir)/$$p; \
fi; fi; \
done
uninstall-dataDATA:
$(NORMAL_UNINSTALL)
list='$(data_DATA)'; for p in $$list; do \
rm -f $(datadir)/$$p; \
done
tags: TAGS
TAGS:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = pixmaps
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu pixmaps/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
done
info:
dvi:
check: all
$(MAKE)
installcheck:
install-exec:
@$(NORMAL_INSTALL)
install-data: install-dataDATA install-data-local
@$(NORMAL_INSTALL)
install: install-exec install-data all
@:
uninstall: uninstall-dataDATA uninstall-local
all: Makefile $(DATA)
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
installdirs:
$(mkinstalldirs) $(datadir)
mostlyclean-generic:
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
rm -f Makefile $(DISTCLEANFILES)
rm -f config.cache config.log stamp-h stamp-h[0-9]*
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-generic
clean: clean-generic mostlyclean
distclean: distclean-generic clean
rm -f config.status
maintainer-clean: maintainer-clean-generic distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
.PHONY: default uninstall-dataDATA install-dataDATA tags distdir info \
dvi installcheck install-exec install-data install uninstall all \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
install-data-local:
$(mkinstalldirs) $(appsdir)
$(INSTALL_DATA) kisdnlog.xpm $(kde_icondir)/kisdnlog.xpm
$(INSTALL_DATA) isdnlog.xpm $(kde_datadir)/kisdnlog/isdnlog.xpm
uninstall-local:
rm -f $(kde_icondir)/kisdnlog.xpm
rm -f $(kde_datadir)/kisdnlog/isdnlog.xpm
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,12 @@
data_DATA = isdnlog.xpm
datadir = $(prefix)/share/apps/@PACKAGE@/pics
install-data-local:
$(mkinstalldirs) $(appsdir)
$(INSTALL_DATA) @PACKAGE@.xpm $(kde_icondir)/@PACKAGE@.xpm
$(INSTALL_DATA) isdnlog.xpm $(kde_datadir)/@PACKAGE@/isdnlog.xpm
uninstall-local:
rm -f $(kde_icondir)/@PACKAGE@.xpm
rm -f $(kde_datadir)/@PACKAGE@/isdnlog.xpm

View File

@ -0,0 +1,238 @@
# Makefile.in generated automatically by automake 1.2 from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = true
PRE_INSTALL = true
POST_INSTALL = true
NORMAL_UNINSTALL = true
PRE_UNINSTALL = true
POST_UNINSTALL = true
build_alias = @build_alias@
build_triplet = @build@
host_alias = @host_alias@
host_triplet = @host@
target_alias = @target_alias@
target_triplet = @target@
CC = @CC@
CFLAGS = @CFLAGS@
CPP = @CPP@
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
GLINC = @GLINC@
GLLIB = @GLLIB@
GMSGFMT = @GMSGFMT@
KDE_INCLUDES = @KDE_INCLUDES@
KDE_LDFLAGS = @KDE_LDFLAGS@
LDFLAGS = @LDFLAGS@
LIBCOMPAT = @LIBCOMPAT@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBSOCKET = @LIBSOCKET@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
MOC = @MOC@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
PAMINC = @PAMINC@
PAMLIBPATHS = @PAMLIBPATHS@
PAMLIBS = @PAMLIBS@
QT_INCLUDES = @QT_INCLUDES@
QT_LDFLAGS = @QT_LDFLAGS@
RANLIB = @RANLIB@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XPMINC = @XPMINC@
XPMLIB = @XPMLIB@
X_INCLUDES = @X_INCLUDES@
X_LDFLAGS = @X_LDFLAGS@
all_includes = @all_includes@
all_libraries = @all_libraries@
kde_appsdir = @kde_appsdir@
kde_cgidir = @kde_cgidir@
kde_confdir = @kde_confdir@
kde_datadir = @kde_datadir@
kde_htmldir = @kde_htmldir@
kde_icondir = @kde_icondir@
kde_includes = @kde_includes@
kde_libraries = @kde_libraries@
kde_locale = @kde_locale@
kde_mimedir = @kde_mimedir@
kde_minidir = @kde_minidir@
kde_toolbardir = @kde_toolbardir@
kde_wallpaperdir = @kde_wallpaperdir@
qt_includes = @qt_includes@
qt_libraries = @qt_libraries@
topdir = @topdir@
data_DATA = isdnlog.xpm
datadir = $(prefix)/share/apps/@PACKAGE@/pics
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
DATA = $(data_DATA)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
default: all
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu pixmaps/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
install-dataDATA: $(data_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(datadir)
@list='$(data_DATA)'; for p in $$list; do \
if test -f $(srcdir)/$$p; then \
echo " $(INSTALL_DATA) $(srcdir)/$$p $(datadir)/$$p"; \
$(INSTALL_DATA) $(srcdir)/$$p $(datadir)/$$p; \
else if test -f $$p; then \
echo " $(INSTALL_DATA) $$p $(datadir)/$$p"; \
$(INSTALL_DATA) $$p $(datadir)/$$p; \
fi; fi; \
done
uninstall-dataDATA:
$(NORMAL_UNINSTALL)
list='$(data_DATA)'; for p in $$list; do \
rm -f $(datadir)/$$p; \
done
tags: TAGS
TAGS:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = pixmaps
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu pixmaps/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
done
info:
dvi:
check: all
$(MAKE)
installcheck:
install-exec:
@$(NORMAL_INSTALL)
install-data: install-dataDATA install-data-local
@$(NORMAL_INSTALL)
install: install-exec install-data all
@:
uninstall: uninstall-dataDATA uninstall-local
all: Makefile $(DATA)
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
installdirs:
$(mkinstalldirs) $(datadir)
mostlyclean-generic:
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
rm -f Makefile $(DISTCLEANFILES)
rm -f config.cache config.log stamp-h stamp-h[0-9]*
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-generic
clean: clean-generic mostlyclean
distclean: distclean-generic clean
rm -f config.status
maintainer-clean: maintainer-clean-generic distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
.PHONY: default uninstall-dataDATA install-dataDATA tags distdir info \
dvi installcheck install-exec install-data install uninstall all \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
install-data-local:
$(mkinstalldirs) $(appsdir)
$(INSTALL_DATA) @PACKAGE@.xpm $(kde_icondir)/@PACKAGE@.xpm
$(INSTALL_DATA) isdnlog.xpm $(kde_datadir)/@PACKAGE@/isdnlog.xpm
uninstall-local:
rm -f $(kde_icondir)/@PACKAGE@.xpm
rm -f $(kde_datadir)/@PACKAGE@/isdnlog.xpm
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,379 @@
/* XPM */
static char *isdn7[] = {
/* width height num_colors chars_per_pixel */
" 320 240 132 2",
/* colors */
".. c #000000",
".# c #4c4c4c",
".a c #4d4d4d",
".b c #4e4e4e",
".c c #4f4f4f",
".d c #505050",
".e c #515151",
".f c #525252",
".g c #535353",
".h c #555555",
".i c #565656",
".j c #575757",
".k c #585858",
".l c #5a5a5a",
".m c #5b5b5b",
".n c #5d5d5d",
".o c #5f5f5f",
".p c #606060",
".q c #616161",
".r c #646464",
".s c #656565",
".t c #676767",
".u c #686868",
".v c #696969",
".w c #6b6b6b",
".x c #6c6c6c",
".y c #6d6d6d",
".z c #6e6e6e",
".A c #6f6f6f",
".B c #707070",
".C c #717171",
".D c #727272",
".E c #747474",
".F c #767676",
".G c #777777",
".H c #787878",
".I c #797979",
".J c #7b7b7b",
".K c #7c7c7c",
".L c #7e7e7e",
".M c #7f7f7f",
".N c #808080",
".O c #818181",
".P c #848484",
".Q c #868686",
".R c #878787",
".S c #888888",
".T c #898989",
".U c #8a8a8a",
".V c #8b8b8b",
".W c #8c8c8c",
".X c #8d8d8d",
".Y c #8e8e8e",
".Z c #8f8f8f",
".0 c #909090",
".1 c #919191",
".2 c #939393",
".3 c #949494",
".4 c #959595",
".5 c #969696",
".6 c #979797",
".7 c #989898",
".8 c #999999",
".9 c #9999ff",
"#. c #9a9aff",
"## c #9b9bff",
"#a c #9c9cff",
"#b c #9d9dff",
"#c c #9e9eff",
"#d c #9f9fff",
"#e c #a0a0ff",
"#f c #a1a1ff",
"#g c #a3a3ff",
"#h c #a5a5ff",
"#i c #a6a6ff",
"#j c #a7a7ff",
"#k c #a8a8ff",
"#l c #ababff",
"#m c #acacff",
"#n c #adadff",
"#o c #b0b0ff",
"#p c #b2b2ff",
"#q c #b3b3ff",
"#r c #b4b4ff",
"#s c #b7b7ff",
"#t c #b9b9ff",
"#u c #bbbbff",
"#v c #bdbdff",
"#w c #bebeff",
"#x c #bfbfff",
"#y c #c0c0ff",
"#z c #c2c2ff",
"#A c #c3c3ff",
"#B c #c6c6ff",
"#C c #c8c8ff",
"#D c #cacaff",
"#E c #cbcbff",
"#F c #cdcdff",
"#G c #cfcfff",
"#H c #d0d0ff",
"#I c #d3d3ff",
"#J c #d4d4ff",
"#K c #d5d5ff",
"#L c #d6d6ff",
"#M c #d8d8ff",
"#N c #dcdcff",
"#O c #ddddff",
"#P c #dfdfff",
"#Q c #e0e0ff",
"#R c #e1e1ff",
"#S c #e3e3ff",
"#T c #e4e4ff",
"#U c #e5e5ff",
"#V c #e6e6ff",
"#W c #e7e7ff",
"#X c #e8e8ff",
"#Y c #e9e9ff",
"#Z c #eaeaff",
"#0 c #ebebff",
"#1 c #ededff",
"#2 c #f0f0ff",
"#3 c #f1f1ff",
"#4 c #f3f3ff",
"#5 c #f5f5ff",
"#6 c #f7f7ff",
"#7 c #f9f9ff",
"#8 c #fafaff",
"#9 c #fbfbff",
"a. c #fcfcff",
"a# c #fdfdff",
"aa c #fefeff",
"ab c #ffffff",
/* pixels */
"#O.8#R#R#R.8#R#O#O.8#N#N.8#M#M#M.8#M#L#L.8#L#L.8#L#K#K.8#K#K#K.8#J#J.8#J#J#J.8#H#H#H.8#H#H.8#G#F#F.8#F#F#F.8#F#F.8#F#F#F.8#F#F#F.8#F.8.8#F#F#F.8#F#F#F.8#F.8.8#F#F#F.8#F#F#F.8#F.8.8#F#F.8.8#F#F#E.8#E#E#E#E#C.8.8#A#A.8.8#v.8#w#w#v#v#t#t#t.8.8#t.8#r#p#n#n#m#m#l#l.8#k.8#k#k.8#k.8.8#k#k#k.8#k#k#k.8#k.8.8#k#k#k.8#l#l#l.8#l#l.8#n#n.8.8#p#r#r#t.8#w#v#v.8.8#y.8#B#B#C.8#E#E#E.8#F#F.8#F#G#H.8#J#K#K.8#K#L.8#M#O#R#R.8#U#U#X.8#V#V#X.8#W#U.8#T#T#T.8#T#T#T.8#W#Z.8#0#1#1.8#5#8#8.8a#a#.8a#a.a..8a.abaa.8#8#7.8#6#6#6.8#6#4#4.8#Y#V.8#U#U#S.8#S#S#S.8#S.8.8#R#R#R.8#R#R#R.8#R.8.8#R#R#R.8#P#P#P#R.8.8#U#U.8#R#R.8#R#R#R.8#R#R#R.8#R#R.8#T#T#T.8#T#T#R.8#R#P.8#P",
".8.8#R#R.8.8.8.8#O#N.8#N.8#M#M.8.8.8.8#L.8.8#L.8#L#K.8.8.8.8#K.8.8.8.8#J.8.8.8.8#H#H.8.8.8#G#G.8.8.8.8#F#F.8.8.8.8#F#F.8.8.8#F#F.8.8.8.8#F#F.8.8.8#F#F.8.8.8.8#F.8.8.8.8#F#F.8#F.8#F#F.8.8.8.8#F#E.8#E.8#E#E.8.8.8.8#A#w.8#v.8#w#w.8.8.8.8#t.8.8.8.8#r#p.8.8.8.8#l#l.8.8.8#k#k.8.8.8.8#k#k.8.8.8.8#k.8.8.8.8#k.8.8.8.8#l#l.8#l.8#m#n.8.8.8.8#r.8.8.8.8#v#v.8.8.8#A#B.8.8.8.8#E#E.8.8.8.8#F.8.8.8.8#K#K.8.8.8.8#M#O.8#R.8#U#U.8.8.8.8#X#W.8#U.8#T#T.8.8.8.8#T.8.8#Z.8#0#1.8.8.8.8#8.8.8.8.8a#.8.8.8.8abaa.8.8.8#7#6.8.8.8.8#4#4.8.8.8.8#U#U.8.8.8#S#S.8.8.8.8#R#R.8.8.8.8#R.8.8.8.8#R.8.8.8.8#P#P.8.8.8.8#U.8.8.8.8#R#R.8.8.8.8#R.8.8.8.8#T.8.8.8.8#T#R.8.8.8.8#P",
"#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#M#M#M#M#M#M#L#K#K#J#J#J#J#H#H#H#G#G#G#F#F#F#F#F#F#G#G#G#G#G#G#G#H#H#H#H#H#H#H#H#H#G#G#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#E#E#E#E#C#C#C#B#B#A#A#y#w#w#v#w#w#v#v#t#t#t#r#r#r#p#p#p#n#n#n#n#m#m#m#l#l#l#k#k#k#k#k#k#k#k#k#k#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#k#k#k#l#l#l#m#m#n#p#p#r#r#t#w#w#w#A#A#C#C#C#E#E#E#E#F#F#F#F#G#G#J#K#K#L#L#M#N#N#R#R#R#S#W#W#V#V#V#V#Y#W#W#T#S#S#R#R#T#T#T#T#T#T#V#W#W#Z#Z#1#1#2#2#2#5#8a#a#a.a.a.a.abaaaa#8#7#7#6#6#6#6#6#6#6#6#4#3#3#Y#Y#U#T#T#T#T#T#T#T#S#S#S#S#S#S#S#R#R#R#R#R#R#R#R#R#P#P#P#P#P#P#R#R#V#V#V#V#V#V#V#V#U#U#U#U#U#U#T#T#T#T#T#T#T#T#T#T#T#T#T",
"#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#M#M#M#M#M#M#L#K#K#J#J#J#J#H#H#H#G#G#G#F#F#F#F#F#F#G#G#G#G#G#G#G#H#H#H#H#H#H#H#H#H#G#G#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#E#E#E#E#C#C#C#B#B#A#A#y#w#w#v#w#w#v#v#t#t#t#r#r#r#p#p#p#n#n#n#n#m#m#m#l#l#l#k#k#k#k#k#k#k#k#k#k#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#k#k#k#l#l#l#m#m#n#p#p#r#r#t#w#w#w#A#A#C#C#C#E#E#E#E#F#F#F#F#G#G#J#K#K#L#L#M#N#N#R#R#R#S#W#W#V#V#V#V#Y#W#W#T#S#S#R#R#T#T#T#T#T#T#V#W#W#Z#Z#1#1#2#2#2#5#8a#a#a.a.a.a.abaaaa#8#7#7#6#6#6#6#6#6#6#6#4#3#3#Y#Y#U#T#T#T#T#T#T#T#S#S#S#S#S#S#S#R#R#R#R#R#R#R#R#R#P#P#P#P#P#P#R#R#V#V#V#V#V#V#V#V#U#U#U#U#U#U#T#T#T#T#T#T#T#T#T#T#T#T#T",
"#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#M#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#N#M#M#M#M#M#M#L#K#K#J#J#J#J#H#H#H#G#G#G#F#F#F#F#F#F#G#G#G#G#G#G#G#H#H#H#H#H#H#H#H#H#G#G#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#E#E#E#E#C#C#C#B#B#A#A#y#w#w#v#w#w#v#v#t#t#t#r#r#r#p#p#p#n#n#n#n#m#m#m#l#l#l#k#k#k#k#k#k#k#k#k#k#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#k#k#k#l#l#l#m#m#n#p#p#r#r#t#w#w#w#A#A#C#C#C#E#E#E#E#F#F#F#F#G#G#J#K#K#L#L#M#N#N#R#R#R#S#W#W#V#V#V#V#Y#W#W#T#S#S#R#R#T#T#T#T#T#T#V#W#W#Z#Z#1#1#2#2#2#5#8a#a#a.a.a.a.abaaaa#8#7#7#6#6#6#6#6#6#6#6#4#3#3#Y#Y#U#T#T#T#T#T#T#T#S#S#S#S#S#S#S#R#R#R#R#R#R#R#R#R#P#P#P#P#P#P#R#R#V#V#V#V#V#V#V#V#U#U#U#U#U#U#T#T#T#T#T#T#T#T#T#T#T#T#T",
"#K#K#L#L#L#L#M#M#M#N#N#N#O#O#O#O#O#O#R#R#R#R#R#R#R#R#R#R#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#O#N#N#N#N#N#N#N#N#M#L#L#L#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#K#J#J#H#G#G#F#F#F#F#F#F#F#F#E#E#E#C#C#C#C#C#C#C#C#B#B#y#w#w#v#v#w#w#t#r#r#n#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#l#k#k#g#b#b#b#d#d#d#d#e#g#g#g#g#g#g#g#e#d#d#d#d#b#b#b#k#l#l#n#n#r#v#v#v#y#y#B#C#C#E#E#E#E#E#F#F#F#F#F#H#K#K#M#M#N#R#R#R#U#U#W#V#V#X#X#W#W#T#T#T#T#R#R#R#R#T#T#T#T#V#V#W#W#W#Z#Z#Z#Z#0#1#1#2#8a#a#a#a##9#9a.ababaa#8#8#6#6#6#6#6#6#6#6#4#4#4#3#3#3#Y#Y#Y#Y#V#U#U#T#T#T#S#S#S#S#S#S#S#S#S#R#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#V#V#V#V#V#V",
".8#K#L#L#L.8#M#M#M#N.8.8#O#O#O#O.8#O#R#R#R.8.8#R#R#R#R.8#O#O#O#O.8.8#O#O#O#O.8#O#O#O#O#O.8#O#O#O#O.8#O#N#N#N.8.8#N#N#N#M.8#L#L#K#K.8#K#K#K#K#K.8#K#K#K#K.8#K#K#K#K.8.8#K#J#J#H.8#G#F#F#F.8.8#F#F#F#E.8.8#C#C#C.8.8#C#C#C#B.8#y#w#w#v#v#w#w#t#r#r.8#m#m#m#m#m#m#m#m#m#m.8#m#m#m#m.8#m#m#m#m.8.8#k#g#b#b.8#d#d#d#d.8.8#g#g#g#g.8.8#e#d#d.8.8#b#b#b#k.8.8#n#n#r#v.8#v#y#y#B.8#C#E#E#E#E.8#F#F#F#F.8#H#K#K#M.8.8#R#R#R#U.8#W#V#V#X.8#W#W#T#T#T.8#R#R#R#R.8#T#T#T#V.8.8#W#W#Z#Z.8.8#0#1#1.8.8a#a#a#a#.8.8a.ababaa.8#8#6#6#6.8#6#6#6#6#4#4#4#3#3#3.8#Y#Y#Y#V.8#U#T#T#T#S.8#S#S#S#S.8#S#S#R#R.8.8#R#R#P#P.8.8#P#P#P.8.8#P#P#P#P.8#P#P#P#P.8.8#P#P#P#P.8#R#R#V#V#V.8#V#V",
".8#J#J#J.8#J.8.8#K#K#K#K.8#L#M.8.8#O#R#R.8#R#R.8#R.8.8.8#R#R#R.8#R#R.8#R.8.8.8#S#S#S.8.8.8.8#S.8.8.8#R#R#R.8#R.8.8#R#R.8.8#R#R#O.8#O.8.8#N.8.8.8#M#L#L.8#K.8.8#K.8.8.8#J#H#H.8#G.8.8#F.8.8.8#F#F#E.8#E.8#C#C.8.8.8#A#A.8.8#y.8#w#w.8.8#w#w#v.8.8#r.8#p#p.8.8#n#n#m#m.8#l.8#l#k.8.8#k#k#k#k#k#g.8#b#b.8.8#g#g#g.8#g#e.8#e#e.8.8.8#g#g.8#g#g.8#d.8.8#k.8#m#m.8.8#t.8#w.8.8.8#A#C#C.8.8.8.8#E.8.8.8#F#J#J.8#L.8.8#R#R.8.8#X#V#V.8#X.8.8#U.8.8.8#T#T#R.8#T.8.8#V.8.8.8#Z#Z#0.8#0.8.8#2.8.8.8a.a..8.8#9.8a.ab.8.8.8aa#8.8.8#7.8#6#6.8.8#6#6#4#4.8#3.8#Y#Y.8.8#U#U#U#U.8#U.8.8#T.8.8#S#S#R.8#R#R.8#R#R.8.8.8#R#R.8#R#R.8#R.8.8.8#R#R#R.8#R#R.8#R.8.8.8#R#R#P.8.8.8.8#R",
".8#J#J#J.8#J.8.8#K.8#K#K.8.8#M#N.8#O#R#R.8#R#R.8#R#R#R.8#R#R#R.8#R#R.8#R#R#R.8#S#S#S.8#S#S.8#S#R#R.8#R#R#R.8#R#R.8#R#R#R.8#R#R#O.8#O#N.8#N#N#M.8#M#L#L.8#K.8.8#K#K#K.8#J#H#H.8#G.8.8#F#F.8.8#F#F.8.8#E#C.8#C#B.8.8#A#A.8.8#y#w#w#w#v#v#w#w#v.8.8#r.8#p#p#n#n#n#n#m#m#m#l.8#l#k#k.8#k#k#k.8#k#g.8.8#b#b.8#g#g#g.8#g#e.8#e#e#e.8.8#g#g.8#g#g.8#d.8.8#k#k.8#m.8#t#t.8#w#w#y.8#A#C#C.8#C#E.8#E#F#F.8#F#J#J.8#L#N.8#R#R#U.8#X#V#V.8#X.8.8#U#T#T.8#T#T#R.8#T.8.8#V#W.8.8#Z#Z.8.8#0#0.8#2#2.8.8a.a..8.8#9#9a.ababab.8aa#8.8.8#7.8#6#6#6#6#6#6#4#4#4#3.8#Y#Y#V.8#U#U#U#U#U#U.8.8#T#T.8#S#S#R.8#R#R.8#R#R#R.8.8#R#R.8#R#R.8#R#R#R.8#R#R#R.8#R#R.8#R#R#R.8#R#R#P.8#P#P.8#R",
".8#H#J#J.8#J#K.8#K.8#K#K.8.8#L#M.8#M#N#N.8#R#R.8#R#R#R.8#W#W#V.8#V#X.8#W#W#W.8#W#X#V.8#V#V.8#V#X#X.8#X#X#X.8#X#X.8#W#W#U.8#R#R#R.8#R#O.8#O#O#N.8#N#M#M#M#L#L.8#L#L#L.8#K#J#J.8#F.8.8#F#F.8.8#E#E.8.8#C#C.8#B#A.8.8#y#y.8.8#v#v#w#w#w#w#v#v#t.8.8#p#n#n#n#n#n#n#n#m#m#m#m.8#m#m#l.8#l#l#k.8#g#b.8.8#b#b.8#g#g#g.8#e#a.8#..9.9.8.8#b.9.8#a#a.8#d.8.8#k#k.8#m.8#t#t.8#w#w#y.8#A#B#B.8#C#E.8#E#F#F.8#H#K#K.8#M#N.8#R#S#W.8#V#X#X.8#U#S.8#R#T#T.8#T#T#T.8#T.8.8#T#V.8.8#Z#Z.8.8#0#0.8#5#5.8.8#9#9.8.8#9#9#9a.a.a..8abab.8.8#8#8#7#7#6#6#4#4#3#3#Y#V.8#V#V#V.8#V#U#U.8#T#T.8.8#S#S.8#T#T#T.8#T#T.8#T#T#S.8.8#R#R.8#R#R.8#R#R#R.8#P#P#P.8#P#P.8#R#R#R.8#R#R#R.8#R#R.8#P",
".8#H#J#J.8#J#K.8#K.8#K#K.8#L#L#M.8#M#N#N.8#R#R.8#R#R#R.8#W#W#V.8#V#X.8#W#W#W.8#W#X#V.8#V#V.8#V#X#X.8#X#X#X.8#X#X.8#W#W#U.8#R#R#R.8#R#O.8#O#O#N.8#N#M#M#M#L.8.8#L#L#L.8#K#J#J.8#F.8.8#F#F.8.8#E#E.8.8#C#C.8#B#A.8.8#y#y.8.8#v#v#w#w#w#w#v#v#t.8.8#p.8#n#n#n#n#n#n#m#m#m#m.8#m#m#l.8#l#l#k.8#g#b.8.8#b#b.8#g#g#g.8#e#a.8#..9.9.8.8#b.9.8#a#a.8#d.8.8#k#k#m#m.8#t#t.8#w#w#y.8#A#B#B.8#C#E.8#E#F#F.8#H#K#K.8#M#N.8#R#S#W.8#V#X#X.8#U#S.8#R#T#T.8#T#T#T.8#T.8.8#T#V.8.8#Z#Z.8.8#0#0.8#5#5.8.8#9#9.8.8#9#9#9a.a.a..8abab.8.8#8#8#7#7#6#6#4#4#3#3#Y#V.8#V#V#V.8#V#U#U.8#T#T.8.8#S#S.8#T#T#T.8#T#T.8#T#T#S.8.8#R#R.8#R#R.8#R#R#R.8#P#P#P.8#P#P.8#R#R#R.8#R#R#R.8#R#R.8#P",
".8#J#J#J.8#J.8.8#K.8#L#L.8#M#M#N.8#N#O#O.8#O#O.8#O#R#R.8#R#R#R.8#R#S.8#U#U#U.8#W#W#X.8#X#X.8#X#W#W.8#W#U#U.8#S#S.8#R#R#R.8#R#R#R.8#O.8.8#M#M#L.8#L#L#L.8#L.8.8#J#J#J.8#H#G#G.8#F.8.8#F#F.8.8#E#E.8.8#C#B#A#A#y.8.8#y#y.8.8#w.8#v#v#v#v#w#w#w.8.8#v.8#t#t#r#r#r#r#p#p.8#p.8#p#n#m.8#m#m#l.8#k#k.8#g#g#g.8#d#d#e.8#g#g.8#g#g#g.8.8#g#g.8#d#d.8#b.8.8#m#m#p#p.8.8#v.8#w#w#A.8#C#E#E.8#E#F.8#F#G#H.8#K#M#M.8#O#R.8#S#W#X.8#V#X#X.8#Y.8.8#U#T#T.8#S#S#S.8#T.8.8#R#R.8.8#T#T#V.8#W#W.8#0#0.8.8a#a#.8.8a#a#a#a#a#a#.8a.#9.8.8ab.8ababaa#8#8#8#7#7.8#6.8#6#6#6.8#6#4#4#4#4#4.8.8#3#3.8#3#3#Y.8#Y#Y.8#V#V#U.8.8#U#U.8#T#T.8#T#T#T.8#S#S#S.8#S#S.8#S#S#S.8#S#S#S.8#S#R.8#R",
".8.8#J#J.8.8.8#K#K#L.8.8#M#M#M.8.8.8.8#O#O.8.8#O#O.8.8.8.8.8#R#R.8.8#U#U.8.8.8.8.8#X.8.8.8#X#X.8.8.8.8#U#U.8.8.8#S#R#R.8.8.8#R#R.8.8.8#N#M.8.8.8.8#L#L.8.8.8#K#J.8.8.8.8.8#G#F.8.8#F#F.8.8.8.8#E#E.8.8.8#A#A.8.8.8.8#y#y.8.8.8#v#v.8.8.8.8#w#v.8.8.8#t#t.8.8.8.8#p#p.8.8.8#p#n.8.8.8.8#l#l.8.8#k#g#g.8.8.8.8#e#e.8.8#g#g#g.8.8.8.8#g#g.8.8#b#b#b.8.8.8#p#p#t.8.8#v#w.8.8.8.8#E#E.8.8.8#F#F.8.8.8.8#M#M.8.8.8#S#S#W.8.8.8#X#X.8.8.8#W#U.8.8.8.8.8#S#S.8.8#T#R.8.8.8.8#T#V.8.8.8#Z#0.8.8.8.8a#a#.8.8.8a#a#.8.8.8.8#9a..8.8.8abab.8.8.8.8#7#7.8.8.8#6#6.8.8.8.8#4#4.8.8#4#4#3.8.8.8.8#Y#Y.8.8#V#V#V.8.8.8.8#U#U.8.8#T#T.8.8.8.8.8#S#S.8.8#S#S.8.8.8.8#S#S.8.8.8.8#R",
"#J#J#K#K#L#L#L#L#L#L#L#L#M#M#M#N#N#N#N#N#N#N#N#N#N#O#O#O#R#R#R#R#R#R#S#S#S#S#U#U#U#U#U#U#U#U#U#S#S#S#S#R#R#R#R#R#R#R#R#R#R#R#R#O#O#N#M#M#M#M#L#L#L#L#L#L#L#L#L#K#K#K#K#H#G#G#F#F#F#F#F#F#E#E#E#E#E#C#C#C#C#C#B#A#A#y#y#w#w#w#w#w#w#w#w#w#w#w#w#w#w#v#v#w#t#t#r#r#p#n#n#n#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#l#l#l#l#k#g#g#b#b#b#b#b#b#g#g#l#l#n#p#p#r#r#r#t#t#w#w#w#A#C#C#E#E#E#F#F#F#F#F#G#G#H#J#J#K#M#M#O#O#R#S#S#U#W#W#X#V#V#V#V#X#X#Y#W#W#W#U#U#U#U#T#S#S#S#T#T#R#T#T#T#T#V#V#W#W#W#Z#0#1#1#2#2#5#5#8a#a#a#a#a#a#a.a.a.a.#9#9a.ababababababababaaaa#8#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#4#4#3#3#Y#V#V#U#T#T#T#T#S#S#S#S#S#S#S#S#S#S#S#S#S#R#R#R#R#R#R#R#R#R",
"#J#J#K#K#L#L#L#L#L#L#L#L#M#M#M#N#N#N#N#N#N#N#N#N#N#O#O#O#R#R#R#R#R#R#S#S#S#S#U#U#U#U#U#U#U#U#U#S#S#S#S#R#R#R#R#R#R#R#R#R#R#R#R#O#O#N#M#M#M#M#L#L#L#L#L#L#L#L#L#K#K#K#K#H#G#G#F#F#F#F#F#F#E#E#E#E#E#C#C#C#C#C#B#A#A#y#y#w#w#w#w#w#w#w#w#w#w#w#w#w#w#v#v#w#t#t#r#r#p#n#n#n#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#l#l#l#l#k#g#g#b#b#b#b#b#b#g#g#l#l#n#p#p#r#r#r#t#t#w#w#w#A#C#C#E#E#E#F#F#F#F#F#G#G#H#J#J#K#M#M#O#O#R#S#S#U#W#W#X#V#V#V#V#X#X#Y#W#W#W#U#U#U#U#T#S#S#S#T#T#R#T#T#T#T#V#V#W#W#W#Z#0#1#1#2#2#5#5#8a#a#a#a#a#a#a.a.a.a.#9#9a.ababababababababaaaa#8#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#4#4#3#3#Y#V#V#U#T#T#T#T#S#S#S#S#S#S#S#S#S#S#S#S#S#R#R#R#R#R#R#R#R#R",
"#K#K#L#L#L#L#M#M#M#M#M#M#N#N#N#O#O#O#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#O#O#O#O#O#O#O#O#O#N#N#N#N#M#M#L#K#K#K#J#J#J#J#J#J#J#H#G#G#F#F#F#F#F#F#E#E#E#E#E#C#C#B#A#A#y#y#y#y#y#y#y#y#y#y#y#y#y#w#w#w#w#w#w#v#v#w#w#w#v#v#t#r#r#r#p#p#n#n#n#n#n#n#n#p#p#p#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#t#t#v#v#w#v#v#w#y#y#A#A#B#C#C#E#E#E#F#F#F#F#F#F#F#G#H#H#K#L#L#M#N#N#R#R#R#R#R#S#U#U#W#X#X#V#V#V#V#X#Y#Y#W#W#W#U#U#T#S#S#S#T#T#R#R#R#T#T#T#T#T#V#V#W#Z#0#0#0#0#1#1#1#2#2#2#5#5#8a#a#a#a#a.a.a.a.a.a.a.a.a.abababababababaaaaaa#8#8#7#7#6#6#6#6#6#6#6#6#6#4#4#4#3#3#Y#V#V#U#U#U#U#U#U#U#U#T#T#T#T#T#T#S#S#S#S#R#R#R#R#R#R#R#R#R",
"#K#K#L#L#L#L#M#M#M#M#M#M#N#N#N#O#O#O#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#O#O#O#O#O#O#O#O#O#N#N#N#N#M#M#L#K#K#K#J#J#J#J#J#J#J#H#G#G#F#F#F#F#F#F#E#E#E#E#E#C#C#B#A#A#y#y#y#y#y#y#y#y#y#y#y#y#y#w#w#w#w#w#w#v#v#w#w#w#v#v#t#r#r#r#p#p#n#n#n#n#n#n#n#p#p#p#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#t#t#v#v#w#v#v#w#y#y#A#A#B#C#C#E#E#E#F#F#F#F#F#F#F#G#H#H#K#L#L#M#N#N#R#R#R#R#R#S#U#U#W#X#X#V#V#V#V#X#Y#Y#W#W#W#U#U#T#S#S#S#T#T#R#R#R#T#T#T#T#T#V#V#W#Z#0#0#0#0#1#1#1#2#2#2#5#5#8a#a#a#a#a.a.a.a.a.a.a.a.a.abababababababaaaaaa#8#8#7#7#6#6#6#6#6#6#6#6#6#4#4#4#3#3#Y#V#V#U#U#U#U#U#U#U#U#T#T#T#T#T#T#S#S#S#S#R#R#R#R#R#R#R#R#R",
".8#K#L#L#L.8#M#M#M#M#M.8#N#N#N#O.8#O#R#R#R.8.8#R#R#R#R.8.8#R#R#R.8.8#R#R#R#R.8.8#R#R#R#R.8#R#R#R#R.8#R#R#R#R#R#R#R#O#O#O.8#O#O#O#O.8#N#N#N#N#M.8#L#K#K#K.8#J#J#J#J.8.8#H#G#G#F.8#F#F#F#F.8.8#E#E#E#C.8.8#A#A#y.8.8#y#y#y#y.8#y#y#y#y#y#w#w#w#w#w.8#v#v#w#w#w#v#v#t#r#r.8#p#p#n#n.8#n#n#n#n#p.8#p#r#r#r.8#r#r#r#r.8.8#r#r#r#r.8.8#r#t#t.8.8#w#v#v#w.8.8#A#A#B#C.8#E#E#E#F.8#F#F#F#F#F.8#H#H#K#L.8#M#N#N#R.8.8#R#R#S#U.8#W#X#X#V.8#V#V#X#Y#Y.8#W#W#U#U.8#S#S#S#T.8.8#R#R#T#T.8.8#T#V#V.8.8#0#0#0#0.8#1#1#2#2#2.8#5#8a#a#.8a#a.a.a..8.8a.a.a.a..8abababab.8abaaaaaa#8.8#7#7#6#6.8#6#6#6#6#6.8#4#4#4#3.8.8#V#V#U.8.8#U#U#U#U.8.8#T#T#T.8.8#S#S#S#S.8.8#R#R#R#R.8#R#R",
".8#N#O#O.8#R.8.8#O.8.8.8#M#M#M.8#M.8.8#M.8.8.8#R#R#R.8#R.8#R#R.8.8.8#R#R.8.8#R.8#R#R.8.8.8#R#R.8.8#R.8#R#R.8.8#R#R#R#R.8#O.8#N#M.8.8#L#L#L#L.8#L.8#L#L.8.8#L#L#L.8.8.8#J#H#H.8#F.8.8#E.8.8.8#E#E#C.8#C.8#C#C.8.8.8#y#y.8.8#w.8#w#w.8.8#w#w#w.8.8#v.8#w#w.8.8#w#w#v#t.8#t.8#r#p.8#p.8.8#p.8.8.8#r#r#r.8#t.8.8#w.8.8.8#w#y#y.8#A.8.8#B.8.8.8#C#C.8.8#E.8#E#E.8.8.8#F#F.8.8#G.8#H#H.8.8.8.8#L.8.8.8#N#O#O.8#O.8.8#R#R.8.8#S#U#U.8#W.8.8#V.8.8.8#Y#Y#W.8#U.8.8#S.8.8.8#R#R#R.8#R.8#T#T.8#T#V.8#W.8.8.8#0#1#2.8.8#8.8a#.8.8.8a.#9#9.8ab.8.8abab.8.8ababab.8aa.8.8#8#8.8.8#7#7#6.8#6.8.8#3.8.8.8#3#3#3.8#Y#Y.8#Y.8.8.8#V#V#U.8#T.8#S#S.8.8.8#R#R.8.8#R.8#R#S.8.8.8#S#S",
".8#N#O#O.8#R.8.8#O#N#N.8#M#M#M#M#M.8.8#M#N.8.8#R#R.8.8#R#R.8#R#R.8.8#R#R.8.8#R#R#R#R#R#R.8#R#R.8.8#R.8#R#R#R#R#R#R#R#R#R#O.8#N#M#M.8#L#L#L.8#L#L.8#L#L#L.8#L#L#L#L#L.8#J#H#H.8#F.8.8#E#E.8.8#E#E.8.8#C#C.8#C#B.8.8.....8.8#w#w#w#w#w#w#w#w#w.8.8#v.8#w#w#w#w#w#w#v#t#t#t.8#r#p.8#p.8.8#p#p#r.8#r#r#r#r#t.8.8#w#w#v.8#w#y#y.8#A#A.8#B#B.8.8#C#C.8.8#E#E.8#E#E#F.8#F#F.8.8#G.8#H#H.8#K#L.8#L#M#M.8#N#O#O.8#O#R.8#R#R#R.8#S#U#U.8#W.8.8#V#X#X.8#Y#Y#W.8#U.8.8#S#R.8.8#R#R.8.8#R#R.8#T.8#T#V.8#W#Z#Z.8#0#1#2.8#5#8.8a#a.a..8a.#9#9.8abab.8ababab.8ababab.8aaaa.8#8#8#7.8#7#7#6.8#6.8.8#3#3#3.8#3#3#3.8#Y#Y.8#Y#Y.8.8#V#V.8.8#T#S.8#S#R.8.8#R#R.8.8#R#R#R#S#S#S.8#S#S",
".8#J#K#K.8#K#K.8#K#K#K.8#K#K#K#K#K.8.8#L#M.8.8.....8.8#O#O.8#O#R.8.8#R#R.8.8#R#R#R#R#R#R.8#R#R.8.8#O#O.....................8.......8....#M.8#L#L.8#L#L#L.8#L#L#K#K#K.8#H#G#G.8#F.8.8#E#E.8.8.....8.8.....8.....8.8.....8.8..............#w#w.8#v#v#v#v#v#w#w#w#w#w#w#w#w.8#w#w.8#w#w.8#w#w#y.8#y#y#y#y#A.8.8.......8.....8.8.....8.....8.8.....8.8.....8.......8.....8.8.........8.....8#O#O#R.8#R#R#R.8#R#R.8#S#U#U.8#W#X#X.8#V#V.8#Y#W#W.8#T#T#S.8#T.8.8#R#R.8.8.....8.8.....8...8.....8.......8.......8.....8.......8.......8.....8.......8....ab.8#8#8.8#6#6#6.8#6#6#4#4#4#3.8#V#V#V.8#U#U#U.8#U#U.8#U#U.8.8#T#T.8.8#T#S.8#S#R.8.8#R#R.8.8#R#R#R#R#R#R.8#R#R",
".8#J#K#K.8#K#K.8#K#K#K.8#K#K#K#K#K.8.8#L#M.8.8.....8.8#O#O.8#O#R.8.8#R#R.8.8#R#R#R#R#R#R.8#R#R.8.8#O#O.....................8.......8....#M.8#L#L.8#L#L#L.8#L#L#K#K#K.8#H#G#G.8#F.8.8#E#E.8.8.....8.8.....8.....8.8.....8.8...................8.8#v.8#v#v#w#w#w#w#w#w#w#w.8#w#w.8#w#w.8#w#w#y.8#y#y#y#y#A.8.8.......8.....8.8.....8.....8.8.....8.8.....8.......8.....8.8.........8.....8..#O#R.8#R#R#R.8#R#R.8#S#U#U.8#W#X#X.8#V#V.8#Y#W#W.8#T#T#S.8#T.8.8#R#R.8.8.....8.8.....8...8.....8.......8.......8.....8.......8.......8.....8.......8.......8..#8.8#6#6#6.8#6#6#4.8#4.8.8#V#V#V.8#U#U#U.8#U#U.8#U#U.8.8#T#T.8.8#T#S.8#S#R.8.8#R#R.8.8#R#R#R#R#R#R.8#R#R",
".8#F#F#F.8#F.8.8#G#H#J.8#K#K#K.8#L.8.8#M#N.8.8....#R.8#R#R#R#R#R.8.8#R#R.8.8#O#O#O#O#O#O.8#O#O.8.8#R.8.................8...8.......8..#N#N#N#N#N.8#L#L#L.8#K#K#K#K#K.8#H#F#F.8#F.8.8.....8.8.....8.8...........8.8.....8.8...8...............8.8#y.8#y#y#A#A#A#A#B#B.8#C.8#C#C.8#C.8.8#C#C#C.8#C#C#C.8#C.8.8.......8.......8.....8.....8.8.....8.8.............8.....8.8...8.....8.....8.......8#R#S#S.8#U#W.8#X#V#V.8#V#X#X.8#Y.8.8#T#S#S.8#S#S#S.8#T.8.8#R#T.8.8.......8.....8...8.....8.......8.......8.....8.......8.......8.....8.......8.......8...8.8#6#6#6.8#3#3#Y.8#Y.8.8#U#U#T.8#S#S#R.8#R#R.8#R#R.8.8#R#R.8.8#R#R#R#R#R.8.8#R#R.8.8#R#R#R#P#P#P.8#P#P",
".8.8#F#F.8.8.8#G#G.8.8.8.8.8#K.8.8.8#M#M.8.8.8.8..#R.8.8.8#R#R.8.8.8.8#R#R.8.8.8#O#O.8.8.8.8#O#R.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8#N#N.8.8#M#L#L.8.8.8.8#K.8.8.8.8.8#F#F.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8..#y.8.8.8.8#B#B.8.8.8#C#C.8.8.8#C#C.8.8.8.8.8#C.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.....8.8.8.8.....8.8.8#X#X#V.8.8.8#X#X.8.8.8#W#T.8.8.8.8.8#S#S.8.8#R#R.8.8.8.8.....8.8.8.......8.8.....8.8.8.8.8...8.8.8.....8.8.8.8.....8.8.8.......8.8.8.....8.8.8.......8.8.8.8#Y.8.8.8#V#U.8.8.8.8.8#R#R.8.8#R#R.8.8.8.8#R#R.8.8.8#R#R.8.8.8.8#R#R.8.8.8#R#P.8.8.8.8#P",
"#F#F#F#F#F#F#F#F#F#G#G#G#H#H#H#J#J#J#K#K#K........#L#L#L#L#L#L#M#M#M#N#N#N#N#O#O#O#O#O#O#R#R#R#R#R#R..................................#N#M#M#L#L#K#J#J#J#H#H#G#F#F#F#F#F#F#F#F..........................................................................#B#B#C#C#C#C#C#C#C#C#C#C#C#E#E#E#E#E#E#E#E#E#E#F................................................................................................#X#X#V#V#V#V#V#X#Y#Y#U#U#T#T#T#R#R#T#T#T#T#T#V#V#V#V#V#V#W................................................................................................#4#4#4#3#Y#Y#V#U#T#T#T#T#S#S#S#R#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#R#R#R#P#P#P",
"#F#F#F#F#F#F#F#F#F#G#G#G#H#H#H#J#J#J#K#K........#L#L#L#L#L#L#L#M#M#M#N#N#N#N#O#O#O#O#O#O#R#R#R#R#R..................................#N#N#M#M#L#L#K#J#J#J#H#H#G#F#F#F#F#F#F..................................................................................#C#C#C#C#C#C#C#C#C#C#C#E#E#E#E#E#E#E#E#E#E......................................................................................................#V#V#V#V#V#X#Y#Y#U#U#T#T#T#R#R#T#T#T#T#T#V#V#V#V#V#V......................................................................................................#4#3#Y#Y#V#U#T#T#T#T#S#S#S#R#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#R#R#R#P#P#P",
"#F#F#F#F#F#F#G#G#G#G#G#G#G#G#G#G#G#G#G#G........#H#J#J#J#K#K#K#K#K#K#K#K#K#K#L#L#M#N#O#O#R#R#R#R#R..................................#L#L#K#K#J#J#J#H#H#H#G#G#F#F#F#F#F#F......................................................................................#C#C#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F........................................................................................................#Y#W#W#W#U#T#T#S#S#S#S#T#R#R#T#T#T#T#T#V#W#W#Z#1#1........................................................................................................#3#Y#Y#V#T#S#S#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#V#V#V#U#U#T#T#R#P#P#P#P#P#R#R#T",
"#F#F#F#F#F#F#G#G#G#G#G#G#G#G#G#G#G#G#G#G........#H#J#J#J#K#K#K#K#K#K#K#K#K#K#L#L#M#N#O#O#R#R#R#R#R..................................#L#L#K#K#J#J#J#H#H#H#G#G#F#F#F#F#F..........................................................................................#C#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F........................................................................................................#Y#W#W#W#U#T#T#S#S#S#S#T#R#R#T#T#T#T#T#V#W#W#Z#1#1..........................................................................................................#Y#Y#V#T#S#S#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#V#V#V#U#U#T#T#R#P#P#P#P#P#R#R#T",
".8#F#F#F.8.8.8#F#F.8.8.8#F#F#F.8.8.8#F#F.8.8.8..#F#G.8.8.8#G#G.8.8.8#H#H#H.8.8.8#J#J.8.8.8#L#L#M.8.8.8.....8.8.........8.8.8.....8.8#H#H#G#G.8.8.8#F#F.8.8#F#F#F#F.8.8.8.....8.8.........8.8.8...8.8.8.......8.8.8.......8.8.8.....8.8.........8.8.8.....8.8......#E.8.8.8#E#F.8.8#F#F#F#F.8.8.8#F#F.8.8.........8.8.8.....8.8.8.......8.8.....8.8.8.........8.8.....8.8.8.......8.8.8.8...8.8.8.......8.8.8.8.....8.8#T#R#R.8.8.8#T#T.8.8.8#W#W#Z#Z.8.8#0#0.8.8.8.......8.8.8.....8.8.8.......8.8.8.....8.8.8.......8.8.8.....8.8.........8.8.8.....8.8.........8.8.8.....8.8#U#T#S#S.8.8.8#R#R.8.8.8#R#R#R.8.8.8#P.8.8.8#V#V#V#V.8.8#V#V.8.8.8#V#V#V.8.8.8#R#R",
".8#F#F#F.8#F.8.8#F.8.8.8#F#F#F.8#F.8.8...8.8.8#F#F#G.8#G.8#G#G.8.8.8#H#H#H.8#J.8#J#J.8.8.8#L#L.8.8...8.....8.8.........8...8.....8.8#H#H#G#G.8#F.8#F#F.8.8#F#F#F#F.8...8.....8.8.......8.....8...8.8.8.......8.8.8.......8...8.....8.8.......8.8...8.....8.8.........8.8.8#E#F.8.8#F#F#F#F.8#F.8#F#F.8.8.........8...8.....8.8.8.....8.....8...8.8.8.......8.8.8.8...8.8.8.......8.8.8.8...8.8.8.......8.8.8.8.....8.8#T#R#R.8#R.8.8#T.8.8.8#W#W#Z.8#0.8.8#0.8.8.8.......8...8.....8.8.8.......8...8.....8.8.8.....8.8...8.....8.8.........8...8.....8.8.........8...8.....8.8#U#T#S#S.8#S.8#R#R.8.8.8#R#R.8#P#P.8#P.8.8.8#V#V#V.8#V#V.8#V.8.8.8#V#V#V.8.8.8#R#R",
".8#F#F#F.8#F#F.8#F#F#F.8#F#F#F#G#G.8.8.....8.8#H#H.8.8#H#H.8#H#G.8.8#G#G.8.8#G#G#G#G#G#G.8#H#H.8.8.........................8.......8#F#F#F.8#F#F.8#F#F#E.8#E#E#E.8.....8.......8.......8.....8.......8.........8.8.....8.8...................8.8....................#F#F.8#F#F#F.8#F#F#F.8#F#F.8.8#G...8.......8.....8.......8.8.....8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8#T#V#V.8#W#Z.8#1#1#1.8#1#1#1.8#2.8.8#2#2.8.8.....8.8.....8.....8.8.....8.8.............8.....8.8.........................8.......8.......8.....8.8.....8..#R#R.8#R#R.8#R#R#R.8.8#R#R.8#P#P.8#P#P#P.8#P#P#P.8#R#R.8#R#R#R.8#R#R#R#P#P.8#P#R",
".8#F#F#F.8#F#F.8#F#F#F.8#F#F#F#G#G.8.8.....8.8#H#H.8.8#H#H.8#H#G.8.8#G#G.8.8#G#G#G#G#G#G.8#H#H.8.8.........................8.......8#F#F#F.8#F#F.8#F#F#E.8#E#E...8.....8.......8.......8.....8.......8.........8.8.....8.8...................8........................#F.8#F#F#F.8#F#F#F.8#F#F.8.8#G...8.......8.....8.......8.8.....8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8#T#V#V.8#W#Z.8#1#1#1.8#1#1#1.8#2.8.8#2#2.8.8.....8.8.....8.....8.8.....8.8.............8.....8.8.........................8.......8.......8.....8.8.....8....#R.8#R#R.8#R#R#R.8.8#R#R.8#P#P.8#P#P#P.8#P#P#P.8#R#R.8#R#R#R.8#R#R#R#P#P.8#P#R",
".8#F#F#F.8#F#F.8#F#F#F.8#F#F#F#G#G.8.8.....8.8#H#H.8.8#H#H.8#H#G.8.8#G#G.8.8#G#G#G#G#G#G.8#H#H.8.8.........................8.......8#F#F#F.8#F#F.8#F#F#E.8#E#E...8.....8.......8.......8.....8.......8.........8.8.....8.8...................8.8...8..................#F.8#F#F#F.8#F#F#F.8#F#F.8.8#G...8.......8.....8.......8.8.....8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8..#V#V.8#W#Z.8#1#1#1.8#1#1#1.8#2.8.8#2#2.8.8.....8.8.....8.....8.8.....8.8.............8.....8.8.........................8.......8.......8.....8.8.....8....#R.8#R#R.8#R#R#R.8.8#R#R.8#P#P.8#P#P#P.8#P#P#P.8#R#R.8#R#R#R.8#R#R#R#P#P.8#P#R",
".8#F#F#F.8.8.8.8#F#F#F.8#G#G#G.8#H.8#H.....8.8#H#H#H.8#H.8#G#G#F.8.8#F#F#F.8#G.8#G#G#G#G.8#G#G.8.8...8.................8...8.......8#E#E#E#E.8#E.8#E#E#E.8#E.......8...8.......8.......8.8...8.......8.........8.8.......8...8...............8.8...8.................8.8.8#F#F#F.8#F#F#F#F.8#F.8#G#H...8.........8...8.......8.8.....8.8...8.......8.......8.8...........8.......8.8.8.8.......8.......8.8.8.8.......8..#1#1.8.8.8.8#8#8#8.8#8#8#8.8a#.8a#a#a#.8.8.......8...8.......8.8.......8...8.........8.....8.8...8.................8...8.......8.........8...8.......8......#R.8#R.8#R#R#R.8.8#R#R.8.8#R.8#R#P#P.8#P#P#P.8#P#P.8#P#P#P.8#P#P#P#P#P.8#R#R",
".8.8#F#F.8.8.8#F#F.8.8.8.8.8#G.8.8.8#H...8.8.8.8#H#H.8.8.8#G#G.8.8.8.8#F#F.8.8.8#G#G.8.8.8.8#G#G.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8#E#E.8.8.8#E#E.8.8.8.8.....8.8.8.....8.8.8.8.....8.8.....8.8.8.8.8...8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8#F#F.8.8.8.8#F#F.8.8.8#G#H.8.8.8.8.....8.8.8.....8.8.8.8.....8.8.....8.8.8.8.8.....8.8.....8.8.8.8.....8.8.8.8...8.8.8.8.....8.8.8.8.....8.8.8..#1.8.8.8#5#8.8.8.8.8.8#8#8.8.8a#a#.8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8..#R.8.8.8#R#R.8.8.8.8#R#R.8.8#R#R.8.8.8.8.8#P#P.8.8#P#P.8.8.8.8#P#P.8.8.8.8#R",
"#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#G#G#H#H........#H#H#H#H#H#H#H#H#H#H#H#H#H#H#H#G#G#G#G#G#G#F#F#F#F..................................#E#E#E#E#E#E#E#E#E#E#E#E#E..............................................................................................................#E#E#E#E#F#F#F#F#F#F#F#H#J..................................#W#W#W#X#X#V#X#X#W#W#U#T#T#S#T#T......................................................a#a#a#a#a.a.a.a.a.a.a.a.#9#9#9a.a...................................#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6................................................#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#S#S#T",
"#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#G#G#H#H........#H#H#H#H#H#H#H#H#H#H#H#H#H#H#H#G#G#G#G#G#G#F#F#F..................................#F#E#E#E#E#E#E#E#E#E#E#E#E..........................................#B#B#B#B#B#B#B#B#B#B#C#C#C#C..........................................#E#E#E#E#F#F#F#F#F#F#F#H....................................#W#W#W#X#X#V#X#X#W#W#U#T#T#S#T#T#R#T#T#V#V#W..........................................a#a#a#a#a.a.a.a.a.a.a.a.#9#9#9a.....................................#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6..........................................#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#S#S#T",
"#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F........#H#H#H#H#H#H#H#H#H#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#F..................................#F#F#F#F#F#F#E#E#E#E#E#E#E......................................#C#C#C#C#C#C#C#C#C#E#E#E#E#E#E#E#E..........................................#F#F#F#G#G#H#H#J#K#K#L..................................#X#X#X#V#V#V#X#X#X#Y#Y#W#U#U#T#S#S#T#R#R#T#T#T#T........................................a#a#a#a#a#a.a.a.#9#9#9#9a.ababab..................................#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#4......................................#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#S#T#T#U#U#U#U#U#U#U#V#V#V#V#V#V",
".8#E#E#E#E#E#F#F#F#F.8.8#F#F#F#F#F#F.......8.8#H#H#H#H#H#H#H#H#G#G#F#F#F#F#F.8#F#F#F#F#F#F#F#F...........................8......#F#F#F#F#F#F#E.8#E#E#E#E#E.........8.8...................8.8#C#C#C#C#C#C#C#C#C.8.8#E#E#E#E#E#E#E#E#E#E.8...................8..................#F.8#G#G#H#H#J#K#K#L.....8.....................8.8....#X#X#X#V#V#V#X.8#X#Y#Y#W#U#U#T#S#S#T.8#R#T#T#T#T#V#Z.......8.....................8........a#a#a#a#a..8.8#9#9#9#9a.ababab...8.8...................8.8......#6.8#6#6#6#6#6#6#6#6#6#6.8#6#6#6#6#6#6#6#6#6#6.8#4#3.................8...................8.8#R#R#R#R#R#R#R#R#R.8.8#R#R#R#R.8#R#R#R#S.8.8#U#U#U#U#U#U#U#V#V#V.8#V#V",
".8.8#E#E.8.8#E#E#E#F.8.8.8#F#F.8.8#F.......8.8.8#F#F.8.8#F#F#F.8.8.8#F#F#F.8.8.8#F#F.8.8.8#F#F.8.8.8.......8.8.........8.8.8.....8.8#E#E#E#E.8.8.8#E#E.8.8.........8.8.8.....8.8.........8.8.8#C.8.8.8#C#C#C#C.8.8#E#E.8.8.8#E#E#E.8.8.8.8...8.8.8.......8.8.8.8.....8.8.......8.8.8.8#K.8.8.8#L#L...8.8.8.....8.8.8.......8.8.8.....8.8.8#V#V#V.8.8.8#V#V.8.8.8#U#S#S.8.8.8#T#T.8.8#W#Z#Z...8.8.8.....8.8.........8.8.8.....8.8a.a.a.#9.8.8.8a.a..8.8ababaa...8.8.8.....8.8.........8.8.......8.8.8#6#6.8.8.8#6#6#6.8.8.8#6#6.8.8#4#4#3#3.8.8.8#3#3.8.8.........8.8.8.....8.8.........8.8.8#R#R.8.8.8#R#R#R.8.8.8#R#S.8.8.8#T#T#T.8.8#U#U.8.8.8#Y#Y#3.8.8.8.8#3",
".8.8#E#E.8.8#E#E#E#F.8#F.8#F#F.8.8#F........#F.8#F.8.8.8#F#F#F.8.8.8#F#F#F.8#F.8#F#F.8.8.8#F#F.8.8.8.......8.8.........8...8.....8.8#E#E#E#E.8#E.8#E#E.8.8.........8...8.....8.8.......8..#C.8#C.8.8.8#C#C#C.8#E#E.8#E.8.8.8#E#E#E.8.8.8.8...8.8.8.......8.8.8.8.....8.8.......8#K.8.8#K.8.8.8#L#L...8...8.8...8.8.8.......8...8.8...8.8.8#V#V#V.8#V.8#V#V.8.8.8#U#S#S.8#R.8#T#T.8.8#W#Z#Z.8.8...8.....8.8.........8...8.....8.8a.a.a.#9.8#9.8a.a..8.8abab.........8...8.8.8.......8.....8.....8#6.8#6#6.8.8.8#6#6.8.8#6.8#6#6.8.8#4#4#3#3.8#3.8#3#3.8.8.........8...8.....8.8.........8...8#R#R.8.8.8#R#R.8#R#R.8#R#S.8#S.8#T#T.8#T#T.8#U.8.8.8#Y#Y#3.8.8.8.8#3",
"#E.8#F#F#F.8#F#F#F.8#F#F.8.8#F#G.8.......8#G#G.8#G#F#F.8#F#F#F#F.8.8#F#F.8.8#F#F#F#F#F#F.8#F#F.....8.......................8....#F.8#F#F#F.8#F#F.8#E#E#E.8.......8.....8.......8.......8#C#C.8#C#C#C.8#E#E#E.8#E#E.8#E#E#E.8#E#E#E.8#E#F.8#F.....8.......8.....8.......8.......8#M#N.8#N#N#O.8#O#R.......8.8.......8.....8.8.....8#W#W.8.8#X#V.8.8#Y#Y.8#W#U#T.8#S#T.8.8#T#T#T#T#V#V#W#W#W.8.....8.....................8.......8a.a.ab.8aaaa.8.8aaaa.8#8#8...8.....8.......8.......8.....8...8.8#6#6#6#6#6#6.8#6#6.8.8#4#4#3#3#Y#V#V#V#U#U#U#U.8#U#U#V.8.......8.....8.8.....8.......8.....8#V#V#U.8.8#U#U.8#T#T.8#T.8.8#T#T.8#T.8#U#U.8#V#V#V.8#3#3#4.8#4#6.8#6",
"#E.8#F#F#F.8#F#F#F.8#F#F.8.8#F#G.8.......8#G#G.8#G#F#F.8#F#F#F#F.8.8#F#F.8.8#F#F#F#F#F#F.8#F#F.....8.......................8..#F#F.8#F#F#F.8#F#F.8#E#E#E.8.......8.....8.......8.......8#C#C.8#C#C#C.8#E#E#E.8#E#E.8#E#E#E.8#E#E#E.8#E#F.8#F.....8.......8.....8.......8.......8#M#N.8#N#N#O.8#O#R.......8.8.......8.....8.8.....8#W#W.8.8#X#V.8.8#Y#Y.8#W#U#T.8#S#T.8.8#T#T#T#T#V#V#W#W#W.8#Z...8.....................8.......8a.a.ab.8aaaa.8.8aaaa.8#8#8...8.....8.......8.......8.....8...8.8#6#6#6#6#6#6.8#6#6.8.8#4#4#3#3#Y#V#V#V#U#U#U#U.8#U#U#V.8.......8.....8.8.....8.......8.....8#V#V#U.8.8#U#U.8#T#T.8#T.8.8#T#T.8#T.8#U#U.8#V#V#V.8#3#3#4.8#4#6.8#6",
"#F.8#F#F#G.8#G#G#G.8#G#G.8#G#G#H.8.......8#H#H.8#H#H#H.8#J#J#J#J.8.8#G#G.8.8#F#F#F#F#F#F.8#F.......8...................8...8..#F#F.8#F#F#F#F#F#F.8#F#F...8.......8.....8.......8.......8#C#C.8#C#E#E.8#E#E#E.8#E#E.8#E#E#E.8#E#E#E.8#E#F.8#F#F...8.......8.....8.......8.......8#R.8.8#R#R#S.8#S.....8...8.8.......8.......8.....8#V#V.8.8#X#Y.8.8#W#W#U#U#T#S.8#T#R.8.8#T.8#T#T#T#T#T#V#V.8.8...8.....................8.......8..aa#8.8#7#7.8.8#7#7.8#7#7...8.....8.......8.......8.....8...8.8#4#4#4#4#4#4.8#4#4.8.8#3.8#Y#Y#Y#V#U#U#T#T.8#S.8#T#T#U.8#V...........8.8.....8.......8.....8#V#V#U.8.8#U#U.8#U#U.8#U.8.8#U#V.8#V.8#Y#Y.8#3#3#3.8#6#6#6.8#6#6.8#6",
".8.8#F#F#G.8#G#G#G#G.8#G.8#G#G#H.8.......8.8#H.8#H#H#H.8#J#J#J#J.8.8#G#G#G.8#F.8#F#F#F#F.8#F.......8...................8...8..#F#F.8#F#F#F#F.8#F.8#F#F...8.........8...8.......8.......8.8#C.8#C#E#E.8#E#E#E.8#E#E#E#E#E#E.8#E#E#E.8.8.8.8#F#F...8.......8.8.8.8.......8.......8.8.8.8#R#R#S.8#S.....8...8.8.......8.......8...8..#V#V.8.8#X#Y#Y.8#W.8#U#U#T#S.8#T#R.8.8#T.8#T#T#T#T#T#V#V.8.8#Z.8.................8...8.......8..aa#8#7.8#7.8#7#7#7.8#7#7...8.8...8.......8.......8.....8..#6.8#4.8#4#4#4#4.8#4#4.8.8#3.8#Y#Y#Y#V#U#U#T#T.8#S.8#T#T#U.8#V.......8...8.......8.........8...8#V#V#U.8.8#U#U.8.8#U.8#U#U.8#U.8#V#V.8#Y#Y.8#3#3#3.8#6#6#6.8.8.8.8#6",
".8.8#F#F.8.8.8.8#F#F.8.8.8#F#F.8.8.8.8.....8.8#H#H.8.8.8.8.8#H.8.8.8.8#G#G.8.8.8#G#F.8.8.8.8...8.8.8.8.....8.8.8.8.....8.8.8..#F.8.8.8.8#F#F.8.8.8#F#F.8.8.8.8.....8.8.8.....8.8.8.8.....8.8#E#E.8.8.8.8.8#E#E.8.8#E#E.8.8.8.8#F#F.8.8.8.8#F.8.8.8.8.....8.8.8.8.....8.8.8.....8.8.8#R#R.8.8.8.8.8...8.8.8.....8.8.8.8.....8.8.8..#V.8.8.8.8#W#W.8.8.8#W#W.8.8.8.8#T#T.8.8.8#R#R.8.8.8.8#T#V.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8ab#8.8.8.8#7#7.8.8.8.8.....8.8.....8.8.8.8.8.....8.8....#6.8.8.8#4#3.8.8.8.8#V#U.8.8.8#U#U.8.8.8.8#U#U.8.8.8#V#V.8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8#4#4.8.8.8.8#3#3.8.8#3#3#3.8.8.8#4#4#6.8.8#6#6.8.8.8.8#7#8.8.8.8.8#8",
"#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F........#H#H#H#H#H#H#H#H#H#H#G#G#G#G#G#G#G#G#G#G#F#F#F#F..................................#F#F#F#F#F#F#F#F#F#F#F#F#F..................................#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F................................#R#R#R#R#R#S#S....................................#V#V#X#X#Y#W#W#W#W#W#W#W#U#T#T#S#T#T#R#R#R#R#R#R#R#T#T#T#V#W#W#Z..................................ab#8#8#8#7#7#7#7#7#7....................................#6#6#4#4#4#3#3#3#Y#Y#V#U#U#U#U#U#U#U#U#U#U#U#U#U#V#V#V#V#V#V#V#V..................................#4#3#3#3#3#3#3#3#3#3#3#3#3#3#4#4#4#6#6#6#6#6#6#6#7#7#7#8#8#8#8#8#8",
"#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F........#F#F#F#F#F#F#F#G#G#G#H#H#H#H#H#H#H#H#H#H#H#H#H#G..................................#F#F#F#F#F#F#F#F#F#F#F#E#E..................................#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#G#G#G#G#G#G#G..................................#R#R#S#S#U#U..................................#V#X#X#X#X#Y#W#W#U#U#U#T#T#T#T#T#T#T#T#S#S#S#S#S#S#S#T#R#R#T#V#V#W..................................abaaaaaaaaaaaaaaaaaa..................................#7#6#6#6#6#6#4#4#3#Y#Y#V#U#U#U#U#U#U#U#U#U#U#V#V#V#Y#Y#Y#Y#Y#Y#Y#Y..................................#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#8#8aa",
"#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F........ababababababababababababababababababababababababababababababababababababababababababababababababababababababab..................................ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#7#7#7#7#8#8aa",
"#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F#F........ababababababab.8abababababababababab.8ababababababababababababababababababababababababababababababababababababab.8.....................8..........ababababab.8abababababababababab.8abababababababababab.8ababababababababababababababababababababab.8abababab.8abababababababababab.8abababababababababab.8abababababababababab.8abababababababababab.8abababababababababab.8abababababababababab.8abababababababababab.8ababababababababab.8.8abababababababababababababababababababababababababababababababababababababababababababababababab.8abababababababababab.8ababababababababab.8.8abababababab#8aaababababa.",
".8#E#F#F.8.8.8#F#F.8.8.8#F#F#F.8.8.......8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8abab.8.8.8abab.8.8.8ababab.8.8.8.8abab.8.8ababab.8.8.8.8abab.8.8ababab.8.8.8.....8.8.8.......8.8.8.....8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8abab.8.8abababab.8.8.8abab.8.8abababab.8.8.8abab.8.8abababab.8.8.8abab.8.8.8abab.8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8abab.8.8abababab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8abababab.8.8.8abab.8.8abababab.8.8.8abab.8.8abababab.8.8abab.8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8.8abab.8.8ababab.8.8.8.8abab.8.8ababab.8.8abababab.8.8.8abab.8.8.8ababab.8.8ababab.8.8abababab.8.8abab.8.8.8ab#8aa.8.8.8.8a.",
".8#E#F#F.8#F.8.8#F#F#F.8#F#F#F...8....abab.8.8abab.8.8abab.8abab.8.8abab.8.8abababababab.8abababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8...8.8.......8.......8...8.8.....8.8..ab.8.8abab.8abab.8.8abab.8.8ababababababababab.8.8ab.8abababababababab.8ab.8ababab.8ababab.8abab.8.8ab.8ab.8.8ababab.8ababab.8abab.8abab.8.8abab.8.8abababababab.8abab.8.8ab.8ababababababab.8.8ab.8abab.8abab.8abababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8aba.#9.8#9#9.8#9",
".8#E#F#F.8#F#F.8#F#F#F.8#F#F#F...8....abab.8.8abab.8.8abab.8abab.8.8abab.8.8abababababab.8abababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab...8.8.......8.......8...8.8.....8.8.....8.8abab.8abab.8.8abab.8.8ababababababababab.8.8ab.8abababababababababab.8ababab.8ababab.8abab.8.8ababab.8.8ababab.8abab.8.8abab.8abab.8.8abab.8.8abab.8ababab.8abab.8.8ababababababababab.8abab.8abab.8abab.8abababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8aba.#9.8#9#9.8#9",
".8#E#F#F.8#F#F.8#F#F#F.8#F#F#F...8....abab.8.8abab.8.8abab.8abab.8.8abab.8.8abababababab.8abababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababababab...8.......8.......8...8.8.....8.8.....8.8abab.8abab.8.8abab.8.8ababababababababab.8ababababababababababababab.8ababab.8ababab.8abab.8.8ababab.8.8ababab.8abab.8.8abab.8abab.8.8abab.8.8abab.8ababab.8abab.8.8ababababababababab.8abab.8abab.8abab.8abababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8aba.#9.8#9#9.8#9",
".8#E#E#E.8#F.8.8#F#F#F.8#F#F#F...8....abab.8.8ababab.8abab.8abab.8.8abab.8.8abababababab.8abababab.8ababab.8abab.8ababab.8ababab.8ab.8.8ababab.8ababab.8ab.8.8.......8.......8...8.8.....8.8.....8.8.....8abab.8.8abab.8.8ab.8ababababababab.8.8ab.8abababababababababab.8ababab.8ababab.8abab.8.8ab.8ab.8.8ababab.8ababab.8abab.8abab.8.8abab.8.8abababababab.8abab.8.8ab.8ababababababab.8.8ab.8abab.8abab.8abababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8ab.8.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8ab#9a..8a.a#.8a#",
".8#E#E#E.8#F.8.8#F#F#F.8#F#F#F...8....abab.8.8ababab.8ab.8ababab.8.8abab.8.8ab.8abababab.8abababab.8ababab.8.8.8.8ababab.8ababab.8.8.8.8ababab.8ababab.8ab.8.8.......8.......8...8.......8.8.......8...8..abab.8.8abab.8.8ab.8ababababababab.8.8ab.8abababababababab.8.8.8ababab.8abababab.8ab.8abab.8ab.8.8ababab.8ababab.8ab.8ababab.8.8ababab.8ab.8abababab.8abab.8.8ab.8ababababababab.8.8ab.8abab.8.8.8.8abab.8ab.8ababab.8abababab.8ab.8ababab.8ababab.8.8ab.8ababab.8ababab.8abab.8ababab.8ababab.8.8.8abababab.8ababab.8.8.8.8ababab.8ababab.8.8.8.8ababab.8abababab.8abababab.8ab.8ababab.8.8abab.8.8ab.8ababab.8ababab.8abab.8ababab.8ab#9a..8.8.8.8a#",
"#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F........ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab..................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#5#5#5#5#8#8#8",
"#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F........ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab......................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#5#5#5#5#8#8#8",
"#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F........abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab......................................................ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#5#5#5#5#5#5#5",
"#E#E#F#F#F#F#F#F#F#F#F#F#F#F........ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab............................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#5#5#5#5#5#5#5",
"#F#F#G#G#H#H#H#G#G#F#F#F#F#F........abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab..............................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#5#5#5#5#8#8#8",
".8.8#G#G.8.8#H#G#G#F.8#F.8#F...8.8..ababababab.8ab.8.8.8ababab.8abab.8ab.8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8.8abab.8.8ababab.8ab.8.8ab.8.8.8ababab.8ab.8.8ab.8.8.8.......8...8.....8.8.8.......8...8.....8.8.8.......8...8.....8.8ababab.8.8ab.8abab.8.8abababab.8.8.8abab.8.8abababab.8ab.8abab.8ab.8.8ab.8.8.8ababab.8ab.8abab.8.8.8ababab.8ab.8abab.8.8.8ababab.8ab.8abab.8.8ababab.8.8ab.8abab.8.8abababab.8ab.8abab.8.8abababab.8ab.8abab.8ab.8.8ab.8.8.8ababab.8ab.8abab.8.8.8abab.8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8.8abab.8.8.8abab.8.8abababab.8ab.8abab.8.8ababab.8.8.8ababab.8ab.8abab.8.8.8ababab.8ab.8abab.8.8.8ababab.8ab.8#5#5.8.8.8#8#8",
"#F.8#F#F#F.8#F#F#F.8#F#F.8#F.....8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8...8.8.......8.......8...8.8.......8.......8...8.8.....8.8.....8.8.....8.....8.8.....8.8...8...............8.8...8.................8...8.......8.......8.....8.8...8...8.8.......8.......8.....8.....8.8.....8.8.............8.....8.8...8...............8.8...8.....................8.......8.......8.....8.8...8...8.8.....8.8.....8.8.....8.....8.8.........8.......8.....8.......8.......8.....8.....8...8.......8.............8.8.....8...........8.......8.....8.....8.8.....8.8.....8.....8.8.....8.8...8#8#8#8#8.8#8#8",
"#F.8#F#F#F.8#F#F#F.8#F#F.8.8.....8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8...........8.8.......8.......8...8.8.....8.8.....8.8.....8.....8.8.....8.8...................8.8...8.....................8.......8.......8.....8.8.......8.8.......8.....8.8.....8.....8.8.....8.8.....8.......8.....8.8...................8.....8.....................8.......8.......8.....8.8...8...8.8.....8.8.....8.8.....8.....8.8.........8.......8.....8.......8.......8.....8.........8.......8.......8.....8.8.....8...........8.......8.....8.....8.8.....8.8.....8.....8.8.....8.8....#8#8#8#8.8#8#8",
"#E.8#E#E#E.8#E#E#E.8#E#E.8.8.....8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8...........8.8.......8.......8...8.8.....8.8.....8.8.....8.....8.8.....8.8...................8.....8.....................8.......8.......8.....8.8.......8.8.......8.....8.8.....8.....8.8.....8.8.....8.......8.....8.8...................8.....8.....................8.......8.......8.....8.8...8...8.8.....8.8.....8.8.....8.....8.8.........8.......8.....8.......8.......8.....8.........8.......8.......8.....8.8.....8...........8.......8.....8.....8.8.....8.8.....8.....8.8.....8.8....#9a.a.a..8a.a.",
"#E.8#E#E#E.8#E#E#E.8#E#E.8#E.....8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8...8.8.......8.......8...8.8.....8.8.....8.8.....8.....8.8.....8.8...................8.8...8.....................8.......8.......8.....8.8...8...8.8.......8.......8.....8.....8.8.....8.8.............8.....8.8...................8.8...8.....................8.......8.......8.....8.8...8...8.8.....8.8.....8.8.....8.....8.8.........8.......8.....8.......8.......8.....8.....8...8.......8.............8.8.....8...........8.......8.....8.....8.8.....8.8.....8.....8.8.....8.8....#9a.a.a..8a.a.",
".8.8#E#E#E.8#E#E#E#E.8#E.8#E.....8.......8.....8.......8.......8.....8.......8.......8.8.8.........8.......8.8.8.8.......8.......8...8.8.......8.......8...8.8.......8.......8...8.......8.8.......8...8.......8.8.....8.8...8...............8.8...8.................8.8.8.......8.........8...8.....8...8.8.......8.......8...8.......8.8.......8...8.........8.....8.8...8...............8.8...8.................8...8.......8.........8...8.....8...8.......8.8.......8...8.......8.8.........8.......8.8.8.........8.......8.8.8.8.....8...8.......8.........8...8.......8...........8.......8...8.......8.8.......8...8.......8.8.....8.8...8#9a.a.a..8a.a.",
"#E#E#E#E#E#E#E#E#E#E#E.8#E.................8.8...................8.................................................................8.....................8.....................8.....................8.....................8.................................................................8.........8.....................8.....................8.....................8...........................................8.....................8.........8.....................8.......................................................................................8...............................8.....................8.....................8..#9a.a.a.a.a.a.",
"#E#E#E#E#E#E#E#E#E#E#E#E#E........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#9a.a.a.a.a.a.",
"#E#E#E#E#F#F#F#F#F#E#E#E#E........ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab....................................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa.a.a.a.a.a.a.",
"#E#E#E#E#F#F#F#F#F#E#E#E........abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab................................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa.a.a.a.a.a.a.",
"#C#C#C#C#C#C#C#C#C#E#E#E........abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab............................................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa.a.a.a.a.a.a.",
".8#C#C#C.8#C.8.8#C#E.8#E.8.....8.8abababababab.8ab.8.8.8ababab.8ab.8.8ab.8.8.8ababab.8.8.8abab.8.8.8ababab.8.8.8.8abab.8.8.8abab.8.8abababab.8ab.8abab.8.8abababab.8ab.8abab.8.8ababab.8abab.8ab.8.8.8.......8.8.8.......8...8.....8.8.......8.8.8.8.....8.8....abab.8.8ababab.8ab.8.8ab.8.8.8ababab.8ab.8.8ab.8.8.8ababab.8ab.8abab.8.8.8ababab.8ab.8abab.8.8.8ababab.8ab.8abab.8.8ababab.8.8.8.8abab.8.8abababab.8ab.8abab.8.8abababab.8ab.8abab.8.8abababababab.8ab.8.8.8ababab.8ab.8.8ab.8.8.8ababab.8.8.8abab.8.8ab.8abab.8.8.8.8abab.8.8ababab.8.8.8.8abab.8.8ababab.8.8abababab.8ab.8abab.8.8.8abab.8abab.8ab.8.8.8ababab.8ab.8.8ab.8.8.8aba.a..8.8.8.8a.",
".8#A#y#y.8#y.8.8#A#B#C#C.8.......8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8abab.8ab.8ababab.8abababababab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ab.......8.8.....8.8...8...............8.8...8............ababab.8ababab.8ab.8.8ababab.8ababab.8ab.8.8ababab.8ababab.8abab.8abab.8.8abab.8.8abababababab.8abab.8.8ab.8ababababababab.8.8ab.8abababababababababab.8ababab.8abababababab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababababab.8abab.8.8ab.8abab.8abab.8ababab.8ababab.8ab.8.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8ab#9#9.8#9a..8a.",
".8#A#y#y.8#y#y.8#A.8#C#C.8.8..ab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8abababab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8.8.....8.8...................8....................abab.8ababab.8abab.8ababab.8ababababab.8.8ababab.8abab.8.8abab.8abab.8.8abab.8.8abab.8ababab.8abab.8.8ababababababababab.8abab.8abababababababababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababababab.8abab.8.8abababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8ab#9#9.8#9a..8a.",
".8#w#w#w.8#w#w.8#y.8#B#B.8.8..ab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8abababab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8.8.....8.8...................8.....8................ab.8ababab.8abab.8ababab.8ababababab.8.8ababab.8abab.8.8abab.8abab.8.8abab.8.8abab.8ababab.8abab.8.8ababababababababab.8abab.8abababababababababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababababab.8abab.8.8abababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8aba#a#.8a#a..8a.",
".8#w#w#w.8#w.8.8#y.8#B#B.8....ab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8abababab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8.8ab...8.8...................8.8...8................ab.8ababab.8abab.8ababab.8ababab.8ab.8.8ababab.8ababab.8abab.8abab.8.8abab.8.8abababababab.8abab.8.8ababababababababab.8.8ab.8abababababababababab.8ababab.8ababab.8abab.8.8abab.8ababab.8abab.8ababab.8ababab.8abab.8ababab.8ababababab.8abab.8.8abababab.8abab.8ababab.8ababab.8abab.8ababab.8abababab.8ababab.8abab.8ababab.8.8abab.8abab.8ababab.8ababab.8abab.8ababab.8aba#a#.8a#a..8a.",
".8.8#w#w.8.8.8#y#y#A.8.8.8.....8.8.8.8abab.8.8abab.8.8.8.8.8abab.8.8abab.8.8.8.8.8ab.8.8.8abab.8.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8abab.8.8.8.8.8ab.8.8.8.8abab.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8abab.8.8.8abab.8.8.8.8.8ab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8abab.8.8.8.8.8abab.8.8abab.8.8.8.8.8ab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8.8abab.8.8.8ababab.8.8.8.8ab.8.8.8.8abab.8.8.8abab.8.8.8.8abab.8.8abab.8.8.8.8.8ab.8.8.8abab.8.8.8.8#2#5.8.8.8.8#8",
"#y#y#w#w#v.8#w#y#y#A.8.8......abababababab.8.8ababababababababab.8.8abababababababababab.8ababababababababab.8ababababab.8abababababababababab.8ababababababababab.8.8ababababababababab.8.8ababababababababababababababab.8.....................8..................abababababab.8abababababababababab.8abababababababababab.8.8ababababababababab.8abababababababababab.8abababababababababab.8abababababababababab.8ababababababababab.8.8ababababababababab.8.8ababababababababab.8.8ababababababababababababababab.8ababababababababababababababab.8ababababababababababababababab.8.8ababababababababab.8.8ababababababababab.8.8abababababab#2#5#5#5.8#8#8",
"#y#y#w#w#v#v#w#y#y#A#B........abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab......................................ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#2#5#5#5#8#8#8",
"#C#C#C#C#C#C#E#E#E#E#E........abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab....................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#0#1#1#1#2#2#5",
"#E#E#E#E#E#E#F#F#F#F........ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab....................................abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab#W#Z#Z#Z#0#0#1",
".8.8#E#E#E.8#F#F#F#F.8.8.8..ab.8.8.8ababab.8.8abababab.8abababab.8.8abababab.8abababab.8.8abababab.8abababab.8.8.8ababab.8ababab.8.8.8abababab.8ababab.8.8.8ababab.8.8abababab.8.8ababab.8.8abababab.8.8ababab.8.8ababab.8.8.8ababab...........8.8.8...................8ababab.8.8.8abababab.8ababab.8.8.8ababab.8.8abababab.8.8ababab.8.8abababab.8abababab.8.8abababab.8abababab.8.8.8ababab.8abababab.8abababab.8.8.8ababab.8abababab.8.8.8ababab.8abababab.8.8abababab.8abababab.8.8abababab.8abababab.8.8abababab.8abababab.8.8.8ababab.8ababab.8.8.8abababab.8ababab.8.8.8ababab.8.8.8ababab.8.8ababab.8.8abababab.8abababab.8.8abababab.8ab#W#Z#Z.8.8.8#1",
".8.8#F#F.8.8#F#F#F#F.8...8..#F.8#F.8.8#G.8.8.8#H#H.8.8.8#K#K#K.8.8.8.8#L.8.8.8.......8.8.8.....8.8.8.......8.8.8.8#R#R.8.8#R#R#R.8.8.8.8...8.8.8.......8.8.8.8...8.8.8#R#R#R.8#R.8#O#O.8.8.8#O#O#O.8#O.8#O#O.8.8.8#O#O#O.8#R.8#R#R.8.8.......8.8.8.8.....8.8.........8.8#M#M#N.8.8.8.8...8.8.8.......8.8.8.8.....8...8#U#U.8.8.8#X#X.8.8#X.8#X.8.8.8#X#X#X.8.8.8.8#X.8.8.8#V#V#V.8.8.8.8...8.8.8.......8.8.........8...8.....8.8#X#X#X#X.8#X.8.....8.8.........8...8...8.8.8..#M#M.8.8.8.8#G.8.8.8#D#B#B.8.8.8#v#v.8.8.8#t#r#r.8.8.8.8#l#l.8.8#j#g#g.8.8.8.8.....8.8.......8.8.8.8.....8#S.8#S#S.8.8.8#S#S.8.8#T.8#T.8.8.8#T#T#T.8.8.8.8#V.8.8.8#Z#Z#0.8.8.8.8#0",
"#F.8#F#F#F.8#F#F#F#F.....8..#F.8#F.8.8#G#G.8.8#H#H#J#J.8#K#K#K.8#L#L.8#L#L#L.8.......8.....8.......8.......8..#R.8#R#R#R.8#R#R#R.8#R.8.8.......8.......8...8.8.......8#R#R#R.8#R.8.8#O#O.8.8#O#O#O.8#O#O.8#O#O.8.8#O#O.8.8#R.8#R#R#R#R.......8.8...8...................8#M#M#N.8#N.8.8.......8.......8...8.8...8.....8#U#U#U.8.8#X#X.8#X#X.8#X#X#X.8#X#X#X.8.8#X.8#X#X#V.8#V#V#V.8#V#V.8.......8.......................8....#X.8#X#X#X#X#X#X.8.8.....8.......8.....8.......8..#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8#j#g#g.8...8.8.......8.......8...8.8...8#S#S.8#S#S#S.8.8#S#S.8#T#T.8#T#R#R.8#T#T#T.8#T#T.8#V#V#V.8#Z#Z#0.8#0#0.8#0",
"#G.8#G#G#G.8#H#H#H.8.....8.8#J#J#J.8.8#J#K.8.8#L#L#L#L.8#L#L#L.8#L#L.8#M#M#M.8.......8.....8.......8.......8..#R.8#R#R#R.8#R#S#U.8#U...8.......8.............8.......8#R#R#R.8#R.8.8#R#R.8.8#R#R.8.8#R#R.8#S#S.8.8#S#S.8.8#S#S#R#R#R#R.......8.........................8#R#R#R.8#R...8.......8...........8.8...8.....8#Y#W#W.8.8#T#U.8#W#W.8#Y#Y#Y.8#Y#Y#Y.8#Y#Y.8#Y#Y#Y.8#Y#W#W.8#W#W.8.......8.......................8..#S#S.8#S#S#S.8#R#R.8.8.....8.......8.....8.......8#R#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8#j#g#g.8.....8.......8.............8...8#W#W.8#W#W#W.8.8#U#U.8#T#T.8#T#T#T.8#S#T#T.8#T#T.8#V#W#W.8#0#0#1.8#1#1.8#1",
"#G.8#G#G#G.8#H#H#H.8.....8.8#J#J#J.8.8#J#K.8.8#L#L#L#L.8#L#L#L.8#L#L.8#M#M#M.8.......8.....8.......8.......8..#R.8#R#R#R.8#R#S#U.8#U...8.......8...........8.8.......8#R#R#R.8#R.8.8#R#R.8.8#R#R.8.8#R#R.8#S#S.8.8#S#S.8.8#S#S#R#R#R#R.......8.....8...................8#R#R#R.8.....8.......8...........8.8...8..#V.8#Y#W#W.8.8#T#U.8#W#W.8#Y#Y#Y.8#Y#Y#Y.8#Y#Y.8#Y#Y#Y.8#Y#W#W.8#W...8.......8.......................8..#S#S.8#S#S#S.8#R...8.8.....8.......8.....8.......8#R#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8#j#g#g.8.....8.......8...........8.8...8#W#W.8#W#W#W.8.8#U#U.8#T#T.8#T#T#T.8#S#T#T.8#T#T.8#V#W#W.8#0#0#1.8#1#1.8#1",
"#K.8#K#K#K.8#L#L#L#M.8...8..#M.8#M.8.8#M#M.8.8#N#N#N#N.8#N#N#N.8#O#O.8#O#O#O.8.......8.8...8.......8.......8.8.8.8#U#U#U.8#U#U#W.8#X.8.8.......8.......8...8.8.......8#W#W#W.8#X.8.8#X#X.8.8#X#X#X.8#X.8#X#X#X.8.8#V#V.8.8#V.8#V#V#V#V.......8.8...8...................8#W#W#X.8...8.8.......8.......8...8.8...8..#Y.8#Y#W#W.8.8#W#W.8#Y#Y.8#X#X#X.8#X#X#X.8.8#X.8#X#X#X.8#X#X#X.8.8...8.......8...................8...8#R#R#R.8#O#O#O#N.8...8.......8.......8.....8.......8#O#M#M.8#I#I.8#G#G#D.8#D#B#B.8.8#z.8#v#v#t.8#t#r#r.8.8.8.8#l#l#j.8#j#g#g.8...8.8.......8.......8...8.8...8.8#V.8#V#V#V.8.8#X#X.8#Y#Y.8#Y#W#W.8#U#U#U.8#S#S.8#T#R#R.8#T#T#W.8.8#Z.8#0",
".8.8#K#K.8.8.8.8#L...8.8.8#M#M.8.8.8#M#M.8.8.8.8#N.8.8.8.8.8#N#O.8.8#O#O.8.8.8.8.8...8.8.8.....8.8.8.8.....8.8.8.8#U#U.8.8.8#U#W.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.8#W.8.8.8#X#X.8.8.8.8#X#X.8.8.8#X#X.8.8.8.8#V#V.8.8.8#V#V.8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8#W#X.8.8.8.....8.8.8.8.8...8.8.8.......8.8.8#Y#W.8.8.8.8#W#W.8.8#Y#X.8.8.8.8.8#X.8.8.8#X#X.8.8.8.8#X#X.8.8.8.8...8.8.8.8.....8.8.8.8.....8.8.8#R#R.8.8.8.8#O#N.8.8.8.....8.8.8.8.....8.8.....8.8.8.8.8#M#M.8.8#G#G.8.8.8.8.8#B.8.8.8#v#v.8.8.8.8#r#r.8.8.8.8#l#l.8.8.8#g#g.8.8.8.......8.8.8.8...8.8.8.......8.8.8#V#V.8.8.8.8#X#X.8.8#Y#Y.8.8.8.8.8#U.8.8.8#T#T.8.8.8.8#T#W.8.8.8.8#0",
".8#K#K#K#K#K#L#L#L...8.8..#M#M#M.8#M#M#M#M#N#N#N#N#N#N#N#N#N#N#O.8.8#O#O#O#O...........8.8...................8#U#U#U#U#U#U#U#U#W#W.8#V...................8..............#W#W#X.8#X#X#X#X#X#X#X#X#X#X.8#X#X#X#X#V#V#V#V#V#V.8#V#V#V#V#V...........8....................#W#W#W#X#X.8.....................8.........8.8#Y#Y#W#W#W#W#W#W#W.8.8#Y#X#X#X#X#X#X#X#X#X.8#X#X#X#X#X#X#X#X...8.8.............................8.8#R#R#R#R#R#O#O#O#N.8.8...................8.8........#O#O#M#M#M.8.8#G#G#G#D#D#D#B#B#z#z.8#v#v#v#t#t#t#r#r#o.8#o#l#l#l#j#j#j#g#g...8.....................8.........8.8#V#V#V#V#V#V#X#X#X.8.8#Y#Y#W#W#W#U#U#U#T.8.8#T#T#R#R#T#T#T#W#W.8.8#Z#0",
"#L#L#L#L#L#L#M#M#M........#O#R#R#R#R#R#R#R#R#R#R#R#S#S#U#W#W#W#W#W#W#U#U#U#U................................#V#V#V#V#V#V#V#V#V#V#V#V#X....................................#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#W#W#W#U#U#U#T#T#T#T#T#U#U#U#W..................................#V#V#V#V..................................#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#Y#Y#Y#Y#X#X#X#X#X#X#V#V#V..........................................#O#N#N#N#N#M#M#M#L..................................#M#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j#j#g#g................................#R#R#R#R#R#R#R#R#R#S#S#U#W#W#X#X#V#V#V#Y#W#W#U#T#T#S#S#S#S#T#T#T#R#R#R#T#T#T",
"#L#L#L#L#L#L#M#M#M........#O#R#R#R#R#R#R#R#R#R#R#R#S#S#U#W#W#W#W#W#W#U#U#U#U................................#V#V#V#V#V#V#V#V#V#V#V#V#X....................................#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#W#W#W#U#U#U#T#T#T#T#T#U#U#U....................................#V#V#V#V..................................#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#Y#Y#Y#Y#X#X#X#X#X#X#V#V#V..........................................#O#N#N#N#N#M#M#M#L..................................#M#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j#j#g#g................................#R#R#R#R#R#R#R#R#R#S#S#U#W#W#X#X#V#V#V#Y#W#W#U#T#T#S#S#S#S#T#T#T#R#R#R#T#T#T",
"#O#O#O#O#O#O#R#R........#S#S#U#W#W#W#X#X#X#X#X#X#X#V#V#V#V#V#V#V#V#V#V#V#V..................................#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#W#W..................................#U#U#U#U#U#U#U#U#U#U#U#T#T#T#T#T#T#S#T#T#T#T#R#R#R#R#R#R..................................#Y#Y#Y#Y#W..................................#U#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#U#U#U#U#W#Y#Y#Y#X#X#V..........................................#M#M#L#K#K#J#J#J#J#H#G..................................#J#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j#j#g..................................#L#L#L#L#L#L#M#M#M#N#N#O#R#R#R#R#S#S#W#V#V#V#X#Y#Y#U#U#T#T#S#T#T#R#R#R#T#T#T",
".8.8#O#O#O.8#R#R.....8.8#S#S#U#W.8#W#X#X#X.8.8#X#X#V#V.8#V#V#V#V.8.8#V#V#V.8.8.8.........8.......8.8.8....#Y#Y#Y#Y#Y#Y.8.8.8#Y#Y#Y.8#W#W.....8.8.8.......8.........8.8......#U.8#U#U#U#U.8.8#U#U#T#T.8#T#T#T#S.8.8#T#T#R#R.8#R#R.....8.8.8.......8.......8.8.8......#Y.8#Y#Y#W.8.8.8.........8.......8.8.8.......8.8#T#T#T#T.8.8#T#T#T.8.8#T#T#T#T.8.8#U#U#W.8.8#Y#X#X...8.........8.8.8.....8.8.8.......8.........8.8.8#K#K#J.8#J#J#H#G.8.8.........8.........8.8.........8#N#M#M#M.8.8#G#G#G#D.8#D#B#B#z.8.8#v#v#v#t.8#t#r#r#o.8.8.8#l#l#j.8#j#g...8.8.8.........8.......8.8.8....#L#L.8#L#L#L#M.8.8#N#N#O.8.8#R#R#S#S.8.8#V#V#X.8.8#U#U#T.8.8.8#T#R#R#R.8#T#T",
".8.8#R#R.8.8#R#R.....8...8#U#W.8.8#V#V#V#V.8#X.8#X.8.8.8#W#W#W.8.8.8#W#W#W.8...8.....8.8.8.....8.8.8.8.....8.8#T#T#T#T.8.8.8#U#W.8.8#W#W.....8...8.....8.8.........8...8.....8.8#R#T#T.8.8.8.8#T.8.8.8#T#T#T.8.8.8.8#T.8.8.8#T.....8.8.8.8...8.8.8.......8.8.8.8.....8.8#R#R#R.8.8.8.8...8.8.8.......8.8.8.8...8.8.8#R#R#R.8#R.8#R#R.8.8.8#T#S#S.8#S.8#S#S.8.8.8.8#U.8.8.8.......8.8.8.8...8.8.8.8.....8.8.........8#N.8#M#M.8.8#H#H#G#F.8...8.....8.8.........8...8...8.8.8#N#M#M.8.8.8.8#G.8.8.8#D#B#B.8.8.8#v#v.8.8.8#t#r#r.8.8.8.8#l#l.8.8#j#g...8.8.8.8.....8.8.......8.8.8.8#G.8.8.8#G#G#G.8#G.8#J#J.8.8.8#M#M#O.8#R.8#U#U.8.8.8#W#W#T.8#R.8#T#W.8.8.8#T#T",
"#R.8#R#R#R.8#R#R...8.....8.8#W#X.8#V#V#V.8#X#X.8#X#Y#Y.8#W#W#W#W.8.8#W#W.8.8.............8.....8.8........#S#T#T#T#T#T#S#T.8#U#W#W.8#W#W...8.....8.......8.......8.....8.......8#R#T#T.8#T#T.8#T#T#T.8#T#T#T.8#T#T.8#T#T#T.8.......8.....8.......8.......8.....8..#T#T.8#R#R#R.8.....8.......8...........8.8....#T.8#R#R#R.8#R#R.8#R#R.8.8#T#S.8.8#S#S.8#S.8#T...8.......8.......8.....8...8.....8............#N#N#N#N.8#M#M#K.8#H#H#G.8.....8.8.....8.......8.....8....#H.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8#j#g...8.....8.......8.......8...8.8#G#G#G.8#G#G#G.8#G#H.8#J#K.8.8#M#M.8.8#R#R.8#U#X.8.8#W#W.8.8#R#T#T#W#V#V.8#T#T",
"#X.8#X#X#X.8#X#X...8.....8.8#V#X.8#Y#Y#Y.8#Y#Y.8#Y#W#W.8#W#W#W#U.8.8#U#U.8.8.............8.....8.8........#S#S#S#S#T#T#T#T.8#T#T#T.8#T#T...8.....8.......8.......8.....8.......8....#V.8#W#W.8#W#W#W.8#W#W#W.8#W#W.8#W.....8.......8.....8.......8.......8.....8..#V#V.8#V#V...8.....8.......8...........8.8..#V#V.8#V#V.8.8#V#V.8#T#T.8.8#T#R.8.8#R#R.8...8.....8.......8.......8.....8...8.....8............#R#R#R#R.8#R#R#O.8#N#N#L.8.....8.8.....8.......8.....8....#J.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8#j.....8.....8.......8.............8#F#F#F.8#F#F#F.8#G#G.8#H#H.8.8#K#K.8.8#M#O.8#R#R.8.8#W#W.8.8#V#V#V#Y#Y#Y.8#W#W",
"#X.8#X#X#X.8#X#X...8.....8.8#V#X.8#Y#Y#Y.8#Y#Y.8#Y#W#W.8#W#W#W#U.8.8#U#U.8.8.............8.....8.8........#S#S#S#S#T#T#T#T.8#T#T#T.8#T#T#T.8.....8.......8.......8.....8.......8.......8#W#W.8#W#W#W.8#W#W#W.8#W#W.8.......8.......8.....8.......8.......8.....8..#V#V.8#V#V...8.....8.......8...........8.8..#V#V.8#V#V.8.8#V#V.8#T#T.8.8.....8.8.....8...8.....8.......8.......8.....8...8.....8............#R#R#R#R.8#R#R#O.8#N#N#L.8.....8.8.....8.......8.....8.......8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8#j.....8.....8.......8.............8#F#F#F.8#F#F#F.8#G#G.8#H#H.8.8#K#K.8.8#M#O.8#R#R.8.8#W#W.8.8#V#V#V#Y#Y#Y.8#W#W",
"#Y.8#W#W#W.8#W#W.........8#Y#W#U.8#U#U#U.8#U#U.8#U#T#T.8#T#T#T#T.8.8#T#T.8.8...8.........8.....8.8...8....#T#T#T#T#T#T.8#T.8#T#R#R.8#R#R#R#R.8...8.......8.......8.....8.......8.......8.....8.......8.......8.....8.......8.......8.8...8.......8.......8...8.8#1#1#1.8#1#1...8...8.8.......8.......8...8.8.......8.......8.....8.....8.8.....8.8...8.....8.8...8.......8.......8.8...8...8.8...8........#V#V#V#X.8#X.8#U#U#S.8#R#R#R.......8.......8.......8.....8.......8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8.8#z.8#v#v#t.8#t#r#r.8.8.8.8#l#l#j.8#j.....8...8.8.......8.......8...8.8#F#F#F.8#F#F#F.8#F#F.8#F#F.8.8#G#G#H.8#J#K#L#L#M.8.8#R#R.8.8#R.8#R#R#R#R.8#S#U",
".8.8#W#W.8.8.8.8.....8.8.8#Y#W.8.8.8.8#U#U.8.8#U#U.8.8.8.8.8#T.8.8.8.8#T...8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8#T#T.8.8.8#T#R.8.8.8.8#R#R.8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.....8.8.8.8.8...8.8.8.....8.8.8.8.....8.8.8.8...8.8.8.8.....8.8.8.8#1#1.8.8.8#1...8.8.8.....8.8.8.8.8...8.8.8.....8.8.8.8.....8.8.8.....8.8.8.8.....8.8.8.....8.8.8.....8.8.8.8.....8.8.8.8...8.8.8.8.....8.8.8.8#V#X.8.8.8#U#U.8.8.8.8#R...8.8.8.....8.8.8.8.....8.8.....8.8.8.8.8#M.8.8.8#G#G.8.8.8.8.8#B.8.8.8#v#v.8.8.8.8#r#r.8.8.8.8#l#l.8.8.8.....8.8.8.......8.8.8.8...8.8.8..#F.8.8.8.8.8#F.8.8.8#F#F.8.8.8.8#G#H.8.8.8#L#L.8.8.8.8#R#R.8.8.8#R#R.8.8.8.8#U",
"#T#T#U#U#U#U#U........#U#T#T#S#T#T#R#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T................................#W#W#W#W#W#V#V#V#V#V#V#T#T#T#T#T#T#T..................................................................................................................a#a#a#a#a#a#............................................................................................................................#W#W#W#Y#Y#X#V#V#X#W#W#W#W#U#U....................................#N#N#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j#j..................................#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F#F#G#G#G#H#H#H#J#J#J#J#K#L#L#M#M#M#N#N#N",
"#T#T#U#U#U#U#U........#U#T#T#S#T#T#R#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T................................#W#W#W#W#W#V#V#V#V#V#V#T#T#T#T#T#T#T#V..............................................................................................................a#a#a#a#a#a#a#............................................................................................................................#W#W#W#Y#Y#X#V#V#X#W#W#W#W#U#U....................................#N#N#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j#j................................#C#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F#F#G#G#G#H#H#H#J#J#J#J#K#L#L#M#M#M#N#N#N",
"#T#T#U#U#U#U#U........#U#T#T#S#T#T#R#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T................................#W#W#W#W#W#V#V#V#V#V#V#T#T#T#T#T#T#T#V#V............................................................................................................a#a#a#a#a#a#a#..........................................................................................................................#U#W#W#W#Y#Y#X#V#V#X#W#W#W#W#U#U....................................#N#N#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j#j................................#C#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F#F#G#G#G#H#H#H#J#J#J#J#K#L#L#M#M#M#N#N#N",
"#S#S#T#T#T#T........#R#R#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#V#W#W#Z#0#0#0#0..................................#Z#Z#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W........................................................................................................abababababababaaaa......................................................................................................................#T#T#T#U#U#U#W#W#Y#X#X#V#V#V#V#V#V#V..................................#Q#N#N#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j#j..................................#w#A#A#B#B#C#C#C#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#G",
".8.8#T#T#T.8.........8.8#T#T#T#T.8#T#T#T#T.8.8#T#T#T#T.8#W#W#Z#0.8.8#0.......8.........8.8.........8..#0#Z#Z.8.8.8#W#W#W.8#W#W#W.8.8.8#W#W#W#W.8#W.....8.8.8.......8.8.........8.8.......8.8.........8.........8.8.........8.........8.8.8.......8.......8.8.8abababab.8aa.....8.8.8.......8.8.8.......8.........8.8.........8.8.......8.8.........8.........8.8.........8.........8.8.8.......8#T#T#T.8.8.8#W#W#Y#X.8#V#V#V.8.8.8#V.......8.........8.........8.8....#Q#N.8#N#M#M#M.8.8#G#G#G#D.8#D#B#B#z.8.8#v#v#v#t.8#t#r#r#o.8.8.8#l#l#j.8.......8.8.8.........8.......8.8.8#w#A#A#B.8#C#C#C#E.8.8#E#E#E.8.8#E#E#E#E.8.8#E#E#F.8.8#F#F#F.8.8.8#F#F#F.8.8.8#G",
"#T.8#T#T#T.8........#T#T.8#T#T#T.8#T#T#T.8#T#T.8#T#T#T.8#W#W#W.8#Z#Z.8.......8.......8.....8.......8..#2#2.8#2#2.8#2#2#2.8#2#2#1.8#1.8.8#1#1#1.8#1#1#1.8...8.8.......8.......8...8.8.....8.8.........8.......8.....8.......8.......8.....8.......8..a.ab.8abab.8ababab.8ab.....8...8.8.........8.8.....8.......8.....8.......8.8.....8.....8.......8.......8.8...8.......8.......8.....8..#R#T.8#S#S#S.8#T.8.8#U#W#W.8#Y#X#X.8#X.8.8.......8.........8.......8.....8..#Q#N.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8.......8...8.8.......8.......8...8.8#v#v#w.8#v#v#w.8#y#y.8#y#y.8.8#y#y#y.8#y#A.8#A#B.8.8#C#C.8.8#E.8#E#E.8#E#E.8#E",
"#T.8#T#T#T.8.......8#T#T.8.8#T#T.8#T#T#T.8#T#T.8#T#T#T.8#W#W#W.8#Z#Z.8.......8.......8.....8.......8..#2#2.8#2#2.8#2#2#2.8#2#2#1.8#1#1.8#1#1#1.8#1#1#1.....8.8.......8.......8...8.8.....8.8.........8.......8.....8.......8.......8.....8.......8..a.ab.8abab.8ababab.8ab.....8.....8...8.....8.8.....8.......8.....8.......8.8.....8.....8.......8.......8.....8.......8.......8.....8#T#R#T.8#S#S#S.8#T#T.8#U#W#W.8#Y#X#X.8#X#V.8.......8.........8.......8.....8..#Q#N.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8.......8.....8.......8.......8...8.8#v#v#w.8#v#v#w.8#y#y.8#y#y.8.8#y#y.8.8#y#A.8#A#B.8.8#C#C.8.8#E#E#E#E.8#E#E.8#E",
"#0.8#Z#Z#Z.8.......8#W#W.8.8#V#T.8#T#T#T.8#T#T.8#T#T#T.8#T#T#T.8#V#W.8.......8.......8.....8.......8..#8#8.8#8#8.8#8#8#8.8#8#8a#.8a#a#.8a#a#a#.8a#a#a#a#.....8.......8.......8...8.8.....8.8.........8.......8.....8.......8.......8.....8.......8a.a.ab.8abab.8aaaaaa.8.......8.....8...8.....8.8.....8.......8.....8.......8.8.....8.....8.......8.......8.....8.......8.......8.....8#T#T#T.8#R#T#T.8#T#S.8#T#T#T.8#T#U#U.8#W#Y.8.......8.........8.......8.....8..#Q#N.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8.......8.....8.......8..........#n.8#t#t#t.8#v#v#w.8#v#v.8#v#v.8.8#v#v.8.8#v#v.8#v#v.8.8#w#w.8.8#w#w#w#y.8#A#B.8#C",
"#0.8#Z#Z#Z.8.......8#W#W.8#W#V#T.8#T#T#T.8#T#T.8#T#T#T.8#T#T#T.8#V#W.8.......8.......8.....8.......8..#8#8.8#8#8.8#8#8#8.8#8#8a#.8a#a#.8a#a#a#.8a#a#a#.8a#.8.8.......8.......8...8.8.....8.8.........8.......8.....8.......8.......8.....8..#9#9.8a.a.ab.8abab.8aaaaaa.8.......8.....8...8.....8.8.....8.......8.....8.......8.8.....8.....8.......8.......8.....8.......8.......8#W#V.8#T#T#T.8#R#T#T.8#T#S.8#T#T#T.8#T#U#U.8#W.8.8.......8.........8.......8.....8..#Q#N.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8#z#z.8#v#v#t.8#t#r#r.8#o#o.8#l#l#j.8.......8.....8.......8.......8...8.8#t#t#t.8#v#v#w.8#v#v.8#v#v.8.8#v#v.8.8#v#v.8#v#v.8.8#w#w.8.8#w#w#w#y.8#A#B.8#C",
"#8.8#5#5#5.8........#Z#Z.8#W#W#V.8#V#V#V.8#V#V.8#V#W#W.8#W#W#W.8#Z#0.8.......8.......8.8...8.......8..#9#9.8#9.8.8#9#9#9.8#9#9a..8a..8.8a.a.a#.8a#a#a#.8#8.8.8.......8.......8...8.8.....8.8.........8.......8.....8.......8.......8.8...8..a.a..8#9#9#9.8a..8.8ababab.8.......8...8.8.....8...8.......8.......8.....8.......8.8.....8.....8.......8.......8.8...8.......8..#2#2.8.8#0.8#Z#W#V.8#T#T#T.8#T.8.8#R#T#T.8#S#T#T.8#T.8.8.......8.........8.......8.....8#Q#Q#N.8#N#M#M.8#I#I.8#G#G#D.8#D#B#B.8.8#z.8#v#v#t.8#t#r#r.8.8.8.8#l#l#j.8.......8...8.8.......8.......8...8.8#n#n#p.8#r#r#t.8#t#t.8#t#t.8.8#t#t#t.8#t#v#v#v#v.8.8#w#w.8.8#v.8#v#w.8.8#y.8#y",
".8#8#5#5.8.8.8.8..#0.8.8#W#W#W.8.8.8.8#V#V.8.8#V#V#W.8.8.8.8#W#Z.8.8.....8.8.8.8.......8.8.....8.8.8.8#9#9#9.8.8#9#9#9.8.8.8#9a.a..8.8a.a.a..8.8.8a#a#a#.8#8#8#8.8.8.8.8.......8.......8.8.8.8.....8.8.8.8.....8.8.....8.8.8.8.......8.8a.a..8.8.8.8#9#9a..8.8a.abab.8.8.8.......8.8.......8.8.......8.8.8.8.....8.8.......8.8.8.8.....8.8.....8.8.8.8.8.....8.8.....8.8.8.8#2#2#1.8.8#Z#Z.8.8.8.8#T#T#T.8.8#R#R#T.8.8.8#T#T#T.8.8.....8.8.8.8.8...8.8.8.8.....8.8..#Q#Q.8.8.8.8#M#M.8.8#G#G.8.8.8.8#B#B#z.8.8#v#v.8.8.8.8#r#r#o.8.8#l#l#l.8.8.8.......8.8.......8.8.8.8.....8#l#m#n.8.8.8.8#r#t#t.8.8#t#t.8.8.8.8#t#t#t.8.8#v#v.8.8.8.8#w#w#w.8.8#v#w#w.8.8#y#y",
"a#a##8#8#8........#2#2#2#1#1#1#0#0#0#Z#Z#Z#Z#Z#Z#Z#W#W#W#W#W#W#0#0#1................................aa#8#7#7#6#6#6#6#6#8aaaaaba.a.#9a.a.a#a#a#a#a#a#a#a#a#a##8#5#5#5#5#5..........................................................a.a.a.a.a.a.a.a.abababababababababab........................................................................................a.a.#9#9a.a#a##8#8#2#2#1#1#1#1#1#1#0#Z#Z#Z#Z#W#V#V#T#T#T#T#R#R#R#R....................................#Q#Q#N#N#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j................................#g#k#l#m#m#n#n#p#p#r#r#r#r#r#r#r#p#p#p#p#p#p#p#p#p#p#p#p#p#r#r#r#r#r#r#r#t#v#v#w#w#v",
"a#a##8#8#8#8#5#5#5#2#2#2#1#1#1#0#0#0#Z#Z#Z#Z#Z#Z#Z#W#W#W#W#W#W#0#0#1#5#5#8#8a#a#a.a.abababababaaaaaaaa#8#7#7#6#6#6#6#6#8aaaaaba.a.#9a.a.a#a#a#a#a#a#a#a#a#a##8#5#5#5#5#5#8#8a#................................................a.a.a.a.a.a.a.a.a.a.ababababababababababa.a.a.a.ababaaaa#8#8#7#6#6#6#3#3#Y#Y#Y#V#V#V#U#U#T#R#R#R#R#R#S#S#U#U#Y#4#4#6#7#7aaaaaba.a.a.#9#9a.a#a##8#8#2#2#1#1#1#1#1#1#0#Z#Z#Z#Z#W#V#V#T#T#T#T#R#R#R#R#R#R#R#T#T#T#W#W#Y#Y#V#X#X#W#S#S#R#Q#Q#Q#N#N#N#M#M#M#I#I#G#G#G#D#D#D#B#B#z#z#z#v#v#v#t#t#t#r#r#o#o#o#l#l#l#j................................#g#k#l#m#m#n#n#p#p#r#r#r#r#r#r#r#p#p#p#p#p#p#p#p#p#p#p#p#p#r#r#r#r#r#r#r#t#v#v#w#w#v",
"a#a#a#a#a#a#a#a#a#a#a#a##8#8#8#5#5#5#2#2#2#2#2#2#2#5#5#5#5#5#5#8#8a#a#a#a.a.#9#9a.abababababababababababababaaaaaaaaaaaaabababababa.#9#9a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#9#9#9a.a.a.a.a.a.....a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.abababababababababababaaaa#8#8#7#7#6#6#6#4#3#3#Y#V#V#U#U#T#T#T#T#T#T#T#T#U#U#U#U#U#U#V#V#Y#3#3#4#4#6#6#6#7#8#8aaababababa.a.#9a.a.a##8#8#5#2#2#1#1#0#Z#Z#W#W#W#V#T#T#T#T#R#R#T#S#S#U#W#W#X#X#V#X#X#U#R#R#R#M#M#K#K#H#H#F#F#F#F#E#C#C#C#C#B#B#y#w#w#w#t#t#r#n#n#m#m#k#k#g#b#b#b#d#d#e#e#e#e#e#e#e#e#d#b#b#b#b#k#k#l#l#l#l#l#m#m#m#m#n#n#n#n#n#n#n#n#n#p#p#p#p#p#p#p#r#r#r#r#r#r#t#t#t#t#v#v#v#w#w#w#w#w#w",
"a#a#a#a#a#a#a#a#a#a#a#a##8#8#8#5#5#5#2#2#2#2#2#2#2#5#5#5#5#5#5#8#8a#a#a#a.a.#9#9a.abababababababababababababaaaaaaaaaaaaabababababa.#9#9a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#9#9#9a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.abababababababababababaaaa#8#8#7#7#6#6#6#4#3#3#Y#V#V#U#U#T#T#T#T#T#T#T#T#U#U#U#U#U#U#V#V#Y#3#3#4#4#6#6#6#7#8#8aaababababa.a.#9a.a.a##8#8#5#2#2#1#1#0#Z#Z#W#W#W#V#T#T#T#T#R#R#T#S#S#U#W#W#X#X#V#X#X#U#R#R#R#M#M#K#K#H#H#F#F#F#F#E#C#C#C#C#B#B#y#w#w#w#t#t#r#n#n#m#m#k#k#g#b#b#b#d#d#e#e#e#e#e#e#e#e#d#b#b#b#b#k#k#l#l#l#l#l#m#m#m#m#n#n#n#n#n#n#n#n#n#p#p#p#p#p#p#p#r#r#r#r#r#r#t#t#t#t#v#v#v#w#w#w#w#w#w",
".8a#a#a#a#.8a#a#a#a#.8.8#8#8#8#5.8#5#2#2#2.8.8#2#2#5#5.8#5#5#5#8.8.8a#a#a.a..8#9a.abab.8.8abababab.8abababab.8.8.8aaaaaa.8abababab.8#9#9a.a..8.8.8a.a.a..8a.a.a.a..8.8a.a.a.a..8a.#9#9#9.8.8a.a.a.a..8a.a.a.a..8.8a.a.a.a..8a.a.a.a..8.8.8a.a.a..8a.a.a..8.8.8abababab.8ababab.8.8.8#8#7#7#6.8#6#4#3.8.8.8#V#U#U.8.8#T#T#T#T.8.8#U#U#U.8.8#U#V#V#Y.8.8#4#4#6#6.8#7#8#8.8.8.8ababa.a.#9a.a.a#.8.8.8#2#2.8.8.8#Z#Z#W#W.8#V#T#T.8.8.8#R#T#S#S.8#W#W#X#X.8.8#X#U#R.8.8#M#M#K#K.8#H#F#F#F.8.8#C#C#C#C.8#B#y#w#w.8.8#t#r#n#n.8#m#k#k#g.8.8.8#d#d#e.8#e#e#e.8.8.8#d#b#b#b.8#k#k#l.8.8.8#l#m#m.8.8#n#n#n#n.8.8#n#n#n.8.8#p#p#p#p.8.8#r#r#r.8.8#t#t#t.8.8.8#v#w#w#w.8#w#w",
".8a.#9#9#9.8a.a.a.a.a.a..8a#a##8.8#8#5#5.8#5#5.8#5#8#8.8a#a#a..8#9#9.8a.a.a..8a.a.a..8a.a..8a.a.a..8a.abab.8abab.8ababab.8a.a.#9#9.8#9#9#9#9#9#9.8#9#9#9.8a.a.a..8a.a..8a.a.#9.8#9#9#9.8#9#9.8#9a.a..8a.a.a..8abab.8ababab.8ababab.8abab.8ababab.8ababaa.8aa.8.8#7#7#7.8#7#7#6.8#6.8.8#6#6#4.8#4#3#3.8#Y.8.8#Y#Y#Y.8#V#U#U.8#T#T.8#T#T.8.8#T#U.8.8#V.8#V#V#Y#3.8#4#6.8.8#6.8#7#7#8#8aaabab.8.8#9.8a#a#.8#8.8.8#2#1#0.8#W#V#V.8#T.8.8#S#U#U.8#W#W#Y.8#X.8.8#W.8#S#R.8#N#L#L.8#J#G#F.8#F#F.8#E#E#E.8#C#B#y.8#w#w.8#v#r#r.8#r#p#p.8#n#m.8#l#l#k.8#k#k#k.8#k.8.8#m#m#n.8#p#p#p.8#p.8.8#n.8#n#n.8#n#n.8#p#p.8#p#p.8.8#p#p#p.8#p#p.8#r#t.8.8#w#w.8.8#v.8#v#v#v#v.8#w#w",
".8a.#9#9#9.8a.a.a..8a.a..8.8a##8.8#8#5#5.8#5#5.8#5#8#8.8a#a#a..8#9#9.8a.a.a..8a.a.a..8a.a..8a.a.a..8a.abab.8abab.8ababab.8a.a.#9#9.8#9#9#9.8#9#9.8#9#9#9.8a.a.a..8a.a..8a.a.#9.8#9#9#9.8#9#9.8#9a.a..8a.a.a..8abab.8ababab.8ababab.8abab.8ababab.8ababaa.8aa#8.8#7#7#7.8#7#7#6.8#6#6.8#6#6#4.8#4#3#3#3#Y.8.8#Y#Y#Y.8#V#U#U.8#T#T.8#T#T.8.8#T#U.8.8#V#V.8#V#Y#3.8#4#6.8.8#6#6#7#7#8#8aaabab.8#9#9.8a#a#.8#8#5.8#2#1#0.8#W#V#V.8#T.8.8#S#U#U.8#W#W#Y.8#X.8.8#W.8#S#R.8#N#L#L.8#J#G#F.8#F#F.8#E#E#E.8#C#B#y.8#w#w.8#v#r#r.8#r#p#p.8#n#m.8#l#l#k.8#k#k#k.8#k#k.8#m#m#n.8#p#p#p.8#p.8.8#n.8#n#n.8#n#n.8#p#p.8#p#p.8.8#p#p.8.8#p#p.8#r#t.8.8#w#w.8.8#v#v#v#v#v#v.8#w#w",
".8a.a#a#a#.8a#a#a#.8a#a#.8.8a#a#.8a##8#8.8#8#8.8#8a#a#.8a.a.a..8#9#9.8a.a.a..8ababab.8abab.8ababab.8ababab.8abab.8ababab.8a.a.#9#9.8#9#9#9.8a.a..8a.a.a..8#9#9#9.8#9#9.8a.a.ab.8ababab.8abab.8ababab.8ababab.8abab.8ababa..8a.a.a..8a.ab.8ababab.8#8#8#8.8#8#8.8#7#7#7.8#6#6#6.8#6#6.8#6#6#6.8#6#4#4#4#3.8.8#Y#Y#V.8#U#U.8.8#U#U.8#U#U.8.8#U#V.8.8#V#V.8#V#V#Y.8#3#4.8.8#6#6#6#6#6#6#6#8#8.8abab.8#9#9.8a#a#.8#8#5#2.8#0#Z#Z.8#W#V.8#T#T#T.8#T#T#U.8#Y.8.8#X.8#W#S.8#R#N#N.8#L#J#H.8#G#F.8#F#F#F.8#F#E#E.8#C#C.8#B#A#A.8#y#w#w.8#v#v.8#t#t#t.8#r#r#r.8#r#r.8#r#r#r.8#r#r#t#t#t#t.8#t.8#t#t.8#t#t.8#t#t.8#r#r.8.8#p#p.8.8#p#r.8#r#t.8.8#v#v.8.8#v#v#v#w#w#w.8#v#v",
".8a.a#a#a#.8a#a#a#.8a#a#.8a#a#a#.8a##8#8.8#8#8.8#8a#a#.8a.a.a..8#9#9.8a.a.a..8ababab.8abab.8ababab.8ababab.8abab.8ababab.8a.a.#9#9.8#9#9#9.8a.a..8a.a.a..8#9#9#9.8#9#9.8a.a.ab.8ababab.8abab.8ababab.8ababab.8abab.8ababa..8a.a.a..8a.ab.8ababab.8#8#8#8.8#8#8.8#7#7#7.8#6#6#6.8#6#6.8#6#6#6.8#6#4#4#4#3.8.8#Y#Y#V.8#U#U#U.8#U#U.8#U#U.8.8#U#V.8.8#V#V#V#V#V#Y.8#3#4.8.8#6#6#6#6#6#6#6#8#8.8.8ab.8#9#9.8a#a#.8#8#5#2.8#0#Z#Z.8#W.8.8#T#T#T.8#T#T#U.8#Y.8.8#X.8#W#S.8#R#N#N.8#L#J#H.8#G#F.8#F#F#F.8#F#E#E.8#C#C.8#B#A#A.8#y#w#w.8#v#v.8#t#t#t.8#r#r#r.8#r#r.8#r#r#r.8#r#r#t.8#t.8.8#t.8#t#t.8#t#t.8#t#t.8#r#r.8.8#p#p.8.8#p#r.8#r#t.8.8#v#v.8.8#v#v#v#w#w#w.8#v#v",
".8a#a#a##8.8#8#8#8a#a#a#.8a#a#a#.8a#a#a#.8a#a#.8a#a#a#.8a#a#a#.8a.#9.8a.a.a..8a.a.a..8.8ab.8ababab.8ababab.8ab.8.8ababab.8ababa.a..8a.a.a.a..8a..8a.a.a..8a.a.a..8a.a..8a.a.ab.8ababab.8aaaa.8aaaaaa.8aaaaaa.8a.a..8#9a.a..8a.abab.8.8aa.8aa#8#8.8#7#7#6.8#6.8.8#6#6#6.8#6#6#6.8#6.8.8#6#6#4.8#4#3#3.8#Y.8.8#Y#Y#Y.8#V#V#V.8#V#V.8#V#V.8.8#V#V.8.8#V.8#V#V#V#Y.8#Y#3.8.8#Y.8#Y#Y#V#V#V#4#4.8.8#7.8abab.8a..8.8a.a#a#.8#8#5#5.8#2.8.8#1#0#0.8#T#T#S.8#U.8.8#V.8#U#R.8#R#N#N.8#M#K#J.8#H#G.8#F#F#F.8#F#F#E.8.8#E.8#E#C#C.8#C#B#B.8.8.8.8#y#y#y.8#w#w#w.8#w.8.8#v#v#v.8#v#v#v.8#v.8.8#t.8#t#t.8#t#t.8#t#t.8#t#t.8.8#r#r#r.8#r#t#t#t#t.8.8#v#v.8.8#v.8#v#w#w#w.8#w#w",
".8.8#9#9.8.8.8.8#9a..8.8a.a.a..8.8.8.8a.a..8.8ababab.8.8.8.8abab.8.8abab.8.8.8.8.8abab.8.8abab.8.8.8.8#8#8#8.8.8#8#8#8.8.8.8#8#8.8.8.8.8#8#8.8.8aaabab.8.8.8.8aaaa.8.8#8#8#8.8.8.8.8#8#8.8.8#8#8.8.8.8.8.8#8#8.8.8#8#8.8.8.8.8#6#6#6.8.8#6#6.8.8.8.8#6#6#6.8.8#6#4#3.8.8.8#Y#V.8.8.8#V#V.8.8.8.8.8#U.8.8#U#U#U.8.8.8.8#U#U#U.8.8#V#V.8.8.8.8#Y#Y#Y.8.8#Y#Y.8.8.8.8#4#4#6.8.8#6#6.8.8.8.8#6#7.8.8#8ababa..8.8a#a#a#.8.8.8#2#2.8.8.8#0#W.8.8.8.8.8#S#S.8#Y#Y#V#X.8.8#S#S#R.8.8.8.8#N#N.8.8#H#H.8.8.8.8.8#F#F.8.8#E#E.8.8.8.8#C#C#C.8.8#B#A#A.8.8.8#w#w#v.8.8#v#v#v.8.8.8.8#v.8.8#t#t#r#r.8.8#r#r#r#r.8.8#t#t.8.8.8.8#t#t#t.8.8#r#r.8.8.8.8#r#r#r.8.8#r#t.8.8.8.8#v",
"a.a.#9#9#9#9#9#9#9a.a.a.a.a.a.a.a.a.a.a.a.ababababababababababababababababababababababababababaaaaaaaa#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8aaaaaaababababababaaaaaaaa#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#3#3#3#Y#Y#V#V#V#V#V#V#V#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#V#V#V#V#V#V#Y#Y#Y#Y#Y#Y#Y#Y#3#3#3#4#4#6#6#6#6#6#6#6#6#6#6#7#7#7#8ababa.a.#9a#a#a##8#8#5#2#2#1#1#0#0#W#V#V#T#R#R#S#S#T#Y#Y#V#X#X#U#S#S#R#R#R#R#O#N#N#L#K#H#H#G#G#F#F#F#F#F#F#E#E#E#E#E#E#E#C#C#C#B#B#B#A#A#A#y#y#w#w#v#w#w#v#v#v#v#v#v#v#v#v#v#t#t#r#r#r#r#r#r#r#r#r#r#t#t#t#t#t#t#t#t#t#t#r#r#r#r#r#r#r#r#r#r#r#r#r#t#t#t#v#v#v",
"ababababababaaaaaaaaaaaa#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#6#6#6#6#6#6#6#6#6#4#4#4#4#4#4#4#3#3#Y#Y#Y#V#V#V#V#V#V#V#V#V#V#V#U#U#U#T#T#T#T#T#T#T#S#S#S#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#S#S#S#S#S#S#T#T#U#U#U#V#V#Y#3#3#3#4#4#6#6#6#7#7#8#8aaabababababa.a.a.a.a.a.#9#9a.a#a##8#5#5#2#2#1#1#0#Z#Z#V#T#T#R#R#S#U#U#W#X#X#V#X#X#U#U#S#S#R#O#O#L#J#G#G#G#G#F#F#F#F#F#F#E#E#E#C#C#C#C#B#B#A#y#y#y#w#w#w#v#v#v#v#w#v#v#t#t#t#t#t#t#t#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#p#p#p#p#p#p#n#n#n#n#n#n#n#n#n#n#n#n#n",
"ababababababaaaaaaaaaaaa#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#6#6#6#6#6#6#6#6#6#4#4#4#4#4#4#4#3#3#Y#Y#Y#V#V#V#V#V#V#V#V#V#V#V#U#U#U#T#T#T#T#T#T#T#S#S#S#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#S#S#S#S#S#S#T#T#U#U#U#V#V#Y#3#3#3#4#4#6#6#6#7#7#8#8aaabababababa.a.a.a.a.a.#9#9a.a#a##8#5#5#2#2#1#1#0#Z#Z#V#T#T#R#R#S#U#U#W#X#X#V#X#X#U#U#S#S#R#O#O#L#J#G#G#G#G#F#F#F#F#F#F#E#E#E#C#C#C#C#B#B#A#y#y#y#w#w#w#v#v#v#v#w#v#v#t#t#t#t#t#t#t#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#p#p#p#p#p#p#n#n#n#n#n#n#n#n#n#n#n#n#n",
"ababababababaaaaaaaaaaaa#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#7#7#7#7#7#6#6#6#6#6#6#6#6#6#4#4#4#4#4#4#4#3#3#Y#Y#Y#V#V#V#V#V#V#V#V#V#V#V#U#U#U#T#T#T#T#T#T#T#S#S#S#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#R#S#S#S#S#S#S#T#T#U#U#U#V#V#Y#3#3#3#4#4#6#6#6#7#7#8#8aaabababababa.a.a.a.a.a.#9#9a.a#a##8#5#5#2#2#1#1#0#Z#Z#V#T#T#R#R#S#U#U#W#X#X#V#X#X#U#U#S#S#R#O#O#L#J#G#G#G#G#F#F#F#F#F#F#E#E#E#C#C#C#C#B#B#A#y#y#y#w#w#w#v#v#v#v#w#v#v#t#t#t#t#t#t#t#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#p#p#p#p#p#p#n#n#n#n#n#n#n#n#n#n#n#n#n",
".8#7#7#7.8.8.8.8#7.8.8.8#7#7#7.8.8.8#7#7.8.8.8#7#7#6.8.8.8#6#6.8.8.8#6#6.8.8.8#6#6#6.8.8.8#6#6.8.8.8#6#6#6.8.8.8.8#6#6.8.8#6#6#6.8.8.8.8#6.8.8.8#6#6#6.8.8.8.8#4.8.8.8#4#4#4.8.8.8#4#4.8.8.8#4#4#4.8.8.8#4#4.8.8.8#4#4#4.8.8.8#3#3.8.8#Y#Y#Y.8.8.8.8#U#T.8.8#S#S#R#R.8.8.8#R#R.8.8#R#R#R#R.8.8.8#P#P.8.8#P#P#P#P.8.8.8#P#P.8.8.8#P#R.8.8.8#R#R#R.8.8.8#Y#Y.8.8.8#6#6#6.8.8.8aaaa.8.8ababab.8.8.8.8a.a..8.8.8.8a.a#.8.8#8#5#5.8.8.8.8#Z.8.8.8#V#V#T.8.8.8#T#T.8.8.8#V#V#X.8.8.8#S#R.8.8.8#M#M#K.8.8.8#G#F.8.8.8#F#E.8.8.8.8#C#C.8.8#A#A#y#y.8.8.8#w#w.8.8#w#v#v#v.8.8.8#v#t.8.8#t#t#t#t.8.8.8#t#t.8.8.8#r#r.8.8.8.8#p.8.8.8#m#m#m.8.8.8.8#m.8.8.8#m#m#l.8.8.8.8#l",
".8#7#7#7.8#7.8.8#7#7#7.8#7#7#7.8#7.8.8#7#7.8.8#7#7#6.8#6#6.8#6#6.8.8#6#6#6#6.8#6#6#6.8#6#6.8#6#6#6.8#6#6#6.8#6#6.8#6#6#6.8#6#6#6.8#6.8.8#6#6#6.8#6#6#6.8#4.8.8#4#4#4.8#4#4#4.8#4.8.8#4#4.8.8#4#4#4.8#4#4#4#4#4.8.8#4#4.8.8#3.8#3#3#3#3#Y#Y#Y.8.8#V.8#U#T#T#T#S#S#R#R.8#R.8#R#R#R.8#R#R#R#R#P#P.8.8#P#P.8#P#P#P.8#P#P.8#P#P.8#P#P.8#R#R.8.8#R#R.8.8#U.8#Y#Y#3#4.8#6#6.8.8#8.8aaaaababababab.8.8ab.8a.a..8#9.8.8a.a#a#.8#8#5#5.8#2.8.8#Z#W#W.8#V#V#T.8#T.8.8#T#U.8.8#V#V#X.8#W#W.8#R#R.8.8#M#M.8.8#H.8#G#F#F#F.8#F#E.8.8#E.8#C#C#B#A#A#A#y#y.8#w.8#w#w#v.8#w#v#v#v#v#v.8.8#t#t.8#t#t#t.8#t#t.8#t#t#t.8.8#r#r.8#p#p.8#p#n#n.8#m#m#m.8#m#m.8#m#m#m.8#m#m#l.8#l#l.8#l",
".8#6#6#6.8#6.8.8#6#6#6.8#6#6#6#6#6.8.8#6#6.8.8#6#6.8.8#6#6.8#6#6.8.8#6#6#6#6.8#6#4#3.8#Y#Y.8#Y#Y#Y.8#Y#Y#Y.8#Y#Y.8#Y#Y#3.8#4#4#4.8#4#4.8#4#4#3.8#Y#V#V.8#U.8.8#S#S#S.8#S#S#S.8#T.8.8#V#V.8.8#3#3.8.8#4#4.8#4#3.8.8#Y#Y.8.8#Y#Y#Y#Y#Y#Y#V#V#U.8.8#T.8#S#R#R#R#R#R#R#P#P#P.8#R#R#R.8#R#R#R.8#R#V.8.8#U#U.8#U#U#U.8#U#T.8#T#R.8#R#R.8#V#V.8.8#R#R.8.8#V#V.8#3#6#6.8#7#8.8.8aaaaababababababab.8.8a..8a.a..8a#a#.8#8#8#5.8#5#2#2.8#2.8.8#2#1#1.8#V#V#T.8#T.8.8#T#U.8.8#V#V.8.8#U#U.8#R#R.8.8#N#N.8.8#J#J#H#F#F#F.8#F#F.8.8#E#E#C#C#C#B#A#A#w#w#v#v.8#v#v#v.8#v#v#v#v#t#t.8.8#r#r.8#r#r#p.8#p#p.8#p#p#r.8.8#r#r.8#r#r.8#r#r#r.8#p#p#p.8#m#m.8#l#l#l.8#l#l#l.8#l#k.8#k",
".8#6#6#6.8#6#6.8#6#6#6.8#6#6#6#6#6.8.8#6#6.8.8#6#6.8.8#6#6.8#6#6.8.8#6#6#6#6.8#6#4#3.8#Y#Y.8#Y#Y#Y.8#Y#Y#Y.8#Y#Y.8#Y#Y#3.8#4#4#4.8#4#4.8#4#4#3.8#Y#V#V#V#U#U.8#S#S#S.8#S#S#S.8#T.8.8#V#V.8.8#3#3.8.8#4#4.8#4#3.8.8#Y#Y.8.8#Y#Y#Y#Y#Y#Y#V#V#U.8#U#T#S#S#R#R#R#R#R#R#P#P#P.8#R#R#R.8#R#R#R.8#R#V.8.8#U#U.8#U#U#U.8#U#T.8#T.8.8#R#R.8#V#V.8.8#R#R.8.8#V#V.8#3#6#6.8#7#8.8.8aaaaababababababab.8a.a..8a.a..8a#a#.8#8#8#5.8#5#2#2.8#2#2.8#2#1#1.8#V#V#T.8#T.8.8#T#U.8.8#V#V.8.8#U#U.8#R#R.8.8#N#N.8.8#J#J#H#F#F#F.8#F#F.8.8#E#E#C#C#C#B#A#A#w#w#v#v.8#v#v#v.8#v#v#v.8#t#t.8.8#r#r.8#r#r#p.8#p#p.8#p#p#r.8.8#r#r.8#r#r.8#r#r#r.8#p#p#p.8#m#m.8#l#l#l.8#l#l#l.8#l#k.8#k",
".8#3#3#3.8#3.8.8#6#6#6.8#6#6#6#6#6.8.8#6#6.8.8#6#6.8.8#6#6.8#6#6.8.8#3#3#3#3.8#3#3#3.8#3#3.8#3#Y#Y.8#Y#V#V.8#U#U.8#U#U#U.8#V#V#V.8#V#V.8#V#V#V.8#V#V#V.8#U.8.8#S#S#S.8#S#S#S.8#S.8.8#T#T.8.8#U#U.8.8#V#V.8#V#V.8.8#V#V.8.8#U#U#U#U#U#U#T#T#T.8.8#S.8#R#R#R#R#R#R#R#R#R#P.8#P#P#P.8#P#P#P.8#R#R.8.8#R#R.8#R#R#R.8#R#R.8#P#P.8#P#P.8#R#R.8.8#S#T.8.8#Y#Y#4#4#6#6.8#7aa.8.8ababababa.a.#9a.a..8.8a#.8#8#8.8#8#5.8#2#2#2.8#2#1#1.8#0.8.8#W#V#V.8#R#R#S.8#T.8.8#W#X.8.8#X#X.8.8#U#U.8#R#R.8.8#K#K.8.8#H#H#G#F#F#F.8#F#F.8.8#E#E#C#C#B#A#y#y#w#w#v#w.8#w#w#v.8#v#t#t#t#r#r.8.8#p#p.8#n#n#m.8#m#m.8#m#m#m.8.8#n#n.8#n#n.8#n#m#m.8#k#k#k.8#k#k.8#g#b#b.8#d#d#e.8#e#g.8#g",
".8.8#3#3.8.8.8.8#6.8.8.8.8.8#6.8.8.8#6#6.8.8.8.8#6#6.8.8.8#6#6.8.8.8.8#3.8.8.8.8.8#3.8.8.8#3#3.8.8.8.8#V#V.8.8.8.8#U#U.8.8.8#V#V.8.8.8.8#V.8.8.8.8#V#V.8.8.8.8#S.8.8.8.8.8#S.8.8.8#T#T.8.8.8.8#U#V.8.8.8#V#V.8.8.8.8#V#V.8.8.8#U#U.8.8.8.8#T.8.8.8.8#R#R.8.8.8.8#R#R.8.8.8#P#P.8.8.8.8#P#P.8.8.8#R#R.8.8.8.8#R#R.8.8.8#P#P.8.8.8#R#R.8.8.8.8#T#T.8.8.8#4#4.8.8.8.8aaaa.8.8.8abab.8.8.8.8a..8.8.8.8#8#8.8.8.8.8#2#2.8.8.8#1#1.8.8.8.8#W.8.8.8.8.8#S.8.8.8#U#W.8.8.8.8#X#W.8.8.8#R#R.8.8.8.8#K#J.8.8.8#G#F.8.8.8.8#F#E.8.8.8#C#C.8.8.8.8#w#w.8.8.8#w#w.8.8.8.8#t#t.8.8.8#r#p.8.8.8.8#m#m.8.8.8#m#m.8.8.8.8#n#n.8.8.8#n.8.8.8.8.8#k.8.8.8.8#g.8.8.8.8#d#e.8.8.8.8#g",
".8.8#4#4.8.8.8#4#4.8.8.8.8.8#6.8.8#6#6#6.8.8.8.8#6#6#6.8.8#6#6.8.8.8.8#6.8.8.8.8.8#3#3.8.8#V#V.8.8.8.8#T#T#T.8.8#T#T#T.8.8.8#U#V#V.8.8#V#V#V.8.8.8#T#T.8.8#S#S#S.8.8.8.8.8#S#S.8#S#T#T.8.8.8.8#T#U#U.8.8#V#V.8.8.8.8#V#V#U.8.8#T#T.8.8.8.8#T#T.8.8#T#T#T.8.8.8.8#S#R.8.8#R#R#R.8.8.8.8#P#P.8.8#V#U#T.8.8.8.8#R#R.8.8#P#P#P#P.8.8#R#R.8.8.8.8#U#U#V.8.8#3#3.8.8.8.8aaaaab.8.8a.a..8.8.8.8a##8.8.8#5#2#2#2.8.8#0#0#0.8.8.8#W#W.8.8.8#T#T.8.8.8.8.8#U#U.8#Y#Y#Y.8.8.8.8#X#W#W.8.8#R#R.8.8.8.8#K#J#J.8.8#F#F.8.8.8.8#E#C.8.8.8#B#B.8.8.8.8#w#w.8.8#v#v#v.8.8.8.8#t#t.8.8#r#r#p.8.8.8.8#m#m.8.8#l#l#k.8.8.8.8#k#k.8.8#k#k.8.8.8.8.8#g#b.8.8#e#e.8.8.8.8#g#g#g.8.8#g#g",
"#4#4#4#4#4#4#4#4#4#4#4#4#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#3#3#3#Y#V#V#U#U#U#U#T#T#T#T#T#T#T#T#T#U#U#U#V#V#V#V#V#V#V#V#V#U#T#T#T#S#S#S#S#S#S#S#S#S#S#S#S#S#T#T#T#T#T#T#T#U#U#U#V#V#V#V#V#V#V#V#V#U#U#U#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#S#R#R#R#R#R#R#P#P#P#P#P#P#R#V#V#U#T#T#T#U#U#R#R#P#P#P#P#P#P#P#P#R#R#R#S#S#T#U#U#V#Y#Y#3#3#4#6#6#7aaaaaba.a.a.a.a#a#a#a#a##8#8#8#5#2#2#2#2#1#0#0#0#Z#Z#Z#W#W#V#V#T#T#T#R#R#T#S#S#U#U#W#Y#Y#Y#X#X#V#X#X#W#W#U#U#R#R#R#N#M#K#K#J#J#G#G#F#F#F#F#E#E#E#C#C#C#C#B#B#A#y#y#y#w#w#w#v#v#v#v#w#v#v#t#t#t#r#r#r#r#p#p#p#n#n#m#m#m#m#l#l#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#g#g#b#b#b#e#e#e#e#g#g#g#g#g#g#g#g#g",
"#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#3#Y#Y#V#U#U#T#T#T#T#S#S#S#R#R#R#R#R#R#S#S#S#T#T#T#T#T#T#T#U#U#U#U#U#U#U#U#U#U#U#U#U#T#T#T#T#T#T#T#T#T#U#U#U#U#V#V#V#V#V#V#U#U#U#T#T#T#T#T#T#T#T#T#T#T#T#T#S#S#S#S#S#S#S#S#S#S#R#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#R#R#S#T#T#V#3#3#6#6#6#7#7#8ababab#9#9a.a.a#a##8#5#5#5#2#2#1#0#0#Z#Z#W#V#V#T#T#T#T#R#R#T#T#S#S#T#U#U#W#Y#Y#X#X#V#V#V#X#W#W#U#S#S#S#S#R#R#R#R#R#N#M#K#K#J#J#H#H#F#F#F#F#F#F#E#E#E#C#C#B#B#A#w#w#w#v#v#w#v#v#v#v#t#r#r#p#p#p#n#n#n#n#m#m#m#l#l#k#k#k#k#g#g#b#b#b#b#b#b#b#b#b#b#b#b#b#b#d#d#d#e#e#e#g#g#g#g#g#g#g#g#g#g#e#e#d",
"#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#3#Y#Y#V#U#U#T#T#T#T#S#S#S#R#R#R#R#R#R#S#S#S#T#T#T#T#T#T#T#U#U#U#U#U#U#U#U#U#U#U#U#U#T#T#T#T#T#T#T#T#T#U#U#U#U#V#V#V#V#V#V#U#U#U#T#T#T#T#T#T#T#T#T#T#T#T#T#S#S#S#S#S#S#S#S#S#S#R#R#R#R#R#R#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#P#R#R#R#R#R#S#T#T#V#3#3#6#6#6#7#7#8ababab#9#9a.a.a#a##8#5#5#5#2#2#1#0#0#Z#Z#W#V#V#T#T#T#T#R#R#T#T#S#S#T#U#U#W#Y#Y#X#X#V#V#V#X#W#W#U#S#S#S#S#R#R#R#R#R#N#M#K#K#J#J#H#H#F#F#F#F#F#F#E#E#E#C#C#B#B#A#w#w#w#v#v#w#v#v#v#v#t#r#r#p#p#p#n#n#n#n#m#m#m#l#l#k#k#k#k#g#g#b#b#b#b#b#b#b#b#b#b#b#b#b#b#d#d#d#e#e#e#g#g#g#g#g#g#g#g#g#g#e#e#d",
".8#6#8#8.8.8.8#8#8#7#7.8#6#6#6.8.8.8#6#6#6.8.8#6#6#7#7.8.8#8#8#8.8.8#6#6#6.8.8.8#6#4#4#4.8#V#V#U.8.8.8#S#R#R#R#R#R#R#R.8.8.8#R#R#R.8#T#T#T#T.8.8#U#U#U#U.8#U#U#U#U.8.8#U#U#U#U.8#U#T#T#T.8.8#T#T#T#T.8.8#T#T#T.8.8#T#T#T.8.8.8#T#T#T#T#T#T#S#R.8.8.8#R#R.8.8.8#R#R#R#R.8#R#R#R.8.8.8#R#R#R#R.8#R#R#R.8.8.8#R#R#R.8.8#R#P#P#P.8.8#R#P#P.8.8#S#U#U#Y.8.8#6#6#7aa.8aba.a..8.8.8a#a#a#a##8#5#5#5.8.8.8#0#0#W.8#V#T#T#T.8.8.8#S#S#U.8#Y#Y#X#V.8.8#X#X#X#X.8.8#W#W#W.8.8#S#S#R#R.8.8#O#N#N.8.8#K#K#J#J.8#H#F#F#F.8.8#F#E#E#E.8#C#B#B#y.8.8#w#t#t#r.8#n#n#n.8.8.8#n#n#n#n.8#n#n#m.8.8.8#k#g#g#g.8#b#b#b#b.8.8#d#d#e.8.8#g#g#g#g.8.8#g#g#g.8.8#g#g#g#g.8#g#g#e#d.8.8.8#a",
".8#6#8#8.8.8.8.8#8.8.8.8#6#6#6.8.8.8#6#6.8.8.8#6#6#7.8.8.8#8#8.8.8.8#6#6#6.8.8.8#6#4.8.8.8#V#V.8.8.8.8#S#R.8.8#R#R#R#R.8.8.8#R#R.8.8#T#T#T#T.8.8.8#U#U.8.8#U#U#U#U.8.8.8#U#U.8.8#U#T#T.8.8.8#T#T#T.8.8.8#T#T.8.8.8#T#T#T.8.8.8#T#T.8.8#T#T#S.8.8.8.8#R#R.8.8.8.8#R#R.8.8#R#R#R.8.8.8.8#R.8.8.8#R#R#R.8.8.8.8#R.8.8.8#R#P#P.8.8.8#R#P.8.8.8#S#U#U.8.8.8#6#6.8.8.8aba.a..8.8.8a#a#.8.8#8#5#5.8.8.8.8#0#0.8.8#V#T#T#T.8.8.8#S#S.8.8#Y#Y#X#V.8.8.8#X#X.8.8.8#W#W.8.8.8#S#S#R.8.8.8#O#N.8.8.8#K#K.8.8.8#H#F#F.8.8.8#F#E.8.8.8#C#B#B.8.8.8.8#t#t.8.8#n#n#n.8.8.8.8#n#n.8.8#n#n#m.8.8.8.8#g.8.8.8#b#b#b.8.8.8#d#d.8.8.8#g#g#g.8.8.8#g#g.8.8.8#g#g.8.8.8#g#g#e.8.8.8.8#a",
".8#6#8#8.8aa.8.8#8#7#7.8#6#6#6.8#6.8.8#6.8.8.8#6#6#7.8#7#8.8#8.8.8.8#6#6.8.8#6.8#6#4.8#4.8.8.8.8.8.8.8#S#R.8#R#R#R#R#R.8#R.8#R#R#R.8#T#T#T#T.8#U.8#U#U#U.8#U#U#U.8#U#U.8#U#U.8.8#U#T#T.8.8.8#T#T#T.8#T#T#T#T.8.8.8#T#T.8.8#T.8#T#T.8#T#T#T#S.8.8#R.8#R#R.8#R.8.8#R#R#R.8#R#R#R.8#R.8.8#R#R#R.8#R#R#R.8#R.8.8#R.8#R.8#R#P#P.8#R#R.8#P.8.8.8#S#U.8.8#4.8#6#6.8aa.8aba..8.8a..8a#a#.8a##8#5#5.8.8#2.8#0#0.8#W#V#T#T#T.8#R.8#S#S#U.8#Y#Y#X#V#V#V.8#X#X.8#W.8.8#W.8.8.8#S#S#R.8#R#R.8#N.8.8.8#K#K.8.8.8#H#F#F.8.8#F.8#E.8#E.8#C#B#B.8#v#w.8#t#t#r.8#n#n#n.8#n.8.8#n#n#n.8#n#n#m.8#m.8.8#g.8#g.8#b#b#b.8#b#b.8#d.8.8.8#g#g#g.8#g#g.8#g.8.8.8#g#g.8#g.8#g#g#e.8.8#a.8#a",
".8#6#6#6.8#6#7.8#7#7#7.8#8#8#8#8#8.8.8#7#7.8.8#6#6.8.8#6#6.8#6#4.8.8#4#4.8.8#3#3#Y#V#V.8.D.S.Y.b.b.C.6.U.k.q.R.5.L.8#R#R#R.8#R#R#R.8#S#S#T.8#U#U.8#V#V#V.8#Y#Y#Y.8#Y#Y.8#3#3#3.8#3#3#3#3.8.8#Y#Y.8.8#V#V.8#V#U.8.8#U#U.8.8#T#T#T#T#T#T#T#T#T.8#T#T#T#T#T.8#T#T.8#T#T#T.8#T#T#S.8#S#S.8#S#S#R.8#R#R#R#R#R.8.8#R#R#R.8#R#R.8.8#R#R.8#T#T.8.8#U#V.8.8#4#4.8#6#6#8.8aaab.8.8#9#9a.a.a#a#a##8#8.8#1#1.8#W#W#V#V#T#R#R#S#T#T.8#Y#Y#X.8#V#V#V.8#X#X.8.8#X.8#X.8.8#W#U.8.8#R#R.8.8#R#R.8#O#O.8.8#L#L#J#J.8#G#F#F.8#F#F.8#E#E#E.8#E#C#C.8#y#w.8#v#v#v.8#t#t#t.8#p#p.8#n#n#m.8#m#m#l#l#l#k.8#b#b#b.8#b#b#b.8#d#e.8#g#g.8.8#g#g.8.8#e#d.8#d#a.8.8#a#a#a#a.8#a#a#..8#..9.8.9",
".8#6#6#6.8#6#7.8#7#7#7.8#8#8#8#8#8.8.8#7#7.8.8#6#6.8.8#6#6.8#6#4.8.8#4#4.8.8#3#3#Y#V.8.b.D.S.Y.b.#.z.6.R.l.r.Q.7.8.8#R#R#R.8#R#R#R.8#S#S#T.8#U#U.8#V#V#V.8#Y#Y#Y.8#Y#Y.8#3#3#3.8#3#3#3#3.8.8#Y#Y.8.8#V#V.8#V#U.8.8#U#U.8.8#T#T#T#T#T#T#T#T#T.8#T#T#T#T.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#R#R#R.8#R#R.8.8#R#R.8#T#T.8.8#U#V.8.8#4#4.8#6#6#8.8aaab.8.8#9#9a.a.a#a#a##8#8.8#1#1.8#W#W#V#V#T#R#R#S#T#T.8#Y#Y#X.8#V#V#V.8#X#X.8.8#X.8#X.8.8#W#U.8.8#R#R.8.8#R#R.8#O#O.8.8#L#L#J#J.8#G#F#F.8#F#F.8#E#E#E.8#E#C#C.8#y#w.8#v#v#v.8#t#t#t.8#p#p.8#n#n#m.8#m#m#l#l#l#k.8#b#b#b.8#b#b#b.8#d#e.8#g#g.8.8#g#g.8.8#e#d.8#d#a.8.8#a#a#a#a.8#a#a#..8#..9.8.9",
".8#6#6#6.8#6.8.8#6#6#6.8#7#7#7.8#7.8.8#6#6.8.8#6#6#4.8#3#Y#Y#V#V.8.8#V#V.8.8#U.8#U.8.D.e.E.R.0.b.a.t.W.M.p.t.M.8.c.8#P.8#P.8#P#R#R.8#R#R#R#R#T#T.8#Y#Y#3.8#4#6#6.8#6#6.8#6#6#6.8#6#6#6#6.8.8#6#6#4.8#3.8#Y#Y#V.8.8#V#V.8.8#V.8#V#V#V#V#U#U#U.8.8.8.8.k.c.k.j.j.a.q.A.6.U.U.5.5.o.f.a.j.b.b.B.N.5.4.O.b.a.g.b.p.N.X.R.Q.X.W.G.u.o.c.b.g.a.c.t.K.4.3.U.U.5.U.t.c.e.8.8.8.8a..8#9#9a.a.a##5#5.8.8#Z.8#T#T#T#T#S#U#U#W.8#Y.8#V#V#V.8#V#V#V.8#X#W.8#W#U.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#H#G#F.8.8#F.8#E#E#E.8#C#B#B.8#w.8.8#v#v#w.8#v#v#v.8#r.8.8#n#n#l.8#k#k#b.8#b.8.8#e#e#e.8#g#g#g.8#g#g.8#e#d.8.8#a#a#a.8#a#..9.9.9.8.8#a#a#a#a.8#a#a#b.8.8#c.8#e",
".8.8#6#6.8.8.8.8#6.8.8.8.8.8#7.8.8.8#6#6.8.8.8.8#6#4.8.8.8#Y#V.8.8.8.8#V#V.8.8.8#U.8.z.c.E.R.0.c.b.t.P.K.q.w.K.6.e.8#P.8.8.8#P#R.8.8.8.8#R#R.8.8.8#Y#Y.8.8.8.8#6#6.8.8.8#6#6.8.8.8.8#6.8.8.8.8#6#4.8.8.8#Y#Y.8.8.8.8#V#V.8.8.8#V#V.8.8.8.8#U.8.8.6.P.k.c.j.k.j.b.r.z.6.U.U.5.5.q.i.a.j.b.b.B.M.6.5.N.b.a.g.c.p.N.X.R.Q.X.W.G.u.o.c.b.g.a.c.u.J.5.5.X.X.5.R.t.d.c.k.p.8.8.8.8#9#9.8.8.8.8#5.8.8.8.8#T#T.8.8.8.8#U#W.8.8.8#V#V.8.8.8.8#V#X.8.8.8.8.8.8.j.j.j.b.l.H.4.V.U.2.6.C.i.a.j.g.f.u.8.3.S.4.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#v#v.8.8.8.8#n#n.8.8.8.8#b.8.8.8.8#e.8.8.8.8.8#g.8.8.8#e#e.8.8.8.8#a#a.8.8.8.9.9.8.8.8.8#a.8.8.8.8#a#b.8.8.8.8#e",
".8.8#6#6.8.8.8#6#6.8.8.8.8.8#6.8.8.8#6#6.8.8.8.8#6#4#4.8.8#Y#Y.8.8.8.8#T#T.8.8.8.8.r.x.c.F.Q.3.c.c.r.M.I.r.x.8.4.c.8#R.8.8.8#R#R.8.8.8.8#T#T.8.8#V#Y#Y.8.8.8.8#6#6.8.8#6#6#6.8.8.8.8#6.8.8.8.8#6#6#6.8.8#6#6.8.8.8.8#3#3.8.8.8#4#4.8.8.8.8#6#6.8.3.N.k.c.k.k.g.d.t.B.7.U.U.5.4.q.k.b.g.c.b.A.K.6.6.L.b.b.d.e.p.N.Z.R.Q.V.Y.H.u.o.d.#.b.a.c.t.G.6.6.2.2.8.Q.u.f.b.m.o.x.Q.8.8a.a..8.8.8.8#5#1.8.8.8#T#T.8.8.8.8#U#Y.8.8.8#X#X.8.8.8.8#S#R.8.8.8.3.q.e.j.j.j.b.l.H.4.V.U.2.6.C.i.a.j.g.f.u.8.3.S.4.t.b.k.j.c.u.6.Q.T.X.6.F.x.q.i.e.a.g.b.e.w.8.8.8#w#w.8.8.8#n#m#m.8.8.8.8#b.8.8.8#e#g.8.8.8.8.8#g#d.8.8#a#a.8.8.8.8#a#.#..8.8.9.9.8.8.8.8#e.8.8.8.8#d#d#d.8.8.8#d",
"#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#4#4#3#Y#Y#Y#V#V#U#T#T#T#T#T.8.b.p.t.c.F.Q.6.c.c.o.E.F.t.8.d.5.c.8#R#R#R#R#R#R#R#S#T#T#T#T#U#U#V#Y#Y#Y#3#3#4#6#6#6#6#6#6#6#7#7#7#7#6#6#6#6#6#6#6#6#6#6#6#6#4#4#4#3#3#3#3#3#3#4#4#4#4#6#6#6.I.P.P.G.k.c.h.h.#.c.t.E.7.U.U.5.6.u.m.c.#.e.b.w.G.3.6.G.b.c.a.c.q.N.2.Q.Q.V.Y.G.u.o.d.a.a.a.c.q.D.R.6.6.6.W.N.u.k.g.q.t.A.N.6.6a.a.a#a#a##5#5#1#0#0#W#T#T#R#R#S#U#U#Y#X#X#V#X#X#W#W#U#U#S#R.6.6.5.Y.q.e.j.j.j.c.m.H.4.V.U.2.6.C.k.a.j.d.f.t.3.5.V.5.s.b.k.j.c.u.7.R.T.X.6.F.x.q.i.e.a.g.b.e.v.Y.2.Q.T.Q.8.8#r#n#m#m#k#k#g#g#b#b#b#d#e#g#g#g#g#g#g#g#d#d#d#a#a#a#a#a#a#a#.#.#..9.9.9#a#b#b#e#e#e#e#c#d#d#d#d#d#d#d#d",
"#6#6#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#4#4#3#V#V#U#U#U#U#U#U#U#U.8.G.c.n.q.b.F.R.8.d.c.l.B.D.w.u.d.5.c.8#P#R#R#R#R#S#S#T#U#U#U#U#V#V#Y#3#3#4#6#6#6#8#8aaaaababababababaa#8#8#8#8#7#7#7#7#7#7#7#7#6#6#6#6#6#4#4#4#6#6#6#6#6#6#6#7.G.N.N.H.k.b.g.g.a.b.t.F.7.U.U.5.6.t.n.c.a.e.b.v.F.Y.0.G.b.c.a.c.q.N.2.Q.Q.U.Y.G.u.o.d.a.a.a.c.q.B.Q.8.6.6.U.N.u.l.k.q.u.z.N.7.6.8a.a.a.a##5#5#0#W#W#T#R#R#T#T#T#U#U#Y#X#X#V#X#X#U#U#R#R#R.8.0.6.6.W.o.e.j.j.k.c.n.G.4.V.U.2.6.D.k.a.h.b.f.t.0.6.X.7.s.b.j.j.d.u.7.R.T.X.6.F.x.q.i.c.a.g.b.e.t.W.4.S.Q.Q.6.8#v#r#n#n#k#k#b#b#d#d#d#e#g#g#g#g#g#e#e#a#a#a#a#a#a#a#a#a#a#a#.#..9.9#####b#c#c#e#e#d#d#c.9.9.9.9.9.9.9#b",
"#6#6#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#6#6#6#6#6#6#6#4#4#3#V#V#U#U#U#U#U#U#U#U.1.G.c.l.p.b.F.R.8.d.c.k.w.B.8.u.d.5.b.8#P#R#R#R#R#S#S#T#U#U#U#U#V#V#Y#3#3#4#6#6#6#8#8aaaaababababababaa#8#8#8#8#7#7#7#7#7#7#7#7#6#6#6#6#6#4#4#4#6#6#6#6#6#6#6#7.F.K.K.F.i.b.g.g.a.b.w.G.6.U.U.4.6.t.p.b.b.c.b.t.D.R.R.E.b.d.a.c.q.N.3.Q.Q.U.Y.G.u.o.d.b.a.a.c.p.A.N.Y.6.6.Q.L.t.m.l.t.t.B.N.0.6.8a.a.a.a##5#5#0#W#W#T#R#R#T#T#T#U#U#Y#X#X#V#X#X#U#U#R#R.8.B.0.6.6.W.o.e.j.j.k.c.n.G.4.V.U.2.6.D.k.a.h.b.f.t.0.6.X.7.s.b.j.j.d.u.7.R.T.X.6.F.x.q.i.c.a.g.b.e.t.W.4.S.Q.Q.6.N#v#r#n#n#k#k#b#b#d#d#d#e#g#g#g#g#g#e#e#a#a#a#a#a#a#a#a#a#a#a#.#..9.9#####b#c#c#e#e#d#d#c.9.9.9.9.9.9.9#b",
".8aaaaaa.8.8.8aaaaabab.8ababab.8.8.8aaaaaa.8.8#8#8#7#7.8.8#6#6#4.8.8#Y#Y.8.6.Z.M.f.g.k.c.G.Q.6.e.b.c.q.M.c.u.b.7.b.8#V.8.8.8#3#4#4.8#6#6#6#6.8.8#7#8#8#8.8aaababab.8.8a.a.a.a..8.8a.a.a..8.8a.a.abab.8.8aaaaaa.8.8aaaaaa.8.8.8aaaaaaaaaaaa.8.A.F.F.A.g.b.a.a.d.e.A.G.6.U.U.4.6.x.q.d.e.c.b.t.x.K.K.z.b.c.c.b.r.N.4.R.R.S.0.G.u.o.e.c.b.a.c.n.t.G.P.W.W.M.I.t.o.q.v.x.C.K.R.W.8#1#1#1#0#W#W#V.8.8.8#S#S#U.8#Y#V#V#V.8.8.8#U#U#R.8#R#R.p.A.W.5.6.R.p.e.k.k.k.e.p.G.4.V.U.1.6.E.k.c.d.#.f.r.U.6.4.3.q.b.j.g.e.u.6.R.T.X.7.G.x.q.k.c.a.d.#.d.t.Q.6.X.U.V.0.M.n.c#n#n#l.8#k#k#b#b.8#d#g#g#g.8.8#g#g#e#a.8.8#a#a#a.8.8#.#..9.9.8.8#a#a#c.8.8#c#c#d.8.8.8#c.9.9.9.8.9.9",
".8aaaaaa.8.8.8.8aa.8.8.8ababab.8.8.8aaaa.8.8.8#8#8#7.8.8.8#6#6.8.8.8#Y#Y.N.6.Z.N.g.e.i.d.G.Q.6.e.c.b.p.L.c.u.b.8.c.8#V.8.8.8#3#4.8.8#6#6#6#6.8.8.8#8#8.8.8aaababab.8.8.8a.a..8.8.8a.a..8.8.8a.a.ab.8.8.8aaaa.8.8.8aaaaaa.8.8.8aaaa.8.8aaaa.8.x.D.D.x.f.b.a.a.e.f.z.I.6.U.U.3.6.y.q.e.c.c.b.s.w.I.J.y.b.c.d.b.s.N.4.R.R.S.0.G.u.o.e.c.c.a.c.m.t.H.N.R.R.K.I.t.q.q.w.y.C.K.Q.R.R.8.8.8#0#W#W.8.8.8.8#S#S.8..#Y#V#V#V.8.8.8#U#U.8.8#R#R.p.A.W.5.6.R.p.e.k.k.k.e.p.G.4.V.U.1.6.E.k.c.d.#.f.r.U.6.4.3.q.b.j.g.e.u.6.R.T.X.7.G.x.q.k.c.a.d.#.d.t.Q.6.X.U.V.0.M.n.c.8#n.8.8#k#k#b.8.8#d#g#g#g.8.8.8#g#e.8.8.8#a#a.8.8.8.8#..9.8.8.8#a#a.8.8.8#c#c#d.8.8.8#c.9.8.8.8.9.9",
".8ababab.8ab.8.8aba.a..8#9#9#9#9#9.8.8#9#9.8.8a.a..8.8aa#8.8#7#7.8.8#7.8.R.7.X.W.k.b.b.f.H.Q.5.f.e.8.f.K.c.u.#.3.e.8#7#8aa.8aaabab.8a.a.a..8#9#9.8#9#9#9.8a.a.a#.8a#a#.8a#a#.8a#.8.8a#a#.8.8a#a#.8.8a#a#.8a#a#.8.8#9#9.8.8a.a.#9#9#9#9a.a..8.u.w.w.u.e.b.b.b.c.k.E.K.6.U.U.3.7.B.u.k.b.b.c.o.u.D.D.t.b.c.c.c.u.N.5.S.R.S.3.I.u.o.e.e.e.a.e.k.r.B.G.L.L.G.G.v.u.v.C.C.F.J.K.M.K.I#T#T#R#S#S.8.8#W.8#X#X#V#V#V#X#X#W#U#U.8#R#R#R.8#O.8.p.y.R.6.5.P.p.e.j.j.j.f.p.I.6.V.U.1.6.F.l.d.b.a.f.r.R.4.5.Y.q.b.j.g.e.u.6.R.T.X.7.G.y.q.k.c.a.d.#.c.u.P.6.1.X.X.Y.L.o.b.c.c.8.8#l#l#k#g.8#b#d#e.8#g#g.8#g#g#g.8.8#d#d.8#a#a.8#..8.8###b.8#b#c.8.8#e#e.8.8#c#c#c#d#d#d.8#d#c",
".8ababab.8abab.8aba.a..8#9#9#9#9#9.8.8#9#9.8.8a.a..8.8aa#8.8#7#7.8.8.8.e.W.6.X.Y.k.c.c.g.H.T.5.f.f.U.g.J.c.u.#.0.f.8#7#8aa.8aaabab.8a.a.a..8#9#9.8#9#9#9.8a.a.a#.8a#a#.8a#a#.8a#.8.8a#a#.8.8a#a#.8.8a#a#.8a#a#.8.8#9#9.8.8a.a.#9#9#9#9a.a..o.t.v.t.t.e.b.c.c.c.l.F.L.6.U.U.2.7.C.t.k.b.b.c.p.t.B.B.t.b.c.c.d.u.N.5.S.R.R.6.J.u.o.e.c.c.a.e.k.q.z.H.J.K.G.F.v.u.w.E.E.F.I.K.K.I.G#T#T#R#S#S.8#W#W.8#X#X#V#V#V#X#X#W#U#U.8#R#R#R.8#O.8.o.x.Q.8.6.N.p.e.k.j.j.g.p.J.6.V.U.1.7.F.m.e.#.a.f.q.Q.5.6.Y.q.b.h.g.e.t.6.S.T.V.6.G.y.q.k.c.a.b.a.c.u.N.6.3.Z.1.Y.L.p.b.c.e.o.8#l#l#k#g.8#b#d#e.8#g#g.8#g#g#g.8.8#d#d.8#a#a.8#..8.8###b.8#b#c.8.8#e#e.8.8#c#c#c#d#d#d.8#d#c",
".8ababab.8abab.8aba.a..8#9#9#9#9#9.8.8#9#9.8.8a.a..8.8aa#8.8#7#7.8.8.c.g.3.6.X.6.l.c.e.i.G.T.4.f.8.U.g.J.c.u.#.0.f.8#7#8aa.8aaabab.8a.a.a..8#9#9.8#9#9#9.8a.a.a#.8a#a#.8a#a#.8a#.8.8a#a#.8.8a#a#.8.8a#a#.8a#a#.8.8#9#9.8.8a.a.#9#9#9#9a.a..l.q.u.u.q.e.c.e.e.b.m.G.N.6.U.U.2.7.F.v.l.b.b.c.p.q.x.y.t.b.c.c.e.u.N.6.S.R.R.6.J.u.o.e.c.c.a.d.i.o.w.E.H.G.E.E.w.t.z.G.F.F.G.G.G.F.F.8#T#R#S#S.8#W#W.8#X#X#V#V#V#X#X#W#U#U.8#R#R#R.8#O.8.o.x.Q.8.6.N.p.e.k.j.j.g.p.J.6.V.U.1.7.F.m.e.#.a.f.q.Q.5.6.Y.q.b.h.g.e.t.6.S.T.V.6.G.y.q.k.c.a.b.a.c.u.N.6.3.Z.1.Y.L.p.b.c.e.o.t.8#l#k#g.8#b#d#e.8#g#g.8#g#g#g.8.8#d#d.8#a#a.8#..8.8###b.8#b#c.8.8#e#e.8.8#c#c#c#d#d#d.8#d#c",
".8a.a.a..8a..8.8a#a#a#.8a#a#a#.8a#.8.8a#a#.8.8a#a#a#.8a#a.a.a.#9.8.j.c.k.5.5.V.5.n.b.a.k.G.T.6.8.b.U.i.G.b.u.a.Y.k.8a#.8a#.8a#a#a#.8a#a#a#a#a#a#.8a#a#a#.8#8#8#8.8#8#8.8#2#2.8#1.8.8#0#0.8.8#0#0#0.8#0.8#0#0#1.8.8#2#2.8.8#2.8#2#2#2#2#2#2.k.m.p.p.o.c.c.c.c.c.p.I.P.5.U.U.1.6.G.A.p.e.c.c.l.p.t.u.o.b.b.b.i.t.N.6.U.R.Q.8.K.u.q.e.c.c.a.c.e.m.u.y.B.B.z.B.w.y.H.K.I.H.H.D.C.A.x.t.8#W#Y#Y.8.8#V.8#X#X#U#U#S#R#R#R.8#R.8#M#M#L.8#K.8.n.w.O.3.8.N.p.e.k.k.j.i.o.J.6.V.U.1.7.G.n.c.a.a.e.q.O.7.6.U.q.b.h.d.f.t.6.S.T.V.6.H.y.q.k.c.a.b.a.c.t.N.5.5.2.3.U.K.p.c.b.f.q.t.Q.6#g#g.8#b#b#b.8#d#d.8#e#g#g.8.8#e#e.8#a#a.8#a#a.8#..9.9.9##.8.8#a#a.8.8#b.8#b#c#e#e.8#e#c",
".8.8a.a..8.8.8.8a#.8.8.8.8.8a#.8.8.8a#a#.8.8.8.8a#a#.8.8.8a.a..8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.P.c.U.k.G.b.u.a.W.k.8a#.8.8.8a#a#.8.8.8.8a#a#.8.8.8a#a#.8.8.8.8#8#8.8.8.8#2#2.8.8.8#0#0.8.8.8.8#0#0.8.8.8#0#0.8.8.8.8#2#2.8.8.8#2#2.8.8.8.8.g.l.p.o.m.c.c.c.c.d.q.J.Q.5.U.U.1.6.G.z.p.e.c.d.l.n.r.s.p.b.b.b.i.t.N.7.U.R.Q.8.K.u.q.e.c.c.a.c.d.l.s.w.A.z.y.B.x.A.G.L.K.G.G.B.B.w.w.u.8.8.8#Y.8.8.8.8#X#X.8.8.8.8#R#R.8.8.8#M#M.8.8.8.8.n.v.N.Y.3.L.p.e.j.j.h.k.q.K.6.V.U.1.7.G.o.c.a.a.e.q.N.6.4.R.q.b.g.b.f.t.6.S.Q.V.6.H.y.q.k.c.b.#.a.c.s.L.5.6.4.5.R.K.p.d.c.i.q.t.P.3.8.8.8.8.8#b#b.8.8.8#e#g.8.8.8.8#e.8.8.8.8#a#a.8.8.8.9.9.8.8.8.8#a#a.8.8.8#b#c.8.8.8.8#c",
"#5#5#2#2#2#2#2#2#2#5#5#5#5#5#5#5#5#5#2#2#2#2#2#2#2#1#1#1#1#1#1#1.5.3.1.1.3.3.4.4.3.P.G.y.q.l.e.N.c.U.k.G.b.u.a.U.l.8#0#0#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#0#0#0#0#0#0#0#0#Z#Z#W#V#V#T#T#T#R#R#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#R.8.c.f.k.k.i.b.d.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.6.V.Q.Q.7.K.u.q.e.b.b.a.b.b.g.p.t.t.t.t.y.y.E.O.R.N.I.F.w.t.t.r.q.o#W#X#X#V#X#X#W#U#U#R#R#R#R#R#O#N#N#M#L#L#J#J#H.8.m.t.L.U.Y.K.o.e.j.j.g.k.q.K.6.V.U.1.7.H.p.c.b.b.e.q.M.0.5.P.o.b.g.#.g.t.6.S.Q.V.6.H.y.q.k.c.b.#.a.c.r.K.7.7.5.6.R.K.p.e.d.k.r.t.O.Y.5.5.8#b#b#b#b#b#b#d#d#d#e#e#g#g#g#g#d#d#d#d#a#a#a#a#a#a#..9.9.9.9.9.9.9.9.9.9#####b#b#e",
"#5#5#2#2#2#2#2#2#2#5#5#5#5#5#5#5#5#5#2#2#2#2#2#2#2#1#1#1#1#1#1#1.6.5.3.3.5.5.5.5.Y.O.H.x.q.l.e.M.d.U.k.F.b.u.a.R.m.8#0#0#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#0#0#0#0#0#0#0#0#Z#Z#W#V#V#T#T#T#R#R#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#R.8.b.c.e.e.8.8.8.Z.6.5.U.H.H.s.k.k.c.c.g.g.j.k.k.j.g.a.c.c.k.o.u.C.M.3.3.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.u.q.o.p.p.8#X#X#V#X#X#W#U#U#R#R#R#R#R#O#N#N#M#L#L#J#J#H.8.l.t.K.R.U.I.n.e.j.j.g.k.r.K.6.V.U.1.7.G.p.c.b.b.e.q.K.Y.7.O.p.b.g.#.g.t.6.S.Q.V.6.H.y.q.k.c.b.a.a.b.q.J.6.6.6.7.Q.J.o.f.e.k.s.v.O.Y.6.6.6#b#b#b#b#b#b#d#d#d#e#e#g#g#g#g#d#d#d#d#a#a#a#a#a#a#..9.9.9.9.9.9.9.9.9.9#####b#b#e",
"#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#Z#Z#W#V#V#V#V#T#T#T#R#R#R#T.6.6.5.5.6.6.7.7.W.N.G.w.o.l.e.M.d.U.k.F.b.u.a.R.m.8#U#U#U#U#U#U#U#U#U#U#U#U#T#T#T#S#S#S#S#S#S#S#S#S#S#T#U#U#W#W#W#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.8.b.b.8.8.Z.X.X.2.6.7.R.G.G.s.k.k.c.c.g.g.j.j.j.j.g.b.c.d.k.p.u.C.M.0.0.2.2.X.U.R.Q.T.T.R.Q.S.X.2.6.5.0.0.N.N.A.A.x.x.t.u.q.o.m.i.8.8.p.o.o.8#W#W#U#S#S#R#R#R#R#R#O#N#N#M#L#L#K#J#J#H#H#G.8.l.t.K.R.U.I.n.e.j.j.g.k.r.K.6.V.U.1.7.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.q.k.c.b.a.a.b.q.J.6.6.6.7.Q.J.o.f.e.k.s.v.O.Y.6.6.6.8.8#g#g#g#g#g#g#g#g#g#g#g#g#e#d#d#d#d#a#a#a#a#a#a#.#.#..9.9.9.9###a#a#c#c#c#e#e#e",
"#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#Z#Z#W#V#V#V#V#T#T#T#R#R#R#T.6.7.6.6.7.7.6.6.U.M.F.w.o.k.e.J.d.U.l.D.b.u.a.P.p.8#U#U#U#U#U#U#U#U#U#U#U#U#T#T#T#S#S#S#S#S#S#S#S#S#S#T#U#U#W#W#W#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.8.8.7.7.5.3.1.2.4.6.8.Q.F.F.r.k.k.d.d.g.g.h.j.j.h.d.b.c.d.k.p.u.C.N.0.0.2.2.X.U.R.Q.T.T.R.Q.S.X.2.7.5.0.0.N.N.z.z.x.x.v.u.q.o.n.k.g.c.b.c.8.l.8#W#U#S#S#R#R#R#R#R#O#N#N#M#L#L#K#J#J#H#H#G.8.l.t.I.P.R.G.n.e.h.h.d.l.s.L.8.8.U.F.F.s.s.n.f.c.c.c.d.c.d.c.b.d.i.i.n.n.o.u.u.D.D.R.R.Y.5.6.3.X.S.Q.R.Q.Q.R.Q.Q.U.U.4.4.6.6.6.P.G.C.v.8.8.8.8.8#g#g#g#g#g#g#g#g#g#g#g#e#d#d#d#d#a#a#a#a#a#a#.#.#..9.9.9.9###a#a#c#c#c#e#e#e",
".8#Z#W#W#W.8.8#V#V#V#V.8#T#T#T.8.8#T#R#R#T.8.8#T#T#U#U.8.8#Y#X#X.6.7.6.6.7.7.6.6.U.M.F.w.o.k.e.J.d.U.l.D.b.u.a.P.p.8#R.8.8.8#R#S#S.8#U#U#U#U.8.8#W#X#X#X.8#V#V#V#V.8.8#V#V#V#X.8#X#W#W#W.8.8#U#U#S#S.8#S#S#S#S.8.8#S#S#S#S.8#S#S#S#S.8.8.c.Y.7.7.5.3.1.2.4.6.8.Q.F.F.r.k.k.d.d.g.g.h.j.j.h.d.b.c.d.k.p.u.C.N.0.0.2.2.X.U.R.Q.T.T.R.Q.S.X.2.7.5.0.0.N.N.z.z.x.x.v.u.q.o.n.k.g.c.b.c.d.8.q#N#N.8.8.8#L#L#L.8#L#L#L#K.8.8#J#H#H#G.8.8.8.l.u.G.N.P.H.m.e.g.g.b.l.8.8.3.U.U.F.F.s.s.n.f.c.c.c.d.c.d.c.b.d.i.i.n.n.o.u.u.D.D.R.R.Y.5.6.3.X.S.Q.R.Q.Q.R.Q.Q.U.U.4.4.6.6.6.P.G.C.v.q.n.l.f.8.8.8.8#g#g#g#g.8.8#g#g#g.8.8#d#d#a#a.8.9.9.9.9.8.8.9.9####.8#b#b#e#e.8.8#c#d",
".8#Z#W#W.8.8.8.8#V.8.8.8#T#T#T.8.8.8#R#R.8.8.8#T#T#U.8.8.8#Y#X.8.5.6.6.6.6.6.0.0.R.K.F.w.p.k.e.G.e.U.m.C.b.u.b.N.o.8#R.8.8.8#R#S.8.8#U#U#U#U.8.8.8#X#X.8.8#V#V#V#V.8.8.8#V#V.8.8#X#W#W.8.8.8.8#U.8.8.8#S#S#S.8.8.8#S#S.8.8.8#S#S#S.8.8.8.b.U.8.6.6.5.3.4.6.5.3.O.F.F.q.k.k.d.d.d.d.g.j.j.g.b.b.c.e.k.p.u.C.N.0.0.3.3.X.V.R.R.Q.T.R.Q.S.X.2.7.5.0.0.N.N.z.z.x.x.v.u.q.o.n.k.g.c.b.c.e.a.8#N.8.8.8.8#L#L.8..#L#L#L#K.8.8.8#H#H.8.8.8.8.l.u.G.N.P.H.m.e.g.g.b.8.8.5.0.U.U.F.F.t.t.n.g.c.c.c.c.e.c.c.b.e.k.k.o.o.q.u.u.D.D.R.R.Y.6.6.5.Z.U.S.R.Q.Q.R.S.S.X.X.5.5.7.5.0.O.G.B.t.q.n.l.g.b.b.8.8.8#g#g.8.8.8#g#g.8.8.8.8#d.8.8.8.9.9.9.8.8.8.9.9.8.8.8#b#b#e.8.8.8.8#d",
".8#T#R#R.8#R.8.8#T#S#S.8#T#T#U#W#W.8.8#Y#X.8.8#V#V.8.8#X#W.8#W#U.6.5.6.6.5.5.Y.Y.P.K.E.v.p.k.e.G.e.U.n.B.c.u.b.N.q.8#G#G#G.8#G#H#H.8#J#J#J.8#K#K.8#M#M#N.8#O#O#R.8#R#R.8#R#R#R.8#R#R#R.8#O#O.8#O#N#M.8#M#L#L.8#L#L.8#M#M#N.8#N#N#N.8#N.8.8.R.3.4.6.6.5.5.7.6.Y.N.E.E.q.k.k.d.d.b.b.g.j.j.g.#.c.c.e.k.p.u.C.N.0.0.3.3.X.V.R.R.Q.T.R.Q.S.X.2.7.5.3.3.N.N.z.z.y.x.v.u.q.o.n.k.g.c.b.c.e.a.a.8.8.8#J.8#H#H#G#G#G#F#F#F#F#F.8#F#F.8#F.8.8.k.t.F.K.M.F.l.e.g.d.a.6.4.5.Y.R.R.F.F.t.t.o.i.d.b.b.c.c.c.b.c.g.k.k.p.p.q.u.u.D.D.R.R.W.7.7.5.1.X.V.U.S.S.U.V.V.Z.Z.6.6.6.6.Y.N.H.B.t.q.n.l.g.b.b.c.c.8#e#e#e.8.8#e#e.8#d#d.8#a#a#a.8.9.9.9.8####.8#a#b#b.8#e#e#e.8#e#c.8#d",
".8#T#R#R.8#R#T.8#T#S#S.8#T#T#U#W#W.8.8#Y#X.8.8#V#V.8.8#X#W.8#W#U.8.6.5.5.6.6.W.W.N.I.C.t.p.k.e.G.e.U.n.B.c.u.b.N.q.8#G#G#G.8#G#H#H.8#J#J#J.8#K#K.8#M#M#N.8#O#O#R.8#R#R.8#R#R#R.8#R#R#R.8#O#O.8#O#N#M.8#M#L#L.8#L#L.8#M#M#N.8#N#N#N.8#N.8.8.Q.Y.5.6.7.6.6.6.8.Y.M.C.C.q.k.k.d.d.b.b.g.h.h.g.a.d.c.e.k.p.t.D.N.0.0.3.3.Z.V.S.R.Q.T.R.Q.S.V.1.6.4.3.3.N.N.B.B.y.x.v.u.q.o.n.k.g.c.b.c.e.a.a.8.8#J#J.8#H#H#G#G#G#F#F#F#F#F.8#F#F.8#F#F.8.k.t.F.K.M.F.l.e.g.d.8.6.5.7.Y.R.R.E.E.t.t.p.k.e.b.b.b.c.c.b.e.k.l.l.p.p.q.t.t.D.D.Q.Q.U.8.6.6.3.Z.X.X.V.X.X.X.X.2.2.6.6.4.7.W.M.G.z.t.q.n.l.g.c.b.b.b.8#e#e#e.8.8#e#e.8#d#d.8#a#a#a.8.9.9.9.8####.8#a#b#b.8#e#e#e.8#e#c.8#d",
".8#S#T#T.8#T.8.8#U#Y#X.8#V#V#X#W#W.8.8#S#S.8.8#R#R.8.8#R#R.8#R#O.3.8.7.7.8.8.R.R.N.G.B.t.p.k.e.D.c.U.p.y.c.u.b.K.u.8#C#C#E.8#E#F#F.8#F#F#F.8#F#F.8#F#F#F.8#G#H#J.8#K#K.8#K#K#J.8#J#H#G.8#G#G.8#F#F#F.8#F#F#F.8#F#F.8#F#F#F.8#F#F#F.8#H.8.K.O.W.7.5.6.6.6.4.6.U.L.B.B.q.k.k.e.e.#.#.g.h.h.d.a.e.c.f.k.p.t.D.N.0.0.4.4.Z.X.S.R.Q.T.R.Q.S.V.1.6.4.3.3.O.O.B.B.y.x.v.u.q.o.n.k.g.d.b.c.c.a.a.b.8.8#F.8#F#F#E#E#E#E#E#E#E#E.8#E#E.8#E.8.8.k.s.E.J.K.D.l.e.d.8.5.6.6.8.U.Q.Q.E.E.u.u.p.k.f.c.b.b.b.b.c.f.k.m.m.o.o.r.t.t.D.D.Q.Q.R.6.6.7.5.2.1.Z.Z.Z.1.1.1.5.5.6.6.5.6.U.L.F.z.t.q.n.l.i.c.c.b.b.b.b#e#e.8.8#a#a.8.9.9.8.9.9.9.8.9.9.9.8####.8#a#a#a.8#a#a#b.8#c#e.8#c",
".8#S#T#T.8#T.8.8#U#Y#X.8#V#V#X.8#W.8.8#S#S.8.8#R#R#R.8#R#R#R#R#O.Y.3.6.6.3.3.Q.Q.L.H.B.t.p.k.e.D.c.U.p.y.c.u.b.K.u.G.8.8#E.8#E#F#F.8#F#F#F#F#F#F.8#F#F#F.8#G#H#J.8#K#K.8#K#K#J.8#J#H#G.8#G#G.8#F#F#F.8#F#F#F.8#F#F.8#F#F#F.8#F#F#F.8.8.F.J.N.R.6.6.5.6.4.5.0.R.K.B.B.q.k.k.e.e.#.#.d.g.g.b.a.e.c.f.k.o.t.D.N.0.0.4.4.1.X.S.R.Q.Q.R.Q.S.V.1.6.4.3.3.O.O.B.B.y.x.v.u.q.o.n.k.g.d.b.c.c.b.b.b.8.8#F.8#F#F#E#E#E#E#E#E.8#E.8#E#E.8#E.8.8.k.r.C.G.I.B.l.e.b.8.6.4.7.3.R.P.P.E.E.u.u.p.k.g.d.c.c.b.c.e.i.k.o.o.q.q.r.t.t.D.D.P.P.R.3.5.6.5.4.3.2.2.2.3.4.4.6.6.5.5.7.0.R.K.F.A.t.q.n.l.i.c.c.b.b.b.b#e#e.8.8#a#a.8.9.9.8.9.9.9.8.9.9.9.8####.8#a#a#a.8#a#a#b.8.8#e.8#c",
".8.8#W#W.8.8.8.8#R.8.8.8.8.8#O.8.8.8#L#L.8.8.8.8#K#J.8.8.8#J#J.8.Y.3.6.6.3.3.Q.Q.L.H.B.t.p.k.e.B.c.U.p.x.d.u.c.K.t.H.8.8.8.8#y#A.8.8.8.8#C#C.8.8.8#E#E.8.8.8.8#F#F.8.8.8#F#F.8.8.8.8#F.8.8.8.8#F.8.8.8.8.8#E.8.8.8#F#F.8.8.8.8#F#F.8.8.F.J.N.R.6.6.5.6.4.5.0.R.K.B.B.q.k.k.e.e.#.#.d.g.g.b.a.e.c.f.k.o.t.D.N.0.0.4.4.1.X.S.R.Q.Q.R.Q.S.V.1.6.4.3.3.O.O.B.B.y.x.v.u.q.o.n.k.g.d.b.c.c.b.b.b.8.8.8.8#E#E.8.8.8.8#E#C.8.8.8#A#A.8.8.8.8.k.r.C.G.I.B.l.e.b.8.6.4.7.3.R.P.P.E.E.u.u.p.k.g.d.c.c.b.c.e.i.k.o.o.q.q.r.t.t.D.D.P.P.R.3.5.6.5.4.3.2.2.2.3.4.4.6.6.5.5.7.0.R.K.F.A.t.q.n.l.i.c.c.b.b.b.b.9.8.8.8.8#b.8.8.8.8#e.8.8.8.8.8#d.8.8.8.8#d.8.8.8.8#d#d.8.8.8.8#c",
"#X#X#W#W#U#U#S#R#R#R#R#R#R#R#O#N#N#M#L#L#L#K#K#K#K#J#J#J#J#J#J#J.R.U.Y.Y.U.U.N.N.I.F.y.u.n.k.e.z.c.U.p.w.d.u.c.I.t.F.8#y#y#y#y#A#A#B#C#C#C#C#C#C#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#E#E#E#E#E#E#F#F#F#F#F#F#F#F#F#F#F#F#F.C.G.K.P.Y.3.8.7.7.6.U.O.G.A.A.p.i.i.c.c.a.a.b.g.g.#.b.c.b.g.l.q.t.D.N.Y.Y.5.5.1.X.S.Q.R.Q.R.Q.S.V.1.6.6.6.6.O.O.B.B.y.y.v.u.q.o.n.k.i.d.b.c.c.b.b.a.8#E#E#E#E#E#E#E#E#E#E#C#C#C#B#A#A#A#A#y.8.k.q.A.F.G.A.k.e.a.7.6.6.3.Y.Q.N.N.D.D.u.u.o.l.k.f.f.e.e.e.k.k.n.p.p.r.r.t.v.v.D.D.O.O.P.Y.7.5.6.6.6.6.5.5.6.6.6.6.6.8.8.0.W.O.I.D.x.u.q.n.l.k.e.e.c.c.e.e.8#####a#b#b#c#e#e#e#e#e#e#c#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#c#c#c",
"#N#N#M#M#L#L#K#J#J#H#H#H#G#G#G#G#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#F.R.U.Y.Y.U.U.N.N.I.F.y.u.n.k.e.y.c.U.q.v.e.u.d.G.w.E.8#v#w#w#w#v#v#w#y#y#A#A#A#A#A#A#A#A#B#B#B#B#B#B#B#C#C#C#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E.C.G.K.P.Y.3.8.7.7.6.U.O.G.A.A.p.i.i.c.c.a.a.b.g.g.#.b.c.b.g.l.q.t.D.N.Y.Y.5.5.1.X.S.Q.R.Q.R.Q.S.V.1.6.6.6.6.O.O.B.B.y.y.v.u.q.o.n.k.i.d.b.c.c.b.b.a.8#E#E#C#C#C#C#C#C#C#C#B#A#A#y#w#w#w#w#w.8.k.q.A.F.G.A.k.e.a.7.6.6.3.Y.Q.N.N.D.D.u.u.o.l.k.f.f.e.e.e.k.k.n.p.p.r.r.t.v.v.D.D.O.O.P.Y.7.5.6.6.6.6.5.5.6.6.6.6.6.8.8.0.W.O.I.D.x.u.q.n.l.k.e.e.c.c.e.e.8#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9",
"#N#N#M#M#L#L#K#J#J#H#H#H#G#G#G#G#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#F.P.R.U.U.R.R.L.L.G.E.x.t.n.k.e.8.c.U.q.t.e.u.d.G.y.D.8#v#w#w#w#v#v#w#y#y#A#A#A#A#A#A#A#A#B#B#B#B#B#B#B#C#C#C#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E#E.B.G.K.N.U.Y.3.6.6.0.R.N.G.8.8#G#G#H#H#H#H#H#G#G#G#G#G#H#H#H#J#J#K#K#K#K#K#K#L#L#L#L#L#L#L#L#K#K#K#K#J#H#H#H#G#G.8.b.b.G.B.u.q.o.n.k.i.d.b.c.c.b.b.a.8#E#E#C#C#C#C#C#C#C#C#B#A#A#y#w#w#w#w#w.8.i.o.x.D.F.x.k.e.a.6.4.8.Y.W.P.N.N.D.D.u.u.q.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.O.W.8.6.6.6.6.7.6.7.7.6.6.4.4.3.3.Y.R.N.G.C.x.u.q.m.l.k.e.e.d.d.f.f.8#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9",
"#H#H#G#G#F#F#F#F#F#F#F#F#F#F#F#F#F#F#E#E#E#E#E#E#E#E#E#E#C#C#C#C.N.P.Q.Q.P.P.K.K.H.C.w.s.m.k.e.8.c.U.q.t.e.u.d.G.y.D.8#n#p#p#p#r#r#t#v#v#v#v#w#w#w#v#v#v#w#w#w#w#w#w#w#y#y#y#A#A#A#B#B#B#C#C#C#C#C#C#C#C#C#C#B#B#B#B#B#B#C#C#C#C#C#C#C.B.F.I.M.R.W.Y.0.0.Y.P.L.G.8.8#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#E#E#E#E#E#E#E#E#E#E#E.8.b.b.G.B.u.q.o.n.k.i.d.b.c.c.b.b.a.a.8#C#C#B#B#A#A#y#w#w#w#v#v#v#w#w#v#v#t.8.i.p.w.B.C.w.k.e.8.4.5.3.Y.U.O.N.N.C.C.u.u.q.8#..9.9######.8.j.8.6.Y.k.g.j.l.v.5.U.5.N.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.w.t.q.m.l.k.e.e.e.e.g.g.8.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9",
".8#H#G#G#F.8.8#F#F#F.8.8#F#F#F#F.8#F#E#E#E.8.8#E#E#E#E.8#C#C#C#C.M.N.O.O.N.N.I.I.F.B.w.r.m.k.e.8.c.U.q.t.e.u.e.G.z.B.8#n.8#p#p#r#r.8.8#v#v#v#w.8#w#v#v#v.8.8#w#w#w.8.8#y#y#y#A.8#A#B#B#B.8.8#C#C#C#C.8#C#C#C#B.8.8#B#B#B#C.8#C#C#C#C.8.A.E.G.K.P.R.W.W.W.U.N.K.F.8.8#F.8#F#F#F#F.8#F#F#F#F.8.8#F#F#F#F.8#F#F#F#F.8.8#F#F#F#F.8.8#E#E#E.8.8#E#E#E#E.8#E.8.#.b.G.B.u.q.o.n.k.i.d.b.c.c.c.c.a.a.8.8#C#B#B#A.8#y#w#w#w.8.8#v#w#w#v.8#t.8.i.p.w.B.C.w.k.e.8.5.7.0.U.R.N.M.M.C.C.t.t.q.8#..8.8######.8.j.8.Y.R.k.d.g.o.w.4.U.5.N.e.b.c.q.Y.7.u.c.b.D.6.Q.S.O.y.8.b.p.D.t.l.8.w.t.o.m.m.k.f.f.f.f.k.k.8.9.8.8.9.9.9.8.8.9.9.9.9.8.9.9.9.9.8.8.9.9.9.9.8.9.9.9.9.8.8.9.9",
".8#F#E#E.8#E.8.8#E#C#C#C.8#C#B.8.8#y#w#w.8#w#w.8#w#y.8.8#y#y#y.8.8.M.N.N.M.M.G.G.F.z.t.q.l.i.e.8.c.U.r.u.f.u.e.F.B.z.8.8.8#b#g#k.8#l.8.8#m#m.8.8#n#n#n.8#p.8.8#r.8.8.8#t#t#t.8#t.8.8#w.8.8.8#w#w.8.8.8#w#w#w.8#y#y.8#y.8.8.8#y#y#y.8.8.y.D.H.K.N.Q.R.R.R.R.M.J.E.8.8.8.8#E#E#E.8.8#E#E#E#E#C#C.8#C#C.8.8#B#B#B.8#B#B.8#A#A.8.8.8#y#y.8#A#A.8#A.8.8.8#A.8.a.b.G.C.u.q.o.n.k.i.d.b.c.c.c.c.a.a.8.8#w#w#w.8.8#w#w#w#w.8#v.8#p#p.8.8.8.d.g.p.t.z.B.t.k.d.8.7.6.Y.R.Q.N.L.L.B.B.t.t.q.8.8.8.8.9.9.8.8.j.w.8.K.i.a.#.o.z.4.U.4.P.i.c.b.p.N.R.r.c.d.E.4.Q.R.P.y.i.c.k.F.u.g.8.w.s.o.m.m.k.f.g.g.g.k.k.8.8.8.8#a#a.8#.#..8#..8.8.8#.#.#..8#a#a.8#b.8.8.8#b#b#a.8.8#..8.9",
".8#F#E#E.8#E.8.8#E.8#C#C.8.8#B#A.8#y#w#w.8#w#w.8#w#y#y.8#y#y#y.8.8.M.N.N.M.M.G.G.F.z.t.q.l.i.e.8.c.U.s.t.f.u.c.E.D.y.8#b.8#b#g#k.8#l#m.8#m#m#n.8#n#n#n.8#p.8.8#r#r#r.8#t#t#t.8#t.8.8#w#w.8.8#w#w#w#w.8#w#w#w.8#y#y.8#y#A#A.8#y#y#y.8#w.y.D.H.K.N.Q.R.R.R.R.M.J.E.8.8#E.8#E#E#E#E.8#E#E#E.8#C#C.8.8#C#C.8#B#B#B.8#B#B.8#A#A#A.8.8#y#y.8#A#A.8#A#A#A.8#A.8.a.b.G.C.u.q.o.n.k.i.d.b.c.c.c.c.a.a.8.8#w#w#w#w#w#w#w#w#w#v#v.8#p#p#p.8.8.e.f.p.t.y.A.t.k.d.8.7.6.Y.R.Q.N.L.L.B.B.t.t.q.8#e.8.8.9.9.8.G.j.w.p.8.g.a.a.r.C.4.U.4.R.k.b.b.o.J.N.q.c.c.E.5.R.R.Q.y.i.c.8.G.t.c.8.w.s.o.m.m.k.f.g.g.g.k.k.8#..8.8#a#a.8#.#..8#.#.#..8#.#.#..8#a#a.8#b#b#b.8#b#b#a.8###..8.9",
".8#C#B#B.8#A#y.8#w.8#v#v.8.8#w#v.8#v#t#t.8#t#t.8#t#r#r.8#p#p#p.8.8.I.J.J.I.I.F.F.B.x.t.q.l.g.e.8.c.U.t.r.g.u.c.D.F.x.8#e.8#d#d#b.8#b#b.8#b#b#b.8#b#b#b#b#g#g.8#g#g#g.8#k#l#l.8#m.8.8#n#n.8.8#p#p#r#r.8#r#r#r.8#r#r.8#p#p#n.8#n#n#n.8#n.w.z.F.G.K.M.N.O.O.N.K.G.C.8.8#w.8#v#v#v#v.8#v#v#v.8#v#v.8.8#w#w.8#v#v#v.8#v#v.8#v#v#v.8.8#v#v.8#v#v.8#v#v#v.8#v.8.b.b.I.E.u.q.o.n.k.i.d.c.c.c.d.d.b.b.8.8#r#r#r#p#p#p#n#n#m#m#m.8#k#k#g.8.8.e.f.o.u.w.x.u.i.d.8.0.Y.R.P.N.L.K.K.B.B.t.t.r.8#d.8.8.9.9.8.F.g.A.q.c.8.b.d.t.F.4.U.3.U.n.d.b.m.E.H.p.c.c.F.6.R.Q.R.A.i.b.c.b.q.c.8.t.r.o.m.m.k.i.k.k.k.m.8.8#c.8.8####.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9.9.9.8#.#.#..8#.#..8#.",
".8#C#B#B.8#A#y.8#w.8#v#v.8#w#w#v.8#v#t#t.8#t#t.8#t#r#r.8#p#p#p.8.8.I.J.J.I.I.F.F.B.x.t.q.l.g.e.8.c.U.u.q.g.u.c.C.G.w.8#e.8#d#d#b.8#b#b.8#b#b#b.8#b#b#b.8#g.8.8#g#g#g.8#k#l#l.8#m.8.8#n#n.8.8#p#p#r#r.8#r#r#r.8#r#r.8#p#p#n.8#n#n#n.8#n.w.z.F.G.K.M.N.O.O.N.K.G.C.8.8#w.8#v#v#v#v.8#v#v#v.8#v#v.8.8#w#w.8#v#v#v.8#v#v.8#v#v#v.8.8#v#v.8#v#v.8#v#v#v.8#v.8.b.b.I.E.u.q.o.n.k.i.d.c.c.c.d.d.b.b.8.8#r#r#r#p#p#p#n#n#m#m#m.8#k#k#g.8.8.e.e.n.t.v.w.t.i.d.8.0.Y.R.P.N.L.K.K.B.B.t.t.r.8#d.8.8.9.9.8.B.d.B.r.c.8.d.c.v.H.4.U.2.Y.p.f.c.l.A.B.n.c.b.F.7.R.Q.R.A.k.b.e.b.8.c.8.t.r.o.m.m.k.i.k.8.8.8#c#c#c.8.8####.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9.9.9.8#.#.#..8#.#..8#.",
".8#C#B#B.8#A.8.8#w.8#v#v.8#w#w#v.8#v#t#t.8#t#t.8#t#r#r.8#p#p#p.8.8.G.G.G.G.G.D.D.z.w.u.o.k.g.e.8.c.U.u.q.g.u.c.C.G.w.8#e.8#d#d#b.8#b.8.8#b#b#b.8#b#b#b.8#g.8.8#g#g#g.8#k#l#l.8#m.8.8#n#n.8.8#p#p#r#r.8#r#r#r.8#r#r.8#p#p#n.8#n#n#n.8.8.v.A.D.G.J.K.M.N.M.L.I.G.B.8.8#w.8#v#v#v#v.8#v#v#v#v#v#v.8#w#w#w.8#v#v#v.8#v#v.8#v#v#v.8.8#v#v.8#v#v.8#v#v#v.8#v.8.b.b.I.E.u.q.o.n.k.i.d.c.c.c.d.d.b.b.8.8#r#r#r#p#p#p#n#n#m.8#m.8#k#k#g.8.8.e.e.n.t.v.w.t.i.d.8.Y.W.Q.N.N.K.J.J.B.B.t.t.s.8#d.8.8.9.9.8.z.b.B.s.c.b.8.c.x.G.4.U.2.Y.q.k.c.k.w.y.m.c.b.F.7.R.Q.U.A.k.b.c.b.o.8.8.t.r.p.m.8.8.8.8#c#c.8#c#c#c.8.8####.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9.9.9.8#.#.#..8.8#..8#.",
".8.8#w#w.8.8.8#t#t#r.8.8#p#p#p.8.8.8.8#m#l.8.8#g#g.8.8.8.8.8#b#b.8.G.H.H.G.G.B.B.A.w.t.p.k.g.e.8.b.U.u.q.i.u.c.B.G.t.8.8.8.8#g#g.8.8.8#g#g.8.8.8.8#g#g.8.8.8#e#e.8.8.8.8.8#b#b.8.8#b#b.8.8.8.8#b.8.8.8.8.8#b#b.8.8#b#b.8.8.8.8#d#d#d.8.t.x.B.F.G.J.K.K.K.K.G.F.z.8.8.8.8.8#k#l.8.8.8.8#m#m.8.8#m#m#m.8.8.8.8#m#m.8.8#m#m#m.8.8.8.8#m#m.8.8#m#l.8.8.8.8.8.b.b.I.F.u.q.o.n.k.i.e.c.c.c.d.d.b.b.8.8.8#l#l.8.8.8.8#g#b.8.8.8#d#d.8.8.8.c.e.m.r.t.t.s.g.d.8.U.R.O.N.M.K.I.I.B.B.t.t.t.8.8.8.8.8.9.8.w.a.D.u.c.b.p.8.B.K.3.U.1.6.s.l.d.k.s.u.k.b.c.F.6.Q.R.W.A.k.b.c.a.k.o.8.8.B.x.8.8.8#g#g.8.8#f#f#b.8.8.8.8#b#b.8.8#d#d.8.8.8.8.8#e#e.8.8#c#c.8.8.8.8#c#c#c.8.8.8#c",
"#v#v#w#w#w#w#v#t#t#r#r#r#p#p#p#n#n#n#m#m#l#k#k#g#g#b#b#b#b#b#b#b.8.F.F.F.F.F.z.z.x.t.s.p.k.f.e.8.b.U.t.o.k.u.c.z.J.t.8#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#e#e#e#e#e#e#e#d#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#d#d#d#d#d#d#d#d.t.w.B.E.H.G.I.J.J.I.G.E.y.8.8#k#k#k#k#l#l#l#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#l#l#l#l#l.8.c.b.J.F.u.q.o.n.k.i.e.c.c.c.e.e.c.c.8#m#l#l#l#k#k#k#g#g#b#b#b#b#d#d#e#e.8.c.e.l.q.u.u.q.g.d.8.R.Q.N.L.K.J.I.I.B.B.t.t.t.8.9.9.9.9.9.9.8.a.E.t.c.b.p.I.E.N.3.U.1.8.t.p.e.g.p.o.k.b.e.F.3.Q.R.W.z.k.b.c.a.g.n.t.w.A.z.I.8#g#g#g#g#g#f#f#b#b#b#b#b#b#b#d#d#d#d#d#d#d#e#e#e#e#e#e#c#c#c#c#c#c#c#c#c#c#c#c#c",
"#p#p#p#p#p#p#n#m#m#l#k#k#g#g#g#b#b#b#b#b#d#e#e#g#g#g#g#g#g#g#g#e.8.F.F.F.F.F.z.z.x.t.s.p.k.f.e.8.b.U.t.p.k.u.c.y.K.u.8#.#a#a#a#a#a#a#d#d#d#d#e#e#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#e#e#e#e#e#e#g#g#g#g.t.w.B.E.H.G.I.J.J.I.G.E.y.8.8#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#b#b#b#b#b#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g.8.d.b.J.F.u.q.o.n.k.i.e.c.c.c.e.e.c.c.8#b#d#d#d#e#e#e#g#g#g#g#g#d#a#a#a#a.8.c.e.l.q.u.u.q.g.d.8.R.Q.N.L.K.J.I.I.B.B.t.t.t.8.9.9#.#a#a#b#b.b.F.v.b.b.p.I.8.O.3.U.1.6.t.o.e.f.n.n.g.b.f.G.3.Q.R.Y.z.k.b.c.a.e.l.u.t.x.B.M.O.8#g#g#g#g#g#g#g#h#h#h#i#i#i#i#i#i#i#i#i#i#i#i#i#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g",
"#p#p#p#p#p#p#n#m#m#l#k#k#g#g#g#b#b#b#b#b#d#e#e#g#g#g#g#g#g#g#g#e.8.B.B.B.B.B.w.w.t.u.q.o.k.f.d.8.b.U.v.p.k.u.c.x.M.t.8#.#a#a#a#a#a#a#d#d#d#d#e#e#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#e#e#e#e#e#e#g#g#g#g.u.t.x.B.E.F.G.H.H.G.D.B.w.8.8#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#b#b#b#b#b#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g.8.e.b.J.F.u.q.o.n.k.i.e.c.b.c.e.e.d.d.8#b#d#d#d#e#e#e#g#g#g#g#g#d#a#a#a#a.8.c.c.k.p.q.r.p.e.d.8.N.N.K.J.I.G.G.G.z.z.t.t.u.8.9.9#.#a#a#b#b.8.G.x.b.b.q.J.e.8.3.U.Z.4.A.t.g.c.f.e.d.b.k.G.Y.R.Q.Y.z.k.c.b.a.b.e.p.o.t.G.Y.Y.K.8#g#g#g#g#g#g#h#h#h#i#i#i#i#i#i#i#i#i#i#i#i#i#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g",
"#l#l#k#k#k#k#g#b#b#b#b#b#d#d#e#g#g#g#g#g#g#g#g#e#e#a#a#a#a#a#..9.8.B.B.B.B.B.w.w.t.u.q.o.k.f.d.8.b.U.v.p.k.u.c.x.M.t.8#b#a#a##.9.9.9#.#.#a#a#a#a#a#a#a#a#d#d#e#g#g#g#g#g#g#g#g#g#g#e#e#e#d#d#d#d#a#a#a#a#a#a#a#a#a#.#..9.9.9#.#.#.#a#a.u.t.x.B.E.F.G.H.H.G.D.B.w.8.8#d#d#d#d#d#d#d#d#d#d#d#a#a#a#a#a#a#d#d#d#e#e#e#g#g#g#e#e#b#b#b#b#b#d#d#d#e#e#e#e#e.8.c.b.J.G.u.q.o.n.k.i.e.c.b.c.e.e.d.d.8#g#g#g#g#e#e#d#a#a#a#a#a.9.9.9####.8.c.c.k.p.q.r.p.e.d.8.N.N.K.J.I.G.G.G.z.z.t.t.u.8#a#b.9#####c#c#d.8.y.b.b.q.J.d.B.3.U.X.6.B.t.i.c.c.c.c.c.k.H.Y.R.Q.0.z.k.c.b.a.c.c.l.p.u.G.6.6.M.t.8#g#g#f#f#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g",
".8#l#k#k.8.8.8.8#b.8.8.8#d#d#e.8.8.8#g#g.8.8.8#e#e#a.8.8.8#a#..8.8.z.z.z.A.A.v.v.t.u.q.n.k.e.d.8.b.U.w.m.k.u.c.v.P.q.8.8.8.8##.9.8.8#.#.#a#a.8.8.8#a#a.8.8#d#e#g#g.8.8.8#g#g.8.8#g#e#e#e.8.8.8#d.8.8.8#a#a#a#a.8.8#.#..8.8.8#.#.#..8.8.t.t.w.A.C.E.F.F.F.F.B.z.v.8.8.8.8#d#d#d.8.8.8.8#d#d.8.8.8#a#a.8.8#d#d#e#e.8.8.8#g#e.8.8.8#b#b.8.8.8#d#e#e.8.8.8.8.c.b.K.G.u.q.o.n.k.k.e.c.b.b.c.c.e.e.8.8.8#g#g.8..#d#a#a#a.8.8.8.9.9.8.8.8.c.c.k.o.q.q.p.e.d.8.M.L.J.I.G.G.H.H.z.z.v.v.t.8#a.8.8####.8.8.8#d.8.c.b.q.K.d.w.D.8.X.6.E.w.k.b.c.c.b.c.l.H.W.S.T.3.B.k.d.c.a.d.c.e.k.q.K.6.4.O.r.k.8.8#f#f#e.8.8.8#g#g.8.8.8#g#g.8.8.8#g#g#g#g.8.8#g#g.8.8.8#g#g#g.8.8.8.8#g",
".8#m#l#l.8#l.8.8#k.8.8.8#b#b#b.8#d.8.8#g.8.8.8#g#g#d.8#a.8#a#..8.8.x.y.y.x.x.t.t.u.s.o.n.i.e.d.8.b.U.w.m.k.u.c.v.P.q.8.8#e.8#e#c.8.8#a#a####.8.9.8.9.9.8.8.9.9.9.8.9.9.8.9.9.8.8#.#a#a.8#a#a.8#a.8.8.8#.#.#..8.9.9.8.9.8.8.8.9.9.9.8.8.r.u.v.x.B.C.D.D.D.D.z.y.t.8.8.8.8.9.9##.8##.8.8########.8####.8.8####.9.8.9.9.8#.#..8.8.8#a#a.8.8.8#a#a.8.8#a.8.8.c.b.K.H.u.q.o.n.k.k.e.c.b.b.c.c.e.e.8#..8.9.9.8.8#a#b#b#e.8#e.8#d#d.8.8.8.c.c.k.m.p.p.o.e.d.8.K.K.I.G.G.H.G.G.A.A.v.v.t.8.8#e#d.8#b.8.8.8#i.8.c.b.r.K.c.t.G.G.X.6.H.z.k.b.c.a.c.d.n.G.U.S.T.6.B.k.e.d.a.a.d.b.e.o.N.5.6.R.q.e.c.8#b#b#b.8#d#d.8#f.8.8.8#g#g.8.8.8#g#g#g.8#g#g.8#i.8.8.8#i#i#g.8.8#f.8#f",
".8#m#l#l.8#l.8.8#k#g#g.8#b#b#b#d#d.8.8#g#g.8.8#g#g.8.8#a#a.8#..9.8.w.w.w.w.w.t.t.t.r.p.m.i.e.d.8.b.U.x.l.k.u.c.t.R.q.8#e#e.8#e#c#c.8#a#a##.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9.9#..8#.#a#a.8#a#a.8#a#a#a.8#.#.#..8.9.9.8.9.9.9.8.9.9.9.8.9.q.t.t.w.A.z.B.B.B.B.y.w.t.8.8.9.8.9.9##.8##.8.8##.8####.8.8####.8####.9.8.9.9.8#.#.#..8.8#a#a#a.8.8#a#a.8.8#a#a.8.c.b.K.H.u.q.o.n.k.k.e.c.b.b.c.c.c.c.8#..8.9.9#####a#b#b#e#e#e.8#d#d#b.8.8.c.c.k.m.p.p.o.e.d.8.J.J.G.H.G.G.F.F.A.A.v.v.t.8.8#e#d.8#b#g#g.8#i#h.8.b.s.K.c.u.G.G.X.6.G.B.k.c.a.d.c.d.p.G.R.S.T.6.B.k.e.e.a.#.a.c.b.p.O.1.5.U.p.c.e.e.8#b#b.8#d#d.8#f#g.8.8#g#g#g#g.8#g#g#g.8#g#g.8#i#i#i.8#i#i#g.8#g#f.8#f",
".8#l#l#l.8#l#k.8#g#b#b.8#d#d#d#e#e.8.8#g#g.8.8#e#e.8.8#d#a.8#a#a.8.t.v.v.t.t.u.u.s.q.p.l.g.e.d.8.b.U.y.k.k.u.b.t.U.p.8#e#e.8#e#e#e.8#e#e#e.8#e#e.8#e#e#e.8#c#c#c.8#c#c.8#b#b#b.8#b#a#a.8####.8######.8######.8#a#a.8#a#b#c.8#c#c#c.8#c.q.s.t.v.x.y.A.z.z.z.x.w.u.8.8#e.8#e#e#c.8#c#c.8#c.8#c#c.8.8#c#c.8#c#c#c.8#c#c.8#c#d#d.8.8#d#c#c.8.8#e#c.8.8#c#c.8.c.b.K.G.u.q.o.n.k.k.e.c.b.b.c.c.c.c.8#d.8#d#d#d#d#d#c#c.9.9.9.8.9.9.9.8.8.c.b.i.l.p.p.m.d.d.8.G.G.G.F.F.F.F.F.y.y.w.w.t.8.8#g#g.8#i#g#g.8#g#e#g.8.t.K.b.q.M.I.p.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.f.a.h.g.b.c.m.R.Q.X.0.m.c.b.a.d.t##.8.9.9.8.9.9.8.8.9.9.9.9.8.9####.8#b#b.8#d#d#d.8#d#d#f.8#f#g.8#g",
".8#l#l#l.8#l#k.8#g#b#b.8#d#d#d#e#e.8.8#g#g.8.8#e#e.8.8#d#a.8#a#a.8.t.v.v.t.t.u.u.s.q.p.l.g.e.d.8.b.U.y.k.k.u.b.t.U.p.8#e#e.8#e#e#e.8#e#e#e.8#e#e.8#e#e#e.8#c#c#c.8#c#c.8#b#b#b.8#b#a#a.8####.8######.8######.8#a#a.8#a#b#c.8#c#c#c.8#c.q.s.t.v.x.y.A.z.z.z.x.w.u.8.8#e.8#e#e#c.8#c#c.8#c.8#c#c.8.8#c#c.8#c#c#c.8#c#c.8#c#d#d.8.8#d#c#c.8.8#e#c.8.8#c#c.8.c.b.K.G.u.q.o.n.k.k.e.c.b.b.c.c.c.c.8#d.8#d#d#d#d#d#c#c.9.9.9.8.9.9.9.8.8.c.b.g.k.n.n.l.d.d.8.G.G.G.F.F.F.F.F.y.y.w.w.t.8.8#g#g.8#i#g#g.8#g#e#g.8.8.L.b.p.P.J.n.8.G.G.G.I.K.J.I.G.G.G.G.H.H.F.F.C.C.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.9.9.8.9.9.8.8.9.9.9.9.8.9####.8#b#b.8#d#d#d.8#d#d#f.8#f#g.8#g",
".8.8#g#g.8.8.8.8#g.8.8.8.8.8#d.8.8.8#g#g.8.8.8.8#e#a.8#a.8#a#..8.8.u.u.u.t.t.q.q.q.p.n.k.f.d.d.8.c.U.B.k.l.u.b.u.3.o.8.8.8.8#b#c.8.8.8.8#d#d.8#c.8#e#e.8.8.8.8#e#e.8#e.8#e#e.8.8.8.8#c.8.8.8.8#b#b.8.8.8.8#b.8.8.8#c#c.8.8.8.8#c#c.8.8.p.q.s.u.t.v.w.w.w.w.t.t.r.8.8.8.8.8#c#b.8.8.8.8#b#b.8#b.8.9.9.8.8.8.8.9.9.8.9.8.9.9.8.8.8.8.9.8.8.8.8.9.9.8.9.8.8.b.b.K.G.u.q.o.n.k.k.e.c.b.b.c.c.c.c.8.8.8.9.9.8.8.8.8.9.9.8.8.8#a#a.8.8.8.c.b.f.k.l.l.k.c.d.8.F.F.E.D.D.E.E.E.y.y.w.w.v.8.8.8.8.8#f.8.8.8.8#g#f.8.8.L.b.n.U.K.l.8.F.G.H.H.G.H.F.F.F.F.E.E.E.C.C.A.A.x.x.w.t.s.q.p.o.l.o.n.m.p.r.r.w.w.8.8.8.8#n#n.8.8.8.8#l#i.8.8.8.8#d.8.8.8.8##.8.8.8.8#a#b.8.8.8.8#g",
".8.8#g#g.8.8.8#g#g.8.8.8.8.8#d.8.8.8#g#g.8.8.8.8#e#a#a.8.8#a#..8.8.u.u.u.t.t.q.q.q.p.n.k.f.d.d.8.c.U.B.k.l.u.b.u.3.o.8.8.8.8#b#c.8.8.8.8#d#d.8.8#c#e#e.8.8.8.8#e#e.8.8#e#e#e.8.8.8.8#c#c.8.8#b#b.8.8.8.8.8#b#b.8.8#c#c.8.8.8.8#c#c#c.8.p.q.s.u.t.v.w.w.w.w.t.t.r.8.8.8.8.8#c#b.8.8.8#b#b#b.8.8#b.9.9.8.8.8.8.9.9.8.8.9.9.9.8.8.8.8.9.8.8.8.8.9.9.8.8.8.8.b.b.K.G.u.q.o.n.k.k.e.c.b.b.c.c.c.c.8.8.8.9.9.8.8.8.8.9.9.8.8.8#a#a.8.8.8.c.b.e.i.k.k.k.c.d.8.F.F.E.D.D.E.E.E.y.y.w.w.v.8#g.8.8#f#f.8.8.8.8.8#f#f.8.8.b.k.0.K.k.8.F.G.H.H.G.H.F.F.F.F.E.E.E.C.C.A.A.x.x.w.t.s.q.p.o.l.o.n.m.p.r.r.w.w.8#n.8.8#n#n.8.8.8.8#l.8.8.8.8.8#d#d.8.8####.8.8.8.8#a#b#d.8.8.8#g",
"#g#g#g#g#g#g#g#g#g#b#b#b#b#b#d#e#e#e#g#g#g#g#g#e#e#a#a#a#a#a#..9.8.s.s.s.r.r.q.q.p.p.m.k.e.d.d.8.c.U.B.i.l.u.b.s.8.m.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#e#e#e#e#e#e#e#e#e#e#c#c#c#b#b#b#b#b#b#b#b#b#b#b#c#c#c#c#e#e#e#e#c#c#c#c.p.o.r.t.t.t.t.t.t.t.t.u.q.8.8#c#c#c#c#b#b#b#b#b#b#b#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.8.b.b.K.I.u.q.o.n.k.k.e.d.b.b.c.c.c.c.8.9.9.9.9.9.9.9.9.9.9.9.9###a#a#b#b.8.c.b.e.i.k.k.k.c.d.8.E.E.C.C.C.D.D.D.x.x.w.w.w.8#g#g#e#f#f#g#g#i#i#g#f#f#d#b.a.k.6.K.k.8.E.F.F.F.G.F.E.E.D.D.C.C.C.B.B.x.x.w.w.v.u.r.q.p.o.l.o.n.n.o.s.s.x.x.8#n#n#n#n#n#n#l#l#l#l#i#i#e#d#d#d#d#d#d####.9.9###a#a#b#d#d#f#f#g",
"#g#g#g#g#g#g#b#b#b#d#e#e#g#g#g#g#g#g#g#g#g#d#d#a#a#a#a#a#.#..9##.8.q.q.q.q.q.p.p.p.o.l.k.e.d.d.8.c.U.C.f.l.u.b.r.6.8.u.6.V.1.E.k.g.h.l.G.5.6.k.a.b.C.6.Q.S.W.z.n.c.g.d.l.y.6.X.V.M.t.c.b.q.D.Z.R.X.7.q.g.8#e#e#e#e#e#e#e#c#c#d#d#d#d#d.o.p.q.r.u.u.t.t.t.t.u.t.q.8.8.K.5.7.e.j.j.a.x.3.U.1.D.k.j.b.A.3.2.k.a.b.p.X.Q.2.U.u.m.a.g.e.W.4.Q.U.F.e.e.f.D.5.8.b.b.K.I.u.q.q.n.k.k.e.d.b.b.c.c.c.8.9.9#.#####a#a#b#.#.#..9.9.9#####c#c.8.c.b.e.f.k.k.i.c.d.8.C.C.B.B.B.C.C.C.x.x.w.w.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.4.M.i.8.D.F.F.F.G.E.C.B.B.B.B.z.z.A.A.w.w.v.t.t.u.q.q.p.o.l.p.o.n.q.t.t.A.A.8#s#s#s#r#r#q#q#q#q#q#q#q#q#o#n#n#l#i#i#d#d#d#d######.9#####b#b#d",
"#g#g#g#g#g#g#b#b#b#d#e#e#g#g#g#g#g#g#g#g#g#d#d#a#a#a#a#a#.#..9##.8.o.o.o.p.p.p.p.o.n.l.k.e.c.d.8.c.U.D.e.m.u.b.q.5.g.t.6.V.1.F.m.d.g.l.H.7.6.k.a.a.D.6.Q.S.W.B.n.c.d.b.k.w.6.3.1.L.t.b.e.q.D.3.X.2.4.q.g.8#e#e#e#e#e#e#e#c#c#d#d#d#d#d.n.p.o.q.s.t.t.u.u.u.s.r.o.8.8.G.6.0.e.h.j.a.A.3.U.1.E.k.g.#.x.6.6.k.a.b.p.X.R.2.W.u.n.a.g.d.Q.6.U.Z.F.g.c.k.D.6.8.c.b.L.J.u.q.q.n.k.k.e.d.b.b.c.c.c.8.9.9#.#####a#a#b#.#.#..9.9.9#####c#c.8.c.b.c.e.g.g.g.b.d.8.B.B.z.z.z.B.B.B.x.x.w.w.8.Z.X.W.p.#.j.b.s.7.1.F.k.j.b.C.U.8.7.N.f.8.C.E.D.D.F.C.B.z.z.A.A.y.y.x.x.t.t.t.t.t.t.q.q.o.n.l.p.o.o.q.u.u.B.B.8#s#s#s#r#r#q#q#q#q#q#q#q#q#o#n#n#l#i#i#d#d#d#d######.9#####b#b#d",
".8#d#d#d#d.8#e#g#g#g#g.8#g#g#g.8.8#e#d#d#a.8.8#a#a.9.9.8.8#a#b#c.8.p.p.p.p.p.n.n.m.l.k.i.d.c.d.8.d.U.E.d.n.u.b.q.8.k.w.7.V.1.G.p.a.#.k.C.8.6.i.b.b.D.6.R.S.Y.B.n.d.a.#.k.t.6.6.7.J.u.e.k.t.D.6.6.6.0.q.k.8.9.9.8.8.9.9.9.9.8.8.9.9.9.9.m.n.p.q.q.r.r.r.s.s.q.q.p.8.8.E.6.Q.e.g.j.c.B.6.U.Z.G.o.#.a.t.6.5.k.b.e.o.1.R.1.Y.u.n.b.b.c.L.5.4.6.E.k.e.o.D.3.2.8.b.L.J.u.q.q.o.k.k.e.d.b.b.c.c.c.8#a.8#b#.#..9.8###c#c#c.8.8#c#e#e#e.8#d.8.c.c.c.e.e.e.b.d.8.A.A.y.y.y.B.B.B.w.w.x.x.8.Z.X.Y.q.b.g.b.q.7.6.B.k.h.e.D.X.Q.8.N.d.8.B.C.C.B.E.B.A.y.y.x.w.w.w.w.w.t.t.u.u.u.s.q.o.o.n.l.p.o.p.q.t.t.B.B.8#t.8.8#t#t#t.8.8#s#s#r#r.8.8#o#o#n.8.8#l#l#l#l.8.8#e#d####.8.9##",
".8#d#d#d.8.8.8.8#g.8.8.8#g#g#g.8.8.8#d#d.8.8.8#a#a.9.8.8.8#a#b.8.8.o.o.o.n.n.l.l.l.l.k.g.d.c.d.8.d.U.E.d.n.u.b.q.8.l.y.7.V.1.G.o.b.a.k.B.Y.Y.i.c.b.D.6.R.R.Y.B.n.d.a.a.i.u.Y.6.4.I.u.k.n.u.E.4.6.5.U.q.k.8.9.8.8.8.9.9.9.8.8.8.9.9.8.8.l.m.p.p.q.q.q.q.q.q.q.q.p.8.8.B.Y.N.e.d.g.c.D.8.U.Z.G.p.a.b.t.3.6.i.b.c.q.1.Q.1.Y.u.n.b.a.b.J.6.6.6.D.l.k.p.D.Y.5.8.c.L.K.u.q.q.o.k.k.e.d.b.b.c.c.c.8.8.8#b#.#..8..###c#c#c.8.8.8#e#e.8.8#d.8.c.b.b.d.d.d.b.d.8.x.y.w.x.x.z.z.z.w.w.x.x.8.Z.X.0.t.e.d.b.q.0.5.z.k.g.c.D.X.Q.6.8.c.8.B.B.B.B.C.A.x.w.w.w.v.v.v.t.t.u.u.t.t.t.r.o.p.n.n.l.p.p.p.r.t.t.D.D.8.8.8.8#t#t.8.8.8#s#s#r.8.8.8#o#o.8.8.8#l#l#l.8.8.8#e#d.8.8.8.9##",
".8#g#g#g.8#g.8.8#g.8.8.8#e#e#e.8#d.8.8#a.8.8.8#.#..9.8##.8#b#c.8.8.o.o.o.n.n.l.l.l.l.k.g.d.c.d.8.d.U.F.c.n.u.b.8.#.o.z.6.U.Z.J.q.d.b.k.y.R.R.g.d.d.E.4.R.R.Y.C.n.d.a.a.g.s.R.3.7.G.t.l.p.t.E.7.5.6.Q.o.k.8.9.8.8.8.9.9.8.8.9.8.9.9.8.8.l.m.p.p.q.q.q.q.q.q.q.q.p.8.8.A.Q.K.e.#.d.b.F.8.U.Z.G.o.b.d.u.W.Y.i.c.c.q.2.Q.Z.Y.u.n.b.a.b.G.Y.6.5.C.n.l.q.E.U.6.8.c.L.K.u.q.q.o.k.k.e.d.b.b.c.c.c.8.8.8######.8.8#c#c#c#e.8#e.8#b#b.8.8#f.8.c.b.b.d.d.d.b.d.8.x.y.w.x.x.z.z.z.w.w.x.x.8.Z.X.3.u.c.#.b.o.U.6.y.i.d.c.D.X.R.6.Y.b.8.B.B.B.B.C.A.x.w.w.w.v.v.v.t.t.u.u.t.t.t.r.o.p.n.n.l.p.p.p.r.t.t.D.D.8.8#s#s.8#r.8.8.8#q#q#q.8#q.8#o#o.8.8.8#n#n.8.8#i.8#e##.8.8.8.9.9",
".8#g#g#g.8#g#g.8#g#g#g.8#e#e#e#d#d.8.8#a#a.8.8#.#..8.8###b.8#c#e.8.m.m.m.l.l.k.k.k.k.k.f.c.c.d.8.e.U.F.b.o.u.c.b.b.q.D.6.U.Z.L.u.c.d.k.t.K.K.f.c.c.E.5.Q.R.0.D.n.e.b.a.e.o.L.Q.U.H.t.o.u.w.E.Y.W.Q.K.p.8.A.8.9.8.8.9.9.8.8.9.9.9.9.9.9.k.l.n.p.p.o.o.o.o.q.p.p.n.8.8.t.J.F.e.a.a.c.H.7.U.X.K.s.c.c.q.M.N.f.e.b.q.3.R.X.0.u.n.d.b.b.C.O.3.Y.B.p.o.t.E.O.6.0.c.M.K.u.q.q.o.l.k.e.d.b.b.c.c.b.8.9.8#######c#c#c#c#c#e#e#e.8#b#b#f.8#f#f.c.b.b.c.c.c.b.d.8.w.w.w.w.w.A.A.A.w.w.x.x.8.Z.X.6.v.b.b.b.p.M.Q.t.g.a.c.E.Z.R.5.0.8.8.z.B.z.A.B.x.w.v.t.t.t.t.t.u.u.t.t.r.r.r.q.p.p.m.m.l.p.p.p.s.v.v.F.F.8.8#s#s.8#r#r.8.8#q#q.8.8#q#o.8#o#o.8.8#n#n.8.8#i#e#e######.8.9.9",
".8#g#e#e.8#e#e.8#g#g#g.8#g#g#g#e#e.8.8#a#a.8.8.9.9.8.8#b#c.8#e#e.8.l.l.l.k.k.k.k.k.k.i.e.c.c.d.d.8.U.H.b.o.u.c.a.c.q.E.6.U.Z.M.t.b.c.i.u.G.G.e.c.c.F.5.Q.Q.3.E.n.e.c.b.d.p.I.N.P.G.t.r.v.x.F.R.Q.N.G.p.8.A.8#..8.8#.#..8.8#.#.########.k.k.m.n.p.p.p.p.p.p.p.p.m.8.8.u.H.B.e.b.b.e.G.6.U.X.L.u.c.c.q.J.K.f.c.b.r.4.R.X.0.u.n.d.b.b.z.L.W.R.B.q.s.v.E.N.W.U.c.M.K.u.q.q.o.l.k.e.e.b.c.c.c.b.8#c.8#e#e#e#e#e#d#b#b#f#f#f.8#g#g#i.8#h#h.c.b.c.b.b.b.b.c.8.t.v.t.v.v.y.A.A.w.w.y.y.8.Z.X.8.w.c.d.b.o.J.N.t.f.a.b.E.Z.Q.5.0.w.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.p.p.m.m.l.p.p.p.t.w.w.G.G.8.8#u#u.8#t#s.8.8#r#r.8.8#q#o.8#o#n.8.8#l#l.8.8#e#d#d######.8.9##",
".8#g#e#e.8#e#e.8#g#g#g.8#g#g#g#e#e.8.8#a#a.8.8.9.9.8.8#b#c.8#e#e.8.k.k.k.k.k.i.i.i.i.f.e.c.b.d.d.8.U.H.b.o.u.8.a.e.t.F.6.U.Z.N.v.b.c.g.t.F.F.e.c.c.F.6.R.Q.3.F.n.e.e.b.c.o.H.K.M.F.v.u.y.A.F.O.M.K.F.p.8.z.8#..8.8#.#..8.8#.#.########.k.k.l.m.n.n.n.n.o.p.o.o.l.8.8.r.E.y.e.b.c.g.J.6.U.X.M.t.b.c.o.H.G.e.c.b.s.5.R.X.3.u.n.e.c.c.x.I.Q.O.z.r.t.y.F.L.Q.O.c.M.L.u.q.q.o.l.k.e.e.b.c.c.c.b.8#c.8#e#e#e#e#e#d#b#b#f#f#f.8#g#g#i.8#h#h.8.b.c.b.b.b.b.c.8.t.t.t.t.t.x.y.y.w.w.y.y.8.Z.X.7.y.e.c.b.n.H.J.t.e.a.b.E.1.Q.4.0.w.o.c.c.a.c.t.F.Q.R.J.t.8.k.b.Q.z.c.q.A.O.t.m.p.p.l.m.l.p.p.p.t.w.w.G.G#x.8#u#u.8#t#s.8.8#r#r.8.8#q#o.8#o#n.8.8#l#l.8.8#e#d#d######.8.9##",
".8.8#d#d.8.8.8.8#g.8.8.8.8#e#d.8#a.8#a#a.8.8.8.8#a#b.8#c.8#e#e.8.8.i.i.i.g.g.f.f.g.g.e.d.b.b.d.e.8.U.G.c.p.8.d.c.c.t.G.6.U.X.P.y.e.b.f.o.x.y.d.c.b.F.7.R.Q.6.F.n.e.c.c.b.k.B.F.H.D.w.y.F.C.F.J.H.E.A.8.G.B.8.8.8.8.8.9.9.8.9.8.9.9.8.8.i.k.k.l.l.l.l.l.l.n.m.m.k.8.8.p.w.t.d.d.c.l.L.5.U.X.O.w.c.b.o.z.B.d.c.d.u.5.S.V.6.u.n.c.e.c.u.E.K.J.A.u.z.E.F.G.J.G.8.M.L.u.q.q.o.l.k.e.e.b.c.b.b.b.8.8.8.8#i#i.8.8.8.8#g#g.8#g.8#g#g.8.8.8.8#g.8.c.c.c.c.b.c.8.u.u.u.t.t.w.x.x.v.v.y.y.8.Z.V.5.B.k.b.c.l.B.D.q.e.c.c.F.2.R.3.3.w.o.b.e.a.c.r.A.K.L.H.t.u.g.c.Q.z.b.p.z.R.s.l.o.o.l.m.l.p.p.o.u.y.y.G.G#y.8#y.8#u#u.8.8.8.8#s#r.8#q.8#n#n.8.8.8.8#d#d.8##.8##.9.8.8.8.8#a",
".8.8#d#d.8.8.8#g#g.8.8.8.8.8#d.8.8.8#a#a.8.8.8.8#a#b#b.8.8#e#e.8.8.f.f.f.e.e.e.e.e.e.e.c.b.b.d.e.8.U.G.c.p.8.d.d.b.w.J.5.U.X.R.z.f.b.e.p.t.t.c.b.b.F.8.S.R.8.F.n.e.c.c.b.k.x.B.E.C.w.B.G.D.F.G.E.B.w.8.G.B.8.8.8.8.8.9.9.8.8.8.9.9.8.8.g.g.k.k.k.k.k.k.k.l.l.l.k.8.8.n.t.s.d.c.c.m.N.5.U.X.P.y.e.b.m.w.y.d.c.e.u.6.S.V.6.u.n.c.c.c.s.B.H.H.y.t.D.G.F.H.H.F.8.N.M.u.q.q.o.l.k.e.e.c.c.b.b.b.8.8.8.8#i#i.8.8.8.8#g#g.8.8.8#g#g.8.8.8.8#g.8.c.c.c.c.b.c.8.s.t.t.u.u.v.w.w.v.v.A.A.8.Z.V.5.D.k.b.c.k.x.z.o.d.d.e.F.2.R.2.6.w.o.b.c.a.c.q.w.G.I.F.t.t.8.d.R.z.b.m.B.W.q.l.n.o.l.l.k.p.p.q.u.A.A.J.J#y#y.8.8#u#u.8.8.8.8#s#r.8.8.8#n#n.8.8.8.8#d#d.8.8.8##.9.8.8.8.8#a",
"#e#e#g#g#g#g#g#e#e#d#d#d#a#a#a#a#a#a#.#..9.9.9#####b#b#c#e#e#c#d.8.e.e.e.d.d.c.c.d.e.d.c.b.b.d.e.8.U.I.c.p.g.d.c.c.z.M.5.U.X.W.E.k.c.e.l.q.q.c.b.d.F.6.S.R.7.H.o.e.c.e.c.e.u.t.x.B.x.G.N.G.F.C.w.t.t.8.G.C.8#c#c#c#c#c#c#e#e#e#e#e#e#e.f.f.i.k.k.k.k.k.k.k.k.k.k.8.c.k.o.p.d.c.b.p.P.4.U.X.R.C.i.d.k.t.u.c.b.i.t.6.U.U.8.u.n.c.c.e.p.v.B.B.x.x.J.K.F.E.z.y.t.8.M.u.q.q.o.l.k.e.e.c.c.b.b.b.8#h#h#h#h#h#h#h#h#h#h#h#g#g#g#g#g#g#g#g#g#g#g.d.c.c.c.c.c.8.q.r.r.t.u.t.w.w.v.v.A.A.8.Z.V.4.H.o.d.c.k.u.t.n.c.c.g.F.3.S.1.8.w.q.b.c.a.c.n.u.B.D.C.w.A.J.G.R.z.b.k.C.3.o.k.m.n.l.l.k.p.p.q.t.z.z.K.K#s#r#r#r#q#q#o#n#n#n#n#n#n#n#l#i#i#e#d#d.9.9.9.9#######a#a#a#b#b#b",
"#e#e#g#g#g#g#g#e#e#d#d#d#a#a#a#a#a#a#.#..9.9.9#####b#b#c#e#e#c#d.8.e.e.e.d.d.c.c.d.e.d.c.b.b.d.e.8.U.J.c.8.e.d.c.d.B.N.5.U.X.Y.F.l.e.d.k.p.p.b.b.e.G.3.U.R.7.H.o.e.b.c.c.d.r.u.t.z.y.K.R.G.F.z.t.t.q.8.I.D.8#c#c#c#c#c#c#e#e#e#e#e#e#e.f.f.i.k.k.k.k.k.k.k.k.k.k.8.c.g.o.l.d.c.c.q.R.6.U.X.W.E.k.e.k.q.q.c.b.k.t.7.V.U.7.u.o.c.c.e.n.u.x.y.w.A.M.N.F.B.w.v.t.8.N.u.q.q.o.l.k.e.e.c.c.b.b.b.8#h#h#h#h#h#h#h#h#h#h#h#g#g#g#g#g#g#g#g#g#g#g.8.d.d.c.c.c.8.q.r.r.t.u.t.w.w.v.v.A.A.8.Z.V.6.G.p.e.d.i.q.r.l.c.c.i.F.4.S.Z.8.w.q.b.c.a.e.l.q.x.z.B.x.B.M.K.8.z.b.k.D.6.m.k.m.n.l.l.k.p.p.q.t.z.z.K.K#s#r#r#r#q#q#o#n#n#n#n#n#n#n#l#i#i#e#d#d.9.9.9.9#######a#a#a#b#b#b",
"#e#e#g#g#g#g#g#e#e#d#d#d#a#a#a#a#a#a#.#..9.9.9#####b#b#c#e#e#c#d.8.c.c.c.c.c.b.b.c.c.c.b.b.b.d.e.8.S.K.e.8.d.d.b.e.E.P.5.U.X.0.G.m.f.d.i.l.n.b.c.f.G.0.U.R.6.G.o.e.b.c.c.b.q.q.u.A.y.N.Y.I.F.w.s.q.p.b.I.8#c#c#c#c#c#c#c#e#e#e#e#e#e#e.e.e.f.g.i.i.i.i.i.k.k.k.i.8.c.e.l.k.d.b.d.s.U.6.U.V.Y.F.l.g.g.p.p.b.b.k.v.6.V.S.7.u.o.c.b.d.l.r.t.v.w.B.P.P.F.z.t.u.q.8.N.u.q.q.o.l.k.e.e.c.d.b.b.b.8#h#h#h#h#h#h#h#h#h#h#h#g#g#g#g#g#g#g#g#g#g#g.8.d.d.c.c.c.8.q.q.q.s.s.t.v.v.t.t.A.A.8.Z.V.6.J.q.g.d.g.p.o.k.b.c.k.F.5.U.X.7.w.q.b.c.a.d.k.o.t.w.A.A.E.P.L.H.8.a.f.E.5.k.k.l.m.k.l.k.p.p.q.t.B.B.M.M#s#r#r#r#q#q#o#n#n#n#n#n#n#n#l#i#i#e#d#d.9.9.9.9#######a#a#a#b#b#b",
".8#a#a#a#a.8#a#a#a#a#a.8#a#a#a#a.8#a#.#..9.8.8#####b#b.8.8#e#e#d.8.b.b.b.b.b.b.b.b.c.b.b.b.b.c.e.8.S.K.8.b.b.c.b.k.H.U.5.U.X.8.K.p.k.c.d.f.g.b.d.k.G.Y.V.Q.6.G.o.e.c.c.d.c.l.n.p.w.z.Y.5.K.G.u.p.l.k.b.J.8#d#b.8.8#g#g#g#i.8#i#i#i#i#i.d.c.e.f.f.f.f.e.f.g.g.i.f.8.c.b.e.c.d.b.g.t.Y.6.U.V.3.I.o.k.e.k.k.b.c.l.w.6.X.R.6.u.o.b.b.b.g.p.q.r.v.F.3.Y.G.w.o.p.p.l.N.u.q.q.o.l.k.e.e.c.d.b.b.c.8#g.8#g#g#g#g.8.8#g#g#g#g.8#g#g#g#g.8#g#g#g#g#g.8.b.e.c.c.8.p.q.q.q.r.t.t.t.t.t.z.z.8.Z.U.6.M.t.k.e.e.k.k.g.b.b.l.G.5.U.X.6.w.q.c.b.a.b.e.l.q.t.v.B.I.Y.Q.G.x.a.c.F.6.g.k.l.l.k.l.k.p.o.q.t.C.C.N.N#l#i.8.8#i#i#i.8.8#e#e#d#d.8.8.9.9##.8.8#b#b#b#b.8.8#d#f#f#f.8#f#f",
".8#a#a#a.8.8.8#a#a.8.8.8#a#a#a.8.8.8.9.9.8.8.8#b#b#c.8.8.8#e#e.8.8.b.b.b.c.c.c.c.b.b.b.b.b.b.c.e.8.S.K.c.c.b.c.c.k.I.Y.4.U.V.7.L.q.k.c.b.c.d.b.e.k.H.Y.V.Q.5.I.o.f.c.c.c.c.k.k.n.w.z.6.6.M.G.r.l.k.i.b.J.8#h#g.8.8#g#g.8.8.8#g#g#g.8.8.c.c.d.e.e.e.d.d.d.e.e.g.e.8.c.c.b.b.c.c.k.w.3.6.U.V.8.K.p.k.c.f.g.b.d.m.x.6.X.R.6.u.o.b.b.b.e.l.p.q.t.G.6.6.G.t.o.m.m.k.N.u.q.q.o.l.k.f.e.c.d.b.b.c.8.8.8#g#g#g.8.8.8.8#g#g.8.8#g#g#g.8.8.8#g#g.8.8.8.a.c.c.c.8.p.p.p.q.q.u.t.t.t.t.z.z.8.Z.U.7.N.t.l.e.d.i.i.e.b.b.l.G.5.V.V.6.w.q.c.b.a.b.c.k.p.q.t.C.K.8.R.G.v.8.c.F.6.e.k.k.l.k.l.k.p.o.q.v.D.D.O.O#l.8.8.8#d#d.8.8.8.9.9.9.8.8.8#a#a.8.8.8#f#f#f.8.8.8#f#f.8.8.8#f#f",
".8#a#a#a.8#a.8.8#a#a#a.8#a#a#a#a#a.8.8.9.9.8.8#b#b.8.8#e#e.8#e#d.8.8.c.c.c.c.c.c.c.b.b.b.b.b.c.e.8.S.8.b.a.c.c.e.m.M.6.4.U.V.5.P.s.l.b.c.c.c.c.f.l.H.W.X.T.5.J.o.f.e.c.a.c.d.d.i.t.B.6.2.O.H.p.e.c.8.b.K#h#h.8#g#g.8#g#g#g.8#g#g#g.8#e.b.b.c.c.c.c.c.c.c.d.e.e.d.8.c.c.d.e.c.d.l.z.7.7.U.U.5.N.q.l.b.b.b.c.e.p.A.4.X.Q.5.u.o.b.c.a.b.g.k.l.t.I.6.6.G.u.i.g.k.k.O.u.o.q.o.l.k.f.e.c.e.b.b.c.8#e.8#g#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g.8.8#g#g#g.8.8.b.c.c.8.n.p.p.o.q.u.t.t.t.t.z.z.8.Z.U.6.R.w.p.e.b.b.b.b.b.c.o.H.6.V.U.5.w.q.c.c.a.a.c.d.k.n.t.F.Q.6.0.F.u.k.k.H.5.b.g.k.l.k.l.k.p.q.r.w.F.F.Q.Q#l.8#i#e.8#d##.8.8.9.9.8.8.9##.8#a#b.8.8#f#f.8.8#f#f#f#f#f#f.8#f#f",
".8#.#a#a.8#a#a.8#a#a#a.8#.#.#.#.#..8.8.9##.8.8#c#c.8.8#c#d.8#d#c.8.8.c.c.c.c.c.c.c.c.b.b.c.b.c.f.8.S.8.b.d.c.c.f.o.N.7.3.U.V.4.R.u.n.b.c.b.e.c.g.n.G.U.X.T.5.J.o.f.f.c.a.a.b.b.e.t.B.6.X.Q.H.m.c.b.8.b.K#g#g.8#g#g.8#e#f#g.8#i#i#i.8#g.b.b.b.b.b.b.b.b.b.c.c.d.c.8.c.a.a.b.c.e.m.C.5.7.U.U.5.P.s.n.c.c.c.c.f.p.z.5.X.Q.5.u.o.b.d.a.c.d.i.k.t.K.3.6.H.r.e.c.f.i.8.u.o.q.o.l.k.f.e.c.e.b.b.d.8#e.8#g#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g#g.8#g#g#g.8.8.a.c.c.8.l.n.o.p.o.t.t.t.t.t.B.B.8.Z.U.5.W.A.p.e.b.c.c.b.c.e.p.H.6.X.S.5.x.q.d.c.b.a.c.b.g.k.r.F.U.5.8.F.s.g.e.8.3.c.f.k.k.k.k.k.p.q.s.w.F.F.R.R#e.8#d##.8.9##.8.8#a#a.8.8#a#b.8#b#d.8.8#f#f.8.8#g#i#i#i#i#i.8#g#f",
".8#.#a#a.8#a#a.8#a#a#a.8#.#.#.#.#..8.8.9##.8.8#c#c.8.8#c#d.8#d#c.8.8.c.c.c.c.c.c.c.c.b.b.c.b.c.f.8.8.b.h.j.d.c.i.p.Q.5.3.U.V.6.U.t.p.b.d.a.a.c.i.o.G.R.X.T.4.K.o.f.g.b.a.a.c.c.b.t.C.3.R.R.H.k.c.c.8.b.K#g#g.8#g#g.8#e#f#g.8#i#i#i.8#g.b.b.b.b.b.b.b.b.b.c.c.d.c.8.c.#.d.#.c.f.o.E.4.6.U.U.4.R.u.o.c.c.e.c.g.o.B.5.X.R.5.u.o.c.e.a.e.b.e.g.u.M.X.5.H.q.b.b.d.g.8.u.o.q.o.l.k.f.e.c.e.b.b.d.8#e.8#g#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g#g.8#g#g#g.8#g.8.c.c.8.l.n.o.p.o.t.t.t.t.t.B.B.8.1.U.5.Y.B.q.f.b.c.d.c.c.e.p.H.6.X.S.5.x.q.d.d.b.a.d.c.c.i.q.H.0.3.5.F.q.d.b.c.8.c.f.k.k.k.k.k.p.q.s.w.F.F.R.R#e.8#d##.8.9##.8.8#a#a.8.8#a#b.8#b#d.8.8#f#f.8.8#g#i#i#i#i#i.8#g#f",
".8.9.9.9.8.9.8.8.9.9.9.8.9.9.9.8.9.8.8###a.8.8#c#c#e.8#e#c#c#d#d.8.8.d.d.d.d.e.e.c.c.c.c.c.b.c.f.8.a.j.j.j.a.c.k.q.Y.6.2.S.U.6.3.w.o.c.a.j.h.c.k.p.G.R.X.T.6.K.o.g.k.b.d.g.b.b.c.t.D.S.V.Y.H.e.b.8.b.b.8#f#f.8#g#g.8#i#i#g.8#f#f#f.8#d.b.c.b.b.b.b.b.c.b.b.b.c.b.8.c.j.j.j.c.i.o.G.6.6.U.U.6.Y.v.p.d.d.b.c.k.q.C.6.Z.Q.4.u.o.d.g.b.a.c.c.b.t.P.T.X.H.p.e.c.b.e.8.u.o.q.o.l.k.f.e.d.e.b.b.d.8#f.8#e#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g.8.8#g#g#g.8#g#g.c.c.8.k.l.m.p.p.s.u.u.t.t.B.B.8.1.U.4.8.F.t.f.c.a.d.e.c.i.q.G.7.X.Q.4.x.q.e.e.b.b.a.c.c.b.p.I.5.S.6.F.p.c.e.c.c.b.e.k.k.k.k.k.p.q.s.x.G.G.W.W##.8#a#a.8#b#b.8.8#b#b.8.8#b#d#d#d#f.8.8#i#i.8.8#i#i#i#i#i#i.8#i#i",
".8.8.9.9.8.8.8.8.9.9.8.8.8.9.9.8.9.8####.8.8.8.8#c#e.8#e.8#c#d.8.8.8.b.b.b.b.c.c.e.c.c.c.c.b.c.f.8.a.j.k.k.a.c.k.q.Y.6.2.S.U.6.6.x.q.c.#.j.j.c.k.o.G.R.Z.T.6.L.o.g.k.b.d.h.a.a.d.t.E.Q.W.0.G.d.a.8.b.b.8#f#f.8.8.8#i#i.8.8.8.8#f#f.8.8.c.c.c.b.c.c.c.c.c.b.b.b.b.8.c.j.j.j.c.k.q.J.6.6.U.S.6.3.w.q.b.j.h.c.k.r.C.7.Z.Q.6.u.o.d.i.d.d.b.e.c.t.R.V.S.H.n.a.a.c.d.Q.u.o.q.o.l.k.f.f.d.e.b.b.e.8.8.8.8#g#g.8.8.8.8#g#g.8.8.8#g#g.8.8.8.8#g#g.8.8.8#g.c.c.8.k.k.l.o.p.r.u.u.t.t.B.B.8.1.S.3.6.H.u.g.c.d.j.b.c.k.q.G.6.X.Q.6.x.q.e.f.b.d.d.a.d.c.o.J.6.Q.6.E.o.d.b.e.b.8.d.i.k.k.k.k.p.q.t.y.G.G.Y.Y##.8#a.8#b#b.8.8.8.8#b#b.8#b.8#d#d.8.8.8.8#i#i.8#i.8#i#i.8.8.8.8#i",
".8.8.9.9.8.8.8.9.9.8.8.8.8.8.9.8.8.8####.8.8.8.8#c#e.8.8.8#c#d.8.8.8.a.a.a.a.b.b.c.c.c.c.c.c.c.f.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.b.b.8.8#f#g.8.8#i#i.8.8.8.8#f#f.8.8.c.c.c.c.c.c.c.c.c.c.c.b.b.8.c.k.k.j.c.k.q.K.6.5.U.S.6.6.x.q.b.k.j.c.k.s.D.7.1.Q.6.u.o.e.i.g.g.a.c.c.s.R.W.Q.G.m.a.b.c.d.R.u.o.q.o.l.k.f.f.d.e.b.b.e.8.8.8.8#g#g.8.8.8#g#g#g.8.8.8#g#g.8.8.8#g#g.8.8.8.8.8.8.c.8.i.k.k.m.n.q.t.t.t.t.B.B.8.1.S.2.5.I.t.g.c.j.k.a.c.k.s.G.6.Z.R.6.x.q.e.g.b.g.h.b.a.c.m.K.6.V.5.E.m.a.b.b.b.t.8.g.k.i.k.k.o.q.u.A.G.G.0.0###a.8.8#b#b.8.8.8.8#b#b.8.8.8#d#d.8.8.8.8#i#i.8.8.8#i#i.8.8.8.8#i",
"#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#b#b#b#b#c#c#c#e#e#e#c#c.8.a.a.#.#.a.a.b.e.c.c.c.c.c.g.e.e.e.k.k.f.f.k.k.n.p.p.D.D.H.N.Q.W.3.8.5.6.6.6.4.3.3.1.1.V.V.U.U.U.U.U.V.X.2.3.5.7.4.3.Y.Y.N.N.8.c.8#i#g#g#f#d#d#b#b#a##############.c.c.c.c.c.e.d.d.d.c.c.c.c.c.c.c.c.c.c.c.e.e.e.e.e.k.m.p.p.u.w.z.B.H.N.R.R.8.8.5.6.2.X.X.S.Q.Q.T.Q.R.S.X.6.6.3.3.J.J.E.B.x.u.o.q.o.l.k.f.f.d.e.c.c.e.8#g#g#f#e#e#e#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g.8.8.f.i.k.l.m.q.s.s.u.u.B.B.H.L.P.0.6.7.4.2.1.Z.3.6.6.5.5.P.N.N.H.H.A.A.s.q.p.n.o.k.e.d.c.b.b.b.b.b.b.b.b.b.c.e.f.f.k.g.k.k.o.q.u.z.I.I.6.8#a#a#a#b#d#d#f#g#g#g#g#i#i#i#i#i#i#i#i#i#i#i#i#i#g#g#g#g#g#g#g#g#g",
"#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#b#b#b#b#c#c#c#e#e#e#c#c.8.d.d.d.d.#.#.a.c.d.c.c.c.c.g.e.f.f.k.k.f.f.k.k.o.p.o.E.E.G.N.R.Y.6.7.4.6.7.7.4.3.3.1.1.V.V.U.U.U.U.U.V.X.2.3.5.7.4.6.0.0.O.O.8.d.8#i#g#g#f#d#d#b#b#a##############.8.d.e.e.e.c.b.b.b.e.c.c.c.c.c.c.c.c.c.c.e.e.f.f.e.k.n.o.p.u.w.B.B.G.N.R.R.6.6.5.7.2.X.X.S.Q.Q.T.T.R.R.X.6.6.3.3.J.J.E.B.x.u.o.q.o.m.k.f.f.e.f.c.c.f.8#g#g#f#e#e#e#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g.8.8.e.g.i.k.l.q.r.r.u.u.B.B.H.M.Q.3.6.6.2.X.X.X.1.5.5.5.5.Q.N.N.H.H.A.A.r.q.o.m.m.g.d.c.b.b.b.b.b.b.b.b.b.b.b.d.e.e.i.g.k.k.o.q.u.B.K.K.7.8#a#a#a#b#d#d#f#g#g#g#g#i#i#i#i#i#i#i#i#i#i#i#i#i#g#g#g#g#g#g#g#g#g",
"#############a#a#a#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#c#c#e#e#e#c#d#d.8.g.g.g.g.d.d.a.b.c.e.c.c.c.g.f.f.f.k.k.g.g.l.l.p.p.q.F.F.I.O.R.0.8.6.6.6.7.7.4.3.3.1.1.V.V.U.U.U.U.U.V.X.1.3.5.6.6.8.3.3.P.P.8.e.8#f#g#g#i#f#f#d#d#a######.9.9.9.9.8.c.d.c.c.b.a.a.a.c.d.c.c.c.c.c.c.c.d.d.e.e.f.f.f.k.n.q.p.t.w.B.B.G.N.R.R.6.6.5.7.2.Z.X.S.Q.Q.T.T.R.R.X.6.6.6.6.K.K.E.B.x.u.o.q.o.m.k.f.f.e.f.c.c.f#d#f#f#i#g#g#f#f#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g.l.c.e.g.k.k.o.r.r.u.u.C.C.G.N.R.8.6.5.X.V.V.U.X.3.3.4.4.R.O.O.H.H.y.y.q.q.m.l.l.e.c.b.b.c.c.c.c.c.c.c.c.c.b.c.e.e.i.f.k.k.o.q.t.B.K.K.8#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#i#i#i#i#i#i#g#g#g#g#g#g#g#g#g#g#g#g#g",
".8########.8#a#a#a#b.8.8#b#b#b#b.8#b#b#b#b.8.8#b#b#c#c.8#e#e#c#d.8.8.g.g.g.g.d.d.a.b.c.e.c.c.c.g.f.f.f.k.k.g.g.l.l.p.p.q.F.F.I.O.R.0.8.6.6.6.7.7.4.3.3.1.1.V.V.U.U.U.U.U.V.X.1.3.5.6.6.8.3.3.P.P.8.f.8#f#g#g#i.8.8#d#d#a##.8##.9.9.9.9.8.c.d.c.c.b.a.a.a.c.d.c.c.c.c.c.c.c.d.d.e.e.f.f.f.k.n.q.p.t.w.B.B.G.N.R.R.6.6.5.7.2.Z.X.S.Q.Q.T.T.R.R.X.6.6.6.6.K.K.E.B.x.u.o.q.o.m.k.f.f.e.f.c.c.f#d#f.8#i#g#g#f.8#e#g#g#g#g.8#g#g#g#g.8#g#g#g#g.8.8#g#g#g#g.8.c.e.g.k.k.o.r.r.u.u.C.C.G.N.R.8.6.5.X.V.V.U.X.3.3.4.4.R.O.O.H.H.y.y.q.q.m.l.l.e.c.b.b.c.c.c.c.c.c.c.c.c.b.c.e.e.i.f.k.k.o.q.t.B.K.K.8#g#g#g.8.8#g#g#g.8.8#g#g#g#g.8#i#i#i#i.8.8#g#g#g#g.8#g#g#g#g#g.8#g#g",
".8.8####.8.8###a#a#b.8.8.8#c#e.8.8#e#e#e#e.8.8.8#e.8.8.8#e#e#e#c.8.8.j.j.j.j.g.g.b.a.b.d.c.c.c.i.f.g.g.k.k.i.i.l.l.p.o.q.G.G.J.Q.U.3.7.5.6.7.6.6.3.3.3.1.1.V.V.U.S.U.U.U.V.X.1.3.4.6.6.7.6.6.R.R.8.g.8#f#g#g#i.8.8#d#d#b.8.8.8####.8.8.8.8.b.b.b.a.a.#.a.a.b.e.e.c.c.c.c.c.d.d.f.f.g.g.f.l.o.q.p.t.x.B.B.G.N.R.R.6.6.5.7.3.Z.X.S.Q.Q.T.T.R.R.X.5.5.6.6.K.K.F.B.x.u.o.q.o.m.k.f.f.e.f.c.c.8#a.8.8.8#i#i.8..#e#g#g#g.8.8.8#g#g.8.8#g#g#h#h.8.8.8#g#g.8.8.b.d.e.k.k.p.q.q.u.u.C.C.G.N.U.6.5.3.V.S.R.R.V.2.2.6.6.R.P.P.H.H.y.y.q.o.l.k.k.d.b.c.c.c.c.c.c.c.c.c.c.c.c.b.d.d.g.f.k.k.o.r.t.C.L.L.8#f#f.8.8.8#g#g#g.8.8.8#g.8.8.8#f#f#f#f.8.8#f#f.8.8.8#g#g#g.8.8.8.8#g",
"##.8######.8###a#a.8#b#b.8.8#e#e.8#e#e#e.8#e#e.8#e#e#e.8#e#e#e.8#c.8.j.j.k.k.j.j.d.a.b.c.e.c.c.i.g.i.i.k.k.k.k.m.m.p.q.q.H.H.K.R.Y.6.6.5.6.7.6.6.3.3.3.1.1.V.V.U.S.S.U.U.V.X.1.2.4.6.6.6.8.8.R.R.8.k.8#f#g#g.8#f#f.8#d.8.8#a######.8.9##.8.a.a.a.#.b.d.d.a.b.d.d.e.e.c.c.c.d.d.f.f.g.i.g.l.p.q.o.t.x.B.B.G.N.R.R.3.3.6.7.3.Z.X.S.Q.Q.T.T.R.Q.X.5.5.6.6.K.K.F.B.x.u.o.q.o.m.k.f.g.e.g.c.c##.8.8#d.8#i#i#g#g#e#g#g#g#g#g.8#g#g#g.8#g#g#h.8#h#g.8.8#g#g.8.8.c.d.i.k.p.q.q.u.u.C.C.I.O.W.5.4.1.S.Q.R.R.S.Z.Z.6.6.U.P.P.H.H.x.x.q.p.l.k.k.c.b.c.c.c.e.e.e.e.e.e.e.e.c.b.c.c.f.e.k.k.q.r.t.D.N.N.8#f#f#f.8.8#g#g.8#g#g.8#g#g#g.8#f#f#f.8#f#f.8#f#g#g.8#g#g#g.8#g#i.8#g",
"##.8######.8#a#a#a.8#b#b.8.8#e#e.8#e#e#e.8#e#e.8#e#e#e.8#c#c#c.8#d.8.j.j.k.k.j.j.g.#.a.b.e.c.c.i.g.i.k.l.l.k.k.n.n.o.q.r.G.G.K.R.Y.8.5.4.6.6.6.6.3.3.3.1.1.V.V.U.S.S.S.U.U.X.1.2.3.5.6.5.7.7.U.U.8.k.8#g#g#g.8#f#f.8#g.8.8#g#g#f#f.8#f#d.8.a.a.#.d.g.g.g.b.a.b.b.d.d.c.c.c.d.d.g.g.i.i.i.l.p.q.o.t.y.C.C.G.N.R.R.3.3.6.6.3.Z.X.S.Q.Q.T.T.Q.Q.V.5.5.6.6.K.K.F.B.x.u.o.q.o.m.k.g.g.e.g.d.d#a.8#d#d.8#g#g#g#g#f#e#e#e#g#g.8#g#g#g.8#g#g#g.8#g#g.8.8#g#g.8.8.b.c.f.i.p.q.q.t.t.D.D.I.P.Y.4.3.X.Q.T.T.T.Q.X.X.7.7.W.Q.Q.H.H.x.x.q.p.k.i.i.b.c.c.e.c.c.c.c.c.c.d.d.c.c.b.b.c.f.e.k.k.q.s.t.E.N.N.8#g#g#g.8.8#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g#g.8#g",
"##.8######.8#a#a#a.8#b#b.8.8#e#e.8#e#e#e.8#e#e.8#e#e#e.8#c#c#c.8#d.8.j.j.j.j.j.j.j.b.a.b.d.c.c.k.i.k.k.l.l.k.k.o.o.q.q.s.I.I.L.U.0.7.5.6.7.6.6.6.3.3.3.1.1.V.V.U.S.S.S.S.U.V.1.2.3.5.7.5.6.6.W.W.8.8.8#g#g#g.8#f#f.8#g.8.8#g#g#f#f.8#f#d.8#d.b.d.h.j.j.j.g.#.a.b.b.b.c.c.c.e.e.g.g.k.k.i.m.p.q.q.t.y.C.C.G.N.R.R.3.3.6.6.3.Z.X.S.Q.Q.T.T.Q.Q.V.5.5.8.8.K.K.F.B.x.u.o.q.o.m.k.g.g.e.g.8#a#a.8#d#d.8#g#g#g#g#f#e#e#e#g#g.8#g#g#g.8#g#g#g.8#g#g.8.8#g#g.8#g#g.b.e.g.o.o.o.t.t.D.D.J.Q.0.6.1.V.Q.U.U.U.Q.V.V.6.6.Y.R.R.H.H.w.w.o.o.k.g.f.b.c.d.c.b.b.b.b.b.b.b.b.b.e.c.b.b.e.e.k.k.q.s.t.F.8#g.8#g#g#g.8.8#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g#g.8#g#g#g.8#g#g#g.8#g#g.8#g",
"#a.8######.8###a#a.8#b#b.8#c#c#c.8#c#e#e.8#e#e.8#e#e#e.8#d#d#d.8#c.8.j.j.j.j.j.j.j.g.#.a.c.c.c.k.i.k.k.l.l.k.k.p.p.q.r.t.J.J.N.Y.3.6.4.6.6.6.5.5.3.2.2.1.1.V.V.U.S.S.S.S.U.V.1.2.3.5.6.4.5.5.Y.Y.8.8.8#g#g#g.8#h#h.8#h.8.8#g.8#g#g.8#g#e.8#f.g.g.j.j.k.j.h.d.a.a.b.b.e.c.c.e.e.i.i.k.k.k.n.p.r.q.v.A.C.C.G.N.R.R.0.0.7.6.3.Z.X.S.Q.T.T.T.Q.R.V.5.5.8.8.K.K.F.B.x.u.o.q.o.m.k.g.g.e.i.8#f#f.8.8#f.8#g#g#i#i#i#g#g#f#e#e.8#g#g#g.8#g#g#g.8#g#g.8#g#g#g.8#g#g.8.d.e.n.p.p.t.t.D.D.K.R.3.6.X.S.U.V.V.V.T.S.S.5.5.Y.R.R.H.H.w.w.p.n.i.e.e.c.d.b.a.a.a.a.a.a.a.a.a.a.c.c.b.b.e.d.k.k.q.s.v.8#g#g.8#g#g#g.8.8#g#g.8#i#i.8#i#h#h.8#h#h#h.8#i#i.8#g#g#g.8#f#f#b.8#b#b.8#b",
".8.8######.8###a#a#b.8#b.8#c#c#c.8#c#e#e.8.8#e.8#e#e#e.8#d#d#d.8#c.8.j.j.j.j.j.j.j.g.#.a.c.c.c.k.i.k.k.l.l.k.k.p.p.q.r.t.J.J.N.Y.3.6.4.6.6.6.5.5.3.2.2.1.1.V.V.U.S.S.S.S.U.V.1.2.3.5.6.4.5.5.Y.Y.8.8.8#g#g#g.8#h#h#h#h#g.8#g.8#g#g.8.8.8.8#f.8.8.j.j.k.j.h.d.a.a.b.b.e.c.c.e.e.i.i.k.k.k.n.p.r.q.v.A.C.C.G.N.R.R.0.0.7.6.3.Z.X.S.Q.T.T.T.Q.R.V.5.5.8.8.K.K.F.B.x.u.o.q.o.m.k.g.g.8.8#f#f#f.8.8#f.8#g#g#i#i#i#g#g#f.8#e.8#g#g#g.8#g#g#g#g.8#g.8#g#g#g.8#g#g#g.8.e.n.p.p.t.t.D.D.K.R.3.6.X.S.U.V.V.V.T.S.S.5.5.Y.R.R.H.H.w.w.p.n.i.e.e.c.d.b.a.a.a.a.a.a.a.a.a.a.c.c.b.b.e.d.k.k.q.s.8.8.8#g.8#g#g#g.8.8#g#g.8.8#i.8#i#h#h.8#h#h#h.8#i#i.8#g#g#g.8#f#f#b.8.8.8.8#b",
"#c#c#c#c#c#c#c#c#c#c#c#c#e#e#e#e#e#e#e#e#e#c#c#c#c#d#d#d#d#d#d#c#c.8.k.k.k.k.j.j.k.g.b.a.c.c.c.k.k.k.k.m.m.k.k.p.p.q.s.u.K.K.N.Y.6.5.6.6.6.5.5.5.2.2.2.1.1.V.V.U.S.S.S.S.U.V.Z.1.2.5.6.6.5.5.0.0.8#d#d#b#b#b#f#f#f#f#f#f#g#g#g#g#g#i#i#h#h#g#g#g#g.8.8.8.8.g.#.a.a.a.d.c.c.e.e.i.i.k.k.k.n.o.s.q.v.A.D.D.G.N.R.R.0.0.7.6.4.1.Z.U.Q.T.T.T.Q.R.U.5.5.8.8.L.L.F.B.x.u.o.q.8.8.8.8#g#g#g#i#i#i#i#i#i#g#g#g#f#f#f#e#e#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#h#h#h#h.8.8.8.8.E.E.K.R.6.6.V.Q.V.W.W.W.V.Q.Q.5.5.0.R.R.G.G.w.w.p.m.g.d.d.c.b.a.a.#.b.b.b.#.#.a.a.a.b.c.b.b.8.8.8.8#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#d#d#d#d#d#d#e#e#e#c#c#c#c#c#c#c#c#c#c#c#c#c",
"#c#c#c#c#c#c#c#c#c#c#c#c#e#e#e#e#e#e#e#e#e#c#c#c#c#d#d#d#d#d#d#c#c.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#d#d#b#b#b#f#f#f#f#f#f#g#g#g#g#g#i#i#h#h#g#g#g#g#g#g#e#g.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#f#f#f#g#g#g#g#i#i#i#i#i#i#g#g#g#f#f#f#e#e#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#h#h#h#h#h#h#h#h.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8#f#b#b#b#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#d#d#d#d#d#d#e#e#e#c#c#c#c#c#c#c#c#c#c#c#c#c",
"#c#c#d#d#d#d#d#d#d#c#c#c#c#c#c#c#c#c#d#d#d#d#d#d#d#d#d#d#c#c#c#b#b#b#b#b#b#b.9.9.9.9.9.9.9.9.9#b#b#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#.#.#############a#a#..9.9#####c#c#c#c#c#c#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#b#b#b#f#f#f#g#g#i#h#h#g#g#g#g#g#f#g#g#i#g#g#d#d#b#b#a######.9.9############.9.9#######a#a#a#a#a#a#a#a#b#b#d#g#g#i#i#i#i#i#g#g#g#g#g#g#i#i#i#i#i#i#i#i#i#i#g#f#f#f#f#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#h#i#i#g#g#g#g#g#g#g#g#g#g#g#g#g#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#g#g#g#g#i#h#h#h#g#g#g#g#g#h#h#g#g#g#b#b#b#d#d#d#d#e#e#e#e#c#c#c#c#c#c#c#c#c#c#c###############c#c#c#c####.9#.#.#a#a#a#a#######.#.#.#.#.#.",
"#c#c#d#d#d#d#d#d#d#c#c#c#c#c#c#c#c#c#d#d#d#d#d#d#d#d#d#d#c#c#c#b#b#b#b#b#b#b.9.9.9.9.9.9.9.9.9#b#b#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#.#.#############a#a#..9.9#####c#c#c#c#c#c#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#b#b#b#f#f#f#g#g#i#h#h#g#g#g#g#g#f#g#g#i#g#g#d#d#b#b#a######.9.9############.9.9#######a#a#a#a#a#a#a#a#b#b#d#g#g#i#i#i#i#i#g#g#g#g#g#g#i#i#i#i#i#i#i#i#i#i#g#f#f#f#f#e#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#h#i#i#g#g#g#g#g#g#g#g#g#g#g#g#g#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#g#g#g#g#i#h#h#h#g#g#g#g#g#h#h#g#g#g#b#b#b#d#d#d#d#e#e#e#e#c#c#c#c#c#c#c#c#c#c#c###############c#c#c#c####.9#.#.#a#a#a#a#######.#.#.#.#.#.",
".8#c#d#d#d.8#d#d#d#c.8.8#c#c#c#c#c#c#d#d#d.8.8#d#d#d#d#d#c#c#c#b.8.8#b#b#b#b.9.9.9.9.9.9.8.9.9#b#b#b#b#b.9.9.8.9.9.9.9.9.9.9.9.9.9.8.9.9#.#.############.8#a#..9.9#####c#c#c#c#c#c#e#e#e.8.8#e#e#e#e#e#e#e#e#e.8.8#e#e#e#e#e#e#d#d#d#d.8#b#b#f#f#f#g#g#i#h.8#g#g#g#g#g#f#g#g#i#g.8#d#d#b#b#a######.9.9.8##########.9.9#######a#a#a#a#a.8.8#a#b#b#d#g#g#i#i#i#i.8#g#g#g#g#g#g#i#i#i#i#i#i#i#i#i.8#g#f#f#f#f#e#g#g#g#g.8#g#g#g#g.8#g#g#g#g#g#g#g#g#g#g.8#i#i#g#g#g#g#g#g#g#g.8.8#g#g#g#f#f#f#f#f#f.8#f#f#f#f#f#f#f#f#f#f.8#g#g#g#i#h#h#h#g#g#g.8#g#h#h#g#g#g#b#b#b#d.8#d#d#e#e#e#e#c#c#c.8.8#c#c#c#c#c#c######.8.8#####c#c#c#c####.9.8.8#a#a#a#a#######.#.#..8#.#.",
".8.8#e#e.8#e.8.8#e#e.8#e.8#c#c.8.8#c#c#c#c#c#c.8#c.8.8.8#c#c#c.8#c#c.8#c.8.8.8#d#d#d.8.8.8.8#c.8.8.8#c#c#d.8.8.8.8#c#c.8.8.9.9.9.8.9.8.8.9.8.8.8.9.9.9.8#..8.8#a.8.8.8#b#b#b.8.8#..9.9.8.9.9.8.9.8.8.8###c#c.8#c#c.8#c.8.8.8#e#e#e.8.8.8.8#d.8.8.8#f#f#g.8.8.8.8#i#h.8.8#g#g#g.8#g.8.8#e.8.8.8#f#g#g.8#i.8.8#g.8.8.8#f#f#f.8.8.8#g#g.8#g#g.8#i.8.8.8#g#g#g.8.8.8.8#g.8.8.8#g#f#f.8.8#f#f#f.8.8#f.8#g#g.8.8#g#g#g#g.8#h.8#i#i.8#i.8.8#g.8.8.8#g#g#g.8#g.8.8#g.8.8.8#g#g#f.8#f.8#b#b.8.8.8#d#d#d.8#d.8#d#d.8.8.8#b#b.8.8#f.8#f#f.8.8#b#b#b#b.8#d.8#d#d.8.8#d#e#e#e.8#e.8#e#e.8.8#c#c####.8##.8.9.9.8.8.8#b#b.8####.8##.8.8.8.9.9.9.8.9.9.8.9.8.8.8.9.9.9.8.8.8.8.9",
"#e.8#e#e.8#e.8.8#e.8#e#e.8.8#c#c.8#c#c#c.8#c#c.8#c#c#c.8#c#c#c.8#c#c.8#c#c#c.8#d#d#d.8#d#c.8#c#c#c.8#c#c#d.8#d#d.8#c#c#b.8.9.9.9.8.9.9.8.9.9.9.8.9.9.9.8#..8.8#a#a#a.8#b#b#b#..8#..9.9.8.9.9.8.9.9##.8###c#c.8#c#c.8#c#c#e.8#e#e#e.8#e#e.8#d#d#d.8#f#f#g.8#g#g.8#i#h#h.8#g#g#g.8#g.8.8#e#e#f.8#f#g#g#g#i.8.8#g#g#f.8#f#f#f#f.8.8#g#g.8#g#g.8#i#i#i.8#g#g#g.8#g#g.8#g#g#g.8#g#f#f#f#f#f#f#f.8.8#f.8#g#g#g#g#g#g#g#g#h#h.8#i#i.8#i.8.8#g#g#g.8#g#g#g.8#g.8.8#g#g.8.8#g#g.8.8#f#f.8#b#b.8.8#d#d.8.8#d#d#d#d#d#d.8#b#b.8.8#f.8#f#f#f#b#b#b#b#b#b#d.8#d#d#d.8#d#e#e#e#e#e.8.8#e#e.8#c#c##.8####.8.9.9#..8.8#b#b.8####.8###.#..8.9.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9",
"#c.8#c#c.8#c#c.8#c.8#e#e.8.8#e#e.8#e#e#e.8#e#e.8#e#c#c.8#a#a#a.8#a#a.8#b#b#b.8#b#a##.8####.8###a#a.8#a#a#a.8#a#a.8#b#b#e.8#e#d#d.8#c#b.8.9.9.9.8.9.9.9.9.9.9.8.9.9.9.8.9.9.9#..8#.#.#..8#.#..8#.#.##.8###a#a.8#.#..8.9###c.8#c#c#c.8#c#c.8#c#c#c.8#e#e#e.8#e#d.8#b#f#f.8#g#g#g.8#g#i.8#i#i#h.8#g#g#g#g#g.8.8#e#e#e.8#f#f#f#f.8.8#g#g.8#g#g.8#f#f#f.8#f#f#f.8#f#f.8#f#f#f.8#f#e#e#e#e#g#g#g.8#g#g.8#g#g#g#g#h#i#i#i#g#g.8#g#g.8#g#f.8#f#f#f.8#g#g#g.8#g.8.8#g#g.8.8#g#g.8.8#f#f.8#b#b.8.8#e#e.8.8#e#e#e#e#e#e.8#e#e.8.8#e#e#e#e#e#e#e#e#e#e#e#e.8#e#e#c.8#c####.8####.8.8.9#..8#b###..8#.#..8.9.9.9.8.8.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9",
"#c.8#c#c.8#c#c.8#c.8#e#e.8.8#e#e.8#e#e#e.8#e#e.8#e#c#c.8#a#a#a.8#a#a.8#b#b#b.8#b#a##.8####.8###a#a.8#a#a#a.8#a#a.8#b#b#e.8#e#d#d.8#c#b.8.9.9.9.8.9.9.9.9.9.8.8.9.9.9.8.9.9.9#..8#.#.#..8#.#..8#.#.##.8###a#a.8#.#..8.9###c.8#c#c#c.8#c#c.8#c#c#c.8#e#e#e.8#e#d.8#b#f#f.8#g#g#g.8#g#i.8#i#i#h.8#g#g#g#g#g.8.8#e#e#e.8#f#f#f#f.8.8#g#g.8#g#g.8#f#f#f.8#f#f#f.8#f#f.8#f#f#f.8#f#e#e#e#e#g#g#g.8#g#g.8#g#g#g#g#h#i#i#i#g#g.8#g#g.8#g#f.8#f#f#f.8#g#g#g.8#g.8.8#g#g.8.8#g#g.8.8#f#f.8#b#b.8.8#e#e.8.8#e#e#e#e#e#e.8#e#e.8.8#e#e#e#e#e#e#e#e#e#e#e#e.8#e#e#c.8#c####.8####.8.8.9#..8#b###..8#.#..8.9.9.9.8.8.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8.9",
"#c.8#b#b.8#b.8.8#b.8#c#c.8#c#c#b.8#b#b#b.8#b#b.8#b#a#a.8.9.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9#..8#.#a#a.8#a#a#a.8#a#a.8#.#..9.8.9.9#a.8#b.8.8#e#e#c.8#d#d#d.8#b.8.8.9.9.9.8.9.9.9.9.8.9.9.9.8.9.9.8.9.9.9.8.9.9.9.8.9.9.8#.#.##.8#a#a#a.8#b#..8.9.9.9.8#c#c#c.8#c#e.8#e#e#e.8#e#e#d.8#b.8.8#f#f#g.8#g#h#g.8#g.8.8#g#g#g.8#g#e#e#e.8.8#g#g.8#g#g.8#f#f#f.8#e#e#e.8.8#e.8#e#e#e.8#e#g#g#g#g#g#g#g.8.8#g.8#h#h#h#h#i#g#g#g#g#g.8#g#g.8#g.8.8#g#f#f.8#f#f#f.8#b.8.8#b#b.8.8#e#e#e.8#e#e.8#e#e.8.8#c#c.8.8#c#c#c#c#c#c.8#c#c.8.8#c.8######.9.9.9#.#..8#b.8#b#b#b.8#b#a#a#a#a#a.8.8###..8.9.9.9.8.9.9.8.9.9.9.8.8.9.9.8#b#b.8#b#c#c.8#d#d#d.8#d#d.8#d#c#c.8#e#e#c.8#c#c.8#c",
".8.8#b#b.8.8.8#b#b#c.8.8.8#c#c.8.8.8.8#b#b.8.8#b#b.8.8.8.8.8.9.9.8.8.9.9.8.8.8.8.8.9.8.8.8#.#..8.8.8.8#a#a.8.8.8.8#.#..8.8.8.9#a.8.8.8#e#e.8.8.8.8#d#d.8.8.8#b.9.8.8.8.8.8.9.8.8.8.8.9.9.8.8.9.9.8.8.8.8.8.9.9.8.8#.#..8.8.8.8#a#a.8.8.8.8.9.8.8.8.8#c#c.8.8.8.8#e#e.8.8.8#e#d.8.8.8#b#f.8.8.8.8.8#g.8.8.8#g#g.8.8.8.8#e#e.8.8.8.8#g#g.8.8#g#f.8.8.8.8.8#e.8.8.8#e#e.8.8.8.8#g#g.8.8.8.8#g#g.8.8.8#h#h.8.8.8.8#g#g.8.8.8#g#g.8.8.8#g#g.8.8.8.8.8#f.8.8.8#b#b.8.8.8.8#e#e.8.8.8#e#e.8.8.8.8#c#c.8.8.8#c#c.8.8.8.8#c#c.8.8.8####.8.8.8.8#.#..8.8.8#b#b.8.8.8.8#a#a.8.8.8#a##.8.8.8.8.9.9.8.8.8.9.9.8.8.8.8.9.9.8.8#b#b.8.8.8.8.8#d#d.8.8#d#d.8.8.8.8#e#c.8.8.8.8#c",
"#b#b#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a##############.9.9.9#.#.#a#a#a#a#.#.#.#.#.#.#.#a#a#a#a#a#a#d#d#d#d#e#e#e#g#g#g#g#g#d#a#a#a#a#a.9.9.9#####a#a#b#c#c#e#e#e#c#d#d#d#d#d#c#c#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#####a#a#b#b#b#..9.9###c#c#c#c#e#e#e#e#e#e#e#e#e#d#d#b#b#f#g#g#g#g#g#i#h#h#g#g#g#g#g#e#f#f#i#i#i#g#g#g#g#f#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#g#g#g#g#h#h#i#g#g#f#f#b#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#c#c#c#c####.9.9.9#.#b#b#b#b#b#b#b#b#b#b#b#b#b#b#a#a#a#a#a#a#a###.#..9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#b#b#c#d#d#d#d#d#c#e#e#e#e#e#e#c#b#b#b#a####.9.9.9.9#.#a#a#a#a#a#a#a#a",
"#b#b#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a##############.9.9.9#.#.#a#a#a#a#.#.#.#.#.#.#.#a#a#a#a#a#a#d#d#d#d#e#e#e#g#g#g#g#g#d#a#a#a#a#a.9.9.9#####a#a#b#c#c#e#e#e#c#d#d#d#d#d#c#c#b#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#####a#a#b#b#b#..9.9###c#c#c#c#e#e#e#e#e#e#e#e#e#d#d#b#b#f#g#g#g#g#g#i#h#h#g#g#g#g#g#e#f#f#i#i#i#g#g#g#g#f#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#g#g#g#g#h#h#i#g#g#f#f#b#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#c#c#c#c####.9.9.9#.#b#b#b#b#b#b#b#b#b#b#b#b#b#b#a#a#a#a#a#a#a###.#..9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#b#b#c#d#d#d#d#d#c#e#e#e#e#e#e#c#b#b#b#a####.9.9.9.9#.#a#a#a#a#a#a#a#a",
"#c#c#b#b#b#b#a####.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#.#.#.#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#.#.#..9.9.9.9.9.9###a#a#b#c#c#c#c#c#c#c#c#e#e#e#e#e#c#d#d#d#d#d#d#c#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9###a#a#b#.#..9.9.9#####c#c#c#c#e#e#e#e#e#d#d#d#d#b#f#f#g#g#g#i#i#i#i#i#i#h#h#h#g#g#g#g#g#g#g#g#g#g#g#g#g#h#h#h#h#h#h#h#h#h#h#i#i#i#i#i#i#i#g#g#g#g#g#g#f#b#b#b#b#d#e#e#e#e#e#e#e#e#e#e#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c##.9.9.9.9#.#.#.#.#.#.#.#b#b#b#b#b#b#b#a#a#a#a#a#a#########.#.#..9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#b#b#c#d#c#c#e#e#e#e#c#b#b#b#b#b#b#a#a#a#a######.9.9.9#.#a#a#a#a#d#d#e#g#g#g#g#g#g#g#g",
"#c#c#b#b#b#b#a####.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#.#.#.#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#a#.#.#..9.9.9.9.9.9###a#a#b#c#c#c#c#c#c#c#c#e#e#e#e#e#c#d#d#d#d#d#d#c#b#b.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9###a#a#b#.#..9.9.9#####c#c#c#c#e#e#e#e#e#d#d#d#d#b#f#f#g#g#g#i#i#i#i#i#i#h#h#h#g#g#g#g#g#g#g#g#g#g#g#g#g#h#h#h#h#h#h#h#h#h#h#i#i#i#i#i#i#i#g#g#g#g#g#g#f#b#b#b#b#d#e#e#e#e#e#e#e#e#e#e#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c##.9.9.9.9#.#.#.#.#.#.#.#b#b#b#b#b#b#b#a#a#a#a#a#a#########.#.#..9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9#b#b#c#d#c#c#e#e#e#e#c#b#b#b#b#b#b#a#a#a#a######.9.9.9#.#a#a#a#a#d#d#e#g#g#g#g#g#g#g#g",
".8.8####.8.8.9.9.9.9.8.8.8####.8.8##.9.9.9.8.8.9.9.9.8.8.8.9.9.8.8.8.9.9.9.8.8.8#a#a.8.8.8#a#a.8.8.8#a#a#a.8.8.8.8#.#..8.8#.#.#..8.8.8.8#.#..8.8.8.9.9.8.8.9.9.9.9.8.8.8####.8.8#a#b#b.8.8.8#c#c#e.8.8.8#d#d.8.8.8#b#b.9.8.8.8.9.9.8.8.9.9.9.9.8.8.8#.#a.8.8.9.9###c.8.8.8#e#e.8.8#e#e#e#e.8.8.8#f#g.8.8#g#g#g#g.8.8.8#g#g.8.8.8#i#i#i.8.8#i#g.8.8.8#g#f#f.8.8.8#d#d#d.8.8.8#e#e.8.8#c#c#c#c.8.8.8#c#c.8.8#c#c#c#c.8.8.8.9.9.8.8.9.9.9#..8.8.8#.#..8.8#.#.#.#..8.8.8#.#b.8.8.8#a#a.8.8.8######.8.8.8#..9.8.8.8.9.9.9.8.8.8.9.9.8.8.9.9.9.9.8.8.8.9.9.8.8.9#b#c#c.8.8.8#c#e.8.8.8#b#a.8.8.8.9.9.9.8.8.8.9.9.8.8.8#.#.#..8.8.8#a#a.8.8.8#e#e#g.8.8.8#g#d.8.8.8#b#b",
".8.8####.8.8.9.9.9.9.8.9.8####.8.8##.9.9.9.9.9.8.9.9.8.9.8.9.9.8.8.8.9.9.9.8#..8#a#a.8.8.8#a#a.8.8.8#a#a#a.8.8.8.8#.#..8.8#.#.#..8#..8.8#.#..8.9.8.9.9.8.8.9.9.9.9.8.9.8####.8.8#a#b#b.8.8.8#c#c#e.8#e.8#d#d.8.8.8#b#b.9.8.9.8.9.9.8.8.9.9.9.8.8.9.8#.#a.8.8.9.9###c.8.8.8#e#e.8.8#e#e#e#e.8#b.8#f#g.8.8#g#g#g#g.8#g.8#g#g.8.8.8#i#i.8#i#i.8#g.8.8.8#g#f#f.8.8.8#d#d#d.8#e.8#e#e.8.8#c#c#c.8.8#c.8#c#c.8.8#c#c#c#c.8##.8.9.9.8.8.9.9.9#..8#..8#.#..8.8#.#.#.#.#.#..8#.#b.8#b.8#a#a.8.8.8######.8#..8#..9.8.8.8.9.9.8.8.9.8.9.9.8.8.9.9.9.9.8.9.8.9.9.8.8.9#b#c#c.8#d.8#c#e.8#e.8.8#a.8.8.8.9.9.9.8.9.8.8.9.8.8.8#.#.#..8#..8#a#a.8.8.8#e#e#g.8#g.8#g#d.8.8.8#b#b",
"#a.8####.9.8.9.9.9.8.9.9.8######.8##.9.9.8.9.9.8.9.8.8.9.9.8.9.9.8.8.9.9.8.8#.#.#a#a#a#a.8#a#a#a#a.8#a#a#a.8#a#a.8#.#.#..8#.#.#..8#.#..8#..8.9.9.8.9.9.9.8.9.9.9.8.9.9.8#####a.8#a#b#b#b.8.8#c#c.8.8#e#c.8#d#d.8.8#b#b.8.8.9.9.9.9.9.9.9.9.9.8.8.9.8#.#a#b#b.9.9###c.8#c.8#e#e#e.8#e#e#e.8#d#b.8.8#g#g.8#g#g#g.8#g#g.8#g#g#g.8.8#i#i.8#i#i.8#g#g#g.8#g#f#f#b#b.8#d#d.8.8#e.8#e#e#e#e#c#c#c.8.8#c.8#c#c#c#c#c#c#c#c####.8.9.9.9.8.9.9.9.8#.#..8.8#.#..8#.#.#..8#.#..8#..8.8#b#b.8#a#a.8.8####.8.8#.#.#..9.9.9.8.9.9.8.8.9.8.9.9.9.9.9.9.9.9.8.9.8.9.9.9.8.9#b#c#c#d#d.8.8#e.8#e.8.8#a#a##.8.9.9.9.8.9.9.8.9.9.8.8#.#..8.8#.#a.8#a#a.8.8#e#e.8.8#g#g#g#d#d#d.8#b#b",
"##.8.9.9.9.8.9.9.9.8.9.9.8.8####.8##.9.9.8.9.9.8.9.8.8.9.9.8.9.9.8.8.9.9.8.8.9.9#.#a#a#a.8#a#a#.#..8#..9.9.8.9.9.8#.#.#..8#.#.#..8#.#..8#..8#a#a.8#a#a#a.8#a#a#a.8#a#a.8.9.9.9.8###a#b#b.8.8#c#c.8.8#e#e.8#e#c.8.8#c#c.8.8.9.9.9.9.9.9.9.9.9.8.9.9.9.9###a#a#.#..9#c#c#c.8#e#d#d.8#d#d#d.8#b#b.8.8#b#b.8#b#b#f.8#f#f.8#f#f#f.8.8#b#b.8#b#b.8#b#b#b.8#b#b#b#d#e.8#e#e.8.8#c#c#c#c#c#c#c#c#c.8####.8################.9.9.8#.#.#..8#.#.#..8#b#b.8.8#b#b.8#b#b#b.8#b#..8#..8.8#.#..8#b#b.8.8#.#..8.8.9.9.9.9.9.9.8.9.9.8.8.9.9.9.9.9.9.9.9.9.9.9.9.8.9.9#b.8#c#d#d.8#e#e.8.8#b#a#a##.8.9.9#..8#a#a#a.8#a#a.8#a#a.8.8#d#d.8.8#d#e.8#g#g.8.8#g#g.8.8#d#b#b#b#b#b.8#g#g",
"##.8.9.9.9.8.9.9.9.8.9.9.8.8####.8##.9.9.8.9.9.8.9.8.8.9.9.8.9.9.8.8.9.9.8.8.9.9#.#a#a#a.8#a#a#.#..8#..9.9.8.9.9.8#.#.#..8#.#.#..8#.#..8#..8#a#a.8#a#a#a.8#a#a#a.8#a#a.8.9.9.9.8###a#b#b.8.8#c#c.8.8#e#e.8#e#c.8.8#c#c.8.8.9.9.9.9.9.9.9.9.9.8.8.9.8.9###a#a#.#..9#c#c#c.8#e#d#d.8#d#d#d.8#b#b.8.8#b#b.8#b#b#f.8#f#f.8#f#f#f.8.8#b#b.8#b#b.8#b#b#b.8#b#b#b#d#e.8#e#e.8.8#c#c#c#c#c#c#c#c#c.8####.8################.9.9.8#.#.#..8#.#.#..8#b#b.8.8#b#b.8#b#b#b.8#b#..8#..8.8#.#..8#b#b.8.8#.#..8.8.9.9.9.9.9.9.8.9.9.8.8.9.9.9.9.9.9.9.9.9.9.9.9.8.9.9#b.8#c#d#d.8#e#e.8.8#b.8#a.8.8.9.9#..8#a#a#a.8#a#a.8#a#a.8.8#d#d.8.8#d#e.8#g#g.8.8#g#g.8.8#d#b#b#b#b#b.8#g#g",
".9.8#.#.#a.8#a#a#a.8#a#a.8#.#..9.8.9.9.9.8.9.9.8.9.9.8.9.9.8.9##.8.8####.8.8.9.9.9#.#.#..8#.#.#.#..8#..9.9.8.9.9.8.9.9.9.8.9.9#..8#..8.8#.#.#a#a.8#a#a#a.8#a#a#a.8#a#a.8#a#a#..8#..9.9.9.8.8.9.9.8.8#a#b.8#c#e.8.8#d#d.8.8#c.8.9.9.9.9.9.9.9.8.8.9.8.9.9#####b#b.9#####c.8#e#e#e.8#e#e#e.8#e#e.8.8#e#e.8#d#d#d.8#d#e.8#e#e#e.8.8#e#e.8#e#e.8#e#e#e.8#e#e#e#c#c.8#c##.8.8#..8#.#.#b#b#b#b#b.8.8#b.8.9.9.9.9######.9.9.9.8#b#b#b.8#b#b#b.8#a#a.8.8####.8#####a.8#a#a.8#a#a.8#a#a.8####.8.8#.#..8.8.9.9.9.9.9.9.8.9.9.8.8.9.8.9.9.9.9.9.9.9.9.8.9.8#b#b#c.8#d#c#e#e#c#c.8.8.9.8.9.8.8#d#d#e.8#g#g#g.8#g#g.8#g#g.8.8#g#g.8.8#g#g.8#g#g.8.8#e#e.8.8#b#b#b#k#k#k.8#l#m"
};

View File

@ -0,0 +1,44 @@
/* XPM */
static char *phone[] = {
/* width height num_colors chars_per_pixel */
" 32 32 5 1",
/* colors */
". c #0a6464",
"# c #3ccccc",
"a c #9ee9ed",
"b c None",
"c c #c4f4ef",
/* pixels */
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bbbbbbbbb......bbbbbbbbbbbbbbbbb",
"bbbbbbb..#ccca#...bbbbbbbbbbbbbb",
"bbbbbb.#cccccccca#...bbbbbbbbbbb",
"bbbbb.#ccca###acccca#..bbbbbbbbb",
"bbbb.#ccca##c#.cccccca#..bbbbbbb",
"bbbb..cca###ca.accccccca#..bbbbb",
"bbbb.c..#..#ca.##a###cccca#.bbbb",
"bbbb.ca#.#ccca..###c#.cccca#.bbb",
"bbbbb.#.#cccccc#..#ca.ccccca#.bb",
"bbbbbb.#ca#..aacc#.ca..ccccca#.b",
"bbbbb.#c..ccc..#cccca.#.acccca#.",
"bbbb.#c#cc#.#cc#acccc#a.caccaa#.",
"bbb.#ca..c.#.c..#ccccaa.ccaa###.",
"bb.#ccaccc#.#caa.cccca..ccaa###.",
"b.#ccca..cccc..#.ccca#..ccaa###.",
".#ccccc.aa..aa#.acca##.c.caa##..",
".aaccccc.####..acca###.ca.....#.",
".aaaacccca...#acca#####.acaa###.",
".aaaaaaccccccccca######..caa##.b",
".aaaaaaaacccccca########......bb",
"..aaaaaaaaaccca##########..bbbbb",
"bb..aaaaaaaaaa#########..bbbbbbb",
"bbbb..aaaaaaa########..bbbbbbbbb",
"bbbbbb..aaaaa######..bbbbbbbbbbb",
"bbbbbbbb..aaa####..bbbbbbbbbbbbb",
"bbbbbbbbbb..a##..bbbbbbbbbbbbbbb",
"bbbbbbbbbbbb...bbbbbbbbbbbbbbbbb",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
};

397
isdnlog/client/src/Makefile Normal file
View File

@ -0,0 +1,397 @@
# Generated automatically from Makefile.in by configure.
# Makefile.in generated automatically by automake 1.2 from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# this 10 paths are KDE specific. Use them:
# kde_htmldir Where your docs should go to. (contains lang subdirs)
# kde_appsdir Where your application file (.kdelnk) should go to.
# kde_icondir Where your icon should go to.
# kde_minidir Where your mini icon should go to.
# kde_datadir Where you install application data. (Use a subdir)
# kde_locale Where translation files should go to.(contains lang subdirs)
# kde_cgidir Where cgi-bin executables should go to.
# kde_confdir Where config files should go to.
# kde_mimedir Where mimetypes should go to.
# kde_toolbardir Where general toolbar icons should go to.
# kde_wallpaperdir Where general wallpapers should go to.
# just set the variable
SHELL = /bin/sh
srcdir = .
top_srcdir = ..
prefix = /opt/kde
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
sbindir = ${exec_prefix}/sbin
libexecdir = ${exec_prefix}/libexec
datadir = ${prefix}/share
sysconfdir = ${prefix}/etc
sharedstatedir = ${prefix}/com
localstatedir = ${prefix}/var
libdir = ${exec_prefix}/lib
infodir = ${prefix}/info
mandir = ${prefix}/man
includedir = ${prefix}/include
oldincludedir = /usr/include
pkgdatadir = $(datadir)/kisdnlog
pkglibdir = $(libdir)/kisdnlog
pkgincludedir = $(includedir)/kisdnlog
top_builddir = ..
ACLOCAL = aclocal
AUTOCONF = autoconf
AUTOMAKE = automake
AUTOHEADER = autoheader
INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
transform = s,x,x,
NORMAL_INSTALL = true
PRE_INSTALL = true
POST_INSTALL = true
NORMAL_UNINSTALL = true
PRE_UNINSTALL = true
POST_UNINSTALL = true
build_alias = i586-pc-linux-gnu
build_triplet = i586-pc-linux-gnu
host_alias = i586-pc-linux-gnu
host_triplet = i586-pc-linux-gnu
target_alias = i586-pc-linux-gnu
target_triplet = i586-pc-linux-gnu
CC = gcc
CFLAGS = -g -Wall -DDEBUG
CPP = gcc -E
CXX = c++
CXXFLAGS = -g -Wall -DDEBUG
GLINC = @GLINC@
GLLIB = @GLLIB@
GMSGFMT = /usr/bin/msgfmt
KDE_INCLUDES = -I/opt/kde/include
KDE_LDFLAGS = -L/opt/kde/lib
LDFLAGS =
LIBCOMPAT =
LIBJPEG = -L${topdir} -ljpegkde
LIBOBJS = @LIBOBJS@
LIBSOCKET =
LN_S = ln -s
MAKEINFO = makeinfo
MOC = /usr/bin/moc
MSGFMT = /usr/bin/msgfmt
PACKAGE = kisdnlog
PAMINC = @PAMINC@
PAMLIBPATHS = @PAMLIBPATHS@
PAMLIBS = @PAMLIBS@
QT_INCLUDES = -I/usr/lib/qt/include
QT_LDFLAGS = -L/usr/lib
RANLIB = @RANLIB@
USE_NLS = yes
VERSION = 0.1
XGETTEXT = /usr/bin/xgettext
XPMINC = @XPMINC@
XPMLIB = @XPMLIB@
X_INCLUDES = -I/usr/X11R6/include
X_LDFLAGS = -L/usr/X11R6/lib
all_includes = -I/opt/kde/include -I../.. -I../../tools -I../../connect -I../../../lib -I/usr/lib/qt/include -I/usr/X11R6/include
all_libraries = -L/opt/kde/lib ../../connect/*.o ../../../lib/libisdn.a -L/usr/lib -L/usr/X11R6/lib
kde_appsdir = $(prefix)/share/applnk
kde_cgidir = $(prefix)/cgi-bin
kde_confdir = $(prefix)/share/config
kde_datadir = $(prefix)/share/apps
kde_htmldir = $(prefix)/share/doc/HTML
kde_icondir = $(prefix)/share/icons
kde_includes = /opt/kde/include
kde_libraries = /opt/kde/lib
kde_locale = $(prefix)/share/locale
kde_mimedir = $(prefix)/share/mimelnk
kde_minidir = $(prefix)/share/icons/mini
kde_toolbardir = $(prefix)/share/toolbar
kde_wallpaperdir = $(prefix)/share/wallpaper
qt_includes = /usr/lib/qt/include
qt_libraries = /usr/lib
topdir = /home/global/misc/develop/c/isdn4k-utils/isdnlog/client
APPSDIR = $(kde_appsdir)/Utilities
# set the include path for X, qt and KDE
INCLUDES= -I/opt/kde/include -I../.. -I../../tools -I../../connect -I../../../lib -I/usr/lib/qt/include -I/usr/X11R6/include
# claim, which subdirectories you want to install
# SUBDIRS = doc
bin_PROGRAMS = kisdnlog
kisdnlog_SOURCES = functions.cpp kcalls.cpp kcurcalls.cpp koldcalls.cpp kchan.cpp kconnect.cpp khost.cpp kisdnlog.h klogo.cpp klog.cpp klogwin.cpp kmenu.cpp kmessage.cpp ksplit.cpp kthruput.cpp main.cpp message.cpp message.h messagenr.h mkisdnlog.cpp
# the library search path
kisdnlog_LDFLAGS = -L/opt/kde/lib ../../connect/*.o ../../../lib/libisdn.a -L/usr/lib -L/usr/X11R6/lib
# the libraries to link against. Be aware of the order. First the libraries,
# that depend on the following ones.
kisdnlog_LDADD = -lkdecore -lkdeui -lqt -lX11 -lXext
# this option you can leave out. Just, if you use "make dist", you need it
noinst_HEADERS =
# just to make sure, automake makes them
BUILTSOURCES = mkisdnlog.cpp
# if you "make distclean", this files get removed. If you want to remove
# them while "make clean", use CLEANFILES
DISTCLEANFILES = $(BUILTSOURCES)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
PROGRAMS = $(bin_PROGRAMS)
DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I..
CPPFLAGS =
LIBS =
kisdnlog_OBJECTS = functions.o kcalls.o kcurcalls.o koldcalls.o kchan.o \
kconnect.o khost.o klogo.o klog.o klogwin.o kmenu.o kmessage.o ksplit.o \
kthruput.o main.o message.o mkisdnlog.o
kisdnlog_DEPENDENCIES =
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
CXXLINK = $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@
HEADERS = $(noinst_HEADERS)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
DEP_FILES = .deps/functions.P .deps/kcalls.P .deps/kchan.P \
.deps/kconnect.P .deps/kcurcalls.P .deps/khost.P .deps/klog.P \
.deps/klogo.P .deps/klogwin.P .deps/kmenu.P .deps/kmessage.P \
.deps/koldcalls.P .deps/ksplit.P .deps/kthruput.P .deps/main.P \
.deps/message.P .deps/mkisdnlog.P
CXXMKDEP = $(CXX) -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
SOURCES = $(kisdnlog_SOURCES)
OBJECTS = $(kisdnlog_OBJECTS)
default: all
.SUFFIXES:
.SUFFIXES: .c .cpp .o
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
mostlyclean-binPROGRAMS:
clean-binPROGRAMS:
test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
distclean-binPROGRAMS:
maintainer-clean-binPROGRAMS:
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
echo " $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`"; \
$(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
else :; fi; \
done
uninstall-binPROGRAMS:
$(NORMAL_UNINSTALL)
list='$(bin_PROGRAMS)'; for p in $$list; do \
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
done
.c.o:
$(COMPILE) -c $<
mostlyclean-compile:
rm -f *.o core
clean-compile:
distclean-compile:
rm -f *.tab.c
maintainer-clean-compile:
kisdnlog: $(kisdnlog_OBJECTS) $(kisdnlog_DEPENDENCIES)
@rm -f kisdnlog
$(CXXLINK) $(kisdnlog_LDFLAGS) $(kisdnlog_OBJECTS) $(kisdnlog_LDADD) $(LIBS)
.cpp.o:
$(CXXCOMPILE) -c $<
tags: TAGS
ID: $(HEADERS) $(SOURCES)
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
tags=; \
here=`pwd`; \
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$$tags" \
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) -o $$here/TAGS)
mostlyclean-tags:
clean-tags:
distclean-tags:
rm -f TAGS ID
maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = src
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
done
MKDEP = gcc -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include .deps/.P
.deps/.P: $(BUILT_SOURCES)
echo > $@
-include $(DEP_FILES)
mostlyclean-depend:
clean-depend:
distclean-depend:
maintainer-clean-depend:
rm -rf .deps
.deps/%.P: %.c
@echo "Computing dependencies for $<..."
@o='o'; \
test -n "$o" && o='$$o'; \
$(MKDEP) $< >$@.tmp \
&& sed "s,^\(.*\)\.o:,\1.$$o \1.l$$o $@:," < $@.tmp > $@ \
&& rm -f $@.tmp
.deps/%.P: %.cpp
@echo "Computing dependencies for $<..."
@o='o'; \
$(CXXMKDEP) $< >$@.tmp \
&& sed "s,^\(.*\)\.o:,\1.$$o \1.l$$o $@:," < $@.tmp > $@ \
&& rm -f $@.tmp
info:
dvi:
check: all
$(MAKE)
installcheck:
install-exec: install-binPROGRAMS
@$(NORMAL_INSTALL)
install-data: install-data-local
@$(NORMAL_INSTALL)
install: install-exec install-data all
@:
uninstall: uninstall-binPROGRAMS uninstall-local
all: Makefile $(PROGRAMS) $(HEADERS)
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
installdirs:
$(mkinstalldirs) $(bindir)
mostlyclean-generic:
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
rm -f Makefile $(DISTCLEANFILES)
rm -f config.cache config.log stamp-h stamp-h[0-9]*
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
mostlyclean-tags mostlyclean-depend mostlyclean-generic
clean: clean-binPROGRAMS clean-compile clean-tags clean-depend \
clean-generic mostlyclean
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
distclean-depend distclean-generic clean
rm -f config.status
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
.PHONY: default mostlyclean-binPROGRAMS distclean-binPROGRAMS \
clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
distclean-depend clean-depend maintainer-clean-depend info dvi \
installcheck install-exec install-data install uninstall all \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# make messages.po. Move this one to ../po/ and "make merge" in po
messages:
$(XGETTEXT) -C -ktranslate $(kisdnlog_SOURCES)
# just install datas here. Use install-exec-data for scripts and etc.
# the binary itself is already installed from automake
# use mkinstalldirs, not "install -d"
# don't install a list of file. Just one file per install.
# if you have more of them, create a subdirectory with an extra Makefile
install-data-local:
$(mkinstalldirs) $(APPSDIR)
$(INSTALL_DATA) Kisdnlog.kdelnk $(APPSDIR)
# remove ALL you have installed in install-data-local or install-exec-local
uninstall-local:
-rm -f $(APPSDIR)/Kisdnlog.kdelnk
# add a dependency for every moc file to be full portable
# I've added a key binding to emacs for this.
mkisdnlog.cpp: kisdnlog.h
$(MOC) kisdnlog.h -o mkisdnlog.cpp
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,63 @@
# this 10 paths are KDE specific. Use them:
# kde_htmldir Where your docs should go to. (contains lang subdirs)
# kde_appsdir Where your application file (.kdelnk) should go to.
# kde_icondir Where your icon should go to.
# kde_minidir Where your mini icon should go to.
# kde_datadir Where you install application data. (Use a subdir)
# kde_locale Where translation files should go to.(contains lang subdirs)
# kde_cgidir Where cgi-bin executables should go to.
# kde_confdir Where config files should go to.
# kde_mimedir Where mimetypes should go to.
# kde_toolbardir Where general toolbar icons should go to.
# kde_wallpaperdir Where general wallpapers should go to.
# just set the variable
APPSDIR = $(kde_appsdir)/Utilities
# set the include path for X, qt and KDE
INCLUDES= @all_includes@
# claim, which subdirectories you want to install
# SUBDIRS = doc
bin_PROGRAMS = kisdnlog
kisdnlog_SOURCES = functions.cpp kcalls.cpp kcurcalls.cpp koldcalls.cpp kchan.cpp kconnect.cpp khost.cpp kisdnlog.h klogo.cpp klog.cpp klogwin.cpp kmenu.cpp kmessage.cpp ksplit.cpp kthruput.cpp main.cpp message.cpp message.h messagenr.h mkisdnlog.cpp
# the library search path
kisdnlog_LDFLAGS = @all_libraries@
# the libraries to link against. Be aware of the order. First the libraries,
# that depend on the following ones.
kisdnlog_LDADD = -lkdecore -lkdeui -lqt -lX11 -lXext @LIBSOCKET@
# this option you can leave out. Just, if you use "make dist", you need it
noinst_HEADERS =
# just to make sure, automake makes them
BUILTSOURCES = mkisdnlog.cpp
# if you "make distclean", this files get removed. If you want to remove
# them while "make clean", use CLEANFILES
DISTCLEANFILES = $(BUILTSOURCES)
# make messages.po. Move this one to ../po/ and "make merge" in po
messages:
$(XGETTEXT) -C -ktranslate $(kisdnlog_SOURCES)
# just install datas here. Use install-exec-data for scripts and etc.
# the binary itself is already installed from automake
# use mkinstalldirs, not "install -d"
# don't install a list of file. Just one file per install.
# if you have more of them, create a subdirectory with an extra Makefile
install-data-local:
$(mkinstalldirs) $(APPSDIR)
$(INSTALL_DATA) Kisdnlog.kdelnk $(APPSDIR)
# remove ALL you have installed in install-data-local or install-exec-local
uninstall-local:
-rm -f $(APPSDIR)/Kisdnlog.kdelnk
# add a dependency for every moc file to be full portable
# I've added a key binding to emacs for this.
mkisdnlog.cpp: kisdnlog.h
$(MOC) kisdnlog.h -o mkisdnlog.cpp

View File

@ -0,0 +1,397 @@
# Makefile.in generated automatically by automake 1.2 from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# this 10 paths are KDE specific. Use them:
# kde_htmldir Where your docs should go to. (contains lang subdirs)
# kde_appsdir Where your application file (.kdelnk) should go to.
# kde_icondir Where your icon should go to.
# kde_minidir Where your mini icon should go to.
# kde_datadir Where you install application data. (Use a subdir)
# kde_locale Where translation files should go to.(contains lang subdirs)
# kde_cgidir Where cgi-bin executables should go to.
# kde_confdir Where config files should go to.
# kde_mimedir Where mimetypes should go to.
# kde_toolbardir Where general toolbar icons should go to.
# kde_wallpaperdir Where general wallpapers should go to.
# just set the variable
SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = true
PRE_INSTALL = true
POST_INSTALL = true
NORMAL_UNINSTALL = true
PRE_UNINSTALL = true
POST_UNINSTALL = true
build_alias = @build_alias@
build_triplet = @build@
host_alias = @host_alias@
host_triplet = @host@
target_alias = @target_alias@
target_triplet = @target@
CC = @CC@
CFLAGS = @CFLAGS@
CPP = @CPP@
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
GLINC = @GLINC@
GLLIB = @GLLIB@
GMSGFMT = @GMSGFMT@
KDE_INCLUDES = @KDE_INCLUDES@
KDE_LDFLAGS = @KDE_LDFLAGS@
LDFLAGS = @LDFLAGS@
LIBCOMPAT = @LIBCOMPAT@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBSOCKET = @LIBSOCKET@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
MOC = @MOC@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
PAMINC = @PAMINC@
PAMLIBPATHS = @PAMLIBPATHS@
PAMLIBS = @PAMLIBS@
QT_INCLUDES = @QT_INCLUDES@
QT_LDFLAGS = @QT_LDFLAGS@
RANLIB = @RANLIB@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XPMINC = @XPMINC@
XPMLIB = @XPMLIB@
X_INCLUDES = @X_INCLUDES@
X_LDFLAGS = @X_LDFLAGS@
all_includes = @all_includes@
all_libraries = @all_libraries@
kde_appsdir = @kde_appsdir@
kde_cgidir = @kde_cgidir@
kde_confdir = @kde_confdir@
kde_datadir = @kde_datadir@
kde_htmldir = @kde_htmldir@
kde_icondir = @kde_icondir@
kde_includes = @kde_includes@
kde_libraries = @kde_libraries@
kde_locale = @kde_locale@
kde_mimedir = @kde_mimedir@
kde_minidir = @kde_minidir@
kde_toolbardir = @kde_toolbardir@
kde_wallpaperdir = @kde_wallpaperdir@
qt_includes = @qt_includes@
qt_libraries = @qt_libraries@
topdir = @topdir@
APPSDIR = $(kde_appsdir)/Utilities
# set the include path for X, qt and KDE
INCLUDES= @all_includes@
# claim, which subdirectories you want to install
# SUBDIRS = doc
bin_PROGRAMS = kisdnlog
kisdnlog_SOURCES = functions.cpp kcalls.cpp kcurcalls.cpp koldcalls.cpp kchan.cpp kconnect.cpp khost.cpp kisdnlog.h klogo.cpp klog.cpp klogwin.cpp kmenu.cpp kmessage.cpp ksplit.cpp kthruput.cpp main.cpp message.cpp message.h messagenr.h mkisdnlog.cpp
# the library search path
kisdnlog_LDFLAGS = @all_libraries@
# the libraries to link against. Be aware of the order. First the libraries,
# that depend on the following ones.
kisdnlog_LDADD = -lkdecore -lkdeui -lqt -lX11 -lXext @LIBSOCKET@
# this option you can leave out. Just, if you use "make dist", you need it
noinst_HEADERS =
# just to make sure, automake makes them
BUILTSOURCES = mkisdnlog.cpp
# if you "make distclean", this files get removed. If you want to remove
# them while "make clean", use CLEANFILES
DISTCLEANFILES = $(BUILTSOURCES)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
PROGRAMS = $(bin_PROGRAMS)
DEFS = @DEFS@ -I. -I$(srcdir) -I..
CPPFLAGS = @CPPFLAGS@
LIBS = @LIBS@
kisdnlog_OBJECTS = functions.o kcalls.o kcurcalls.o koldcalls.o kchan.o \
kconnect.o khost.o klogo.o klog.o klogwin.o kmenu.o kmessage.o ksplit.o \
kthruput.o main.o message.o mkisdnlog.o
kisdnlog_DEPENDENCIES =
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
CXXLINK = $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@
HEADERS = $(noinst_HEADERS)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
DEP_FILES = .deps/functions.P .deps/kcalls.P .deps/kchan.P \
.deps/kconnect.P .deps/kcurcalls.P .deps/khost.P .deps/klog.P \
.deps/klogo.P .deps/klogwin.P .deps/kmenu.P .deps/kmessage.P \
.deps/koldcalls.P .deps/ksplit.P .deps/kthruput.P .deps/main.P \
.deps/message.P .deps/mkisdnlog.P
CXXMKDEP = $(CXX) -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
SOURCES = $(kisdnlog_SOURCES)
OBJECTS = $(kisdnlog_OBJECTS)
default: all
.SUFFIXES:
.SUFFIXES: .c .cpp .o
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
mostlyclean-binPROGRAMS:
clean-binPROGRAMS:
test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
distclean-binPROGRAMS:
maintainer-clean-binPROGRAMS:
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
echo " $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`"; \
$(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
else :; fi; \
done
uninstall-binPROGRAMS:
$(NORMAL_UNINSTALL)
list='$(bin_PROGRAMS)'; for p in $$list; do \
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
done
.c.o:
$(COMPILE) -c $<
mostlyclean-compile:
rm -f *.o core
clean-compile:
distclean-compile:
rm -f *.tab.c
maintainer-clean-compile:
kisdnlog: $(kisdnlog_OBJECTS) $(kisdnlog_DEPENDENCIES)
@rm -f kisdnlog
$(CXXLINK) $(kisdnlog_LDFLAGS) $(kisdnlog_OBJECTS) $(kisdnlog_LDADD) $(LIBS)
.cpp.o:
$(CXXCOMPILE) -c $<
tags: TAGS
ID: $(HEADERS) $(SOURCES)
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
tags=; \
here=`pwd`; \
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$$tags" \
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) -o $$here/TAGS)
mostlyclean-tags:
clean-tags:
distclean-tags:
rm -f TAGS ID
maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = src
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
done
MKDEP = gcc -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include .deps/.P
.deps/.P: $(BUILT_SOURCES)
echo > $@
-include $(DEP_FILES)
mostlyclean-depend:
clean-depend:
distclean-depend:
maintainer-clean-depend:
rm -rf .deps
.deps/%.P: %.c
@echo "Computing dependencies for $<..."
@o='o'; \
test -n "$o" && o='$$o'; \
$(MKDEP) $< >$@.tmp \
&& sed "s,^\(.*\)\.o:,\1.$$o \1.l$$o $@:," < $@.tmp > $@ \
&& rm -f $@.tmp
.deps/%.P: %.cpp
@echo "Computing dependencies for $<..."
@o='o'; \
$(CXXMKDEP) $< >$@.tmp \
&& sed "s,^\(.*\)\.o:,\1.$$o \1.l$$o $@:," < $@.tmp > $@ \
&& rm -f $@.tmp
info:
dvi:
check: all
$(MAKE)
installcheck:
install-exec: install-binPROGRAMS
@$(NORMAL_INSTALL)
install-data: install-data-local
@$(NORMAL_INSTALL)
install: install-exec install-data all
@:
uninstall: uninstall-binPROGRAMS uninstall-local
all: Makefile $(PROGRAMS) $(HEADERS)
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
installdirs:
$(mkinstalldirs) $(bindir)
mostlyclean-generic:
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
rm -f Makefile $(DISTCLEANFILES)
rm -f config.cache config.log stamp-h stamp-h[0-9]*
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
mostlyclean-tags mostlyclean-depend mostlyclean-generic
clean: clean-binPROGRAMS clean-compile clean-tags clean-depend \
clean-generic mostlyclean
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
distclean-depend distclean-generic clean
rm -f config.status
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
.PHONY: default mostlyclean-binPROGRAMS distclean-binPROGRAMS \
clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
distclean-depend clean-depend maintainer-clean-depend info dvi \
installcheck install-exec install-data install uninstall all \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# make messages.po. Move this one to ../po/ and "make merge" in po
messages:
$(XGETTEXT) -C -ktranslate $(kisdnlog_SOURCES)
# just install datas here. Use install-exec-data for scripts and etc.
# the binary itself is already installed from automake
# use mkinstalldirs, not "install -d"
# don't install a list of file. Just one file per install.
# if you have more of them, create a subdirectory with an extra Makefile
install-data-local:
$(mkinstalldirs) $(APPSDIR)
$(INSTALL_DATA) Kisdnlog.kdelnk $(APPSDIR)
# remove ALL you have installed in install-data-local or install-exec-local
uninstall-local:
-rm -f $(APPSDIR)/Kisdnlog.kdelnk
# add a dependency for every moc file to be full portable
# I've added a key binding to emacs for this.
mkisdnlog.cpp: kisdnlog.h
$(MOC) kisdnlog.h -o mkisdnlog.cpp
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,73 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <string.h>
#define _FUNCTIONS_CPP_
#include "kisdnlog.h"
/****************************************************************************/
#define MAX_STRINGS 1
/****************************************************************************/
const char *Byte2Str(double Bytes, int flag)
{
static char string[MAX_STRINGS][20];
static int num = 0;
int factor = 1;
char prefix = ' ';
num = (num+1)%MAX_STRINGS;
if (Bytes >= 9999999999.0)
{
factor = 1073741824;
prefix = 'G';
}
else
if (Bytes >= 9999999)
{
factor = 1048576;
prefix = 'M';
}
else
if (Bytes >= 9999)
{
factor = 1024;
prefix = 'k';
}
sprintf(string[num], "%s %0.*f %cB%s",
flag&NO_DIR?"":(flag&OUT_DATA?"Out":"In"),
((flag&GET_BPS)||prefix!=' ')?2:0, Bytes/factor, prefix, flag&GET_BPS?"/s":"");
return string[num];
}
/****************************************************************************/

View File

@ -0,0 +1,257 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <qtimer.h>
#include <qtablevw.h>
#include <qpainter.h>
#include "kisdnlog.h"
/****************************************************************************/
KCalls::KCalls(KConnection *newmainwin, QWidget *newframe) : KTabListBox(newframe)
{
mainwin = newmainwin;
frame = newframe;
setNumCols(CALLS_COLS);
setNumRows(0);
SetHeader();
}
/****************************************************************************/
KCalls::~KCalls()
{
}
/****************************************************************************/
bool KCalls::SetLine(int Line, const CALL *Info)
{
int i = 0;
changeItemPart(statetoa(Info->stat), Line, i++);
changeItemPart(directiontoa(Info->dialin), Line, i++);
changeItemPart(emptytoa(Info->num[_ME(Info)]), Line, i++);
changeItemPart(emptytoa(Info->alias[_ME(Info)]), Line, i++);
changeItemPart(emptytoa(Info->num[_OTHER(Info)]), Line, i++);
changeItemPart(emptytoa(Info->vorwahl[_OTHER(Info)]), Line, i++);
changeItemPart(emptytoa(Info->rufnummer[_OTHER(Info)]), Line, i++);
changeItemPart(emptytoa(Info->alias[_OTHER(Info)]), Line, i++);
changeItemPart(emptytoa(Info->area[_OTHER(Info)]), Line, i++);
changeItemPart(timetoa(Info->connect), Line, i++);
changeItemPart(durationtoa(Info->t_duration), Line, i++);
changeItemPart(MsgHdl::ltoa(Info->aoce), Line, i++);
changeItemPart(Info->money, Line, i++);
changeItemPart(Info->currency, Line, i++);
changeItemPart(Byte2Str((double) Info->ibytes, NO_DIR), Line, i++);
changeItemPart(Byte2Str((double) Info->obytes, NO_DIR), Line, i++);
changeItemPart(Byte2Str(Info->ibps, GET_BPS|NO_DIR), Line, i++);
changeItemPart(Byte2Str(Info->obps, GET_BPS|NO_DIR), Line, i++);
changeItemPart(Info->msg, Line, i++);
return TRUE;
}
/****************************************************************************/
bool KCalls::SetHeader(void)
{
int cnt = 0;
WriteHeader(klocale->translate("Status"),cnt++);
WriteHeader(klocale->translate("Direction"),cnt++);
WriteHeader(klocale->translate("My Number"),cnt++);
WriteHeader(klocale->translate("My Alias"),cnt++);
WriteHeader(klocale->translate("Full Number"),cnt++);
WriteHeader(klocale->translate("Areacode"),cnt++);
WriteHeader(klocale->translate("Other Number"),cnt++);
WriteHeader(klocale->translate("Other Alias"),cnt++);
WriteHeader(klocale->translate("Area"),cnt++);
WriteHeader(klocale->translate("Connecting time"),cnt++);
WriteHeader(klocale->translate("Duration"),cnt++);
WriteHeader(klocale->translate("Units"),cnt++);
WriteHeader(klocale->translate("Fee"),cnt++);
WriteHeader(klocale->translate("Currency"),cnt++);
WriteHeader(klocale->translate("Bytes in"),cnt++);
WriteHeader(klocale->translate("Bytes out"),cnt++);
WriteHeader(klocale->translate("Bps in"),cnt++);
WriteHeader(klocale->translate("Bps out"),cnt++);
WriteHeader(klocale->translate("Message"),cnt++);
if (cnt != PROT_ELEMENTS-1)
{
Messager->HandleMessage(TRUE,KI_INVALID_ELEMS,0,(2,MsgHdl::ltoa(cnt),MsgHdl::ltoa(PROT_ELEMENTS)));
return FALSE;
}
return TRUE;
}
/****************************************************************************/
bool KCalls::WriteHeader(const char *entry, int index)
{
if (index < 0 || index >= numCols() || entry == NULL)
return FALSE;
setColumn(index, entry, (strlen(entry)+1) * 10, TextColumn);
return TRUE;
}
/****************************************************************************/
const char *KCalls::timetoa(time_t Time)
{
static char RetCode[25];
struct tm *tm;
tm = localtime(&Time);
strftime(RetCode,25,"%X %x",tm);
return RetCode;
}
/****************************************************************************/
const char *KCalls::durationtoa(time_t Time)
{
static char RetCode[16];
struct tm *tm;
tm = gmtime(&Time);
strftime(RetCode,16,"%X",tm);
return RetCode;
}
/****************************************************************************/
const char *KCalls::directiontoa(int dir)
{
if (dir == DIALOUT)
return klocale->translate("dial out");
return klocale->translate("dial in");
}
/****************************************************************************/
const char *KCalls::emptytoa(const char *string)
{
return (string == NULL || string[0] == '\0'?klocale->translate("Unknown"):string);
}
/****************************************************************************/
const char *KCalls::statetoa(int state)
{
const char *RetCode;
switch (state)
{
case STATE_CONNECT:
RetCode = klocale->translate("connected");
break;
case STATE_BYTE:
RetCode = klocale->translate("got thruput");
break;
case STATE_AOCD:
RetCode = klocale->translate("got AOCD");
break;
case STATE_TIME:
RetCode = klocale->translate("got time");
break;
case STATE_RING:
RetCode = klocale->translate("ringing");
break;
case STATE_CAUSE:
RetCode = klocale->translate("got message");
break;
case STATE_HANGUP:
RetCode = klocale->translate("hangup");
break;
default:
RetCode = klocale->translate("unknown state");
break;
}
return RetCode;
}
/****************************************************************************/
bool KCalls::WriteConfig(const char *EntName)
{
int i;
char s[BUFSIZ] = "";
KConfig *config = ((KConnection*) topLevelWidget())->GetConfig();
if (config == NULL)
return FALSE;
for (i = 0; i < numCols(); i++)
{
strcat(s,MsgHdl::ltoa(columnWidth(i)));
strcat(s,",");
}
config->setGroup(KI_SEC_GLOBAL);
config->writeEntry(EntName,s);
return TRUE;
}
/****************************************************************************/
bool KCalls::ReadConfig(const char *EntName)
{
KConfig *config = ((KConnection*) topLevelWidget())->GetConfig();
QStrList List;
char *elem;
int i = 0;
if (config == NULL)
return FALSE;
config->setGroup(KI_SEC_GLOBAL);
config->readListEntry(EntName,List);
if ((elem = List.first()) != NULL)
do
{
setColumnWidth(i++,atoi(elem));
}
while((elem = List.next()) != NULL);
return TRUE;
}
/****************************************************************************/

View File

@ -0,0 +1,211 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <string.h>
#include <qtimer.h>
#include "kisdnlog.h"
/****************************************************************************/
KChannel::KChannel(KConnection* newmainwin, QWidget *newframe, int Scale) : QFrame(newframe)
{
mainwin = newmainwin;
frame = newframe;
Timer = NULL;
setFixedSize(CHAN_X,CHAN_Y);
//setFrameStyle(QFrame::WinPanel | QFrame::Raised);
thru = new KThruput(newmainwin,this,Scale);
thru->move(BORDER_SIZE/2,BORDER_SIZE/2);
}
/****************************************************************************/
KChannel::~KChannel()
{
}
/****************************************************************************/
void KChannel::paintEvent(QPaintEvent*)
{
int dir;
int x;
int y = 0;
int old_y;
QFont Font;
QColor Color = QColor(255,255,255);
QPainter Painter;
Font.setPointSize((int) (Font.pointSize()*1.0));
Painter.begin(this);
Painter.setFont(Font);
x = thru->x()+thru->width()+5;
y = BORDER_SIZE/2 + Font.pointSize();
Painter.setPen(Color);
Painter.drawText(x, y, klocale->translate("Max"));
for (dir=0; dir < 2; dir++)
{
y += Font.pointSize() + 3;
Painter.setPen(thru->GetColor(dir));
Painter.drawText(x+3, y, Byte2Str(thru->GetMaxRate(dir),GET_BPS|dir));
}
y += Font.pointSize() + 5;
Painter.setPen(Color);
Painter.drawText(x, y, klocale->translate("Average"));
for (dir=0; dir < 2; dir++)
{
y += Font.pointSize() + 3;
Painter.setPen(thru->GetColor(dir));
Painter.drawText(x+3, y, Byte2Str(thru->GetRate(dir,KThruput::ALL_AVERAGE),GET_BPS|dir));
}
old_y = y += Font.pointSize() + 5;
Painter.setPen(Color);
Painter.drawText(x, y, klocale->translate("Current"));
for (dir=0; dir < 2; dir++)
{
y += Font.pointSize() + 3;
Painter.setPen(thru->GetColor(dir));
Painter.drawText(x+3, y, Byte2Str(thru->GetRate(dir,KThruput::CUR_AVERAGE),GET_BPS|dir));
}
y = old_y;
x = thru->x() + 5;
Painter.setPen(Color);
Painter.drawText(x, y, klocale->translate("Traffic"));
for (dir=0; dir < 2; dir++)
{
y += Font.pointSize() + 3;
Painter.setPen(thru->GetColor(dir));
Painter.drawText(x+3, y, Byte2Str((double)thru->GetTraffic(dir),dir));
}
drawFrame(&Painter);
Painter.end();
}
/****************************************************************************/
bool KChannel::AddValue(int duration, unsigned long in, unsigned long out)
{
thru->AddValue(duration,in,out);
repaint();
return TRUE;
}
/****************************************************************************/
bool KChannel::SetTimeScale(int value)
{
thru->SetTimeScale(value);
return TRUE;
}
/****************************************************************************/
double KChannel::GetRate(int dir, int index)
{
thru->GetRate(dir, index);
return TRUE;
}
/****************************************************************************/
double KChannel::GetMinRate(int dir)
{
thru->GetMinRate(dir);
return TRUE;
}
/****************************************************************************/
double KChannel::GetMaxRate(int dir)
{
thru->GetMaxRate(dir);
return TRUE;
}
/****************************************************************************/
bool KChannel::StartConnection()
{
DeleteConnection();
thru->StartConnection();
repaint();
return TRUE;
}
/****************************************************************************/
bool KChannel::StopConnection()
{
Timer = new QTimer(this);
Timer->start(THRU_TIMEOUT * KTIMERSEC, TRUE);
QObject::connect(Timer, SIGNAL(timeout()), SLOT(DeleteConnection()));
thru->StopConnection();
repaint();
return TRUE;
}
/****************************************************************************/
const char *KChannel::DeleteConnection()
{
if (Timer != NULL)
{
Timer->stop();
delete Timer;
Timer = NULL;
}
thru->DeleteConnection();
repaint();
return NULL;
}
/****************************************************************************/

View File

@ -0,0 +1,969 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <pwd.h>
#include <sys/types.h>
#include <qframe.h>
#include <qdialog.h>
#include <stream.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include "kisdnlog.h"
#include <errno.h>
/****************************************************************************/
int KConnection::logVisible = FALSE;
int KConnection::ConnectionNr = 0;
bool KConnection::Restore = FALSE;
KConfig *KConnection::config = NULL;
QString KConnection::CurDir;
QList<KConnection> KConnection::ConnectList;
/****************************************************************************/
KConnection::KConnection(KApplication *newapp, const char *NewHost, const char *NewPort)
: KTopLevelWidget()
{
app = newapp;
ConnectList.append(this);
if (++ConnectionNr == 1)
{
app->setTopWidget(this);
config = app->getConfig();
ReadConfig();
}
channels = 0;
socket = NULL;
server = NULL;
SetHost(NewHost);
SetPort(NewPort);
ActiveRect = geometry();
sn = NULL;
chanwin = NULL;
channr = NULL;
curcalls = NULL;
oldcalls = NULL;
logwin = NULL;
split1 = NULL;
outwin = NULL;
menu = NULL;
logo = NULL;
// config = this.getConfig();
menu = new KMenu(this,logVisible);
setMenu(menu);
menu->Connect(FALSE);
SetLogo();
}
/****************************************************************************/
KConnection::~KConnection()
{
DestroyLogs();
delete menu;
if (logo != NULL)
delete logo;
ConnectList.removeRef(this);
if (--ConnectionNr > 0)
{
if (app->topWidget() == this && ConnectList.first() != NULL)
app->setTopWidget(ConnectList.first());
}
printf("Closed Window: %d\n", ConnectionNr);
}
/****************************************************************************/
void KConnection::Quit()
{
printf("Quit\n");
WriteConfig();
emit quit();
qApp->exit(0);
}
/****************************************************************************/
bool KConnection::NewConnect()
{
if (ConnectionNr == 1 && socket == NULL)
{
/* I am the only window and have no connection */
if (WinConnect())
show();
else
return FALSE;
}
else
{
KConnection *conn = new KConnection(app);
if (conn->WinConnect())
conn->show();
else
{
delete conn;
return FALSE;
}
}
return TRUE;
}
/****************************************************************************/
bool KConnection::WinConnect()
{
int sock;
KHost hostwin = KHost(this);
if (socket != NULL)
return FALSE;
hostwin.setCaption(klocale->translate("Connect to server"));
do
{
sock = -1;
if (hostwin.exec() == FALSE)
return FALSE;
if (server == NULL || *server == '\0')
Messager->HandleMessage(TRUE,KI_NO_HOST,0,(0));
else
if ((sock = client_connect(server, port)) < 0)
Messager->HandleMessage(TRUE,KI_NO_CONNECT,errno,(2,server,MsgHdl::ltoa(port)));
}
while(server == NULL || sock < 0);
return Connect(sock);
}
/****************************************************************************/
bool KConnection::ReConnect()
{
if (socket != NULL)
{
DestroyLogs();
SetLogo();
SwitchContents();
}
return WinConnect();
}
/****************************************************************************/
bool KConnection::Connect()
{
return Connect(NOT_CONNECTED);
}
/****************************************************************************/
bool KConnection::Connect(int sock)
{
struct passwd *pw;
if (socket != NULL)
return FALSE;
if (sock < 0)
{
if (server != NULL)
{
if ((sock = client_connect(server, port)) < 0)
{
Messager->HandleMessage(TRUE,KI_NO_CONNECT,errno,(2,server,MsgHdl::ltoa(port)));
return FALSE;
}
}
else
{
Messager->HandleMessage(TRUE,KI_NO_HOST,0,(0));
return FALSE;
}
}
if ((pw = getpwuid(getuid())) == NULL)
{
Messager->HandleMessage(TRUE,KI_NOBODY,0,(0));
return FALSE;
}
if (add_socket (&socket, sock))
Messager->HandleMessage(TRUE,KI_OUT_OF_MEMORY,0,(0));
socket->msg = MSG_ANNOUNCE;
msgcpy (socket, pw->pw_name, strlen (pw->pw_name) + 1);
Write (socket);
socket->waitstatus = WF_ACC;
sn = new QSocketNotifier( sock, QSocketNotifier::Read, this);
QObject::connect( sn, SIGNAL(activated(int)), SLOT(eval_message()) );
// The next line is only a hack
channels = 2;
CreateLogs();
return TRUE;
}
/****************************************************************************/
bool KConnection::SwitchContents()
{
// The next 2 lines are only a hack
QWidget::hide();
QWidget::show();
return TRUE;
}
/****************************************************************************/
bool KConnection::Disconnect()
{
if (socket != NULL)
{
DestroyLogs();
if (ConnectionNr == 1)
{
SetLogo();
SwitchContents();
}
else
close();
}
else
close();
return TRUE;
}
/****************************************************************************/
bool KConnection::CreateLogs()
{
int i;
chanwin = new KChannel[channels](this,this);
channr = new int[channels];
QString Message;
Message = KISDNLOG_NAME;
Message += klocale->translate(": Connected to isdnlog on ");
Message += server;
setCaption(Message);
for (i = 0; i < channels; i++)
channr[i] = NO_CHAN;
outwin = new QFrame(this);
outwin->resize(size());
outwin->setFrameStyle(QFrame::WinPanel | QFrame::Raised);
split1 = new KSplit(this,outwin,KNewPanner::Horizontal,KNewPanner::Absolute,100);
curcalls = new KCurCalls(this,split1);
oldcalls = new KOldCalls(this,split1);
logwin = new KLogWin(this);
Message = KISDNLOG_NAME;
Message += klocale->translate(": Log from isdnlog on ");
Message += server;
logwin->setCaption(Message);
QObject::connect(logwin,SIGNAL(destroyed()),SLOT(DestroyLogWin()));
ShowLogWin();
split1->activate(curcalls,oldcalls);
if (qApp->desktop())
setMaximumSize(qApp->desktop()->size());
setMinimumWidth(channels * CHAN_X + 2 * BORDER_SIZE);
setMinimumHeight(CHAN_Y + menu->height());
if (ActiveRect.isValid())
setGeometry(ActiveRect);
menu->Connect(TRUE);
if (logo != NULL)
{
delete logo;
logo = NULL;
SwitchContents();
}
else
repaint();
return TRUE;
}
/****************************************************************************/
bool KConnection::DestroyLogs()
{
if (socket == NULL)
return FALSE;
delete sn;
sn = NULL;
channels = 0;
delete[] chanwin;
delete[] channr;
chanwin = NULL;
channr = NULL;
delete curcalls;
delete oldcalls;
delete logwin;
delete split1;
delete outwin;
curcalls = NULL;
oldcalls = NULL;
split1 = NULL;
outwin = NULL;
::close(socket->descriptor);
del_socket(&socket,0);
SetHost(NULL);
menu->Connect(FALSE);
return TRUE;
}
/****************************************************************************/
bool KConnection::SetLogo()
{
QString Message;
if (logo != NULL)
return FALSE;
logo = new KLogo(this,LOGO_XPM);
Message = KISDNLOG_NAME;
Message += klocale->translate(": Not connected");
setCaption(Message);
ActiveRect = geometry();
if (Restore == FALSE)
SetLogoSize();
return TRUE;
}
/****************************************************************************/
void KConnection::SetLogoSize()
{
if (logo != NULL)
{
setFixedWidth(logo->width());
setFixedHeight(logo->height() + menu->height());
}
}
/****************************************************************************/
bool KConnection::close(bool)
{
printf("close\n");
if (ConnectionNr == 1)
Quit();
else
return QWidget::close(TRUE);
return TRUE;
}
/****************************************************************************/
void KConnection::show()
{
QWidget::show();
//logwin->setFocus();
//split1->setFocus();
}
/****************************************************************************/
bool KConnection::ShowLogWin()
{
if (logwin != NULL)
if (menu->IsLogShowed() == TRUE)
logwin->show();
else
logwin->hide();
return TRUE;
}
/****************************************************************************/
void KConnection::DestroyLogWin()
{
printf("LogWin destroyed\n");
logwin = NULL;
}
/****************************************************************************/
void KConnection::HideLogWin()
{
menu->SetLogShowed(FALSE);
}
/****************************************************************************/
bool KConnection::SetLogWin()
{
menu->SetLogShowed(!menu->IsLogShowed());
return ShowLogWin();
}
/****************************************************************************/
bool KConnection::SaveLogFile()
{
if (logwin != NULL)
logwin->SaveToFile();
return TRUE;
}
/****************************************************************************/
bool KConnection::StartApp(KApplication *app)
{
KConnection *conn;
if (app->isRestored())
{
int i = 0;
Restore = TRUE;
while (KTopLevelWidget::canBeRestored(++i))
{
if (!strcmp(KTopLevelWidget::classNameOfToplevel(i),"KConnection"))
{
if ((conn = new KConnection(app)) != NULL)
conn->restore(i);
}
}
Restore = FALSE;
}
if (ConnectionNr == 0)
{
QWidget *desktop = qApp->desktop();
if ((conn = new KConnection(app)) != NULL)
{
int width = conn->width();
int height = conn->height();
conn->NewConnect();
conn->setGeometry((desktop->width()-width)/2, (desktop->height()-height)/2,
width, height);
conn->show();
}
}
return TRUE;
}
/****************************************************************************/
bool KConnection::ReadConfig()
{
const char *Value;
config->setGroup(KI_SEC_GLOBAL);
Value = config->readEntry(KI_ENT_DIR);
CurDir = Value?Value:".";
Value = config->readEntry(KI_ENT_LOG_VISIBLE);
logVisible = Value?atoi(Value):0;
return TRUE;
}
/****************************************************************************/
bool KConnection::WriteConfig()
{
config->setGroup(KI_SEC_GLOBAL);
config->writeEntry(KI_ENT_DIR,CurDir);
config->writeEntry(KI_ENT_LOG_VISIBLE,logVisible);
if (curcalls != NULL)
curcalls->WriteConfig();
if (oldcalls != NULL)
oldcalls->WriteConfig();
return TRUE;
}
/****************************************************************************/
void KConnection::readProperties(KConfig *kc)
{
const char *Value;
SetHost((const char*) kc->readEntry(KI_ENT_SERVER));
SetPort((const char*) kc->readEntry(KI_ENT_PORT));
Value = (const char*) kc->readEntry(KI_ENT_LOG_VISIBLE);
menu->SetLogShowed(Value?atoi(Value):0);
ActiveRect = geometry();
if (Connect() == FALSE)
SetLogoSize();
}
/****************************************************************************/
void KConnection::saveProperties(KConfig *kc)
{
kc->writeEntry(KI_ENT_SERVER,server);
kc->writeEntry(KI_ENT_PORT,port);
kc->writeEntry(KI_ENT_LOG_VISIBLE,menu->IsLogShowed());
}
/****************************************************************************/
void KConnection::updateRects()
{
int i;
int menutop = 0;
int menubottom = 0;
if (menu != NULL)
{
if (menu->menuBarPos() == KMenuBar::Top)
{
menutop = menu->height();
menu->setGeometry(0,0,width(),menu->height());
}
else
if (menu->menuBarPos() == KMenuBar::Bottom)
{
menubottom = menu->height();
menu->setGeometry(0,height() - menu->height(),width(),menu->height());
}
}
if (socket != NULL)
{
for (i = 0; i < channels; i++)
chanwin[i].move(BORDER_SIZE + i * CHAN_X, menutop);
if (outwin != NULL)
outwin->setGeometry(BORDER_SIZE, CHAN_Y + menutop, width() - BORDER_SIZE*2, height() - CHAN_Y - BORDER_SIZE - menutop - menubottom);
if (split1 != NULL)
split1->SetSize();
}
else
if (logo != NULL)
logo->setGeometry(0,menutop,width(),height()-menubottom);
printf("dlg: x0: %d, y0: %d, x1: %d, y1: %d\n",this->x(),this->y(),this->width(),this->height());
}
/****************************************************************************/
KConfig *KConnection::GetConfig()
{
return config;
}
/****************************************************************************/
const char *KConnection::GetHost()
{
return server;
}
/****************************************************************************/
const char *KConnection::SetHost(const char *newserver)
{
if (server != NULL)
{
free(server);
server = NULL;
}
if (newserver != NULL && *newserver != '\0')
server = strdup(newserver);
else
server = NULL;
return server;
}
/****************************************************************************/
int KConnection::SetPort(int newport)
{
if (newport == 0)
newport = SERV_PORT;
return (port = newport);
}
/****************************************************************************/
int KConnection::SetPort(const char *newport)
{
if (newport == NULL || *newport == '\0')
return SetPort(0);
return SetPort(atoi(newport));
}
/****************************************************************************/
int KConnection::GetPort()
{
return port;
}
/****************************************************************************/
QString &KConnection::GetCurDir()
{
return CurDir;
}
/****************************************************************************/
bool KConnection::SetCurDir(QString NewDir)
{
CurDir = NewDir;
return TRUE;
}
/****************************************************************************/
bool KConnection::SetCurDir(const char *NewDir)
{
CurDir = NewDir;
return TRUE;
}
/****************************************************************************/
void KConnection::SetLogVisible(bool enable)
{
logVisible = enable;
}
/****************************************************************************/
bool KConnection::eval_message()
{
int size;
do
{
if ((size = Read (socket)) <= 0) {
Messager->HandleMessage(TRUE,KI_CONN_BROKEN,0,(0));
Disconnect();
return FALSE;
}
switch(socket->waitstatus)
{
case WF_ACC:
switch (socket->msg)
{
case MSG_ANN_ACC:
socket->servtyp = stoi((unsigned char *) socket->msgbuf.buf,_MSG_2B);
socket->waitstatus = WF_NOTHING;
break;
case MSG_VERSION:
/* Meldung: Protokoll-Versionsnummer vom Server */
compare_version (socket->msgbuf.buf);
break;
case MSG_ANN_REJ:
/* Meldung: nicht authorisierter Zugriff auf Server */
socket->msg = MSG_CLOSE;
socket->msgbuf.used = 0;
Write(socket);
Messager->HandleMessage(TRUE,KI_ACC_DENIED,0,(0));
Disconnect();
return FALSE;
break;
default:
/* Meldung: Unbekannter Message-Typ Msg */
Messager->HandleMessage(TRUE,KI_UNKNOWN_MSG,0,(1,MsgHdl::ltoa(socket->msg)));
break;
}
break;
default:
switch (socket->msg)
{
case MSG_CALLER:
/* Eingabe eines Neuen Benutzers socket->msgbuf */
/*if (socket->servtyp & T_ADDRESSBOOK)*/
break;
case MSG_WHO_IS:
/* Eingabe eines Neuen Benutzers socket->msgbuf */
//if (socket->servtyp & T_ADDRESSBOOK)
// isdn_new_caller_display (socket);
break;
case MSG_SERVER:
/* Eingabe eines Neuen Benutzers socket->msgbuf */
if (logwin != NULL)
logwin->AppendLine(socket->msgbuf.buf);
break;
case MSG_CHANGE_CHAN:
/* Wechsel der aktuellen Kanalnummer des aktuellen Gespraeches */
{
int newchan, oldchan;
char fmt[SHORT_STRING_SIZE];
sprintf(fmt,"%%d%c%%d",C_DELIMITER);
if (sscanf(socket->msgbuf.buf,fmt,&oldchan,&newchan) != 2)
Messager->HandleMessage(TRUE,KI_WRONG_RESULT,0,(0));
else
change_chan(oldchan,newchan);
}
break;
case MSG_CALL_INFO:
{
int chan;
CALL *Info = NULL;
chan = Set_Info_Struct(&Info,socket->msgbuf.buf);
if (chan == -1)
return FALSE;
if (Info == NULL)
{
Messager->HandleMessage(TRUE,KI_OUT_OF_MEMORY,0,(0));
return FALSE;
}
SetCallInfo(chan, Info);
free(Info);
}
break;
default:
/* Meldung: Unbekannter Message-Typ Msg */
Messager->HandleMessage(TRUE,KI_UNKNOWN_MSG2,0,(1,MsgHdl::ltoa(socket->msg)));
break;
}
break;
}
}
while (socket->status == NEXT_MSG);
return TRUE;
}
/****************************************************************************/
bool KConnection::compare_version (char *Version)
{
if (strcmp(PROT_VERSION,Version))
{
Messager->HandleMessage(TRUE,KI_DIFF_VERSION,0,(2,Version,PROT_VERSION));
return FALSE;
}
return TRUE;
}
/****************************************************************************/
int KConnection::new_chan(int newchan)
{
int i;
for (i = 0; i < channels && channr[i] != NO_CHAN; i++);
if (i != channels)
{
channr[i] = newchan;
chanwin[i].StartConnection();
}
else
return NO_CHAN;
return i;
}
/****************************************************************************/
int KConnection::get_chan(int chan)
{
int i;
for (i = 0; i < channels && channr[i] != chan; i++);
if (i == channels)
return NO_CHAN;
return i;
}
/****************************************************************************/
int KConnection::change_chan(int chan, int changechan)
{
int i;
curcalls->change_chan(chan, changechan);
for (i = 0; i < channels && channr[i] != chan; i++);
if (i != channels)
channr[i] = changechan;
else
return NO_CHAN;
return i;
}
/****************************************************************************/
int KConnection::del_chan(int delchan)
{
int index;
curcalls->del_chan(delchan);
if ((index = change_chan(delchan,NO_CHAN)) >= 0)
chanwin[index].StopConnection();
return index;
}
/****************************************************************************/
bool KConnection::SetCallInfo(int chan, const CALL *Info)
{
int index;
if (Info == NULL)
return FALSE;
switch (Info->stat)
{
case STATE_CONNECT:
case STATE_BYTE :
case STATE_AOCD :
case STATE_TIME :
if (get_chan(chan) == NO_CHAN)
new_chan(chan);
case STATE_RING :
if (curcalls->get_chan(chan) == NO_CHAN)
curcalls->new_chan(chan);
case STATE_CAUSE :
curcalls->WriteLine(chan,Info);
if ((index = get_chan(chan)) >= 0)
chanwin[index].AddValue(Info->t_duration, Info->ibytes, Info->obytes);
break;
case STATE_HANGUP :
del_chan(chan);
break;
default:
Messager->HandleMessage(TRUE,KI_UNKNOWN_MSG3,0,(1,Info->stat));
}
if (Info->stat == STATE_HANGUP) // || Info->stat == STATE_CAUSE)
oldcalls->AppendLine(Info);
return TRUE;
}
/****************************************************************************/

View File

@ -0,0 +1,176 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <qtimer.h>
#include <qtablevw.h>
#include <qpainter.h>
#include "kisdnlog.h"
/****************************************************************************/
KCurCalls::KCurCalls(KConnection *mainwin, QWidget *frame) :
KCalls(mainwin, frame)
{
channr = NULL;
Timer = new QTimer(this);
connect(Timer, SIGNAL(timeout()), SLOT(ClearLines()));
Timer->start(CALLS_TIMEOUT * KTIMERSEC, FALSE);
ReadConfig(KI_ENT_CUR_CALLS);
}
/****************************************************************************/
KCurCalls::~KCurCalls()
{
Timer->stop();
delete Timer;
free(channr);
}
/****************************************************************************/
bool KCurCalls::WriteConfig()
{
return KCalls::WriteConfig(KI_ENT_CUR_CALLS);
}
/****************************************************************************/
bool KCurCalls::WriteLine(int Line, const CALL *Info)
{
Line = get_chan(Line);
if (Line >= numRows() || Line < 0)
return FALSE;
channr[Line].stat = Info->stat;
channr[Line].time = time(NULL);
return SetLine(Line, Info);
}
/****************************************************************************/
int KCurCalls::new_chan(int chan)
{
if ((channr = (chan_struct*) realloc(channr,(numRows()+1)*sizeof(chan_struct))) == NULL)
{
Messager->HandleMessage(TRUE,KI_OUT_OF_MEMORY,0,(0));
return NO_CHAN;
}
memmove(((void*) channr)+sizeof(chan_struct),
(void*) channr,
numRows()*sizeof(chan_struct));
insertItem("",0);
channr[0].chan = chan;
return 0;
}
/****************************************************************************/
int KCurCalls::get_chan(int chan)
{
int i;
for (i = 0; i < numRows() && channr[i].chan != chan; i++);
if (i == numRows())
return NO_CHAN;
return i;
}
/****************************************************************************/
int KCurCalls::change_chan(int chan, int changechan)
{
int i;
if ((i = get_chan(chan)) != NO_CHAN)
channr[i].chan = changechan;
else
return NO_CHAN;
return i;
}
/****************************************************************************/
int KCurCalls::del_chan(int delchan)
{
int i;
if ((i = get_chan(delchan)) != NO_CHAN)
{
if (numRows() < 2 || channr == NULL)
{
free(channr);
channr = NULL;
}
else
{
if (i+1 < numRows())
{
memmove(((void*) channr)+(sizeof(chan_struct)*i),
((void*) channr)+(sizeof(chan_struct)*(i+1)),
(numRows()-i-1)*sizeof(chan_struct));
}
if ((channr = (chan_struct*) realloc(channr,(numRows()-1)*sizeof(chan_struct))) == NULL)
{
Messager->HandleMessage(TRUE,KI_OUT_OF_MEMORY,0,(0));
return NO_CHAN;
}
}
removeItem(i);
}
else
return NO_CHAN;
return i;
}
/****************************************************************************/
bool KCurCalls::ClearLines()
{
int i;
for (i = 0; i < numRows(); i++)
if ((channr[i].stat == STATE_CAUSE || channr[i].stat == STATE_RING) &&
channr[i].time + CALLS_TIMEOUT < time(NULL))
del_chan(channr[i].chan);
return TRUE;
}
/****************************************************************************/

View File

@ -0,0 +1,276 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <qcombo.h>
#include <qaccel.h>
#include <qpushbt.h>
#include "kisdnlog.h"
/****************************************************************************/
KHost::KHost(KConnection *newmainwin) : QDialog(newmainwin,NULL,TRUE)
{
mainwin = newmainwin;
frame = new QFrame(this);
portValid = new QIntValidator(0,65535,this);
hostCombo = new QComboBox(true, frame);
portCombo = new QComboBox(true, frame);
hostLabel = new QLabel(klocale->translate("Host"), frame);
portLabel = new QLabel(klocale->translate("Port"), frame);
ok = new QPushButton(klocale->translate("OK"), frame);
cancel = new QPushButton(klocale->translate("Cancel"), frame);
help = new QPushButton(klocale->translate("Help"), frame);
QObject::connect(hostCombo, SIGNAL(activated(int)),
this, SLOT(hostChanged(int)));
QObject::connect(portCombo, SIGNAL(activated(int)),
this, SLOT(portChanged(int)));
QObject::connect(ok, SIGNAL(clicked()), this, SLOT(go()));
QObject::connect(cancel, SIGNAL(clicked()), this, SLOT(Quit()));
QObject::connect(help, SIGNAL(clicked()), this, SLOT(showHelp()));
ok->setAccel(Key_Return);
cancel->setAccel(Key_Escape);
portCombo->setValidator(portValid);
setFixedSize(280,150);
ReadConfig();
}
/****************************************************************************/
KHost::~KHost()
{
WriteConfig();
delete portValid;
delete hostCombo;
delete portCombo;
delete hostLabel;
delete portLabel;
delete frame;
}
/****************************************************************************/
void KHost::show()
{
hostCombo->setFocus();
QDialog::show();
}
/****************************************************************************/
void KHost::resizeEvent(QResizeEvent*)
{
int len;
frame->resize(size());
hostLabel->setGeometry (15, 10, 30, 30);
hostCombo->setGeometry (hostLabel->x(), hostLabel->y()+hostLabel->height(),
160, 30);
portLabel->setGeometry(hostCombo->x()+hostCombo->width()+15,
hostLabel->y(), hostLabel->height(), hostLabel->width());
portCombo->setGeometry(portLabel->x(), hostCombo->y(),
75, hostCombo->height());
len = (portCombo->x()+portCombo->width() - hostCombo->x()) / 4;
ok->setGeometry (hostCombo->x(), portCombo->y() + hostCombo->height() + 20,
len, 30);
cancel->setGeometry (ok->x() + (int)(ok->width() *1.5), ok->y(),
ok->width(), ok->height());
help->setGeometry (cancel->x() + (int)(ok->width() *1.5), ok->y(),
ok->width(), ok->height());
}
/****************************************************************************/
void KHost::hostChanged(int)
{
for(int i=0; i<hostCombo->count()-1; i++)
for(int j=i+1; j<hostCombo->count(); j++)
if(!strcmp(hostCombo->text(i), hostCombo->text(j)))
{
hostCombo->removeItem(i);
break;
}
}
/****************************************************************************/
/*
void KHost::portChanged(int Index)
{
long dummy;
const char *text = portCombo->text(Index);
QString Message;
if (!is_integer((char*)text,&dummy) || dummy < 0)
{
Messager->HandleMessage(TRUE,KI_INVALID_PORT,0,(1,text));
portCombo->removeItem(Index);
}
}
*/
void KHost::portChanged(int)
{
for(int i=0; i<portCombo->count()-1; i++)
for(int j=i+1; j<portCombo->count(); j++)
if(!strcmp(portCombo->text(i), portCombo->text(j)))
{
portCombo->removeItem(i);
break;
}
}
/****************************************************************************/
bool KHost::ReadConfig()
{
KConfig *config = ((KConnection*) topLevelWidget())->GetConfig();
QStrList List;
const char *Value;
int i;
if (config == NULL)
return FALSE;
config->setGroup(KI_SEC_HOSTS);
config->readListEntry(KI_ENT_HOSTS,List);
hostCombo->insertStrList(&List);
List.clear();
config->readListEntry(KI_ENT_PORTS,List);
portCombo->insertStrList(&List);
Value = config->readEntry(KI_ENT_LAST_HOST);
if (Value != NULL && *Value != '\0')
for (i = 0; i < hostCombo->count(); i++)
if (!strcmp(Value,hostCombo->text(i)))
{
hostCombo->setCurrentItem(i);
break;
}
Value = config->readEntry(KI_ENT_LAST_PORT);
if (Value != NULL && *Value != '\0')
for (i = 0; i < portCombo->count(); i++)
if (!strcmp(Value,portCombo->text(i)))
{
portCombo->setCurrentItem(i);
break;
}
hostChanged(0);
portChanged(0);
return TRUE;
}
/****************************************************************************/
bool KHost::WriteConfig()
{
KConfig *config = ((KConnection*) topLevelWidget())->GetConfig();
QStrList List;
const char *Value;
int i;
if (config == NULL)
return FALSE;
hostChanged(0);
portChanged(0);
config->setGroup(KI_SEC_HOSTS);
if ((Value = hostCombo->currentText()) != NULL && *Value != '\0' && List.find(Value) == -1)
List.append(Value);
for (i = 0; i < hostCombo->count(); i++)
if (List.find(hostCombo->text(i)) == -1)
List.append(hostCombo->text(i));
config->writeEntry(KI_ENT_HOSTS,List);
List.clear();
if ((Value = portCombo->currentText()) != NULL && *Value != '\0' && List.find(Value) == -1)
List.append(Value);
for (i = 0; i < portCombo->count(); i++)
if (List.find(portCombo->text(i)) == -1)
List.append(portCombo->text(i));
config->writeEntry(KI_ENT_PORTS,List);
config->writeEntry(KI_ENT_LAST_HOST,hostCombo->currentText());
config->writeEntry(KI_ENT_LAST_PORT,portCombo->currentText());
return TRUE;
}
/****************************************************************************/
void KHost::showHelp()
{
printf("Will be come later :-)\n");
}
/****************************************************************************/
void KHost::Quit()
{
mainwin->SetHost(NULL);
mainwin->SetPort(NULL);
reject();
}
/****************************************************************************/
void KHost::go()
{
mainwin->SetHost(hostCombo->currentText());
mainwin->SetPort(portCombo->currentText());
accept();
}
/****************************************************************************/

View File

@ -0,0 +1,572 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#ifndef KISDNLOG_H
#define KISDNLOG_H
/****************************************************************************/
#include <time.h>
#include <qwidget.h>
#include <qframe.h>
#include <qdict.h>
#include <qmlined.h>
#include <qstring.h>
#include <qpainter.h>
#include <qdialog.h>
#include <qsocknot.h>
#include <qvalidator.h>
#include <qlist.h>
#include <ktopwidget.h>
#include <ktablistbox.h>
#include <knewpanner.h>
#include <kpopmenu.h>
#include <kapp.h>
#include "config.h"
extern "C" {
#include "socket.h"
}
#include "message.h"
#include "messagenr.h"
#undef INFORMATION
/****************************************************************************/
#define KISDNLOG_NAME PACKAGE
#define DEV_SL "Stefan Luethje (luethje@sl-gw.lake.de)"
#define DEV_CW "Claudia Weber (weber@sl-gw.lake.de)"
#define LOGO_XPM "isdnlog.xpm"
#define BORDER_SIZE 10
#define MAX_LOG_LINES 1000
#define MAX_CALLS_LINES 200
#define CALLS_ROWS 3
#define CALLS_COLS (PROT_ELEMENTS-1)
#define IN_DATA 0
#define OUT_DATA 1
#define LOGO_X 320
#define LOGO_Y 240
#define THRU_X 100
#define THRU_Y 90
#define CHAN_X 205
#define CHAN_Y 155
#define MAX_RATE 8000
#define GET_BPS 2
#define NO_DIR 4
#define NO_CHAN -1
#define NEW_CHAN -2
#define THRU_TIMEOUT 20
#define CALLS_TIMEOUT 120
#define KTIMERSEC 1000
#define NOT_CONNECTED -1
#define KI_SEC_HOSTS "Hosts"
#define KI_ENT_HOSTS "Hosts"
#define KI_ENT_PORTS "Ports"
#define KI_ENT_LAST_HOST "LastPort"
#define KI_ENT_LAST_PORT "LastHost"
#define KI_SEC_GLOBAL "Global"
#define KI_ENT_DIR "Directory"
#define KI_ENT_SERVER "Server"
#define KI_ENT_PORT "Port"
#define KI_ENT_LOG_VISIBLE "LogVisible"
#define KI_ENT_CUR_CALLS "CurCalls"
#define KI_ENT_OLD_CALLS "OldCalls"
/****************************************************************************/
typedef struct {QString login; QString command;} hostParam;
/****************************************************************************/
class KMsgHdl;
class KConnection;
/****************************************************************************/
#ifdef _FUNCTIONS_CPP_
#define _EXTERN
#else
#define _EXTERN extern
#endif
_EXTERN const char *Byte2Str(double Bytes, int flag);
#undef _EXTERN
#ifdef _KISDNLOG_MAIN_C_
#define _EXTERN
#define _IS_NULL = NULL
#else
#define _EXTERN extern
#define _IS_NULL
#endif
_EXTERN KMsgHdl *Messager _IS_NULL;
#undef _EXTERN
#undef _IS_NULL
/****************************************************************************/
class KMsgHdl : public MsgHdl
{
private:
public:
KMsgHdl::KMsgHdl(KConfig * = NULL);
KMsgHdl::~KMsgHdl();
};
/****************************************************************************/
class KLogo : public QFrame
{
Q_OBJECT
private:
QPixmap pic;
char *pixmap;
public:
KLogo(QWidget *, const char*);
~KLogo();
protected:
virtual void paintEvent(QPaintEvent*);
};
/****************************************************************************/
class KMenu : public KMenuBar
{
Q_OBJECT
private:
KConnection *mainwin;
QPopupMenu *fileMenu;
QPopupMenu *winMenu;
QPopupMenu *helpMenu;
int showlog;
int writefile;
int reconnect;
int disconnect;
public:
KMenu::KMenu(KConnection *, bool);
KMenu::~KMenu();
bool IsLogShowed();
void SetLogShowed(bool);
bool Connect(bool = TRUE);
};
/****************************************************************************/
class KHost : public QDialog
{
Q_OBJECT
private:
KConnection *mainwin;
QFrame *frame;
QComboBox *hostCombo;
QComboBox *portCombo;
QLabel *hostLabel;
QLabel *portLabel;
QPushButton *ok;
QPushButton *cancel;
QPushButton *help;
QValidator *portValid;
private:
bool ReadConfig();
bool WriteConfig();
private slots:
void hostChanged(int);
void portChanged(int);
void go();
void Quit();
void showHelp();
public:
KHost(KConnection*);
~KHost();
virtual void show();
protected:
virtual void resizeEvent(QResizeEvent*);
};
/****************************************************************************/
class KThruput : public QFrame
{
Q_OBJECT
public:
enum {ALL_AVERAGE = -2, CUR_AVERAGE = -1, COUNT = 1};
private:
KConnection *mainwin;
QWidget *frame;
QColor PenColor[2];
QColor BGColor;
int ValueSize;
int *Values[2];
int *RunTime;
double MinRate[2];
double MaxRate[2];
int TimeScale;
int Connected;
bool NotConnected;
private:
bool AddValue(int, unsigned long);
bool ShiftArray(int *);
bool DrawRate(QPainter &, int);
int CurIndex(int = 0);
private slots:
public:
KThruput(KConnection* , QWidget *newframe, int = 1);
~KThruput();
virtual void paintEvent(QPaintEvent*);
bool AddValue(int, unsigned long, unsigned long);
bool SetTimeScale(int);
double GetRate(int, int = -1);
double GetMinRate(int);
double GetMaxRate(int);
int GetTraffic(int);
QColor &GetColor(int);
bool StartConnection();
bool StopConnection();
const char *DeleteConnection();
};
/****************************************************************************/
class KChannel : public QFrame
{
Q_OBJECT
private:
KConnection *mainwin;
QWidget *frame;
KThruput *thru;
QTimer *Timer;
private slots:
const char *DeleteConnection();
public:
KChannel(KConnection* , QWidget *newframe, int = 1);
~KChannel();
virtual void paintEvent(QPaintEvent*);
bool AddValue(int, unsigned long, unsigned long);
bool SetTimeScale(int);
double GetRate(int, int = -1);
double GetMinRate(int);
double GetMaxRate(int);
int GetTraffic(int);
bool StartConnection();
bool StopConnection();
};
/****************************************************************************/
class KSplit : public KNewPanner
{
Q_OBJECT
private:
KConnection *mainwin;
QWidget *frame;
public:
KSplit(KConnection* , QWidget *newframe, enum KNewPanner::Orientation, enum KNewPanner::Units, int);
~KSplit();
void SetSize();
};
/****************************************************************************/
class KCalls : public KTabListBox
{
Q_OBJECT
private:
KConnection *mainwin;
QWidget *frame;
protected:
bool WriteHeader(const char *, int);
bool SetHeader(void);
bool SetLine(int, const CALL *);
const char *timetoa(time_t);
const char *durationtoa(time_t);
const char *directiontoa(int);
const char *statetoa(int);
const char *emptytoa(const char *);
bool WriteConfig(const char *EntName);
bool ReadConfig(const char *EntName);
public:
KCalls(KConnection* , QWidget *newframe);
~KCalls();
};
/****************************************************************************/
class KCurCalls : public KCalls
{
Q_OBJECT
private:
typedef struct {int chan; int stat; time_t time;} chan_struct;
private:
chan_struct *channr;
QTimer *Timer;
private slots:
bool ClearLines();
public:
KCurCalls(KConnection* , QWidget *newframe);
~KCurCalls();
bool WriteConfig();
bool WriteLine(int, const CALL*);
int new_chan(int);
int get_chan(int);
int change_chan(int, int);
int del_chan(int);
};
/****************************************************************************/
class KOldCalls : public KCalls
{
private:
int maxlines;
public:
KOldCalls(KConnection* , QWidget *newframe, int = MAX_CALLS_LINES);
~KOldCalls();
bool WriteConfig();
bool SetMaxLines(int);
bool AppendLine(const CALL*);
};
/****************************************************************************/
class KLog : public QMultiLineEdit
{
Q_OBJECT
private:
KConnection *mainwin;
QWidget *frame;
int maxlines;
public:
KLog(KConnection*, QWidget *, int = MAX_LOG_LINES);
~KLog();
bool SetMaxLines(int);
void AppendLine(char *);
bool SaveToFile(const char *Name = NULL);
};
/****************************************************************************/
class KLogWin : public KTopLevelWidget
{
Q_OBJECT
private:
KConnection *mainwin;
KLog *log;
protected:
virtual void updateRects();
public:
KLogWin(KConnection*, int newmaxlines = MAX_LOG_LINES);
~KLogWin();
bool SetMaxLines(int);
void AppendLine(char *);
virtual void hide();
public slots:
void Quit();
bool SaveToFile(const char *Name = NULL);
};
/****************************************************************************/
class KConnection : public KTopLevelWidget
{
Q_OBJECT
protected:
static KConfig* config;
private:
static int ConnectionNr;
static int logVisible;
static bool Restore;
static QString CurDir;
static QList<KConnection> ConnectList;
KApplication *app;
QSocketNotifier *sn;
socket_queue *socket;
KLogo *logo;
KMenu *menu;
KHost *hostwin;
KChannel *chanwin;
QFrame *outwin;
KSplit *split1;
KLogWin *logwin;
KCurCalls *curcalls;
KOldCalls *oldcalls;
QRect ActiveRect;
int *channr;
int channels;
char *server;
int port;
private:
bool ShowLogWin();
bool WinConnect();
bool Connect(int);
bool ReadConfig();
bool WriteConfig();
private slots:
bool eval_message();
void DestroyLogWin();
public slots:
void Quit();
bool NewConnect();
bool ReConnect();
bool Disconnect();
bool SetLogWin();
bool SaveLogFile();
protected:
virtual void updateRects();
virtual void saveProperties(KConfig *);
virtual void readProperties(KConfig *);
bool CreateLogs();
bool DestroyLogs();
bool SetLogo();
void SetLogoSize();
bool SwitchContents();
bool compare_version (char *);
bool SetCallInfo(int, const CALL *);
int new_chan(int);
int get_chan(int);
int change_chan(int, int);
int del_chan(int);
public:
KConnection(KApplication*, const char * = NULL, const char * = NULL);
~KConnection();
virtual void show();
virtual bool close(bool = TRUE);
void HideLogWin();
const char *SetHost(const char *);
const char *GetHost();
int SetPort(int);
int SetPort(const char*);
int GetPort();
KConfig *GetConfig();
QString &GetCurDir();
bool SetCurDir(QString);
bool SetCurDir(const char *);
void SetLogVisible(bool);
bool Connect();
static bool StartApp(KApplication *);
signals:
void quit();
};
/****************************************************************************/
#endif

166
isdnlog/client/src/klog.cpp Normal file
View File

@ -0,0 +1,166 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <errno.h>
#include <qmlined.h>
#include <qfiledlg.h>
#include <qdir.h>
#include <kmsgbox.h>
#include "kisdnlog.h"
/****************************************************************************/
KLog::KLog(KConnection *newmainwin, QWidget *newframe, int newmaxlines) :
QMultiLineEdit(newframe)
{
mainwin = newmainwin;
frame = newframe;
SetMaxLines(newmaxlines);
setReadOnly(TRUE);
}
/****************************************************************************/
KLog::~KLog()
{
}
/****************************************************************************/
bool KLog::SetMaxLines(int newmaxlines)
{
if (newmaxlines < 1)
{
Messager->HandleMessage(TRUE,KI_INVALID_LINES,0,
(2,klocale->translate("Log Window"),
MsgHdl::ltoa(newmaxlines)));
maxlines = MAX_LOG_LINES;
return FALSE;
}
maxlines = newmaxlines;
while (maxlines < numLines())
removeLine(0);
return TRUE;
}
/****************************************************************************/
void KLog::AppendLine(char *Line)
{
if (maxlines <= numLines())
removeLine(0);
insertLine(Line);
setTopCell(numLines()-1);
}
/****************************************************************************/
bool KLog::SaveToFile(const char *Name)
{
int i;
const char *text;
FILE *fp = NULL;
QString FileName;
const char *Modus = "w";
if (Name == NULL)
{
QFileDialog FDlg;
char DirName[BUFSIZ];
if (( FileName = FDlg.getSaveFileName(mainwin->GetCurDir())) == NULL)
return FALSE;
QFileInfo FileInfo = QFileInfo(FileName);
strcpy(DirName, FileInfo.dirPath(TRUE));
if (!access(DirName,W_OK))
mainwin->SetCurDir(DirName);
else
{
Messager->HandleMessage(TRUE,KI_NO_DIR,errno,(1,DirName));
return FALSE;
}
}
else
FileName = Name;
if (!access(FileName,R_OK))
{
char MsgTxt[BUFSIZ];
sprintf(MsgTxt,
klocale->translate("file `%s' exists.\nDo you want to overwrite, or append it?\n"),
(const char*) FileName);
KMsgBox MsgBox = KMsgBox(mainwin,klocale->translate("Warning"),
MsgTxt,
KMsgBox::EXCLAMATION,
klocale->translate("Overwrite"),
klocale->translate("Append"),
klocale->translate("Cancel"));
switch(MsgBox.exec())
{
case 1: Modus = "w";
break;
case 2: Modus = "a";
break;
case 3:
default: return FALSE;
break;
}
}
if ((fp = fopen(FileName,Modus)) == NULL)
{
Messager->HandleMessage(TRUE,KI_NO_FILE,errno,(1,(const char*)FileName));
return FALSE;
}
for (i = 0; i < numLines(); i++)
if ((text = textLine(i)) != NULL)
{
fputs(text,fp);
fputs("\n",fp);
}
fclose(fp);
return TRUE;
}
/****************************************************************************/

View File

@ -0,0 +1,94 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include<string.h>
#include <kiconloader.h>
#include "kisdnlog.h"
/****************************************************************************/
KLogo::KLogo(QWidget *mainwin, const char *newpixmap) : QFrame(mainwin)
{
KIconLoader Icon = KIconLoader();
Icon.insertDirectory(6,"../pixmaps");
if (newpixmap != NULL)
pixmap = strdup(newpixmap);
else
pixmap = NULL;
if (pixmap != NULL)
pic = Icon.loadIcon(pixmap);
if (pic.size().width())
setFixedSize(pic.size());
else
setFixedSize(LOGO_X, LOGO_Y);
repaint();
}
/****************************************************************************/
KLogo::~KLogo()
{
if (pixmap != NULL)
free(pixmap);
}
/****************************************************************************/
void KLogo::paintEvent(QPaintEvent*)
{
QPainter Painter;
if (pic.size().width())
{
Painter.begin(&pic);
Painter.end();
bitBlt( this, 0,0, &pic);
}
else
{
QString Message;
Message = klocale->translate("No Bitmap found");
Message += " (";
Message += pixmap;
Message += ")";
Painter.begin(this);
Painter.drawText(0, 0, width(), height(),
WordBreak | AlignVCenter | AlignCenter,
Message);
drawFrame(&Painter);
Painter.end();
}
}
/****************************************************************************/

View File

@ -0,0 +1,96 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <errno.h>
#include "kisdnlog.h"
/****************************************************************************/
KLogWin::KLogWin(KConnection *newmainwin, int newmaxlines) :
KTopLevelWidget()
{
mainwin = newmainwin;
log = new KLog(newmainwin,this,newmaxlines);
}
/****************************************************************************/
KLogWin::~KLogWin()
{
delete log;
}
/****************************************************************************/
void KLogWin::hide()
{
QWidget::hide();
mainwin->HideLogWin();
}
/****************************************************************************/
void KLogWin::Quit()
{
QWidget::close(TRUE);
}
/****************************************************************************/
void KLogWin::updateRects()
{
log->resize(size());
}
/****************************************************************************/
bool KLogWin::SetMaxLines(int newmaxlines)
{
if (log != NULL)
return log->SetMaxLines(newmaxlines);
return FALSE;
}
/****************************************************************************/
void KLogWin::AppendLine(char *Line)
{
if (log != NULL)
log->AppendLine(Line);
}
/****************************************************************************/
bool KLogWin::SaveToFile(const char *Name)
{
if (log != NULL)
return log->SaveToFile(Name);
return FALSE;
}
/****************************************************************************/

View File

@ -0,0 +1,105 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <kmenubar.h>
#include "kisdnlog.h"
/****************************************************************************/
KMenu::KMenu(KConnection *newmainwin, bool logVisible) : KMenuBar(newmainwin)
{
QString HelpText;
mainwin = newmainwin;
fileMenu = new QPopupMenu();
fileMenu->insertItem(klocale->translate("&Connect"), mainwin, SLOT(NewConnect()));
reconnect = fileMenu->insertItem(klocale->translate("&Reconnect"), mainwin, SLOT(ReConnect()));
disconnect = fileMenu->insertItem(klocale->translate("&Disconnect"), mainwin, SLOT(Disconnect()));
writefile = fileMenu->insertItem(klocale->translate("&Save logfile"), mainwin, SLOT(SaveLogFile()));
fileMenu->insertItem(klocale->translate("&Quit"), mainwin, SLOT(Quit()));
// fileMenu->insertItem("&Disonnect", this, SLOT(moveWindow()));
// fileMenu->insertItem("&Write Logfile", this, SLOT(moveWindow()));
winMenu = new QPopupMenu();
winMenu->setCheckable(TRUE);
connect(winMenu, SIGNAL(activated(int)), mainwin, SLOT(SetLogWin()));
showlog = winMenu->insertItem(klocale->translate("&Show Log"), 1);
winMenu->setItemChecked(showlog,logVisible);
//winMenu->insertSeparator();
//showlog = winMenu->insertItem(klocale->translate("&Show Log"), mainwin, SLOT(SetLogWin()));
//winMenu->setItemChecked(showlog,logVisible);
// helpMenu = new KPopupMenu();
Warum jetzt Segmentation fault ??
HelpText = KISDNLOG_NAME" "VERSION"\n\n"DEV_SL"\n"DEV_CW"\n\n";
HelpText += klocale->translate("monitoring tool for the isdnlog");
QPopupMenu *helpMenu = kapp->getHelpMenu(TRUE, HelpText);
insertItem(klocale->translate("&File"), fileMenu);
insertItem(klocale->translate("&Windows"), winMenu);
insertSeparator();
insertItem(klocale->translate("&Help"), helpMenu);
enableMoving();
enableFloating();
}
/****************************************************************************/
KMenu::~KMenu()
{
delete fileMenu;
delete winMenu;
}
/****************************************************************************/
void KMenu::SetLogShowed(bool enable)
{
winMenu->setItemChecked(showlog,enable);
}
/****************************************************************************/
bool KMenu::IsLogShowed()
{
return winMenu->isItemChecked(showlog);
}
/****************************************************************************/
bool KMenu::Connect(bool enable)
{
fileMenu->setItemEnabled(writefile, enable);
fileMenu->setItemEnabled(reconnect, enable);
fileMenu->setItemEnabled(disconnect, enable);
winMenu->setItemEnabled(showlog, enable);
return TRUE;
}
/****************************************************************************/

View File

@ -0,0 +1,71 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <kmsgbox.h>
#include "kisdnlog.h"
/****************************************************************************/
static int isdnlog_message(const char* Msg, int Number);
/****************************************************************************/
int isdnlog_message(const char* Msg, int Number)
{
int type = Number>0?KMsgBox::EXCLAMATION:KMsgBox::STOP;
const char *caption = Number>0?klocale->translate("Warning"):klocale->translate("Error");
QString Message;
#ifdef DEBUG
Message = klocale->translate("Message");
Message += " ";
Message += MsgHdl::ltoa(Number);
Message += ":\n\n";
#endif /* DEBUG */
Message += Msg;
qApp->beep();
KMsgBox::message(NULL,caption,Message,type);
return 0;
}
/****************************************************************************/
KMsgHdl::KMsgHdl(KConfig *config) : MsgHdl(&isdnlog_message)
{
if (config == NULL)
SetMsgFile("/opt/kde/share/apps/kisdnlog/msg.txt");
}
/****************************************************************************/
KMsgHdl::~KMsgHdl()
{
}
/****************************************************************************/

View File

@ -0,0 +1,99 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <qtimer.h>
#include <qtablevw.h>
#include <qpainter.h>
#include "kisdnlog.h"
/****************************************************************************/
KOldCalls::KOldCalls(KConnection *mainwin, QWidget *frame, int newmaxlines) :
KCalls(mainwin, frame)
{
SetMaxLines(newmaxlines);
ReadConfig(KI_ENT_OLD_CALLS);
}
/****************************************************************************/
KOldCalls::~KOldCalls()
{
}
/****************************************************************************/
bool KOldCalls::WriteConfig()
{
return KCalls::WriteConfig(KI_ENT_OLD_CALLS);
}
/****************************************************************************/
bool KOldCalls::AppendLine(const CALL *Info)
{
bool RetCode;
int Line = numRows();
if (maxlines <= Line)
{
removeItem(0);
Line--;
}
insertItem("",Line);
RetCode = SetLine(Line, Info);
setTopItem(Line);
return RetCode;
}
/****************************************************************************/
bool KOldCalls::SetMaxLines(int newmaxlines)
{
if (newmaxlines < 1)
{
Messager->HandleMessage(TRUE,KI_INVALID_LINES,0,
(2,klocale->translate("Old Calls"),
MsgHdl::ltoa(newmaxlines)));
maxlines = MAX_CALLS_LINES;
return FALSE;
}
maxlines = newmaxlines;
while (maxlines < numRows())
removeItem(0);
return TRUE;
}
/****************************************************************************/

View File

@ -0,0 +1,51 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include "kisdnlog.h"
/****************************************************************************/
KSplit::KSplit(KConnection* newmainwin, QWidget *newframe, enum KNewPanner::Orientation dir, KNewPanner::Units type, int units) : KNewPanner(newframe, NULL, dir, type, units)
{
mainwin = newmainwin;
frame = newframe;
resize(frame->size());
}
/****************************************************************************/
KSplit::~KSplit()
{
}
/****************************************************************************/
void KSplit::SetSize()
{
resize(frame->size());
}
/****************************************************************************/

View File

@ -0,0 +1,323 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <string.h>
#include "kisdnlog.h"
/****************************************************************************/
KThruput::KThruput(KConnection* newmainwin, QWidget *newframe, int newScale) : QFrame(newframe)
{
// initMetaObject();
setFixedSize(THRU_X,THRU_Y);
// setFrameStyle(QFrame::WinPanel | QFrame::Raised);
mainwin = newmainwin;
frame = newframe;
TimeScale = newScale;
BGColor.setRgb(0,0,0);
PenColor[IN_DATA].setRgb(0,255,0);
PenColor[OUT_DATA].setRgb(0,0,255);
ValueSize = width()+1;
Values[IN_DATA] = new int[ValueSize];
Values[OUT_DATA] = new int[ValueSize];
RunTime = new int[ValueSize];
DeleteConnection();
repaint();
}
/****************************************************************************/
KThruput::~KThruput()
{
delete[] Values[IN_DATA];
delete[] Values[OUT_DATA];
delete[] RunTime;
}
/****************************************************************************/
void KThruput::paintEvent(QPaintEvent*)
{
QPainter Painter;
Painter.begin(this);
// Set Background
Painter.setPen(BGColor);
Painter.setBrush(BGColor);
Painter.drawRect(0,0,width(),height());
if (Connected >= 0)
{
// Show In-Data
DrawRate(Painter,IN_DATA);
// Show Out-Data
DrawRate(Painter,OUT_DATA);
}
if (NotConnected)
{
QColor Color = QColor(255,255,255);
Painter.setPen(Color);
Painter.drawText(0, 0, width(), height(),
WordBreak | AlignVCenter | AlignCenter,
klocale->translate("Not connected"));
}
drawFrame(&Painter);
Painter.end();
}
/****************************************************************************/
bool KThruput::DrawRate(QPainter &Painter, int dir)
{
int x = 0;
int y;
int max_rate = MAX_RATE;// > (int) MaxRate[dir] ? MAX_RATE : (int) MaxRate[dir];
int last_y = height() - 1 - ((int) (GetRate(dir,x) * (height() - 1) / max_rate));
Painter.setPen(PenColor[dir]);
for (x = 1; x <= CurIndex(); x++)
{
y = height() - 1 - ((int) (GetRate(dir,x) * (height() - 1) / max_rate));
Painter.drawLine(x-1, last_y, x, y);
last_y = y;
}
return TRUE;
}
/****************************************************************************/
double KThruput::GetRate(int dir, int index)
{
int interval;
if (index == CUR_AVERAGE)
index = CurIndex();
else
if (index == ALL_AVERAGE)
{
index = CurIndex();
if (RunTime[index] <= 0)
return 0;
return ((double) Values[dir][index]) / RunTime[index];
}
else
if (index == 0)
{
if (RunTime[0] <= 0)
return 0;
return ((double) Values[dir][0]) / RunTime[0];
}
if (index < 1 || index >= ValueSize || (interval = RunTime[index] - RunTime[index-1]) <= 0)
return 0;
return ((double) (Values[dir][index] - Values[dir][index-1]))/interval;
}
/****************************************************************************/
bool KThruput::ShiftArray(int *Array)
{
memmove((void*) Array,(void*) Array+sizeof(int),(ValueSize - 1)*sizeof(int));
Array[ValueSize - 1] = 0;
return TRUE;
}
/****************************************************************************/
bool KThruput::AddValue(int dir, unsigned long data)
{
double rate;
int index = CurIndex();
Values[dir][index] = data;
rate = GetRate(dir, index);
if (MaxRate[dir] < rate)
MaxRate[dir] = rate;
if (MinRate[dir] > rate || MinRate[dir] == 0)
MinRate[dir] = rate;
return TRUE;
}
/****************************************************************************/
bool KThruput::AddValue(int duration, unsigned long in, unsigned long out)
{
int index = CurIndex(COUNT);
RunTime[index] = duration;
AddValue(IN_DATA,in);
AddValue(OUT_DATA,out);
repaint();
return TRUE;
}
/****************************************************************************/
bool KThruput::SetTimeScale(int value)
{
TimeScale = value;
/* Sonst kommen die Werte durcheinander */
if (Connected >= 0)
{
StopConnection();
StartConnection();
}
return TRUE;
}
/****************************************************************************/
bool KThruput::StartConnection()
{
DeleteConnection();
Connected = 0;
NotConnected = FALSE;
repaint();
return TRUE;
}
/****************************************************************************/
bool KThruput::StopConnection()
{
NotConnected = TRUE;
repaint();
return TRUE;
}
/****************************************************************************/
const char *KThruput::DeleteConnection()
{
int i;
Connected = NOT_CONNECTED;
NotConnected = TRUE;
for (i = 0; i < ValueSize; i++)
Values[IN_DATA][i] = Values[OUT_DATA][i] = RunTime[i] = 0;
MinRate[IN_DATA] = MinRate[OUT_DATA] = 0;
MaxRate[IN_DATA] = MaxRate[OUT_DATA] = 0;
repaint();
return NULL;
}
/****************************************************************************/
double KThruput::GetMinRate(int dir)
{
return MinRate[dir];
}
/****************************************************************************/
double KThruput::GetMaxRate(int dir)
{
return MaxRate[dir];
}
/****************************************************************************/
int KThruput::GetTraffic(int dir)
{
return Values[dir][CurIndex()];;
}
/****************************************************************************/
QColor &KThruput::GetColor(int dir)
{
return PenColor[dir];
}
/****************************************************************************/
int KThruput::CurIndex(int todo)
{
int index;
if (todo == COUNT)
Connected++;
index = ((Connected-1)/TimeScale)+1;
if (Connected < 1)
index = 0;
if (index >= ValueSize)
{
if (todo == COUNT && index > ((Connected-2)/TimeScale)+1)
{
ShiftArray(RunTime);
ShiftArray(Values[IN_DATA]);
ShiftArray(Values[OUT_DATA]);
}
index = ValueSize-1;
}
return index;
}
/****************************************************************************/

View File

@ -0,0 +1,83 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <errno.h>
#define _KISDNLOG_MAIN_C_
#include "kisdnlog.h"
/****************************************************************************/
//const char*basename(const char *);
/****************************************************************************/
const char *options = "p:";
/****************************************************************************/
int main(int argc, char** argv)
{
const char *port = NULL;
const char *server = NULL;
int c;
KApplication app(argc, argv, KISDNLOG_NAME);
Messager = new KMsgHdl();
// Messager->HandleMessage(TRUE,123,0,(3,"wer","bist","du?"));
// Messager->HandleMessage(TRUE,123,5,(3,"1",MsgHdl::ltoa(2),MsgHdl::dtoa(3.145)));
while ((c = getopt(argc, argv, options)) != EOF)
switch(c)
{
case 'p' : port = optarg;
break;
case '?' : fprintf(stderr,"%s usage: %s %s [server]\n\n", basename(argv[0]), argv[0], options);
exit(1);
}
if (optind < argc)
server = argv[optind];
if (server != NULL)
{
KConnection *conn;
if ((conn = new KConnection(&app,server,port)) != NULL)
{
conn->Connect();
conn->show();
}
}
else
KConnection::StartApp(&app);
return app.exec();
}
/****************************************************************************/

View File

@ -0,0 +1,350 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <stdarg.h>
#include "message.h"
/******************************************************************************/
#define NUM_RET_STRINGS 30
/******************************************************************************/
MsgHdl::MsgHdl(int (*newfct)(const char*, int), const char* NewMsgFileName, const char* NewLogFile)
{
if ((fct = newfct) == NULL)
InternalError(1, "MsgHdl::MsgHdl: There is no message function!\n");
LogFile = NULL;
MsgFileName = NULL;
SetMsgFile(NewMsgFileName);
if (NewLogFile != NULL)
{
LogFile = new fstream(NewLogFile,ios::out);
if (!*LogFile)
{
InternalError(3, "MsgHdl::MsgHdl: Can't open logfile `%s': %s\n", NewLogFile, strerror(errno));
delete LogFile;
LogFile = NULL;
}
}
}
/******************************************************************************/
MsgHdl::~MsgHdl()
{
if (MsgFileName != NULL)
free(MsgFileName);
if (LogFile != NULL)
{
LogFile->close();
delete LogFile;
}
}
/******************************************************************************/
int MsgHdl::SetMsgFile(const char *NewMsgFileName)
{
if (MsgFileName != NULL)
{
free(MsgFileName);
MsgFileName = NULL;
}
if (NewMsgFileName != NULL)
MsgFileName = strdup(NewMsgFileName);
return 0;
}
/******************************************************************************/
int MsgHdl::InternalError(int ErrNumber, const char *fmt, ...)
{
auto va_list ap;
static char Output[BUFSIZ];
va_start(ap, fmt);
vsnprintf(Output, BUFSIZ, fmt, ap);
va_end(ap);
if (fct != NULL)
return fct(Output,ErrNumber);
else
fprintf(stderr, "%s %d: %s", ErrNumber < 0?"Error":"Warning", ErrNumber, Output);
return (ErrNumber < 0?-1:1);
}
/******************************************************************************/
const char *MsgHdl::GetText(int ErrNumber, int *Cnt)
{
static char Format[BUFSIZ];
char FString[BUFSIZ];
char dummy[BUFSIZ];
int Number = 0;
fstream *MsgFile;
Format[0] = '\0';
if (MsgFileName == NULL)
{
*Cnt = noFile;
return NULL;
}
if ((MsgFile = new fstream(MsgFileName,ios::in)) == NULL || !*MsgFile)
{
*Cnt = noFileHandle;
return NULL;
}
while (*MsgFile && !Number) /* Bis das File ausgelesen ist */
{
MsgFile->getline(FString,BUFSIZ);
if (sscanf(FString,"%d%[\t ]%d%[\t ]%[^\n]",&Number,dummy,Cnt,dummy,Format) != 5 ||
Number != ErrNumber)
Number = 0;
}
MsgFile->close();
delete MsgFile;
if (Number == 0)
return NULL;
else
return Format;
}
/******************************************************************************/
const char **MsgHdl::List2Array(int Argc,...)
{
int Cnt = 0;
static const char *Ret_List[20];
va_list ap;
va_start(ap,Argc);
for (Cnt = 0; Cnt < Argc; Cnt++)
Ret_List[Cnt] = va_arg(ap,char*);
va_end(ap);
Ret_List[Cnt] = NULL;
return Ret_List;
}
/******************************************************************************/
#ifdef DEBUG
int MsgHdl::_HandleMessage( int Line, const char *FileName, int Condition, int ErrNumber, int Errno, const char *ErrText[] )
#else
int MsgHdl::_HandleMessage( int, const char *, int Condition, int ErrNumber, int Errno, const char *ErrText[] )
#endif /* DEBUG */
{
char OutString[BUFSIZ];
char Output[BUFSIZ] = "";
const char *FormatString;
int TextCnt = 0;
int ParamCnt = 0;
if (ErrNumber == 0)
return 0;
if (Condition)
{
#ifdef DEBUG
// time_t t;
// time(&t);
// ERROUT << ctime(&t);
sprintf(Output,"%s:%d# ",FileName,Line);
#endif /* DEBUG */
/* Fehler fuer fehlende Umgebungsvariable muss gesondert
behandelt werden, weil die Datei error.list noch nicht
gefunden werden kann. */
// if (ErrNumber == 99)
// sprintf(Output,"%sEnvironment variable `%s' is not set!\n", Output, ErrText[0]);
// else
{
FormatString = GetText(ErrNumber,&ParamCnt);
while(ErrText[TextCnt] != NULL) TextCnt++;
if (FormatString != NULL)
{
if (ParamCnt == TextCnt)
{
MsgHdl::FormatString(OutString,FormatString,ErrText);
if (Errno)
sprintf(Output,"%s%s: %s\n", Output, OutString, strerror(Errno));
else
sprintf(Output,"%s%s\n", Output, OutString);
}
else
sprintf(Output,"%sHsgHdl::HandleMessage: Wrong number of ErrorText expected %d, got %d %s!\n",Output,ParamCnt,TextCnt,ValueString(ErrText));
}
else
{
switch(ParamCnt)
{
case noFile:
sprintf(Output,"%sHsgHdl::GetText: There is no message file %s!\n", Output, ValueString(ErrText));
break;
case noFileHandle:
sprintf(Output,"%sHsgHdl::GetText: Can't open message file `%s' %s: %s!\n", Output, MsgFileName,ValueString(ErrText), strerror(errno));
break;
case unknownErr:
sprintf(Output,"%sHsgHdl::GetText: An unknown error is occoured %s!\n", Output, ValueString(ErrText));
break;
default:
sprintf(Output,"%sHsgHdl::HandleMessage: unknown message number %d %s!\n", Output, ErrNumber,ValueString(ErrText));
break;
}
}
}
if (LogFile)
(*LogFile) << Output;
if (fct == NULL)
return InternalError(ErrNumber, "%s", Output);
else
return fct(Output,ErrNumber);
}
return 0;
}
/******************************************************************************/
void MsgHdl::FormatString (char *OutString, const char *FormatString, const char *ErrText[])
{
char FS[BUFSIZ];
char *Ptr = FS;
strcpy(FS,FormatString);
FormatString = FS;
*OutString = '\0';
while ((Ptr = strstr(Ptr,"\\n")) != NULL)
{
*Ptr = '\n';
memmove(Ptr+1,Ptr+2,strlen(Ptr)-1);
}
while (*ErrText != NULL && (Ptr = strstr(FormatString,"%s")) != NULL)
{
*Ptr = '\0';
strcat(OutString,FormatString);
strcat(OutString,*ErrText);
ErrText++;
FormatString = Ptr+2;
}
strcat(OutString,FormatString);
#ifdef DEBUG
if (*ErrText != NULL || strstr(FormatString,"%s") != NULL)
InternalError(3,"MsgHdl::FormatString: numbers of parameters not equal!\n");
#endif DEBUG
}
/****************************************************************************/
const char *MsgHdl::ValueString(const char *ErrText[])
{
static char RetCode[BUFSIZ];
if (*ErrText != NULL)
{
strcpy(RetCode, "(values: ");
while (*ErrText != NULL)
{
strcat(RetCode, *ErrText);
if (*(++ErrText) != NULL)
strcat(RetCode, ", ");
}
strcat(RetCode, ")");
}
else
strcpy(RetCode, "(no values)");
return RetCode;
}
/****************************************************************************/
const char *MsgHdl::ltoa(long Value)
{
static char RetCode[NUM_RET_STRINGS][11];
static int Index = 0;
Index = (Index + 1) % NUM_RET_STRINGS;
sprintf(RetCode[Index], "%ld", Value);
return RetCode[Index];
}
/****************************************************************************/
const char *MsgHdl::dtoa(double Value, int Pre, int Post)
{
static char RetCode[NUM_RET_STRINGS][25];
static int Index = 0;
Pre = Pre < 0 ? 0 : (Pre > 22 ? 22 : Pre);
Post= Post < 0 ? 0 : Post;
Index = (Index + 1) % NUM_RET_STRINGS;
sprintf(RetCode[Index], "%*.*f", Pre, Post, Value);
return RetCode[Index];
}
/****************************************************************************/

View File

@ -0,0 +1,65 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#include <fstream.h>
/******************************************************************************/
#define HandleMessage(a,b,c,d) _HandleMessage(__LINE__,__FILE__,a,b,c,MsgHdl::List2Array##d)
/******************************************************************************/
class MsgHdl
{
private:
enum {noMsg = -4, unknownErr = -3, noFileHandle = -2, noFile = -1};
private:
char *MsgFileName;
fstream *LogFile;
int (*fct)(const char*, int);
private:
void FormatString (char *OutString, const char *FormatString, const char *ErrText[]);
const char *ValueString(const char *ErrText[]);
protected:
virtual const char *GetText(int ErrNumber, int *Cnt);
int InternalError(int ErrNumber, const char *fmt, ...);
public:
MsgHdl(int (*)(const char*, int), const char* = NULL, const char* = NULL);
virtual ~MsgHdl();
static const char **List2Array(int Argc,...);
static const char *ltoa(long);
static const char *dtoa(double, int = 0, int = 2);
int _HandleMessage( int, const char *, int, int, int, const char *ErrText[]);
int SetMsgFile(const char *NewMsgFileName);
};
/******************************************************************************/

View File

@ -0,0 +1,40 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
#define KI_OUT_OF_MEMORY 1
#define KI_NO_FILE 2
#define KI_NO_DIR 3
#define KI_NO_HOST 101
#define KI_NO_CONNECT 102
#define KI_NOBODY 103
#define KI_CONN_BROKEN 201
#define KI_ACC_DENIED 202
#define KI_UNKNOWN_MSG 203
#define KI_WRONG_RESULT 204
#define KI_UNKNOWN_MSG2 205
#define KI_DIFF_VERSION 206
#define KI_UNKNOWN_MSG3 301
#define KI_INVALID_PORT 1001
#define KI_INVALID_ELEMS 1101
#define KI_INVALID_LINES 1201

View File

@ -0,0 +1,262 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 1998-03-05 20:50+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
#: kcalls.cpp:61
msgid "Status"
msgstr ""
#: kcalls.cpp:62
msgid "Direction"
msgstr ""
#: kcalls.cpp:63
msgid "My Number"
msgstr ""
#: kcalls.cpp:64
msgid "My Alias"
msgstr ""
#: kcalls.cpp:65
msgid "Full Number"
msgstr ""
#: kcalls.cpp:66
msgid "Areacode"
msgstr ""
#: kcalls.cpp:67
msgid "Other Number"
msgstr ""
#: kcalls.cpp:68
msgid "Other Alias"
msgstr ""
#: kcalls.cpp:69
msgid "Area"
msgstr ""
#: kcalls.cpp:70
msgid "Connecting time"
msgstr ""
#: kcalls.cpp:71
msgid "Duration"
msgstr ""
#: kcalls.cpp:72
msgid "Units"
msgstr ""
#: kcalls.cpp:73
msgid "Fee"
msgstr ""
#: kcalls.cpp:74
msgid "Currency"
msgstr ""
#: kcalls.cpp:75
msgid "Bytes in"
msgstr ""
#: kcalls.cpp:76
msgid "Bytes out"
msgstr ""
#: kcalls.cpp:77
msgid "Bps in"
msgstr ""
#: kcalls.cpp:78
msgid "Bps out"
msgstr ""
#: kcalls.cpp:79 kmessage.cpp:18
msgid "Message"
msgstr ""
#: kcalls.cpp:135
msgid "dial out"
msgstr ""
#: kcalls.cpp:137
msgid "dial in"
msgstr ""
#: kcalls.cpp:144
msgid "Unknown"
msgstr ""
#: kcalls.cpp:156
msgid "connected"
msgstr ""
#: kcalls.cpp:159
msgid "got thruput"
msgstr ""
#: kcalls.cpp:162
msgid "got AOCD"
msgstr ""
#: kcalls.cpp:165
msgid "got time"
msgstr ""
#: kcalls.cpp:168
msgid "ringing"
msgstr ""
#: kcalls.cpp:171
msgid "got message"
msgstr ""
#: kcalls.cpp:174
msgid "hangup"
msgstr ""
#: kcalls.cpp:177
msgid "unknown state"
msgstr ""
#: kchan.cpp:49
msgid "Max"
msgstr ""
#: kchan.cpp:60
msgid "Average"
msgstr ""
#: kchan.cpp:71
msgid "Current"
msgstr ""
#: kchan.cpp:83
msgid "Traffic"
msgstr ""
#: kconnect.cpp:139
msgid "Connect to server"
msgstr ""
#: kconnect.cpp:276
msgid ": Connected to isdnlog on "
msgstr ""
#: kconnect.cpp:294
msgid ": Log from isdnlog on "
msgstr ""
#: kconnect.cpp:376
msgid ": Not connected"
msgstr ""
#: khost.cpp:19
msgid "Host"
msgstr ""
#: khost.cpp:20
msgid "Port"
msgstr ""
#: khost.cpp:22
msgid "OK"
msgstr ""
#: khost.cpp:23 klog.cpp:109
msgid "Cancel"
msgstr ""
#: khost.cpp:24
msgid "Help"
msgstr ""
#: klog.cpp:36
msgid "Log Window"
msgstr ""
#: klog.cpp:101
#, c-format
msgid ""
"file `%s' exists.\n"
"Do you want to overwrite, or append it?\n"
msgstr ""
#: klog.cpp:104 kmessage.cpp:14
msgid "Warning"
msgstr ""
#: klog.cpp:107
msgid "Overwrite"
msgstr ""
#: klog.cpp:108
msgid "Append"
msgstr ""
#: klogo.cpp:55
msgid "No Bitmap found"
msgstr ""
#: kmenu.cpp:12
msgid "&Connect"
msgstr ""
#: kmenu.cpp:13
msgid "&Reconnect"
msgstr ""
#: kmenu.cpp:14
msgid "&Disconnect"
msgstr ""
#: kmenu.cpp:15
msgid "&Save logfile"
msgstr ""
#: kmenu.cpp:16
msgid "&Quit"
msgstr ""
#: kmenu.cpp:23
msgid "&Show Log"
msgstr ""
#: kmenu.cpp:33
msgid "&File"
msgstr ""
#: kmenu.cpp:34
msgid "&Windows"
msgstr ""
#: kmenu.cpp:36
msgid "&Help"
msgstr ""
#: kmessage.cpp:14
msgid "Error"
msgstr ""
#: koldcalls.cpp:49
msgid "Old Calls"
msgstr ""
#: kthruput.cpp:72
msgid "Not connected"
msgstr ""

View File

@ -0,0 +1,356 @@
/* $Id$
*
* kisdnog for ISDN accounting for isdn4linux. (Report-module)
*
* Copyright 1996, 1997 by Stefan Luethje (luethje@sl-gw.lake.de)
* Claudia Weber (weber@sl-gw.lake.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log:
*/
/****************************************************************************
** KLogo meta object code from reading C++ file 'kisdnlog.h'
**
** Created: Thu May 7 01:04:04 1998
** by: The Qt Meta Object Compiler ($Revision$)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#if !defined(Q_MOC_OUTPUT_REVISION)
#define Q_MOC_OUTPUT_REVISION 2
#elif Q_MOC_OUTPUT_REVISION != 2
#error Moc format conflict - please regenerate all moc files
#endif
#include "kisdnlog.h"
#include <qmetaobj.h>
const char *KLogo::className() const
{
return "KLogo";
}
QMetaObject *KLogo::metaObj = 0;
void KLogo::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(QFrame::className(), "QFrame") != 0 )
badSuperclassWarning("KLogo","QFrame");
if ( !QFrame::metaObject() )
QFrame::initMetaObject();
metaObj = new QMetaObject( "KLogo", "QFrame",
0, 0,
0, 0 );
}
const char *KMenu::className() const
{
return "KMenu";
}
QMetaObject *KMenu::metaObj = 0;
void KMenu::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(KMenuBar::className(), "KMenuBar") != 0 )
badSuperclassWarning("KMenu","KMenuBar");
if ( !KMenuBar::metaObject() )
KMenuBar::initMetaObject();
metaObj = new QMetaObject( "KMenu", "KMenuBar",
0, 0,
0, 0 );
}
const char *KHost::className() const
{
return "KHost";
}
QMetaObject *KHost::metaObj = 0;
void KHost::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(QDialog::className(), "QDialog") != 0 )
badSuperclassWarning("KHost","QDialog");
if ( !QDialog::metaObject() )
QDialog::initMetaObject();
typedef void(KHost::*m1_t0)(int);
typedef void(KHost::*m1_t1)(int);
typedef void(KHost::*m1_t2)();
typedef void(KHost::*m1_t3)();
typedef void(KHost::*m1_t4)();
m1_t0 v1_0 = &KHost::hostChanged;
m1_t1 v1_1 = &KHost::portChanged;
m1_t2 v1_2 = &KHost::go;
m1_t3 v1_3 = &KHost::Quit;
m1_t4 v1_4 = &KHost::showHelp;
QMetaData *slot_tbl = new QMetaData[5];
slot_tbl[0].name = "hostChanged(int)";
slot_tbl[1].name = "portChanged(int)";
slot_tbl[2].name = "go()";
slot_tbl[3].name = "Quit()";
slot_tbl[4].name = "showHelp()";
slot_tbl[0].ptr = *((QMember*)&v1_0);
slot_tbl[1].ptr = *((QMember*)&v1_1);
slot_tbl[2].ptr = *((QMember*)&v1_2);
slot_tbl[3].ptr = *((QMember*)&v1_3);
slot_tbl[4].ptr = *((QMember*)&v1_4);
metaObj = new QMetaObject( "KHost", "QDialog",
slot_tbl, 5,
0, 0 );
}
const char *KThruput::className() const
{
return "KThruput";
}
QMetaObject *KThruput::metaObj = 0;
void KThruput::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(QFrame::className(), "QFrame") != 0 )
badSuperclassWarning("KThruput","QFrame");
if ( !QFrame::metaObject() )
QFrame::initMetaObject();
metaObj = new QMetaObject( "KThruput", "QFrame",
0, 0,
0, 0 );
}
const char *KChannel::className() const
{
return "KChannel";
}
QMetaObject *KChannel::metaObj = 0;
void KChannel::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(QFrame::className(), "QFrame") != 0 )
badSuperclassWarning("KChannel","QFrame");
if ( !QFrame::metaObject() )
QFrame::initMetaObject();
typedef const char*(KChannel::*m1_t0)();
m1_t0 v1_0 = &KChannel::DeleteConnection;
QMetaData *slot_tbl = new QMetaData[1];
slot_tbl[0].name = "DeleteConnection()";
slot_tbl[0].ptr = *((QMember*)&v1_0);
metaObj = new QMetaObject( "KChannel", "QFrame",
slot_tbl, 1,
0, 0 );
}
const char *KSplit::className() const
{
return "KSplit";
}
QMetaObject *KSplit::metaObj = 0;
void KSplit::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(KNewPanner::className(), "KNewPanner") != 0 )
badSuperclassWarning("KSplit","KNewPanner");
if ( !KNewPanner::metaObject() )
KNewPanner::initMetaObject();
metaObj = new QMetaObject( "KSplit", "KNewPanner",
0, 0,
0, 0 );
}
const char *KCalls::className() const
{
return "KCalls";
}
QMetaObject *KCalls::metaObj = 0;
void KCalls::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(KTabListBox::className(), "KTabListBox") != 0 )
badSuperclassWarning("KCalls","KTabListBox");
if ( !KTabListBox::metaObject() )
KTabListBox::initMetaObject();
metaObj = new QMetaObject( "KCalls", "KTabListBox",
0, 0,
0, 0 );
}
const char *KCurCalls::className() const
{
return "KCurCalls";
}
QMetaObject *KCurCalls::metaObj = 0;
void KCurCalls::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(KCalls::className(), "KCalls") != 0 )
badSuperclassWarning("KCurCalls","KCalls");
if ( !KCalls::metaObject() )
KCalls::initMetaObject();
typedef bool(KCurCalls::*m1_t0)();
m1_t0 v1_0 = &KCurCalls::ClearLines;
QMetaData *slot_tbl = new QMetaData[1];
slot_tbl[0].name = "ClearLines()";
slot_tbl[0].ptr = *((QMember*)&v1_0);
metaObj = new QMetaObject( "KCurCalls", "KCalls",
slot_tbl, 1,
0, 0 );
}
const char *KLog::className() const
{
return "KLog";
}
QMetaObject *KLog::metaObj = 0;
void KLog::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(QMultiLineEdit::className(), "QMultiLineEdit") != 0 )
badSuperclassWarning("KLog","QMultiLineEdit");
if ( !QMultiLineEdit::metaObject() )
QMultiLineEdit::initMetaObject();
metaObj = new QMetaObject( "KLog", "QMultiLineEdit",
0, 0,
0, 0 );
}
const char *KLogWin::className() const
{
return "KLogWin";
}
QMetaObject *KLogWin::metaObj = 0;
void KLogWin::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(KTopLevelWidget::className(), "KTopLevelWidget") != 0 )
badSuperclassWarning("KLogWin","KTopLevelWidget");
if ( !KTopLevelWidget::metaObject() )
KTopLevelWidget::initMetaObject();
typedef void(KLogWin::*m1_t0)();
typedef bool(KLogWin::*m1_t1)(const char*);
m1_t0 v1_0 = &KLogWin::Quit;
m1_t1 v1_1 = &KLogWin::SaveToFile;
QMetaData *slot_tbl = new QMetaData[2];
slot_tbl[0].name = "Quit()";
slot_tbl[1].name = "SaveToFile(const char*)";
slot_tbl[0].ptr = *((QMember*)&v1_0);
slot_tbl[1].ptr = *((QMember*)&v1_1);
metaObj = new QMetaObject( "KLogWin", "KTopLevelWidget",
slot_tbl, 2,
0, 0 );
}
const char *KConnection::className() const
{
return "KConnection";
}
QMetaObject *KConnection::metaObj = 0;
void KConnection::initMetaObject()
{
if ( metaObj )
return;
if ( strcmp(KTopLevelWidget::className(), "KTopLevelWidget") != 0 )
badSuperclassWarning("KConnection","KTopLevelWidget");
if ( !KTopLevelWidget::metaObject() )
KTopLevelWidget::initMetaObject();
typedef bool(KConnection::*m1_t0)();
typedef void(KConnection::*m1_t1)();
typedef void(KConnection::*m1_t2)();
typedef bool(KConnection::*m1_t3)();
typedef bool(KConnection::*m1_t4)();
typedef bool(KConnection::*m1_t5)();
typedef bool(KConnection::*m1_t6)();
typedef bool(KConnection::*m1_t7)();
m1_t0 v1_0 = &KConnection::eval_message;
m1_t1 v1_1 = &KConnection::DestroyLogWin;
m1_t2 v1_2 = &KConnection::Quit;
m1_t3 v1_3 = &KConnection::NewConnect;
m1_t4 v1_4 = &KConnection::ReConnect;
m1_t5 v1_5 = &KConnection::Disconnect;
m1_t6 v1_6 = &KConnection::SetLogWin;
m1_t7 v1_7 = &KConnection::SaveLogFile;
QMetaData *slot_tbl = new QMetaData[8];
slot_tbl[0].name = "eval_message()";
slot_tbl[1].name = "DestroyLogWin()";
slot_tbl[2].name = "Quit()";
slot_tbl[3].name = "NewConnect()";
slot_tbl[4].name = "ReConnect()";
slot_tbl[5].name = "Disconnect()";
slot_tbl[6].name = "SetLogWin()";
slot_tbl[7].name = "SaveLogFile()";
slot_tbl[0].ptr = *((QMember*)&v1_0);
slot_tbl[1].ptr = *((QMember*)&v1_1);
slot_tbl[2].ptr = *((QMember*)&v1_2);
slot_tbl[3].ptr = *((QMember*)&v1_3);
slot_tbl[4].ptr = *((QMember*)&v1_4);
slot_tbl[5].ptr = *((QMember*)&v1_5);
slot_tbl[6].ptr = *((QMember*)&v1_6);
slot_tbl[7].ptr = *((QMember*)&v1_7);
typedef void(KConnection::*m2_t0)();
m2_t0 v2_0 = &KConnection::quit;
QMetaData *signal_tbl = new QMetaData[1];
signal_tbl[0].name = "quit()";
signal_tbl[0].ptr = *((QMember*)&v2_0);
metaObj = new QMetaObject( "KConnection", "KTopLevelWidget",
slot_tbl, 8,
signal_tbl, 1 );
}
// SIGNAL quit
void KConnection::quit()
{
activate_signal( "quit()" );
}

View File

@ -0,0 +1,18 @@
1 0 Out of memory!
2 1 Can not write file `%s'
3 1 Can not use directory `%s'
101 0 Hostname is empty!
102 2 Can not connect to host `%s' on port %s
103 0 Oops, You are nobody!?!
201 0 Connection to server broken!
202 0 Access to the server denied.
203 1 WF_ACC: got unknown message type %s.
204 0 MSG_CHANGE_CHAN: internal error (wrong structure)!
205 1 Default: got unknown message type %s.
206 2 Server and client have different version:\n\nServer has version %s\nClient has version %s
301 1 Internal error: got unknown message type in SetCallInfo: %s
1001 1 Invalid value for a port: `%s'\n\nMust be a positive number!
1101 2 Callwindow has %s parameters for a call, expected were %s!
1201 2 In window `%s' it is not allowed to have max. %s lines!
123 3 Das ist ein\n\ntest:*%s*%s*%s*!!!\nfred