ifpgui-1.0.0/000755 001750 000144 00000000000 11403344617 011172 5ustar00000000 000000 ifpgui-1.0.0/ifprecconv.h000755 001750 000144 00000003221 11312615352 013476 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef __IFPRECCONV_H__ #define __IFPRECCONV_H__ #ifdef __cplusplus extern "C" { #endif extern int ifprecconv(const char *sourcefile, const char *destfile); #ifdef __cplusplus } #endif #endif //__IFPRECCONV_H__ ifpgui-1.0.0/Makefile000755 001750 000144 00000036564 11403110323 012634 0ustar00000000 000000 ############################################################################# # Makefile for building: bin/ifpgui # Generated by qmake (2.01a) (Qt 4.6.2) on: Sun Jun 6 23:25:23 2010 # Project: ifpgui.pro # Template: app # Command: /usr/bin/qmake -unix -o Makefile ifpgui.pro ############################################################################# ####### Compiler, tools and options CC = gcc CXX = g++ DEFINES = -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED CFLAGS = -m64 -pipe -O2 -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -Wall -W -D_REENTRANT $(DEFINES) CXXFLAGS = -m64 -pipe -O2 -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -Wall -W -D_REENTRANT $(DEFINES) INCPATH = -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtXml -I/usr/include -Ibuild/moc LINK = g++ LFLAGS = -m64 -Wl,-O1 LIBS = $(SUBLIBS) -L/usr/lib64 -L/usr/lib -lusb-1.0 -lQtXml -L/usr/lib64 -lQtGui -L/usr/X11R6/lib64 -lQtCore -lpthread AR = ar cqs RANLIB = QMAKE = /usr/bin/qmake TAR = tar -cf COMPRESS = gzip -9f COPY = cp -f SED = sed COPY_FILE = $(COPY) COPY_DIR = $(COPY) -r STRIP = strip INSTALL_FILE = install -m 644 -p INSTALL_DIR = $(COPY_DIR) INSTALL_PROGRAM = install -m 755 -p DEL_FILE = rm -f SYMLINK = ln -f -s DEL_DIR = rmdir MOVE = mv -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p ####### Output directory OBJECTS_DIR = build/obj/ ####### Files SOURCES = settings.cpp \ revision.cpp \ radiofreqdlg.cpp \ main.cpp \ ifpguiview.cpp \ ifp_gui.cpp \ gui_user.cpp \ fileviewer.cpp \ createdirdlg.cpp \ backend/iointerface.cpp \ backend/ifpinterface.cpp \ ifprecconv/ifprecconv.c \ ifprecconv/adpcm.c \ libifp/userfile.c \ libifp/tuner.c \ libifp/readwrite.c \ libifp/prim.c \ libifp/ifp_os_libusb.c \ libifp/error_strings.c \ libifp/comp.c \ playlist/playlistloader.cpp build/moc/moc_radiofreqdlg.cpp \ build/moc/moc_ifpguiview.cpp \ build/moc/moc_ifp_gui.cpp \ build/moc/moc_fileviewer.cpp \ build/moc/moc_createdirdlg.cpp \ qrc_ifpgui.cpp OBJECTS = build/obj/settings.o \ build/obj/revision.o \ build/obj/radiofreqdlg.o \ build/obj/main.o \ build/obj/ifpguiview.o \ build/obj/ifp_gui.o \ build/obj/gui_user.o \ build/obj/fileviewer.o \ build/obj/createdirdlg.o \ build/obj/iointerface.o \ build/obj/ifpinterface.o \ build/obj/ifprecconv.o \ build/obj/adpcm.o \ build/obj/userfile.o \ build/obj/tuner.o \ build/obj/readwrite.o \ build/obj/prim.o \ build/obj/ifp_os_libusb.o \ build/obj/error_strings.o \ build/obj/comp.o \ build/obj/playlistloader.o \ build/obj/moc_radiofreqdlg.o \ build/obj/moc_ifpguiview.o \ build/obj/moc_ifp_gui.o \ build/obj/moc_fileviewer.o \ build/obj/moc_createdirdlg.o \ build/obj/qrc_ifpgui.o DIST = /usr/share/qt4/mkspecs/common/g++.conf \ /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/common/linux.conf \ /usr/share/qt4/mkspecs/qconfig.pri \ /usr/share/qt4/mkspecs/features/qt_functions.prf \ /usr/share/qt4/mkspecs/features/qt_config.prf \ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ /usr/share/qt4/mkspecs/features/default_pre.prf \ /usr/share/qt4/mkspecs/features/release.prf \ /usr/share/qt4/mkspecs/features/default_post.prf \ /usr/share/qt4/mkspecs/features/warn_on.prf \ /usr/share/qt4/mkspecs/features/qt.prf \ /usr/share/qt4/mkspecs/features/unix/thread.prf \ /usr/share/qt4/mkspecs/features/moc.prf \ /usr/share/qt4/mkspecs/features/resources.prf \ /usr/share/qt4/mkspecs/features/uic.prf \ /usr/share/qt4/mkspecs/features/yacc.prf \ /usr/share/qt4/mkspecs/features/lex.prf \ /usr/share/qt4/mkspecs/features/include_source_dir.prf \ ifpgui.pro QMAKE_TARGET = ifpgui DESTDIR = bin/ TARGET = bin/ifpgui first: all ####### Implicit rules .SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o: $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules all: Makefile $(TARGET) $(TARGET): $(OBJECTS) @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) Makefile: ifpgui.pro /usr/share/qt4/mkspecs/default/qmake.conf /usr/share/qt4/mkspecs/common/g++.conf \ /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/common/linux.conf \ /usr/share/qt4/mkspecs/qconfig.pri \ /usr/share/qt4/mkspecs/features/qt_functions.prf \ /usr/share/qt4/mkspecs/features/qt_config.prf \ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ /usr/share/qt4/mkspecs/features/default_pre.prf \ /usr/share/qt4/mkspecs/features/release.prf \ /usr/share/qt4/mkspecs/features/default_post.prf \ /usr/share/qt4/mkspecs/features/warn_on.prf \ /usr/share/qt4/mkspecs/features/qt.prf \ /usr/share/qt4/mkspecs/features/unix/thread.prf \ /usr/share/qt4/mkspecs/features/moc.prf \ /usr/share/qt4/mkspecs/features/resources.prf \ /usr/share/qt4/mkspecs/features/uic.prf \ /usr/share/qt4/mkspecs/features/yacc.prf \ /usr/share/qt4/mkspecs/features/lex.prf \ /usr/share/qt4/mkspecs/features/include_source_dir.prf \ /usr/lib64/libQtXml.prl \ /usr/lib64/libQtCore.prl \ /usr/lib64/libQtGui.prl $(QMAKE) -unix -o Makefile ifpgui.pro /usr/share/qt4/mkspecs/common/g++.conf: /usr/share/qt4/mkspecs/common/unix.conf: /usr/share/qt4/mkspecs/common/linux.conf: /usr/share/qt4/mkspecs/qconfig.pri: /usr/share/qt4/mkspecs/features/qt_functions.prf: /usr/share/qt4/mkspecs/features/qt_config.prf: /usr/share/qt4/mkspecs/features/exclusive_builds.prf: /usr/share/qt4/mkspecs/features/default_pre.prf: /usr/share/qt4/mkspecs/features/release.prf: /usr/share/qt4/mkspecs/features/default_post.prf: /usr/share/qt4/mkspecs/features/warn_on.prf: /usr/share/qt4/mkspecs/features/qt.prf: /usr/share/qt4/mkspecs/features/unix/thread.prf: /usr/share/qt4/mkspecs/features/moc.prf: /usr/share/qt4/mkspecs/features/resources.prf: /usr/share/qt4/mkspecs/features/uic.prf: /usr/share/qt4/mkspecs/features/yacc.prf: /usr/share/qt4/mkspecs/features/lex.prf: /usr/share/qt4/mkspecs/features/include_source_dir.prf: /usr/lib64/libQtXml.prl: /usr/lib64/libQtCore.prl: /usr/lib64/libQtGui.prl: qmake: FORCE @$(QMAKE) -unix -o Makefile ifpgui.pro dist: @$(CHK_DIR_EXISTS) build/obj/ifpgui1.0.0 || $(MKDIR) build/obj/ifpgui1.0.0 $(COPY_FILE) --parents $(SOURCES) $(DIST) build/obj/ifpgui1.0.0/ && $(COPY_FILE) --parents settings.h revision.h radiofreqdlg.h ifprecconv.h ifpguiview.h ifp_gui.h ifp.h gui_user.h fileviewer.h createdirdlg.h backend/iointerface.h backend/ifpinterface.h ifprecconv/endian.h ifprecconv/adpcm.h libifp/prim.h libifp/ifp_os.h playlist/playlistloader.h build/obj/ifpgui1.0.0/ && $(COPY_FILE) --parents ifpgui.qrc build/obj/ifpgui1.0.0/ && $(COPY_FILE) --parents settings.cpp revision.cpp radiofreqdlg.cpp main.cpp ifpguiview.cpp ifp_gui.cpp gui_user.cpp fileviewer.cpp createdirdlg.cpp backend/iointerface.cpp backend/ifpinterface.cpp ifprecconv/ifprecconv.c ifprecconv/adpcm.c libifp/userfile.c libifp/tuner.c libifp/readwrite.c libifp/prim.c libifp/ifp_os_libusb.c libifp/error_strings.c libifp/comp.c playlist/playlistloader.cpp build/obj/ifpgui1.0.0/ && $(COPY_FILE) --parents translations/ifpgui_ru.ts translations/ifpgui_da_DK.ts translations/ifpgui_de.ts translations/ifpgui_ca.ts translations/ifpgui_blank.ts build/obj/ifpgui1.0.0/ && (cd `dirname build/obj/ifpgui1.0.0` && $(TAR) ifpgui1.0.0.tar ifpgui1.0.0 && $(COMPRESS) ifpgui1.0.0.tar) && $(MOVE) `dirname build/obj/ifpgui1.0.0`/ifpgui1.0.0.tar.gz . && $(DEL_FILE) -r build/obj/ifpgui1.0.0 clean:compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core ####### Sub-libraries distclean: clean -$(DEL_FILE) $(TARGET) -$(DEL_FILE) Makefile mocclean: compiler_moc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_source_make_all compiler_moc_header_make_all: build/moc/moc_radiofreqdlg.cpp build/moc/moc_ifpguiview.cpp build/moc/moc_ifp_gui.cpp build/moc/moc_fileviewer.cpp build/moc/moc_createdirdlg.cpp compiler_moc_header_clean: -$(DEL_FILE) build/moc/moc_radiofreqdlg.cpp build/moc/moc_ifpguiview.cpp build/moc/moc_ifp_gui.cpp build/moc/moc_fileviewer.cpp build/moc/moc_createdirdlg.cpp build/moc/moc_radiofreqdlg.cpp: backend/ifpinterface.h \ ifp.h \ radiofreqdlg.h /usr/bin/moc $(DEFINES) $(INCPATH) radiofreqdlg.h -o build/moc/moc_radiofreqdlg.cpp build/moc/moc_ifpguiview.cpp: fileviewer.h \ backend/iointerface.h \ gui_user.h \ settings.h \ ifpguiview.h /usr/bin/moc $(DEFINES) $(INCPATH) ifpguiview.h -o build/moc/moc_ifpguiview.cpp build/moc/moc_ifp_gui.cpp: ifpguiview.h \ fileviewer.h \ backend/iointerface.h \ gui_user.h \ settings.h \ ifp_gui.h /usr/bin/moc $(DEFINES) $(INCPATH) ifp_gui.h -o build/moc/moc_ifp_gui.cpp build/moc/moc_fileviewer.cpp: backend/iointerface.h \ gui_user.h \ fileviewer.h /usr/bin/moc $(DEFINES) $(INCPATH) fileviewer.h -o build/moc/moc_fileviewer.cpp build/moc/moc_createdirdlg.cpp: createdirdlg.h /usr/bin/moc $(DEFINES) $(INCPATH) createdirdlg.h -o build/moc/moc_createdirdlg.cpp compiler_rcc_make_all: qrc_ifpgui.cpp compiler_rcc_clean: -$(DEL_FILE) qrc_ifpgui.cpp qrc_ifpgui.cpp: ifpgui.qrc \ images/battery3.png \ images/multimedia.png \ images/format_s.png \ images/editdelete_s.png \ images/reload.png \ images/folder.png \ images/playlist.png \ images/music.png \ images/battery2.png \ images/delete.png \ images/download_s.png \ images/folder-locked.png \ images/upload_s.png \ images/rename.png \ images/battery1.png \ images/view_left_right.png \ images/updirectory.png \ images/reload_s.png \ images/audio.png \ images/fileclose_s.png \ images/file.png \ images/radio_s.png \ images/battery4.png \ images/folder-open.png \ images/newfolder.png \ images/battery0.png \ images/properties.png \ images/view_top_bottom.png /usr/bin/rcc -name ifpgui ifpgui.qrc -o qrc_ifpgui.cpp compiler_image_collection_make_all: qmake_image_collection.cpp compiler_image_collection_clean: -$(DEL_FILE) qmake_image_collection.cpp compiler_moc_source_make_all: compiler_moc_source_clean: compiler_uic_make_all: compiler_uic_clean: compiler_yacc_decl_make_all: compiler_yacc_decl_clean: compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: compiler_clean: compiler_moc_header_clean compiler_rcc_clean ####### Compile build/obj/settings.o: settings.cpp settings.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/settings.o settings.cpp build/obj/revision.o: revision.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/revision.o revision.cpp build/obj/radiofreqdlg.o: radiofreqdlg.cpp radiofreqdlg.h \ backend/ifpinterface.h \ ifp.h \ gui_user.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/radiofreqdlg.o radiofreqdlg.cpp build/obj/main.o: main.cpp ifp_gui.h \ ifpguiview.h \ fileviewer.h \ backend/iointerface.h \ gui_user.h \ settings.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/main.o main.cpp build/obj/ifpguiview.o: ifpguiview.cpp ifp_gui.h \ ifpguiview.h \ fileviewer.h \ backend/iointerface.h \ gui_user.h \ settings.h \ radiofreqdlg.h \ backend/ifpinterface.h \ ifp.h \ playlist/playlistloader.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/ifpguiview.o ifpguiview.cpp build/obj/ifp_gui.o: ifp_gui.cpp backend/ifpinterface.h \ ifp.h \ radiofreqdlg.h \ revision.h \ ifp_gui.h \ ifpguiview.h \ fileviewer.h \ backend/iointerface.h \ gui_user.h \ settings.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/ifp_gui.o ifp_gui.cpp build/obj/gui_user.o: gui_user.cpp gui_user.h \ backend/iointerface.h \ backend/ifpinterface.h \ ifp.h \ ifpguiview.h \ fileviewer.h \ settings.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/gui_user.o gui_user.cpp build/obj/fileviewer.o: fileviewer.cpp fileviewer.h \ backend/iointerface.h \ gui_user.h \ ifpguiview.h \ settings.h \ ifp_gui.h \ backend/ifpinterface.h \ ifp.h \ createdirdlg.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/fileviewer.o fileviewer.cpp build/obj/createdirdlg.o: createdirdlg.cpp createdirdlg.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/createdirdlg.o createdirdlg.cpp build/obj/iointerface.o: backend/iointerface.cpp ifpguiview.h \ fileviewer.h \ backend/iointerface.h \ gui_user.h \ settings.h \ createdirdlg.h \ backend/ifpinterface.h \ ifp.h \ ifp_gui.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/iointerface.o backend/iointerface.cpp build/obj/ifpinterface.o: backend/ifpinterface.cpp backend/ifpinterface.h \ ifp.h \ ifprecconv.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/ifpinterface.o backend/ifpinterface.cpp build/obj/ifprecconv.o: ifprecconv/ifprecconv.c ifprecconv/adpcm.h \ ifprecconv/endian.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/ifprecconv.o ifprecconv/ifprecconv.c build/obj/adpcm.o: ifprecconv/adpcm.c ifprecconv/adpcm.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/adpcm.o ifprecconv/adpcm.c build/obj/userfile.o: libifp/userfile.c ifp.h \ libifp/ifp_os.h \ libifp/prim.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/userfile.o libifp/userfile.c build/obj/tuner.o: libifp/tuner.c ifp.h \ libifp/ifp_os.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/tuner.o libifp/tuner.c build/obj/readwrite.o: libifp/readwrite.c ifp.h \ libifp/ifp_os.h \ libifp/prim.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/readwrite.o libifp/readwrite.c build/obj/prim.o: libifp/prim.c ifp.h \ libifp/ifp_os.h \ libifp/prim.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/prim.o libifp/prim.c build/obj/ifp_os_libusb.o: libifp/ifp_os_libusb.c ifp.h \ libifp/ifp_os.h \ libifp/prim.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/ifp_os_libusb.o libifp/ifp_os_libusb.c build/obj/error_strings.o: libifp/error_strings.c ifp.h \ libifp/ifp_os.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/error_strings.o libifp/error_strings.c build/obj/comp.o: libifp/comp.c ifp.h \ libifp/ifp_os.h \ libifp/prim.h $(CC) -c $(CFLAGS) $(INCPATH) -o build/obj/comp.o libifp/comp.c build/obj/playlistloader.o: playlist/playlistloader.cpp playlist/playlistloader.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/playlistloader.o playlist/playlistloader.cpp build/obj/moc_radiofreqdlg.o: build/moc/moc_radiofreqdlg.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/moc_radiofreqdlg.o build/moc/moc_radiofreqdlg.cpp build/obj/moc_ifpguiview.o: build/moc/moc_ifpguiview.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/moc_ifpguiview.o build/moc/moc_ifpguiview.cpp build/obj/moc_ifp_gui.o: build/moc/moc_ifp_gui.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/moc_ifp_gui.o build/moc/moc_ifp_gui.cpp build/obj/moc_fileviewer.o: build/moc/moc_fileviewer.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/moc_fileviewer.o build/moc/moc_fileviewer.cpp build/obj/moc_createdirdlg.o: build/moc/moc_createdirdlg.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/moc_createdirdlg.o build/moc/moc_createdirdlg.cpp build/obj/qrc_ifpgui.o: qrc_ifpgui.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/obj/qrc_ifpgui.o qrc_ifpgui.cpp ####### Install install: FORCE uninstall: FORCE FORCE: ifpgui-1.0.0/ifp_gui.h000755 001750 000144 00000007224 11333031475 012772 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef IFP_GUI_H #define IFP_GUI_H #include #include "ifpguiview.h" class QTextEdit; class QAction; class QMenu; extern ifpGUIView *MainIfpGuiWindow; extern ifp_progress_info ifpTransferInfo; class ifp_gui: public QMainWindow { Q_OBJECT public: ifp_gui(); ~ifp_gui(); void enableWindow(bool enable); void showToolbar(); void hideToolbar(); void showToolbarText(); void hideToolbarText(); int updateStatus(); protected: void closeEvent( QCloseEvent* ); private slots: void ifpConnect(); void ifpTransferProgress(); void uploadPlayList(); void uploadSelectedFile(); void downloadSelectedFile(); void formatIfpDevice(); void show_ifp_info(); void show_radiofreq_info(); void about(); void aboutQt(); void auto_convert(); void setBatteryStatus(int bStatus); void setCapacity(int capSize, int capFree); void create_directory(void); void rename_file(void); void delete_file(void); void file_properties(void); void align_horizontal(void); void align_vertical(void); void updateFirmware(void); private: void createActions(); void createMenus(); void createToolBars(); void createStatusBar(); void readSettings(); //void writeSettings(); ifpGUIView *m_view; QPrinter *printer; QString filename; QTimer *connect_timer; QTimer *progress_timer; QMenu *fileMenu, *viewMenu, *optionsMenu, *helpMenu; // Main toolbar QToolBar *ifpToolBar; QLabel *BatteryStatus; QLabel *Capacitylbl; QProgressBar *CapacityStatus; QAction *ifpConnectAct, *uploadPlayListAct, *show_ifp_infoAct; QAction *show_radiofreq_infoAct, *aboutAct, *aboutQtAct; QAction *auto_convertAct, *closeAllWindowsAct, *whatsThisAct; QAction *uploadFileAct, *downloadFileAct, *formatAct, *updateFirmwareAct; QAction *create_directoryAct, *rename_fileAct, *delete_fileAct; QAction *file_propertiesAct, *align_horizontalAct, *align_verticalAct; int autoConvertMenuID; int horizontalMenuID; int verticalMenuID; }; //#ifdef __cplusplus //extern "C" { //#endif // // extern ifpGUIView *MainIfpGuiWindow; // //#ifdef __cplusplus //} //#endif #endif ifpgui-1.0.0/radiofreqdlg.cpp000755 001750 000144 00000016534 11335204400 014342 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "radiofreqdlg.h" #include "gui_user.h" #include "backend/ifpinterface.h" #include RadioFreqWindow::RadioFreqWindow(QWidget *parent, Qt::WFlags f) : QDialog( parent, f | Qt::CustomizeWindowHint|Qt::WindowTitleHint|Qt::WindowSystemMenuHint) { QHBoxLayout *WindowFrame = new QHBoxLayout(this); QFrame *frame = new QFrame(); WindowFrame->addWidget(frame); setWindowTitle(tr("Set Radio Frequencies")); // todo hide min/max buttons on window freqLayout = new QGridLayout(); frame->setLayout(freqLayout); frame->setMinimumSize(280, 430); frame->setMaximumSize(400, 800); freqTable = new QTableWidget(IFP_PRESET_TOTAL, 2, this); freqTable->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Station"))); freqTable->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Frequency (MHz)"))); freqTable->setColumnWidth (0, 100); freqTable->setColumnWidth (1, 120); freqLayout->addWidget(freqTable, 0, 0); QHBoxLayout *Btnframe = new QHBoxLayout(); btnDone = new QPushButton(tr("Done"), this); btnDone->setMinimumSize(80, 30); Btnframe->addWidget(btnDone); btnCancel = new QPushButton(tr("Cancel"), this); btnCancel->setMinimumSize(80, 30); Btnframe->addWidget(btnCancel); freqLayout->addLayout(Btnframe, 1, 0); setMinimumSize(290, 485); setMaximumSize(350, 700); resize( QSize(290, 485).expandedTo(minimumSizeHint()) ); //clearWState( WState_Polished ); initalizeDisplaySettings(); // signals and slots connections connect( btnDone, SIGNAL( clicked() ), this, SLOT( btnDone_clicked() ) ); connect( btnCancel, SIGNAL( clicked() ), this, SLOT( btnCancel_clicked() ) ); connect( freqTable, SIGNAL( cellChanged(int,int) ), this, SLOT( tableValueChanged(int,int) ) ); // tab order setTabOrder( freqTable, btnDone ); setTabOrder( btnDone, btnCancel ); } /* * Destroys the object and frees any allocated resources */ RadioFreqWindow::~RadioFreqWindow() { // no need to delete child widgets, Qt does it all for us } void RadioFreqWindow::btnDone_clicked() { finalizeDisplaySettings(); close(); } void RadioFreqWindow::btnCancel_clicked() { reject(); } void RadioFreqWindow::initalizeDisplaySettings(void) { char label[IFP_TUNER_LABEL + 1]; int freq; int ret; int cnt; QString err; QTableWidgetItem *newItem; if (ifp_dh == NULL) return; ret = ifp_get_tuner_presets(&ifp_dev, buf, sizeof(buf)); if (ret != IFP_OK) { err = tr("ERROR: Could not GET radio frequency presets."); showInfoMsgBox(tr("Retrieve Radio Frequency Status"), err); return; } for (cnt = 0; cnt != IFP_PRESET_TOTAL; cnt++) { ret = ifpgui_ifp_get_station(cnt, buf, label, &freq); if (ret != IFP_OK) { err = tr("Could not get station #%1.").arg(cnt + 1); showInfoMsgBox(tr("Retrieve Radio Frequency Status"), err); return; } newItem = new QTableWidgetItem(label); freqTable->setItem(cnt, 0, newItem); newItem = new QTableWidgetItem(QString("%1.%2").arg(freq/100).arg(freq%100)); freqTable->setItem(cnt, 1, newItem); } } void RadioFreqWindow::finalizeDisplaySettings(void) { int ret; QString err; if (ifp_dh == NULL) return; ret = ifpgui_ifp_set_tuner_presets(&ifp_dev, buf, sizeof(buf)); if (ret != IFP_OK) { err = QObject::tr("ERROR: Could not SET radio frequency presets."); showInfoMsgBox(tr("Retrieve Radio Frequency Status"), err); return; } } void RadioFreqWindow::tableValueChanged(int row, int col) { bool ok; double dbl; int freq, ret; QString slabel, err; char label[IFP_TUNER_LABEL + 1]; if (col) { // satisfy compilier } if (ifp_dh == NULL) return; { dbl = freqTable->item(row, 1)->text().toDouble(&ok); if (!ok) { err = tr("Error: frequency is not valid.\n\nEnter a value between 87.5 and 108.0 (MHz)"); showInfoMsgBox(tr("Set Radio Frequency Status"), err); ret = ifpgui_ifp_get_station(row, buf, label, &freq); if (ret == IFP_OK) { freqTable->item(row, 1)->setText(QString("%1.%2").arg(freq/100).arg(freq%100)); } else { freq = IFP_FREQ_MIN; } } else { freq = (int)((dbl + .005) * 100); } if ((freq < IFP_FREQ_MIN) || (freq > IFP_FREQ_MAX)) { err = QObject::tr("Error: frequency out of range.\n\nEnter a value between 87.5 and 108.0 (MHz)"); showInfoMsgBox(tr("Set Radio Frequency Status"), err); if (freq < IFP_FREQ_MIN) { freq = IFP_FREQ_MIN; } else { freq = IFP_FREQ_MAX; } freqTable->item(row, 1)->setText(QString("%1.%2").arg(freq/100).arg(freq%100)); } else { // make sure formatted properly freqTable->item(row, 1)->setText(QString("%1.%2").arg(freq/100).arg(freq%100)); } } slabel = freqTable->item(row, 0)->text(); if (slabel.length() > 6) { err = tr("Warning: station label can only be 6 character."); showInfoMsgBox(tr("Set Radio Frequency Status"), err); slabel.truncate(IFP_TUNER_LABEL); freqTable->item(row, 0)->setText(slabel); } //strcpy(label, slabel); //------------------------------------------------------ // finally store the validated settings //------------------------------------------------------ ret = ifpgui_ifp_set_station(row, buf, slabel.toUtf8().data(), freq); if (ret != IFP_OK) { err = tr("Error: Could not store settings for station %1").arg(row); showInfoMsgBox(tr("Set Radio Frequency Status"), err); } } ifpgui-1.0.0/moc_ifp_gui.cpp000755 001750 000144 00000007505 11331146520 014161 0ustar00000000 000000 /**************************************************************************** ** Meta object code from reading C++ file 'ifp_gui.h' ** ** Created: Sat Jan 30 16:22:41 2010 ** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include "ifp_gui.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'ifp_gui.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 61 #error "This file was generated using the moc from 4.5.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_ifp_gui[] = { // content: 2, // revision 0, // classname 0, 0, // classinfo 19, 12, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors // slots: signature, parameters, type, tag, flags 9, 8, 8, 8, 0x08, 22, 8, 8, 8, 0x08, 39, 8, 8, 8, 0x08, 60, 8, 8, 8, 0x08, 83, 8, 8, 8, 0x08, 101, 8, 8, 8, 0x08, 117, 8, 8, 8, 0x08, 139, 8, 8, 8, 0x08, 147, 8, 8, 8, 0x08, 157, 8, 8, 8, 0x08, 180, 172, 8, 8, 0x08, 218, 202, 8, 8, 0x08, 239, 8, 8, 8, 0x08, 258, 8, 8, 8, 0x08, 272, 8, 8, 8, 0x08, 286, 8, 8, 8, 0x08, 304, 8, 8, 8, 0x08, 323, 8, 8, 8, 0x08, 340, 8, 8, 8, 0x08, 0 // eod }; static const char qt_meta_stringdata_ifp_gui[] = { "ifp_gui\0\0ifpConnect()\0uploadPlayList()\0" "uploadSelectedFile()\0downloadSelectedFile()\0" "formatIfpDevice()\0show_ifp_info()\0" "show_radiofreq_info()\0about()\0aboutQt()\0" "auto_convert()\0bStatus\0setBatteryStatus(int)\0" "capSize,capFree\0setCapacity(int,int)\0" "create_directory()\0rename_file()\0" "delete_file()\0file_properties()\0" "align_horizontal()\0align_vertical()\0" "updateFirmware()\0" }; const QMetaObject ifp_gui::staticMetaObject = { { &QMainWindow::staticMetaObject, qt_meta_stringdata_ifp_gui, qt_meta_data_ifp_gui, 0 } }; const QMetaObject *ifp_gui::metaObject() const { return &staticMetaObject; } void *ifp_gui::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_ifp_gui)) return static_cast(const_cast< ifp_gui*>(this)); return QMainWindow::qt_metacast(_clname); } int ifp_gui::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: ifpConnect(); break; case 1: uploadPlayList(); break; case 2: uploadSelectedFile(); break; case 3: downloadSelectedFile(); break; case 4: formatIfpDevice(); break; case 5: show_ifp_info(); break; case 6: show_radiofreq_info(); break; case 7: about(); break; case 8: aboutQt(); break; case 9: auto_convert(); break; case 10: setBatteryStatus((*reinterpret_cast< int(*)>(_a[1]))); break; case 11: setCapacity((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; case 12: create_directory(); break; case 13: rename_file(); break; case 14: delete_file(); break; case 15: file_properties(); break; case 16: align_horizontal(); break; case 17: align_vertical(); break; case 18: updateFirmware(); break; default: ; } _id -= 19; } return _id; } QT_END_MOC_NAMESPACE ifpgui-1.0.0/ifpgui.pro000755 001750 000144 00000002320 11403107553 013173 0ustar00000000 000000 QT += xml unix:LIBS += -L/usr/lib -lusb-1.0 TARGET = ./bin/ifpgui OBJECTS_DIR = ./build/obj MOC_DIR = ./build/moc TRANSLATIONS += translations/ifpgui_ru.ts \ translations/ifpgui_da_DK.ts \ translations/ifpgui_de.ts \ translations/ifpgui_ca.ts \ translations/ifpgui_blank.ts HEADERS += settings.h \ revision.h \ radiofreqdlg.h \ ifprecconv.h \ ifpguiview.h \ ifp_gui.h \ ifp.h \ gui_user.h \ fileviewer.h \ createdirdlg.h \ backend/iointerface.h \ backend/ifpinterface.h \ ifprecconv/endian.h \ ifprecconv/adpcm.h \ libifp/prim.h \ libifp/ifp_os.h \ playlist/playlistloader.h SOURCES += settings.cpp \ revision.cpp \ radiofreqdlg.cpp \ main.cpp \ ifpguiview.cpp \ ifp_gui.cpp \ gui_user.cpp \ fileviewer.cpp \ createdirdlg.cpp \ backend/iointerface.cpp \ backend/ifpinterface.cpp \ ifprecconv/ifprecconv.c \ ifprecconv/adpcm.c \ libifp/userfile.c \ libifp/tuner.c \ libifp/readwrite.c \ libifp/prim.c \ libifp/ifp_os_libusb.c \ libifp/error_strings.c \ libifp/comp.c \ playlist/playlistloader.cpp RESOURCES += ifpgui.qrc ifpgui-1.0.0/main.cpp000755 001750 000144 00000006234 11312615352 012626 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include "ifp_gui.h" //extern QString app_path; int main( int argc, char ** argv ) { // int len; // char path[500]; QString trans_file, codecLocale; // bool ret; QApplication a( argc, argv ); QTranslator translator( 0 ); QTranslator qt_translator(0); a.setWindowIcon(QIcon(QPixmap(":/images/music.png"))); //codecLocale = QTextCodec::codecForLocale(); //fprintf(stderr, "locale = %s\n", codecLocale); //trans_file = QString( "ifpgui_" ) + codecLocale; //ret = translator.load(trans_file , "./translations"); //qInstallPathTranslations() ); // if (!ret) // { // if (codecLocale.find("en_US") < 0) // fprintf(stderr, "Loading translation file %s failed\n", trans_file.ascii()); // } // // trans_file = QString( "qt_" ) + QTextCodec::locale(); // ret = qt_translator.load( trans_file, qInstallPathTranslations() ); // if (!ret) // { // if (codecLocale.find("en_US") < 0) // fprintf(stderr, "Loading translation file %s failed\n", trans_file.ascii()); // } // a.installTranslator( &qt_translator ); // a.installTranslator( &translator ); // find the path // strncpy(path, argv[0], 500); // len = strlen(path) - 1; // while(len > 0) // { // if (path[len] == '/') // { // path[len] = '\0'; // break; // } // len--; // } // app_path = QString(path); ifp_gui * mw = new ifp_gui(); mw->setWindowTitle( "ifpgui" ); mw->show(); a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) ); return a.exec(); } ifpgui-1.0.0/ifpguiview.cpp000755 001750 000144 00000062033 11403100311 014040 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "ifp_gui.h" #include "ifpguiview.h" #include "radiofreqdlg.h" #include "playlist/playlistloader.h" #include #ifdef BSD4 #include "libgen.h" #endif #include "backend/iointerface.h" #include "gui_user.h" ifpGUIView::ifpGUIView( QMainWindow *parent ) : QWidget((QWidget*) parent ) { int w_width, w_height, ifp_width, dir_width; QRect rect; QString settings_path; parent_window = parent; settings_path = QDir::homePath() + "/.ifpgui_rc"; guiSettings = new Settings(settings_path); guiSettings->getWindowSize(&w_width, &w_height); //check widths for sane values rect = QApplication::desktop()->geometry(); if ((w_width > 50) && (w_width <= rect.width())) parent->resize(w_width, w_height); // setup our layout manager to automatically add our widgets top_layout = new QGridLayout(this); split = new QSplitter(this); top_layout->addWidget(split); dirview = new fileManagerView(split, tr("Local File System"), TRUE, IO_INTF_TYPE_LOCAL); dirview->setMinimumSize(100, 100); dirview->setMaximumSize(2000, 2000); dirview->setDir(guiSettings->getDefaultFolder()); dirview->show(); ifpview = new fileManagerView(split, tr("iRiver File System"), FALSE, IO_INTF_TYPE_IFP); ifpview->setMinimumSize(100, 100); ifpview->setMaximumSize(2000, 2000); ifpview->show(); createToolBars(); // add the transfer toolbar at the bottom top_layout->addWidget(ifpTransferToolBar); //check widths for sane values QList list; dir_width = guiSettings->getDirViewWidth(); if ((dir_width > 0) && (dir_width < parent->width() - 50)) list.append(dir_width); else list.append(parent->width() / 2); ifp_width = guiSettings->getIfpViewWidth(); if ((ifp_width > 0) && (ifp_width < parent->width() - 50)) list.append(ifp_width); else list.append(parent->width() / 2); split->setSizes(list); hideTransferProgress(); } ifpGUIView::~ifpGUIView() { int w_width, w_height, cnt; QString settings_path, destDir; w_width = parent_window->width(); w_height = parent_window->height(); guiSettings->setWindowSize(w_width, w_height); destDir = dirview->currentDirectory(); guiSettings->setDefaultFolder(destDir); cnt = 0; QList list = split->sizes(); QList::Iterator it = list.begin(); while( it != list.end() ) { switch(cnt) { case 0: guiSettings->setDirViewWidth(*it); break; case 1: guiSettings->setIfpViewWidth(*it); break; } ++cnt; ++it; } settings_path = QDir::homePath() + "/.ifpgui_rc"; guiSettings->saveSettings(settings_path); release_ifp_device(); } void ifpGUIView::enableWindow(bool enable) { dirview->setEnabled(enable); ifpview->setEnabled(enable); ((ifp_gui*)parent())->enableWindow(enable); } void ifpGUIView::createToolBars() { //--------------------------------------------------------------------------- // Progress of file transfer //--------------------------------------------------------------------------- QFrame *frame = new QFrame(); frame->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); ifpTransferToolBar = new QToolBar(tr("Transfer Progress"), this); ifpTransferToolBar->setAllowedAreas (Qt::BottomToolBarArea); transferLayout = new QVBoxLayout(); transferLayout->setSpacing(1); transferLayout->setMargin(1); ifpTransferToolBar->addWidget(frame); frame->setLayout(transferLayout); fileprogress = new QProgressBar(); fileprogress->setMaximum(25); totalprogress = new QProgressBar(); totalprogress->setMaximum(25); lblFilename = new QLabel(tr("FileName")); lblFilename->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); lblFilename->setMinimumSize(400, 30); lblFilename->setMaximumSize(400, 30); btnCancel = new QPushButton(tr("Cancel")); btnCancel->setMaximumSize(200, 30); connect(btnCancel, SIGNAL(clicked(bool)), this, SLOT(btnCancel_clicked(bool))); transferLayout->setAlignment(Qt::AlignCenter); transferLayout->addWidget(lblFilename); transferLayout->setStretch(0, 50); transferLayout->addWidget(fileprogress); transferLayout->setStretch(1, 50); transferLayout->addWidget(totalprogress); transferLayout->setStretch(2, 50); transferLayout->addWidget(btnCancel, 0, Qt::AlignHCenter); cancel_progress = false; setFileProgressTarget(0); setFileProgress(0); setTotalProgressTarget(-1); setTotalProgress(0); } int ifpGUIView::updateFileAndStatus(void) { int ret, tret; QString Message; TiFPreadFileTree t_ifpTree; ret = updateStatus(); tret = t_ifpTree.iFPreadFileTree(); if (tret != IO_INTF_OK) { Message = QObject::tr("Could not get the file list. Check your battery. Try replugging the USB cable."); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), Message); } ifpview->fmRefreshFileItem(); qApp->processEvents(); return(ret); } int ifpGUIView::updateStatus(void) { int ret; if (isProcessing()) return(0); ret = -1; if (ifp_dh != NULL) { setCapacity(getCapacity(), getFreeSpace()); ret = getBatteryStatus(); if (ret < 0) { release_ifp_device(); ifpview->setDir("/"); ifpview->fmRefreshFileItem(); } } return(ret); } void ifpGUIView::setBatteryStatus(int bStatus) { emit signalSetBatteryStatus( bStatus ); } void ifpGUIView::setCapacity(int capSize, int capFree) { emit signalSetCapacity(capSize, capFree); } void ifpGUIView::uploadPlaylist() { PlaylistLoader loader; QFile playlistfile; QFileInfo finfo; FileInfos fi; PlayList::iterator it; QString playlistname, destDir, Message, err, playlistDir; int ret, playlistcount, playlistsize, freespace; //ifp_progress_info pginfo; QList file_info_list; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Upload Playlist - Error"), iFPNotConnectedMsg); return; } playlistDir = guiSettings->getPlaylistFolder(); playlistname = ""; playlistname = QFileDialog::getOpenFileName(this, tr("Choose a playlist"), playlistDir, tr("PlayList (*.m3u)")); if (playlistname == "") return; finfo.setFile(playlistname); playlistDir = finfo.path(); guiSettings->setPlaylistFolder(playlistDir); playlistfile.setFileName(playlistname); loader.load(playlistfile, PlaylistLoader::M3U); destDir = ifpview->currentDirectory(); playlistcount = loader.numFilesInPlaylist(); playlistsize = loader.sizeOfPlaylist(); freespace = getFreeSpace(); if ((playlistcount <= 0) || (playlistsize <= 0)) { Message = tr("There are no files in the playlist.\n"); Message += tr("It is possible your playlist is not supported.\n"); Message += tr("Make sure your playlist is in the #EXTM3U playlist format.\n"); showInfoMsgBox(tr("iFP GUI Upload Playlist - Error"), Message); return; } else if (freespace < playlistsize) { Message = tr("There is not enough free space to upload the entire playlist."); showInfoMsgBox(tr("iFP GUI Upload Playlist - Error"), Message); return; } //---------------------------------------------------------------- // make a list of all selected files then call exec_TransferUpload //---------------------------------------------------------------- for(it = loader.list.begin(); it != loader.list.end(); ++it) { finfo.setFile((*it).filename()); //pginfo.total_transfered += finfo.size(); if (finfo.isFile()) { fi = FileInfos((*it).filename(), IO_INTF_FILE, finfo.size(), NULL); file_info_list.append(fi); } else if (finfo.isDir()) { fi = FileInfos(QString((*it).filename()), IO_INTF_DIR, 0, NULL); file_info_list.append(fi); } } ret = dirview->fmUploadFileList(destDir, &file_info_list); ifpview->setDir(destDir); ifpview->fmRefreshFileItem(); } void ifpGUIView::unselectAllChildren(QTreeWidgetItem *parentItem) { QTreeWidgetItem *current; int cnt; for(cnt = 0; cnt < parentItem->childCount(); cnt++) { current = parentItem->child(cnt); if(current != NULL) { current->setSelected(false); if (current->childCount() > 0) unselectAllChildren(current); } } } void ifpGUIView::uploadSelectedFile(void) { QString destDir; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Upload Selected Files - Error"), iFPNotConnectedMsg); return; } // get the ifp viewer directory destDir = ifpview->currentDirectory(); // upload selected files on local file system to destination dirview->fmTransferSelectedFiles(destDir); ifpview->setDir(destDir); ifpview->fmRefreshFileItem(); } void ifpGUIView::downloadSelectedFile(void) { QString destDir; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Download Selected Files - Error"), iFPNotConnectedMsg); return; } // get the ifp viewer directory destDir = dirview->currentDirectory(); // upload selected files on local file system to destination ifpview->fmTransferSelectedFiles(destDir); dirview->setDir(destDir); dirview->fmRefreshFileItem(); } void ifpGUIView::deleteSelectedFile(void) { if (ifpview->hasFocus()) { if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Delete Selected Files - Error"), iFPNotConnectedMsg); return; } ifpview->fmDeleteFile(); } else if (dirview->hasFocus()) { dirview->fmDeleteFile(); } } int ifpGUIView::getBatteryStatus() { int ret; if (ifp_dh == NULL) return(-1); ret = ifpgui_ifp_battery(&ifp_dev); return(ret); } QString ifpGUIView::getFirmwareRev() { char firm_str[20]; int firm_val; if (ifp_dh == NULL) return(""); firm_val = ifpgui_ifp_firmware_version(&ifp_dev); sprintf(firm_str, "%x.%02x", firm_val/0x0100, firm_val%0x100); return(QString(firm_str)); } int ifpGUIView::getCapacity() { if (ifp_dh == NULL) return(-1); return(ifpgui_ifp_capacity(&ifp_dev)); } int ifpGUIView::getFreeSpace() { if (ifp_dh == NULL) return(-1); return(ifpgui_ifp_freespace(&ifp_dev)); } QString ifpGUIView::getifpType() { char model_str[20]; if (ifp_dh == NULL) return(""); ifpgui_ifp_model(&ifp_dev, model_str, 20); return(QString(model_str)); } void ifpGUIView::formatIfpDevice() { int mbret, tret; QString str; QString Message; TiFPreadFileTree t_ifpTree; TiFPformatDevice t_ifpFormat; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Format iRiver Device - Error"), iFPNotConnectedMsg); return; } str = tr("Format IFP Device.\n\nWARNING---\n\nAnswering 'Yes' will erase all data on this device!\n\n"); QMessageBox mb(tr("Format IFP Device?"), str, QMessageBox::Question, QMessageBox::No | QMessageBox::Escape, QMessageBox::Yes, QMessageBox::NoButton); mbret = mb.exec(); if (mbret == QMessageBox::No) { return; } str = tr("Please Wait while formatting IFP device. This may take 15 to 30 seconds."); setFileName(str); showTransferProgress(); enableWindow(false); setTotalProgressTarget(-1); setTotalProgress(0); setFileProgressTarget(0); setFileProgress(0); hideCancelBtn(); qApp->processEvents(); t_ifpFormat.iFPformatDevice(); setFileProgressTarget(100); setFileProgress(100); qApp->processEvents(); enableWindow(true); showInfoMsgBox(tr("Format Device Status"), tr("Format Complete.")); showCancelBtn(); hideTransferProgress(); tret = t_ifpTree.iFPreadFileTree(); if (tret != IO_INTF_OK) { Message = QObject::tr("Could not get the file list. Check your battery. Try replugging the USB cable."); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), Message); } ifpview->setDir("/"); ifpview->fmRefreshFileItem(); } void ifpGUIView::UpdateFirmware() { QString str; QString msg; QString filename; QByteArray qcfilename; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Update Firmware - Error"), iFPNotConnectedMsg); return; } str = tr("Update Firmware"); msg = tr("Update firmware?\n\n"); msg += tr(" Make sure your battery is full.\n"); msg += tr(" DO NOT disconnect your USB cable until this process is finished!"); filename = QFileDialog::getOpenFileName(this, tr("Choose a Firmware HEX file"), QDir::homePath(), tr("IFP Firmware Files (*.hex; *.HEX)")); if (filename != "") { str = tr("Please Wait while updating firmware."); if (filename.length() > IFP_MAXPATHLEN) { showInfoMsgBox(tr("Firmware Update Status"), tr("Path to firmware file is too long.")); return; } qcfilename = filename.toUtf8(); ifpgui_ifp_update_firmware(&ifp_dev, qcfilename, progress, NULL); usleep(10000000); // sleep 10 seconds msg = tr("Update Done\n\n"); msg += tr(" DO NOT touch the device until it has turned itself off!\n\n"); msg += tr(" Afterwards, you may have to turn the device back on."); showInfoMsgBox(tr("Firmware Update Status"), msg); } } void ifpGUIView::setRadioFrequency() { RadioFreqWindow *rfdialog; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Tuner Settings - Error"), iFPNotConnectedMsg); return; } rfdialog = new RadioFreqWindow(); rfdialog->setModal(TRUE); rfdialog->exec(); delete rfdialog; } bool ifpGUIView::isProcessing() { bool processingDirview = dirview->isProcessing(); bool processingIfpview = ifpview->isProcessing(); return(processingDirview || processingIfpview); } void ifpGUIView::create_directory() { if (ifpview->hasFocus()) { ifpview->fmCreateDirectory(); } else if (dirview->hasFocus()) { dirview->fmCreateDirectory(); } } void ifpGUIView::rename_file() { if (ifpview->hasFocus()) { ifpview->fmRenameFile(); } else if (dirview->hasFocus()) { dirview->fmRenameFile(); } } void ifpGUIView::delete_file() { if (ifpview->hasFocus()) { ifpview->fmDeleteFile(); } else if (dirview->hasFocus()) { dirview->fmDeleteFile(); } } void ifpGUIView::file_properties() { } void ifpGUIView::align_horizontal() { split->setOrientation(Qt::Horizontal); } void ifpGUIView::align_vertical() { split->setOrientation(Qt::Vertical); } void ifpGUIView::btnCancel_clicked(bool checked) { if (checked) { // satisfy compiler } cancel_progress = true; hideTransferProgress(); } /*! Creates a string with ... like "Trollte..." or "...olltech", depending on the alignment. I took this from the base qt source code. */ static QString qEllipsisText(const QString &org, const QFontMetrics &fm, int width, int align) { int ellWidth = fm.width("..."); QString text = QString::fromLatin1(""); int i = 0; int len = org.length(); int offset = (align & Qt::AlignRight) ? (len-1) - i : i; while (i < len && fm.width(text + org[offset]) + ellWidth < width) { if (align & Qt::AlignRight) text.prepend(org[offset]); else text += org[offset]; offset = (align & Qt::AlignRight) ? (len-1) - ++i : ++i; } if (text.isEmpty()) text = (align & Qt::AlignRight) ? org.right(1) : text = org.left(1); if (align & Qt::AlignRight) text.prepend("..."); else text += "..."; return text; } //============================================================================= // take a File Name and truncate it leaving the extension intact //============================================================================= static QString truncateFileName(const QString &org, const QFontMetrics &fm, int width) { int pos, extlen; QString tmpFileName = QString::fromLatin1(""); QString fileExt = QString::fromLatin1(""); int extWidth; // first extract the file extension from the filename pos = org.lastIndexOf('.'); if (pos > 0) { // file name has an extension extlen = org.length() - pos; fileExt = org.mid(pos, extlen); tmpFileName = org.mid(0, pos); } else { // file name does not have an extension extlen = 0; tmpFileName = org; } extWidth = fm.width(fileExt); tmpFileName = qEllipsisText(tmpFileName, fm, width - extWidth, Qt::AlignLeft) + fileExt; return(tmpFileName); } //============================================================================= // take a file path and remove whole parts replacing them with "..." //============================================================================= static QString truncateFilePath(QString &fileStr) { int pos; int cnt, middle; QStringList lst; QStringList::Iterator lst_it; QString truncFileName, tmpFileName, fileExt; pos = fileStr.lastIndexOf('\\'); if (pos >= 0) lst = fileStr.split("\\"); else lst = fileStr.split("/"); // remove any "..." elements lst_it = lst.begin(); while(lst_it != lst.end()) { if (*lst_it == "...") lst_it = lst.erase(lst_it); else lst_it++; } middle = lst.size() / 2; // build truncated string if (pos >= 0) truncFileName = "\\"; else truncFileName = "/"; cnt = 1; lst_it = lst.begin(); for ( ; lst_it != lst.end(); ++lst_it) { // replace middlemost element with a right side emphesis if (cnt != middle) { truncFileName += *lst_it; if (cnt != lst.size()) { if (pos >= 0) truncFileName += "\\"; else truncFileName += "/"; } } else { truncFileName += "..."; if (pos >= 0) truncFileName += "\\"; else truncFileName += "/"; } cnt++; } return(truncFileName); } void ifpGUIView::setFileName(const QString &fileName) { int width, targetWidth; QString truncFileName, tmpFileName; if (fileName.isEmpty() || fileName.isNull() || (fileName == lastFileName)) return; lblFilename->setText(fileName); return; tmpFileName = fileName; targetWidth = ifpTransferToolBar->width() - (transferLayout->margin() * 2); QFontMetrics fm = this->fontMetrics(); width = fm.width(tmpFileName); if (targetWidth > 20) { do { truncFileName = truncateFilePath(tmpFileName); if (truncFileName == tmpFileName) { truncFileName = truncateFileName(tmpFileName, fm, targetWidth); } width = fm.width(truncFileName); tmpFileName = truncFileName; } while(width > targetWidth); } lblFilename->setText(truncFileName); lastFileName = truncFileName; } void ifpGUIView::setFileProgress(int progress) { fileprogress->setValue(progress); } void ifpGUIView::setFileProgressTarget(int totalSteps) { fileprogress->setMaximum(totalSteps); } void ifpGUIView::setTotalProgress(int progress) { if (totalprogress->isHidden() == FALSE) { totalprogress->setValue(progress); } } void ifpGUIView::setTotalProgressTarget(int totalSteps) { if (totalSteps == -1) { totalprogress->hide(); } else { totalprogress->show(); totalprogress->setMaximum(totalSteps); } } void ifpGUIView::hideCancelBtn(void) { btnCancel->hide(); } void ifpGUIView::showCancelBtn(void) { btnCancel->show(); } void ifpGUIView::showTransferProgress() { ifpTransferInfo.show_progress = true; ifpTransferToolBar->setVisible(true); } void ifpGUIView::hideTransferProgress() { ifpTransferInfo.show_progress = false; ifpTransferInfo.file_bytes = 0; ifpTransferInfo.file_total = 0; ifpTransferInfo.is_status_batch = false; ifpTransferInfo.batch_total = 0; ifpTransferInfo.batch_bytes = 0; ifpTransferInfo.file_name = ""; ifpTransferInfo.is_batch = false; ifpTransferInfo.files_count = 0; ifpTransferInfo.files_total = 0; ifpTransferInfo.total_to_transfer = 0; ifpTransferInfo.total_transfered = 0; ifpTransferInfo.delete_success = false; ifpTransferInfo.auto_convert = false; ifpTransferToolBar->setVisible(false); } bool ifpGUIView::isTransferProgressVisible() { return(ifpTransferToolBar->isVisible()); } void ifpGUIView::updateProgress(ifp_progress_info *pg_info) { setFileName(pg_info->file_name); if (pg_info->is_batch) { setFileProgressTarget(pg_info->file_total); setFileProgress(pg_info->file_bytes); if (pg_info->is_status_batch) { setTotalProgressTarget(pg_info->total_to_transfer); setTotalProgress(pg_info->total_transfered + pg_info->batch_bytes);// + pg_info->file_bytes); } else { setTotalProgressTarget(pg_info->total_to_transfer); setTotalProgress(pg_info->total_transfered + pg_info->file_bytes); } } else if (pg_info->is_status_batch) { setFileProgressTarget(pg_info->file_total); setFileProgress(pg_info->file_bytes); setTotalProgressTarget(pg_info->batch_total); setTotalProgress(pg_info->batch_bytes);// + pg_info->file_bytes); } else { setTotalProgressTarget(-1); if (pg_info->file_total > 0) setFileProgressTarget(pg_info->file_total); if (pg_info->file_bytes > 0) setFileProgress(pg_info->file_bytes); } qApp->processEvents(); } int progress(void *context, struct ifp_transfer_status *status) { ifp_progress_info *prog_info; if (context == NULL) return(0); // this is really a bad error if (MainIfpGuiWindow->cancel_progress == 1) return(1); prog_info = (ifp_progress_info*)context; ifpTransferInfo.show_progress = true; ifpTransferInfo.file_bytes = status->file_bytes; ifpTransferInfo.file_total = status->file_total; ifpTransferInfo.is_status_batch = status->is_batch; ifpTransferInfo.batch_total = status->batch_total; ifpTransferInfo.batch_bytes = status->batch_bytes; ifpTransferInfo.file_name = QString(status->file_name); ifpTransferInfo.is_batch = prog_info->is_batch; ifpTransferInfo.files_count = prog_info->files_count; ifpTransferInfo.files_total = prog_info->files_total; ifpTransferInfo.total_to_transfer = prog_info->total_to_transfer; ifpTransferInfo.total_transfered = prog_info->total_transfered; // misc ifpTransferInfo.delete_success = prog_info->delete_success; ifpTransferInfo.auto_convert = prog_info->auto_convert; return(0); } ifpgui-1.0.0/fileviewer.h000755 001750 000144 00000014555 11334173661 013523 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef FILEVIEWER_H #define FILEVIEWER_H #include #include "backend/iointerface.h" //#include "ifpguiview.h" class QWidget; class QDragEnterEvent; class QDragMoveEvent; class QDragLeaveEvent; class QDropEvent; extern QPixmap *folderLocked; extern QPixmap *folderClosed; extern QPixmap *folderOpen; extern QPixmap *fileNormal; extern QPixmap *fileMusic; // /** File 'type'. */ // #define IFP_FILE 1 // /** Dir 'type'. */ // #define IFP_DIR 2 class FileItem : public QTreeWidgetItem { public: // name, filetype, fsize FileItem(QTreeWidgetItem *parent, const QStringList &fileproperties, IOInterface *Intf) : QTreeWidgetItem(parent, fileproperties, IO_INTF_FILE + 1000) { if (Intf->isAudioFileType(fileproperties[0])) setIcon(0, QIcon(QPixmap(*fileMusic))); else setIcon(0, QIcon(QPixmap(*fileNormal))); //openPersistentEditor(this, 0); } bool operator< ( const QTreeWidgetItem & other ) const { int sortCol = treeWidget()->sortColumn(); if (other.type() == type()) return text(sortCol).toLower() < other.text(sortCol).toLower(); else return(type() > other.type()); } }; class DirectoryItem : public QTreeWidgetItem { public: DirectoryItem(QTreeWidget *parent, const QStringList& dirname, IOInterface *Intf); DirectoryItem(DirectoryItem *parent, const QStringList& dirname, IOInterface *Intf); QString fullName(); QString baseName(); void setOpen(bool); void setDirName(const QString&); bool operator< ( const QTreeWidgetItem & other ) const { int sortCol = treeWidget()->sortColumn(); if (other.type() == type()) return text(sortCol).toLower() < other.text(sortCol).toLower(); else return(type() > other.type()); } private: QFile file; DirectoryItem *parent_dir; bool readable; bool showDirsOnly; IOInterface *ioIntf; }; class DirectoryView : public QTreeWidget { Q_OBJECT public: DirectoryView(QWidget *parent = 0, bool sdo = FALSE); bool showDirsOnly() {return dirsOnly;} QString fullPath(QTreeWidgetItem* item); QString baseDirectory(QTreeWidgetItem* item); void clearItem(QTreeWidgetItem* item); QString currentDirectory(void); int msgflag, delmsgflag; IOInterface *ioIntf; public slots: void setDir(const QString &); void fvUpOneLevel(void); void fvCreateDirectory(void); void fvRenameFile(void); void fvDeleteFile(void); void fvProperties(void); void fvRefreshFileItem(void); void fvTransferSelectedFiles(QString& destDir); void setItemExpanded(QTreeWidgetItem * item); protected slots: void openFolder(); void keyPressEvent(QKeyEvent *); void fvItemRenamed(QTreeWidgetItem * item, int col); protected: void dragEnterEvent(QDragEnterEvent *e); void dragMoveEvent(QDragMoveEvent *e); void dragLeaveEvent(QDragLeaveEvent *e); void dropEvent(QDropEvent *e); void mouseMoveEvent(QMouseEvent *e); void mousePressEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); private: void contextMenuEvent(QContextMenuEvent *); void unselectAllChildren(QTreeWidgetItem *parentItem); int getListOfSelectedItems(QList *file_info_list); void createActions(); bool dirsOnly; QTreeWidgetItem *oldCurrent; QTreeWidgetItem *dropItem; QTimer* autoopen_timer; QPoint presspos; bool mousePressed; bool yesAll; QString OldRenamePath; QString OldFileName; //QAction *fmPropertiesAct; QAction *dvCreateDirectoryAct, *dvRenameFileAct, *dvDeleteFileAct; QAction *dvRefreshFileItemAct; }; //class ifpGUIView; class fileManagerView : public QWidget { Q_OBJECT public: fileManagerView(QWidget *parent, const QString title = "", bool sort = FALSE, int ioIntfType = 0); ~fileManagerView(); QString currentDirectory(void); bool isProcessing(); //ifpGUIView *ifpGuiViewParent; public slots: void setDir(const QString &); void fmCreateDirectory(void); void fmRenameFile(void); void fmDeleteFile(void); void fmRefreshFileItem(void); void fmTransferSelectedFiles(QString& destDir); int fmUploadFileList(QString& destination, QList *file_info_list); protected slots: void upOneLevelClick(void); void refreshClick(void); void createDirectoryClick(void); void propertiesClick(void); void renameClick(void); void deleteClick(void); private: void createActions(); void createToolBars(); void showItemContextMenu(const QPoint &position); QGridLayout *top_layout; DirectoryView *internal_fileview; //FileViewToolBar *filetoolbar; QToolBar *fileToolBar; QAction *fmUpOneLevelAct, *fmPropertiesAct; QAction *fmCreateDirectoryAct, *fmRenameFileAct, *fmDeleteFileAct; QAction *fmRefreshFileItemAct; //QAction *fmTransferSelectedFilesAct; }; #endif ifpgui-1.0.0/images/000755 001750 000144 00000000000 11331474602 012435 5ustar00000000 000000 ifpgui-1.0.0/images/music.png000755 001750 000144 00000006631 10274470126 014276 0ustar00000000 000000 ‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ&Õ ÜÑ &IDAT8Ëíšyl\×u‡¿·ÍÎgá"Š"ÅE%ÛZȲ·®å8vÓ"@Ô5ÔMƒEa(]P¤- µ€QôA  ÀQìuZ«)âxilG• Ú–mÉ–-+²ÄE¤¸ ÉÎú–û–þñ8CŽE»´9š |óæÞßwϹçœ{á—íçÛ¤_4A©CG=€ óƒžT’€"aÆþá®Ñ«þ¢Ö°‘•­ílîM±=›aC:H…·ËKüÓK§[ãûêÏStI7¸%–b×–v² å ù"oå8}Ée¨'NDSh5ûúX†¿ú¸7]sÙÒžbWw;Û³ ågò̦°M5èKÒ$ݰø‡öyÃöþžw±`±)Ù§6±!Å5j¼›78Y˜j\‘#<ÿo×´ î"‰ ÌC<Ü×Å•ñ. Þœ­^+"¨b›öš0rÏuá]‰(î!ˆðÖXŽçÞ»Fàê–Kì¼¹‹›»“üë‹—˜3œ†;¹&Ôpn,@]ø–ö¿1¸™`0ιñqt#@É0ˆ‡BçK†ÁHoŠ=ýmìì!’1l©nKpu,×äNM¹q©CG½ºp€w¦óØf³ðºøpHeÿMYîÙÖ×ø~Q—(ꙉLZ…1štMÜ ôÿÙ·<‚q¾¸k;oŽ5‹®_ÊéŸßßÏŽžô²àµû´l—­ `àCÝîºêîrïŽ6„£¼9–»FtÉ0ˆ%¾p÷NF6´QÔ%r‰ âa:Í×ÕÖHÆä¦ñІK2(ÿ̙ԡ£9€½½ìM§¸¼0Ç\5OÕõˆÊRCtÉ0ˆ¶h¼c„¾ŒŸœr•• Àt®­^VƒDIÂ!u9€¨•éêíat¡týýõý\D“ùÔÀ&– &¯^'›ˆ±` TÝ•YüÜ›ùäæÍ˜ŽD~|‚Ùü¢7ï%ºû6Ôá[Ô&Õ× â‘i‘ˆ„$tߌ¶–Õª ¬É 1ëÛ:2¤$ ï-2<˜âž];ÙÙÓΑ§ŽS- ,½ÝQºû6–töäö ˜o¢ýÊÓˆçb,ÖBxÙ~Ôþí„·í"¼õ©,Z[ª1_öÞ˜æ¿sã¾;ZѨF±f4€á¯>žR}]Ì.TŒñ‡öÒVXÒý¨ð+ÃÝ;ù¿sÇvömD·V9~ú­w?ˆþôßqû§ 8ÁvP¥"òNÿ‹O-±djT¼[ öl¦ud„˜é W\œXŽeú ZQ×_N×ê'RítµGùí[‡H'Òè–MÙQiQ|¡á€Êt>G2ÖÐø¬ì¨LLNòêÙóHå<»¿ù§ÜwÓ,éA Ïþ Á(JK¹µ %ÙI±àRÊ[§‹T—t ³%„.¨è J&ËéEÁ)Çï]œ”Ö³8¨}ù›ß9|Çn>½'¹5Â^‹b¨ät¢ë`u˜§Ÿ‘B­À¦ã?äÀåï°c¨T£HJK )’DеáRb¬J Ë’(Î,qâÉ7š ÔµfߟÙ{+»vmg´äÓüç+Âÿ½"<*BÃ[¾¯Ó|Ñ«· ÷pæMÁÜÞ\~ýô•ª¤;Y±BS(ªâ™Uìò|ÓmCÕ𔡎bÛö¡EZ>x ¤õ’_þ̽ljokܯ¢áP2]tÓò](Ø\£oLhÄ4©a‘žμy¯¥‰þý\½ø4‰8hQmmˆ5šg °öÕó¨ýûHµ6;²ZüŽÞ^þò³h…)¹²ÉD¾Ê|ɤ¤[èBày+!ÓvlÇAStÓ¢fKXއ@! ø ÇafaŠZ[é—Ÿ§§ËA ºëßóª’¬àÙ9ÑŽ'©|ýôÄ‘úç2@Ç¡o{÷îØÁïîû$³Eƒ‹¹*c¹³Ea¯ æØ.B\ÎtÓ"  ›VÃJõ608DP‰afÛ¸´aWÆ|Qëmž-ðl¤j¸¹Ë´ôòÄÐF¯ @,{’n ÆóT«UtÃjtR[vMñ“‰6Bؘ¶ÝQ¿.Ô*Â#¦IôoÈby ¦>qSÓ*FÑa2ßÍØ[`VåuÃ8¹ËD£.‰D°Ù…ô—YØwXRƒÜÜÓÃBµ®Œ*¹à¹¸HhªBÍ´ÐT¥)„)ŠŒiÛ¨ò*!’L"ä»QExD#ÓWg(É!äË—èW¦1MÁ‰W5 ³fÑE$EF xk«w]$YA’eäxûŠâðS‹¥# 5åSÇŽÌnÞw8ÐØ¶±‡%£‚mKØ.¦hªŠëy(²„p\YÂu]<‰&MUH„,×·@$cf>OÍ)}ï†\®.Æ8uûCŒ×ÚXx{žò´S·xàºïr]\½DrÇ­L¿3Ã÷¦óGšv úËÇŽLuï>ÜIÑÛ‘¡bÕÀ•±m×õP% KZ®i„ã¢J>ˆí¹¨²Œí8¤¢~„²\ÿÇsfr“äãݤN>G§E¼#ÆO§4.ÞuË»ïçJl€Ñ\ˆ™ ‹âDÒ‚C1•El¨šT ÔP˜¹i‡£ãóGÖLdñ‡ó¾ø«wE)U „ã )>kh9'W" ­DáúúˆÇ"ă¾­nÏ<û÷xsæu„ëW¹ûoêlì“?2Àk‡ÎM1»X$,‹ò;«»Ubõ"iž#ð¦Èh•ììÅ‘Œn½Ñ¼ïFÉÐ<]ó¯ãä¨êþbSd¥Q ïìëe²°„ð®óXE“eŽy…‡~ý¥Ò|B[ÞêùkCF ‚^„ƒ†ð˜"gO¡L^$R)ø /ÌÄÈËnô‰%ú†3\9ùŸD>÷GD–7ñ‰BÑp0…G_Gšs— ×°øèA©ãз½wÇfÈf"äóF½¨nêζ!•±– t>ûý/|ŽV‹l¢a3¸T€K¯þ3óN”):6 z‡4~ø£ãTrˆ÷L|¥D¡æÓªÉHZM–¶WL©CG½?¾ç~F'çQ—“W}qûYE86éc_ãÎ×¾ÎÖ-±¬L0ê6ÕøJ¶ßŸ˜éöü ©Œ@jÉðÒ‰ÏÜõ%¾ñ÷±.mùd.–931Ê`{;¹ùÚJGªŒm»¦Áä¥w¹åøwٺ˟nEmO¸møN:†—ß\ø öô†nÁ“—øÆ:õÈàÂ#JÇÏ¿M,]µ3s1LU•™§\)6^Rø!¹yƒRžÇzë¼rne6Œ ©]P~ñÅuë¹®ÃÝ®¨Ê™‰Qz[Û)”V¬`˜6ÂÐi„™Û´›ÂÂÉf ’s ö½os²0³0A"$dzA©B{ÈX·ùz.<ò têÂy’‰+„‚*Ý6u²TÓy¢s/O&)•—r¶Éš§˜ÕÆ&ß©.‘Lk7 þwtnŠ–Hˆl²…‘¾ ”Ì*Ç'&™H”¶Œð'ù‚t~±›Ü<˜Uâ4Ôò¬ R/ÆÆ˜>;~c]È?Ç„Ÿ¼{‘¯Üw?¥jùÎM¡ÉrSÉûùKSÒC½«oÏÐÝeÓêV%ª&!«+™I/»?õ(†[€¥ÿ¦>þðcÞMÝ}\˜ž /¡òÚá>´¿úiB‹Y ¨XöK@ÉŠQˆvñûç/~|ÿ=:tÔ‹?ü˜Ç/Ûÿãö¿…dVñáÈÄIEND®B`‚ifpgui-1.0.0/images/battery2.png000755 001750 000144 00000004434 10274470126 014711 0ustar00000000 000000 ‰PNG  IHDR szzôbKGDGFFø8*ñ pHYs  šœtIMEÔ !½3v©IDATxÚ—ÏGÇ?U]3Ý=3»3³³»þ¯×ù%Û$B¢9!!qq€#7$®ø @ $ $$rCBÂ( —à$ Hä×:Ø,±w³Ù³;3=Ó=ý£ª‡oìøGxRIÝ­êzŸzUßz¯s³?CâV”kÕÂY±­5—ªÎBªÚi™Ž}™%+.;Zqéàýz~äëù¡ª—Óz+ÔÒŠòüo¨ȼ}®™Ûž¿|xxØrÀÍûÕ 7ŸÌÛà àÀàçÿ—÷‹ž¾ïO¿ðœ,œyŠÆÊªŠº]kõ´iiÉÁæBÊ€¤:bª»d2 r+õª¶bŸ_l†Y«©†Kï|oó—“’ç_AŸ>É Jñ|¯ K» áp0›‰~ í3çüú‹ëtÏ£ºçÑÎ8ƒn0 ­8L÷ê!C†$6©ËqýD0¸° .œÖåÉ( m ?*àÀO>/FV¿Xëjéñ¶î]DÂ%Dï=Î9‚ @kR ï=ÖZò2¸ê™Ú{&Zñxï(Å¡ÕèÍ; XjÝCz®çpÀ¡õ™ãX£:ÝVJµå”B¹ ΂÷r¯l/2ðÖX] DÏ=®yö1}ð›×=o]óïðÀxšD ÚZéUE°¢˜nÙ?…bKpVîWfˆ€óà…e ¿ÒÂÄ5¯=¦ùÞ æ®þ–{“ú¶”‘F=´Í8”‡ê&XUèÆ¬gí44žV´Ržâp$Ç;…V;y \æ´Í½ÎJÆ€ÙMøoTãµ·6Eã”Zà8W® ;#0©´×€Õºï™†[Ž § ÁʧkV;¥Ð!4÷5 ›PÇ#Éñì”úçØèn†îæ^gÕ¬Êúàþ üåí›®xù¯.ÖÛ‚°`òZïÐJåÉZ]BEgk‘+Ah Ô@5˜J—ÌR™ÍtV e/Õj¢¹šhõa¢Ô“6cÑVxÇ"°ÛŽX çš!o·ê\ve¦Ò‚ “L^ï]öyâ²MÔj±èJtPG”™Ð “.Gî¤êÛ¡:¨öå½´¦Þµ=ñl…–²<¡2œcØŽ kFóÝNÄw—( ??>U€ñž= ‘ãU­!ªH€ó£aÁhxÄÎV¥v¶CéºôË3êfUrhK2_âÁ xÇP«MLhˆž;¯Â¹ ïRÁ‡Rñ,1·@?—Ú`Xpóæ›[%›‡ª?èrXzÕ€¡’{™Ìœ÷Ý`¹‰iÔ¿öxpo(ËmhÄÉgäu«2J’„$I(Šâåµ÷àËÞ±¼³7a#2¼öÖ‡þ)c-"(¹­@½òÏN»Æ{@óv¥EQ0H’„ñxü¹"àfØø`Ÿ]àòÛ;þ·/ÿÍß*Ì{ó»Ã° ¦kËþÔ³ÎÔj„ 5ѳ—Tøì£÷Èÿñüã)Œ€Ýx§›îÅEåé5æW‚ûZd-Q9e=O9›Oð^öGžW‡ž p+:Ÿ¿ Œ¶Ü¼fCS1ðs?-¾Zî÷¿|ðæ•ål{w¥Ð*T ó¼@å9ÑxB{<¡>JXJd2®d<®ÂªØšzÙÊ…?=¿þD(hÊõ0àÕ+ø§ý,…+Q·©`Ó³“ñî­õ_­ðHñm#\ „ * ÃÀÕCl-¤¬,eéÐÙeà%'ÙXøûŽçï[ž7þh¹Î,á”ÀSÀWøôþÌÛö?ðà+M®IEND®B`‚ifpgui-1.0.0/images/editdelete_s.png000755 001750 000144 00000001754 10274470126 015611 0ustar00000000 000000 ‰PNG  IHDRàw=ø³IDATxœ¥–]hUÇ÷Îììw6É&›Ð"%&–àç[ŬTÅ Tl‰µ}h£ë·Ð*õAŸD©¤‰ÕX[0J¬‘RQUÚ`L¢à7MMLB›¸kº3sïõa[7‰M²%†y8gÎoþçÜ{ÏÆæÛ7#g¿ŽGÛÄÿÜ×õñoK©[Ì&Æþ—»¶$“ÉøruuuÙJ³….£ÇIEND®B`‚ifpgui-1.0.0/images/view_top_bottom.png000755 001750 000144 00000000776 10100714712 016370 0ustar00000000 000000 ‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÔ"9‘Þì‹IDATxÚ¥’ËjTA†¿s¦g"ãuˆfÈέ+¾‚KŸÊmÀµëlܹ‚ Aƒð‚:ä\º»..z.gшEýÕÍ×]]ÕÕ£gŸ\ßí»¹WR¯¤NJŒJl3)n¯KT4uhÿã[¸sc|r¸?çètÓwF×8mkt­ÓVF]fNʆՎÃ=B<{fÓÉüp6¥ï¡™@7fM(q\A¨ v@šéãÅ<Ýr)ˆ‚*¨lt–e.²#â˜:*Æó5av îßå¯f昪%Ч¯+jܯûÞh§vó+Á\Á†jÉÿx€»ØuÃÝ ç_:Ž_~à_­Æù¼È„ƒÛž<<øÍÍ%®ÝsÇÜ4óæÕˆ0®áÞÍñ¼jPéºaÆòí”5œ¬Ë' §0„ ¸«m°_ªY7q÷æí ¶a3cÅ…ï—™w ¦ås¨¦Š.µŠnÆ6è…Šñó2Nß.žž/$H$墓 Iȱä* ;ÿø5òßö pGÎ$Mð(•IEND®B`‚ifpgui-1.0.0/images/format_s.png000755 001750 000144 00000002430 10275523134 014760 0ustar00000000 000000 ‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  šœtIMEÕàãí ¥IDATHÇ•–mlSUÆ笻ëh·®ÝØ#0‘ɦ[@ ÷I€8yý C#Bø"Á7BT&†¾‰cÄDCB`¨„ /á% T%® åeìÅuÝí²u¥½kïñCKÛÑ.Ñóé$çÜçyþÿç¹ÿ{,סOà£Ôh^·ŸàhÄä@¾EÐ9zR¾päKÊñ8o+ÿD8"+ø&¡ÑÎçt3×°W¼Ì©)òëÉscÆ\B¯Þ2zº>¨±«£h\vö©Ãÿ‰Àõ‰¨¦OÏŸ a¦*4O{¿ÑLã!“Ôõ8x® f®†5SàŸÛÑîîK1-7tcªUµ:¨è„®±"pOl»áÉ©[X¿6Ÿ×–Á›§‘@K¨·VÁ«Áë@ÔÍAEÂp¦ ËÞB+—5!>pލÞG˜2 þ‘¨îPŸÝó¨Ù KjóyúYÞóµ$8ª$ ÷¢þ¾wþ„Ú9W¾XjY‚ÎîtѦ䮆‡Ù³Q6¦•CûYxǾ@ê¶Ü|Î…I6¤³Ul7™»„ù®<±ÉQ{“-r5ˆuê’Ú(FE=€áp@YüV…ì8‘2·¤ʶ‚Ð@™!7‚c°x/Ü÷"ý‰0iülpF”ÛäZ%Šè¦V© GdÐÑX a_\uü!äà nIZ« iô CþôJ§Ë\B´›Ðy‹¥j\+lQ˜ú†}M‚5 ß òº(£Ká\rhàñ0ÚJ Ä„AjÆùÈÝ­°»5®´ö%87ý¨<j$ 3kaÏSÈÖ}©è©(N ÂD;:`rò8=5:°³¢WÀQž(ÿZä®ÍãukI’<``‘€ Ë s+ ¡ ……`ÉÛ2(¯Çøö0ÆÊ·3Iâݰ&‰Î0›®aµÂö]9ˆ‘oCJ+äÚA»c«`Þ1(­Éœ1`ˆ™€A  뤪©€ùÃkDR\¢k†ÒÉpaû"›aàVX©ÂhÜG#’Ñ&O,o‚¥^ØUj20 j#l?„ ¤î§:`„•jsCÀÜAã8:ï&ÌI%ÉÃÀ9 ‹Ø3¨(ˆzä†SÈÎk`Í,ü¡RÑ»pç=è•Î.5´}ãT¤û‘_ ª£«Ž@óupd† <:m]p^‡è£aw Õ‹¢"°”Ç÷¾g`ÿEdÈ“Š„Ðrþ”p>P~4ÞBcˆ×åDDìA¶þ’­5±¡ˆò6E”o'lë€h’ AÒ‡ÎtÜãò +ã{w)ò«­)ð´954‚÷ŒŽûl2ÒNM©8 ¡³ÈAc3^nÃÖ_³½ŒcwU¿k Ïuä–Ô-P‘ÌïàŒ¨p¨véâ ÐcFÀÀ‚VÐú ØjŦj ÅÖ°&$þYI›¦&›vÝìvMµ ±›Ýd³iL7Ý46–Ê?‚„.µH+ÖNa€™af˜;÷œýcm¥»ÏÍÍMnÞóþî{îóäR ¿TEE¯®®ÎÍÊÊJåœÇ""¬T»$ÆSJ‘ßï·ööövvvÞîèèXà+цââ⦤¦dsLj艺njÃ0X0öx<nܸñ“³³³!ÄÖ´Ô4ò>𢱿QMÏN+%—;*Bt"}J‹iQEÉE”¿)?whhè¸Ífû÷Š€úúúÞ«W¯~””Twñ»‹úïfµDDôðÂcƒ…¼!µúêjãý¢÷YB|‚MJ¹vE@mm­ªªªjÈÍÉ]_˜Rx0k,KYž²°Ä„DXt ÐH‹BAÞar\pŽ8gJ)¬€Í›7§oxzCúú¬õÚÞ»{qeá ¶dmAir)|܇±ÀËQ€fægÀ (“fÑàIÀáÇ­û÷ïßwâĉ$Ù’’›Mª+¥ ¯¼ŽºÌ:øÈ‡ö…vı8Ä,Æ@I3hbó`Œ1S™PPOêêêâkkk[RRòv\|\òÇ=ã¢÷"Õl¯AuZ5†i7ü70š×8„. M‰p$ MÓ@Œ@Œ˜’Üõ3@YYÙûöí{#Ö›üÁ·¨ÏCŸÓK[^ÂñôãèS}è^èFÀÀ¢Y@Œ  “›Ð˜¶ôÓI*ùh‚úúzJOOOËÏÏëØkÇêÝ7Þûú=õ•ø §vŸÂÞ佸¾†Áà Ht®ƒˆ@Š L)eôFP¤ HAJIûƒÛíö´]»vÙ±cDZñœûázDÞyk ÐlÃíÀmh¤Aç:˜u΀Iu‹ˆºF)EK_^]ºŽá‰a„ƒaȈ„”fÄ„1À#,ÄàsûðÓŸÐócry]ÐctIŠ@Ë{¤Ùl¶é`0ˆ¸¸¸[ó¶ZõEÚGÛƒÁ EД]éÐ5ÌLÍ »¯ýÿé73'3•n ‰ù]~³ä©&¸¸ïr6ñ–––€ÝnÿÈï÷kV«õ÷¯<óŠn,87|¤ œ8˜Î 1 #‚‰© ܺ} #}#æ‹I/â…g_ÐzGzqÅuE­]µ–l,À€sàQÜnwÈn·ÿ5###_pqôÕÂWÅÝwÑ<Þ Á,ÜÝÔ2BðLyàt`êΔ<šv”ž/~žÍùçÆ}cädÎɼÄÕ‰œ@0¥ ´4·Û=WYYù'«Õjã‚ï?UzŠ=¸ö@vŒuP¬%–„ðL{pkè†äËi/ÓÁÒƒ4í™ö755]ÿ¬²²òôšÕk*ÂF¦iF Ã0è—§ÔöíÛ79rä/xnÕªUêÝæw¸¡Ù˜MóúT¢7QֿײÂg éNÿ‘Ë—/ÿ½»»û“ùùywqqq~yyù’““wöôô´···ÿî ”——ï8tèÐge¥e¿á:7ßùâPÿ\¿53”IUOW!+#‹ƒ£—.]ú³ÃáørÏž=Ó---233í©©©“““Œ±»+.\¸@7oÞ¾ïËËË?~œÅì¶,¦·IÖ’ìm+7F×/sB»¼Ö¨ÁÜìƒ&t]°´Ís0ñ¿Æ&vWÎï+þ¡ù‚ªp¸Uá©åÒÐ%úè4E' âê7¯ÈìxW¼q‡|ç¶²e e`¼Ð@{eüöó³Þ£,ð.‡©6YîbâKãbt©¯ƒ‰ç/yUßáð|¶ª°30ªÃöl÷„O®‰|rMEÂ(’8ÁµˆÁd¾[ñðkÁõÐÓÆàÁ¤H2°H 6ƒâ–"¿¥ˆ<–Ûk–µ5‘NGˆ#ÈóÉe“OÖ²Ýåß;À‚=.ikpàž?el‘Åô3€tU‘®:jÔ„a¶VEÖ®Z’i§Ø¿±c-.À‡·øø=uz‘îÀæ.0T´-ß°_£…WQJ?íÐ]µôWE’ÎC»œF v àÖ]‡'ªgkþô!a8lE ÏЦÀ ûyUS¸£ôS UU˜¤wÍ2.ÚhÅb­!ƒŒ_¢©^kT`®ö œ©Æ`€=ʓăj88u¥T]‘­C¶*d` °VÖíE&7¼ó,ÌP÷\üö…ÇXðV˜jk°À®XŽM|PuG9 ·­¯ ñ»Bº.˜BµÌcÁ ó@§]C¥,øwèéÈÖ@i©”½¢xr¬¬Ý…S™œY: •óŠZ¤˜ÙQì €pc3uÔfâ*§H¬g ½ò±_:À‚—t$õ%`¡l[ºbæÍÛ¾;g¥# ǃêŽÃÌ”±H¸?›™«Þj§ã4ëÄùd•õág| ü•×»ºH7V€Í{а “Rë8P‹äLÉÏ¢üå’o2P.ŽrJ *Œ¥Ilލ¸ˆ8ïËv䨑õÐQ×C¥Î1³EŽ5Ì[uŸ%Wq¼êñ^­ÌY`K&¥œe “rë&°íÊé'‰/h¿VcÖd8nQz@…XštÍaÕ)új7ß‘«QI]íiµ1²l …š*8­bŒaØð5KÚáՆϫsЙ~îZ  ­eeVKˆª âb¬Ë Ÿ2èwÙ\ÏÕæ†'^“N¶¨nç{EFls G,kj¡Šö4~û[ûÌ>`ÁßÃT‹e¸*Ø©j½~ÊíÛ]ÖÖ3Ö>õT§×d/³ôòý¢Obe0IÞ1S€ù*ºr—CO‹%ŽÉçôº³2 Ã0 IÓô±ËkkÁæ­ax{Ν° ä’¶–P½@)Eš¦ Â0d8 fR-€wØþÆëÝß^¤{gaÞšîvàIíô:ÏJ%ñôF‚1†,ËHÓ”¢(›Ø‹'Ç Æ0o,!àÔË,¹Š¯UKܨi€Bà•¨`e”sV«ÞÞ{j|?@Q_@ËÂ0mFâkµâåF™—ç¼ûzÁKÝtjô‡C —ôŸ”ÿ¤§Ÿ%ÿÒ9ÌèQز1õ,¢ž iYglÙˆ&jÁG{~ûÛé S-{ý W¬¾ßLö¶ƒÔ…ìèÓ-Á#Ã/ ülÌJ±œŒ°Vv–7û–0m'p°à¡§S!~nÇéóÙNçÙݾ3olµSÇU©r$IQI‚?QŽ(BæÂ ss/O×ÇVÖábßòëÏ„ ðwÆÜô\Þ”+É7iAÌ¥;sSþU›ïùŠW´pÊN*ÏÓÊó\Sö(JY^e'ãÄ1X‰ÅH<ÞÞ´¼½n¹üÇ‚›€3]÷Ÿ¾ÊÝý§;÷ÅÿJ?øµD-HIEND®B`‚ifpgui-1.0.0/images/reload_s.png000755 001750 000144 00000002512 10275523016 014736 0ustar00000000 000000 ‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  šœtIMEÕ*¥Û R×IDATHÇ–_LSwÇ?mm¡ü³ -R*fÊæ&a3ܘ‘L5>05bœA‡fñÁdOãÅÝ|0&n.$HKÜÂŒÁDLl˜5†ÆsÚ*-…¶Üööv?jƒ«ÆótçžóýÞs~çÏÕÅU•7Ém!LÀ¦AN LKêˆEà­­«Shi‰¿Î_÷:‚‹Bdú 2 åÀštÈC˜† ä@ÿ×ÅÅ\.í­Î Q†Æ8TYÀž ¢(ÏÎÆ’–Æ¿w€ˆ-€GÀ˜ 'wß›kjT::â) :„0¹`W¾·ƒs—шsûv8tÊÊ -MÆb0>MM(==üìõ2sü —jjÜ ’eß Qœ-‚÷ê6m‚úz(/O'$K>OL@[¿uvÒ/SwqœÞ³aC„Gâ/ Î Q€;ëÁY·e ;v»™…‡!› Ö¯‹ŒFù>‚övnwvræ¨Ü®mû÷G §Oâ²™Ïá²*Žnܵµ <2‚½{áàAÐé¤~rRÎÍI‚µk)ŽÇ™3ÏBú7{< º¸ªrFˆ*4ÂQT_…… i•{ö€Ãñÿ2»zÜîåº`Xk+§Ün¾)…ñ“&à“L°•”€^t8|85x8,Ávª ~?»l·{U¶Œ@·øl*”åƒÀáNôõ%Á®]ƒîn©ÏÍ•Ñùý°r¥¸,DÖ$|n‚ÆJ(¨r:¡ àÍàSSôNLÐÞ ü¸nÙ`¬ÖjÏôzµå+óøqÝPs³ñWøÀgLðч°ê3«Õ¹bE2mŠÂ‚ßOÏ{~†CpÉ#Ù0s´¬lž¡!-õNnhÐ ?/z`uª4¨ˆAi:äÛ À‹að 0œCA˜*ï—yyAóô´ö濊†] ¥EwÕï·ü 6àÝ8r@ÉÓ ªÊ‚,dÀ|ƒÝ1\¸ ±oßK¨ÿ8Ó³0d0IEND®B`‚ifpgui-1.0.0/images/updirectory.png000755 001750 000144 00000001111 07725407426 015525 0ustar00000000 000000 ‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÓ 9Ú7«ÖIDATxÚÍ’=ka…ŸwæÙÌNf¿ŒYA]³"a;Å F…X(ˆ–‚M‚… ;!,‚µI#kio!ØX»DM²Ùuw2ß³¯…ˆ«Á¯JOuï¹Ü§8ø×ƒKñ–Ò<·çDïOÚ×Á˜Vz´ÎÉ}Yÿ…Œiµí¯i_Úë„÷.ÇÕ³£ã%Ë»ÉÅ~ñ÷€©@ãBtxg!œ?S«2ã°¿bÛGh7쌚c*p~ Hãz~H=¨ïIë«~ŽWË‚×ïtFò2SU×AÍp®;òó';/-Ë/8¦VÎA¥I +-Øpaµí»¤Ámà> ¥èG€DEW|/Â÷”ã{VÃÃc†Ý(^ku  VX,{>ýÖDhGrV ˜Y#“}¸k4©0,ñBXþèw‚ÀSà  cÀ$BœíÉ @ÐOÙÒüîùŠ© ¢ZŸÂÀu{ïEÜu•ÐE_wÕOKÄ„œù®HL,Iàš´Ë³Åœ½Ý4M¤þå'E!½Í ºkQéšµ¶ØëÄR¡B·®š†<&¥1Š8IÖã8yN²¹<£Yó¶Ty¢6`¡[¤A ø€O³Öç¿ÑgÒT±YiÒÏIEND®B`‚ifpgui-1.0.0/images/delete.png000755 001750 000144 00000001574 07722362570 014430 0ustar00000000 000000 ‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚböÿÿ3ÀÀ? óÇŸ ¿ýfxóî#ÓŸßÿÞþüŃ™…å Ãí[7ª3Àjˆ…[SM†ƒ üöã×?†¿îÞÌÀÃÍÉu÷ÁóýOž½ egg?€¬ €˜°FFF E ŒLÿ˜˜™$$E¬uEÔUåw²²°„üC8– €X°’gb66†û3¼zù’‹›ƒáÏï¿lŸ>~Xýïß¿" t?H-@auØL@WMbøõ‘áå‹ wî>f`ã`cøòåCL@auÈv& 7þüþàk Áðë00?ÿdx÷ü9++éGájá‚®Ÿb`¸y–áûè?¬¬ _îÝc`ê*b`Ý»Ž•‹è-Vfff¸6€B¸àÉ-†ã;¾~`øÿèÃW›†ÿo2Nªb`ß»ƒSîÃom3&1i` #\ @$•äÕö¬c`¾9ŸûÌQ¦;wXdø-¥Äð>§‘YDœ•ñÔ“@,0ö& Ó.„ñÛOÖ3دnf`xõžá·–ûº© ¿5˜¿|a&&p4Ã@±Àá0Y™X˜8Ÿ¾b`xöšáó†§o±Àò;P3#,¢! €˜þÁBþ÷/¶Å“Ø;+^døkdÁð[˜õì aWöm@qrAmG¸ €à±ÀrdëÔ†o~E&3|^¸“ákï,†ÿ|ü ̯^1ç20½zÁðÈ €^0sb`tòcø/£Âð+¥œ~ûú2|X½‘«¬€ákzÃ?^ aÀ´ì€b¥knA>†öé`)V þû”©€´‹ïóç€^üÏÀýõ +J ËÇOŸ¾¶uNþÃÄÄÍÿ€>djþ6à?4güsþ531|ùL–P`^†nJïxIEND®B`‚ifpgui-1.0.0/images/playlist.png000755 001750 000144 00000002270 10274470126 015012 0ustar00000000 000000 ‰PNG  IHDRoª¯bKGDÿÿÿ ½§“ pHYs  :èÝ™ÞtIMEÕ#ƒ•/(EIDAT8Ë¥•KlTeÇÏýîcî<:3w:í´¶Ô2㣠- †PÄWŒ‰lIÀ;®Ü¹ÒÄÄhÒ¸PbBlH5ŸÂCRhC‘°SRm§3Óé óè½s¿×q1µ3%µÏîKÎù}ßùŸó£äóyX×\W ¢ijëø¨ªª€”˜ÎÚù|Õ¶Y¥Â€(œ£®©(A74]#·úžkݾ­y–“SÇ!ñx42}>]ÓˆJ”F'ÆÉȸß¾-²hf¶räªJÖô`L)¼ö¡Ÿ“s©r[Ìß»#º6ˆu…23Wš¸ ¨€šN¢³»k©O<4¿þv¢Xb/ìn„†QòæxæÐÁM¥Öh­1ëA6€Wæ÷­fi®ËA€°&…1Q©PÛáù‚ãlº‘Äù÷ÔYš”`èj=â_ÈÙ_¦J%WHTUE4=š×«ùýÆ“¼7ƯvuEÆÆ ÏîŠz]£F#DD,«ï¾½8§©ÇP!dèÁžžDi‰î?°ñÂyašjƒØ H)kJ…a¨°³[ZüÀ8^ùËþòôE»¥£j‹j±úþá-]‰ç)GÊ„¦Õ MtP&–õA¨éc;,à7@"d  }tâ^ò‡Ëý¯Éä}!2)äêTt¸._~žF(“5bí6—JÆhU€J@×$Äá’2érDB«Ã¹,¸@…13išI=´ŽÚ»ñÃ?]¶¬ éºœrTu½\¦«@(’ t9  z«.“w¦ík—~Û³Ûžüñ³×0÷ ;‘U*Ã-Áû3¥U +ìI¥—\Ž”#¬°¹°è\-Œ þ96ròè¼G—×o Ë{¦¯/mJ¥JÞ&ïÃ9g(Ýú;G9RŽ\*Œ .ñQ‘~7øÇ™ÁÏÛ7:GŽ‘ãê_ °}½¡h¬3Þ:y+Å$dÊÀ¹l|‘¹-S†.ÃæXpjúå˜HXÆúç® Ùg¿ZùøÜèpº\yjテ…E¿SM·tFÚmLB­‹›Ú[?÷ðÕ—Ë ŽŽÀÅ«Óå µËŽS^š¾_ˆµ‡úöm~kæ+jut·4·…8(”#eh;|1St %Ë”Q}Go ”•™ÍÚºA¬°É¹üþ×¹½û·R޵RRŽ.•™t)=[ðÖ"[á •/²<³—M«o¥¿››”Ü¢cø<ù¼óà^έØaÄ7øû_‰ý×PÖÜ"ŒÉSƒw#aO,jôl±¬°¹þ¦QUU)‹ð¿MUÕ;öF þ-bWIEND®B`‚ifpgui-1.0.0/images/battery0.png000755 001750 000144 00000004312 10274470126 014702 0ustar00000000 000000 ‰PNG  IHDR szzôbKGDGFFø8*ñ pHYs  šœtIMEÔ ,eu“WIDATxÚ—K‹\džŸªS}.Ý=Ó×é‘ä¹ÈvŒ¤ÈQ|# 6 د†ì²ˆ—Ù²Í"¿ YdÈ"Ä«0ZÉv‚1Ø‘<²%Æ–f2žé陾œKŸ[UeÑ­‘dI#PpTï©úê=o•`寑€Õ K‹•baÍ–õU‹æB,q‡&O&K:9ZÒñðš›7=n>uëñ°äçþHÀÎÛcCÝóü#à àYàI ¤€ž÷s% 3æí=à}à¯À6`æ_+”þmG?5g^ù®]XyžêROø­¦¬Ô;RÕ¥M¡L-1C&ÅSÙ"±C ½äù¨˜ôBÍKê51jü“­ßE9»/¿¬Z})G(G ¥µZV«…µ–4MɲŒ(Š(Ëò8i¬Ö`¥žÛf<•Á>N¤d£ÆŽäb- Z©…µ¹¼Gñ”q4å%Ul¦ÎtGqß*å‹jµJ³Ù$MSÆã1Q1ð}Ÿ X[[ãìÙ³¬ä·íJv›t{lÓÃ}á$XÀñ]Î)‡·šuh/>¨„#ŒeŠÂèä?S8©c_ ªÞ·ýånIÍ 8Õ©òôÚÙÄ! }T–¡Ò”fyÆÍìâôÀzÓEÿ¶0a4.0í5Qž‹ßYÝ{XýÏôÀ»µ‘)`ureZFWF*ø¹õüU¯æKNu05Y€8€¨û{°?´|qÝÚ/®[¢ØÅ6IqL Vã¶ÛÄ©zx'ª …§´ÆƒÙr`S°cƒÍÀäPÞ·±¡+Øß2lmY;X’Šb6löëÀbÀîñ…ïqyiñrE°ÇSƒô«Çm ²M)¢„-ØÛ´vëª!ïíãqXcÐÆà|r‹/€¿ðÙÆ¯æþâ]àh5eJ¦÷Ü ¹  *ðªB¨oHŽ6 £MkÓÁC]ÎZ´Õ˜9€ÓXq$OÖ<.Õýù$a¸ìÅ)/E)(]"Ò|@ÔN …zZ jÝǯ¦åCÖŒÑäV#íWh)É[Í*´ëQœ«@k4ph-î,q M‰l!‚|òMK¾ºcìÃÜÞÚÙïìÞ ÏÁ ïúF&ÆÍÁq „¢!…ìIÔŠ@G|`ɶ-º´Öê.€6`,]À]ª£–ñNrÂåE<›†„²U×+kgŸp•ÓÈê¬Wå T_ÔcÁB_p8&ÇóßͤØM¡-ËÔÈ$'ÔÞ„Ïý ——Μ ‚1WTl«@Ï5UÕÝ@qZá,Ý­Yå´@zPëK¶ÀÅ`'Ç%ØÍñA¨d+A¶R#“bvÊúäK>þÅí¿ °ìÞ“@¥•ÎY Ûg+Nr á¯U|ƒpÂÁRQej[$ú´HÊD&ÅÈîÇRô#Éõ‰ŸN„x¶LX, ŒfØkø¬:‚³5ë.—€=;SqÆù(•º›À¾c/>EòªòëuuŽt\¬P3ª$¶Å‘>%åH}{5®ˆ«C%v"ÃNh©‹’‹"Ak€_±ª$o6}ÞlWÀ`þ¸« Êö‰=®j+ªXë Ãx”1±»]ˆÝφ-ùЏ]ä–9‰)€k@[0š½ÊSø‹Ç*X|@×62e ‹@À=PÅÌ¥6eܾ}ÄÖvÎÖÿ<1¶8Ì ÃbȨ‘;˜%è9@·†ªVãuGñÍçÑs GE`Jȧ4ò˜FÒ*óÁÔ°ÏDÏGy¿ó ^ðáF¦ìáh–›·ÒÃý s ?³ÊüJðÈðË?Ÿ²žÆ¬¥ÆØþØðÎÈzÉGÎcTà©Ì¿1Óì{yðÜÁ¿ßë&;{K™tD&™¦"MñÈFáŽ'´'l6 ¯È¶§Æn§–Ž øÒ’~ÊMÏá.üð‘*H¸r§6îï—ø±/xCY.8–óÂó”ðÊFÃy!  Чv ªÚy¿Âb"6‡uV«ÕÇ•c„µ3rW(!œÐ ÐGÿ7@uMå=‹­‚˜Ì†gáÕ¡ã×ùŠˆÄ­Os!AèƒVHÑ PS[-b®0£©ü7¿I{m<>¢G€.t¢G¹J|0 £0okpÕÕÄN±XÍÄ`,'Sù&³QO{=Š[𦓼À\áÖ¹Ó”¹ó0}šjë]wk\U[ŒQøÏ²òs¤Âbfè]ˆëy$vY˜1|‡„˜ƒUX‚kP@ P墳ƒ.ˆòqeµ³ ]x†Oík ½ | ²ë‘¹¹±Á¼ž ÀH°¦„°Rxêo£ ‹uÁ6u®¬TîÂ(uFˆkþˆÀ|Š7ÞäDΙ @;|"Ü?5@ƒ×ýI»6òÏßí:£Ùð‹ÑdøŽvû|Õ{„.ÜÁ ìN â.Rx}žÝ uœúV»å3ƒ±ìgꢉ£ð—èÂ=Aâ¦8 [ƒ©|~oÌã­gÿ»<ÛÖ0žR¿‰³ "·- tÀ¥¸Íø›|·|fG€‡XÓÎá%æ‹04´‘ñŸ'87“°iP³o×fžÞ?Œþ~‚‰l_/gDÙД=h­ÛZnÁ²·ÿ"£¼ûéó¥Ýôõ¯g²Þàä8òØßg¸<µDS³‚€:oò=øFðŠÐtŠ›g ¿ NѬî¦64ÜþMµ€¾;9uú"###ÔÒI<Íêa„"g‘;o„F-*`éŠ\¡V«15—Q© !ŠñL™Åú½”J%tk¯Æªˆr(R+E T¨¬¬¢+6maL%ORÆw¦óOK}¸,mïp5ŠäJ Æå¾‘@ d…€¥+±Íh6›Xgñtg§u{"â8j?_"¹ÎÃ:“Û†Jd"Ö:ºÑŒ–h4 bLmÁx‰V«L+\`Àp#1º½á¼†%(¤pèÜÙü¯lnž`)ý‹ŸNí>ï;‹(CnM-Ö¦ÌÔgøêãÃYÂØÌÛümÁÛþ,+¡ #`]^_BY •u ÄáUìüYöïÙ˺{F(U‡r‰ ˆÆÙÑJY–’F â`–ñÆ gb6ì•4âÁAhJZÚATg 2½¼f­Æ,.©#•ªC#T†ÇHâ¤YÇæ«Kò¯å2ƒñX£Š°ùHhEpVr:S%Ü JÀÓÒM@|#(GX´ p²Ì­”ŸXq ¬ˆV. LŸ'aâ ÎÐb; ÔM ˆŒ‘.S€öüýø±×¿¡,ãιº6,G÷?ð°f±Ñu§€Wzz/p9táמê‹K#haQøqF”±[¤i+¤q“4 HÚÑh_·¢qRu9=¬Îé‰éékGý2qyP)å!J‰h£LIk¯O;—Yl–á²gó5Íõzýʵ¹éžßŽ%‡5àrz¸›ü«ëËø~”IEND®B`‚ifpgui-1.0.0/images/newfolder.png000755 001750 000144 00000001211 07556526264 015146 0ustar00000000 000000 ‰PNG  IHDRVÎŽWgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?5@1‘¬cã0FÄD‰fdq€bòÅP=ìURŸø×ÿ© ÿ²¤Ž?c`8±Á†ù†@ÚR Ì F!^¬(V.c`8Uªd>C dê±TÕ5 ¾4d1c6#@ ²ÒøÁpíù7¼¾» luÁˆÀq° A†€¸Ä"~ýùËðó÷_°üÿ׿1 ¹¡kÅ€pÑ+ˆ e_:uñ aì5èØ ¶ÿ¢ä¼û 7dÞ{eH¸_ tÁbÌ0òÿ3<û @`¯iI`¸ôä Ï7&=C†¿ÌÌ(.ZûSL³ß„³¬ß14³. ¸×`†|ø ŠÀ?(¹1\…0¾Å¡v<þø‹Aãò1†›3¬@& °Aß¿#ÂåÙÛïx]჌’$ï0¡ ·Ø ·Ïÿ1¨hò2œ¼ó‰`Úüûÿ;Ó{ÏÄ_2\ã2$@,0ûŽÝ#:—üa&AQh:€d&üŠ¡3Zž8ØXØÙ˜xØØY™!ln60Í䞆¹æ-Ì €çµ`ˆ! M$€gÐlÄÈ`ÖMz9rªTÈ0!€%oaP:%ѨãÈÞ€Ä5ŒðÙ5 `TÚ¸ÏQ6ôZIEND®B`‚ifpgui-1.0.0/images/fileclose_s.png000755 001750 000144 00000003244 10274470126 015442 0ustar00000000 000000 ‰PNG  IHDRàw=økIDATxœ•Ëk[ÛÆ¿}ÞzËÇ’%EMœÈŽId7„ÛÁ˜[ 45xPÒ\öƒöN –ÞBȨ/:ê¤ä(Ü”n Á5MIí\ÛØñ#q”èžê[‘t$Ç~tdÑô&Ðöèû±÷úÖ·ˆª™™issÓbŒedYþ.€œ¢_0ÆþÍÛ•ey¿¯¯¯|çÎÎåË—?¨C>H&“áV«õÃX,öƒp8<¥ëú°$I 0Æàyžp]·å8ΆïûË„/ƒ ø×ÿÐuý¤,Ë¿ÈçóŸ %4M“:<Ï¥œs0Æàû>jµš[¯× Bˆ_Ÿ8qâN±Xô? 0Ms&›ÍþîÊ•+ÓSSS¤\.ãÕ«W¨Õjàœ#ãÝ»wð}Œ1AÇqP©TðæÍ'‚?†ñÛN§S9ÖTŽ/†a|'—Ëý~iiiz~~[[[°mFBX–…ÅÅEضÝÝ]”J%8ŽEQ icQÛ¶⺮?66öÅÖÖVÐ$“É$I¿\\\œšœœ„mÛØØØ@¥RŠ¢`xx—.]ÂÙ³gqîÜ9`cc¶mC’$d³Yø¾o–ËåŸíìì,ø;(sssR«ÕZ˜ýñ‘$ ããã°, =ÂË—/¡ª*&&&`š&J¥044„óçÏ£P(àùóçX]]¥Ýn·ïèèè ]×_­­­½Ëå²500ðùüüü÷2™ 1 ‰D§OŸF>ŸG*•‚ªª˜žžF<‡,ËÐ4 ¡PápƒƒƒpëëëeœsÔëõcìàîÝ»’,ËÙx<>e†dÛ6b±$Iç–eann×®]Ãàà !=CȲ Ó4áû>ÖÖÖ@)E4…eY…Bq³µZ­OÑ4mL×õájµ !FFFÍf¡ë:!e–esþ€‚N§ƒååe¼xñétœsxžÓ4%×uÇc'!DN¡¢Z­¢X,bffW¯^E:!¤zÏß„À¶mloo# !‰Àó¼Þ÷ɲœ‚ %†±`šæŒ¦i€n·‹ƒƒ‹E„B!$ (ŠÒ!cB@×uPJÑn·A)…ïû¨ÕjhµZcì+Ù0ŒO"‘Ȭ¦iPº®Ã0 assñx§NH’!Doš…H§Ó8sæ 4MC·ÛE£Ñ@¹\F£ÑpcS”‚ ”RÂ9çüxðH$Žý MÓ „èA|ߥžç‚ÑÑQX–…t:B¡€B¡Ð&„´!Än-ƘÉ9‡Çñ‘ËåL&áy8ç$ ªª"(Š×uáº.<ÏC0 „¼}û”Ò*!äPñº®c||”RAß÷‹ÅðäÉ<~üÈår‚Ýn®ëb·o߆mÛ€uMÓ¾Q Ã(»®ûN§3‰D UUáû>R©2™ Úí6!Ð4 Íf>ijgÏP(páÂŒŒŒÀ0 ”J%¬¬¬`œóšb%‰´äÐ[·n5|?&E!©T †aôü¯( vvvpÿþ}„B!„B!‹E‹E0ưµµ…••Ôëut:¯TU½µ´´tØ‹kUU”Édþ’J¥bÑhš¦!#ŸÏãâÅ‹ˆF£¸wïvww‘Íf¡i|ßG³ÙD·ÛÅëׯQ,…ã8/cŸŽŽ>ÝÞÞ¦½¸>yòä—Õju’òSιiš&ñôéS8Žƒx<޽½=„Ãá÷úÒívQ©TP*•D»Ý.PJÿ˜H$¾ÞÞÞ¦ßZ8±X,Åû¹išŸg2™¾ã—èºY–ÑétÐßßI’@)E«ÕB­VC¹\ÆÑÑÑçüOº®ÿµÝnW¿µp ÕjUòùüoööö–›Íæ¯LÓF£ý‘HD’eŠ¢ ÝnÃó<´ÛmÔëußqœšïû!H&“7oÞì~teþw麞£”~¢(Êœ¦ic’$%!!!§”¶ƒ ¨0ƾðOUU}³ººJÿWç£UK¥RŸçyÎù "€BI’Þêºn:ׯ_÷oܸñA¡ÿ1ªdÍÖ†VµIEND®B`‚ifpgui-1.0.0/images/battery1.png000755 001750 000144 00000004340 10274470126 014704 0ustar00000000 000000 ‰PNG  IHDR szzôbKGDGFFø8*ñ pHYs  šœtIMEÔ  çŧmIDATxÚ—Ë‹\LJ¿ª[}Ý=Ó¯™Iž‡lÇHŠdÅŠMl°^ Þ9d/³ d›Eþ‚d‘M ‹H ¯dÀh%Û ÆÄ¶ä‘-1–4“ñLOÏôã>ú¾ª*‹n$Kù@Á½PUç«sêW§J0³ò×HÀê¹Ea‚ùJ1·jËúŠŽEs.8C“'ãE.êxpÍM›7Ÿ¸õxP‰ ò3¤`g퉦îûþ1ðpxè) gý\`èÌþ£Y{øø+°˜Ä72¥ÛQÀOÍ©W¾oç–/Q]ì ¿Õ”•zGªº´)”©%fÀ¸8d"[$v@¡Ý"Ö“ž«yI½&†íO~²ù»(gçåw§NðмÜiA»ù°ãÃ! ¦+QÀÏlcù´Y{uÖDë Rk­a0@ÄÅ>q¡2dȸ»aºKÎàlל=%ó¾C£Tü(€¿|R4”í>Ÿk¢ý\CvÎa½6ÖZŒ1h­p)%BŒ1”eIš¦„aˆ¬@áÎáèùî¼:qv¤Mz{Ý|åàw–^÷åødÜÊz¦h=ãk²ù4tΡµF—åJ©Š¢ IÆã1EÛ:5Që.8M;¥€ -|ÏÅ/YýÒž2E9 Q©…0†,ËHÓ”ýý}ö÷÷‰ã˜$IŽZ†DQDžçcð}Ÿv»M§<¤S:KV›6°³Ûãc×åòâI^}ÀÎW”)t”š»q³½½Í7Ž”RT*Æã1Q‘¦)Æ‚  ÓéЙìˆNâåú6ÀÕÏéæÓõwfj*%`ä³½÷œ*û×Ç€U+/"ååh¡”¢V«Ñjµ°Ö’¦)Y–EeY9 ‚€•,×sیǢÒßÉ4€lÔxÊ‘œ¯Të!0±°:“÷0ž0Š&¼¤ÊýÀ™láÈŽã[¥|Q­Vi6›¤iÊh4"Š"†Ã!¾ï«««œ>}šåüŽ]Îînlz°'œ 8¾Ëåðv³íù‡•pè€1 LQXüg¢'uì‹AÕûŽ¿´PRóNtª<»:G6vHC•e¨4¥Y^£qóc;?Ù·Þ¤OÑ»#ŒF LºM”çâwÖ^÷•ÿS]ðn¯gJç…X\™”Ñ•¡ ~n=Å«ù’ ˜šÀÌA@Ô€½]ØXn]·öÖuK[¢Ø&)Ž)ÁjÀ.4qªÞ±*há)­ñ`l vd°˜ÊÛ‚â¶ ö t{›†ÍMkû}KCQL‡MŒ!ìÞ!·|Ë‹óǨà€+Êh$€=˜ìÈ ‡X=‚lCmHµ lÁ›W éloÃ6à³ÛÜþÂ뿚ÕX6PP¦dòÀ]“sª¯*„ú–äpÃ0ܰ6í?²ÊY‹¶3pËŽäéšÇź?[$ìç€Ý8å¥(¥K$Pš¯ˆºÀ ¤PÏ DM {ØÁuä|d¡µc4¹Õ@ûZJòv³ íú#T g*Ð X‹;uHDS"Bˆ† ß‚|Ã’oƒ.Áû¨joít»{ ;GÃsð;g£À»¾žI£1F³”áƒhH!»µ,Ð$Z²-‹.íùº  Ëà.ÖQKóxÇUÂ¥y<›†„²U×+kgŸr•ÓÈê´WåT_ÔcÁ\Op0ÆGëßɤØI¡-ËÔÈ$'Ôî˜/ý —O£‚WTl+@×5UÕ â¤ÂY¼—³ÊIô Ö“Ìm‚‹ÁŽR°“;âÃPÉV‚l¥F&Åô–õÙW| ü‹;ë` عÏÿ €J+Ó@=¶*Nrá¯V|ƒpÂÁRQeb[$ú¤HÊD&ÅÐîÅRô"Éõ±Ÿ…¸P&Ì—F3ì6|VÁéšÇGu—‹À®*€8ãl”ƒJÝÎM`ϱçŸ!yUùõ:ó:G:.V¨)UÛâPŸýr(ö‹ž½WÄÕÛ‘a;´ÔEÉy‘ 5sÀ¶¯XQ’·š>oµ« ?;î©À‚2†=`l²ZÁŠ*Ö:hã0fŒ†‡ìlbgÛ³ýA‹~¾,î9eNb  ÀÐŒ&D·†ò~çü‘ æRÁµõLYÃ<pT13© †wî²¹•³ù?Oô-rà0,‡¤ÆN¦Îûz°PCU+O¨u“ʲüFÊN!œ)³bd}Ų¼Öty­í=P ~p˜ÍT`‡a Š/®ù©û ;ÿÅ·/¡g@³À”Ohä14¤Uæý‰a;žˆ®ò$þ…9x~îáñŸ†p5e†sÀ Üø¤•ì™ù©fO‚Çš_–øù„µ4f50ÆöF†w‡†Ћ>2pð.5àõö#"'a¿•Yà7f’ý ïõ_Øÿ÷û Éöîb&‘ G¦i†HSü0¢F¸£1íñ…… ÃÂ+²­‰±[©åŸCþ²ä€ß›pÓsx÷¿C¤.‘Ö"-Ó{À§ì$÷ÞmîïyÓ¼¡,çËYáyJxž£]²â‘%y®‘É™$`lbµMBË{;†÷¶ ü­ä&S'9p ø.÷ޟά=`ÿ€˜´÷OªÝ}IEND®B`‚ifpgui-1.0.0/images/folder.png000755 001750 000144 00000001205 11160474142 014416 0ustar00000000 000000 ‰PNG  IHDR szzôsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<IDATxÚí—=kTQ†ßwÎ̽ù0&MR(¶ÑÊF{±±b%ÚØøììü ±°³­l´¶\°H!H McÜ%›d“ÍýïÀ¢ER&g›<ðr9pàÞ9Í¥»cšH—˦Šb³·Û_[ÇÃSUåOÞ¿¼ñÀ¿Gøt}ÛÝ™=u¡Р·yr,àÚ»×?_ènÏà,†£ß·*Ôã<˜Ÿ‘Ÿëϯݜ¬à?ãªÅY”Ü_5œß~œ¬žzÁÖï#ä!xïUï׸ªW0JÓm˯ß:¡¸ûòиãèÍÇÍe-45Ÿzû£î›Dew4㪠猅Ö))Í BGÂR·d¸µP­4%–fZä¨jg¸µ0'),¹» á w¼ã”0oJï@HtN†;8âJ¡DÛ2“Ÿ‚áÖBe”$DÓ0Wg¸Õ =¡˜’Âl0œáÖRÓ¾,•¬ˆ¬+·šr(š 26†[K“=€R$žq)Í÷Ô4 êÆiF:òÀ šd ô›Öi‰ô\ D(,}5KxÒˆ)è 2– áVPvÎQÅT5ùpà ì,Í»£VÛÖ‘‹Å¹$áÖ¥z¸±¸2;Z˜Õddïp\í7 ²Öån—«ÈðK¯Ëº;Ø)à—ÇG|½b{¹IEND®B`‚ifpgui-1.0.0/images/battery3.png000755 001750 000144 00000004465 10274470126 014716 0ustar00000000 000000 ‰PNG  IHDR szzôbKGDGFFø8*ñ pHYs  šœtIMEÔ " ÜE‰«ÂIDATxڗˋׇ¿[u»«ªÓÝÓ3£çH²c)R+2–$`²›ìl²ˆ—Ù²Í"AÎ&EHp &^%`ˆÁ~ GŽ-Ù#?P$Íx<žéîzu½î=Ytk,Y’íªŠª:ß=çþî9W1³ê78€˜ö¢²Á\­l‘ªµlÕm'ª“Id‹4\4éî¢I†Ô³][ÏvT½˜Ô[ɰ–”ü‰P€ÌÆ×š¾éú'ÀÓÀ)à` È3{¯,ýÙ}<ooV;ƒøF¦Íïúø™=øÄYi>McqIù½®SkõÝr$ƒ*†„å.§G*CJ³X/‹Q+°Ù‰¦—¶šj4ÿþsW~¬?þ2ÎÁý<¡÷{0ß½Ýñîv†Ó™hàçÒ9|Ì}ò(½P½pŒÁ5†CÌpHRn³“l1rFŒVa=*¢ú>wx|É?èû}—N¥ù%P?~õuÑвô8ªæïï8ýˆ7ˆ`­Å€ëº8ŽƒR k-UU‘eQáÔ ¬·qÍÜÒœÞ|ll¶6—ðµ‹ßß÷#ÿNŽ´ ^{5×ôîu£N÷èŸÀƒ©ª[´Ö·”eIš¦„aH$Ò¢©šK nWFªR°ÅBß«ãW_1û} xÚ–Õ4D•QÊZò<'Ë2¶··ÙÞÞ&IÒ4ÝQÇ1EQ`­Å÷}æççéW»ô+wŸ;¬olñ^½Î¹Åùä“=­5µZ0 ‰ã˜,˰Öý~Ÿþd]õS—¼0×.}Äx‘‹¯¾©â×G:ø…xþ²×ôö/`› Û†$€¸›°9®^¹zYˆ!N$ÍpmbpYèâ6<¼Çδx·¸Îg\û(ô´1x0 ’Œ-’ƒ- º¦(¯)¢ºbóŠåÊ‘Á@H(ËégÓ­kIÙÜåªïqîü;ÙimwA‰ý"o¾;a}‡‹ÚÙ˜Xdl1#ÄŒ!_Qä+ŽŠ{õ`cEäÊ%K6[Û{ß!Öb¬ÅøðW¿^øx÷×/üe÷à À.04´­˜Üpܶ‚†Âk(¥¿å°»b­ˆdƒ;V9Œì Àívîiz<Øòg“„Mà°‘d<g M…Tö˪¥pGéûª©0[Èð²eRݱЊÅZC!¿FO;<ßmÀ|ë*pf*0ìˆPŸ:T×Áé(¥:ŠbŠ¡XSµr§j/2ýá5°Ô¦ã¹øgŸl{ð… ´µl¡ìeµ†¨".ƺŒG9ãÑ.ë«¥Z_ód0ì1(«ëeÁNUÚ( FÀ"@-5ÑžÆ?ûÃ=Ìݦ‚×¢\‹e¸ ؙԆ£œë×w¹²Zpå3O †=v ˰2ªFdV¦Sç3Xh¢5¼Ç¾‹ ôg\{;ò´Xà|I^7:£0 Ã<Ï¿²½¶ŒaÁŽïoƬøšsç_OëøóÛUð~ÄzÈEm-C y3€RŠ<ÏÇ„aHE_ f €·Ø^½ðRøç^ o4æýÙÙaXîÕÎpð0 T–Î~$c(Š‚<Ï©ªê+»bñÄâXÁŒ%œNeWñH³Æ'-ÍP  ‘TKÔj¸s@Mn¨ªêh™B¸SfÅH|Ía­xª[ç©yï–Zð}€Ý|¦E0,?þÀÏêÿ ò“Q~û4ft7 lÅ„N‘ÐÉ"zU1˜XÖ’)€ZòÑžƒÿÈÛÞÙ»Õ‚W¢\ËΨ «•÷{ÙÎf»P\fv$¸«ùU…_L8š%Éb¬•­±åµ‘%Ì¢¸x• ÎEžÎ…ø­ä[ƒ‡¶ß~s!]ÛXÌWåÊu²,Ge~Ó‰bêãù0D⨔(*½2_XYÍ„WF–?~.€¿5áSÏåµ7ÿŸ±ÃÏáË*¸±žrñƃúù©¯xZ '\á¸ò<­<Ï5uªæQ”EapÒ Nš‚•TŒ¤‘ðƺåUË[¯øpf}ÿià{|qþtgãû?È#ù¥_n·IEND®B`‚ifpgui-1.0.0/images/.directory000755 001750 000144 00000000070 11310643176 014443 0ustar00000000 000000 [Dolphin] ShowPreview=true Timestamp=2009,12,11,23,30,7 ifpgui-1.0.0/images/radio_s.png000755 001750 000144 00000003653 10274470126 014577 0ustar00000000 000000 ‰PNG  IHDRÉ÷õ$bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ~.¼ž8IDAT(Ï…–KŒÕ†¿{ëÕÕÏñtÛ–˜?D ,ˆ#Ø8^ ɉ‚ÂɶÂ.`–dã‘Ȇ7lˆ)‘"Gb‘›€¢‘ÂXDcÓmÀôxzÚÓL¿ª»÷‘E»‹Cr¯jUuë?÷œÿ?ÿ|Ï:uê>ø FƒGyÄÞ¼y“,ËØ·o<ð­VKð–³O”RL&vvvØÚÚ¢Ûíâþ¯C?þ¸ÝØØ Ùl²¼¼L¥R!Ë2ºÝ.kkk”J%{úôi´ÖyÖÚ{þ#h£F”J%”RcøÞÈß}÷]ÛívyôÑG9zô(J)”R„aÈx#INœ8A§ÓáÊ•+¬ÛuÄ·îc­%žÆ¤Û)õ~“å““¥Ù½àkkk¶ÙlrôèQ®_¿ŽRŠC‡Q,ó”–Ëe<Ï㫯¾¢Ñh°ººÊ‡~Hó•¦}æ£gÄ<ÝÈâŒ^ÒcÇîÄ »Ù.ûJû0‰¹üæÍ›,//£”¢ßïÓh4(‹L&¢(Âu]ªÕ*‹‹‹ :ÌϨ@k5«-Q1²#¤•kÐFçïå·Á³,£R©äŒ Ãk-QqäÈ<Ï#Žc\×%¦Ó)…BR©Äx<¦X,RË” %B7Ä>ŽpB‚¼Ãƒ;[~WÍçzÐZàº.;;;ÄqŒçyXk1Æ ¥D)E–eA€ïúø¾ïù¸ž‹ã:HG"äŒõÖÚ¼|.À¥K—¨V«4 ´Öt»]zè!‚ `8R.—©V«<öØcœ9s†³gÏ2™N§,--1‰ã˜ãÇãÝö°Úb„Áj‹ãÌn- f´X° .^¼H½^çüùó¶ÙlòÖ[oÝ©õ~<ÏeaaB¡Àt:åý÷ßÇ÷}Nœ8ïûìîîÒl6‘RbŒ¡Óéä ŸËržEk-®ëáy.O>ù3z½]á†aÈ­V‹wÞy‡jµŠR ×u8|ø0Zë¼¾õzß÷q]—8ŽXZZ"Š"‚ àÀD6"Ui:oLZkBÒn·Y[û;?ü0n±XäêÕ«voo^xv»Í'Ÿ|Âææ&Æ\×%MS<Ï£^¯£µÆó<<Ï#¶¶¶8xð Fƒ`­%͆…ƒU†BZDEŠÁ`€ØH9£šÛëõè÷ûT«UnÝºÅææ&Žãpß}÷¡µ&Ë2†Ã!iš²²²B§Óá‹/¾@1“Œµ ‡Cö{Œô]ÔDÞ×$‘A…91ø™À•©É9¡@aÞn·¹qãÖZiµZ9›µÖ$IBÇDQD½^ggg‡ííí\ ®ë"¥dÌUPèQÆäpB&d¥/ö†f·Kmmf4wœÎ½}û6Æ´Ö(¥8~ü8…Bçõ|ðúï^ç¥ß¼ÄS|ŠC‡Q©TxíÒk\xåRJ\×e̘$H—ûüsð/~úÄùÉÑûùhk“þöoVôlw:ë6‘îh4B)•§poojµ À›x!ý¤Às¿|޳çÎrùíËôz=¤” "‘Æ(F…OÜÿcª^‘ƱW*ÿ`okLH€SqpõŒÀrmmr¹LI’$o/þúE´Öø¾À«¿}•Ëo_æÜùs¤iJÇÄqLš¦¨Ì!N܉˧½/6ú7p#©A6šÉPñMo×Zß•~€7~ÿŽãày^¹@äD¹–1h4JJ±ÏJc…µ®òÁO™~±”,LÈp6ˆmô |82N0Æ0N ‚€$IpÝo¼Çq\×% ÃüæRJ’$AHA6ÉÉbP!ùT£®§&ÕLàŽKàÎ&‰¤ßïÏÌ÷äÉ“öرc¬®®²¾¾Žçy8Žƒ‚ (•JH)q‡,Ër ²,ËË4²£™†Ë =‰¶G8#SAc±A{³ïûxž'î±Ôv»7!f ¡T*åm¾’$ɃȲŒ4M1Æ0ÐLÇÌ&G`µÍ³vdñH>×}þùçwûy¹\æÜ¹s‹ÅÜ­¤”¹.ÇÉÖš(Šò ´Ö¤išg0ù9c ®tsRòì³ÏÞ Þëõèõz$I’ÍÁ…xž—›„RŠétš+dž¥Tn™sÃñZP7•(êI…ãÁbÔ¬Wë;¹>¬l>ó, úBæ@T“€ß~ÙÃûÛoˆËk\”ªó,6kZÁÌyóßÌsøÂáþÎOØzú:&A‘ h«€ØLðÇÁÑœˆ±’\O‹å{DŒqQÏø‡‡(»[ÉéÕï€åšyoo·_z9m”‘Ïë4&’ bN—ÌV¸¿}ï=øÅæSº¢"&t"„È3™ ל,çfk€Ñ8½¸²Êq ˆc¦D9q_äœ8œ.Æ´"ŒTÜß6Èü9è£À'Ã!="†'¹¹˜yƒžqAk‡î[Û¾ÎÅ=ØÝÿÁûÎ Ú^†}R_ZA„àÜÈæÄÕs¦tÆuQ®2ÖNšÉxß}û°v¿WCºt Pš€Í g ¬]GóQAX§öN¢bøÜ–±®ëË~¯‹›"Ú. ®A¯ca­ÃåC§×\HÕ:a *èx ܆÷ƒn…›•ÓÈÀtÀ¹ËS3V)# °©*ØðèÓ×÷QyFÄ”…I}ºüÓ·)ï‚àëHN`ÝSÒ§ˆA%ªP­)ŽXl! —Ü ]8P’ÛYÀØ©€ oúÞ)¢Mä€eàrb‘óÄÈ:C` à«´·ˆ‘Ôá;PÊ [ š¨’„`Àß­Âyä"˜ó¦ë9Þ^}ûpÕl”t ×¡¥Â‘A'ÀI©MSެ§"BàâCÈL€qVÐëО—~§& EŒí¤VÀºhEdë-™µW¤trÓRû/F02Xº€üs¼ÞÍÊL´wí .¾$n7:ÞïwýóP2G#䣠+¬Wû¬sùøêoFB;î@×[ŒŽí›ïv¿X—FÕò 1'ULy Æ©¶†5a„õðž,æv Ãõ@âJœ‰Û}±óÙÑÝ[wBogÆ)&4ÿôHÐ¥Oò’3çÆáà’C«ðåçŸ G¼BÜ& BKtqõ¡Äc¢"~&¾,BZü;¡-žÄÿ!þ-S§:;ŸIEND®B`‚ifpgui-1.0.0/images/reload.png000755 001750 000144 00000001616 07727445714 014440 0ustar00000000 000000 ‰PNG  IHDRóÿabKGDùC» pHYs íÀ,tIMEÓ ÂÒA¢IDATxÚm“Ëk\eÆßw¾™93Kf&䦉6 FC5¯]H¡ZŠÝD”. .DÚn\ºwú'¸,.ŠD”ÙH¶Œ—ªdššE%f’Ø6·I¦gngæô\æœã"¢ŒøÂ ïâý=ï¯àjöòªÁ£‘Nh8^Èʆŕ›mÊ÷Æýý·~¶T,Cíþ-‰·f§G¦>zûC ËvÙ;4±=BÁ@_„WŸÕiÙZbm_œëªüÕ¹qajÃó?8÷þYÄ4ô§4¦ŽçQ¢KÍô1…8nÈÓ£16´D¥%RãñõëÚ쥒ŽûâÍ“=€mž?1B*©×£4¬€]ÃÁr|,; ïr{3œòÝöUÌGõd&÷©^mŒ ¹^j°]uHÄ$¶‹Jr)Ÿ6±´žEÆÂdËxY“¹¤¤ÚêòÔp €Õ-‹ò®}ä@¶™ÍðÒ‰<•G°´2¢#¤šT€p}†Æp.ÀvMq³ÜÇ+ãm.œïÉÝB„@J ÁfÓ Y3úùyó(¶ÓÏ)FrŠ•Ý>jM»Gà æ¢$ø]X;JyF©ë$šR e6Œ$7VNÏÄøô]C£E.“ºR´ìz'ç¯Ý‘3²Ø¾uE:ÆÒ-¾¾eqmÙÄvòi¼nÈw-v Û ðéTˆt«ß ¨û{à…÷¾Íú‘üò‹Óý¹LôŸkQ \ÿh‚ˆTë.¿Ü­îŒ87Îj.kgçâv=xìÚƒšöFR—ÙÇûcÄ£’ˆè‘{k¯Ãí5cgØûñâ,—KXYYáÌ\²ÞôR_m×Uj«âNÙŽµ½€FÛå޾ɯ¿7;{ûÅ!ïûþ†[…B¡÷Èf³Ñmwb¬-Ÿ8%TâI¡Å\X;9íN_P®š¦ib±À_`='µZ_IEND®B`‚ifpgui-1.0.0/images/multimedia.png000755 001750 000144 00000011057 10274470126 015306 0ustar00000000 000000 ‰PNG  IHDR02ÊXŒgAMA± üabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÐ%â-¯ú¬IDATxÚíšy”UÇ?÷ÞªWo½dëì! !1D ‘ "D$è ‹1ptŽN‚¨££Ž#(3Žƒ·A #ƒÈf[dBXCX²½ÓéNÒ{¿~K÷Û·ªºóGWc“ŽgþðžsOUWßWõýÝßï÷½ßû«¼‡öì-×Wk-\aùª¾jÅ_–h€‹¾sæ¯í¯íýµ§o¹Zü_?ã¨X½òJ¹|Õ`õŠ¥RÃd@Y â»½¹ŠûËu¯Í1 •ë쉷í~ÏÜ|¹øŸï©ýE  ~¸­üê²›&N½Õ4 U,åµaHì`_ó%„Ñ ©/™\gÞ°êá¿hòGºx8x]È?¾ï@ë“É$ñž¹ÁNÍ&ô놆zm™R 9å/ی㫖6÷ ¸aŸJ1vE|A!…Lu'Kíû³ù²ï»÷m ùcÑ^Û€›ïzÂýÈ¥ Û¢ÓÆÍlÞßåóEQ)W\Ëg…Ç»z©ÚÎt`ûÿK¸5ç¿\ǹÕîè\Õ|9S¬îvµÎ÷ÁÓHÂ~ÓøðÅã¹×¦7wŒîì‰ÿmÀg~F|¹§¡>ºÁò©çŸ~jéx1ÉÃ’÷˜´7ÊRë‹ù¢Xôáy··÷&ÌdZ³Ùl|nStI¤.F(è¿äácôÆ“±'×o¼cӖݽñÔÏúS™³‹e{¾íê«÷èúÍ˯ïh¾ͺ¥ï›F‡Û¥ž)ÇÌ99ØÔ4nÖ[;¶ÿBJÎ h®}èþ§îsÇ?\aÝ¿7‘ëëì7-þ€ï†ÛßÉDÏÜ|µ~þuçvt÷ß}¨£{B[Ûúûû©V*DcuÌ:q&Ÿ¸ì#Ä¢Q^ܸSñûßÞõÓkÞÚ¶¥ü¾B(Qrê–-þx|êÔIÆ›[· Ñ$™F€_¯\Úøf¡vï«e9% (òdgÙ o!“ç·.0ºwúåËÛ›Þ|èP»zùÅ)s %®–ôöõ³wÏžþ¾ñ+¹â²E¬yâ¹Ož»èãñ·¶mùò±ð)/tŒKÏš-S¦á…—ŸwóÜÓO<ðåóæô?þÚ½ôœ9å–ÔàÊõ/®÷ryjÕªèïN¼‘J¤ŸŸ3gæ‚˯[ñƒÓNŸ;zû~‘N¤9rÃx£¹àÞçwègo]6©süE7õ¾ý /É7_ßH­œC)Ï@R%±m› Ïm`Ôè&.^t›·í9cúŒ™»wmß²çÝr@=Ô2ð±†Éþ`ŠÐgO:mî¶­È«W^YÿÓ‡žÕkþû›´*¥ƒT«þ€å –íM¿ûý}úÑ'%•H« iCŠÎ·Cç–kê÷ZøTÞ¹é±G¡uï6´]\\íâØ5ÐRJüþ @ÃôñË;î¤V«²`ÞiB ߯F8¦msòé³|¥RísÍÛö|qý+£N™wÒX]-Oš1aüîímk‹éAdÍŽhGïþø¼¾óÒ¶–Üæûݦñ_ïîé7k•j-ÞÒÙ÷›§^¿Õ Ÿ†-jþÊ®øúc>Bog¶ë!F‚He •R&RJ*å®´8ãsؾ³9Ï<œˆ÷ö“…N{c Áà’¿»dêøÉãôc÷=­^ßvàŸjBÞ{Ûç.*Æ“éùÚeg\ù¥óg/žµÒw®b¬ð`zv}©tÇî×w¯íNdÎóÀGÚ¬9®`þËÚ5kèîhÃÑ!‚!)¥´¶Aå¼P¾¡R6¼€ßò1zÌ8êÇ-|×$žSo¹ýÛ.”²ÖgÏsöíÜçnÛ´Íœ5w¦pgŒ‘€sýí¸sÅÒÊõÓ<øü֎ù°þÔs“…èoöíÛíëíî@H<ðñö”iÐ.Ú® ¥„!$JùI§“ô%ˆÆ¢„ÂÑ·Ó7¬zØmÔîUåR…D2©fÏ›eL˜6Anc7÷¬ßù£ëo?º`{eͯ?¸7¼£§§§nãË/ Ñ„^Æà6ÃúI»CòK*© jU›­;[†A¬¾ñÌãZÈ~±ú‰µhxeÝË-{vìsçž9;-]}ÍÆÝí™ã]XÚJuÿšÉf§<·þªÂ…@J9ä…·»ë…h•w]4 ¥B()m:‘(”aŒ‹FcÆ» ¤¨ÖÀ|ééMß\÷ÐúÍ3枨çxÀoÞøòœ–C=lÚô*™Á¤’o`(Þ¼ iXe СR™ÃÇ@&ËPÂô1È‘òá²ËžX(ÚjÒŒIS–->ëwƒñô›6¼q:®Ùgïinn¡ýऔ(¥b(q‡gKŽÖHeaêG †c)ÑZ£¤D)!£5Žã&²ÙìÃV._µF¯^y¥±lÅg7T|æ^©„TJɶÁòÊŸ}qÉ:àªá•õXmû›";v·ÎÛ¹cŽë  éEú0뀫55ÇÅ0ý„bãilšNÓäŒ? Œv„CŸi†J¥ÜyLúÉ+ýxtÍ…[wmÖ>òNÍ&çð ?RÇ3û½¥»·lÞÌ@:2B¤6ä2LÂõÝ4é3gQW!_,!„ ãPÛÐï”BJI8Z‡í8”+åÖc&q]côâB¡¨AЧééŒ# ‘=ð¯Þÿcw<ùуÚ0 ¡‡ØG ñÇÂuMŒóÏXÀ¨ÑõTª.RCa|–5TV ”I¬®Žtzj©¸ã˜ÈJuÓW¾õµüt›hk>(\ÇÁÍä>{ýíkÞww®Xzdõ:öÔ/mÛ¾7É ¢ ÃË;PJŽð€ÆgÕ4ó/ø€E&“§P(P,”p]‰F)‰ŸÏ"‰Ëç;iÀµ§7¥Âvm¡¯<6Ì•ˤÍÍŸ8|ðÉÒU7]wé…‡•Nd<[ýPkk+Žã`ùhí¢¤PêmÅ.€@tç_pÇ¡Pª ‘Ød29 Ùh›@(„RŠXýh&h—Å_²à¨9°zå•àÿèÔXž[&н\-¨»aÕÃÿÿùM%^úyÈo¦î\¹ô”ëW=\O›ÚÓÝ¿(•JaZ~L_†‹ ®”ã&Ï`þÜ“èê@&`S*W)—J”J9Á‘HÅB‰ÉÓgQ,T(æó¬]÷ÂMŸ¿ñß¶Üõ“o¬;š”PZ“¸þö5#ë6oƒ_õ÷—‡Ÿéέ¯I­TÊæþîêÙÀKÕѧŸ³{Ó†p¡X" hLÓ‡TÚµq{háR'Î:‘š£Ig ‹UÊU›b±H¹T V-2qÊ üááHžÆ1cHÅ{HÄ{1‚‘¶C]O\qÝ·?½öîï?p¸RkÒ‡Çûˆ¸—vdþ=814!s(%¬`8²ß/êvµõ|º/ÞÊÂT&JJ¤R(%=¹¬‘†F ÈæŠ¤r$SY2ƒJ…ŠÙ$JÀI'ŸJoß“N˜N.›§gÿ›ØÚÀRJ)zz{? ¼Ã©5µ£%ëêWÊ'Û3 “"_ho=šf…|¯<³iós½ºqxlG_rf±\Åô1L à   R™(Ó‡éâ„ †cTÊUºãi::{éêì Ù×A6ÝË`¢“¦¦&¦L4õ±(Ùd½Íøƒõ”Ë%JÅ<•JÉü“ þ?¿tEý†þÂÖõæ~åêK®u´îÈjçY«’Ó­¯u.ÙœÙåF£Ñk[†kŸO•ÜY¶>Ÿ'•è! '•CBa,ŸŸÞxœžDžÎöƒäÓÔŠ)j•Ñh˜E‹S«9ÄÂaýIRÝûÐ(Ê¥Z ´v¨U »Žª…V¯¸Ò¿®=ó­¿úÝeç/ü›ù;òöÖß¶$¯?sltëKÛ»ÿãºlÈf³{²ÙìR€ÀÄ“¦Õl·ÑPR*oC2¤e ÇÏòcY~ Ã`ôرĻ»hkÞJ6ÑA>ÝA!'à÷±äŸbÊäIÄãIìj…Ü@?­ÛQF€B.]+Q-)çRO}S/°s޾¤ .v·ìÂuk”1wµu ±âÿæò#HèÀôóšÊo½ˆi¥Ê4‘B ¤Ä0 ”abùLü õ„‚§°}ËkPËaJ—ñSOàSW}†SçœB[gœJ¥B2™ ·}ù|WZ8®‹¬ƒmëD¢c×+G5`ùª5ö…Kþú{ß»å6C*™Ëg‰Õ…Œ\O%ÿÑ ç½¸ûÀŸÊí :Ž‹å÷£5ø Ógb–eaY¡PˆH4Lc}”“ΜËE Ï!•LcJ˜:eRùHfòttõÑÕÑNf0Å¡ý»ÐªåJ8µ2ÕrõŽLfÐ>fYåùÇ7¬:åÔ“öûc7ŽÕ8±Ð•xaÉ î6{ŽÄPAC÷„BŠå!¥« E$! 0 ƒúú(£êhhˆÑ ÑÐcÖ´‰”ËeJ•*ƒÙ";v ³½þ¾z;ÛÐÂÂuËØµRh‡=]­o®LOÚëáþ'›„Íyx:”—eVéÚQ=z©TvH2hMCc¡€ŸH$D4¢>! ‹„°LEµ\¦ ”ÊU²…[w¶²_ û[öP*èéh·h,ÓÀ Ô§ºÚ6/+—Š TjPY¾jMùxD\)ÞVÓx͸A*Õ ®ãÒPcü¸FbÑ0á E(`á3 ”pp°]A¾T¥õ`m-Íìܼ‘r¥J.›&à‰:Ë(¥ºÚ¶~­ÏT1ž¬/>  8ï÷ñ»µë+O¯Yæ âñ>fΘÉÙgÎaÊÄqø} SI C!„FHƒš6Hg ôõ§ymÓ&^õyŠù ¦™ö¶=÷Ù5»ì„BRŠJ.;جµNy%û’§òÞÑrÆû¯#ð5¡“ƒÁ¹|ž\.GÀÄ0L„2@j\­q]I¡dS(äI òÌ3ØûÖ& …\»š:ÔÞú´ëº>@åsƒÀš¿:ç=SŒxÕTï<`|òòË%wÑÀÀ >p 5Û¡³»Ó7D©•ªM±ê µ h™´´´òàý¿§­yÕJ–j¹˜ìîhÛ¬µöy[׈z¸ûËK`×ë¶çª8Âû10Þ% ï¦þX(0ê‡?¿ûÞ×¶´.¨Ô Ìž9“³œ‚áÕ:}¦Â0Éx‚µOþ[·n§I¢uÍèïîÎe3Ý,Ápe/YsZë $€.ï¼ȼ×ðy=Œš2eêì%ŸZþ«C;KÕÊÔG#X–¤»»ƒD_ŠB1KµRDkS-—“ýÝmÛ®¨´ „p<ð®¾äõœÖ:®µîÖZðÀ'€´xﯤçŸçîz!Äøp$rÚióÎýrM¨©Å|žb±€].àØ64(Cèb.›È ¦{ôP9q˜×Õp•K¡=Ê^¯i­uBkÝåºîþ|/Þƒ}@D1JJ9I1Y16VWwZ,Úxª6Œ±B»ADZJ©˜-rÉR©”v]×õLH<Лù*PÕZ¬Ö:ãy Ó€Üû1À‚Bˆ)åXÏ€F „½ñ «µ6=ÐÃ’Ø. •Š´ãy¡¤µ¶²Ö:ï…Ï 8î1RÈ !Jï…F‡]ì¶Ö:ë8ŽOa !R@L1Ì~ÏÃlh­‡CPßGk]óÀÛÃà=/½ó¢·ˆ ïï’ÖÚ>b<{Ë5ÐÇȉa/H/‘ý¼nŒiŽ(Ê™ÞX×»æŒ`žav+x“Tñ®e½ÿ¯ÂÆ9@Mþ"zd\¾KRË@ÍÌ4ßÒ;ê×ô)ó¨{X¸žî±½£ã5,憒þÏð­…1ÛÃÀåˆä”#ƺ#¼¡3`äQ`¦á:üðçïø`ä¿_„Ãþ˜±cIEND®B`‚ifpgui-1.0.0/images/download_s.png000755 001750 000144 00000003147 10274470126 015306 0ustar00000000 000000 ‰PNG  IHDRàw=ø.IDATxœVmLTÙ~ÞsïOXñ:;Ë8 _Åé «“ˆ4دµ6.i³nRš¸?¶­m¥išH¶kãÖ6)iÒnÓ&µ®öG»¬””#T×*Šùpåc˜îÜ{Þþ°»«¶{’“óç¾Ïó¾ïyÞç\bf|ÚuôèQáõzË5M+‡Ã³mmm—oݺû_1ꧯ©©Ñ:´gïÞ½¿p:Eýýýѹ¹¹Ÿy<žw'&&ŸÈÌÿwoÛ¶ÍrêÔ©¯‡Ãá!)%†Á3³³|úôé鯯Æ7Ýn·õy±`fôööR °8p@|òƒ}ûö¹ÚÛÛÏÍÍ.Fcq>{eÜlþó¿ôž+×VB¡{|æÌ™‡ßÜ¿ÿS±Ì ž¦¦¦¦ªªªƒ………®µêvíÚå:|øðwÀmV«ëô?GÍæëNüzÈ%ÞüSr||ÂÜQµ=wûöío‡B¡²gÞAEE…ÖÜÜüµÊÊÊù|¾E›Í–_PPð[¯×«455½µ{÷îï A¶3—ÏECuŽš° =Zé8ù÷ëæñ†4ìØQåžšš:æõz066þ3;çççKâñxÚgòóÒ¾òå/³Û¬äÝâ+©©®~}Å0Ä;6ºã/Òá=YÊÝ@KÔ…My^깯«ò¯·øƒT[»çU!D²¶¶öÇ/^ ­)%éº.4UÁÕ»“|5´œá-*i~¥¦úÈRTüüãFŸ^ ¾ÈR¾P\Œ !P¼9Y^B_ÌC'Ïßĺ^Ъªª^-++û~~~¾íc2Õ4DœÚ¹`Ü^ÌÐ^Ñ86 ïÚ“W•cŸÏeëË`lp8€Í9 t=¦ítxº¯ã` Ìá÷û¿ …îŸ4Tf0$ðpÅ.)Ãöˆ¼ÿ0™WY¡¾]ïå뀎Y T°8« @j¯ÇMs+~?M@]•/­®®î¸ªªK~¿¿U“ (%ÛaEzæzdùª´ïV;„/ è˜&Uª (*`µ™. /Gƒ/7Ë.Zo/òÈø}lÞ´)×ãñ¼ÎÌÕˆDšM…¢d¢¡(Ûô<B €¦¤€€(€Ó¨™eÙŠùû¦§ ?šÃKî<áp8Âí»X·pߨU@r²eWwW_kkëI"ºqöìY]]u<Ì&$K˜’aSI©"Õ a2 ŒŒÌàƒ_ñúB²Xm‹ïŸ;×ÖÙÙÙRRRr»¯¯Ï|2©7ARJ)YYËÚ€A©Ó†Tö &0œÂ¡ø¬:ˆ¯ú=P„ˆ¶¶¶þ±··÷n·{d |Í* ™A fiJÓ”0M€!!A0™ è:#úxÃc÷0:r[~¼¶·ÑX,ÒÙÙõÞ¥K—~UXXøàÚµkOÀŸTº 6uÃ0 ëJ4°Ž¤ª!¡¨ˆk )°´¬cxÙŠ¹P`H^~ü8ÞÕÕý»žžž–X,öè™nš’©$‹¦Â ¦f'‘4R²$BP ˆ@‚à4K6nÎåȆdÒV___Àù,pP…x¼¼ÌL*5l…úËŽ^}2‘Düù®NÉL.JùAÙ²Å[ ‡Ž9ÒÜÒÒ"?I@¥¥¥Z x«¸¸ø'Õ/.ã^è>OÏÌ@š&‰ÕòšØÀÌ "JsØ`±Z¡(*†‡‡GOœ8H$ÓOU000ôûý‰ÇãÙÁ`°Îj±€e H€­&'#cJ Ã04 Öu= ¯ªªºò¬ÑÚo‹Ïçs¥§§o^YYшH¦Lðù‹ˆ ¥äX,–ˆÇãó;wî\:þüS-úñß%–G7 IEND®B`‚ifpgui-1.0.0/images/rename.png000755 001750 000144 00000001007 07556526264 014433 0ustar00000000 000000 ‰PNG  IHDRR;^jgAMA± üabKGDÿÿÿ ½§“ oFFsÿÿÿþúìm pHYs  ÒÝ~ütIMEÑé>oIDATxœ‘O(ƒaÇ¿V’Õ´¨¥ù›œ‡ÑÄm$n+õÎ…„ÒŽÂ49ÑŠÝÐ^µ\•.lvØaÌܶ¬vÒ˜^ÔŸÓËÞ?Û;>õ^¾=ßÏó{Þ #Þ¢ÀòÉó²ùòè)Ú¤«¥Á²$ò ø9†X$þ‘il;:5%o®àUÈâæöókš‰Àá½F<•„(‰œìjJ˜<0ë¹9 Ú›Õzº»àÝÛÀ‚ïNq^@‹ÑÊä¯DÈ °M­âþ‡GÒQüDxÈ[÷‡O%!äÀK4ˆV«1ߢä9ºboK<sFhÆRû“Ùš`6µKΩN ’ɼ1korïGÓ8;ÚG¥±N2EÑ D†]Ç N]:„ðø¤CºªF«Vœ‰ñQª7‰ßq)WËqœR‰È9k' `eð<¯º^5˜¼üW S+—ƒxAÉ5–B¼øßˆ|±,Ñ+=+IEND®B`‚ifpgui-1.0.0/images/file.png000755 001750 000144 00000001364 11160474142 014070 0ustar00000000 000000 ‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<qIDATxÚµ—Ao1…ßzC¥”äО{îŸ(ÿ!õ‘ªNý¥mo•Ê (ª¤BÚFT€v»3ËV&k›EéÉ"úžßØdÉŒ1°•e™@zÖÒÄÔö°ðÀ+Òëg4Áàߤ?Ä݃ê®Z¤·>—EÁŽYþëƒa›ÝlÙÏ?®<Ïñòòò€o$a #½(‹EYaNJ9wk-<óVf¸Öpu€Ñ"E%zo•F\‰”ê H¸EZ O%¡TÜ@ÆâN1 WiFô‘(y² Û7‚ÖÚ øF%\ޔĸ;Øc¨ìDöQÒ±—ĈÂðt4 Ç€XÅGn€ŠºQ§ÀS"o` ¤8œû#ΣJ?ñéä H‡'ÍÞsÚ÷ÂðØμ†ÜÊ?>-¹ë´ŒÜ=DI¸õÕ cìîEô±4´Ö¾¬ ûD”˜€v…ï÷{†òj{–o€›ŠuRç[»óªªPʲäþø>§ 1¿¸#•Aé§Y¼Z­°\.ÁÕn·Ñjµ0Nǽ^ï€? Äw,Oº}·Ûa±X Óé`³Ù`>Ÿc4ÝüÀŒTÀ+„ÇÍ0Ü7À)Ъ±ÝnÁFf³Ùê€ik¨ÂL€ÅîýSÏ#¸¾¾b8Ç~? >®×ëï6>üœ3 øâÈsçØûýþíþOÀ…hÅ ò¨8öq·Û½ðã©×Àª\)¨ƒä?"¿}„ç;ΧÝL&“/`†Ë§œÆÖɤŸ¤_¤RÀ#x{ys¸KÑÝóxýˆíLókßfþIEND®B`‚ifpgui-1.0.0/images/view_left_right.png000755 001750 000144 00000001012 10100714712 016311 0ustar00000000 000000 ‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÔ#"c&A—IDATxÚ¥’¿nAÆw>;ÈF(Q"¥²d)‚–§¢ã¨SÓð T<MB7„²ïn÷væ£Xûì&Œ´šúf¾™Ùâ髯OfG£S%§kرIY#Ô1 ã)¬ýqSß¿žŸN]M#ÚÆiÖ¢®¦uá”…ã.bçx)¼r¤áêSu2,æ'SÚÖh&°ÁºÊz\@U@)À›Öц墺x ž_€$3°”í«/5dz#fã)AìDJÂMXr.ß”T'÷àñåÃõwÍÏxx>Â]¸;fY§ä¼}WP"q—HlÀêÁ;[”ò» }÷Ø1Ëþ? Hê Ÿ#‰JAlRÛn»hå¡RžQ=ƒáÜ[_:°ƒ-Ø] í-Ñÿ¸„$ªý+ìƒÍ|“ÚÑŽ‹÷ öÁ=ÅÁ}ßâªÛUÇÇå·ü9Ì7Ã’ssÛðy¹âWs\B.\ù'þ\uÏ^¼y>…)$Rì²]Ⱦ%믲•ëoÿ–ß§Ú÷s·-½IEND®B`‚ifpgui-1.0.0/createdirdlg.h000755 001750 000144 00000005545 11312615352 014004 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include //#include //#include //#include //#include //#include /** * Dialog box that allows the user to enter a new directory name. */ class CreateDirWindow: public QDialog { Q_OBJECT public: CreateDirWindow(const QString caption = ""); ~CreateDirWindow(); /** * Use this to enter a default string for the dialog box. * @param fileName */ void setNewDirName(const QString &dirName); QString getNewDirName() const { return baseDir + dirTextBox->text(); } /** * Use this to set the base directory. * @param fileName */ void setBaseDir(const QString &value) { baseDir = value; if (baseDir.right(baseDir.length()) != "/") baseDir.append("/"); } QString getBaseDir() const { return baseDir; } Q_SIGNALS: /** * This signal is emitted when the user presses the OK button * @param QString the returned string entered by the user */ void onOkClicked(const QString &); /** * This signal is emitted when the user presses the Cancel button. */ void onCancelClicked(void); private Q_SLOTS: virtual void btnOkClicked(); virtual void btnCancelClicked(); private: QGridLayout *layout; QLabel *lblInstructions; QLineEdit *dirTextBox; QPushButton *btnCancel; QPushButton *btnOk; QString baseDir; }; ifpgui-1.0.0/moc_fileviewer.cpp000755 001750 000144 00000014374 11331146524 014706 0ustar00000000 000000 /**************************************************************************** ** Meta object code from reading C++ file 'fileviewer.h' ** ** Created: Sat Jan 30 16:22:44 2010 ** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include "fileviewer.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'fileviewer.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 61 #error "This file was generated using the moc from 4.5.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_DirectoryView[] = { // content: 2, // revision 0, // classname 0, 0, // classinfo 12, 12, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors // slots: signature, parameters, type, tag, flags 15, 14, 14, 14, 0x0a, 31, 14, 14, 14, 0x0a, 46, 14, 14, 14, 0x0a, 66, 14, 14, 14, 0x0a, 81, 14, 14, 14, 0x0a, 96, 14, 14, 14, 0x0a, 111, 14, 14, 14, 0x0a, 139, 131, 14, 14, 0x0a, 178, 173, 14, 14, 0x0a, 212, 14, 14, 14, 0x09, 225, 14, 14, 14, 0x09, 260, 251, 14, 14, 0x09, 0 // eod }; static const char qt_meta_stringdata_DirectoryView[] = { "DirectoryView\0\0setDir(QString)\0" "fvUpOneLevel()\0fvCreateDirectory()\0" "fvRenameFile()\0fvDeleteFile()\0" "fvProperties()\0fvRefreshFileItem()\0" "destDir\0fvTransferSelectedFiles(QString&)\0" "item\0setItemExpanded(QTreeWidgetItem*)\0" "openFolder()\0keyPressEvent(QKeyEvent*)\0" "item,col\0fvItemRenamed(QTreeWidgetItem*,int)\0" }; const QMetaObject DirectoryView::staticMetaObject = { { &QTreeWidget::staticMetaObject, qt_meta_stringdata_DirectoryView, qt_meta_data_DirectoryView, 0 } }; const QMetaObject *DirectoryView::metaObject() const { return &staticMetaObject; } void *DirectoryView::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_DirectoryView)) return static_cast(const_cast< DirectoryView*>(this)); return QTreeWidget::qt_metacast(_clname); } int DirectoryView::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTreeWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: setDir((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 1: fvUpOneLevel(); break; case 2: fvCreateDirectory(); break; case 3: fvRenameFile(); break; case 4: fvDeleteFile(); break; case 5: fvProperties(); break; case 6: fvRefreshFileItem(); break; case 7: fvTransferSelectedFiles((*reinterpret_cast< QString(*)>(_a[1]))); break; case 8: setItemExpanded((*reinterpret_cast< QTreeWidgetItem*(*)>(_a[1]))); break; case 9: openFolder(); break; case 10: keyPressEvent((*reinterpret_cast< QKeyEvent*(*)>(_a[1]))); break; case 11: fvItemRenamed((*reinterpret_cast< QTreeWidgetItem*(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; default: ; } _id -= 12; } return _id; } static const uint qt_meta_data_fileManagerView[] = { // content: 2, // revision 0, // classname 0, 0, // classinfo 13, 12, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors // slots: signature, parameters, type, tag, flags 17, 16, 16, 16, 0x0a, 33, 16, 16, 16, 0x0a, 53, 16, 16, 16, 0x0a, 68, 16, 16, 16, 0x0a, 83, 16, 16, 16, 0x0a, 111, 103, 16, 16, 0x0a, 176, 149, 145, 16, 0x0a, 221, 16, 16, 16, 0x09, 239, 16, 16, 16, 0x09, 254, 16, 16, 16, 0x09, 277, 16, 16, 16, 0x09, 295, 16, 16, 16, 0x09, 309, 16, 16, 16, 0x09, 0 // eod }; static const char qt_meta_stringdata_fileManagerView[] = { "fileManagerView\0\0setDir(QString)\0" "fmCreateDirectory()\0fmRenameFile()\0" "fmDeleteFile()\0fmRefreshFileItem()\0" "destDir\0fmTransferSelectedFiles(QString&)\0" "int\0destination,file_info_list\0" "fmUploadFileList(QString&,QList*)\0" "upOneLevelClick()\0refreshClick()\0" "createDirectoryClick()\0propertiesClick()\0" "renameClick()\0deleteClick()\0" }; const QMetaObject fileManagerView::staticMetaObject = { { &QWidget::staticMetaObject, qt_meta_stringdata_fileManagerView, qt_meta_data_fileManagerView, 0 } }; const QMetaObject *fileManagerView::metaObject() const { return &staticMetaObject; } void *fileManagerView::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_fileManagerView)) return static_cast(const_cast< fileManagerView*>(this)); return QWidget::qt_metacast(_clname); } int fileManagerView::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: setDir((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 1: fmCreateDirectory(); break; case 2: fmRenameFile(); break; case 3: fmDeleteFile(); break; case 4: fmRefreshFileItem(); break; case 5: fmTransferSelectedFiles((*reinterpret_cast< QString(*)>(_a[1]))); break; case 6: { int _r = fmUploadFileList((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QList*(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; case 7: upOneLevelClick(); break; case 8: refreshClick(); break; case 9: createDirectoryClick(); break; case 10: propertiesClick(); break; case 11: renameClick(); break; case 12: deleteClick(); break; default: ; } _id -= 13; } return _id; } QT_END_MOC_NAMESPACE ifpgui-1.0.0/qrc_ifpgui.cpp000644 001750 000144 00000666677 11403075517 014062 0ustar00000000 000000 /**************************************************************************** ** Resource object code ** ** Created: ** by: The Resource Compiler for Qt version 4.6.2 ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include static const unsigned char qt_resource_data[] = { // /home/family/Development/ifpgui/images/battery3.png 0x0,0x0,0x9,0x35, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x47,0x0,0x46,0x0,0x46,0xf8,0x38, 0x2a,0xf1,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0xb,0x13,0x3,0x22,0xc,0xdc,0x45,0x89,0xab,0x0,0x0,0x8,0xc2,0x49,0x44, 0x41,0x54,0x78,0xda,0x8d,0x97,0xcb,0x8b,0x1c,0xd7,0x15,0x87,0xbf,0x5b,0x75,0xbb, 0xab,0xaa,0x1f,0xd3,0xdd,0xd3,0x33,0xa3,0xe7,0x48,0xb2,0x1d,0x63,0x29,0x52,0x1c, 0x2b,0x32,0x96,0x1f,0x24,0x60,0x7,0xb2,0x8,0x1,0x9b,0xec,0x6c,0xb2,0x88,0x97, 0xd9,0x5,0xb2,0xcd,0x22,0x7f,0x41,0x2,0xce,0x26,0x90,0x45,0x48,0x70,0x20,0x26, 0x5e,0x25,0x60,0x88,0xc1,0x8,0x2,0x7e,0x9,0x47,0x8e,0x2d,0xd9,0x23,0x3f,0x50, 0x24,0xcd,0x78,0x3c,0x8f,0x9e,0xe9,0xee,0x7a,0x75,0xbd,0xee,0x3d,0x59,0x74,0x6b, 0x2c,0x59,0x92,0xed,0x3,0x17,0xaa,0x8a,0xaa,0x3a,0xdf,0x3d,0xe7,0xfe,0xee,0x39, 0x57,0x31,0xb3,0xea,0x37,0x38,0x80,0x98,0xf6,0xa2,0xb2,0xc1,0x5c,0xad,0x6c,0x1f, 0x91,0xaa,0xb5,0x6c,0x12,0xd5,0x6d,0x27,0xaa,0x93,0x14,0x49,0x64,0x8b,0x34,0x5c, 0x34,0xe9,0xee,0xa2,0x49,0x86,0x1f,0xd4,0xb3,0x5d,0x5b,0xcf,0x76,0x54,0xbd,0x98, 0xd4,0x5b,0xc9,0xb0,0x96,0x94,0x14,0xf,0xfc,0x89,0x12,0x50,0x80,0xcc,0xc6,0xd7, 0x9a,0xbe,0xe9,0xfa,0x27,0xc0,0xd3,0xc0,0x29,0xe0,0x1e,0x60,0xb,0xc8,0x0,0x33, 0x7b,0xaf,0xe,0x2c,0x2,0xfd,0xd9,0x7d,0x3c,0x1b,0x6f,0x2,0x6f,0x1,0x7f,0x3, 0x56,0x1,0x3b,0x83,0xf8,0x46,0xa6,0xcd,0xef,0xfa,0x1a,0xf8,0x99,0x3d,0xf8,0xc4, 0x59,0x69,0x1f,0x3e,0x4d,0x63,0x71,0x49,0xf9,0xbd,0xae,0x53,0x6b,0xf5,0x1d,0xdd, 0x72,0x24,0x83,0x2a,0x13,0x12,0x86,0x84,0xe5,0x2e,0x13,0xa7,0x47,0x2a,0x43,0x4a, 0xb3,0x58,0x2f,0x8b,0x51,0x2b,0xb0,0xd9,0x89,0xa6,0x97,0xb6,0x9a,0x6a,0x34,0xff, 0xfe,0x73,0x57,0x7e,0x1f,0x17,0xac,0x3f,0xfe,0x32,0xce,0xc1,0xfd,0x3c,0xa1,0x14, 0x8f,0xf7,0x7b,0x30,0xdf,0xbd,0xdd,0xf1,0xee,0x8,0x76,0x86,0xd3,0x99,0x68,0xe0, 0xe7,0xd2,0x39,0x7c,0xcc,0x1e,0x7d,0xf2,0x28,0xbd,0x7,0x50,0xbd,0x7,0x70,0x8c, 0xc1,0x35,0x6,0x86,0x43,0xcc,0x70,0x48,0x52,0x6e,0xb3,0x93,0x6c,0x31,0x72,0x46, 0x8c,0x18,0x11,0x56,0x61,0x3d,0x2a,0xa2,0xfa,0x3e,0x77,0x78,0x7c,0xc9,0x1d,0x1e, 0x3f,0xe8,0x14,0xfb,0x7d,0x97,0x4e,0xa5,0xf9,0x25,0x50,0x2,0x3f,0x0,0x7e,0xf5, 0x75,0xd1,0xd0,0xb2,0xf4,0x9d,0x2,0x38,0xaa,0xe6,0xef,0xef,0x38,0xfd,0x13,0x88, 0x37,0x8f,0x88,0x60,0xad,0xc5,0x18,0x3,0x80,0xeb,0xba,0x38,0x8e,0x83,0x52,0xa, 0x6b,0x2d,0x55,0x55,0x91,0x65,0x19,0x51,0x14,0xe1,0xd4,0xa0,0xac,0xb7,0x71,0xcd, 0xdc,0xd2,0x9c,0xde,0x7f,0x7c,0x6c,0x6c,0x1f,0xb6,0x36,0x97,0x16,0xf0,0xb5,0x8b, 0xdf,0xdf,0xf7,0x23,0xff,0x4e,0x8e,0xf,0xb4,0xa0,0x5e,0x7b,0x35,0xd7,0xf4,0xee, 0x75,0x81,0xa3,0x4e,0xf7,0x1e,0xe8,0x9f,0xc0,0x18,0x83,0xa9,0xaa,0x5b,0x0,0xb4, 0xd6,0xb7,0x0,0x94,0x65,0x49,0x9a,0xa6,0x84,0x61,0x48,0x19,0x4,0x24,0xd2,0xa2, 0xa9,0x9a,0x4b,0xb,0x6e,0x57,0x46,0xaa,0x52,0xb0,0xc5,0x42,0xf,0xdf,0xab,0xe3, 0x57,0x5f,0x31,0xfb,0x7d,0xb,0x78,0xda,0x96,0xd5,0x34,0x44,0x95,0x51,0xca,0x5a, 0xf2,0x3c,0x27,0xcb,0x32,0xb6,0xb7,0xb7,0xd9,0xde,0xde,0x26,0x49,0x12,0xd2,0x34, 0xdd,0x1b,0x51,0x14,0x11,0xc7,0x31,0x45,0x51,0x60,0xad,0xc5,0xf7,0x7d,0xe6,0xe7, 0xe7,0xe9,0x57,0xbb,0xf4,0x2b,0x77,0x9f,0x18,0x3b,0xf,0xac,0x6f,0x6c,0xf1,0x5e, 0xbd,0xce,0xb9,0xc5,0x3,0x3c,0x79,0x37,0x80,0xf5,0x4d,0x5e,0xd7,0xb6,0x34,0xf3, 0x80,0xa2,0x32,0xdc,0x0,0x48,0x92,0x84,0xb5,0xb5,0x35,0x3e,0xf9,0xe4,0x93,0x3d, 0x0,0xad,0x35,0xb5,0x5a,0x8d,0x30,0xc,0x89,0xe3,0x98,0x2c,0xcb,0xb0,0xd6,0x12, 0x4,0x1,0xfd,0x7e,0x9f,0xfe,0x64,0x5d,0xf5,0x53,0x97,0xbc,0x30,0xd7,0x0,0x2e, 0x7d,0xc4,0x0,0x78,0x91,0x8b,0xaf,0xbe,0x3c,0x53,0x53,0x5,0xec,0x3,0x46,0x40, 0x31,0x5b,0x7b,0xf7,0xeb,0x6a,0x70,0x39,0x4,0x44,0x2f,0x9f,0xc1,0x71,0x46,0x68, 0xd7,0x28,0xad,0x35,0xcd,0x66,0x93,0x5e,0xaf,0x87,0x88,0x90,0x65,0x19,0x79,0x9e, 0x13,0xc7,0x31,0x55,0x55,0xed,0x39,0xd,0x82,0x80,0xe5,0x26,0x1c,0x6e,0x15,0xd2, 0x4d,0x42,0x55,0x1b,0x6c,0xe2,0xc6,0x6,0xc0,0xe9,0x34,0x39,0xe4,0x3a,0x9c,0x6c, 0x6,0x34,0x5a,0x1,0x11,0x30,0x11,0x38,0x32,0x93,0xf7,0x28,0x99,0x30,0x8e,0x27, 0x3c,0xac,0xab,0xed,0x95,0xc,0xc0,0x9d,0xac,0xe2,0x3a,0x43,0x5c,0xd7,0x17,0xad, 0x7d,0xd5,0x68,0x34,0xe8,0x76,0xbb,0x64,0x59,0xc6,0x78,0x3c,0x26,0x8e,0x63,0x46, 0xa3,0x11,0xbe,0xef,0x13,0x4,0x1,0x47,0x8e,0x1c,0xe1,0xd8,0xb1,0x63,0x1c,0x2e, 0xae,0xcb,0xe1,0xfc,0x3a,0xd9,0xea,0x58,0xb2,0x9d,0x4d,0xe5,0xa6,0x8,0xe0,0xfa, 0x75,0x1e,0xd0,0x2e,0xcf,0x77,0x5b,0x30,0x3f,0x77,0xbb,0x12,0x76,0x5d,0xb0,0x16, 0xb4,0x2d,0x4b,0x1,0x30,0xe9,0xf9,0x89,0x49,0xdd,0xcc,0x95,0x33,0x41,0xc3,0xfb, 0xae,0xbf,0x6f,0xa1,0xa2,0xe9,0x5,0xec,0xef,0x37,0xb8,0xef,0x48,0x9b,0x3c,0x74, 0xc9,0x22,0x1f,0x9d,0xe7,0xe8,0x2c,0xa3,0x5b,0x7d,0x40,0xe7,0xd3,0xf7,0x64,0x6e, 0xb2,0x2d,0xde,0x64,0x40,0xb9,0x75,0x5d,0x59,0x83,0xb2,0x86,0x3a,0x30,0x59,0xea, 0xa2,0xbd,0x3a,0xfe,0xd9,0x47,0xe7,0xbc,0x47,0x4e,0xb7,0x6f,0xcb,0xff,0xdb,0xef, 0x46,0x9c,0x7f,0x2b,0xcc,0xb5,0x29,0x4a,0x17,0x10,0x93,0xbe,0x3e,0xa9,0xe2,0xd7, 0x47,0x3a,0xf8,0x85,0x78,0xfe,0xb2,0xd7,0xf4,0x1d,0xf6,0x2f,0x4,0x60,0x9b,0xa, 0xdb,0x86,0x24,0x80,0xb8,0x3,0x9b,0x1b,0xb0,0x39,0x14,0xae,0x5e,0x16,0xb9,0x7a, 0x59,0x88,0x13,0x21,0x4e,0x24,0xcd,0x70,0x6d,0x5,0x62,0x70,0x1,0x59,0xe8,0xe2, 0x36,0x3c,0xbc,0xc7,0xce,0xb4,0x78,0xee,0x99,0x83,0xb7,0x1,0xb8,0xce,0x67,0x5c, 0xfb,0x28,0xf4,0xb4,0x31,0x78,0x30,0xd,0x7,0x0,0x92,0x81,0x8c,0x2d,0x92,0x83, 0x2d,0xa0,0xba,0xa6,0x28,0xaf,0x29,0x12,0xf,0xa2,0xba,0x62,0xf3,0x8a,0xe5,0xca, 0x15,0x91,0xc1,0x40,0x48,0x13,0x28,0xcb,0xe9,0x67,0xd3,0xad,0x3,0x6b,0x49,0x0, 0xd9,0xdc,0xe5,0xaa,0xef,0x71,0xee,0xfc,0x3b,0xd9,0x69,0x6d,0x77,0x11,0x41,0x89, 0xfd,0x22,0x15,0x6f,0xbe,0x3b,0x61,0x7d,0x87,0x8b,0xda,0x1a,0x1c,0x0,0xd9,0x3, 0x98,0x58,0x64,0x6c,0x31,0x23,0xc4,0x8c,0x21,0x5f,0x51,0xe4,0x2b,0x8e,0x8a,0x7b, 0x10,0xf5,0x60,0x63,0x45,0xe4,0xca,0x25,0x4b,0x36,0x5b,0xdb,0x7b,0xdf,0x21,0xd6, 0x62,0xac,0xc5,0x5,0xf8,0xf0,0x1a,0x57,0x81,0xbf,0x5e,0xf8,0x78,0xf7,0xd7,0x2f, 0xfc,0x65,0xf7,0x14,0xe0,0x2,0xb,0xc0,0x2e,0x30,0xf,0x34,0x1,0xb4,0xad,0x98, 0xdc,0x2,0x70,0xc3,0x9c,0xb6,0x82,0x86,0xc2,0x6b,0x28,0xa5,0xbf,0xe5,0xb0,0xbb, 0x62,0x19,0xad,0x88,0x64,0x83,0x3b,0x56,0x39,0x11,0x8c,0x18,0xec,0xc,0xc0,0xed, 0x4,0x1c,0x76,0x1d,0xee,0x69,0x7a,0x3c,0xd8,0xf2,0x67,0x93,0x84,0x4d,0xe0,0x4, 0xb0,0x91,0x64,0x3c,0x1c,0x67,0xa0,0x4d,0x85,0x3,0x54,0xf6,0xcb,0x0,0xaa,0xa5, 0x70,0x3,0x47,0xe9,0xfb,0x14,0xaa,0xa9,0x30,0x5b,0xc8,0xf0,0xb2,0x65,0x52,0xdd, 0xb1,0xd0,0x8a,0xc5,0x5a,0x43,0x21,0x6,0x5,0x18,0xbf,0x46,0x4f,0x3b,0x3c,0xdf, 0x6d,0xc0,0x7c,0xeb,0xe,0x2a,0x70,0x66,0x2a,0x30,0x6,0x3,0xec,0x88,0x50,0x9f, 0x3a,0xe,0x1c,0x54,0xd7,0xc1,0xe9,0x28,0xa5,0x3a,0x8a,0x62,0x15,0x8a,0x15,0xa1, 0x58,0x3,0x53,0x81,0xb5,0x72,0xa7,0x6a,0x2f,0x32,0xfd,0xe1,0x8d,0x35,0xb0,0xd4, 0xa6,0xe3,0xb9,0xf8,0x67,0x9f,0x6c,0x7b,0x8f,0x3c,0x74,0x7,0x15,0xfc,0x37,0xe2, 0xfc,0xb9,0x28,0xd7,0xd6,0x60,0x81,0x6d,0xb1,0x1c,0x9a,0x2,0xf8,0xa0,0x3a,0x8e, 0x72,0x96,0x14,0xee,0xa2,0x62,0xb2,0x22,0xa4,0xef,0x8,0xf9,0xaa,0x60,0x2a,0xb9, 0x5b,0x9b,0x21,0x2,0xc6,0x82,0x15,0x16,0x80,0xc1,0x62,0xb,0x1d,0xd4,0xf0,0x1e, 0x3b,0xd3,0xe6,0xb9,0x67,0xe,0xdd,0xae,0x2,0xf7,0x33,0xae,0xfd,0x27,0xf2,0x74, 0x62,0x3b,0xe,0xa0,0xb4,0x34,0xea,0x5e,0xd5,0xc,0x3c,0x39,0x54,0xd7,0xee,0x92, 0xc2,0x69,0x4c,0xdf,0xac,0x1d,0x84,0xc6,0x19,0x45,0x2b,0x51,0xb4,0xb7,0x14,0x3b, 0x63,0x20,0xdc,0xc3,0x58,0xcf,0x1d,0xb5,0x9e,0xb9,0xca,0xa4,0xc6,0xa9,0x32,0xeb, 0xa4,0x5,0x11,0xa0,0x37,0x42,0xfe,0xe7,0xd7,0x38,0x77,0xfe,0x7c,0x7c,0x5a,0x97, 0x1b,0x53,0x15,0xc8,0xcd,0x2a,0x88,0x59,0x1f,0x73,0x51,0x27,0xd2,0x59,0x6,0x96, 0xea,0xb6,0xaf,0x1b,0x66,0x21,0xd0,0x1c,0xd0,0xb8,0x8b,0x5f,0xe4,0xac,0x76,0x40, 0xe1,0x78,0xd0,0xdc,0x72,0x68,0x5f,0x81,0x3a,0x16,0x9,0xf7,0x52,0xb0,0x5e,0xb8, 0xea,0x9d,0x48,0x3b,0xbd,0x14,0xa7,0x97,0x59,0x27,0x2d,0xa7,0x5d,0xd6,0x87,0x9f, 0xf3,0x3f,0xe0,0x5f,0x17,0x5e,0xc,0xff,0xf1,0xc2,0x8b,0x61,0xa,0x1c,0x5,0xd6, 0x6f,0xa,0xc2,0x32,0x80,0xce,0x6a,0xfd,0x63,0x40,0x2b,0x91,0x53,0x35,0x37,0x7d, 0x10,0xe5,0x1f,0xa9,0xf9,0xa6,0x0,0xe5,0xe2,0x28,0x17,0xa1,0x6,0xaa,0xc1,0x44, 0x7a,0xa4,0xe6,0x80,0x4a,0xab,0xd4,0x49,0xcb,0x91,0x6c,0x26,0x8e,0xda,0x8a,0x1d, 0x2e,0x87,0x8e,0xfa,0x28,0x54,0xea,0x54,0x95,0x32,0x57,0x95,0x58,0xc3,0x1c,0xb0, 0xd1,0xf1,0x59,0x76,0x15,0xc7,0x9a,0x1e,0x17,0x5a,0x75,0x1e,0x4,0x36,0x64,0xaa, 0x0,0x0,0x92,0x9c,0xe3,0x71,0x1,0x3a,0xab,0xf7,0x3f,0x5,0x36,0x5d,0x39,0x79, 0x2f,0xe9,0x93,0xda,0x6f,0xb5,0x98,0x33,0x5,0x8e,0x5b,0x47,0x94,0x9e,0x2,0xd0, 0x20,0x95,0x1e,0xbb,0x66,0xbf,0x1a,0x54,0x23,0xb5,0x5d,0x6e,0xc9,0xa5,0xa4,0xa6, 0x2e,0xd,0xb5,0x5a,0x8b,0x2d,0x6b,0x91,0xd0,0x52,0x15,0x27,0x55,0x8a,0x31,0xb4, 0x81,0x35,0x5f,0xb3,0xac,0x1d,0x9e,0xed,0xfa,0x3c,0x3b,0xdf,0x40,0x1,0x83,0xd9, 0x3e,0xf0,0x85,0xa,0x4,0xb4,0xb5,0x6c,0x2,0xa1,0xec,0x65,0xb5,0x86,0xa8,0x6, 0x22,0x2e,0xc6,0xba,0x8c,0x47,0x39,0xe3,0xd1,0x2e,0xeb,0xab,0xa5,0x5a,0x5f,0xf3, 0x64,0x30,0xec,0x31,0x28,0xe,0xab,0xeb,0x65,0xc1,0x4e,0x55,0x90,0xda,0x12,0x28, 0x11,0xb,0x46,0xc0,0x1a,0x22,0x40,0x2d,0x35,0xd1,0x9e,0xc6,0x3f,0xfb,0xc3,0x3d, 0x15,0xcc,0xdd,0xa6,0x82,0xd7,0xa2,0x5c,0x8b,0x65,0xe,0x8,0xb8,0x9,0x0,0x1a, 0xd8,0x99,0xd4,0x86,0xa3,0x9c,0xeb,0xd7,0x77,0xb9,0xb2,0x5a,0x70,0xe5,0x33,0x4f, 0xd,0x86,0x3d,0x76,0xa,0xcb,0xb0,0x1c,0x32,0xaa,0x46,0x64,0x56,0xa6,0x0,0x53, 0xe7,0x3,0x33,0x3,0x58,0x68,0xa2,0x1b,0x35,0xbc,0xc7,0x1e,0xbe,0x8b,0xa,0xf4, 0x67,0x5c,0x7b,0x3b,0xf2,0xb4,0x58,0x2,0xe0,0x90,0x7c,0x49,0x5e,0x37,0x3a,0xa3, 0x30,0xc,0x9,0xc3,0x90,0x3c,0xcf,0xbf,0xb2,0xbd,0xb6,0x16,0x8c,0x61,0xc1,0x1a, 0x8e,0x2,0xef,0x6f,0xc6,0xac,0xf8,0x9a,0x73,0xe7,0x5f,0x8f,0x4f,0xeb,0xf8,0xf3, 0xdb,0x55,0xf0,0x7e,0xc4,0x7a,0xc8,0x45,0x6d,0x2d,0x43,0xa0,0x79,0x33,0x80,0x52, 0x8a,0x3c,0xcf,0x19,0x8f,0xc7,0x84,0x61,0x48,0x14,0x45,0x5f,0xb,0x20,0x2,0x66, 0x1a,0x81,0xd,0x80,0xf,0xb7,0xd8,0x0,0x5e,0xbd,0xf0,0x52,0xf8,0xe7,0x17,0x5e, 0xa,0x6f,0x34,0xe6,0xfd,0xd9,0xd9,0x61,0x1b,0x58,0x2,0xee,0xd5,0xce,0x70,0xf0, 0x30,0xa0,0x54,0x96,0xce,0x7e,0x24,0x18,0x63,0x28,0x8a,0x82,0x3c,0xcf,0xa9,0xaa, 0xea,0x2b,0x1d,0xbb,0x62,0xf1,0xc4,0xe2,0x58,0xc1,0x18,0x16,0x8c,0x25,0x4,0x9c, 0x4e,0x9d,0x65,0x57,0xf1,0x48,0xb3,0xc6,0x27,0x2d,0xcd,0x12,0x50,0x9,0x1c,0x0, 0x2,0xa0,0x91,0x54,0x1c,0x8d,0x4b,0x1e,0xd4,0x6a,0xb8,0x73,0x1,0x40,0x4d,0x6e, 0x5,0xa8,0xaa,0xea,0x1b,0x1,0x68,0x99,0x42,0xb8,0x53,0x0,0x66,0xc5,0x48,0x7c, 0xcd,0x61,0xad,0x78,0xaa,0x5b,0xe7,0xa9,0x79,0xef,0x96,0x5a,0xf0,0x7d,0x80,0xdd, 0x7c,0xa6,0x2,0x19,0x45,0x11,0x30,0x2c,0x3f,0xfe,0xc0,0xcf,0xea,0xff,0xc,0xf2, 0x93,0xf,0x51,0x7e,0xfb,0x34,0x66,0x6,0x74,0x37,0xb,0x6c,0x5,0xc5,0x84,0x4e, 0x91,0xd0,0xc9,0x22,0x7a,0x55,0x31,0x98,0x58,0xd6,0x92,0x29,0x80,0x5a,0xf2,0xd1, 0x9e,0x83,0xff,0xc8,0x8f,0xdb,0xde,0xd9,0xbb,0xd5,0x82,0x57,0xa2,0x5c,0xcb,0xce, 0xa8,0xd,0xc,0xab,0x95,0xf7,0x7b,0xd9,0xce,0x66,0x90,0xbb,0x50,0x1c,0x5c,0x66, 0x76,0x24,0xb8,0xab,0xf9,0x55,0x85,0x5f,0x4c,0x38,0x9a,0x25,0x1c,0xc9,0x62,0xac, 0x95,0xad,0xb1,0xe5,0xb5,0x91,0x25,0x5,0xcc,0xa2,0x8f,0x13,0xb8,0x78,0x8f,0x7f, 0x95,0xa,0xce,0x45,0x9e,0xce,0x85,0x0,0xf8,0xad,0x9d,0xe4,0x8f,0x16,0x5b,0x83, 0x87,0xb6,0xdf,0x7e,0x73,0x21,0x5d,0xdb,0x58,0xcc,0x1d,0x57,0xe5,0xca,0x75,0xb2, 0x2c,0x47,0x65,0x19,0x7e,0x14,0xd3,0x89,0x62,0xea,0xe3,0x90,0xf9,0x30,0x44,0xe2, 0xa8,0x94,0x28,0x2a,0xbd,0x32,0x5f,0x9d,0x58,0x59,0xcd,0x84,0x57,0x46,0x96,0x3f, 0x7e,0x2e,0x14,0x80,0xbf,0x35,0xe1,0x53,0xcf,0xe5,0xb5,0x37,0xff,0x1d,0x9f,0xb1, 0xc3,0xcf,0xe1,0xcb,0x2a,0xb8,0x14,0xb1,0x9e,0x72,0xf1,0xc6,0x83,0xfa,0x1f,0x16, 0xf9,0xa9,0xaf,0x78,0x5a,0xb,0x27,0x5c,0xe1,0xb8,0xf2,0x3c,0xad,0x3c,0xcf,0x35, 0x75,0x8f,0xaa,0xe6,0x51,0x94,0x15,0x45,0x61,0x70,0xd2,0x9,0x4e,0x9a,0x82,0x95, 0x54,0x8c,0xa4,0x91,0xf0,0xc6,0xba,0xe5,0x8d,0x55,0xcb,0x5b,0x7f,0xaf,0xf8,0x14, 0x70,0x66,0x7d,0xff,0x69,0xe0,0x7b,0x7c,0x71,0xfe,0x74,0x67,0xe3,0x16,0xfb,0x3f, 0xc8,0x23,0xf9,0xa5,0x5f,0x1d,0x6e,0xb7,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, 0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/multimedia.png 0x0,0x0,0x12,0x2f, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x30,0x0,0x0,0x0,0x32,0x8,0x6,0x0,0x0,0x0,0x1a,0xca,0x58,0x8c, 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,0x0, 0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd0,0x4,0x17,0x7,0x10,0x25,0xe2,0x2d,0xaf,0xfa,0x0,0x0,0x11,0xac,0x49,0x44, 0x41,0x54,0x78,0xda,0xed,0x9a,0x79,0x94,0x1d,0x55,0x9d,0xc7,0x3f,0xf7,0xde,0xaa, 0x57,0x6f,0x7f,0xbd,0x64,0xeb,0xec,0x21,0x9,0x21,0x10,0x8,0x31,0x1,0x4,0x44, 0x20,0x91,0x9,0x22,0x44,0x24,0xe8,0xa0,0xe,0x8b,0x31,0x70,0x74,0x8e,0x4e,0x82, 0xa8,0xa3,0xa3,0x8e,0x23,0x28,0x33,0x8e,0x83,0x6,0xb7,0x41,0x9,0x23,0x83,0xc8, 0x66,0x8,0x5b,0x64,0x19,0x42,0x58,0x43,0x58,0xb2,0x90,0xbd,0xd3,0xe9,0x4e,0xd2, 0x7b,0xbf,0x7e,0x4b,0xf7,0xdb,0xb7,0xaa,0xba,0xf3,0x47,0x57,0x63,0x13,0x93,0x90, 0x3,0x8e,0x67,0xfe,0xf0,0x9e,0x73,0x4f,0x55,0x57,0xdf,0x57,0xf5,0xfd,0xdd,0xdf, 0xef,0xf7,0xbd,0xdf,0xfb,0xab,0x12,0xbc,0x87,0xf6,0xec,0x2d,0xd7,0x8,0x57,0x6b, 0x1,0x8,0x2d,0x5c,0x61,0xf9,0xaa,0xbe,0x6a,0xc5,0x5f,0x96,0x8,0x10,0x68,0x80, 0x8b,0xbe,0x73,0x8f,0xe6,0xaf,0xed,0xaf,0xed,0xfd,0xb5,0xa7,0x6f,0xb9,0x5a,0xfc, 0x5f,0x3f,0xe3,0xa8,0xf,0x58,0xbd,0xf2,0x4a,0xb9,0x7c,0xd5,0x1a,0x17,0x60,0xf5, 0x8a,0xa5,0x52,0xc3,0x64,0x40,0x3,0x59,0xa0,0xe2,0x9d,0xbb,0xbd,0xb9,0x8a,0xfb, 0xcb,0x75,0xaf,0xcd,0x31,0xd,0x95,0xeb,0xec,0x89,0xb7,0x1e,0xed,0x7e,0xcf,0xdc, 0x7c,0x8d,0xb9,0xf8,0x9f,0xef,0xa9,0xfd,0x45,0xc,0x18,0x9,0x7e,0xb8,0xad,0xfc, 0xea,0xb2,0x1b,0x9b,0x26,0x4e,0xbd,0xd5,0x34,0xd,0x55,0x2c,0xe5,0xb5,0x61,0x48, 0xe,0x1d,0xec,0x60,0x5f,0xf3,0x1,0x25,0x84,0x14,0xd1,0xa0,0xa9,0x2f,0x99,0x5c, 0x67,0xde,0xb0,0xea,0xe1,0xbf,0x68,0xf2,0x1a,0x47,0xba,0x78,0x38,0x78,0x0,0x5d, 0xc8,0x3f,0xbe,0xef,0x40,0xeb,0x8f,0x93,0xc9,0x24,0xf1,0x9e,0x4,0xb9,0xc1,0x1c, 0x4e,0xcd,0x26,0x18,0xf4,0xeb,0x86,0x86,0x7a,0x6d,0x99,0x52,0xd,0x39,0xe5,0x2f, 0xdb,0x8c,0xe3,0x1d,0x18,0xab,0x96,0xe,0x36,0xf7,0xd,0xb8,0x61,0x9f,0x4a,0x9d, 0x31,0x7f,0x76,0x45,0x6,0x7c,0x41,0x21,0x85,0x4c,0x75,0x27,0x4b,0xed,0x7,0xfb, 0x1a,0xb3,0xf9,0xb2,0xef,0xbb,0xf7,0x6d,0xd,0x1,0xf9,0x63,0xd1,0xef,0x9f,0x9b, 0x5e,0x8f,0xdb,0x80,0x9b,0xef,0x7a,0xc2,0xfd,0xc8,0xa5,0xb,0xdb,0xa2,0xd3,0xc6, 0xcd,0x6c,0xde,0xdf,0xe5,0x14,0xf3,0x45,0x51,0x29,0x57,0x5c,0xcb,0x67,0x85,0x1c, 0xc7,0x11,0x7,0xbb,0x7a,0xa9,0xda,0xce,0x74,0x60,0xfb,0xff,0x4b,0xf,0x0,0xb8, 0x35,0xe7,0xbf,0x5c,0xc7,0xb9,0xd5,0xee,0xe8,0x5c,0xd5,0x1d,0x1f,0x7c,0x39,0x53, 0xac,0xee,0x76,0xb5,0xce,0x9d,0xf7,0xc1,0xd3,0x1e,0x48,0xc2,0x5,0x7e,0xd3,0xf8, 0x2,0xf0,0xc5,0xe3,0xb9,0xd7,0xa6,0x37,0x77,0x8c,0xee,0xec,0x89,0xff,0x6d,0xc0, 0x67,0x7e,0x46,0x8,0x7c,0x8,0xb9,0xa7,0xa1,0x3e,0xba,0xc1,0xf2,0xa9,0x7,0xe7, 0x9f,0x7e,0x6a,0xe9,0x78,0x31,0xc9,0xc3,0x92,0xf7,0x98,0xb4,0x37,0xca,0x52,0xeb, 0x8b,0xf9,0xa2,0x58,0xf4,0xe1,0x79,0xb7,0xb7,0xf7,0x26,0x1e,0x1b,0xcc,0x64,0x5a, 0xb3,0xd9,0x6c,0x7c,0x6e,0x53,0x74,0x49,0xa4,0x2e,0x46,0x28,0xe8,0xbf,0xe4,0x18, 0xe1,0x63,0x0,0xf4,0xc6,0x93,0xb1,0x27,0xd7,0x6f,0xbc,0x63,0xd3,0x96,0x9d,0xdd, 0xbd,0xf1,0xd4,0xcf,0xfa,0x53,0x99,0xb3,0x8b,0x65,0x7b,0xbe,0xed,0xea,0xab,0xf7, 0x1d,0xe8,0xfa,0xcd,0xcb,0xaf,0xef,0x68,0xbe,0x7f,0xcd,0xba,0xa5,0xef,0x9b,0x46, 0x87,0xdb,0xa5,0x17,0x9e,0x29,0xc7,0xcc,0x39,0x39,0xd8,0xd4,0x34,0x6e,0xd6,0x5b, 0x3b,0xb6,0xff,0x42,0x4a,0xce,0xa,0x68,0xae,0x7d,0xe8,0xfe,0xa7,0xee,0x19,0x1e, 0x73,0xc7,0x3f,0x5c,0x61,0xdd,0xbf,0x37,0x91,0xeb,0xeb,0xec,0x12,0x37,0x2d,0xfe, 0x80,0xef,0x86,0xdb,0xdf,0xc9,0x44,0xcf,0xdc,0x7c,0xb5,0x90,0x8,0x7f,0x7e,0xfe, 0x75,0xe7,0x76,0x74,0xf7,0xdf,0x7d,0xa8,0xa3,0x7b,0x42,0x5b,0xdb,0x1,0xfa,0xfb, 0xfb,0xa9,0x56,0x2a,0x44,0x63,0x75,0xcc,0x3a,0x71,0x26,0x9f,0xb8,0xec,0x23,0xc4, 0xa2,0x51,0x5e,0xdc,0xb8,0x19,0x53,0xf1,0xfb,0xdf,0xde,0xf5,0xd3,0x6b,0xde,0xda, 0xb6,0xa5,0xfc,0xbe,0x42,0x28,0x51,0x72,0xea,0x96,0x2d,0xfe,0x78,0x7c,0xea,0xd4, 0x49,0xc6,0x9b,0x5b,0xb7,0x20,0xd1,0x24,0x13,0x99,0x46,0x80,0x5f,0xaf,0x5c,0xda, 0xf8,0x66,0xa1,0x76,0xef,0xab,0x65,0x39,0x25,0x10,0x9,0x28,0xc3,0xb2,0x64,0x67, 0xd9,0x9,0x2,0x5,0x6f,0x21,0x93,0x17,0x7f,0xe7,0xb7,0x2e,0x30,0xba,0x77,0xfa, 0xe5,0xcb,0xdb,0x9b,0xf,0xde,0x7c,0xe8,0x50,0xbb,0x7a,0xf9,0xc5,0x17,0x29,0x15, 0x73,0x20,0x25,0xae,0x96,0xf4,0xf6,0xf5,0xb3,0x77,0xcf,0x1e,0x9e,0x7f,0xfe,0x5, 0xbe,0xf1,0x8f,0x2b,0xb9,0xe2,0xb2,0x45,0xac,0x79,0xe2,0xb9,0x4f,0x9e,0xbb,0xe8, 0xe3,0xf1,0xb7,0xb6,0x6d,0xf9,0xf2,0xb1,0xf0,0x29,0x2f,0x74,0x8c,0x4b,0xcf,0x9a, 0x2d,0x53,0xa6,0x7f,0xe1,0x85,0x97,0x9f,0x77,0xf3,0xdc,0xd3,0x4f,0x3c,0xf0,0xe5, 0xf3,0xe6,0xf4,0x3f,0xfe,0xda,0x1e,0xbd,0xf4,0x9c,0x39,0xe5,0x96,0xd4,0xe0,0xca, 0xf5,0x2f,0xae,0xf7,0x17,0x72,0x79,0x6a,0xd5,0xaa,0xe8,0xef,0x4e,0xbc,0x91,0x4a, 0xa4,0x9f,0x9f,0x33,0x67,0xe6,0x82,0xcb,0xaf,0x5b,0xf1,0x83,0xd3,0x4e,0x9f,0x3b, 0x7a,0x7f,0xfb,0x7e,0x91,0x4e,0xa4,0x39,0x7f,0x72,0xc3,0x3,0x7f,0x78,0xa3,0xb9, 0x1f,0xe0,0xde,0xe7,0x77,0xe8,0x67,0x6f,0x5d,0x36,0xa9,0x73,0xfc,0x45,0x37,0xf5, 0xe,0x14,0xbe,0xfd,0xc2,0xb,0x2f,0xc9,0x37,0x5f,0xdf,0x48,0xad,0x9c,0x43,0x29, 0x81,0xcf,0x17,0x40,0x19,0x16,0x52,0x1a,0x8,0x25,0xb1,0x6d,0x9b,0xd,0xcf,0x6d, 0x60,0xd4,0xe8,0x26,0x2e,0x5e,0x74,0xe,0x9b,0xb7,0xed,0x39,0x63,0xfa,0x8c,0x99, 0xbb,0x77,0x6d,0xdf,0xb2,0xe7,0xdd,0x72,0x40,0x3d,0xd4,0x32,0xf0,0xb1,0x86,0xc9, 0x13,0xfe,0x60,0x8a,0xd0,0x67,0x4f,0x3a,0x6d,0xee,0xb6,0xad,0x81,0xc8,0x1b,0xab, 0x57,0x5e,0x59,0xff,0xd3,0x87,0x9e,0xd5,0x6b,0xfe,0xfb,0x81,0x9b,0xe,0xb4,0x1c, 0x2a,0xa5,0x13,0x83,0x54,0xab,0xe,0xfe,0x80,0xe5,0x2,0xc,0x96,0xed,0x4d,0xbf, 0xfb,0xfd,0x7d,0xfa,0xd1,0x27,0x1f,0x25,0x95,0x48,0x11,0xab,0xb,0x69,0x43,0x8a, 0xce,0xb7,0x43,0xe7,0x96,0x6b,0xea,0xf7,0x8f,0x5a,0xf8,0x9d,0x54,0xde,0xb9,0xe9, 0xb1,0x47,0x1e,0xa1,0x75,0xef,0x36,0xb4,0x5d,0x2,0x5c,0x5c,0xed,0xe2,0xd8,0x35, 0xd0,0xe,0x52,0x4a,0xfc,0xfe,0x20,0x81,0x40,0x10,0xc3,0xf4,0xf1,0xcb,0x3b,0xee, 0xa4,0x56,0xab,0xb2,0x60,0xde,0x69,0x42,0xb,0xdf,0xaf,0x46,0x8d,0x1a,0x15,0x38, 0xa6,0x7,0x1e,0x7f,0x6d,0x8f,0x73,0xf2,0xe9,0xb3,0x7c,0xa5,0x52,0xed,0x73,0xcd, 0xdb,0xf6,0x1e,0x7c,0x71,0xfd,0x2b,0xa3,0x4e,0x99,0x77,0xd2,0x58,0x5d,0x17,0x2d, 0x4f,0x9a,0x31,0x61,0xfc,0xee,0xed,0x6d,0x6b,0x8b,0xe9,0x41,0x64,0xcd,0x8e,0x68, 0x47,0xef,0xfe,0xf8,0xbc,0x13,0xbe,0xf3,0xd2,0xb6,0x96,0xdc,0xe6,0x1d,0xfb,0xdd, 0xa6,0xf1,0x8d,0x5f,0xef,0xee,0xe9,0x37,0x6b,0x95,0x6a,0x2d,0xde,0xd2,0xd9,0xf7, 0x9b,0xa7,0x5e,0xbf,0xd5,0xb,0x9f,0x86,0x2d,0x6a,0xfe,0x17,0xca,0xae,0xf8,0xfa, 0x63,0x8f,0x3e,0x42,0x6f,0x67,0x1b,0xb6,0xeb,0x0,0x2,0x21,0x5,0x2,0x81,0x46, 0x82,0x90,0x48,0x65,0x20,0x95,0x81,0x52,0x26,0x52,0x4a,0x2a,0xe5,0x2,0xae,0xb4, 0x38,0xe3,0x3,0x73,0xd8,0xbe,0xb3,0x39,0x90,0xcf,0xe,0x3c,0x9c,0x88,0xf7,0xf6, 0x1d,0x93,0x85,0x4e,0x8,0x19,0x7b,0x63,0xd,0xc1,0xe0,0x92,0xbf,0xbb,0x64,0xea, 0xf8,0xc9,0xe3,0xf4,0x63,0xf7,0x3d,0xad,0x5e,0xdf,0x76,0xe0,0x9f,0x6a,0x42,0xde, 0x7b,0xdb,0xe7,0x2e,0x2a,0xc6,0x93,0xe9,0x7f,0xf9,0xda,0x65,0x67,0x5c,0xf9,0xa5, 0xf3,0x67,0x2f,0x9e,0x12,0xb5,0xd2,0x77,0xae,0x18,0x62,0xac,0xf0,0x60,0x7a,0x76, 0x7d,0xa9,0x74,0xc7,0xee,0xd7,0x77,0xaf,0xed,0x4e,0x64,0xce,0xf3,0xc0,0x47,0xda, 0xac,0x39,0x1f,0xae,0x60,0xfe,0xcb,0xda,0x35,0x6b,0xe8,0xee,0x68,0xc3,0xd1,0x1a, 0x1,0x8,0x21,0x10,0x82,0x21,0x29,0xa5,0x1d,0xb4,0xb6,0x41,0xf,0xe5,0xbc,0x50, 0xbe,0xa1,0x90,0x52,0x6,0x1b,0x36,0xbc,0x80,0xdf,0xf2,0x31,0x7a,0xcc,0x38,0xea, 0x1a,0xc7,0x2d,0x7c,0xd7,0x24,0x9e,0x53,0x6f,0xb9,0xfd,0x5,0xdb,0x2e,0x94,0xb2, 0xd6,0x19,0x67,0xcf,0x73,0xf6,0xed,0xdc,0xe7,0x6e,0xdb,0xb4,0xcd,0x9c,0x35,0x77, 0xa6,0x70,0x67,0x8c,0x91,0x80,0x73,0xfd,0xed,0xf,0x1f,0x2,0xb8,0x73,0xc5,0xd2, 0xca,0xf5,0x1e,0xd3,0x3c,0xf8,0xfc,0xd6,0x8e,0xc3,0xb9,0x7f,0xb0,0xfe,0xd4,0x73, 0x93,0x85,0xe8,0x6f,0xf6,0xed,0xdb,0xed,0xeb,0xed,0xee,0x40,0x48,0x3c,0xf0,0x12, 0xf1,0xf6,0x94,0x69,0xd0,0x2e,0xda,0xae,0xa0,0xa5,0xf,0x84,0x1f,0x21,0x24,0x18, 0x16,0x4a,0xf9,0x49,0xa7,0x93,0xf4,0x25,0x6,0x88,0xc6,0xa2,0x84,0xc2,0xd1,0xf, 0x3,0xb7,0x1d,0xd3,0x3,0x37,0xac,0x7a,0xd8,0x6d,0xd4,0xee,0x55,0xe5,0x52,0x85, 0x44,0x32,0xa9,0x66,0xcf,0x9b,0x65,0x4c,0x98,0x36,0x41,0x6e,0x7f,0x63,0x37,0xf7, 0xac,0xdf,0x12,0x1b,0xf9,0xa3,0xeb,0x6f,0x3f,0xba,0x60,0x7b,0x65,0xcd,0xaf,0x3f, 0xb8,0x37,0x1b,0xbc,0xa3,0xa7,0xa7,0xa7,0x6e,0xe3,0xcb,0x2f,0xa0,0xd1,0x8,0x84, 0x7,0x5e,0x1c,0xc6,0xe0,0x36,0xc3,0xfa,0x49,0xbb,0x43,0xf2,0x4b,0x2a,0x13,0xa9, 0xc,0x6a,0x55,0x9b,0xad,0x3b,0x5b,0x10,0x86,0x41,0xac,0xbe,0xf1,0xcc,0xe3,0x5a, 0xc8,0x7e,0xb1,0xfa,0x89,0xb5,0x68,0x78,0x65,0xdd,0xcb,0x2d,0x7b,0x76,0xec,0x73, 0xe7,0x9e,0x39,0x3b,0x2d,0x5d,0x7d,0xcd,0xc6,0xdd,0xed,0x99,0xe3,0x5d,0x58,0xda, 0x4a,0x75,0xff,0x9a,0xc9,0x66,0xa7,0x3c,0xb7,0xfe,0x19,0xaa,0x15,0x8f,0xc2,0x85, 0x40,0x4a,0x39,0xe4,0x85,0xb7,0xbb,0xeb,0x85,0x8d,0x7f,0x68,0x95,0x77,0x5d,0x34, 0x20,0xa5,0x42,0x28,0x13,0x29,0x15,0x6d,0x7,0x3a,0x91,0x28,0x94,0x61,0x8c,0x8b, 0x46,0x63,0xc6,0xbb,0x1a,0x0,0xa0,0xa4,0xa8,0xd6,0xc0,0x7c,0xe9,0xe9,0x4d,0xdf, 0x5c,0xf7,0xd0,0xfa,0xcd,0x33,0xe6,0x9e,0xa8,0x1,0xe7,0x78,0xc0,0x6f,0xde,0xf8, 0xf2,0x9c,0x96,0x43,0x3d,0x17,0x6c,0xda,0xf4,0x2a,0x99,0xc1,0x1,0xa4,0x92,0x6f, 0x3,0x7,0x8d,0x10,0x60,0x28,0x81,0x14,0xde,0xbc,0xb,0x13,0x69,0x58,0x8,0x65, 0xd,0x8d,0xd0,0x1a,0xa1,0x14,0x52,0x99,0x8,0xc3,0xc7,0x40,0x26,0xcb,0x50,0xc2, 0x8,0x7,0xf4,0x11,0x31,0xc8,0x91,0xf2,0xe1,0xb2,0xcb,0x16,0x9e,0x58,0x28,0xda, 0x6a,0xd2,0x8c,0x49,0x53,0x96,0x2d,0x3e,0xeb,0x77,0x83,0xf1,0xf4,0x9d,0x9b,0x36, 0xbc,0x71,0x1d,0x10,0x3a,0xae,0xd9,0x8f,0x67,0xef,0x69,0x6e,0x6e,0xa1,0xfd,0xe0, 0x1,0xa4,0x94,0x28,0xa5,0x10,0x62,0x28,0x71,0x87,0x67,0x4b,0x0,0x8e,0xd6,0x48, 0x65,0x61,0x5,0xea,0x8,0x47,0x1b,0x9,0x86,0x63,0x8,0x29,0xd1,0x5a,0xa3,0xa4, 0x44,0x29,0x3,0x21,0x14,0x8,0x81,0xa3,0x35,0x8e,0xe3,0x26,0xb2,0xd9,0xec,0x11, 0xc3,0x56,0x2e,0x5f,0xb5,0x46,0xaf,0x5e,0x79,0xa5,0xb1,0x6c,0xc5,0x67,0x37,0x54, 0x7c,0xe6,0x5e,0xa9,0x84,0x54,0x4a,0xc9,0xb6,0xc1,0xf2,0xca,0x9f,0x7d,0x71,0xc9, 0x3a,0xe0,0xaa,0xe1,0x95,0xf5,0x58,0x6d,0xfb,0x1b,0x9b,0x22,0x3b,0x76,0xb7,0xce, 0xdb,0xb9,0x63,0x1b,0x8e,0xeb,0xa0,0xc,0xe9,0x45,0xfa,0x30,0xeb,0x80,0xab,0x35, 0x35,0xc7,0xc5,0x30,0xfd,0x84,0x62,0xe3,0x69,0x6c,0x9a,0x4e,0xd3,0xe4,0x19,0x8c, 0x1d,0x3f,0x19,0x7f,0x20,0x8c,0x76,0x1d,0x84,0x90,0x43,0x1e,0x10,0x12,0x9f,0x69, 0x81,0x86,0x4a,0xa5,0xdc,0x79,0x4c,0x16,0xfa,0xc9,0x2b,0x7,0xfd,0x7f,0x78,0x74, 0xcd,0x85,0x5b,0x77,0x6d,0xd6,0xf,0x3e,0xf2,0x10,0x4e,0xcd,0x26,0xe7,0xf0,0x19, 0xd,0x3f,0x0,0x52,0xc7,0x33,0xfb,0xbd,0x3,0xa5,0xbb,0xb7,0x6c,0xde,0xcc,0x40, 0x3a,0x8d,0x32,0x14,0x42,0x8,0xa4,0x17,0x36,0x7f,0xe4,0x1d,0x8d,0x32,0x4c,0xc2, 0xf5,0x13,0x19,0xdd,0x34,0x8d,0xe9,0x33,0x67,0x51,0x57,0x17,0x21,0x5f,0x2c,0x21, 0x84,0xa0,0xe3,0x50,0xdb,0xd0,0xef,0x94,0x42,0x4a,0x49,0x38,0x5a,0x87,0xed,0x38, 0x94,0x2b,0xe5,0xd6,0x63,0x26,0x71,0x5d,0x63,0xf4,0xe2,0x42,0xa1,0xa8,0x41,0x90, 0x8a,0xa7,0xe9,0xe9,0x8c,0x23,0xd,0x19,0x5,0x91,0x3d,0x1e,0xf0,0xaf,0xde,0xff, 0x63,0x7f,0x77,0x3c,0xf9,0xd1,0x83,0x7,0xda,0x0,0x30,0xd,0x13,0xa1,0x87,0xd8, 0x47,0xa,0xf1,0xc7,0x1c,0x0,0xc2,0x75,0x4d,0x8c,0x19,0x7f,0x2,0xf3,0xcf,0x58, 0xc0,0xa8,0xd1,0xf5,0x54,0xaa,0x2e,0x52,0x19,0x4,0x43,0x61,0x7c,0x96,0x35,0x54, 0x56,0x12,0x20,0x94,0x49,0xac,0xae,0x8e,0x74,0x7a,0x90,0x6a,0xa9,0xb8,0xe3,0x98, 0x6,0xc8,0x4a,0x75,0xd3,0x57,0xbe,0xf5,0xb5,0xfc,0xf,0x7f,0x74,0x9b,0x68,0x6b, 0x3e,0x28,0x5c,0xc7,0xc1,0xcd,0xe4,0x3e,0x7b,0xfd,0xed,0x6b,0xde,0x11,0x77,0x77, 0xae,0x58,0x7a,0x64,0xf5,0x3a,0xf6,0xd4,0x2f,0x6d,0xdb,0xbe,0x37,0x90,0xc9,0xc, 0xa2,0xc,0xc3,0xcb,0x3b,0x50,0x4a,0x8e,0xf0,0x80,0xc6,0x67,0x5,0x19,0xd5,0x34, 0x9d,0xf3,0x2f,0xf8,0x10,0x81,0x80,0x45,0x26,0x93,0xa7,0x50,0x28,0x50,0x2c,0x94, 0x70,0x5d,0x1b,0x89,0x46,0x29,0x89,0x14,0x12,0x9f,0xcf,0x22,0x10,0x89,0x90,0xcb, 0xe7,0x8,0x6,0x2,0x3b,0x8f,0x69,0xc0,0xb5,0xa7,0x37,0xa5,0xc2,0x76,0x6d,0xa1, 0x9d,0xaf,0x3c,0x1b,0x36,0xcc,0x7,0x95,0xcb,0xa4,0xcd,0xcd,0x7,0x9f,0x38,0x7c, 0xf0,0x1b,0xc9,0xd2,0x55,0x37,0x5d,0x77,0xe9,0x85,0x87,0x95,0x4e,0x64,0x3c,0x5b, 0xfd,0x50,0x6b,0x6b,0x2b,0x8e,0xe3,0x60,0xf9,0x3,0x68,0xed,0xa2,0xa4,0x81,0x50, 0xea,0x6d,0xc5,0x2e,0x80,0x40,0x74,0x1c,0xe7,0x5f,0x70,0x1e,0x13,0xc7,0x8f,0xa1, 0x50,0xaa,0xa0,0x91,0xd8,0xe,0x64,0x32,0x39,0xa,0xd9,0x1c,0x68,0x9b,0x40,0x28, 0x84,0x52,0x8a,0x58,0xfd,0x68,0x10,0x26,0x68,0x97,0xc5,0x17,0x5f,0xb2,0xe0,0xa8, 0x39,0xb0,0x7a,0xe5,0x95,0x6,0xe0,0xff,0xe8,0xd4,0x58,0x8f,0x9e,0x12,0x5b,0x26, 0xd0,0xbd,0x1a,0x5c,0x2d,0xa8,0xbb,0x61,0xd5,0xc3,0x83,0xc3,0x3,0xbf,0xff,0xf9, 0x8f,0x4d,0x7f,0x25,0x5e,0xfa,0x79,0xc8,0x6f,0xa6,0xee,0x5c,0xb9,0xf4,0x94,0xeb, 0x57,0x3d,0x5c,0x3,0x8,0x4f,0x9b,0x1b,0xda,0xd3,0xdd,0xbf,0x28,0x95,0x4a,0x61, 0x5a,0x7e,0x4c,0x5f,0x0,0x1b,0x86,0x18,0x8,0x8d,0x8b,0xd,0xae,0x8d,0x94,0x6, 0xe3,0x26,0xcf,0x60,0xfe,0xdc,0x93,0xe8,0xea,0x1b,0x40,0x19,0x26,0x60,0x53,0x2a, 0x57,0x29,0x97,0x4a,0x94,0x4a,0x39,0x2,0xc1,0x0,0x91,0x48,0x1d,0xc5,0x42,0x89, 0xc9,0xd3,0x67,0x51,0x2c,0x54,0x28,0xe6,0xf3,0xac,0x5d,0xf7,0xc2,0x4d,0x9f,0xbf, 0xf1,0xdf,0xb6,0xdc,0xf5,0x93,0x6f,0xac,0x3b,0x9a,0x94,0x50,0x5a,0x93,0xb8,0xfe, 0xf6,0x35,0x23,0xeb,0x36,0x6f,0x83,0x5f,0xf5,0xf7,0x97,0x87,0x9f,0xe9,0xce,0xad, 0xaf,0x49,0x1d,0xad,0x54,0xca,0xe6,0xfe,0xee,0xea,0xd9,0xc0,0x4b,0x0,0xd5,0xd1, 0xa7,0x9f,0xb3,0x7b,0xd3,0x86,0x70,0xa1,0x58,0x22,0x12,0x1b,0xd,0x68,0x4c,0xd3, 0x87,0x54,0x6,0xda,0xb5,0x71,0x1d,0x7b,0x68,0xe1,0x52,0x6,0x27,0xce,0x3a,0x91, 0x9a,0xa3,0x49,0x67,0xa,0x14,0x8b,0x55,0xca,0x55,0x9b,0x62,0xb1,0x48,0xb9,0x54, 0xa0,0x56,0x2d,0x32,0x71,0xca,0xc,0xfc,0xe1,0x8,0xe1,0x48,0x9e,0xc6,0x31,0x63, 0x48,0xc5,0x7b,0x48,0xc4,0x7b,0x31,0x82,0x8d,0x91,0xb6,0x43,0x5d,0x4f,0x5c,0x71, 0xdd,0xb7,0x3f,0xbd,0xf6,0xee,0xef,0x3f,0x70,0xb8,0x1,0x52,0x6b,0xd2,0x87,0xc7, 0xfb,0x88,0xb8,0x97,0x8f,0x76,0x64,0xfe,0x3d,0x38,0x31,0x34,0x21,0x73,0x28,0x25, 0xac,0x60,0x38,0xb2,0xdf,0x2f,0x1e,0x7,0xea,0x0,0x76,0xb5,0xf5,0x7c,0xba,0x2f, 0xde,0xf,0xca,0xc2,0x54,0x26,0x4a,0x4a,0xa4,0x52,0x28,0x25,0x3d,0xb9,0xac,0x91, 0x86,0x81,0x46,0x12,0x9,0x5,0xc8,0xe6,0x8a,0xa4,0x6,0x72,0x24,0x53,0x59,0x32, 0x83,0x19,0x4a,0x85,0x1,0x8a,0xd9,0x24,0x4a,0xc0,0x49,0x27,0x9f,0x4a,0x6f,0xdf, 0x0,0x93,0x4e,0x98,0x4e,0x2e,0x9b,0xa7,0x67,0xff,0x9b,0xd8,0xda,0xc0,0x52,0x6, 0x4a,0x29,0x7a,0x7a,0x7b,0x3f,0xd,0xbc,0xc3,0x0,0xa9,0x35,0xb5,0xa3,0x25,0xeb, 0xea,0x15,0x57,0xca,0x27,0xdb,0x33,0xb,0xc2,0x93,0x22,0x5f,0x68,0x6f,0x3d,0x90, 0x9a,0x66,0x85,0x7c,0xaf,0x3c,0xb3,0x69,0xf3,0x73,0x8f,0xbd,0xba,0x71,0x78,0x6c, 0x47,0x5f,0x72,0x66,0xb1,0x5c,0xc5,0xf4,0x5,0x31,0x4c,0xb,0xc3,0xa,0xa0,0xc, 0x1f,0x52,0x99,0x28,0xd3,0x87,0xe9,0xf,0xe2,0xf,0x84,0x9,0x86,0x63,0x54,0xca, 0x55,0xba,0xe3,0x69,0x3a,0x3a,0x7b,0xe9,0xea,0xec,0x20,0xd9,0xd7,0x41,0x36,0xdd, 0xcb,0x60,0xa2,0x93,0xa6,0xa6,0x26,0xa6,0x4c,0x19,0x8f,0x34,0x5,0xf5,0xb1,0x28, 0xd9,0x64,0x17,0xbd,0x1d,0xcd,0xf8,0x83,0xf5,0x94,0xcb,0x25,0x4a,0xc5,0x3c,0x95, 0x4a,0xc9,0xfc,0x93,0x10,0x1a,0x9,0xfe,0x3f,0xbf,0x74,0x45,0xfd,0x86,0xfe,0xc2, 0x8f,0xd6,0xf5,0x14,0xe6,0x7e,0xe5,0xea,0x4b,0xae,0x75,0xb4,0xee,0xc8,0x6a,0xe7, 0x59,0xab,0x92,0xd3,0xad,0xaf,0x75,0x2e,0xd9,0x9c,0xd9,0xe5,0x46,0xa3,0xd1,0x6b, 0x81,0x5b,0x86,0x6b,0x9f,0x4f,0x95,0xdc,0x59,0xb6,0x16,0x18,0x3e,0x9f,0x27,0x95, 0x5,0xe8,0x21,0x9,0x27,0x95,0xf,0x43,0x19,0x4,0x42,0x61,0x2c,0x9f,0x9f,0xde, 0x78,0x9c,0x9e,0x44,0x9e,0xce,0xf6,0x83,0xe4,0x7,0xd3,0xd4,0x8a,0x29,0x6a,0x95, 0x2,0xd1,0x68,0x98,0x45,0x8b,0x17,0x53,0xab,0x39,0xc4,0xc2,0x61,0x12,0xfd,0x49, 0x52,0xdd,0xfb,0xd0,0x28,0xca,0xa5,0x1c,0x5a,0xb,0xb4,0x76,0xa8,0x55,0xb,0xbb, 0x8e,0xaa,0x85,0x56,0xaf,0xb8,0xd2,0xbf,0xae,0x3d,0xf3,0xad,0x1b,0xbf,0xfa,0xdd, 0x65,0xe7,0x2f,0xfc,0x9b,0xf9,0x3b,0xf2,0xf6,0xd6,0xdf,0xb6,0x24,0xaf,0x18,0x3f, 0x73,0x6c,0x74,0xeb,0x4b,0xdb,0xbb,0xff,0xe3,0xba,0x8f,0x6c,0x6,0xc8,0x66,0xb3, 0x7b,0xb2,0xd9,0xec,0x52,0x80,0xc0,0xc4,0x93,0xa6,0xd5,0x6c,0xb7,0xd1,0x50,0x16, 0x52,0x2a,0x6f,0x43,0x32,0xa4,0x65,0xc,0xc3,0x87,0xcf,0xf2,0x63,0x59,0x7e,0xc, 0xc3,0x60,0xf4,0xd8,0xb1,0xc4,0xbb,0xbb,0x68,0x6b,0xde,0x4a,0x36,0xd1,0x41,0x3e, 0xdd,0x41,0x21,0x13,0x27,0xe0,0xf7,0xb1,0xe4,0x13,0x9f,0x62,0xca,0xe4,0x49,0xc4, 0xe3,0x49,0xec,0x6a,0x85,0xdc,0x40,0x3f,0x9d,0xad,0xdb,0x51,0x46,0x80,0x42,0x2e, 0x8d,0x5d,0x2b,0x51,0x2d,0x17,0x29,0xe7,0x52,0x4f,0x1d,0x7d,0x53,0x2f,0xb0,0x73, 0x8e,0xbe,0xa4,0x7f,0x20,0x2e,0x76,0xb7,0xec,0xc2,0x75,0x1d,0x6b,0xc2,0x94,0x31, 0x77,0xb5,0x75,0x1c,0xa0,0xb1,0xe2,0xff,0xe6,0xf2,0x23,0x48,0xe8,0xc0,0xf4,0xf3, 0x9a,0xca,0x6f,0xbd,0x88,0x69,0x5,0x90,0xa5,0x12,0xca,0x34,0x91,0x42,0xa0,0xa4, 0xc4,0x30,0xc,0x94,0x61,0x62,0xf9,0x4c,0xfc,0x81,0x20,0x8d,0x8d,0xf5,0x84,0x82, 0xa7,0xb0,0x7d,0xcb,0x6b,0x50,0xcb,0x61,0x4a,0x97,0xf1,0x53,0x4f,0xe0,0x53,0x57, 0x7d,0x86,0x53,0xe7,0x9c,0x42,0x5b,0x67,0x9c,0x4a,0xa5,0x42,0x32,0x99,0xa0,0xb7, 0x7d,0x17,0xf9,0x7c,0xe,0x57,0x5a,0x38,0xae,0x8b,0xac,0x1f,0x83,0x6d,0xeb,0x44, 0xa2,0x63,0xd7,0x2b,0x47,0x35,0x60,0xf9,0xaa,0x35,0xf6,0x85,0x4b,0x16,0xfe,0xfa, 0x7b,0xdf,0xbb,0xe5,0x36,0x43,0x2a,0x99,0xcb,0x67,0x89,0xd5,0x85,0x8c,0x5c,0x4f, 0x25,0xff,0xd1,0xb,0xe7,0xbd,0xb8,0xfb,0xc0,0x9f,0xca,0x11,0xed,0xb,0xe,0x3a, 0x8e,0x8b,0xe5,0xf7,0xa3,0x35,0xf8,0xc,0x13,0xd3,0x67,0x62,0x1a,0x6,0x96,0x65, 0x61,0x59,0x16,0xa1,0x50,0x88,0x48,0x34,0x4c,0x63,0x7d,0x94,0x93,0xce,0x9c,0xcb, 0x45,0xb,0xcf,0x21,0x95,0x4c,0x63,0x4a,0x98,0x3a,0x65,0x2,0x52,0xf9,0x48,0x66, 0xf2,0x74,0x74,0xf5,0xd1,0xd5,0xd1,0x4e,0x66,0x30,0xc5,0xa1,0xfd,0xbb,0xd0,0x8, 0xaa,0xe5,0x2,0x4a,0x19,0x38,0xb5,0x32,0xd5,0x72,0xf5,0x8e,0x4c,0x66,0xd0,0x3e, 0x66,0x59,0xe5,0xf9,0xc7,0x37,0xac,0x3a,0xe5,0xd4,0x93,0xf6,0xfb,0x1b,0x63,0x37, 0x8e,0x1d,0xd5,0x38,0xb1,0xd0,0x95,0x78,0x61,0xc9,0x9,0x13,0xee,0x9d,0x16,0x36, 0x7b,0x8e,0xc4,0x50,0x41,0x43,0xf7,0x84,0x42,0x1,0x8a,0xe5,0x21,0xa5,0xab,0xc, 0x45,0x24,0x1c,0x21,0x14,0xa,0x10,0x8,0x4,0x30,0xc,0x83,0xfa,0xfa,0x28,0xa3, 0x1b,0xea,0x68,0x68,0x88,0xd1,0x10,0xb,0xd1,0xd0,0x10,0x63,0xd6,0xb4,0x89,0x94, 0xcb,0x65,0x4a,0x95,0x2a,0x83,0xd9,0x22,0x3b,0x76,0x1f,0xa0,0xb3,0xbd,0x9d,0xfe, 0xbe,0x1e,0x7a,0x3b,0xdb,0xd0,0xc2,0xc2,0x75,0xcb,0xd8,0xb5,0x1a,0x52,0x68,0x1c, 0x87,0x3d,0x5d,0xad,0x6f,0xae,0x2,0x4c,0x4f,0xda,0xeb,0xe1,0xfe,0x27,0x9b,0x84, 0x1b,0x17,0xcd,0x79,0xe,0x78,0x15,0x8d,0x1,0x3a,0xf,0x94,0x97,0x1f,0x65,0x7, 0x56,0xe9,0xda,0x51,0x1a,0x3d,0x7a,0x14,0xa9,0x54,0x76,0x48,0x32,0x68,0x4d,0x43, 0x63,0x1d,0xa1,0x80,0x9f,0x48,0x24,0x44,0x34,0x12,0xa2,0x3e,0x16,0x21,0x16,0xb, 0x13,0x8b,0x84,0xb0,0x4c,0x45,0xb5,0x5c,0xa6,0xa,0x94,0xca,0x55,0xb2,0x85,0x12, 0x5b,0x77,0xb6,0xb2,0x7f,0x5f,0xb,0xfb,0x5b,0xf6,0x50,0x2a,0x16,0xe8,0xe9,0x68, 0x5,0xb7,0x6,0x68,0x2c,0xd3,0xc0,0xa,0xd4,0xa7,0xba,0xda,0x36,0x2f,0x2b,0x97, 0x8a,0x0,0x1,0xa0,0x6,0x54,0x8f,0x6a,0x0,0x50,0x59,0xbe,0x6a,0x4d,0xf9,0x78, 0x44,0x5c,0x29,0xde,0x56,0x1d,0xd3,0x78,0x6,0xcd,0xb8,0x4,0x2,0x41,0x2a,0xd5, 0xa,0xae,0xe3,0xd2,0x50,0x1f,0x63,0xfc,0xb8,0x46,0x62,0xd1,0x30,0xe1,0xa0,0x45, 0x28,0x60,0xe1,0x33,0xd,0x94,0x70,0x70,0x1c,0xb0,0x5d,0x41,0xbe,0x54,0xa5,0xf5, 0x60,0xf,0x6d,0x2d,0xcd,0xec,0xdc,0xbc,0x91,0x72,0xa5,0x4a,0x2e,0x9b,0x26,0xe0, 0x89,0x3a,0xcb,0x90,0x28,0xa5,0x6,0xba,0xda,0xb6,0x7e,0xad,0x90,0xcf,0x54,0x81, 0x31,0x9e,0xac,0x2f,0x2,0x3e,0xa0,0xc,0x38,0xef,0xf7,0x15,0x90,0xf1,0xbb,0xb5, 0xeb,0x2b,0x4f,0xaf,0x7f,0x59,0xe6,0xb,0x15,0xe2,0xf1,0x3e,0x66,0xce,0x98,0xc9, 0xd9,0x67,0xce,0x61,0xca,0xc4,0x71,0xf8,0x7d,0xa,0x53,0x49,0xc,0x43,0x21,0x84, 0x46,0x48,0x83,0x9a,0x36,0x48,0x67,0xa,0xf4,0xf5,0xa7,0x79,0x6d,0xd3,0x26,0x5e, 0x7f,0xf5,0x79,0x8a,0xf9,0xc,0xa6,0x12,0x99,0xf6,0xb6,0x3d,0xf7,0xd9,0x35,0xbb, 0xec,0xf,0x84,0x42,0x52,0x8a,0x4a,0x2e,0x3b,0xd8,0xac,0xb5,0x4e,0x79,0x25,0xfb, 0x92,0xa7,0xe,0xf2,0xde,0xd1,0x1,0x72,0xc6,0xfb,0x0,0xaf,0x0,0x23,0x1c,0xf0, 0x35,0x7,0x2,0xa1,0x93,0x83,0xc1,0x8,0xb9,0x7c,0x9e,0x5c,0x2e,0x47,0xc0,0x1f, 0xc4,0x30,0x4c,0x84,0x32,0x40,0x6a,0x5c,0xad,0x71,0x5d,0x49,0xa1,0x64,0x53,0x28, 0xe4,0x49,0xd,0xc,0xf2,0xcc,0x33,0x1b,0xd8,0xfb,0xd6,0x26,0xa,0x85,0x1,0x5c, 0xbb,0x9a,0x3a,0xd4,0xde,0xfa,0xb4,0xeb,0xba,0x3e,0x40,0xe5,0x73,0x83,0x15,0xc0, 0x5,0x9a,0x0,0xbf,0x7,0x3a,0xe7,0x3d,0x53,0x8c,0x78,0xd5,0x15,0x54,0xef,0x7, 0x3c,0x60,0x7c,0xf2,0xf2,0xcb,0x2,0x3,0x25,0x77,0xd1,0xc0,0xc0,0x20,0xb,0x3e, 0x70,0xa,0x35,0xdb,0xa1,0xb3,0xbb,0xf,0xd3,0x37,0x44,0xa9,0x95,0xaa,0x4d,0xb1, 0xea,0xa0,0xb5,0x20,0x68,0x99,0xb4,0xb4,0xb4,0xf2,0xe0,0xfd,0xbf,0xa7,0xad,0x79, 0x7,0xd5,0x4a,0x96,0x6a,0xb9,0x98,0xec,0xee,0x68,0xdb,0xac,0xb5,0xf6,0x79,0x5b, 0xd7,0x88,0x7,0x7a,0xb8,0xfb,0x0,0xcb,0x4b,0x60,0xd7,0xeb,0xb6,0xe7,0x81,0xaa, 0x38,0xc2,0xfb,0x31,0x3,0x30,0xde,0x25,0xf,0xc,0xef,0xa6,0xfe,0x58,0x28,0x30, 0xea,0x87,0x3f,0xbf,0xfb,0xde,0xd7,0xb6,0xb4,0x2e,0xa8,0xd4,0xa,0xcc,0x9e,0x39, 0x93,0xb3,0x16,0x9c,0x82,0xe1,0xd5,0x3a,0x7d,0xa6,0xc2,0x30,0x14,0xc9,0x78,0x82, 0xb5,0x4f,0xfe,0xf,0x5b,0xb7,0x6e,0xa7,0x90,0x49,0xa2,0x75,0xcd,0x1d,0xe8,0xef, 0xee,0xce,0x65,0x33,0xdd,0x7f,0x2c,0x14,0xc1,0x8,0x70,0x65,0x2f,0x59,0x73,0x5a, 0xeb,0x1,0x20,0x9,0x24,0x80,0x2e,0xef,0xbc,0x1f,0xc8,0xbc,0xd7,0x1c,0xf0,0x79, 0x3d,0x8,0x8c,0x9a,0x32,0x65,0xea,0xec,0x25,0x9f,0x5a,0xfe,0xab,0x43,0x7,0x3b, 0x1b,0x4b,0xd5,0x1a,0xca,0x90,0xd4,0x47,0x23,0x58,0x96,0xa4,0xbb,0xbb,0x83,0x44, 0x5f,0x8a,0x42,0x31,0x4b,0xb5,0x52,0x44,0x6b,0x8d,0x53,0x2d,0x97,0x93,0xfd,0xdd, 0x7,0x6d,0xdb,0xae,0x8d,0xa8,0xb4,0x20,0x84,0x70,0x3c,0xf0,0xae,0x7,0xbe,0xe4, 0xf5,0x9c,0xd6,0x3a,0xae,0xb5,0xee,0xd6,0x5a,0x1f,0xf0,0xc0,0x27,0x80,0xb4,0x78, 0xf,0xef,0xaf,0xa4,0xe7,0x1,0x9f,0xe7,0xee,0x7a,0x21,0xc4,0xf8,0x70,0x24,0x72, 0xda,0x69,0xf3,0xce,0xfd,0x72,0x4d,0xa8,0xa9,0xc5,0x7c,0x9e,0x62,0xb1,0x80,0x5d, 0x2e,0xe0,0xd8,0x36,0x1a,0x7,0x34,0x28,0x43,0xe8,0x62,0x2e,0x9b,0xc8,0xc,0xa6, 0x7b,0xf4,0x50,0x39,0x71,0x98,0xd7,0xd5,0x70,0x95,0x4b,0x8,0xa1,0x3d,0x3,0xca, 0x5e,0xaf,0x0,0x69,0xad,0x75,0x42,0x6b,0xdd,0xe5,0xba,0xee,0xfe,0x11,0x1e,0x18, 0x7c,0x2f,0x1e,0x10,0xde,0x83,0x7d,0x40,0x44,0x8,0x31,0x4a,0x4a,0x39,0x49,0x8, 0x31,0x59,0x8,0x31,0x36,0x56,0x57,0x77,0x5a,0x2c,0xda,0x78,0xaa,0x36,0x8c,0xb1, 0x42,0xbb,0x41,0xc7,0xb1,0x9d,0x4a,0xa9,0x98,0x2d,0x16,0x72,0xc9,0x52,0xa9,0x94, 0x76,0x5d,0xd7,0xf5,0x0,0x8f,0x4c,0x48,0x3c,0xd0,0xc2,0x9b,0xf9,0x2a,0x50,0xd5, 0x5a,0x17,0x81,0xac,0xd6,0x3a,0xe3,0x79,0xa0,0xd3,0x3,0x1e,0x7,0x6,0x80,0xdc, 0xfb,0x31,0xc0,0x4,0x82,0x42,0x88,0x6,0x29,0xe5,0x58,0xcf,0x80,0x46,0x20,0xa, 0x84,0xbd,0x1c,0xf1,0xd,0x1b,0xab,0xb5,0x36,0x3d,0xd0,0xc3,0x92,0xd8,0x1c,0x2e, 0x13,0xd,0x95,0x8a,0xb4,0xe3,0x79,0xa1,0xa4,0xb5,0xb6,0x81,0xb2,0xd6,0x3a,0xef, 0x85,0xcf,0xa0,0x7,0x38,0xee,0x31,0x52,0x2,0xc8,0x9,0x21,0x4a,0xef,0x85,0x46, 0x87,0x5d,0xec,0x0,0xb6,0xd6,0x3a,0xeb,0x38,0x8e,0x4f,0x8,0x61,0xb,0x21,0x52, 0x40,0x4c,0x8,0x31,0xcc,0x1e,0x7e,0xcf,0x10,0xc3,0x3,0x6c,0x68,0xad,0x87,0x43, 0x50,0xe,0xdf,0x47,0x6b,0x5d,0xf3,0xc0,0xdb,0xc3,0xe0,0x3d,0x2f,0x14,0xbd,0xf3, 0xa2,0xb7,0x88,0xd,0x0,0x19,0xef,0xef,0x92,0xd6,0xda,0x3e,0x62,0xe,0x3c,0x7b, 0xcb,0x35,0x12,0xd0,0xc7,0xc8,0x89,0x61,0x2f,0x48,0x2f,0x91,0xfd,0x1e,0x5,0x6, 0xbc,0x6e,0x8c,0x0,0x69,0x8e,0x28,0xca,0x99,0xde,0x58,0xd7,0xbb,0xe6,0x8c,0x60, 0x9e,0x61,0x76,0x2b,0x78,0x93,0x54,0xf1,0xae,0x65,0xbd,0xff,0xf,0xaf,0xc2,0xc3, 0x86,0x39,0x40,0x4d,0x1c,0xfe,0x22,0x7a,0x64,0x5c,0xbe,0x4b,0x52,0xcb,0x11,0x40, 0xcd,0x11,0xcc,0x34,0x1c,0xdf,0xd2,0x3b,0xea,0x11,0xd7,0xf4,0x8,0x1,0x29,0xe, 0xf3,0xa8,0x7b,0x58,0x1e,0xb8,0x9e,0xee,0xb1,0xbd,0xa3,0xe3,0x19,0x35,0x2c,0xe6, 0x86,0x92,0xfe,0xcf,0xf0,0xad,0x85,0x1a,0x31,0xdb,0xc3,0xc0,0xe5,0x88,0xe4,0x94, 0x23,0xc6,0xba,0x23,0xbc,0xa1,0xf,0x33,0x60,0xe4,0x51,0x8f,0x60,0xa6,0xe1,0x3a, 0xfc,0xf0,0xe7,0xf,0xef,0xf8,0x60,0xe4,0x7f,0x1,0xbf,0x5f,0x84,0xc3,0xfe,0x98, 0xb1,0x63,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/format_s.png 0x0,0x0,0x5,0x18, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x6,0x0,0x0,0x0,0xe0,0x77,0x3d,0xf8, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd5,0x8,0x8,0x0,0x19,0x0,0xe0,0xe3,0xed,0xa,0x0,0x0,0x4,0xa5,0x49,0x44, 0x41,0x54,0x48,0xc7,0x95,0x96,0x6d,0x6c,0x53,0x55,0x1c,0xc6,0x7f,0xe7,0xac,0xbb, 0xeb,0x68,0xb7,0xae,0xdd,0xd8,0x6,0x23,0x30,0x91,0xc9,0xa6,0x5b,0x40,0xb,0xc3, 0xb7,0x10,0x49,0x80,0x38,0x79,0xfd,0x20,0x43,0x13,0x13,0x23,0x42,0xf8,0x22,0xc1, 0x37,0x42,0x54,0x8,0x26,0x86,0x4,0xbe,0x89,0x4,0x63,0xc4,0x4,0x44,0x43,0x42, 0x60,0xa8,0x84,0xa0,0x19,0x2f,0xe1,0x25,0x20,0x1b,0x54,0x25,0xae,0xb,0xe5,0x65, 0xec,0xc5,0x75,0xdd,0x18,0xed,0xb2,0x75,0xa5,0xbd,0x6b,0xef,0xf1,0x43,0x4b,0xdb, 0xd1,0x2e,0xd1,0xf3,0xe9,0x24,0xe7,0xdc,0xe7,0x79,0xfe,0xff,0xe7,0xb9,0xff,0x7b, 0x5,0x13,0x2c,0xd7,0x1a,0xa1,0x1,0x4f,0xe0,0xa3,0xd4,0x68,0x5e,0xb7,0x9f,0xe0, 0x68,0x5,0xc4,0x4,0xe4,0x40,0xbe,0x45,0xd0,0x39,0x7a,0x52,0xbe,0x70,0xe4,0x4b, 0xca,0xf1,0x38,0x6f,0x2b,0xff,0x44,0x38,0x22,0x2b,0xf8,0x26,0xa1,0xd1,0xce,0xe7, 0x74,0x33,0xd7,0xb0,0x57,0xbc,0xcc,0xa9,0x29,0x5,0xf2,0x8f,0xeb,0xc9,0x73,0x63, 0xc6,0x5c,0x42,0xaf,0xde,0x32,0x7a,0xba,0x1e,0x3e,0xa8,0xb1,0xab,0xa3,0x68,0x5c, 0x76,0xf6,0xa9,0xc3,0xff,0x89,0xc0,0xf5,0x89,0xa8,0xa6,0x9d,0x4f,0xcf,0x9f,0xa0, 0x61,0xa6,0x2a,0x34,0x4f,0x7b,0xbf,0xd1,0x4c,0xe3,0x21,0x93,0xd4,0xf5,0x38,0x78, 0xae,0x9,0x66,0xae,0x86,0x35,0x53,0xe0,0x9f,0xdb,0xd1,0xee,0xee,0x4b,0x31,0x2d, 0x37,0x74,0x63,0xaa,0x55,0xb5,0x0,0x1f,0x3a,0x1f,0xa8,0xe8,0x84,0x4,0xae,0x6, 0xb1,0x22,0x70,0x4f,0x6c,0xbb,0xe1,0xc9,0xa9,0x5b,0x58,0xbf,0x36,0x9f,0xd7,0x96, 0xc1,0x9b,0xa7,0x91,0x9d,0x7,0x40,0x4b,0xa8,0xb7,0x56,0xc1,0xf,0xab,0xc1,0xeb, 0x40,0xd4,0xcd,0x41,0x45,0xc2,0x70,0xa6,0x9,0x7f,0xcb,0x8f,0xde,0x42,0x2b,0x97, 0x35,0x21,0x3e,0x70,0x8e,0xa8,0xde,0x47,0x98,0x32,0x9,0xfe,0x91,0xa8,0x1c,0xee, 0x50,0x9f,0xdd,0xf3,0xa8,0xd9,0xb,0x4b,0x6a,0xf3,0x79,0xfa,0x59,0x8,0xde,0x4, 0xf3,0xb5,0x24,0x38,0x0,0xaa,0x12,0x6,0x24,0xc,0xf7,0xa2,0xfe,0xbe,0x8,0x77, 0xfe,0x84,0xda,0x39,0x14,0x57,0xbe,0x58,0x6a,0x4,0x59,0x82,0xce,0xee,0x74,0xd1, 0xa6,0xe4,0xae,0x9d,0x1d,0x86,0x87,0xd9,0xb3,0x51,0x36,0xa6,0x95,0x43,0xfb,0x59, 0x78,0xc7,0x1,0xbe,0x40,0xea,0xb6,0xe,0xdc,0x7c,0x1e,0xce,0x1f,0x85,0x49,0x36, 0x90,0x2,0xa4,0x4,0xb3,0x19,0x55,0x6c,0x37,0x99,0xbb,0x84,0x5,0x9d,0xf9,0xae, 0x3c,0xb1,0xc9,0x19,0x51,0x7b,0x93,0x2d,0x72,0x35,0x88,0x75,0xea,0x92,0xda,0x28, 0x46,0x45,0x3d,0x80,0xe1,0x70,0x40,0x59,0x19,0xfc,0x56,0x85,0xec,0x38,0x91,0x32, 0xb7,0xa4,0x4,0xca,0xb6,0x82,0xd0,0x40,0x99,0x21,0x37,0x17,0x82,0x63,0xb0,0x78, 0x2f,0xdc,0xf7,0x22,0xfd,0x89,0x30,0x69,0xfc,0xe,0x6c,0x70,0x46,0x94,0xdb,0xe4, 0x5a,0x25,0x8a,0xe8,0xa6,0x56,0x5,0xa9,0x13,0x9,0x47,0x64,0xd0,0x8f,0xd1,0x58, 0xd,0x61,0x5f,0x5c,0x75,0xfc,0x21,0xe4,0xe0,0x20,0xc,0x6e,0x49,0x11,0x5a,0xab, 0xa0,0x69,0x11,0xf4,0xf,0x20,0x43,0xfe,0xf4,0x4a,0xa7,0x3,0xcb,0x5c,0x42,0xb4, 0x9b,0xd0,0x79,0x12,0x1f,0x8b,0xa5,0x10,0x6a,0x5c,0x2b,0x6c,0x51,0x98,0xfa,0x6, 0x86,0x7d,0x4d,0x82,0x35,0xa,0x1d,0xdf,0x20,0xf2,0xba,0x11,0x28,0x8,0x2,0xa3, 0x4b,0xe1,0x5c,0x1f,0x72,0x68,0xe0,0xf1,0x30,0xda,0x81,0x4a,0xa0,0xc4,0x84,0xf, 0x1b,0x41,0x6a,0xc6,0xf9,0x1,0xc8,0xdd,0xad,0xb0,0xbb,0x35,0xae,0xb4,0xf6,0x25, 0x38,0x37,0x1d,0x1c,0xfd,0xa8,0x3c,0x1b,0x6a,0x24,0xc,0x33,0x6b,0x61,0xcf,0x53, 0xc8,0xd6,0x7d,0xa9,0x10,0xe8,0xa9,0x28,0x0,0x4e,0xa0,0xc2,0x44,0x10,0x3b,0x3a, 0x1,0x60,0x72,0xf2,0x38,0x3d,0x35,0x3a,0xb0,0xb3,0xe,0xa2,0x57,0xc0,0x51,0x14, 0xf,0x9e,0x28,0x0,0xff,0x5a,0xe4,0xae,0xcd,0xe3,0x75,0x6b,0x49,0x92,0x3c,0x60, 0x16,0x60,0x91,0x80,0xd,0x18,0xcb,0xa,0xe,0x18,0x73,0x2b,0xa0,0xa1,0x18,0xa, 0x2,0x18,0x85,0x85,0x60,0xc9,0x7,0xdb,0x32,0x28,0xaf,0xc7,0xf8,0xf6,0x30,0xc6, 0xca,0xb7,0x33,0x49,0xe2,0xdd,0xb0,0x3,0x26,0x89,0xce,0x30,0x90,0x9b,0x1,0xae, 0x81,0x61,0xb5,0xc2,0xf6,0x5d,0x10,0x39,0x88,0x91,0x6f,0x43,0x4a,0x2b,0xe4,0xda, 0x41,0xbb,0x0,0x63,0xab,0x60,0xde,0x31,0x28,0xad,0xc9,0x9c,0xf,0x1a,0x31,0x60, 0x18,0x88,0x99,0x80,0x41,0xa0,0x20,0xeb,0xa4,0xaa,0xa9,0x80,0xf9,0xc3,0x10,0x6b, 0x44,0x52,0x0,0x5c,0x1,0xa2,0x90,0x6b,0x86,0xd2,0xc9,0x70,0x61,0x11,0x1c,0xfb, 0x22,0x9b,0x7,0x61,0xe0,0x56,0x58,0xa9,0x90,0x4,0xc2,0x68,0xdc,0x47,0x23,0x92, 0xd1,0x26,0x4f,0x17,0x2c,0x6f,0x82,0xa5,0x5e,0xd8,0x55,0x6,0x6a,0x32,0x30,0x9, 0x90,0x18,0x6a,0x23,0x6c,0x3f,0x84,0xc,0xd,0xa4,0xee,0xa7,0x3a,0x60,0x84,0x95, 0x6a,0x73,0x43,0xc0,0x4,0xdc,0x41,0xe3,0x38,0x3a,0xef,0x26,0xcc,0x49,0x25,0xc9, 0x8,0xc3,0xc0,0x39,0xc,0x8b,0x15,0x16,0xd8,0x0,0x33,0xa8,0x28,0x88,0x7a,0xe4, 0x86,0x53,0xc8,0xce,0x6b,0x60,0xcd,0x2c,0xfc,0xa1,0x52,0xd1,0xbb,0x70,0xe7,0x3d, 0xe8,0x95,0xce,0x2e,0x35,0x8,0xb4,0x1,0x7d,0xe3,0x54,0xa4,0xfb,0x91,0x5f,0x5, 0xb,0xaa,0x12,0xa3,0xab,0x14,0x8e,0x14,0x40,0xf3,0x75,0x70,0x64,0x86,0x2,0xd, 0x3c,0x3a,0x6d,0x5d,0x70,0x5e,0x87,0xe8,0xa3,0x61,0x77,0x1c,0x8d,0x1e,0x20,0x90, 0xd5,0x8b,0xa2,0x22,0xb0,0x94,0xc7,0xf7,0xbe,0x67,0x60,0xff,0x45,0x64,0xc8,0x93, 0x11,0x8a,0x84,0xf,0x1d,0x9d,0xd0,0x72,0x10,0xfe,0x2,0x94,0x4,0x70,0x3e,0x50, 0x7e,0x34,0xde,0x42,0x63,0x8,0x88,0x8d,0x3,0xd7,0x81,0xe5,0x12,0x44,0x0,0x44, 0x1d,0xec,0x1b,0x41,0xb6,0xfe,0x92,0xad,0x35,0xb1,0xa1,0x88,0xf2,0x36,0x45,0x94, 0x6f,0x27,0x6c,0xeb,0x80,0x68,0x92,0x20,0x41,0xd2,0x87,0xce,0x16,0x74,0xdc,0xe3, 0xf2,0xa0,0x3,0x8d,0x2b,0xe3,0x7b,0x77,0x29,0xf2,0xab,0xad,0x29,0xf0,0xb4,0x39, 0x35,0x34,0x82,0xf7,0x8c,0x8e,0xfb,0x1a,0x6c,0x32,0xd2,0x4e,0x4d,0x8f,0xa9,0x38, 0x9,0xc,0xa1,0xb3,0xf,0xc8,0x41,0x63,0x16,0x0,0x33,0x5e,0x1,0x6e,0xc3,0xd6, 0x5f,0xb3,0xbd,0x8c,0x63,0x77,0x7,0x55,0xbf,0x6b,0xc,0xcf,0x75,0xe4,0x96,0x16, 0xd4,0x2d,0x50,0x91,0xcc,0xef,0x1,0xe0,0x8c,0xa8,0x8,0x70,0x16,0xa8,0x76,0xe9, 0xe2,0x20,0xd0,0x63,0x3c,0x57,0x34,0x7,0x7d,0x92,0x83,0xcd,0x57,0xc7,0xc4,0xe9, 0xef,0x74,0x8a,0x45,0xc,0x1d,0x39,0x1a,0x56,0xf9,0xfa,0x28,0xbd,0x6e,0x1d,0x77, 0x1b,0x34,0xef,0x87,0xaf,0xc1,0x10,0x90,0x16,0xf7,0x2c,0x15,0xa4,0xaf,0xf5,0x40, 0x2d,0xcb,0x3f,0xde,0xc1,0x15,0xef,0xe2,0x9e,0xc3,0x3f,0xdf,0x2c,0xd6,0x9,0x58, 0xfa,0xd4,0x70,0x8,0xfc,0x9d,0xd0,0x7f,0x17,0xfa,0xba,0xe1,0xd4,0x1,0xf0,0x26, 0x6,0x9c,0xce,0xff,0x5d,0x2e,0xa5,0xa6,0xff,0xb4,0x7a,0xcf,0xeb,0xf3,0x60,0x45, 0x33,0x54,0x5f,0x85,0x59,0xdf,0x43,0xc5,0xfa,0x78,0xa3,0x4,0x90,0x33,0xd1,0xdf, 0x9,0xc0,0xbf,0x1c,0x3,0xbf,0xe0,0xc,0xfd,0xf5,0x83,0x0,0x0,0x0,0x0,0x49, 0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/editdelete_s.png 0x0,0x0,0x3,0xec, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x6,0x0,0x0,0x0,0xe0,0x77,0x3d,0xf8, 0x0,0x0,0x3,0xb3,0x49,0x44,0x41,0x54,0x78,0x9c,0xa5,0x96,0x5d,0x68,0x1c,0x55, 0x14,0xc7,0x7f,0xf7,0xce,0xec,0xec,0x77,0x36,0xc9,0x26,0x9b,0xd0,0x22,0x25,0x26, 0x96,0xe0,0xe7,0x5b,0xc5,0x14,0xac,0x54,0xc5,0xa,0x16,0x54,0x6c,0x89,0x6,0xb5, 0x7d,0x68,0xa3,0x18,0xeb,0xb7,0xd0,0x2a,0xf5,0x41,0x9f,0x44,0xa9,0xa4,0x15,0x89, 0xd5,0x58,0x5b,0x30,0x12,0x4a,0xac,0x16,0x91,0x52,0x51,0x8,0x55,0xda,0x60,0x4c, 0xa2,0xe0,0x37,0x4d,0x4d,0x4c,0x1f,0x42,0x9b,0xb8,0x6b,0xba,0x1f,0x33,0x73,0xef, 0xf5,0x61,0x5b,0x37,0x89,0x4d,0xb2,0x25,0x7,0x86,0x79,0x38,0x67,0xce,0x6f,0xfe, 0xe7,0xdc,0x7b,0xcf,0x15,0xc6,0x18,0xe6,0xdb,0x37,0x23,0x67,0xbf,0x8e,0x47,0x9d, 0xdb,0xc4,0xff,0x3c,0x45,0x33,0x6,0x94,0x6,0xa5,0x34,0x53,0xd3,0xe9,0x99,0xa9, 0xe9,0xa9,0x67,0x5a,0xef,0xb9,0xf9,0xbd,0xcb,0xc5,0xda,0xb,0xe4,0xe0,0xba,0xa6, 0x1a,0xac,0x5,0x92,0x17,0x14,0x64,0xf3,0x9a,0xcc,0x4c,0x1,0xa4,0x8c,0x25,0x12, 0xe1,0xb7,0xe,0x7d,0xd2,0x9f,0x79,0xf8,0xbe,0x5b,0x7b,0xe7,0xc7,0xcb,0x85,0x0, 0xb,0xd9,0x25,0xbd,0x42,0x80,0x94,0x2,0x81,0x61,0x45,0x7d,0x6d,0xb4,0xf1,0xea, 0xc6,0x3d,0x7,0xfb,0x4e,0x6c,0x5a,0x36,0x40,0x8,0xb0,0x25,0xd8,0xb6,0xc4,0xb6, 0x2c,0x6c,0x4b,0x52,0x11,0x82,0xa6,0x55,0x75,0x2b,0x9a,0x57,0x37,0x1d,0xec,0x3b, 0x36,0xb8,0x7d,0x79,0x0,0x40,0xa,0xb0,0x24,0xd8,0x96,0x40,0x8,0x81,0xe7,0x6b, 0x42,0xe,0xd4,0xa7,0x2a,0x43,0xa9,0x54,0xed,0x9e,0xf,0xe,0xf7,0xb7,0x5e,0x8a, 0x5f,0xb0,0x7,0x4b,0x51,0xa4,0x0,0xcb,0x96,0xd8,0xb6,0xc5,0xc9,0x1f,0xce,0x50, 0x28,0x78,0x28,0x6d,0x50,0xca,0x44,0x3c,0x6d,0xed,0xed,0xea,0xfd,0x36,0xd4,0xbe, 0xb9,0xe5,0xc0,0x15,0x2b,0x98,0xa3,0x42,0x8,0x92,0x95,0x31,0x6e,0x6c,0x6e,0xa0, 0x71,0xd5,0x4a,0xaa,0xab,0x2a,0x49,0x54,0xc4,0x89,0x46,0xe3,0x35,0x3f,0xfd,0x38, 0x74,0x4b,0x2c,0x16,0x8b,0x97,0xa5,0xc0,0xfc,0xda,0xf,0xb6,0x83,0x68,0x58,0x3, 0x52,0x22,0x0,0x21,0x41,0x5a,0x20,0x2f,0xcc,0x60,0xd,0x1d,0x47,0x39,0x2b,0xb1, 0x2b,0xae,0x42,0x3a,0x82,0x60,0xb0,0x94,0x76,0x69,0x5,0xa7,0x7,0xa0,0x7b,0xb, 0xf4,0x3c,0x85,0x19,0x1f,0x29,0x7d,0x28,0x40,0xb8,0x39,0xe4,0x57,0xfb,0x9,0x1d, 0x7a,0x9a,0xe4,0x91,0xdd,0x44,0xd3,0xe3,0x4,0x83,0x36,0x8e,0x5d,0x2e,0x60,0x6c, 0x18,0xf3,0xfe,0xa3,0x70,0x6e,0x14,0x46,0x7,0xa0,0x73,0x23,0xe6,0xcf,0x21,0x94, 0xd2,0xe4,0xff,0xc9,0xe2,0xf6,0xbe,0x8a,0xf8,0x68,0x17,0x6a,0x72,0x2,0x67,0xf8, 0x4b,0x2a,0x8f,0xbe,0x4e,0xd8,0xcb,0xe0,0x38,0x81,0x32,0x1,0x89,0x7a,0xb8,0xfe, 0xae,0x52,0xa9,0xa6,0x26,0xf0,0xbb,0x1f,0x23,0xff,0xfd,0x31,0xa,0x9f,0xbf,0x8d, 0x38,0xfa,0x26,0x7e,0xce,0xc3,0x77,0xc1,0xb,0x26,0xd1,0xab,0x5b,0x8,0x44,0xe2, 0x38,0x81,0xd2,0x16,0x5d,0xbc,0x7,0x89,0x7a,0xc4,0xc6,0xdd,0x98,0xcc,0x24,0xe6, 0x54,0xf,0xbe,0x2,0xff,0xf7,0x41,0xfc,0xae,0x76,0x48,0x67,0x8a,0xc9,0x3d,0xf0, 0x5d,0x50,0x6d,0x3b,0x61,0xdd,0x43,0x4,0x82,0x11,0xac,0x5c,0xa6,0x4c,0x0,0x40, 0xac,0x1a,0xda,0xf6,0xa1,0x23,0x29,0xfc,0xe3,0xfb,0xf1,0x73,0x59,0x54,0x7a,0xbc, 0x98,0xb8,0x0,0x7e,0x38,0x89,0x79,0xe4,0x65,0xc4,0xdd,0xdb,0xb0,0xd,0x68,0x63, 0xb0,0xac,0x52,0x61,0xca,0x5b,0xa6,0xd1,0x6a,0xf4,0xed,0x1d,0xa8,0xd4,0xb5,0xf8, 0x2e,0xa5,0x47,0xd9,0xb0,0x76,0x33,0xf6,0x1d,0x6d,0x58,0x96,0x85,0x25,0x25,0xb6, 0x94,0x48,0x59,0x3a,0x26,0xcb,0x2,0x18,0x37,0x87,0x7f,0xea,0x33,0xfc,0x89,0xd1, 0xe2,0x9f,0x5f,0x2c,0x8b,0x97,0xd3,0x78,0xc3,0x3,0x98,0x89,0x33,0x8,0x21,0x8a, 0x2b,0x4b,0x8,0x84,0xb8,0x2,0x5,0xa6,0x90,0x23,0xdf,0xfb,0x1a,0x85,0x3,0x3b, 0xf1,0xce,0x9f,0xc7,0x2f,0x80,0x92,0x31,0x7c,0xe5,0xa0,0xf2,0x9a,0xc2,0xc8,0x20, 0x7f,0xef,0xb8,0x17,0xf5,0xcb,0x70,0xf1,0xa8,0x45,0x20,0x67,0x65,0x5d,0x14,0x60, 0x72,0x33,0xb8,0x5f,0xbc,0x43,0xe1,0xf0,0x1b,0x78,0x59,0xb7,0xd8,0xcc,0x70,0xd, 0xce,0xa6,0xe7,0x70,0x36,0x6c,0x2d,0xf6,0xc0,0x5,0x77,0xec,0x2c,0xd3,0xbb,0x3a, 0x70,0x7,0x4f,0x22,0x98,0x3b,0x5f,0x16,0x6d,0xb2,0xfa,0xf9,0x4,0xf9,0x4f,0x3b, 0xf1,0x72,0xee,0x7f,0x65,0x89,0xb4,0xbf,0x82,0xb3,0x61,0xb,0x4e,0xc1,0x25,0x37, 0x99,0x21,0xdf,0xd7,0x53,0x54,0xf5,0xdd,0x10,0x74,0xbf,0x4b,0x55,0xc3,0x35,0x8, 0x9c,0xf2,0x14,0x58,0x37,0xac,0xc7,0xba,0x73,0x1b,0x8a,0x30,0x3a,0x5c,0x43,0xf4, 0xc9,0xbd,0x84,0xee,0xef,0x80,0x70,0xc,0x99,0xa8,0xa6,0xea,0xa5,0x4e,0x22,0x6d, 0x3b,0xd0,0x44,0xb0,0x9b,0x6f,0x22,0xbe,0x75,0x3b,0xb2,0xa6,0x16,0x33,0x4b,0xc5, 0xa2,0xa,0x44,0xc0,0x21,0xf4,0xc0,0xb,0xb8,0x9e,0x80,0x8a,0x14,0xce,0xfa,0xd6, 0xb9,0xfe,0x44,0x35,0x89,0xc7,0x5f,0xc4,0x84,0xaa,0x70,0xd6,0xae,0xc3,0x59,0xd3, 0x82,0xd1,0x6,0x41,0x69,0x15,0x2d,0xb9,0xf,0x4c,0xc0,0x21,0xf2,0xe0,0xf3,0x18, 0xd,0x5a,0x3a,0xcc,0x1f,0xe1,0x56,0xaa,0x9e,0xc4,0x13,0xcf,0xa2,0x83,0xc1,0x59, 0xbe,0x32,0x0,0xa7,0xff,0x3a,0x87,0x23,0xc0,0x37,0xc5,0x31,0x69,0xc,0x68,0x7d, 0xf1,0x6d,0x0,0x3,0xbe,0x32,0x68,0x63,0xd0,0x5a,0xa3,0xd3,0x17,0x30,0x6,0x8c, 0x31,0x4c,0xa5,0xb3,0x4b,0x2,0x3e,0xdc,0xd7,0xf5,0xf1,0x6f,0x4b,0xa9,0x5b,0xcc, 0x26,0xc6,0xfe,0x18,0x4,0x10,0x97,0xbb,0xb6,0x0,0x24,0x93,0xc9,0xf8,0x72,0x0, 0x0,0x75,0x75,0x75,0xd9,0x7f,0x1,0x11,0x4a,0x81,0xb3,0x85,0x2e,0xa3,0xc7,0x0, 0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/reload.png 0x0,0x0,0x3,0x8e, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0x43, 0xbb,0x7f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0xd,0x0,0x0, 0xb,0xd,0x1,0xed,0x7,0xc0,0x2c,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd3,0x9,0x9,0x13,0x0,0x16,0xc2,0xd2,0x41,0xa2,0x0,0x0,0x3,0x1b,0x49,0x44, 0x41,0x54,0x78,0xda,0x6d,0x93,0xcb,0x6b,0x5c,0x65,0x18,0xc6,0x7f,0xdf,0x77,0xbe, 0x99,0x39,0x33,0x9d,0x4b,0x66,0x26,0xe4,0xa6,0x89,0x36,0x9,0x46,0x43,0x35,0x90, 0x10,0xaf,0x5d,0x48,0xa1,0x5a,0x8a,0xdd,0x44,0x94,0x2e,0xa,0x2e,0x44,0xda,0x6e, 0x5c,0xba,0x12,0x77,0xfa,0x27,0xb8,0x19,0x2c,0x2e,0x8a,0x44,0x94,0xd9,0x48,0x17, 0xb6,0x14,0x8c,0x97,0xaa,0x64,0x9a,0x9a,0x45,0x25,0x66,0x92,0xd8,0x36,0xb7,0x49, 0xa6,0x67,0x6e,0x67,0xe6,0xf4,0x5c,0xe6,0x9c,0xe3,0x22,0xa2,0x8c,0xf8,0xc2,0xb, 0xef,0xe2,0xfd,0x3d,0xef,0x3,0xf,0xaf,0xe0,0x7f,0x6a,0xf6,0xf2,0xaa,0xe,0xc1, 0x3c,0x61,0x30,0x9,0xa1,0x80,0x60,0x53,0x79,0x46,0x69,0x46,0x16,0x3b,0x85,0x42, 0xa1,0x67,0x57,0xfc,0x7,0x4c,0x82,0xf8,0x10,0x2d,0x72,0x49,0x46,0xd3,0x99,0xd1, 0xac,0x47,0x22,0xd2,0xe5,0x8f,0x43,0x9d,0xc0,0x69,0x34,0x85,0x6f,0x7d,0xa9,0xfc, 0xda,0xc7,0xc7,0xcd,0xcf,0xb7,0x17,0x17,0x17,0xc3,0x1e,0x81,0xd9,0xcb,0xab,0x43, 0x8,0xf9,0xdd,0xe0,0x40,0x7e,0xea,0x9d,0x53,0x19,0x4e,0x3e,0xa3,0x91,0x4e,0x68, 0x0,0x38,0x5e,0xc8,0xca,0x86,0xc5,0x95,0x9b,0x6d,0xca,0xf7,0xe,0x1f,0xc6,0xfd, 0xfd,0xb7,0x6,0x1f,0x7e,0xb6,0x54,0x2c,0x16,0x43,0xed,0x8,0xfe,0x2d,0x89,0x90, 0xb7,0x66,0xa7,0x47,0xa6,0x3e,0x7a,0xfb,0x18,0x13,0x43,0xa,0xcb,0x76,0xd9,0x3b, 0x34,0xb1,0x3d,0x8,0x42,0xc1,0x40,0x5f,0x84,0x57,0x9f,0xd5,0x69,0xd9,0x5a,0x62, 0x6d,0x5f,0x9c,0xeb,0xaa,0xfc,0xd5,0xb9,0x71,0x61,0x6a,0x0,0xc3,0xf3,0x17,0x3f, 0x19,0x1c,0x1c,0x38,0xf7,0xfe,0x59,0x1d,0x81,0xc4,0x34,0x1b,0xf4,0xa7,0x34,0xa6, 0x8e,0xe7,0x51,0xa2,0x4b,0xcd,0xf4,0x31,0x1f,0x85,0x38,0x6e,0xc8,0xd3,0xa3,0x31, 0x36,0xe,0xb4,0x44,0xa5,0x25,0x52,0xe3,0xf1,0xf5,0xeb,0xda,0xec,0xa5,0x92,0x8e, 0x16,0xfb,0xe2,0xcd,0x93,0x19,0x3d,0x9d,0x80,0x18,0x6d,0x9e,0x3f,0x31,0x42,0x2a, 0xa9,0x3,0x10,0xd7,0xa3,0x34,0xac,0x80,0x5d,0xc3,0xc1,0x72,0x7c,0x2c,0x3b,0x20, 0x13,0xef,0x72,0x7b,0x33,0x9c,0xf2,0xdd,0xf6,0x55,0x5,0xcc,0x47,0xf5,0x64,0x26, 0x1b,0xf7,0xa9,0x1a,0x1d,0x5e,0x7f,0x6d,0x8c,0x20,0xc,0xb9,0x5e,0x6a,0xb0,0x5d, 0x75,0x48,0xc4,0x24,0xb6,0x1b,0x12,0x8b,0x4a,0x72,0x29,0x8d,0x9f,0x36,0x8f,0xb1, 0xb4,0x9e,0x45,0xc6,0xc2,0x64,0xcb,0x9d,0x78,0x59,0x1,0x93,0xb9,0xa4,0xa4,0xda, 0xea,0xf2,0xd4,0x70,0xc,0x80,0xd5,0x2d,0x8b,0xf2,0xae,0x7d,0xe4,0x40,0xb6,0x99, 0x1e,0xcd,0xf0,0xd2,0x89,0x3c,0x0,0x95,0x47,0xb0,0xb4,0xe,0x32,0xa2,0x23,0xa4, 0x9a,0x54,0x80,0x70,0x7d,0x8d,0x7,0x86,0xc6,0x70,0x2e,0x2,0xc0,0x76,0x4d,0x71, 0xb3,0xdc,0xc7,0x2b,0xe3,0x6d,0x2e,0x9c,0x19,0xef,0xc9,0xdd,0xf,0x42,0x84,0x10, 0x8,0x40,0x10,0x4a,0x9,0xc1,0x66,0xd3,0xa,0x59,0x33,0xfa,0xf9,0x79,0xf3,0x28, 0xb6,0xd3,0xcf,0x29,0x46,0x72,0x8a,0x95,0xdd,0x3e,0x6a,0x4d,0xbb,0x47,0xe0,0xa0, 0xe6,0xa2,0x24,0xf8,0x5d,0x7,0x11,0x58,0x3b,0x4a,0x79,0x46,0xa9,0xeb,0x24,0x9a, 0x52,0xc,0x65,0x36,0x8c,0x24,0x37,0x56,0x1d,0x4e,0xcf,0xc4,0xf8,0xf4,0x5d,0x8d, 0x43,0xa3,0x45,0x2e,0x93,0xee,0x11,0xa8,0x99,0x1e,0xba,0x52,0xb4,0xec,0x7a,0x27, 0xe7,0xaf,0xdd,0x91,0x33,0xb2,0xd8,0x11,0xbe,0x75,0x45,0x3a,0x15,0xc6,0xd2,0x2d, 0xbe,0xbe,0x65,0x71,0x6d,0xd9,0xc4,0x76,0x3,0x6,0xf2,0x69,0xbc,0x6e,0xc8,0xf, 0x77,0x2d,0x76,0xd,0xf,0xdb,0xd,0xf0,0x1c,0x1b,0xe9,0x54,0x88,0x74,0xab,0xdf, 0xc,0xa8,0xfb,0x7b,0x2,0xe0,0x85,0xf7,0xbe,0xcd,0xfa,0x91,0xfc,0xf2,0x8b,0xd3, 0xfd,0x13,0xb9,0x4c,0xf4,0x9f,0x6b,0x51,0xd,0x5c,0xff,0x68,0xe,0x82,0x90,0x88, 0x12,0x54,0xeb,0x2e,0xbf,0xdc,0xad,0xee,0x8c,0x38,0x37,0xce,0xf,0x6a,0x7f,0x2e, 0x6b,0x0,0x67,0xe7,0xe2,0x76,0x3d,0x78,0xec,0xda,0x83,0x9a,0xf6,0x46,0x52,0x97, 0xd9,0xc7,0xfb,0x63,0xc4,0xa3,0x92,0x88,0x12,0xe8,0x91,0x7f,0x7b,0x6b,0xaf,0xc3, 0xed,0x35,0x63,0x67,0xd8,0xfb,0xf1,0xe2,0x90,0x2c,0x97,0x0,0x4b,0x3,0x58,0x59, 0x59,0xe1,0xcc,0x5c,0xb2,0xde,0xf4,0x52,0x5f,0x6d,0xd7,0x55,0x6a,0xab,0xe2,0x4e, 0xd9,0x8e,0x1b,0xb5,0xbd,0x80,0x46,0xdb,0xe5,0xde,0xbe,0xc9,0xaf,0xbf,0x37,0x3b, 0x7b,0xfb,0x7,0xc5,0x21,0xef,0xfb,0xf,0xfe,0x86,0x5b,0x85,0x42,0xa1,0xf7,0x1b, 0x17,0x16,0x16,0xc8,0x66,0xb3,0xd1,0x6d,0x77,0x62,0xac,0x2d,0x9f,0x38,0x25,0x54, 0xe2,0x49,0xa1,0xc5,0x5c,0x11,0x58,0x3b,0x39,0x7f,0xed,0x4e,0x5f,0x50,0xae,0x9a, 0xa6,0x69,0x0,0x9d,0x62,0xb1,0x8,0xc0,0x5f,0x18,0x2,0x60,0x3d,0x27,0xb5,0x5a, 0x5f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/folder.png 0x0,0x0,0x2,0x85, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x4,0x73,0x42,0x49,0x54,0x8,0x8,0x8,0x8,0x7c,0x8,0x64,0x88, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xd,0xd7,0x0,0x0,0xd,0xd7, 0x1,0x42,0x28,0x9b,0x78,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66, 0x74,0x77,0x61,0x72,0x65,0x0,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61, 0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x0,0x0,0x2,0x2,0x49,0x44, 0x41,0x54,0x78,0xda,0xed,0x97,0x3d,0x6b,0x54,0x51,0x10,0x86,0xdf,0x77,0xce,0xcc, 0xbd,0xf9,0x30,0x26,0x4d,0x52,0x28,0xb6,0xd1,0xca,0x46,0x5,0x7b,0xb1,0xb1,0xf, 0x62,0x25,0xda,0xd8,0xf8,0x3,0xec,0xec,0xfc,0x9,0xb1,0xb0,0xb3,0x15,0xad,0x6c, 0xb4,0xb6,0x5c,0xb0,0x48,0x21,0x48,0x20,0x4d,0x1a,0x63,0xdc,0x25,0x9b,0x64,0x93, 0xcd,0xfd,0x18,0xef,0xc0,0xa2,0x45,0x52,0x26,0x67,0x9b,0x3c,0xf0,0x72,0x39,0x70, 0xe0,0x19,0xde,0x39,0xcd,0xa5,0xbb,0x63,0x9a,0x48,0x97,0xcb,0x1,0xa6,0x8a,0x62, 0xc2,0xb3,0xb7,0xdb,0x5f,0x5b,0xc7,0xc3,0x53,0x17,0x12,0x6,0x55,0xe5,0x4f,0xde, 0xbf,0xbc,0xf1,0x5,0x17,0xc0,0xbf,0x47,0xf8,0x74,0x7d,0xdb,0x1f,0xdd,0x99,0x3d, 0x75,0xa1,0x7f,0xd0,0xa0,0xb7,0x79,0x72,0x2c,0xe0,0xda,0xbb,0x17,0xd7,0x3f,0x5f, 0xe8,0x0,0xf,0x6e,0xcf,0xe0,0x2c,0x86,0xa3,0x16,0xdf,0xb7,0x2a,0xd4,0x8d,0xe3, 0x3c,0x98,0x9f,0x91,0x9f,0xeb,0xcf,0xaf,0xdd,0x9c,0xac,0xe0,0x3f,0xe3,0xaa,0xc5, 0x59,0x94,0x6,0xdc,0x5f,0x35,0x9c,0x17,0xdf,0x7e,0x9c,0xac,0x9e,0x7a,0x3,0xc1, 0xd6,0xef,0x23,0xe4,0x21,0x1,0x13,0x78,0xef,0x55,0xef,0xd7,0xb8,0xaa,0x57,0x30, 0x5,0x4a,0xd3,0x1d,0x6d,0x1d,0xcb,0xaf,0x1f,0xdf,0x3a,0x10,0xa1,0xb8,0xfb,0x1c, 0xf2,0xd0,0xb8,0xe3,0xe8,0xcd,0xc7,0xcd,0x65,0x2d,0x34,0x35,0x9f,0x7a,0xfb,0xa3, 0xee,0x9b,0x44,0x90,0x65,0x0,0x77,0x34,0xe3,0xaa,0x9,0xe7,0x8c,0x16,0x85,0xd6, 0x29,0x29,0xcd,0xc,0x42,0x47,0xe,0xc2,0x52,0xb7,0x64,0xb8,0xb5,0x50,0xad,0x34, 0x25,0x96,0x66,0x0,0x5a,0xe4,0x81,0xa8,0x6a,0x67,0xb8,0xb5,0x30,0x1d,0x27,0x11, 0x29,0x2c,0xb9,0xbb,0x20,0x17,0xe1,0xc,0x77,0xbc,0x81,0xe3,0x94,0x30,0x6f,0x4a, 0xef,0x40,0x16,0x48,0x74,0x4e,0x86,0x3b,0x1a,0x38,0x12,0xe2,0x4a,0xa1,0x44,0xdb, 0x32,0x93,0x9f,0x10,0x82,0xe1,0xd6,0x42,0x65,0x94,0x24,0xe,0x44,0xd3,0x30,0x57, 0x1,0x8,0x67,0xb8,0xd5,0xa,0x3d,0x14,0xa1,0x98,0x92,0xc2,0x6c,0x3,0x30,0x9c, 0xe1,0xd6,0x52,0xd3,0xbe,0x10,0x2c,0x95,0xac,0x88,0xac,0x2b,0x8,0xb7,0x9a,0x72, 0x28,0x2,0x9a,0x81,0x20,0x32,0x36,0x0,0x86,0x5b,0x4b,0x93,0x3d,0x80,0x52,0x24, 0x0,0x9e,0x71,0x5,0x14,0x29,0xcd,0xf7,0xd4,0x34,0xd,0xea,0xc6,0x69,0x46,0x3a, 0xf2,0xc0,0x9,0x9a,0x64,0x10,0xd,0xf4,0x9b,0xd6,0x69,0x89,0xf4,0x5c,0xd,0x44, 0x28,0x2c,0x8d,0x7d,0x35,0x4b,0x7f,0x78,0xd2,0x88,0x29,0xe8,0x20,0x32,0x96,0x20, 0xe1,0x56,0x50,0x76,0x1d,0xce,0x51,0xc5,0x54,0x35,0xf9,0x6,0x70,0x8,0xc3,0x1d, 0xd,0xec,0x2c,0xcd,0x81,0xbb,0xa3,0x56,0xdb,0xd6,0x91,0x8b,0xc5,0xb9,0x24,0xe1, 0xd6,0xa5,0x7a,0xb8,0xb1,0xb8,0x32,0x3b,0x5a,0x98,0xd5,0x5,0x64,0x64,0xef,0x70, 0x5c,0xed,0xf,0xe,0x37,0x8,0x20,0xb2,0xd6,0xe5,0x6e,0x97,0xab,0xc8,0xc3,0xb0, 0x4b,0xaf,0xcb,0x7,0xba,0x3b,0xd8,0x81,0x29,0xe0,0x1d,0x97,0x7f,0xc7,0x7f,0x1, 0x47,0x7c,0xbd,0x3,0x18,0x62,0x7b,0xb9,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, 0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/playlist.png 0x0,0x0,0x4,0xb8, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x2,0x0,0x0,0x0,0x6f,0x15,0xaa,0xaf, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xd,0x12,0x0,0x0, 0xd,0x3a,0x1,0xe8,0xdd,0x99,0xde,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd5,0x7,0xe,0x3,0x1d,0x23,0x83,0x95,0x2f,0x28,0x0,0x0,0x4,0x45,0x49,0x44, 0x41,0x54,0x38,0xcb,0xa5,0x95,0x4b,0x6c,0x54,0x65,0x14,0xc7,0xcf,0xfd,0xee,0x63, 0xee,0x3c,0x3a,0x33,0x77,0x3a,0xed,0xb4,0xb6,0xd4,0x32,0xc3,0xa3,0x8,0x14,0xa3, 0xb,0x2d,0x20,0x86,0x90,0x50,0xc4,0x57,0x8c,0x18,0x8d,0x89,0x6c,0x49,0xc0,0x5, 0x3b,0x17,0xae,0xdc,0xb9,0xd2,0xc4,0xc4,0x68,0xd2,0xb8,0x50,0x62,0x42,0x6c,0x48, 0x35,0x6,0x9f,0x11,0xc2,0x43,0x52,0x68,0x43,0x91,0x16,0xb0,0x53,0x52,0x1e,0x6d, 0xa7,0x33,0xd3,0xe9,0xc,0xf3,0xe8,0xbd,0x73,0xbf,0xd7,0x71,0x31,0xb5,0x33,0x25, 0xb5,0x1b,0xcf,0xee,0x4b,0xce,0xf9,0x7d,0xdf,0xf9,0x9f,0xf3,0x9d,0xa3,0xe4,0xf3, 0x79,0x58,0xd7,0x5c,0x57,0x20,0xa2,0x69,0x6a,0xeb,0xf8,0xa8,0xaa,0xaa,0x1,0x80, 0x94,0x98,0xce,0xda,0xf9,0x7c,0xd5,0xb6,0x59,0xa5,0xc2,0x80,0x28,0x9c,0xa3,0xae, 0xa9,0x28,0x41,0x37,0x34,0x5d,0x23,0x13,0xb7,0x17,0xfa,0x9e,0x6b,0xdd,0xbe,0xad, 0x79,0x1d,0x96,0x6,0x0,0x93,0x53,0x5,0xc7,0x21,0xf1,0x78,0x34,0x1c,0x32,0x7d, 0x3e,0x5d,0xd3,0x88,0x4a,0x94,0x46,0x27,0xc6,0xc9,0xc8,0xb8,0x2,0x90,0xdf,0xbe, 0x2d,0xb2,0x1e,0x68,0x66,0xb6,0x72,0xe4,0x8d,0x9d,0xaa,0x4a,0xd6,0xf4,0x60,0x4c, 0x8,0x29,0xbc,0x81,0xf6,0xa1,0x9f,0x93,0x73,0xa9,0x72,0x5b,0xcc,0xdf,0xbb,0x23, 0xba,0x36,0x88,0x10,0x75,0x85,0x32,0x33,0x57,0x9a,0xb8,0x9d,0x5,0x9,0x8,0xa8, 0x80,0x2,0x0,0x9a,0x4e,0xa2,0x11,0xb3,0xbb,0x6b,0xa9,0x7f,0x4f,0x3c,0x18,0x34, 0xbf,0xfe,0x76,0xa2,0x58,0x62,0x2f,0xec,0x6e,0x7f,0x1c,0x84,0x8,0x86,0x51,0x17, 0xf2,0xe6,0x78,0xe6,0xd0,0xc1,0x4d,0x8f,0xa5,0xd6,0x68,0xad,0x31,0xeb,0x41,0x36, 0x80,0x57,0xe6,0xf7,0xad,0x66,0x69,0xae,0xcb,0x1b,0x41,0x80,0xb0,0x26,0x85,0x31, 0x51,0xa9,0x50,0xdb,0xe1,0xf9,0x82,0xe3,0x8f,0x6c,0xba,0x91,0x4,0xc4,0xf9,0x17, 0xf7,0xd4,0x59,0x9a,0x94,0x60,0xe8,0x6a,0x3d,0xe2,0x5f,0xc8,0xd9,0x5f,0xa6,0x4a, 0x25,0x57,0x48,0x54,0x55,0x45,0x8,0x34,0x3d,0x9a,0xd7,0xab,0xf9,0xfd,0xc6,0x93, 0x1b,0xbc,0x37,0xc6,0xaf,0x76,0x75,0x45,0xc6,0xc6,0xb,0xcf,0xee,0x8a,0x6,0x2, 0x7a,0x5d,0xa3,0x46,0x23,0x44,0x1,0x0,0x44,0x2c,0x16,0xab,0xef,0xbe,0xbd,0x13, 0x0,0x38,0x17,0x3,0x3,0xa7,0xa9,0xc7,0x50,0x21,0x64,0xe8,0xc1,0x9e,0x9e,0x44, 0x69,0x89,0xee,0x3f,0xb0,0xf1,0xc2,0x79,0x61,0x9a,0x6a,0x83,0xd8,0xa,0x48,0x29, 0x6b,0x7,0x4a,0x85,0x61,0xa8,0x0,0xb0,0x90,0xb3,0x5b,0x5a,0xfc,0x0,0xc0,0x38, 0x5e,0xf9,0xcb,0xfe,0xf2,0xf4,0x45,0xbb,0xa5,0xa3,0x6a,0x8b,0x6a,0xb1,0xfa,0xfe, 0xe1,0x2d,0x5d,0x89,0xe7,0x29,0x47,0xca,0x84,0xa6,0xd5,0xb,0x4d,0x74,0x8d,0x50, 0x26,0x96,0xf5,0x41,0xa8,0xe9,0x63,0x3b,0x2c,0xe0,0x37,0x0,0x40,0x22,0x64,0xb, 0x8,0xa0,0x7d,0x74,0xe2,0x5e,0xf2,0x87,0xcb,0xfd,0xaf,0x19,0xc9,0xe4,0x7d,0x21, 0x81,0x32,0x29,0xe4,0xea,0x54,0x74,0x9d,0xb8,0x2e,0x5f,0x7e,0x9e,0x46,0x28,0x93, 0x35,0x62,0xed,0x36,0x97,0x4a,0xc6,0x68,0x55,0x80,0x4a,0x40,0xd7,0x24,0x13,0xc4, 0xe1,0x92,0x32,0xe9,0x72,0x44,0x42,0x18,0xab,0xc3,0x8,0x0,0x8,0xb9,0x1c,0x2c, 0x10,0xb8,0x90,0x0,0x40,0x14,0x85,0x31,0x1,0x0,0x33,0x69,0x9a,0x49,0x3d,0xb4, 0x11,0x8e,0x7f,0xda,0xbb,0xf1,0x9d,0xc3,0x3f,0x5d,0xb6,0xac,0xa0,0xe9,0xba,0x9c, 0x72,0x54,0x75,0xbd,0x5c,0xa6,0xab,0x40,0x28,0x5,0x17,0x92,0x9,0x74,0x39,0xa, 0x1,0x0,0x10,0xc,0x7a,0x1e,0x15,0xab,0x2e,0x93,0x77,0xa6,0xed,0x6b,0x97,0x7e, 0xdb,0xb3,0xdb,0x9e,0x1d,0xfc,0xf1,0xb3,0x13,0xd7,0x30,0xf7,0xa0,0x3b,0x91,0x90, 0x8,0x55,0x2a,0xc3,0x2d,0xc1,0xfb,0x33,0xa5,0x55,0x20,0x2b,0xec,0x49,0xa5,0x97, 0x5c,0x8e,0x94,0x23,0x13,0x12,0x0,0xac,0xb0,0xb9,0xb0,0xe8,0x5c,0x1a,0x2d,0x8c, 0xc,0x8f,0xfe,0x39,0x36,0x72,0xf2,0xe8,0xbc,0x47,0x97,0xd7,0x6f,0xa,0xcb,0x9d, 0x7b,0xa6,0xaf,0x2f,0x1c,0x6d,0x4a,0xa5,0x4a,0xde,0x26,0xef,0xc3,0x39,0x67,0x15, 0x28,0x11,0xf,0xdd,0xfa,0x3b,0x47,0x39,0x52,0x8e,0x5c,0x2a,0x8c,0x9,0x2e,0xf1, 0x51,0x91,0x7e,0x37,0xf8,0xc7,0x99,0xc1,0xcf,0xdb,0x37,0x3a,0x47,0x8e,0x91,0xe3, 0x1f,0xea,0x5f,0xc,0xb0,0x3,0x7d,0xbd,0xa1,0x68,0xac,0x33,0xde,0x3a,0x79,0x2b, 0xc5,0x24,0x64,0xca,0xc0,0xb9,0x6c,0x7c,0x91,0xb9,0x90,0x2d,0x53,0x86,0x2e,0xc3, 0xe6,0x58,0x70,0x6a,0xfa,0x11,0xe5,0x98,0x48,0x58,0xc3,0x17,0x86,0xfa,0xf,0xe7, 0xae,0xc,0xd9,0x67,0xbf,0x5a,0x1a,0x3c,0x53,0x7a,0xc2,0xd0,0xdf,0x7c,0xef,0x28, 0xe5,0x88,0x84,0xe8,0x1e,0x23,0x33,0x5f,0xb2,0x3a,0x63,0x23,0xd7,0xb3,0x75,0x10, 0x0,0xe8,0x1a,0x56,0x1c,0x4e,0x39,0x46,0x63,0xa1,0x3b,0xc9,0x45,0xca,0x70,0xe7, 0xae,0x8e,0xee,0xee,0xa7,0x55,0xbe,0x44,0x29,0x7e,0x73,0x2a,0xd7,0x24,0x8c,0x63, 0x27,0x4f,0x2,0xf1,0x4f,0x8c,0xcd,0xe,0x9f,0x9f,0xac,0x54,0x5c,0xc7,0xe5,0xbe, 0x90,0xef,0xc6,0x5d,0x9b,0x71,0x59,0xef,0xec,0x1d,0xdb,0x22,0x13,0xb7,0x32,0x9b, 0x7b,0xda,0x24,0x28,0xb9,0x12,0xab,0x32,0x24,0x9a,0xfa,0xf2,0xeb,0x87,0x3e,0xf9, 0xf8,0xdc,0xe8,0x70,0xba,0x5c,0x79,0x6a,0xef,0xbe,0x83,0x85,0x45,0xbf,0x53,0x4d, 0xb7,0x74,0x46,0xda,0x12,0x6d,0x4c,0x42,0xad,0x8b,0x9b,0xda,0x5b,0x7f,0x3f,0xf7, 0xf0,0xd5,0x97,0x12,0xcb,0xa0,0x8e,0x8e,0xc0,0xc5,0xab,0xd3,0xe5,0xa,0xb5,0xcb, 0x8e,0x53,0x5e,0x9a,0xbe,0x5f,0x88,0xb5,0x87,0xfa,0xf6,0x6d,0x7e,0x6b,0xe6,0x3, 0x2b,0x6a,0x75,0x74,0xb7,0x34,0xb7,0x85,0x38,0x28,0x94,0x23,0x65,0x68,0x3b,0x7c, 0x31,0x53,0x74,0xa,0x25,0xcb,0x94,0x9d,0x51,0x7d,0x47,0x6f,0xc,0x0,0x94,0x95, 0x99,0x9d,0xcd,0xda,0xba,0x41,0xac,0xb0,0xc9,0xb9,0xfc,0xfe,0xd7,0xb9,0xbd,0xfb, 0xb7,0x52,0x8e,0xb5,0x52,0x52,0x8e,0x2e,0x95,0x99,0x74,0x29,0x3d,0x5b,0xf0,0x12, 0xd6,0x1a,0x22,0x5b,0x13,0xe1,0xd,0x9d,0x81,0x95,0x2f,0xb2,0x3c,0xb3,0x97,0x7, 0x4d,0xab,0x6f,0xa5,0xbf,0x9b,0x9b,0x94,0xdc,0xa2,0x63,0xf8,0x3c,0xf9,0xbc,0xf3, 0xe0,0x5e,0xce,0xad,0xd8,0x61,0x1f,0xc4,0x37,0xf8,0xfb,0x5f,0x89,0xfd,0xd7,0x16, 0x50,0xd6,0xdc,0x22,0x8c,0xc9,0x53,0x83,0x77,0x23,0x61,0x4f,0x2c,0x6a,0xf4,0x6c, 0xb1,0xac,0xb0,0xb9,0xfe,0xa6,0x51,0x55,0x55,0x29,0x16,0x8b,0xf0,0xbf,0x4d,0x55, 0xd5,0x7f,0x0,0x3b,0xf6,0x46,0xd,0xfe,0x2d,0x62,0x57,0x0,0x0,0x0,0x0,0x49, 0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/music.png 0x0,0x0,0xd,0x99, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x30,0x0,0x0,0x0,0x30,0x8,0x6,0x0,0x0,0x0,0x57,0x2,0xf9,0x87, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd5,0x2,0x14,0x14,0x15,0x26,0xd5,0xb,0xdc,0xd1,0x0,0x0,0xd,0x26,0x49,0x44, 0x41,0x54,0x38,0xcb,0xed,0x9a,0x79,0x6c,0x5c,0xd7,0x75,0x87,0xbf,0xb7,0xcd,0xce, 0x19,0xe,0x67,0xe1,0x22,0x8a,0x22,0xc5,0x45,0x14,0x25,0xdb,0x5a,0x9d,0xc8,0xb2, 0x1b,0xb7,0xae,0xe5,0x38,0x76,0xd3,0x22,0x40,0x1b,0xd4,0x35,0xd4,0x6,0x4d,0x83, 0x18,0x45,0x61,0x28,0x5d,0x50,0xa4,0x2d,0x20,0xb5,0x80,0x51,0xf4,0x8f,0x1a,0x41, 0x10,0xa0,0xd,0x90,0xc0,0x51,0xec,0x14,0x75,0x5a,0xab,0x29,0xe2,0x78,0x69,0x6c, 0x47,0x95,0xa0,0xda,0x96,0x6d,0xc9,0x96,0x2d,0x2b,0xb2,0xc4,0x45,0xa4,0xb8,0xc, 0xc9,0x19,0xce,0xfa,0x96,0xfb,0x96,0xfe,0xf1,0x38,0x43,0x8e,0x45,0xbb,0xb4,0x2, 0x39,0x1,0x9a,0xb,0x10,0x8f,0x7c,0xf3,0xe6,0xde,0xdf,0x77,0xcf,0xb9,0xe7,0x9c, 0x7b,0x1f,0xe1,0x97,0xed,0xe7,0xdb,0xa4,0x5f,0x34,0x41,0xa9,0x43,0x47,0x3d,0x80, 0xa0,0x2,0xf3,0x15,0x83,0x9e,0x54,0x92,0x80,0x22,0x61,0x18,0x15,0xc6,0xfe,0xe1, 0xf,0xae,0xd1,0xab,0xfe,0xa2,0x8,0xd6,0xb0,0x91,0x15,0x95,0x1d,0xad,0xed,0x6c, 0xee,0x4d,0xb1,0x3d,0x9b,0x61,0x43,0x3a,0x48,0x6,0x85,0xb7,0xcb,0x4b,0xfc,0xd3, 0x4b,0xa7,0x19,0x5b,0xe3,0xfb,0xea,0xcf,0x53,0x74,0x49,0x37,0xb8,0x25,0x96,0x62, 0xd7,0x96,0x76,0x6,0xb2,0x19,0x0,0xa,0xe5,0x1a,0xb,0xf9,0x22,0x6f,0x8d,0xe5, 0x38,0x7d,0xc9,0x65,0xa8,0x27,0x4e,0x44,0x53,0x8,0x68,0x81,0x35,0xfb,0xfa,0x58, 0x1,0x86,0xbf,0xfa,0xb8,0x37,0x5d,0x73,0xd9,0xd2,0x9e,0x62,0x57,0x77,0x3b,0xdb, 0xb3,0x19,0xa,0xe5,0x1a,0x17,0x67,0xf2,0xcc,0x16,0xa6,0xb0,0x4d,0x1b,0x35,0xe8, 0x4b,0xd2,0x24,0x7,0xdd,0xb0,0x81,0xf8,0x87,0xf6,0x79,0xc3,0x1,0xf6,0x1c,0xfe, 0x9e,0x77,0xb1,0x60,0xb1,0x29,0xd9,0xc2,0xa7,0x6,0x36,0xb1,0x21,0x1c,0xc5,0x35, 0x6a,0xbc,0x9b,0x37,0x38,0x59,0x98,0x6a,0x16,0x13,0x5c,0x91,0x23,0x3c,0xff,0x6f, 0xd7,0x4,0xb4,0x8f,0x19,0xa0,0xee,0x22,0x89,0xa0,0xcc,0x9d,0x3,0x43,0x3c,0xdc, 0xd7,0xc5,0x95,0xf1,0x19,0x2e,0x15,0xc,0xde,0x9c,0xad,0x5e,0x2b,0x22,0xa8,0x62, 0x9b,0xf6,0x9a,0x30,0x72,0x90,0x8f,0xcf,0x2,0x75,0xe1,0x5d,0x89,0x28,0xf,0xee, 0x19,0x21,0x11,0x88,0xf0,0xd6,0x58,0x8e,0xe7,0xde,0x18,0xbb,0x46,0xe0,0xea,0x96, 0x8,0x4b,0xec,0xbc,0xb9,0x8b,0x9b,0xbb,0x93,0xfc,0xeb,0x8b,0x97,0x98,0x33,0x9c, 0x86,0x3b,0xb9,0x26,0xd4,0x70,0x6e,0x2c,0x40,0x5d,0xf8,0x96,0xf6,0x14,0xbf,0x31, 0xb8,0x99,0x60,0x30,0xce,0xb9,0xf1,0x71,0x74,0x23,0x7,0x40,0xc9,0x30,0x88,0x87, 0x42,0x8d,0xe7,0x4b,0x86,0xc1,0x48,0x6f,0x8a,0x3d,0xfd,0x6d,0xec,0x1f,0xec,0x21, 0x1e,0x92,0x31,0x6c,0x8,0xa9,0x90,0x6e,0x4b,0x70,0x75,0x2c,0xd7,0xe4,0x4e,0x11, 0x4d,0xb9,0x71,0x0,0xa9,0x43,0x47,0xbd,0xba,0x70,0x80,0x77,0xa6,0xf3,0xd8,0x66, 0xb3,0xf0,0xba,0xf8,0x70,0x48,0x65,0xff,0x4d,0x59,0xee,0xd9,0xd6,0xd7,0xf8,0x7e, 0x51,0x97,0x28,0xea,0x1e,0x0,0x99,0x16,0x89,0x4c,0x5a,0x85,0x31,0x9a,0x16,0x74, 0x4d,0xdc,0x0,0xb,0xf4,0xff,0xd9,0xb7,0x3c,0x82,0x71,0xbe,0xb8,0x6b,0x3b,0x0, 0x6f,0x8e,0x35,0x8b,0xae,0x5f,0x17,0xca,0x6,0x1d,0xe9,0x18,0x9f,0xdf,0xdf,0xcf, 0x8e,0x9e,0xf4,0xb2,0xe0,0xb5,0xfb,0xb4,0x6c,0x97,0x8d,0xad,0x9,0x60,0x1a,0xe0, 0x43,0xdd,0xee,0xba,0x1,0xea,0xee,0x72,0xef,0x8e,0x11,0x36,0x84,0xa3,0xbc,0x39, 0x96,0xbb,0x46,0x74,0xc9,0x30,0x0,0x88,0x25,0x14,0xbe,0x70,0xf7,0x4e,0x46,0x36, 0xb4,0x51,0xd4,0x25,0x72,0x15,0x89,0xa0,0xe2,0x61,0x3a,0xcd,0xd7,0xd5,0xd6,0x48, 0xc6,0xe4,0xa6,0xf1,0x8a,0x86,0x4b,0x32,0x28,0xff,0xcc,0x0,0x99,0xd4,0xa1,0xa3, 0x39,0x80,0x1d,0xbd,0xbd,0xec,0x4d,0xa7,0xb8,0xbc,0x30,0xc7,0x5c,0x35,0x4f,0xd5, 0xf5,0x88,0xca,0x52,0x43,0x74,0xc9,0x30,0x88,0xb6,0x68,0x1c,0xbc,0x63,0x84,0xbe, 0x8c,0x9f,0x9c,0x72,0x95,0x95,0xa,0xc0,0x74,0xae,0xad,0x5e,0x56,0x83,0x44,0x2, 0x49,0xc2,0x21,0x75,0x39,0x7,0x80,0xa8,0x95,0xe9,0xea,0xed,0x61,0x74,0xa1,0x74, 0xfd,0x0,0xfd,0x7f,0xf5,0xfd,0x5c,0x44,0x93,0xf9,0xd4,0xc0,0x26,0x96,0xa,0x26, 0xaf,0x5e,0x18,0x27,0x9b,0x88,0xb1,0x60,0xa,0x2,0x1a,0x54,0xdd,0x95,0x59,0xfc, 0xdc,0x1d,0x9b,0xf9,0xe4,0xe6,0xcd,0x98,0x8e,0x44,0x7e,0x7c,0x82,0xd9,0x7f,0xfc, 0x1b,0xa2,0x37,0xef,0x25,0xba,0xfb,0x36,0xd4,0xe1,0x5b,0x8,0x7,0xd4,0x26,0x90, 0xd5,0xd7,0xa0,0xe2,0x91,0x69,0x91,0x88,0x84,0x24,0x74,0xc3,0x9f,0x8c,0xb6,0x96, 0x8,0xd5,0xaa,0x20,0xac,0xc9,0x1f,0x19,0xa0,0x31,0xeb,0xdb,0x3a,0x32,0xa4,0x24, 0x8d,0xb,0xef,0x2d,0x32,0x3c,0x98,0xe2,0x9e,0x5d,0x3b,0xd9,0xd9,0xd3,0xce,0x91, 0xa7,0x8e,0x53,0x2d,0xb,0x2c,0x1,0xbd,0xdd,0x51,0x1e,0xba,0xfb,0x36,0x0,0x96, 0x74,0x7f,0xf6,0xe4,0xf6,0xd,0x98,0x6f,0x9d,0xa2,0xfd,0xca,0xd3,0x88,0xe7,0x62, 0x2c,0xd6,0x42,0x78,0xd9,0x7e,0xd4,0xfe,0xed,0x84,0xb7,0xed,0x22,0xbc,0xf5,0x16, 0x2,0xa9,0x2c,0x5a,0x5b,0xaa,0x1,0x31,0x5f,0xf6,0x18,0xde,0x98,0xe6,0xbf,0x73, 0xe3,0xbe,0x3b,0x5a,0x16,0xd1,0xa8,0x46,0xb1,0x66,0x7f,0x34,0x80,0xe1,0xaf,0x3e, 0x9e,0x13,0x52,0x90,0x7d,0x1d,0x5d,0xcc,0x2e,0x54,0x18,0x1a,0x8c,0xf1,0x87,0x7, 0xf6,0xd2,0x1a,0x56,0x58,0xd2,0xfd,0xa8,0xf0,0x2b,0xc3,0xdd,0x1c,0x3b,0xf9,0x1e, 0xbf,0x73,0xc7,0x76,0xf6,0xe,0x6d,0x44,0xb7,0x56,0x6,0x39,0x7e,0xfa,0x1c,0x0, 0xad,0x77,0x3f,0x88,0xfe,0xf4,0xdf,0x71,0xfb,0xa7,0xb,0x38,0xc1,0x14,0x76,0x50, 0xa5,0x22,0xf2,0x14,0x4e,0xff,0xf,0x8b,0x4f,0x2d,0xb1,0x64,0x6a,0x54,0xbc,0x10, 0x81,0x8d,0x5b,0x9,0xf6,0x6c,0xa6,0x75,0x64,0x84,0x98,0xe9,0x20,0x57,0x5c,0x9c, 0x58,0x1b,0x8e,0x65,0xfa,0xb,0x5a,0x51,0xd7,0x5f,0x4e,0xd7,0x17,0xea,0x27,0x52, 0xed,0x74,0xb5,0x47,0xf9,0xed,0x5b,0x87,0x48,0x27,0xd2,0xe8,0x96,0x4d,0xd9,0x51, 0x69,0x51,0x7c,0xa1,0xe1,0x80,0xca,0x74,0x3e,0x47,0x32,0xd6,0x6,0xd0,0xf8,0xac, 0xec,0xa8,0x4c,0x4c,0x4e,0xf2,0xea,0xd9,0xf3,0x48,0xe5,0x3c,0xbb,0xbf,0xf9,0xa7, 0xdc,0x77,0xd3,0x2c,0xe9,0x41,0xd,0xcf,0x16,0xfe,0x20,0xc1,0x28,0x4a,0x4b,0x1a, 0xb9,0xb5,0xb,0x25,0xd9,0x49,0xb1,0xe0,0x52,0xca,0x5b,0x14,0xa7,0x8b,0x54,0x97, 0x74,0xa,0xb3,0x25,0x84,0x2e,0xa8,0xe8,0xa,0x4a,0x26,0xcb,0xe9,0x45,0xc1,0x1e, 0x29,0xc7,0xef,0x5d,0x9c,0x94,0xd6,0xb3,0x1f,0x38,0xa8,0x7d,0xf9,0x9b,0xdf,0x39, 0x7c,0xc7,0x6e,0x3e,0xbd,0x7f,0x27,0xb9,0x35,0xc2,0x5e,0x8b,0x62,0x13,0xe,0xa8, 0xe4,0x74,0x1a,0xa2,0xeb,0x60,0x75,0x98,0xa7,0x9f,0x7f,0x91,0x42,0xad,0xc0,0xa6, 0xe3,0x3f,0xe4,0xc0,0xe5,0xef,0xb0,0x63,0x1f,0xa8,0x1f,0x54,0x1a,0x4,0xa3,0x48, 0x81,0x8,0x4a,0x4b,0xa,0x29,0x92,0x44,0x8a,0xb5,0xe1,0x4,0x52,0x4,0x62,0x11, 0xac,0x4a,0xd,0xcb,0x92,0x28,0xce,0x2c,0x71,0xe2,0xc9,0x37,0x9a,0x20,0xd4,0xb5, 0x66,0xdf,0x13,0x16,0x9f,0xd9,0x7b,0x2b,0xbb,0x76,0x6d,0x67,0xb4,0xe4,0x11,0xd3, 0xfc,0xe7,0x2b,0xc2,0xff,0xbd,0x22,0x3c,0x2a,0x42,0x1,0xc3,0x5b,0xbe,0xaf,0x10, 0xd3,0x7c,0xd1,0xab,0x1,0xb7,0xc,0xf7,0x70,0xe6,0x4d,0xc1,0xdc,0xde,0x3,0x5c, 0x7e,0xfd,0x7,0xf4,0x95,0xaa,0xa4,0x3b,0x59,0xb1,0x42,0x53,0x28,0xaa,0xe2,0x99, 0x55,0xec,0xf2,0x7c,0xd3,0x6d,0x43,0xd5,0xf0,0x94,0x0,0xa1,0x8e,0x1,0x62,0xdb, 0xf6,0xa1,0x45,0x5a,0x3e,0x78,0xd,0xa4,0xe,0x1d,0xf5,0x92,0x81,0x8,0x5f,0xfe, 0xcc,0xbd,0x6c,0x6a,0x6f,0x6b,0xdc,0xaf,0x8,0x8f,0xa2,0xe1,0x50,0x32,0x5d,0x0, 0x74,0xd3,0xf2,0x5d,0x28,0xd8,0x5c,0xa3,0x6f,0x4c,0x68,0xc4,0x34,0xa9,0x61,0x91, 0x81,0x9e,0x1,0xce,0xbc,0x79,0x19,0xaf,0xa5,0x8d,0x89,0xfe,0xfd,0x5c,0xbd,0xf8, 0x34,0x89,0x38,0x68,0x51,0x6d,0x6d,0x88,0x35,0x9a,0x67,0xb,0xb0,0x5,0xf6,0xd5, 0xf3,0xa8,0xfd,0xfb,0x48,0xb5,0x36,0x3b,0x8d,0xb2,0x5a,0xfc,0x8e,0xde,0x5e,0xfe, 0xf2,0xb3,0x7,0x68,0x8d,0x85,0x29,0x1a,0xe,0xb9,0xb2,0xc9,0x44,0xbe,0xca,0x7c, 0xc9,0xa4,0xa4,0x5b,0xe8,0x42,0xe0,0x79,0x2b,0x21,0xd3,0x76,0x1c,0x6c,0xc7,0x41, 0x53,0x15,0x74,0xd3,0xa2,0x66,0x4b,0x58,0x8e,0x87,0x40,0x21,0xa0,0xf8,0x3,0x9, 0xc7,0x61,0x66,0x61,0x8a,0x5a,0x5b,0xf,0xe9,0x97,0x9f,0xa7,0xa7,0xcb,0x41,0xb, 0xba,0xeb,0xdf,0xf3,0xaa,0x1a,0x92,0xac,0xe0,0xd9,0x2,0x39,0xd1,0x8e,0x27,0xa9, 0x7c,0xfd,0xf4,0xc4,0x91,0xfa,0xe7,0x32,0x40,0xc7,0xa1,0x6f,0x7b,0xf7,0xee,0xd8, 0xc1,0xef,0xee,0xfb,0x24,0xb3,0x45,0x83,0x8b,0xb9,0x2a,0x63,0xb9,0x12,0xb3,0x45, 0x1d,0x61,0xaf,0xc,0xe6,0xd8,0x2e,0x42,0x5c,0x1b,0xce,0x74,0xd3,0x22,0x1c,0xc, 0xa0,0x9b,0x56,0xc3,0x4a,0xf5,0x36,0x30,0x38,0x44,0x50,0x89,0x61,0x66,0xdb,0xb8, 0xb4,0x61,0x1f,0x57,0xc6,0x7c,0x51,0xeb,0x6d,0x9e,0x2d,0xf0,0x6c,0x81,0xa4,0x6a, 0xb8,0xb9,0xcb,0xb4,0x8f,0xf4,0xf2,0xc4,0xd0,0x46,0xaf,0x9,0x40,0x2c,0x7b,0x92, 0x6e,0xa,0xc6,0x16,0xf3,0x54,0xab,0x55,0x74,0xc3,0x6a,0x74,0x52,0x5b,0x76,0x19, 0x4d,0xf1,0x93,0x89,0x10,0x36,0x42,0xd8,0x98,0xb6,0xdd,0x4,0x51,0xbf,0x2e,0xd4, 0x1c,0x2a,0xc2,0x1f,0x23,0xa6,0x49,0xf4,0x6f,0xc8,0x62,0x79,0x9,0xa6,0x3e,0x71, 0x1f,0x53,0xd3,0x2a,0x46,0xd1,0x61,0x32,0xdf,0xcd,0xd8,0x5b,0x60,0x56,0xe5,0x75, 0xc3,0x38,0xb9,0xcb,0x44,0xa3,0x2e,0x89,0x44,0xb0,0xd9,0x85,0xf4,0x97,0x8f,0x1d, 0x59,0x18,0xd8,0x77,0x58,0x52,0x83,0xdc,0xdc,0xd3,0xc3,0x42,0xb5,0x2,0xae,0x8c, 0x2a,0xb9,0xe0,0xb9,0xb8,0x48,0x68,0xaa,0x42,0xcd,0xb4,0xd0,0x54,0xa5,0x29,0x84, 0x29,0x8a,0x8c,0x69,0xdb,0xa8,0xf2,0x2a,0x21,0x92,0x4c,0x22,0xe4,0xbb,0x51,0x45, 0x78,0x44,0x23,0x12,0xd3,0x57,0x67,0x28,0xc9,0x21,0xe4,0xcb,0x97,0xe8,0x57,0xa6, 0x31,0x4d,0xc1,0x89,0x57,0x35,0xa,0xb3,0x1e,0x66,0xd1,0x45,0x3,0x24,0x45,0x46, 0xd,0x78,0x6b,0xab,0x77,0x5d,0x24,0x59,0x41,0x92,0x65,0xe4,0x78,0x17,0xfb,0x8a, 0xe2,0xf0,0x53,0x8b,0xa5,0x23,0xd,0x35,0xe5,0x53,0xc7,0x8e,0xcc,0x6e,0xde,0x77, 0x38,0x12,0xd0,0xd8,0xb6,0xb1,0x87,0x25,0xa3,0x82,0x6d,0x4b,0xd8,0x2e,0x4,0x3, 0x1a,0xa6,0x10,0x68,0xaa,0x8a,0xeb,0x79,0x28,0xb2,0x84,0x70,0x5c,0x14,0x59,0xc2, 0x75,0x5d,0x3c,0x89,0x26,0x0,0x4d,0x55,0x48,0x84,0x14,0x2c,0xd7,0xb7,0x40,0x24, 0x1c,0x63,0x66,0x3e,0x4f,0xcd,0x29,0x13,0x12,0x90,0x7d,0xef,0x15,0x6,0x86,0x5c, 0xae,0x2e,0xc6,0x38,0x75,0xfb,0x43,0x8c,0xd7,0xda,0x58,0x78,0x7b,0x9e,0xf2,0xb4, 0x81,0x53,0x3,0xb7,0x6,0x78,0xe0,0xba,0xef,0x3,0x72,0x5d,0x5c,0xbd,0x44,0x72, 0xc7,0xad,0x4c,0xbf,0x33,0xc3,0xf7,0xa6,0xf3,0x47,0x9a,0x76,0xa,0xfa,0xcb,0xc7, 0x8e,0x4c,0x75,0xef,0x3e,0xdc,0x16,0x49,0xd1,0xdb,0x91,0xa1,0x62,0xd5,0xc0,0x95, 0xb1,0x6d,0x7,0xd7,0xf5,0x50,0x25,0x7f,0x16,0xc,0x4b,0x10,0x5a,0xae,0x69,0x84, 0xe3,0xa2,0x4a,0x3e,0x88,0xed,0xb9,0xa8,0xb2,0x8c,0xed,0x38,0xa4,0xa2,0x7e,0x84, 0xb2,0x5c,0xff,0xc7,0x73,0x15,0x66,0x72,0x93,0xe4,0xe3,0xdd,0xa4,0x4e,0x3e,0x47, 0x7f,0xa7,0x45,0xbc,0x23,0xc6,0x4f,0xa7,0x34,0x2e,0xde,0x75,0x90,0xcb,0xbb,0xef, 0xe7,0x4a,0x6c,0x80,0xd1,0x5c,0x88,0x99,0x9,0x8b,0xe2,0x44,0x8d,0xd2,0x82,0x43, 0x31,0x7,0x95,0x45,0x90,0x6c,0xa8,0x9a,0x1a,0x54,0xd,0xd4,0x50,0x98,0xb9,0x69, 0x87,0xa3,0xe3,0xf3,0x47,0xd6,0x4c,0x64,0xf1,0x87,0x1f,0xf3,0xbe,0xf8,0xab,0x77, 0x11,0xf,0x45,0x29,0x55,0xc,0x84,0xe3,0xa0,0x29,0x3e,0x6b,0x68,0x39,0x27,0x8, 0x57,0x22,0xa0,0xad,0x44,0xe1,0xfa,0xfa,0x0,0x88,0xc7,0x22,0xc4,0x83,0xbe,0x1b, 0xad,0x6e,0xcf,0x3c,0xfb,0x3c,0x65,0x5b,0x61,0xcb,0x7f,0x3c,0xca,0x6f,0xd9,0xcf, 0x30,0x7c,0x5b,0x94,0x1f,0x3c,0xdf,0xc6,0x1b,0x7f,0xfe,0x7d,0xf2,0xa6,0x43,0xa5, 0x54,0x45,0x37,0x4d,0xa2,0xa2,0x4a,0x54,0x2f,0x92,0xb8,0x7a,0x91,0xc0,0xcc,0x18, 0xd6,0xec,0x4,0x19,0xbd,0x48,0x4b,0x6d,0x91,0x40,0xda,0xf,0xef,0x31,0xac,0xf, 0x3f,0x99,0x8b,0x3f,0xfc,0x98,0xf7,0x95,0x7b,0x3f,0x8b,0xb0,0x5d,0x74,0x5b,0x7, 0xbb,0x59,0x4c,0x1d,0x24,0x10,0x8,0x22,0x1c,0xb7,0x9,0x0,0x9,0xb6,0x75,0x25, 0xde,0x57,0xd7,0x3b,0x9c,0x3d,0xff,0x1e,0xe7,0xdf,0x79,0x87,0x74,0x6e,0x94,0x7, 0x9e,0xfb,0x6b,0xee,0x3c,0x60,0x33,0x53,0xed,0xe6,0x85,0xc8,0x3,0x58,0x5f,0xfa, 0x5b,0x54,0x19,0xca,0xba,0x45,0x79,0x6e,0x92,0x22,0x31,0xa2,0xde,0x3c,0xc6,0xe2, 0x12,0xff,0xf5,0xfa,0x5,0x12,0xd1,0x10,0x97,0x43,0x1,0x16,0x1f,0x3d,0xd8,0xa4, 0xf9,0x3,0x43,0x80,0x26,0xcb,0x7c,0xf7,0xc4,0xb,0xb4,0xb6,0x84,0x1b,0x11,0xa, 0xd5,0x41,0x38,0x7e,0x21,0x67,0x8,0xf,0x43,0x78,0x8,0xc7,0x6d,0x44,0xac,0xea, 0xf2,0x35,0x1e,0x8d,0x34,0x44,0x4f,0x16,0x5,0x93,0x45,0xc1,0x5c,0xc9,0x20,0x9e, 0x6c,0xc3,0x91,0x3,0x2c,0x64,0x37,0x73,0x5e,0xed,0xa5,0x38,0xd,0x5d,0x9d,0x3a, 0xc9,0x57,0xfe,0x5,0x8a,0x8b,0xd8,0xae,0x9f,0x1c,0x37,0xf5,0xf,0x32,0xd8,0xd3, 0xce,0xf0,0xd0,0xcd,0x7c,0xe1,0x37,0x7f,0x8d,0xfe,0xa1,0x41,0xd2,0x1b,0x36,0x32, 0xdc,0xb5,0xa9,0x51,0xa7,0xfd,0x9f,0x0,0x8b,0x8f,0x1e,0x94,0x34,0xcf,0xe4,0xd9, 0xb3,0xaf,0xd3,0x99,0xf4,0xcd,0x26,0xcc,0x7a,0xfe,0x5e,0xd9,0xa3,0xea,0x86,0x45, 0x48,0x93,0x28,0x55,0xd,0xa2,0xa1,0x95,0xcc,0x5c,0x17,0x5d,0xaa,0xd4,0x28,0x55, 0x6a,0x98,0xb6,0x4d,0x20,0x18,0xa4,0x33,0x93,0xc4,0x91,0x3,0x4c,0xe,0xed,0x27, 0x37,0xf,0x8a,0xb9,0x48,0x6f,0x5f,0x4,0xf5,0xc7,0x4f,0xe2,0xb8,0x7e,0xbf,0xba, 0x70,0x97,0xdd,0x14,0x72,0x3a,0xec,0xef,0x4b,0x63,0x9,0x48,0x85,0xae,0x8d,0x50, 0x1f,0x1a,0x84,0x2f,0x3c,0xf2,0xa0,0x74,0x76,0x7c,0x9c,0xd1,0xdc,0x1c,0x6d,0x89, 0x28,0xb6,0xed,0x62,0xdb,0xee,0x8a,0x45,0xea,0xf5,0xca,0x72,0xcc,0xb7,0x2c,0x93, 0x52,0xd5,0x17,0x3d,0xb3,0xb0,0xd4,0x94,0xf4,0x64,0xcf,0x8f,0x2c,0x6d,0x99,0x76, 0x14,0xd7,0x62,0x74,0xeb,0xed,0x9c,0x9b,0x6a,0xc1,0xac,0xca,0x6c,0xdb,0x6e,0x11, 0x7b,0xe9,0x71,0x24,0xab,0xd6,0x80,0xa8,0x83,0x54,0x84,0xc7,0x9e,0xed,0x1b,0x71, 0x5d,0x9b,0x38,0x1a,0x1a,0xf6,0xfa,0x1,0xea,0x96,0x78,0xf2,0xd4,0x49,0x22,0xa1, 0x0,0xaa,0xea,0x3f,0xae,0x57,0xdd,0x86,0x25,0x84,0xe3,0x34,0x2c,0x62,0x8,0x8f, 0x90,0x26,0x61,0x59,0x26,0xd1,0x50,0x0,0xe1,0xb8,0x8,0xa7,0x39,0x33,0x27,0x53, 0x69,0x7f,0x76,0x23,0x9,0x66,0x52,0x83,0x14,0xe6,0x5c,0xb4,0xda,0x14,0x9b,0x92, 0x6,0xf2,0xeb,0x27,0xfc,0x84,0xb5,0xa,0xa2,0x68,0x38,0x44,0xc3,0xad,0x64,0x13, 0x31,0x34,0x69,0x25,0xe9,0xae,0x1b,0x0,0xa0,0x2f,0xa1,0xf2,0xa3,0x33,0x67,0xe8, 0x48,0x25,0x10,0x8e,0x8d,0x70,0xec,0x26,0x10,0x61,0xd2,0x4,0x61,0x8,0xf,0xcb, 0x32,0x1b,0x6b,0xe3,0xfd,0x20,0xd9,0xf6,0x76,0x0,0xa6,0xba,0x6f,0x62,0xea,0x8a, 0x5f,0x2e,0x6c,0x19,0xf1,0x8,0x3e,0xf7,0x78,0x73,0xe6,0x75,0x1d,0x84,0xeb,0x57, 0xb9,0xfb,0x6f,0xea,0x6c,0xec,0x93,0x3f,0x32,0xc0,0x6b,0x87,0x1f,0x90,0xce,0x4d, 0x8d,0x31,0xbb,0x58,0x24,0x1e,0xf,0x2c,0x8b,0xf2,0x3b,0xab,0xbb,0x55,0x1d,0x62, 0xf5,0x22,0xf,0x69,0x12,0x9e,0x23,0xf0,0x1c,0x81,0xa6,0xc8,0x8d,0x68,0x95,0xec, 0xec,0xc5,0x91,0x3,0x8c,0x6e,0xbd,0x9d,0xd1,0xbc,0xef,0x46,0xc9,0xd0,0x3c,0x5d, 0xf3,0xaf,0xe3,0xe4,0x17,0xa8,0xea,0xfe,0x62,0x53,0x64,0xa5,0x51,0xd,0xef,0xec, 0xeb,0x65,0xb2,0xb0,0x84,0xf0,0xae,0xf3,0x58,0x45,0x93,0x65,0x8e,0x9d,0x79,0x85, 0x87,0x7e,0xfd,0x0,0xa5,0xd2,0x7c,0x3,0x42,0x5b,0xde,0xea,0xf9,0x6b,0x43,0x46, 0xb,0x82,0x5e,0x15,0x84,0x83,0x1a,0x86,0xf0,0x8,0x98,0x5,0x22,0x67,0x4f,0xa1, 0x4c,0x5e,0x24,0x52,0x29,0xf8,0x16,0x5,0xc,0x2f,0xcc,0xc4,0xc8,0x1d,0xcb,0x6e, 0xf4,0x6,0x9d,0x89,0x25,0xfa,0x86,0x33,0x5c,0x39,0xf9,0x9f,0x44,0x3e,0xf7,0x47, 0x44,0x96,0x37,0xf1,0x89,0x90,0x42,0xd1,0x70,0x30,0x85,0x47,0x5f,0x47,0x9a,0x73, 0x97,0xa,0xd7,0x7,0xb0,0xf8,0xe8,0x41,0xa9,0xe3,0xd0,0xb7,0xbd,0x77,0xc7,0x66, 0xc8,0x66,0x22,0xe4,0xf3,0x46,0xbd,0xa8,0x6e,0xea,0xce,0xb6,0x21,0x1c,0x95,0xb1, 0x96,0xa,0x74,0x3e,0xfb,0x18,0xfd,0x2f,0x7c,0x8d,0x8e,0x56,0x8b,0x6c,0x16,0xa2, 0x61,0x1a,0x33,0xb8,0x54,0x80,0x4b,0xaf,0xfe,0x33,0xf3,0x4e,0x94,0x29,0xf,0x3a, 0x36,0xb,0x7a,0x87,0x34,0x7e,0xf8,0xa3,0x7f,0xe3,0x54,0x72,0x88,0xf7,0x4c,0x9d, 0x7c,0xa5,0x44,0xa1,0xe6,0x8f,0xd3,0xaa,0xc9,0x48,0x5a,0x0,0x4d,0x96,0x7f,0xb6, 0x57,0x4c,0xa9,0x43,0x47,0xbd,0x3f,0xbe,0xe7,0x7e,0x46,0x27,0xe7,0x51,0x97,0x93, 0x57,0x7d,0x71,0xfb,0x19,0x59,0x45,0x38,0x36,0xe9,0x63,0x5f,0xe3,0xce,0xd7,0xbe, 0xce,0xd6,0x2d,0x1e,0xb1,0xac,0x4c,0x30,0xea,0x36,0xd5,0xf8,0x4a,0xb6,0xdf,0x9f, 0x98,0xe9,0x1a,0xf6,0xfc,0xc,0xa9,0x8c,0x40,0x6a,0xc9,0xf0,0xd2,0x89,0x4,0xcf, 0xdc,0xf5,0x25,0xbe,0xf1,0xf7,0x7f,0xb1,0x2e,0x6d,0x1f,0xf9,0x64,0x2e,0x13,0x96, 0x39,0x33,0x31,0xca,0x60,0x7b,0x3b,0xb9,0xf9,0xda,0x4a,0x47,0xaa,0x8c,0x6d,0xbb, 0x18,0xa6,0xc1,0xe4,0xa5,0x77,0xb9,0xe5,0xf8,0x77,0xd9,0xba,0xcb,0x9f,0x6e,0x45, 0x6d,0x16,0x4f,0xb8,0x15,0x6d,0xf8,0x4e,0x0,0x3a,0x86,0x97,0xdf,0x7,0x5c,0xf8, 0x9,0xf6,0xf4,0x5,0x86,0x6e,0x1d,0xc1,0x93,0x97,0xf8,0xc6,0x3a,0xf5,0xc8,0x1f, 0x15,0xe0,0xc2,0x23,0xf,0x4a,0xc7,0xcf,0xbf,0x4d,0x2c,0x14,0x5d,0xb5,0x33,0x73, 0x31,0x4c,0x1b,0x55,0x95,0x99,0x9d,0x1a,0xa7,0x5c,0x29,0x36,0x5e,0x52,0xf8,0x1b, 0x21,0xb9,0x79,0x83,0x52,0x9e,0xc7,0x7a,0xeb,0x19,0xbc,0x72,0x6e,0x65,0x2,0x36, 0x8c,0x20,0xa9,0x1a,0x1d,0x5d,0x50,0x7e,0xf1,0xc5,0x75,0xeb,0xb9,0xae,0xc3,0xdd, 0xae,0xa8,0xca,0x99,0x89,0x51,0x7a,0x5b,0xdb,0x29,0x94,0x56,0xac,0x60,0x98,0x36, 0xc2,0xd0,0x69,0x8d,0x84,0x99,0xdb,0xb4,0x9b,0xc2,0xc2,0x8f,0xc9,0x66,0xa0,0x92, 0x73,0x9,0xf6,0xbd,0x6f,0x73,0xb2,0x30,0x81,0xb3,0x30,0x1,0x41,0x7f,0x22,0x24, 0xc7,0xc2,0xb3,0x5,0x41,0xa9,0x42,0x7b,0xc8,0x58,0xb7,0x16,0xf9,0x7a,0x0,0x2e, 0x3c,0xf2,0xa0,0x74,0xea,0xc2,0x79,0x92,0x89,0x15,0x2b,0x84,0x82,0x2a,0x3,0xdd, 0x19,0x6,0x36,0x75,0xb2,0x54,0xd3,0x79,0xa2,0x73,0xf,0x2f,0x4f,0x26,0x29,0x95, 0x97,0xf,0x6,0x72,0x12,0xb6,0xc9,0x9a,0xa7,0x11,0x98,0xd5,0xc6,0x26,0xdf,0xa9, 0x2e,0x91,0x4c,0x6b,0x37,0x16,0xa0,0xfe,0x1e,0x77,0x74,0x6e,0x8a,0x96,0x48,0x88, 0x6c,0xb2,0x85,0x91,0xbe,0xd,0x94,0xcc,0x2a,0xc7,0x27,0x26,0x99,0x8,0x48,0x94, 0xb6,0x8c,0xf0,0x27,0xf9,0x82,0x74,0x7e,0xb1,0x9b,0xdc,0x3c,0x98,0x55,0x8f,0xe2, 0x34,0xd4,0xf2,0xac,0xd,0x52,0x2f,0x1f,0xc6,0xc6,0x98,0x3e,0x3b,0x7e,0x63,0x5d, 0xc8,0x3f,0xc7,0x84,0x9f,0xbc,0x7b,0x91,0xaf,0xdc,0x77,0x3f,0xa5,0x6a,0x8d,0x7f, 0x7f,0xf9,0x15,0xce,0x4d,0x8d,0xa1,0xc9,0x72,0x53,0xc9,0xfb,0xf9,0x4b,0x53,0xd2, 0x13,0x43,0x1b,0xbd,0xab,0x6f,0xcf,0xd0,0xdd,0x65,0xd3,0xea,0x81,0x56,0x4,0x25, 0x0,0xaa,0x26,0x21,0xab,0x2b,0x99,0x49,0x2f,0xc2,0xbb,0x3f,0xf5,0x28,0x86,0x5b, 0x80,0xa5,0x1b,0xff,0xa6,0x3e,0xfe,0xf0,0x63,0xde,0x4d,0xdd,0x7d,0x5c,0x98,0x9e, 0xa0,0x2f,0xa1,0xf2,0xda,0xe1,0x7,0x3e,0xb4,0xbf,0xfa,0x69,0x42,0x8b,0x59,0x20, 0x1e,0xa8,0x10,0x58,0xf6,0x14,0x4b,0x40,0xc9,0x8a,0x51,0x88,0x76,0xf1,0xfb,0xe7, 0x2f,0x7e,0x7c,0xff,0x3d,0x90,0x3a,0x74,0xd4,0x8b,0x3f,0xfc,0x98,0xc7,0x2f,0xdb, 0xff,0xe3,0xf6,0xbf,0x9d,0x85,0x64,0x56,0xf1,0xe1,0xc8,0xc4,0x0,0x0,0x0,0x0, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/battery2.png 0x0,0x0,0x9,0x1c, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x47,0x0,0x46,0x0,0x46,0xf8,0x38, 0x2a,0xf1,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0xb,0x13,0x3,0x21,0x6,0x17,0xbd,0x33,0x76,0x0,0x0,0x8,0xa9,0x49,0x44, 0x41,0x54,0x78,0xda,0x8d,0x97,0xcf,0x8f,0x1c,0x47,0x15,0xc7,0x3f,0x55,0x5d,0x33, 0xdd,0x3d,0x33,0xbb,0x33,0xb3,0xb3,0xbb,0xfe,0x11,0xaf,0xd7,0xf9,0x25,0xdb,0x24, 0x18,0x42,0xa2,0x4,0x12,0x81,0x14,0xe,0x39,0x21,0x21,0x71,0x3,0x71,0x80,0x23, 0x37,0x24,0xae,0x1c,0xf8,0xb,0x40,0xa,0x17,0x24,0xe,0x8,0x9,0x24,0x24,0x72, 0x43,0x42,0xc2,0x28,0xa,0x97,0xe0,0x24,0xa0,0x48,0xe4,0xd7,0x3a,0xd8,0x2c,0xb1, 0x77,0xb3,0xd9,0x1f,0xb3,0x3b,0x33,0x3d,0xd3,0x3d,0xfd,0xa3,0xaa,0x1e,0x87,0x19, 0x6f,0xec,0xf8,0x47,0x78,0x52,0x49,0xdd,0xad,0xea,0x7a,0x9f,0x7a,0x55,0xdf,0x7a, 0xaf,0x14,0x73,0xb3,0x3f,0x43,0x3,0xe2,0x16,0x56,0x94,0x8f,0x17,0x6b,0xd5,0xc2, 0x59,0xb1,0xad,0x35,0x97,0xaa,0xce,0x42,0xaa,0xda,0x69,0x99,0x8e,0x7d,0x99,0x25, 0x2b,0x2e,0x3b,0x5a,0x71,0xe9,0xe0,0xfd,0x7a,0x7e,0xe4,0xeb,0xf9,0xa1,0xaa,0x97, 0xd3,0x7a,0x2b,0x1d,0xd4,0xd2,0x8a,0xf2,0xfc,0x6f,0xa8,0x0,0x5,0xc8,0xbc,0x7d, 0xae,0x99,0xdb,0x9e,0xbf,0x5,0x7c,0x1b,0x78,0x12,0x78,0x18,0xd8,0x7,0x72,0xc0, 0xcd,0xfb,0xd5,0x81,0x15,0xa0,0x37,0x7f,0x9f,0xcc,0xdb,0x15,0xe0,0xd,0xe0,0xf, 0xc0,0x16,0xe0,0xe7,0x10,0xff,0x97,0x19,0xf7,0x8b,0x9e,0x1,0xbe,0xef,0x4f,0xbf, 0xf0,0x9c,0x2c,0x9c,0x79,0x8a,0xc6,0xca,0xaa,0x8a,0xba,0x1d,0x5d,0x6b,0xf5,0xb4, 0x69,0x69,0xc9,0xc1,0xe6,0x42,0xca,0x80,0xa4,0x3a,0x62,0xaa,0xbb,0x64,0x32,0xa0, 0x72,0x2b,0xf5,0xaa,0x1c,0xb6,0x62,0x9f,0x5f,0x6c,0x86,0x59,0xab,0xa9,0x86,0x4b, 0xef,0x7c,0x6f,0xf3,0x97,0x93,0x92,0x9d,0xe7,0x5f,0x41,0x9f,0x3e,0xc9,0xb,0x4a, 0xf1,0x7c,0xaf,0xb,0x4b,0x9d,0xbb,0x1d,0x1f,0xd,0xe1,0x70,0x30,0x9b,0x89,0x1, 0x7e,0x20,0xed,0x33,0xe7,0xfc,0xfa,0x8b,0xeb,0x74,0xcf,0xa3,0xba,0xe7,0xd1,0xce, 0x11,0x38,0x7,0x83,0x1,0x6e,0x30,0x20,0xad,0xe,0x38,0x4c,0xf7,0x19,0xea,0x21, 0x43,0x86,0x24,0x36,0xa9,0x8f,0xcb,0x71,0xfd,0x44,0x30,0xb8,0xb0,0x1a,0xc,0x2e, 0x9c,0xd6,0xe5,0xc9,0x28,0xa0,0x6d,0xd,0x3f,0x6,0x2a,0xe0,0x1b,0xc0,0x4f,0x3e, 0x2f,0x1a,0x46,0x56,0xbf,0x58,0x2,0xeb,0x6a,0xe9,0xf1,0xb6,0xee,0x5d,0x44,0xc2, 0x25,0x44,0x4,0xef,0x3d,0xce,0x39,0x0,0x82,0x20,0x40,0x6b,0x8d,0x52,0xa,0xef, 0x3d,0xd6,0x5a,0xf2,0x3c,0x67,0x3c,0x1e,0xa3,0x6b,0x50,0xd5,0x17,0x8,0xdc,0xe2, 0xea,0xa2,0x39,0x79,0x61,0xe4,0x7c,0xf,0xf6,0xf7,0x56,0x97,0x89,0x4c,0x40,0xd4, 0x3b,0xf1,0x52,0x74,0x2f,0xc7,0xa7,0x5a,0x50,0xaf,0x5d,0x2e,0xc,0xdd,0x47,0x2, 0x60,0x5d,0x77,0x1e,0x86,0xde,0x45,0x9c,0x73,0x38,0x6b,0xef,0x0,0x30,0xc6,0xdc, 0x1,0x50,0x55,0x15,0x59,0x96,0x91,0x24,0x9,0x55,0x1c,0x93,0x4a,0x8b,0xa6,0x6a, 0xae,0x2e,0x7,0x1d,0x19,0x2a,0xab,0x60,0x9f,0xe5,0x2e,0x51,0x58,0x27,0xb2,0xf, 0x98,0xfd,0x89,0x65,0x42,0xe3,0x2b,0x3b,0xb,0x91,0x75,0x4a,0x79,0x4f,0x51,0x14, 0xe4,0x79,0xce,0xc1,0xc1,0x1,0x7,0x7,0x7,0xa4,0x69,0x4a,0x96,0x65,0xc7,0x6d, 0x3c,0x1e,0x33,0x99,0x4c,0x28,0xcb,0x12,0xef,0x3d,0x51,0x14,0xb1,0xb4,0xb4,0x44, 0xcf,0x1e,0xd1,0xb3,0xc1,0x9,0x71,0x7e,0x9,0xd8,0xd9,0xdd,0xe7,0x5f,0xf5,0x3a, 0xaf,0xad,0x9c,0xe2,0xc5,0xfb,0x1,0xec,0xec,0xf1,0xba,0xf1,0x95,0x5b,0x2,0x14, 0xd6,0x71,0xb,0x20,0x4d,0x53,0xb6,0xb7,0xb7,0xb9,0x76,0xed,0xda,0x31,0x80,0x31, 0x86,0x5a,0xad,0x46,0x92,0x24,0x4c,0x26,0x13,0xf2,0x3c,0xc7,0x7b,0x4f,0x1c,0xc7, 0xf4,0x7a,0x3d,0x7a,0xd3,0x1d,0xd5,0xcb,0x2,0x8a,0xd2,0xdd,0x0,0x78,0xef,0x43, 0xfa,0xc0,0xef,0x78,0xf7,0xf2,0x2b,0x73,0x35,0x59,0xe0,0x4,0x30,0x4,0xca,0xf9, 0xde,0x7b,0xdc,0xd8,0xfe,0xd5,0x4,0x10,0xb3,0xf6,0x34,0x5a,0xf,0x31,0x81,0x53, 0xc6,0x18,0x9a,0xcd,0x26,0xdd,0x6e,0x17,0x11,0x21,0xcf,0x73,0x8a,0xa2,0x60,0x32, 0x99,0x60,0xad,0x3d,0x76,0x1a,0xc7,0x31,0x6b,0x4d,0x38,0xd3,0x2a,0xa5,0x93,0x26, 0xaa,0xd6,0xdf,0x23,0x98,0x38,0x0,0xdd,0x6e,0xf2,0x50,0xa0,0x79,0xa2,0x19,0xd3, 0x68,0xc5,0x8c,0x81,0xa9,0xc0,0xd9,0xb9,0xbc,0x87,0xe9,0x94,0xd1,0x64,0xca,0x33, 0xc6,0x1e,0x6c,0xe4,0x0,0xc1,0x74,0x8b,0x40,0xf,0x8,0x82,0x48,0x8c,0x89,0x54, 0xa3,0xd1,0xa0,0xd3,0xe9,0x90,0xe7,0x39,0xa3,0xd1,0x88,0xc9,0x64,0xc2,0x70,0x38, 0x24,0x8a,0x22,0xe2,0x38,0xe6,0xec,0xd9,0xb3,0x9c,0x3b,0x77,0x8e,0x33,0xe5,0x4d, 0x39,0x53,0xdc,0x24,0xdf,0x1a,0x49,0x7e,0xb8,0xa7,0x82,0xc,0x1,0x82,0xa8,0xce, 0x79,0x13,0xf0,0xc3,0x4e,0xb,0x96,0x16,0xef,0x56,0xc2,0x51,0x0,0xde,0x83,0xf1, 0x55,0x25,0x0,0x2e,0x7b,0x6b,0xea,0xb2,0x20,0xf,0xe4,0xe9,0xb8,0x11,0x7e,0x29, 0x3a,0xb1,0x6c,0x69,0x86,0x31,0x27,0x7b,0xd,0x1e,0x3d,0xbb,0x40,0x91,0x4,0xe4, 0xe3,0x8,0x53,0x14,0x98,0x3c,0xa7,0x63,0xdf,0xa7,0x7d,0xfd,0x5f,0xb2,0x38,0x3d, 0x90,0x70,0xda,0xa7,0xda,0xbf,0xa9,0xbc,0x43,0x79,0x47,0x1d,0x98,0xae,0x76,0x30, 0x61,0x9d,0xa8,0xb7,0xfe,0x52,0x78,0xaf,0xf5,0x3f,0xbd,0xa,0xe1,0x8d,0xcb,0x85, 0x71,0x65,0x15,0x0,0xe2,0xb2,0xd7,0xa7,0x76,0xf2,0xfa,0xd0,0xc4,0x3f,0x92,0x30, 0x5a,0xb,0x9b,0x91,0xe6,0xe4,0x72,0xc,0xbe,0xa9,0xf0,0xb,0x90,0xc6,0x30,0x69, 0xc3,0xde,0x2e,0xec,0xd,0x84,0x8f,0xae,0x8a,0x7c,0x74,0x55,0x98,0xa4,0xc2,0x24, 0x95,0x2c,0x27,0xf0,0x16,0xc4,0x11,0x0,0xb2,0xdc,0x21,0x68,0x84,0x84,0xf,0x54, 0x41,0x97,0xd0,0x38,0x47,0x8,0xb3,0x70,0x0,0x20,0x39,0xc8,0xc8,0x23,0x5,0xf8, 0x12,0xec,0xd,0x45,0x75,0x43,0x91,0x86,0x30,0xae,0x2b,0xf6,0x36,0x3d,0x9b,0x9b, 0x22,0xfd,0xbe,0x90,0xa5,0x50,0x55,0xb3,0xdf,0x66,0x47,0x7,0xde,0x93,0x2,0xb2, 0x77,0xc4,0x47,0x51,0xc8,0x6b,0x2b,0x8b,0xf,0x50,0xc1,0x21,0xaf,0x1b,0xef,0xd0, 0x0,0x72,0xc,0x30,0xf5,0xc8,0xc8,0xe3,0x86,0x88,0x1b,0x41,0xb1,0xa1,0x28,0x36, 0xb4,0x9a,0x74,0x61,0xdc,0x85,0xdd,0xd,0x91,0xcd,0xf7,0x3c,0xf9,0x7c,0x6f,0x1f, 0xff,0x87,0x78,0x8f,0xf3,0x9e,0x0,0xe0,0x83,0x1b,0x7c,0x4,0xfc,0x9e,0x7f,0x5f, 0xfe,0xe9,0x3c,0xbf,0x4,0xc0,0x32,0x70,0x4,0x2c,0x1,0x4d,0x0,0xe3,0x2d,0xd3, 0x3b,0x0,0x6e,0x99,0x5e,0x50,0xd0,0x50,0x84,0xd,0xa5,0xcc,0x63,0x9a,0xa3,0xd, 0xcf,0x70,0x43,0x24,0xef,0xdf,0x33,0xcb,0x89,0xe0,0xc4,0xe1,0xe7,0x0,0x41,0x3b, 0xe6,0x4c,0xa0,0x79,0xb8,0x19,0x72,0xa9,0x15,0xcd,0x27,0x9,0x7b,0xc0,0x45,0x60, 0x37,0xcd,0x79,0x66,0x92,0x83,0x71,0x16,0xd,0x58,0xff,0x59,0x0,0xd5,0x52,0x4, 0xb1,0x56,0xe6,0x51,0x85,0x6a,0x2a,0xdc,0x3e,0x32,0xb8,0xea,0x99,0xda,0x7b,0x26, 0x5a,0xf1,0x78,0xef,0x28,0xc5,0xa1,0x0,0x17,0xd5,0xe8,0x1a,0xcd,0xf,0x3b,0xd, 0x58,0x6a,0xdd,0x43,0x5,0x7a,0xae,0x2,0xe7,0x70,0xc0,0xa1,0x8,0xf5,0x99,0xe3, 0x58,0xa3,0x3a,0x1a,0xdd,0x56,0x4a,0xb5,0x15,0xe5,0x16,0x94,0x1b,0x42,0xb9,0xd, 0xce,0x82,0xf7,0x72,0xaf,0x6c,0x2f,0x32,0x1b,0xf0,0xd6,0x1e,0x58,0x5d,0xa0,0x1d, 0x6,0x44,0xcf,0x3d,0xae,0x79,0xf6,0x31,0x7d,0x17,0xf0,0x9b,0xd7,0x3d,0x6f,0x5d, 0xf3,0x18,0xef,0xf0,0xc0,0x81,0x78,0x1e,0x9a,0x1,0x44,0xa0,0xda,0x5a,0xe9,0x55, 0x45,0xb0,0xa2,0x98,0x6e,0x8,0xd9,0x3f,0x85,0x62,0x4b,0x70,0x56,0xee,0x57,0x66, 0x88,0x80,0xf3,0xe0,0x85,0x65,0xa0,0xbf,0xd2,0xc2,0xc4,0x35,0xc2,0xaf,0x3d,0xa6, 0xf9,0xde,0xb,0xe6,0xae,0xfe,0x1,0x96,0x1b,0x7b,0x1e,0x93,0xfa,0xb6,0x6,0x94, 0x91,0x46,0x3d,0xb4,0xcd,0x38,0x94,0x87,0xea,0x26,0x58,0x55,0xe8,0xc6,0xac,0x67, 0xed,0x34,0x34,0x9e,0x56,0xb4,0x52,0xc5,0xc2,0xbe,0xe2,0x70,0x4,0x24,0xc7,0x18, 0x3b,0x85,0x56,0x3b,0x79,0xa0,0x5c,0xe6,0xb4,0xcd,0xbd,0xce,0x4a,0xc6,0x80,0xd9, 0x4d,0xf8,0x6f,0x54,0xe3,0xb5,0xb7,0x36,0x45,0x19,0xe3,0x94,0x8,0x5a,0xe0,0x38, 0x14,0x57,0xae,0xb,0x3b,0x23,0x30,0xa9,0xb4,0xd7,0x80,0xd5,0xba,0xef,0x99,0x86, 0x5b,0x8e,0xd,0xa7,0xc,0xc1,0xca,0xa7,0x6b,0x56,0x3b,0xa5,0xd0,0x21,0x34,0xf7, 0x35,0xb,0x9b,0x50,0xc7,0x23,0xc9,0xf1,0x12,0xec,0x94,0x81,0xfa,0xe7,0xd8,0xe8, 0x6e,0x86,0xee,0xe6,0x5e,0x67,0xd5,0xac,0xca,0xfa,0xe0,0x13,0xfe,0xb,0xfc,0xe5, 0xed,0x9b,0xae,0x78,0xf9,0xaf,0x2e,0x3,0xd6,0x81,0x9d,0xdb,0x82,0xb0,0x6,0x60, 0xf2,0x5a,0xef,0x1c,0xd0,0x4a,0xe5,0xc9,0x5a,0x90,0x5d,0x42,0x45,0x67,0x6b,0x91, 0x2b,0x41,0x5,0x68,0x15,0x20,0xd4,0x40,0x35,0x98,0x4a,0x97,0xcc,0x9d,0x52,0x99, 0xcd,0x74,0x56,0xd,0x65,0x2f,0xd5,0x6a,0x7f,0xa2,0xb9,0x9a,0x68,0xf5,0x61,0xa2, 0xd4,0x93,0x36,0x63,0xd1,0x56,0x78,0xc7,0x22,0xb0,0xdb,0x8e,0x58,0xb,0x14,0xe7, 0x9a,0x21,0x6f,0xb7,0xea,0x5c,0x2,0x76,0x65,0xa6,0x0,0x0,0xd2,0x82,0xb,0x93, 0x12,0x4c,0x5e,0xef,0x5d,0x7,0xf6,0x2,0x79,0xe2,0x11,0xb2,0x17,0x4d,0xd4,0x6a, 0xb1,0xe8,0x4a,0x74,0x50,0x47,0x94,0x99,0x1,0xd0,0x20,0x93,0x2e,0x47,0xee,0xa4, 0xea,0xdb,0xa1,0x3a,0xa8,0xf6,0xe5,0xbd,0xb4,0xa6,0xde,0x1b,0x18,0xb5,0x3d,0xf1, 0x6c,0x8f,0x85,0x96,0xb2,0x3c,0xa1,0x32,0x9c,0x63,0x1,0xd8,0x8e,0xc,0x6b,0x46, 0xf3,0xdd,0x4e,0xc4,0x77,0x97,0x1a,0x28,0xa0,0x3f,0x3f,0x7,0x3e,0x55,0x81,0x80, 0xf1,0x9e,0x3d,0x20,0x91,0xe3,0x55,0xad,0x21,0xaa,0x81,0x48,0x80,0xf3,0x1,0xa3, 0x61,0xc1,0x68,0x78,0xc4,0xce,0x56,0xa5,0x76,0xb6,0x43,0xe9,0xf,0xba,0xf4,0xcb, 0x33,0xea,0x66,0x55,0x72,0x68,0x4b,0x32,0x5f,0x1,0x15,0xe2,0xc1,0x9,0x78,0xc7, 0x18,0x50,0xab,0x4d,0x4c,0x68,0x88,0x9e,0x3b,0xaf,0xc2,0xb9,0xa,0x16,0xef,0x52, 0xc1,0x87,0x52,0x18,0xf1,0x2c,0x2,0x31,0xb7,0x1,0x40,0x3,0x3f,0x97,0xda,0x60, 0x58,0x70,0xf3,0xe6,0x11,0x9b,0x5b,0x25,0x9b,0x1f,0x87,0xaa,0x3f,0xe8,0x72,0x58, 0x7a,0x6,0xd5,0x80,0xa1,0x1d,0x92,0x7b,0x99,0x1,0xcc,0x9c,0xf7,0xdd,0x1c,0x60, 0xb9,0x89,0x69,0xd4,0x8,0xbf,0xf6,0x78,0x70,0x6f,0x15,0x28,0xcb,0x8d,0x8f,0x6d, 0x68,0xc4,0x13,0x3,0xf,0xc9,0x67,0xe4,0x75,0xab,0x32,0x4a,0x92,0x84,0x24,0x49, 0x28,0x8a,0xe2,0x81,0xe5,0xb5,0xf7,0xe0,0x1c,0xcb,0xde,0xb1,0xe,0xbc,0xb3,0x37, 0x61,0x23,0x32,0xbc,0xf6,0xd6,0x87,0xfe,0x29,0x63,0x2d,0x22,0x28,0xb9,0xad,0x40, 0xbd,0xf2,0x1f,0xcf,0x4e,0xc2,0xbb,0xc6,0x7b,0x6,0x40,0xf3,0x76,0x0,0xa5,0x14, 0x45,0x51,0x30,0x1a,0x8d,0x48,0x92,0x84,0xf1,0x78,0xfc,0xb9,0x0,0x22,0xe0,0x66, 0x11,0xd8,0x5,0xf8,0x60,0x9f,0x5d,0xe0,0xf2,0xdb,0x3b,0xfe,0xb7,0x2f,0xff,0xcd, 0xdf,0x2a,0xcc,0x7b,0xf3,0xbb,0xc3,0x1,0xb0,0xa,0x3c,0x62,0xf4,0xa0,0xff,0xc, 0xa0,0x54,0x9e,0xcd,0x7,0x12,0x9c,0x73,0x94,0x65,0x49,0x51,0x14,0x58,0x6b,0x1f, 0xe8,0x38,0x10,0x4f,0x28,0x1e,0xed,0x5,0xe7,0x58,0x76,0x9e,0x4,0xd0,0xed,0x3a, 0x6b,0x81,0xe2,0xd9,0x66,0x8d,0x6b,0x2d,0xc3,0x2a,0x60,0x5,0x4e,0x1,0x31,0xd0, 0x48,0x2d,0xeb,0x93,0x8a,0x4b,0x46,0xd,0xe,0xdf,0x6,0x50,0xd3,0x3b,0x1,0xac, 0xb5,0xff,0x17,0x80,0x91,0x19,0x44,0x30,0x3,0x60,0x9e,0x8c,0x24,0x32,0x9c,0x31, 0x8a,0x6f,0x76,0xea,0x7c,0x73,0x29,0xbc,0x23,0x17,0x7c,0x1d,0xe0,0xa8,0x98,0xab, 0x40,0x86,0xe3,0x31,0x30,0xa8,0xfe,0xfd,0x7e,0x94,0xd7,0xff,0x14,0x17,0x4f,0x7c, 0x99,0xea,0xb,0x4f,0xe1,0xe6,0x40,0xf7,0xb3,0xd8,0x5b,0x28,0xa7,0xb4,0xcb,0x94, 0x76,0x3e,0xa6,0x6b,0xcb,0xfe,0xd4,0xb3,0x9d,0xce,0x0,0xd4,0x6a,0x84,0x9,0x35, 0xd1,0xb3,0x97,0x54,0xf8,0xec,0xa3,0xf7,0xc8,0x5,0xff,0xf1,0xfc,0xe3,0x1d,0x29, 0x8c,0x1c,0xe,0x17,0x80,0x81,0xdd,0x78,0xa7,0x9b,0x1f,0xee,0xc5,0x45,0x0,0xe5, 0xe9,0x35,0xe6,0x57,0x82,0xfb,0x5a,0x64,0x2d,0x51,0x39,0x65,0x3d,0x4f,0x39,0x9b, 0x4f,0xf0,0x5e,0xf6,0x47,0x9e,0x57,0x87,0x9e,0xc,0x70,0x2b,0x11,0x3a,0xe,0x8, 0x9f,0xbf,0x8f,0xa,0x8c,0xb6,0xdc,0xbc,0x66,0x43,0x53,0x8,0x31,0xf0,0x73,0x3f, 0x2d,0xbe,0x5a,0xee,0xf7,0xbf,0x7c,0xf0,0xe6,0x95,0xe5,0x6c,0x7b,0x77,0xa5,0xd0, 0x81,0x2a,0x54,0xa0,0xf3,0xbc,0x40,0xe5,0x39,0xd1,0x78,0x42,0x7b,0x3c,0xa1,0x3e, 0x4a,0x58,0x4a,0x12,0x64,0x32,0xae,0x64,0x3c,0xae,0xc2,0xaa,0xd8,0x9a,0x7a,0xd9, 0xca,0x85,0x3f,0xf,0x3d,0xbf,0xfe,0x44,0x28,0x81,0x68,0x7f,0xca,0xf5,0x30,0xe0, 0xd5,0x2b,0x1f,0xf8,0xa7,0xfd,0x2c,0x85,0x2b,0x51,0xb7,0xa9,0x60,0xd3,0xb3,0x93, 0xf1,0xee,0xad,0xf,0xf5,0x5f,0xad,0xf0,0x9d,0x48,0xf1,0x6d,0x23,0x5c,0xc,0x84, 0xb,0x2a,0xc,0x8d,0xa,0xc3,0xc0,0xd5,0x43,0x6c,0x2d,0xa4,0xac,0x2c,0x65,0xe9, 0xd0,0xd9,0x14,0x9d,0x65,0xe0,0x25,0x13,0x27,0xd9,0x58,0xf8,0xfb,0x8e,0xe7,0xef, 0x5b,0x9e,0x37,0xfe,0x68,0xb9,0xce,0x2c,0xe1,0x94,0xc0,0x53,0xc0,0x57,0xf8,0xf4, 0xfe,0x19,0xcc,0xdb,0x1d,0xf6,0x3f,0xf0,0x11,0xe0,0x2b,0x4d,0x2,0xae,0x8d,0x0, 0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/delete.png 0x0,0x0,0x3,0x7c, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61, 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xaf,0xc8,0x37,0x5,0x8a,0xe9, 0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, 0x0,0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64, 0x79,0x71,0xc9,0x65,0x3c,0x0,0x0,0x3,0xe,0x49,0x44,0x41,0x54,0x78,0xda,0x62, 0x3c,0x7a,0xea,0xda,0x1b,0x1,0x3e,0x1e,0xf6,0x7f,0xff,0xff,0x33,0xc0,0xc0,0x3f, 0x20,0xf3,0xc7,0x8f,0x9f,0xc,0xbf,0x7f,0xfd,0x66,0x78,0xf3,0xee,0x23,0xd3,0x9f, 0xdf,0xff,0xde,0x7f,0xfe,0xfc,0xc5,0x83,0x99,0x85,0xe5,0xa,0x13,0x13,0x13,0xc3, 0xed,0x5b,0x37,0x19,0x1a,0xaa,0x33,0xc0,0x6a,0x1,0x2,0x88,0x85,0x9d,0x8d,0x8d, 0x5b,0x53,0x4d,0x86,0x83,0x1,0x9,0xfc,0x7,0x1a,0xf6,0xe3,0xd7,0x3f,0x86,0xbf, 0x7f,0x18,0x18,0xee,0xde,0x7f,0xcc,0xc0,0xc3,0xcd,0xc9,0x75,0xf7,0xc1,0xf3,0xfd, 0x4f,0x9e,0xbd,0xc,0x65,0x67,0x67,0x3f,0x80,0xac,0x16,0x20,0x80,0x98,0x18,0xb0, 0x0,0x46,0x46,0x46,0x6,0xa0,0x45,0xc,0x8c,0x4c,0xff,0x18,0x98,0x98,0x99,0x18, 0x24,0x24,0x45,0x18,0x1c,0xac,0x75,0x45,0xd4,0x55,0xe5,0x77,0xb2,0xb2,0xb0,0x84, 0xfc,0x43,0x38,0x96,0x1,0x20,0x80,0x58,0xb0,0x19,0x0,0x92,0x67,0x4,0x62,0x36, 0x36,0x16,0x86,0xfb,0xf,0x1e,0x33,0xbc,0x7a,0xf9,0x92,0x81,0x8b,0x9b,0x83,0xe1, 0xcf,0xef,0xbf,0x6c,0x9f,0x3e,0x7e,0x58,0xfd,0xef,0xdf,0xbf,0x22,0xa0,0x74,0x3f, 0x48,0x2d,0x40,0x0,0x61,0x75,0x1,0xd8,0x15,0x4c,0x40,0x57,0x0,0x4d,0x11,0x15, 0x11,0x62,0xf8,0xf5,0x8f,0x91,0xe1,0xe5,0x8b,0x8f,0xc,0x77,0xee,0x3e,0x66,0x60, 0xe3,0x60,0x63,0xf8,0xf2,0xe5,0x43,0x1b,0x4c,0x1d,0x40,0x0,0x61,0x75,0x1,0xc8, 0x76,0x26,0xa0,0x37,0xfe,0xfc,0xfe,0xc3,0xa0,0x6b,0xa0,0xc1,0xf0,0xeb,0x7,0x30, 0x30,0x3f,0xff,0x64,0x78,0xf7,0xfc,0x39,0x3,0x2b,0x2b,0x1b,0xc3,0xa9,0x13,0x47, 0xe1,0x6a,0x1,0x2,0x8,0xe1,0x82,0x7f,0x7f,0x19,0x18,0xae,0x9f,0x62,0x60,0xb8, 0x79,0x96,0xe1,0x1f,0x90,0xfb,0x7,0xe8,0x8f,0x3f,0xac,0xac,0xc,0x5f,0xee,0xdd, 0x63,0x60,0xea,0x2a,0x62,0x60,0xdd,0xbb,0x8e,0x81,0x95,0x8b,0x1b,0xe8,0x2d,0x56, 0x6,0x66,0x66,0x66,0xb8,0x36,0x80,0x0,0x42,0xb8,0xe0,0xc9,0x2d,0x6,0x86,0xe3, 0x3b,0x18,0x18,0xbe,0x7e,0x60,0xf8,0xff,0xe8,0x1e,0xc3,0x57,0x9b,0x10,0x86,0xff, 0xf,0x6f,0x32,0x8,0x4e,0xaa,0x62,0x60,0xdf,0xbb,0x83,0x81,0x53,0xee,0x18,0xc3, 0x6f,0x6d,0x33,0x6,0x26,0x31,0x69,0x60,0x20,0x23,0x5c,0xb,0x10,0x40,0x8,0x3, 0x24,0x95,0x19,0x18,0xe4,0xd5,0x19,0x18,0xf6,0xac,0x63,0x60,0xbe,0x39,0x9f,0x81, 0xfb,0xcc,0x51,0x6,0xa6,0x3b,0x77,0x18,0x58,0xf,0x1f,0x64,0xf8,0x2d,0xa5,0xc4, 0xf0,0x3e,0xa7,0x91,0x81,0x59,0x44,0x9c,0x81,0x95,0xf1,0x1f,0xd4,0x93,0x10,0x0, 0x10,0x40,0x2c,0x30,0xf6,0xf,0x26,0x20,0xd3,0x2e,0x84,0x81,0xf1,0xdb,0x4f,0x6, 0xd6,0x15,0x33,0x18,0xd8,0xaf,0x6e,0x66,0x60,0x78,0xf5,0x9e,0xe1,0xb7,0x96,0x1, 0xc3,0xbb,0xba,0xa9,0xc,0xbf,0x15,0x35,0x18,0x98,0xbf,0x7c,0x61,0x0,0x26,0x26, 0x70,0x34,0xc3,0x0,0x40,0x0,0xb1,0xc0,0x2,0xe1,0xf,0x30,0x8,0x18,0x59,0x99, 0x19,0x58,0x98,0x38,0x18,0x18,0x9f,0xbe,0x62,0x60,0x78,0xf6,0x9a,0x81,0xe1,0xf3, 0xf,0x6,0x86,0xa7,0x6f,0x19,0x18,0x81,0xb1,0xc0,0x8,0xf2,0x3b,0x50,0x1f,0x33, 0x23,0x2c,0xa2,0x21,0x0,0x20,0x80,0x98,0xfe,0xc1,0x42,0xfe,0xf7,0x2f,0x6,0xb6, 0xc5,0x93,0x19,0xd8,0x3b,0x2b,0x18,0x18,0x5e,0x7f,0x64,0xf8,0x6b,0x64,0xc1,0xf0, 0x8f,0x5b,0x98,0x81,0xf5,0xec,0xd,0x6,0x61,0x1f,0x57,0x6,0xf6,0x6d,0x40,0x17, 0x71,0x72,0x41,0x6d,0x47,0xb8,0x0,0x20,0x80,0xe0,0xb1,0xc0,0x72,0x64,0x7,0x3, 0xeb,0xd4,0xe,0x6,0x86,0x17,0x6f,0x18,0x7e,0x45,0x26,0x33,0x7c,0x5e,0xb8,0x93, 0xe1,0x6b,0xef,0x2c,0x86,0xff,0x7c,0xfc,0xc,0xcc,0xaf,0x5e,0x31,0x8,0x14,0xe7, 0x32,0x30,0xbd,0x7a,0xc1,0xf0,0x1f,0x18,0x8d,0xc8,0x0,0x20,0x80,0x10,0x5e,0x30, 0x73,0x62,0x60,0x74,0xf2,0x63,0xf8,0x2f,0xa3,0xc2,0xf0,0x2b,0xa5,0x10,0x9c,0x1f, 0x7e,0xfb,0xfa,0x32,0x7c,0x58,0xbd,0x91,0x81,0xab,0xac,0x80,0xe1,0x6b,0x7a,0x16, 0xc3,0x3f,0x5e,0xa0,0x61,0xc0,0xb4,0x81,0xec,0x5,0x80,0x0,0x62,0x81,0xa5,0x6b, 0x6e,0x41,0x3e,0x6,0x86,0xf6,0xe9,0x60,0x29,0x56,0x20,0xfe,0xfb,0x17,0x94,0xa9, 0x80,0xb4,0x8b,0x1d,0xc3,0xaf,0xf3,0xe7,0x80,0x5e,0xfc,0xcf,0xc0,0xfd,0xf5,0x17, 0x3,0xb,0xb,0x2b,0x4a,0x20,0x2,0x4,0x10,0xcb,0xc7,0x4f,0x9f,0xbe,0xb6,0x75, 0x4e,0xfe,0xc3,0xc4,0xc4,0x2,0xcd,0x7,0xff,0x80,0x3e,0x64,0x2,0x6a,0xfe,0x7, 0x36,0xe0,0x3f,0x34,0x67,0xfc,0x7,0x73,0xfe,0x3,0x35,0x33,0x31,0x7c,0xf9,0x4, 0x4c,0x96,0x50,0x0,0x10,0x60,0x0,0x5e,0x86,0x0,0x6e,0x1f,0x4a,0xef,0x78,0x0, 0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/download_s.png 0x0,0x0,0x6,0x67, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x6,0x0,0x0,0x0,0xe0,0x77,0x3d,0xf8, 0x0,0x0,0x6,0x2e,0x49,0x44,0x41,0x54,0x78,0x9c,0x8d,0x56,0x6d,0x4c,0x54,0xd9, 0x19,0x7e,0xde,0x73,0xef,0x9d,0x4f,0x18,0x58,0x10,0xf1,0x3,0x3a,0x3b,0xcb,0x38, 0x20,0x5f,0x5,0xc5,0xe9,0xa,0xab,0x93,0x88,0x34,0xd8,0xaf,0xb5,0x36,0x2e,0x69, 0xb3,0x6e,0x52,0x9a,0xb8,0x3f,0xb6,0xad,0x6d,0xa5,0x69,0x9a,0x48,0xb6,0x6b,0xe3, 0x8f,0xd6,0x36,0x29,0x69,0xd2,0x6e,0xd3,0x26,0xb5,0xae,0xf6,0x47,0xbb,0x12,0xac, 0x94,0x94,0xf,0x23,0x54,0x13,0x1b,0xd7,0x2a,0x8a,0x1,0xf9,0x18,0x70,0x1c,0x1, 0xe5,0x63,0x16,0x98,0x19,0x19,0xee,0xdc,0x7b,0xde,0xfe,0x18,0xb0,0xbb,0xab,0xb6, 0x7b,0x92,0x93,0xf3,0xe7,0xbe,0xcf,0xf3,0xbe,0xef,0x79,0xde,0xe7,0x5c,0x62,0x66, 0x7c,0xda,0x75,0xf4,0xe8,0x51,0xe1,0xf5,0x7a,0xcb,0x35,0x4d,0x2b,0xf,0x87,0xc3, 0xb3,0x6d,0x6d,0x6d,0x97,0x6f,0xdd,0xba,0x15,0xfb,0x5f,0x31,0xea,0xa7,0x5,0xaf, 0xa9,0xa9,0xd1,0xe,0x1d,0x3a,0xb4,0x67,0xef,0xde,0xbd,0xbf,0x70,0x3a,0x9d,0x45, 0xfd,0xfd,0xfd,0xd1,0xb9,0xb9,0xb9,0x9f,0x79,0x3c,0x9e,0x77,0x27,0x26,0x26,0x16, 0x9f,0x1b,0xc8,0xcc,0xff,0x77,0x6f,0xdb,0xb6,0xcd,0x72,0xea,0xd4,0xa9,0xaf,0x87, 0xc3,0xe1,0x21,0x29,0x25,0x1b,0x86,0xc1,0x33,0xb3,0xb3,0x7c,0xfa,0xf4,0xe9,0xe9, 0xc6,0xc6,0xc6,0x37,0xdd,0x6e,0xb7,0xf5,0x79,0xb1,0x60,0x66,0xf4,0xf6,0xf6,0x52, 0x20,0x10,0xb0,0x1d,0x38,0x70,0x40,0x7c,0xf2,0x83,0x7d,0xfb,0xf6,0xb9,0xda,0xdb, 0xdb,0x8f,0xcf,0xcd,0xcd,0x2e,0x46,0x63,0x71,0x3e,0x7b,0x65,0xdc,0x6c,0xfe,0xf3, 0xbf,0xf4,0x9e,0x2b,0xd7,0x56,0x42,0xa1,0x7b,0x7c,0xe6,0xcc,0x99,0x87,0x8d,0x8d, 0x8d,0xdf,0xdc,0xbf,0x7f,0xff,0x53,0xb1,0xcc,0xc,0x1,0x0,0x1d,0x1d,0x1d,0x9e, 0xa6,0xa6,0xa6,0xa6,0xaa,0xaa,0xaa,0x83,0x85,0x85,0x85,0xae,0xb5,0xea,0x76,0xed, 0xda,0xe5,0x3a,0x7c,0xf8,0xf0,0x77,0x2,0x81,0xc0,0xf,0x6d,0x56,0xab,0xeb,0xf4, 0x3f,0x47,0xcd,0xe6,0xeb,0x4e,0xfc,0x7a,0xc8,0x25,0xde,0xfc,0x53,0x7f,0x72,0x7c, 0x7c,0xc2,0xdc,0x51,0xb5,0x3d,0x77,0xfb,0xf6,0xed,0x6f,0x87,0x42,0xa1,0xb2,0x67, 0xde,0x41,0x45,0x45,0x85,0xd6,0xdc,0xdc,0xfc,0xb5,0xca,0xca,0xca,0x1f,0xf9,0x7c, 0xbe,0x45,0x9b,0xcd,0x96,0x5f,0x50,0x50,0xf0,0x5b,0xaf,0xd7,0xab,0x34,0x35,0x35, 0xbd,0xb5,0x7b,0xf7,0xee,0xef,0x9,0x41,0xb6,0x33,0x97,0xef,0x99,0xbf,0x19,0xcf, 0x45,0x43,0x75,0x8e,0x18,0x9a,0xb0,0xa0,0x3d,0x5a,0xe9,0x38,0xf9,0xf7,0xeb,0xe6, 0xf1,0x86,0x34,0xec,0xd8,0x51,0xe5,0x9e,0x9a,0x9a,0x3a,0xe6,0xf5,0x7a,0x7f,0x30, 0x36,0x36,0x16,0xfe,0x18,0x1,0x33,0x3b,0xe7,0xe7,0xe7,0x4b,0xe2,0xf1,0x78,0xda, 0x67,0xf2,0xf3,0xd2,0xbe,0xf2,0xe5,0x2f,0x1d,0xb3,0xdb,0xac,0xe4,0xdd,0xe2,0x2b, 0xa9,0xa9,0xae,0x7e,0x7d,0xc5,0x30,0xc4,0x3b,0x7f,0x1b,0x36,0xba,0xe3,0x2f,0xd2, 0xe1,0x3d,0x59,0xca,0x17,0xdd,0x40,0x4b,0xd4,0x85,0x4d,0x79,0x5e,0xea,0xb9,0xaf, 0xab,0xf2,0xaf,0xb7,0xf8,0x9d,0x83,0x15,0x54,0x5b,0xbb,0xe7,0x55,0x21,0x44,0xb2, 0xb6,0xb6,0xf6,0xc7,0x17,0x2f,0x5e,0xc,0xad,0x11,0x8,0x29,0x25,0xe9,0xba,0x2e, 0x34,0x55,0xc1,0xd5,0xbb,0x93,0x7c,0x35,0xb4,0x9c,0xe1,0x2d,0x2a,0x69,0x7e,0xa5, 0xa6,0xfa,0x8d,0xc8,0x52,0x54,0xfc,0xfc,0x1f,0xe3,0x46,0x9f,0x5e,0x20,0xbe,0x1d, 0xc8,0x52,0xbe,0x50,0x0,0x5c,0x8c,0x0,0x9,0x21,0x50,0xbc,0x39,0x1d,0x59,0x1b, 0x5e,0x42,0x5f,0xcc,0x43,0x27,0xcf,0xdf,0xc4,0xba,0x17,0x5e,0xd0,0xaa,0xaa,0xaa, 0x5e,0x2d,0x2b,0x2b,0xfb,0x7e,0x7e,0x7e,0xbe,0xed,0x63,0x32,0xd5,0x34,0x8d,0x8d, 0x44,0x9c,0x7f,0xda,0xb9,0x60,0xdc,0x5e,0xcc,0xd0,0x5e,0xd1,0x1e,0x38,0x9d,0x36, 0xd,0xef,0x8d,0xda,0x93,0x57,0x8d,0x17,0x95,0x63,0x9f,0xcf,0x10,0x65,0xeb,0x81, 0xcb,0x11,0x60,0x6c,0x1e,0x70,0x38,0x80,0xcd,0x39,0xa,0x74,0x3d,0x1b,0x3,0xa6, 0xf,0xed,0xf,0x74,0x78,0xba,0xaf,0xe3,0x60,0xa0,0xcc,0xe1,0xf7,0xfb,0xbf,0x15, 0xa,0x85,0xee,0x14,0x17,0x17,0x9f,0x1a,0x1c,0x1c,0x34,0x54,0x66,0x6,0x1,0x30, 0x24,0xf0,0x70,0xc5,0x2e,0x29,0xc3,0x8d,0xf6,0x88,0x10,0x1f,0xbc,0xff,0x30,0x99, 0x57,0x59,0xa1,0xbe,0x5d,0xef,0x10,0xe5,0xeb,0x80,0x8e,0x59,0x20,0x1c,0x1,0x54, 0x5,0xb0,0x38,0x0,0xab,0xa,0x40,0x6a,0x0,0xaf,0xc7,0x4d,0x73,0x2b,0x7e,0x3f, 0x14,0x81,0x4d,0x19,0x40,0x5d,0x95,0x2f,0xad,0xae,0xae,0xee,0xb8,0xaa,0xaa,0x4b, 0x7e,0xbf,0xbf,0x55,0x10,0x11,0x0,0x6,0x93,0x20,0x28,0x16,0x25,0xdb,0x61,0x45, 0x7a,0xe6,0x7a,0x64,0xf9,0xaa,0xb4,0xef,0x56,0x3b,0x84,0x2f,0xb,0xe8,0x98,0x1, 0x26,0x17,0x0,0x55,0x0,0xaa,0xa,0x28,0x2a,0x60,0xb5,0x2,0x99,0x2e,0x20,0x2f, 0x47,0x83,0x2f,0x37,0x1b,0xcb,0x2e,0xf,0x5a,0x6f,0x2f,0xf2,0xc8,0xf8,0x7d,0x6c, 0xde,0xb4,0x29,0xd7,0xe3,0xf1,0xbc,0xce,0xcc,0x1b,0xd5,0x8f,0xe,0x1b,0x88,0x44, 0x9a,0x4d,0x85,0xa2,0x64,0xa2,0xa1,0x1c,0x28,0xdb,0x8,0xf4,0x3c,0x4,0x42,0xb, 0x80,0xa6,0xa4,0x80,0x15,0x1,0x80,0x1,0x28,0x80,0xd3,0x6,0xa8,0x99,0x4,0x65, 0xd9,0x8a,0xf9,0xfb,0x1a,0xa6,0xa7,0x14,0xa,0x3f,0x9a,0xc3,0x4b,0xee,0x3c,0xe1, 0x70,0x38,0x3c,0x44,0x94,0xab,0x2,0x80,0x94,0x29,0x3f,0x22,0x10,0x9,0x2,0x36, 0x66,0x5a,0x91,0xd4,0x80,0x73,0x63,0xc0,0x6c,0x14,0xb0,0xdb,0x1,0x41,0x0,0xad, 0x29,0x3,0x80,0x90,0x0,0x1b,0x8c,0xa5,0x5,0x1d,0x53,0xa1,0x10,0xe2,0x53,0x77, 0x50,0x9a,0xf6,0x21,0x8a,0x3c,0xa5,0x88,0xc5,0x62,0x89,0xc9,0xc9,0xc9,0x1b,0xe1, 0x70,0x78,0x36,0x55,0xc1,0x2a,0x3c,0x43,0x82,0x19,0xb0,0x5b,0x80,0xd1,0xd9,0x54, 0x1b,0xec,0x16,0x0,0x12,0x60,0x9,0x48,0x4a,0x11,0x29,0x0,0x14,0x9,0x44,0x22, 0x6,0x46,0xc7,0x1e,0xe0,0xce,0xdd,0x7e,0x14,0x89,0x51,0x7e,0xed,0x65,0xf,0xa9, 0x24,0x8c,0xb,0x17,0x2e,0xb4,0x75,0x77,0x77,0xbf,0x6b,0xb7,0xdb,0xa7,0xc5,0xaa, 0x23,0x1,0x60,0x10,0xb3,0x94,0x32,0x5,0x98,0xd4,0x1,0x53,0x7,0xa4,0x9,0x98, 0xc6,0x7f,0xb7,0x30,0x1,0xd5,0x4,0xf4,0x28,0x10,0xc,0x3e,0xc2,0xed,0xbb,0x3, 0x58,0xb7,0x70,0x9d,0xdf,0xd8,0x55,0x40,0x1b,0x72,0xb2,0x65,0x57,0x77,0x57,0x5f, 0x6b,0x6b,0xeb,0x49,0x22,0xba,0x71,0xf6,0xec,0x59,0x5d,0x5d,0x75,0x3c,0x10,0x1, 0xcc,0x26,0x24,0x4b,0x98,0x92,0x61,0x1a,0x4,0x53,0x49,0x11,0xa9,0x22,0xd5,0x16, 0xb,0x0,0x61,0x32,0x16,0x17,0xd,0x8c,0x8c,0xcc,0xe0,0x83,0x7f,0x5f,0x81,0x8f, 0x7,0xf1,0x8d,0xfa,0x42,0xb2,0x58,0x6d,0x8b,0xef,0x9f,0x3b,0xd7,0xd6,0xd9,0xd9, 0xd9,0x52,0x52,0x52,0x72,0xbb,0xaf,0xaf,0xcf,0x7c,0x32,0x7,0xa9,0x37,0x81,0x41, 0x52,0x4a,0x29,0x59,0x59,0xcb,0xda,0x10,0x80,0x41,0xa9,0xd3,0x86,0x54,0xf6,0xb, 0x1f,0x26,0x30,0x1c,0x9c,0xc2,0x9d,0xa1,0x1b,0xf8,0xac,0x3a,0x88,0xaf,0xfa,0x3d, 0x50,0x84,0x88,0xb6,0xb6,0xb6,0xfe,0xb1,0xb7,0xb7,0xf7,0xf,0x6e,0xb7,0x7b,0x64, 0xd,0x7c,0xcd,0x2a,0x20,0x99,0x41,0xc,0x66,0x69,0x4a,0xd3,0x94,0x30,0x4d,0x80, 0x21,0x21,0x41,0x30,0x99,0x20,0x1,0xe8,0x3a,0x23,0xfa,0x78,0x19,0xc3,0x63,0xf7, 0x30,0x3a,0x72,0x3,0x5b,0x8d,0x7e,0xbc,0xb6,0xb7,0x1c,0xd1,0x58,0x2c,0xd2,0xd9, 0xd9,0xf5,0xde,0xa5,0x4b,0x97,0x7e,0x55,0x58,0x58,0xf8,0xe0,0xda,0xb5,0x6b,0x4f, 0xc0,0x9f,0x54,0x90,0xba,0x2,0x9,0x36,0x75,0xc3,0x30,0xd,0xeb,0x4a,0x34,0x2, 0xb0,0x8e,0xa4,0xaa,0x21,0xa1,0xa8,0x88,0x6b,0xa,0xc,0x29,0xb0,0xb4,0xac,0x63, 0x78,0xd9,0x8a,0x8,0xb9,0x50,0x60,0x48,0x5e,0x7e,0xfc,0x38,0xde,0xd5,0xd5,0xfd, 0xbb,0x9e,0x9e,0x9e,0x96,0x58,0x2c,0xf6,0xe8,0x99,0x6e,0x9a,0x92,0xa9,0x24,0x8b, 0xa6,0xc2,0xa,0x9d,0xa6,0x66,0x27,0x91,0x34,0x17,0x52,0xb2,0x24,0x5,0x42,0x8, 0x90,0x50,0x20,0x88,0x40,0x82,0xe0,0x34,0x18,0x4b,0x36,0x17,0x6e,0xce,0xe5,0xc8, 0x86,0x64,0xd2,0x56,0x5f,0x5f,0x5f,0x4,0xc0,0xf9,0x2c,0x70,0x0,0x50,0x85,0x10, 0x78,0xbc,0xbc,0xcc,0x4c,0x2a,0x35,0x6c,0x85,0xfa,0xcb,0x8e,0x5e,0x7d,0x32,0x91, 0x14,0x44,0xfc,0x11,0xf9,0xae,0x4e,0x0,0x81,0x8,0x4,0xc9,0x4c,0x2e,0x4a,0x90, 0xc3,0xb9,0x41,0xd9,0xb2,0xc5,0x5b,0x1f,0xc,0x6,0x87,0x8e,0x1c,0x39,0xd2,0xdc, 0xd2,0xd2,0x22,0x3f,0x49,0x40,0xa5,0xa5,0xa5,0x5a,0x20,0x10,0x78,0xab,0xb8,0xb8, 0xf8,0x27,0xd5,0x2f,0x7f,0x2e,0xe3,0x5e,0xe8,0x3e,0x4f,0xcf,0xcc,0x40,0x9a,0x26, 0x4,0x89,0xd5,0xe,0xf2,0x9a,0xd8,0xc0,0xcc,0x20,0x22,0x4a,0x73,0xd8,0x60,0xb1, 0x5a,0xa1,0x28,0x2a,0x86,0x87,0x87,0x47,0x4f,0x9c,0x38,0x11,0x48,0x24,0x12,0xd3, 0x4f,0x55,0x30,0x30,0x30,0x90,0xf4,0xfb,0xfd,0x7f,0x89,0xc7,0xe3,0xd9,0xc1,0x60, 0xb0,0xce,0x6a,0xb1,0x8,0x80,0x65,0xa,0x48,0x80,0x4,0xad,0x26,0x8f,0x27,0x23, 0x63,0x4a,0x9,0xc3,0x30,0x90,0x34,0xc,0xd6,0x75,0x3d,0x1a,0xc,0x6,0xaf,0xaa, 0xaa,0xba,0xf2,0xac,0x16,0xd1,0xda,0x6f,0x8b,0xcf,0xe7,0x73,0xa5,0xa7,0xa7,0x6f, 0x5e,0x59,0x59,0xd1,0x88,0x48,0xa6,0x4c,0xf0,0xf9,0x8b,0x88,0x20,0xa5,0xe4,0x58, 0x2c,0x96,0x88,0xc7,0xe3,0xf3,0x3b,0x77,0xee,0x5c,0x3a,0x7f,0xfe,0xfc,0x53,0x2d, 0xfa,0xf,0xf1,0xdf,0x25,0x1c,0x96,0x47,0x37,0x20,0x0,0x0,0x0,0x0,0x49,0x45, 0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/folder-locked.png 0x0,0x0,0x5,0xa, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x4,0x73,0x42,0x49,0x54,0x8,0x8,0x8,0x8,0x7c,0x8,0x64,0x88, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x3,0x76,0x0,0x0,0x3,0x76, 0x1,0x7d,0xd5,0x82,0xcc,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66, 0x74,0x77,0x61,0x72,0x65,0x0,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61, 0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x0,0x0,0x4,0x87,0x49,0x44, 0x41,0x54,0x78,0xda,0xc5,0x97,0x4b,0x6c,0x54,0x55,0x18,0x80,0xbf,0xff,0x9c,0x73, 0xef,0x4c,0x67,0xda,0x69,0xa1,0x28,0x2d,0x58,0x1e,0x4a,0x2,0x2,0x1a,0x62,0x8c, 0xb0,0x70,0x81,0x24,0x26,0xc6,0xf8,0x88,0xb,0x13,0x16,0x2c,0x5c,0xb8,0x71,0x61, 0x5c,0xb2,0x21,0xc6,0xad,0x6b,0x13,0x63,0x4c,0xdc,0xba,0xc1,0x18,0x13,0x5f,0xb, 0x5f,0xb,0x21,0xc4,0x58,0x8d,0xa,0x86,0x2a,0x48,0x6c,0x1,0x69,0xa1,0xb5,0x8f, 0x99,0x7b,0x67,0xee,0xeb,0x1c,0xef,0x9d,0x34,0x2a,0x99,0x4e,0x99,0x42,0x80,0x2f, 0xf3,0xcf,0xb9,0xb9,0x37,0x33,0xff,0x77,0xfe,0xff,0xfc,0x8b,0x2b,0xce,0x39,0xee, 0x26,0x8a,0xbb,0x8c,0x61,0x99,0xb7,0xbe,0x9c,0x3b,0x3c,0x58,0x56,0xef,0x89,0x50, 0xe1,0x7f,0x38,0x47,0x16,0xc5,0xee,0xf3,0xf3,0x73,0x72,0xe4,0xcd,0x17,0xd7,0x2d, 0xde,0xb6,0xa,0x28,0x38,0x50,0xf2,0x6c,0xc5,0x37,0x96,0xff,0x47,0x7e,0x4f,0xd7, 0xaa,0xee,0x99,0xed,0xc3,0xf6,0x93,0xa3,0xc7,0xe7,0x7,0x6f,0x5b,0x5,0x92,0xc, 0xa2,0xc4,0xd1,0x8d,0x8a,0xcf,0xe3,0xf7,0x6f,0xc8,0x16,0xde,0xf9,0x7a,0x8e,0x5b, 0x41,0x89,0x8b,0xa3,0x94,0x17,0x5e,0x7d,0x72,0xc3,0x67,0xd7,0x9,0xc4,0x89,0x2d, 0x4,0x6e,0x5c,0x2e,0xe1,0x56,0xf1,0xe3,0x84,0x43,0xc0,0xf5,0x2,0xd3,0x8b,0xcd, 0xa1,0x85,0xd0,0x71,0x27,0x88,0x52,0xd6,0xb3,0x8c,0x1c,0x7d,0x7f,0xf2,0xdb,0x6a, 0x59,0x3d,0x4,0x52,0x16,0x5c,0x89,0x3b,0x80,0x43,0x22,0x70,0xad,0xa0,0x65,0x4f, 0x9b,0xb,0xb3,0xd9,0x56,0xa3,0x5d,0xa8,0x4,0xad,0x14,0x77,0x44,0xc0,0x5a,0x12, 0xeb,0x8,0x93,0xd4,0x6e,0x35,0xbe,0xe7,0x5,0x46,0xeb,0x41,0x25,0x20,0x42,0x4f, 0x54,0x54,0x8b,0xd1,0xf2,0x22,0xa3,0xfd,0x29,0x33,0xd,0xe1,0x6a,0xd4,0xcf,0x62, 0x56,0xa3,0x57,0x9c,0x3,0xeb,0x40,0xa9,0x2c,0x30,0xbe,0xf1,0x43,0xa3,0xd5,0xa0, 0xe0,0x7a,0x12,0xd8,0x33,0x70,0x89,0x47,0x46,0x23,0xb6,0x8c,0x6d,0xa6,0x5a,0xad, 0x12,0x45,0x11,0x53,0x53,0x53,0x7c,0x77,0xfe,0x32,0xbf,0x25,0xf,0x92,0x61,0x7a, 0x12,0x70,0x8,0x4a,0x74,0x68,0x3c,0xcf,0xb,0x3d,0xad,0x0,0x87,0xe0,0x58,0x8d, 0x4d,0xfa,0x52,0x3e,0x8b,0x30,0x34,0xb4,0x91,0xf1,0x9f,0x27,0x38,0x37,0x93,0xb0, 0x69,0x50,0xb3,0x6f,0xd7,0x66,0x9e,0xde,0x3f,0x8c,0xfe,0x7e,0x82,0x89,0x6c,0x5f, 0x2f,0x67,0x0,0x10,0x44,0xd9,0xd0,0x94,0x3d,0x13,0x68,0xad,0xdb,0x5a,0x6e,0x15, 0x1,0xc1,0xb2,0xb7,0xff,0x12,0x22,0xa3,0xbc,0xfb,0xe9,0x4,0xf3,0xa5,0xdd,0xf4, 0xf5,0xaf,0x67,0xb2,0xde,0xe0,0xe4,0x17,0x17,0x38,0xf2,0xd8,0x12,0xf,0xdf,0x67, 0xb8,0x3c,0xb5,0x44,0x53,0xf,0xb3,0x1a,0x82,0x80,0x8,0x3a,0x6f,0x81,0xf2,0x3d, 0x15,0xf8,0x46,0xf0,0x8a,0xd0,0x74,0x8d,0x8a,0x9b,0x67,0xa0,0xbf,0x8f,0xb,0x7f, 0x4e,0xd1,0xac,0xee,0xa6,0x36,0x34,0xdc,0xfe,0x4d,0xb5,0x7f,0x80,0xbe,0x8d,0x3b, 0x39,0x75,0xfa,0x22,0x23,0x23,0x23,0xd4,0xd2,0x49,0x3c,0xcd,0xea,0x61,0x84,0x22, 0x67,0x91,0x3b,0x6f,0x81,0x84,0x46,0x81,0x2d,0x2a,0x60,0xe9,0x8a,0x1f,0x5c,0xa1, 0x56,0xab,0x31,0x35,0x97,0x51,0xa9,0xd,0x21,0x8a,0x7f,0xf1,0x4c,0x99,0xc5,0xfa, 0xbd,0x94,0x4a,0x25,0x74,0x6b,0x6,0xaf,0xc6,0xaa,0x88,0x72,0x28,0x11,0x52,0x2b, 0x45,0xb,0x54,0xa8,0x4,0xac,0x15,0xac,0xa2,0x2b,0x36,0x6d,0x61,0x4c,0x25,0x4f, 0x52,0xc6,0x77,0xa6,0xf3,0x4f,0x4b,0x7d,0x14,0xb8,0x2c,0x6d,0xef,0x70,0x35,0x8a, 0xe4,0x4a,0x9,0xc6,0xe5,0x2,0xbe,0x91,0x40,0x9,0x64,0x85,0x80,0xa5,0x2b,0xb1, 0xcd,0x68,0x36,0x9b,0x58,0x67,0xf1,0x74,0x67,0x2,0xa7,0x75,0x7b,0x22,0xe2,0x38, 0x6a,0x3f,0x5f,0x8d,0x22,0xb9,0xce,0xc3,0x3a,0x2,0x93,0xdb,0x86,0x4a,0x81,0x64, 0x22,0xd6,0x3a,0xba,0xd1,0x8c,0x96,0x68,0x34,0x20,0x8d,0x62,0x4c,0x6d,0x5,0xc1, 0x78,0x89,0x56,0xab,0x4c,0x2b,0x5c,0x60,0xc0,0x70,0x23,0x1,0x31,0xba,0xbd,0xe1, 0xbc,0x5,0x86,0x0,0x25,0x28,0xa4,0x70,0xe8,0xdc,0xd9,0xfc,0xaf,0x6c,0x6e,0x9e, 0x60,0x29,0xfd,0x8b,0x9f,0x4e,0x6,0xed,0x3e,0xef,0x1a,0x3b,0x8b,0x28,0x43,0x6e, 0x8f,0x4d,0x2d,0xd6,0xa6,0xcc,0xd4,0x67,0xf8,0xea,0xe3,0x16,0xc3,0x59,0xc2,0xd8, 0xcc,0xdb,0xfc,0x11,0x6d,0xc1,0xdb,0xfe,0x2c,0x2b,0xa1,0xb,0x1,0x23,0x60,0x5d, 0x5e,0x1,0x5f,0x42,0x59,0x1e,0xc,0x95,0x75,0xa,0xc4,0xe1,0x55,0xec,0xfc,0x59, 0xf6,0xef,0xd9,0xcb,0xba,0x7b,0x46,0x28,0x55,0x87,0x72,0x89,0xa,0x88,0xc6,0xd9, 0x4,0xd1,0x1e,0x4a,0x14,0x59,0x96,0x92,0x46,0xd,0xe2,0x60,0x96,0xf1,0x1f,0xc6, 0x9,0x67,0x62,0x36,0xec,0x90,0x95,0x5,0x34,0xe2,0x19,0xc1,0x41,0x68,0x4a,0x5a, 0xda,0x15,0x0,0x41,0x54,0x67,0xb,0x32,0xbd,0xbc,0x66,0x11,0xad,0xc6,0x2c,0x2e, 0xa9,0x23,0x95,0x1,0xaa,0x43,0x23,0x54,0x86,0xc7,0x48,0xe2,0x90,0xa4,0x59,0xc7, 0xe6,0xab,0x4b,0x3,0xf2,0xaf,0xe5,0x32,0x83,0xf1,0x58,0x11,0xa3,0x8a,0x11,0x14, 0xb0,0x4,0xf9,0x14,0x48,0x68,0x45,0x70,0x56,0x72,0x3a,0x8d,0x53,0x25,0xdc,0xc, 0x4a,0xc0,0xd3,0xd2,0x4d,0x40,0x7c,0x23,0x28,0x47,0x58,0xb4,0x20,0x70,0xe,0xb2, 0xcc,0xad,0x94,0x9f,0x58,0x71,0xb,0x2,0xac,0x88,0x56,0x2e,0x17,0x0,0x11,0x9, 0x4c,0x9f,0x27,0x61,0xe2,0x20,0xce,0xd0,0x62,0x3b,0xd,0xd4,0x4d,0xa,0x88,0x12, 0x8c,0x91,0x2e,0x53,0x80,0xf6,0x3c,0x21,0xff,0x84,0x26,0x73,0x34,0xea,0xb1,0x48, 0xa3,0x85,0x71,0x74,0xd2,0xca,0xa0,0xc6,0xda,0x49,0x2c,0xd4,0xe3,0x2e,0x72,0x60, 0xac,0x12,0x19,0xf4,0x5d,0xc3,0xd8,0x32,0x67,0x2e,0x9e,0x9b,0x5c,0xf2,0x8b,0x53, 0x45,0xa7,0x42,0x31,0xf7,0x37,0x43,0x96,0xa6,0x84,0x61,0x48,0x37,0x85,0x85,0xd9, 0xe9,0xfa,0xc0,0xde,0xb1,0x33,0xe6,0xb9,0xad,0x52,0x7f,0x7e,0xdb,0xb6,0x63,0xc0, 0xa3,0xfc,0xb7,0x59,0x61,0x99,0x27,0xe,0xec,0xd8,0xf9,0xf2,0xe1,0x43,0x7,0x59, 0x23,0x13,0x27,0x3e,0xfc,0xfd,0xf8,0xb1,0xd7,0xbf,0xa1,0x13,0x7,0x2c,0x1,0xe3, 0xce,0xb9,0xba,0x81,0x36,0x1f,0x2c,0x47,0x7,0x7,0xf7,0x3f,0xf0,0x12,0xb0,0x66, 0x81,0xb1,0xd1,0x75,0xa7,0x80,0x57,0x7a,0x7a,0x2f,0x70,0x39,0x74,0xe1,0x8d,0xd7, 0x9e,0xea,0x8b,0x13,0x4b,0x23,0x68,0x61,0x51,0xf8,0x71,0x46,0x94,0x8,0xb1,0x5b, 0xa4,0x69,0x2b,0xa4,0x71,0x93,0x34,0xa,0x48,0xda,0xd1,0x68,0x5f,0xb7,0xa2,0x14, 0x71,0x52,0x75,0x39,0x3d,0x8,0xac,0xce,0xe9,0x89,0xe9,0xe9,0x6b,0x7f,0x47,0x1f, 0xfd,0x32,0x71,0x79,0x50,0x29,0xe5,0x21,0x4a,0x89,0x68,0xa3,0x4c,0x49,0x6b,0xaf, 0x4f,0x3b,0x97,0x59,0x6c,0x96,0xe1,0xb2,0x14,0x67,0xf3,0x35,0xcd,0x1a,0xf5,0x7a, 0xfd,0xca,0xb5,0xb9,0x1f,0xe9,0x81,0x9e,0xdf,0x8e,0x25,0x87,0x35,0xe0,0x72,0x7a, 0x16,0xb8,0x9b,0xfc,0x3,0xab,0x7f,0x2,0xeb,0xcb,0xf8,0x7e,0x94,0x0,0x0,0x0, 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/upload_s.png 0x0,0x0,0x6,0x7e, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x6,0x0,0x0,0x0,0xe0,0x77,0x3d,0xf8, 0x0,0x0,0x6,0x45,0x49,0x44,0x41,0x54,0x78,0x9c,0x85,0x95,0x7d,0x4c,0x54,0x57, 0x1a,0xc6,0x9f,0xf7,0xdc,0x73,0xe6,0x32,0x7c,0x88,0xd2,0x41,0x3e,0x46,0xc0,0xc0, 0x82,0x56,0xd0,0xfa,0x81,0xa,0x11,0x8,0xd8,0x6a,0xc5,0xa6,0x6a,0xb,0xc5,0xd6, 0xb0,0x26,0x8d,0x24,0xfe,0x59,0x49,0x9b,0xa6,0x26,0x9b,0x76,0xdd,0xec,0x76,0x4d, 0xb5,0x9,0xb1,0x9b,0xdd,0x64,0xb3,0x69,0x4c,0x37,0xdd,0x34,0x36,0x96,0xca,0x3f, 0x82,0x84,0x2e,0xb5,0x15,0x48,0x2b,0x14,0xd6,0x4e,0x15,0x61,0x80,0x1,0x6,0x90, 0x99,0x11,0x81,0x61,0x66,0x98,0x3b,0xf7,0x9c,0xfd,0x63,0x4,0x6d,0xa5,0xbb,0xcf, 0xcd,0xcd,0x4d,0x6e,0xde,0xf3,0xfe,0xee,0x7b,0xee,0xf3,0xe4,0x90,0x52,0xa,0xbf, 0x54,0x45,0x45,0x5,0xaf,0xae,0xae,0xce,0xcd,0xca,0xca,0x4a,0xe5,0x9c,0xc7,0x6, 0x2,0x1,0x22,0x22,0xac,0x54,0xbb,0x24,0xc6,0x18,0x53,0x4a,0x91,0xdf,0xef,0xb7, 0xf6,0xf6,0xf6,0xe,0x76,0x76,0x76,0xde,0xee,0xe8,0xe8,0x58,0xe0,0x2b,0x15,0x13, 0xd1,0x86,0xe2,0xe2,0xe2,0x7f,0xa6,0xa4,0xa6,0x64,0x73,0x8d,0xc7,0x10,0x11,0x88, 0xe8,0x89,0xba,0xc7,0x81,0x8c,0x18,0x81,0x0,0xc3,0x30,0x58,0x30,0x18,0x1c,0xf6, 0x78,0x3c,0x1f,0x6e,0xdc,0xb8,0xf1,0x93,0x15,0x1,0xb3,0xb3,0xb3,0x16,0x21,0xc4, 0xd6,0xb4,0xd4,0x34,0xf2,0x3e,0xf0,0xa2,0xb1,0xbf,0x51,0x4d,0xcf,0x4e,0x2b,0x25, 0x97,0x3b,0x2a,0x42,0x74,0x22,0x5,0x15,0x7d,0x4a,0x5,0x8b,0x69,0x51,0x45,0xc9, 0x45,0x94,0xbf,0x29,0x3f,0x77,0x68,0x68,0xe8,0xb8,0xcd,0x66,0xfb,0xf7,0x8a,0x80, 0xfa,0xfa,0xfa,0xde,0xab,0x57,0xaf,0x7e,0x94,0x94,0x90,0x54,0x77,0xf1,0xbb,0x8b, 0xfa,0x19,0xef,0x19,0x66,0x8d,0xb5,0x12,0x8,0x44,0x44,0x0,0x1,0xf4,0xf0,0xc2, 0x63,0x83,0x85,0xbc,0x21,0xb5,0xfa,0xea,0x6a,0xe3,0xfd,0xa2,0xf7,0x59,0x42,0x7c, 0x82,0x4d,0x4a,0xb9,0x76,0x45,0x40,0x6d,0x6d,0xad,0xaa,0xaa,0xaa,0x6a,0xc8,0xcd, 0xc9,0x5d,0x5f,0x98,0x52,0x78,0x30,0x6b,0x2c,0x4b,0x59,0x9e,0xb2,0xb0,0xc4,0x84, 0x44,0x58,0x74,0xb,0x4,0x17,0xd0,0x48,0x3,0x3,0x8b,0x42,0x0,0x18,0x41,0x3, 0xc3,0x9e,0x61,0x72,0x5,0x5c,0x70,0x8e,0x38,0x15,0x67,0x1c,0x4a,0x29,0xac,0x8, 0x0,0x80,0xcd,0x9b,0x37,0xa7,0x6f,0x78,0x7a,0x43,0xfa,0xfa,0xac,0xf5,0xda,0xde, 0xbb,0x7b,0x71,0x65,0xe1,0xa,0xb6,0x64,0x6d,0x41,0x69,0x72,0x29,0x7c,0xdc,0x87, 0xb1,0xc0,0x18,0x16,0xc3,0x8b,0x51,0x80,0x4,0x66,0xe6,0x67,0xc0,0xc,0x6,0x10, 0x28,0x1c,0xe,0x93,0x66,0xd1,0x0,0xe0,0x49,0xc0,0xe1,0xc3,0x87,0xad,0xfb,0xf7, 0xef,0xdf,0x77,0xe2,0xc4,0x89,0x7f,0x24,0xd9,0x92,0x92,0x9b,0x1c,0x4d,0xaa,0x2b, 0xa5,0xb,0xaf,0x17,0xbc,0x8e,0xba,0xcc,0x3a,0xf8,0xc8,0x87,0xf6,0x85,0x76,0xc4, 0xb1,0x38,0xc4,0x2c,0xc6,0x40,0x49,0x5,0x33,0x68,0x62,0x1e,0xf3,0x60,0x8c,0x81, 0x18,0x31,0x53,0x99,0x50,0x50,0x4f,0x2,0xea,0xea,0xea,0xe2,0x6b,0x6b,0x6b,0x7f, 0x5b,0x52,0x52,0xf2,0x76,0x5c,0x7c,0x5c,0xf2,0xc7,0x3d,0x1f,0xe3,0xa2,0xf7,0x22, 0xd5,0x6c,0xaf,0x41,0x75,0x5a,0x35,0x86,0x69,0x18,0x37,0xfc,0x37,0x30,0x1f,0x9a, 0x7,0xd7,0x38,0x84,0x2e,0x20,0x4d,0x89,0x70,0x24,0xc,0x4d,0xd3,0x40,0x8c,0x40, 0x8c,0x98,0x92,0x8f,0xdc,0xf5,0x33,0x40,0x59,0x59,0xd9,0x1b,0xfb,0xf6,0xed,0x7b, 0x23,0xd6,0x12,0x9b,0xfc,0xc1,0xb7,0x1f,0xa8,0xcf,0x43,0x9f,0xd3,0x4b,0x5b,0x5e, 0xc2,0xf1,0xf4,0xe3,0xe8,0x53,0x7d,0xe8,0x5e,0xe8,0x46,0xc0,0x8,0xc0,0xa2,0x59, 0x40,0x8c,0x0,0xd,0x90,0x11,0x9,0x93,0x9b,0xd0,0x98,0xb6,0xf4,0xd3,0x49,0x2a, 0xf9,0x68,0x82,0xfa,0xfa,0x7a,0x4a,0x4f,0x4f,0x4f,0xcb,0xcf,0xcf,0x7f,0xeb,0xd8, 0x6b,0xc7,0xea,0xdd,0x1e,0x37,0xde,0xfb,0xfa,0x3d,0xf5,0x95,0xf8,0xa,0xa7,0x76, 0x9f,0xc2,0xde,0xe4,0xbd,0xb8,0x16,0xbe,0x86,0xc1,0xe0,0x20,0x48,0x12,0x74,0xae, 0x83,0x88,0x40,0x8a,0xa0,0x4c,0x5,0x29,0x65,0xf4,0x9d,0x46,0x50,0xa4,0xa0,0x48, 0x41,0x4a,0x49,0xf,0xfb,0x83,0xdb,0xed,0xf6,0xb4,0x5d,0xbb,0x76,0x9d,0xd9,0xb1, 0x63,0xc7,0xb1,0x81,0xf1,0x1,0x9c,0xfb,0xe1,0x1c,0x7a,0x44,0xf,0x9d,0xde,0x79, 0x1a,0x5,0x6b,0xa,0xd0,0x16,0x6c,0xc3,0xed,0xc0,0x6d,0x68,0xa4,0x41,0xe7,0x3a, 0x98,0x16,0x75,0xce,0x12,0x80,0x49,0x16,0x75,0x8b,0x88,0xba,0x46,0x29,0x45,0x4b, 0x5f,0xf,0x0,0x3c,0x21,0x21,0xe1,0xd9,0x75,0xeb,0xd6,0x1d,0x13,0x4c,0xc4,0x7e, 0xfa,0xe3,0xa7,0xf8,0x1e,0xdf,0xe3,0xcd,0xc2,0x37,0xb1,0x69,0xcd,0x26,0xb4,0xce, 0xb5,0x62,0xc4,0x3f,0x2,0xce,0xa3,0xfb,0x4d,0x44,0xcb,0xfe,0x27,0x45,0xe0,0x92, 0x23,0x1c,0xc,0x63,0x61,0x6e,0x1,0xc2,0x2a,0xa2,0xc9,0x56,0x78,0x74,0x3,0xe0, 0x5e,0xaf,0x37,0xcd,0xed,0x76,0x5b,0x53,0xd6,0xa6,0x20,0x1c,0x9,0x2b,0xff,0x8c, 0x9f,0xbe,0x71,0x7e,0x83,0xae,0x99,0x2e,0x4,0x55,0x10,0x56,0xdd,0xa,0xc1,0x4, 0x20,0x1,0x25,0xa3,0xc9,0xd5,0xa0,0x41,0x48,0x1,0x33,0x64,0xc2,0x37,0xe9,0x83, 0xcb,0xe3,0x42,0x52,0x66,0x12,0x34,0xa1,0x41,0x49,0xa5,0x14,0xd4,0x72,0xfc,0x98, 0xcb,0xe5,0xfa,0x6e,0x74,0x74,0x74,0xf4,0xfe,0xcc,0x7d,0x54,0x66,0x57,0x22,0x7e, 0x3e,0x5e,0x5d,0x1f,0xba,0x8e,0xe1,0x89,0x61,0x84,0x83,0x61,0xc8,0x88,0x84,0x94, 0x12,0x66,0xc4,0x84,0x19,0x31,0x81,0x8,0xc0,0x23,0x1c,0x2c,0xc4,0xe0,0x73,0xfb, 0xf0,0xd3,0x9d,0x9f,0xd0,0xf3,0x63,0x8f,0x72,0x79,0x5d,0xd0,0x63,0x74,0x90,0x49, 0x8a,0x40,0xcb,0x7b,0xa4,0xd9,0x6c,0xb6,0xe9,0x60,0x30,0x88,0xb8,0xb8,0xb8,0x9d, 0x5b,0xf3,0xb6,0x5a,0xf5,0x45,0x9d,0xda,0x47,0xdb,0x11,0x13,0x1f,0x83,0x18,0x11, 0x3,0xc1,0x5,0x4,0x17,0x20,0x45,0xd0,0x94,0x6,0x5d,0xe9,0xd0,0x16,0x35,0xcc, 0x4c,0xcd,0xa0,0xbb,0xaf,0x1b,0xfd,0xff,0xe9,0x37,0x33,0x27,0x33,0x95,0x1b,0x6e, 0xa,0x89,0x10,0xf9,0x5d,0x7e,0xb3,0xe4,0xa9,0x12,0x26,0xb8,0xb8,0xef,0x1c,0x72, 0x36,0xf1,0x96,0x96,0x96,0x80,0xdd,0x6e,0xff,0xc8,0xef,0xf7,0x6b,0x56,0xab,0xf5, 0xf7,0xaf,0x3c,0xf3,0x8a,0x6e,0x2c,0x1a,0x38,0x37,0x7c,0xe,0xa4,0x8,0xc,0xc, 0x9c,0x38,0x98,0xce,0xa0,0x31,0xd,0x11,0x23,0x82,0x89,0xa9,0x9,0xdc,0xba,0x7d, 0xb,0x23,0x7d,0x23,0xe6,0x8b,0x49,0x2f,0xe2,0x85,0x67,0x5f,0xd0,0x7a,0x47,0x7a, 0x71,0xc5,0x75,0x45,0xad,0x5d,0xb5,0x96,0x15,0x6c,0x2c,0xc0,0x80,0x73,0xe0,0x51, 0xe,0xdc,0x6e,0x77,0xc8,0x6e,0xb7,0xff,0x35,0x23,0x23,0x23,0x5f,0x70,0x71,0xf4, 0xd5,0xc2,0x57,0xc5,0xdd,0x7,0x77,0xd1,0x3c,0xde,0xc,0xc1,0x4,0x2c,0xdc,0x2, 0xdd,0xd4,0x11,0x32,0x42,0xf0,0x4c,0x79,0xe0,0x18,0x74,0x60,0xea,0xce,0x94,0x3c, 0x9a,0x76,0x94,0x9e,0x2f,0x7e,0x9e,0xcd,0xf9,0xe7,0x2,0xc6,0x7d,0x63,0xe4,0x64, 0xce,0xc9,0xbc,0xc4,0xd5,0x89,0x9c,0x40,0x30,0xa5,0x9,0x0,0xb4,0x1c,0x34,0xb7, 0xdb,0x3d,0x57,0x59,0x59,0xf9,0x27,0xab,0xd5,0x6a,0xe3,0x82,0xef,0x3f,0x55,0x7a, 0x8a,0x3d,0xb8,0xf6,0x40,0x76,0x8c,0x75,0x50,0xac,0x25,0x96,0x84,0x10,0xf0,0x4c, 0x7b,0x70,0x6b,0xe8,0x16,0x16,0x86,0x17,0xe4,0xcb,0x69,0x2f,0xd3,0xc1,0xd2,0x83, 0x34,0xed,0x99,0xf6,0x37,0x35,0x35,0x5d,0x1a,0x1f,0x1f,0xff,0xac,0xb2,0xb2,0xf2, 0xf4,0x9a,0xd5,0x6b,0x2a,0xc2,0x46,0x18,0xa6,0x69,0x46,0xc,0xc3,0x30,0xe8,0x97, 0xa7,0xd4,0xf6,0xed,0xdb,0x37,0x1c,0x39,0x72,0xe4,0x2f,0x7,0xe,0x1c,0x78,0x6e, 0xd5,0xaa,0x55,0xea,0xdd,0xe6,0x77,0x8d,0x1b,0xb8,0xa1,0xd9,0x98,0x4d,0xf3,0x8d, 0xfa,0x54,0xa2,0x37,0x51,0xd6,0xe6,0xd7,0xb2,0xc2,0x67,0xa,0xe9,0x4e,0xff,0x9d, 0x91,0xcb,0x97,0x2f,0xff,0xbd,0xbb,0xbb,0xfb,0x93,0xf9,0xf9,0x79,0x77,0x71,0x71, 0x71,0x7e,0x79,0x79,0xf9,0x1f,0x92,0x93,0x93,0x77,0xf6,0xf4,0xf4,0xb4,0xb7,0xb7, 0xb7,0xff,0xee,0x9,0x0,0x0,0x94,0x97,0x97,0xef,0x38,0x74,0xe8,0xd0,0x67,0x65, 0xa5,0x65,0xbf,0xe1,0x3a,0x37,0xdf,0xf9,0xe2,0x9d,0x50,0xff,0x5c,0xbf,0x35,0x33, 0x94,0x49,0x55,0x4f,0x57,0x21,0x2b,0x23,0x8b,0x6,0x9d,0x83,0xa3,0x97,0x2e,0x5d, 0xfa,0xb3,0xc3,0xe1,0xf8,0x72,0xcf,0x9e,0x3d,0xd3,0x2d,0x2d,0x2d,0x12,0x0,0x32, 0x33,0x33,0xed,0xa9,0xa9,0xa9,0x5,0x93,0x93,0x93,0x13,0x8c,0xb1,0xbb,0x2b,0x2, 0x2e,0x5c,0xb8,0x40,0x37,0x6f,0xde,0x3c,0x5a,0x58,0x58,0x78,0x7e,0xf7,0xee,0xdd, 0x76,0xdd,0xaa,0x9b,0xfd,0x23,0xfd,0x4c,0x85,0x14,0x9,0x4d,0xa8,0xbe,0xbe,0xbe, 0x81,0xb6,0xb6,0xb6,0x6,0x87,0xc3,0xf1,0xaf,0xba,0xba,0xba,0xb9,0xf3,0xe7,0xcf, 0xff,0xac,0x49,0x43,0x43,0x3,0x4d,0x4c,0x4c,0x50,0x4d,0x4d,0x8d,0x5c,0x11,0x0, 0x0,0x39,0x39,0x39,0xa2,0xa8,0xa8,0xe8,0xb5,0x6d,0xdb,0xb6,0xfd,0x31,0x37,0x37, 0x37,0x83,0x73,0x8e,0x7b,0xf7,0xee,0x85,0x3a,0x3b,0x3b,0xaf,0x37,0x37,0x37,0x7f, 0x68,0x18,0xc6,0xb7,0x53,0x53,0x53,0x81,0x15,0x17,0x3f,0xa6,0x5f,0x3d,0x70,0x9c, 0x4e,0xa7,0x91,0x9d,0x9d,0xfd,0x85,0xa6,0x69,0x71,0xb3,0xb3,0xb3,0x27,0x95,0x52, 0x62,0x60,0x60,0xa0,0xab,0xb5,0xb5,0xf5,0x6f,0xba,0xae,0x3b,0x1a,0x1b,0x1b,0x83, 0xff,0xaf,0x39,0x0,0xfc,0xea,0x4,0x4b,0xca,0xcb,0xcb,0x8b,0xb1,0xdb,0xed,0xb9, 0x81,0x40,0x20,0x76,0x6c,0x6c,0x6c,0x22,0x23,0x23,0x63,0xf2,0xec,0xd9,0xb3,0x66, 0x45,0x45,0xc5,0xff,0x5e,0xf8,0x50,0xff,0x5,0x3f,0x1d,0xe1,0x9e,0x63,0xba,0x54, 0x72,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/rename.png 0x0,0x0,0x2,0x7, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x12,0x8,0x6,0x0,0x0,0x0,0x52,0x3b,0x5e,0x6a, 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x6f,0x46,0x46,0x73,0x0,0x0,0x0,0x0,0xff,0xff, 0xff,0xfe,0x0,0xfa,0xec,0x8f,0x6d,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0, 0x0,0xb,0x12,0x0,0x0,0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x7, 0x74,0x49,0x4d,0x45,0x7,0xd1,0x4,0x18,0x11,0xf,0x2,0x1,0xe9,0x8,0x3e,0x0, 0x0,0x1,0x6f,0x49,0x44,0x41,0x54,0x78,0x9c,0x9d,0x91,0x4f,0x28,0x83,0x61,0x1c, 0xc7,0xbf,0x8f,0x56,0x92,0xd5,0xb4,0xa8,0xa5,0xf9,0x9b,0x9c,0x8,0x7,0x87,0xd1, 0xc4,0x6d,0x24,0xe,0x6e,0x2b,0xf5,0xce,0x85,0x84,0xd2,0x8e,0xc2,0x34,0x39,0xd1, 0x8a,0xdd,0xd0,0x5e,0xb5,0x5c,0x95,0x14,0xe,0x2e,0x6c,0x76,0xd8,0x61,0xcc,0xdc, 0xb6,0xac,0x1d,0x76,0xd2,0x98,0x5e,0xc3,0x94,0x9f,0xd3,0xcb,0xde,0x3f,0xdb,0x3b, 0x3e,0xf5,0x5e,0xbe,0x3d,0xdf,0xcf,0xf3,0x7b,0xde,0x1f,0x20,0x23,0x1f,0xde,0xa2, 0xc0,0xf2,0x10,0xc9,0xf3,0xb2,0xf9,0xf2,0xe8,0x29,0x1f,0xda,0xa4,0xab,0xa5,0xc1, 0xb2,0x24,0x15,0xf2,0x20,0xf8,0x39,0x86,0x58,0x24,0x81,0xfe,0x91,0x69,0x6c,0x3b, 0x3a,0x35,0x25,0x12,0x81,0x6f,0xae,0x8f,0x0,0xe0,0x55,0xc8,0xe2,0xe6,0xf6,0x12, 0xf3,0x6b,0x7,0x9a,0x12,0x89,0xc0,0xe1,0xbd,0x46,0x3c,0x95,0x84,0x28,0x89,0x9c, 0xec,0x6a,0x4a,0x98,0x3c,0x30,0xeb,0x19,0xb9,0x39,0xb,0xda,0x1a,0x9b,0x1,0x0, 0xd5,0x7a,0x3,0xba,0xbb,0x6,0xe0,0xdd,0xdb,0xc0,0x82,0xef,0x4e,0x71,0x5e,0x11, 0x0,0x40,0x8b,0x81,0xd1,0xca,0xe4,0xaf,0x44,0xc8,0x9,0xb0,0x4d,0xad,0xe2,0xfe, 0xc2,0x8f,0xe,0x87,0x47,0xd2,0x51,0xfc,0x44,0x0,0x78,0xc8,0x12,0x5b,0xf7,0x87, 0x10,0x4f,0x25,0x21,0xe4,0x4,0x0,0xc0,0x4b,0x34,0x88,0x56,0xab,0x1d,0x31,0xdf, 0xa2,0xe4,0x39,0xba,0x62,0x6f,0x4b,0x3c,0x13,0x73,0x1e,0x46,0x68,0xc6,0x52,0xfb, 0x93,0xd9,0x1a,0x9a,0x60,0x36,0xb5,0x4b,0xce,0xa9,0x4e,0x20,0x92,0xc9,0xbc,0x31, 0x6b,0x6f,0xf,0x72,0x1f,0xef,0x8,0x47,0xd3,0x38,0x3b,0xda,0x47,0xa5,0xb1,0x4e, 0x32,0x45,0xd1,0x9,0x44,0x86,0x5d,0xc7,0xc,0x0,0x4e,0x5d,0x16,0x3a,0xf,0x84, 0xf0,0xf8,0xa4,0x43,0xba,0xaa,0x46,0xab,0x56,0x9c,0x89,0xf1,0x51,0xaa,0x37,0x19, 0x89,0xdf,0x71,0x29,0x57,0xcb,0x71,0x9c,0x18,0x52,0x89,0xf,0x0,0xc8,0x39,0x6b, 0x27,0xa0,0x60,0x8d,0x5,0x65,0xf0,0x3c,0xaf,0xba,0x5e,0x35,0x98,0xbc,0xfc,0x57, 0x9,0x53,0x2b,0x97,0x83,0x78,0x41,0xc9,0x35,0x96,0x42,0xbc,0xf8,0xdf,0x13,0x88, 0x7c,0x3,0x81,0xb1,0x90,0x2c,0xd1,0x2b,0x3d,0x2b,0x0,0x0,0x0,0x0,0x49,0x45, 0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/battery1.png 0x0,0x0,0x8,0xe0, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x47,0x0,0x46,0x0,0x46,0xf8,0x38, 0x2a,0xf1,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0xb,0x13,0x3,0x20,0x0,0xe7,0xc5,0xa7,0x2,0x0,0x0,0x8,0x6d,0x49,0x44, 0x41,0x54,0x78,0xda,0x8d,0x97,0xcb,0x8b,0x5c,0xc7,0x15,0x87,0xbf,0xaa,0x5b,0x7d, 0x1f,0xdd,0x3d,0xd3,0xaf,0x99,0x1e,0x49,0x9e,0x87,0x6c,0xc7,0x48,0x8a,0x64,0xc5, 0x8a,0x4d,0x12,0x6c,0x12,0xb0,0x17,0x5e,0x5,0xc,0xde,0x39,0x64,0x11,0x2f,0xb3, 0xb,0x64,0x9b,0x45,0xfe,0x82,0x64,0x91,0x4d,0x20,0x8b,0x10,0x48,0x20,0x10,0xaf, 0x12,0x8,0x64,0xc0,0x68,0x25,0xdb,0x9,0xc6,0xc4,0xb6,0xe4,0x91,0x2d,0x31,0x96, 0x34,0x93,0xf1,0x4c,0x4f,0xcf,0xf4,0xe3,0x3e,0xfa,0xbe,0xaa,0x2a,0x8b,0x6e,0x8d, 0x24,0x4b,0x1a,0xf9,0x40,0xc1,0xbd,0x50,0x55,0xe7,0xab,0x73,0xea,0x57,0xa7,0x4a, 0x30,0xb3,0xf2,0xd7,0x48,0xc0,0xea,0xb9,0x45,0x61,0x82,0xf9,0x4a,0x31,0xb7,0x6a, 0xcb,0xfa,0x8a,0x8e,0x45,0x73,0x2e,0x16,0x8d,0x38,0x8f,0x43,0x93,0x27,0xe3,0x45, 0x9d,0x1c,0x2e,0xea,0x78,0x70,0xcd,0x4d,0xf,0x8d,0x9b,0x1e,0x8,0x37,0x9f,0xb8, 0xf5,0x78,0x50,0x89,0xb,0xf2,0x33,0x7f,0xa4,0x0,0x4,0x60,0x67,0xed,0x89,0xa6, 0xee,0xfb,0xfe,0x31,0xf0,0x6,0x70,0x1,0x78,0x1a,0xe8,0x1,0x29,0xa0,0x67,0xfd, 0x5c,0x60,0x11,0xe8,0xcc,0xfe,0xa3,0x59,0x7b,0x1f,0xf8,0x0,0xf8,0x2b,0xb0,0x5, 0x98,0x19,0xc4,0x37,0x32,0xa5,0x7f,0xdb,0x51,0xc0,0x4f,0xcd,0xa9,0x57,0xbe,0x6f, 0xe7,0x96,0x2f,0x51,0x5d,0xec,0xa,0xbf,0xd5,0x94,0x95,0x7a,0x47,0xaa,0xba,0xb4, 0x29,0x94,0xa9,0x25,0x66,0xc0,0xb8,0x38,0x64,0x22,0x5b,0x24,0x76,0x40,0xa1,0x17, 0xdd,0x22,0x1f,0xd6,0x3,0x93,0x9e,0xab,0x79,0x49,0xbd,0x26,0x86,0xed,0x4f,0x7e, 0xb2,0xf9,0xbb,0x28,0x67,0xe7,0xe5,0x77,0x90,0xa7,0x4e,0xf0,0x8a,0x10,0xbc,0xdc, 0x69,0x41,0xbb,0xf9,0xb0,0xe3,0xc3,0x21,0x1c,0xc,0xa6,0x2b,0x51,0xc0,0xcf,0x6c, 0x63,0xf9,0xb4,0x59,0x7b,0x75,0x8d,0xd6,0x19,0x44,0xeb,0xc,0x52,0x6b,0x1c,0xad, 0x61,0x30,0x40,0xf,0x6,0xc4,0xc5,0x3e,0x7,0x71,0x8f,0xa1,0x1c,0x32,0x64,0xc8, 0xb8,0x1c,0xbb,0x61,0x1e,0xba,0x4b,0xce,0xe0,0x6c,0xd7,0x19,0x9c,0x3d,0x25,0xf3, 0x13,0xbe,0x43,0xa3,0x54,0xfc,0x2,0x28,0x80,0x1f,0x1,0xbf,0x7c,0x52,0x34,0x94, 0xed,0x3e,0x9f,0x3,0x6b,0xa2,0xfd,0x5c,0x43,0x76,0xce,0x61,0xbd,0x36,0xd6,0x5a, 0x8c,0x31,0x68,0xad,0x1,0x70,0x1c,0x7,0x29,0x25,0x42,0x8,0x8c,0x31,0x94,0x65, 0x49,0x9a,0xa6,0x84,0x61,0x88,0xac,0x40,0xe1,0xce,0xe1,0xe8,0xf9,0xee,0xbc,0x3a, 0x71,0x76,0xa4,0x4d,0x7,0x7a,0x7b,0xdd,0x5,0x7c,0xe5,0xe0,0x77,0x96,0x5e,0xf7, 0x1f,0xe5,0xf8,0x64,0x1d,0xdc,0xca,0x7a,0xa6,0x68,0x3d,0xe3,0x0,0x6b,0xb2,0xf9, 0x34,0x74,0xce,0xa1,0xb5,0x46,0x97,0xe5,0x3,0x0,0x4a,0xa9,0x7,0x0,0x8a,0xa2, 0x20,0x49,0x12,0xc6,0xe3,0x31,0x45,0x10,0x10,0xdb,0x3a,0x35,0x51,0xeb,0x2e,0x38, 0x4d,0x3b,0x14,0xa5,0x80,0x1e,0xb,0x2d,0x7c,0xcf,0xc5,0x2f,0x8f,0x59,0xfd,0xd2, 0x2,0x9e,0x32,0x45,0x39,0xd,0x51,0xa9,0x85,0x30,0x86,0x2c,0xcb,0x48,0xd3,0x94, 0xfd,0xfd,0x7d,0xf6,0xf7,0xf7,0x89,0xe3,0x98,0x24,0x49,0x8e,0x5a,0x18,0x86,0x44, 0x51,0x44,0x9e,0xe7,0x18,0x63,0xf0,0x7d,0x9f,0x76,0xbb,0x4d,0xa7,0x3c,0xa4,0x53, 0x3a,0x4b,0x56,0x9b,0x36,0xb0,0xb3,0xdb,0xe3,0x63,0xd7,0xe5,0xf2,0xe2,0x49,0x5e, 0x7d,0x1c,0xc0,0xce,0x1e,0x57,0x94,0x29,0x74,0x1b,0x10,0x94,0x9a,0xbb,0x0,0x71, 0x1c,0xb3,0xbd,0xbd,0xcd,0x8d,0x1b,0x37,0x8e,0x0,0x94,0x52,0x54,0x2a,0x15,0xc6, 0xe3,0x31,0x51,0x14,0x91,0xa6,0x29,0xc6,0x18,0x82,0x20,0xa0,0xd3,0xe9,0xd0,0x99, 0xec,0x88,0x4e,0xe2,0x90,0xe5,0xfa,0x36,0xc0,0xd5,0xcf,0xe9,0x3,0x7f,0xe6,0xd3, 0xf5,0x77,0x66,0x6a,0x2a,0x81,0x25,0x60,0x8,0xe4,0xb3,0xbd,0xf7,0x9c,0x2a,0xfb, 0xd7,0xc7,0x80,0x55,0x2b,0x2f,0x22,0xe5,0x10,0xe5,0x68,0xa1,0x94,0xa2,0x56,0xab, 0xd1,0x6a,0xb5,0xb0,0xd6,0x92,0xa6,0x29,0x59,0x96,0x11,0x45,0x11,0x65,0x59,0x1e, 0x39,0xd,0x82,0x80,0x95,0x1a,0x2c,0xd7,0x73,0xdb,0x8c,0xc7,0xa2,0xd2,0xdf,0xc3, 0x89,0x34,0x80,0x6c,0xd4,0x78,0xca,0x91,0x9c,0xaf,0x5,0x54,0xeb,0x1,0x21,0x30, 0xb1,0xb0,0x3a,0x93,0xf7,0x30,0x9e,0x30,0x8a,0x26,0xbc,0xa4,0xca,0xfd,0x8d,0x14, 0xc0,0x99,0x6c,0xe1,0xc8,0x1,0x8e,0xe3,0x5b,0xa5,0x7c,0x51,0xad,0x56,0x69,0x36, 0x9b,0xa4,0x69,0xca,0x68,0x34,0x22,0x8a,0x22,0x86,0xc3,0x21,0xbe,0xef,0x13,0x4, 0x1,0xab,0xab,0xab,0x9c,0x3e,0x7d,0x9a,0xe5,0xfc,0x8e,0x5d,0xce,0xee,0x90,0x6e, 0x8d,0x6c,0x7a,0xb0,0x27,0x9c,0x4,0xb,0x38,0xbe,0xcb,0x19,0xe5,0xf0,0x76,0xb3, 0xe,0xed,0xf9,0x87,0x95,0x70,0xe8,0x80,0x31,0xa0,0x4c,0x51,0x58,0x0,0x9d,0xfc, 0x67,0xa2,0x13,0x27,0x75,0xec,0x8b,0x41,0xd5,0xfb,0x8e,0xbf,0xb4,0x50,0x52,0xf3, 0x2,0x4e,0x74,0xaa,0x3c,0xbb,0x3a,0x47,0x36,0x76,0x48,0x43,0x1f,0x95,0x65,0xa8, 0x34,0xa5,0x59,0x5e,0xa3,0x71,0xf3,0x63,0x3b,0x3f,0xd9,0xb7,0xde,0xa4,0x4f,0xd1, 0xbb,0x23,0x8c,0x46,0x18,0x8d,0xb,0x4c,0xba,0x4d,0x94,0xe7,0xe2,0x77,0xd6,0x5e, 0xf7,0x1e,0x95,0xff,0x53,0x5d,0xf0,0x6e,0xaf,0x67,0x4a,0xe7,0x85,0x3,0x58,0x9d, 0x5c,0x99,0x94,0xd1,0x95,0xa1,0xa,0x7e,0x6e,0x3d,0x7f,0xc5,0xab,0xf9,0x92,0x13, 0xb,0x1,0x98,0x9a,0xc0,0xcc,0x41,0x1c,0x40,0xd4,0x80,0xbd,0x5d,0xd8,0x1b,0x58, 0x6e,0x5d,0xb7,0xf6,0xd6,0x75,0x4b,0x14,0x5b,0xa2,0xd8,0x26,0x29,0x8e,0x29,0xc1, 0x6a,0x1c,0xc0,0x2e,0x34,0x71,0xaa,0x1e,0xde,0xb1,0x2a,0x68,0xe1,0x29,0xad,0xf1, 0x60,0x1a,0xe,0x0,0x6c,0xa,0x76,0x64,0xb0,0x19,0x98,0x1c,0xca,0xdb,0x82,0xe2, 0xb6,0x20,0xf6,0x20,0x74,0x5,0x7b,0x9b,0x86,0xcd,0x4d,0x6b,0xfb,0x7d,0x4b,0x12, 0x43,0x51,0x4c,0x87,0x4d,0x8f,0xe,0x8c,0x21,0x6,0xec,0xde,0x21,0xb7,0x7c,0x8f, 0xcb,0x8b,0xf3,0xc7,0xa8,0xe0,0x80,0x2b,0xca,0x68,0x24,0x80,0x3d,0x2,0x98,0x18, 0xec,0xc8,0xa0,0x87,0x58,0x3d,0x82,0x6c,0x43,0x90,0x6d,0x48,0x11,0xb5,0x20,0x6c, 0xc1,0xee,0x86,0xb5,0x9b,0x57,0xd,0xe9,0x6c,0x6f,0x1f,0x8d,0xc3,0x1a,0x83,0x36, 0x6,0x7,0xe0,0xb3,0xdb,0xdc,0x2,0xfe,0xc2,0x17,0xeb,0xbf,0x9a,0xd5,0x17,0x7, 0x58,0x0,0xe,0x81,0x36,0x50,0x3,0x50,0xa6,0x64,0xf2,0x0,0xc0,0x5d,0x93,0x73, 0x2,0xaa,0x2,0xaf,0x2a,0x84,0xfa,0x96,0xe4,0x70,0xc3,0x30,0xdc,0xb0,0x36,0xed, 0x3f,0xb2,0xca,0x59,0x8b,0xb6,0x1a,0x33,0x3,0x70,0x1a,0x1,0xcb,0x8e,0xe4,0xe9, 0x9a,0xc7,0xc5,0xba,0x3f,0x5b,0x24,0xec,0x1,0xe7,0x80,0xdd,0x38,0xe5,0xa5,0x28, 0x5,0xa5,0x4b,0x24,0x50,0x9a,0xaf,0x3,0x88,0xba,0xc0,0x9,0xa4,0x50,0xcf,0xa, 0x44,0x4d,0xa0,0x7b,0xd8,0xc1,0x75,0xc3,0xa4,0x7c,0x64,0xa1,0xb5,0x6,0x63,0x34, 0xb9,0xd5,0x8,0x40,0xfb,0x15,0x5a,0x4a,0xf2,0x76,0xb3,0xa,0xed,0xfa,0x23,0x54, 0x20,0x67,0x2a,0xd0,0x1a,0xd,0x1c,0x58,0x8b,0x3b,0x75,0x1c,0x48,0x44,0x53,0x22, 0x1b,0x42,0x88,0x86,0x20,0xdf,0x82,0x7c,0xc3,0x92,0x6f,0x83,0x2e,0xc1,0x18,0xfb, 0xa8,0x6a,0x6f,0xed,0x74,0xc2,0xbb,0x7b,0xa0,0x3b,0x47,0xc3,0x73,0xf0,0x3b,0x67, 0x1f,0xa3,0x2,0xc0,0xbb,0xbe,0x9e,0x49,0xa3,0x31,0x46,0xb3,0x7f,0x94,0x2,0xe1, 0x83,0x68,0x48,0x21,0xbb,0x12,0xb5,0x2c,0xd0,0x11,0x24,0x1f,0x5a,0xb2,0x2d,0x8b, 0x2e,0xed,0xc3,0xb9,0xba,0x7,0xa0,0xd,0x18,0xcb,0x2,0xe0,0x2e,0xd6,0x51,0x4b, 0xf3,0x78,0xc7,0x55,0xc2,0xa5,0x79,0x3c,0x15,0x9b,0x86,0x4,0x84,0xb2,0x55,0xd7, 0x2b,0x6b,0x81,0x67,0x9f,0x72,0x95,0xd3,0x15,0xc8,0xea,0xb4,0x57,0xe5,0x14,0x54, 0x5f,0x14,0xd4,0x63,0xc1,0x5c,0x4f,0x70,0x30,0x2,0xc6,0x47,0xeb,0xdf,0xc9,0xa4, 0xd8,0x49,0x1d,0xa1,0x13,0x2d,0xcb,0xd4,0xc8,0x24,0x27,0x4,0xd4,0xee,0x98,0x2f, 0xfd,0xa,0x97,0x17,0x4f,0x1d,0xa3,0x82,0x11,0x57,0x54,0x6c,0x1b,0x2b,0x40,0xd7, 0x35,0x1d,0x55,0xd5,0xb,0x81,0xe2,0xa4,0xc2,0x59,0xbc,0x97,0xb3,0xca,0x49,0x81, 0xf4,0xa0,0xd6,0x93,0xcc,0x6d,0x82,0x8b,0xc1,0x8e,0x8f,0x52,0xb0,0x93,0x3b,0xe2, 0xc3,0x50,0xc9,0x56,0x82,0x6c,0xa5,0x46,0x26,0xc5,0xf4,0x96,0xf5,0xd9,0x57,0x7c, 0x9,0xfc,0x8b,0x3b,0xeb,0x7f,0x7,0x12,0x60,0xd,0xd8,0xb9,0xcf,0xff,0xa,0x80, 0x4a,0x2b,0x9d,0xd3,0x40,0x3d,0xb6,0x17,0x2a,0x4e,0x72,0x11,0xe1,0xaf,0x56,0x7c, 0x9d,0x83,0x70,0x90,0xc2,0xc1,0x52,0x1,0x51,0x65,0x62,0x5b,0x24,0xfa,0xa4,0x48, 0xca,0x44,0x26,0xc5,0xd0,0xee,0xc5,0x52,0xf4,0x22,0xc9,0xf5,0xb1,0x14,0x9f,0x8f, 0x85,0xb8,0x50,0x26,0xcc,0x97,0x5,0x46,0x33,0xf,0xec,0x36,0x7c,0x56,0x1c,0xc1, 0xe9,0x9a,0xc7,0x47,0x75,0x97,0x8b,0xc0,0xae,0x9d,0x2a,0x0,0x80,0x38,0xe3,0x6c, 0x94,0x83,0x4a,0xdd,0xce,0x4d,0x60,0xcf,0xb1,0xe7,0x9f,0x21,0x79,0x55,0xf9,0xf5, 0x3a,0xf3,0x3a,0x47,0x3a,0x2e,0x56,0xa8,0x29,0x0,0x55,0x12,0xdb,0xe2,0x50,0x9f, 0x10,0xfd,0x72,0x28,0xf6,0x8b,0x9e,0xbd,0x1a,0x57,0xc4,0xd5,0x81,0x12,0xdb,0x91, 0x61,0x3b,0xb4,0xd4,0x45,0xc9,0x79,0x91,0xa0,0x35,0x73,0xc0,0xb6,0xaf,0x58,0x51, 0x92,0xb7,0x9a,0x3e,0x6f,0xb5,0xab,0x8,0xa0,0x3f,0x3b,0x7,0xee,0xa9,0xc0,0x82, 0x32,0x86,0x3d,0x60,0x6c,0x8f,0xb2,0x5a,0xc1,0x8a,0x2a,0xd6,0x3a,0x68,0xe3,0x30, 0x1a,0x66,0x8c,0x86,0x87,0xec,0x6c,0x15,0x62,0x67,0xdb,0xb3,0xfd,0x41,0x8b,0x7e, 0xbe,0x2c,0xee,0x14,0x39,0x7,0x65,0x4e,0x62,0xa,0xa0,0xc0,0x1a,0xd0,0x16,0x8c, 0x26,0x4,0x44,0xb7,0x86,0xf2,0x14,0x7e,0xe7,0xfc,0x91,0xa,0xe6,0x1f,0x52,0xc1, 0xb5,0xf5,0x4c,0x59,0xc3,0x3c,0x10,0x70,0x1f,0x0,0x54,0x31,0x33,0xa9,0xd,0x86, 0x19,0x77,0xee,0x1c,0xb2,0xb9,0x95,0xb3,0xf9,0x3f,0x4f,0xf4,0x7,0x2d,0xe,0x72, 0xc3,0xa0,0x18,0x30,0x2c,0x87,0xa4,0xc6,0x4e,0x1,0xa6,0xce,0xfb,0x7a,0x6,0xb0, 0x50,0x43,0x55,0x2b,0x4f,0xa8,0x5,0x75,0x3c,0x69,0xd,0x81,0x35,0x3c,0x65,0xbf, 0xa6,0xeb,0x2c,0xcb,0x18,0x8d,0x46,0x8c,0xc7,0x63,0xc6,0xe3,0x31,0x59,0x96,0x1d, 0x7b,0xbd,0x36,0x6,0xb4,0x66,0xc1,0x68,0xd6,0x0,0xb3,0x17,0xb1,0xf1,0x55,0xc8, 0xe5,0xe3,0xc6,0xec,0x8c,0xb9,0xa2,0x8c,0x61,0x0,0xd4,0xee,0x7,0x10,0x42,0x3c, 0x0,0x10,0x86,0xe1,0x13,0x1,0xac,0x5,0x3d,0x8d,0xc0,0x2e,0xc0,0x67,0x3d,0x76, 0x81,0x75,0x76,0xd6,0xff,0x4,0xdc,0xbd,0x98,0x77,0x66,0x6f,0x87,0x7d,0xa0,0xb, 0x3c,0xa3,0xe4,0xa0,0xff,0x12,0x20,0x44,0x9a,0xcc,0x26,0xb2,0x68,0xad,0xc9,0xf3, 0x9c,0x2c,0xcb,0x28,0xcb,0xf2,0x58,0xc7,0x8e,0x35,0x78,0xd6,0x20,0x8d,0x45,0x6b, 0x16,0xb4,0x61,0xc,0xc8,0x86,0xcb,0x8a,0x23,0xf8,0x5e,0xad,0xc2,0x8d,0xba,0xa2, 0xb,0x94,0x16,0x4e,0x2,0x1,0x50,0x8d,0x4b,0xd6,0xa2,0x82,0x8b,0x4a,0xc,0xe, 0x3e,0x2,0x10,0x93,0x7,0x1,0xca,0xb2,0xfc,0x46,0x0,0xca,0x4e,0x21,0x9c,0x29, 0x0,0xb3,0x62,0x64,0x7d,0xc5,0xb2,0x12,0xbc,0xd6,0x74,0x79,0xad,0xed,0x3d,0x50, 0xb,0x7e,0x8,0x70,0x98,0xcd,0x54,0x60,0x87,0x61,0x8,0xc,0x8a,0x2f,0xae,0xf9, 0xa9,0xfb,0x8f,0x20,0x3b,0xff,0x2,0xc5,0xb7,0x2f,0xa1,0x67,0x40,0x8f,0xb3,0xc0, 0x94,0x90,0x4f,0x68,0xe4,0x31,0x8d,0x34,0xa4,0x55,0xe6,0xfd,0x89,0x61,0x3b,0x9e, 0x2,0x88,0xae,0x8f,0xf2,0x24,0xfe,0x85,0x39,0x78,0x7e,0xee,0xe1,0xf1,0x9f,0x86, 0x70,0x35,0x4,0x65,0xf,0x86,0x73,0xc0,0xa0,0xdc,0xf8,0xa4,0x95,0x1e,0xec,0x5, 0x99,0x3,0xf9,0xa9,0x15,0x66,0x4f,0x82,0xc7,0x9a,0x5f,0x96,0xf8,0xf9,0x84,0xb5, 0x34,0x66,0x35,0x8d,0x30,0xc6,0xf6,0x46,0x86,0x77,0x87,0x86,0x4,0xd0,0x8b,0x3e, 0x32,0x70,0xf0,0x2e,0x35,0xe0,0xf5,0xf6,0x23,0x22,0x27,0x61,0xbf,0x4,0x95,0x59, 0x2,0xe0,0x37,0x66,0x92,0xfd,0x20,0xef,0xf5,0x5f,0xd8,0xff,0xf7,0xfb,0xb,0xc9, 0xf6,0xee,0x62,0x26,0x1d,0x91,0x9,0x47,0xa6,0x69,0x86,0x48,0x53,0xfc,0x30,0xa2, 0x11,0x46,0xb8,0xa3,0x31,0xed,0xf1,0x18,0x1b,0x85,0x85,0xd,0xc3,0xc2,0x2b,0xb2, 0xad,0x89,0xb1,0x5b,0xa9,0xe5,0x9f,0x43,0xc3,0x1f,0xbe,0xb2,0xe4,0x80,0xdf,0x9b, 0x70,0xd3,0x73,0x78,0xf7,0xbf,0x43,0xa4,0x2e,0x91,0xd6,0x22,0x2d,0xd3,0x7b,0x1, 0xc0,0xa7,0x11,0xec,0x24,0xf7,0xde,0x6d,0xee,0xef,0x17,0x79,0xd3,0x17,0xbc,0xa1, 0x2c,0xe7,0x1c,0xcb,0x59,0xe1,0x79,0x4a,0x78,0x9e,0xa3,0x5d,0x8f,0xb2,0xe2,0x91, 0x17,0x25,0x79,0xae,0x91,0xc9,0x4,0x99,0x24,0x60,0x6c,0x62,0xb5,0x4d,0x42,0xcb, 0x7b,0x3b,0x86,0xf7,0xb6,0xc,0x1f,0xfc,0xad,0xe4,0x26,0x53,0x27,0x39,0x70,0x9, 0xf8,0x2e,0xf7,0xde,0x9f,0xce,0xac,0x3d,0x60,0xff,0x7,0x80,0x98,0xb4,0xf7,0x4f, 0xaa,0xdd,0x7d,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/view_left_right.png 0x0,0x0,0x2,0xa, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0x7,0x18,0xf,0x23,0x22,0x2,0x63,0x26,0x41,0x0,0x0,0x1,0x97,0x49,0x44, 0x41,0x54,0x78,0xda,0xa5,0x92,0xbf,0x6e,0x13,0x41,0x10,0xc6,0x7f,0x77,0x3e,0x3b, 0xc8,0x46,0x28,0x51,0x22,0xa5,0xb2,0x64,0x29,0x5,0x82,0x96,0x1a,0x1e,0x81,0xa7, 0xa2,0xe3,0x5,0xa8,0x53,0xd3,0xf0,0xc,0x54,0x3c,0x0,0x4d,0x10,0x12,0x42,0x1, 0x37,0x84,0x0,0xb2,0xef,0x6e,0xf7,0x76,0xe6,0xa3,0x58,0xfb,0xec,0x13,0x26,0x14, 0x8c,0xb4,0x9a,0x7f,0xfa,0x66,0xbe,0x99,0xd9,0xe2,0xe9,0xab,0xaf,0x4f,0x66,0x47, 0xa3,0x53,0x25,0xa7,0x6b,0x8d,0xd8,0x1a,0xb1,0x49,0x59,0x7,0x23,0xd4,0x1d,0x31, 0xc,0xe3,0x29,0x18,0x16,0x1b,0xac,0xfd,0x71,0x53,0x1d,0xdf,0x1f,0xbf,0x9e,0x9f, 0x4e,0x17,0x5d,0x10,0x4d,0x23,0xda,0xc6,0x69,0xd6,0xa2,0xae,0x9d,0xa6,0x16,0x75, 0xe1,0x94,0x85,0xe3,0x2e,0x62,0xe7,0x78,0x29,0xbc,0x72,0xa4,0x0,0xe1,0xea,0x53, 0x75,0x32,0x9d,0x2c,0xe6,0x27,0x53,0xda,0x16,0xd6,0x13,0x68,0x26,0xb0,0x1e,0xc1, 0xba,0xca,0x7a,0x5c,0x40,0x55,0x40,0x29,0xc0,0x0,0x7,0x9b,0x0,0xd6,0xd1,0x86, 0xe5,0xa2,0xba,0x78,0x20,0x9e,0x5f,0x80,0x1b,0x24,0x3,0x33,0xb0,0x94,0xed,0xab, 0x2f,0x35,0xc7,0xb3,0x23,0x66,0xe3,0x11,0x29,0x41,0xec,0x44,0x4a,0xc2,0x4d,0x58, 0x72,0x2e,0xdf,0x94,0x54,0x27,0xf7,0xe0,0xf1,0x19,0x7,0xe5,0xc3,0xf5,0x77,0x1e, 0xcd,0xcf,0x78,0x78,0x3e,0xc2,0x5d,0xb8,0x3b,0x66,0x59,0xa7,0xe4,0xbc,0x7d,0x57, 0x50,0x22,0x71,0x97,0x48,0x6c,0xc0,0xea,0xc1,0x3b,0x5b,0x94,0xf2,0xbb,0xb,0x0, 0x7d,0xf7,0x1d,0xd8,0x31,0xcb,0xfe,0x3f,0xb,0x48,0xea,0x19,0xc,0x9f,0x23,0x89, 0x4a,0x7f,0x19,0x41,0x12,0x6c,0x52,0xdb,0x6e,0xbb,0x1d,0x68,0x13,0x13,0xe5,0xa1, 0x2,0x52,0x9e,0x51,0x3d,0x83,0xe1,0xdc,0x5b,0x5f,0x3a,0xb0,0x83,0x2d,0xd8,0x5d, 0x20,0xed,0x2d,0xd1,0xff,0xb8,0x84,0x24,0xaa,0xfd,0x2b,0xec,0x83,0xcd,0x7c,0x93, 0xda,0xd1,0x1d,0x8e,0x90,0x8b,0xf7,0xc,0xf6,0xc1,0x3d,0xc5,0xc1,0x19,0x7d,0x90, 0xdf,0xe2,0xaa,0xdb,0x55,0xc7,0xc7,0xe5,0x1a,0xb7,0xfc,0x39,0xcc,0x1c,0x37,0xc3, 0x92,0x73,0x73,0xdb,0xf0,0x79,0xb9,0xe2,0x57,0x11,0x73,0x5c,0x42,0x2e,0x5c,0xf9, 0x27,0xfe,0x5c,0x75,0x14,0xcf,0x5e,0xbc,0x7f,0x79,0x3e,0x85,0x14,0x13,0x29,0x24, 0x52,0xec,0xb2,0x1d,0x13,0x16,0x13,0x5d,0xc8,0xbe,0x25,0xeb,0xaf,0xb2,0x95,0xeb, 0x6f,0x81,0xff,0x96,0xdf,0xa7,0x7f,0xda,0xf7,0x73,0xb7,0x2d,0xbd,0x0,0x0,0x0, 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/updirectory.png 0x0,0x0,0x2,0x49, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,0x0, 0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd3,0x9,0x2,0x15,0x39,0x16,0x1f,0xda,0x37,0xab,0x0,0x0,0x1,0xd6,0x49,0x44, 0x41,0x54,0x78,0xda,0xcd,0x92,0x3d,0x6b,0x14,0x61,0x14,0x85,0x9f,0x77,0xe6,0x9d, 0xd9,0xcc,0x4e,0x66,0xbf,0x8c,0x1b,0x59,0x15,0x41,0x5d,0xb3,0x16,0x22,0x61,0x3b, 0xc5,0x1f,0xa0,0x46,0x10,0x8d,0x18,0x85,0x58,0x28,0x88,0x96,0x82,0x4d,0x10,0x82, 0x85,0x1,0xb,0x3b,0x11,0x21,0x2c,0x82,0xb5,0x49,0x23,0x6b,0x69,0x6f,0x21,0xd8, 0x58,0x4,0xbb,0x18,0x44,0x4d,0xb2,0xd9,0x75,0x77,0x32,0xdf,0xb3,0xaf,0x85,0x88, 0xab,0xc1,0xaf,0x4a,0x4f,0x75,0xef,0xb9,0xdc,0xa7,0x38,0x1c,0xf8,0xd7,0x12,0x83, 0x4b,0xf1,0x96,0xd2,0x81,0x3c,0x10,0xb7,0xe7,0x44,0xef,0x4f,0x0,0xda,0xd7,0xc1, 0x98,0x56,0x7a,0xb4,0xce,0xc9,0x7d,0x59,0xff,0x85,0x13,0x7,0x8f,0x8c,0x69,0xb5, 0xed,0xaf,0x0,0x69,0x5f,0x1d,0xda,0xeb,0x84,0xf7,0x2e,0x8f,0xc7,0xd5,0xb3,0x7, 0xa3,0xe3,0x25,0xcb,0xbb,0xc9,0xc5,0x7e,0xf1,0xf7,0x80,0xa9,0x40,0xe3,0x42,0x74, 0x78,0x67,0x21,0x9c,0x3f,0x53,0xf,0xab,0x32,0xe3,0xb0,0xbf,0x62,0xdb,0x47,0xf, 0x68,0x37,0xec,0x8c,0x9a,0x63,0x2a,0x70,0x7e,0xd,0x48,0xe3,0x7a,0x7e,0x48,0x3d, 0xa8,0xef,0x49,0xeb,0xab,0x7e,0x8e,0x57,0xcb,0x82,0xd7,0xef,0x74,0x46,0xf2,0x32, 0x53,0x1d,0x55,0xd7,0x41,0xcd,0x70,0xae,0x3b,0xf2,0xf3,0x10,0x27,0x3b,0x2f,0x2d, 0xcb,0x1a,0x2f,0x38,0xa6,0x56,0xce,0x41,0xa5,0x4,0x49,0xa,0x2b,0x2d,0xd8,0x70, 0x61,0xb5,0xed,0xbb,0xa4,0xc1,0x6d,0xe0,0x3e,0xb,0xa5,0xe8,0x47,0x80,0x44,0x45, 0x57,0x7c,0x2f,0xc2,0xf7,0x94,0xe3,0x7b,0x56,0xc3,0x90,0xc3,0x63,0x86,0x6,0x1b, 0xdd,0x28,0x5e,0x6b,0x75,0x1b,0xa0,0x1a,0x20,0x56,0x58,0x2c,0x7f,0x7b,0x3e,0xfd, 0xd6,0x44,0x68,0x47,0x10,0x72,0x56,0xc,0x98,0x59,0x23,0x93,0x7d,0xb8,0x6b,0x34, 0x7f,0xa9,0x30,0x2c,0xf1,0x42,0x58,0xfe,0xe8,0x77,0x82,0xee,0x87,0xbb,0xc0,0x53, 0xe0,0xd,0xa0,0x3,0x63,0xc0,0x24,0x42,0x9c,0x7,0xed,0xc9,0x20,0x40,0xd0,0x8f, 0x4f,0x18,0xd9,0xd2,0xfc,0xee,0x1d,0xf9,0x8a,0xa9,0xb,0xa2,0x14,0x5a,0x9f,0xc2, 0xc0,0x75,0x7b,0xef,0x45,0xdc,0x75,0x95,0xd0,0x45,0x5f,0x77,0x1c,0xd5,0x4f,0x4b, 0xc4,0x9d,0x5,0x84,0x9c,0xf9,0xae,0x48,0x4c,0x2c,0x49,0xe0,0x9a,0xb4,0xcb,0xb3, 0xc5,0x9c,0xbd,0xdd,0x34,0x4d,0xa4,0xfe,0xe5,0x14,0x27,0x10,0x45,0x21,0xbd,0xcd, 0xa0,0x15,0xba,0x6b,0x8f,0x51,0xe9,0x1d,0x9a,0xb5,0xb6,0xd8,0x12,0xeb,0xc4,0x52, 0x6,0xa1,0x9d,0x42,0xb7,0xae,0x9a,0x86,0x3c,0x26,0xa5,0x31,0x4,0x8a,0x38,0x49, 0xd6,0xe3,0x38,0x79,0x4e,0xb2,0xb9,0x8,0x3c,0xa3,0x59,0xf3,0xb6,0x54,0x79,0x0, 0xa2,0x1,0x36,0x60,0xa1,0x5b,0x2,0x14,0xa4,0x41,0xa,0xf8,0x80,0x4f,0xb3,0xd6, 0xe7,0xbf,0xd1,0x67,0xd2,0x54,0xb1,0x19,0x59,0x69,0xd2,0xcf,0x0,0x0,0x0,0x0, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/reload_s.png 0x0,0x0,0x5,0x4a, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x6,0x0,0x0,0x0,0xe0,0x77,0x3d,0xf8, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd5,0x8,0x8,0x0,0x17,0x2a,0xa5,0xdb,0x9,0x52,0x0,0x0,0x4,0xd7,0x49,0x44, 0x41,0x54,0x48,0xc7,0x8d,0x96,0x5f,0x4c,0x53,0x77,0x14,0xc7,0x3f,0x6d,0x7f,0x6d, 0xa1,0xfc,0xb3,0xa,0x2d,0x52,0x2a,0x66,0xca,0xe6,0x26,0x61,0x6,0x12,0x33,0xdc, 0x98,0x91,0x4c,0x12,0x35,0x3e,0x30,0x35,0x62,0x9c,0x41,0x87,0x66,0xf1,0xc1,0x64, 0x4f,0xe3,0xc5,0x18,0xdd,0x12,0x7c,0x30,0x26,0x6e,0x2e,0x1a,0x24,0x48,0x8,0x4b, 0xdc,0xc2,0x8c,0xc1,0x44,0x4c,0x6,0x81,0x6c,0x4,0x17,0x98,0x6,0x35,0x86,0xc6, 0x81,0x73,0x1,0x4,0xda,0x2a,0x2d,0x85,0xb6,0xdc,0xf6,0xf6,0x76,0xf,0x3f,0x6a, 0x83,0xab,0xc6,0xf3,0x74,0x7f,0xe7,0x9e,0xf3,0xfd,0xde,0x73,0x7e,0xe7,0xcf,0xd5, 0xc5,0x55,0x95,0x37,0xc9,0x6d,0x21,0x4c,0x8f,0xc0,0xa6,0x41,0x4e,0xc,0x4c,0x4b, 0xea,0x88,0x1,0x2,0x45,0xe0,0xad,0xad,0xab,0x53,0x68,0x69,0x89,0xbf,0xce,0x5f, 0xf7,0x3a,0x82,0x8b,0x42,0x64,0xfa,0xa0,0x32,0xa,0x1f,0x3,0xe5,0xc0,0x9a,0x74, 0xc8,0x4,0x8,0x43,0x10,0x98,0x0,0x86,0x5,0xc,0xe4,0x40,0xff,0xd7,0xc5,0xc5, 0x1,0x5c,0x2e,0xed,0xad,0x8,0xce,0x9,0x51,0x18,0x86,0xc6,0x38,0x54,0x59,0xc0, 0x9e,0xb,0xa2,0x8,0x28,0xcf,0xce,0xc6,0x92,0x96,0xc6,0xbf,0x1e,0xf,0x77,0x80, 0x19,0x88,0x2d,0x80,0x47,0xc0,0x98,0xa,0x27,0x77,0xc3,0x9f,0x9b,0x6b,0x6a,0x54, 0x3a,0x3a,0xe2,0x29,0x9,0x3a,0x84,0x30,0xb9,0x60,0x57,0x1c,0xbe,0xb7,0x83,0x73, 0x97,0xd1,0x88,0x73,0xfb,0x76,0x38,0x74,0x8,0xca,0xca,0x20,0x2d,0x4d,0x1a,0xc6, 0x62,0x30,0x3e,0xe,0x4d,0x4d,0x28,0x3d,0x3d,0xfc,0xec,0xf5,0x32,0x6,0x73,0x1a, 0xfc,0x90,0xd,0x97,0x1a,0x6a,0x6a,0xdc,0x9,0x92,0x65,0x4,0xdf,0xa,0x51,0x3, 0x9c,0x2d,0x82,0xf7,0xea,0x36,0x6d,0x82,0xfa,0x7a,0x28,0x2f,0x4f,0x2,0x27,0x24, 0x16,0x4b,0x3e,0x4f,0x4c,0x40,0x5b,0x1b,0xbf,0x75,0x76,0xd2,0x2f,0x53,0x77,0x71, 0x13,0x9c,0xde,0xb3,0x61,0x43,0x84,0x47,0x8f,0xe2,0x2f,0x9,0xce,0x9,0x51,0x18, 0x80,0x3b,0xeb,0xc1,0x59,0xb7,0x65,0xb,0x1c,0x3b,0x6,0x76,0xbb,0x4,0x99,0x9d, 0x85,0x87,0xf,0x21,0x1c,0x6,0x9b,0xd,0xd6,0xaf,0x7,0x8b,0x5,0x8c,0x46,0xf9, 0x3e,0x14,0x82,0xf6,0x76,0x6e,0x77,0x76,0x72,0x7,0xe6,0x15,0xa8,0xdc,0x1,0xae, 0x6d,0xfb,0xf7,0x47,0xd,0xa7,0x4f,0x9d,0xe2,0xb2,0x10,0x99,0xcf,0xe1,0xb2,0x3, 0x2a,0x8e,0x6e,0xdc,0x8,0xb5,0xb5,0x20,0x4,0x3c,0x7f,0xe,0x3,0x3,0x32,0x82, 0xbd,0x7b,0xe1,0xe0,0x41,0xd0,0xe9,0xa4,0x7e,0x72,0x52,0x12,0xce,0xcd,0x49,0x82, 0xb5,0x6b,0x29,0x8e,0xc7,0x99,0x1a,0x1b,0x33,0xcf,0x42,0x81,0x1b,0xfa,0x37,0x7b, 0x3c,0xb,0xba,0xb8,0xaa,0x72,0x46,0x88,0x1d,0x2a,0x34,0x1f,0x15,0xc2,0x51,0x54, 0x5f,0xf,0x85,0x85,0xa0,0x69,0x90,0x95,0x5,0x7b,0xf6,0x80,0xc3,0xf1,0xff,0x32, 0xbb,0x7a,0x15,0xdc,0xee,0xe5,0xba,0x60,0x90,0x58,0x6b,0x2b,0xa7,0xdc,0x6e,0x8f, 0x1e,0xbe,0x29,0x85,0xe,0xf1,0x93,0x10,0x26,0xe0,0x93,0x4c,0xb0,0x17,0x95,0x94, 0x80,0x5e,0xf,0x1e,0x8f,0x74,0x38,0x7c,0x38,0x35,0x78,0x38,0x2c,0xc1,0x13,0x76, 0x0,0xaa,0xa,0x7e,0x3f,0x6,0xbb,0x9d,0x6c,0xb7,0x7b,0x55,0x0,0xb6,0x8c,0x40, 0xb7,0xf8,0x7,0x6c,0x2a,0x94,0xe5,0x83,0xc0,0xe1,0x90,0x4e,0x1e,0xf,0xf4,0xf5, 0x25,0xc1,0xae,0x5d,0x83,0xee,0x6e,0xa9,0xcf,0xcd,0x95,0xd1,0xf9,0xfd,0xb0,0x72, 0xa5,0x3c,0x47,0x22,0x30,0x38,0x48,0xdf,0xc8,0x8,0x0,0xf9,0x60,0xf0,0x41,0xa9, 0xa,0x4e,0x11,0x87,0x1c,0x60,0xcd,0xfb,0x89,0xcb,0xa,0x85,0xa0,0xa4,0x24,0xf9, 0x65,0xbd,0xbd,0x32,0x1d,0xe9,0xe9,0x32,0xba,0xd9,0xd9,0x24,0x71,0x55,0x15,0x94, 0x96,0x42,0x45,0x5,0xb4,0xb7,0xc3,0x91,0x23,0x0,0x58,0x0,0x3,0xe4,0x3,0xb9, 0x2,0x30,0x19,0x21,0xd3,0x2e,0x4,0xf8,0x7c,0xf2,0xd2,0xe,0x1c,0x48,0x12,0x74, 0x75,0x49,0x60,0x45,0x91,0xe7,0xb4,0x34,0xa8,0xa9,0x81,0x75,0xeb,0xa0,0xba,0x3a, 0xe5,0x14,0x30,0x2,0x7a,0x48,0x17,0x90,0x21,0x12,0xca,0x79,0x55,0x5,0xaf,0x97, 0xb9,0xf9,0x79,0x72,0xa2,0xd1,0xa4,0xf5,0xd3,0xa7,0x4c,0xdf,0xbb,0x7,0xc0,0xea, 0xea,0x6a,0xb8,0x71,0x23,0xf5,0xd0,0x51,0x14,0x4,0xf0,0xca,0x5c,0xd0,0xeb,0x81, 0x48,0x14,0x82,0x53,0xc0,0x33,0xaf,0x97,0x85,0xc5,0x45,0xb8,0x7b,0x37,0x69,0xe2, 0x70,0x30,0xa1,0x28,0x8c,0x29,0x4a,0x32,0x8a,0x54,0x32,0x3a,0xa,0x80,0x19,0x88, 0x1,0x1a,0x2c,0x2,0x51,0x3d,0x10,0x0,0x26,0xa6,0x81,0x99,0x48,0x84,0x99,0x48, 0x84,0x58,0x57,0x57,0xd2,0xb1,0xb1,0x91,0xcd,0x3b,0x77,0xca,0xa6,0xed,0xeb,0x83, 0xb6,0xb6,0xd4,0x4,0xe3,0xe3,0x58,0x96,0x8,0x16,0x24,0x89,0x47,0x85,0x80,0x7e, 0x25,0x78,0x5,0xc,0x7b,0x20,0x66,0x5e,0x32,0x70,0xb9,0xdd,0x70,0xf2,0xa4,0xbc, 0x8f,0xbc,0x3c,0xb8,0x79,0x93,0xca,0x7,0xf,0x70,0xb6,0xb6,0x42,0x5d,0x5d,0x6a, 0x82,0x27,0x4f,0x48,0xf8,0xcf,0xc8,0x20,0x1e,0x3,0xd3,0xfa,0x13,0xe5,0xe5,0xa, 0x30,0x10,0x0,0x77,0x8,0xb0,0x9a,0x4c,0x58,0x4d,0x26,0x94,0x96,0x16,0xb8,0x72, 0x25,0x59,0x35,0x89,0xe,0x4f,0xc8,0xdc,0xdc,0x72,0x2,0x9f,0xf,0xab,0xc9,0x44, 0x48,0xa6,0xc4,0x67,0x80,0xfb,0x56,0xf0,0xeb,0x19,0x1c,0x8c,0x5b,0xa0,0x5f,0x40, 0xbf,0xb,0xb0,0x98,0xcd,0xac,0xca,0xca,0x22,0xae,0x69,0xd0,0xd4,0x4,0x27,0x4e, 0x80,0xcb,0xb5,0x1c,0xf8,0xfa,0x75,0x39,0x61,0xcf,0x9e,0x95,0x3a,0x97,0x8b,0x68, 0x30,0x88,0xc5,0x6c,0x66,0xc9,0xf2,0x7e,0x6,0xc,0x66,0x83,0x1c,0x15,0x54,0x57, 0xeb,0xce,0xf4,0xf6,0xae,0x3,0x7e,0xff,0x14,0xa,0xb6,0x39,0x1c,0x60,0x36,0xbf, 0x52,0x7b,0x46,0x30,0x18,0x60,0x71,0x31,0xa9,0xd3,0x34,0x59,0x27,0x7a,0x3d,0x84, 0xc3,0xf4,0x3d,0x7b,0xc6,0x1f,0xe0,0xf5,0xc3,0x57,0x4e,0xf8,0x6b,0x37,0xb8,0x5f, 0x4e,0xd3,0x45,0xbb,0x5d,0xff,0xdd,0x8b,0x17,0x7,0xcd,0x70,0x7a,0x17,0xbc,0x53, 0x5e,0x5c,0x2c,0x9b,0xeb,0x6d,0x24,0x1c,0xe6,0xde,0xe8,0x28,0xb7,0x60,0x72,0x1, 0x9a,0xf3,0xe1,0x17,0x1b,0x4c,0x7e,0xb1,0x75,0x6b,0x68,0xd9,0x3e,0xb8,0x2c,0x44, 0xd6,0x24,0x7c,0x6e,0x82,0xc6,0x4a,0x28,0xa8,0x72,0x3a,0xa1,0xa0,0xe0,0xcd,0xe0, 0x53,0x53,0xf4,0x4e,0x4c,0xd0,0xf,0xde,0x20,0xfc,0xb8,0x2,0x6e,0xd9,0x60,0xac, 0xd6,0x6a,0x9d,0xcf,0xf4,0x7a,0xb5,0xe5,0x2b,0xf3,0xf8,0x71,0xdd,0x50,0x73,0xb3, 0xf1,0x57,0xf8,0xc0,0x8,0x67,0x4c,0xf0,0xd1,0x87,0xb0,0xea,0x33,0xab,0xd5,0x90, 0xb9,0x62,0x45,0x32,0x6d,0x8a,0xc2,0x82,0xdf,0x4f,0x8f,0xcf,0x17,0x7b,0x0,0x7e, 0x15,0x86,0x43,0x70,0xc9,0x1,0x23,0xd9,0x30,0x73,0xb4,0xac,0x6c,0x9e,0xa1,0x21, 0x2d,0xf5,0x4e,0x6e,0x68,0xd0,0xd,0x9d,0x3f,0x2f,0x7a,0x60,0x75,0x18,0xaa,0x34, 0xa8,0x88,0x41,0x69,0x3a,0xe4,0xdb,0x20,0x1d,0xc0,0x3,0x8b,0x61,0xf0,0x0,0x8f, 0xd,0x30,0x9c,0x1,0x43,0x41,0x98,0x2a,0x4,0xef,0x97,0x79,0x79,0x41,0xf3,0xf4, 0xb4,0xf6,0xe6,0xbf,0x8a,0x86,0x6,0x5d,0xa0,0xa5,0x45,0x77,0xd5,0xef,0xb7,0xfc, 0xd,0x36,0xe0,0xdd,0x18,0x38,0x72,0x40,0xc9,0x90,0xd3,0x20,0xaa,0xca,0x6,0x9d, 0x6,0x82,0x1a,0x2c,0x64,0xc0,0x7c,0x83,0xdd,0x1e,0x31,0x5c,0xb8,0xa0,0xb1,0x6f, 0xdf,0x4b,0xa8,0xff,0x0,0x6,0x38,0x4,0xd3,0xb3,0x30,0x64,0x30,0x0,0x0,0x0, 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/audio.png 0x0,0x0,0x5,0x59, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x4,0x73,0x42,0x49,0x54,0x8,0x8,0x8,0x8,0x7c,0x8,0x64,0x88, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x3,0x76,0x0,0x0,0x3,0x76, 0x1,0x7d,0xd5,0x82,0xcc,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66, 0x74,0x77,0x61,0x72,0x65,0x0,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61, 0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x0,0x0,0x4,0xd6,0x49,0x44, 0x41,0x54,0x78,0xda,0xbd,0xd7,0x4b,0x50,0x1b,0x75,0x1c,0x7,0x70,0x2,0xa4,0xbc, 0xb,0x65,0x6,0x91,0x8e,0xa2,0x7d,0x31,0xad,0x95,0x42,0x1e,0xe4,0xc9,0x23,0x40, 0x42,0x42,0xc2,0xab,0x22,0x85,0xf2,0x28,0x85,0x0,0x69,0xe5,0x5d,0x40,0x5e,0xa5, 0xa6,0xb0,0x8f,0xec,0x2e,0x10,0x1b,0xb5,0x6d,0xa4,0xed,0x8c,0x53,0xeb,0x1,0xaf, 0x7a,0x72,0x3c,0x7a,0xee,0x38,0xa3,0x17,0x8f,0xd6,0x43,0xf,0x8e,0x37,0x3d,0xd4, 0xc3,0xdf,0xef,0xda,0xd5,0xae,0x34,0xff,0x95,0x19,0x18,0x98,0xf9,0x90,0x85,0x64, 0xf3,0xfb,0xe6,0x97,0xff,0xff,0xbf,0xff,0x4d,0x22,0x84,0xec,0x59,0x44,0x64,0x65, 0x29,0xa0,0x57,0x1e,0x75,0xbb,0x3d,0x57,0xfe,0xb5,0x6f,0x94,0x0,0x47,0xa0,0x10, 0xf2,0x21,0x3,0x74,0x7,0x15,0x40,0x1d,0x24,0xb,0x4e,0x2a,0x8a,0x21,0xeb,0x40, 0x3,0x28,0x21,0xb2,0xc1,0xa8,0x28,0x83,0x22,0xd8,0x7d,0x0,0x87,0xd3,0xbe,0x65, 0xb3,0x5b,0xa3,0x89,0x9e,0xb,0x87,0xc3,0xa9,0x90,0x1e,0x8f,0xc7,0xf5,0x78,0x4c, 0xd6,0x8,0x91,0x7,0x2e,0xa8,0x1,0x27,0x94,0x80,0x6e,0x57,0x1,0x9c,0x55,0x8e, 0x7,0x36,0xbb,0xe5,0x2b,0xf9,0x98,0x16,0x82,0x65,0xd9,0x22,0x3e,0xca,0x1f,0x8f, 0x46,0xc3,0x79,0x1a,0x21,0xa,0xa0,0x5,0x2,0xd0,0x0,0xa7,0x76,0x15,0xa0,0xaa, 0xda,0x79,0xbf,0xc2,0x62,0x22,0x36,0x87,0x75,0x56,0xab,0xd5,0x1c,0xc7,0x95,0x8, 0x2,0x63,0x13,0x84,0xb5,0x33,0x72,0x57,0x28,0x21,0x9c,0xd0,0xd,0x1d,0xd0,0x6, 0x47,0xff,0x37,0x40,0x75,0x4d,0xe5,0x3d,0x8b,0xad,0x82,0x98,0xcc,0x86,0x67,0x8, 0xe1,0xd5,0x8,0xa1,0xe3,0xd7,0xf9,0x8a,0x88,0xc4,0x6,0x4,0x81,0xad,0x4f,0x14, 0x2,0x5,0x73,0x21,0x4,0x41,0xe8,0x83,0x56,0x48,0xd1,0xc,0x50,0x53,0x5b,0x2d, 0x8f,0x1,0x62,0xae,0x30,0x11,0xa3,0xa9,0xfc,0x37,0x1c,0xbf,0x49,0x7b,0x6d,0x3c, 0x3e,0xa2,0x47,0x80,0x2e,0x74,0xa2,0x47,0x14,0xb9,0x1a,0x4a,0x17,0x7c,0x30,0xd, 0xa3,0x30,0x4,0x6f,0x6b,0x6,0x70,0xd5,0xd5,0xc4,0x1d,0x4e,0x1b,0xb1,0x58,0xcd, 0xc4,0x60,0x2c,0x27,0x6,0x53,0xf9,0x8f,0x26,0xb3,0x51,0x4f,0x7b,0x3d,0x8a,0x5b, 0xf0,0xa6,0x93,0xbc,0xc0,0x5c,0xe1,0xd6,0xb9,0xd3,0x94,0x1,0xb9,0x2,0xf3,0x30, 0x5,0x7d,0x9a,0x1,0x6a,0xeb,0x5d,0x77,0x6b,0x5c,0x55,0x5b,0x18,0x8c,0xf,0x51, 0xf8,0xcf,0xb2,0xf2,0x73,0xa4,0xc2,0x62,0x66,0xe8,0x5d,0x88,0xeb,0x79,0x81,0x9d, 0x17,0x24,0x76,0x59,0x90,0x98,0x31,0x7c,0x15,0x87,0x12,0x84,0x98,0x83,0x55,0x58, 0x82,0x6b,0x50,0x40,0xd,0x50,0xef,0xa9,0xbd,0x83,0x2e,0x88,0xf2,0x71,0x65,0xb5, 0xb3,0x9,0x5d,0x78,0x86,0x10,0x4f,0xed,0xe,0x6b,0xa,0xbd,0xb,0x7c,0x8f,0x20, 0xb2,0xeb,0x11,0x91,0xb9,0xb9,0xb1,0xc1,0xbc,0x9e,0x20,0xc0,0x8,0x48,0xb0,0xa6, 0x84,0xb0,0x52,0x3,0x78,0x1a,0xea,0x6f,0xa3,0xb,0xc2,0x8b,0x75,0xc1,0x36,0x75, 0xae,0xac,0x54,0xee,0xc2,0x28,0x75,0x46,0x88,0x6b,0xfe,0x88,0xc0,0x7c,0x8a,0x37, 0xde,0xe4,0x44,0xce,0x99,0x20,0x40,0x3b,0x7c,0x4,0x22,0xdc,0x4,0x3f,0x35,0x40, 0x83,0xd7,0xfd,0x49,0x9d,0xbb,0x36,0xf2,0xcf,0xdf,0x1d,0x9d,0xed,0x3a,0xa3,0xd9, 0xf0,0x8b,0xd1,0x64,0xf8,0x8e,0x76,0xe,0xfb,0x7c,0xd5,0x7b,0x84,0x2e,0xdc,0xc1, 0xa0,0xec,0x4e,0x10,0xa0,0x12,0xe2,0x10,0x5,0xe,0x2e,0x52,0x3,0x78,0x7d,0x9e, 0x8f,0xdd,0xd,0x75,0x9c,0xfa,0x7f,0x56,0xbb,0xe5,0x33,0x83,0xb1,0xec,0x67,0xea, 0xa2,0x13,0x89,0x14,0xa3,0xf0,0x97,0xe8,0xc2,0x3d,0x41,0xe2,0xa6,0x12,0x4,0x38, 0xb,0x5b,0x10,0x83,0x8,0x4,0xa9,0x1,0x7c,0x7e,0x6f,0xcc,0xe3,0xad,0x67,0xff, 0xbb,0x3c,0xdb,0xd6,0x30,0x1b,0x9e,0x52,0xbf,0x2,0x89,0xb3,0xa,0x22,0xb7,0x2d, 0x7,0xa0,0x74,0xc0,0xa5,0x4,0xb8,0x5,0x11,0xcd,0xe,0xf8,0x9b,0x7c,0xb7,0x1a, 0x7c,0x1e,0x66,0x47,0x80,0x87,0x58,0x1d,0x1f,0xd3,0xce,0xe1,0x25,0xe6,0x3c,0x2f, 0x72,0x9f,0xe3,0x8d,0x6f,0x53,0xc6,0x40,0x17,0xdc,0x85,0x28,0xb0,0x10,0xa0,0x6, 0x8,0x34,0x37,0x7e,0xe8,0xf3,0x37,0xac,0xa9,0xff,0x67,0x77,0xd8,0x1e,0xdb,0x9d, 0xb6,0x1b,0xd4,0xaf,0x40,0xe2,0x42,0x72,0x1,0x79,0x26,0x30,0x4c,0xc2,0x59,0x30, 0x1,0x31,0x10,0x20,0xc,0x16,0x6a,0x80,0xe6,0x96,0x40,0xb4,0x31,0xe0,0x5d,0x55, 0xad,0xb,0x39,0x8e,0x4a,0xfb,0xf,0xae,0xda,0xea,0x54,0xca,0xc5,0x29,0x53,0x90, 0xe4,0xd1,0xcd,0x8,0x58,0xf,0xe6,0xe4,0x8b,0x55,0x82,0x0,0x1f,0x80,0x8,0xab, 0xb0,0x8,0xf9,0xd4,0x0,0x2d,0x6d,0xcd,0x1b,0xfe,0xa6,0xc6,0xb0,0x2a,0xc0,0x2, 0x96,0xe7,0x13,0xf4,0xf6,0xf3,0x6e,0x14,0xc6,0xa7,0xe2,0x16,0xe4,0xb,0x54,0x82, 0xe2,0xaf,0x2,0xf,0x61,0xa5,0xf8,0x80,0xe6,0x4a,0xd8,0x76,0xbe,0x65,0x3d,0xd0, 0xfc,0x3c,0x80,0xc7,0xeb,0xce,0x92,0x69,0x5c,0x9a,0xd3,0xe5,0xd5,0xf,0xcb,0xf1, 0x18,0x2f,0xad,0xb9,0x29,0xd7,0x82,0x2e,0xb8,0xe,0x73,0x30,0x1,0x67,0xd5,0x1, 0xe4,0x79,0x5e,0x38,0x39,0x3d,0x71,0x7d,0x69,0x79,0xf1,0xfb,0xe1,0x50,0xf0,0x7e, 0x70,0xe8,0xf2,0x37,0xd7,0x66,0xa7,0xbf,0xa6,0x15,0x55,0xef,0xb,0xe4,0x5,0x48, 0x10,0xb8,0xbe,0x88,0xc4,0xb4,0xc6,0x62,0xe3,0x69,0x9,0x8a,0x17,0x2a,0x85,0x27, 0xe1,0x2a,0x74,0x40,0xf2,0xbf,0x1,0xa6,0x67,0xa6,0xde,0x5a,0x5a,0x5e,0xf8,0x75, 0x69,0x79,0x9e,0xf4,0xf,0xf4,0x11,0x14,0x26,0x23,0xa1,0x21,0x32,0x31,0x39,0xfe, 0xad,0x56,0xf1,0xed,0xed,0xed,0x14,0x79,0xb4,0xcb,0x97,0x62,0x2c,0x42,0xe5,0xf2, 0xf5,0x80,0xf2,0xe9,0xfd,0x10,0x82,0x1,0xe8,0x55,0xef,0x7,0xe4,0x4f,0xfe,0x46, 0xef,0xa5,0x9e,0x27,0x57,0x47,0x43,0xa4,0xb7,0xbf,0x9b,0x5c,0xe8,0x7a,0x97,0x4, 0x87,0x7,0x49,0xef,0xa5,0x6e,0x32,0x1c,0x1a,0x7c,0x44,0x5f,0xf7,0x85,0x9c,0x48, 0x64,0xb5,0x14,0x7b,0x1,0xd3,0xe6,0xe6,0x66,0xbe,0xc6,0x8e,0xe8,0xb8,0x52,0xb4, 0xb,0xda,0x41,0x19,0x1f,0x2f,0x2,0xc4,0x80,0xa8,0x5d,0xec,0xe9,0x24,0x9d,0xdd, 0x17,0x7e,0xc7,0x71,0xa2,0xad,0x96,0x4e,0x92,0xa4,0xac,0x58,0x2c,0x76,0x18,0xd2, 0x92,0x92,0x92,0x74,0x1a,0xc5,0x5f,0x83,0x56,0x68,0x86,0x46,0x38,0xf3,0xd2,0xa6, 0xb4,0xaf,0xbf,0xe7,0xc1,0xe4,0xd4,0xf8,0xdf,0x6d,0x9f,0x7d,0x7f,0x86,0xcc,0xcc, 0x4d,0x93,0xf7,0xc6,0xae,0xfc,0xd1,0xdd,0xdb,0xf5,0xce,0x1e,0x77,0xc5,0xaf,0x40, 0x1d,0xb8,0xa0,0x12,0x8a,0xd4,0xcf,0xab,0x3b,0x50,0x32,0x18,0xbc,0xfc,0xd3,0x8d, 0xf0,0xa,0x59,0x5e,0x59,0x7c,0x82,0x81,0xf8,0x5,0x8a,0x9b,0xf6,0x50,0x58,0x7, 0x85,0x60,0x6,0x13,0x9c,0x82,0x4c,0xda,0xeb,0xd5,0xb3,0x20,0x77,0x1f,0xee,0x5, 0x72,0xe0,0x98,0x52,0xb4,0x8,0x94,0xa9,0x4b,0xb7,0x9f,0xf7,0x86,0x69,0x90,0x1, 0x69,0x7b,0xb8,0x37,0x3c,0x30,0xf4,0x0,0xf8,0x49,0x85,0x34,0xc8,0x84,0x6c,0xc8, 0x81,0xc3,0x90,0xab,0x72,0x58,0x91,0x3,0xd9,0x8a,0x2c,0xe5,0x9c,0xc,0x48,0x87, 0x34,0x38,0x4,0x7a,0x48,0x85,0x14,0x48,0x86,0x97,0xef,0x8c,0x94,0x27,0x33,0xe1, 0x18,0xd8,0xc0,0x5,0xb5,0xca,0x63,0x35,0x38,0xc0,0x2,0x6,0x28,0x85,0xd3,0x70, 0x2,0x8a,0xe1,0x28,0x14,0xc0,0x11,0xc8,0x83,0x5c,0x55,0xb0,0xac,0x1d,0x81,0xf4, 0x3b,0x83,0xfc,0x5,0xa,0xfe,0x9d,0xed,0xb2,0xf,0x93,0x6e,0x0,0x0,0x0,0x0, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/fileclose_s.png 0x0,0x0,0x6,0xa4, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x18,0x0,0x0,0x0,0x18,0x8,0x6,0x0,0x0,0x0,0xe0,0x77,0x3d,0xf8, 0x0,0x0,0x6,0x6b,0x49,0x44,0x41,0x54,0x78,0x9c,0x8d,0x95,0xcb,0x6b,0x5b,0xdb, 0x15,0xc6,0xbf,0x7d,0xde,0x7a,0x1d,0xcb,0xc7,0x92,0x25,0x45,0x4d,0x9c,0xc8,0x8e, 0x49,0x64,0x37,0x84,0x18,0xdb,0x8d,0xc1,0x98,0x5b,0xc,0x19,0x34,0x35,0x78,0x50, 0xd2,0x5c,0xc3,0x1d,0xb6,0x83,0xf6,0x4e,0xa,0x1d,0x96,0xde,0x42,0xc8,0xa8,0x2f, 0x3a,0xea,0xa4,0xe4,0xf,0x28,0x81,0xdc,0x94,0x4,0x6e,0xa,0xc1,0x35,0x4d,0x6, 0x49,0xed,0x5c,0xdb,0xd8,0xf1,0x23,0x71,0x94,0xe8,0x9e,0xea,0x15,0x5b,0x91,0x74, 0x24,0x9d,0xc7,0x7e,0x74,0x64,0xd1,0xf4,0x26,0xd0,0x5,0x1b,0xf6,0xe8,0xfb,0xb1, 0xf7,0xfa,0xd6,0xb7,0x88,0x10,0x2,0x1f,0xaa,0x99,0x99,0x19,0x69,0x73,0x73,0xd3, 0x62,0x8c,0x65,0x64,0x59,0xfe,0x2e,0x80,0x9c,0x10,0xa2,0x5f,0x8,0x11,0x30,0xc6, 0xfe,0xcd,0x18,0xdb,0x95,0x65,0x79,0xbf,0xaf,0xaf,0xaf,0x7c,0xe7,0xce,0x9d,0xce, 0xe5,0xcb,0x97,0x3f,0xa8,0x43,0x3e,0x4,0x48,0x26,0x93,0xe1,0x56,0xab,0xf5,0xc3, 0x58,0x2c,0xf6,0x83,0x70,0x38,0x3c,0xa5,0xeb,0xfa,0xb0,0x24,0x49,0xa,0x0,0x30, 0xc6,0xe0,0x79,0x9e,0x70,0x5d,0xb7,0xe5,0x38,0xce,0x86,0xef,0xfb,0xcb,0x84,0x90, 0x2f,0x83,0x20,0xf8,0xd7,0xff,0x5,0xd0,0x75,0xfd,0xa4,0x2c,0xcb,0xbf,0xc8,0xe7, 0xf3,0x9f,0xe,0xd,0xd,0x25,0x34,0x4d,0x93,0x3a,0x9d,0xe,0x3c,0xcf,0x3,0xa5, 0x14,0x9c,0x73,0x30,0xc6,0xe0,0xfb,0x3e,0x1a,0x8d,0x6,0x6a,0xb5,0x9a,0x5b,0xaf, 0xd7,0xb,0x42,0x88,0x5f,0x9f,0x38,0x71,0xe2,0x4e,0xb1,0x58,0xf4,0x3f,0xa,0x30, 0x4d,0x73,0x26,0x9b,0xcd,0xfe,0xee,0xca,0x95,0x2b,0xd3,0x53,0x53,0x53,0xa4,0x5c, 0x2e,0xe3,0xd5,0xab,0x57,0xa8,0xd5,0x6a,0xe0,0x9c,0x23,0x1e,0x8f,0xe3,0xdd,0xbb, 0x77,0xf0,0x7d,0x1f,0x8c,0x31,0x4,0x41,0x0,0xc7,0x71,0x50,0xa9,0x54,0xf0,0xe6, 0xcd,0x1b,0x27,0x8,0x82,0x3f,0x1b,0x86,0xf1,0xdb,0x4e,0xa7,0x53,0x39,0xd6,0x54, 0x8e,0x2f,0x86,0x61,0x7c,0x27,0x97,0xcb,0xfd,0x7e,0x69,0x69,0x69,0x7a,0x7e,0x7e, 0x1e,0x5b,0x5b,0x5b,0xb0,0x6d,0x1b,0x8d,0x46,0x3,0x42,0x8,0x58,0x96,0x85,0xc5, 0xc5,0x45,0xd8,0xb6,0x8d,0xdd,0xdd,0x5d,0x94,0x4a,0x25,0x38,0x8e,0x3,0x45,0x51, 0xa0,0x69,0x1a,0x18,0x63,0x51,0xdb,0xb6,0x7f,0xe2,0xba,0xae,0x3f,0x36,0x36,0xf6, 0xc5,0xd6,0xd6,0x56,0xd0,0x3,0x24,0x93,0xc9,0x90,0x24,0x49,0xbf,0x5c,0x5c,0x5c, 0x9c,0x9a,0x9c,0x9c,0x84,0x6d,0xdb,0xd8,0xd8,0xd8,0x40,0xa5,0x52,0x81,0x10,0x2, 0x8a,0xa2,0x60,0x78,0x78,0x18,0x97,0x2e,0x5d,0xc2,0xd9,0xb3,0x67,0x71,0xee,0xdc, 0x39,0x1c,0x1c,0x1c,0x60,0x63,0x63,0x3,0xb6,0x6d,0x43,0x92,0x24,0x64,0xb3,0x59, 0xf8,0xbe,0x6f,0x96,0xcb,0xe5,0x9f,0xed,0xec,0xec,0x2c,0x3,0xf8,0x3b,0x0,0x28, 0x73,0x73,0x73,0x52,0xab,0xd5,0x5a,0x98,0x9d,0x9d,0xfd,0xf1,0xc2,0xc2,0x2,0x91, 0x24,0x9,0xe3,0xe3,0xe3,0xb0,0x2c,0xb,0x8f,0x1e,0x3d,0xc2,0xcb,0x97,0x2f,0xa1, 0xaa,0x2a,0x26,0x26,0x26,0x60,0x9a,0x26,0x6,0x6,0x6,0x90,0x4a,0xa5,0x30,0x34, 0x34,0x84,0xf3,0xe7,0xcf,0xa3,0x50,0x28,0xe0,0xf9,0xf3,0xe7,0x58,0x5d,0x5d,0x5, 0xa5,0x14,0xdd,0x6e,0xb7,0xef,0xe8,0xe8,0xe8,0xb,0x5d,0xd7,0x5f,0xad,0xad,0xad, 0xbd,0x90,0xcb,0xe5,0xb2,0x35,0x30,0x30,0xf0,0xf9,0xfc,0xfc,0xfc,0xf7,0x32,0x99, 0xc,0x31,0xc,0x3,0x89,0x44,0x2,0xa7,0x4f,0x9f,0x46,0x3e,0x9f,0x47,0x2a,0x95, 0x82,0xaa,0xaa,0x98,0x9e,0x9e,0x46,0x3c,0x1e,0x87,0x2c,0xcb,0xd0,0x34,0xd,0xa1, 0x50,0x8,0xe1,0x70,0x18,0x83,0x83,0x83,0x70,0x1c,0x7,0xeb,0xeb,0xeb,0x90,0x65, 0x19,0x9c,0x73,0xd4,0xeb,0xf5,0x8,0x63,0xec,0xe0,0xee,0xdd,0xbb,0x1b,0x92,0x2c, 0xcb,0xd9,0x78,0x3c,0x3e,0x65,0x18,0x86,0x64,0xdb,0x36,0x62,0xb1,0x18,0x24,0x49, 0x2,0xe7,0x1c,0x96,0x65,0x61,0x6e,0x6e,0xe,0xd7,0xae,0x5d,0xc3,0xe0,0xe0,0x20, 0x8,0x21,0x3d,0x43,0xc8,0xb2,0xc,0xd3,0x34,0xe1,0xfb,0x3e,0xd6,0xd6,0xd6,0x40, 0x29,0x45,0x34,0x1a,0x85,0x65,0x59,0x8,0x85,0x42,0x71,0x0,0xb3,0xb5,0x5a,0xad, 0x4f,0xd1,0x34,0x6d,0x4c,0xd7,0xf5,0xe1,0x6a,0xb5,0xa,0x21,0x4,0x46,0x46,0x46, 0x90,0xcd,0x66,0xa1,0xeb,0x3a,0x8,0x21,0x90,0x65,0x19,0x96,0x65,0x81,0x73,0xfe, 0x1e,0x80,0x10,0x82,0x4e,0xa7,0x83,0xe5,0xe5,0x65,0xbc,0x78,0xf1,0x2,0xe9,0x74, 0x1a,0x9c,0x73,0x78,0x9e,0x7,0xd3,0x34,0x25,0xd7,0x75,0xc7,0x18,0x63,0x27,0x14, 0x21,0x44,0x4e,0x8,0xa1,0x1c,0x1e,0x1e,0xa2,0x5a,0xad,0xa2,0x58,0x2c,0x62,0x66, 0x66,0x6,0x57,0xaf,0x5e,0x45,0x3a,0x9d,0x6,0x21,0xa4,0x7,0x7a,0xcf,0xdf,0x84, 0xc0,0xb6,0x6d,0x6c,0x6f,0x6f,0x23,0x14,0xa,0x21,0x12,0x89,0xc0,0xf3,0xbc,0xde, 0xf7,0xc9,0xb2,0x9c,0x8,0x82,0x20,0x25,0x1b,0x86,0xb1,0x60,0x9a,0xe6,0x8c,0xa6, 0x69,0x0,0x80,0x6e,0xb7,0x8b,0x83,0x83,0x3,0x14,0x8b,0x45,0x84,0x42,0x21,0x24, 0x12,0x9,0x28,0x8a,0xd2,0x13,0x5,0x0,0x21,0x4,0x18,0x63,0x10,0x42,0x40,0xd7, 0x75,0x50,0x4a,0xd1,0x6e,0xb7,0x41,0x29,0x85,0xef,0xfb,0xa8,0xd5,0x6a,0x68,0xb5, 0x5a,0x1,0x63,0xec,0x2b,0xd9,0x30,0x8c,0x4f,0x22,0x91,0xc8,0xac,0xa6,0x69,0x50, 0x14,0x5,0xba,0xae,0xc3,0x30,0xc,0x1c,0x1d,0x1d,0x61,0x73,0x73,0x13,0xf1,0x78, 0x1c,0xa7,0x4e,0x9d,0x2,0x0,0x48,0x92,0x4,0x21,0x44,0x6f,0x9a,0x85,0x10,0x48, 0xa7,0xd3,0x38,0x73,0xe6,0xc,0x34,0x4d,0x43,0xb7,0xdb,0x45,0xa3,0xd1,0x40,0xb9, 0x5c,0x46,0xa3,0xd1,0x70,0x18,0x63,0x7f,0x53,0x0,0x94,0x82,0x20,0x10,0x94,0x52, 0xc2,0x39,0x7,0xe7,0xfc,0x78,0xf0,0x90,0x48,0x24,0x8e,0xfd,0xd,0x4d,0xd3,0x20, 0x84,0xe8,0x41,0x7c,0xdf,0x7,0xa5,0x14,0x9e,0xe7,0x81,0x10,0x82,0xd1,0xd1,0x51, 0x58,0x96,0x85,0x74,0x3a,0x8d,0x42,0xa1,0x80,0x42,0xa1,0xd0,0x26,0x84,0xb4,0x14, 0x21,0xc4,0x6e,0x10,0x4,0x2d,0xc6,0x98,0xc9,0x39,0x87,0x10,0x2,0xc7,0xf1,0x91, 0xcb,0xe5,0x90,0x4c,0x26,0xe1,0x79,0x1e,0x38,0xe7,0x90,0x24,0x9,0xaa,0xaa,0x22, 0x8,0x2,0x28,0x8a,0x2,0xd7,0x75,0xe1,0xba,0x2e,0x3c,0xcf,0x43,0x10,0x4,0x30, 0xc,0x3,0x84,0x10,0xbc,0x7d,0xfb,0x16,0x94,0xd2,0x2a,0x21,0xe4,0x50,0xf1,0x3c, 0x6f,0xdf,0x75,0xdd,0x75,0xdf,0xf7,0x67,0x19,0x63,0x38,0x3e,0xba,0xae,0x63,0x7c, 0x7c,0x1c,0x94,0x52,0x4,0x41,0x0,0xdf,0xf7,0x11,0x8b,0xc5,0xf0,0xe4,0xc9,0x13, 0x3c,0x7e,0xfc,0x18,0x13,0x13,0x13,0xc8,0xe5,0x72,0x8,0x82,0x0,0xdd,0x6e,0x17, 0xae,0xeb,0x62,0x7f,0x7f,0x1f,0xb7,0x6f,0xdf,0x86,0x6d,0xdb,0x1,0x80,0x75,0x4d, 0xd3,0xbe,0x51,0xc,0xc3,0x28,0xbb,0xae,0xfb,0x8f,0x4e,0xa7,0x33,0x19,0x89,0x44, 0xc,0x55,0x55,0xe1,0xfb,0x3e,0x52,0xa9,0x14,0x32,0x99,0xc,0xda,0xed,0x36,0x8, 0x21,0xd0,0x34,0xd,0xcd,0x66,0x13,0xf,0x1f,0x3e,0xc4,0xb3,0x67,0xcf,0x50,0x28, 0x14,0x70,0xe1,0xc2,0x5,0x8c,0x8c,0x8c,0xc0,0x30,0xc,0x94,0x4a,0x25,0xac,0xac, 0xac,0x60,0x7f,0x7f,0x1f,0x9c,0xf3,0x9a,0x10,0x62,0x25,0x12,0x89,0xb4,0xe4,0x7, 0xf,0x1e,0xd0,0x5b,0xb7,0x6e,0x35,0x1,0x7c,0x3f,0x1a,0x8d,0x26,0x14,0x45,0x1, 0x21,0x4,0xa9,0x54,0xa,0x86,0x61,0xf4,0xfc,0xaf,0x28,0xa,0x76,0x76,0x76,0x70, 0xff,0xfe,0x7d,0x84,0x42,0x21,0x84,0x42,0x21,0x14,0x8b,0x45,0x14,0x8b,0x45,0x30, 0xc6,0xb0,0xb5,0xb5,0x85,0x95,0x95,0x15,0xd4,0xeb,0x75,0x74,0x3a,0x9d,0xaf,0x54, 0x55,0xbd,0xb5,0xb4,0xb4,0x74,0xd8,0x8b,0x6b,0x55,0x55,0x7f,0x94,0xc9,0x64,0xfe, 0x92,0x4a,0xa5,0x62,0xd1,0x68,0x14,0x9a,0xa6,0x21,0x1e,0x8f,0x23,0x9f,0xcf,0xe3, 0xe2,0xc5,0x8b,0x88,0x46,0xa3,0xb8,0x77,0xef,0x1e,0x76,0x77,0x77,0x91,0xcd,0x66, 0xa1,0x69,0x1a,0x7c,0xdf,0x47,0xb3,0xd9,0x44,0xb7,0xdb,0xc5,0xeb,0xd7,0xaf,0x51, 0x2c,0x16,0x85,0xe3,0x38,0x2f,0x19,0x63,0x9f,0x8d,0x8e,0x8e,0x3e,0xdd,0xde,0xde, 0xa6,0xbd,0xb8,0x3e,0x79,0xf2,0xe4,0x97,0xd5,0x6a,0x75,0x92,0x10,0xf2,0x53,0xce, 0xb9,0x69,0x9a,0x26,0xe,0xf,0xf,0xf1,0xf4,0xe9,0x53,0x38,0x8e,0x83,0x78,0x3c, 0x8e,0xbd,0xbd,0x3d,0x84,0xc3,0xe1,0xf7,0xfa,0xd2,0xed,0x76,0x51,0xa9,0x54,0x50, 0x2a,0x95,0x44,0xbb,0xdd,0x2e,0x50,0x4a,0xff,0x98,0x48,0x24,0xbe,0xde,0xde,0xde, 0xa6,0xdf,0x5a,0x38,0xb1,0x58,0x2c,0xc5,0x18,0xfb,0xb9,0x69,0x9a,0x9f,0x67,0x32, 0x99,0xbe,0xe3,0x97,0xe8,0xba,0xe,0x59,0x96,0xd1,0xe9,0x74,0xd0,0xdf,0xdf,0xf, 0x49,0x92,0x40,0x29,0x45,0xab,0xd5,0x42,0xad,0x56,0x43,0xb9,0x5c,0xc6,0xd1,0xd1, 0xd1,0x1e,0xe7,0xfc,0x4f,0xba,0xae,0xff,0xb5,0xdd,0x6e,0x57,0xbf,0xb5,0x70,0x0, 0xa0,0xd5,0x6a,0x55,0xf2,0xf9,0xfc,0x6f,0xf6,0xf6,0xf6,0x96,0x9b,0xcd,0xe6,0xaf, 0x4c,0xd3,0x1c,0x8f,0x46,0xa3,0xfd,0x91,0x48,0x44,0x92,0x65,0x19,0x8a,0xa2,0xa0, 0xdd,0x6e,0xc3,0xf3,0x3c,0xb4,0xdb,0x6d,0xd4,0xeb,0x75,0xdf,0x71,0x9c,0x9a,0xef, 0xfb,0x8f,0x8,0x21,0x7f,0x48,0x26,0x93,0x1b,0x37,0x6f,0xde,0xec,0x7e,0x74,0x65, 0xfe,0x77,0xe9,0xba,0x9e,0xa3,0x94,0x7e,0xa2,0x28,0xca,0x9c,0xa6,0x69,0x63,0x92, 0x24,0x25,0x8,0x21,0x21,0x21,0x4,0xa7,0x94,0xb6,0x83,0x20,0xa8,0x30,0xc6,0xbe, 0x6,0xf0,0x4f,0x55,0x55,0x1f,0x8f,0x8d,0x8d,0x7d,0xb3,0xba,0xba,0x4a,0xff,0x57, 0xe7,0xa3,0x0,0x0,0x18,0x1d,0x1d,0x55,0x4b,0xa5,0x52,0x9f,0xe7,0x79,0x19,0xce, 0xf9,0xa0,0x10,0x22,0x6,0x80,0x13,0x42,0x1c,0x49,0x92,0xde,0xea,0xba,0x6e,0xf, 0xe,0xe,0x3a,0xd7,0xaf,0x5f,0xf7,0x6f,0xdc,0xb8,0xf1,0x41,0xa1,0xff,0x0,0x31, 0xaa,0x64,0xcd,0xd6,0x86,0x56,0xb5,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae, 0x42,0x60,0x82, // /home/family/Development/ifpgui/images/file.png 0x0,0x0,0x2,0xf4, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x4,0x73,0x42,0x49,0x54,0x8,0x8,0x8,0x8,0x7c,0x8,0x64,0x88, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x3,0x76,0x0,0x0,0x3,0x76, 0x1,0x7d,0xd5,0x82,0xcc,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66, 0x74,0x77,0x61,0x72,0x65,0x0,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61, 0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x0,0x0,0x2,0x71,0x49,0x44, 0x41,0x54,0x78,0xda,0xb5,0x97,0x41,0x6f,0x1a,0x31,0x10,0x85,0xdf,0x7a,0x43,0xa5, 0x94,0xe4,0xd0,0x9e,0x7b,0xee,0x9f,0x28,0xff,0x0,0x21,0xf5,0x14,0x91,0xaa,0x17, 0x4e,0xfd,0xa5,0x6d,0x6f,0x95,0xca,0xd,0x28,0x1c,0xaa,0x8,0xa4,0x42,0xda,0x46, 0x54,0x80,0x76,0x17,0xbb,0x33,0x2,0xcb,0x56,0x26,0x6b,0x9b,0x45,0x19,0xe9,0xc9, 0x3,0x22,0xfa,0x9e,0xdf,0xd8,0x64,0xc9,0x8c,0x31,0xb0,0x95,0x65,0x99,0x2,0x40, 0x7a,0xd6,0xd2,0xc4,0xd4,0xf6,0x5,0x1b,0xb0,0xf0,0x1c,0xc0,0x2b,0xd2,0xeb,0x67, 0x34,0xc1,0xe0,0xdf,0xa4,0x3f,0xc4,0xdd,0x83,0xea,0x2,0xae,0x5a,0xa4,0xb7,0x7f, 0x1f,0x1e,0x3e,0x97,0x45,0xc1,0x8e,0x90,0x59,0x1,0xfe,0xeb,0x83,0x61,0x17,0x9b, 0xdd,0x0,0x6c,0xd9,0xcf,0x3f,0xae,0x3c,0xcf,0xf1,0xf2,0xf2,0xf2,0x1d,0x80,0x6f, 0x24,0x61,0x20,0x23,0xbd,0x28,0x8b,0x12,0x45,0x59,0x1d,0x61,0x4e,0x4a,0x39,0x10, 0x77,0x90,0x6b,0x2d,0x3c,0xf3,0x56,0x66,0xb8,0xd6,0x19,0x70,0x75,0x80,0xd1,0x22, 0x45,0x25,0x7a,0x6f,0x95,0x46,0x5c,0x89,0x94,0xea,0xc,0x48,0xb8,0x1c,0x45,0x5a, 0xa,0x4f,0x25,0xa1,0x54,0xdc,0x40,0xc6,0xe2,0x14,0xe,0x1f,0x4e,0x31,0x20,0x57, 0x69,0x46,0xf4,0x91,0x11,0x28,0x11,0x79,0xb2,0x9,0xdb,0x37,0x1f,0x81,0x82,0xd6, 0xda,0x3,0x5,0xd,0xf8,0x46,0x25,0x5c,0xde,0x94,0xc4,0x11,0xb8,0x9d,0x3b,0xd8, 0x63,0xa8,0xec,0x1d,0x44,0xf6,0x51,0x3,0xd2,0xb1,0xf,0x97,0x6,0xc4,0x88,0xc2, 0xf0,0x74,0x3,0x2,0x1a,0x34,0x20,0xc7,0x80,0x58,0xc5,0x47,0x90,0x6e,0x80,0x15, 0x8a,0xba,0x51,0x2,0xa7,0xc0,0x53,0x22,0x6f,0x60,0x20,0xa4,0x38,0x9c,0xfb,0x6, 0x23,0x90,0xce,0xa3,0x4a,0x3f,0xf1,0xe9,0x6,0xe4,0xd,0x48,0x87,0x27,0xcd,0xde, 0x18,0x73,0xda,0xf7,0x0,0xc2,0xf0,0xd8,0x18,0xce,0xbc,0x86,0xdc,0xca,0x3f,0x3e, 0x2d,0x1,0xb9,0xeb,0xb4,0x4,0x8c,0xdc,0x3d,0x44,0x49,0xb8,0xf,0xf5,0xd5,0x20, 0x1,0x63,0xec,0xee,0x45,0xf4,0xb1,0x34,0xb4,0xd6,0xbe,0xac,0x9,0xfb,0x44,0x94, 0x98,0x80,0xf,0x76,0x15,0x85,0xef,0xf7,0x7b,0x86,0xf2,0x6a,0x7b,0x96,0x6f,0x80, 0x9b,0x8a,0x11,0x75,0x6,0x52,0xe7,0x5b,0xbb,0xf3,0xaa,0xaa,0x50,0x14,0x5,0xca, 0xb2,0xe4,0xfe,0xf8,0x3e,0xa7,0xa0,0x31,0x1c,0xe,0xbf,0x2,0xb8,0x23,0x95,0x41, 0x3,0xe9,0xa7,0x59,0xc2,0x19,0xbc,0x5a,0xad,0xb0,0x5c,0x2e,0xc1,0xd5,0x6e,0xb7, 0xd1,0x6a,0xb5,0x30,0x9d,0x4e,0xc7,0xbd,0x5e,0xef,0x13,0x80,0x5,0x3f,0x11,0x7, 0xd,0xc4,0x77,0x2c,0x4f,0xba,0x8d,0x7d,0xb7,0xdb,0x61,0xb1,0x58,0xa0,0xd3,0xe9, 0x60,0xb3,0xd9,0x60,0x3e,0x9f,0x63,0x34,0x1a,0xdd,0x11,0xfc,0x16,0xc0,0x8c,0x54, 0xc0,0x2b,0x15,0x84,0xc7,0xcd,0x30,0xdc,0x37,0xc0,0x29,0xd0,0xaa,0xb1,0xdd,0x6e, 0xc1,0x46,0x66,0xb3,0xd9,0xea,0x3,0x15,0x80,0x11,0x69,0x6b,0xa8,0xc2,0x6,0x4, 0x4c,0x80,0xc5,0xee,0xfd,0x53,0xcf,0x23,0xb8,0xbe,0xbe,0x62,0x38,0xc7,0x7e,0x3f, 0x18,0xc,0x3e,0xae,0xd7,0xeb,0xef,0x0,0x36,0x3e,0xfc,0x9c,0x33,0x20,0xc,0xf8, 0xe2,0x3,0xc8,0x73,0xe7,0xd8,0xfb,0xfd,0xfe,0xed,0x11,0xfe,0x4f,0xc0,0x85,0x81, 0x68,0xc5,0xd,0xf2,0x8,0xa8,0x38,0xf6,0x71,0xb7,0xdb,0xbd,0x1,0xf0,0xe3,0xa9, 0x9d,0xd7,0x8d,0xc0,0x90,0xaa,0x5c,0x29,0xa8,0x83,0xe4,0x3f,0x22,0x19,0xbf,0x7d, 0x84,0xe7,0x3b,0xce,0xa7,0xdd,0x4c,0x26,0x93,0x2f,0x4,0x7f,0xf,0x60,0x1c,0x86, 0xcb,0x1f,0xa7,0x9c,0xc6,0x1b,0xd6,0x19,0xc9,0x14,0xa4,0x9f,0xa4,0x5f,0xa4,0x52, 0xc0,0x23,0x6,0x78,0x7b,0x79,0x73,0xb8,0x4b,0xd1,0xdd,0xf3,0x78,0xfd,0x7,0x88, 0xed,0x4c,0xf3,0x6b,0xdf,0x66,0xfe,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae, 0x42,0x60,0x82, // /home/family/Development/ifpgui/images/radio_s.png 0x0,0x0,0x7,0xab, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x1f,0x0,0x0,0x0,0x19,0x8,0x6,0x0,0x0,0x0,0xc9,0xf7,0xf5,0x24, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd5,0x2,0x11,0x2,0x17,0x19,0x7e,0x2e,0xbc,0x9e,0x0,0x0,0x7,0x38,0x49,0x44, 0x41,0x54,0x28,0xcf,0x85,0x96,0x4b,0x8c,0x1c,0xd5,0x15,0x86,0xbf,0x7b,0xeb,0xd5, 0xd5,0xcf,0xf1,0x74,0xdb,0x96,0x98,0x19,0x3f,0x15,0x44,0x14,0xd,0x2c,0x88,0x23, 0xd8,0x38,0x5e,0x81,0x11,0x11,0x2,0x9,0xc9,0x89,0x82,0xc2,0x2,0xc9,0xb6,0xc2, 0x2e,0x60,0x96,0x64,0xe3,0x8d,0x91,0xc8,0x86,0x10,0x81,0x37,0x6c,0x88,0x14,0x29, 0x91,0x22,0x47,0x62,0x91,0x11,0x12,0x12,0x9b,0x80,0xa2,0x91,0xc2,0x58,0x44,0x63, 0xd3,0x6d,0xc0,0xf4,0x78,0x7a,0xda,0xd3,0x4c,0xbf,0xaa,0xbb,0x1e,0xf7,0x91,0x45, 0xbb,0x8b,0x18,0x43,0x72,0xaf,0x6a,0x55,0x75,0xeb,0x3f,0xf7,0x9c,0xff,0x3f,0xff, 0x11,0x7c,0xcf,0x3a,0x75,0xea,0x14,0xf,0x3e,0xf8,0x20,0x8d,0x46,0x83,0x47,0x1e, 0x79,0xc4,0xde,0xbc,0x79,0x93,0x2c,0xcb,0x0,0xd8,0xb7,0x6f,0x1f,0xf,0x3c,0xf0, 0x0,0xad,0x56,0x4b,0xf0,0x7f,0x96,0x10,0xb3,0x4f,0x94,0x52,0x4c,0x26,0x13,0x76, 0x76,0x76,0xd8,0xda,0xda,0xa2,0xdb,0xed,0xe2,0xfe,0xaf,0x43,0x8f,0x3f,0xfe,0xb8, 0xdd,0xd8,0xd8,0xa0,0xd9,0x6c,0xb2,0xbc,0xbc,0x4c,0xa5,0x52,0x21,0xcb,0x32,0xba, 0xdd,0x2e,0x6b,0x6b,0x6b,0x94,0x4a,0x25,0x7b,0xfa,0xf4,0x69,0xb4,0xd6,0x79,0x10, 0xd6,0xda,0x7b,0xfe,0x23,0x10,0x68,0xa3,0x19,0x8d,0x46,0x94,0x4a,0x25,0x94,0x52, 0x18,0x63,0xf8,0xde,0xc8,0xdf,0x7d,0xf7,0x5d,0xdb,0xed,0x76,0x79,0xf4,0xd1,0x47, 0x39,0x7a,0xf4,0x28,0x4a,0x29,0x94,0x52,0x0,0x84,0x61,0xc8,0x78,0x3c,0x66,0x7d, 0x7d,0x9d,0x56,0xab,0xc5,0xd3,0x4f,0x3f,0xcd,0xb6,0xde,0x16,0xdf,0x6,0xb7,0xd6, 0x22,0xee,0xec,0x82,0x28,0x20,0x95,0x64,0x70,0x7b,0x40,0xb3,0xd9,0x64,0xab,0xbd, 0xf5,0xdd,0xe0,0xef,0xbd,0xf7,0x9e,0xbd,0x76,0xed,0x1a,0xa7,0x4f,0x9f,0xa6,0x56, 0xab,0xd1,0x6a,0xb5,0xe8,0xf7,0xfb,0x18,0x63,0x0,0x8,0x82,0x80,0x95,0x95,0x15, 0xf6,0xef,0xdf,0xcf,0xc7,0x1f,0x7f,0xcc,0xb5,0x6b,0xd7,0x78,0xf9,0xe5,0x97,0x39, 0xf3,0xd7,0x33,0x82,0xff,0xba,0xb8,0xc5,0xce,0x2,0xc8,0x4,0x15,0x55,0x61,0x59, 0x2c,0x73,0x2c,0x38,0x46,0xb2,0x97,0xd0,0xd9,0xee,0x7c,0x77,0xda,0x37,0x36,0x36, 0x38,0x75,0xea,0x14,0xb5,0x5a,0x8d,0x8d,0x8d,0xd,0x94,0x52,0x34,0x1a,0xd,0xc2, 0x30,0x44,0x6b,0xcd,0x70,0x38,0xe4,0xb3,0xcf,0x3e,0x23,0x49,0x12,0x4e,0x9c,0x38, 0x41,0xa7,0xd3,0xe1,0xca,0x95,0x2b,0xac,0xdb,0x75,0xc4,0xb7,0xee,0x63,0xad,0x25, 0x9e,0xc6,0xa4,0xdb,0x29,0xf5,0x7e,0x9d,0x93,0xe5,0x93,0x1c,0xe,0xe,0x93,0xa5, 0xd9,0xbd,0xe0,0x6b,0x6b,0x6b,0xb6,0xd9,0x6c,0x72,0xf4,0xe8,0x51,0xae,0x5f,0xbf, 0x8e,0x52,0x8a,0x43,0x87,0xe,0x51,0x2c,0x16,0xf3,0x94,0x96,0xcb,0x65,0x3c,0xcf, 0xe3,0xab,0xaf,0xbe,0xa2,0xd1,0x68,0xb0,0xba,0xba,0xca,0x87,0x1f,0x7e,0x48,0xf3, 0x95,0xa6,0x7d,0xe6,0xa3,0x67,0xc4,0x3c,0xdd,0x18,0xc8,0xe2,0x8c,0x5e,0xd2,0x63, 0xc7,0xee,0x90,0xc4,0x9,0xbb,0xd9,0x2e,0xfb,0x4a,0xfb,0x30,0x89,0xb9,0x17,0xfc, 0xe6,0xcd,0x9b,0x2c,0x2f,0x2f,0xa3,0x94,0xa2,0xdf,0xef,0xd3,0x68,0x34,0x28,0x16, 0x8b,0x4c,0x26,0x13,0xa2,0x28,0xc2,0x75,0x5d,0xaa,0xd5,0x2a,0x8b,0x8b,0x8b,0xc, 0x6,0x3,0x3a,0x9d,0xe,0x7,0xf,0x1e,0xcc,0xcf,0x1e,0xa8,0x1d,0x40,0x6b,0x8d, 0x35,0x16,0xab,0x2d,0x51,0x1a,0x31,0xb2,0x23,0xa4,0x95,0x18,0x6b,0xd0,0x46,0xe7, 0xef,0xe5,0xb7,0xc1,0xb3,0x2c,0xa3,0x52,0xa9,0xe4,0x8c,0xc,0xc3,0x10,0x6b,0x2d, 0x51,0x14,0x71,0xe4,0xc8,0x11,0x3c,0xcf,0x23,0x8e,0x63,0x5c,0xd7,0x25,0x8,0x2, 0xa6,0xd3,0x29,0x85,0x42,0x81,0x52,0xa9,0xc4,0x78,0x3c,0xa6,0x58,0x2c,0x52,0xe, 0xcb,0x94,0xa,0x25,0x42,0x37,0xc4,0x17,0x3e,0x8e,0x70,0x90,0x42,0x82,0xbc,0xc3, 0x83,0x3b,0x5b,0x7e,0x57,0xcd,0xe7,0x7a,0x6,0xd0,0x5a,0x3,0xe0,0xba,0x2e,0x3b, 0x3b,0x3b,0xc4,0x71,0x8c,0xe7,0x79,0x58,0x6b,0x31,0xc6,0x20,0xa5,0x44,0x29,0x45, 0x96,0x65,0x4,0x41,0x80,0xef,0xfa,0xf8,0xbe,0x8f,0xef,0xf9,0xb8,0x9e,0x8b,0xe3, 0x3a,0x48,0x47,0x22,0xe4,0x8c,0xf5,0xd6,0xda,0xbc,0x7c,0x2e,0xc0,0xa5,0x4b,0x97, 0xa8,0x56,0xab,0x34,0x1a,0xd,0xb4,0xd6,0x74,0xbb,0x5d,0x1e,0x7a,0xe8,0x21,0x82, 0x20,0x60,0x38,0x1c,0x52,0x2e,0x97,0xa9,0x56,0xab,0x3c,0xf6,0xd8,0x63,0x9c,0x39, 0x73,0x86,0xb3,0x67,0xcf,0x32,0x1e,0x8f,0x99,0x4e,0xa7,0x2c,0x2d,0x2d,0x31,0x1e, 0x8f,0x89,0xe3,0x98,0xe3,0xc7,0x8f,0xe3,0xdd,0xf6,0xb0,0xda,0x62,0x84,0xc1,0x6a, 0x8b,0xe3,0xcc,0x6e,0x2d,0x10,0x20,0x66,0x4,0xb4,0x58,0xb0,0x20,0x2e,0x5e,0xbc, 0x48,0xbd,0x5e,0xe7,0xfc,0xf9,0xf3,0xb6,0xd9,0x6c,0xf2,0xd6,0x5b,0x6f,0xdd,0xa9, 0xf5,0x7e,0x3c,0xcf,0x65,0x61,0x61,0x81,0x42,0xa1,0xc0,0x74,0x3a,0xe5,0xfd,0xf7, 0xdf,0xc7,0xf7,0x7d,0x4e,0x9c,0x38,0x81,0xef,0xfb,0xec,0xee,0xee,0xd2,0x6c,0x36, 0x91,0x52,0x62,0x8c,0xa1,0xd3,0xe9,0xe4,0xc,0x9f,0xcb,0x72,0x9e,0x45,0x6b,0x2d, 0xae,0xeb,0xe1,0x79,0x2e,0x4f,0x3e,0xf9,0x33,0x7a,0xbd,0x5d,0xe1,0x86,0x61,0xc8, 0xc2,0xc2,0x2,0xad,0x56,0x8b,0x77,0xde,0x79,0x87,0x6a,0xb5,0x8a,0x52,0xa,0xd7, 0x75,0x38,0x7c,0xf8,0x30,0x5a,0xeb,0xbc,0xbe,0xf5,0x7a,0x1d,0xdf,0xf7,0x71,0x5d, 0x97,0x38,0x8e,0x1,0x58,0x5a,0x5a,0x22,0x8a,0x22,0x82,0x20,0xe0,0xc0,0x81,0x3, 0x44,0x36,0x22,0x55,0x69,0xe,0x3a,0x6f,0x4c,0x5a,0x6b,0x42,0x1d,0xd2,0x6e,0xb7, 0x59,0x5b,0xfb,0x3b,0xf,0x3f,0xfc,0x30,0x6e,0xb1,0x58,0xe4,0xea,0xd5,0xab,0x76, 0x6f,0x6f,0x8f,0x17,0x5e,0x78,0x81,0x76,0xbb,0xcd,0x27,0x9f,0x7c,0xc2,0xe6,0xe6, 0x26,0xc6,0x18,0x5c,0xd7,0x25,0x4d,0x53,0x3c,0xcf,0xa3,0x5e,0xaf,0xa3,0xb5,0xc6, 0xf3,0x3c,0x3c,0xcf,0x23,0x8,0x2,0xb6,0xb6,0xb6,0x38,0x78,0xf0,0x20,0x8d,0x46, 0x83,0x81,0x1e,0x60,0xad,0x25,0xcd,0x12,0x86,0x85,0x11,0x16,0x83,0x55,0x86,0x42, 0x5a,0x44,0x45,0x8a,0xc1,0x60,0x80,0xd8,0x12,0x48,0x39,0xa3,0x9a,0xdb,0xeb,0xf5, 0xe8,0xf7,0xfb,0x54,0xab,0x55,0x6e,0xdd,0xba,0xc5,0xe6,0xe6,0x26,0x8e,0xe3,0x70, 0xdf,0x7d,0xf7,0xa1,0xb5,0x26,0xcb,0x32,0x86,0xc3,0x21,0x69,0x9a,0xb2,0xb2,0xb2, 0x42,0xa7,0xd3,0xe1,0x8b,0x2f,0xbe,0x40,0x8,0x31,0x93,0x8c,0xb5,0xc,0x87,0x43, 0xf6,0x6,0x7b,0x8c,0xf4,0x8,0x5d,0xd4,0x44,0xde,0xd7,0x24,0x91,0x41,0x85,0x6, 0x39,0x31,0xf8,0x99,0xc0,0x19,0x95,0xa9,0xc9,0x1a,0x13,0x39,0xa1,0x40,0x61,0x6, 0xde,0x6e,0xb7,0xb9,0x71,0xe3,0x6,0xd6,0x5a,0x16,0x17,0x17,0x69,0xb5,0x5a,0x39, 0x9b,0xb5,0xd6,0x24,0x49,0x42,0x1c,0xc7,0x44,0x51,0x44,0xbd,0x5e,0x67,0x67,0x67, 0x87,0xed,0xed,0xed,0x5c,0xd,0xae,0xeb,0x22,0xa5,0x64,0xcc,0x18,0x55,0x50,0xe8, 0x51,0xc6,0xe4,0x70,0x42,0x1c,0x26,0x64,0xa5,0x14,0x2f,0xf6,0x8,0x86,0x1,0x66, 0xb7,0x4b,0x6d,0x7f,0x6d,0x66,0x34,0x77,0x9c,0xce,0xbd,0x7d,0xfb,0x36,0xc6,0x18, 0xb4,0xd6,0x28,0xa5,0x38,0x7e,0xfc,0x38,0x85,0x42,0x81,0xe7,0x7f,0xf5,0x7c,0xe, 0xf0,0xfa,0xef,0x5e,0xe7,0xa5,0xdf,0xbc,0xc4,0x53,0x7f,0x7c,0x8a,0x43,0x87,0xe, 0x51,0xa9,0x54,0x78,0xed,0xd2,0x6b,0x5c,0x78,0xe5,0x2,0x52,0x4a,0x5c,0xd7,0x65, 0xcc,0x98,0x24,0x48,0x18,0x97,0xfb,0xfc,0x73,0xf0,0x2f,0x7e,0xfa,0xc4,0xf,0xf9, 0xc9,0xd1,0xfb,0xf9,0x68,0x6b,0x93,0xf,0xfe,0xf6,0x6f,0x56,0x7f,0xf4,0x3,0x6c, 0x77,0x3a,0xeb,0x19,0x36,0xc2,0x91,0xe,0xee,0x68,0x34,0x42,0x29,0x95,0xa7,0x70, 0x6f,0x6f,0x8f,0x6a,0xb5,0xa,0xc0,0x9b,0x7f,0x78,0x13,0x21,0x4,0xfd,0xa4,0xf, 0xc0,0x73,0xbf,0x7c,0x8e,0xb3,0xe7,0xce,0x72,0xf9,0xed,0xcb,0x0,0xf4,0x7a,0x3d, 0xa4,0x94,0x14,0xa,0x5,0x22,0x11,0x91,0x6,0x3,0xc6,0x28,0x46,0x85,0x11,0x4f, 0xdc,0xff,0x63,0xaa,0x5e,0x91,0xc6,0xb1,0x1a,0x57,0x2a,0xff,0x60,0x6f,0x6b,0x4c, 0x48,0x80,0x53,0x71,0x70,0xf5,0x8c,0xc0,0x72,0x6d,0x6d,0x8d,0x72,0xb9,0x4c,0x18, 0x16,0x49,0x92,0x24,0x6f,0x18,0x0,0x2f,0xfe,0xfa,0x45,0xb4,0xd6,0xf8,0xbe,0xf, 0xc0,0xab,0xbf,0x7d,0x95,0xcb,0x6f,0x5f,0xe6,0xdc,0xf9,0x73,0x0,0xa4,0x69,0x4a, 0x1c,0xc7,0xc4,0x71,0x4c,0x9a,0xa6,0xa8,0xcc,0x21,0x4e,0x12,0xdc,0x89,0xcb,0xa7, 0xbd,0x2f,0x11,0x8,0x36,0xfa,0x37,0x70,0x23,0x17,0xa9,0x41,0x0,0x36,0x9a,0xc9, 0x50,0x8,0xf1,0x4d,0x6f,0xd7,0x5a,0xdf,0x95,0x7e,0x80,0x37,0x7e,0xff,0x6,0x0, 0x8e,0xe3,0x0,0xe0,0x79,0x1e,0x17,0x5e,0xb9,0x40,0xe4,0x44,0x0,0xb9,0x96,0x8d, 0x31,0x68,0x34,0x4a,0x19,0x4a,0xb1,0xcf,0x4a,0x63,0x85,0xb5,0xf,0xae,0xf2,0xc1, 0x81,0x4f,0x99,0x7e,0x9d,0xb1,0x94,0x2c,0x11,0x4c,0x4,0xc8,0x70,0x36,0xf,0x88, 0x10,0x6d,0xf4,0xc,0x7c,0x38,0x1c,0x32,0x9d,0x4e,0x30,0xc6,0x30,0x9d,0x4e,0x9, 0x82,0x0,0x80,0x24,0x49,0x70,0xdd,0x6f,0xbc,0xc7,0x71,0x1c,0x5c,0xd7,0x25,0xc, 0xc3,0xfc,0xe6,0x52,0x4a,0x92,0x24,0x41,0x48,0x41,0x36,0xc9,0x10,0x15,0xc9,0x62, 0x50,0x21,0xf9,0x54,0xa3,0xae,0xa7,0x14,0x26,0xe,0xd5,0x4c,0xe0,0x8e,0x4b,0xe0, 0xce,0x26,0x1b,0x89,0xa4,0xdf,0xef,0xcf,0xcc,0xf7,0xe4,0xc9,0x93,0xf6,0xd8,0xb1, 0x63,0xac,0xae,0xae,0xb2,0xbe,0xbe,0x8e,0xe7,0x79,0x38,0x8e,0x83,0x10,0x82,0x20, 0x8,0x28,0x95,0x4a,0x48,0x29,0x71,0x1c,0x87,0x2c,0xcb,0x72,0x5,0xc,0x6,0x3, 0xb2,0x2c,0xcb,0xcb,0x34,0xb2,0xa3,0x99,0x86,0xcb,0x20,0x3d,0x89,0xb6,0x1a,0x47, 0x38,0x8,0x23,0x10,0x53,0x41,0x63,0xb1,0x41,0x7b,0xb3,0x8d,0xef,0xfb,0x78,0x9e, 0x27,0xee,0xb1,0xd4,0x76,0xbb,0x9d,0x37,0x11,0x21,0x66,0xd,0xa1,0x54,0x2a,0xe5, 0x9d,0x6d,0xbe,0x92,0x24,0xc9,0x83,0xc8,0xb2,0x8c,0x34,0x4d,0x31,0xc6,0x30,0xd0, 0x3,0x4c,0xc7,0xcc,0x26,0x18,0x47,0x60,0xb5,0xcd,0xb3,0x76,0x64,0xf1,0x48,0x3e, 0xd7,0x7d,0xfe,0xf9,0xe7,0x77,0xfb,0x79,0xb9,0x5c,0xe6,0xdc,0xb9,0x73,0x14,0x8b, 0xc5,0xdc,0xad,0xa4,0x94,0xb9,0x2e,0x1d,0xc7,0xc9,0x1b,0x8f,0xd6,0x9a,0x28,0x8a, 0xf2,0x20,0xb4,0xd6,0xa4,0x69,0x9a,0x7f,0x67,0x30,0xf9,0x39,0x63,0xc,0xae,0x74, 0x73,0x1f,0x90,0x52,0xf2,0xec,0xb3,0xcf,0xde,0xd,0xde,0xeb,0xf5,0xe8,0xf5,0x7a, 0x24,0x49,0x92,0x3,0xcd,0xc1,0x85,0x10,0x78,0x9e,0x97,0x9b,0x84,0x52,0x8a,0xe9, 0x74,0x9a,0x2b,0x64,0x9e,0x1,0xa5,0x54,0x6e,0x99,0x73,0xc3,0xf1,0x3c,0x2f,0x27, 0xe7,0xbc,0xb5,0x5e,0xbc,0x78,0x91,0xf9,0xc4,0x69,0xcf,0xfc,0xfc,0x17,0x6c,0xdf, 0xda,0xba,0xcb,0xc,0xe6,0x75,0xf6,0x7d,0x1f,0x21,0x4,0xbe,0xef,0x53,0x2e,0x97, 0x9,0x82,0x0,0x21,0x4,0xc6,0x18,0x94,0x52,0x33,0x99,0xdd,0x91,0xe8,0x74,0x3a, 0x25,0x8a,0xa2,0xdc,0xb7,0xe7,0xb2,0x9a,0x3f,0xb5,0xda,0x2,0xb,0xfb,0xea,0xfc, 0xe5,0xcf,0x7f,0x12,0xff,0x1,0x41,0x40,0x7,0x79,0x91,0x7,0xe1,0xd6,0x0,0x0, 0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/battery4.png 0x0,0x0,0x8,0xe1, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x47,0x0,0x46,0x0,0x46,0xf8,0x38, 0x2a,0xf1,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0xb,0x13,0x3,0x27,0x24,0x94,0x87,0xd5,0x14,0x0,0x0,0x8,0x6e,0x49,0x44, 0x41,0x54,0x78,0xda,0x8d,0x97,0x4b,0x8f,0x1c,0x57,0x15,0x80,0xbf,0x5b,0x75,0xbb, 0xab,0xaa,0xbb,0x67,0xba,0x7b,0x7a,0x7a,0xfc,0x9a,0x87,0xf3,0x92,0x6d,0x6c,0x4c, 0x8c,0x23,0x88,0x12,0x5,0xc9,0x81,0x1d,0x48,0x41,0xec,0x82,0x58,0x90,0x25,0x3b, 0x24,0xb6,0x2c,0xf8,0x5,0xb0,0x60,0x83,0x84,0x22,0x84,0x4,0x12,0x12,0x59,0x81, 0xb0,0x4,0x22,0x64,0xe5,0xc4,0xa0,0x10,0x70,0x70,0x32,0x76,0x6c,0x4d,0x62,0xcf, 0x64,0x32,0x8f,0x9e,0x7e,0x54,0x77,0x55,0xd7,0xeb,0xde,0xc3,0xa2,0xdb,0x63,0x3b, 0x7e,0x4c,0x8e,0x74,0xa5,0x2e,0x75,0x55,0x9d,0xaf,0xce,0xad,0xaf,0xce,0xbd,0x8a, 0x69,0x14,0x3f,0xc3,0x1,0xc4,0xcc,0xb4,0x95,0xd,0x66,0x4b,0xf9,0xcc,0xb2,0x14, 0xb5,0x25,0x13,0xa9,0xc6,0x4c,0xa4,0xea,0x51,0x16,0xd,0x6d,0x16,0x87,0x6d,0x13, 0x77,0xdb,0x26,0xea,0x7d,0x50,0x4e,0xba,0xb6,0x9c,0xec,0xa9,0x72,0x36,0x2e,0xd7, 0xa2,0x5e,0x29,0xca,0xc9,0x4e,0xfc,0x86,0x1c,0x50,0x80,0x4c,0xc7,0x81,0xa1,0xef, 0xf9,0xfd,0x1d,0xe0,0x15,0xe0,0xc,0xf0,0x4,0xb0,0x3,0x24,0x80,0x99,0x9e,0x57, 0x6,0xda,0x40,0x6b,0x7a,0x3c,0x9a,0x8e,0x77,0x80,0xcb,0xc0,0x1f,0x80,0x75,0xc0, 0x4e,0x21,0xbe,0x50,0x68,0xf3,0x8b,0x96,0x6,0x7e,0x60,0x8f,0xbe,0xf8,0x75,0x99, 0x59,0x3c,0x47,0xa5,0xbd,0xa0,0xfc,0x66,0xc3,0x29,0xd5,0x5a,0x8e,0xae,0x39,0x92, 0x40,0x91,0x8,0x11,0x3d,0xc2,0xbc,0xcb,0xd8,0x69,0x12,0x4b,0x8f,0xdc,0xb4,0xcb, 0x79,0xd6,0xaf,0x5,0x36,0x39,0x55,0xf5,0xe2,0x5a,0x55,0xf5,0xe7,0xde,0xff,0xfe, 0xda,0x2f,0x47,0x19,0x9b,0x2f,0xbc,0x81,0x73,0xf4,0x30,0x2f,0x2a,0xc5,0xb,0xad, 0x26,0xcc,0x35,0x1e,0x4c,0xdc,0xed,0xc3,0x5e,0x6f,0xf2,0x24,0x1a,0xf8,0xa1,0xd4, 0x17,0x8f,0xdb,0x95,0xb,0x2b,0x34,0x4f,0xa0,0x9a,0x27,0x70,0x8c,0xc1,0x35,0x6, 0x7a,0x3d,0x4c,0xaf,0x47,0x94,0xef,0xb2,0x17,0xed,0xd0,0x77,0xfa,0xf4,0xe9,0x13, 0x16,0x61,0x79,0x98,0xd,0xcb,0x87,0xdc,0xde,0xc9,0x5,0xb7,0x77,0xf2,0xa8,0x93, 0x1d,0xf6,0x5d,0xea,0x85,0xe6,0xc7,0x40,0xe,0x7c,0x3,0xf8,0xc9,0x41,0xd5,0xd0, 0xb2,0xf0,0xe5,0xc,0x58,0x51,0x73,0xcf,0xd4,0x9d,0xd6,0x29,0xc4,0x9b,0x43,0x44, 0xb0,0xd6,0x62,0x8c,0x1,0xc0,0x75,0x5d,0x1c,0xc7,0x41,0x29,0x85,0xb5,0x96,0xa2, 0x28,0x48,0x92,0x84,0xe1,0x70,0x88,0x53,0x82,0xbc,0x3c,0x83,0x6b,0x66,0x17,0x66, 0xf5,0xe1,0x93,0x3,0x63,0x5b,0xb0,0xb3,0xbd,0x30,0x8f,0xaf,0x5d,0xfc,0xf6,0xb3, 0xb3,0xfe,0xd3,0xe7,0x66,0x1e,0x48,0x7c,0xe3,0x3f,0x43,0xca,0xff,0xd,0x53,0x4d, 0xf3,0x49,0x17,0x58,0x71,0x1a,0x4f,0x40,0xeb,0x14,0xc6,0x18,0x4c,0x51,0xdc,0x7, 0xa0,0xb5,0xbe,0xf,0x20,0xcf,0x73,0xe2,0x38,0x26,0xc,0x43,0xf2,0x20,0x20,0x92, 0x1a,0x55,0x55,0x5d,0x98,0x77,0x1b,0xd2,0x57,0x85,0x82,0x1d,0xe6,0x9b,0xf8,0x5e, 0x19,0xff,0xe9,0xf3,0x35,0x5e,0xfa,0xee,0xd1,0x7,0x0,0x1c,0xe7,0x53,0xdc,0x8d, 0xd0,0xd3,0x36,0x2f,0x26,0x25,0x2a,0x8c,0x52,0xd6,0x92,0xa6,0x29,0x49,0x92,0xb0, 0xbb,0xbb,0xcb,0xee,0xee,0x2e,0x51,0x14,0x11,0xc7,0xf1,0xfe,0x18,0xe,0x87,0x8c, 0x46,0x23,0xb2,0x2c,0xc3,0x5a,0x8b,0xef,0xfb,0xcc,0xcd,0xcd,0xd1,0x2a,0xba,0xb4, 0xa,0xf7,0x90,0x18,0x3b,0x7,0x6c,0x6e,0xed,0x70,0xa5,0x5c,0xe6,0x2d,0xb9,0x92, 0x5c,0x70,0x54,0x17,0x4,0xc4,0xde,0x5,0xb8,0x7e,0x65,0xcc,0xf6,0x36,0x97,0xb4, 0xcd,0xcd,0x1c,0xa0,0x28,0xc,0x77,0x0,0xa2,0x28,0x62,0x63,0x63,0x83,0x1b,0x37, 0x6e,0xec,0x3,0x68,0xad,0x29,0x95,0x4a,0x84,0x61,0xc8,0x68,0x34,0x22,0x49,0x12, 0xac,0xb5,0x4,0x41,0x40,0xab,0xd5,0xa2,0x35,0xde,0x54,0xad,0xd8,0x25,0xcd,0xcc, 0x2d,0x80,0xab,0xd7,0xe9,0x0,0xbf,0xe3,0x7f,0xdd,0x37,0x2e,0xd2,0x4d,0x80,0x2, 0x38,0x4,0xf4,0x81,0x6c,0xfa,0xee,0x3d,0xa3,0x8b,0xce,0xb5,0x10,0x10,0xbd,0x74, 0x1e,0xc7,0xe9,0xa3,0x5d,0xa3,0xb4,0xd6,0x54,0xab,0x55,0x9a,0xcd,0x26,0x22,0x42, 0x92,0x24,0xa4,0x69,0xca,0x68,0x34,0xa2,0x28,0x8a,0xfd,0xa4,0x41,0x10,0xb0,0x54, 0x85,0xc5,0x5a,0x26,0x8d,0x28,0x54,0xa5,0xce,0x36,0xee,0xc8,0x0,0x38,0xf5,0x2a, 0xc7,0x5c,0x87,0xd3,0xd5,0x80,0x4a,0x2d,0x60,0x8,0x8c,0x5,0x96,0xa7,0x7a,0xf7, 0xa3,0x31,0x83,0xd1,0x98,0xe7,0x74,0xb1,0xbb,0x9a,0x0,0xb8,0xe3,0x75,0x5c,0xa7, 0x87,0xeb,0xfa,0xa2,0xb5,0xaf,0x2a,0x95,0xa,0x8d,0x46,0x83,0x24,0x49,0x18,0xc, 0x6,0x8c,0x46,0x23,0xfa,0xfd,0x3e,0xbe,0xef,0x13,0x4,0x1,0xcb,0xcb,0xcb,0x1c, 0x3f,0x7e,0x9c,0xc5,0xec,0xb6,0x2c,0xa6,0xb7,0x49,0xd6,0x7,0x92,0xec,0x6d,0x2b, 0x37,0x46,0x0,0xd7,0x2f,0x73,0x42,0xbb,0xbc,0xd6,0xa8,0xc1,0xdc,0xec,0x83,0x26, 0x74,0x5d,0xb0,0x16,0xb4,0xcd,0x73,0x1,0x30,0xf1,0xbf,0xc6,0x26,0x76,0x13,0x57, 0xce,0x7,0x15,0xef,0x2b,0xfe,0xa1,0xf9,0x82,0xaa,0x17,0x70,0xb8,0x55,0xe1,0xa9, 0xe5,0x19,0xd2,0xd0,0x25,0x19,0xfa,0xe8,0x34,0x45,0x27,0x9,0x8d,0xe2,0x3,0xea, 0x37,0xaf,0xc8,0xec,0x78,0x57,0xbc,0x71,0x87,0x7c,0xe7,0xb6,0xb2,0x6,0x65,0xd, 0x65,0x60,0xbc,0xd0,0x40,0x7b,0x65,0xfc,0xf6,0xf3,0xb3,0xde,0xa3,0x2c,0xf0,0x2e, 0x87,0xa9,0x36,0x59,0xee,0x2,0x62,0xe2,0x4b,0xe3,0x62,0x74,0xa9,0xaf,0x83,0x1f, 0x89,0xe7,0x2f,0x79,0x55,0xdf,0xe1,0xf0,0x7c,0x0,0xb6,0xaa,0xb0,0x33,0x10,0x5, 0x30,0xaa,0xc3,0xf6,0x16,0x6c,0xf7,0x84,0x4f,0xae,0x89,0x7c,0x72,0x4d,0x18,0x45, 0xc2,0x28,0x92,0x38,0xc1,0xb5,0x5,0x88,0xc1,0x5,0x64,0xbe,0x81,0x5b,0xf1,0xf0, 0x1e,0x6b,0xc1,0xf5,0xd0,0xd3,0xc6,0xe0,0xc1,0xa4,0x1c,0x0,0x48,0x2,0x32,0xb0, 0x48,0xa,0x36,0x83,0xe2,0x96,0x22,0xbf,0xa5,0x88,0x3c,0x18,0x96,0x15,0xdb,0x6b, 0x96,0xb5,0x35,0x91,0x4e,0x47,0x88,0x23,0xc8,0xf3,0xc9,0x65,0x93,0x4f,0x7,0xd6, 0x12,0x1,0xb2,0xdd,0xe5,0x13,0xdf,0x3b,0xc0,0x82,0x3d,0x2e,0x69,0x6b,0x70,0xe0, 0x9e,0x3f,0x65,0x6c,0x91,0x81,0xc5,0xf4,0x11,0x33,0x80,0x74,0x55,0x91,0xae,0x3a, 0x6a,0xd4,0x84,0x61,0x13,0xb6,0x56,0x45,0xd6,0xae,0x5a,0x92,0x69,0xa7,0xd8,0xbf, 0xe,0xb1,0x16,0x63,0x2d,0x2e,0xc0,0x87,0xb7,0xf8,0x4,0xf8,0x3d,0x1f,0x75,0x7f, 0x7a,0x91,0xee,0x19,0xc0,0x5,0xe6,0x81,0x2e,0x30,0x7,0x54,0x1,0xb4,0x2d,0x18, 0xdf,0x7,0xb0,0x5f,0xa3,0x19,0x5,0x15,0x85,0x57,0x51,0x4a,0x3f,0xed,0xd0,0x5d, 0xb5,0xf4,0x57,0x45,0x92,0xce,0x43,0xbb,0x9c,0x8,0x46,0xc,0x76,0xa,0xe0,0xd6, 0x3,0x16,0x5d,0x87,0x27,0xaa,0x1e,0x67,0x6b,0xfe,0xf4,0x21,0x61,0x1b,0x38,0x5, 0x6c,0x45,0x9,0xcf,0x8d,0x12,0xd0,0xa6,0xc0,0x1,0xa,0xfb,0x79,0x0,0x55,0x53, 0xb8,0x81,0xa3,0xf4,0x53,0xa,0x55,0x55,0x98,0x1d,0xa4,0x77,0xcd,0x32,0x2e,0x1e, 0xda,0x68,0xc5,0x62,0xad,0x21,0x13,0x83,0x2,0x8c,0x5f,0xa2,0xa9,0x1d,0x5e,0x6b, 0x54,0x60,0xae,0xf6,0x10,0xb,0x9c,0xa9,0x5,0xc6,0x60,0x80,0x3d,0x11,0xca,0x93, 0xc4,0x81,0x83,0x6a,0x38,0x38,0x75,0xa5,0x54,0x5d,0x91,0xad,0x43,0xb6,0x2a,0x64, 0x1b,0x60,0xa,0xb0,0x56,0x1e,0xd6,0xed,0x45,0x26,0x37,0xbc,0xf3,0xe,0x2c,0xcc, 0x50,0xf7,0x5c,0xfc,0xf6,0x85,0xc7,0x58,0xf0,0x56,0x98,0x6a,0x6b,0xb0,0xc0,0xae, 0x58,0x8e,0x4d,0x0,0x7c,0x50,0x75,0x47,0x39,0xb,0xa,0xb7,0xad,0x18,0xaf,0xa, 0xf1,0xbb,0x42,0xba,0x2e,0x98,0x42,0x1e,0xb5,0xcc,0x10,0x1,0x63,0xc1,0xa,0xf3, 0x40,0xa7,0x5d,0x43,0x7,0xa5,0x3,0x2c,0xf8,0x77,0xe8,0xe9,0xc8,0xd6,0x1d,0x40, 0x69,0xa9,0x94,0xbd,0xa2,0x1a,0x78,0x72,0xac,0xac,0xdd,0x5,0x85,0x53,0x99,0x9c, 0x59,0x3a,0xa,0x95,0xf3,0x8a,0x5a,0xa4,0x98,0xd9,0x51,0xec,0xd,0x80,0x70,0x1f, 0x63,0x33,0x75,0xd4,0x66,0xe2,0x2a,0x13,0x1b,0xa7,0x48,0xac,0x13,0x67,0xc,0x1, 0xbd,0x15,0xf2,0xb1,0x5f,0x3a,0xc0,0x82,0x1,0x97,0x74,0x24,0xf5,0x25,0x60,0xa1, 0x6c,0x5b,0xba,0x62,0xe6,0x3,0xcd,0x11,0x8d,0xdb,0xbe,0x3b,0x67,0xa5,0x23,0xa, 0xc7,0x83,0xea,0x8e,0xc3,0xcc,0x1a,0x94,0xb1,0x48,0xb8,0x3f,0x5,0x9b,0x99,0xab, 0xde,0x1d,0x6a,0xa7,0x19,0xe3,0x34,0x13,0xeb,0xc4,0xf9,0x64,0x95,0xf5,0xe1,0x67, 0x7c,0xc,0xfc,0x95,0xd7,0xbb,0x7f,0xba,0x48,0x37,0x6,0x56,0x80,0xcd,0x7b,0x8a, 0xb0,0x4,0xa0,0x93,0x52,0xeb,0x38,0x50,0x8b,0xe4,0x4c,0xc9,0x8d,0xcf,0xa2,0xfc, 0xe5,0x92,0x6f,0x32,0x50,0x2e,0x8e,0x72,0x11,0x4a,0xa0,0x2a,0x8c,0xa5,0x49,0x6c, 0x8e,0xa8,0xb8,0x88,0x9d,0x38,0xef,0xcb,0x76,0xe4,0xa8,0x9d,0x91,0xc3,0xb5,0xd0, 0x51,0xd7,0x43,0xa5,0xce,0x14,0x31,0xb3,0x45,0x8e,0x35,0xcc,0x2,0x5b,0x75,0x9f, 0x25,0x57,0x71,0xbc,0xea,0xf1,0x5e,0xad,0xcc,0x59,0x60,0x4b,0x26,0x6,0x0,0x10, 0xa5,0x9c,0x1c,0x65,0xa0,0x93,0x72,0xeb,0x26,0xb0,0xed,0xca,0xe9,0x27,0x89,0x2f, 0x68,0xbf,0x56,0x63,0xd6,0x64,0x38,0x6e,0x19,0x51,0x7a,0x2,0x40,0x85,0x58,0x9a, 0x74,0xcd,0x61,0xd5,0x29,0xfa,0x6a,0x37,0xdf,0x91,0xab,0x51,0x49,0x5d,0xed,0x69, 0xb5,0x31,0xb2,0x6c,0xc,0x85,0x9a,0x2a,0x38,0xad,0x62,0x8c,0x61,0x6,0xd8,0xf0, 0x35,0x4b,0xda,0xe1,0xd5,0x86,0xcf,0xab,0x73,0x15,0x14,0xd0,0x99,0x7e,0x7,0xee, 0x5a,0x20,0xa0,0xad,0x65,0x1b,0x8,0x65,0x7f,0x56,0x4b,0x88,0xaa,0x20,0xe2,0x62, 0xac,0xcb,0xa0,0x9f,0x32,0xe8,0x77,0xd9,0x5c,0xcf,0xd5,0xe6,0x86,0x27,0x9d,0x5e, 0x93,0x4e,0xb6,0xa8,0x6e,0xe7,0x19,0x7b,0x45,0x46,0x6c,0x73,0x20,0x47,0x2c,0x18, 0x1,0x6b,0x18,0x2,0x6a,0xa1,0x8a,0xf6,0x34,0x7e,0xfb,0x5b,0xfb,0x16,0xcc,0x3e, 0x60,0xc1,0xdf,0xc3,0x54,0x8b,0x65,0x16,0x8,0xb8,0x7,0x0,0x2a,0xd8,0xa9,0x6a, 0xbd,0x7e,0xca,0xed,0xdb,0x5d,0xd6,0xd6,0x33,0xd6,0x3e,0xf5,0x54,0xa7,0xd7,0x64, 0x2f,0xb3,0xf4,0xf2,0x1e,0xfd,0xa2,0x4f,0x62,0x65,0x2,0x30,0x49,0xde,0x31,0x53, 0x80,0xf9,0x2a,0xba,0x72,0x90,0x5,0x97,0x43,0x4f,0x8b,0x25,0x0,0x8e,0xc9,0xe7, 0xf4,0xba,0xb3,0x32,0xa,0xc3,0x90,0x30,0xc,0x49,0xd3,0xf4,0xb1,0xcb,0x6b,0x6b, 0xc1,0x18,0xe6,0xad,0x61,0x5,0x78,0x7f,0x7b,0xc4,0xaa,0xaf,0xf,0xb0,0x20,0xe4, 0x92,0xb6,0x96,0x1e,0x50,0xbd,0x17,0x40,0x29,0x45,0x9a,0xa6,0xc,0x6,0x3,0xc2, 0x30,0x64,0x38,0x1c,0x1e,0x8,0x20,0x2,0x66,0x52,0x81,0x2d,0x80,0xf,0x77,0xd8, 0x2,0xfe,0xc6,0xeb,0xdd,0xdf,0x5e,0xa4,0x7b,0x67,0x61,0xde,0x9a,0xee,0x1d,0x76, 0x81,0x5,0xe0,0x49,0xed,0xf4,0x3a,0xcf,0x1,0x4a,0x25,0xf1,0xf4,0x46,0x82,0x31, 0x86,0x2c,0xcb,0x48,0xd3,0x94,0xa2,0x28,0x1e,0x9b,0xd8,0x15,0x8b,0x27,0x16,0xc7, 0xa,0xc6,0x30,0x6f,0x2c,0x21,0xe0,0xd4,0xcb,0x2c,0xb9,0x8a,0xaf,0x55,0x4b,0xdc, 0xa8,0x69,0x16,0x80,0x42,0xe0,0x8,0x10,0x0,0x95,0xa8,0x60,0x65,0x94,0x73,0x56, 0xab,0xde,0xde,0x7b,0x0,0x6a,0x7c,0x3f,0x40,0x51,0x14,0x5f,0x8,0x40,0xcb,0x4, 0xc2,0x9d,0x0,0x30,0x6d,0x46,0xe2,0x6b,0x16,0xb5,0xe2,0xe5,0x46,0x99,0x97,0xe7, 0xbc,0xfb,0x7a,0xc1,0x4b,0x0,0xdd,0x74,0x6a,0x81,0xf4,0x87,0x43,0xa0,0x97,0x7f, 0xf4,0x81,0x9f,0x94,0xff,0x1c,0xa4,0xa7,0x9f,0x25,0xff,0xd2,0x39,0xcc,0x14,0xe8, 0x51,0x11,0xd8,0x2,0xb2,0x31,0xf5,0x2c,0xa2,0x9e,0xc,0x69,0x16,0x59,0x67,0x6c, 0xd9,0x88,0x26,0x0,0x6a,0xc1,0x47,0x7b,0xe,0x7e,0xfb,0xdb,0x8f,0xe9,0x5,0x7f, 0x9,0x53,0x2d,0x7b,0xfd,0x19,0xa0,0x57,0xac,0xbe,0xdf,0x4c,0xf6,0xb6,0x83,0xd4, 0x85,0xec,0xe8,0x12,0xd3,0x2d,0xc1,0x23,0xc3,0x2f,0xa,0xfc,0x6c,0xcc,0x4a,0x12, 0xb1,0x9c,0x8c,0xb0,0x56,0x76,0x6,0x96,0x37,0xfb,0x96,0x18,0x30,0x6d,0x1f,0x27, 0x70,0xf,0xb0,0xe0,0x1f,0xa1,0xa7,0x53,0x21,0x0,0x7e,0x6e,0xc7,0xe9,0xf3,0xd9, 0x4e,0xe7,0xd9,0xdd,0x7f,0xbe,0x33,0x1f,0x6f,0x6c,0xb5,0x53,0xc7,0x55,0xa9,0x72, 0x9d,0x24,0x49,0x51,0x49,0x82,0x3f,0x1c,0x51,0x1f,0x8e,0x28,0xf,0x42,0xe6,0xc2, 0x10,0x19,0xd,0x73,0x19,0xe,0x73,0x2f,0x4f,0xd7,0xc7,0x56,0xd6,0x13,0xe1,0x62, 0xdf,0xf2,0xeb,0xcf,0x84,0xc,0xf0,0x77,0xc6,0xdc,0xf4,0x5c,0xde,0x94,0x2b,0xc9, 0x37,0x1f,0x69,0x41,0xcc,0xa5,0x3b,0x73,0x53,0xfe,0x55,0x9b,0xef,0xf9,0x8a,0x57, 0xb4,0x70,0xca,0x15,0x4e,0x2a,0xcf,0xd3,0xca,0xf3,0x5c,0x53,0xf6,0x28,0x4a,0x1e, 0x59,0x5e,0x90,0x65,0x6,0x27,0x1e,0xe3,0xc4,0x31,0x58,0x89,0xc5,0x48,0x3c,0x14, 0xde,0xde,0xb4,0xbc,0xbd,0x6e,0xb9,0xfc,0xc7,0x82,0x9b,0x80,0x33,0x5d,0xf7,0x9f, 0x3,0xbe,0xca,0xdd,0xfd,0xa7,0x3b,0x1d,0xf7,0xc5,0xff,0x1,0x4a,0x3f,0xf8,0xb5, 0x44,0xf,0x2d,0x48,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/folder-open.png 0x0,0x0,0x4,0x5f, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x1,0x73,0x52,0x47,0x42,0x0,0xae,0xce,0x1c,0xe9,0x0,0x0,0x0, 0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0, 0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x37,0x5d,0x0,0x0,0x37,0x5d,0x1, 0x19,0x80,0x46,0x5d,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd9,0x3,0xa, 0x11,0x10,0x39,0xd9,0xdb,0x2e,0xed,0x0,0x0,0x3,0xdf,0x49,0x44,0x41,0x54,0x78, 0xda,0xed,0x55,0x3d,0x6f,0x24,0x45,0x14,0xac,0xd7,0xdd,0x33,0xbd,0xeb,0x3d,0x6c, 0x81,0xe,0xdd,0x21,0x4e,0x88,0x13,0x22,0x23,0x20,0x20,0x82,0x4b,0x88,0x2e,0xbd, 0x94,0x80,0x0,0xf9,0x17,0xf0,0x7,0xc8,0x8,0x2e,0x27,0x44,0x42,0x84,0x7,0x48, 0x58,0x22,0x22,0x20,0x41,0xc8,0x84,0x24,0x64,0x70,0x60,0x9,0x81,0x30,0xb2,0xbd, 0x6b,0xbc,0x77,0xbb,0xb3,0x33,0xdd,0x8f,0xea,0xf1,0x7e,0xb0,0xee,0x65,0x2d,0x5b, 0x16,0x10,0xdc,0x9b,0xa9,0x79,0x6f,0xa7,0x3f,0xaa,0xa6,0xde,0xac,0x6,0x4f,0xe2, 0xbf,0xe,0x99,0x15,0x1f,0x7c,0xad,0xf7,0xae,0x6f,0x54,0x9f,0xb0,0x2c,0x88,0x79, 0x28,0x31,0x9a,0x60,0x67,0xf7,0xa1,0x7d,0xeb,0xc3,0xb7,0x8b,0x31,0xae,0x38,0xcc, 0xac,0x28,0x74,0xfc,0xaa,0x84,0x61,0x81,0x66,0x88,0xbf,0xc3,0x10,0xd7,0xec,0xf0, 0xde,0x6b,0xb7,0x1e,0xef,0xbc,0xf3,0xf1,0xb8,0x83,0x2b,0xe,0x37,0x2b,0xaa,0xa0, 0xa8,0x6a,0x85,0xaa,0x0,0xed,0xb9,0x1c,0xbd,0xb2,0xbe,0xfb,0xfa,0x8b,0x71,0x74, 0xe7,0x9b,0x13,0x88,0xb1,0xb8,0x70,0x28,0x4f,0x1e,0xc2,0x74,0x3c,0xf1,0xdb,0xef, 0xbe,0xe9,0x3e,0x5a,0x12,0x50,0x37,0x11,0x95,0x28,0xea,0x49,0x85,0xe3,0xc1,0x1, 0x62,0xd4,0xac,0x57,0xeb,0x3b,0xb9,0x3e,0xac,0x15,0x6c,0x3e,0xf3,0x2c,0x1c,0xb, 0x9,0xfa,0x42,0xe6,0x40,0x1d,0x54,0x93,0x80,0xdf,0x7e,0xd9,0xc3,0xfb,0xdb,0x6f, 0x0,0x88,0xcb,0x1b,0x6b,0x5c,0x94,0xaa,0xf3,0x2c,0x90,0x36,0x6b,0x5a,0xc1,0xcc, 0x79,0xf3,0xdf,0xcc,0x73,0xf8,0xc2,0xe1,0xfe,0xce,0x4f,0xd8,0x7a,0xfa,0x3a,0x26, 0x41,0x91,0xb,0x68,0x14,0x15,0x17,0x8f,0xab,0x80,0xd8,0x4c,0xf0,0xc7,0xc1,0xd1, 0x9c,0x88,0xb1,0x92,0x5c,0x4f,0x8b,0xe5,0x7b,0x44,0x8c,0x71,0x51,0xcf,0x4,0xf8, 0x2,0x87,0x7,0x87,0x28,0xbb,0x5b,0xc9,0xe9,0xd5,0xef,0x80,0xe5,0xc2,0x9a,0x79, 0x6f,0x6f,0xf,0xb7,0x5f,0x7a,0x39,0x6d,0x94,0x91,0xcf,0xeb,0x34,0x26,0x92,0x9, 0x62,0x4e,0x97,0xcc,0x5,0x56,0xb8,0xbf,0x7d,0x3,0xef,0x3d,0xf8,0x11,0xc5,0xe6, 0x53,0xba,0xa2,0x5,0x11,0x15,0x22,0x26,0x74,0x22,0x84,0x90,0xc8,0x33,0x1,0x99, 0xb,0x1c,0xd7,0x9c,0x2c,0x7,0xe7,0x5,0x66,0x6b,0x80,0xd1,0x38,0x0,0xbd,0xb8, 0xb2,0x5,0xca,0x71,0xa,0x88,0x10,0x11,0x18,0x63,0xa6,0x44,0x39,0x71,0x1a,0x5f, 0xe4,0x9c,0x38,0x9c,0x11,0x2e,0xc6,0xb4,0x22,0x8c,0x18,0x54,0xdc,0xdf,0x36,0xc8, 0x5,0xfc,0x39,0xe8,0xa3,0xc0,0x18,0x27,0xc3,0x21,0x1e,0x3d,0x22,0x86,0x27,0xb9, 0x3,0xb9,0x98,0x79,0x9d,0x83,0xe,0x9e,0x71,0x41,0x6b,0x87,0x13,0xee,0x5b,0xdb, 0xbe,0xce,0xc5,0x3d,0xd8,0xdd,0xff,0xc1,0xfb,0xce,0xd,0xda,0x5e,0x86,0x10,0x7d, 0x52,0x5f,0x5a,0x41,0x84,0xe0,0xdc,0xc8,0xe6,0xc4,0xd5,0x73,0xa6,0x74,0xc6,0x2, 0x75,0x1d,0x51,0x14,0xae,0x32,0xd6,0x4e,0x9a,0xc9,0x78,0xdf,0x7d,0xfb,0xb0,0x76, 0xbf,0x1f,0x57,0x43,0xba,0x74,0xd,0x50,0x1f,0x9a,0x80,0xcd,0xd,0xb,0x67,0xb, 0xac,0xf,0x5d,0x7f,0x47,0xf3,0x51,0x11,0x41,0x7f,0x58,0xa7,0xf6,0x4e,0xa2,0x62, 0xf8,0xdc,0x96,0xb1,0xae,0xeb,0xcb,0x7e,0xaf,0x8b,0x9b,0x22,0xda,0x2e,0xa,0xae, 0x41,0xaf,0x63,0x61,0xad,0xc3,0xe5,0x43,0xa7,0xd7,0x5c,0x48,0xd5,0x18,0x3a,0x61, 0xa0,0x2a,0xe8,0x78,0xc,0xdc,0x86,0xf7,0x83,0x6e,0x85,0x9b,0x10,0x95,0xd3,0x17, 0xc8,0xc0,0x17,0x74,0xc0,0xb9,0xcb,0x53,0x33,0x56,0x29,0x10,0x1e,0x23,0xa,0xb0, 0xa9,0x17,0x2a,0xd8,0xf0,0xe8,0xd3,0x1,0xd7,0xf7,0x1d,0x0,0x51,0x79,0x46,0xc4, 0x8,0x94,0x85,0x49,0x7d,0xba,0xfc,0xd3,0xb7,0x29,0xef,0x82,0x8,0xe0,0xeb,0x48, 0x1,0x4e,0x60,0x4,0xdd,0x53,0x1,0xd2,0xa7,0x3,0x88,0x41,0x25,0xaa,0x50,0x0, 0xad,0x29,0x4,0x8e,0x58,0x6c,0x21,0x17,0x20,0x97,0xdc,0xd,0x5d,0x38,0x50,0x92, 0xdb,0x59,0xc0,0xd8,0xa9,0x80,0xd,0x6f,0xfa,0xde,0x29,0xa2,0x4d,0xe4,0x80,0x12, 0x65,0x12,0xe0,0x72,0x62,0x91,0xf3,0xc4,0xc8,0x3a,0x43,0x60,0xc,0xe0,0xab,0xb4, 0xb7,0x88,0x91,0xd4,0x2,0xe1,0x3b,0x50,0xca,0xa0,0x5b,0xa,0x9a,0xa8,0x92,0x4, 0x84,0x60,0xc0,0xdf,0xad,0xc2,0x79,0xe4,0x22,0x98,0xf3,0xa6,0xeb,0x39,0xde,0x18, 0x5e,0x7d,0xfb,0x70,0x4,0xd5,0x6c,0x94,0x74,0xa0,0xd7,0xa1,0x3,0xa5,0xc2,0x6, 0x91,0x10,0x41,0x27,0xc0,0x49,0x6,0xa9,0x4d,0x53,0x8e,0xac,0xa7,0x22,0x42,0xe0, 0xe2,0x7f,0x43,0xc8,0x4c,0x80,0x71,0x56,0xd0,0xeb,0xd0,0x81,0x9e,0x97,0x7e,0xa7, 0x4,0x26,0xd,0x5,0x4,0x45,0x8c,0xed,0xa4,0x56,0xc0,0xba,0x68,0x45,0x64,0x14, 0xeb,0x2d,0x10,0x99,0xb5,0x57,0xa4,0x74,0x2,0x72,0xd3,0x81,0x52,0xfb,0x1d,0x2f, 0x10,0x46,0x30,0x32,0x15,0x0,0x58,0xba,0x80,0xfc,0x73,0xbc,0xde,0x5,0xcd,0xca, 0x4c,0xb4,0x77,0xed,0xb,0x2e,0xbe,0x14,0x24,0x6e,0x37,0x3a,0xde,0xef,0x77,0xfd, 0xf3,0x50,0x32,0x47,0x23,0xe4,0x14,0x18,0xa3,0xa0,0x2b,0xac,0x57,0xfb,0xac,0x73, 0x1,0xf9,0xf8,0xea,0x6f,0x46,0x42,0x3b,0x7f,0xee,0x40,0xd7,0x5b,0x8c,0x8e,0x7f, 0xed,0x9b,0xef,0x76,0xbf,0x1a,0x58,0x97,0x46,0xd5,0xf2,0xa,0x31,0x16,0x27,0x55, 0x4c,0x79,0x9,0xc6,0x12,0xa9,0xb6,0x86,0x35,0x61,0x12,0x84,0xf5,0x19,0xf0,0x9e, 0x2c,0x90,0xe6,0x12,0x76,0xa,0xc3,0xf5,0x40,0xe2,0x4a,0x9c,0x89,0xdb,0x7d,0xb1, 0xf3,0xd9,0xd1,0xdd,0x5b,0x77,0x42,0x14,0x6f,0x67,0xc6,0x29,0x8f,0x26,0x34,0xff, 0xf4,0x48,0xd0,0xa5,0x4f,0xf2,0x92,0x33,0xe7,0xc6,0xe1,0xe0,0x4,0x92,0x1e,0x43, 0xab,0xf0,0xe5,0xe7,0x9f,0x1e,0x9,0x0,0x47,0xbc,0x42,0xdc,0x26,0xa,0x42,0x8, 0x4b,0x74,0x71,0xf5,0xa1,0xc4,0x63,0xa2,0x22,0x7e,0x26,0xbe,0x17,0x2c,0x42,0x5a, 0xfc,0x3b,0xa1,0x2d,0x9e,0xc4,0xff,0x21,0xfe,0x2,0x11,0x2d,0x53,0xa7,0x3a,0x3b, 0x16,0x9f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/newfolder.png 0x0,0x0,0x2,0x89, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x12,0x0,0x0,0x0,0x12,0x8,0x6,0x0,0x0,0x0,0x56,0xce,0x8e,0x57, 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xaf,0xc8,0x37,0x5,0x8a,0xe9, 0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, 0x0,0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64, 0x79,0x71,0xc9,0x65,0x3c,0x0,0x0,0x2,0x1b,0x49,0x44,0x41,0x54,0x78,0xda,0x62, 0xfc,0xff,0xff,0x3f,0x3,0x35,0x0,0x40,0x0,0x31,0x91,0xac,0x63,0x1a,0xe3,0x7f, 0x30,0x46,0x3,0x0,0x1,0xc4,0x44,0x89,0x66,0x64,0x71,0x80,0x0,0x62,0x4,0x11, 0xf2,0xc5,0xf,0x50,0x14,0x3d,0xec,0x55,0x10,0x1,0x52,0x9f,0x81,0xf8,0xd7,0xff, 0xa9,0xc,0xff,0x19,0xb2,0xa4,0x18,0x18,0x8e,0x3f,0x63,0x60,0x38,0xf,0x14,0x1, 0xb1,0xc1,0x86,0x0,0xf9,0x86,0x40,0xda,0x52,0xa,0xcc,0x6,0x8,0x20,0x46,0x90, 0x21,0x5,0x5e,0xac,0x28,0x16,0x15,0x56,0x2e,0x63,0x60,0x38,0x55,0xaa,0x8,0x64, 0x3e,0x43,0x18,0x16,0xb,0x64,0xea,0x3,0xb1,0x16,0x54,0xd5,0x35,0x20,0xbe,0x8, 0x34,0x64,0x31,0x3,0x63,0x36,0x3,0x23,0x40,0x0,0x81,0xd,0xb2,0xd2,0xf8,0xc1, 0x70,0xed,0xf9,0x37,0xbc,0xbe,0xbb,0x20,0x6c,0x4,0x75,0xc1,0x19,0x88,0xc0,0x71, 0x13,0xb0,0xb,0x41,0x86,0x80,0xb8,0x0,0x1,0xc4,0x2,0x22,0x7e,0xfd,0xf9,0xcb, 0xf0,0xf3,0xf7,0x5f,0xb0,0xfc,0xff,0xd7,0xbf,0x31,0xc,0xb9,0xa1,0x6b,0xc5,0x80, 0x70,0xd1,0x2b,0x88,0xa0,0x65,0xf,0x10,0x5f,0x4,0x3a,0x75,0xf1,0x7f,0xa0,0x61, 0xec,0x0,0x1,0x4,0x35,0xe8,0x1f,0xd8,0x20,0xb6,0xf,0xff,0x18,0xa2,0x2,0xe4, 0x18,0x1e,0xbc,0xfb,0x9,0x37,0x64,0xde,0x7b,0x65,0x48,0xb8,0x1c,0x5f,0xc,0x74, 0xc1,0x62,0xcc,0x30,0x2,0xf2,0xff,0x33,0x3c,0xfb,0x9,0x10,0x40,0x60,0xaf,0x69, 0x49,0x7f,0x60,0xb8,0xf4,0xe4,0xb,0x3,0xcf,0x37,0x26,0x6,0x3d,0x43,0x1,0x86, 0xbf,0xcc,0xcc,0x28,0x2e,0x5a,0xfb,0x53,0x1d,0x4c,0x7,0xb3,0xdf,0x84,0xb3,0x1b, 0xac,0xdf,0x31,0x34,0x1c,0x15,0x2,0xb3,0x81,0x2e,0x12,0x1,0x8,0x20,0xb8,0xd7, 0x60,0x86,0x7c,0xf8,0x9,0x8a,0xc0,0x3f,0x28,0x6,0xb9,0x31,0x5c,0x85,0x30,0xbe, 0x1,0xc5,0xa1,0x76,0x3c,0xfe,0xf8,0x8b,0x41,0xe3,0xf2,0x31,0x86,0x9b,0x33,0xac, 0x40,0x26,0x7f,0x6,0x8,0x20,0xb0,0x41,0xdf,0xbf,0x23,0xc2,0xe5,0xd9,0xdb,0xef, 0x78,0x3,0x5d,0x90,0xe1,0x8,0x83,0x8c,0x92,0x24,0x3,0xc3,0x83,0xaf,0x30,0xa1, 0x7,0x20,0xb7,0x0,0x4,0x10,0xd8,0xa0,0xb7,0xcf,0xff,0x31,0xa8,0x68,0xf2,0x32, 0x9c,0xbc,0xf3,0x89,0x60,0xda,0xfc,0xfb,0xff,0x3b,0xc3,0x93,0x7b,0xcf,0x19,0xc4, 0x5f,0x32,0x81,0x5c,0xe3,0x8,0x32,0x4,0x24,0xe,0x10,0x40,0x2c,0x30,0x5,0xfb, 0x8e,0xdd,0x23,0x3a,0x97,0xfc,0x61,0x0,0x26,0x15,0x41,0x51,0x6,0x68,0x3a,0x3, 0x3,0x80,0x0,0x2,0x1b,0x64,0x26,0xfc,0x8a,0xa1,0x33,0x5a,0xf,0x9e,0x4,0x38, 0xd8,0x58,0x18,0xd8,0xd9,0x98,0x19,0x4,0x78,0xd8,0x19,0xd8,0x59,0x99,0x21,0x6c, 0x6e,0x36,0x30,0xcd,0x1,0xe4,0x1b,0x15,0x9e,0x86,0xb9,0xe6,0x2d,0xcc,0x20,0x80, 0x0,0x2,0xe7,0xb5,0x60,0xf,0x88,0x21,0x20,0x4d,0x24,0x80,0x67,0xd0,0x6c,0x4, 0x6,0x0,0x1,0xc4,0xc8,0x60,0xd6,0x4d,0x7a,0x39,0x72,0xaa,0x54,0x1d,0x16,0xc8, 0x30,0x21,0x80,0x0,0x2,0x25,0x6f,0x61,0x50,0x3a,0x25,0xd1,0xa8,0xe3,0xc8,0xde, 0x2,0x1,0x80,0x0,0x2,0x19,0xc4,0x6,0x35,0x8c,0x14,0xf0,0x16,0xd9,0x35,0x20, 0x0,0x10,0x60,0x0,0x54,0xda,0xb8,0xcf,0x51,0x36,0xf4,0x5a,0x0,0x0,0x0,0x0, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/battery0.png 0x0,0x0,0x8,0xca, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x47,0x0,0x46,0x0,0x46,0xf8,0x38, 0x2a,0xf1,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0xb,0x13,0x3,0x1e,0x1b,0x2c,0x65,0x75,0x93,0x0,0x0,0x8,0x57,0x49,0x44, 0x41,0x54,0x78,0xda,0x8d,0x97,0x4b,0x8b,0x5c,0xc7,0x19,0x86,0x9f,0xaa,0x53,0x7d, 0x2e,0xdd,0x3d,0xd3,0xd7,0xe9,0x91,0xe4,0xb9,0xc8,0x76,0x8c,0xa4,0xc8,0x51,0x7c, 0x23,0x9,0x36,0x9,0xd8,0x1,0xaf,0x2,0x86,0xec,0x1c,0xb2,0x88,0x97,0xd9,0x5, 0xb2,0xcd,0x22,0xbf,0x20,0x59,0x64,0x13,0xc8,0x22,0x4,0x12,0x8,0xc4,0xab,0x4, 0x2,0x19,0x30,0x5a,0xc9,0x76,0x82,0x31,0xd8,0x91,0x3c,0xb2,0x25,0xc6,0x96,0x66, 0x32,0x9e,0xe9,0xe9,0x99,0xbe,0x9c,0x4b,0x9f,0x5b,0x55,0x65,0xd1,0xad,0x91,0x64, 0x49,0x23,0x7f,0x50,0x70,0xe,0x54,0x9d,0xef,0xa9,0xfa,0xea,0x3d,0x6f,0x95,0x60, 0x1e,0xe5,0xaf,0x91,0x80,0xd5,0xb,0x4b,0xc2,0x4,0x8b,0x95,0x62,0x61,0xcd,0x96, 0xf5,0x55,0x1d,0x8b,0xe6,0x42,0x2c,0x1a,0x71,0x1e,0x87,0x26,0x4f,0x26,0x4b,0x3a, 0x39,0x5a,0xd2,0xf1,0xf0,0x9a,0x9b,0x1e,0x19,0x37,0x3d,0x14,0x6e,0x3e,0x75,0xeb, 0xf1,0xb0,0x12,0x17,0xe4,0xe7,0xfe,0x48,0x1,0x8,0xc0,0xce,0xdb,0x63,0x43,0xdd, 0xf3,0xfc,0x23,0xe0,0xd,0xe0,0x59,0xe0,0x49,0xa0,0xf,0xa4,0x80,0x9e,0xf7,0x73, 0x81,0x25,0xa0,0x33,0x7f,0x8f,0xe6,0xed,0x3d,0xe0,0x7d,0xe0,0xaf,0xc0,0x36,0x60, 0xe6,0x10,0x5f,0x2b,0x94,0xfe,0x6d,0x47,0x1,0x3f,0x35,0x67,0x5e,0xf9,0xae,0x5d, 0x58,0x79,0x9e,0xea,0x52,0x4f,0xf8,0xad,0xa6,0xac,0xd4,0x3b,0x52,0xd5,0xa5,0x4d, 0xa1,0x4c,0x2d,0x31,0x43,0x26,0xc5,0x11,0x53,0xd9,0x22,0xb1,0x43,0xa,0xbd,0xe4, 0x16,0xf9,0xa8,0x1e,0x98,0xf4,0x42,0xcd,0x4b,0xea,0x35,0x31,0x6a,0x7f,0xfc,0x93, 0xad,0xdf,0x45,0x39,0xbb,0x2f,0xbf,0x8d,0x3c,0x73,0x8a,0x57,0x84,0xe0,0xe5,0x4e, 0xb,0xda,0xcd,0x7,0x13,0x1f,0x8d,0xe0,0x70,0x38,0x9b,0x89,0x2,0x7e,0x66,0x1b, 0x2b,0x67,0xcd,0xfa,0xab,0xeb,0xb4,0xce,0x21,0x5a,0xe7,0x90,0x5a,0xe3,0x68,0xd, 0xc3,0x21,0x7a,0x38,0x24,0x2e,0xe,0x38,0x8c,0xfb,0x8c,0xe4,0x88,0x11,0x23,0x26, 0xe5,0xc4,0xd,0xf3,0xd0,0x5d,0x76,0x86,0xe7,0x7b,0xce,0xf0,0xfc,0x19,0x99,0x9f, 0xf2,0x1d,0x1a,0xa5,0xe2,0x17,0x40,0x1,0xfc,0x0,0xf8,0xe5,0xe3,0x56,0x43,0xd9, 0xde,0xb7,0x72,0x60,0x5d,0xb4,0x9f,0x69,0xc8,0xce,0x5,0xac,0xd7,0xc6,0x5a,0x8b, 0x31,0x6,0xad,0x35,0x0,0x8e,0xe3,0x20,0xa5,0x44,0x8,0x81,0x31,0x86,0xb2,0x2c, 0x49,0xd3,0x94,0x30,0xc,0x91,0x15,0x28,0xdc,0x5,0x1c,0xbd,0xd8,0x5b,0x54,0xa7, 0xce,0x8f,0xb5,0xe9,0x40,0x7f,0xbf,0xd7,0xc5,0x57,0xe,0x7e,0x67,0xf9,0x75,0xff, 0x61,0x89,0x4f,0xd7,0xc1,0xad,0x6c,0x64,0x8a,0xd6,0x53,0xe,0xb0,0x2e,0x9b,0x4f, 0x42,0xe7,0x2,0x5a,0x6b,0x74,0x59,0xde,0x7,0xa0,0x94,0xba,0xf,0xa0,0x28,0xa, 0x92,0x24,0x61,0x32,0x99,0x50,0x4,0x1,0xb1,0xad,0x53,0x13,0xb5,0x5e,0xd7,0x69, 0xda,0x91,0x28,0x5,0xf4,0xe9,0xb6,0xf0,0x3d,0x17,0xbf,0x3c,0x61,0xf6,0xcb,0x5d, 0x3c,0x65,0x8a,0x72,0xb6,0x44,0xa5,0x16,0xc2,0x18,0xb2,0x2c,0x23,0x4d,0x53,0xe, 0xe,0xe,0x38,0x38,0x38,0x20,0x8e,0x63,0x92,0x24,0x39,0x6e,0x61,0x18,0x12,0x45, 0x11,0x79,0x9e,0x63,0x8c,0xc1,0xf7,0x7d,0xda,0xed,0x36,0x9d,0xf2,0x88,0x4e,0xe9, 0x2c,0x5b,0x6d,0xda,0xc0,0xee,0x5e,0x9f,0x8f,0x5c,0x97,0xcb,0x4b,0xa7,0x79,0xf5, 0x51,0x0,0xbb,0xfb,0x5c,0x51,0xa6,0xd0,0x6d,0x40,0x50,0x6a,0xee,0x0,0xc4,0x71, 0xcc,0xce,0xce,0xe,0x37,0x6e,0xdc,0x38,0x6,0x50,0x4a,0x51,0xa9,0x54,0x98,0x4c, 0x26,0x44,0x51,0x44,0x9a,0xa6,0x18,0x63,0x8,0x82,0x80,0x4e,0xa7,0x43,0x67,0xba, 0x2b,0x3a,0x89,0x43,0x96,0xeb,0x5b,0x0,0x57,0x3f,0x65,0x0,0xfc,0x99,0xff,0x6e, 0xbc,0x3d,0x57,0x53,0x9,0x2c,0x3,0x23,0x20,0x9f,0xef,0xbd,0x67,0x54,0x39,0xb8, 0x3e,0x1,0xac,0x5a,0x7d,0x11,0x29,0x47,0x28,0x47,0xb,0xa5,0x14,0xb5,0x5a,0x8d, 0x56,0xab,0x85,0xb5,0x96,0x34,0x4d,0xc9,0xb2,0x8c,0x28,0x8a,0x28,0xcb,0xf2,0x38, 0x69,0x10,0x4,0xac,0xd6,0x60,0xa5,0x9e,0xdb,0x66,0x3c,0x11,0x95,0xc1,0x3e,0x4e, 0xa4,0x1,0x64,0xa3,0xc6,0x13,0x8e,0xe4,0x62,0x2d,0xa0,0x5a,0xf,0x8,0x81,0xa9, 0x85,0xb5,0xb9,0xbc,0x47,0xf1,0x94,0x71,0x34,0xe5,0x25,0x55,0x1e,0x6c,0xa6,0x0, 0xce,0x74,0x1b,0x47,0xe,0x71,0x1c,0xdf,0x2a,0xe5,0x8b,0x6a,0xb5,0x4a,0xb3,0xd9, 0x24,0x4d,0x53,0xc6,0xe3,0x31,0x51,0x14,0x31,0x1a,0x8d,0xf0,0x7d,0x9f,0x20,0x8, 0x58,0x5b,0x5b,0xe3,0xec,0xd9,0xb3,0xac,0xe4,0xb7,0xed,0x4a,0x76,0x9b,0x74,0x7b, 0x6c,0xd3,0xc3,0x7d,0xe1,0x24,0x58,0xc0,0xf1,0x5d,0xce,0x29,0x87,0xb7,0x9a,0x75, 0x68,0x2f,0x3e,0xa8,0x84,0x23,0x7,0x8c,0x1,0x65,0x8a,0xc2,0x2,0xe8,0xe4,0x3f, 0x53,0x9d,0x38,0xa9,0x63,0x5f,0xc,0xaa,0xde,0xb7,0xfd,0xe5,0x6e,0x49,0xcd,0xb, 0x38,0xd5,0xa9,0xf2,0xf4,0xda,0x2,0xd9,0xc4,0x21,0xd,0x7d,0x54,0x96,0xa1,0xd2, 0x94,0x66,0x79,0x8d,0xc6,0xcd,0x8f,0xec,0xe2,0xf4,0xc0,0x7a,0xd3,0x1,0x45,0xff, 0xb6,0x30,0x1a,0x61,0x34,0x2e,0x30,0xed,0x35,0x51,0x9e,0x8b,0xdf,0x59,0x7f,0xdd, 0x7b,0x58,0xfd,0xcf,0xf4,0xc0,0xbb,0xb5,0x91,0x29,0x9d,0x17,0xe,0x60,0x75,0x72, 0x65,0x5a,0x46,0x57,0x46,0x2a,0xf8,0xb9,0xf5,0xfc,0x55,0xaf,0xe6,0x4b,0x4e,0x75, 0x3,0x30,0x35,0x81,0x59,0x80,0x38,0x80,0xa8,0x1,0xfb,0x7b,0xb0,0x3f,0xb4,0x7c, 0x71,0xdd,0xda,0x2f,0xae,0x5b,0xa2,0xd8,0x12,0xc5,0x36,0x49,0x71,0x4c,0x9,0x56, 0xe3,0x0,0xb6,0xdb,0xc4,0xa9,0x7a,0x78,0x27,0xaa,0xa0,0x85,0xa7,0xb4,0xc6,0x83, 0xd9,0x72,0x0,0x60,0x53,0xb0,0x63,0x83,0xcd,0xc0,0xe4,0x50,0xde,0x12,0x14,0xb7, 0x4,0xb1,0x7,0xa1,0x2b,0xd8,0xdf,0x32,0x6c,0x6d,0x59,0x3b,0x18,0x58,0x92,0x18, 0x8a,0x62,0x36,0x6c,0xf6,0xeb,0xc0,0x18,0x62,0xc0,0xee,0x1f,0xf1,0x85,0xef,0x71, 0x79,0x69,0xf1,0x4,0x15,0x1c,0x72,0x45,0x19,0x8d,0x4,0xb0,0xc7,0x0,0x53,0x83, 0x1d,0x1b,0xf4,0x8,0xab,0xc7,0x90,0x6d,0xa,0xb2,0x4d,0x29,0xa2,0x16,0x84,0x2d, 0xd8,0xdb,0xb4,0x76,0xeb,0xaa,0x21,0x9d,0xef,0xed,0xe3,0x71,0x58,0x63,0xd0,0xc6, 0xe0,0x0,0x7c,0x72,0x8b,0x2f,0x80,0xbf,0xf0,0xd9,0xc6,0xaf,0xe6,0xfe,0xe2,0x0, 0x5d,0xe0,0x8,0x68,0x3,0x35,0x0,0x65,0x4a,0xa6,0xf7,0x1,0xdc,0x9,0xb9,0x20, 0xa0,0x2a,0xf0,0xaa,0x42,0xa8,0x6f,0x48,0x8e,0x36,0xd,0xa3,0x4d,0x6b,0xd3,0xc1, 0x43,0x5d,0xce,0x5a,0xb4,0xd5,0x98,0x39,0x80,0xd3,0x8,0x58,0x71,0x24,0x4f,0xd6, 0x3c,0x2e,0xd5,0xfd,0xf9,0x24,0x61,0x1f,0xb8,0x0,0xec,0xc5,0x29,0x2f,0x45,0x29, 0x28,0x5d,0x22,0x81,0xd2,0x7c,0x15,0x40,0xd4,0x5,0x4e,0x20,0x85,0x7a,0x5a,0x20, 0x6a,0x2,0xdd,0xc7,0xe,0xaf,0x1b,0xa6,0xe5,0x43,0x8d,0xd6,0x1a,0x8c,0xd1,0xe4, 0x56,0x23,0x0,0xed,0x57,0x68,0x29,0xc9,0x5b,0xcd,0x2a,0xb4,0xeb,0xf,0x51,0x81, 0x9c,0xab,0x40,0x6b,0x34,0x70,0x68,0x2d,0xee,0x2c,0x71,0x20,0x11,0x4d,0x89,0x6c, 0x8,0x21,0x1a,0x82,0x7c,0x1b,0xf2,0x4d,0x4b,0xbe,0x3,0xba,0x4,0x63,0xec,0xc3, 0xdc,0xde,0xda,0xd9,0x7,0xef,0xec,0x81,0xde,0x2,0xd,0xcf,0xc1,0xef,0x9c,0x7f, 0x84,0xa,0x0,0xef,0xfa,0x46,0x26,0x8d,0xc6,0x18,0xcd,0xc1,0x71,0x9,0x84,0xf, 0xa2,0x21,0x85,0xec,0x49,0xd4,0x8a,0x40,0x47,0x90,0x7c,0x60,0xc9,0xb6,0x2d,0xba, 0xb4,0xf,0xd6,0xea,0x2e,0x80,0x36,0x60,0x2c,0x5d,0xc0,0x5d,0xaa,0xa3,0x96,0x17, 0xf1,0x4e,0x72,0xc2,0xe5,0x45,0x3c,0x15,0x9b,0x86,0x4,0x84,0xb2,0x55,0xd7,0x2b, 0x6b,0x81,0x67,0x9f,0x70,0x95,0xd3,0x13,0xc8,0xea,0xac,0x57,0xe5,0xc,0x54,0x5f, 0x14,0xd4,0x63,0xc1,0x42,0x5f,0x70,0x38,0x6,0x26,0xc7,0xf3,0xdf,0xcd,0xa4,0xd8, 0x4d,0x1d,0xa1,0x13,0x2d,0xcb,0xd4,0xc8,0x24,0x27,0x4,0xd4,0xde,0x84,0xcf,0xfd, 0xa,0x97,0x97,0xce,0x9c,0xa0,0x82,0x31,0x57,0x54,0x6c,0x1b,0xab,0x40,0xcf,0x35, 0x1d,0x55,0xd5,0xdd,0x40,0x71,0x5a,0xe1,0x2c,0xdd,0xad,0x59,0xe5,0xb4,0x40,0x7a, 0x50,0xeb,0x4b,0x16,0xb6,0xc0,0xc5,0x60,0x27,0xc7,0x25,0xd8,0xcd,0x1d,0xf1,0x41, 0xa8,0x64,0x2b,0x41,0xb6,0x52,0x23,0x93,0x62,0x76,0xca,0xfa,0xe4,0x4b,0x3e,0x7, 0xfe,0xc5,0xed,0x8d,0xbf,0x3,0x9,0xb0,0xe,0xec,0xde,0x93,0x7f,0x15,0x40,0xa5, 0x95,0xce,0x59,0xa0,0x1e,0xdb,0x67,0x2b,0x4e,0x72,0x9,0xe1,0xaf,0x55,0x7c,0x9d, 0x83,0x70,0x90,0xc2,0xc1,0x52,0x1,0x51,0x65,0x6a,0x5b,0x24,0xfa,0xb4,0x48,0xca, 0x44,0x26,0xc5,0xc8,0xee,0xc7,0x52,0xf4,0x23,0xc9,0xf5,0x89,0x14,0x9f,0x4e,0x84, 0x78,0xb6,0x4c,0x58,0x2c,0xb,0x8c,0x66,0x11,0xd8,0x6b,0xf8,0xac,0x3a,0x82,0xb3, 0x35,0x8f,0xf,0xeb,0x2e,0x97,0x80,0x3d,0x3b,0x53,0x0,0x0,0x71,0xc6,0xf9,0x28, 0x7,0x95,0xba,0x9d,0x9b,0xc0,0xbe,0x63,0x2f,0x3e,0x45,0xf2,0xaa,0xf2,0xeb,0x75, 0x16,0x75,0x8e,0x74,0x5c,0xac,0x50,0x33,0x0,0xaa,0x24,0xb6,0xc5,0x91,0x3e,0x25, 0x6,0xe5,0x48,0x1c,0x14,0x7d,0x7b,0x35,0xae,0x88,0xab,0x43,0x25,0x76,0x22,0xc3, 0x4e,0x68,0xa9,0x8b,0x92,0x8b,0x22,0x41,0x6b,0x16,0x80,0x1d,0x5f,0xb1,0xaa,0x24, 0x6f,0x36,0x7d,0xde,0x6c,0x57,0x11,0xc0,0x60,0xfe,0x1f,0xb8,0xab,0x2,0xb,0xca, 0x18,0xf6,0x81,0x89,0x3d,0xae,0x6a,0x5,0x2b,0xaa,0x58,0xeb,0xa0,0x8d,0xc3,0x78, 0x94,0x31,0x1e,0x1d,0xb1,0xbb,0x5d,0x88,0xdd,0x1d,0xcf,0xe,0x86,0x2d,0x6,0xf9, 0x8a,0xb8,0x5d,0xe4,0x1c,0x96,0x39,0x89,0x29,0x80,0x2,0x6b,0x40,0x5b,0x30,0x9a, 0x10,0x10,0xbd,0x1a,0xca,0x53,0xf8,0x9d,0x8b,0xc7,0x2a,0x58,0x7c,0x40,0x5,0xd7, 0x36,0x32,0x65,0xd,0x8b,0x40,0xc0,0x3d,0x0,0x50,0xc5,0xcc,0xa5,0x36,0x1c,0x65, 0xdc,0xbe,0x7d,0xc4,0xd6,0x76,0xce,0xd6,0xff,0x3c,0x31,0x18,0xb6,0x38,0xcc,0xd, 0xc3,0x62,0xc8,0xa8,0x1c,0x91,0x1a,0x3b,0x3,0x98,0x25,0x1f,0xe8,0x39,0x40,0xb7, 0x86,0xaa,0x56,0x1e,0xe3,0x5,0x75,0x3c,0x69,0xd,0x81,0x35,0x3c,0x61,0xbf,0xa2, 0xeb,0x2c,0xcb,0x18,0x8f,0xc7,0x4c,0x26,0x13,0x26,0x93,0x9,0x59,0x96,0x9d,0x78, 0xbc,0x36,0x6,0xb4,0xa6,0x6b,0x34,0xeb,0x80,0xd9,0x8f,0xd8,0xfc,0x32,0xe4,0xf2, 0x49,0x63,0x76,0x27,0x5c,0x51,0xc6,0x30,0x4,0x6a,0xf7,0x2,0x8,0x21,0xee,0x3, 0x8,0xc3,0xf0,0xb1,0x0,0xd6,0x82,0x9e,0xad,0xc0,0x1e,0xc0,0x27,0x7d,0xf6,0x80, 0xd,0x76,0x37,0xfe,0x4,0xdc,0x39,0x98,0x77,0xe6,0x77,0x87,0x3,0xa0,0x7,0x3c, 0xa5,0xe4,0x70,0xf0,0x12,0x20,0x44,0x9a,0xcc,0x3f,0x64,0xd1,0x5a,0x93,0xe7,0x39, 0x59,0x96,0x51,0x96,0xe5,0x89,0x89,0x1d,0x6b,0xf0,0xac,0x41,0x1a,0x8b,0xd6,0x74, 0xb5,0x61,0x2,0xc8,0x86,0xcb,0xaa,0x23,0xf8,0x4e,0xad,0xc2,0x8d,0xba,0xa2,0x7, 0x94,0x16,0x4e,0x3,0x1,0x50,0x8d,0x4b,0xd6,0xa3,0x82,0x4b,0x4a,0xc,0xf,0x3f, 0x4,0x10,0xd3,0xfb,0x1,0xca,0xb2,0xfc,0x5a,0x0,0xca,0xce,0x20,0x9c,0x19,0x0, 0x73,0x33,0xb2,0xbe,0x62,0x45,0x9,0x5e,0x6b,0xba,0xbc,0xd6,0xf6,0xee,0xf3,0x82, 0xef,0x3,0x1c,0x65,0x73,0x15,0xd8,0x51,0x18,0x2,0xc3,0xe2,0xb3,0x6b,0x7e,0xea, 0xfe,0x23,0xc8,0x2e,0x3e,0x47,0xf1,0xcd,0xe7,0xd1,0x73,0xa0,0x47,0x45,0x60,0x4a, 0xc8,0xa7,0x34,0xf2,0x98,0x46,0x1a,0xd2,0x2a,0xf3,0xc1,0xd4,0xb0,0x13,0xcf,0x0, 0x44,0xcf,0x47,0x79,0x12,0xbf,0xf3,0xc2,0x9,0x5e,0xf0,0xe1,0x46,0xa6,0xec,0xe1, 0x68,0x1,0x18,0x96,0x9b,0x1f,0xb7,0xd2,0xc3,0xfd,0x20,0x73,0x20,0x3f,0xb3,0xca, 0xfc,0x4a,0xf0,0xc8,0xf0,0xcb,0x12,0x3f,0x9f,0xb2,0x9e,0xc6,0xac,0xa5,0x11,0xc6, 0xd8,0xfe,0xd8,0xf0,0xce,0xc8,0x90,0x0,0x7a,0xc9,0x47,0x6,0xce,0x63,0x54,0x10, 0xe0,0xa9,0xcc,0x12,0x0,0xbf,0x31,0xd3,0xec,0x7b,0x79,0x7f,0xf0,0xdc,0xc1,0xbf, 0xdf,0xeb,0x26,0x3b,0x7b,0x4b,0x99,0x74,0x44,0x26,0x1c,0x99,0xa6,0x19,0x22,0x4d, 0xf1,0xc3,0x88,0x46,0x18,0xe1,0x8e,0x27,0xb4,0x27,0x13,0x6c,0x14,0x16,0x36,0xc, 0xb,0xaf,0xc8,0xb6,0xa7,0xc6,0x6e,0xa7,0x96,0x7f,0x8e,0xc,0x7f,0xf8,0xd2,0x92, 0x3,0x7e,0x7f,0xca,0x4d,0xcf,0xe1,0x9d,0x2e,0xfc,0xf0,0x91,0x2a,0x48,0xb8,0x72, 0xa7,0x36,0xee,0xef,0x97,0xf8,0xb1,0x2f,0x78,0x43,0x59,0x2e,0x38,0x96,0xf3,0xc2, 0xf3,0x94,0xf0,0x3c,0x47,0xbb,0x1e,0x65,0xc5,0x23,0x2f,0x4a,0xf2,0x5c,0x23,0x93, 0x29,0x32,0x49,0xc0,0xd8,0xc4,0x6a,0x9b,0x84,0x96,0x77,0x77,0xd,0xef,0x6e,0x1b, 0xde,0xff,0x5b,0xc9,0x4d,0x40,0xce,0xcf,0xfd,0xcf,0x3,0x2f,0x70,0xf7,0xfe,0xe9, 0xcc,0xdb,0x7d,0xf1,0x7f,0x76,0xe,0xab,0x60,0x26,0x36,0x5b,0xcd,0x0,0x0,0x0, 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/properties.png 0x0,0x0,0x2,0xea, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x10,0x0,0x0, 0xb,0x10,0x1,0xad,0x23,0xbd,0x75,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd3,0x9,0x9,0x14,0x31,0x1b,0x7f,0x71,0x2c,0x28,0x0,0x0,0x2,0x77,0x49,0x44, 0x41,0x54,0x78,0xda,0x75,0x93,0xcb,0x4b,0xd4,0x61,0x14,0x86,0x9f,0xef,0x77,0x1b, 0x67,0x46,0x53,0x23,0x61,0x46,0xb3,0x8b,0x43,0x3a,0x50,0xd8,0x40,0x90,0x97,0xa8, 0x7f,0xa0,0x69,0x55,0x94,0xee,0xdc,0xb9,0x70,0xe1,0x5e,0x12,0x5a,0x86,0xe4,0xc2, 0xb6,0xb9,0x70,0x95,0x4,0x6d,0xa4,0x59,0xb6,0x2c,0x23,0xd4,0x18,0x24,0x68,0x14, 0x53,0x22,0x91,0xc9,0x5b,0x3a,0x3a,0x3a,0xb7,0xef,0x3b,0x2d,0x74,0x46,0x2a,0x3d, 0x70,0x36,0xe7,0xf2,0xbe,0xe7,0x9c,0x97,0xa3,0x38,0xc3,0xba,0x86,0x24,0x24,0x42, 0x54,0x4,0x4a,0x86,0xd4,0xdc,0x88,0x4a,0x9f,0x56,0xa7,0xfe,0xd,0xdc,0x79,0x2a, 0x7d,0xa,0x6,0x5d,0x87,0x58,0x53,0x5d,0x11,0x5,0xac,0x6c,0xba,0x1c,0x14,0x48, 0x96,0x34,0x63,0xf3,0xa3,0x6a,0xe2,0x54,0x80,0xbb,0xc3,0x52,0x6d,0x84,0xc9,0x50, 0xad,0xc4,0x1f,0x77,0xb,0x5d,0xad,0x8a,0x5c,0xbe,0x80,0x31,0xe0,0xba,0x36,0xcb, 0xbf,0xc,0xaf,0xde,0x5b,0x7c,0x5d,0x75,0x12,0xda,0xd0,0xbb,0xf0,0x52,0xed,0x3, 0x58,0x65,0x0,0x23,0x4c,0xb6,0x5f,0xd2,0xf1,0xe1,0x47,0x70,0xb5,0xa1,0x44,0xa1, 0x58,0xe0,0x5a,0x93,0x8f,0xb6,0x66,0x1f,0xf5,0x41,0x45,0xb8,0x4e,0x78,0xd6,0x63, 0xf3,0x20,0x96,0x8d,0x8b,0x30,0x59,0xee,0xb3,0xca,0x63,0x5f,0xa8,0x96,0xf8,0xc3, 0x4e,0x8b,0xed,0x3d,0x4d,0x24,0x64,0x11,0x9,0xfb,0xd8,0xc8,0xc0,0xcf,0x2d,0x38, 0x17,0xb4,0xb9,0x7e,0xd9,0x47,0xbe,0x60,0xb8,0x7f,0x3b,0x40,0xb4,0x51,0xc7,0x23, 0x3,0xd2,0x57,0x1,0x50,0x30,0xd8,0xd9,0x2a,0xec,0xe7,0x14,0xf9,0xa2,0x70,0xbe, 0xc6,0x61,0xf7,0x0,0xa6,0x17,0xe0,0xcb,0x32,0xcc,0x2c,0xe6,0x1,0xa8,0xd,0xda, 0xa4,0x77,0x20,0x76,0x45,0x23,0x30,0x8,0xe0,0x74,0xd,0x49,0xc8,0xb1,0x89,0xd5, 0xf8,0x15,0xeb,0x19,0xf0,0x6c,0x87,0x95,0xd,0xf8,0xb6,0xa,0xeb,0x19,0x40,0x17, 0xb8,0xd1,0x68,0x0,0x98,0x5d,0x32,0xbc,0xfd,0xac,0x30,0xe2,0x51,0x5d,0x45,0xac, 0xb9,0x5f,0x42,0x8e,0x8,0xd1,0x80,0x67,0xd8,0x39,0xb4,0xe0,0xf0,0x68,0x9e,0xd7, 0x1f,0x8e,0xf7,0x33,0x39,0x9e,0x74,0x43,0x4b,0xd8,0xcf,0xe2,0x9a,0x61,0x6a,0x16, 0x8c,0x1c,0xdd,0xbd,0xca,0x5,0x2d,0x12,0x75,0xb4,0x1,0x63,0x14,0xe9,0xdf,0xff, 0xeb,0xdb,0xd3,0x51,0xa4,0x25,0x5c,0x43,0x6a,0xd5,0xf0,0x7c,0xa,0xa,0xda,0x42, 0x1d,0xeb,0x26,0x8,0x8,0x38,0x46,0x48,0x65,0x8b,0x8a,0xcc,0x1,0xa0,0x4,0x44, 0x21,0x2,0x46,0xa0,0xb5,0xc9,0x23,0x5f,0x84,0x17,0xef,0x14,0x45,0xad,0x70,0xed, 0x13,0x82,0x83,0x9c,0x80,0x48,0xca,0x9a,0x1b,0x51,0xe9,0xfd,0x43,0x92,0xc6,0x8, 0x16,0xa,0x4b,0x81,0x6d,0x81,0x6b,0xc3,0xcc,0xb2,0x43,0x62,0xe,0xb4,0x51,0x78, 0x36,0x15,0x47,0x84,0x9d,0xac,0x24,0xd7,0xc6,0x9d,0xb4,0x5,0xa0,0xd,0x63,0x5b, 0x7b,0x86,0x73,0x1,0x2a,0x5e,0x53,0xa5,0xf1,0xdb,0x39,0x2e,0xd6,0x17,0xa9,0xb, 0xf2,0x57,0x6e,0x75,0xb3,0x84,0x88,0x19,0xab,0xc8,0x38,0x3f,0xaa,0x26,0x7e,0x6c, 0xda,0x89,0xdd,0xcc,0x61,0xa5,0xa8,0xda,0xa7,0xb9,0xd7,0x1e,0xa4,0xa3,0xcd,0x25, 0x54,0x7f,0xd2,0xbc,0xb1,0x9d,0x65,0x29,0x4d,0x62,0x6d,0xdc,0x9b,0x0,0x70,0xca, 0x3b,0x69,0x43,0xef,0xf4,0x77,0xff,0xe4,0xcd,0x42,0x2e,0x7e,0x2b,0x62,0xe3,0x6, 0x3c,0xde,0x7c,0x4,0xcf,0x1,0xc7,0x82,0xa0,0x93,0xe7,0xd3,0x82,0x66,0x76,0xc5, 0x4b,0x80,0xf4,0x9e,0xf9,0x4c,0x2d,0x3,0xd2,0xe7,0x59,0xa5,0xc1,0x48,0x43,0x2e, 0x16,0xc,0xf8,0x1,0x21,0xb3,0x9f,0x65,0x31,0x5d,0x95,0xcc,0x95,0xac,0xb1,0x32, 0xf3,0x99,0x0,0x65,0x6b,0xee,0x97,0x90,0x16,0x89,0x62,0x4,0x90,0xd4,0xda,0xb8, 0x73,0xea,0x3b,0xff,0x1,0x89,0xee,0x18,0xbf,0xd9,0x12,0x2a,0xb5,0x0,0x0,0x0, 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, // /home/family/Development/ifpgui/images/view_top_bottom.png 0x0,0x0,0x1,0xfe, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61, 0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd, 0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0, 0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7, 0xd4,0x7,0x18,0xf,0x22,0x39,0x91,0x1d,0xde,0xec,0x0,0x0,0x1,0x8b,0x49,0x44, 0x41,0x54,0x78,0xda,0xa5,0x92,0xcb,0x6a,0x54,0x41,0x10,0x86,0xbf,0x73,0xa6,0x67, 0x22,0xe3,0x75,0x88,0x66,0x17,0x18,0xc8,0xce,0xad,0x2b,0x17,0xbe,0x82,0x4b,0x9f, 0xca,0x6d,0xc0,0xb5,0xeb,0x6c,0xdc,0xb9,0xf,0x8,0x82,0xf,0x20,0x1,0x41,0x83, 0x18,0xf0,0x82,0x3a,0xe4,0x5c,0xba,0xbb,0x2e,0x2e,0x7a,0x2e,0x67,0x6,0xd1,0x88, 0x5,0x45,0xfd,0xd5,0xcd,0xd7,0x5d,0x5d,0xd5,0xd5,0xa3,0x67,0x9f,0x1e,0x5c,0xdf, 0x1b,0xed,0xbb,0x18,0xb9,0x57,0x52,0xaf,0xa4,0x4e,0x4a,0x8c,0x4a,0x6c,0x33,0x29, 0x6e,0xaf,0x4b,0x54,0x34,0x75,0x68,0xff,0xe3,0x5b,0xb8,0x73,0x63,0x7c,0x72,0xb8, 0x3f,0x9d,0xe7,0xe8,0x74,0x9d,0xd3,0x77,0x46,0xd7,0x38,0x6d,0x6b,0x74,0xad,0xd3, 0x56,0x46,0x5d,0x19,0x66,0x4e,0xca,0x86,0xd5,0x8e,0x5,0xc3,0x3d,0x42,0x3c,0x7b, 0x1f,0x66,0xd3,0xc9,0xfc,0x70,0x36,0xa5,0xef,0xa1,0x99,0x40,0x37,0x81,0x66,0x4, 0x4d,0x28,0x71,0x5c,0x41,0xa8,0xa0,0x76,0x40,0x1,0x3,0x9d,0x0,0x9a,0xe9,0xe3, 0xc5,0x3c,0x1c,0xdd,0x72,0x1e,0x1f,0x81,0x29,0x88,0x82,0x2a,0xa8,0x6c,0x74,0x96, 0x65,0x2e,0x90,0xb2,0x23,0xe2,0x98,0x3a,0x2a,0xc6,0xf3,0x17,0x35,0x61,0x76,0xd, 0xee,0xdf,0xe5,0xaf,0x66,0xe6,0x98,0x19,0xaa,0x25,0x8a,0x18,0xa7,0xaf,0x2b,0x6a, 0xdc,0xaf,0x8,0xfb,0x1a,0xde,0x68,0xa7,0x76,0xf3,0x2b,0xc1,0x5,0x5c,0xc1,0x86, 0x6a,0xc9,0xff,0x78,0x80,0xbb,0xf,0xe,0xd8,0x75,0xc3,0xdd,0x9,0xe7,0x5f,0x3a, 0x8e,0x5f,0x7e,0xe0,0x5f,0xad,0xc6,0xf9,0xbc,0xc8,0x84,0x83,0xdb,0x13,0x9e,0x3c, 0x3c,0xf8,0xcd,0xcd,0x25,0xae,0xdd,0x1c,0x73,0xc7,0x1d,0xdc,0x1c,0x34,0xf3,0xe6, 0xd5,0x88,0x30,0xae,0xe1,0xde,0xcd,0xf1,0x16,0xbc,0x6a,0x50,0xe9,0xba,0x61,0xc6, 0xf2,0xed,0x94,0x35,0x9c,0xac,0xcb,0x27,0xc,0xa7,0x30,0x84,0xb,0xb8,0xab,0x6d, 0xb0,0x5f,0xaa,0x59,0x37,0x71,0xf7,0xe6,0xed,0xa,0xb6,0x61,0x33,0x63,0xc5,0x85, 0xef,0x97,0x99,0x77,0x17,0xd,0xa6,0xe5,0x73,0xa8,0x1a,0xa6,0x8a,0x2e,0xb5,0x8a, 0x6e,0xc6,0x36,0xe8,0x85,0x8a,0xf1,0xf3,0x32,0x13,0x4e,0xdf,0x2e,0x9e,0x9e,0x9d, 0x2f,0x90,0x24,0x48,0x14,0x24,0xe5,0xa2,0x93,0xa0,0x49,0xc8,0xb1,0xe4,0x2a,0xa, 0x3b,0x13,0xff,0xf8,0x35,0xf2,0xdf,0xf6,0xb,0x70,0x47,0xce,0x24,0x4d,0xf0,0x28, 0x95,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, }; static const unsigned char qt_resource_name[] = { // images 0x0,0x6, 0x7,0x3,0x7d,0xc3, 0x0,0x69, 0x0,0x6d,0x0,0x61,0x0,0x67,0x0,0x65,0x0,0x73, // battery3.png 0x0,0xc, 0x4,0xd7,0x22,0xc7, 0x0,0x62, 0x0,0x61,0x0,0x74,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x79,0x0,0x33,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // multimedia.png 0x0,0xe, 0x2,0x86,0x4d,0x7, 0x0,0x6d, 0x0,0x75,0x0,0x6c,0x0,0x74,0x0,0x69,0x0,0x6d,0x0,0x65,0x0,0x64,0x0,0x69,0x0,0x61,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // format_s.png 0x0,0xc, 0x7,0xcb,0x70,0x47, 0x0,0x66, 0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x61,0x0,0x74,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // editdelete_s.png 0x0,0x10, 0xe,0x38,0xe2,0x27, 0x0,0x65, 0x0,0x64,0x0,0x69,0x0,0x74,0x0,0x64,0x0,0x65,0x0,0x6c,0x0,0x65,0x0,0x74,0x0,0x65,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // reload.png 0x0,0xa, 0x5,0x78,0x4f,0x27, 0x0,0x72, 0x0,0x65,0x0,0x6c,0x0,0x6f,0x0,0x61,0x0,0x64,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // folder.png 0x0,0xa, 0xa,0xc8,0xfb,0x7, 0x0,0x66, 0x0,0x6f,0x0,0x6c,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // playlist.png 0x0,0xc, 0xe,0x42,0x77,0x27, 0x0,0x70, 0x0,0x6c,0x0,0x61,0x0,0x79,0x0,0x6c,0x0,0x69,0x0,0x73,0x0,0x74,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // music.png 0x0,0x9, 0x9,0xf6,0xbe,0xc7, 0x0,0x6d, 0x0,0x75,0x0,0x73,0x0,0x69,0x0,0x63,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // battery2.png 0x0,0xc, 0x4,0xd4,0x22,0xc7, 0x0,0x62, 0x0,0x61,0x0,0x74,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x79,0x0,0x32,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // delete.png 0x0,0xa, 0xc,0xad,0xf,0x7, 0x0,0x64, 0x0,0x65,0x0,0x6c,0x0,0x65,0x0,0x74,0x0,0x65,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // download_s.png 0x0,0xe, 0x7,0xb0,0x27,0x67, 0x0,0x64, 0x0,0x6f,0x0,0x77,0x0,0x6e,0x0,0x6c,0x0,0x6f,0x0,0x61,0x0,0x64,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // folder-locked.png 0x0,0x11, 0x8,0xa2,0xb6,0xa7, 0x0,0x66, 0x0,0x6f,0x0,0x6c,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x2d,0x0,0x6c,0x0,0x6f,0x0,0x63,0x0,0x6b,0x0,0x65,0x0,0x64,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // upload_s.png 0x0,0xc, 0x9,0xec,0x3d,0xa7, 0x0,0x75, 0x0,0x70,0x0,0x6c,0x0,0x6f,0x0,0x61,0x0,0x64,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // rename.png 0x0,0xa, 0x8,0x3b,0x4f,0xc7, 0x0,0x72, 0x0,0x65,0x0,0x6e,0x0,0x61,0x0,0x6d,0x0,0x65,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // battery1.png 0x0,0xc, 0x4,0xd5,0x22,0xc7, 0x0,0x62, 0x0,0x61,0x0,0x74,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x79,0x0,0x31,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // view_left_right.png 0x0,0x13, 0x9,0xb0,0xdd,0xe7, 0x0,0x76, 0x0,0x69,0x0,0x65,0x0,0x77,0x0,0x5f,0x0,0x6c,0x0,0x65,0x0,0x66,0x0,0x74,0x0,0x5f,0x0,0x72,0x0,0x69,0x0,0x67,0x0,0x68,0x0,0x74,0x0,0x2e,0x0,0x70, 0x0,0x6e,0x0,0x67, // updirectory.png 0x0,0xf, 0x0,0x8c,0xd3,0x87, 0x0,0x75, 0x0,0x70,0x0,0x64,0x0,0x69,0x0,0x72,0x0,0x65,0x0,0x63,0x0,0x74,0x0,0x6f,0x0,0x72,0x0,0x79,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // reload_s.png 0x0,0xc, 0x9,0x7e,0x3d,0xa7, 0x0,0x72, 0x0,0x65,0x0,0x6c,0x0,0x6f,0x0,0x61,0x0,0x64,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // audio.png 0x0,0x9, 0xb,0x2,0x86,0x27, 0x0,0x61, 0x0,0x75,0x0,0x64,0x0,0x69,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // fileclose_s.png 0x0,0xf, 0xe,0x13,0x8e,0x67, 0x0,0x66, 0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x63,0x0,0x6c,0x0,0x6f,0x0,0x73,0x0,0x65,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // file.png 0x0,0x8, 0x0,0x28,0x5a,0xe7, 0x0,0x66, 0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // radio_s.png 0x0,0xb, 0x5,0x96,0xa1,0x47, 0x0,0x72, 0x0,0x61,0x0,0x64,0x0,0x69,0x0,0x6f,0x0,0x5f,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // battery4.png 0x0,0xc, 0x4,0xd6,0x22,0xc7, 0x0,0x62, 0x0,0x61,0x0,0x74,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x79,0x0,0x34,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // folder-open.png 0x0,0xf, 0x4,0x18,0x42,0x7, 0x0,0x66, 0x0,0x6f,0x0,0x6c,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x2d,0x0,0x6f,0x0,0x70,0x0,0x65,0x0,0x6e,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // newfolder.png 0x0,0xd, 0x3,0x5e,0xfa,0xc7, 0x0,0x6e, 0x0,0x65,0x0,0x77,0x0,0x66,0x0,0x6f,0x0,0x6c,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // battery0.png 0x0,0xc, 0x4,0xd2,0x22,0xc7, 0x0,0x62, 0x0,0x61,0x0,0x74,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x79,0x0,0x30,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // properties.png 0x0,0xe, 0xd,0xb,0xd9,0xe7, 0x0,0x70, 0x0,0x72,0x0,0x6f,0x0,0x70,0x0,0x65,0x0,0x72,0x0,0x74,0x0,0x69,0x0,0x65,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // view_top_bottom.png 0x0,0x13, 0x4,0xe8,0x23,0x7, 0x0,0x76, 0x0,0x69,0x0,0x65,0x0,0x77,0x0,0x5f,0x0,0x74,0x0,0x6f,0x0,0x70,0x0,0x5f,0x0,0x62,0x0,0x6f,0x0,0x74,0x0,0x74,0x0,0x6f,0x0,0x6d,0x0,0x2e,0x0,0x70, 0x0,0x6e,0x0,0x67, }; static const unsigned char qt_resource_struct[] = { // : 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, // :/images 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x2, // :/images/file.png 0x0,0x0,0x2,0x82,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x7c,0x24, // :/images/updirectory.png 0x0,0x0,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x68,0x84, // :/images/multimedia.png 0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x9,0x39, // :/images/newfolder.png 0x0,0x0,0x2,0xf6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x94,0x13, // :/images/folder-open.png 0x0,0x0,0x2,0xd2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x8f,0xb0, // :/images/battery0.png 0x0,0x0,0x3,0x16,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x96,0xa0, // :/images/battery2.png 0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x3c,0xec, // :/images/battery1.png 0x0,0x0,0x1,0xba,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x5d,0x92, // :/images/battery4.png 0x0,0x0,0x2,0xb4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x86,0xcb, // :/images/battery3.png 0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, // :/images/view_top_bottom.png 0x0,0x0,0x3,0x56,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xa2,0x5c, // :/images/reload.png 0x0,0x0,0x0,0x96,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x24,0x78, // :/images/radio_s.png 0x0,0x0,0x2,0x98,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x7f,0x1c, // :/images/download_s.png 0x0,0x0,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x49,0x8c, // :/images/format_s.png 0x0,0x0,0x0,0x52,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1b,0x6c, // :/images/rename.png 0x0,0x0,0x1,0xa0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x5b,0x87, // :/images/folder-locked.png 0x0,0x0,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x4f,0xf7, // :/images/reload_s.png 0x0,0x0,0x2,0x28,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x6a,0xd1, // :/images/view_left_right.png 0x0,0x0,0x1,0xd8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x66,0x76, // :/images/upload_s.png 0x0,0x0,0x1,0x82,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x55,0x5, // :/images/music.png 0x0,0x0,0x0,0xe8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2f,0x4f, // :/images/folder.png 0x0,0x0,0x0,0xb0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x28,0xa, // :/images/audio.png 0x0,0x0,0x2,0x46,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x70,0x1f, // :/images/delete.png 0x0,0x0,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x46,0xc, // :/images/properties.png 0x0,0x0,0x3,0x34,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x9f,0x6e, // :/images/fileclose_s.png 0x0,0x0,0x2,0x5e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x75,0x7c, // :/images/editdelete_s.png 0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x20,0x88, // :/images/playlist.png 0x0,0x0,0x0,0xca,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2a,0x93, }; QT_BEGIN_NAMESPACE extern Q_CORE_EXPORT bool qRegisterResourceData (int, const unsigned char *, const unsigned char *, const unsigned char *); extern Q_CORE_EXPORT bool qUnregisterResourceData (int, const unsigned char *, const unsigned char *, const unsigned char *); QT_END_NAMESPACE int QT_MANGLE_NAMESPACE(qInitResources_ifpgui)() { QT_PREPEND_NAMESPACE(qRegisterResourceData) (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); return 1; } Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_ifpgui)) int QT_MANGLE_NAMESPACE(qCleanupResources_ifpgui)() { QT_PREPEND_NAMESPACE(qUnregisterResourceData) (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); return 1; } Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_ifpgui)) ifpgui-1.0.0/docs/000755 001750 000144 00000000000 11342137657 012130 5ustar00000000 000000 ifpgui-1.0.0/docs/iRiver.pdf000600 001750 000144 00000777432 11342137657 014077 0ustar00000000 000000 %PDF-1.4 %âãÏÓ 6 0 obj <> stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj [/Indexed /DeviceRGB 255 6 0 R] endobj 4 0 obj <> stream 8;Z\7gC;%C$tTA=qNYJs$EmCi7onR`#?M"0Y.-%%b\B4,:CcBDq]4nP\6mNM4D=:E%B/ZQ7L'> /p(5Wl0S1/l@,71NTg+HU8A^(&?`1KP/Rm#!OQg%[qEW.KWAs`am6'TXt@/(EfgHg /VnREjmq0<+LSUG9Ic?*hO;('G\9R1QF>0+KW_j":6T=u2f)aEhO#io`:u;L279ne .Tsd[e"Z'LE[Rd#j(.p-*4(]q,$9$.O.GlSgol0m2<0,b%KM\R]\E~> endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 11 0 obj <> stream H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= €x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(ЇR¡,¨*T2B-Ð ¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 N'çÎ)Î].ÂuæJ¸rî î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 10 0 obj [/ICCBased 11 0 R] endobj 13 0 obj <> stream H‰TRËNÃ0¼û+öXÄÁy8)‘¬\ H=ð)‘ˆc9é¡Ï®Š8Ä;ïxVãÈÝþ~ï†äk˜ìèל§s°G< òºÁ.ë.®v4$‰—yÁqïú ´òç%\`óXÜf7 _B‡ap'ؼçŸDÎÞãˆn Ú:ì…Ü=ÿlFɲ?îýâЏÏWã©ÃÙ‹Á¸‚.²ôÖ´€®û&ê¤8ööË‘:³ŒŠÐ*˜ŠÐÕ]ÄT„®_3_Û„w„·Ûˆ©òYol~ïOvºdƒ²‰et) «:Y•L°•JŠý{Ti0ÅFKª*MÄ’Z®“„0ÈDŸˆž­àT°`¢Y#a¢Y'N3rHür×¼í9zŠø¼1qÎzpxýüä9ZþÄRÓœˆ endstream endobj 14 0 obj <> endobj 16 0 obj <> stream H‰¤U_lEŸ½»a\Òƒ»Ô^Ý»h5¢Dk)•¶@)WB©4®ôÊ[©r'¤±R_¼G‰ &¾¨IŤFcŒIÛR*Š(GSj©4…Ø’bŒ)‘DzÇÌò-ÆovïZúâƒffvç›ïû~fV!QEߺ±¾¶¦ê‰Xk{[ë!ùÅAEä{Dá’À«¼k™)•«KyqÞ»…춸eÅ3Mv‡Ÿ.++ ok~-¼¥¹½¹%Þ‡Û8ÓuûÛlŽxêŶƒÙÄDÁ‡äiäaBŠÜäq…<é!ϺH!U„lTI![²ÝEvSÈ ìŽ‡H=y…|HFIF +MJ‡2êZêZëjv½áúÄuÖ5åºå&î•î­î·Ü'ÝzTÏcž=ž÷<ƒªO-Qê›êûêgê9J¨AwÐ#´›ŽSNÄb3e-¾—¢R~³Ž»Wǘ?ëÃæ"®ùy† 5 n6 M774lA†Uôì›0xšNôôL„@ @šgx2T‡:áp 4‘€$hÜ ðâ˜fúˆ¹W¬8÷âÛHÿàHˆSvyÏ7 +aÇ{±B$Ö ARL1Ý\‚Åo°/;>m=atŸèüü«‚N'¹ø…£Óγš'ý\[ϱl"#¦– q'aúofžÄåe£ßÖ".îqìlÊÊe;uj,„¡¾lèŽ\hCtScã&IEÍéØ%IÅ•“__ WRøÀKõMU$üv^MD˜±*/¡¢R$Ô'iŽ"ÍŬ¥ó@÷£õHGÛþ‚bÉùÕû8Gˆs¥ é™/;djŽhÛ Ô¤jïÞ*ìŒm9»#eðÌÀáál¢ nÎÈÍ)“D‚}ÿüOÛd#‘&TÃJHÚ0yi¬2_XIM£<#¢rd "¢Ô𳕰¦rB-°Í!qBºÆÎ;?Zq 3¹j+zÿw§'¦_Ä”-ôu)4®xq庛éÖ|½,70}‹8n—A™5'5Ù|[ ²$òò:j“Í1My L«üQù´ Óˆ^ÿà 8é|Ì Ÿº^† a˧ŽQýsïõóròB(‡ âSåøäåøñ)7{ÑêÕEE¥“·g''gg]ýˆ¡w ¹Å*U/d1Þœ§ë&¶uSÒÞ#n9®¼ÔxºÆ€!ì¡i)ÈP/‹ô7|¡”¢Ö¥t´¯w4¤Ÿ1Éœ#yRêŠfNÚ¨0]Öû9‰9cœîÁSµÆì@ïå]¼O…U¶A lç-rλ º Wå8Ço×ä\ÿÝôK;Ù]Zqì$nòšX¬Fvi—@? ©´ûLeºfÊVt†ÕFkC @b/in˜AßÌHߤL¿äyæ6ÏP’÷ßK¹kŒ«}éî—b‡ëƒk6 Ž·‡D=ÞùÎG°ì¼îÐñ®Ëƒ×‚×.7¬í éÐÃÏ™>$7Ì"M±HhghƒWc\«:s‡é3f~¥ß\aÅYõ®ÝÕ²½Ú³‘¬JØ…XvIŮʣõÏ[<ËÅľžryT€vï¨-@“#jk¯¶(-…ÎÕðÕ< ^ŒÂ×~Áçv[µÒ¸óгóÿ˜î1é˜ÎÉ\šÍüÂøï>ƒ3ücyÎðRAMå¸Ñæe-…yÅò»;Å”ò)”X•/*Õb â´§øÝ9¥ræî{ŽUÿB˜Ù«†CÒŽÇ4úB“÷Ryb¥zÞ¾‚ñÈú¬•j½ýoyn¹˜õÿ#ÀY–  endstream endobj 15 0 obj <> endobj 12 0 obj <> endobj 19 0 obj <> stream H‰ŒUyPgïž¡{†k€ùèQg´§âÁå… (  È*.+*"×€cQ@ðЏJJ ”]ݰ¸ !bðXqÐ&ãA¯¸x¡€ë®&¢)Áõõø‘­í!¦*µmU×û®÷ûú½ß{¿úHÂAF$©Y07ú7Q1~s Ö™rñ¦ÜUEö½¨#Eƒ8ÖEƒýñ§o·¼õ¦ Ô ê<ø±£ª I~~ìóÚv7)k27-4$Ä_²¡SGl™mÎ4r‹7×róó³ÌkÍEÆì@Ž‹ÌËã’ìØB.ÉXh,(–v ƒ3r\QAF¶qMFÁ‡œ9‡‹7囋6®5Ä%`ä<.#?{ŠYò”ð…ë3 MÙ¦Œ“±0ðR!H){¶JO‚%n,N5†0„™ $—‚øˆ vD'A¤J¼„‚˜F%§‘d·ÌY!Û*;&»(ë”=’`Ü/&Š)f*˜c%VI_JyoŸx¼¼D =:‰B©-‘™E>NµÓhß\<‡ééE«Àl‹ºnÈ[Ü2œù=GÂMý˜)ÐÐyØLý¼²øÑ(¾ü©AifßI9Åš_/èä74ê[ý),O¢a¹…‘ì(é2ÕôGóÉñ%¿óººOlÐèži]}δL‘•ž´™M‘YT›öõeíß.ÖµdQ"¨â“6GÅùjýž¤§EfØg Ä‚”G¤ÁGÏ;àÄtœŒ xÂ)œËaù)È‘5¤C2NÔ«ª‹Åªp¾g×Ï Ý7ÑÊœI£ÐI ^R?‚-1A¡*çŇ…öl¯¯/;£ƒm÷!$Zš!$fãvÛðhÆ7¥ãÕ÷­·^ 6Íœ²0~¢~DUðC¯úEJ‡yb%3ËÐC£êYÃáÌ;™‰á#²ûµ>oŠá#~’ÈÁI€ÑÙ(VH*ïbÄ a¸‚Æ5?OT|y¯håÕ×e}% gOl2æðùó‡-º.KZ¤¥à8tŽÓnµQH·½ÿ'•Úxzëx¥/[ºí£T=ª~þSä»j¸”ï硞OçàÕ 7úºÅ°¨ŽÂy\žö];}¡$&${úf˜¿éØÍ ìaâiäU¼€B½–¢Ìš:¬Ÿ‚ßÚжy÷;OÕžü³Äcæg'J.èzÁkÞ‡¥ÿ%¼J£¢¸Ò(¦^‰ÁV»¬V鱋qP5F”¢‰‚ Bdèà–QÜ·¨ƒtÔ&C‚¸lˆ¸`T\p‹Dq#ãÁ£­hALÑ”A¢QD‡È¸|Õ|íœù ãI~Ì9}Nz¯^½ûݾﻷ0ú1F`v nƒÑÐc Z£oùÓ2)ŽEí? 93¾‰á ]ß$}Z‚ñUl¶bõ–œÏ³r7ì `§g“U±B·Õ-ê·š.Ó‘¶qð˜]Cw…á!w÷ƒ?{ÞñƒþªÈQ7ý2¤ËÆë 8”Ex|݃^Ðé4ô¿k»8x;y!¹~Gá¹Û~à癇0Å£K™ð¸ùéGØ õ="˜C½&62!ùRÃÊÞ¨ï›%:‡·½¦QÑ7Ò>Í î`3×ÈÛžùp—d»}8Ç3ÂheÂ1ÜäiÁj 築C[©6Ý'Ï«VÔ—a2Õ„DµÉÁC³§‰kÐ vxZÒyZÜÆ>)JçTÔ$Eï„f8a˜b†) ,pHï°BÎ5ã\+†a<Èà!ô*e +ZÃ銡áð XÁz•.¡’A&ÞÏËð…& ÈÔÔ¡Àùû :ÿû0A· ì*aSHZÞìÖ™‰ƒÑ˜ò')á·Ü4‰„§'´/*…Îíþ{<Ï1ïÚ¹>+W‚NØ‘Ã÷îÿƒñ¹2I$ÿ ’%k¼‘†¬ï€Ä!Òåé.’^JXÅ¡uA'¥‡ø1÷×!oéé”Cc³»;øú-Šü£tr;Y0šÎD+ú%yÆ‹ % ¡ZÎÛ’-xA‡ ðG ¦cÕzð÷û±æÐ•ÓÅ©ËóÉ{¶¸8¡:7aEZì8½% U˱‡Ÿ5rÚk­Ù¢Qªy!$ÔDR…fÊž¥6˜ÙÖH«ºŠêM6_×*ÖI YìÔ;ÄÖ³¨“hˆÇ™Ðobs3ô;ôJžAê²ë6¨÷õj3­Åpå3\J*Á`ë³8î*ir}Æ÷ê -Kmj$kJÆ0ŒxæÅ¥3Œt{q¡ GµÝ…Ñ]$ƒÉ´ò_L8ÑtOêI³µìùÉVïé³M5 A%ÌÇJ®Ža¶ª‡¨ã†1œ„ø(à†0øë¸çË`/•¾—”TÌ GíM¹šòè=œ÷¸¡4âéÍi-Ikh»ÕñúÝ&u¼ìiÏà¿ê5Ê a6Þã幯iùÕ¿È]X¤S\z…â8„YÝ…MEÂ~ƒÞÖçPîÆ„¦g…Ö Y;ŸÑe¨ëôaÞÕugxú»3¾‚¿:!Èi<©Àf—P,|¨¶3•±5ù…~°”‡îJÐ85fEòlKèô™œsæ›ùÓ‚¥E)áâ+.dðÖé’͹§,Xź’††{G²üéca²&9?ÙlƒKhƒÉ¥NÞ‰ü)VšÚPŸ»smÚV‹Ð-ë<'ÌËNIÊ´›±ëZôò—æŒÿoÀDgÒqªƒ¾šáü¹âhÿküÑ ì8`&%mæ?ëáOÁ¨j%RÆ)ˆOçK'OÛ4ê9#ÜYì ¯}aÿU X‰í1dÜØí»f[„È5±œ°fÕþÒäËfˆ('Ö{¶~ëÌÓ¨ÖÕ¸`ŸK_crÁ~vûÄð~´cø` –¸à"ƹw°Gؘc“,­jhõ<5ÛëŒ5®®´JÍ&<]$ƾîÒæ©,wð/¼ï‰é›s×0ßÍ+«•ÔšXO%?aÍÔÑ)Ë33S-Â@ÖÒ¾m¥Öû/.ƒevتjE´Ág¸ûá—pŒÌnLÆ9œ:>–oóßÔ_v§<µ‡V—Æ'••®ýºüA(vj‚G|Sü•€¡¶ÛK:»½"|çT3ꎞg—Ò×sÂú8>kfƬÙ~?ð¥…o.)7Œ‰°à]mäÅ{ÞðÂ6û\Â?5°ìæÑÿ‘^m!Q„Q¸qwfÌj ÇõavL…ˆˆjIÍ *CkÛØˆ.ÒCv{ØŒL³–6ÊtMj[·Xéºt£,íæƒb$kIØBò’ô`áç·3Tgv±,¨—þ‡3óÿÿ¹üç;ß9A|ÓTdµ`8 "è׾ƔôÇúrÒ)Ù‡Fub¨áúCÝzS”{hÞ°­‡:äŠ6´-ÀT”-‘4Hz8 ðp*=k’}*Á*Á> I®(§dyš-qlöà&cî Û·½øÙ8ncÞö½4fIÙ¾w<=Ý:Æaàw€ßÖ4 ð± â9:(e° èðàœZñŒgcŽûš/Ú¯w7ÊGð^XP9VòXÆqäì¦HJ-ŒÇ(Þ^ý‡S§kk,ÝâÑý•GÝæ¥V9Ê4»íï Eߦºò•&ÃêX‰5[°”X³)h¬l½{讹ïãM ÐsÑç6=i=÷¤¹õ€û:Q¦Ÿ°ØwºØé/5϶•dʘ µgq’iŪmË׬o8[BÑ¥3&R!@n’;S„Â]<&g9?à}qš/ôÿIK;ªroõNóê=·Údx‰b¼ˆm©M ¶C‹6 ³6g¢8sëã¨ÂTÑDԷφ”/·:ÛBTº¥%Ó‰5-uwn›¨Å‹°¢ î8M¯LÒˆ4³Õ"&ÓY¿H€ùj½F°0D#D°õ#Ǥ›#ÁØ›`z|¯™öΣ©1.™â'çÐÉ^`e’‰`eúÛë¶ Ó\€åëi=Í?¥`ÂR¾ŸèÎà ¨â ˜Œœm‚™…U¼ÁGzÌÐ~ÒM÷¨ ûŠù‚ŠÊb§¹ÌãóyäCN¾:tÁ{ÞüìÆÓ§¨a¯xr(KÍå“â:…e*Ü56Yw-MV°K€.¢hEÕ;¡]Ä.5‹7°2p‘“L6™ LË$Ù¥œ †Â!ä¡‹.H^ê\?ECT+1Æ…j=ó*ªWû´>q½ðIGËhíÏFú£Ñœ«57Çjù‹/å@™±Sè5R=èú)RbÈà: _×Á"Æ6R ƒÏ¡:Ô3à«[3à«[ùæ~P d]¾„üKiøÿhHJÅ5pqŒbOpdY×awP€«õŸ*ó‹c>&Âÿ—€ú-8ÞZ|âà÷‰ã•¤ðÖ‘Ê ?vå endstream endobj 18 0 obj <> endobj 17 0 obj <> endobj 21 0 obj <> stream H‰T‘Ínƒ0„ï~Š=¦êÁƤ4H‡ÒFÊ¡?*i¤HÅX†xû®1MÕ0þì™c^®›€¿…Á48AÛ9p.Á œðÜ9È$ØÎLëjy›^{àdnæqÂþàÚ”bü6Ç)̰ÙïnÅ ð×`1tî ›cöñI ¹xÿ=º TXl¯ŸµÑ=¶?vœ=‚\ÖÙ:x°8zm0hwFPRT °¬ý¿Ç¶ÉqjÍ—LÉ‚N A¦òvÑùžt¤ÈJÒ1ˆøiÊ[ÅoNŠM#e–Ò¹ä.‚d%MÀÎu5m<}—Nfªˆ H XÀ‰ô}²ëø40þY¬ûZ’¹„@ý-w²Ô ê^¯Í>öö#À4Ž endstream endobj 22 0 obj <> endobj 24 0 obj <> stream H‰|TkPWîv˜:ÈŒ-Úƒ=³ã*‚ÔUcŒE2«øÄ¢.ifz˜1à ™Ž¥Ù­X$nˆÆHJëÛ$ ¨Œ  ]âZh”]w ㊥^ƒž&—TííA·öGj««úÞ¾÷œï|ßwÏmšŠ@Ñ4ÍeÎ0Ïž9Ö‚,‘l¢Eò*ë‡!’¹èñ n›tû=‚S$%ɶÃå#£Ã+X^Š Áý2&O ËHMÒRRÆ' ArJž"’aöø-ï‹Þ01—>s\X§_ç¥ !ËN°Ã4ɨp#ŒJ$/¨0ùÿˆI‚èR´—Û'*òûeJÖ$ÁïUÞV‡·Ä)•i±Ûê°9^,Zœn²/c|ÑåµIù,uøìĹ0 iU !éJ=ʹ»±D±Jt*´æ:HAb!™zDOP˜Y\˜1îWz„¢IP5HK 5rõV$57–ZKQW)jij¥¢^£NR×h5ý:=›^A;é2ú}@ò€OœS *·ê³ˆ¸1bmÄuµVíUw2©L6³Šy¬IФi 5Û4!Í¿#ã#wD>ŒZõ]´9ZŒÞÝ£‰y+Æsmàk=¯2 š9èŽvˆ6EkÕ~ ý>6>öÓØgƒ— þhðý86nAܪ¸ÓqÏu©ºlKwM«Å'ËQ‡|¨¼Tw†` ÒWé<3ÛÈÔʇÔx£_¿í—\!£}XÖ57ÐÙ¥«íz¯ „.ý1½ åV6tà`]ݧ­(P<ËÃ;+ý‡«8¸Ù×ÊÂ@„Wëê«ÛöœžR³¦ huÙ†ã$˜£þ¡îpÓ·ÜÝ97ÇŽ3}bÎ9‡­¼þØ„ü?¼1‰ÃQ÷LÀݼtøÄy~Á 6?wip…Á<¿åFÃÁ†ëµF­|Ì&¤kGúýžvù‹:ÔȤÑâ/{sKé6¤‚-&6tE&L5Ð:ÞÂŒÄQÙ8àðˆ&œÜƒ£ø9‰T»{sÙ6¬«Á ØÄaSNÈÄ:¾Žé¨&H†ŒÈ†ä‘@’ÊÝŽTíéÿ-ü º šUM`¡áfæeÐаyص=Ðk/¥+àšª¢Œ½ÅÀº^»z£5—!y¢"È%¼ïƒÈΰX23-uí<´hÚëêÚÚê,3xÜ‚/°8þazOÏÈçáŠâ;FŽLLÇñ¼Ö¼'–‘M0²‡¢Þ\3*])Í“µÖ\Žä-ˆ®FTÕCåD„¿` uê¡mÇNq N»‡c„Ô4ù˜K›NÔ¶.„–-|è÷»ø ~¢VxB  :P2Òß3Ü`3m ¢ù÷Ë -tUŸYe418f×?çt`Ѓ»0윷-ó¨QÿäüÑ-ÍÜO“aý¨ F­#UÎm9QyÜÐz*áB±`¦ÑNœ(‡ü±ÝòæR\Dú’­ÏXh`ô¡WF_ò¬µ{ˆ&,âù(“7«1Ãà÷û6÷ó:Ž@‹è†nXŠT ÐÉv3Ç÷Wý¥Öðý®…od”Oüí"GuãŸn÷?Yú£áo͵¡*ãÁÚm¡D¯>b­ç+ßÍݿİ¢è%#L„Ô« C“Nÿº”®AD¸ê¯p‡ ½_(r˜{4ùѳŸ.Ã$à§¶¥®ö¯/[Ãÿ™DhV˜­íӱߜ´Mý]Ö;¹ó,¡ÎΓ¡oŒÊÉÏ݈Tò',z \Ö÷\ C$=W£¾1šÿ±yJSª¦!ýSýCàå-앆#gÏ6Ø32–Û—.]~ä ¯Š5ø<‹uÆC4D?úè®·.©áõëV¸È†œ¬kÒR°f^ÕŠz‰¤,)*^”Á¡ÙËͧ/\hΙ={IÎüùKN_w|Ýï¡‚割ŽÝYóÙ±z¸ÑwF¿òêl< ó™];önüt;¿Á‰¸Yð9 \œêü¡¥úÔÅ:ÛÔ©y¶ÅFr ®ÿš¶Ciø'¢ßƒÿ¾ãÃM©«BGÉ3d2L#ÔÊ|¹qçç»ø{§Þ]¹õ©•|cô¨ñ“¾i:ë«jO9²ëü«}|¬ö;?|×Êé7á²~ÔóDÁøn9¯”þXîQAT°Oá’zó_RßÅ,኷öæªSÉðK®B½Æ«aI%lWvCA·îP°¨D ô=7†BóüÞmˆ½.uLÛiÜ ÑËwB{[Ïsñömläq_õ ¬¾§³fÙâÅE˦ñë°’hbõò­PnÖb[Þ4#NF»© (yPt#P*yä°sŠóVf–ÙöWúîšu»a£*vWÖð•{Cû Ws²v•‰ô{€ ñæ¬y£O\ÀÓ9<½"°OäçþnD@ûø: ¯4jow7!ZQrŒT"*>`žuœý¶ÞXÝPQ 8³þ+{+ïÍúdÞÀebeÎÕ¬É?d¬²ntâ!¶¾Ô[ĺ ó ˜%ì‰ER7¬P9áÇ Á™n|VÀcÔ—Ãh×’#híÛË B¡µ?Âö"â<1 øéUřŇî11;Šcc9mu+¥x Qc¢ 5Ñ]u ‡‚8\0ž lT—UNYd‘K¹•#H¢•H¢A³Ö*Ç5;q××î7[µ¯{< ±²¤fªúë™÷}ß{¿÷~àÍ(—¡‰éÛè÷V¯u–Ðà~=v`Ÿ©Ka¤: gÅW%T[?GÁ ¶ÈÉBf{˜lÎáöb›5Æ9nã0À]ñay³Æ7ñ8Ë„v¹àb JšD2ÐÂÁµ9Bìàˆ¸-ùD˜eÊ`zÏ£D륶Ëýçck‚s4„ NÒ•¤›8 ‹p af'”M4.›AxÛ8¾D̪VU<À]O0+|ÐHl–m4xqwÝ©ò¼SYíìíŠ}>¼'™ª ²n‹yU뮕@u×äÖ`å…IÖ.Ývœ®®++¾Â¡NJ}¢ÉÁ7Màcße‚-Ò]¶&ZÕÚ®©lÙ}žíl.;SΗÕ«5ŒK¨Š¬åÎDø•­e½vë‚yÈž®?r1¦»¸º$¹8ÌIì¹>øˆWNÁÖä¦IVŠ}ÌbÂwéöú³‹6·À(·¶Üo¬Ý~ŠïýŠjÛê^·”%oJCÜÉZ 4ðÖ«umŸñoVP ¤†•dÓµÁÅ^ìZ¿Èà>R—FÆ©U­ÄæXX™Ž .oŽìdÏ·×Tò3à?Ì£t§5INs’úûûÒû¼°^YVrÔr+è™A±M¾O¬gùj²‰Áo6=½y£¸ã Ns Ç¡2ˆýÈ»ñ>?h}'¥¹á {å³€¥©e÷Lò{¶&Acê›þ]qüx×a\E»¬×ÎáWz»¶)”z¢3ýˆÐLã?—Œ€§G™>A…œÚʬ¡¼›»Bo°0úé×0—W=¦+TŠúà€|/v•_XÄ>"ø`4™ª&Sþ]ÌE5‡u½0—l_æ^JN^——SRÐÀÖ—DÅäðy{RâÕ‹“ãcöp1ñ;£Ù€yñ|LQr΀Z¬ÃÂ<i™„´ã.ÒÝMõ—š¤ÂC P,¸êâ±Å¨ç’Ñõ´7¥`¬ØµMÄÑEHÞmþ–æJoùs¯x¢tœ=}÷ïÀ’R>òNX›%Òx‘ƒXÌÖ‰sϹ#FÁlÙc™ù_ê{¸fc½ë÷ÙE¼Ð‡³\Á»%ê‰ß “U­·~®-NCoPÞm³a‹?W§Ó•¯`%CødZ5pŽy®%Òšÿ/´êޏÏÛç– j€L†ŒÊõ?«ÅÁ¶%´Ÿío©®(ãÏ6å6Â(5Èbƒš¸ŠHßjÖÅ74<’ÒÆú™ºÿÈ|˜hˆÞÁEÅécCØ}nA]š˜ß£¾‘²”+8Q™[ÃÖTÆFàOîÈ0hÔIk¢0—XBÉ¢õ@ñgLMëÎ4Œ¤ï85Ø §¯ïî=†V»È_ó<y{›W ô u‘Ê.8¸"›¹‘w¼ WñZõiˆq驨ÑûŽ$¢šŒNÆâÚ3üŒFÙ××ìC6j>D6"s_îª1ï {Z+¿(ùË¡˜b®çoTqx艀׮ê!_Ôck£ G9o“<ëã~ãÛíØZ½ýðÒ“ÿëv™¼Så[X¨®),¹q±!:²ž»ÖC5nZWú;ÅÙsÚû›ñC TÍJ÷ëÔZÿ½>ö)lÚÊ!™á»>Ù-“üN^HZr‰^rÞï®ÝLïÚŸUÆÃç=}xWŒ1E ó ¯¢–2D1ä~·ý\~}%&^U´‡H rQ¡jvÓþnƒ¶¾›ƒ‹¸uŠÄY¢à+‡•bÕrÒ(lÜÈbÁ@I}ܲ#0À Ky BIJåh‘œmT  ÒÛlË.p4§aIû7¾¥ÐÒ,‰We Zl ›!’-•%+¤¬ˆ«¸&ȆÅpTd¤=Yd‹Ä•r ñ—yHð“Ãò|&Ò‘Ú~`WüNv»C5ÝÙ^؇hD‚¤ø;}Þy¡øıgHV%(åU¶‚ÒH2iÈ„ûÔ€ÙjRLò=¥ºÁ^ÖQò&¡›AìÀž"júuz¾ öãL§!Êߤzô+’´jY%ïHÌÒ2À'ƒ&º !.MÁ8ÿOÉÿy8ÏrÝä>»ž‡çæôé<¼ß[D~ì0f{¥­ endstream endobj 23 0 obj <> endobj 20 0 obj <> endobj 26 0 obj <> stream H‰TRËnƒ0¼ó{LÕ`I$„Ô&­”Cj’Þ³¤HÅX†ò÷ÝõÒT=`dz;Ö,ñf·ÝÙn‚øÝf´m<ŽÃÅ„ž; ©‚¦3Ó| «éµƒ˜Š÷×qÂ~gÛª*Š?èrœüÏiqŸÜAüæô=Ãâ?‰Ø_œûÆí Ô54ØFñæE»WÝ#Ä¡î<\‚ çt¶6èµ=#T*©¡ZêÐ6ÿï¢R*N­ùÒ>e’ÐU™ ˜6Â+Á+Â…h ÖÂGÁOuD>sÇõo±«7U¥¸pgeg³í†­4Ò+{ "Ïçë@&¢aBù–YQäbÏŠ2%\J a"Nœ€¸”D,Õ „åÅòF‰gw Ü\¼§Y„‡Ä9ëÎâípƒãhù‹~§jZ endstream endobj 27 0 obj <> endobj 29 0 obj <> stream H‰„U PT×¾»{‹À5dwÙ»<„© Qya…ETHäé+" ,"K¡@ÑUœk›`¬M­‰M[’1‰$¡©1‚Jkµ*4h+ƒÖZ’´¾Eÿs÷¿K{–¤yÌt¦sgîùϾÿýŸÿhVËh4¿ìtkvªuʼªÒâʲEŽ*‡‡;“5d"KL>;ÔçLìy“Ê™ÛÛ–={þ½cÇ·”Ùã¡eÂ˦§ø1Z&•Õ¾Ö^go*+µ”×[JÕ5öµåu–ei+,qIIOÇÐ_‚%·¼Ìâ1W×X]fIsÔT;jŠë쎪X˼ÊJ˘D­¥¦¬¶¬¦¾¬4ö;î1ú1:–ñe† f#ËDðL¬†‰c˜é&‰aæ2LªžYÈ1KôL“132“Å|¢Y¤ÒОÒ~¦½­ãt%º¶=À²£\07‹ÛÎá>çY>ŸßÀ¿Â÷òÃB¤ðŽpZpëe}§—àµÈëqܸ9Þï$ïï—¼íýØ'Ú§Áç¼ï8ßí¾'|‰h ÅŸŠçÄAe ÒiâV¹;M®v @rÎѵSEE5±»$ØŠ1¸U8Œ‡¸kü{pˆÃÑ@Ê‹ý†w˜òDÛLB%Â.á vJ.æ‡H‡¡|‚J—vþúwvGù¹ˆ:(¹„rC9¥º´o×Ïã²Qöóíoð¢2G9&‘᳿´T ʇÁÂuÄÇí™f¼ƒ^¡ÚKqñYw£àx³zm“0+æà'ÙŽ¡Ü²á'µàkÜ…šµB¸:,@,_9sõÌÕîk éßÚý†6ã3‹m¨ «_i>@;óCÐÝÚÞ)÷&c\rcÒš$yMÒòÙ9)9)´QX„=z+¯ ¢ò¢ò+ø‡A‚dá\H¥•qÒìZ1C L+1cás´T“0À;!gÁ^xò!^ê s{ÍyAÚRß¶»R^·Û±§öõš×6wè›:Zß}ßO=º þ4ë_¨vÖš5-õMM?úqƒ³~SíæªV}kUó¶haaCö ÔàDíJLÅ ,¤@Ôð}È:nÉCW—d+(°Ùz ú.ïéëËïÉÝWY[Aa†­§òºû.äwgÈ"qy …Úív_ƒþlôâÿïŠX'A” Þ…Ü&Z"·S}–CAqªyœèºD{‚FÓ1È•.¨“ØohÑõ%Z*@¨@„@n«Zõ6*FQaâîý»TgCu¨1ân €Bb"Ñ02á—À>¬ÎÿR>A1HÆÈN4U_\€¿QŸW»‰"! ó*èdÊèm—èÕ‡NÓòì&¹$ _€ý*'ãÛ<$šÐGr) `?mÐ |€#8 ×`»Œz^tmðtÙ§¤‹tѵ‹d’³îvP…ÊÓÄŽH”áôXHT¢IEub2HOÜ“È9u&†Á+x_X½4µaò·ÁL?X@å3mx@-Qk!wX  ë½¸¢«-Fƒ‰êYµœÅįŒæw$RƒÓ©¯¸‘³‘º$a8lUp†+’Ç›1Y»€›ÜAèT‚8´{äãMìÇ<ØÕ+L¥+¹Â™0â©À›c3Fo j›ë‡Ycæ\wyòÒè]ð"üü¿ÉMT|a…@û>õ[¡­etÑ»ÇKÄ ‹H}$mÙS’1OÆtšÜ(û¹4öÂÄÆî‰ñ$Ç3[žßµzïyïšöŽõëߪ{«©£éüºûËõP4íôœ`ÀÙ(F`öØ£cþΣCë[ñðÛ“›Õÿ^®ÿÈÑY~¨üýÍŠ}ö}é‡Âê1ôÜü:"`Ü Ì¸ÖRuÝLÇùz;*Aðè~ &™&ÔBe íT •²X±qhãñ¡Ú‹÷H/‡9<ÉsÛÔw‰'d\êÀXZ\DéÔÅÉ¡/¯æºž™„Ü!:õáÑØÔ¿åÚðè®ö ¨Ê(®±w/òPîª\Ü‹) 5VD( &%¶8 ©# ©™ é0""ƒ.®H<–P@eã¥6>ÓIR†ÔÌ´"çîž ÓY´©iò¿ï~s¿3çœï÷;¿ßç(ư°Ÿæó$ÌÇñ8e}ÎPPÆ´ôƒÐðwßÀp!ŽÅE¹êÝáyšœ©ší«³´›´›ÒR²’,³’òßuÄ… ÄñÔxO°¹ŠûÊТ蒵JºO\ÝZú#JJ03¤çѹrCC•P_uº¢½ø|ñ¯Å0½Ä£h¶³& Qe¾M¸³Î—À68vÓç¸ W Ç)„¦Éh¿tv˜€Þ2°¹ý¨^ãaþïè»0×™X¨vÆ1÷a\¤ †šÙ^Ëm;&ÅKµm.èAÓ:Ѝÿs!ûVßöÔÇ‚ _çázd7pnÄ{xÖãFè…±¿Uì F‘¨’ Ù¡Àéí8™Ç4‰3ñ[¼®˜;a (n\ÐT,ªà:÷qöæäDer⺠Ú,Ë,­6/‰GÿY$ñ» w@ðàƒhó½ ™³<%–pm,\ v­¦:Ž “) ÅTè† C†Ÿ•£uÌtßæÁc˜2.fuœFÓûMç™–®Ž„ÖHá–“)‰3é%-u¯ÓÜ=ºµA…T#Jâbƒñr)WZÆϾ /†°þ$FH¥ ¬%º…(¨ÓÇœd’L*P&Q„>…1…ÌeÀà$µÏb´ˆT‚Å–k~|à<ó—sÐ}DOÙîb>uWwµ?¾©oóÎP÷tý½cÎèÿkOTyEɤÄç9l$î¤a/aÿmL4’:l‚á2… £ÉS›ùó)‰¾VB È1˜»ÇáRŒ^°˜J¥&h¨ ÿ°xxMn‹_§p»^Ábõ ‡ý‡Å妮vá‚#j§â5Îñˆ¡ÞT”·Ñ—-*?Qצ¬kk¬kÖ[o>]r†?Û‘“vEèw’óé&;®&3_ºxòã±Ðkã­÷?_W–*”¥êÒk2j2j³ëwÔÔ‘Ý»Å"ªW-rtF›P\8˳Âà£LCžIºû|+8ððùà .¯9«AȬO­IÔ'ꣅ•£Û×SЩ!¥©Óññó.˜ûnnz?™•’š@¶Ì:ß­¾üì7À^Á5iêÑë‰D<$ Û±÷È "þеÒ¹B…IO„Ý,ÝáX—HbýÔØ~ŒÞ´›ÀbþS´"§:¬:éVeJô…ÀY“žÃ 9¶_ÅVãU†Öâ´=3ä¢`Ò›Ÿs™æ_|ä~ÃûQ#¾ÃУ¥¸½ºt8#nŸŠ$óÌ'¬åP öÃ^©tín>mjTHŒX)2b1ƒr¬—ܰFtc0\.²R™ÄJå È¡‰ÌÒIɃÅòçtrº>š?RÉ`\Èò”ñÚ÷Ž6£óaOÏŽ‹<¸<„N2/26å)`mñ¡ñ s{øNo³ÒÃánÆÏØd–ÈË 0©Ç^ endstream endobj 28 0 obj <> endobj 25 0 obj <> endobj 32 0 obj <> stream H‰tU PT×~Ëü<•çÛ1 ¼]QDX‘n+jðw!¸îH‚Æh–•qw™j'YJÅH‚:D’ *â„V‚iÕ C´¦¦Ó8¡êÄ4i­Ó–Æä<'üXøýˆ§"M‘µ‘7„)B­Ð)ÀØÔ±Þ±Íøw!øq5‚ùšbo¬Žúa˜ÅNÑö݈UjØyбvÅ΋>Ìx`•À f43A©„v·C™˜/úÛ•J‰p_@;Ä ¯º?¡Zõs0©Á2â“Öe%b::õ輋é}Y2èYñg³ Üzpß‚¤îÏä§³Àœ–ŒF©ïÊ]H§œ‰¾îŠŒzÖy “ЭG÷,L*Τi!Ю:eêò$Á&U=°GÝ›$Ø2îa•ª:fõÝãRðòU#ë«U-Щn©—€1˜5²žGÆs#è•%§‚S£îÑ)6Уo'kkã{{a =F=èg|Œã¦g×x^”÷à ¾ãDßáÁè‹'<Ö$ŒÇäÌ,CI9\Ö‚9Š–óÏÀƒÇý6Í&“ ¦¤€“)2Ly`o‰WáÔI­Zqp¢?=Ä&ô¡”•Vç-—wc¿¯³÷íè³]®<ƒxÕ4¥0N¿E+ú}X÷d¿>òWAè¡âhÛšF¦‰Ÿ+e:Ècè±òhgè}`åÁÂNA¬ôÊLüætð;™P×:Hƒ(H†¨¨K`q`Á¹`ïÁ« “ m@{úpùʼòŠ X‹ñ3xæÎÈwž¿`n5ìԊʧûO‚FÿíÂALq?£ Ç$Hþ•¶ï˜g¥­°f­A¨«‡DeLQõBžZ9 ‹¥úšÕ–h ˺ sa".ž¯ØöŽ¡L|s­õ`J4Ö`&b!6@d’¿}¾/§ÓÖÃ/;\óf·þ½íÎ}XS{\~bùöY¯åEc¤gqbB×2оl8¹•?WutÛZý:wù"ËÒÎ}•²JÊèúéì çÙ$>zM„¸€ã ‘ 'ƒ®V«è¥ÓI‚W蜀…a>„/†©ô„ ù²b¡¨U;¯6/;{Kÿç;åÇúÝ­üS ¥:Èg`:[.Cð‘ÒP£øx|é‘<»ÀL>¸{ä¯â»Ê¸L¢Íl^`ç+ÛHjlÁèKfðe9è.&^½¦t=ñßVTRtPÂp¥B¦7x\Ã~ˆöt°óXÂH87pu€ñ°†Ýƒ¼Ðôp{PL=€fÅŠ-hÃ)è§§ƒŸÇ2 lü¨)?"ÏèT<êNâ![9Îàˆ2ƒ‡i2”¡U‹þ@/¬j6UÁþëuŒœßD—Wi‚o¤ï‹¿ÄçÌÙ5[óé¾ø=^ˆþm‡£Ì°u­³ÌË0tꕬۗNøÀ žöìòìôÈ`f¾£¾Þ^=š!BZ½=-}½»íýÁþƒ×e?¼W¥¤ÐX ?®¦›ÍB·M\#î?s[*oøÛÕÔÄ… šÍ”â2ºnè$ÃFCk+Z.-L«"UhËUAAÆDc£$"×’B‚”A ‚†" U¡DÊ¥*Š¥øÐ:”ÑñA§ŽgñG§gS¼ôò°3»3ûŸëw¾óýé†ýl¤˜x£ÕdµJT`GwÆ€ ܆À¼€ŽÄ4$AIªÐd¹2Ö[:¥B”b¦ &ç3YŸ¬Ð¨xõÈÌLãð¥ËÕa>¸èß¾‘Á+ùcl…&¡Ú_F"‚ˆ+QÅ8‘@Ä÷SóyHDGóâ³v˼ŽL?êïë´)¬•ÿ'ì³Xþ¸Çâùι–(±a‰Æ4cg F’“¬A2"‰$¡‰×q·îú[r#Å´©L*£JÈÐÐl°5KÉ$°3Õ×/5†ùø¨C㣲Ff8a¨(pxNàˆaûaKÕNÂ^¶O Š À_âù aˆ;‘Žâì-å&KÇN\°ÃÒw¿Þ–+S†7þ^$/~ÈNغûjS9˜&Ãî@ã*“äj[´Ëž` ןH@É»?z5ÅÌ^w×ÖwÕYŽç˜É2X.b®—iS*¾”)¾ˆ#Käk ý@Lëˆ$€^¥á?§ÁÖË’X¯’P6÷ÌýÃÓ2H¸û‚å0#fZúLçMÍYO1Öâ¯ôûÔRÕ{xOÏzqÙL–)ñ½‚»Uqµÿܹ1‘Z®ØÓT›Ê1Ð £¬o~xhxîÈì”e°¿ïTŒ7'/oÚá  gHgJ褾ë¹tö*+2†©9ˆAtÙ+$N•Îé)c­±¡N Ùqh¢Fû<– ÒuH¨D QRÌGw£%|¥c75P¨£À0ÊEðT;)âm¸2 Eø*‰d‘&Êçx ¥žÝò\Áß³s‚-° ?WXe/þBгœfjbgnü#zwïé?÷*'1,êñ Ø™ºcw+m{u¤ìý”ͪ|¦­é›v}PdS–)!Zj¯+HKÞp‡s¶àèú¿ËÄTÛ e7‡@fZ_›;dJH”Òº\ÄÎЈÉ0T%ÈC`f§*Vnô÷Ï É¿=Å‘0ÉÂTAÄ8*(‚À•D,L‡è‰Ö@¢=Þ@½ŠNàk/ÙÏâûnªÓÐb¨çŒTh{‡j\’A”J4x…ƒ qÛ—˜$d|ͪ·8ò9e:bJM”¢8ÜÄ23Ö‘zªC}|²Â¢8æZ¼zxFþ^_bö4¼°»s¤ÛMS«É"˜d¬†Cz• ‘z+)®~‡Œ¸…âEèAdOÉx‡u¤gÚaHK”2dœfg-C½Ý¶OuŽò0Ž2Ù…=p5¹Ú&{–ŒÙ^ÿ*Š?ß7Tר×WpŒN ߣ’kz³þQR𸿢–îÅXÁo%ÒÙ*6¯i2ç'¬¿ oÝOlÞÚ ­%œÌªª‘Z›*ÛºÌÒµråÈk椨㘃Wغµ[b~K—_ÑŠ.f[ò3¥‡Ô9±ÛâOYTB´èA¡iµÓ„ü̼;;‹w &Æãfäãþ‹ß;…ñ-**ÌÖgÊÒÖ^”ƒúO,,|*&ÊHqôÓ©(¤ÉRÁRÍkì­ãëøV°j2 NÌÛ½W×ÐËÁQÎ#þvñxÔì“¶_¬•ØxfÝÒd“†ƒõ”Þ¢oí”â¦?ân·XÎw1aƒöQð_#lZ¦Ý›Ìáô„9‘]Pjð^DäÔ£ö­ý3÷ 'ü)ÆLžã‰x."{¨-ö­ÂÇ6 VÌ׈ –bRîðbao"ôk Xëð n<°“€'4ã©X8 $+ƒa¥°ÄáCRŒ Ý,BÁ7 ¾¸a‘-9ò¶f.{!ðr¬Ó‘è"6=e{fNÙ±,®ˆàò©mÎë•ÁÒ®ÛØäÍO‹È&÷Í ÷D4ï™Øþ’gºE¹ø™è:ŠÎ­š ©"áU^EAs8–Í¿(ÿµD ´(ߺÁÙ”ÎKJi0/矲 0X‹oE endstream endobj 31 0 obj <> endobj 30 0 obj <> endobj 7 0 obj <> /ColorSpace <> /Font <> /ProcSet [/PDF /Text] >> endobj 33 0 obj <> stream H‰œWÛrÛÈýþCï™a€wVR²-y¹%Y.“^mÊÞ‡!0$ÆÂm1€hî_&)ÿONÏàFQŠ“Ø–IŠ˜ž¾œ>}Ú£}ïÕ»µG{Ýsi:s)®^£Þ®÷GÏ#E½¡ëŒ—øÃ¿wÜÍ' gACþäÍ(—ÍÉ{Jì{Ç[ž?Åß¾z£gäkråð:žÎ3¼ºãéh9!í'ìШrh<®/œLh4wÜ)[Ú5>¿Þô^]ȣͮ‡;]üõÎlDã©ãÎ'py÷‡Ã`:u¼¾S”ßb±ªD:~~ßü#Ë*G®½ÛåÍh¼q~ùZØšÏùÞÏ}õQ=Êœ”&AYšbIŠe ð1G™–ž3ï;´*ðPò}Oæýb€B÷éRÒ\ê"Έ6oaRø~™‹BR‘’/¢ˆTA"¡Ûã“´•¾(µ¤Æcjó—^?M$¥;*BI;y Ù :F4¾é2rêpêsŸÐæÔÝ»w¯~L'΢Ÿæ[D—Zù´KóX݇2¡cZÖÂé `M6 R§±ÄÕe P©âÈ‘d¹MA:l¼ J_júÒ?¨"4‡UâGew×2IB©´Fx¡AÇÕ1ê/ƒ ¶‹à4Ѿ2/ᇦʗ촱z£’òÛ°u%û*°(}lJežðœñd6éTe iÛP阌Ï-Lüp$He§Ølpxfñæ”–E]©múÍš3Ž^Ð!T~H:LË(8µeÜßg%Ài2æY®€…&ü(:Ö8ÚšdU²qZêÖ§'Kñ_›(€ÆC×ø¿LÄÖ»ySC˜–B:¥C—¨»Jp„{#/”É Zq<º’ü¹>…Ô9´N)’ö\\£I8N~.ü짪IǧnZtäÕ-ú_q'>L½EMoÓ¥íè»÷W4Ïpõ=ºè_æc¼üVïÿ±¹¿3_.ž~i?­nŸî>mþ#‘Œ\·&’s’µ¼bжS¹Fƒ2ãÂíԾ̰Œ˜*‡tIÁoò&›‘Э ×ámÚ€‡<0FWßc*DÄí4ñÆ/^¶ù7º¯°Eôµ„/»4Š` >¢@"àÖk«”¤ljgÏî”_FèKü‹"‡ª°âƒ¨qж×é®èüBÆ[ ù[k@‘ °~"è<ÈGtø—í;_ÄÜ£&!UOv\êv¤a îS›$îAŸn×ðæÓú5Ý ÝréºHs±çKìm òiq… p|nP2D\XKIš·L‹ˆØh ôƒC¯K&‡Ö‘@êL¨ü';ЈZ+!EÚº^ ¾C<¿ì'|…JP]ÑØ¤í‘ÊlŸ‹€ÑQœeø>[ujWf Ž/ôU  [y ³Ê£§<†ÄÚ·êÄw“Õ1ARfMjÎåüqˆÚ¤ö;†Ÿ©OÂ4I¤_¡½…Fws7fxVø…åv!¤ÿaN{œñˆ¨9`ÃÂÌ‹¯;•ª1‡G#g9ŒiŒiÓi+ ŸÉ¿µFÓÆä£Â@槸`éÙðÙ ®YVj>(À¥íÁê›X¨„£ÜŠ!Û¨²ô€ìjžŽÍ©:5µáÐ1VfyHL:‰}! ˜:ÂâóñèN«™Ò§‹æ uL¤ Œ#Ï¥$ R`´ ² QÜc[Õ.øvž– ˜º]_Åx­’î4Í*ÚXü4;ZÜ@éNÂÚPºˆ6ò¦MdÛ>-5ÙZ ³ÚŒ¥øSüç~5ìSC3&HNF2³¾´¦g0½-UT A€õWºÈ•ÏÑÏöugšXt‹ˆk^± õˆ! Å«’ ²=ë‡"Ù[Ü~é§ m_-ì-¨ð)ÄQ¤=ü4$n:ÚÛôó ®ˆ-a‘:®T&¡JYÛꌆíÑT‘Û i˜&CÀX]tüä€Rí«Òr T†S×#ÄDÒŸi‡Ñ^AÎ8¾™™ØJ&ÎxÓL'LÚ‘€Yi.4pÂ`E‹V×>™…Æ‹g¯é±cœþˆéYkS$ ƒŒ’9ÃO«dÆÐ µoobïwedeFCZÚ*BÂTt'0§Ù=OribNW‘©Bˈ{E$I˜64óóâŒÖ>D¥¾°#„¶c\lKÝá.ÍêY4™d³3zÕnu©¡m•¥>ižµ‹C‡ëì¸VªJð…†$:—¡ÙÍð6„áð‰óºÙÉYÍc®™Ñ‹¾ÍÓiÓÔ|^5ë!+¸8«+ÿÏOf>2®Oð/ÑïìH\¦¿RÊJà€õ¢Ò˜ÅŠÎ¶ÁÚÃy^™fSÇ›Œ=šÎþgq¾d"cNóÜJß\]òZºìÿºzÿŽ6?C«X¿^}¼­5ùÇ+º\Û/ýÕú%5Þx6™üP_jÀ9átÈ ™$-k@7ÓÝybãržK„ª` è‹âh78ùMø6ËH=ÈjಢT¦þg á ;]XK¾'Üû,›Ãþd9q€lF‹Éÿ~³™.,ößÝ1æïnÞ×o~¾»»©7ÑÕægZ]Þ¬Þ_½„õÖ“ù¨vn­Ùì ÖÕ."@i«Ššd‘@ŒzÚ/D–EÊ7$Þ$×Tâ*?lÚc›Û†Lº¦ÈDee$ ÉQWœ®m"e¥¼cò8åwæ|eOÆé#²Ž·Û“/2ìÐX~(ý‡º;j…Œ±€ܱÀ(À`ûÓáôâµàÉÈ›ÛÍbÅÙâ ê´3›¶²¨:Á }UؘYɵ·û”Ѭ5˜nU¨}XЛ]Ûof9µ. ›³Ä‘‚"¨;—êáwi·ÝaØU:ÀÜ]&…Ï#3R:¤P¶Ñ]§¬px>ÂÔl¥2G™¢ÎZQ+ïHŠzaHŸ£ú€.ã9ØýxuùööÊ,¸]öC[ ih*ø‘®í¯lR S3°uh8“ÕÈ£‡0 `ÖŠ§çxË’Šå;ÐëNæ• íÂÒ€ Bú¡’Mþw¹’È3g‘˃:W÷4»îX‡Bütó^?ßа#OeÂß4Bèß´—KnÂ0†O;Xꦕh”8¶ã´+‚R‰òº¥ˆÚ[päŽ1È$ºâ‘ß3Ûùü6¤®?¡ÄšõËÈé»ÿkÛÚQ#å%Ê£b©˜¥^–mþdqsÃ2qŠ&! „†À>†Ïæ0ZèƱ…G2ŒyäÝ£•w¨s4~ çX£· _æåúlÏvÍ"Mn*unøRÊ9aP?¢«hjgEúk˜‡ddO5Ní¿~™'FÚ¿n€z?¾(‘¥h‡D;OÄ-Ec$û¢ÌE"HDütÂEj QÉÈEZ"Ѳ:]D…Ÿ.WÍ©ƒDOijøª%"ѰZ4B¢Ñ¯x‰Ú~uœ•¢)M«Ê ‰f~¤8½ýÄ/Z̉rN ¿*ÝEKÐE¢nõñ½(ÒíÞ»5­ÏÌ[fq¢Ø–ðPFŠ/À6.Ò&ÜE>Îpêk«?øPi2GMHe‚"Ÿp“Û¦g?œÏ6ŤÄãö{bïhÙ•+ÕgZ÷d›ÒÒSµ¡Wû!›ßM1^„¤âÙ±Nêש "Kef>oõ‡”…ñ}¿Ùª“ÞàµÝ2¾ó¥k Œ…`‚°˜Â ²RøÆÜïyÐ Þƒ?aà% endstream endobj 36 0 obj <> endobj 35 0 obj <> /Subtype /Link /A 36 0 R /Type /Annot /H /I /Rect [615.775879 14.7798 703.724121 25.471695] >> endobj 34 0 obj [35 0 R] endobj 38 0 obj <> endobj 37 0 obj <> endobj 39 0 obj <> endobj 3 0 obj <> endobj 42 0 obj <> stream 8;Z\7YC>4[&9a[9W-HWCQ#mNj0U/;r<$<24B`^>Z/Km-:$>ptX_1"#hAE%s,8W*OP Z6cDd8FLSZA"CA^rd6cMqqZ]^J(RK[O8Bq]@W))&H`)ps*0W.uG8k%6[,h:M__>!H >`m8G0=ZE5C87GRIcjE)(Q`e%-MFY j*BsR4_2*!%Yq/t5d$CcDfi+_n]Q,=,TT#ebWAmFbZXthZmlZ0nA"Y%nmS\Q/-s.L FN4)kJ7Fp&p)It%k;P)^J/@f#DudakJ$S:ScFd^+A,bE,q:@ON)qp^O=Oa(eq$I^V aQF-Y2CA(.o$M-o5?#@#b GtO)[f>#VqL^W^U(;"kBH"0Qcf&ip+b#,WHFiA>ZZrg*cF7*-9C_Q`rSDFp7-P8^f [EYu7APVae7"8A3$Gm#)="W+0/4XXd&D@dLZ<3^uL:M/80u,oI>/G(&/PC6-bg7rl ]nKm=FV+oIa9d8q"S?"js*bH218:2c #(7*)]X@C`E57b$*(907dtA8[c;5f[XI`UA7C5J;qke=eQRo0s0tpV';o@J8Tjlk$ hfs.:UWnEOmN1*MF4M:5=kDj3Db$dML)Oc=+]n+4:>XgCesI,^>5Ykq[!DKcFKg\O 4)!_n5CTaCH+3&)orHOs'.1!KkLKS5!9*=`!W~> endstream endobj 44 0 obj <> stream ÿØÿîAdobed€ÿÛ„     $$''$$53335;;;;;;;;;;  %% ## ((%%((22022;;;;;;;;;;ÿÀd"ÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?ÞèWð:gL ýž¼Œ»ëkï¶Á¸{½Ðì´~Íÿp±ÿí°¬` ÀÆÿ‰¯þ¤#µ­Ü7qÞª [lÐû>?ýÂÇÿ¶Â_gÇÿ¸XÿöØV2®8öÓŒm¾ò] ú-¬h^âQ¶¤JµhýŸþácÿÛa/³ãÿÜ,ûl-T^`@Bõj7ׇَ[HÆŽÓØ”½7JÕ©ölû…ÿm„¾Íÿp±ÿí°¯mKjÖöXÆT׉º·8‰#•»ûZŸû•þiÿÈ¥ûZ¯û•þiïý”|G©Wú;𡸇êçÕ+¶âõÜì§]‰D2Žu•±£s˜ÀK>k©o×/«ÅÀ o‘ã^Ìúk?ö½=±²‡q ?ùÿµiÿ¸¹?æüŠC˜Æ6?‚¿ÑÜ×XÎõ—¦Î§û0fU^eáÃô;mŽÝ&ÆZÝÍu}Æ«¡«êvex}O,àeqFKÝHhÙí=´Zßµ©ÿ¸¹?æŸüŠ_µ©ÿ¸Ù_æžßÙKÞÅ{•£ù¯ÜÿœŠÅ–u4`Ö3*s°/uÃGCÃËN¾µzl ­1-hä!rßµ©ÿ¸Ù_æŸüŠ_µ©ÿ¸Ù_æŸüŠ#˜Ä6%èÞhþ‡âªP-ûV¨Ÿ³eiü“ÿ‘MûZŸû•þiÿÈ£÷œ]ʿѼÏîÎU( •ý­OýÆÊÿ4ÿäRý­OýÆÊÿ4ÿäRûÎ.å_èÞg÷?窀žå?kSÿq²¿Í?ù{¥et¾ ÿO}Œ³÷K€?‘Ìc&[>C˜„LåH܃nì  þÆÄýûÎÜ—ìlOß·üáýÉüCÅ­I %ö6'ïÛþpþä¿cb~ý¿çîKˆxª“@JìlOß·üáýÉ~ÆÄýûÎÜ—ñU&€”ØØŸ¿oùÃû’ý‰ûöÿœ?¹.!âªM(?±±?~ßó‡÷%û÷íÿ8r\CÅTšPcb~ý¿çîKö6'ïÛþpþ䏇Щ4  þÆÄýûÎÜ—ìlOß·üáýÉqRh @Aý‰ûöÿœ?¹/ØØŸ¿oùÃû’â*¤Ð€ƒû÷íÿ8r_±±?~ßó‡÷%Ŀә‡““ÔíÇkkÌ·ŸA¯%û 5‚² Ý`üí£à¹«:Xͪަì ñÎ\ÃÉn)aõ+¦ Xl± {|]àœtÞ­ˆÊºŸØ/È?­ædYŠÆUô_ím•°Áxî—ÑV{ŸµëÏ\úº0Ù›ë±ÔÚã]a­.±ÏJ±SA~æ÷lHY}gëKÅÂÄÉéÍ>¶uX—±ÕY¾¦¸Í›™·s_·èƒ©í+;ëWZêÝ$t¬Üc–󟉊'-Õþ‰ð"OÒ £õJ:~Uµt¬Ê™_XÃ˯ì{îu5‡îpŸ¦uÖú+ˆ÷?kÝUÖ°j¿ªþл¼NŸs*­íá½Û,ÝôžOQ?çÕ¯±dgÚÚ1 FHsÛ+ÞàÆz•9¢ÆÉ#¹Ž­Ñº­÷uÌœ|[,5u\Lê)-#íÒÈx¯tnçðUº¶'Xë8¿Xz­}/#¹•âQ‡ed^ÿFêÞ÷Ç”¤<•g¹{\±ÐzŽKñ1-Ècwúoc«.gï³Ô{|Û¢Ðû=¸?f@úïÓrYKþË_L²§Üv›$0»€|—IÇ?4àÅ.åæºïWÍ«¨×ÑzY]DÖ.½÷O£MdÃwíÖ]à¡Ó>°¾§æa}fů7“”ë*—Un8úVT5w·¸TzçYÇú»õ®Î°××™•Cqsñj¶¿´Tú±â§8!dfuj¾°»¬õ§º¬VWÒ¯ÄÁÄ}µœ‡·k¬{Ý[]!¢¬÷?kÙ×õ‹êåí´c\Ûle'!•†>mcZ]5 ¿¤Žû&gHúÊþ£Ð.sqë=PÞܪœ×µÄÔÝÃÑ'Û ï»žË/¤7©ul®ƒ·§]‡OH÷ÔÈ{v×s®«Ó`©ÿœØÕG¤ôî¨ìoªTÝ…‘C°Nu9FÊÜ{«Û[ÜcF¸t¾Šâ=ÏÚõ˜ÝêÖ^[pñòk}Ö8²£WcÛË*´pði(-úÕõQÏ ûK@6÷Vñ[lnר[µ¦F’u\¯LÂëogAú½gK¿Ý8ddu2({*.ÛéÙùÛ÷#[Ò:‡üÅêX£ïµÛÔÍ­¤VïQÕý¥Þ·n³à—ÑV{Ÿµê¯ëßW1ó…uìeÌp®Ã´šØ÷pË.cäJÓû=¸×)ê•}c}ý#¥æQšû«ß“X6`åRCCÝŒt/AHòðHy+ˆ÷?k…õ›«3¡·¦ÚKiËͯ%÷CZÊž×¹Î$‘·“¢­Õþ´tº.é´ô¼Œ,ë33kÆÈ®»k›S÷9¢· ¯?ã 쯢U–k4ž§S®e¥¡¦ Ç‹àí6ÂVg^ÆúŸ—Ñ/è¿`mÕõ: îÆ}e %ÛÑÝ W‚¸rõëßVÆaÂ9ú¡þ‘|HYþÖOòfU O¬ø Éê5usV5x½@ôüG†Ÿ³{CâuÐëÂãŸõgªÓÔ.é·QÕ-Ýšmc©ttóY³Ô—‘¹¾ ×[§;.ë߈÷›~²2ê+{K}fú/ú´p0‡Ñ\G¹{ÞÑúµv'¶ÏHì¶²ÒË|[ÀsgÌ.vÚ+ÇúÕ[kÐ8Gekê­y¹=o«õÌŒ;º}9Þtãä7e›inÝïià”·5ß[*ÚA†™…`*?Þ ï‡J\Y…šö§ù=pá5–WSwØæ±¼nqIó)Ç #ë5Ù­ÂÂen}Vä´ä9 –¶¶ëî#T³&1$ iáÆ2dŒe.åØ K£öì-¥ßh«h;K·¶¿wžTîÈÇ¡¡÷ÚÊšxsÜ>÷.;+¢=ø½MÕ཯ÈËeX¬YP#u ƒÊ»Ö°²ÏV©Î®ë1Œ+©ÕUë€î-<;¨½ÙÑôöüKsîXL¢mø®À¿LbhUþõ}ÙXÌk\û«k^74—ƺ¤2qËXñk l1[ƒ„8ø4Ϋ—Æèîõé®ìkműõ¶æu¶¸»dq¸HÑ7ž…êb_etoººØ\æØó,k›Ú'º^ôºÇùhy[G5Ë^ÂÅJC®þ‘ö½{l­åÍcÚâÂAð> ¡êø-γö í©­sÜòßwÑl“ô¼•O«8ùâ_‘•[©¿/"ËœË8`H?…™…“˜þ¦Çtû—{ë!•ÔÝ7ïCW¯·3‡]}u9Ú†½íi#ȤìŠ펵q†—`è .C­cõ<Ÿµãý’ÂjÑŽöQ¿ÔhÓy¸ƒ%£ƒÑ›WÈ»6‡±+¢œGX°\ßpHe‘•õ­~¿ÁRäñGœ²þ‰‘¢F«oÞz$’ILÑRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’}Oú5Ÿñ6ÿÔ„’êѬÿ‰·þ¤$‚^{©tlœÜ\\œ@MÕ2¸€O j¬Êþ´5 â9s™$þ ¦Â°UÓ*y~Ƶ¬'ÏômÓU‰_Vê½S&á‚æ×]o|–¹Ó£[´U|±ŒeÅÅ(™~ÊfÉ<\)ãÃúYFÚ#¯ŒÆgUVêj±¡ÍÚÇ™pÚ4ÕK"¬™YÙ9˰Üçã8‡{ñµÆ:x«×¿ë;wß‘E`þ÷¨?+,êl˰ò)Ë`ÅŽ ´«ž|_Ö›01&„9]|J¾ÑõÃþâ»îr^¿×ûŠï¸ªnúÅÕûV‚ÜŠÝù­ý¯ëoýÇ?ŠWã“ì^;G“?ájÿhúáÿq]÷½®÷ßqMö¿­¿÷þ)}¯ëoýÇ?ŠWã“ìOõ9Oñ¿µ_ë‡ýÅwÜRûG×ûŠï¸¦ûoÖ ßuç}uÏ·”ßnú×þ€ýÎþä~¹>ÄWõ9Oñ¿µ—¯õÃþâ»î)zÿ\?î+¾â£öï­èÜïîKíßZÿйßÜ—×'Øšþ¯'þ7ö¬ïùÒó¹øÎýâÉ?|!dbýaÊ¢Ü{úk]Uí,°’×#s@#Do·}kÿ@~çr_nú×þ€ýÎþä¬÷Éö#‡úœŸøßÚµ.ú×E,¢œ2ʪhelÚ5¢Õí\?î+¾â¡öï­èÜïîKíßZÿйßÜ•øäûÂ6àå?ÆþÖ_húáÿq]÷¾ÑõÃþâ»î*?múÙÿqÏÜïîKíŸ[?î9ûýÉYï“ìOõyOñ¿µ—Ú>¸ÜW}Å/_ë‡ýÅwÜS}³ëgýÇ?s¿¹7Û~¶Üs÷;û’¿Ÿb¸©Êýª{þ¶YÌ-àj74ŸÊ6}eÿÊæÿÛìS=Kë5M/¶“µ®Ð]¯æµ£RãØwTq~°ýkÏéîÎéøN½¾£ëedìqØý„™ú'É!g®NË$@4aÊìe¥“ /úà8ÅwÜP2ñþ²fœwe`N%¢ú'p ± €í9‰T±>°ýuÊ»'tÝ·b¶^Áhp?F·8h׬<_¬\.ê_³ì馇l[úAc«og83ß›<§pË÷§§’Ïz‡·Ëú´ùf<5ìè›þ¸AÅv¾E¡ô.¢s¾ÝÔZÿ0A 3ª}jêÝ"Ìz³j±§)ÖØ†×^ÙqÚ×ÁC«}kë]'ÒfMn7Þ[éÖÝFÇÍîwa¹Àu‰…ë AÿP¼òŸ¬\¯ÈËm4_NÏ£!ÂöVàæ]Ï"Ì>µ×úŽ%Y˜5ºÊ-W4´‚ iç…1Ê@³Ї('3æÇc{°>ÒöðÔ%¯ú…Ç}¯ëoýÇ?Š_kúÛÿqÏâ›ïÿV_c/ú6_籎Æú„µÿP¸ïµýmÿ¸çñHeýmpöã— Oä {ÿ՗دôl¿Ïaÿ=Œõ kþ¡qÿiúßÿq÷;û’ûOÖÿûŒï¹ßÜ—¿ýY}ŠÿGKüöñÃØkþ¡(?êöŸ­ÿ÷ßs¿¹/µ}oÿ¸ÎûýÉ{ÿ՗دôqÿ=‡üpöÔ%ýBãFoÖ³¨§¼ryðRûWÖÿûŒï¹ßÜ—¿ýYНôqÿ=‡üpöÔ%ýBãþÓõ¿þã;îw÷%ö¯­ÿ÷ßs¿¹/ú²ÿ_èãþ{øáì ÿ¨Jú…Çý§ëýÆwÜïîLs>¶67ã–‚`LOÄ%ïÿV_â«ý/óØÇcýBPÔ.?íŸ[ô1œHÑü~CD¾Óõ¿þã;îw÷%ïÿV_b¿ÑÒÿ=‡üpöÔ%ýBãþÓõ¿þã;îw÷%öŸ­ÿ÷ßs¿¹/ú²ûþŽ—ùì?ㇰƒþ¡(?êöŸ­ÿ÷ßs¿¹Dç}iãÐ ·ÚíOÒ?ëÂ^ÿõeö+ý/óØÇeýBPÔ.?í?[ÿî3¾çr_iúáÿq÷;û’÷ÿ«/±_èéžÃþ8{?êƒþ¡qÿjúß1ögOÁßÜ—Ú~·ÿÜg}Îþä½ÿêËìWú:_ç°ÿŽÂú„ ÿ¨\s³>¶´K±ËG‰¾×õ·þãŸÅ/ú²ûþ—ùì?ㇱƒþ¡(?êö¿­¿÷þ)}¯ëoýÇ?Š^ÿõeö+ý/óØ¿ÇcýBPÔ.4æ}lM£jÃú¶G£Œ?îÍŸõ*—=)Dq@\€Ð}C£Ê å3ûðü‹së]râð×Ñù®ÜÐ@ñÔ¬Ž‡^%™ 6zÏv-åíÀk¢ê>²ƒ^ p Î+è™´[Ÿ•]/Üúðï’&´*ãšæ%ž8¥*Í“‹–Å÷l™Œ®zðÆÃŽ:MceýšÑVÐà ´Ï:{7nü­¯&²ÜSÓC¬êvakIl0³|77X^´®òÓ”¸ÌºùxZ9R’I%e§—]veã×`–í‘ð5ã§ôðg`üTs‰4È®ïËR«ö— tE„GöwO#JÚ¡gLÀú[UjËwÑD9‚ \º-­Ô®ú¿Òj®üçzmµâªƒZûëÃZÊÜOɾ·õFΙwUác¿Ò¹ï®Æ¹¯ãg¦æν‚åÆ µÖô[]s±±éË‹²›Í[¶m³Í‚°s:‡UÏú‘`º×äU‡Ôš+Ì:¹ô7w¼ŸÎ‡ªl®×Ñ[ú£n6VX±Ì«ÌfP²««{ ‡kDZ®;‰ìÉêVêÂÌÊ6lnŸgÈcÛq¬Ùâw5õmÎëtõΛ•gSéL¹ŸfÎq—¹Ó¿Úÿ'BRX™ÖTûmÈÃé÷}»ªÞÿsíÍ´6¼j̶DîÓAÝ!j{þS1½Ð ñ*ì•õg¨U›‡{×Uv%ï§&—Ææ¿GFæ—4ègB¶4J•%))$R _é™Dþý_ùí‹ê]9_WÜÜŠ_]¬É˳Ò{HqiµïlûÃ…±Gô¬¿ëWÿž˜‹uôÑS®¾ÆÕS¾ÇÖ€«]s‹w²¶¿CKÜ4ktïÊ¡‰Öì}ïe¯u.›©q ÖØ{°þ ·JºŠ0…-†0ûìwïdü+íÝJ‹q\Ê÷mxúVŸ¢XîüUŒœ¼qÆ\[ƒé-L\ÎL™# ÒC³Õú™<ú¯×¾ãýê>«Tk‰Ÿæ·|vاÓpò)®¬çZ ë0'A÷*îtuÝ}cîU¨7Ì©'Ô~¾fNnOUϲü.™u£ìâ/5¼ ´¼€9Ô®€RtÑyËòº·Kúã•U­²ýÍ>ÇWd»´&ÏmêwÖ£Š:YåK‰¬ÜZñ´èdºϪŸ[3snwHê–¸u5XÒvÜÆý#íÐ9½üWWÔzÏJ®–áæ^nUd7 8îÛå+Îqñq™õÿ§cô»~Ð)ÜnBî逛IÙô-¸cd½ÎkªvŽ3¬+øÆqª'S´~EO¨3f§Å¤}êæ'ôj¿ª?"”­J’I ”p*iÿ„«ÿ>5V¶Ì“cˆ±ÃSHÒQóÌcOƒëÿ«j^”‰ìuûÑuCÏu¾¹“‹eX\æää.$ûã¡øžÊÖks†¢‡ØçÖ›7ít \íÄW=õ»Æõ¯QÂem,?Õåoa]Óèú¸f3Xêàèç8ví=É\ßIJd–xªÈ(t­­Þ<¶<|·+“xå’¸´¿Qþ[4z/Ö+îÈ=?&÷>Á¥6É÷G-qHñ],¼o{‹K] ’{çÝ6—»¬á²‘u­!£³A’>Az.C=:^î ±ðü²ÉˆñkÂw-or¸°fŧ8¥Òòk`Ù`ÃvÇãéIÆÅ'ß}lsßkÚÆ‚\wPécs |[Yÿ :®5–tÜ–TÙy­ÛGÉ]ˆ@¥É‘ Z8•õ®ãcòn£k]u:öösÜ~Œø'ÌÄÎéófeÏ{D»÷îNzf]¹}øØ2ÃÚïMÇnöG˜ C©ãbcô<ÜkÛœàãù!LAx:pÕtîÆ(Ç‹°´xYïÎÇmõZø>× ÆZáôš¬ lvf÷à-žcÚ±þ¦Ö÷bd:%Ž·Ø{qª×pŽ©ŽÎ ?ñ…hä”c°+ñ“(ĞΚI$£^¤’I%)$’IH2Œ6£ÛÖ®ÎUnIq>£ù:Uœó¶–;ÂÚÿêïi®‹-KçýÍ.‘-ѲËî°ÔëêÛfçç8{ˆ3´óLÐìbS‹[#{kqÚæÌ'G6d.rî§—ñŸAx}¬kß^àևƛ@"<5Y¿'¦ãØÊšçmÙdLÄ |J„ä^ª÷!|žüfe ŠÅ}¹Á¢H˜÷F¾K™= 1Ý*£Óã:ü‚ýߣ‘[œ'c·v[»¥X:ƒ¬ýêa·f-Ó mÎúEí.€OŠ&N±éØõ].W•ÔG)ÐÈ|ÐÔD ¼ÉÓÀ= ²1ØÖ½ö±­³è8¸t zo¦öz”½¶2csp‘æ7Ðsèø¹•z˜Øm¶Ì™-sCÜIeq:ÄüÕ®Ÿ~ ŒÈ¯Ñ²Ûßg¥ íi0Ñí$p£9™cB¿``ÍËá†9æ:TG‡~Ñ¿«}ù¸l»Ð}õ¶ã ¬¸kå*G'<Öm`x!¥»„ÉàBåózWXê6‹.Å9ÙM/ mB*ióníäÇ‚µWC¾ÃÔó®¢3í±ç¹ÂZÐݵ¸A>h “'H}ºhÉ.Wb Î8«Q%ê°;í»ºÌ¼[.uÜÇZߥXp.š¬Ü;ì5Ó}vX9c\ û\ÆDê8ÌÇÉmÌ:Ü[[…Mk¬" ]c_/’Qú_FÏgXÄ̾ŸJª©qykk¬ ù€VI1âRfkÐu?‚gÊrñ#Ñc\èÐNÞèÎéõôæbß”Ê-ul%®:í5¶4+鹎Àõ±¬mY8–ºaϬˆþ©rƒ(&q4H£°·G”0<¶hÆ22©HFÆÆ‰lýtê•dW¶«ÚêÀÐ5Ã_¹sQ±¯9½G$ÖçcŒKƒœ8’؉ó]?Ûú)z^!ÿ¶òHôõÜ0 £º@8¹X‚º½,çºÌ€ëZâçº=Û‹ÉÒ4ðMÿ:‡úŸWþM/ùÔ?гüú¿òi{ÞüR¯»K÷ñÿá‘þ-Î…_IéXNǦڪÝkìy69Äþsœ\IÐwZ_´p?îM_ç·ûÖüêèYþ}_ù$ÿó¨¡gùõä÷cþ)OÝ¥ûØÿðÈÿwöŽýÉ«üöÿz_´p?îM_ç·ûÖüêèYþ}_ù$ÇëH?àYþ}_ù4½ÁØÿŠU÷i~ö?ü2?ÅÝÄsl»&ÚÈ}v9›Ó Åmiƒñ\÷øË¢ûþ«¹•]é3íâæíÞ×X¯âò„_ùÖ{VÑÿ\¯ÿ&©uŽ­GXÁvSvÔç×a,² é©ÂÆòãÜj‡­ø¥_wŸïcÿÃ#üXô†õ¬.»™Ò+Ì­3¡Ó}õÕ]bçY[¬xkZ=›È“ø ý]úËõ‹7;.÷Ù‘…Õæ¿¸–ÖÌfÞ›Û’æÙÛv¥Y£«cÑÕ3º£7õ&ÔÛØë*,†–7hÝ:‡j³p1ºNPfm>³›Cf.òXìz^ù—W^ÿ48üø¥_w—ïcÿÃ#üRãýjúÓŸûB‡YnÛ1élĵÃÑký'[ö Í›Ç1+¾îDÌw^vqzGí#œÍ­×}¥Ø!ƒÞ5õM[ù•¿ÿ;þ¿öåù4DÇcþ)WÝåûØÿðÈÿ¥Is_ó°ÿ£oý¹_þM/ùØÑ·þܯÿ&¸;KüR»O÷±ÿá‘þ/J’æ¿çaÿFßûr¿üš_ó°ÿ£oý¹_þM/pv—ø¥_vŸïcÿÃ#ü^”r²±sëÁgÙòXñcOa!gÿÎÃþ¿öåù4ÇëTóSýr¿üš^àí/ñJ¾í?ÞÇÿ†GøºÏê}:ö:·—±¤wk‡ž›AYù”ôœ²ÚíÙeU¸ÙYµ–<µÎúZmÖ~(?ó¡¿èYþ}_ù$ßó©„À¥’?—_þI/pÿ┎Zgô±éþ²?Å»Sz3>Ž|jǵ ÿU­ ãºÎ ÷G qæ?üéèYþ}_ù4¿çC{RÁýº¿òi{–lñ¡GÝ¥_6?ü2?Å=Ñ»01ƶY¼žð[r´?má~íŸæ•’>µ‘ ­£áeù4ßó¤¡gý¹WþM/pv—ØU÷i~ö?ü2?ŽŸŸƒ•L5¯mÌ“[‹$Iå§Å®î¹þŸŒÜ—¨v69;œÆ÷<øIì´¿çHÿBÏûr¿üšaõ©§QK?ϯÿ&”.È7äŸºÏæâÆkK÷#ü[¬»¢U–3*¦Æ\ÖíÓÇ uú³ke8ìyvàui§ÿ:GúÛ•ÿäÒZ@2*`>>¥_ù4xãÚ_â”}Ú¿ÿ ñt¨Ëfì«%ŽÎ/nѺAq#ŠSêXÙ8ª¦=Ïì×4€àAk‡S?Z§š˜ë•ÿäÓΑþ…Ÿöåù4½Èö—ØU÷i~ö?ü2?Åç?dåjrN\Þ<ý«cêÙ2æ¶Üw šÇ7Õ>çÉ28V¿çSF†–küºÿòIÿç@ÿBÏûr¯üšt³™é##^ly AÇû‘×ñuÿmá~íŸæ•žÑmö]•]d°=¯?ºyø Φÿ¢g‡ó•ÿäÓ­q ©Ÿöåù4ßpv—ø¥wÝ¥ûØÿðÈÿTu¼8²ÀOÒö•Ï}oéÝ?¯TÌŒg?¨ã‚*°°–¼v>;y­u̦µÏ~&Ö´Kœ]XLjwx ΦÌzLÿ>¿üš${Kì)®KÒXôÿYâðwtß®V»k±ƒÜ./meu_R:6ÕæÛ™˜çäu<=¬;XßÝi+Oþt·ý öå_ù4¿çKÑ3þÜ«ÿ&—{Kì*û¼ÿ{þâÞê=JŒ¬cE ~÷ HZ˜í-¢¶¸A ’ççSyô™åúJ¿òiÿçaÿFßûr¿üš>àí/ñJ>í?ÞÇÿ†Gø½*Kšÿ‡ýíÊÿòiÎÃþ¿öåù4½ÁÚ_â•}Ú½ÿ ñwsÙcñ\ÚÆç×@ðkƒàjúÖ#XÖ¹–4}§•—ÿ;ú6ÿÛ•ÿäÓΦÿ¢gý¹WþM/pv—ØU÷iþþ?ü2?űÖléWTñevÖf›vZ¹au óìÅÅÂǯ}8õêã  2ã?‚Õÿ-ÿDÏûr¯üšoùÒßôLÿ·*ÿɪùy~_)â”%g¨µƒ/3„DFx¤ L£Î$~­o«˜x2×fæݘñ´Ãµò[y[ìwÓSlÞ𖳿çKÑ3þÜ«ÿ&—üéoú&Û•äÔ¸ý¼qŒdþ©aÍ Ù¦g“&3#þ²?Å»‰k° “[ƒ-c@ IØ*×í¼/ݳü²OÖÉkdÞ¥ù4ßó©¿è™ÿnUÿ“O÷iŠXþí/ÞÇÿ†Gø´ú…B¼‡_ÓZçÕi.}»\yØï©¾¼ü’*}g—8áît|–Çüéoú&Û•äÒÿ-ÿDÏûr¯üš˜s„ ®º˜›Xyûð×ýl[Ý?7¦`bW‹K,ØÁ³R{”ôßöά˪k…li‘‡ŠÎwÖÊÙS50!õŸÈå!õ¬*`øYWþMBr‚OÍ}t,ŸtÈ7ƒõ‘£_W¦Is_ó°ÿ£oý¹_þM/ùØÑ·þܯÿ&—¸;KüR»O÷±ÿá‘þ/J’æ¿çaÿFßûr¿üš_ó°ÿ£oý¹_þM/pv—ø¥_vŸïcÿÃ#ü^•%ÍÎÃþ¿öåù4¿çaÿFßûr¿üš^àí/ñJ¾í?ÞÇÿ†Gø»}H8â’ÐNǵî™*¾GTéÖa[[n£ê{Z ý"Ò•™ÿ;ú6ÿÛ•äÐOÖ _û^¼ûêÿÉ¥îÒû ¾í?ÞÇÿ†Gø¼Õc#6—Ùk[Z×ÖÚMhÅ;OÉ/׿Yi‰?Ì8sþຟùÅŠ4û=ç×ÿ“KþpãÜjÿÏ«ÿ&£ýY7Âoû¥?t:íë׎?ÅâŸNXfÇÞÐ 3Ðx™ •Ù}_¾¬ªTáXKrA²j ‚%ï#ò¢Îoû_ý¹WþM0úÃŒ Œzä.¯üštL#tÿ r¤]Cþ©â¿ÖpGC ·ò­î“ýŸê…Çuž©oT¶¼s²º¤8»ÔdGÉÄ.§©ôº1k©Ù”Ë@ÞßïBòÊT@ 5ѵÌO>(Ê\R•FBT“¨’¥ûg¤ÿÜÊíÆÿz_¶zOý̧þÜo÷©œöêJ—íž“ÿs)ÿ·ýé~Ùé?÷2Ÿûq¿Þ’›©*_¶zOý̧þÜo÷¥ûg¤ÿÜÊíÆÿzJn¤©~Ùé?÷2Ÿûq¿Þ—íž“ÿs)ÿ=¿Þ’›©*_¶zOý̧þÜo÷¥ûg¤ÿÜÊÏo÷¤¦êJ—íž“ÿs)ÿ·ýé~Ùé?÷2Ÿûq¿Þ’›©*_¶zOý̧þÜo÷¥ûg¤ÿÜÊíÆÿzJ_©ÿF³þ&ßú’^^.V%ÎÆµ—5•Zæà hðISW¢2r‚M8œ‰ÿæ®tþ³ƒÔÌ™s±-4d47ie€ZCš<9áSèBs2ü'þ{\·BÇ¿¦Ý™õ…õ×ÔóhêÕ7RìafákGwTuÓXM)z¼Þ¯V_HÍ¿Ñ`¡ÖP÷––ÙY‡·ÜÐtVzE÷YÓ1¬|9Å€¸À+gPeŸWln6[˜Ìþ±škeM“{'Ôî 1±©îP°z§XHv%9vRúzÖ-9µÜ °¹º9³ÙG¬ÿö¶h}Òë_wð_Oßo€Ÿ £û’ßg0?Í Íz€ëx]jÖuŒ§·êæ]MÆkî·Ö5— ÝùÀ@ ×_Íëy=o«»#*ØÂ¿²WE¸õcËš_’/¶²æ¸é Rh×}Ô—Üõå÷,7Ûv%ZÐÛ-­{A9¡Ä4:žÈÛJZ!oQþ_pKÔ—Üí)m(Ò–õå÷½Gù}Á>Ò–Ò•)oQþ_pKԗܲòhÃÇ~NK¶SX—;Ÿ.Ë7 ë&ôŒŒ˜ÃªÇC¬p%ûuvú1æšeh $0eœLá(ƒÃc¿aÝ×õå÷½Gù}ÁQ·­ôšK¹-nö‡ }®ú%Ð=³æ¥“Õúf%‚¬Œ†±ä˜à’Ð@Ÿ4¸¡Ü}ªö3iú¹ë·¤ë]’ç]k0ïs`9¬q‚©õ{&ûzE°‡<ƒ$€{«¹gbX쇆c–ï'M§Ígôþ¡ÐñpK1òÙñ¶‡¹ÁÂ7ŸoÒhä hL@z²B&\¼£JR÷"x£U_™u}Gù}Á/Qþ_pTéêý2úî¶œ†½˜Ân"}£ÇÈ–7Wé™BÓNC\(­Ý,Úß¼ âq¯‹Ô]ã˜á«ô/knzòû‚^£ü¾à¨Õ×:E¬²ÊòXYLC„Nƒ&|‘ðó°óšçbZ-˜x‚>aÀ„¢v ýQ,9b –9DGrbEy§õå÷½Gù}Á>Ò–ÒKõå÷½Gù}Á>Ò–Ò•)oQþ_pKԗܲòhÃÇ~VK½:j÷A0>Jº– -4ºÈ°Sö’ݮүÞ&?P&#rGä.1‘êí»gÔ—Üõå÷G­ô¼›ª¦«]¿!¥õn®Æ4jHsÚ«õ‹ú˲}ޱö}žºØûê«;KÈ`1¨)¼pÓQ«'ÝsÑ>܇ X17­ôúcÔ—Üõå÷V¾§…n5yU9ÖÓi!Žeoq‘Ì´6GЇ]éNª»[qsnyª¶µ/sÛôš»O‚Õ£cuŽzé;öüþ£ü¾à°ºCÝû{©ê –È ïIêOêVå–²1¨³Ò¥ðCœ@—nÔB ú‡CÀË˵ÏsnahÊsk±ÍlýsZBlŒO ¬ ÝŸ2CÞÅÁ)NPˆ¨*³«­ê?Ëî zòû‚ͳ«GTŒnüvcý¢ëçã kD™Sw]éMÚæ}›o¬[Áný¡otî8wwaû¶m*—ô‹ßAmÿQþ_pKÔ—ÜwPëX˜”e–;}ø•‹È07ý]¬ð«Ñ×Ú/5湕†¶¶9ŒkÜÿ´XÝæ°Léàœ« £Êæ”LÄ yjvØ}C°ç9Í- At êí–bäftÇÄÓa±š¢åg;¯cãzº­¶Ëíôƒ v1 ¸Ád˜Žê¶xûÖž³õ«"}Œ»©%¦ K1ÜZáæ×j£Ÿèë~M®T‘ ó펾² =ÆFV6N6-医5Îf36N÷1»Ü$4ÅXô™ÎÆýP¸±Ô2Ÿ×~­ô®¨c«àdd û‹k8îä64!àk®…dÕÕ:µ}K¤õJ3²òqºŽ{(õ®¶¦cY[ìôÜÚðƒccÅÉúvkñåô¯Iƒücú£¿É/Iëoù¡yã¬ë­¬uú®Cþ»wLª‚wVÚ®±Õ—é’ßÍðFÉêc¤tαә›~IÇêtaÕ™cšneY yÞòÖÏa$´ì®)w/yé0s[|>ˆCÈ­‚¢C5š;Ÿ‚Âúžî§V_PéÙv_n>0®Ìwf[MÙ-ÞöYèYfšKet¢1ñoýPJ‡dqK¹huŽ·Ñ:*Tµ˜Í¼–ÔMn|–»ù¦>"{ªÝ;ë7Õ¾¹m˜=/!™›žZ*{=¢;¬­£—-ËØ=$HØîuìW+õ{';ü\aãàØì|·â¸Ñugc…±îo¸F„ˆ(;$J[Ùt>«ûúsª{ŸE¯c‰h<±é3÷þhþåæÔfu<ªºž]7YˆÜ< »ò+­å‘”YéÁÚDìpq S¢äõ >©Ñlý§gSgËr±ÞàæÖj«{Áù£pÚ|Jn*à}ŽpŸ~d'Sá {_IŸèÛ¯òB^•sôþh^}õ©uÛòúoW}ù6~ÒÉuYt_v8Å qsvÑW«ê‡×ý+уN‰ôÜRîZ”ŠE.±í`kK‹œàÉYx¿[~ªåæ·6‹2^v±„½Ì 'àU¼ê±®èÕæXêq_Uí¾Ö\Æk¹Á­éÊåGÙúF =c ©tº†âõ 'úVƒ!µí±ÝHLÙnÖóž!3ÇòÐ:ùwm5­i–± ÿT)úðoù¡fu¿‰NQc—b¶\Ö±å¡ÇèµÏ Ú'â‡ûoѶ¦æ:ªZÜfߘ!ÅÌ/Ñ¡°:üÐã€5apåsÈqpK]¯s¥è>¡×õàßóB^£üþhUqz–]ïÇ¥îõ«h{«{Ç»‡CÚßÔpñò-ŽqÈs=AS÷»o½(ÜjìSµ“‹‡‚\UÅ\&ë½6}Gø7üЗ¨ÿÿš`ë”;©×]V<>¡kíØÿnï  vξ=‘¿kôÿ]˜î{ÛmÎc]UÜ%Ñ-Õ.8wÒãËæxå¬xö¿Ovï¨ÿÿšõàßóBÃoÖFÝÓ•M~•Ž´Sêµû.ÚÓ¹­î{vW]érÖ›ŒºÏCxcý3oöíçÍ8¡t¹Lñß´&$z'CÔƒÍ zðoù¡gäuî•eÕÝsƒ±ˆmÄWcƒIâ\Öˆþ¯ÓÙm”ï{ì©¡Ö6ºì~Ðá¸NÆžÈñC¸ûV{¨nz‹“·Ä7=Gø7üЗ¨ÿÿš†ÈŸ¶”êc[ÔƒÍ zðoù¡>Ò–Ò•)oQþ ÿ4%½þ ÿ4'ÚRÚR¥5zœ;Iù«x~o’IúˆŒ;âíÿ©I%9ÝêªÌÉõÖM‘¸þÍ_§£à×mX®®¶d[eö´¿vë-3a÷Ï‚­Ðh¢ërEÕ¶ÀÚñ`8¡óW®ÄÄoPÅ©´Vcm/l0NÐØö–î<ö@•SƒÕ:Õœ~v&5U é{²i`y%·;—4î‘ðOѺÕ¡Ó(s™[^ûjͰz„~±HýãwoÇÖ ,&tl·²ŠÚáY‡‰?§t7SCqî0ÀâßQ¾¡÷ƒù“*;ýgø?µµ_Ðÿêß÷+dtŸ«™UgSx­õõG²ÌÖú„z¯nã½±´p‡Ôþ¯ýTêÙ•æõ i¿& l/"Cx p5{¬`ᷤ湔±Žmöm¬ƒ´êG¶<{.qÖô7ÚF 6õµú娶¢Í¤ ± ™x)EU“M]vÞ¨d⺰€ _jÅÿM_ùÃû×;…Ñ3w×K.kØÑº»}jŸ´‚Àà-Úâ<ü|Õ¯Øý;t†™ÔwŽî'Ä'ˆX°BÒkBµbÿ¦¯üáýé}«ý5çïXß±zlF×>£ø‚Þwx[ªSÑzV ½C)4Ô[»cÜã/{@oéGÉ/l÷WÑ}«ý5çïKíX¿é«ÿ8zæ3+éxŽÊ¬àæ[öFTKªÜðñq5QõâÝÒï{+ç£tàuc™þqÞ øÿ%.Ý\M¬9}&ü\G×e·mdok}¥Ãq—ÙV~6õœGÚi~)­¥Îa°Àú8þqþ¾>i~Æéüìw3ôßâòSO/fÉíø3cæçpF¿O^¾°"£™K·í™Ís>Ñ—`s]^Mu3dµìqŸj&ÆäæTæý§%íÙc2Y[M`c\w{ajþÅéÑôáüãüñþR_±º|ÎÇOõßâòS~éåœ|S0é„K¥QßODý`cÝÓMnUnØÇVÛ[[ƒ[Úç˜@\þHêŒ|‚/õršúªu•¹âš„í²Öº“¤•³û§q±ü¤?Ê)~Æéóô<ý7øƒãü‘þ¥òÜZñV•ôYƒŸ–!ÃÁ‹3Öú}6ÑÕÍÏ ÕFfm•³ìí¶²æÐÎ}äìÜUkzF]Õuîh²çR)e·±î}uÎkž|Ö¿ì^±ÞÎ?ÁÃÇùGý@Kö7OýÇžÿäŸäõ%ʼ_ÇýõñøžXü±Æ>]híï·¤5:­y]K‡ z±ÝsÙÛ}aï­£³ÁÚ þ‡UÇ&ûCvC›»Õ¹¶¹Á£G4Çr‡û§GÐwùïþWŸòú„¿ctþv;ü÷ÿ'Ïù#ýJpåª\WeŠ|ìå‹ÚáŒaý^.÷Z“z÷v>Õ‹þš¿ó‡÷¥ö¬_ôÕÿœ?½cþÅé߸ïóßü¯?åõ ~Æéÿ¸ïóßåçüŸíí~'cíX¿é«ÿ8z_jÅÿM_ùÃûÖ?ì^ûŽÿ=þ~Ê)~ÅéÜlwùïþOŸòGú”½£Ý\Iþ°RÞ£Ó‹‘Kls˜ï{½¤5ÁÐadgcf·¨å]m6åfSV-5ã’v¶@wÒø-ؽ?÷ÿn?ù^Ê?ê_±zÿn?ù>ÉêJŽ\°‘²uªþ_kg=úÛ„È:ƪ±ú|îØîgéº9.ññ*¾6Gɲúje„ã8Wa/|Ilhwx~ï x¾}>À´sye8æáØÝ+ôk-6KôÒB2"#SL0„§!DÈž«×Ìt¦ †ŸüQú¿Ó2Oí²Ï´Q•mØ®/ÚZ\=7:ÖGнÖmÆv6>+ìh¶ÌªÿE¸n ß®ˆø è8÷etæPÖŒ ®ºûƒvMžà7“*)ÅcKû[ø½Œ±•Ï‚[iÀñ!–FCÉêÝJÿIù¸[†=Ûà´<ᡃÏu_Õ/©Uæ Úñéf@¹¹ x±ÃmŒvö–·t=†‹S;7êöÍ{)¶—81¦¦±ÅÄø|‡þÁ`aÙš-þlƒwõ|Qン’á•@Ó¨ÝÏý“õsÑm£ôÛ—ûDTÿIÝ¿ÔÞ=¸R³¦ý]¹™Ìµ´ØÎ¦àüÖ¹òæ­:ŸlÙi_Òñé}÷SK*¬ns‹[,Ü>¥Ò3)ªêºyÞý•—6‘>&=IÓ¿tŒÀ4¨áÉ(™Dhž—Ù]¦}]è”>Ž–*Ç®Çn¿sœ|ÜòIGÎÊÆv3ƒmc-~QÃÍèXmÍ5UMŽs+7µŒ.ÚbF§Emÿ±±6YgÙèÜ?FçllƒàRaRÃ’2á17dUu±9Xnii¾²>áÁÓÅS«ì=#¤ý›¤¶···}—Úç sYê<˜—JÓnOsC›EE®k`ƒòOû?þãÕþc¹YOœ×‹Ôëe6ªº‡ZÅÈ,Ç®Æ5ö+¯Ô“âfIõw¡ý_éÕ•MTQÔlǪ¼§‡‡{ƒî-á®ÞTúþ&&7Uéy¦6§Xj{CDâV¯Q=#¦âœ¬œvz`µ¾Ö4’\vˆ 88ï¡¿µµž2È9se)ÀB‡x3ê÷Õ,^¨î¯E39Ä»Õß 9ßIÍavÖ“<€µ†^$ÿ?_ùÃûÕ[óz=¹UYŽÐì*E÷þ°îóBÅê*çPÜCSÛIÈ­!ÕŽí”ÿr;Xb¶b „%@]×Cªl<ŒO³¹–Y\¾Zâ ‡;¸>!fbýTú•‰œ:†>5 Ék·°ï%­w‹k.Ú>å<¬6Ü:²30…™±× h¨XY@$1ïž4W®ÍèÕâQ—V²iÈi{ ‡CGwLB,N·â™ò™ã.¹ˆícÅÏêUþ§õ'¾ÌÚÙkìµÙ>³Û6=­cíxä0h•U~¦ÕÓlém¦£‡m‚çVë\ãê·s^çîi4*ÙëW~Í}Xޱ˓M5Òa úD·À"tqz¶5¹NæºEÏ®°n,f’ï9Hd‰45´K–ÍÊ&1‰áõi®ß±—MÇè½+˜]8ÓŽÉ!p:žI$É?“Õí£¯`õXÃSϧqi<&­ët;'3ìý>¦atö»×ºêÈ%íüÑ´5ñV+ê=çU…™ŠÇf8Tç¶š¥€Ùînºå6Y#!@ÑCâylØ¥Å(FQ"qާ†CöXu¾Ù‰þž¿ó‡÷¥ö¼Oôõÿœ?½e7ëÕ¢úØ1]¶Çº¦YèKK˜bü‘ªê¿WìéÙDbí§þÍuMÓó~iÞì;†Ês¯…6êMÿÚñ?Ó×þpþô¾×‰þž¿ó‡÷ªvu/«µÝ‘Kê`v-&ãé¶ iñ÷ 2º—GÅ¢¼‹:uŽªÊ…Åí¡¤1§÷õУîG¸@å³õmãz·þ׉þž¿ó‡÷¥ö¼Oôõÿœ?½gßÕþ®QmUp÷ßSn¬2ékÌ7æ“úÇÕÖ^+û4Öm‘SMBÃù›¿Ø‡»á#”ÎÉËQ{"úÁ‰WR«Ñ‘A³ÏPWk¡¤·UœþðÊ2(~94ä AäÖæµ°79Ú’$®·ö~ýÇ«üÆÿr_³ð?î=_æ7û”"I'ªì|ælpŒ"G n¯±Ü”³¥_v]weãzùÙlºç5ço¤ÂÑ:Ï*÷K©ø}O:×äc»-ûØàÿÒÑ i@ wö~ýÇ«üÆÿr_³ð?î=_æ7û’ˆ ‹Óù~ÕO›Ë8ʇ†[Šþîßâ‡SSºÿí+2)43Ñ¥›½Û‰—ÙcÛÑrr/.ÊÊÆ·õ¡q¹Ö8¼Ô ì ú!v³ð?î=_æ7û’ýŸÿqêÿ1¿Ü‘„NýíXùÌ¸ÍÆ¾XÀi°ŽÏ#oIÌsr±•‰ö<¬¡ç—ŸP²A-ÓNÈG£œ»ó2[•Že”;¥Úl£ó_ñ…Õ~ÏÀÿ¸õ˜ßîKö~ýÇ«üÆÿrÜ<~ßåÝxçó‚áW—ñC‰Ó*ÙŸ‘Ôóò(ûNC[Sk©ÒÆVÞÒy$ªoÞ¡”_U˜¬€F_ªæ]XüéÛ£µ˜]7ìüûWùþä¿gàÜz¿Ìo÷"c—lqæ²G/º+ˆ¦€ æ]…šÌì˨ÍÇýk´¶÷>,ic@àx” Œúò[‘vF3Ì[*e…î6¼mõ\ºßÙø÷¯óýÉ~ÏÀÿ¸õ˜ßîCÛÞ»ÞëÇ=˜DÄp‹ˆ‰":Ð?“Êcô»Ý‰Ópòrq[N ¦Ë=7’\ ÁÔs¸ÊX&호9yXÃóxuný%ŽÜ\ÐéÐjWWû?þãÕþc¹/Ùø÷¯óýÉ{pñí¿E{1¿”Y2ùv‘¿Pñõ–·¤¾ìº_•êçf î;ôôA¼r–gN¿+¨Œ†]‹Œ[`#.«,54è×3è“.§ö~ýÇ«üÆÿr_³ð?î=_æ7û‘öãâ¡Ïfý=z~õûƒíxŸéëÿ8z_kÄÿO_ùÃûÑÿgàÜz¿Ìo÷%û?þãÕþc¹?‰©H>׉þž¿ó‡÷¥ö¼Oôõÿœ?½ö~ýÇ«üÆÿr_³ð?î=_æ7û’âU û^'úzÿÎÞ‘ËÄÿO_ùÁö~ýÇ«üÆÿrcÓð?î=_æîG‰TÑêÕn¦·µàWlí3ù©)õJ(£ÁMm¬:«I O·É$¯ªšßVÿžÊÿŠÅÿÏ!i]?oÅÔýdè:7’ß¼|GEÈf+3òlúããXà9†Ñ*xwªça:¨6«lµ’ ¬;lj[&’~)†@J‰Ô²GI@Î1&1ÒDtnýbÓ¢eë£+;ù-éx§¼k^kfïµZê„F›v×dê­]ÖzR¢ü?´ˆunsÄ8âÝÀL,£õ›¡³¢ÔÊCÜ*¶¦6§µ»È®Æ¿v¡íá²?‡)œQââ]ÛCi`ö†)ñû‚_/B(:Ùi=3)¡• _U‚ÒÇ<–’øVÐ\&#P~ —ÇÁgIÉn!xÇq†bd†ÅodŸJ·8齃H&{‰]Xë½+ömÕ¶æ½Ù?Ó¬ Hx-lîi “û®©„ìº\KÚªw¤æ¹–ÓÔ23ðRjQ"Rk[ÚÏÇ>¿¢znÕê*®¿Ñ©È ^/sw0èúŸM†kýšÃOPe×W•w^·{^@m7XæXÖ⺪êÁ.ÁêU}¨ÑM¤aQº§7ÕsÍ——Ç»FÌÆ‹_ösEC¥M¶úínÚ`]»ùÐ=O¥¬Ï(â„# @×u™}Î+œLzj+mÞ"¼>—Ó:×Kßsp+ê”ãÒÑicZÛXáu¤9ͪ~” X¶SŒî—õ‡®¥ø˜gê‹m¶PǺßIîkí‚ïcŒö^¥fl®æYÒ\öåù sh"Ç ¾l÷#UtŒf2ʙуk¹¢«Z@kØÓí¦ L©*=ÞÏõ›Ò­ßXŒWfJâFÁk`ξÞê§×gá[Ôzµþ¥mÌÂ-mG+"ÆZ´8}ŽŠ›¾n<®·ëÕî¥Ô°†'OÀn3o576ÇŠýCMÔ­Œ,³±lAÑjdôš2¯7äô^çÃmŒ¡ÎÚ}°K¬˜ƒ÷$k¸N½™tÛoLõîÞû1êsÜ{¹Ìi'ïVPÙ^S+kYƒsÆ€ÖH@ÃGé{D)mÌãìwsÕþ“ÍH'Ü,£Ù’J1›Юñ‰«ÀŸô¾Im̘ûß«Äôž‚xãÜ*fI(íÌÿ¸w}õyÿÂy~?[s#úß «ÀÂùþ qǸUÌ’QÛ™ÿpîûêñ?ðž_ŠQ™ÿp®ûêðý/Ÿà—{…QìÉf}cûAé6³¯{ÞZÒ+àÒ}ÄBÑÛ™1ö;¼&jñ#ý'—â”fóö+¾ú§€Òùþ ³1”e*âkðÌãÉ œ<\£±§šÉɽ¿nÎ5ÛEUc3¶¤½úH—Oƾ«™•VC[ŒæäwM¶‘í i&u]N¹ld`ÜöM`ni0t·ÊQc6'ìWqÄÕà ;ç%´8¬ÏmG{»nž~±ðGzd/ÓÁÂ"Sæ^N¬K鮊s¨¾ÌsC¬eT‚fû w¾" e"¼êðp°2qö±Ïuž÷4v³ôdI ñ+¦Û›1ö;¹‰š¼HŸç<¥4fÄýŠî&&¯ÒùÂC O¥tÛùKâS”8†’3ÒDzµÔvùµîòµQ˜ÌnŸVE˜Žõ,¶ªÃ‹·O±ŽÔ!ký[Ä~>kSïµö:w0Ðgàµ6æÌ}’îyš£’'ùÏ)M±?b»‰‰«Àþwαã„$%Åt(_ 9Žzy±Ë€”¸¥ÂtÜËo®þ6píc:·Peý¢Çº¬V÷Aö¹Û| Êø]QÈ},²i®Œ]Àî`÷Zæx꺷}­²çbÚÖ·—“T üçJÇ?X{ñ™…‰{”ø­Ö´5® á[·Áwáæ£ž<@k:»Û¹¿âØÁÍó$ØY‘ôÆ1…ùDý¥Ée·$Ô.¦»Ímk]›An®&It8hH[ŸWê,Å{ÝŽq]cµa. íÓpÕ²úÃŒmk–¾ï³¶Ý­ôÍ›¶@~øóø%_ÆÇªën¢ö7ÁM ŠäXívif¿$ìc%ÅîÂý«yŒœÖhw”xÌeÖÎÑßaº.´'©tÝó‡…²³2ºž#{¯Æ´þÎ#Õ|0†h~¥Ã];&¯¯Sp¼3ö?¯ZÖÚÆ³kH$ þZ)#“e3Æ=FþÁ_±¯<9òbÄ)V(ð“Zzÿ¤J·Å»#|³ÄÀ‰\õ]1ø¸» ²ú¯}ùÙo,%ÛeÍÚC‹ˆ:vVq>±Ó^8~eV ‹E×6¦ï±ÐXçk¤ˆ+W7¬ããáúž•××}&ÆÙK744Ž\I ÈqÏÕÅ·ífÄ9®^ázä4ŒAñ·šËé¾£ÎS^>Óš®ÑYl:Ý‚]êž!^Èè=fÛ”êÎÛs_}Ô´±ï,hÙIÚçltx‹ÕzæÂÁØç=×[^KXÖË…m¿t¸vò[½ ¨ÝÔúss­¬V-sý&¶~€0Ò|ôQ{xÉ I;³žk›„=ÉcŒb*¨Öý‡ø?ƒÏ?êîCiÇpƲúßš2rix©¯ !¬köC»‰K/êîm™¹}/û>NÖãú ¥Íe@hßÒ9¥uYwÖì«^Mí«Ø,¼<9ÖHl{AG*Õ_Y¶dä×–Á·ÕÐÆÔ ŸfC›½ícO`›XRÉîsÑׂ$¶çS·qa³ÖprõzΟŠÏ´\je,#XÚ7â8‰Y™6«qƒŽ=,[KKKZ’öz@Á#âIZ#ëOL4z›mõ}SömŸ¥õ»f8óWðsY›G¬Úì¦ZYsv<媈Hèz ¼±ÉÌàª)Ä73'ðyõk©Ðê™en¶ŠÚX*mVlq“`"ç0 OÒ™>«qÆ&;ï}4³Œ¦Õe`;‰ŸSs˜0ÕÙ¨]utTû­;k­¥Ïw€JÌ{•ßé,äLOJ­ÉU,ÔÊÃCCÞ€¦±0~´àeÑvcˆÇÄ©Ûìw¼»·°Ïh%\g\éVa;=¹ 8Ì;_f£i˜‚"{§‰ÄìCZ|¾x’%ŽW|;_¨ôóh}qa6¼†‰8÷1ÿ)Õ®tü®¯Óñ†ëkÙmylíph&ÐOt>­ÔúwM²‹3Úï.­¶jFæCŒ@ì‹ÓúïEâbW˜Ë,´ ꉗ탦Ÿ4ÃÂe H©Õ±z±J8çdžs:À× Ø\~£ÑºÀÅÎõ/Ëê÷ÒÉ 8±•3_vá h­¿êÿU¼eä_e ˳ìx¯w§[Òq%»§äµ3:÷JÂÈû>Uâ»DH!Ä ÜIúÇÓV=(9Æøø–:!“Ìëá pã½eá¿UÃ?6b qU>.Ñ#O ˆrÛõkªâ¾ñm¼¬jñ¬u›÷3`ÚâÈl“ÊY_U³ÿGF5”Û‡F/¡MW¹í ³½›X3æ´úÏÖ N•e4X ïÈ0Æp˜Üçkà …Y1™Mʃ1Ú]`%áÖ9»ËZÙÐ cŽêÿ–éŽntBÁ²ª…÷5³ŸGÕ®«ƒf-¸6ã—S†qlõwÀq;‹Ùµ¾+c¡tçôΕF…¯¶¶ŸQ͘.&IoùÁÑþÈÜÏ´·Ðs‹u’áËvÆéù*ù_Zzm ıŽõ)Ë{ÙêêÐÁ_Ó$:x'Ž:ƒÓ¿v<’æóŽ c:Ë_E(Ù¢|,µÕ¼÷tlœm_hÍÊ7ÞùvÝ…áÛG¶gk@W0:>V!êv—VnÍy4L5fÊôíä´p³±sñÛ“‰`¶—HÈÐò³º§ÖŽ—Ó½ZýAvUP>ÎÎK‰€ÝÑê— #R¾š@ËÍe”±)JåA±¿aé \?«yT~Çcß[«é¢ÇÝÒûž4s}¼OŠ•_Wr›õ7§ØúÎ^kì°Ø ¶n{¥²v΀Êõs‹¬¯%쥴VÇÜKŽæºÏ¢Í»uB¿ë.ǪìIÉ7d7¬Òá:ué_±¹ÎHƒÂu”f—fc]¿Jܳõ;)îÃõoc„”Œ»u¾öÙ öñíU.­õgªçßš}ZVFÖã`4°} Ö5»WE‹›‹–,8Ö EO5¼·€áÈ”t}¨çâ³ïüÌf ¡(ô1ª³Åü¼ŽÑ­ÅêyYv¹†»*ªŒv¶e¬­°é‘Üø,ܪy8×1—W‹} ¸Ûë8Ùêí.Ü=±³rêRGÛŽžø¬æaÅGç‰ÿPRI$žÖRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”˜ð1á%9ýkú+ÿâ­ÿ©I.µýÿñVÿÔ¤ú*q(ÃÊÎÀêXx¥­ºêqòC@ô›»PÙNΓÕ[Ô*ºGڰ݄ѹãpÛ/±Þ˜NÏ«ÏeÅbÿç¯äûO@>Ûµ–‚4gÇåóQÊ›6Ï‹™ž8pDF¬EüÔäâÕõsª}¯ívZ×XÜ;*¬Ùcž}{nú5¿º'Q§¦tŠi§äVëÙ¹ÎßïFÖ~ó»ð¶²zÎ&.U´Üö1”V-¹åÆZv·Û·¿ÅSê¤ßƒ}˜÷ ²>›.k"CE¬;†öÁˆÿR™ÃŒ^¿òìØ÷ù¹ŸnÆ•Q5¨ mýæ•ßVs-Ìê[UœàZs«@eôÝ1Ú¬.ŒÜ<ü¼œªÙh·cq#Ükª–Åû`üq>³à[…öü‡7î-¨]a#XÖóð•bÿ±õŒR›Kñlc²§º·v:9¥¤}QŒq“`ßé-Í›šŒLrDÆ41šV—µú^wêoLº×³' îÄÄuŽÀ¹Öu°âï 5VúŽw\=c(`䲪0…M=ͱְ¼¹Æ7à›óWº7G¢®‡ŒÛ-}-¡ók÷’Y´Ì±Ð è v@Ïè½Kö­ùø¦Êr…bêl%a©»C˜à3ÁŠt`#êÁÌsÏÌŠöËv=+ëS²3™‡Ô1Û‡eÇmE¯{åã–»}UøèD¼Iú×ןÑò¾Æì|¬Ü_­mxuz¦ºÏ³ÜЋŒê=Háu¾Ÿff=캗ŸÕ 7\íÖãíÁÚùƒô\·>³ô>­ÔúņÚoÌé§3ŒkÛCÞíç&K\Zt²”l â¯ÒîÂßËúÿÐñ›ŽæW“”31Ne­åÕµÛ\Ý»Ü5'´Túw×®‡Ôz…8þ´äÖëqò^ÚlØÝö1'W0}-7Õ¯«}c'¥Y•°bô{±-;˜vÞû·µž×[ß….“õs«ãWõA·c†þÊn[ssHaº§1“Îâ{Jr~™õë£õ<Á‹MY5ú±ø·ÛVʲP—š¸îÐN°ÓÆ7Bê9tÕN]LÏw§“u;i6ëú/P8ûôì¨ôn‡Ö°z©û#úoK²«†n—¶üP‡zNÂ×{eßKpn‰Qõw«3ê×Õ|=3?üÆng²¶MŽ™ƒô‡ )íÖ?\:e½W+¦6¬€ü=¹y±èV+g©¹önÐ8p¶…•ÇÒx\µ_Wº…Ø¿Z±^ÖÐî³u§×ZXú[[\í’@Ü’›ÝëŸIë9_e¢¼Œwº³v;²j56êš`ÙI$îj‡KúñÑz§S;·µÏõ>Ï‘e{h»ÑþsÒ²uÛæÂú½õ?¨QŸ‰~gÛ·áQe;òòë¶–ºÊÍDcW[\íýÛcÍjý[Ãë˜=/êþNk«›)·¨z­,$îØêXÐ^wO»vØóIMŒ®Ý¨õ&ôúÁkß^6]•ãÞúþ›i²}ÄG‚Õ¿­­êv³-›rî9.¥ìnÚœÌ{;AsÉÞ¹îõ#©aäôÚ³~ÛgìË…¥ïËgØFÂv»޲Oîߊ·GÕÞ»‡Ñqrqhoíž›Ÿ“‘E.{@}9{^Íà71Àü’Sµ‘õã¤QUözY:œ³ƒUTÖ,}÷4np¡­w¸7¹0ˆï®}½ öá6úþ‰ÇÙúq|íôMsôç´®¨ýHÏoNèlǶãgL7?9ØV¶œ—Ù’l}/²wþñ'«ê—RÆé4Y]–eQÕÕ—{mºÖ±¾™k¬kÀóÌIùÉ)Øú¹õ¢Î»Õú¦3j4ã`·ÖËk½¯µ¯62æ’`´¶4]"澯àu:þ±õ¾©™‹öJ:ƒq>ÎÒæ9ÇÒcÚðÿMÄ ×·+¥IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IMn£Œì¼ ŒV;c®­Ìð.±0>¯õVd`;:Ê=ŸCé­´ïݹÀ4?ÜÐ8]"I¦OFl|ÆLp”#U+Üj,pšú<ÆÕž¤Ú°°²í£ì87Á¯w©cƒ‹™»pA)e}TÉÉÍêW¾ÚÍ9@»³»Ûkš½þÞÑÙté!íF«ùveûþ~# @&öåÄO™/7ÿ62ÏI§ ÖÖûìÉnN}¤º¤µ¾ßùÿWº†SúµŒ²¡gPUA%ÞÚ™ƒ¡¼Ÿ%Ѥ—·9ìÀñX»âÛ¼„¿îCÇdô¡SóèŶ–âæ9ŒsŸ»ÔkXÖ‚ÅWê]'0ú­­Øþ‹)Åe®è¶€ÒCZ6’|WK•ôßÿÿ}j­Õ¿™¯áÿ~ ã u½|P>!œHccú»ùÔCÎõ/«ÙÔRÓMµïm8’íÛšöÛ´Àãv«³éØnÁé”a´‚új v—Ƨá¹fuoè˜ßør¯ý¸[Èp› rsY2ÄFu¡mM óŒú³˜:6'N}•—·(dæ:]‹ˆo·YóUìú£œðÛÜú,ÉVäY[Ëý'6Í%­Ü BëLö£û>ÆAÏçGªR‘Ó÷·y‹~­e¿´ lse¹»_ÃÇ€]Ç+k£adàôêqr®9V=Ö<ž뢺’t`±äÇ—šÉ’ªââú©WÏ®ûp¯«´]enmeÆá˜XI8°Äѱ·œW³(¯£6¡U­é›Õ9Å¡ÏpúM;LÁñBwÕŒûqm®×R›œÜ¬¦´»`©¿˜ßf§î]BIžÔ—ØÙöa­‹»ºþ±—æ\lŽˆ÷õŒ|º™K1qh°WW¦~›¶†ÄGuGê¾U5tšì5~§sòrÜÒ}Ï:·g´N¾0ºt’8ãwü¿–ˆæaE_ô‡ýÑyn¥Ð:ïRûCo½›l¹¦¦‹ÚŃ‚½]§r´ºoLËÅëùv¶³NNÁKšã¹¬­»ZÒÒßâµÒHcÞ·ü¿Š¥Îd”:ˆ‰4vÿ½^WLÈÈëØ™î,û.%O¤ÆÇé1沨èr§ë0U‘}×å ¬s\í*þœÀ+©I#ŒuÞÑo$b"HÔt9[ÉÓõW2¼ i³iÊ®ËonMW9®m–åWî@’­ãtNªs12³ì¦çâãXÂ[>ëÞ~”l#ºèRHbˆïÓð].{4®øuâÖµW`v¹ŸWúeÝ/¥W‰qi¾^û $·sÉv’ǧê×T8•á\(ÙößµdÞâû¸¸ôù×Åui$qÄ€; [s,e9éÅ’\gOÒ×oµæoúµ•‘~mÙ mŸjÈmµ>»K,­µ¶+ –>ã!ß«}k6¬J³²™ú»í{SQ¶­v "5+ªIj>?ËUãŸÌ*¸}?)«¯O´ht<+ð:]™ ¬[Kv¸Õ;]éj©î¯¤’xìÖœÌç)äLÕI$’+T’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I ÓSŸÖ¿¢¿þ*ßú”’ë_Ñ_ÿoýJIߢ¦ŸÕ¿ç²¿â±óÈZWOÅÔ¶Ý!Ðto$£çòY¿VÿžÊÿŠÅÿÏ!hß³öŽ$ý-¶íú> Ÿ¥îÿ7æšwPqsþ­gæefÚçU³3"‚eΑO-ú?HžÊ=S å¿ö½Í5°õF>0ipÚÀ惿c4’{våu §RÙöa¿VŸÝçÕd}=9ùøj™íGíþ_µ´9ì¶ô€Ÿ»ÃÿxÇôlÊz–^;jºœ·eõŽ¡Ó)u5ÓFM~uç6Æ\)€íß’ÇoXê_ëÕÛžúªc3ú–?¦Ö8‡7Žl»ôœ–h<¾IÊ} [\Ã[µkG•ÇÛõÇ«Wƒ‘×Gì¬LÆür]빢юnýîwÑÙóFÌúÕÕ1þ±;¦ZÊ0ª66¼1”Ûܦ˜.uyM–1ÀÒÃñIL¿ñ¯ú‘ÿ•çþß¿ÿJ.žš+¢šè¨m®¦†1º˜kFÐ$ùÆ}fúó™Òsr©ÆônvCß]VÞâØÝ6Ü×VÊ4òt+‡ë•ØÌêOΩƒÐë¨`5² µÜØ&\Û}²9‘¢Jz¨JÔÿÆgLÉ;:ÌlLÚ1ª¾òú®±¶ÛhßèVÚ‰5í¸Ÿ‚ëº'T_¤âu&Öiu ='-'–Ì „”ÝÛâŸhN’J[jm¾jI$¦% ©$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)ËËúoÿÿ¾µVêßÌÕðõAYËúoÿÿ¾µVêßÌÕðõAJ>P´îÇ«DÆÿÕíÂÞX=[ú&7þ«ÿnòŒô\I$R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤Ç„é )Ïë_Ñ_ÿoýJIu¯è¯ÿŠ·þ¥$ïÑSOêßóÙ_ñX¿ùä-÷þÑÄ£¶ÝßKÁ‘ô}¿ç|–wտ粿â±óÈZ7ìý£‰?Om»~ƒ'é{¿Íù¦ÔЧRßöa³ŸVŸÞãÕdý xùxè­ªKoÙ†þ=ZwŸU‘ôôççáªJm,š÷7pqkš×DA™j‚(Q°K²ýhéßVñªÉÏmY鱕çp\çç7Fª@ƒr煮š¾¢_OJûV³+¦PìWä2¦ŸV—¿{›±Î!¦{ê§…õì.鯧¨?Ôé™—å5î¬c2t²§KÏæé»ð]MwTö6ƼX˜éЃ¨!L9§‚ *y+~¡6ÜçŸÚ6·£Ý’3®é;±×¼þ–w— Û_ê^OVÏ{ïê×þ˺Úï·¦¹x®ô­s¦°c€Q¹¾#ýÉäi¨×„”ò_ê&VuýKì½bÜ,>®wåâ6¦<:ÀÐÝÛ˃¶˜Õ£•s¨}MÅêtk.¸ƒÒCð!ŒØC7h7°;ºèô:w ¥±2 ðRSÎõŸª¹YÝIýK¦u;:VMõ7,×[mõ+i;~™\'G¹ƒŒ11iÆ}¢–z–çº;¸žIG€’J]$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’S—•«Þ¿¥ÿ¾µUꎢ¸3ó‚¹{Ë-{€ŸÒÇýª=M›kk¦Kàü!ÁJ>P´î¿Vþ‰ÿ‡*ÿÛ…¼°z·ôLoü9WþÜ-åè¸.’I ¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I ÓSŸÖ¿¢¿þ*ßú”’ë_Ñ_ÿoýJIߢ¦ŸÕ¿ç²¿â±óÈZ7ïý¥‰Gm»¾—ƒ#èûÎù,ï«ÏeÅbÿç´oÙûK~žÛvýOÒ÷›óM;¨7N¥¿ìÃg>­?½ÇªÉúñòñÑ[U:–ϳ üz´þï>«#ééÏÏÃT”Ú ®w-ú3µû}O£»HV‚±éºxƒááæ’œî‘öŸ²ã›ö}¬ã×ö[êG¿èi3à±:ÅötÞ«veN¯0PY•«Ý[69¶;5"7rº^šÖŸ‹°C=öý6ˆþoÛþnˆïk\Ò×Aä?•%>}UǯôÊçVËàïy--/¥…¢N‡?¸+}w3ëÖ›pñqéÊÅ鯦æßkªo­šÂ×¹•[îm}£ºÒÏúÐso­ÿ¥ÇÇi—bRðÚ]îcÈÚA-°NÂAV6=/²Êjeo½Ûí{@G&lb"M@6 |«+/ åàôî‘Öñé·¯á‹:{®ÈÉ~=WC‹EÖ–nÞJÑè¡ýYëÝ2±Õ*ÈÀý’Æç—4Vûǹ!Îi+¸Èú¹Ð2®}ù]7û¬2û,¥Žs‰%ªmè=´×ŽÞŸŽ)¡þ¥5 ™µ?žÖƇÍ9O›`bãu›º-åç/©urö‚æWö˜ ÃB—ÖÃ×:°Ëº¬LžœigH²ü«i}5†7c¨¢º¬õ·¥¬¯NgJ鵺·×‹KKŸeNk oóŽiBîþ)dt¾›•‘^NN%7ßOóVØÆ¹Ìþ«œ )ã«ë8?ëZTÈe6äôì7TÓ#Ôsk³x©¤L»ˆ•ÏÝOK»êçAQÍaôºs짦_e˜ì±ÁæmfK=¢ÆðZez•ý7&úòr1©ºúAZö5Ïh<íq¬è}ìz±®ÁdzùŠ[\ÖQ¤@ù$¤V.Wúuíõ¶¾†ö‚lF›ÜdùÂÖQkƆ´µº5£@RIJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”ååý7ÿÆÿßZ«uoæjøú ¬åý7ÿÆÿßZ«uoæjøú ¥(ZwcÕ¿¢cáÊ¿öáo,­ýÿUÿ· yFz. ¤’H)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRcÂtÇ„”çõ¯è¯ÿŠ·þ¥$º×ôWÿÅ[ÿR’wè©§õoùì¯ø¬_üòûÿhâGÑÛnï¥àÈú>ßó¾K;êßóÙ_ñX¿ùä-ö~ÑÄŸ¥¶Ý¿GÁ“ô½ßæüÓNê ÅS©ïû0ÙÏ«Oïqê²~†¼|¼tVÕN¥³ìí?»ÏªÈúzsóðÕ%6‚E›FÐ /ˆÐΤ"…OªaŒ¼wTíÁ…Žk‹êµì‚8ILºuŒû-4ï ©…–ZöÄ4î~‡âVQÍëGªæ ¦Õ^¥¬Æ}aÕØmi{c¾”À+£ÕWFÄÆ/°ÔÚµÞ³ËÉ,ÚNæ¼Àƒ£C vCê8fæu;+µÙ-¨ [A¬T6Ϭ7v35Þ”¬/­]Fõ~á.Ü"ÆÄ3Vû¦yã©u?¯ é{;2‹.ÇÅ¢›«û5eöýÞ«ì÷@c ›ê=Iø]k§Y™{2)yýOnë]6ãíAÚùƒôJè:†Ö,O¬}S©tþ˜Î¡Nn6>37ÜÚ áçPéu&@ÜI⮩.ŽW×^•FV-Udf?¨ÐÜœcŽÀðæ9ÁŸ¼‰“àíúáÓjè¹]iÕÜq±2-Œ»ËÛhÇ–ÑãÂÌè?UóúOXé&À.ÆÀéOų @»®m›ZÙÝÄê²³ú֯ؽOêý9–Ñ~aË«4^Á½¯ÉeûQ @Ô—'¡ÜÏÿ}3/ÌlË]`¯.ʪß]m QÏ€Ý~*ÇYúïÑúMµTæ_˜ûj.µ›=:Y¨ÚÕAý©»ëuBÒugØp†æþ:[u=Þ(é?XúVIËÀéõõ#Ô:~6õ:æÒqßC %ÁÁí;»$§²ÅÊ£3¬¬g‹(½‚ÊÞ8-pQVoÕΖþаºe– lÅ©¬{Æ€žLy-$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’S—•ôßÿÿ}j­Õ¿™«áÿ~Ù–±–X:Y: üÖªY¹lÈckcNá {âOÈ)GÊÒõoè˜ßør¯ý¸[Ë«DÆÿÕíÂÞQž‹‚é$’ RI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”˜ð1á%9ýkú+ÿâ­ÿ©I.µýÿñVÿÔ¤ú*iý[þ{+þ+ÿ<…¥qýA#mºË€7Óó?›õoùì¯ø¬_üòüùO ÈÛ´!¤Á'pùŠiÝA¼ªõãBKV€¸…gî×]¥OªÿEn ~šHiÿ _ï?×MRSl(Ûôð?‘H*½G5˜tºëçTÖ¹Ï c¬qˆ°yðILúyœ cMLÐ’Hö xûõQ·?¼ªðíÈ®¼›Aut¹à=ÀrZٓ¡ÒzÞ6GKÅÌ®›)Dz––ÒÚ¬–C7mkCA-CH{,^§‡‡™Öº­W³sÇÙHv’é“t‚$N¡#}©ëÈÉn£¹‘-Ìà¸O„®§gåô¾µ‡ŒÛß‘Vc‹,¾×»«kOé¬|8z“í>Q<Ÿ«}¯ýzêµõZMíÇÅÄu@=ì‚ïP;ù·7Á6$›p‘¸*{ih¤GdšæžwÀ¯0úÁ[úwFúÍõ{Û/ÀÃn ØÍµåÏa¾æo¤?÷}ºN©ºwI¿¥}aé7~dzêÍVä ŸxË9m½ÎiÙŒæÉ|rœ§Ô$“¯ž‰h i'²ó~±õ~ÚºŽf_\ÀÍꬺ×ÙÕpo>¦=|µ­ÇšãUæ[™“õ³¥?¢f3 YÑ\FfcM›«õ›ïs+uRò`vIOx8L]ƾ%qXŸ[úöe/¶b×Ôú†^^5¶–XêÌ96=¬õâHãܨõ^¯Ö³Î6Cè§/ë 8v¾¦?Ó°í6Rý¦Ù ƒîlê{„”ú*KŒÍúÓ×èúÃgKyÄÁc®k0]7ä×¼·%–lðnÕÙ))t’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’INc¿¥]ýûëQ¬ìÖéùŽüˆ/þ•wõÿï­Fôk¨ïȤý½\Þ«ýÿUÿ· y`õ_èxßør¯ý¸[ɇ¢àºI$‚”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥&<'LxINZþŠÿø«êRK­EüU¿õ)'~ŠšVÿžÊÿŠÅÿÏ!i]?oÅЙmº‚è7Óó?›õoùì¯ø¬_üòüþSÃ2>ÚÙ:3‚Nï»æšwPo*½@‘Ž úZ¸.áYû€Ÿá㢴©õOè£P?MF¤4ÿ†¯÷ÈÇÃT”ÛWÖ7ÉhtDk#Q¨>¡FÑ,p@û¼ÒS[§TщCÀÛ4° ÀÚÖˆk[µmn©õ{§õ>Ðàü|°Xä2ÂæºCšñÚÓ çN­õàcU`Ûeu1¯lÁ ¬%£à4XýOë=¸=FÌfáºìlpÏ´^CìšÖ5Ão’ç7ÊP$gO9™ßTºïí|\¬ ŒgSC÷z—µûÚ ê{¥ŒÒÃú?­›þ®zZþ«Ôr°²2«®«›H¡Í-ªviu6Î=ÕŽ×zQ³ÒÆuûKÚ-ªÊ·4hK=V·tH˜YÝWë¦7Mê–ô¶ôììüŠË,vBÖµ¶Ilûx!>¡ÕJwÔŽšþ—ŸÓìÉɵýNÖ]—š÷0ÞçTæ½}0ÀÀ#j3þ«ŒŒÌLž¡Ôó3†£"Š-ô_ªÝ÷ i¬³¦ªßBëØwÙeÍ58×}6´²ÊÞ?5í<¤#MG’ržy¿TQËnTΣ9ï¶ÜzQ`uŸL×êR÷2|бӾ«tî›™‹—Šëp°Î5’ MeâÝÎöî.‘â¯õ.¡ONéù=BÙ}8•>ëZÈ.-cKŒLk¢ý_ŽŽî±fáŒÌµ¦ÿOg©Äó )Ë?Rúx¢†S““EØ™VæãäÖkõeä›î­Ì-3Á 7êOOn-t}«$Ý^{z›²Ë«7?!²|×¶ ñµnâdד‰NS=µß[lhw < ûщhæJyþ¥õ?ª]aÊÏÌv-·3 áÖêšúà´W¾§=ÓP×.€r–‡P%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’S˜ÿéW_þúÔgÿF·úŽüˆ/þ•wõÿï­Fôk¨ïȤý½\Þ«ýÿUÿ· y`õ_èxßør¯ý¸[ɇ¢àºI$‚”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥&<'LxINZþŠÿø«êRK­EüU¿õ)'~ŠšVÿžÊÿŠÅÿÏ!i\_ÅO¶Ù ºä·ïù,ß«ÏeÅbÿç¯äò¦ {nІÉÑœw}ß4ÓºƒyUêöqŸÒÕ .ùÖ~à'øxè­*}PN(ÔÓQÈiÿ _ï?†©)¶.¨-5CªeÛ]éºö—Öíå¡Ì<ÕСtzoþ©çáæ’œŽÞ«ö={qþÞiiÈ{+%›¶ðZËupw$=€Ybû:oUλ2§Wƒ˜(,ÊÕMlØæØDìÔˆ.€WGÒÚMÄô+Õ¡ `ìÉoÝ¢°ö‡×AäBEOŸQ{±¾°tÃŒ÷2»à}Ä´´¾–İó§÷©_Ué;ëßXv~]8‚ÜL1YºÆ×¸Rvî"yVs¾ }_̹>¶= 2q)xm.÷1äm-% – ØBÖËè=>ó‘›Óñ²m VÚ˜÷@àK‚hˆÖ€ôüÔ^7?##ë‡]èŒ{+Ç¢œŠÁï¯Û‘s#ÁŽçÉWúŸSðßÔèoTÄfús­¿ökò2Sâ‘6‡d-ä½2œj(¤cÓS+¡£kjkCZ€hÑ ¦tìØÌ,Z±›i›SÀâ{»lJrŸ+éc ëì˪ÞuìÉÅ±î¦ÆíÙ5\^êò öpÙY¶†åtn±G^§R£¤×MÚâÚ~ÈÚÚöY2Û7É3ð^‘OEé4Uu4acÕVTŒ–2¶´X;Àïš›úfŽ­ÏũΥ†ª‰cImn\Æé£HÒSçÙUt+æïNê¹Õ·tÇ[Qm®eOËd>À5²@ž~åE×cåâýTk&Ötë.ê·"Ç–9ø»C)õ§µÍ€ãáà½6ÞÒ®Äf ØtY‰Wóxî­¦¶Çî°ˆ ŸTú¹ÔzLÊ·gÙúhÈiÄs™co¬S·˜¿”æÿ‹×·ö~u8¶>î•Fmµt»l;‰ ýZ .­ œj™F=l¦šÄ2¶ÖäЈLjRRé&N’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$§1ÿÒ®þ¿ýõ¨Ïþoõù_ý*ïëÿßZŒÿèÖÿQß‘Iú+z¹½Wú7þ«ÿnòÁê¿Ðñ¿ðå_ûp·“EÁt’I)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJLxN˜ð’œþµýÿñVÿÔ¤—ZþŠÿø«êRNý4þ­ÿ=•ÿ‹ÿžBѼÚ8„l€NÓ£> #á$,ï«ÏeÅbÿç´/-ý¥ˆl–Û»†}\ÆM;¨7UN¤ Æ\«OÑ$çYû­wÏør­ªH´càÓúZ~:ÏÞs~_Ç„”ÚWØíÚIx?F5:¢…S©b7*—1àšË\׆Øê¬‡ʆ54ÖçXÆTÏN×ïQ‘ ~æ’ ¬.¥—ÖÔ:…xy††ãuíd~‘›ÜCœÇjc¼éà¯ôŽ“_KÆ¢¿U¸Í¥ž˜7½öAdkcàxiÚ?7²¯Õús²íê=2æú× ño[ý1µ¥–4na|A@‹ÒšÝë[ú…X}MõîÈkvÔúvØØöËŸfýÓΑ§ˆAγëGQúÕŸÓ:gW3 ‹C5Wîu»çW‰GÅsÝC©? ­të3qïfE/?©íÝk‹­ÇÚÚµ-|Çæ•¿œ>³ôß­yÝK¦tÚxÙ¸ôU¿íÓ´Õ¾t|“ô“`¸’e_¤z©³Ò>±åᎭ‡õ–Öú(e¶eÖÝ­¶‹D±ûÒ !Ûõß?¢u{z{/Áê8vd×V]A۱ήæµÛƒ›!UÕ^³ÕºOZ¿ªèêÝaµ ¨aÝ]LÆp}59Ãéáî(6ô­`uN£Ô°kÂÊwJ·¦aâWc^l}ž÷<¿F´}ž§f­ø•àî¹¶å]‰€ÜÞ¡m-nÆLY°’Z7¿Ð¯[õ“ «º]Ne›ºÅv[Ž@ÖÕWڿݧ·Ãºæñ>«uŒ,¾‰‹X7«tâ\àãœjô߹빝ùÇm1:gÖܾ£Ðmê==˜¸ý&¬œwìµ¶]è²Ý#G˜Ù%:Œ¾ƒ{ks(Ë›é6ã7Ñ“sÚêjÚNçŽñ§š¸~¼tظý^¶_h˰ÓF%uîÈu êÅ`ò#]VOGú»Õñ¿æ­Ž:K2Æw¹§Óuµí¯ƒî—x*v}SëŒé¸™ã›2úPÌÈmÈ8ﲜ—;V_Kc¢))è/úùÑhéýYí¿ÑÈÉn«Óý-WC‰m•̈ÛÚVG]ÿcö^GLÇÊÇê¹Qm7Ò•6×N÷±Ä€×µ¥­?¼B…Vz·ØºmŽÂm»­ÓÔs(¾÷2–1ì/²Ûìq{ø¿rŸÖ?«o6ÿ¬VâPöÖt㈠ÚßQدõ-o>ØóIN÷Iê–eõm³Ó¢Œ[‰eMg¥ë1Î>ðKœLjÂÜ\ÿFéýB¿¬ý[©åQèÓF«Ü×{ëcÅ­ö™ö—BèR’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”æ?úUß×ÿ¾µÿÑ­þ£¿" ÿ¥]ýûëQŸýßê;ò)?EoW7ªÿCÆÿÕíÂÞX=Wú7þ«ÿnòaè¸.’I ¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I ÓSŸÖ¿¢¿þ*ßú”’ë_Ñ_ÿoýJIߢ¦ŸÕ¿ç²¿â±óÈZ7ƒûG˶†Û ·†rHøI ;êßóÙ_ñX¿ùä-ÈGÙ-¶ pÑŸD—ñ€SNê ÅS©‚q€Àú´ýAþu“ôZí<‡*Ú©ÔˆÂCOéiú@üë?yÍ×Ãøð’›AFßæÞ?’"TúžXĤÜýþ“çr\ItíHÓ? šÜüòk÷"¶dÚ «¥ÏîukfO ?£õš/éxÙŒ®ÖcÛK (ºXC7mkZÆ’Ø Aì²:†.W\êµäÔÛ^>ÍÙ¾™:øê'P‘¾š©ë¡¤‚F èHN@ø.¦çåô®µ‰ŒÛß“Va,{m}ö‡1?¥±ðé²}±§Ê/už¡õ3¯dôΑV-7¹>£†÷[»e@Ÿ¢!¼„ØÈ›±DtQzÁGˆO ;«fõûkú½Ñúncq1íé®ÉÈs«e‡Ù‘´íÜ&HöóÝhäýfëLú—Ôº«/3¨?›v0í¬e2Ý»vŸa„å=Ä¡p=C­}oõ~°faæS^AÈÜÜwÔÒm­µ¶ÇÕ¾%  AæSýhúÓÕ™‘ŽÞÔmÄfUx¸øßlÈyxÝú@á¶¶öRSÞ¬i> ö…Âý\ê—õ­+¨d-Éè/}nÝö–‚@ù+ŸXúÖCõ‘½'£æ3³ÓlË{¬­–Cë·ná¸wѾ4”õÛDB[Bàú?Öo¬vgôL¼ûê~\ÆÈxî° NÆ«ÔßêrKþà—KúÅõ YÑúÆvEWt¾½“öf`2°×Qêoô\-»èû¥%=Ù†ë1ñJW™}bêXú¿CÍêÈ­½íìů0µ´ä±‚ßTk¸¼Dq }ý«“õ³$\=n•}õá;c=eL{Dm‡A?))ë·küWœÙ×ò:NGÖN²6¿(aô­¥ÃÚ,½ŽnòØIê÷×­—ûO-+ åáÞÜs6ƒ±Ô:²Öή’ŸAIqÿQúÇXê6ä7¨u³Elo«Cèû6V=óî­õd~rìR’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’INcÿ¥]ýûëQŸýßê;ò ¿úUß×ÿ¾µÿÑ­þ£¿"“ôVõsz¯ôBÎú·üöWüV/þy FòQÄÒKm‚@Ü4gÑ%Àü`ÓºƒqTêAÇ—êÓ«IKYû­vž?ÕmTêD a!¤z´ý ŸU‘ôœÝ|? )´îcKKÒk\óøø">ƒ‡ˆ"Á%5ºmMn1ˆp¢¶À@£M¡¬óGÀ æô>™™2í¦2Z6‹«s«q¼°ÃÉÒ­`1ÌÁÇ­í {*c\ÀÚC@ˆipäV7SúÑfQ³a:ìlpÏ´^CìšÖ5ÃiÓ’ç)@‘ÕNFÔ߬´1íéùÕRéW·ôÌ—Ôò}6·Ó°OO¢º 齃yyç¨6Û±o¶¯³äº‡.§³Çg6š/Në½;¨Ùéc:Íå»ÚÛj²­ÍÏQ­Ý&8Y½së¿Mè¹¶aY‹•—n=^¾AƬ=µVA3c‹„}Ô5¾ªlôŸª};¥_‡~5–¹ØŽÂ¨<´ƒ[ìõ‹ éU²¾£t¼œlŒ3“•^Ußj8Ì{v2íâÇ=²ÂíObHò[¸YUåâÓ•\†_[mcOÒ x÷£‚ÓÁC•‰õ¯§eþÈôÙoùp\ìY(i±Þ¦ºHá%-Ò~ªôî•‘‹‘eÎ~°*- Ôlõ·:=Û‚·wCÅ»«~ÖsÞ/û#ðv‚6zox°˜‰Ý#Åh‚ gB׈ËjÆ-÷6özoõaºéÄB†'Ôî—‹n1ßn.†ì +4ÑaŸs41&7¸Çe¿-ñ4‰<SÍå}HéyßëäÓ‰“xÊv-o›o:Æîkî#VÎß(™ŸSz~_í}£"Œ~­.ÌÆ­à1Öª74¸8¾!t´r@JJpõ?£¼f‹Å—WŸV571Έb)s Hw~UŒn„Ê›p¿3/*Ëëô}GÙ°±ŸÈ Úü¨Ý浓BJr:gÕ¼\ û:“ò/Ìβ‘ëä— Zw~ŒÔ}'Ió[ “¤¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’œÇÿJ»úÿ÷Ö£?ú5¿ÔwäAô«¿¯ÿ}j3ÿ£[ýG~E'è­êæõ_èxßør¯ý¸[˪ÿCÆÿÕíÂÞL=ÒI$¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)1á:cÂJsú×ôWÿÅ[ÿR’]kú+ÿâ­ÿ©I;ôTÓú·üöWüV/þy FðOQÄ ºm ÚtgÒ¤|$…õoùì¯ø¬_üòü€ÃÕ0ÉÁ·m'C&=Ãþ¤ü“Nêo*H8ã ¥Ãô´ýAUŸº×iãü9VÕ>¨q[º#Ö£ŸuqùÍïç÷ð’›aQê͹ÕEWUÛ]龿ï`w·–îl鿝 €5¼6ž~ )Çéõ°P/¾Ú–œ‹\³vߢZË ¸;’ À,αu7«g_™[ëÀÌlÉ€ê·VÝŽm„NÍHÐ é:[Þ›ˆh¢°â~s¿)ø«k^Ò×AЃÁKñSçÕ\ì~¿Ó3Ý[÷C‰ii}, n$m‡?¸@:ïFé§®ýnÌ4þ³GJõ«~çéeÔÝ]ŽÑ«t‚»Ÿª?Wrl¥öa06æé¬šêúAðêXC«DÈZ6tü;sßSŸ’ÏO!ÎcI±€²ÂG¹°x)±ˆ‰4hSÂt~­Òú®YϽ´ ú6Ç0l,©Á±ùÎ×€±E˜ßVú½5ö³6ÌþÖ4ÁwìÖXw’0à]ípוêvt¾›c©}¸”=øÃn;[ ¬pdoÉ==3§Q>†-5Mb“²¶7ôbb¿hú:”óÕàu›*v léîú¡f3륕ºï´šQÙî˜ÕÄIž+Ñ:LÌÃú‘‡FOíµ6»Ò_èþ‘¥Ívá1½Fœzh©´S[j¥ƒk+` k[û­hÐ º_M ÖiÄ¢£CœêK+c}7X"ÂÈiwxå%>mÔ¾ÓÓºWé:ÏG§ãuªñœÛ_a®¼WÖ×9¯±¤ÚÚËÈÜA•]¬ºªw¹˜·aU~£OO²ûi¥î¾¿Se·î>ᆼǒõ?°ál½¾…[rŽì†ìlXH‚lî0;¨³¤tÊñ0ñÛŠ\qÅL¸L ¼‰IOžu~‰Óê»ëf-bÑGLÆ«¨bWëZC2¬®Ç>í_.q-è©}f³7;ªTÜü¬Jè«§cdb;¨]}#s™6ÙGÙœÝöoñžÐ½Qý?ÃsŸSÝ”Ñ^AsMŒ€Û${€‚‡‘ÒznSjnN%¶ˆô[mLxd~àpöñÙ%>sõšºs:gF·©õZnΣ ×û&W­E le¬ôœÛc€uò^…õ*¼Î‹…•Uo¦»©c™]®/{A=Ò]ñ(¹}3§æµÍħ%µëXº¶ØýPðaZkC@k@ J]$’IJI$’R’I$”¤’I%)$’IJI$’SW¨õ^›öŒ’Cw5­ç9Ú´xªvýcæ›/¾›êeU¶Ço¬¤v†ëùÞHo ùýk¥Rê ˜Õ.¹å²Í cžËì.£™’öº‹EY]Dhö»khÇlÖHìÒaE)ÈCÀ7ðrØ%ËR8åêªPñ KÙµáÍi¸LuO"bu\>&sò+ƒ0fÕ{¬{›TÈa.í; ×E«(õ–9”Û~3Ëí²ìÊK.¥ßšßTêï‚C)5éÜÒ'ÈF"gÝ‚<[h|äõÜ%!sÿX ìê¸V_MÙ=-¬³Ö¦¦—‡[ùž£#ÂV}]?ªœ>‡mv¶¼œçdZÁ¸ŠhæVâ>ˆÓ„NJ$VË!Ê B39xµû8¯®ã‡ñ{ëêæ-ÕeuKŸ[éªÜ’(­À´l`Íiýé[‰ñ6.©ƒ61Žf"\T¾bÿ$’H±©$’IJI$’S˜ÿéW_þúÔgÿF·úŽüˆ/þ•wõÿï­Fôk¨ïȤý½\Þ«ýÿUÿ· y`õ_èxßør¯ý¸[ɇ¢àºI$‚”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JR©•Õz~%ìÆÈ½¬ºÝY^¤‘㢶¸«߬=lú•½ØØ®ÜîÃi|LÉ“‘Wò³ÊàŽS."tᇬ¦xb§«ôì›*®‹ƒß{\úš&KXv¸ñØ«‹ÏrŸIɺ—¼? ¬\;2âöCîx#ÝÌÉ Ó²nuV3¬zL»Ò®§5ךÛ`÷‘½ä¹»Ú5!0fî?cf OÒkpe½Ñ¤÷ ,OªÙVeã_sØö‘g§¸Ùeµ¿gçÕê’@2°2³ó/Õ Œ–õ‡æzX˜Õ¾Æ†V‡miÛ¶9%8ä Öì0ä¥,³ÇÅ^Ùˆ&¯æë§AÔ½ÒKŽê™96]ÖòNEì«§Ó]4²«[}b.†:®Ÿ¥²ætÜV^÷Yp©ž£ÜeÅÛD’J1’+o÷˜órÞÞ8ÌÈ*Ò»ÄKö†ÒI$ž×RI$’”˜ð1á%9ýkú+ÿâ­ÿ©I.µýÿñVÿÔ¤ú*iý[þ{+þ+ÿ<…¥qÛñ@¥¶îŽ4 ‰öŸú¡óY¿VÿžÊÿŠÅÿÏ!_È =S ˜Üvß1îõ'äšwPo*½@¸c‚ÙÕ§k'ó]ÛËîåZTú aÅh|G­G>"êãó›ßÏïá%6ÂöÃv—ÄhçTQÝW̨ØÙÚÐ×vèc¿É%-ƒmn¢ªØ\öŠ˜YiÚw´ =ºù.oªþÓ»¬fÙ‹›m Ðe4µåµ‘c ÜKucœuúM:x-¾‰]}?•¶1Ù[*ÁîÚ6—9ºÆž Wè9ÎÌ»©tË›ë\ÛñoÒ·ŠÆÖ–=¢X@'± Go%¿Fúɘî¡VS}{²šÝ´¾¶6=²ç¼?tó¤iâ¾½õË¥ô<¦b_]ùº³}ƯÔô©Ûf¢¸Î¡ÔŸ…Öºu™¸÷³"—ŸÔöÍ®&Ü}­«R×Ì~i[_X?j`}aÎÍé-ÆÍ9x «6›®mnÇ Ý²ç5Ú–NÓ` n$ñWT—N߯}%;§f¶œ›UØø´×¾íŒ>÷¹&~+3£ý}¦®ŸUýGÖË~~^mxFŠÁ%˜çulØ6™p 7NyYÿWúw[£¥}[ëÝ#™¶Ó„üKñlx¬úvÙ½¶5ÇÀóä¬t/«]w3¢[›ŒÑö<î£~Yc˜ZÖä2*sDðçq'¡ØÃÿ]3' ¦d·¸TÛ]\W]æb‹]:Y§ëç[ÌèW¬ÍÂkÎC­ª¦=Œ Üñ¹Î±hÚ?”Bǯê×X7Øñe?X>ßpÞÝ1–;Ôï 9ZY¾«ÙgÕ¼ì>‘ëäeÞiskÈɶÐ}YnÖœ‹ $¦®G×wtî½ÔkÌ«*ìVcb߇M!ÖÖ,ks숀Ý&N‹W?ë¯IÄÂÂÊ©—ç¢Ãn.>-fË\À%Ï-‘½ÐpºoQ={¬uŒoI™øxÕÕîk¿HÖYêW§î—+žUzöDÍ« ùYx8nÃÊÀ¯)دŸê5ͺ—Ž;‰‚’ž—/ëÏFÆÇéÙ,mÙ5õVÚìQC78º–‡:²Ùq'h(X_ã¡få`ãTÌöóé²çW²ïô>t³ÈJ£Ó~­u<\Ï«6»ºëÁ~u¹­©î{jvM~Á79Ïy.äŽè8ÿVúÃ:wJ¤ãm³¯;>öîg·¾â,™×G ©)Úw׎ŽÞ®zaeûEÃÙÞ™û(¼ÿ6þòŽW×®‹Õ]Ó_^C›U­¢üÆT]]¯µ¾ÉÐëà¹ÖýQëTæÙÓ~Â2º}¹§,gÙ™sjmn³Õ‡a²ÆƒcOαÒ>´]×:v X•¿&»‡WÅ·Ñ.¨FöePéœ|HIOq)Óé)I$’JRI$’”’I$¥$’I)I$’JY)<®Aøù™_Yóz]op±õdå9®#Ú&­8ÞãªN?Q»í¸NƽÝFܘÄɃéÓ@#k«³ó Q{§_OR>¡¼9“rÅdÛhε:ôêöÉH\R»ªcõªY“}Åe­¥Íú#{§Æg…k¥_oTÅÅÉe¿dÁÀkK‰sZûž}þàDŸ}Ë4#Ö–žLFrÊ(ÇMOÊ~ä¢ÈÈ«‹2.vÚªisÝà£õ“£õ ½ kæÒÝá®k™-Æà­ud?¢; ·=×¾ºvÖ ÚÂFâc° –gÕ[ÙÓò-fE™yìÇ4bL1¬n’Ö÷#D¥)‰TE€,«^X„²ÌÆy$a éUê­µî:~²ô{ó‡MÅö=ƶ85Û €¡ñ–ªÁú¿œ,§½6ìaXõ_maŒkÚ#ÛâI[ÉÐ$‹&þ”ÅÌãŽ9ðÆ&5ûÒ¿6òRI$œÀ¤’I%)$’INcÿ¥]ýûëQŸýßê;ò ¿úUß×ÿ¾µÿÑ­þ£¿"“ôVõsz¯ô# ú±f厃)z‰¡:€ û.˜»«tº½V¿!•Œw íÜv†¹Ú†ÉÑIC¦ÙM™•]U•Ô?IkvÐónfFFlÜ ØÖÖv0ŸÍÐÀOCWEÌ5—SÕs3‰ÚǦw@ôÚÀ BÞ=´¯Ùm³ðèãâŒHì ¸I:m¡{ºm§"–]Q®Ö‡µÑÈ:ƒª"ãšþ§oZÊè5]skõÙsît׎XÇN›‰EUù}G#//Ü÷a䜟Nš‹®ÞÖ‚65‡a;Ýðë_PÄ>IÓ ®äØÈðKbiîÒ\ïB¯#?;3¨Ý“¥VS«¢‘c…Eµš³‚+¢OŒ¸…ÓW6/j|\DŦÄôRI$œÄ¤Ç„é )Ïë_Ñ_ÿoýJIu¯è¯ÿŠ·þ¥$ïÑSOêßóÙ_ñX¿ùä-+‹†~(´¶ÙðÐ6'Úê‡Ífý[þ{+þ+ÿ<… 7öž1¸6í³Ï ˜÷ú“òM;¨7•^ \1ÁlÏ«WÖOæ»·—ÝÊ´©õPÓŠÐàõ¨çÄ]\~s{ùýü$¦ØQ´ŽøȤ>§”ÜZMÖoô˜×9â¦xµ®'Ÿ”—§—;ÎÆ¦O3´Lû[ùÁFΡƒVS1-È­™7êésÀ{€ZÙ“ÂÏèýf‹úf6k+µ˜öÒÇ6K¥„3ykZÚÚK`@1²ÈêØy}c«Ñ“Sm.û.¤ Á¡…Üóô„ÂFú SÖ G…K7¡ô,û}lì l«ƒCM—TÇ»os0¹Œ^«‡Öð1ÝwÚ*¼¾²áí.©’ùqp/ ñYŸ^¯Î7}a«áŒÚhéÎ{Ù[Ee–º·1ÖàyíÊl$M‰ 㺋èÔÕUu¶ªšÖTÀÆ0Ѐ4"m Ϩ£ëN&~oÕþ_Lħ!Ö7¶6ËŸ½Ä6¶û[êG¸ö_õoª»¬t,.¦ö†?*–½ípèù„å:[G)m úÙÔº­Y/£ô‹›‹—Õ®{>Öæ‹=*ég©a v„Ç ëÖŠ^Ü\ìÆY‘_Ö ~kë­­k±ßYsši»™å%>€HΉià¸O­½c¨5ÿX1%–Q†Þ˜ìz¬­k]}àXH{LÌwã²Ðêÿ\úF_Lëx½'-ÎêX™68XÂÃPØ\æ-q”õRcðJ`| ?´ñoÛIý1e ¹¯·÷ݸý#ª·õëyÊè̪ŸÚ6¾ëCz3ŽÚ²G§.u„ûCô†à’ž°Dè–æ 7å0¹¨%ç§çz“E­Í´?§\ÜBb†"=ÚiªÄë8c ªu¬9=+;«h~dYwÙécGêàn #SîIO¢èX÷7"Šïgе{gÁÃpEIJI$’R’I$”¤’I%)$’IJI$’R*±±é}–US+}Çu®k@.>.#”T’I$“©6¤’I$)$’IJI$’R’I$”¤’I%)$’INcÿ¥]ýûëQŸýßê;ò ¿úUß×ÿ¾µÿÑ­þ£¿"“ôVõsz¯ô+9­p‡áàD¤ZÒ €GN’Hµ x'I$”´ xé$¥ L÷M±›·m¼cU$’RÀÂt’IJI$’R“¦<$§?­EüU¿õ)%Ö¿¢¿þ*ßú”“¿EM?«ÏeÅbÿç´®/ø NÒÛwÇ ‰öŸú¡óY¿VÿžÊÿŠÅÿÏ!hÞc¨â ‰mºLNŒí¸Où§äšwPn*½@¼c‚ÉŸV¡§µ“ù®íå÷r­*HÆ03¥¤LÇ6³ùLü¿ )´²*kØK¦ZØ$G’(Q¶v8H |a%5z] ¯Ñ­°{Ñ Y £à3º7MÍõu]h vE£ºe£Õ®5c¶3–‚,eLkÁÔ‡€gÜí~gⱺŸÖ{0:˜Ã ×ãc†}¢ððÒ`ÜÖ±®Nœîpò” YÓÅN>ÔϬnÆOΨ²—Hʽ¿§d¾§“±­,°OO¢¶ú§ÕÕ,ϲû.iêuã×~ÂÐ1Ÿê³d´òF²­ôî»Óúžž;¬Ú^ÖÛU•nhЖznè‘1ž?WÇ¿«äô–5ã#º­±Æ6Û»nÓ3#n¨DƒêTó™?W,ê¿[ºµ—Û™…Žì|F²ü[H¶=OR¢á£‡ÜϬ8ßW__IÄè½C#¶ŠÝ…êR}íÃQÝt»›âÜØ™9NSÃuîªzßM£/ö'V¥¸¹ªoÙóè%š[C}ÛÚéÚíS}\ú¥öþš:›rðþÛœ3pÝe‡íµ5¬®×Ød‹«ºå:Jy—ýDévQ™M¹9vœöã3"Ûm°ý‘þ£½í&Içð[ù˜Ù4[}m²«Øêía‡5 :I)çú7Ôü‘˜ÜÆäåæÙK X­Ë´ÚÚî[H?GA,¿ª˜Ù˜µÓvfgÚh¶Ë±³Ûq5g{`CiÛ·Áo$’œZ>¬ââô·ôü\œª]uºüæÚ~ÕeÍqsí:Á»O–ˆÿSzfvu™o¿*š¯;³0©¸³ò MÕ Añ] I)mkÀÖˆkF€Ø)$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’Jsý*ïëÿßZŒÿèÖÿQß‘ÿÒ®þ¿ýõ¨ÏþoõùŸ¢·«›Õ¡ãáÊ¿öáo,«ýÿUÿ· y0ô\I$R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤Ç„é )Ïë_Ñ_ÿoýJIu¯è¯ÿŠ·þ¥$ïÑSOêßóÙ_ñX¿ùä-ÄõC ·X˜ÎûLœ>k;êßóÙ_ñX¿ùä-ÌuA1-·I‰Ñ· ÿ4ü“Nê ÅS© Æ'ô´˜‰âÖ%ÿ“îå[U:‘Œ`f?KH™Žm`ýæ~_‘á%6‚¥Õ>ÑéÆ5¬¦òÇ ìµ»˜·ÞÞjèQ·JßÛC¯É%8½¾®:n5y;=”0]nÂñ!±µÑaÜàíK·j³z½ÖtÞ¯›‘—[ëÁËò€šÃ«a¬¶Ç¡«´Ý®›§éø¦fi¯YŸÍ÷>Î?r’Ÿ;­ŸXz[èkkµÎs™ >¥ ™ø=ÃæRúÙëý·ëp¢K¿gàï çÒõëqÿ¹u™ßTþ¯gå·3+ ¸88Á-kÈ!ߤcHkþˆúC²»Õ0QÀ»™bYs@nMmŒ ‡×‚ F€ôQ|Ó8}Xý©ÕÕÏHÑÿ6ò½o³ÆÝÞݳnÛô¿gëx= êµxuaÕ‡s›nYÌb¾ãCMnÉ,Ôþw?‘uÝê¾fQ³ªõ^¢î«žê¾ÍUŽ­´µ”ÎâÐÆH’y+n‘ÛÁ<Ÿø·eŒé¹ÃÖÆº“˜÷TÌÿ³×!¥ì¨ØÑíÝá!uÉš @Ðx'IJI4„é)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$§1ÿÒ®þ¿ýõ¨Ïþoõù_ý*ïëÿßZŒÿèÖÿQß‘Iú+z¹½Wú7þ«ÿnòÁê¿Ðñ¿ðå_ûp·“EÁt’I)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJLxN˜ð’œþµýÿñVÿÔ¤—ZþŠÿø«êRNý4þ­ÿ=•ÿ‹ÿžBѼOQÄ1ÃmÖ&$3¾ÓçšÎú·üöWüV/þy FóþQÄlòÛtž`3¶á?柒iÝA¸ªu!8ÃIý-:Dñk?’ÿÉó«j§R1Œ ÇéiÖc›Yü¦~_‘á%6‚ö›K‹Áâ4kÊ(U:–%Yt:«êeô¸YU‘´9hBJ_§¾‘M4Ë«eLô¬öÃÙ×OÛ¯–‹›êé_ÖsmÅͶ‡`ú ¢¦»mqc ÞvØç~“Nž [¤t~Ÿ_KÆÇ¯±†)aeGcä¹›KÝ´m.s]#•_«ô,çeÝÔºeÍõ¯ mø·é[ý1µ¥h–8{P"Å])¯Ñþ²f?¨U‡ÔßVì€æ³m/§ml¹önžtãö ,lWÑKZ Í·¬sœòËçõ`užŸff5õäTó8a³k‰·kjƒµó蕱×~ªuþ¿Ôº¾3ytÑgGÉÜ5¾’çY\OÓ)°\I2¯Ò=Tëõ?®¸}5õÒüÜŒ§ÔÛîÇÇ«Ô},wèvÖñâ£o×¾Û°iǧ'-ýJ‘Š(¯q-/ØAº“ä^èX:VgR·£ÕÔ~цʫ§"à…|RY$X =•ŸªWº¿Nê"ìÊ=*ñ:M˜—ÍvÛx°3ÚLûuž§G#ü`tl|çã:Œ§cÕpÇ·¨6’qYi!›]döqŽåÿŒ‰‡vEy û.@ÆÉ¼W5V\kÞðti&%Èõo©ÿXﳨTÞ“V^NF`ÈoW}ÀØê}F½µÖÇŸfѧÁmu_«g#¥ýd¢œ}Öu£FF#w7ß[As¦tú””Ï­}z®ï«ýO+¥zØ9½6Üq`ɨ5ÞÖ±¡áÝí{&;­ž™õˤušØ»ôözöŒšÍeÔA"ö e†Ö«o:ï¬/ÃÇû}}9¸„¹ 9Øöï¶dˆÚ³õLî§Ôój¯¦å~ÎMéâ»7Ëžw›÷7è‚à rS¥Ñþ»ôÞ«ŸV q²ñ,ÉkŸˆüª½6^Ö Î53íÕtKÍþ­}Xë8ßX:.]ž—€ËÙ•s.m¶Ú÷ÒX,y™‡;ÛUé )I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’œÇÿJ»úÿ÷Ö£?ú5¿ÔwäAô«¿¯ÿ}j3ÿ£[ýG~E'è­êæõ_èxßør¯ý¸[˪ÿCÆÿÕíÂÞL=ÒI$¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)1á:cÂJsú×ôWÿÅ[ÿR’]kú+ÿâ­ÿ©I;ôTÓú·üöWüV/þy FñþQÄ10ÛuŽ4g}¦?Î5õoùì¯ø¬_üò•ÁßoÅ"v†Û»Ã†Äû‡ýIù&Ôj§RŒOéi1Ŭ?ºÿÉó«j¯P8à4}Z¸ð²9½¼þþSd(ÛôýSù‚©Ôr¾Í_ª}BÆ5Îsia±æ ֹǞÁ%3é¢:v(ˆŠkÒ"=£HÚÈÿ4|[Ô0kÉf¹3&Ð]UxpÚٓ£ÒúËr°(Î,¼2úšÿDÒòö¸·y¡%½ƒ¢nV>Ù-ëSý¦Ãök+Ó ¹¦g²új§­)~B¸.—kz?\£• òKê³Óg¤KwVÁêm>çðG†¾*—Ö¼î»õ›­WÒ1í°]‰‰öÌšë) ¹îâ§Þ„$MØ¢7 /¥´ƒ §!<.;'/ ¡}TÁgÕ7UFúqqrŒ=»ï0ë­=Ü Ì÷UìúÍ׺.^ÃêWÔ3úC(~6X`¬±Î^ŸƒŸ•ff/Te®³ âÔÓ]fÐqÞð×XÝ9#„”ú %ÊC„é)`Ф’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$§1ÿÒ®þ¿ýõ¨Ïþoõù_ý*ïëÿßZŒÿèÖÿQß‘Iú+z¹½Wú7þ«ÿnòÁê¿Ðñ¿ðå_ûp·“EÁt’I)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJLxN˜ð’œþµýÿñVÿÔ¤—ZþŠÿø«êRNý4þ­ÿ=•ÿ‹ÿžB¿Z:ž1¸¶í£¿ ˜öŸú¡óT>­ÿ=•ÿ‹ÿžBÒ¸<çâ‘;CmÝjîõ'äšwPmª}T´b´º#Ö kân®?5Ýü¾îUÅW¨œp3êÔtð²9½¼þþSd!dVÇ0¹Ò  ‚AãÉ!Þöµ‡sƒKLI’JAÓ×ác߸Øëi­ÆÇé–ƒ:†óð§Ò:T¬32‘aašì¶Æ²Æû›1¬"ôç~¥Enp6²¦ É4LûŸùOÅeu¬—âu;1jÁ~N>0aɹŽÁÖ ÍkFÓ¤Is‡” |Tâç}LúÀ3±ŸÓ³ªôèt·*æþ™€¾§“±­,°^ŸG•ÔÑÒ1èêù]YŽy¿6ºªµ„´îÛ´GòµÕC§uî›Ô­5c=ûã{[mVU¹¾,õÝÑÞ]õ£¦3ëüÞ³{3Kö¸·ônÜ ƒwOÒ†žR7}TÖÿ™=ág`wØóíû@£p ¢ÙøúK5ÕOêoGÄéÙ¸sQŸ¶äd¿ÔºÍ n~ŸDpÖž—OÖ >¯Kß ¢XØc­‡»ÇkfÚú¯L³-ØUæPü¶ÎìfÚÃhŽe€îEN&Ô.‘‡kíuÙ9n·Ì ¾Óg¨]M„³šì£Òþ ôΛԱ:‹2ó220Ûö‹}Fµa¯ÓÐLB·õ·§äåaⲫ›f}ù8Ôî €ì@M…Ðã¡jÝ$¥¤’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)Ìô«¿¯ÿ}j3ÿ£[ýG~DÿJ»úÿ÷Ö£?ú5¿ÔwäR~ŠÞ®oUþ‡ÿ‡*ÿÛ…¼°z¯ôÏ^ûà Ø}šE‡sƒ —n÷vT:‹s1zÞcßs±s&«ëa{wTÂÇ 6Ig?¢èúxpÀÆÞ“&L™Ú9÷;þ¨üQ޼”ù±Ì¯­tÜʬªœQϲö¹­¬þ’†9ó=ÃæQ~²ÓhúÇÖz-.»¥3¦æÖÖ*{ýAðØ]+­Íú¥õ{¨e·3+ ¹®0KZâ ]úF4†¿è¤;-}ƒ’š4IÚúŠ|×§dýcémÌwùS¨u+ªÒ ¢¼oF¿Ö XøUÖzBˤbâ=ÝV¦œ +qË©®±Áßl¾É|ŸÝw+Øv 4p–Áà'ž;¢§ÍºHë_Wôˆê½j~lrô°›hðïO=’Ré$šRRé&R‘ÂJ]$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’S˜ÿéW_þúÔgÿF·úŽüˆ/þ•wõÿï­Fôk¨ïȤý½\Þ«ýÿUÿ· y`õ_èxßør¯ý¸[ɇ¢àºI$‚”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥&<'LxINZþŠÿø«êRK­EüU¿õ)'~ŠšVÿžÊÿŠÅÿÏ!_È,ý©† n-»oŽ“ÓÿT>j‡Õ¿ç²¿â±óÈZ7“ûGC¶–Û$·†}"ÂAM;¨7>¨X1Z_zÔsân®?5Ýü¾îUÅS©1„êÓôA'ùÖOÑstñþ<$¦ÐAɹ•·k;@€§Ý§t`ªu,:²èuWÔÌŠ \,ªÍC†ŽAà„”®~0Ŧº]º–TÏJÙfײ!®Ÿ·Íõ_Úõ¬×ãfÙE˜"†ÑK_µ›lasÎØs\âgé4ü–¿Hèøô¼lvâ2¼FÒÍ”ØÖ—K™´ºÁ´ 备*ý_¡g;2î¥Ó.i¾ðÁ~-ßÍ¿ÓZXöÌpö2„€"¶òPkt¬™g¨S‡ÕX9!½´¾¶4l½ï˜1⮫õÓ§t¼Üœ;qò®³ •Ý{¨«{]“úG8kYâW5•Õhë2ûzvI{K©©¢È›h€mcPѤûž<Ö¿Uè]S#;ë5ÔÓ¹O¦3 îhßhe­-‚}º¸jè °7n¶)-—}|éaÙM¹‡ì´Œ–D´]¹­uôn#sºIðZg¯à£…Óé.ȳ>—ä×ePæ6–úGºtk‰æ±1úNV/VÀÏÏc+éø}âfZ÷³k,·=®÷qµ§Ý¡þ.:s¾ÙÔzƒnûVöI¿X8õ½Ö³È—=á=KÖþ²áôwUS©¿7.ð]^&fë‹£¬,4O+«}p Íè9]=ößÓóŽ_Úq©¯}Ïu5K*ÙšöÙ¡y¡}zú«TêX}N®žÞ®Êj}a:óŒ}Çs,m’´Ì‚ª7ê×_éµý^¿¦`c‹ºcòîÉÅe¥µ·×`h¬Ysœâ\4ÝÄù$§¡§ëŸK·ñ]ì~^k:s±ÞÍ–ÓðNÛØâ6À ¿Ö?¬ÕcÑÔ±h¶ìL®›öGÙÊÙn™Vµ­ kÜ&Dƒ«šöÈç·eÖ$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)Ìô«¿¯ÿ}j3ÿ£[ýG~DÿJ»úÿ÷Ö£?ú5¿ÔwäR~ŠÞ®oUþ‡ÿ‡*ÿÛ…¼°z¯ôçðG†¾(ÿXúÏÖzº·Z«¦æ2Œ^“…NqcëkÉ€÷>¶’?<7“Âl$H© Çe=µÔS}O¦ö6Ú­ie•¼5Íp‚Ò ¦ÇÆÇÅ¥˜øÕ¶škÊØZÑäáYÕ~º_—f-yu:þ£Ó?j`TÊÚ.kÙú¼¾wµÐK–ŸKúÏ^ë¸5të6aS†ìŽ©^Ñ"ë§]Ü$¸8éàž§¦~E!¸ÆÆ‹ÜÒöÔHÜZÁ¼À”@$.3>¼öÿŒš¯fVÚ›Òn³ÑØ>ˆvÂÍßñ›_>P©áuϬíú£Õ²úC+ª¾š1A ¼×¸¼ÆRÇ-xIO @J›_õŸë^Jë¸×e3úqÂ~.U´×SËr­ -}M.hÓæµ±úÖþŸÖs:NVE=S&îf~ ÆÒÖ\ÇŠÅ3"[.åÅ%=}ÖÑKï½íªšÚ]e!­kF¤’{'cÙcúÈsšáÁPA^woSë¯èý¦uœödä3¥Û{ñl ãßSÈ‚´zvÕ¯ÓkŠ>UúÀYFFÎû8Áéø÷YU8þ½„º½ÃÖ}¡µVÒ¤:RSÝ;+–úµ»a·Ó.Þ˜0_íº–>ET³#ÆÝMƒuvÖCšáâ4+ÎúNoSêŸZ0z½Ù§# >û1ÃnÝþ™džÆÈ³ðá¦õ_¬C ¡t^‘“OM¾þœs²2}ík½6ÖÊ€ î`$§ÐÒ^z߬¿Z:°ú½ƒ“VWPvu¶zbÊ˱6´ÚÀ|5 J=[ëý3 Æäõ<¤p¯Î®¶ v´Xë›CÜÖ¹âchIOv’çþ§õ<¾¡Óm9y•çÛ{éõë­ô¾_MicÄê‹ IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%9þ•wõÿï­Fôk¨ïÈ‚ÿéW_þúÔgÿF·úŽüŠOÑ[ÕÍê¿Ðñ¿ðå_ûp·–Uþ‡ÿ‡*ÿÛ…¼˜z. ¤’H)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRcÂtÇ„”çõ¯è¯ÿŠ·þ¥$º×ôWÿÅ[ÿR’wè©§õoùì¯ø¬_üòà~ÑÄ2Ù ¶#w ú ´ŸŒ³¾­ÿ=•ÿ‹ÿžBѼŸÚ8€Am²@;FŒúD8„‚šwPn*HŒ-Õ§Wó¬¤×káü9VÕN¤\1†ÐãúZ~ˆ$ǪÏÝstñþ<$¦ÐCÈ­¯i&Ah0A-ê*ÁvN6 aɵáÖ‰ck¬ý(I$ Mn§;êgÖ·c?§gUéÐénUÍý3}O'cZYa½>Šè2þ­ae_Ôï±öu|fáäD6¶µÍ–{N¾þêÎ/WÁʵ”Óa/µ®²¶–‘-lOýPåUÈúÇéõ[úN7OÉÍÈÅ®»nu&–´6ÙÛ­×WàP‰Œ½QÖú©vt<\,ª:"ëò:~ Á¢€Yï­¥¯KhÞvó¸KêoC¿Þ«Ô²±F ýW)×7s\æT>€q¬¹²I.Ð÷Z}3¯`gÑ“p.Æ8O5fW6:—´I3·ƒ2 + êý)Ø_oneÂ’,i®IÚùŽL')­™õ/¬cõ‡Ymy8ôÙµŽ®Àe¶6 Á2<ÕK¾§ô˾¯ctYx£µØ×±á·±ì$µíx¸O‚ÖÅê]?1ö³&¬‡ÐvÜÚž×–m&këë½ s±íº\ßM–±ÎÝXÜöíi&Z5))ëü^tŠñóèvN]§©ú&ël°»þ«]¹ÍåÇ•«õ{§çu:†A{nú}•È 4Øíîí;§¼ª¸ß\zuïÅ>ŽExBß³àçXÀ*ºÓ;ZÐlnè0\Ð?çVÚ11ÍVæ¿)•º·´6—Ù¸×c€4øÂJiáý@é8¸Ù”Œ¼‡fã#}ö V;¿ÁÔKa£ä–Ô.‘s.uùTE ÅÈešÛ}uŒ5€´ñ~²t›úN/Wºöaâæ4:£’öÖuìeÑ?5£UÔßSn¡í¶§‰cØCšGˆ!%88¿S:f%Ø7SmáÝ?ø,÷²›7ihÚ& ¤y¡äýDé7ôü 6ß“Žþ™Y§2‹=;ý7}&9ÍC¾ ïQúÓÒ:QÆévØçæå[]-ª¶—l6ÎÃc¾‹fˆ-'ã,ï«ÏeÅbÿç´o'öŽ Ð[lÞôˆp 4î ÜU:Ih­?H€?d}&»_áʶªu2F0 8ŸV :ÚÏÝstñþ<$¦ÐTº ÉôIÅ{j»cƒ,{ Œiöý&´´ñ=ÕУiŠÝílsp«ë=36«*«ØçÙ{Hké(asð{‡Ì­ ®Ÿ×3~½uQÒ:§ì§3Õw ÛÅ€ú›G¿ˆ]wÕ?«ÝC1¹™Xl}Ípq‚æµÄ»ôŒi ÑHv[ºÏ@$è¢ðYþ­æôŸªv2›]Ô/ÈΫ+«ä^×m±Ÿœ_]2ÿLÙ Ö§nGÕ¬9m8¿a˳2Œ ¯¦†ØÛëmŽcr+g-‰Ú½|‰£°D@ȩງE¯§}dÊÄú¿Ž1®»êþH©´€Ý÷6Ʋ·ÅþeeôCõ`}cú¬:E^–N=95õ"j²³ê3¹ÁæÆ7s˦%zf^/Ú±nÇÞúMÌu~µGmŒÜ#s5vX=#êŽv/S£¨õn«gU³ ·Õ‚×ÖÚÅbÁµÎvÙ/yn›ŠJq1þ·ý_úÅõ›»rý,L+‡ììC]»ò2ìeÏ"½¬kw{A>fwKfôMôνÛþ ëÓÅmè¸'Ú<œ$§Èï·êÅy4ÑP~ƒsòé·*¶’ý¾•xõ7Ô<Ë‚Ùú–>·7êþ+:!Âv#.½·ÆÚË$\ïæØÍ6ö<è[FÑèù'kcý‰)åþºTÖä}_{XÖ±KܦhˆðZ]o+§åS—Ьu¶dß…eîÇ ~•ÔO¤ã[ž==Ò`V»€?%½û¤§Ïþ«×ÑÇÖ<'ýUvKñ›Eµõß_Õ® o¡¿ÖoÝ"½p¢@ó)%.’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’œÇÿJ»úÿ÷Ö£?ú5¿ÔwäAô«¿¯ÿ}j3ÿ£[ýG~E'è­êæõ_èxßør¯ý¸[˪ÿCÆÿÕíÂÞL=ÒI$¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)1á:cÂJsú×ôWÿÅ[ÿR’]kú+ÿâ­ÿ©I;ôTÓú·üöWüV/þy þA´ð„í»Yh#FpÜ~_5CêßóÙ_ñX¿ùä-+¿§âê@Ûnè:7’Ñóù&ÔjŸU²¶@?¦£BZ?ÃWûàõÓUqUêÑÆ¤~–­@qÿ ÏÜ ÿ®º$¦ÈB¾ÚØ6¼Às\IÒ^~(¡Tê8ufRꯩ—Ðæ‘eV i¤;‚RÝ7#ØXÃûè4Vêm0Ðæ¦ØÓ´.sªþÑ¿­æ?6Ê…è2Ššè®-a{ÜYi$÷sO”-Ž•Ñz}=7¼jÆ#*nÊœÙ$–í/x,o¹Í0í~­Ðs_›oQé¹ ^Ûñ²ôÜ+ZZö4¹„{:R"Ço%5:oÖlúú•8]X0ý¨–Ôê«ôáÀ´OóÖni.´iαw©}nÅÁêvôÊð²³r±énE¬Ç“±Óe¬sΜ4Ìçãõ\N¿ÓÜ¥g44=޲ƒ¥“µ£Úg~Õ­õ·êßVë7»ì˜øRÆ4áç>Ëhˢ查ººß½ƒ³tMˆ ‘d±;•7ó¾·cãeœ:03s¯¯¹wW[ «­ÿD9¶XüþèVñ>°båfåa6«k·Šrmõí½®s[§pÛ¨!d?£}gÂê·õ>˜üL«³0èǽÙn²¸¾‰¨ÖýÍ3¨Ñ=ë5]c/¨âýŽÃÔ°éǼ½ö3Ó¶ àç±¢·îo»@HNS6}}À¹¸ŸfÁÌȳ;ÙµW[kÜ+c‹ºÖ€tñüTð>¼ôìë°˜ÌLºªêL¶Ì<‹YXežƒ –»aQèTz§M»§Ù{é#¥[ÓìØçµöú¡Í–l¹>Õ©OÕªÞúIèµeוw¸ßQ©žŸ³Q'Y„”ŸüaadŒWMÏ?µóƒì«ô®¯éµ¿¦Ò9—@W:_ןÔîÃ¥”_C³½vÕë5‚,Å;m©Û^ïwqÙgô¿ªK ýVõIý„Ì–åísŽã}{é{ëÌÂüÑêõt1N-´WÕñ:…¹øv’ãT[cÉcÈník~ RSyÿ^°>ÑV=yy/ÈÈÈÅÇô›\XüP …»­o¶LIQÃúýÓ²Ÿ‰Y•S›“ö&dXÊÓ¯è—väQÅú©‘‰—õiÔ=†žŠÌŸµ¹Äï±ù—³Û¬¾I’j~©uJð:m};°ºÓº•¤9Ði/µÐÓ³éCÆŸŠJ{é‚t”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%9þ•wõÿï­Fôk¨ïÈ„ðÿ´\àÒZÈÝo‰JëÃ1ìk„µÂ}¦ N)ÿ¢·«KªÿCÆÿÕíÂÞX=Wú7þ«ÿnòiè¸.’I ¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I ÓSŸÖ¿¢¿þ*ßú”’ë_Ñ_ÿoýJIߢ¦ŸÕ¿ç²¿â±óÈWòùO@e·k-‘£8nû¾j‡Õ¿ç²¿â±óÈZW×ñLŸ£n€8ŽÉhùü“Nê µOª1[ ÓQÉhÿ _ï‚?†ªâ«Ô'ìâ ¥§P³÷?ÃÇD”Ù 6ÿêŸÈ¦N£‘mú•²Ë‹ZçzTìÞèÔ-o”Ë¥zf!¢½iDpX~ílϬ=4`åd ®ÚíÁÛÑ6>6²HÓqÕ ¥õlŒ¬ 3N-ãí6ÁŒ}-ínàAkv»:ø€±óþÇo\긷í6Ÿ³YX® ôÈ.iç²ëM|Ô±kôiñ‚ ™ ÏúUäuÌ*q«©¬È.©â¶zd´º¶ûO¹À¼­E”‹ÙÓp]‡sªÜýÍvÎ’ïnšè¡Ò>µ}eÀÊÍ«¬›²_L·©TÜš*Ç´HC)±þ×Oçjœ§¾¾Úqêu×=µU[Kì±æÖ·RI<¥[™em²·±à9®APGÅp·­nú§Õ3:¾v>fwJ¶öVÆzvScë. ls6žI™@Äë_X3z.Mý6ÿ°‡‹FÞžúÚn´5Œ±öY¸:úÁí?”ú% …·ëóÙŸ“œ wC8﯀ÝÇ.ªFSµðs]´kô‚¥×>¹‡ctú2ìvf> yY¯ÆÆ®Ò,³söÞë,­±ÆÙ))ôxKh\OëßYzïRèøøÙŒÁ¯/¥·;, šùso w§»‚á§:5F¿®ßZ²:ëò1±²m鵿S‰^(u>“é½ç+vá`:ÄBJ}$ûFˆlÊÇ}ÏÇeuõºÊí¥ÍäLh²ð>°þÓÍÈéìÀÏÃ}M~ܬšt¸µÁƒÓ~ãºfFš…ƒõwôϬYêmÖdZÜlK}§sßc«¹Îw–¼ÂJzÊz·LÈÉ~%tÛ•Wó”2Æ¹íø´VåyKÀÂÅé¿Sz¶-moQÌÍkr²üå­¹¶›½Gr`’ôN¥‡fv#ñY{ñ}BÐûj€ý“ïkIãpÒRRZ2±òXlDZ—1®s «ppÜÓ;‚—Úñ¾Õö?UŸjÙêú‡©éÎÝûyÛ:Jâþ©õJúÔêln^sfM-«¿ZÆu¤9À¹º{bU‡õ^¡•õ•ÏéØÂ¬‹z²1éË­µÚ-9ZË_«š<[ºSÙ$¼û£ýiúÁƒWYfÿ´dôÌS“öKén=áû="êì§_¤>JÿCêŸY1:×OÂëY”õ ºÞ5™ú5ŠÍ¬6ÂÙI…®€N²’žÉ$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’SÌýqê™ý'êÿRÏÀk ôóô½6ohƒ¹Ãvƒ…‰õ¬u.¯õ_íD¶ÇÓa¡—̽á§ô‚95îºn²êÆY¹˜¶ãúŸ¦nsÍtm†j÷l³¼D…›ÓŒî›oÙ+Á«yÚ:u†Ú‹½»¤úuøO-î­ýÿUÿ· y`õoè˜ßør¯ý¸[ɧ¢Bé$’ RI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”˜ð1á%9ýkú+ÿâ­ÿ©I.µýÿñVÿÔ¤ú*iý[þ{+þ+ÿ<…"?jaˆ[v²Ù3€Fãò?ÑgÚòZ-5´câ8ÀúQ©p> úwÖ>…Õ²£©ïȦË(ª­ì°€79•þstÐÇŒ!FÑoJ©õC£@MG%£ü5¾þ>ªÌɼ—Íφ¸´Ûû*6Üm`c캚ïikL°‡@ñðXu‚Ems ŒËAÚAÚxñT>ÕgúK~ÏîHäØAËu ÿÈ£íÉV=1»°qîq.²ÊX\ç8>Ih'ÜØiùh¡ÔúGOê•fR,,3]€–ØÃ#VXØsxÖ ¯UΪ¶TË.Ù[C[;\a¢¹À“ñSûU¿é-û™ÿ‘KÛ’¬<ÞwÔ¾¿öÜk:~}[(t³&æŸ]€¾§ŸcXk°Åz}­Öþ¥ôÞµœs/¿'Ö0S‘^=›um3²ÖÁ¯}ªßô–ýÌÿÈ¥ö«Ò[÷3ÿ"‡·+'©WjäýPèù_om¢ÏK¨cÓe@€Ö³ù£\ P:_Ôn—Ó³_œìŒ¬ëîÆ~%Î˳ÕßSÈ0í°!hýªßô–ýÌÿÈ¥ö«Ò[÷3ÿ"·%XrpÿÅÿGį2¶ß•hËÅ~ }[wú4YÍt‚4+F«X4gÓSìm•b ÛmMßTF®lhQ~ÕoúK~æäRûU¿é-û™ÿ‘KÛ’¬9£êBý‰ÑKöLlŸµ°’7›$˜'oÑ÷GgêWKëîζüœ{.¬S’ÌkMl¹ƒè¶ÑÂÐõî ßêYØÿȨýªßô–ýÌÿÈ¥íÉVý'ê§OéY8¹8öZçáažŸPyi£g­¹ÐÑî•^ߨÝÞ¨ìófCj}Ã&ÌÚF+®úެw•¡ö«Ò[÷3ÿ"—Ú­ÿIoÜÏüŠ^Ü•aÒÕPÇèøØýW;ª1ÎuÝE•2æ:  9­Ú"u2¡ö«Ò[÷3ÿ"—Ú­ÿIoÜÏüŠ^Ü•aÎéŸQz?MêLϦ܋{ñqm³uºÉÞjdi2¶p°~Èü—ý¢ëþÕq»mÎÜ+§Vƒkp«ýªßô–ýÌÿÈ¥ö«Ò[÷3ÿ"—·%XIѺ>?GÂû3ÞúýK-Üò ¦×›4¹@Îú¹Óóú…Ùù;ÜìŒ'tëk˜g¢çú„ñ;§¼©ýªßô–ýÌÿÈ¥ö«Ò[÷3ÿ"—·%Xhô©]'¥ý ºÌŒ÷dÓöW¿2ÏTŒô-ÐCTºÔΕÐòÎ]ddÜ+ôh96z‚š¦}:´Z®}ªßô–ýÌÿȦû]¿é-û™ÿ‘KÛ’¬:©,‘“ûMl¹â¨oþEO~gúg}ÍÿÈ¡ÀUaÓIfoÌÿLﹿù·æ¦wÜßüŠ\V4–füÏôÎû›ÿ‘K~gúg}ÍÿÈ¥ÀUaÓIfoÌÿLﹿù·æ¦wÜßüŠ\V4–füÏôÎû›ÿ‘K~gúg}ÍÿÈ¥ÀUaÓIfoÌÿLﹿù·æ¦wÜßüŠ\V4–füÏôÎû›ÿ‘K~gúg}ÍÿÈ¥ÀUaÓIfoÌÿLﹿù·æ¦wÜßüŠ\V4–fü½Í¹ÐL øø*Zz.7S·¥äõ1FM5‹m6:¶4n:2\>œk«z$–MK—d óMC¬~CžZÖ±¶Ï¦KË@×oŠ­Ó~°tÞ«‘•ÓóÎE˜D  d8ÂÜÝb|RáU´þ»tÞ«ÕzvLu;î|[]Ò šÐÇ[‡–÷Óà±~¢ôޱÒ~¯:Ž¢+ª«]ëÑ@ŸY¥ûC½Rt7FŽ?ØS]õ‹m—½ä—:Kf hÐà)žŸˆya:ÏÒ?ÞŸJ-.­ýÿUÿ· y`õ_è˜ßør¿ý¸ }2]’I ¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I ÓSŸÖ¿¢¿þ*ßú”’ë_Ñ_ÿoýJIߢ§œf>>]]C%ﮬ¼Lj‹«%®ƒ^°Gúø®êßø¿«¢uš:£ú¸âØã]M¤ís .ßí>î ­Î¡Ö2q±ñ0ñ„Ys¯öwúª²Ìž±F8¥Â»÷–€Ç¸nk\K„5 ‡( @Ê·¦Ü9+Ç™2ÃÉòñY$}ö岯{†æ½Û€˜ãP8Dý¯þˆþ?ùÍQ}¹%ã¯bÜkc­°Vö¸µÕÏt?†÷)ñ¯».æãâõüKî~®·±Î'ÈÊ>ô¿ÍŸµ_sÃÿбý’þIû_ý üò)~ׯÿBüŠÊýõ“þæóó%R¶gÝ”pêë8öe7éPÒÓ`ä‡Ê^ô¿ÍËíWÜðÿâ¬d¿ƒÐ~ׯÿBüŠ_µñ¿ÐŸÇÿ"²cýcÿ¹£üÏüÉ/ØÿXÿîhÿ3ÿ2KÞ—ù¹}ªûžüUì—ðu¿kãÿ¡?þE/ÚøßèOãÿ‘Y?±þ²ÜÑþgþd—ì¬÷4™ÿ™%îÏüܾÕ}Ïþ*ÇöKø:ßµñ¿ÐŸÇÿ"—í|ô'ñÿȬŸØÿXÿîhÿ7ÿ2P·§uÚ6úÝE•op­›ÆÝÏvh—jOd½Ù›—Ú¯¹áÿÅXþÉgö¾?úøÿäRý¯þ„þ?ù“ûëýÍææI‘õŒNhrKó$½é›—Ú¯¹áÿÅXþÉHu*wN×mýØ?—j'í|ô'þ—þEsVgõnœÚ³~ÒÜÌ[ceµýÙÔ´‰•Øàå¬V]Æá(Ã/"ŒHèXùŽLâ„r G$' ”{´ÿkãÿ¡?ô¿ò)~×ÇÿBéäV¦ãâ›qñR[ZœÏÚøÿèOý/üŠ_µñÿПú_ù©¹Þ)·­Tæ~×ÇÿBéäRý¯þ„ÿÒÿÈ­MÇÅ-ÇÅ+U9µñÿПú_ù¿kãÿ¡?ô¿ò+SqñKqñJÕN_í|ô'þ—þE/ÚøÿèNŸÖÿÈ­MÎñKqñJÕNV õÛ™m¯"¶l]¦³0&‡«‹þ•ŸxDÜ|e)(U#õqÒ³ï z¸¿éY÷„MÅ))z•Hý\_ô¬ûÂ^®/úV}áJRRõ*‘ú¸¿éY÷„½\_ô¬ûÂ$”¤¥êU#õqÒ³ï z¸¿éY÷„I)IKÔªGêâÿ¥gÞõqÒ³ï’R’—©TÕÅÿJϼ%êâÿ¥gÞ$¥%/R©«‹þ•ŸxKÕÅÿJϼ"IJJ^¥R ¯ÆkZácN×`‰ˆ+Í:—ø±ÄÌê—åWÔÝN=äØúÍÖ5î2æ—9íÜ9ןʽJJ}ÇÅ*î§•ë.Ž©‰ÔñNO¢:Xôî .Ùör]1"wOÉb}Tú‹õªYÔ­ÎvC˜×3•°Ô!ÀK­‚éïíãºô]ÇÅ-ÇÅ*ðS[Î%g‰ÝåÜ«-ÎñO¹Þ%-TäuW4âã€uuHî?X ~B¨+¬<ØÏ.ï÷©nw‰@Ä”Ûi%[s¼J[âPà*°ÙIVÜï–çx”¸ ¬6RU·;Ä¥¹Þ%.« ”•mÎñ)nw‰K€ªÃe%[s¼J[âRà*°ÙIVÜï–çx”¸ ¬6RU·;Ä¥¹Þ%.« ”•mÎñ)nw‰K€ªÃe%[s¼J[âRà*°ÙIVÜï–çx”¸ ¬6RU·;Ä¥¹Þ%.« ”•mÎñ)nw‰K€ªÃe%[s¼J[âRà*°ÙIVÜï–çx”¸ ¬6RU·;Ä¥¹Þ%.« ”•mÎñ)nw‰K€ªÃe%[s¼J[âRà*°ÙIVÜï–çx”¸ ¬6RU·;Ä¥¹Þ%.« ”•mÎñ)nw‰K€ªÃe%[s¼J[âRà*°ÙIVÜï–çx”¸ ¬6S_s¼J[ÝâRà*°×ë?Ñ_ÿoýJH}P“dŸðVÿÔ„’­)O)‘ÿ+tÏø¦ÿÔ5g}b{ò2:†3©¦Ö××zuL©Ík`us¶çµ¤f è´z­94œ¡KM‚–09£ú'UEù*û­È¶œ‘mù˜ýAá¤@·mcD³èø¨Dã ÌHÕ›žN[.~_—–ñð@ÆTv6ìæô–bt.µsú?Oé¶}‡%¬· ÛÞA­ÅÍwè)¢çñ:QêÝêÕ.Ã^=•õÆÝVñ°1þ¶ÊØKÀàžës?ëf~F Øö¶¬ªŸM…º86Æ–:%§±RÂúÛ‰‡‡FxÖº¼j™K µqmm lÃF°½ì¼ÁþæÿÍ´:]2²ñ>«õŒG^Ú¡¯n…¡Îk^áàCI+;#ê‡Õ*:F%¬Ù€1ÍVÓÔë!¶—H › îß<Oo×,;ê}aºÊ­ie•¸hZá×;OÕê2é»ÓÍ·âÌl nsñëxú%¬-íÛT}ü¼¯ôo7þhý¡ÛêÝcë™=o/6¼<_«ŸKÕ ~ÒE~³·Ø\ÒÉú#j_´>±õž«“GNê¥ÐÌ LưÐÛÜsKÜÐIg=ÊÉêÏè=[=Ù×Ñ•S® ne4ØY^Ck2ÑsCu…£G_é´u,ž£^5¢Ìº+Æ}˜ÖTnÑ·ÏÅ{ï+ýÍÿš?haÓúßÖ^½wIÇÄÎgNvL³'"ÁKn‹+»ÒÞÖ¸·R<áWÊúá׫è¸t0¾Î£‘›“†üÌj¶–âòöcËZ\ÿŽ?IÏé=*ü+ñêÉsð1_‡Vò5¾ÏX—C²…mÝÞžìNSڬΫ"·ìº«­vçÞÖè—¿÷•þæÿÍ´7húÑõ…Ý Œ¾»1ú…ýB®NnU“¶Ý¯Ú%²Ø#nè”ßZz^¯¡Ó•ÕÆEã«ÐÖä7¬t¾}7½›Ü ®çÉTmýt[:;ñò¬eÏY”÷“nÛêmúB4Akz#zwØc9Ï9LÎ9n°›Íõˆk·–x½ü¼¯ôo7þhý¡µ×~¶ýdo]Χ¥×’hé– ý |A‘]΀óëß¹¦©6´üÖ¦WRëSªß‡…’ΗN YwÕeB×\okœkyqi`dD…‹ÕmèS=ùÖW™Žo tãÚêê¼3è‹Z®ˆ[+¡õLªr­Çɢʫû;Æ;ÍbÚ{Ul7ÜЗ½÷•þæÿÍ´$ÇúîúQ}ÿVå×ôOù6Ÿê…Å}§Ö阽 §UgÙñš+kìÕÛdŸt5¾+¹é”:Œ*ªv¥­b"Ye!¨ -—šÇ,<ž,y4Ÿ¥ÃzÓlr¹Œ^¯cº‹ŸK}\ü·c5ÏsˆôèçÇÄö]1#ÅRÇè½7ôÙM;_¼Ôw8Á·éOyRN2&<&©«ËåÅä÷"dd*5·S®¿½ÂâfõΡ‘ÒrƒK+¸åýŠ«kn—6N„#Q•oN¸ž›[Ókd_nçzp˜kK¥¼s'àµYÑzk+ª¶Óì¢Ó‘XÜí-&KŽºüÔrúKÌÉ99îµÀ܃xÜ‚™íäÞÅìØûÏ-FŽ2L¾QóiV/]ò%§W]ÍÊ·ŒzËs1ÎM­±Æ8⃗õ‡>–u ÊKz{ëªHwé,t®œ­¦`â³/í®2=1Ní`0jÀáݦ:«)u3]¶Œ‹çk`áÇ_.Œ2WÍ®¿–‹#›•âôútßô®]wÒØýbÿÚY8ÙM­”cc·"Ƕe…À®žtUhúÇ•n~=!Øù,²ÆØêÍpÆ Û„½Û‡È-sÓ0‹òl5K³@nI$ÀËžÈ8½¥â½¯¦“½¬59Ît1Ü·R‘Ž]=C{ú_ðPËÊT‰Ç+0…qpë-ôõ8ææ¿¡ ²ŸöÕrvWY.ikK¿5ÁßGkdp}aÊnµU_٬ȕc’MŽìß¿·~kKêÿJÆô½*HYêÔ œC_ žŽÒ±ò¾ÕUhq{$’Ö¸òæ´è hÇ”V£jßñeŸ5ÊKŠñÈú¥8Ž8h4¯Vî~wÖÚ[Ô­¡•z]:ÆTÝòM:9º W;3ìÝ*ìǦºM…³Á-ãï*è½5ÔÙC©ší´dXÝÎ÷X;‰Ÿ%c/ŒÌwãd³}6höIÁ#!Æz˜Ô|w°KÏô®¡‘Óƒ”æ>«qŸ•}†w×ËÉq“!ë&Kó©¨Ö}v\Xj;+·6^ýßpZ4t•ŽË™]d7Ó·qs‰gîˉ€£OÕî“Dút™5šd½äún应Á  ¡ãø3O˜äå)ÊP‘”Áׄ &Ïú‚º&vwPį2ú뮫š]Xa%ßKÛ3ä´ññêÆ¢¼z²ªš[y€8ŠX‚ÙêÒË(Ë$Œ#ÁO {ŠI$“–)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’KUÔº½xo3k®ÚlµÎúÔ4õ,LÁ«ŠD©~¥‘Ab‡ƒ{1ì±Õ÷ #h'ÂJKÏ-Ëk˯Ç}¹!í÷›=¯µã@òÎ*A½ÒBÊXýZý¡û)ŸµöìÚ=S~í½·mÒ!hÿ’¿à?鯞B{þŠü_/ùOð_¡ÿÉ_ðôÒÿ%ÀÓ_<$›þ+'þýþJÿ€ÿ¦—ù+þþšùá$¿ÅWþýþJÿ€ÿ¦—ù+þþšùá$ÅWþýþJÿ€ÿ¦—ù+þþšùá$¿ÅGþýþJÿ€ÿ¦—ù+þþšùá$¿ÅOþýþJÿ€ÿ¦—ù+þþšùá$¿ÅGþý_ìýߢô·'|þ Ï»Ïÿ_6¤œ>ŸF9ïú_á¿Iû¼ÿðT½Þø*ù±$V?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’SôŸ»ÏÿKÝçÿ‚¯›IOÒ~ï?ü/wŸþ ¾lI%?Iû¼ÿðT½Þø*ù±$”ý'îóÿÁR÷yÿà«æÄ’Sô—»ÏÿU,ý—êÙêú§«_«»|úÑú-ßÊ£?%óÂH%÷O¬_mý›‘ûgÒÚ½-Û÷†çMß½:¤¼-$ïÑéûV~—_ØÿÿÙ endstream endobj 43 0 obj <> /ColorSpace <> /Font <> /XObject <> /ProcSet [/PDF /Text /ImageC] >> endobj 45 0 obj <> stream H‰´WÛrÓHýÿCS»2O4º‹—-X’l ;¶ ckd‘%£‘b¼¹üÏv.6NX؇M*e9së>çôé‡ÅàølÌa¡6ø «ö3¤ƒÏ #›¹1þÐÿ™AèE,‚}㔲_y yóÌxüpâYõb28>Ã$pè?\ŸÙA‚Et΄bYÐñ¶mãÔùŸœ6k[Ô 2]€^u–@YçP-%¤E–•/`^¬V"O@åÃÉ'ÜiÄ™“—ƒ©Eó´XIHT9ä! -9¯Šrûløqò ã~YļÀÄïBó>´& À„ó °ã¼(‹¢bzIç=’â»îáté¦Ò^Së²Ø }EÖlä×.Dвbðç0æø ³Ÿ ÌXê 6K‰• ð±(ï´É³u½Àë³¶f[ÐjµÎ¶°ÎêÅ‚"Ôµº§µ¸WnÆ/`]”Õå0yJ`Õåp„ÄVNkð"ÂÏÛ]´ìÐÖ?¡ÙßÁP¥kÈtO—‹?&öf$I¬ëyÿ¬5!}¨!ë´ÑŠ?6@ŠÚ,ÕÜÐwßÔJU&µI%–ÈŸ{fŠF{íwÁ¡² HiÿÒ€c`mpoÈ<2ÛUÊy± «’Yf¢ðV5FÖ/O»íqÍZÌ¥™¦+… –âÞDDçuô~°àÙåòaÈZ†ÜÆø€'ê@<þ]0×`³Ø06à²Él×wbô<7ì…^´7 ¾}{ýzüœ]Ÿ<ºÆ9y—oo‡®QõpärŸ¹ÖÅÉÚá?Nç^€‰í[òOo.áÅÉÙùå“ïÐßGØ{¶Ï<K %г¶ãOh‹R¬‘~‘X¯3|¨T‘#Ë÷Beb–É]h"Š_¢1°ŒUŽTœ]a%½~yµÞQ|Ž¢#*æŽF$EW"ËÌIFµ Ib!1\U£™Ð2!ñ/jÅú’<»|û¦Ù\ÃJ-–Ì$Ò¾^o©ˆ—R˜SLv‘%¿9·ñAïÔcŒS¾-rÊüƒ¥QG×R“BÍ¢9 åog7ç° Ùj¯]²OUB*îqºªÐE¥¾«Šµ‰ï löêpjëŠÉºZ}cÔ,*Ì^Jù®E Iúq/#ä¼¥«RÍjðð—A^TGäSJƒ¼—yc{GïhÕÿZÑÉK4QZ7µÛ¢"zx‚V‰r†ôÁÁ¬T¾¿‰q_“ä·híÕlÛZÕOø*çÁ£¾ú+ö¦Y­²äÇ­)î»Vσ¾t^ÐwÚx QÐ{^`Ðm›î‘݆í *µ¢’ïh}X µÿÔäÎ/¦ÖÁ(IÜÔò7V›¹(+mC&ÓªÁÇaq°C‡¦˜Î×È·éo]ß }וì3jÃ{ॱŸ½­úmv—‹Î'}âûV´w½ÉÒ‘ü²ÎD.¨ Úefê#$JÇÈs¯§WKºá'nD^‘®’‚`B„$ièdò“} |×ín»žNÈlŸ®±ia6—X§-¥¦òˆŽ)ÈÐÃû²2Îq ŠÜdÛvtó~8r°ÆÖÉûwÏÏ/Ç&_ŒÒ†3ü{…›~Â#6T¥o`úц¤¿E‡6–mà‚ƒÍáà1qˆ ¡Ëòbå!ºwÚ@¼¢)j|2Á:Ú1 mß Án"Ýݹ]ƒ°g7¦}{_pIbÃGúl'>¼vM­Ío±>ã«ê/+±‘Ç¢°º ùÞˇ¸ £ð\ÜÓ1}ÄÑ!è èWÝÛH3Ó‹æð~æh7õö)¾g|ЀÇý8òM¼4Ŷ:@¾m;ýyH:Ìñ¾s¾Âט—žuõ?¼ûØöŽR›ù“ú£üÆî¢C §u—!­Ñ¼À! Õ{.[ŸŒÈ%M[Œ¬]·zC&t‹ _SZ*¯ÿ0ÇXÏÝ endstream endobj 48 0 obj <> endobj 47 0 obj <> /Subtype /Link /A 48 0 R /Type /Annot /H /I /Rect [615.775879 14.7798 703.724121 25.471695] >> endobj 46 0 obj [47 0 R] endobj 41 0 obj <> endobj 51 0 obj <> stream 8;Z\7a`W4i&1+4gj*p>nNp.e2.2DX=&nXlq!)<6t',G".1D2GTjPnS)aKkXS9U`898X,*pis>Aj8#:"(k=973_]S;.VE qmbQ4qu!5^N1b1KL-`XP6,k;'5S`En\rAcOFQ/`i)8M*K9kjS2V`lB.!g3ZP`UlQu!<@?A[@\]PdEoi!JPG5@"QV`A%VR1#)Vd0+U/t]s5N[ U.EW;gl\`X.h6rX9iOR'17G0@*a4W")^\Fh$^0?X$][4N)-YWC6#E%P3hrW@Q%9la U*X+>:!@1=f9=#4YdFY'2^(:"((*LL[1%Ioj>Q-?`-L06'ZBgBjNZT0PMn%4(`i;Rq1K?*=jdi?#FF9StXR2"5 e$VUkUH\F>1VV8,L9po@Gr+oS:V#NMRAhKkmhGuA4OlN67XBS4hMIKjP/Kt$mjih< h0KK2B.olcfR>W@'4'nW%3sY(4FsEQeo?EV,*]LK65Z@8.CPa#.s,\t,`X\''3Z`Q -bff1'_[mo6[`/jV--5Z82lBH9Dfkt>glDMe/EO?IT3hAW7e[/cdA)t'=^In%ak8% 0A.uN_t9lIfK[3$#65M6Z<@~> endstream endobj 53 0 obj <> stream H‰œ–éoiÇÿÞ ±Hl%–U ¼aµ*«¥ˆeY@b+XÄûJ-›³î² h›£IÛ•¶Û.„•H›øvf|ÌaçðøL_{|¯Ä÷ÛÏÌØŽI飯žç7Ïó;9ùÚÅŸåwÎ}ï§_¿øÞ+~&™ý|ü÷.KæÆd÷ƤK’¥Iɽ©™ûÓ×!÷&%‹Ò… 鼈Ù#dwNæèÌÜIæ§fîŽÌâ¸ä“«²Ï®ÊŽI?—¬f§%·®InNËnNÉoNÉnMÈgÇäKWo<¸rãáù£1éãqéÃ1ùƒ±ó¿ýp–gþùƒqÉà ɣé™O¯I–®Ëþ$•ÝÊg®Éÿ0%[˜”-°0ÀÜòYȸ|A`B>/اd³S²;“Ò[“0Ù­qùí1ùÈ84JæF¯tR²0)™ç{~· d© WxÏ.ôP2Ë3Q§fàdÅNŽ\‰ç{†Iø¸s½|NaR =Éé‹Sòű™Ùk.]ÿãõÜZüçk.½ôí~éõw_ýñoÎ]üå—¿ûöοñò…ŸHæ?¿ùé¿vØ–+Zfë€Î€p0KxXD3/¦ó|N¹ C„(§*“áLF¸›éÄ2­hº a2‡Lº ?Á*Bv? H$Ó·w¢év¬W;“íD8D¨tÄ27<-"ÓÓÁŽÖÉ»:ó€DÛ3èI&'•<ÜKÀQ‚T¢u_¤¾KWç>‘ßûÇùw~ýÅïüè•üêÕ·.½ù‹ËÒ»µÇjÎx…mO´-‚ BpâIæ‰$º š{}R==N[Dçøvˆðp Q´›OòÈ L¦dÛt²E'›ád3’h@‰!H„ØF(U ¦k!ö;œÁÆye;Át=”.‡Øz(ÙáH‚óJôà{ù é…Ø3—yÌI—“ŒÝž° "„«Ø¹Ø³~^§H´íf2šÒlGüT`»˜O–#Yù& yG¢!½ÿ÷óo¿îÍ÷^úÆÅ>¾ï`jñˆWÛ˜{_…žhÝ+ÿ*Ê¡@^QߪÁw’zW ^‘î9:ÜuØõ©FS²«Fg@a¾^û N#ü3(_3T#Î(ào‘)¤Áë¦ ŽŒ › Óëµ7y¦?Yûæ÷/]ûø‘“®Ã¿€[þŠ §fzÅB6“Z2¦% Z’} ÛÓÿƒä0=Ÿ–˜~$¯‘´‘ðÈBDt0C2«! *²¬ ÊJ¢ &à6©#ÂáC‰m„ðªÉ¨Šd¡jȰŽÜÓ“A§<ªÇX-–QãJ"ÿŒÌ/[–׳ X,Áè gN£:"¦#â:<ÉÃê°4O–gŸ'+µXVƒ¡%r:<§ï’Õ©‘ËLðÍIõ`E#°g8¸'( UG²ºžö|ÓçÁФ#ã:K¼«ýT2!$¯'X>îé*ŠÅ«·²ÃVÙd×ÖÙµ ø3&=ùD±³—iÛCyéŸ?“ßüügc‡”¯†Q9‹«¤µ$qgs@Šf'‡ â(™!ÎâÂV°Ÿ@eÑ×Áëƒ>y>è©ZÀYÂÉÎáÌöNÕÌö¦™j›¨jo£öCÄYCœ%½;¸rz÷ÎUÕ¹êzWuÌŽnÏTÆbÛ·ØŠ„­„Q££¶æ¨Ã3ð¤p¦‹}ßl/ðÍTÙLUÍTÃÖä94Û¸ &Pä°ULTÕd¯™¨:ÄloàT jU%¨ n/\&Ô~'Ë|¯Žµ«(êv ‚Ù¹µHK¼–1{¹¯Ã”x­œDÓT0óO…Óþ‚Ó"Æ'6ºŠ"rù`βn=ƒÚö×63*"a r¨-Kë‘,°ºã¾Xõw·]™¾ÿ“g2mÔ’ÜÚ®nlW6vª˜#O¸Ë8ÆQ,¸«"¢6Lc˜ºè@uèz/V×ùHZÂ<û˜ç.HWÙâ¨YM‹½E:;„ ÝÝz/Ðø€Âϡޚ]hé ;-ÌS'ÝU««²á*m:!å gÅâªî*ñ@ʤ§Hz î"é®ðTIWt5I…@¬ÎC««lu¬î²•sR#ÜuÂÝ ÜÍ~ù$LÏYµÀ(Î29jBŸ«=¬žÐ«£æóÇœ‡]Ž !Á ¾xäð…Ùº+i ™×zqOU1Ü›±î4 ¶¼e»¾é;49 –šÊcÎ/Ó³­ƒ*—Ü–|ô— |4pZöÝåknî46w›[¾ÃMÿ᦯µáo­ZÖ@{ÝßÞ @ZT¨Cx*ëÞ¦+ ŒTqËß^÷vl ^ð?Æ«4Ɖó °!J‘ÚD¡m¨T©"UJ••"åGUQ+E M E*(U’"¢p¤ ´?ÒUP GÚB ¨Šš¶²„Ýe/{<žû¾m¯í½/¯ÇÏùõñ.°,!±½Çß÷Ïû|ï@Ô¤†òj í5Âå|ƒÀ1X6Ê©,Ûe%†gà:§„©ó1\/±zœQ¼^©™µ"\ r’'‘f!F=`½~)’æÑùœóéptm ý±kôDßôÙé[”)¢AðÇDYÞ'„&+5yÅaÅ'×µÁH5J®É¥RÎl‘Š3@Oqf !º9¾•e=FE”ŒXq"EÄjH¯x×ûU©Ð"µ:èCNuáÌÂUŸ-„æd$G)Ïk¼á±j3¯x÷†ó *Âå—CB i#¦Í8§¶HÃàç!9Œù„,…C|‚…l/Ô…µ£ÒàP2Ú AÜpÙcmø)J(#:¤€Üe%(ú}VX,âr£/@¼Pnõ^ Äh_'qIZÔ¾C¨1©£~¶•]© w‚Ä™4)¢t»ª§|»â*þ¾Cïß&°¨'f5Ÿ^-8a¯ì q`©㊇+.H,Ç”ÞÀg&½¸—šIÓ›8“ð xKé©«êrƒŸm¶ƒ h ,4Eåb§ÙFinQJ`ÿ®(î‚ç‡Ñð0Ù(À¹ÎÔYÉç5Dë ÀQ¿‰ÎÖ^;M<øóGûÿü?û£›Õ Ú¨OF”8C*!ì2VÑyïÈ…>õìÆß[õÐ#+WçûO>wúbŸ=;™—ëœÒšÇhÑ0^œ«–P/^ LBã «OîÎÈÏütÇ~²}¼úùIBŸµçà¢Nñ&z~ë^ Ã~ßyÖŽX3\,ñ—reñÄaùïcç­™•ë¸Ò4&Ð7—}¹’¤‹/ ;ŠqrJÔK9R ¨ 0䂱c&ÐŒí³ðÕ${åï·Èb¿’Û p 1&‚½¨Å½`SÚDÐJíºC° nÑ[ºà‡)Õ“m¯xÿ¡÷_?p,bÞ€½œPšGj>¥‡‰6. "ÌšG›¾6Šº‰±¦fŽ#˜´­ h"/+x9)` Ä?µ/TT]ñá/9ÙÍÉÍœÒ T'§4+â !€{áî´+x èè&Ê¡TE…)¤BÛŠ-J 3’ûáej÷ÛWö¼{ýå?]}ë³ïÔà;²g®ke tKBt¡½K(ZžQªíüÍA [ƒa+×w¬Ü°âáGV¬Ü„a~±ó-Ñv2ì8­8Œê(Ÿ??¹Ê ®VBÕiDð®h4ûs –|Ö<¾åtñ:IÛÍ>n‚²Ü!ivÄA[·íƒŸ_ÜþÆá÷.ödF¡X÷ j9X …¸7ïÜÈNáRS,!ÆjѦ›•jr%ÌŠÉ« ©ÆÛ¬‘)Cî@o2ÎJP89ÂõÙȸK›,´g̨—œÉŠ®ZEƒ¬CÈѽUSû}~0@åÀŸöyÝ>ŽVëq^ (=Š GÉZMH-@‹ÛÎÐj¤ØUN°÷à±=Nj)Ü©atŸ†9Áˆ(3™ n#¯»Œí²ÓÃsg5òZ“Ö‡M©Ã^<4Q P5†ƒ•·“ê!›Z`ÄŒqfœ„Ʀ] ÿ…`—ؔḠ#ˆ°âÏç¿Ùén¡ÅVÑGÿf_ïüxoç…ýçÿö¯ìÍ\ydu¹|ô/Ÿüó)ch®A.‘È[NA”Î\î^½öQ [ݱjÝjìá k6®[ó†}}í×¾‹ulzé׿˰£¼Q#åYJœ1GP–žàŒ¦h´nåFÌ2b¤É®îLÂßUë6oy¢óø¹Ó—n”jˆ-5óºÃZM}$ڶ놭{ú™ö½ùnO¶¹ºOPË,dŒa0p¥"Ò«HAÅ)T©!kM¶@Në7ñª>ê)Ã1.yÖH §qïR ­R9†¾âÊôËÏëM®à“zc€›R+k¹Z5àíòmBì²Xµ»í—ø|Ÿ›ñrK$‡u ›W"è)à ôQ^s3Â,kú¸T'a–3}ZoOh=btJãÛž0Z,[¾Y ÌrôÆ¡c»|Ú%CÎÃå­€Mc¤€2ÛÛL†‰ÂFæo9„4ÓKTòJ}ªWçPŽŸÏ‰£,Œ’Oˆ-^Gêp2(˜S³zÈ>«·‚Õâ,—Ñë´6Ïèó‚íb^”ò 0˜Y‰ø°ic²mÿ—ZZXöû¨ùŒæ S(7ŠNuì<üÉŽ·/½zøò_¯ ]ûœ,• ICc#Ÿ:ñ÷#G¯^ù´ Ïpİ>Ÿ¶F ÉBøÁÇ]¶vÅêußþÖæWv½ºo÷þ—^|ù±ÇŸÀ°õpÿg[_9qæ?8S’¬¹í»ÞÜ´å) û棛Ÿüù ¿Í2• Y¢ø÷¡•kÖžú¹_gÑ0 áíÖ¤ƒ¶íØÏ<ûã_;v)CM¶C[Ôr›d@òàÕòVšDêò,sÐT 5ÐÉs7®ÞÒE;$¤†6 gè2Ö%‹DPJ%øYŠY»•Wj`GëÉ"M¹AZÚ$êÉŽÃ.‚K6 “jDËÐx1¯G0¥À‹ £6hÕ,W*4y«Îsœ9'X ³Õ„öb"Ýè@›¨ÿg¼Ìƒ¢Èî8®w&&níºû‡·’]+)MUŽÍ±Æìæ¨J²q“ÚZ“r½ñ¼QDoADÃÕÕõBÔx€ t‘å`®žžž>gzœæžéžî—_Ϩ ,¦¬úV×Ìôô{¯ßû¼ïïûÆ“l"%†Š´ùA¥í+Ç’Îu–ªƒÇë¸3_’U_a©)©…;“ª²’ôy)ÍÙ«ofo©>[Âw›ìæaÂÆIÅ©t½ÈD9EŠNJ˜3g‰·®WjuTK±ÿHɺ¤Œ}‡Šä–u¬óü+@zÂÔW!Z(zé;oÌ_t©¢¶±EÍãâ!„L‡ 1ï‡ï,¼^ÙH˜ûO­^»þñ¥‰9Ù¥_µÚ ô¸/5V3Â9DÛ`í$˜çÇ~ôŸMrzîŠÍÿm6"„N”•§å”6©û´æPK×0ü ¦ZÓӉЖÔPæ%lÈÀA>ô2âL6¡ß‹BUÜk©oáš»L– fÂ:2]24F/2ì'ýF»þæ¬IGà«‚–”Œ`ÛâeÆ!•D¼ Ý®ÕïØ[VYOÀqC!çÙ`ˆè•q^ÂùÈ–ŒâMé…/é-¢– C¸‚ÊÒq"`üT ôb"jÂs¾^—ìp#—ѽ‚ˇrŽ]Y¾vÿ‰Ó•­j'iA 8ê ©K4R#A2FJÁH*/Á‰ØtCè±A;öAÔ7¨¬N»~°]ëד2ì‚n£ Vl\6[•í0FR6ãAV?L™9®µû²«mõCg(ô®†<ù2“×ç.{¯9õOdÊÏÈ¿V¥.½wÔÒiqþTÉ¥™³Þˆ‹Ÿ>ïG?]¿9má/—?aÚþçÕŠ» -± üÖÛ¿È:\º}OÁº­ÇÏßh¥úƈ}Nô¯+øýÅÎ)këèÃèq^j\é`u̯Á=×ïvlÚ~$9ípC»É- ‡GÊ/©Ø¶ûÄ#ÍÓ‹t¦° rà˜( ’¡².†’׉¹ ¬wH@ý^ázu玽§*ëºa ÌŸ»ò@­·q}¨óèÁI1ºdÑå3+zÁèZŽv-¹*[CñU%¯ö˜`§FAþa¸‚h0ˆ< Hè–ªc}Ê‘ª: pŠ’ód ƒ²A"«JÚS¼q×)ƒ5¢ã„À€î7Ž NX´¨g}¬#DX}®€=PAÙO3 ÏÜ{ØÆÃëCºîÐ kñ ôkæÁ,=E&DÀ¨0Ft²I6'ð(ÃìÜt ¯ühAe]“Íd‘ͼ2ùð²[…Q2PÜä·P^ /W7;\ÕgTÚsÉ[ï»÷5{³ªŒõ]ÖÛç/\ØøI͚Ŗ¿MlOµã£[9Ûè:•ÇÄ÷šÜ&<Ôm ël¨ÃéqHçªãf¿7u ÿÒŒø /ÇÅMyeæÜ£y¥ï¯{÷7€l®Ù²/ûhùÍJåÄ7ýÛ¯¿9ÿdaéÅK×b¿>wAö‘ϯÝm7Û‘“4¦TŸ€V¬É„ÛK?\“›{¡µ£cäo¾Ô¸2PNÉ+\£ü:ó0ɇ\@èÌÅê [íÉ)kêèÕš—õ¦¾æVI/Æ Ý&ž €¿A©k¡’Òs×o=x[Õ9à å—ÜÚ™yº²VGÛD+*+5šáÑ;ˆ"ÑÞÇÊ@ÚJPYàØŸ`¼w œ#ìð ¿ŒnTµ%¥ž¨}Hš-²BΆG|zÓÎSV„ä»B–€F‹×Ñ’ô¬`¶‡Õ&;?ä§>~H„ês ÿüÁ“—1N =„·DàH“i‰10Zñk±Ɔq‹``‚ì@Øê‚z!û‘ÆòJo¬I>œWªjêvâžÉ°÷k)•4ž"˜UÐXüÝ\PcG_4 m>§_[aÝTçMªÌPÙ+?zÈä¯KË~ÿÅ]\üÑ’“k?9Ÿy³°¸ßdq°Ã,ëïÁ{è`l'=¸C¾y_³äÃÕ3^}grÂk€âä)3ââ'M›>sÏÞìÁaÿ‚ Á™AS ?Lš0išò5~âìï½–›_TvöªÂoüŒ9s²+³øÚíN(„öoX­‚}úéªt¸ÿ—¿¯Ì>RÖ¤¶AÝ|Î{•‘“!ÜjÍAÄ-bî%øðP}våþº-G³Ž]®i¤Ô˜‡íGݸJ?°1ZOf>æ ¸UbúEgÝ©3¥¤ݽ¯#l!«Ëž|îÚ—)»O¶iûŒà$DŸ‚Ç‹'b ™„–QSK…àÃ3ZbÇ(ø‚D:?ÿOF+4À­n% »7»Sߺnb UÙHT0“B£%N›¼·èÀ±Á<`¸ ÊIôz‡D%üÛ†e8€rN\hÕÚ›À:À©1ûaËÃŒFpXAÈÀH;Dî@ïp;; Ÿ-¯]¼?¯¬²ú!¥gDÒŽb“ó¼©Ð³¢Ž é¬A؃Õjå<ÕàÚ+̪;ý)|i5ÎË­Á %YÓ–&–&ï¬)<]¶gÓ²ªŠJÆÀq´“bÜf.€óag¸Eï¤ûað{õšméÇ~÷ÁÒïÎŒã§N›±rUbSsûü·Þb'MNˆŸ qwæ¬ïÃ×oMyyêÔWöÌKJËdž<ï?/8sçòVÛc&Fñ"×'÷¢—mV2ðò »4tpø ¯¯žÿ¢´0a• )3/–~Ѹ%o×þÏU L¿[fú£ðBfG9ÆSiˆ@§Á Þ‚srß0òˆ¨ê>uùvÝzáPs´¨|{fQM#a–ØÈS€G0Ì HÑ&›ŒYD8™jé H¨¹¼ÐEøŒÖˆÙŽˆ^å.ÜÒÒ˜%¾ à)€Ó;½ˆÎ ºQݺn˱šF’²C-=ÁX‘Ž i Á¤ŒÂäôÓÐ‚Ž†Í%Å#'†ÐHéháq<3à‘ÑáÂóRþñ*nâ¾Â2(åH m§MgÚ™&íL“¦-SúGÓiÚI'†fh'4Ü“pŒÁ€oÀ`ìcFÆÂeÂÑ”ÁÃM0›Ã‡l˲ŽÕîJZiW+Kò!K²d»ÛoW”1¶¦ÃÌ7šµFþíû½÷½ï}ÏhïÔ¤ãuwî·Ú@EÂ!tš‚ .í”0 F¿T #jd"_‚’Θ™‹0^éô¿—¯/صÿ«'"!ÑqJ hj ÑYc`dâfz˜¥½–8mÀÈ“n÷ˆY—¹ç­kê]«/Òå7µWLGÕ×?_¹íÐžÒæ›wÛ´lß”ïá‡]|Øî1Ð~‚‰j̾Nr赕ê•*í÷ó>¸Zßȱ¾¦æÎ·Þ™§¸ÕóÿQs²nÁÂOÒ¾3.^úÙCG³r 7¦oßž½«¨ä`fÖî2u,ÀS¿ÿúO~½§ìdÍÙ;¤=jᄽOOAÕë³ñƒ¿-X”½·ü¡ÆF°IÒ›¨KfÜò‰MMcrý‚/"´m=CF[ÔÄ@—âPWP™Çç 9W`bâ8Áá•‹[x‰Äê$8°×å—j¿¾›»ïx~ÉÉ.³ÛâÂo‡$äN’aU>QG ÆÞ1 Q.QK‡;IP7FpñvÓ†ð'h X=¨ð’w” ꈛÙ8ሂ®ŒGÄd¿ÖБ‘[u÷‘ ßàŽ£ a­ÃZŠ) ¥C›ó*3òª@$*A˜‡Ÿ?ŒÚ„`#p_‡j.lÎ+ËÈ/¿Õdê Þ´:£¸òÔ-¸,>Þ‚l+ƒ:<êÕö¸ÐXvLG¡Û5çï {M,ÚwÇ«åªY£r¿³RbŒŒ²†8:à±DƸÃ!ÁÍV?ô­=£]uF³ãb—úжöÄí£ûÔé í]³ôN݉§5yN$Ö†ö‰CCÐ)/r>é?·4oÿî}Uʬ)“g§¨&¥ÊV!-mÊ«p©“f®Û°ãPʼn¼‚Ò¾þ øÞ7~9·¨äˆúØÙ g¦¤LûíÜ?»úÂ×)â»?øÙ;¹{Ôß\o%˜‘jÐë—L6?É/[ƒ%.eÞ{–WŸÕ˜< ðøK%…É !“C ,Eíì™~µuM»KÏß{쀻€2ã7ŠbD^¬õ3@Ã[ºûQˆ0ÈL²¢…ú†±ÊIî têrú̒-ù;Vl¶HM‚*c@»DE]è”Å-³´DòÅe>ó~iHaõdé}É &€*kÉ`Â[šìaw@ª»Ò²*½ôZw”˜æ ä ˜‡ À±l)¨ñÐE†ÀÔþNI..;&V„s¨>w#=§,sgÅSŽ%¯øäŽÝÕµç´èúÑÝ€2ªdàá°¢ ìí2h~ÄæFü#Í<ÉEà@Zú×áOŠOÆ3p#{ŒÁ¥,ᔚ¡èÒÓÜšú’ªóÙk3ö/Y\¿aY[Ö’ëß½—»¤ùú·ç®h°¶S=+u3"å‘tŽX7=ìp‹û¾¨iUªÔÙÓf“&N›0aÆÄ´9~´|sæuõ3íýͼ÷Uf©TÓŸcBꬵr¾8x¼úÌå_Í}W>aòU꜅‹Ó=2u‡ŸvñV>€pŪLüï‹VäÙÔiÿ÷zFY`£(¢I1ÃX(i§pêâ“U›öoÍ;ÖÔ%Lqã®Ì‡øw’´ê|¨Ñµ{æ­êÜ}ÇrŠª6e¨¿× ~¢ ”b(ÈewtÒ‘ì…Uˆßxh.,¯[¶¾pù†=[ *3òÕ鹟¦/]·»°ü\c;Gp/{G™ZG[í£·Fttôøúª¦ øì·ì5ÁÛçPŒÂɪ»µ ¢ƒ¶ý M"± 0ízÆ¥ÑP†; @@gñ»ƒPéÅ-PN\6ÞnðiŒ˜hq$鲉„C+Ù{œ 8 ÄŒ€I.Îx0Ëð€%Q¶1x ÂHtBÆG1Â\=±¸$-׃ÏCÒ¹f¢¨æ’ºêTÙ†ôc‹ÿycå¾ðS{Îüî¢ÕLÅ$C¯Ôƒ;z¥Ø+jm1Ü”qAÏ”V¾õó·g¤M’’:uò+3_{óùxÕÆ‚Â’ãwuV6ä’þµ,ã{³ßP¥¾6}Λ?þéÜŒ¬ÒÏÖ宾𴛮úêú#…æ‚FëfÖ'+2@à­ÜYzäq—#iz“‚Àõ¸‡:"½p^ì¡Cà! W`vÄzèʼn`¯¢Æâ؄˺-t:j'àgøG®Ió7´0F{€â‘öÌ!ãu‘Kì•Ë4î£<¹†õÌɋʸ0¿œC"\ž™>É—âˆâ6¯(óüåî˜êèèCû ø %-Ý„=I!’’…oÉ?¶)«¢M?ØÚ3@8â8‘£±ŽÁ ŒúBo‹À3ìГnÍÇðÆ.s÷õåîN¨âÇt té$Yoqè»a,)£ŸÆ&%ïPpAˆ_~×ÿH.3>ÀÐëò† Þ¸‰óc¯¤¹h¶úö‘¦+÷ïWÔžX²âÈ_ÿôÍòùц^³Wj£¥NLd·ÔnŒX¡öl¹ß=¥io{‹®¶²vçŽÛ3 3²ÊŠÊNWž¨¿Ý¨gz®—° ÔÐÅ«w×®\W°-÷ˬ]ê«75­Ýœ…ŽÁ{9…êœÂ£ùE5{ËNßn$¸>ÉâŒêi¿Ý-\¾Ö¼qÛÞìÂÃ-=.ä9饯…@ƒ·ü°[(«™l?j!"u(7㑺©Œ+ÎT¾O^8T ‡žSN9ó-:åôÃ@r 6 ·LްÑ&q§\)§øìßG5R"1ëÁón*\‡ëè(îáp„”ðIƒI P®Ç‚þ’÷ML0=‹.ÃÃx D¶h­º@‡qxsvÕç;cô?ÑzÁ–!†ˆ!A¤±©pB½l?ø&»nDh°ÉñÃ}áÕx„/¥e',¯ ´3 “,À±cáM¤Î§¡X‰ÊâX<$>‘´dWM|ÄäX½‚‘ [¸¸m@zŠ­Rƒ-بäì1Ÿ±_ ú-%‘Tˆ²yûD-Õ• Ðv¯ØF^ÉÀаÁö¾xå³²AÎ5lµzxvÐÎIGØâudÀáŽÚø˜™‰ÒœÐ ÙÃV§dåÂsÆ;ôp v÷Ù/ß6Ž+ÿs´ij'>ã$­S§m€ .дš1ì¶FƒE¹©«¶%‘¢ÄSâ%˱,R´(ñÔe‰ÖIrÉ]î’Ë=HJÿÙµ»W>¿5hš²>š×MÝ`ûõO{4ã&[À`ñíBgóiÀÓ`§µv÷6¶)™iùWïö«_k 8‰MoT”ÓûÐ{û;Ͻ‡Õ£5{Ìþ[ðîÈÌ·£ Ý#!•eYkZך"ýC±n;ÙmšgMÃn™iƒ£7Oë,^Å7hñk¬~µ- ¶Õ¶Zô¸ƒGÆ+ûûX¯Îì×™ƒ2Ù¯ÐûµÃ>pUà§ê¨](îTg=0à/¯œeôVüÕ·ŒòŽöÞæ´,úë°Bªb´øÌ8M fÓè3óãEÑ QÕ=Ÿþùë/ß0Zý÷ÕcºaHfƒGaü]¨ •ñiŸ2MŒ÷™ÆxÒgÇ}F§ÜÁUk˜ì3¸ÕMoÜ XF÷«Ë2q{h¢WçTkj­ó¾ÁuÛ4ùóô·CþýLÿà‚Jz [éw ¯Ü7ú𿙍¢6L¨ ëQ\õ_[¡™‰8Õ‡Jï|Á„J甆Ö)³×NU†½þ*p)åqBN™£­˜ôë•w´Ç6*ƒ£ú–ºÿá?9ec¹ÒþfØrZ(qb1»…õ¶¯ºúX¾ÖÞé¢"Po“\™ËH±D– ù2Êl¡­§)!Ìf±LP"Ÿ-–*TPQ:ú…u:›EFq³’/K¹ •ÌOœþý+pZ@ŸA,Ü™ô¯›nÞR!„ryÜý[%£@Z”ø¬êƒà¨ä¬2ž/u$pB‰¹RI‚3K|:\^‹U|a¯ØÍ*V°Íl¢µ0&’O S%Š)°|ê ¨÷›;1‡H:?U»µWj†f ug~‰XZ¡ Ólž¤3ñ×qĨt˜`X~k-L={:»°>IóÐ~äkë(„fbO1‚äHZ¬¶xü‹‹Ï£cã¾*°DÒ…W„ÂûÍÁ}ƒà¤8¨Éí TšûŸ­ˆ›¸ƒzH\ˆÓÙbHu"™L$ùµp|r:Z 3¬-ñ{ä ë(ÒÍDbI‚d¡>Ñx ÊÂäôÌF”iå àÀ-Êø/ï|ýïÞB_€/`&]b…rõ ñ|*E¸s3ërf>4昻¥@ÌG¾ªNCAÀ ^(Î`7¢4ˆ9‘./8ãÎÀ>á'þG}™IU]¸g_ ÃZ€ (J”R’hŒ²ˆTYYd‹¢ ƨa1@S •Ð( a_´dqDÙf†™^§··t¿÷z›é™îéÎ÷Þ+)²ùG°ëÖ«ÛçnçÞósÏ­—‚ ²RˆåÛøÎÊMMi˜L™ Æÿ[´äµ…GùƒY©¨ö™S\Þ Ë#~ç ôŠ.»ÀW5ŸwÁasJ>‰¦HrÈUë …ëΞ»8íù;uîVج¸YQ‹[oë»àÅ5V§Í^«kt{„Uï­}b؈©¿˜žL¦NÁïW%)Dkk%YŽ q»å`0æñ9rjöœ¹:v•š$«‡³X²,K½Éê‘•°Ï/;]^ê¬Î_§Óïó)ápÒÉ›×)jZ\#Ìéñ(,¤ª v»O–c,'Ša$>Ÿ†.—¼gÏŠ ;K3\ÕÆdzæK¯°VFf®%#';§€JfV¾Å’ƒð‹c§"ћݭ¨Qþ«l±ºDÕÅß ñ A¾¯äñŠ‚ô «Í¥…b¢¤x}% q µn?¶F7¯O E" ÔPÕz¯7xù²+M¢$»àdD1Dô÷ó>âŽö ©u ‚¨T×8#Ñ8+²4Mhr qÅH*P’º«ÖOÅîð¨ʨŒe]úÓÙG6åLµéF«$knHSE¥µ)•ž;oá°ŸdΖ%¥ƒ?:kö¯Ož:5^¶±E Ç!vÙ[+FŽ[Ü¢õÂE¿Ç@£Gç¬>X»‰×œKï?rºÒ!”>ý­œC:Àú7tà´°z`»Í)à_hŽ™¢±†Óg.t¿¹WFFNV6†Î¦èÖ·dq¼¡‰}nÙºÓbüÆO˜šH¤ ºB°DQ”:›ÍWW×`µº±M°ÔªUûÂf-róš1?VÑ·ôê“H¦¯ ¾ø_»Ãe û†t««=^¯ª(q»]àk³ù5­Q’¢NÉíÒSÂÀå65ñ¨7½2ëucµ ›b;h’™™‡ìÌÙ‹001§Òi˜‡ ê&À=®GgpådÐ\×M@,_ eˆ«ÖK`®¨¬iJ¥.WÛ¡t?ÜRÁ‹¹¦ÆïF7—KÄ©ëÛ‚,f¬Å‘h¡:*ü…@ôÁ¡ Ðj«E· ŠÚ¸À3 üÐÖÜ…!|˦¢'ÃñP\½fCYû.ÇOœ¡3ÛÏÊ.hպݤÉÏ%S<¸â,)Ñ[v¶ïØ•#¢Ã«¯¾Æ¨ñã'Q_·iG<™®vI;÷¶zµÏ;ø?Lv¡6…£é³çm6‡À­á”p$ŽÆŽ›˜­£›Õ¶]G‹aq“ä-ÛÌxñev´õk€ÇŽ›ÔИ&jqbø;PÀ9Sç.M˜¸¤¤Ôp ÖÇôÄ1¬/oU-jìpz ‰ Çbu ’"t¦"‘zU­#ºR̸ŠSTV:`ÀjZ=^ó璉·ßik!mÀ^ØhÖl#ˆY²î½ïã'N›ul=Ž‘l°Í/Ož>b 3–ïc?ɼsçnùÍ‘Æó nÊÍ-$”™ü›)„¢OäÓòC÷ÿd !Îìw÷ö|´W”0j‚ ip¸ç£}¥m;ê¹\F.É…âÄ-K»ßÜ{ßþÏ þL²{ÏÞÛúÜIÙ¼e§ÉNåÜù ²…¡ýÜÌ@Ø8ó·¦'jüiÉ_cñ”ŠvøDë6eC† }ùWsôC[¸HÏL Š5)uéòcç/Z…òC×5ÖéMÉJR §NŸ­±Ú9Dy’Ä’˜i䨧Û|¯ÌH}uä ‹òäð§ž´®ß°Å ‰“§êæ(A¿(UÅár®Û°~È#çä›¶ïÜA‡ö;诨¬<òg._V1#í}ûÑzðó£Diþ?8à!,N4?a²9|Ûö]tøñýš׬]GÊQëö6t€Ô¯õ@L’È-åÝ»\ºd#ó ÈQŸ?H3Ábó÷æËÄ+êëŠã¿ö]T¨SE4¡n9TÔŠqijk­ÚˆqKLj“º6Ƶ. Æ%h“6&æ(w­&sQ¸DpâT¶™a˜``€~Þ{ÆãIþËù9o¹ïñÞ»ßû½ß«”<ÇPð@ ’^á`>rôkèN•NE+P¢tÙòUذx9‡Y¾b5í™o¾Å×nõˆ~Yîv‰X á¦ZIY©ÅZgµÛŠ®ÓíÛ_\3÷ÂyÚñC‡ÔÖYÌ–Ú:›uÞüùŒ|ºí ÉrÀÉk7*éË©Â#~Éç¡ØÁ`ðº}ç.hWå[}ƒËì3ç}}ƒúõå̈Ÿ9sE¹ºnýfÂ3€ÚÔìD›Ùë“§3µo::D ź¤(:::†ÔSþ¸ þ"éÖMަV™ÊðJ'òKn ì ip¢²¼ÌûüÀ9|H¦ Ý(вÛÚõ›Dn]™ÔÐè$112 v0#YÙçD¨v~øøQUMõ£ŠÇÊ ÎÔ©¬Óê.(/7ƒÌbZf§Ïx›öî=A&ØãTD&ª†r”°@{>Uß!T•‡%cþI•IrøaÃ^õók—y2 ˆª"µý²d×(M­ –; tauÚsæ,$£¥í=Tv¿bÄè±Ã"‹®ßþø“m$%%³6qŠÚ¾t4p¥¥é¿Yù·Ÿ¯®±´ \Ûjµ·\¼Uòý#s£ÚdEB] ¥GwC‰9çòH Rx Oõl7yÊà­±Éq>ïBìÀ8á¬.‡Ò}_A†áµ¥ËVB˜¼Õê5냠)-:ú% NüÈÀÓ¦MWK^·V¤lIeWÂð àv"±äÓmäâ*0@Î%Ï^-º¡Œ»wïÉ,‚J¡;pаªj£Õfÿó뢢A$¤ù$.ä£Ãñóo§sÑûø`Š2TGuµíg®·Úš‰¯Ù³ç(¦ {xâè‚a² € hÁ{;¸†îºuïÅݱÒ2ì͇ʥ°åe¦Ï˜u§ä.')*¾©˜7¡Û9¬ ík7®WTU‚ÞÃéd"ÅÀYg²½|¼ã D?ò³ÑdæHœ‡ÙY³þ"69‘‰B#”x¥°°HÂè\n>`ëб3јQ5Ìr 2É œy€?œPh >PÊ0ð\9­Âq–—–¡ât¬â_xMç?|ûŽ=Ø,\´X84yÃS&õÐþlÇnàçlkË<“/%ÄsgàÖ“³ÎöÀµÖ&Œ³¸,‚,©ô$¬+ôƒÎ`pórsó‚ŠIÇŽŸx’ôÿ4È5:š/Y¦F–,]¾3u׋ݢT÷jÑ5^ CÇPž‹ñpóohb*ì…Ȩ"._)24‘Ðаƒ‡ŽìÛ8¸=öZÜÀ!¸Jµ[áÅïŸøøJAkÀ@‘ ,lV¶Z›QF“MªÖ5‚37¦€F8ñá\¶âÃ×BBèÜÀÎÀ&³™PÒë=ß_´ ï“mÇŒËk׉\O ûBxW^cÇÎ4v{ïoóä2¸ ˜íÖ½§ä犯Ý(-»Û#º—dà®LÝ))‹#1¹ðV¼Xö™œ—cz3ûùöT™¦ghBó' 8#ááˆ7ݽû6ÉÏDÍÛœvå*ÁQQ/IýŒw¥í—2Ï…’sWÚ^Y« å „>eä÷˜ I Ì•¡åú]ê5¦¨&NLt÷ð?Â×/xgÚ~WüC<ÚšÕI²ÀgÛ¹û ls¶}u: ‘ý|,5ðOŒ„°Ú(h¡Kd7pëæî­`ìã@£wŸWJËîs£ì3¹p ZôÀÁø#¸}ˆèëôž^¾¾~nî^2'f˜Ì–ßý£”‘zwè”Ì«ÖFEõb7ê²Ô/÷ÈHÑÜݽý‚±¤6Ù•v UÒ{BÂhW½§I!QæÁñ)mÜd³µ K³bà¢"`‹ÅQYUKͲ`ábÖnؘÂn𤭪¡Ê«D‚ñ¢ªœ‹´È=_€sAµNçn!†šRéÐJáÆ¥bãâƒdnÊ=ŸßèhI^»ÁÃÃG‚Iïâ¢WÕh7™hŒ&˱ã_kBúzHf µ ­¶zfÇ›¨ýXdÁ±ŒôˆŽaÉ*ôóéÃ}u.ȃ—wÀ›oÍfœÈ%*¯|w=aÄŒûôýu~Á2 ·`‚‘ZË$Á¨zÀ°yCf5YÄ1¤ "éרøáWŠn69Û6H¥”œ¼N0ðL!oŽ8i±;™Å¥³ržsWmjy `Š8‹­Ùh©\i|ðàŽ Ë“+1¸âµ¡D¸·¤ô®oünÿ"µcHg<Ø%²û–­ÿ暥˜Å86nÈ©¬œ˜˜~Ü:æWýXuóVà÷öÕÞ#G½q)G÷Œa!¥Íî8uúìo†ÄõP+¨È8ò®©¨0 ñÛñʾ¨è–@‚Ñ¢×ûxzR»•—×<|h4›uuÎg\[ÛX/‹,ÅÀk’ÖKmvaÜ ›©Áš,0íõN$"é`N?6 6ÞÓËŸPz÷½y—.¡89Þ[µz­§—_‡Ž>:pÐPÅÀ( læÎû{HhØ/:Eüõݹeß‹"1À¢ñD»GõòôôóööŸ;ïýë7J y °LýRð'Ôú¬jE“sάì\ i=Œf´ ’.ëD$®[¿ã3ßA;šZÈ’ r ¶R ûû#•ùwäu°è^½yÌΜ½ …ã¢/%漂WÃ0±,V…®×ÛÀ5RE±!X~z^ê8Q’dš¶àrùt`›SË&žX¶_|tQz)ÃI<¿³ñƒð9ž9Îv½•»gЙðÎÓ ÒdqV5¢é.‹HÑÛNtbEÜ â…¨‹q’ )ª'ôÞÙ£ÇÏŠ‰Œ/2»N¶c–rƒ?ÁäGý*@Ž7΋ð>ŸFð§˜Uÿ‡?óÎú­/mþZpgã>a Zn$)ޤY†í>ÚÜf¬0é ]_QèÐtÇcGvÿñ¶d†ç®® ÿXOe5.,xkÀy«ö„»Ÿñ˜Œ0p’¡4`#8Ô8/aMs™•è6“ïC˜$/pÝв¢vÛ–$óéÓ–çÅÀ‰ Ó|b i¶â€ÛŠ˜bõv½‘CÂ,$›Ž5›†i†’d×ëj³iUh6޳FCgE–]Ô¶ÓFÃà'ýÃ>3ÇmIi·Γ¾Ë·p¦%éIšTYP!­ÀÀBBp³³‘ƒç ¬c*W‹‰òƒ~0.ÿû3Å›ü…«Q”={&á¡$Yùáû÷ŸPk¶v: ‹]|¥hiˆ€ä‹y‚40Vq¯Ùx~²UÏqní[¦K•÷¾ñ­ïÿà‡Ÿ¯o5¬ñïó2GËý÷X$_ï÷{¿þÍo æacÞð;Åô@\A´+Ž9¾ð L†E À6U;$\Q6V^ÞU½ WÖ»XOßÀi]^ÉÜCoàLVaà8ðƒÇ[’éÄšé7$ ˆGY]¢’³½1‘Ôò;W„´dÝï¤T¥Åè§y¦ȳF‹˜ûªîÈ@·m;4˜’B?$‰¦í%lW àè–<ÐÂnKŦ$‚p4Û´7m×× ßr°!4•Ð'ʲc:I³ 1$a˜Q\u+Ò4?L2°mÚ¢ž[¼uûa¾7²ÝÓM§'R[Dzf؆M šéâ¶íE²l9~Lµnî§è=8$%©ªBBD)à\h›Ú¤ h/½ˆË逥?ü ¾vý­£¤pÅÍ3Vìî*q–FG·¸ BX¢%p!r¼D7|ÖM:ØFK Cá‚ÿ­í†ëƼ0þ-7„.ø4~Êù ·°x¦¸úßýÚ7ÿø§¿ÁðÜ&FuÝyQu×qcE\”"à++ßy÷½ÍÍ]¯CákÄ­Õ2hÅÕ¬`GÒ‚$S4W‚EE;\ &Å›'ˆ"SŒÐò³ÓçÿóÅ& üò÷‰n§«k×ö¬ èj&!MdHÒ͸ÒõŽ÷ NsEiò&~.FVˆ¬eLBŠ™>©;¶—Þ¼õðöÝ-àø1×lí}ZÑ=¸º±…öIsÃc&5ìÄrxÈ€cU&ßëd¢¬H@k¿Þoö@-$<ÀÈWhÝŽ?i*FS6K•…ëŸß†wdl¿ m½¬ƒü[Ñ¡õ—}³„†€ù)üãŸ ßØpƒLÖÝCú¼ç¹°êVø\wñÄñÓ¦B e†ÀxV[¹ðÎ;_ÿöwÞÿøwQ¸û;QKqøW£X¸ø¼TÖ=dÀ‰K/{¶£þóhßÏñËg6Xj´-šA|†L7Õr¯´Ü H‹X!T¿ÓIM/UŒ¨©Ðïdå…ó[uëâå—ø¤@ØÉ[Sà +ùEo8)OôÃó²IzÌíwHi…¤-=+ïÊIÛL@ ôxíúýG›-:(HÒO,/Û§a?N[Š»¹M—Dá²·TZ&Oy Ƹ·#m= b¯é¦SËO÷ô‹‡=Ý}»éAQ½¥ŒLÎ^ýïMq Ç|;ˆYEâ·ô„r*¦CâˆÀ®l˜†lw’Ôö»L>l·cº $‰n@Õm÷ÞãOKt3¤ƒ#wÒ 7:&<ôi½yÀC>hë-õÑV‹—›mReŦœD¸í’»‘ –±Ðh›Í¶­šq>egÏߨ¸×8ñæë¬B•ª0ä 0zNNíÅ‚b%Š•^Úö a¯ÕÎr¨è!·°jÄ—®®oÜÛâN¡ÜTçUÐÌ`Ÿ.ÖaW€Dxèª3M&)´ ûÙ^Ü”¦ÆHÅ¿¯é¦ýƒ¥ËvÑ“„©é6ŸÎ/­\_¿£šQ„ð Yî—DlñÞÞ7F.«ç%,¢yò©»Áל´‹' É S­¶Å3>DZúNœJŠ]oPRÑé$‹DÄÛ»mYµE§Øô‡ì…B-+ÏvÚªáˆ^BÒsƒØséí‘#"ü×¼½þ}„ba$9’ÖßRÐ Þ ¥Q'8’£’ŒˆIá®Qpï³¼À‰¢¬ë¸‘ ÝXêz”N¤%™Ü> ¹1Q‘4ä½ /Ë ®k•Ñ”TMí>| å­uVMDlcK25^V­E*½â¶Ö¦’)dXuØ ÖƒTRzµáئÄZïÚrK䥰¹"kHtE4ÍÙÉ_Ó*rlO9**aàÖûß|kc< ÂZ"“ï'x½ ‚FY]P LÖŒ mT8‚Ì\Ó‘J¡è¡Ôt5•æÐÒt=-pŠª"ÿÞ–÷ʇ–ÏüÑÌãŸ_´x‘ÃéXùû•‚(U†®ôª°—Rï} ÇÂÀ LM3lcÓeƒÈ YÑÌgè=㬠Êa0–KªšÖ?…7Ùißà ‡SK¥Y#³}CSuÕZ'„’,ò"抲¨jŠ~]7Q–®PbxF.«ËqÝ e-šPõ.í†qî\c2©ôƒÀ$¦YdÂ*ܰuç¾ß­\ã3í ÅnQOˆyèÓ>Š1ASPJœpÕùƒ–&«2¶†Õj†Ú‡Yü8!¥‘siÔ=ý1eee}éË#|\ è ëa×=+¹›°ÌÑ.6b%X1lr»p nwF…áÅp¢GŒ.³÷Aƒ¬ê²9–× l[ã:+ŠRÍ)<⤛§H€ “ÜÔÆ_¶îã͵``ëO‚M»ýÁo £#‰¤Šž@¸ÜváþúCQ/äÁ° T¢ž` ðºKp5®:×GNŸ®iä´j&ºJìËÚ²jÀRüõ¦³ä–‰`@3 é™÷$c0Œ$Ë]¼ÔÔ{Ô½!öËÓÉ–/©$º"\0,ý‚ØVLÆ/+ŒÌÂt(˜ Y‡ Ý,= &nÅ%t†£ÐYKâŒð¦YdUä´¬ˆÖm{MojnEídmÃì Æ©(CEi†ZÛ;¯tzÛ:<¾`ŒIM™þÌð‘_9©Ív·ÄƯ͂ÃÂf(ŽûB ÀO%|Á¸7¿À(+¯DDͲý%¥Ž!eßîÙÚÓ®LˆFåÄÉã‹—übLåh{Žmèƒ/Ì›S}ô#b+EBæul®¿ßÖï;°wç®åC‡—9ËJžûáÜÞÎkÛ2ÂÑÐ+¯½\V^ §À5ûÿ¶ÉäDØ A ©hÊ[«ÿ€žgñ„ïŒß½w—ym‘ϽtÙ‹#Fƒž¯~ýÑWõrk[«~Ã&Õ8{¼TKëUA”4FÙ”Xõ›•ÎÒ¡ —–h&ÝéÄâ,JPÝŽ™ˆÒ†$EñDœsÕÔy»Ln‡ÊJBà!CJm6[aaA–ùÙl¤t:'Nü‡vž[³fuF^X8¸¸¸•¢¢Â ÖI’`ÆíIDYöÒ¥KFߟ~ïWxûPéwÖÂÔy(³³³óós'N|ââÅOIL–„E‹~¹Ýn7ÿÚsrìëÖ½LÒ×)Ñá><õÞ}w3ú”——™ý³†øàÁ& G7oÞyΠìç`{6qóêÕ$¯ “À 皪kH`š %†g’|ýÙ >8ÅI?›³[),*ÅDàs‚æüˆ×D •`8ˆXHÃlB,E14-¸jê½_fåcÇŽ…’úúzs³óçÏÍ;ò3fØÔTRRœ——÷ú뿵˜ïvwVU­‡ {¸¶Ö•x‹åMBfŸÃ[$ð½\[÷ò&Ún6ãØŠŠ ‡ÃqàÀßÑ ƒóæÍ…_ªª~æ¡Cÿ,((=zt}ý4­.//Ÿ6mŠÏç5ºüK”€½(+*†Àƒ~øš¦—.}JfÍšeÙ¥¥¥eܸqùùy ?/¤Ö®û“Ýn›:uZG‡×êàª!9pmm¸ ì$è¤ÔÞH¥Òñx Ú&L˜ŒÙ÷î=èpT ráBk,Æ%<l2)uºCá- [ìMQ!.D‡9†¯#0Y[åXÝn7ö¥(š(Š(!onn|Ô¨¯¡^]}õ9s^0­¡Á2²Œ„±dÉ/!ß½{Oÿøs‡¿['ðgïK¥R°ðˆ#2’cÇŽA2þÔׯ߀úŠU™¿Ó§ÏÈÍÍkl$ID+LY$Ö<}ºŸ|ò)K~øðGàöóÏÿØjF£‘I“&Ù³sêêÎX’³g%Iqû3Œè÷ÇÀRI2–/¥¡¡9O;feå…B ËÊ‘‹èÚÞîFS ° T8*œ…A]‚H„OÒŠ«¦ÁëñæßøñO`/W®\½Þnuug, w ‚&’››ÿÈ#_ÄÆÑÄ^LÛr8S¨€ÌªªÝA¯õóû<X„É“§—9ò±A¨_¼x R¹7£¹mÛvøhÕªU™þS§~’ÚÚSV±H7Ÿgð”å¬tZày~éÒev{ΦM¶ºíÛ»£–-[nt‘t[¸xÿ¨9)¾ËM¯¹\!°7H{}q6)¦RŠßŸˆDlÅ`áy£¬ì!Ì ±ápª£#9E%ÓiÔ E9éPDG„HXˆ†ÅXDd-» ­›ê©IS ¤ÔYa³ B”;h0Ê‚üb¤TÇljlUd]U´;öز Ê)øÖ7'¼öjÕ¿U#Гñ}½î@àûµÔÛC0yö{3AZxxè Ãßß²ÝÚÐæM[ ;fÜù†‹hnß¶kÔ£Á›§OÕYûUd3L]S¥*ŒŽÿöÄâ¢ÒÙ?%÷)Ÿ&ÙÅÞ=`ÔK/-39O¢Óüù !9üïjk¢æÆþÿ üFwƒ½I#Ö=ûãlZw{¹‰D¦(:™$³<ðÀÌâó‘Ì”öû£¢¨·»©hBŒÄyB$&EcR,*Å Äd7WV>ŽÃÒ:N“Ãx䔕•ÏúÉœ¶¶vYÒMš€-úÉ“§ž~ú™ü|<ßl99ù¹¹³gÏõzþK~µÆFq]apl‚A¶‹y$„WD‰GX•ìH8¸Eü)J+‘¢VPUª"„T^J#ä€Sì{m0¯Ç8Ä€ßÄlÞ;¶w½¯Ù™ÙÙÙ×ììÞ~3Ç;Y  ÖN$ݽ:sçÌÝ{ïùî9ßéÄÆÿØ¿ú'´°W‹Àõ¶ÿׄˆŸÝOú/^¢Õh Iˆ!¿HK?|èšCàÅì 9x5vìx8nÖ¬9))ZYt½¦ö©©¼R€>ñx¤%¿Z–œ<>-uâ_ÿò7Ì?¡Eò?ÜfœÓü#_^psãÓbß¾#¢`ÑÇBÍéa1ju©.OTô3\ŒÂâŠÝ¶ØD¬ºEŸ[ôë}€z¬+}’­v#à ¾`¤€£·œfA·r‹ /„½‰b8àguµÍ=ÝÉ€5ÜÝÝÃtn——‡£Xµj•ßäyÞØLÌã¸Ã‡de½·ví:§ÌÌ,úvø%`¹£ãÎO²€aPˆÌÌ÷ÆWP`ÂcWW÷úõëÓÒ&˜Í¥dðèÑÜœß'$¼ööÛ3¾ý¶&#ã·ðf}½F!dÙ¯(Z€g€«eY6¦u:6¼?zôk‡Á#ª|µuëV¦B¦U7Z•wéb%ÙßjîÐÜÂñ¡x_ýæ;%­ÙfçÃÞ 3<·çãÃV‹[öG$_Xò)ñ ÓNyk:þåÑ“>»KtñÞRt)öøa£J>|õú¢>WOu»ý’'t½¦¾§»—ÅRðòåË1É“'öù|hPf̘C;xð (ŠÀyCClÖ¬YCÛ …B°„²cǽœ<3ôž|ŽŒÃ8áÙ³g#W¯^ÅÈÆ™î€ÓxÕÜÜ<}úô Ü¿Ÿé ðÏ4$£ZñNš4 > ƒLC©RYY©×8kñxþüyè™™™n·²Pú½ûî:ÐÈïš[hæ{wy½ r÷ÍÊ©Ðy9Œ²/Š+>Ú«˜Nrpžø¦DXúDq£,6xGz¯?Ükq8xÉî†×ÁÉÎçäü.WÀ튞PÀ­¯»Õû}¿±kŠÀ]]]´Y’ÒRÕO™2Åår1íâw-Y¢e±ŒŒŒÎÎNa,v=wîÜ”””ªªª!tá—‘`àsÅŠ8äââb¦;"+++!!áØ1­þ2™LXúûûÉ]»váqÏž=^˜F<”gÁlsrr&Ož¼sçNX ‚€Ç1cÆäææ2ù3gÎLOŸ€ü«(êÑ£¹II¯¯ZùNoOÍÓqû®,‡kk_`°8°— ¾Bìñ%ÿع¿÷{‡±Ôÿœ& Çag‘Ú›MÝ]}:¿Ò¶¶hÑ"0-[’qO7mÚ„qœñxãÆ Œ`×ééé¸Ë£tÙ¿?"9M5Ì2¬ª*“´´4ë²lÙ²žž¼½wï¸&) õ˨… RE袟5K«’ˆ "ò@Ÿ6mz\±cÇâ[dX¦çbÀãIIc](‰‰cþõÉQ%ލÚ2ZB!å…Fã$4"/¿t÷GNÉ`¢7$zƒñ ÓN˜0åõqi»ûñg*‘("³Ty9(ȰQDoÿâñF$)*#ªÖƒÅôt÷£ %‚´téRƒB0ýÊ3ýÂÚl6 ‚ðh·oßÎÎÎ~óMíÖŒ?Û¿téÆqÈÃîXÆF€™î ³Ù&IMMݾ};‹•BÀ¶mÛ¦NbÑÚã…(4Âõ³¯†GF€qþÈä dCR tòp)xEÁ#­pñ Bl#„|LHÆ0¼1ˆÏEQÒÿËOTáNÕJ:ÖÚÒñ2@çòDBQ–_X¾õÏ¿råÚÅËÕeç.—W<ÝJË/\þªúäé²3æ R.~YURv¾ìÂå²ó0¸R^ñUyEåÙŠ¯Ï«ª¨¸záBÕו5Ç>Ëokí¤MañX0mŠzd:t±/Ú2#6…‡†‘ˆ.ÃêÎ8!Æ »Ýnã‘ðÆtvAÁ–ÐHî`zÝéE9Aƨõ oÒÌTã[UE>t(  ÇÀŠ~™Ìû„#no(ùìóÓ&s{ûƒ§LE%ÅgÊ OûÜtÂT\tÊ|ªä,l>{#ÿ.8™{<ÐÅ«¼ü‚⒂“gLE¥¦"³©¨ì‹¢ò³……èÍùù§ì6÷–?ü‰ˆÐèÑ£‰A‘b@T ‚ƒèûJNN'ñŸ'&&"…a„,Á“ ƒ¡üòÚâÅKzzz›Ñê뛚n=¯57ý<¤QÔM·tiŽÉÍ›7Áêêê@ CŽ~ýzKK Ál¡744´¶¶ÖÔÔÀ¦­­íÚµk4 ð¥ t˜Ý¹s§ºº=Æ¡`°¾¾þÁƒXú;,:>=ômmíµµõhX`¬šZA¾»ÕþMõ B´þ€=ˆ½Q+§Úø(/GpC>Í-:QP‚+"zBˆõ¾ R£á(à $? 7TsxE ¯Ð` BŒ…š¢'Ì£ß6M²³—”ššFƒ~„FÀ'&ë=á“,a%|âé$À-®Y¦¤¤‘ Ðxã· ¬[—14T™Qáä™ülDI8&” #±Hq’éyd0§Ç ˆKÄ“XÄXã+DlJ”ñìfv»f“eÙï´J©± ™ÑüJÀîzÜ‹¬{…@‡ÞæV‚Ë#Ÿæÿó`.Óç óÈ¡õP ´:˜xžå€ ƒø¡ÁŒZH«×°eÍ@2ï–½ô7¹¹ÇuÎ¥\C§J=vÍqö‚mR¶b1Ækètzô9Q)ä)ãÓ~Ålùj‚éAà•+W뻇ôï†ZŒj x<¸ÀH÷,V¸ž ¨“=z‚bü±ó<9É@$/äèÁ=hfªFŒëò´WYgÇPæ—áÀbqXéw0K^þqV+?`-67ÐëtKêîÞîÞ^‹£Ïê´Ø¸® 'È`«Ý²®ßΡYl¼Å&Xl¢Õæ°J‡Ìó~Îå½ÓùpÆô_d±Ë‹ â4p…"î)¡ªÎÁ¨žë8ÝqF­1D‚D’€W¯~G_*MÕïG!…Ÿi?„»ŸV €Ù8öx€ÊRœ4J#ÆŒ ½°¡£0¼iŒP¹G¯íWw„æ' ­Ûk©ŠÆCA5@ÞÒô¦ÆVB¼ÀZóD9oÄêRþÃ~ùÇVUžq|¬lRZ~ǯ„Aha„¡¢?&@ÂD@~ a‚@HVþ@lÄ %&†àcÝÖŠè@‰+ddJP¡Œv (´ôö¶÷ç¹çÜsÎí¹?ÛÂÙ§çÉ=vˆ³Y\›““ç}Î{ÞsÞçý¾ßçûðÞ[þòâÎ=ÍÍJ ¨ûBÚ嫞¯¾±EÕ-à tÁ*w€ †½¾ðg—pçѹ‚ŠTbA¥5¤X‘H²±1ìñ„L3­©±â¢WTìȨ®1d8ñD" ©Š52Æ ¦í(ø™GrÝ0b»tqKœƒíâÅË.ÿ¿7‚éÌU$ý[&Ú sK0Iˆîу" ÜÙÄ¥»30X8§|—®®mmø3²Ñq+ÝÞ©ìêS5|á¿k`ôCH¿î‹¤ci[uXiûõŠwp8djzâêµ–¨™«ü µÛ¢ÅËó ¢CïŸúÐo_(Ï<5­ô•o@‰zü¡&Øë‹x}ª×§5û¢--ºÏ§kZ"àׯµŒWüÚk…Lš4)[uÊZu\^^ÞÂ… = ‘Ê0‚ìß°aCQQZÍþøãÌÀ+⑸ÝQ%ɶœðôéÓY¹Øvλ€óâÅ‹00þ'žx‚.Â@À|åÊyKT¨»ö]w»IèÄjw’Þž .` 6Œ‘Ó¡†Bh§û:t!:ûĉ2à÷z½t™aÔ¨QãLJ¿ NAÿþý…h‡fž%K–`óÌ3ÕÕÕ²^Ñü1*ýß·o_‰ÆÚµk€ÌsÀ_·Ñ®e‚Ôe÷ÝwŸÈÙN®§;fÌwØ‘#Gð Þl'Îï½÷ž`^´‡Ð¯'H_Ù¾/ €¥IV}ôÑG±÷íۇ͎»OW¬X‰çð_H÷³ u©TǧŸÞ€ƒA=2“©ŒO!tÁ0H¾ÖØâ(áœßÍ­|ãm íó+À¡êWÄàžPõ¤ª§4=f¢Ñ´if,«½Ù{ SµIj¥;mÚ4EQl½Vê‰ Ú¸´´”tÃd?ÂIÞ½ àî7—„ùg ,]‰˜HÃ0dd0¤;räH;‹IðÊ•+m§¦+,,d-3¼ÿþûÇŸ2eʵk×ì,ÓÒ(±]–;¹u ¥öš5kܧO=µ¦+ÿëìÅL¦ýäm8ˆRÄéz§„ºHPú‹UO£~ùįJ¶Ð¨fXÑ1‚! ¬‚^3®IÍHiF:jdt½M×3äü¸Õq€'MšÄ<”±n:›3gNŸ>}‹„š,Fèä.¡p#³lÙ2Þ­ªª²ïøë4¢*‹ÄQJ¸`KÛQªÂÀ22 QÜAËò÷C‡1 ¤¤û•W^ÁÞµk—%ðY³fá–Í’G4üùùùL"_üðÃ] \YY‰½bÅ ûs ñK<Çþö÷ÎÎ Š¸šÌmk`”<  ð ÓÔšÚóC‡þúýùÜù/bZF'S¡pÔ°ÒQ3¡ÅQ35±3ºÙfí†^mOÄoðƒ>ȯz< *ë%y ŠŸþysìØ1ÆÌ˜1Cº„͆±uëVüÈcû.€»Ý$8¢µ°û f;l'Ôp,Å+¥›H$Øìܹ“¾Šín“ížÓ§OË`Ñ!¶þ¢¢"Jt íH‹²²2ŽÆ¶mÛìì¡ ºAèõ¶LŸþPÿ~ƒNW×ÊëÕ§jß6gT­š¨éÌ+æsÜ=¾D²'Š"ÓfCÎPt,Ѧ} €-«#¿~K–¤#K£I¥@èü~?~–aO>ùd]r(EðÿÍ~µÆFq]aïblkMx ‘D!P0PUñU µ 2ˆDDˆ¢¶AA UPiU£@R -”†%à„RÒ–€1‹ °€MËÃ!ز Çàõ°F$þú÷CëßÙ"¾¨yƒ†ZèrˆÃñ„á‘ýPǤd0ºÏñªá ×ã qœÇ)Èßœ4y×®t¡Jÿ;Æ@/Y¨  …F¨2ò0{ ‹±ŒŒ$ê2wcËz´]ºt‰'éÕ¦ÌÅœF©„þJ©FÃ7Þ(a–˰OÑN§3ÓYÚ„§}°å m¹ †4MGÇÆ°¸%ŸIãü¹ƒZCÃã‹8ANÃn5½°s÷þuoÿ¡êÈ©²²*û‘šC•Õeå‡Ñ¯­9qúÓýö#Ç+=zìÔ©ÚÏþ¹¯¼âPÕ‘ªšŠÃGíGO>zÂ^}Ê^]k¯®;R}ººúlyù±ãÇÏ~vöß{ÿ¶oÚÔ"KV6’R‰Õz7ed›Íj¶¬Œ†eÿÐ H=÷ÙÑhŒäÅž‚ð •l¶‡Þž•ÖÀˆþŠ{J—jô 4fÌ@hE@Ž43ƒ4(š! ÕH˜8„–1¬’g¨xd·†I Æô…ÃYVcºI_Z¼éZ[,¬„Kj ìñ§ÃÇ{+v}´NÑb>% N$ LQëÒ@¥® Ž:‡ˆ% ݼRÇ^8z$žÄyb¿¦ë V;l`u<€¯#§1‚Å,Ñ2áòýøX@nd±xn 讀Q`Aé}…€¼M·÷µÌõÔðáŒ{ öðݲHŒ4ý2~¦"¾€P î …Â@=žŽÇRíÖÍN—ÏŸ¿âñê0d°(ÇY‡þãŸKß~gKÀ4aDõ$ÁÕˆ(*þÇã ‹ê·Û°±aÝÀãýn×t|ð‰j'4Z[n¼“¼Äþ;#e̯¸ûi”¿X.£5™?{òaXÅAY¯§ë)J È•MMMFú/ëÑ7öhƒßÈÿÌÂØabFø–PÎû)ø± bŠÂ÷ +Z3Éœˆè¾eàf@€Æ)ô‚ýâFã•f/\xKª!z¼U4qI¼~÷Þò­Û>„æ/¸»9—O ݾÃ;]^`G·F¨ß;]‚ׄW(dÁåå2ç’y§w*¼Sœ~Q ò¼âtªn)ÐPYàDÈ¥Ì/e@¥/bnÄ7&ÓÚ‰àJR3“7°ýïäI–ûŒ&C:$‚‹z“ÞÈ*ÐÞØŒŒè÷>°Q,’iÒÀ-¾7³0¡)ŠÛ‡dÒ/ +ݲMbfKÃ8ÅÆw3½a4}ÑÅî‘ï)þdíéË™ ;U ’0(´tÏw7nãy·Û£v|épI> ”zçmÆnm»H£s¼”‚·[éâ]]‚äà=^vðÞnÞÇq Çá qBEéèê6ÒrèadÐ;Ýï67·<0™ÊH÷öç*lžaKf_ˆz ¢¤fcfî§5€=Ã!ãpºEÎ5îa'0O„¤ëÉÒH$ ¨³,LÏaïÖ–v-šx2'] Ø8ŽÀûßýýŸ`@WtÊ@,ÔØõÚw¿Wl±äNøÖ›«~#fÛ®w€»y©ã6îvz8Ñˉ>NTxQ„˜ãeïÿ€Íˆ=€±Nï½–ªªª¦L™‚¢uÔ¨Q6l iX¶··¯Y³fäÈ‘(fGŒ±qãFŸÏBK0H³¤i˜¥î¤I“ Ç›“0¦°ÊqŽÕ«ß>¼ûLœ8±¤¤¤½ý¦‘Æp ÀZü© †~€TÀfîÜ=pàМÜ~°Åš‹×­[ÿ;‚·? ‡¼Ä»"!Aåyï}N>ß‚ëÙ¶ÀaEEEVºõ1Û¼yóˆ“!þçÎ {vvv^^žÕjÅxíڵĴ†©ß’Z°_{í5,æ9¡§DtxçÎ`Äýû÷Ç+0Þºu[8|·Šù¼± ¢â^ ü¤æ8]¿äVÐQ¬-ùÉOqÞU« <ÿåý@rÁðQ ᛷ1€NÉ` WEp©‚Ë/ºNgP¢¨ø|hà¯Ü[°U\\œ››[ZZŠ[‡Ãô0 ²²·v»H›={vgg'nÇŽk±XXUK›ªEQ,**¢aÊ”oÃOÀ3ñë×Û¦OŸÚ¯ŸmÇŽ÷!›·oßnµZ^}uVggíÐPQ‹F/\¸úT ìDÊ7 Çbõ«E“`æ~/ Æa5Œ²,•no ü €Ñ].¿’0càÿADža{ A‹ø2±WSSËâÅ‹1Þ±cÆ›7o6Ò(%v­¯¯§ÒŒ=¥( Ô2mE°Ÿ>}š9“rK]Ý©ü|Ûë¯Ï§[·Û=sæL«5ûâÅKôø•ËW£úS20$@ ë¡p ˆzU0-êµ÷¶`µæþðGK@ΰ@s‚[„`–|‚WU”ü¢pJ€n]’ª¢e0ðsÅ3o/€A›ÛèÑ£´”%ø­\¹–ÚÚZ›Í6kÖ,Žã “!’ÇßÑÑAÿ¤„ÁÆxvÕªU°`1v˜:uª¹gJ0`ÏxNÏØ Æ^3ØstOOŸ3}Mw¾îƒƒDpicA©TªþwUõQ_ýû÷>| Æ©áp4NsQšQ|Œb”§ Ý4*E‰§¼ð4*’$!áÊËËs8¦-Q¤™¶ë677ÃTfÌš5kË–-.—‹ÀC.‰#\Œ‰€×¯_oŸ²|»ªª‘öç®»k×gˆÜ¾ÝD?zšþlNЉ¤”H¦©d†¦ešÎP´È±ï< ´WXXH¨™ÚÂ… W¬Xþîݻɀòòò%K–£]·nLNÁK‰’aݤ“H$Ì ¶ßYVV‚Èþý–«“ôð‹/>G¤±ñYÊçBÄYã9­&ø,›6ðÆËªjó00'¼¸ ¢@ l€˜ÿðÇã3ðÄ „§ð™$0Œ•hNJ²™$+'Y…aÕTJK¥TpP&m¸œ¾á¡°9 ò§iylÚŠ:zôèÒ¥K!ÑcÇŽ!}ƒ´Ùñ©'wî dÔÙ?œ;çý0lÁ‰ ‘§U^Òy)ËK† ’hrœžL¦yNyp¿sxèåšKT§]yKLl“”x<~èСùóçáðܹsÙ3gLKŠ–JwìØ¡Cn.v&L¨8c ŒÚœp]] "üKвª@Μ÷Üd:’8A”ßÈÀ@ˆ±¤guF4dÃFˆg"‘„ž5YN‚>¾‡¾üäºçó}†þgÃ'O};cÆì_ÿæ·šnb˜ © 0ÍAÈqZˆÓbœ–4Ò·L2)³œ…ïxQ/^¼lÙ2:´+W®Ü°a¡Ù–––yóæmÛ¶­¯¯Ï´‰„Œ¤/ ±, Ñ~…'3p&#‰ç÷ûV¯þÉ¢E .€—Ïž=;{ö¬­[? “)½=EI™BgDSYZ0R鬤™Š/þþ«oÂá8¼—dT,54^¿á zÔù >@ûáOÞz· cóƒÖ^u`ÉÓ4ÞAÖÙá c?ß1ðÿ…‚HŽ%£3wî\ §`§0dds¹oæÌ™èœžçs¢ˆF£6“$NWµ´®«§OŸBp†]ÈjgÏæƒ‡¡g ò¸Šª¼!@¿¨ aš×¡Ö‚’‹Ç¾þs'ð; ˜+Ec –ûn( Ë]¾âÇðÖ~ÕÞáAùH.ûNñ™”(³‚Ê +èœåyC„«ËÖ¦{Ü]ÃC]³~:x¢é+ã·AÀ¦ÄAÃyyyÖ¦M›ÌI¦ 8|øðòåË!¹5kÖ8È57wíÚµP#Ác| 3žÁ)!9§x%Å«)^cyã –Õ&ÃóªËé{‡Ó¨€H͉T L¥Rð^A4M›¶ƒ…tsùš ðáÜ)|¦-ûX,fÚHŒéäåèYl_BJ¥câDæhèºõÞ‚]=SA Þk'q§¾‹+®ì;ðecc+ájÍõK—ëZZ mhl®«o¨«¿Y[wÙ"MÍ÷jjo\»~ëò•úºë·jê®^k¨©GçvMýÚú¦ººæúú–ë×››îÜÿûùâPð!yL<ï4v`;û|€M[±Æ$%O×Ç$ÛD22ˆ ®ˆC"-Éí¡,«¹¹¹DÕ˜nXÜhɲ1Ëb5Õî¼4j(ƒIìêÅé©80“ ëIÁú$ÎV–”U‡BUWKK«++¯^ºt­¸ÄQXT^T\^QY娺\Zæ()u\¬®)/¿|ñb]EÅ•‚¢ÊÒÊê’ÊêÒŠË¥WJ+®–UÔ”—ÕVU]«@¿´º;Ô÷¬¨§û¡ÛíñYÅïõú½ž®©µüM^¶ÿt8õEríë– LeºÛí …zà Ožô#âóººBÏãõMT¯Ýþ[ùßÞÛkß›7àñøQ}Þ.¿5äóuù¼AÜyG{gww¯ËéééyØÑîv¹Ü}Ÿ=xÐÑèéèpõöô¡ïîôƒ=î;þ`Ž:½îN&úýAÛoúÎΖæ{õµÝmÇ\¯ÈÙáA(ÛÔÔòøQ0ØÝÚr¿³Ó@OOO[[›Óé .W§Ëåñû»ÜkeÜn>àï¾ÛÚ]»\Á%`ÎŒ±Ù±¤etF¢šùçK‹Jªàåpt¸ *¾ Y1õ¬Uñ±Ñ*ªÕç8ëEeÝ”³¦¢¿¨ª’±¦["h’¨éZVU­Ÿ æX?ÝœŽU¾é`ûtÿ€iý%UD`ä]½Z¿ï»\±»¤jꋪÂí›”3:vQ‘³äï ©VÜ¢&ƒ 0²fnZLÌEȯF‘uÑÔAšbɲöå²lY0i-/¶]š$nÄÂ3i5“ÖFt½ !œçŒ(£ÅSÐù×üÂ3ßþÍ6s«B„é´¡éDº†¢ê2ökBÀ’5b-ÅÊš™±[R+_³V ÿÜïG¨D[["€4­ XöKúÓ–†¬’Éàß­“‰pœ€Ï“¤Qd£È牂8ÎææÚÿz%)ƒSY‹*^¼ :xK# †aíÁº]×@¼DÀ„{e*Öì›ÑÈ|{Ÿ¨§ÂÀ¬lÆRj$!áâÅUHâÆÇéçÏéX”c" ‰[8y>MŒGãcã±ñ(ÌŽ¦E üÈHbàìWilUÇÅXN ÆŒ×,PŠbüUFF&JÊþ DQPUKDA*– ´„­­ŠD‰(K U²ÄÚ&,‰&qxÆ8ÄxyëÝ÷{ß»o¹ïöÜÞ‹)\«ªqÛÑhÞ7ß›;3w¾3瞯+f• +†9Ä(!F 3ÀÔÓÃÉRôÓ«Mþžp"áŽh0V8Q”ñÍÍ7MàÓ\)¿QLÒš½wÑh,«]<@ÑõlŠ/¶Ù7%P·ñIµ¾%""ƒ½.=¢Þ…NåÞWÔ|’‚¬9`ïÁàp;æ¤É×?ÿ’Hˆ'˜SӜÁõîŸ?:±y뿟 ‡%A°‚A‘eUI6€^Ž—uÃ’dÕ×Ú&JzÇ=KK»ßÏùý#hN ór„S#lá ŽµB!•aTQ0®5ÞŒ„ºId©ƒ7‰£DÔÖvg wño(†aB+º„])"4,Ë?j<ð ^†]/Ži]·|Q~VUÊ”aDipU°.½)À°¢htD_Ó400킱—|èM1 ;I0i f~¼æ5ê7(Ä4Û´”w÷8ºyÛ–S€ÛHDëèöô°ÁßÙŒ»ºýUã'–WTÞòµËŠiè ýt$¢#Rwë±=A¾'(ôEP øåpX•$+‘šY†s½ûŘΜÕà«4" e`Ód25à{|Øÿã»Ðò† ‚Ï lžI˜{÷î/):jTéË/¿ÒÑÑéºn–ÉÏŸ¿øê«³ †Í›÷£`0” ®ë±ºÅ<¥tY–««k&O~¡÷uèîî^½zuyyE~þ°‰¿·víúp(âߣÒ>˜20£8’éJò8/‰ÛðËmá° †¢ÄFá9ãY1ÀÀ¿Ú´yøˆgñ² ÛÝþ曈:yÉäDƒ•4´œÛâŨ Ä­ÉqZÓµ/"aÖäŠ1[@>ßílw0¾”ÂX³fMaa!b*Iõà¯ææfxFŒ6???//¯¾¾>›¼9rdìØ±ø þÜÜ\¯½ö˲éLÁTÉ~¿-ºóæÍð©S§ÒùÑ*вqãÆœœœ!^ñ&:´ðƒMÛ,x¤X¾[í`†¾HVu=Í©I;íîýÓ‘÷6l€u#ÑÕÅɲ…Õ|­wM+>³þ•g¾3<''k±¶²Á2ª§ ŽðjDP^cxá –n-–5YVS•XÃg×þ Ýü Ö4†Ðн<( ¾ÝHš\¢?©gÆŒ@à¡C‡F˜âËNÿ‚®®®D)üð¹ß²e lß¾Ý+W®”––ÖÖÖ¶´´¸ÞÈcvÃ0èäµ4¾hm’›áÁÉ“'ï߿ƴiÓ\BïhOŸ>=|øð9sæP,ËÊK/ÍÌÏ/¼q½™jàÆ†}dà‡a¤Ö·%)z÷n³ýú7¿ËÉú³ŸÿÆNî´ßCf‡ ­)$q¬ ? `ŽC««ªÝðÙÿx Mš¨$ÆÎ;}>ŒŠŠ Ä $‚Ö€ÁÉpf?zô(,[¶Ì%ô {éÒ¥¸½—þá¡«d„D ­[·®³³üŒ§jjj²ãOž< ÏÂ… É–¼ño¾é±ôåK—é€k}•8LËÅhw7”úZ¿.+{î»U“LË...¡‚a‘åз†éQ‡áUFTcV0XÈÐ2åy´†öOì ÎÚøžQ!€ã¨0 ;•JÛÑ46¶8n\bªëü±˜eºUUU®ÇÛÞ€ ΰ͇½k×NØ+Wþtß¾=ã  Þyç-† ãÙt:E—Ã$tix‚AÆC¡žª­ý›Q\‡†gùòå®—Êa?î¢Å‹á9wö<=¸/šo!­ëŸ„ˆDDŽ×‘‚ÅãVü…ï×=3âØñSªf””Žñô’ ‡»†ÂÊ×A6ÖÀ¢ˆjjj< àL0à1ígœ~ÉŽ“Ìv ÒÜÊÊr`„;? t'Mš@öïÅëܹ3ðÌ;ö‡þöøñUååã†dʪU+UU&P„„HØ;t6Z[[oaX]Ýt·ÿ¹ž0¯¹Œìù¸dº!Þ6l÷£gÖ¬ý §›5£Ž¬Åd-Ú»bÚâRò²†­[‰'[¶ƒV5ã0ª¬Ù²—µ„¢º)ÛN[VÜГŸ^mêéö')*à3ßš>¶éG×¾O’m3Û¿_TUok»sÿ5œlfúwöË-6ŠëŒã¾ÅáfnNAÜ\ ˆF  ¨TÑF-*xᇨ¨¨¢2‰&€(ä-4M‘Icƒm¨m‚YœÆæ°qll¯ÍÚë;¾ÛØ3³×ÙÙÙû}úŸùêÉÆ £Z-x%>Μó3³;¿ó?ÿóÂxeï6éÿMZ¼XV`›ÍFãÑ£j´$''Ë[obB||ܶmÛÔŸtùò¥yóæ¢+Jdf^…‚ «ÒŠéhA]"ªY–U^¯Ì/?Åï÷Ÿ8q‚†'&¾¥¸Ó¸O?=ç÷‚r¿Ô¤oC];!ÀP` k÷JQ2ÛCž ”•Sô‡Œ#°,ÅI>Ä-ŒOšþ¤{è¢Åé º¼!Tìn¹ˆ® èÂmØáºÃØÍf£êjûû†äÿ4ŽD&øÜ±XUàpxâÜ)´¡¤§§À’|Úb%Ù'».^¼ …LMMݵkWww7Úƒc¡Ñh6lØ€QË–-ƒ›ÅXõ³’£6¨[­V2 ]]]hܸq£¤XŸú, :t0-MÞÓßygÁ¡C‡9–“Ÿ¢\[£ó÷À/æÁ(@„¼SÞxró¿>ñÉ9'8\¡ç˜·»ñ6Ï®ááQã(g „%¹ë9¶ !‡#LŠûà~ewW/ý@¼|8f¿:½¸ p0žP~§z„”PÙƒ*R£|¶‰D¼^¯¤@N¼Q;e‚p¯Ó ò/ QTÐB·4-®À˜*j&*‡WÌétº”9P•»,fÁç•_£úQËå«­} À(Ã1$¸¤/s®ÿéäŸKKË4Å·Kܾ?®Üº[v£¸ôºæÔï=øîÛ²J´ä¥)¹÷à›;HÀò’ÛKoWܾUyëVEAAqQQIvÖ•Þž~iÌGb6`·ÛÝÓÓG?gì½°Lõ h©îñxˆ.j`*çÀ Ī·H‹Æ^RDÉétªº„.ÜJcç5jÁ„`-4àWt1™Çãåy1‡ø}¡¶Ö.PýR –‹(ñÎ<ð¥<͹¿~Y§m.(,¾œWs¥p\AãÕ‚¢Þ¸”›ŸùËhA¥¸äNv^þå«Hø*çÊõœ+E¹Wnäåjòó¿Î/¸YPp³A× KÓÖö¤ººº¾¾¾±±±!6C§klmm¯«{\T¤éèèÔë››pmhп¨LéŸÙÔÔTRRÒÑÑŠN§ëééÁ§©¨¨èì쬅ð57kµÚ‡VVVê”Ð*®––|K´ K¯×WUUáƒ>}úSÝ¿9HhmmÅ·F{µHëííÅœ…:Ô ÿ™:Œ­®®ij„:]ƒ^ßÒù¤÷Û{ååe• ÀÒć8Ø,F`!¬ŽVÔå«ÅY—®IŠÑFƬ œÝ¼ïO¶Øià%°ðJù>3B§Éí ºeß!¹]¾€?HKÖo,ö@RàÞÞÿ(0IQì*0ù\¡™aõv\Dç‹¢¨š^2 ù¤æ£Ó%D¢ô™”“£=Ú?Dûý¯×/ŠN8^ùÿ ÊÑß7ȱ<Õ˜`œã |ˆã8ÄýåoÙ'?9çt†À@}¾€E\q‚ƒï +ĺ¼aœã0Ö5ÄÀ.€×Ã~„íFjoëfƒºÝÄ®¦À¿ÝÙÙ%)ÇôOÁJi*xÒlh$Ø(2ÑñQÉ$÷K½Ô®~V$S;MEë":(^…ÜutÈôâ_ IúÆvi:ªBMFZIÓñ R Ó+ïýÊÓÚZžxÜÁ—Z0l䣜Ù†„fçÝ8uús–áÍVgwÿðà3”v÷ T“UaÍC nïìÀ0èB# QFXë˰¶QV`;ÃàÊó¼»¶F7òlT]z/†©ô½ýÉë~—ÿ:à ˆ¢hØìv»ªºDF™ÔBj©& N« ª–@ŠÒpTIá–œ‰úõQ¡!Ì‹ “Éôb Ò D:Ÿôa¯ž4À&‹ÓbsAi{ú‡1áûïoŒ“#iÚ̹qqoÍH™¤ƒ0ƒpÆhU c°11ØYƒÈqN–µ3,o{ðë %Þh”É:¨ìÛ·Ÿ–´rCù………+V¬˜3g΢E‹vïÞ=44$)ŸWÇ>œ––†QK—.=}ú´ „¨Š´Š1ŽëÖ­›9s&ò·lÙ‚±´|ÐÛßßÿñÇ¥§ÿ8..þ½÷Ö=z¬·gòK +‡& 0kc8Ûð¨ æ«Õ5¿ûîÊÄä™ 7>ámŒ:è…C‡Q52æñÂ`pqœˆ©Æ½Å\Ä(ÀjП†ÉÓ¢~äÈ‘3f¨“ÂTTT %11×øøx\7oÞL mmmÛ·o—µ,)iÚ´i ¨;vŒÖ‚epE2Í€L\‘¼víZ5óÂ… q$‹IÉqqò<çÏÛ@¢Iߥ×N `޵=5›xgâE—ÿÖݲ´ôŸütíúÆæH.†sÛ8ÇA~‘`±90k¶q&;g9“Ã`r NƒÁ.ÞÚš†7¿Æð*´ •ê‘ ¼wïÞÙ³gE*WáLŸ>ýàÁƒPÔúúúU«V-Y²¤´´½%%%HÞºuëàà nõzýÊ•+'X•ƈ4æ~Ïœ9“’’²gφa:::–/_>oÞ¼ììltõõõmÚ´iÖ¬Y¹¹y¸ÍÌü">>ñ׿úÍàÓQšÌø|~­¶y3£V^ð8<Á§Ã,ow_»ñ¯iÓR2þQpx!¹û,2 0Ò8‹ð<À(&“Ã.¬*ð+ülÿ‡ˆQ€£h‘öBhïµk×RSS `ÒX€½~ýz4b»Ç-´úäÉ“H8uê”$“–‰úÙ³g¥1Jwî܉–šš, :÷уàC0´—ã8IYDYYYÈ<~ü8n«ªªæÏŸ±ä„Ífë/~ùABBòãz olhÁ±N«Œ`»Ã?4b±wàÐá£oϘ³ÿÐG?ûù)s´lùªÏþþºœž `6˜è0F1˜që0˜F3Ðu£˜ÍNÑî‹RàWý½þ·£ƒ4` ç ºP!f€e]]*p¹ÉÉÉV«•,¬,,ëš5k$Å 4 ÀÛ¿?ZÊËË=Ü,DURººzõêzVê„.\ˆd:"îÞ½‹yvìØ:Í™‘‘¡¾ä‡þ-åeé¶«³n}Ò‡8£I„¥° ¿û}Fê‚%ä~•’´`QÚ½ßí¡ÃY9³`°ÚQŒ‡Ñâ4Z\& Ðõ X,.Qô¿x*èźp´—[üoö«6Šã ì¶-ªª"R¨)D4UUQ@êƒJAUE¢D‘ ’V$ŠQTµM*´4iU¢j'ø‰±‰m°cŒÆóëü*Ží{ßÞíîíãîvïöî¦ßî[Ò"°PSpįÑèŸgfgw¾ùæûŸz Èq»Ýðò@ €æâÅ‹í¼-[¶0ë,466æææ"’““3kÖ¬U«Vµ¶¶Òl6t錠´³j§Ói¸¢¢Â0˜õ‹/nCä\ýyšáú?Gw>€½^ž¡oUP+¦úÁŸ3à뻯¹¼Ü¡¼‚¬¬œç~ºôë Z’ÁáD%$DCB,$ÄÂÆó:Ïka>*Küð J€˜ $£iƒ õË, EsÑ¢Eð2›ššÙ¶mõ/))™7oõ²eË`z„É Éô i¹½0Ø~ii)ü7Þø53yÞ\ÉK/í@älÝ-wvLABÈ€nÆN…äŒg8ÅÇjÞÞûWŸW4RL¢HÐøH2¹›¤ê¨Ñôsâ—g Z>‚`i$q¼C$MtAJˆR211HRB‹gZ[:'ÆÍ>­386|W£„$IäÐD¢g30‰úòåË6_¼xqþüù+V¬p8Ì"gäe+W®t¹\ÌÂ-a§>F!I´_×Ü܌ȺuëØm&YBöÊ+¿DäÌéjvuöMEó*c&sCÑØ‡E•¿óÏwxÒ’¢±˜nŒ»@) ET£™ý$´Þ0£Ã\D EÔ° ‹ñ°¨ñ¢. QLÊrÔÖÚåšôüŸvå³´Ï€ÉH G’$âdˆá¬¬,íåååè°{÷nøùùùð÷ïß_EÔk×®E¤¥¥…ÝV8ðG¦†HÏÕÕÕˆlÚ´‰ÝðŽ;˜)>_Œfô +.3Øãáõ$ã%“{¡_}}Wö—¾²ýån_d{à݃@ï›{öÛüŒlÎÀ‚Ìñ*ÇG9>â¡~5AÐ%ÙdàÇ~” IC ƒØ¸qãŒ3¶oßÎ,ÚD.¶`Á‚ºº:f%q³gÏ^³fÍÐг déÒ¥½½½8@)a˜463oÞ¼Ážžž… bªúúztèììDö7gÎW ‹ÐüàƒÃ³fåüè‡?qM¸iý×£Qc*8 š<‰¥cI–wäøo·ßí8 øÙbªáщgžýr7”/>9uîÒoOz‚¢G*†ÍãI%–Rbi%–Qc\G<{)Ýr­c|ÌÍ2%Ä£eàFv‡†Œ=jkk{âÓ¶~ýzÂqÜÖ­[)8sæLp5œ}ûöa› º4„4³´Gvv6šÈõPãP¬^½šd XzÏž=fe}!+k¦5[öÁ¿¿ŸLiK›;Ú{¦"!`^AI­ù¿õö;\Ð|;ÇG"ŠîñóF†Ý¸éúÙús¿þ ¬bÝÏ1<:‰Ü lŒýŒé鈪E¢:Ф&%ÕÀ[d5­(™(X]gX31îIŒn–é ãÏ€ÉHƒAfemÌÊøòòò ƒ߂Ї‡‡íþn·{×®]àm877·¬¬ŒàJ¶dÉŒ"uí.((X¾|9"sçÎݰaˆ×Þý±±±×^{•ÿôÓßÜ»÷^¯qÃæ¬Ã1%‡83!)7L ñ‡·þ26êåŠ(k&8 :XÙ¢Ö ˜9™f˜"¾ O2A‰‹€±’ˆ(ɈbHJJFb(¢¨)JIÜc ñÈ®~ºñ ½ºeh‚™•—% ÔPÈè…ÌLÕjæhÌü e‚Ì?o?"“e™YTOÝèúàp0s,f2jŠ€îR&‘3gÏÀT$ ýŒ°°œNdXAIõ¯vþæìÙ¦†ÆæŠªÚŠÊš† WŽ–WÕ»X{¦áDíÙ“§ê+OœFäBÓµª“gЄºª¶¥º¦¾ºæ\uMÉšó'O6ÖÔ\8uªñ|Õ.èuÒáC3ð#bÀí¥o0ºßm"NÀ£,ÌîßÞD¤ïÛŠQÑhô?¦"Å‚n4Œ²ˆy3›} –I£ÆËàÁ©$q° §5…þ°¼°¨²¯w¸ ¨¼°¤¢°u9 ZRöñG…GKU¯ªÍû¨Í¢ÒŠü#%ÇŽŸÀSDŠÊŽ­(*E¼²¨´ª¸´º¤øÄ±cµ¥ð‹*úz‡nŒŒ÷÷ ¶·;:-똞ÖÞÞÙÛÛßÝí<}ºî“OF::º:;»{zz|Qוéú™×®]s:P°]]]W¯^EÝÒÒ‚ƒC¨îëëëîÆèA®g;4 „ô¥K—ÐÝa8r=<êïïojj„ÒÚÚÖÚêèêêiwt´·Nˆ‡î®¾K›- á¼€epoÆÇ§bFŒ¦qÞ;Tz¤ð¸®15–ÀÉ`ˆ'2jÜH¦3PºÁ¢ÎÃù€ ¶ê šzÚ,‰Ô­’L1(z¾XÜPU#5RF:™LÑ}D·Ìt´DÂH¥ íã##£ÌLy’ˆ€xð¥w+™‡½Þ4¢GìQ¨}ûÛ œ°ŒY², @ Aƒ:2ÄA옄¤²M¼†eÖ-`þ+ë‘Ù_‹'µ¸16êB°õ~ê€â"ûÛ{Þ9d®ÖD/Sã)@€h¡{^Hb°3û#"©:®¥™–2‡PI˜ùn[wîͱÉpHÀÖÓžþ.À‡fÐz _ò§­º—8IÛè%L°ïÄç]-eT„­mC8§ I÷êº9¥¦%HH0K  CPOEKx8éá4lE~A’8ŸO†Ÿ›ð"Ssݸéwù‘ÍB”Á¡ÑÑqÒ7AŠ¡C0,¹ƒaO÷Do â H¾€¨n·09ɉB¼ùj»kÒMNZfLO³vñ¼Øß?H¾u$A)黕ÔÃ^ï³Ä°ÄR˜$=ŒðC“@ˆäŽô3AÔÆ-åkD¶ &žG„8ùßGOé~¨éw8œ–„¸€Í"gx5í ƒbYye퟼ïr…<^ÞݾŸoNúQàvÒháN‚~c6j8â ‰~Nòs²ŸSœÊc^¯H|XmkíöûöMß$ŽL–Õëׇö*>CüŸìÓÜËLÕdÁϸ¸‘`uÛÐõx<ìvzhë4¡7ÀÀÔ¯PÕ¨5­9NTÕ óngím]`æ{k`臀˜ö„tYga9¥êìHqÌeŸpN(„ wàÀ»Ÿýî÷ŸÈÊùÖ3ßÙþòN3à T‡E•”qÏ¿Ø/óØ(®;Ž{ÛÜÆJÔ­Ò”£@ "˜@  5¨…ªrÿàh`pABJN ¤” 5”#”#„ÖàpÛ€ÍU—Œ]°q€‚‘m`×Þsîcggwöðô;óä‘´ š¶ZÂOã§7ïÚ¿ÏûÎ÷çs¸ýNít1NÛââZ[xG丠×Ë_©ªõû(óEŒWNÜ€ýÁŽñ¼HX7Ìž¡´h|Ü•¨8÷îÝ;zô褤¤ž={ܽ{—¼oQQív{’ÉÉÉ¤ŽŒ¬ãàyecc£5¬W¯^¨Œ7Îãp8–/_ž•õ5›-uРW ß󏽯)ÇŸ`¢ÀÈà8Eç1> oÙ±ÿWïot»9)áD• Ï@sò»«×vë‘™”dó㲥v+\õkø——áÍ7%È~N¢ØÅ*¤Y•aB ƒR¡(©¦úº×ãןÇѸuë¶uû|¼”ÐÒM›6ð§Í†MO;vìíÛÆ+oÙ²·:uJOO·0FÔÖÖ¢2ÛÖþïÀ)¸|ù2ºÒÒÒºvíJ†Mœ8‘ôÂK¬Y³ëÀñ×¹sÚoÖ®*¦iÓoݼ ex¢…`°Á±_Ø/ÄÔ¨¾ûã#¿ý`«Ï+ø(.ˆÂ0\ªºÚ/k@ÏÞ/Ÿ96øwEÛ’“S³~‹b%àˆ°a€)Îã<~Ñã—¼~ØçC)ŠB~ÆÕê5½ƒqº=ƒ…¨¯¿ñÿ~ŠÿVÀÖffffdd\¸p·4M/Y²€­X±Bo7€œx(óàÁƒsss2 d©ƒbââÅ‹;®Ov¿¹¹yüøñ8»wïÁíÖ­ÛSR쯾úÚƒû2¬áNÏã<Ùû…6¤r”ƒrïÞwxÕê ^O¿ÇÃp| Þ¦¿¿v=Îâ›só\nŠa%ŠÜ%/(÷î· : ŒËGiÙGü4„7è÷+~¿$ ¡ªËW[[\äõÛY°ÈÉ“åÏ)ðs0´ nÀ€¨³ZYY‰–¹sçZc°‰„Õ9sæÀcœ?ÞêE½`¦̧¦¦îÛ·Ïše±5Ñ5mÚ4Q”t#ä_}²Í–víj-Iâ®T]{J ñ(À'ŠËÊ,'‰’úÓ7àù)mjvi?ŃdL3øqÕàÙÇú0E¡”E1\uùÚ €%ð‰œ0aB·nÝΞ=«›n6//ìØ±C7Ó.ÝT`”ÇŽƒ=X¸p!ü€Þ.­QB>Ö˜ïÚµkĈ°ÁÓ§Ow:äWJKK±&V¶~wæÌÙh¹ø×‹ä¶úÊÓzàÇ*0Ë*.7ÍñFæø½)o`åC‡Oä夤¤õðÊï‹¶]—!0 rûXÑÏÈ~&à‡ïe‚4­Ò4Ê€ôàD ¯×;cÆ ËßöéÓgÿþýºÉm(²†Ížm Gä]\ks‰>>œfp½E}äÈ‘„mâ.`Ntƒycp~þÏÐRQ~†¬p½ö¦¦Ežèÿ…"Œ ¢ñ[cÆä`å¯gJ±¥§wé ;‘Ñûå½ývB’CÁP ‚â¤G“8–Å¥H¢f'0½ú—àÖÖVdmØt$_°©0 ›7o&]•hlMMMVVÖÔ©SA;´ôê¦[+‚¹]ºt—F{KK ´k¡²lLâ­·æ¡¥üt¹ýÇ­»¡P¬ªê™<°Wp»95¤Q4âfüè'XùûoL¿V{ãýuÛ‘Ä}ç»c¢1:¬EâN…TŽ dx•áC,æ8ãÂ,”åüL»ÿO7â /ÀÐX|ëÞÑ£GašššfÍš -))Ñ;|CáoAÅÆQ½ý‘_ÀRHŒGEE¦€yÔwî܉úÒ¥Kõv*òò>§ÀŸÕßÖ´è•gØãæ$ID•(0±gÎV*ÁH(×"z÷™Ðat9[¼#JŠÆ€^Qa•B¬æç#‚áùÐ €+H׿«åäÉ“lQŒ!Lê&±„j ]’Äéín½¨Ô××cÊäÉ“ÑràÀÔ ¬Yùù†>Ÿ?÷c~’¸Zí?Hâ@]«‹%à_¼ýV®®©»w¿I\ó½»½‹ÍÞ],'ó‚ÂK*'Y)ȉ!N s¢Æ‹ 7*ŠQA+œ£Ú'J< 0ñ«‹-ÒÛ®««:tè¨Q£tÓ9@·;z`â% Â~€O¢ÀåååXgÞ¼yz»O™2…¦iÝ0-®œœ×zg¼ô÷š:²BMu ð³+p$ª3¬P´¥å_ùöðQnMѶî„þÁŒ.ðÖÚ<ÏIê €ŸÀÈ!¯²²ì9Žüü|À¶~ýzô:”œœ?§„ãè•U^ ó’ÆKAº8wmÁ £Ÿ^ªq:Zl’J¢‡(Êwî4:NôÌô¡eee °¡´™‘““Ãó¼nš”`]«V­ê8è¢Df‡.Y–uSf³³³qÛ©S§ÔÔT”¹¹¹d0ŽÉÊ•+“ÌHI±c*ëÖmБ¨¡ñúõº›¨?ÑsŠ.†tFÒi1¦Fõ{>)XòŽÏÇ BÜÊÃOâöP¿\^øÕ¬`8gü¤À ã#A3"ÃJ5 ,5IA%&)qYººÛ-Ò´€éÕUµÍMóõãm‰®Â&À–M~Î:ƒ”mĈ=zôèׯ߂ œN§nÊ/ÀC¥°°¼‘ñ‚ z}ûöE|ˆnž¬3iÒ$»ÝÞ§OŸµk×cLd¼±±qñâE~#))93ó¥eËÞöz¼Æ¯›W]¾~  óà ˆ0Äq½·zƒ×+@±5J0 “Æb%T£\h2ò8QRÑ.Âj(ægD^=¤À¢“å8QÜsg/Þmh$/ˆ‡'쮓·ŽFãÏ™ü’h3KUU œQ3PWE7÷‘Øk7!ÑÄ< =fFÇ5­´íX“4¢®iØgU ÇÌuZ‡ŒaŸ^ªV”pUÕ““8/ÃŒýÃ=%ï®úàÔÉ ÅÅG?Þ_òѾâóþ†«ìä™ÃGJÏœ­,ùäXñÃÇŽŸ:uú\iYÚqo ¨„´h•úÖ—é<Qà¡¡I&Úó3S`r@DoцGTQQˆwÅ•âSVt±–X 5™"¦ÂX‰qâCp‹×ëS” îS‘ÿ3IÄȰ™¦¸††ü>€¢Æð§q*> °¤<7ï4Ã##»ƒGæpºGÇ(kV›ƒf\A×2ΠLÑ,ÐN·ÍÁ!)»›² ”]¤í’Ýîcm6N•öÖnÚÆÄ:½jô-Éqnèð“¦Ñ 6†¹†70(U#Ïo(¨Æ!›°=¡ñSi'&AÕ­2™R£¶YÕ!Ÿ²I˜kD5­·»Oö…žTà|AR«kÛ§*0¶‹h¨Xig‹ÊŽåäQ´ËưVš}eôZíÀž·1n#PŒHÓŠlÇÿœÖ_ƒß°Á-’XªXôšL¦ŒŒŒÔÔÔ… nß¾Ýb±©üüü¸h$&&.X° %0ÄÕÔÔ<»ÕjÅÔ’%K"üÌ‹kff¦>alÌ|ôè‘×^{ã+W®¹¹y²¬{¿éì…©@59 €š{d¶Â<89 þ‰1 €¶àüŹIi‡ä` ¡† X7åäi‡@;DÚ!1<0Ãx`§ÝnScûK€c%ðÆ'Ú{ýúutišÞ¹s'è:|ø°¦ãmXt–-[–••Åó<¹Ý¨øpÍË˃ðBZÉ”þò…ïõy}âàà@fæê´´ÔÒÒK˜:uêÔ¬Y³Ö¯ÿƒÙ<)õM­EinîšÀ6›SüTp.|Zx`ðŒîàÈØ«¿üõœù©¾ÀºÐg¯? ¦XþY€‘‡$D6øŸÆ3`Ç\¥1R[[‹‘½{÷jzYGܯßïÆÄÔ;wŒÅÄÊb H>~ü8„÷êÕ«šN/²þŸDþĦ¦†ääo¿ýGIÑeYvíÚµññ ­­mdŸŽö.%8M†…pºDè*¸¥(Ó€1±YïHIÏ8õYÁè8ù…îèúß þfÝŒSdœãôØ@ׇt:=¢˜¢À/î ~Š˜ ƒÌuëÖÁÙVUUi:Zûöí¥§OŸÖ¢E)ÇnܸwqðàA0.A/Ñ^[¶lOÎÉÉÙ¸qcrrò[o­³Z-úÿ£•].ÅžÙÙ´(ó{öìÁHuõ¤—~Ø?ä÷ÿØÁCrQ¦a$D†¡oðqJÊ+¿X‚Ø ·ä©@ÝΉŒK°³’õØY¯ƒº2’e½¢¨¼8¶¶aóæÍ†}]¼xqaa¡6éþ;vìÀlcc#élc,ËxV­ZµhÑ"¬=HJJÒ‹µßȲ .ë8°ßØv×®]¹}û_d‡þ¾AyºÛl,çöŽŽÛ=²Ÿ¼`Áøû?Î$¥¼²?û/ð JX~<{Ìò¤ƒ—NÎëä|NNf9¿Ëp¹ü¬Ë+ /Ž¥€ÆšÍæÕ«W“ò 쥧§£v#³Y‰FMMÍÒ¥K7lØ022¢éÖA bƒ0ÒðÀ·nÝB˲³ÿ„=û]“éÚþÙXÿÞ{Yùê«I7ÒÞö\Â!¨6WÐ)M²Š]J¾¸~äãO†cyÉ%ø ±€v‚Œ=û»ßã#Ú:{4¦ ј‚µ€8»D’|€^ºÝ!·;(Š_V››ÚGÍãäÏy¡‡ñcÇL|nÛ¶ ‚YTT„î£G6mÚ”––V^^®éæ–âÑ£GÉ'H5§élcŠø-ª«d±_ææfÜòÎ;Ûµ(ÀÙÙÙÆç~ðÁû©¬üšt;Ú»Ÿ`—GãeÍ)äÐ ŠËþú·œ±1FôD¯P¡±9÷ »›žžñ«e¯£Žºàm†u;Ó )ö±¼Ìò~à8…烢”eµ¥¹Ã2f}Q'ðÆL˜q+V¬ÐtA`EE…QÄk¶nÝ:µ|#5Vˆ*!·ÃE“5uuu¸eÆõh_¸PŒöþýjQ~÷Ýw1r÷nYÜÓ݇-~`VÒX¯jwOØyÅ£hŦk}ü M¹¶ò í¨þ vúlQÂÜä=YJ>l{ýaˆ0ØtÔE9ˆ”|aÉ7!ùTOõy5Q sœ,‰Ê½ú–Q³…üL¸£§¬T ÅL¤åË—#ÕÕÕÙ½{·-¸þÍ~¹ÇFqÜqÜ86† ÇÔ T‚ðW QÚ?€þQQUDJ[H«¢Jm„Ê?TjQ«ˆ?h4ÅÁdGÄâ7`j°IÁ>Ÿí{øÅ˘Ø>ßcoïvïvoß·{»ýîŽ9hKÀmI©SFs£™ÙÙÝ›ï|çóóx<Ìðù|hJ’Dì÷¦~ v³Ic݉oÙò \ik;ú›onJ&íý6ühá¯y½^r/‚8ATŸÈÀ@ˆ0›¦9#!šªé DÉÁp˜¡ãÔ CºÐ'&Üöëßâ‰GÞÿM‚¾4ÃP"ŽC‡L3¸(ÒŒc¾),«r¼Ïx%hiýúõ………µµµ–ƒ›7oÎÍÍ-//GSÓl1ÔÕÕåååmÙ²…aËáŠlɲ,¶€åøê¦M›–.]ºÿ~4)ŠÂ(*ZÔÔT¦ÛÝ»bÅòââÅvxxôèÑüüü7ÞøA 0M^cdø¦(i³âL*™a3)g$Ýú°âÌw¿ „Õ /¥!Œ 7lú)Üq¥K3L¨Þ †˜!räG8°d»3ÓÓÝ?qoëùœÿ÷tX__µ÷’8iݺuP u_À@_t•––¢It‹•%]¯¾ú*º ÛWý~?êP&ÔN¦zë­Ÿ†eE*)Ù›ã$5JŒ)++z[poŸÛ«¥µ'"è$̤ AµNTžygï{±/*:d©öbHªâýþë?ÄS†Fa¹¶hE è%%5)ªœæ@…Á "S„««ö¢÷¹}“AC·Í]ÿ?Ør8!0¡,tÛ¶mÓÓ¶1œ‰»îرb8~ü¸å`!–5Ê-[¶ ]€d\ÄBV¯^+ÅÅÅûöís†˜Îÿc“o¿ýû%K^BïªU«†B!çé6aö÷y±#fÃÀ±؈q†lXÕµÍ{þ|`||šI -b4…>Ëš R°\/¤ ÑB½è%V '9™Ò’)ôê\Êày“ãôDBI¥Ò®žç1‡1œ(¡L·D¢¨CœY ÂÈlDC‹fVÌH<Ï[ŽÈÉ`Q„þ3’Ì‹‚½4M‘$ÁºOÑÎH<ÈžÜïž BÄá½Nçmg¯¨iøÍöíퟵµw64_h½p©±¥­©õâ¹¶Ëh¢Ž ¹Ò|î¯äJ{ÇÕ–óíç."7µ¶7µ^jj½ÜÜÚÑÒÒÙÚzåüùÎŽË]ÇU úGþÌÿÖR<åDÖê l9Š5RòÜýÌ P6Ûı‰Ov*i"3EQ‘-‡7Èjªª† .f=* xÈ—13yºÅŸcv’—e…Lkö0Rú}#8­gãÀ $l°‚Ë8vòteõÙ¡¡Û•§ëZkëª?>ÓÐx®ªº®²ª¶îL#*'OUx¢ò“ú–šÓŸ ÙÜÒvªòtåé³ÈU5õU5 U5Õ5MW7×Õ«A½êìÐà­»cÃC£nw߀<ýýžþ>ßìJ/N“åß5g?I¶ü¢©¼³¹Ýíîözý.\¼}{ W¼>ß`_߀=¦à~îwÊé3ÿÓw{Šÿ›»×ƒÏ¼Ô~eÐ?ìõ uw÷úG®_ëºÑçö\¿æêêêð Žz=þžnwW×uÏÀàðð(nìîv¡t¹Ü=Ý}7nÜÊvt\¹ycÌïúôJWo¯-€ááá«W¯öôôx½^—«×åêóx|î¾~wïÀ@¿~öéuMK»\þÇ ˜·¢\&̦©„‘¨Vù±ª*ë°$YÅvI ª¬ºñÀYXŒi©ÚÌ 2²š±H9m༰ýJ’uì?IÔ ¤d`k;ØcÆš‹YÓt‹(ÊccãŽÁCpÚÚ_úˆü¬ßößÎdM,¨jêiÇQMûº¡›¤‹ “%MÓ¦s*©Šží%÷¢dâœY˜–ž¶ÒZ&kïdAv:‡9–•"‘„«Ç¥hçët{3;ÇÐ\ÌdE°4ÄÅ…eÏüÅžnN¥DÄb¯½öí^È_¾|Åž=ï@„~"à»wÇ·oÿÝâÅÅùù¯¼²êàÁÑHÔ²¬Gú0âG̉5k¾ƒ îšœœÜ¹sçË/¯ÈË+X¹ò›»wÿ)ŠØ»Æ¶ÒY ˜80•̰¢Å ˆãì nﻇ"6BÅ!Q:–Ķhl:¿rÕ·ò Í›7?''oÁ‹/9|¤ D‹s3ŒÆØT”åiF ‘f¤#ÇãJ<ŽR¤iÞÝë‹„£ÖW…a##7²Í¯ÆGeŒµ³³3'''77wÑ¢E………¨oܸÈjÙß.ìÚµkÁ‚¸XTTTPP€Jii©(Š0&ŽãHŒC<6 dYvëÖ­¶víZ˱w”Éd²¤¤dÞ¼y9vÊÅoþüûKIŽà÷ ߆3<!l¢0XÖ­SÕõï*ƒ€!Kˆ“Dm¿Üú+Ì¿ó{l`ˆÄ+«jss Ö¬ý.ü9‘Ù¤hóC”‡£Ép” GùH4¦(”—TÁ3ÁéˆÃ&Èg®Çq@¿èY¿Å—•þF~¹EuÝq\¬B|Q«Ñ$¤íL§qZ5ÃXÕæãÄvpÚéŒN3ÚDÓ¨‰Ãt2tL´J퓪<åå ²ËcÙEA DaÙewïÝ»{÷Þ»Ûï½G¶š@&g“3ggÏ=÷Ç=ç|î÷~8 ˜˜ šššŠóêííݰaX=sæ ®êtº%K–Ìš5«¸¸?!؈Ç4r;dôJÑöôô¬\¹R¡ôÀäôïß¿’žžŸ_|qj¿lÙò¾/ûIœ®ÎŠâTª±=°‘öší¾aÚÍû¤ô¬ü¤ýÿÐë-° ƒz*B-‹‘àZur:Ö!À3„††……ÏÂ6L¶!³Í`b &»ÁÄM^§Ñè0ÚæR«4 ´&o¾°+ð÷¬@cqÜQQQøî“‘‚‚Œ$%%¡_VV†þæÍ›].~ -^¼:ÜÑA²ZùpálI _‹É .ÌÌÌD'::ZR'qf̘±~ýz’ÇQ”mÕªÕ!!S[4Z’Ä5¨[Æi!þà¡! °´ÑNà †‘Á}œx ü…Ù“ tã7üîâ F5S¬ÁL,´Ñl7šY#lƒÙi2q&Z–¡yµªåI€½Y'ðsæg®N'ûÚk¿ ÏÍÍWGG{lì2à·eËf¬çäÉ+žá€$û[™½uëÖb¤¡AMÖëó!»C¦ã!ýÙE >Äœ˜˜ßH#Ž zŽ‘;w*¨ h·nÛ†‘ÊËWÈÆµjÛ‘Öi!Fn ƒ^$kïnß n§…Í|azË›ëþ‡ z]¼··ð©ØbAu0´àxÄç?ÿcšXý!ìñˆÙÙ§ÉG?44xΜˆÈÈWÐß´iÖsôè?ÑON>¬¬N>Íøøß+«Èz ½øý1ñ`Îòå±’œöÊ^:''# è{<ò¶¾ýöŒ\®¨$×qû®ËåQ«'ðà  é¦ÁhEE¨¤ý'M ~çÝ÷oµuÂ÷&&}29x*Œ±Ã)ÂNÐv—•áLk²±fÊi¦83å²P¼Õ*X­¼Åê´ÛE|F8Põ‡0*Ë2ìŒ|NøÐ¡OKK‹Ö{ïmÇzŽÿ ý#G¬Nzë­uQ«U Š"Ñ^`Œ–ç92G¯P<ðë~ˆ©Øµk—r—<´uë_Wà[7ï‚»a¢ ¢:ŒP+W½È7ê›Qâ …Mþ.™Ì ½6Ó‹³Ø\oµ %Úl"E¹¾_{ŸàÀ5KòןãàÐj5§¤œ{÷~„%}þùqô÷íKRöF»zõjŒ477¢Õ%?ÇíÀQQÿK∅رc‡³¶m{GNµ®ÖkPk…‰z`ƒÁ ëk0R¢,öRlÜoåoD£èé¾þÁˆ¿?ŒãI†‘x08LÙ9 ã´Ò.+Í[i¢A¯›¦Ý6ï`ñiŸÜX'ðsæ‰TŸOtr ¤K¦ËîÞ’•.É Ý9ÀðÇ?Å[¬Fü´X ¿^ô«Ÿý<²»§SXtâvIœ7Žôèõp×’×—(z‹°RUUFÖ¬Y3<<ŒŸÄÆ.˜ý“æ&Ù»¦Fð8Xá½øBҾÃz³“sN¸_„Ú¾c—ìÛ&wÜé†%þäÓ#AAS ˰£‡d±9¬´óÙöޝõ|s;J´1oŸÀßͳ}kûæpÐááÓ""fW×\Ý\qIÑK/¿·¬ÿ«^,I¥ª{%ò¥3§ŸÎ’y>|örÒÚ7߀Æâ'Äâ~•÷Ý'À Ó××ëW`ŸÁíÛ·-Z–’’ŠŸii¡¡SV¬XÝ÷å²wm·îpœûIü/šõT_×ø61’ò˜«C4ñ,/W|´÷`¿Q$ˆ-pÅ?«»Ñ·bMpðT¨®\'…¼úÓ_d眃çP`»S„ ¶Ú9Šá)F ÑÆ]ÏûœNµ»ëo4}Õÿ@=ÄÀ+Å;îÖ÷ÍuüAüí(ÑÆ¼ýQ¡i{gg×£exý™éSËwölßÚ¾¿={ö„„L š>=àÍ;777G’Å¢D}øá$Å›6mZhh(:yy9äF´ ,ÀˆÙ<¬€ áƒÖëõ ÀQ˜ Š¢2YHLL$q‚ƒd2:‡% ¼è–¯K­ºvôF ti—df$íáÜRJFþŽ¿ý]¯7ã\(›Ójsà ÑûŸÚ†¿lÞ:cæœÐ°5¿[{æl2žf8™sÎÍ8Ú)0t<ŒÃkw]ip6™lx˜Fµö~O¿¼§>¯Ï7ÊqFÀ~özGŸ…a˜„„„yóæ/]ºôÂ… äÓCή­­mãÆ5<<|þüùÇŽ£(Ê/F€"˲’l0,Ä0tuua0::ZR,ÏÃcH}}}»w|—æÌ™»{÷ž!ýÆ Àj•†ÿº~ À0FDX´²²ègæ^LÜ—l0Ð #ØYsy*4J ? A±Hå\¼Üša87Œ„™bῦÀ´Íc·{‰â^­ª½ÛÕMˆ‡÷ì©“÷ìv{G•ß.„U¨%Çq’"˜r:/ÑO´èƒ['tJ)˜7Kp}<Z`L:ne¿$yßÜv»-泬CIW¾d6Ùx|ˆT£ÑáàÕê1F²zÁ°™ñØÒ©Œó'.»t-?¿´èbyIéåÊ+5¨EËÎ/"õì¹Â‚ÂÒŠË×®T]/½TYx±¬¨¤¢´¢ª¤¢ª´üZiyuiyÍ¥òëåeµee×óòŠ*5%«ûÞ}iÄû¶€qj÷îõ匬è©5€ p%4¢8E2IÑO@H€Ã ™ƒ ~Qð¸—pîçA@,™«q¹\!WÛÅq.«•q‹J@ÞÓÞÖ…2¦…€Ë•‘¬¬8ítAòÑSpÎ%%W²sÎ;~â䩌œÜóYÙgsóò‹ê¥JL~¦¦eûìDzFNaqyÚéÜôì3Yç2²Îgdågf]8Y›{17¯0/¯°EÓKÓÞ~§¾¾¾©©I«Õ¶fÑh´mm·›óó :::uº›Zm+Ú–ÝÓj .³¹¹¹®®®¶¶V¥Rá°:”‚AµZM®ÖÔÔ`Bccckkk“R”a¼ººúîÝ»ècÎ÷Ö+E§Óuwwß¼yS£Ñ ù-òfj¤¾^ÕÚz«½½C£iÑénuÞé¾RY]}­VX=‰#›,„Åî–¤g¥¤U^¬/yA`X‡€Š¬ þž^}’x|>šåñÚà•sûUÄR² Ãé”ß©ÿ²_î±Q\W÷ƒ „ð $PµŠW(„§üH¨*jEÀ…" ”EE!PR4´âHÄ„&†B¥D©SŤ¢µÝÛ`p°‰Y¯wgvvçýÚ×ìcúÍ\v´IÕ@Ý&éÆ]÷ÎÎÎï~ó 1¢1²õ° ¿jéeàH¸£ãÛòuSàtåÄû‚¡%ò›L³¦e¨,)v¦$S®ã“i•e†µN÷D¢£Q#Ž*ʤâ1«!îuº|´€MÀ‹ÆçŒ:Žâ>Á@÷«×+wïyMÓðu0Á*ðƒé…ã%F/‰CqÂ-¨VÔ°nS†+6LL'´¦GðóðqIàØzû.M1äq2Ú“À¿ÝÖÖnÚgø£üÛ€+ ¥–isKœ1$ÐÛΫ4ì Üb0.9ÌIËŒ%Òoá„E/þÕ¸ÙÜÔ ÛR_ÿy Ì*&#&h>*‡MVNbר:{è7oѴȲ*Ç)´cü‚? úž¢YtÐÐAžôI‡“tÊÏSöK´_¦ýŠÏ¯úýºÛÍQ” *ÑÆ†Ÿ pFËo2¥*‚ ÁH|ú|­˜°Æ ¥À,ýIAiÔÇå: ÝvŠ>Ó+²NÒVr’!‘$ã±)ß°$L¯IôÑ4o·Ü cµ`Ø/Y¥+' ¡•ï¼÷Ë}‡iZÀ÷ïS¯¸r¼â¥¤¹{|=y }§­S5œR ï¡Ùë¡Ñ<´è¥%Š’) GA‚uµ×==^gëýGRðä·«ªÞÚzç«þ-_`8¼™)ÒØNɳÃqŽ%0S†!™ÚìØ¦½s•|‚L8ŒDÔ®íšÑþ‡cF²íN'ö`Jl>W7E”¶æêß¾·beQñЧ†š÷Ââ7?F2Žà®ûž{./í¼aF¤‰bdšQ|>¦eŠÄÇgZ¦êêêéÓ§çææŽ7nïÞ½!3…%ʱíÛ·—””dee3fß¾}’$B]פ{lÚŸ]Q§L™2yòäô»PµuëÖÑ£Ç`gŸúÒK/w|Òù% ÛÇ{«À¢Ï'z¼Iò‚ ¥ýæ·¾••OZ~¿YYÙ¯mèèì† ãóÐÕMÓ°Ÿ¶ £û| –ú ÀÉ4{ŸqÑ„çÎËJE®K—.%š|ûöí²²2äóòò rrrÐß¹s'QZ3Í$˜öëF`/[¶ Ã0‘ä‰>vì’99¹ÅŃssVÖ¡C‡aˆ…¸ÑÜ ¥¯ÿ/f9‹ýä§Û±øÊ×4\¿ á}ýð›ÙÙý~´n£4ºÝt€•Üp¬D³¢/ ûŠ/ 2 ˜a4†‘%)\WÛøàL  µhÑ¢þýûWVVâÔãñ€ÞAƒ?§.\ ‹/v¹\8mnnž0aBvv6À6Óœq¿ ša˜Ù³g“½I7SVùîÝ»3gÎ8p`EÅ›¡PäÈ‘7@òü¹î{É `Ö¢¾þfï<°Ÿ‘9^…c©çfX?àÒå#Ñ$l0 í_P4løh\½°Z8Nù…-Pe `G¿ì×ñ¿¾0 -^7>÷ŽÙ»té2«V­B¿¢¢ý˜)J‰ºÖÖÖBWvY²,Ã-“¥ö Ö¹ËÕ«W °|ùrrÊqüܹÏçäôkøè:É45¶ ¬«¯ï£òÅPw·OÓ#‰¤Yúy¸{õû—!¿QÔ”P~~áÓžA‡¦éQ(0ÃÉ>NbX…aU†Õü,Ð ¢±¬¦È‘4þ’ÞÂ}`È&^÷øñãÍ”•%ømذ™šššÂ ÀÁš¶Ã$Oš4©««‹LÿDc¡Æ˜»eËd0+̘1ÃLUygÏžuÖ„ãX^¾™š+WÉ:ímáp/=°×Ë«ª¡¨‘ƒJí‡kÖcåõ?ÞüI‡«óž{uùºEO C~9^ÁÍúy™áe?§ú9ÍÏéè†Ð8NW”èc€3(‚Á .ÈãéÓ§MQP^^nÚª{åʈ*2°ùùù¥¥¥õõõÄ<8E©àcLž6m¹„ã™3gÙ´i“sßU«Ê­ý!§mw:B¡^qÃH‚ Ç&½ÞxkÜø‰(Ürr `ê§~c:œŒãÔ©S0¹ …ÉYÒaYÖLL<0‰ªª*d6nÜhZ®ÛRàuëÖ!sñÏn¼þBºIŠ‹³JR™(«ÎüqÏÞ_û|’¬FE%ä‡1ˆŠ=ÿ§¦Í˜“_øÜÌÒÛïÁB (Š—‰K^À‚„aF½&IIŠJ’!I1áƒðLuu®nž'‘Ñ%\ߨ´ë¸]»v1ˆîÞ½åÐÚ¼y³i{×’’’Y³f544àôâÅ‹C† ™3gNOOisK†cd`ƒqôz½Ž“8uê”°aXº½~ýdÞ¯¾L45ÞzÌk¦´t8 ÅÔ°yüÝ?¼²ë€ÛP´˜¤Fd-¬‡ã’FÓB1Ëë²R{‡+/ï‰ñžÁ];ï{” W,ˆšÕ„  „!,AˆŠ¢¡(¨¾¾ÉMØn™}`R³ A>zô(ÐÚ±cN+++Ñß¿?ú¢(â¸dÉdêêêÌ”=Àtté ºÝnGÉ%"òk×®uƬXñ}dþúá5rz«¥Í0b˜S­ácZÄ|÷wçñª¥ÀNÓB†¨À¨â* k#aá÷ÎÉßôÔ^\qF3IWe•õ ¡ëq]OèzÒn¦¢ÄÁ3<ðµkÿpu[;4žL#!§P͸è#Ù$¶mÛV\\|âÄ œVTT³ƒš)ËÊÊ!.†Á™‹· &®Øãñ` „Ú™ET}áÂ…Ç™–÷/\¸ø‰‚¢æÆd:Š8M3êj0ÍÇÑõd$iV¶,ååQzhN "g~wÅJÜë•]¯Bošn•Ο••S}ñJ(šŒÄLAA9N†[æ8 UÇ9K‡AïcάÐu}èС#GŽc(èp;v,Ä“¸Ùššš¢¢¢ùóç···›¶£€CFÑ×ÒÒ"Ë2 %"ü«˜îA5nÑÔÔ4qâDØÊÊãøWy£_¿þóž_ÐÓí!SZo·ézìQŠ84^E‹C+ûÞî=¯ñ€Pêᨤaq£qó­·«žž8¥°èÉ¢ÁÃ~öó—áá(à{ƒ‘ªM U‹XM5T5¦ªqUM¨ª¥Ãøa ~ôOö«5¶‰ì ;@XT ,MH7‘ÚjE‰„Z@ˆÂª‰_ü*B‚V´E• ‹VTMY!èºmÉÒV*¥BH€<È‹8$͆°ÛòhâÄÆ±ã8 Ù$ÄŽíØ3~Íxü¶g<Óoæn¦‘ K*UËZåh|uî¹çÞ¹ãùî7ß0Ùì.^R<ôŸ½BøÿÀ’‚1†åË—çäälݺµ««Kš‡IÐiyyyqq1J¼õë×××ׇÃaunYY°JÔؘðíøø¸ `p2¹Íf;räHQÑZ ­[·þìÙ÷gg݈óŠú0èM ÑÀШàhFô…„8/3ðé÷>˜št…Åïg"g"-ÃÀ*À !ºÐÃh!0ÐEZ8œàpq)ˆ^Žã!8†!ža@5Џç+ÎC!&Í)a eY A0g èªr7‰€±Õ!RÄö4MKŠ¢Àt’)(¦Ü"Á²!̈Å⟠oAdtKf“u! £Žƒös™”(Uß¼}äí_tw?èìú¸¾©MÛÑ ©Ð|»ãv{ü;ëiliï躇 ‘¶;¢mj½£½ó¡ ¸´ÝZí]­¶G«½§Õ~ÔÞþqGÇG==/WV›‡FÈæA™W œ ìAK„ºu$¢2€§&¨s ª1]TŒ€SKX¥b…§•/‰IþDgà‘qL $œ F2¸åå«·j®·X,Ÿ\«i@±Vw«õF]œëµ7ë›á_¹v³¶¡¸½|¥¦úFC}ãmt¯V×ÖÖ556¶ÕÕµ^½Z[UÕPW§mhè¸u«£¶¶åúõÆ!Ë“‰I›Å2ү׌a†ì´ÇCCÃæÎήññ ƒü0ƒ&Ó^'2>s}QS¯þv£b笷·×b± þ†ÊöÑ£G&“ ]«Õ ``Àl6ÃD°¿¿8Xk’n__´ñèèèýû÷‘‰!$#ˆrîÝ»766†E ˜‘ûâvÈDÒtº~No4šô† ̃FË?þþOEB˜? À¸WDG1"Íà \¸T{­¦)™¢q ¿DZB¥Æ‹R:#û` ÊÇÂÁ(‚ G„ψ'Ë`œ3œBÐ.> 8^ñ8‰ðÑÏ ™TZÄL2"_™l´TŠÇ3D£ñ‰‰)IþJ¦!ü¼K|Ùûý· sÆÏX܈!B„l ñΧM5A%Xâdæ‘01·p¯Â 7Ȳävó˜´0e–ü_)+Ë ‰x:çŸN9Ô- ˆCK/›&ÿx¡ºâü%¢S“Šî…P \äxJz¡„mÑ&„hBÞ0¶€ÍbïØy§hÉ7çéôŒÏäQȈÀp¶ ˆ9ƒÖý?kÕl©WD¯Â8ŽƒR%Ì(‚‰€âUçE‰Ð½"x&†0†I¬f’š9D$£%&G#™ŠùD"E„„¤(áë'È]ˆ%ÀÃi—7{_©nDçv3”7ätû]¿›ÎR”lv'åtû¦l. -"ˆÉOí³híöYŠf0ÑfóLOSnw(H¢™ñƒq|ˆfNàdZ6>;My fxx„ø ÍŠ`”ç]‹Wü\Œ @ˆ˜Jž(ÍTÀ#uA5â%ªÂˆEPº f"ƒ¥yÜ«šJ¼ª¢V·upÇùÉ©¤Là•}ƒÞ¬HˆX¾81ɸýÐÒ­–;¿«¸è˜ñÎzHo€óxǬ—À•ö‡ltÈ:Ž6K£;>iŸžqÏ8)¯uÍzÝî ÃÄY6EQœÝî·Ù¼4Íùý]ÿ ÛCÉO!ë A”²™¶dšŠŒ=yÙ»øHd()ìª*š¦ÿS>ð‰)„®`Àø$Ð …BÀ'FÉq€Ö%'9,Ë’0 4Nn*)ÈDä#ú\åD’¼¬¤~#˜ù³50ôÅd\¾$—”üœIJ×n´À^/çœ Ø2埰Ÿ‰®è~oÿ÷W½¾väɈÐr,™<ó~EIé×–æ¯XµªøÀ÷ôô –å)*Ä<¦Og¤h¯ü\`1‹è"† VÞ©Ì´D5=s}QŒH_õ+OL¥åòòrF½ ßçóI mVUU}Y±5kÖìÞ½{jJÖüê”»wïîÙ³'///??ÿàÁƒ.—‹Ìô‚ZUÌJ˜7nÜXVV6ÿ8Øíö'N”””ææ.}óÍu§NýÒ=ë‘A’Ì,À„QÁ£R0"0éÂå›g~ý›ñúÂÀ'HĈÃz£¥â÷ZöÚJ|ø°°°pÛ¶mCCC’¢Š1 Ò—,®–„hqF k1Ê¡ººΖ-[¤¹²ÇaÅŠ{÷î%uðo½õÝÜÜüÇ#)ât}(!ž0åaAÂ`TŠ 4cC± ®lljò…E%Ø €J{`{Ø:¾ª ð7¾šJ‹A&O¹T…„wÞyÉ.WÀç …8Xïp:åO^øó·ŒbÄç“dÒ»hµZá”––â•„¤"€A˪ӛ››‘pìØ1IÑðAÑ„cUþ!wQ•0ntúôéééi ÌÚ¼y³šßÞå©9|ø°²%9ÿÀYf<¸ÿ€$ô몟ÇÀÝq0g4–Í‚áѱÉ$0*I«__‹»8]4‚þF·´ôëñïpzBáDMM½òõù)öàýûåÅuÆqÓÄ”Pµ`ph¹Ù‡ò„x©œJ…„Ô—‚$Z%n!ÅUZˆT½Ú JS*•›ñ…°ƒ16؃1Æf×fíõmíõ_0ÞûÎÎÎÞgwvOÿ3Ÿw²@ +ñi´:ç›sÎÌìüÎþŸÍk· ¯~á¡B DU)&äÐXºt)^”ù`0’ÑÍÊÊbq'P__¯ÂvâÄ ´÷îÝ[TTÈáóòò, æªþ‹Pªï¦§§1 ºÍâx—––*B÷{´*~wì„M©«½Ns;;zE1üLüuó|Ðfs›Ì0ìõ‰v‡;ŠÚùóßÄU–èL »"뇸¢fCoß.?,ÇN¨V–bRŒ%±NR€Õ /¾Ú%Ò233 `|ñ™üttW­Z¥«««CfË–-hŸ {Z¢¯¯Ãrrrèð{öìYšÈäm"ßÒûïç"S{­nfŠa0”4šçxšóxÂPàÉ)3ÐõxCp.Þ‡e* Œ ˜ÎÌ| §\¼7a%g?G&77)sœÓ5ڸǢ¯~!¡Š0ècÀXÕL²<ÏÓH³ÙLˆ²¸a&€sssÑÎÏÏG{Íš5UU²¥Ôh4K–,†b0ù[§—JE„ÉdR‹8º(¹âÝ»w+·$gvìø Q»»úE1¢}^€Ýn1"ÅüÑfçÁ*ôÐbYÔk0 0KI™•‘‘ 12: .(,Á€>ú[­vÁ+€_†®$Œ°¸„@‚MEõ)0„@qYfqµDÁ¥ÂVR"¿ßýû÷«+oܸQö®MM‰—S2®‚E`òÀ´)ÈBÀK«Svîü 27oÜR¦¡ˆëŸ×›Í¼Åâ¶Úxe ÚëD`†#Ò—#k16þ\zúâá‘qœE÷áïö¦¤¼~ôè)l>ì‚ö à`†@BÚH"¬žÍÈÈ †ûe á‹-JOO7èúý~bpøðat+++Ñ>xð Úd6oÞŒLkk+­†é´8¥ €×®]ËõÕ6l°ÙlèNM=|ûíœioÞkÓÓ”¶V½ðó(ðôC{”wËÜ’U€Þf¬ 0 0ˆEãG?þÉ·ç|7÷Wøüâ¥Êš%KW,_¾êÊ•ze 4åS; Ê·ÑÒÜêó…4šgqf. †‚ÄûØ©¢ ùøpMÍÍK—®^½vó‹«õ5_\¿V{³ìóKh\¯o¬®©+¿x¿•U5W¯Õ7Üj>•¦¬¬ª¢âjMMCuõó¥ºxhx„Å=p,iƒ†3Q^ £—O'Ž—=Zj3ÂB¦r¼@¬ÚŰÇÊ@Ï êN‘Pm6-¶‘¡¥¿z  ‹Å Ç ‘°=Õªí*-­,.>æ³ÒÇŽ¢âsçK/– ßËG÷ByÕ…òÊÓŸ;_.w/\)**+../+»|îüEdtí]úÎùîÖ{ÚöŽö$ ®£§ÇÐÚz¯¼¼¢¯Ï¨×wuttâ·½]ÿUÇKýœÕÕÕ}}}hètº¡¡¡¶¶¶ÆÆF£Ñ¨ðuuiµÚ[·n555é”Ð*SÝÝݽ½½Èà”^¯¿sçNGGÇØØ–BM‡1ÐÓÓÓÒÒ‚|‹6<<Œ51 m\¨]þ3u˜ÛÒr·³ öétíz}·±øz]CÃÍ&`öô"޶ 1X§GÂŽ*,©Ì/(›Ùh±¯8 óð áÃ`:°{8—ÏçÁ0íI|CAR>GÌÃfÈ@Ä4 „ü´“1ð $žQ`’¢äU`òLv}^ˆ°Ú},Ç ‚ š^2 1¥R£êŒÄô™”‹#ŸèH¢E1 Š‚à…ã•ÿψ| FGÆÍ&›Àé ?`ÔqN2sa€ö÷£§?>xÄë•p/â×qn\±Ï/óI™ˆCÝ?L_’`P °N#{ ÆiÅŸ'»¦À¿m40à¤~ìD¦‚Çâ°!I°Q6ŒÄ)|÷U2ÉýÒYÊ«¯ƒ)OKѾH  ¯Bî:1dzñ¯JLßaÀ´Ú§)°]`WÔĉî³»c0E%ÿøçI³™7™g±>~˜-N»Ã=1iB‡®×' Þwñ¾i“Ílqà”ÍÆÛlƒv§301ažvé{ºN“Y8ôG¢á!6ßLПÌq<ŒÄ£oD•Ü$^5ˆ%rª„Y¢õ*¡ŽT¹%tUzcŠüâ—Ì3K°¾Ä'-B%¡*Ôd¤•ÁQ*ß Å0½3úÈXowÀyÔBüËí‰54¶'*0¶ 1›0K‰>sᯟ|j29¬vÞbçÝÞÐÐèäèøÃ‘±©‰)‹“÷mþÙÏç|g~oÿpßÀè´Åi²r‚ëOŽOLú—-_™“³€§¦8“‰ÇRœË{WÓö`jJ¾mì­ûË?$¹"ª¼Çg0ô?q2&?ßÌqaöÒ<&0Ÿ @R‰¥R+///%%…Ðå8ŽÆ—––fggÏ›7oñâÅÛ·oŸ˜øûåÕ•ÇqADP±‚.¬h(«‰›Të+q!ؘؖºÙh1>¶»UtWŒµëV›º›L Û`Õ Ze@ÑÊkT­ÕEApp†™¹ó¼wfîÜyžýÞ{–Ëþ¡uÿ(6ürsr^÷œ;s?ç{¿¿n"ÑŽn6+++&&wMœ81;;Ûb±€Lx]YÉá¢gΜ9räHÌOJJzôèß0b.7‹¿£ãÑöíY“'ÇbÄÄÄ;wÈÆ 3,Þÿ`û ý‰Cp-ܳ^`ÞõÉþ¨èIØ®GÀ[•Zÿ䩿Q§ÊéòÃ$Ì™»CK—¾ƒÝ°^o7™xu€qؼçÍþÔxM–ƒ†©%@}ÇŽ#FŒöKw¤rè:t(Ê€€” .¤¾¥¥¥¡'((($$$00õ]»vѳ@žÓX”˜LWÀL”˜üæ›3l6+yôè?‡H¥hå³ÏþÁó.:z§å4ùÇâ'¬Õ›Í,Kyû.@®+ŸŠÝpݽß5†üB¥-œ³¤¬ræ¬ß„„†á’“—awŽ…üêuœVg¶Xƒÿ¼á”hA*eÇ Þ°aÃèÑ£)<2áÍ›7‡††nÙ²ŠÚÜÜ7aÂ„ŠŠ Œ–——crJJJWWš---S§Nœ`•ôÒgrrrÂÂÂÖ®]«V«ïß¿þF~þzü¸}Μ·FUPðš¹¹¹XdÉ’¤®.]¡¡^)¸\­¯0Œ«…ãaX»Ã`Íü[o/Âcž-=æWC†‚gø XˆÎn5<Æ€`Èï_wï•X«¿*==†a °ÏO^ã´ç5øùZT{!´·°°pìØ±`ª±{öìÙè„U RF¶gÏL8xð ‘HCýСC¤ÒôôtôÔ××ãhPÛL7‚Á:ÐÞ^)ýÁ ÊËËÃÌÝ»w¢yýz]DD8îõxDÉefÑ¢EAJåMzûí[­.÷++°Q£5B~a ´N7Ù´eÛíÖû³-<<Ï`²Ø1íÉß?xüÇÖô2Wën`èý÷‡ÝõzÎbqiµ,c`­,_ß øg ,‘d.Thþ,›ššPË 6ÔÁÂʲ&$$¾”­¸¸o633=555Àn¢J$†®NŸ>½³³“î…S ;ᨨ(L¦éB¡¨Ä:Ë–¥¢^\|õM›>–2##=55µ´ùðÁ#¸õWóÀ½½Æµžò Pu+0†ÞÚÞð±¿Æ.𽌉C?®Ö{m¼›wzj¯Š/^œ‚Ý-[GG¯Ùì48–s<ô⺰_ Ú-æ5Ò äZ­ÍiÓ¦É7* ô¬^½šHgáÊ•+ñññè>|ø°aÃæÏŸßØØHW“Ñ¥gsà=ˆt(P¶¶¶ÊŸ9S(¼‘nŠòÃW£§ºú2]áÁíü«¬V36‡»KÕ É5Jb » žñb"$€a}q!­CrÇ»üzƒŸ+ÃÐò>æ8ŸÉä49ë À à¨BA2š2l`X¸_"I(šS¦LA ³®®=kÖ¬¡óOž<IF9cÆ L‡°8%™n# 1—Ÿœ”´õS§N¢¾uë"é<Êõë×£G¡¸D'ߺùRBoõ«n†óYy?V9QXº÷À§½½&Ö.˜¬Ž~ž,bÜxìžÑÃÁ†á(ìváJÍ5 ¥¦¾‡ÝF6y+ëÏQ£²«[%¾`¿wà”ˆ$Èñëi‘@¢¼v횬Àµµµ111sçÎU*•Dçðððyóæ©TbòE- ÕyÔq’Dy»7Äoô»ï¥Q‹$[²Iýè£? çâÅ*Ú¼}«íe6Úˆ™' ’=œ@þõõÙÝËV©´fé›­ß…·…]à`'zõf «ÌÚk¥â2†’“ÄÇ3™x†±;Ç ¸±éæS•¨À~䩃°xqV«•j2Ìp`` :å EE"lÛ·oG=??õœœÔÍf3ÊÔÔTô444>監:ú#""p"€4x.))AϬ }bÆõ¤Ïx¬\¹=uu×è¦wÛ~À/ØÀƒÝ¯³øtf—ÍE¾þ¦dßO5ƒ÷pw¿ ËFŽìã'=`Hƒa——cF_}©VRàw‰°ƒa8ä»&“øúw P`ñQý‡Ó.'ª¯]ü´¤`8"yè04&A£ÑÉ{dggc‘#GÐÌÍÍEýðáäOÀÓÒÒÐC]Ã0ÔÐ"-d<$$¤»»›H6øÄ‰˜™•õ4««E_’²Ôl} t;99)4t²Bz;’8›]x¡†…ИÜz«×l÷ ~ÉBì? €ÍV‡ÞÈö»Ü¾ÿz`$tàÙã'(m¼G£5bDzr…äpDÆA´ÙÜP`V²ƒ £Íoá}É+(Ú¹û,’8îDËŽ•†öÂc`½ÑÊ»¼ÏÔºïn4IgJT`ŽÕëqš=F“ÍÁ{ꚟ?”™w‰L‚RÑ'¿CÄ/‚ÇbqâáÿðúH³ò6,„Çësy·W ‰êë¿0€iÐ$N§ÓÉBÉ6äååÁ z )noo—ç÷ôôlÛ¶ º äâããOŸ>Mq¥‘€»¨=†Ç(((˜5kzÆ·|ùr/2<é/"33?ŽŽ%1..nÿþýjµšˆŸoqô¦²näe<0ÃÁ{«—÷’§K?Ùû÷Ž•Éê¢Îùü…|Mð¨.žMH1Æd»C0šX³Å†¤Ñ˜Y¦Æ ¶XxÎ&44*-Ä€ |úéŸÒ+H&ÔM¸€„©& Å#RÚE K0éóÏò –e‰$õt,†t7vàñÿ¸\N‡ÃN¤#ƒ.i‚ßëÿ·Ö;÷^ÆB ½Rg`½0ß§Šÿ´qkUÕÕ ŠËçÎ_,)«ìw}[RQY]ûMѹ3Åe´rAqåì¹òóeKJ+U5ß—Ÿ?_UZZuæLÅ… µåÕ—.×}ñåW­m÷¤äwyœ>ÿØ/·Ø(®3Ž/`|sQST% H¨%mµiU’RˆªÒ”˜‡ò*5¥Px(Dµ‚ªå@\¢¸Ä6^ÛÄ6n D¨н»öîúŽ/ø~Yïý23;³³3»³;ýŸsðiÀ%Ó=:·ùöÌœßùÎÿ›¬ ³yÀ:%6yÉÏ:Àªg·!b=²Ì(º;ý±"~g -:áÞ-ª(14á6ï¿X«$ÉŸ3Åq5E¬R™¬Åã8ÃìÃ+›ÛbñøDsciEÉ'•(O—*(.(:sþâg'?ÊÏ…ÆO0¡¼âï§‹JÅeÆâr£ñlYÙ…’’s¥¥çJÏT¢³¹¥½»§¯¥µÕRo±Úm6›Ýjµ[ë'V6à6¹W>М¸‘Tù0S y¼®ÎÚÜÜÚÐÐtéÒå®®n+y™†ÆÆæúz™cµe+-¿Ôkþ§k{‚ß­¶¦®©±åæÚ¶¶»½ùÖ­Z»­Édª³YQ‘ÚZ )k,--·ìÍø5·,ø,­55ffÄb¶UWß´ÛškkÍ´˜c³557·àÓ´¶¶Þ¸qÃd2544˜Í³¹Þno¬«·ÖYl6ko°·T_¯×fsÓ£tŸpcî’48÷yÆÂ¢2ørIVpðTMÆtȆxr—Ô# ¹E!'Љ zÈe©%EIUÔd”<¤ÃÎSœ–Â]@0&B+8Ȱ23\ßÒÝÝ«“'Fñ3_Ÿöj;©—ÐUå ™Œ©¬Bv–Ý*ª¢©t¯Å°Œ]x‰ìmBHjTŽcN»ÀX–!–bPªªÓué}ý> •ˆã=Ÿõ›u¼­÷Ëê“6}T©Ôéâr'uÊÛ]-QVDÂ1g'=~‚Z€âe3Ý h`3õ_:=,·Ûî@PODóŠîáb_[ññé2qNgÀí 8}ˆ×œžà¨;0ä𠎸уÒ #÷8ZnßÁkŒ8ýhŽ8\BXöùù¾~‡Ëòû¥PHñxƒC® 'ݪ1#ˆ£kJ,ŠuâNÆÌv0µ¶ÞÖÇ”!S€ÏSÖ©Q]x$…)aT$)BßšÈT¨_ ŠCø&L?SDï*gF2&à,`4%ƒ4ɲŒðƒ£hÊX„d­o¢b€½|ÒN¤„3@.Œò¿]Øðøð°к}¼«Ëõ`ôÔ®žA °ÑÏ‹ÊíÎ^ŸGÓíö·wt8<==C§x½áææîþ~·ÇËù‚Ùbsº\dÇõD<K>óÑÍ£“ ˆO{_a~ŒOœò½:QM[aT£ŸuâJbsh4v]‡Ã©S€™AD¾´© ‚ÌæÀ‹¢DÍ’HITâÔBÅÏüh ìt¨_‡?*(º_ÐDU/,®Üè¸×Ë8½Ã.¸Üþ!'†f¨¨lþíƒÁzáA24Fg÷@yå…W_]b0¤}ë•Eï¾û«ë×M’”•@@öÂ.wÀd®w{<ä5±l’$}2f([”¡Ï<0uYÚS_ؓ̀óôiãë¯ÿ{=gÛ¶í)ÉtìØ tNŸža0L5¦LšFë“ÉrÿÀ'B‰HÁ@ÒTL›={.jo¾ù“ÔœÁÁÁ]»v½ôÒËii‹}{Ïž?8G‰—cÚ{"3ìæAIŠˆãH·÷O‡\®€×σX8a8^ˆ^€Zoo9xøxVÖ XÐ Gb­íÝÝ}ÃU×þi o’ŽŒ73ÒW¬øyuµ…ãT—“ E¯³ÔÙ.79ÎD'ž¬»øï'8¶¶öT39¹ï“Ï'È»£GRðêô´´4T–/_ÞÞN^ùÄ ð”)S²²²0jKv»£ɱÏ…P[[‹¡ÌÌÌ™3g²i«V­b£ÇíÛ·váø¥§gþåχ" ôpE·µvÁ3Œ+!"d°6ì‰@#|,(®ŸoûöíØôÝ»wë4²Ó)ä¨tuu-^¼xݺu‡C§ A§a3U^^Ž·nÝz¿}P€²··wÅŠ8…h~øáGÓ¦MãŸô²i=¡ŽÀøØÃ'üᤗ+I½Àxö{ ˆãÃQÈxZ”ª¦¿¶ì‡S§ÏÈû¸hÖ¬9XR'U¢·5¶}mö×çÏ9Ä‰Šªõ8 K1aÓ¦-X¦Ï'As|¤ÖT7<2B¯kÈú¤ÕÀôÛÃÏ<àŸ³$Š"vpáÂ…¨3±Z]]M÷tSj0f¬nܸ1;;ûêÕ«©!žç1 †!jÁ|FF†ÑhL=•b61´fÍž'abÀ·ÞúYZZ¦ÍjgAœÙd› „øw€Ýîà¨Û?8â¥ð±A>rìä_ËΞ‡ÙyóæCë2çŒÈNBÂéHuhØ!_RZ—ݹs&{Üä4/ȵ¦úÿrbÄ2¦j ¬ßa)kd¯ÀB##£úFkž îñ6 q2öX–P@t –„(E¹s ìUMQð$ÀHô&)š0dBpwZxšfeI›Sâ½=C8•``ÍY•æhà£'ª‹þr¨ÙÔUZVsìDéñ“eSˆýsQIÍÙº˪Nž®@ðþœ*;ó׿ý½¼âLiÙ™ªêOž*?vìÓ'*€ÞÓ§«KK«Ûڻͽ=½MMÍ­-íí©imm==}ÍÍ­••ÕýýƒfsWGG'ÊövóýÒ­{Ê'$*$H6áµCÈËŠ(Ê E‰ÆHˆ;B"¼ÊѨv¦"QA”´ãxr`SÑ [,w˜pÏWŒÉ¾E ÖXQ‰vE :Eû)Hª I¬L5é"¢"9íD‡à‘H$*Š’®Sí{ÊšÃÆFo{ÜtSSÇ8#M`äq^:î¡%$qûß?R¸»ˆã⢬òÒ}œ`ÌÅ$)¡r1mSã EÄ0ñ"À/J¸JdÀX’ðÔÞ¾a—ÛKŸÒ˜ËrƒƒCªà•û›¢ àdð#¹6nŠluStý*ÊÔŒ€è²ãZÂ0aÉxÊx ½øªqÕÜÑ'I2®‚i˜bU/“p‹!^¥B VvüÔGÅïöx‚.íö3n=Ù=~æ¶Ý㥂þqÖá¦ÁÑ¡(Ú½Æíñ:\N&ÈZmN¯qº(‡q8(—kœ ­í]€åáœÉ‰T¥_eâkÓtBâîÿJ1°2ñ¦“iVÑ. YÒ í@&afU'ç„nª.nÕItMT®¢#–t)xVt–ž4‰žÖs$­ÚÛ=‹Ê•À°/¨¥rT(>r¢êO{K¼ž eÌŽX_ ¬:=8àzÓêB£Íé³:¼hG•a#>`ìÖM¯¢ŒËMÃ>_Èn÷»\4MGn[í§vU%®$¦žºÔ1²™áp¤¯oàË^ËÑ­P(¤êz`›œÄ‘F" ÐB dr‡Ãçê$èµ€*tÀ$&¸%Sj-z,)ƒ£‚x<»]´b½T(Ä #c¶±ÛÎÑ[À5Àp¯üâWii`` Úîò£D×k¿{37wîì99?úñOŽûÀuÝnÓÌÿœbô–––Λ7////??íÚµv»t•””¤MXfffNNNnn.â+W®Ü;ÓéD×Â… Qfee¡\¶létm6Ûž={ Ðþâ‹K·oßa¹ ú%ÖÿOluøGn!÷jô 0ï|ûyùßÀßõ…£HxxÔúæö·ô·™lÉw—6Ýh£,Eq6›Bâ.ãô©©‹ßÿ ƒ 8€­œ5kJƒÁ½|ùr‹Å‚Þââb4Μ93##]I0›L&UW¹PËIÒßߟžžŽråÊ•ª®L@Úɳ`0d¢Aqq dH§¹OeÓãØë 1,ÑÚѦe#âO×ÿ‹ýr‰*»ã8 ƒ–qYq©ÚlýÃ?¬µilR¶ÅU|µÆ¸6©ëk[­)kÚØ´¶»,¶d‹|ñ÷ oQteæÁ³ «(A`€™¹3sgæÞ¹ó¸§ß{LØ­éÿ©99^ÎãwÎ=×û½ßùü††â‰BqC/èð0b0-x3:ê­h•º¹`àW{öâ¿9p„H_ŸÑh´ HI¹&•vVÀRð‹O½·´´ݱ±±൞={–Èòö#º>\±bÅÑ£G†¡Ë)ÓRØ8wîŒ÷Ì™3tŠ’@·xôèÜ82rAAA/\¸<çç?Û2ÐÿŒ«št.— V·¿„€Gž™,6áqÿ3›ÃidlØíÇ?ÙˆGÈW–FDDÍ™gW€‡!`ˆ|dÜØ?0È BNn>Â>:}†w‰##‚à5¬ët²|_Ûív¼DÈÒ?ÒÐЀ‘ÇÙ<)ýò<cS·oßöSôE ”œ””ã-..&²zAÈþ0•J5þüØØX–µ£k4š6nܦiÑÒ½®x¬V¿”šG xxtÒdqðnò»ßÿAßþ%øM!8A›`Уš¬,Ç»´zÝŽ»CóÎžŠ úûGM&‡ÕÆÏ 8€ ”¹iÓ&m]]‘¤eQÙÙE8ƒÅ"€g8° ”¶aƈˆˆ¼<‰»wï IIIAW\óóóCCC!E“ÉDd®ð_Íf3>"“ð¶mÛ/^œ””D¤Ÿc> HII º---Ë–-‹ŠŠÊÈ@åâÅ4…bîæM¿¦ÇøwWÃá™Ig`$°8}°ØËéÊ?ý9 awzYîü–ŒF3‹Ìù¢®áAPpXp°"bATPPhHȼC‡>1ÛÇÇm ãprž&UKÿS™½³~Å tXTT„· ±Ñ<eýúõP ™0ÐS‰‰‰èRÝÂ~éÔªU«0Å0 Úíííh+ ¨nµoß>$¦Ÿžƒ?¡¡aŸŸÿ—[ðød¦Ö´´Í„!`T‹êB\É(úÛÇÉ““,ǃlxìôJž'qÁhs‚ÈØ¤,ܹÅë×ÿgˆŽ^’˜Ü×÷L~RP=á]¢×GZ4z „Çë<.·÷¿5R^™²ƒ‘ÊÁB92<,#Ì™ºëéÓ§ñº/]ºDdú…ÙúS¹%K$‹$c/ذfÍŒÀl¦ßehh(...:z1fßygU||ÂÈȨtwÉ)‰V3#€a¿``£Í'ˆ$#»ä·'ÿxëVcUu}qYuIù×jqÙÍÚº{™ÙÕµõy…%¥5e•·²r kn7”WTWTÖ”•W+‹Êjj ˕ʪÚÚ/**joßiL»t­½£K>µ(xxŸ¨&üšš ø»¢Ÿ ÀºDöO"Û5µ#ÊÀô»¦¨'CÌø"0Žåts:N0ÎqX-x¤áE¬´·}9Ã$Žq„}f»»§]-È̺ÑÙù(=3B…µ^ÏU¢•fçÑkÆõü ©W!`è9õr†²¸"õRzvNÁå+•UµW®f]¹’—W’›[ZPPž“£ÌºžßÑÙÝû¸¯³««YÓ¬Õkt:m€––]GGWkk{UUõǽZ­^§kmkëÐhðHúÿªúœÔŽŽŽÚÚZ\[[[›ššÐxðàAgg§F£Aãþýû:]̪T*t‘Öuuua!‚q…ñb¼»»ñwîÜéééNÔ××777c!"€åju³Z­ÑëÛZ4ÚLjÛá½­úΆú²·ÿ/Ûà½"’8#2Ò˔ԜôL¥‹'NÀOþñnâòHÁ¡A;çÁÕÁ{AÅDÃííøã‹Óî¾P|X>5üè¸íÁád~p{E0ïõz|Y<‡Æõö>‘È)/õ½°Šÿïó¾d¡J±æé·e?'Ð0…Óéô;°–®Å)5[lBí—®E—^Qd–þ¯äURϹyÎÓ÷dƒê$q¸ÌÞ ‹·?—’ñäT"ïãò§ËÇ»E¨S¸BÏP/¤úöË<6ŠëŽã^{×· jh( 0 Š*`Bj®D òG@4*®A¡B¦¥†"µ@JípÒVŽjŠÃ]ؘðØ^{Ï™=æÚYïîìáéwæá­Ûr %¢›ð4ýÞ9Ïû>óïUÑ'{»UÈ1&RäP? î0Æ×Çïó©»Â8òc;»\nÜy—º^¼z`R$©òK⸵óÏ*À¯/Æ„7Ä0ÞØ0LàŠ@š ‹Î!¶Éé0ƒ±î`bHàð¢2<™‚<®¹éÆÖ<`X!Ùœ<¸ìèß¶nÛCQœÃ)X)·vS kwxÌ6ÆduXìNÚÉyx_{§±‹õ¢ žm” ïãä,VÇ£6“(ʰZY«Õm¶8XÞwãf­Ùb%Cñÿ†ã³hÇaáîßo&±&³8â蓮ȫÞïKÂÁ•°JèU4,Šb T˜^ùÖ>¥Ä„—èùc>{œXëX‘ƒ‘`o†ÔP÷E’8õ{éŠ×aD.6zô褤¤¼¼¼­[·B Jnoo/**êß¿¿Á`1bDII ­©ÓuúL`?~<ìÛe2™6oÞüÆCõú”‘#ß*.þ-eWבƒÑ˜(028Ö§°R„“”ý‡N~¼sMqN—|Bc!¼¼7£[ßx¯äJËkÁ ÝÐaÀL©ˆ6ÌüY!º ç¼§»\’ÝÎ[,n–•œ.¾îV#E;Ôÿ±fý©Ÿ›x)¦¦–Xõ{fƒÁá¥K—p”‰‰‰™™™YYYˆgÍšÖÔuË–-©©©hìׯ_JJ ‚]»vT/Á˜h¬ÅbÁeÙ%K–`Ø„ ”Þüš¼cÇN— –Dü%'§þnמnŸ_ÝDÒtÿ!”á¹Â#ÁG,Ž ÃGüaåð‰Ï_r»=>+Ar&;0†Þþ¦øãÔÔ,0„Ê z!ÑÈæLú“OJµ$̘Y5v»}%ð|¦9^ð×7|mµÑðÀø¢tû}p¯ìx¾ q÷î½W½‹ïªÀ-Lž<ˆ–••6£Ñ¸hÑ"°zúôiôÞ¹s'??ò[YY‰* Ä¡/\¸ÃÈt¨4è%”⹞6maƒLïèè(((Ðëõ‡AõàÁ?'%Þ~{jW§‰¬ó µãüÕÕÏ÷À ߃TÎÉG Ü‡WlÛ¾—²³‚WvsªÌ‚U9¢ŒÉÿI¢!ýPÙ±L¬KÒðÆ0ÆPiøá‹W¯¥¤¦§¥gb“³gÏÃÓišµÛ=n·Ä0®®i°Xmêæ8ô8,ò‘ôzÿC¿g‹sœ8q"¾û¤¥¢¢-Û¶mC|îÜ9ÄË–-ƒ£PÔƒ¦Çnn&Y­z¸Ä ã_‹ÁpGE0iÒ$¥7­Ã:ÙÙÙ , yÇñï¾;]¯O½ÝÐH’¸ÚšÛ/h!þ`Í#‰3ÙŠñÀâÂ*üñÀ_>ûû?°lÞ°Ø ä`C9Ño4Ûß_ôAîà!7ýZûÖb˜Íî„ Ëå…„À¿îy ðÿ{!>\Ñr.È)Ä-+V¬@ tqqqqlüŒ3ÐeVz&fJŽþ¹³³“aòRÄf9s-+W®ÔÆ«³>üPµ×þy ¨«}Qü¦8–÷³‚ßÛ‚†ÆÂèúe59ÌÉŒ§H~Ùˆ€axŒ-[ñI\Sô«+W¯¢kæÌÙxº t ‚ßjuA„ñ5ÀñT@ì¨Q£222ÊËË!¡Ö)S¦Ä>tè1½Jo‚6wî\´ÔÖÖ’é=jªY›M=w»ÝŽ1p&J/ääEX»v­¢jµŒûªÕ«ÑòUÕy²Î×÷e9ô\ü4€9!àp à ÃåÂ* ƒäÌÍKHÐÁZ :Šk7¿Ôyâ+ìðþ¿æ ß@¢À:Ý÷ ,ÝÊÛ¦ÀS•R CKä—ŸbÄï©$Åò)|Üu`>éËÓˆ2ÃZOõD¢C¡p â8¯ø<#bCŒê-f/Ã~9À¨ã¬LÔ„QÄ}ñUÑ'GNx<ÑPD¨/6Üލà`‰cäÞ`̃ €iæcþ@&!æ°ô Á· †‡¡í6™­ävÚ“ÀÓ$€üV~4à H©%HÜç@Œ ôÁ¶¼•a)·˜Œ!™y⢧/š±ØÔ!‡H/žjTШû`[::^¦À'X13bƒÅò€óBiõ—§¾¶X\&‹Ãlg̶ç*8Í¢ƒòbܺñI‡Ëk´Rå0[l´ÃeŃÕN±““v4“ÉÁ¹ƒ]ª³EØûŠ%ªüòqUaŒÄ³;"Kn ¯„=0-fS¤]®Ì0Ñm¹èÑð)º’’“ 9I2 ò KÂôJ5’¸šöñ€ßyÖBœfÝ|Ówª© †m:<†•T}vì”ÕÊŒŽ=e9ŸÁh}:i¡hÖÁ¸ÍM?aŸdœžþÅê ܈No§\F“ óMf»Ád£Dz©ÑQ“ÕÊ`†ñ¶µwMŒâe |”ð/$f½r»½}}?4ÎÇ[Lj‰z›2oBœ4¶\²E¤†l „¸aàã/;^AÂ>> }°áp<«@ÀO¨Ž+¶8 kà C±×˜·³Pã¨? €+?ûÏI³™“hnO$?ÑÇŸ «à6ׇ©iÀ†Gè­Z£M#MjÓÐÛ¶m;®Áé šÍN“™ÆYmí& ñúñqHh€¥û€encR}N\€ÁR]]ݪU«RSS-ZtôèQ†a„8–(Ç8°páBìõ‚ Ž;ær¹¡×ë•‘–í1úxœNçòåËss—Jƒb…?&“¡ `ß{ïå`eË–:tH®,"ÀÁèl³;YΦR÷Mv7´}Ç®´´ ‰ÒTh2!j|ôÓãY3fïÙ»ÏëÃG€7<}jÅ GÓ~›³Úœ.Ö7`|-¢‰»³?€ÁÛ¦M›ÒÓÓ‹ŠŠðÓ`0lÙ²eæÌ™×¯_ÇÏ›7o‚·Í›7ëõzüÔh4K–,INNÖjµÂá%æòkµZ×®]+I\ÒªU+‘ŒÆðd¢ÃÃCyy«gÌÈ,,< ×qæÌ™””ä÷ßߨ×O’ÚÛº‚¡PGGÏl2ѬÛÕõx}ŒS¬ÿ°v=. ²êÚ¬ÙÙè`nÅ`´Á`ìØ¹;#ãwêïA®‘±Zéh„Ÿ˜°ëõ6šöÙíì³£ÈKà²ç§0ü¶877W6· Èäçç£_XXˆþñãÇ…8¥[·nE¦­­ 6 &9‹eY˜ ²Á>/ï÷ÒˆøX𛳲2·mû ùIÓôúõëSRÒºº”ätµª>ûÙ"îõØ ù5™)§Ë ûöÿ³»§f'§¤Ô¡áqÈ2:ëþ¸!{Þ‚S_û«œôŸý|ûŽÝmmj'JQ>Ž `¬#yàw'F@6ÛâÅ‹…¸ øíÙ³™¦¦¦ÌÌÌ7šL&AR`xŒ¥K—Ž“ÓÁ?1¤Ü¿?2˜ŒV¯^-­)ú‡š…´æß…xÝ·{÷ndšššÉ:Cƒº@àM-„ÅÛÀ¹@ Ã0c íDçÌ™‡ÿQE<<ÉýíïˆNI™ž‘93)yú† LLØÜî˜Ñèp0¬óà ŸÏ¿š••U^^.HˆÂ0`ƒ˜ ©ncc#DØŒiÓ¦­[·®££ƒ˜ÙL*8A´»"À+W®”†DÝ®¨(Cæã÷Êÿ7?ÿoÈ44Ü#?Füo °ÑDy}aØ tÁ0Š5pˆeçüò×@e†2èôIIÉsædß©¿Ë¹ýÚ¾á?ýù¯))™gÏžÇ ÁÚÓ7ûà„ °W\\L\kZZÚ¬Y³rrÄ:k×®]dÂåË—³³³ À8®X±“!h)!ÒM:E q€‰–žPZZ‚ÌÞ½¢ªÃuãøÑG"S_—,¥R¾–…°³¼É¦Ü1ÖÏ㉗V\;òé ãñ!³Ï5,;{vöôôÿ±_µ±M$g˜£å(ŸwQªêzRÁŸ¶¢ª ´Ru¥'QþTê?úï¡ UTˆku…*UJJ#!„@B_ jñ·;ù8 vŒí]{½öúc½Þ]ïö™d/MHÕJ`£W£™wgfgwžyÞç]:ñøIœC‚–À6 0c<Ã&ûO’½ÿþot¢‚ä”'÷Èê˜x$¬©¯üò jß¾}+V¬D÷ïßô gºk×.h×›kÖ¬Ù°aƒÃá@·«««¬¬lÓ¦MÁ I¾€[ŠaP1…%d0êP(d0ð·ŒåÉOlll0,ËDTìØ±žë×oÐ=¸]¾¹˜Ë輨ÇÒ@²’–ôÚ3>Üw8Œ&¤o™Y†ó ‚ay$q·PjQω KðI/ε´cÀ{ï‘ÐHä…´[mÎ@0°eô À/}¡ÙMÇ@ÈÕÕÕ8Ó½{÷¢[SSƒö‘#GÐæyõ–-[à±X,t0Ž„næ‚@Àd`Y&À®­= ÏöíÛÍ1Û¶mƒ§·÷6íø†dEy.€ãi=žÕ˜d‘á ™‚~¦©ýÀ¡cáp˜Î2,ûµ·+ð@—K¤ÁÉÐè¾õÖÛ``L¨8YCøƒ`0$Ïç =îܵ€áQ5%—Ïš‰jÉ•Ï €)mÒ²ìîÝ»—/_^WW‡îñãÇq¾•••:"ÄÖ­[á¡*‚Áœ‹S SU<99‰1 j}À„èÞ}÷Gñ8Ñàm´-Z ÉM§#‰¨ž«!! ™M©|V“4CB¬€Nˆ„Y²¥‚jc@ZH§¿ñÍï,YZVú,<^ßзþ¤¼ü«ÝݽØC$’zÅÀ%W²ÙlyyùÊ•+¡С^½zõúõ멚íééY¶lÙæÍ›GFFtCQ@!#éóù|©T  ¥$L°Yfjà|>—Í n·«¢âëeeoÔÔœ„^®ªªzýõï¼óà”Aÿp6W˜C§E“E.£%ÅbNÑOÖ·üîÃC`àüOƲ+W­ÁNf¤xéŒõÛÔܺxÉ›óæÍÿâ‚Eóæ}aÑâ7wïþ}:­¤Ó*à >‹uú,öññÀ+ \ µ@s4 ¥K—`x:!#›3S¼ùóç£qøða@B—f|étÚT PÑhÔÐÀ4‰SeETUùèÑ#p¾fºZUU5ô0ðŒA»§ ž+! ~aPÂ\ZÍHzÍé–ýþ‹ y©|Î2jà×^€Kh(a°qk[Çúo{(ÿòªC:–LfEQḠ¾ Ÿ×ÀÛv‡BQ‹E’UiÖõ,¡òy°n$qÀð’%K­7vvvê3Hz`Ïž=«V­äÖ®]ÛÜÜ ¸šs×­[$PyŒ»@eÆèè¨ÉÀªZPT‚¥‰‰±;w¬Xñ<ª¨¨8xð ˆZ'˜'Èw:<˜> KC«±”*ªzCó¥?üñè£GAH ið„#>Ò‰#º™l¡¨iÀs$PeE哹lVåy1MÇã¹dRÄ0‹ÕñJB”P"Õ§S9 0™L‚{ᄺà8N7¨˜, kæk™LÂ-Ð Ø3 £’ÓéÏQ‹Øx£‰Ó™£¦ªä¿yûýs‘qp¯‘ÄÅ⻾±mç¯{ãÆ­Î®îK×;.w~¦]ï$O›.\¹z£ýÒµËWº.u\»Ø~åBë%´[Û®´·wõö:P_½ÚýîÛ'>®óúég¹Xº l\¾§X7«Í@r©~&-ÀÍÈ*°"ºZÔcž¡$Éæs.E5¦kgaŒùÈÉX«ÉFãS¢’1˜ÖÞþA<ž ó"”°šÈ+q¢¶étÃùÑúÓM g[ε\JÑ8ÛxZíÚS @쩺³°Ö¶Ë-çÛÿþQmcÓùºú3Z/ž¿p>:qª©¹­¹¹ýìÙÖÆÆ¶3 -¾áÇü~›Ãît»\.·Óév:úçV{M>­ÿ­;÷EÌúiKyæ2Ýnwú|~Ç{íZçèè'ùO¿Ïáp‘1N×´9ú¿úÌÿuoOýoNÃᆹœýnÌçrõ»œ^ì¼ïžm``Ðjqøý÷ûîÙ­VûÈðûwûú=þ¾>ë m»ÍíõúïÞ±xÜÞ>ôlN»Í…‰n·×aw]·Åbëùçí¡¡‘Þ[÷0¯À/²ô9à”íîîzàõÜì¹c³9pü~¿¿··×b±x<«Õfµ:Üî~»ƒ¬Œaó÷À­›÷€k«Õû, :“*†r”Wù¬ ^}âLÝésàòœ(á:Aâd$_:ÚpBK †ójN”Ñ.Èš¢ª)dnd<‰²A¡ÁHÉdHH°Œ\”ä 2ª^ŠV€|SµlV|ðà‘N¢¤ QEÅϲ½Û™†Ó¥¦ÈS&ƒMJyçZŠ4zÀIø‰jÒè­¨›Pc¢é¡¡¦ ©Ô£ÈSN.ž¢Ë¯+N30¡`Z.6Xš&n”Â󢜕±GA8­Ï“1Ac-Ê+l²€íþµº¶ò/£/‘ÊœX›Ex€[´S‚hx´p$ŽšñØœ(å±¼¤` —ȤR¢ÈRcãX<¡¨Hè4U+–vd%b/ú¥í’UC¤äóˆÝ*mP dp=iEõ½ž(ðã©9׈õ&æry<*U1õ7 ±ÐÀ_š©ñ|ÊX´–WUŠ—˜ê^IŠc3 ‚Ûqðpà\4pJÒ™¤ŠåðòšúsHâÂaŽaù'áðe‘(7b‚“ÑЖK¤Ñ€óq ̰ PéÐðÔCŽÆÄbÆ&–CÖ†Ty\(˜Ÿ½{φ(€ÁÀøiøE¥hôà8ŽGÌ>\*À—ÙŠES»N™yïD1ojWPÔ‰‚U)ðDØ’Í/5 .aŠ‘jM02˜té/šYèRú”¢žÆ§Q"œ9.勚±†Óá5$Äș46]ä²Å0®×[Ú:ŽVVƒ @ËÆ’qN’[ÚŸŒÑ†s|"4úÉXè ÃÆâl<ưñ‰Ç“ðØxhb"G£X$mµ¹Ã‘¨n1©Ä³ÑððÈ‹ÞÅÿ¡d2Ù\Žp pKù0c˜ØÓÆŸàU`X'±UK§sH¾(?§RB¡ f2"½À*X—Þ`8™è ªª ‚¦]00ö !€Þ”lFR ÌCZƒ™Ÿ­c‚õŠçI j¦ ×5´=VŲ©'a6Œ€„Á´p‚ÏÄâpÆ~ñË_-üÒ24FFÇ€^h È ¯ïþOöó .£ì{ßÿA×ì%I2LŠã²‘HÂbuE–|MV§þUé= e`z¦ BË‹ÞØ³ `3xxö·ü‹ýrªâºã8 ^H òR¢iÊT#:•‰( ÍÔèUSÚQGcë(Õh‡(Q3‰F:™š¢‘ˆ´µ2S 1VGû0ÊCäQA@÷ýÚ{÷¾öÞÝ»ýž=Ü[(Ä0“3gÎüÎÙ³çìã³ßýþhyûí]~~~ø­ Öjõ"‘MWiiYLLjttìK/ý¸¯¯_EŸ’_ºtyùòÜ  ryh^Þ/FFF¥³Ü”^è¶y*éF£1-mQjêîÿwïÞ˜˜$“͘;÷{{ö*F•"¥“˜*°Ê$¬¢EG’¸ýïV(õÀ" áEÖP›šoýöHHHnTiŒßélïèÉÊÎÁ ž!EðýÔç*«þtQu:+>‡†ë- ¥Z”Œôô_©@4:::}]Ï4¼%JÈår¼5ƒÁ@Gp¨¹¹#áááhe2Y```NNŽà%¾¢¢">>‡0€`Íš5jµÚã-XŠ’<44„ݼ¼´dIæ@ÿ ]¡»«iTmíÄXÍ:‹Gø±ôïî?„$ê E²†ÖÍ‹Ï-ø¡,(´äÓ?„…GãJ Ë`ÛÄØ`ƒ—ddËC¾s¢´ X2fÖİ0HÜL&§Baø¶®qhx„\¼} –·Ð/ÉÎý <- ˆr»IåÒ¬¬,HèéÓ§'˜B"—––¥ú ¿zèÐ!L(**B÷êÕ«±±±mmm"qPÄš°,KG^FF‹o¾'¦¦¦–••!HOO%‚ŸCXXØÊ•+ig4š^xáE™LÞÔØL“¸úº¦IZˆ‡V© J•ê €a€*dö/g°ltL”B¢¡Ïññ³ccî kõºž÷ªÔ:›WkLÃÃZƒÁ¦V›Æñ-À·R¡±[*"½âŽŽIIIx§€PÊÈ YÆ ïôÊÊJLغu«(ùÄhª±¾þ1Bwñ:a;6Ú»wo? ÎZ´h‘oþÙ³g1²qãFé’Èü×_'6ã‹+_Ð õ“õÀÿS&+¸µÚ\b€ÚÙÕëä\Ø&2ê)ìSáÝĤ”ºú†iiò'_Î]q¡úÕZÄ¡eÌ,LÏ:€û5£"ƒãP¸\NžwI±`6›ãgÍ"¢d±˜1îpØXÖŒnJJŠHt›L¨©¹$Á¶ñ±cňwîÜqò䉤¤Y°Ào½õK•Js=žn‡EèÖ!2>::Œ³22ž½)Cyy9F¶mÛ† ¢ÝôƹX}‰>¸›ÍíçšÐ? `Ð JáÀ0kåÐ!±3gÆ`Þ¬Ö9ôÝа¤äïÊ‚‚üüˆ'>#ûúVüLàat:ö~€ù1“ôØßéëôø’ÁíëJ¤‰ÉɉÀ Ç90ŽÝgž™#]?y]/^ÀȪU«òÉQÄO?’˜8ËÏ[víÚÉ0F EX^Â^ «Ñzûv;¦ef.•ô–èÿ©S§¤wIŸ y¬ë×oÀHõ…‹ôÁÝîèq8øºº©¬³°0ŒL è"YC \E¯… )FàÑ Üà=­^ßÞÑù“Upøûöt8à¦x½Þj±8ëê} ,~ ðãB—Š0ècÀØ«™°äšL:Y©TPDÉÕÚÇÞ°aâ’’cˆçÏŸæÌ_Ñ­«»– ïééÂd(<]„Ò ž¥®¨PŒHI\šO©+Þ¾}»0Ú´ióý ÜÖÚÉqîú)¬TT4Öîà!¶ÕfwÃK ›£þÊ ¶pVöââ¬v‡B¥Ÿ•Ug0aýú͸ÎÑQ½Ù̱VW]}Óƒ£qOÃ:æ$' ð7å6Xu¹y‡²\6^À«vyг“%€k5aÄjebŸŠŠŽ‰îê¾%’$ŽÙ[X€ ~ÝÏ>#xßþBÄŒY67÷eŒ4\¿&Ý2oµ1Ø t”nÁ+C˜³ m„+ùjjjj0’““£ÑhÐYº432"æÆõúì®7´pÄO`2âpå»û>պܨ.¸E † F0s.1""ûB™œ`Ãfüjë¯ý‚ ÞÙƒM›[Zs_Yéçð»#ÇDbì9“Éñh€…ɵü£ëäñµã¬6áéSøë¹¶ Ÿ›Çb1Ùìz#6›…ç©ZB‰€¨ÞÚµ¯û¿ùæf›Ý|åÊ?çÌI~öÙ¹ÕÕç0ùîÝ;™™±qQçÎ}N8¼\ Oˆéì$ù $×ád±¾ò¸<5‚»R·Pô¦xÈ!ã¡¡¡%%Ÿ¢{âÄÉ  à¬¬ú‡è³»ÕÖ‰,ðA ñÃòÿøW£`­YT…-g°Š£Z'ë«>¿P°çƒ{ƒj«7ší_©X622Žx`#‹ª5XÌV®£«7"š Ëåþ²€€ ¼Ÿoèﱘñ«‚‹à,¬ëÚ— ƒ÷†8É<ÿý·N²õ<ºN~_;Îjž>VÆÒÕÕ=vyOføk»¶)?71!(°Ñh¤)lÀµk_’Œ600Àßßoùòå¾[*-=1‡üýý©..þ˜çÝ«âœ9)A,Š<Ϊ …ð"i}² Çq………ôôÀ@dO,âœ.79.ÞliG\?.ÀP` Ë8DYÔ2¼Ý-–œ¬Ø²õ7ðÀ.^d¬œùÁŠe#"ãž R:\¢JkÒè·ÇÓÜÖñÊ«+dò'~º6¯»§WzËÜà Z«5!®khêí$̃>ÎëžûXÆŸû.ô‡’’’B‰YU µZ­GMNN†BFEE­^½º§§ãno©ªªZ¼x1ÎJJJ*//ǹTWQâãã1®V«ëõzjº»»1˜žž.JÂé„>‹ùùÛgÏNÆ¡èèØüüJ…’ì"\WÛè$¢u|€aÔ&ˆ°ËÀ’OÙŸÏî+R)M+Øñ°[l®ÞþaÖî¶9cÓèÍ ët ¢Ã K¬Å÷f¶ØaU*£ÅâÀ§Æqä¾j._éî¹CoÐÁ9…iûÖé…ûv»ÿÃ~™ÆFqžqÜØÆæM #D¸Q€|ŠiÕÒ’‚*>&ªEpPP„Ê¡†6„Ð’¶€hM„P;\¶Y¬°ŒÁØ^Ûë]Ÿkîõ±§wwvvö^{½Óÿ̃§ © u?ÀJ<Þ÷yŸygvç÷þçÿŽ?S~_öˆˆ!±U¤$E2ÄFL€œx£Ÿ“a¡±Ápc‡å†e5æ÷ kÊç…G…P ¤õo )°^ÿXIŠâWÉà Í„Kݧ"¶žã8Éô’aˆ ;µíΨ £Ï¤Ì˜ùXÿ@ƒaŽóÂñ ÿç˜p z{ 3ƒEàt>`ìã¬LÄÂŒb÷·/rŽö¹× ñئ}ÿ½-0Ã0Æ¡¬¯÷1ö‘qŸ_òJøàsÃwt>2™­”‰kL»»û!/×?+¤Iàñ°!I°Qàu¢CøîKd’û¥QÊK¯Å”§©h]Ä뻎 ^ü«^£îÄ”Êg)°ã­®q³3ìòvw@^Ì-9ó÷l‹…5YóˆËlcž:†­NÖ‡sÿ ¹×`ÏØÓ9Ý'ã2Zm'ã²Úl\¿ÙdrržPSs«Ù"ÇÆãU~£ïŽaX‰'ßH¼*0ÎäT ³Xë;.†T)qKèJôFEùÅ™Ì3c}‰Oš„¶„’P“‘‹Çiû)†é÷Hµm]ÿØs-¶±ÂVÎî‡ç\¾vâä—V «ï†´­†!‹Íá¶3£Å1l¶£ípyûLÀ iíÃ^'ë1™-†ÁAÖí±Úìtý‡‡aüF£3Œ¯®¾ihØ(<6DÇÿýwÄ[Æx<¾Îήý,ÿsÀE±°¹ÝnIu‰(Œ*)Cj) MK J–€Ñp T^ä–œ‰¤ÒhÐ%Ì‹“ ôâBq|l4ÚÝÕ O`³‰±Ù9«Ý £«ë„ÒBfI{þö¯’§Íz¨7€ÞA£Í0hNHHHLJI5;Aˆ))Óf$$$gf¾Ç0›“‰a\¯~ÁT °ÄÈ”$è ±oß>¼9Ò^†a¨^&“-_¾|îܹ .ÌÌÌàE,qÆvìðáÃK–,ÁU‹/>yò$˲„¨„´„1¶6lHMMEýÖ­[q--Œööö~üñï_{m°yýõõŸ|rT¯ëƒüÃ"À‘ÿàa[·®{/,ä0úǿ̛ŸÇöÃÿ(’íZÈmRbRòÌÔT< pF?+ëÀ? ¶X\O óÃÇ/¿ñ °D &O‹ö‘#GfΜ)ÝiuuµðR“’Iš‚wš°eË*èèèØ¾};2ÉÉÉÓ§OOL^÷Ñ£Gi-ð1&gÓ ¨ÄÅëׯ—*Ï;'ƒ©R›3g¾„m @Z4Pzåd¶ÚÜ..Ѥn2p¾ð;¿Þœ uŠA–GœœeĪõ XìÌÀàPÿ€Áźß}7sQÆÒš@Ôjeq°l ®^õ àA1€^†´eƒïÝ»wΜ9D‘ÄDøàÁƒ3fÌ8tèµ±±qåÊ•eeeU((Þ¶m›Á`@W£Ñ¬X±p‚U~bðî÷Ô©S³gÏÞ³gÉdÒjµK—.MKKËÉÉÁPOOϦM›fÍšuéÒetÏŸÿÇ”)I?ûé/ ýF𡾮9 +•­“Ødt²\¸§ßÈùü—°}ãÍ·ðØ²¢Òe,EHƒ^(0Lì1ëõ{¼¾‡ãÌÙ/0úé±?ù‘‘ÎéôØ8Ö p<ã·ÇÐ"í„ÐÞ‚‚‚yóæÀ¤±{ãÆHâs.´úøñã(8qâ/víÓ§Oó”îܹ™ºº:, Ú÷ÑàC0´×b±ðâ"ÊÎÎFå±cÇЭ©©IOOǵä„ívç[?þIbbJS£Š.W7·a[§TNJÍŒÙê‚c×Dƒ£üþC¿S·j±}KK›OC“1ŒpïÀ°ÃÉèôú76½¹|Åê»Õµ.—Ïå ÀB8^7|ð‹ ,áú-/è¼ð$|°™ò›nVý‚ºQ“#bç¢îe[pý³?ŸµX\œwŒq·?öÀ“¥ÿ`!îžÑýûåÅu…q{Yl ¥IxTI ‚ŠHüã:T´¢‰"Tª‚„T„’Òæ/¨[•&5)'×BƒÁIÛ1;).XccÀ6øë}¿g3»3»;3·ßÌ‘GNŠ‚5#Ž®G÷ž¹swÆó»ß|Ç%Gy©©¹ùÂýXˆ§üh8,ñ¼‰¤")!*–¦kCV»ªq*S¾‰öõÄøøžAD’r¢Ð3@âxñâECgÍšUXXØÒÒÂtqF]VTTd³Ù˜Î-1ŒÝ>®B‘hüÜåË—‘YµjQ`²%/¿ü 2Ÿý„†m­·Æâƒ<ãâšûÂé˜Èþu´jûk»mÃ>."8 <ºÉ# Sí…É\4SeÿØü¯7½‚WŒ'àù´ß/øý¨ °ÜÔ|mئ}¡Töà‡.$Þ]$!M†6™LHŽ?Ž ÅÅÅè:tý]»v¡ÏqŽ+V¬@Æb±°ç›­>ò¨Ô°#€4x®©©AfݺulàÍ›73Íxh¢½~ý¯¹ðŸÏèGoݼƒ5î p ¦5¸/—æ%vôƒÚ’7ö¸œ!!¡ÄâéX<5ºaÙ'gj{wІÁ-N) Ãuë_Ê{¢àä©Z)É|¾¨×FÓh!NˆÆÄÏ.Y†¬Ú•Õt\ŒBuÜÅ#0 e#Ã90Ý3@‡¡É0 .—‹éÞcçΘ°gÏ ËËËÑ/--e#¾råJdÈEøý~¸hZÐBÆsrr¬V+Ómpee%fnݺƆô—/_N» ‘_|qynÎäë­ít9Š8žOY®Ü`4WPFŸTIe•Ç4 €¹ˆè Æ`tG7°ú­ißÁÏi•áq££{áŸfÖ÷:»zE ß&ŠªÏ'h?Và‡>fÎÔl!yœðÚµk3337mÚÄôïþŒ3fÏž]WW‡áùóç'Ož¼lÙ²îîn¦; Xè ܼyÛÒD"LE"VÞ°a’ííísçÎÅRõõõ˜ÐÚÚ:gΜ‚‚ü#GŽbøÎ;²²&þô'?³Yítw!=–"ÎÃiF"W ±ŸüãŸvÁBðq9–¸‡OÓ†öÂc­‚ ņlÎŒŒÌ… Ÿq¼Óp8.‹É±h*âQÓ]±\Ö=°üà‡'ðqg£Š8ôQè¼æææŒÏÇêÕ«éŸÏ·qãFJšÍf˜ t ÑjB—V#=‡yÎÎÎÆ0++ GlŠ%K–¯†Í())AÒdš`2™õÕ²ßÞWžJ¦½¸l¹Ú> €Ñ‚14âPÅ©×ÿò–ßKˆ,Â'#¼4ºaÙ©SŸœ8)¿È!^fJQa•o÷ôãVü|UZÿétZEù€q§¢¤Ê »ÚÒ ‘–•dZJɪã11€)¨ˆóz½L·L· „@z )îíí5æÛíömÛ¶A·ð¼yóŽ;F¸RÌŸ?W‘1€Ç¨¨¨X´h2Ó§O_³f „×xû¯¾ú;þ¹ç~°cÇ_NÍ´¤5¥d×ZÆ0 °?ªz9Õ‘iÍBüùõ7ûï:Ba‡câè†zMJ3¨.8…¦ò Ö"KÀ²{¼!¸…@0g„}ìñDÝîH8’ˆñ’¥©å±…xhŸ~úâ½’B™öÈ l-Ž(ñ0%ÓÊ.™  KN˜øgãj!¦K=M£S˜ƒŸ@+Çãš ãHȯ¬ 9»ÑÞ9 €áPÄ¢JReïÕüæ·¿¯¯¿p¶®±º¶®æôÛ©š3u ¯>Quš:gÏýûDUmUUmݹO«kÎ|øáǵµõµµ gÏ6¢}t¦á“O/øç»7nvè¤&Ó¢¢ŽW†1€Áé!ˆ¢ }ß ‘'ð0¦<ú†<²¾£?¬¸ UÛ–"Ç‚i´:¸Jß ˜®Q t†Œ•Ü…ä}8 tUqNåK”íÿð‘“’È„D¿?1Å º¨×PÁ¡d(§’aÜ|-þZQ§i¬&²h¸Gx¢D"Å I!žÔýCJVá!DYÖn{ûýíÛ_s95•KJÊ&FXˆ—9ž•x¯ä=nçóÇ@,D ±…ni»Uú÷·ss§à6`!H™ñÖâí™æÜŒ ³9kRFÆ“)ç…–;wç¯7 ò>¸ùj›ËíѶ³ S¬ü¿ã›ˆFgçmcøˆÙ`héÞ½{ <Ài6›Ñ),,¼}[{ä²²2 333sss Œmmm8 ™UGþØW®\Á©œœœ¼¼<š¶téR: /±cǬC€ã/;;g×Î7ã‚îCTÖÙÑe¸¯…ò°Á²Í#yÃr"ÍÞ­¬Þ]Z€AÁâ¡®V'0†OøÃöÞ 'åwu÷C“ÁöÞÁ©ÓgN™2­ªúôÙ/Ó (Ò;Œ+0Ë–‹]p½óÅcÅ*+UÉž¬VR~ÐJŠªåÉz¬V6›)5Ñ|°¬hLa²…@.9geTPAp®†(Ã5À 3Ý=ÓôtÃtžî7Lp5«e™2ãú¯®æ½»›÷÷>óüGlŒÞк}ǼÌ×_ŸÄ[ØlœÙl§h®®¾©·Ï  ç4ʱpÂocgÞXÀB47Þö[ü¯¶6<<<44´¼¼U‹ÅrôèQìéñãÇÅ #ȉ7€2/]º466ö;†,•——‡‰‡ž¼>ìî]]]kÖ¬ÁéHMMCõ›oŸ}¶öé“n2¬½Íh·ã¼ÜQ^¤rÔÊš¡ÿù– ÅÄÌÌýdÁ_.ü ¹Ð¥(×ð°ƒfÞìga6›·mÛæó·YYY¢Ì­Ëåò Û±CBŽÈ/º ¹>LôyåÊ•Ä0ƒsè-Ê«V­"lws"JÌKƒãã¿@KiÉ-²BSc‹ ¸_êÿÀvÚ5h¡áÁ0à HèÇ×Y³fO™úÁÓ¬.´×Ô5ý4z-=+,, P6;)ù2Eqýý6†¬Vçd€=^ÿÎx~ ÷öö"kÞ"ù‚M…I¸xñ"é¨DckkkçÍ›·yófÐí½¢,Â^9DÙŠ`î´iÓà¥ÑÞÓÓ­Æš è…,û&±gÏ^´”Ü,%ÕG»\æµ=° ü´Ç Di'ÉŲá²É›$w?ÿEpð´KIÉ£W[×°1fShØÇ™YùØk<2Â:¼¦Æ§Àþ¬¿? €¡±ø­x*• †Áh4nß¾šŸŸ/Ê>–ð  .\¸€2èìˆü’Æ\bó-ìÉšv´µµ“2†Ø¼Ý÷y³Õj5¶°É*Ett´Ýne3€;˜DשS§&Oº¸#³C—Ãáe™]¸p!ªS§N Æ=66– Æ19qâÄ9‚ÂÙ³çÞ=&i¼Ø¤kAù¥ØÆŠ´K´2¢…öpcbrZÁ‘£¿°º="Í Ì³– óÑŒp˜ˆ3Z Ë`8O©Z¾be "(dúÌ/þæQ«Gp”õ<}:h±P˜¥Ñ6»º¥Žî÷Û €} L4ù È)R¶¨¨¨3fÌ;wÿþý&“I”åà¡pòäIð–@ÆSEèEDFF¢ >D”ÏÖÙ¸q£B¡ˆˆˆ8sæ 1ÆDÆ;;;>´dÉ¡á᳿úêwæ³ôt`̓zþ<0ÌÃvC„á¶/gýñôùA3å`=Ï+0ì\ü´·wÀ c ‡Ì{¼v;m§)ï†9œüÐ0Å0¾Éí–p½}ç^ûãNò.÷Û]'/îxllü“_^9!°ä8ŽÀ9&Ê,ËŠ2„Ä6øvMÌÚ=rL^Ó—Ö¡k’F”Á ûÌq¼G^Çj¡x—4¬ºJ˲¼Fóò$ÎlÃVÆC±bRZþNýY­.Sªn¨o–߸=ùRß¼SðmñUui¡J}çnU僺¢â’´ŒœBü)½u£¤$/¿0=#ûêµ›åw«•ÊyyWssŠ ®%ÿ#½£³KœðÀ^¿ ²WP¡Ž£¼Ñ"ÉZHá¹Ëƒ{ ÃT’¦ñáCïDúF°eGA ‰^ŸD“ÃV«¨OjqÙl̘[ZSà=-†vœƒ—Z(°t1¢Íé…NIWž¿¤­i¾’£JM¿8¿se^)ÈW^C!;W™r9û¯sòU¹…ªôŒÌÜüßàÀFaÌ='X=Ähqg‡Ý]¶Ï`°ôX}?‡2-¬õ2lŸÉÚÙ¥FíÖ£Ö£¯ÖõéûMLŸQ«Ó˜~£ÉÚ«7>V ³VkìÕ±6ÞÓx»k¸=¼g¾@¤Ú¯ü·9Îxú‰‡,7‚w`„TrQúù¼r`ʤÎLdsÈAd¸%ìšR®(+–.‰A=‹²KØÄ Ÿ&ôNÈÝ;÷]NßÓQnåÅÚ¿ßèÀÐpŸ †¨<½½´Œa¸G]j«Í©Õ1jšd9^o0¡=VëU{y»§»G‹I]oûƒ.tzT½ÁÈô±†ÕØîn}W—A£1êõÇ9ên6j´:é$¢_ô‰$ü½‹” “çmm÷Ÿ·.[@n‘ú3!-«ÕJd€Øqt’"f¨¤¡LjÎ<ÏS“Ò¥´€!•4¨çÑ¿}(nÌ'r²0ŒOùË Xì·Âý.?|jûŽ?ëõ¦~£ B…’{T:ÈU£e Ô_®Ý5¤¹¥ K]ݧˇ´ý*s¾?5***3kÔÚuïÁuÀ‹À0pcg¶×ÝlÐhµDºé@d Xþ~þ‡t ˹†z«ªª²²²ÒÒÒ222 4 ]*// Flllrrrjj*ú×®]{vN‡¥ììlãããqÌÉÉ‘W$V«U%%[FŽùI“&mܸ1TY ${üÿ€¡ØŽÎ·G0[$û…b?ܼ=>>—{ÐÑmbm°â·ªš¿^’ͨ(E\\rBBZnîl•Šal0pO Ø/t¤>Ù×AÀpÂŠŠ <ÑÄÄDé¹’0mÚ´‡bu÷îݘŒ‹‹S(X ‰¹¾¾žÈ” ZȽ{÷B 1118NŸþ"‘‰Çår–——Ñ¥Ð>»w—¹\=·¥ù. âiþÜ×o¶Ú\h·›¾'ØÂO¶L¡HŒŠŽ‹Ž‰7[·Ëí‡ÂÇdOJRþeßA»ÃÓÒz/7ïÇéé#Ž©v8ð g±:A/>õÞšš QÌ,Y²êÚ´i‘åB ;::Æ·jÕ*³ÙLO§LKa£¬¬ Æ k¥K2ú‚{§­³³#'gŠR™V]}K{öì‰ŽŽž9óM•ê‰Õ߬kôB}}ë+ XBY¨å´*xÉú ¿…8á¥ééY‰IJÀ ù~û#X1\w̘±nÁßo4#áÓOOãÇ®_ÿk"}A8“Ɇ}d~‚" üÈÿ2^»ÝîÜÜ\€ÁÕ«W14™L«W¯Æ3Ý·o 2-¥ÙóçÏÜ‹‹‹ív;†˜„°©tiÌ›7˜QZZ:kÖ¬”””¼¼\N#ÿ?äô©jìYT´Žiyùò嘩­}‚"ÚºÝ¯Š®kãÝ0^hEd IÃrá·¸ f¨?ƒ13tØ'«ÏB½Ÿ_¾6í‡yH(,\F$”Œ&öpd\wîܹ¡¯ÿèÑ£>LžXè¿báÂ…X­««£C;”€²/ÂäÉ“333‘wMJJ’Y÷{.—TÓ’¼nÝÚжK—.ÅÌåË£;´ßït½ª€u½F‡Ó«Ö IHfú8èÛ*!7æɘÒŠŠ~…=·oߊaUÕqô‹‹×‡òßygf>ûì =÷öW­‚÷Å Üo{Y¯‘X]"v9v²f˶¨¼´`×°†ma¶¸ T²Î#ˆ8BÛ(îÒ3²’’•¿yÿ§N× aÍš H6›ÝV›[zêU5Òýƒþ–ô¹`Áfee%†ÝÝݳgÏV*•gÏž%Rýå§*-))ÁƒÞµk…a"kK”HÐWi²[z8åí· HPÀEEE¡ë¾ûîÌ\ºô96ݾó2fíÄì"FJöñrðèé>,Õh‹Í › k¸•̬Q¸ t  cåžÓåãín–³!ç£#aÛ¶?™y»×ßúJ­‘XÄð·;´x‚'N$²¡À‹/Ê_ÕsæÏŸÉ+Wž&2yž§¢µZ­´Ð#²€AÑ4çúõë8%?&úÇEíÚ_ bæ‹/®Óä¯ïÜÇ/°‰'&‡Øg ô™»@ŽVÛºm§^o‚&Aa Û“ôëóÃÈ„†™>«Z]ߢŸ+)‡I¥¥Ëåc9Hã_Þ„cÆ/úœnGJEP¼†ñˆÇš©­­Å̲eËH°àjjjB0£¥¥C§ÓIí7l+àj7"KTLxñâŸ`æÒ¥ è¿õÖ‹ÅLdfÎÏ311©¹¹™ž‹"ðBBè9o¿ÕovˆQFˆ’ `ƒ‰µ…5ˆvüw¾‹ëB±¨ò`ÂPlš2`üå[èï?P ÆÈÉ™ÞÝ­Ç[È0VïtàÈ hiÆŒ©©©'NH.„(((ˆ‰‰©¨¨ÀPOž<©P(/^̲’qQŠ GŽãð ÙWçÌ™3|øð;v`È0 ^¥2åܹ364ÜÊÎ=thú‘#Ry¸wïÞØØØ¼¼id Úî¶;œÂKq"c °vÑâ 8}dÿ‘êß°M­aà·Ïš0 :0ê;ˆ’~¬Öo(~311q‰ÉÊè˜øôŒû÷KìätŠ``–³cŸº› ==êAŽˆ€Ïœ9ƒg î¥ubêÔ©P è‹¥ÒÒR ©na¿ti„ R•d–|µµµ}(j§[-Z´ÐïGZÀív–”l’F#r>ù¤èlÁ¹ Í‚Wx!B€~Ñ@Â,ï·{ÈÊêÍ[ÿd4ÚÜž 6¬aÛa™#q-  Ž£  ¿÷»a™o Q$äæÍª¬<á°û Ko/´q{D€446!|þ€àóxýÏùÖDJ¼&2' d£”ƒ…®\¹R«ý'ûÕÛÔu‡p^ S ¬ê`lh[AšF;]5©Ré?HUeBc´!61¡î£Ph… ë¶„ùu´.\¸Q¡Ýn—G'§ë4âFLF{ÃÐÀ¢7$ò¢Ty¼þÙ70`…„b!_ïË^ƒáÞ7û^H|7‘ qo€å–Š ‰ãÄhT 3‰@€ƒµ¦ó+ ‘A ö lQ™TßRˆÂ8Ó„žéˆ†"Ÿi0#1 #É §9øOFx†cÉEˆÇ£‘+M¨h¹'"ÎM]–ÉH¸Wâ| aö²ªS›ßÚÞÜÜÚtñãú† g›îËç/UU×]ji½Ø|¥ùÒÕ²òjÔœ;ß|¡©åÜù‹'O½Ø|µ¶¶¡±ñJ}}K]â×––ÛŠ”šÌyA©x"šLe*†éY}€%±©»œ©Þ eÓŸxÖ±dÙ(̢Ѳ$ë æX,•il£…Š 0G5üÈÎà›#ŠÄäy>JÝŠ"éFKSWHL†<”°8Ί Œâ’êòÊæî[UÕ'Ž–UÕÔž®¨¬)=zìL}# Ô”W¯=qÁZõñ“u'Žü£ õ'êê+¡<ƒÊ’’ÊÒÒêêê355gkkÏVUÕ¡ƒ¹ûfÿÁn‹EÛ©Õôz½A§3è:»&Wñš|ZÞó9y'éò‹\'ó÷ŽÙl1MM}}ý:²cW—¹³SOúèôY'—ÿÖ2ÿÓ¹=Æ}Sµw˜ºº¯µ©zzz óõë*ƒÞ¤Vwèu]0àD¥Ò’²]ÛÝ}Ãh0cÚ¯k±-]]–öv u¢Õè[[¯ôf•JA‹>z½ÉlîÆÖX,–¶¶6µZm45­FÓi0tutê:´z½Î„¿ Ý­WÛãqA£1=ÀŒä%ã‚+ 8¼üÒá⊣å5¸ `o¨ÖhL„À€` WËå‡!Gy ¨e\>&̇Ùh,Nô7h 7"‘€jX.o²ÄDp woq&æ8Ö!¦8Žï ª(ùyyªgûÈ™H=bŒ¼7I1%Ä©!ˆÈ ˆÇDd®a§Ê„8r¶I)ÂÅ£|}§Ïêùˆ ÄSa†—H¸—¤Â#!'°´¼)¹‰8òœ XQ©y˜„ð2)“rž`:x¸dÿ{ûä À¤äç0E2p„O@ý&åGYH¤ð‰Ê(]iJŠ Á9UºIRŠò›;84ìõùGÉÖ™©/ëDbÙè—Ú>(áVJdiñ‰wxåJÒJí$\szÓéßïNÐ!P¼ÀT9@~Àgz,I¾,7znG"âd4p(&¹ƒ‚ÍÁQü³¬AœÃáw{6»Ù:æB‰HÍë XØD¥ÖÝê\G­N„{È#£6—Ûïpù†‡íCC‡#à÷ó{`tÔ5ä®·kÄÉcBóÄÌÄLOÐïX,7¨ –@žò‰=öeò8ŒÊìì\…bšB‘5mšR¶jµöî+€-B‰HAAÒ4t›9³Ö /ü4ÝgdddÇŽsçÎS*s,øîÛoÿÉa',Gµ÷dLØLŽsÒ8‹8Žq»þz´ :…~@§Ñ^þå+ÙÙO(J%)³§+óKJ+^ððùÆK ²’ì‚‚™˜jNNÁk¯­·Xî0LÂífü~,­í08œ.r‰N>^ºøï'FOÏÍôg*³ß“ûäÝÁƒeà¨ÙJ¥ƲeËnÞ$K>|˜8+++??­Š‰d0Ð IšØ(•J…¦¼¼¼‚‚ÚmåÊ•´5 îÞ½~(ÂñËÉÉÛûÎG=<Ñ=–>0ÃC%„Ÿ… ­îd0ÂÇÒÊ“ï8ärÛ^€R±ÛÞ}ïçæÎxîG?1w÷BWløõ¦¬¬œ+Ûîð®]·A¡˜þÖ–m@{}Ã…¢¢9sç.8}º)`—;døNqÌæ ‘gJŒð¬˜|Hð?ž !L¦î©žÅ—•8Ž›={ö¬Y³®\¹‚O¯×»eËlçÎ’ÙI2È!`ôõõ-Z´hÍš56›M’‚$‡iÔUmm-þ¸yóæ»ý(–/_ŽÛQZzŸ~øÑôéÙÏ?ÿ³á¡ÚíVï@WàáØJúÂ)O(KI¥uÞõ®Ó9îñA°àa¸úùK/càaˆ^@ºlœ5-—ŒÒ7ø½EÏ}£ËÔ qÿûýNtÞµk?Z]ÎÇDˆ§RwXÇÆÈä%YÊX ,ï=xæþ?K,ËâçÏŸ›ŠÕÖÖVÔ¬_¿>Ý0¦X]·n]aaáåË—ÓM¡P­À0D-0Ÿ››[QQ‘þWÛð‰¦U«V…Bcˆ_|ñ%¥2O¯3Ð N£ÖORB|Àv»/Or¡çÆmp,Ä5@xg`bˆ°•Êüg/…Ñ{k ÿ‰Â ¿‹'Ça>*þý£R,vëÖ?HDÆû½^LW©;¿p¦$<ý+V¬˜1cFKK‹DÔl`ãÆ8ÓââbI»$™QÖ××ClÚ´ z@š V QŠ|ø™—””,^¼:xõêÕ£££t”sçÎÁ'<§Ç}ýõµ¨¹Öv~j5“ÕÀŸ0$0øVHˆa–¿3`ÅN—åÈÜÞÙ{â›Íî´bÐyóžá£ ë˜3Ž–——oëoÑÓãa½^æóœÌÌüžò9?Jv:í¯¾úJZßΙóÔ±±_¥±UWØ6f5””°‚M›¶*„R¥j•´•(üˆTµJ*¢Z ”V颖P«¨­ µ*„ÅÛ Ø`?6clü¼ïl°Ûûù-wy÷Þw÷­ßÜ1$,Ƶ ´}:{fæ¼¹3ßýæ;û<Üêª*ðÏòåËÐ{öìiÚ¥ë*ˆ™f°,@Åž?ž'˜!ƒGMó‚ (¶©º€8ñ0OÈ|õê·ñž¢Éëk›uÝx¨¾ËŠ õ Y F=ìc@¹5µM(Ó~´øp/hð§©©ÏãAÔªfS/_þ DXV‰2"P=`˱œ'}:ÿ‰ý8èzé¥ïâSRÆ&''Mœ8aÇŽmôuTà $\YéŸ5kæ’%‹vÛ|UoL`˜ÂX’Ì7n̹sgïîî\³f5rnß¾ÓA˦¿+PL%øè㥖6Uµüþ¡i`j!¡µlG”TŽ#gm]Ó”©³¾1wACãe*-:»zÉgõ­ï —ã%Ãt÷g/kåÊw(€YV%Í_~›ûÿþœ8véÒ7.7÷°¦)ííWßxc¤BNN–Kt,ŧ»aÃqÐ[·þ1 …ãa»Ÿ~©Ʋ,!z}¾LY²d ¦§§§Ã_¿~½—“ìÔªUw1pcÃe]7ˇàžNð-°ú…–µ–ù«Ÿ›ý•Ô´¯ž+*µFAG%Äœ/]7ˆdÌÚµ{?"ï¾ûÖ |Lùï°ý(vžø‚‡`€N0--íö+¸'Näy`[ç’ë^£c^}u)Á›¯A –²ît1Œr2›»cÁih¨Ç”E‹aJVVüµk×zÓ©„XCÉ™"ú·åþZ}¨¸·7 á ТŽŒ áïÞ7~¤æ¿X^QkZPQFèêÎN}~òä×Úoš–‹:îWë—¼mÛNˆ}8&¨Àùgl>6?ñ5?²IO&Æ›¼Ó ñ>÷°§÷!NäÇ9~aB Ú‘É#F&'½¼ð{¥íßþúºÞß´ñvAgý@(×M=]¢C𔯠-õ9<&%&Ž3 ÕÜk¯ý”âSVãïmÜ@“”œHm;¶+šêõ* M²¢^¼À›ÿr'€‰1¼Ë‹.'8¡¨ ñ½ÇóûÍ×»zUÓŽp1à ö“×–4"Õ$`JÐ ‘iê´7W¬¬¨©Å[…Yðû⚎ÈîÞ7ã]–©[†9¸Ö°P¦´w=>É@{¿TÆC§ãôàj3[ßXï1eÚ¨l/ŧLDŽǶ¶áÝ7Ó0³d¾0wÞø”±Ó§N[¹â­›7nþQdIˆþÀÛ¶n¥hä9F–âÌ3¦Ï ŽñÞç<øƒ—G$&M™üì–÷7+*XÚ+F^½Ö¶êíU³Ó§iƺõë:»:׉êp[._ÂRÊ*j`6F0aݾˆfòÓ?:²iËÖž¨™è‡ÞtÐË‚Q Ç=áPg‚WÑ…H0¢åD‘®`Õd‰F¬ ÿ†‰`Q‰¿ãf§åÝ.’¬X–=ˆû÷óø£t#JrëÕ6úø{ª`UÕ ÃD%¥ëº!5 ªÁ.ù<=í:ðJ,Z”9wož»iÛšá%ô®4ò¨øÚép^ˆáNñ…Ò¸¬–Ý¡ïÇÀ¼è0¼#ÄmÄwü#ã׿ݔ_x!7ïÔ‘c9?t$/ûð±£y…'}ççæ£-<}>ãàa8ˆÈ>r,ß—{¼-âçKÊ?ü(³Á€¼“§ág:ºkOfË•½Ôlb¶õÈ­=Ô‰÷n} R?&È×» æ ÓÑ íº§=¶µ ë¾9‘(ïz'åØ.Ås"ÄŸªâm]YÖ=Ãä‘ãêºMvè—Åã’FhVÒ¤¸†Þ¸ŒÁ%~?hÉ$€³/ÄèùH]ä©.i˜ðç‹KUU-«x€ÁÀQÎacޤ˜¨Ç=˜s"3;¿ª®-}wVöá¼…EY‡ŽïÙŸó¯÷ïÚs03+÷`αÝ{³ðˆ8|´-Ø›q]ÿܹ#©¿sWFúîLøp4ïTIYM[{wÓ¥öâҪʚfXEuCUuÃ`ÚÊûÛà“ ´ÈöÐé°šÚ&œ³çJšš[ëê[**ëhäžöØÖ6¼ûV^Q[Ûp ¾¿²®¢ª¾º®¹/^ß‚¹ç/ø¯¶wVÕ4–ú«¯µw—9{½þòšâÒ n½v³¹¥­²¦ñJkGyU}cÓ• +±EðÑúN],«‚ÓÐx¹µí:ö°¤´s+«êËüÕµuÍøëóÅeƒ 8¾ìa˜ Ì`X†f£ cqãC©‚ç U"().¾B›:®ª»†M|‹($!¥†é¦÷ã1 PJ è]eÃñ2°¼¡A5ºÞ_8ÜaÊ0&4½·¶õjè™î~óúÛ¯ßhŒw]h‡»ÇŒ®6\Š7jÄÁb$gwÕ_C¸IbxmÌzb¸‰L*à+wørY¾ÐâêÃxÑÁÿIÀ?>†?NÀ6£\Þ¾˜L ׇ‰VŠ»jo¯'ãðÌæH¿'`»ç«ç†ñ“€/3†bÃ×TÀ Üž¨Râ®Úák7I O øŽ¤!,` Ô댰 œ­„Sö¬7ž®k»x:éâËFð]‘ µ/NnõÛ3hòôŒýØ] îATe\õòÃ<mNœÓ^ g †ÛñÙ=ðjcØQCæ°¥<“€Ó'þbJRÑë· /ƒ€q : 7ù§tÌQŠ+¨Âé¼ÖâvEhî×®a3šUSÌšrbiF6Éêà°à†ˆX8tÄSàFžá¼‡»ãíÍ1)`^¸î8mÌ®åeS³%[xªN•7(±Åב¤ÃaçÖ›W]¥XÁ¢S!¶8~LzmmqŠ[7 K ;jñ°/àà«Û¬fVãˆÕk²-6PG¬ÒƒêãŒؾÅ-šÍ)§b+(¶àYQvDÙ³=çd{.ð›âLÈ)û 8¾?嚪´P•Õ ÕSm¸Ç´)”9ÙÝ“ ¸›Ã{·ÄÔK‰§9\Ý­Ö—V J³è†C7\ÏbØ:žá4ׇWQej/n/¢‚ÆDPhmÛ8 ëbíQbU4d‰âë®f!Qwj¢E‹v…1ªl“lV°9Ñ•±çÃc ê¯Xèr̵`XqZmRJ“×]ÕF²…Õ=â, ¶•ŠÚÀêk¾tZÝîâ)ÄÁVmO]'öÿ^ž€=õv7öG±d¸ù¶…Ð~Ee…VËFôØIørÜéØã¯á7’›`[”d¾XYûã­éÛ³_ÝyôìöÃ…Ûó‹ØzÜÇLÍ‹>Ó³K^L?Xñ­çÓ³‹§XòüP¼AîÎ-MÍv˜{Þã€ÏBÇ.ÜŸ_|ºôí­éGð àíï¾øòó[÷¾]—(ÍW>$pš7!°8ª¢ËŽX)X—š®Ô€$lJ©&ÊŽþ6óè¾sïñÒíÙ…ÏÿúàîÜòÌ“ÿLÍ=5¿<5ÿbêáÒÔÃg ½LûÌ?î͵¹?·83»8Ó¶ð÷äÖùrÆŸ}~oãûà;yÿÉÒoÿ'ø[“L8e=4o±ãÕ`W.`ØG´Q“š¬j‚†—W™b v¢ØDœ1ˆà!ê Œ4@ݣѱ >‚ŽñgZÇj}ƒ|Þã?&xjiÕ—×±€á½( Wz·³°üC¾ÄCAÒ0.wGd`HÔ¾táJHÝ™êÊ›BH÷ÔËÁ¼:®Rh[P/ÈêŠ.ÐR·z0O€ªF3‡aŸíý Òm!½Õ3{ÇUxØì¬êʆñ÷»O·‹ |¨Êõk[ÉÀ”`–¨:d’ïÞF^‡³b A†3w%˜YçWc¹U"ïó6ŠY;!ˆtˆn¢›ý@Ëv›H®ŸÞA>Î["7 p¯m£mW_;߯§cÙý7Ñ­å•õäö Šn¾øoðþüˆJ&¨«½ØËÂwè°XAÑ«Èÿf¤ø¯ÙòÌãeA·!V%ZYYK¼ ¦É­j,s¸Ë{äÖâ[ï×âÙ@<ŒeCD—÷AÌVØ `òÀ±ëQÄn€ÈÚwÏíPtkϾˆa|W_‡ßÃfÔ7ž)M=xÝØeyë g±ŠÚgÿ^}—ÍÓŠM•³ŽÈ†’¥P²JúD˜(Ù!Q&ÈAî‰="Q$ù~v½Æ=üYúF& N•B½`¯0ë©®=»ž: ¥Ë±ÍJ,SNç"]ú>o)ÁŽ&vçž¾LmqŠ£@òeò0JÀoÂÒ€Œ!3’ 'ïf¡ºøò•ƒPvY‹odzïÞãÅ@¬"÷à `/œÜõÈ…“;‘äNŒÜ‰o¹™‹mìQ²DÈýY “å0y"և뉣¼fbÿ"ˆ{Q²>d>JîF°Åp(@”¢©ý|YT›­¿|ùèm8{P•yyxL®§€iHD œ hé›`4Y„º.’,­F¶×]õV|"äq$Q‰’ÇQ²ÒpÙpÑ“kŽHæú\ðÔ[êWo[üã 8œìWoGÀžb±h}¡Ôa$S",\,}H$K™U®o›³O^†â;åc—‘R¨"FÅÖ…WÝ#º!ë¨Â‡ß穽x%JñXÝØ<‚|"÷`Š0Y' ˜+]&2{"³Ëìn¤vÉ$P6’{@´lùZˆÒ‡Ÿœ0[=:Ì ±ƒúo ü혗´EEoçL|vü¢°/MÝßÇC_9£¡ÎÄP¢w¨æ†áv+ï ÀQÕ‰B}`A!” L ef: ÂȨՖBÉÁu²ŽÈɪ?ƒg.Za°ØM„ £Ü¼3*zºÞÿíǪÌâÇ_|­®U ô˜ ®o¯ü¤bbÙ¼ŒÜñóžþ~õM­èíjCù[-ì0¥ì‰ªËõ%“Ï-œ4³|ñ® î„?:h¦½Ðø¶ï80yZ9‚ä>\6ú¸‘tšY?åd8¤‰ Š" #¢l ø.‚‘A””!:ujÓ‰3ù`pBìk|g|ç.«áȹº,lµÍL xb4À¤àK>}© pBéÔ™ÇÏ]©¿m$ØïŒÁ] bÛ~$£¨|þ ¸ÞêÌÁû7Uì(™qåÔ…Ú;:J"Þ®@UFVAfÞXhXÐÃJ'Î8y®n‹/oØŒ Y9ùãUYㆽ12÷›åϘ‘`}§þTSXòhFn±*Üõ@~QÙ›ï¼ïíìµ»c}z®øPUÉ[±m'؈ô?µø¹€¡þÃy€X‚K\ɧÁW¬˜ÆÙÎÊ£÷'ïK€ÿ À1`ùÀ†F '¸!1)!eu$(gŒrÄ)G’»)±—¶÷Ñö^ŠOÙ\=$‚««Ã?û¹ðü…Kq& ºÓV> b„¨?t÷{«^‡WÛ~÷±Ã›Ü¾óà¨1“ÀÛÇN^ü&M›ƒdä¯{e#ÎJš6"®Ê,\¹j}õ;•ǪžYö|ñG¯o Æ.W«'—}£¤dÒ¾}Ÿ\¹zcã»[sr‹æ/\Ž¢MŠÒŽôБs’NPR‘æœ}$ŸâpÚ¸Ù¤lHÏg`Ñêÿ Àý_ÉåðÙ‹ þˆ0-vGzD8…IžvÄåäÐÜE§Y;TÞjÃg„¢#óªUAÊãœçÜ—j‘Ìü‡§Ì8tüt]CÓåêڕϯùÝ_|JÞ]³ö5Hè¢ Ó7þü7 M†w¶lÏU’WðPº%ðÉ;ÿé•U¯¯ûñÛð­é³b”³Ac\²|5䆷*nkÍ¿üõUÞƒ³æ.¾ÞØ–Z¶BÙ÷¾#ë§íQÎÑ­DÙÖ͈}Œe'e¦åÊ£ç5m$ŒàœáÙòÿ`¨*©¾¡ê:C}ûúq&É:zX©‹q')ÅHiÆÕ✠ÆÞmw÷Y…°à‰IrâÜÅa€,ƒ‹ #Äá¦æôözäAh[«×¼¯ví=Utå ë¡8lÙºóâ55@[{³9gtñ”iå¸UT7éaYIé#'«®€íòF~vþòÜóë$_l×ÞJ°ðâËêF Ë:pœ_ðígUÁÕÚ&AŠòR”“â#ç¤ÝÃ’ÒVGà¾kÒ‚{€QB$¸PuõùüoÔ—{PT÷Ç/°¼E‰¡*Ú¤ÆÄWИÆÑh­&«±‰ Q§f‚ŽÖšÄ¨ã8µÖ$&¦&Õ 1>‚P|òXD”‡(ˆ‚€À¾wïݽ÷î›}°Ë>Ù½ýÞ¥uÚt’ÛÌÌ™¿Ý{ùs>¿s¾§š1rRµGLºÄ$t£WBy$”CÃË—ÅÃMŸý:œ“wº—Ôu* r­‡/¤UcòuÉ bFoó‘Z›ŒÒ}—_¸gï—›·lËX¾"uôX<õ»Ì¬÷þº°^³vÓ…+×:{H¤,-í윹¢5$z&"bxnÁ…Æ;NO°æfka±°£[%¬jD¡ž>cnUms{—¢«—Ê\³;Ûwîõ¸Å+ñ†Ï÷é•™%*§ŒòtËœRj&VyzdýZ¿)ª¢þ ÑØ€[*ot#"²#Ó H5vŒ RµSªv!k08ŽË«dPŠû”¬6:O—„þu§Ho¶sR•]¢´©hk\’±_}°ýT€ôés±þû·§îuÉñÔCŸ˜*$4Þy –ÑøjlÚÄö.™œÔ,îãyEØY¼t%£·ïܵëððXH .669, ]2âX^±”4ËÕV™Ú.SÒ)ÖÀ\àJAD*·’Dsìè…6]ÞÉ-¶´©þ 0ø|L Œö}²¨Jcà†âÀ-(—Šõ*Yðl3:¸KyT¾Ê9Þ&"Y«³˜Œv²–@—D‡+Ϙ\]Zßèhþˆ”ÑDxTt,TS¸ +W­c «ÖnÂúÃ-»z¥ŒRmvz¸qã'c§è|…‚2H/$–W5býP¤¶ô$ ÅXÏœ+'øHámq‚¨¤¨øQDäñɇ\~nþBgbß×Çd”Uɸ”´WJº)§Ð bÑ-µ¶u³Ÿ‘y‚ä´>ÚäéÅguqeÕ÷„5mm=:à*§Ý z@A;B6ðÈ ÔZ/XÕ[‚"…Igñ—]½…ȼüËÝ$‚Oë…^gr7Üîœ6c^xTòWëL®gþŠ8焜4²§XÎÄ$ŒDÆßhlé)Bÿ Zo‘SÚ‚3ç±³tÅ;‹sÛο`Ÿ•9,<"Uv û„\e¦hŽ2WÈ = Æ/Óxñ)¡HÖzZdËšrO`’5úC‡bûXU*Ô^‘ÜÉè9%þ…Æ­bÜ2µS­óˆU]ûMŽàJÔ½èÄ̵zŒ”4Ò†JÛ/£Ì6W°±¥»àl©Éâ­oz0iê,´û¦½²zíÆƒ9¹‹2Þ‚›™«7ȵYü·uû©R¯Ñڼܸq“x€‹…†>„„¤±¥uF;¢ÞêB¯a)ý¢ð0—;<‹°(¨kbÝÆ­ý>îõŒ·±ÞýÙ‰ÊDà‚E¡FBù ±ÆÀÝvêö=iα³µ¸áVÓ=ÄýÀ­å5÷ï÷°RµC¡u“¬‡ÒºþÛÔ:72K²`©qåV 2¯ÎÍ(õ(€ÓêÂö~™<õÅÙy'/8nÁ¢P†Y¶"#¨-÷{ˆ°èg'¦×64£ã ÏMzé~§Øááœ^îh^!v.^N±æý¾ÅzÙ[ï^,­¬ªm¬º~ë•ês«J„7¤Mú4¬‡7Æ2?ÅúIí ‚õ’ºA㥃Àwåÿ°ñDxCŸpa¥œòˆåN­ðQ¬W£ó“Œ H ²™ì~ëwªX8"ytDlR]s;ktâ¢<ªYÛgû²Q<ßÎÌ"iËõºV8•ž>§®éAeÍíÚú{Yë· I—Ë Iˆm;>E<ñ¬ÍÉM›þ%8t¸²ëðð„#ß[%cA=É}Î ¯«‰ð9óÞ(¯i:s¡¢´ªáTqùéóÂòk· vÿÂEo†ªq¶’¶Ò\mךh”$ãÀPVM­b|ãVûO`»‡¸´ºµõ!^Lê½´a1ú¾gÈ””D¦84b$ËîæÎ]ªEd¦¿4¿[Ê`GJšþôéÄäqhôë6í¸ÞÐÎqÜÎ=û##“0»a‘¨ SgÎ#Âbç/^QßÜÎxCê˜ç®Õ·ÐF‡ŸãŽçŸÃ΂EË“Sx½)u̳Qq#瞦tÖÓ„£FOxzìó¨fZ³Ÿ?ÎÉ[ dŒ6r”!@›8µ> ëãDJ¾Pz+ð# ñ¿œæªT9 –; » óñ‘}Æàך+/kBý·ÀÙ³_ƒï“Òg•TÖ«uŽn)»ç‹l"2)&ö©ßˆúÐÜñÌó3ä³&÷×Ù'¢GÂå÷ÞÿÐéçV­ÙÈö/§µCÞçðù8Hˆ)ØÉ/,½ß¥üÃG»P„W®Þ€¡æoÙ'°?uÚì Ç! “Ó_%ˆ¨w~ŽD”\mxyÎâ脟垺Œ#½Ç Y;É:•´Ãêä4:\@\hnS4¶ôf-Âô}n´?ÉøÇ¾RÕÒÜAI¨~) 5sº¾À÷Lo ¸A’åkN̈ÌVßlâ— ™ †… Ã#ˆðáDÿçŠw²Î—\GU16ÌtSfÌ#"üá)?Ç·#GO((*kn#)(ii“tú,mÀ>^ùƲw{åZ<øÁöÝDx •€ÖL†ó‰^ÿ±°æ6mpñ§Â9ÿÍpl­…c°¶r`Þ‰Uöº;’â+ y'+þO€óNWôHl"Y¿ÑÊiMA9’µæ ~z¡Ém®AÜÁ¶nÕÌ9 Ã" GãA&(‚¿‰KÞ\s³©C¬4tŠ4é3ç#j‚ø§#cŸ‚D"ÂðãÈ%ËWkÍžõ›wÂÇÍ[v³&'ðx𥲛ýŒ*õCáý—ÅOœ6ûA…Ÿå/ ©ˆ¸è¸Q1ÃRùÎõÛß_Öy‚Ü’e™øsÇŸÿJ²6\|hLëyzáôCÝí‡Ç#µÖŸÀV` qeÕw/UÜijWJ(‡ÖÊïÿ€Õ:—Ó9Üô³—xé.HŠIJ‹ŒM!ˆØ„”ñ¦ÎÊúãŽE¥Z¦±ì>Ö{•¿Yù^|ÊxÄ|”Wò Kj›:Ù>O{¯o“6ùÔWKl#Y‘€á³kF#†H°ƒ= Ä‚°6#¡1BbF!4ˆbÁ˜V;ÓOwçÓéĉãOl'±“8Žã8?çŸNœtâ_l׿\å_•«Êóœ™îžtB;¢&ÒQéåù¥êÝ{Ï=ï¼ÅÍ#©JLB:{œM ñ‹Ý$ÿvÞyï_ø ªöò«ßøö;ïÿ±{ptaý 'Ö™œ"aФ ^¥ oõÙ§:îž"ðËáYÎߺãZÝb¶2¼I`2at¥†õ:kÈg}?Íÿù/ÿþôò+×^úâWßøî~ýþŸ¾™­ƒ¼æðUO úµ7¾‡T|þ•koþê·?óm„üË·~¾ýîï0~÷½Òl)/iÐÏ×éÊ—þöá­“EöÍï|î˯ü?ýÙ[N_ؘOå®h|dëþú·°øK×^}*}£½né,ÜB=öï?ø« –kIå+8>…†€6œ™ ¯}dëÅÑ,\5–i•›^tGÂK 0W"(ß™(ˆ¦ªQÆÎA6©¬-¬&ýS+¶õô MέÝsŒ»Æ# Øæ~îX¨):(É5ƒ‚¬‡·ÁÛûX`v dK1F¶JuÃ7µÚ7àKD([bYÆú§ã‹É §Ë5R#dçèx:¶Ú;ìôSŒ °JƒSi÷F‰Ê/~blØ?µÖ}?ÐÙ= ³÷ÜÞÜËß¼í\^Ïm'$ ù)RÍ'Amà°2LE³t¬To`“‘åàj{c,´t”Wv“§Z'½sÈâ'ÌøÃÈp½ýÞÊöLTl-áŸÃb¦h–Mœ)Úhp+ÓlÀkñtûgÁÛAg0ÝKfÕlà€…ƒÃqX¸5ŒÅ’Ž]ÃÑ•M¨7Î;A5uBÔ=° FlLÏmO„â p(ºûàU$0¬ø¾3<Ûù AÕÎ-œãM¤E*[°pU“ |PUÅJóZQ3ù²‘“-Lª&aT+'›®LòŠBªÉð&¬jí¦ŠÍ²E'… )êUK2ZV¨Ñ×jÖ±¤1ªääzÅ"yYSŒ†P%Ø'_> ±L© ¡C;àr {ƒñ;ýc=ž'Ü8ÉíÅ |üà@Bõ‹KÍœ*=Œ0€²Ábí§¸‚Hïh½4_Ã&i¼4 „-YUBƒŽ1Ϩ4]•† RÑl”Œ¬XOqÕŒ ³¥†X#ù¢Y!$#T1ÀŸå©5HšÅ!hm%òÕ|ÚHæT/m.ˆºTFŸÄB«V¬ó±lÁ„ .¸xx4¢`¥ÆäìæØÔòG¶ž³E㊸ß935¿»›,‰UZ‘3 3ÍDApð³bR«Éªõœ¬!ÃÅ:‘4 LW1ue½4¹×‡Q2X”¬`I5dó„ÏàW²Òœ^21hðå( b£Ö ­X5óEƒjWQ ¯Âç°ÕSiA]¸±B½=<ðhpåö=_“Às¼þ¿xe#·w(—urÂa$Äek0†³be£\o Kè ©By‹Fc3‚†‘#¦Šä$'ÈB@Kš™â4L]¬ÔÁRdËNbÄK Í®?™í1Ò2®hºð0è|·¤SaK¸­Ð½U  ªŽ2Á c{à¶\¡åÃÁŒ(@à`xÃ\|¤ÀWŽÀ8vQ¿#Ø?2pEU©Òº´?hˆÜ:´‹à‚/Tê¤Ò `k3!LÌlÚÝ37ott»bñƒcN‹u^6d´‰rv®@F2Ó… øP üßJÿózo|3m®m3ÈOͤÀU;£ÓÑA´‰j—…óæ\œ¥2mÀL¡Y8̬Û]Ó7oÁ{¤¯Z­“êÿÀÐOh…Ã;«Ûã ®¸Æ—}¡uo >:±Ø2ÜÁX«,ºË-cÉÄËçÝÁè8󮉅AOÄá!ÿôºo2îôGœ¡ö»®;}žÅµCœž8÷‘XTÌórù…1ȲU´'þヴÐ~×90òâS³;“áíñ)diÙ=6?6Ç) ¯ã*ô$àó'"—¼ùÔ·ž…Õàì øÙö¹œÙB'.¯g½+.ÿü½¡‰í÷½Áy¸÷‚¨!ü«B`¦i!ªI3eO`å®=0ì‹õO ¹çF¼Ñï\‹p\ ó-#êðE¾ÙVá:Çí£sîР;<ä™{{Ç;{]™Õí4#Õ!>¢bÀÎß3sùuá7P ŒÉ`e¥ï³а`¬7°L„ÖpŸ^ÅØ\>ïeâéÏìmÁ79ï Æšhn5ÀÞûá!wÉé³E–vY‡šqr«¤z±F£å#™¯1²œHË]¸ìôµ÷zÛ:GÚ:‡[‡íy0rÎÓñY Ûº†l]öÑvgäzÇð¿Û¯·Ûۺ߱u ö úñDR€¤—/Å¢",Õ9ùlÃ6À€ÀÐ^\Q󽔤‹N_ÔÖ1ôë=w9õ¿ÚúñÄ“OãÆeâÌ/ž»­cÀÖÙoë¸ß„N¶;€În/ž·û¼#“.ÿÜêv ×=±Üªü¾pS¯Ž«J±‘fpK¥—©¥­äDx"ìö·îž±óŸ Oà±Kiþô4¢Oˆ ûæ`$<“K£“T©üÓñ‰ðêÜÊÞÞ!{ÌUyPWA à™ ÃŒ¸(Dn¹9S E·œ¾ˆr: >;F#g|áŒ-=Æ£É l/ꙈxÆçšˆ=Ú'ª<äŠ Š©ÈL~ºPË–p¥<0#E#“dXCѬ¼\ÏKÃ|5q¤$’ò¥A¼¤æ¿HçüÊŸÂÎC1‘Qö³ênRÚÜc×wó‰ü~Zb$ìX äºHi\?À€X¢×7V6¡½'”‡ñÄäaVÙ9à³¥c®ŽçÞ‘ô84äí.1¶'$Rܧ)’íó([ÝOª ˆÑá6ZÄ ±|•,D†ÑŽyM¦"ce83Å VÒ’]<Ýá…ðéfž ëô?žÂg׳E3'˜D‡›Z… ®¢FTuA°”“°Œ¨ƒ½’ ¬Ÿg!àXZD 0HžŒDù_1ˆ\idY-Çk¬Œžã¡ä„•Nƒ¿L°rëh  á Xù?ì—ïOÓ@Çù«Ñ‰" ‰/ŒÄÄ}Ã+_øCÄ  E™0ØÐ­¸±ÝÖ²®ëuý¹®½žßv`†œÃìU“Ož\o¹õ¹ë÷žûžâa†¢DlÆÔìñkS6EÅ ?ëXžNtßLwõ?ÌBáA*üÚ—ªèøÆ\p>Ê:-ò&±\4dÓ‡©:ðìÜcŒ‘Õ…ºØPãú8ªz Ó¡á°„ºj2A¥ðöM¥¦RСӇ•øFéC½ Õq‚Çk éÌC½eã¡5ÑB¶CX–)ês¸/®`¤¥ø§uŠ#|šá•º˜©ò»“ ²"LM ¬o sÌ‚OÀ€téæÖ¾a1ÇcD§UÁÂ¥C"áÉ@Wk ‡Ó‹”nÃ¥Ôê§çéõ\9d¼tÞ+7ºÍ¶-ÈŽbøè€×“ßt‹æŠÏ_Çî?ñ[^IœIV­©ñ‚‹ƒÞÔÆs4à]DÄÀá…+\iS¦;¬ÜPOëD³!à=Ãö¸bc:6·ðtQ3½Ý½£>e†Íˆæ–* \±¨à´ ¬àA\‘ôÁ™1QpË«4I‰WM—Â_Á{=¹VªÍz½=ûp^·ÜéØl¹&¬|Øxûnm7o¤w¾äã[™Äöabñ ¾öA"u€Çˆˆ °žÊ¬ÆwS_¿'?gÑÞütô~-õ1¹¿¼šÜÚIs'§/˜l/3{½Øƒ¹ŽjÉÄRu×t|Ü5ÔðA1×¼¶æJz?ÄEg'"b"(š¯YLÑ(љضÑã2¦~îGñÎÝ»×ós¨O4mjj ~õf©TÓŽ+‰Ç>Wà³\-ËU³\åè¤ r…êq¡1ry~ïàäð¸Ræ•ÓZ'ÿSØHe^¼\º73g˜cL7_ `ö´2 endstream endobj 55 0 obj <> stream H‰TPÁjÃ0 ½û+tléÁqƒBÈ¥£ÃÖ±t»»¶’Ù(Î!?ÛÍ:vÐ=éñž$OÝsG.‚|cozŒ08²Œ³_Ø ÜptªëLܺ‚fÒd÷ëqêhðÐ4B¾§áy…ÝY=ª=È [dG#ì®êã3ýÂ7NH*h[°8yzÑáUO²èþÈëêÒ«ÍÚ[œƒ6ÈšF„¦RíìÿÙ¯â6˜/Íâ¾Y«cÝŠ´»±Y•y$0 s W..²¹#|<%ø½r‰"\h¹ endstream endobj 56 0 obj <> endobj 58 0 obj <> stream H‰bd`ab`ddäówsuqöÔ®ÌMÊωXþaü!ËòCŽGì÷«??d8eØæ±Ê-`ðhš9ów7‚ÅÃþÝ™ÿ»‡ÀwÁîïK…X¹}ƒ‹ŠòË‹2Ó3JV*ZZèZZ*8ä¤*8çç”–¤)xæ%ë)Àd œ2KŠKŠRsÁa‰y9™é %©ÙÅ%Pg#c;“Â:fFFõ`–³ÿý5E†ïß™ŸØ¾³g•aÓü¹^æçõ¿ëÙù~Lá“a*Ã6ñ§•¨ÌÏG¿ÙeØäØþ˜ÿ¶Û¡üãÍ÷I¬ßõÙÿé8å@1V>€®8cJ endstream endobj 57 0 obj <> endobj 54 0 obj <> endobj 52 0 obj <> /ColorSpace <> /Font <> /XObject <> /ProcSet [/PDF /Text /ImageC] >> endobj 59 0 obj <> stream H‰¬WínÛVÅ>€ÞaØt!Ó$%‘Tw±@“Ø©Û&èÆ6Ò…Ó´x%ÝšŠHFUß²?ò>{fî½"%Çí».Qâ½óyfÎLH«ÑÅë›VÍ( YPi?‹Ñrôq’¦ÑyàOæøãßý ¥dšú)ó·0¦­:Ü|O•yöÃùÓSüº"Öõâvtq5§n—£0 þaø1MÓ”µÜ²%«4FÎ-ä)Áï»Ñ½—ëíY˜ø‰§m±']µ5-êÍ^W+*»F/?ìënKúþ¤¶góÐ=ÿìçÛï õ<ô#º}5òn׊ïªí2[à©¡F—›Bñå®ÊÕ¶i³*ŸÝþ2ºýjä=t-é%‹¥]Ý9úQήU¶¥u½ãç¼¶Çï=ÝŽñÊúù, <4|òl6õSϧTÛÿÞd{#<«ZˆcEP·)ê,§¦.‰¸Ø«”]ÙL¤G¥6Ô®UÙ_jÔ&Ûf­ÊiiM¨K>â$¨¦õé¦ÓÂYˆÃ”õ*µ£aœëížZDX¤èÕº=_†”ªêÜ=¯®ú÷ôÁk×¢ÖŒm">œÌj©^ò©C¨ÊLW” 95ŠØ–e] %ân••ê P·ôáðé’3I¢ppž#úK×´]CѹOo]6ÆûI¯X¡Ï2û„ݪ>*ry.ñoêjÕü•³‹ºÜtlÀ¯PËÖ¹Ùß䨜øùálL*\Ižø¶9ä§‘îß…m]ùôoƒix— ПUdqrtk© eq½§‡=åÛlµâ$²®Ü¡i³ÁOG¦–§°§2g\Æ1:äù÷þêáWH45n‰þƒ@­·—M5^rXvE«¹òŒ¹¶ÊÖÈ jgõ²Ý®Õžvkœ%A ûcpWú|$ô'Óxz¨sé ÷{ï½Ü‚ôÏ. ÄE©²ÆRP›5´SE!ÖŸÈò²¥K¸'i2¼Ê÷<©óØChAÇ"M ‘¾è€|à=+$Þ)*;ßsCg‡T>† Ål³¿ÆImc5G¬r½4a[ê*Xx³‘‚Æ_¬Ÿ{›1m àr§Û5''£þ·’Âú\òå×ð³ð<§wÖ¼«–õ¶í*tócâ{:XnVʱn50 „Wv¨X¤}·ÕÐd!÷ ÚŒ6댇ÒUö ½º§'ë©ã檅=.û‹ºªø+c¦À† cŽ¿nÑöál½}De !õøÕe©r-Ž0ºærÉh"ÓM…_\M æ?“à‚~nºxÙÄ´h(ðçüás2ƈ5‹æSj£`¦³¹ÁÃÝÍõÛ×ôöò=ݽ¹¡«ëwoÞ\|óîÒê‚ÃÞ‚$Lnƒ ç]WTîIýФj”¾rƒREïϨ¨[RY£¹ò  vk%,Kí6«±.È𗉽¹ú¤êï šµF¡~3¨aŠÀŬ »›@nóø%ª¸÷®y\As×[¤d¾.„‰aÈ&—ÙÀt¨rw q—v¶ž4B¯@[ÌÆÏ0*ÄÁ8¾v"ð„zë¾Ê4ì·[ó8¸ÉV!c¶«~Ó›a—ê75f`Z–8÷õ³¨Oc0¶$/–ÔýÍêø‡µÖ°5wXTS·Xs¹¾úñ< ‚[ÿÛËŸþùLßšÌ#3Jh’º¾õE¬ f8°Ê²‡„Pð÷¯.‘óæ±­7c7ãÔejšM• ®\»~&ÜÖÀW,ޝ76ɸ›É0<íT?/T5Þoí€iúÌ‘2\õw–‡d K€y ±6­tlœ?8!›‡M¤Hy¤Ë“Æ¥÷¼ÐãŠrÆ/àÈŠ¶¥Öº(êw.{ÞíOcò,Ü¿¶}à 4 Òg „ö,ò¬øÿ–¢tú'X E2ØcgMÆ”¡Ÿ^º5¿Â¨ô¤àÍD6>Œ"O†Ä~¨'­~5x`5¹m ˜²E»Q¹k!6Ä~³4›No ¨ J*ݬ™´m)´Ýöì\¨Úî(¶sîÙ íyî½½Ô[ÞcÌÞÇ$-šµôȤ¸)gmkŽÁý%/—hPh´íV?tƒ¡–±"fú5Lj]çÞMY×Ö¤yÝ÷St¢Ÿ×'FíÀ3ÝvOSÄ"#ËÃÔž›èl€ƒ—&4ÎNˆïO†Âà²^î27vv>¦,]=ra¡Û&þbâñîd¸?Z ÜñžÙk†›;¿RùœÇ‡Íàx¥º÷^ö\z«v®lcSC3d£@«Ÿ6ÿr\g˜1#Çø“§TŽÿ`ý~%ɳÔbÄþ$Mþ ¶n¿ue—Ó+Ý,¬*Ÿ^(4Š!oj]µ<'~2›Ìûš´î­t¼®épøå¢É³§Û– H¿vƒ¡'ÛòÒ+0•†.ûî3…¦‚™-Zw‹ë,[,xΖ©™bž†ˆÛFb€{í3ÌóWÖ]Å.¦ÐÊ8‰ö·ÝËœù»Æ»ÕpßáÎ`@–b÷ª ª{`I`»¨t‰‹a?çŠ0°#Éïë ;žx2óêí¡l$YZVvn°ò¢×,@OEa‡jV'ÄjlLLa‘9ÍíµÆ‹U q¬¡Ïcð¶l@ƒhrkX)³ËT&vÜÝÌkÓÅ»Êö£¿†‹ÌÎ#½ }æÐ%Íá¤-Œ%û¦Äc”8Ú7øhÏŸ‚Ì£³ßmM­óë;c£àíòö¿ýi6™0[&S÷”¢»mÕh9ºx}Òª½€¨«ÈÖ¨Y5†8¢ÉÌ’é? ñ ŒžLû¦poï~:;ÂúÔåO?þðÍõÛqVôÿ¡¿@ÅŽ‰ü ÝÿPÎDl@‚ bO(BŸBÑ„snl€a¶† šcYC"*G7l5žÄ؈œÂNÀ„ÀXÚï%¶Ô›†¦¥Ç;UŒ+I‚9¢ùéXqïív»³ÙÌ=¿í~-A¦¿aìò1S99$.–Y:£(HühOðu‚Ù)JÑÁ'± û¿FGü"Jã(šŠü>Ngi:¡Iì‡ÐÊ £9-°ç]—qˆMÃ\'MlädŽ?šÅKpJçü-Uÿ‘HVá y¶0`0TeõLbÉ@Ï{> endobj 61 0 obj <> /Subtype /Link /A 62 0 R /Type /Annot /H /I /Rect [615.775879 14.7798 703.724121 25.471695] >> endobj 60 0 obj [61 0 R] endobj 50 0 obj <> endobj 65 0 obj <> stream 8;Z\7]l)RY&E_KT8@!nSP,E8!+O3l-M>ISPTQm]QKNZAf@tu6nQb#hhKmWoJba'gB dK9-3oVauQ'_T?h$]@iQ?niCT=V3GMd9.$s3(r]H5i0WXITI_k3?'S`lBW#K.Ek($ 0qsdTdr8F#$i-ek9>H2AT#d6*';R=&'osYN"F-\nL?Vlh3If[J8sIPm<^X`1+CGFR _`385)EFg%UKWt@V_/VmF7>'&KkM:.aM,_;+E7q;p$V36**2g^NVqa3W`E@MXABCV ''Fd+K^D/t[u,hSlWWK*O,>rFea`ug15:u2kHV*LX6R@?:$=ikInr%#NYTUUVHtS^ :8VDY4iQ@Ya<06M#o8$5fI0P"0B`)eT[cV5ds.m6QWe3f@uD@DW$Ss&2[uY#/-rPr n#qASp?=,q6aMq1BUrn7Vjd?K5#n6*F?Z0ikEf"d2S]/NRm04D:TJ6CdQm6j9-h!N r^ eC]1FBT#$cT/WejODA^R]!FZVNH:XP>&GSJXiQ!2Q?=cQh\J9`A3Ia'Mq6N^3D51n/O5-cq0R)@j[KH(o*Qh39ZBSi5YG5lS:ZQK33KkF<4(Dt. /gbOk^pu`$W5?-O@63`maIDFuCO8;DHdUhk?(;bYZT#)S%8?G?'5LH:IV[l\4kX(B Rl5Ap/mPMAb;s?_4mUbt.OL4M]o!W.`!=?KOOFEc_U5nV#OHaof9bj`^P?(aY7)AG7T-0'.CFp7*FW>dk9QA,uEu[UW%76N_gD_3q?#[LMri! ]_K4#nECL>"HCF%T;.*kr:&e/T!-2k(J@15U[? endstream endobj 67 0 obj <> stream ÿØÿîAdobed€ÿÛ„     $$''$$53335;;;;;;;;;;  %% ## ((%%((22022;;;;;;;;;;ÿÀ€€"ÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?ÈxkZK¸. µ¬Ô•fð×VÀ9Ý% áô pBlèˆÂã¢V*½>%1¯w¼˜­º»ä­bâ’Âò4oÑó%O"–KXÖ—<ýýâˆÝ‹&Z*¼¶2ÒʘC Ï&Gš»‡e&ö¸ › ‰BžìbÖû ‰wŽVun·)Ži-kþðž>å(©Z5Ì¥Ô½[ús2·dÀ6eº‚cÍTÌý ,eµ89¢Aí§^ŸÖ2¶z.`È߯#ïYýK&ö¶ê W;¶j]™¹Û¬høŽß‚¥–íÝ1är·jd9…Õ¸Ë_ßÌx„Ü]ŒêöoÀ€[üUˆBˆ!låq1jBi§q„32¬«~·’®ò¾¯ú‹UiÕŸò^Güu_õ6ªÂP4žžOfO´yDªÖ:L#;èÏÁV~„Ÿ5—ît^;c§Òm»`ˆ:ñU7Ú|ŠÖè¡­nî\âIÿu>˜2Ê¢[æ–±®kDµ'ÌvùOбØö_[f×c<HVŽEŒ¯ŒÏ±Çtx tYÏÎk74À¬´ˆgQæª-|Œ&¶š{µÌ—Ÿ8z²£ë>éÝÏÁt6äú”5¼9Üà m¾òÝ•ŽýÏ‚1‘ ÄotØ ®š7ZÙxüGe•ÕsY Vð‚ܤl¬Wp-íqásÝS̳sy™¯~ÉТ{,#Ràænk6»R ‚«Ý÷­ê·íL“=‡‰Y…š:ƒ‚®BŒXg`²5½ÇÚÒAî˜Å³÷Jç4ðŠ­iìœo£«JÊ^0oi¾²}Ôi­æp¯0$:¿ûú‡Ok\LëØ‘¢|WPÓÉßqý>p«ZL"÷s68m>2¨Djì‹.ðžËO£½ÍØOÑ.:øj~.+ò\è0Ö $­ wNÊäΥߛäâ¥ÖÍ!TÚ;Ã`ubEÝüaPÊ̶Ü7_°Òà7iákUFÚì}š¹£h¤¬^¯Ìl3P?¤ÈpÚÞû ?9J$ÀêôlkAÈ,u¤˜c[¯™ûÑò:ÙÅxe¸$p4‰W¾¬ÑÔcŠ˜×;ßàîVÖ*zƒz™e·þªÖ k¾5^%H 8m7r­ü›_íP <ŠËêS·:—+OêŸO³¨ä½¹š+iÜ•ØJÆúËU¸Y¢¯¢°ÿz€°¾F¬vr^Óh$2`*n}pæƒîA S ܽŒõíÇÜØÔ—’ØÉ´x¸ŸÅX†ä5æ4¿t`Ò7xè¡«Nš+ú€î`’8A|ïÜïÎÔ©Ý‚Aµk¾Ã“'ƒWårl{ÍS ©þ‹‘áìÿªAiiqŽ;!@Ú‰Ùél0AŸ$+1ÄòˆãíŽþ(7´÷ãò¬ø³±t:e¸ßg²»/wáÈWêÈf;‹˜ ÐBçñ²¬Æy{3¡iFº×:ö’Yæ L)8,´² $ô.RëG±ŒÐë®{µÔù,þ‘oRꔌ’^Mƒqw}Uz®(ºÃpÐƤk'EÜýJÅÆÈ-̬h'S̱ÇÃÒ¼Xø…]ÛÔÛE ª±‚4X™:¼ÛÀ¿FαÏÞº+<¬Ìº\÷Ã4žJn@Œr×Ç»†SŒÀÆ osÜ®+ëŽ-_´·«‡¸x±Õ³ò1ë«ÐÌôH%íkC‹€í.•ÇgõŸ·g‡9Þ×ø÷þäI¸Šè¿©MÚÍ®v\çS™h:}˨Ód…ÇçZ.˲Æ}tG¹$s6Æ=Å­–·qÔm”Må†ZdàÊ6m¸gÔ¬ ñ*ïüåÍ:5•ǘ•!3<0ÇŠšÒ£VZ4WiÇÈö»V²4?¾¹ÐÊÜ]ÌAZõõì·×c‹X a®lûƒŠíüÝþ¡ &#ˆqd×Ð?ÆA¡«|¿Û» Úýø~TúÌø¡Ûô<ôüª´@·fGB°"†nn-®g¹ÎuXIáZÄ·m¡®>ÇH)û¾@LHpÛŽïP—hwA ÔÅëWJ—kžZ×|™‰²÷‚ñ©ÜÏ5é¿R1Ë~«cïç¹ï?Ä9•ÓLЉñw`}cÏ~%[ji{ߣZ9%jœ€ÇlyƒÛÍcõS»!¶@vÉæ£žÊ†‡W:ŒÛ(ßn‚[®÷6~àJæŽÚÞ@¢ÀAù®Û?í™Xζ­ î+”s®ÇÝë;q t)‚C£`˜ë«w¥‰kÉ0ÀLFœ.V° ½ÝÖ¯SÍœoM¼Úét~èþõšÝLASáDŸÞ-|²@~èHM1ùß(HzûÇ÷ î”à©)‚ÛTšý;¶ƒÉí¹¼h…5x;ïÿbž8>þuÿßš…´Ç ÊNÁÚi÷yÇ ®Ñ‡à?*f})JãíàªuÁùJÌ:)H*\€y:_¬Pã[íZ8Ä©qâ3'  |ÙF8,žç4<:Ý¢± j@û—¬t ‹Ð°éx‡Šxð.÷çŸU:.&OPéµO©ŽÖ;&ï ,l‡y4ö^š÷íl (Ú5¥>0 Uêæõ ½Y"dj Âæó³ò(°×qãqЮ¦Ç Ú¬î§}D8 t/USÇäõ\LJV@žedd_}ÖŠXÙw‰ãÌ­Œ¼@×¹ŸêU:±ÙS‹€ÔòPâŽà2š«ÑÅn=n½Îqß°–ˆMkZ}vð Çõ‚¯UÆ®¡hv{Ü÷è­;ùË£÷ÿTÄ!g ¥·a$ ZÔÚÚÇ4»Ý3»Nå[ÏŸJ­#•Lj@SDض¡nâÑÛçYü­L ÊÙ=+¢³5¦ÃuÍ!Í lOœ¬‡?i !EvM/AÒcãìßC…kš7ÁÞQÝ{âìo€P6é©”èòñSk²|C!ˆK (£Çóžïà[,™žŠÍ…®lê…„µÛOe0 ˜†S3r>§Kê÷W³¤f±íÖ°e€ð ЃäW¨QÔhÌ¡·Ðéc¹Áî ñ¢gE§Ñþ°åô«e§ugG0ðG𝗠ù¡×pËVû>›ïi!deå{º„ O¬ý?:¢ÒñM¤}ÁË;&ç'Bª›½tgKb†ò缸ª™°“¢²÷ˆ’°:ÖyƒS t"e*])p‹qr¿&Çø¸•*òlfá̲|”ò’¿Â(Ñ£ÄlÖ–žÛŸk@0vñâ†ÐC„…ã*M°‚…Vˆ·®ËÈÊW1(u„Õ±Îöñs×¹ÅüöÕõƒnp®T× œ?•Ø ZçHi:Ê*¢¸lê;0A°G‹µÿb²ï Û~&È$weÄ’Ü#ÏÍTÁ›ï¿÷Ý÷”'Xç:\Ió:§“  Pì¦aý¥J«¹Û5‚O’®¾ÁµžÞŠ­)ÊmD†ãåÇÞ‰_RÉ ö=͎Ī98.óÑ4ÄémöoœüëO©µ£¼Â¥us½¥ÇĸêOŠ&K„1:¼ê«ÇšQˆ5%i)ä"6¶ž&SâcTëB4úò¥´&Ú V¥wWð²%» C‹xŸB4R©û,ïMœx¢Y1ˆ@¿ÿÙ endstream endobj 68 0 obj <> stream ÿØÿîAdobed€ÿÛ„     $$''$$53335;;;;;;;;;;  %% ## ((%%((22022;;;;;;;;;;ÿÀcþ"ÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?'NÂÁÅéôW^5%‚¶¼—±®2æ‡:\àO%h~Ëx£íÃÅeq>ö1®ØGÞUz·ŸCÚÝÅ•Rí¾!­i#æ¢Üî­×2ªÇ·ôTÙhkvÎÖŽ5Á0qYèö:NÍñ^1ÿ´´4#ÒdÏÜŸÑÆÿ¸¸ÿöÓ?ò*Þ]5³-õÔÿUµµµ›4Îh;Žšw<¶&éìÑCèãÜ\ûiŸù½oû‹ÿm3ÿ"±-ˆ*Ït>Ž7ýÅÇÿ¶™ÿ‘KÑÆÿ¸¸ÿöÓ?ò(ÛØ’¬÷CèãÜ\ûiŸù½oû‹ÿm3ÿ"±-‰*Ït>Ž7ýÅÇÿ¶™ÿ‘KÑÆÿ¸¸ÿöÓ?ò(ÛØ’¬÷CèãÜ\ûiŸù½oû‹ÿm3ÿ"±-‰*Ït>Ž7ýÅÇÿ¶™ÿ‘KÑÆÿ¸¸ÿöÓ?ò(ÛØ’¬÷CèãÜ\ûiŸù½oû‹ÿm3ÿ"±-‰*Ït>Ž7ýÅÇÿ¶™ÿ‘D~e^³ð*mZPÐÐÝLqljJ–Åo©SUÕæççâÛ…‘U!Âáa4\êà2 Ó\@€LEÞ®w£ÿqqÿí¦äQ1ðY“si§ö:v·Ò¬p :(d:¬±2±„ìmù7–8\IÞ×<êÂÑu×Í]k~ÓõºîŸeT}ƒµ£TÏq}¡.vÙ>çqÂTžÔöü\V3íf69kµÒdGùªg‘_ªpèô÷lôY·tLNؘWºEyVt¾‚ê1êv5ÆßښÈc] äK}³¯B²ìŒŽ„[S_R±¦Á[l#2À-$´‘ý~|Ò¤ðízñ+´‘V/ àÚH’a¾i3«çׇKÚÀ\÷6–ÖŽKˆo—u§]n&?PʤVŒ¬­ÇQ¹€9¤ˆQ«3àuLnž× Ó²r­.²Ç´l¥¤üØ.ãÅ*@Ö®£ÿqqõÿ‚gþE?£ÿqqÿí¦äVÇHÀ6ýŠ‹·ü}ö9”5Ìl´€’\׃ù *xyVYõq¬®˜ê´å—Ö×¹Íehhs„§ÊT®½´ýoû‹ÿm3ÿ"—£ÿqqÿí¦äUìjm#5ôãVu˜¬ªº”ðÖ=Á¤µîhkt‚âTò˜jËëxø56̼oGìu9¾¦– ßik!šҢ®ÝÎôq¿î.?ý´ÏüŠ^Ž7ýÅÇÿ¶™ÿ‘Z×6ºúÓ(È­Œxé¹µ1Úì’ë5¤˜Ð|ÔzvÛº·Oªìkç×hÊûE,¤<µ²Ç ÷íç^¤ðî_£ÿqqÿí¦äRôq¿î.?ý´ÏüŠŽùY´³/$³u­Ê˜ÚÚÑ$€@˜žêÅötñ{(ÃÈvQ!Þ©ôŸXdFÝ^ îžÞ -×Z;!ôq¿î.?ý´ÏüŠ^Ž7ýÅÇÿ¶™ÿ‘[x<¾üz ¸÷ÔçØæPÒÆÎà²KkÚ4_£^/oÕúÝUEA™nÊ.­®s½!ìÄH‚R¥Â»™èãÜ\ûiŸù½oû‹ÿm3ÿ"­c:Ìêú ìôj»¨3 ÜàÐÆMOnÁ±°80­¾¢Úúu×VáeýE¸ä[ŽÜbêœíjkœ–èJTŽÝÊôq¿î.?ý´ÏüŠ•xµZðʰé{Ý0ÖÒÂL 0g€­ãÛnOPêEí¤œWeUÓñ›[X×YY-¬:ÞLwVºcÜαÒ*¹­nu´ÜüÚÚÐͤé0hÒàL¥Ià7»’Ìj_[­f.­‘½â––€x$†Àù¨ú8ß÷þÚgþEÕןÓñ20žæôšÝØš‡×w÷}û¿5Ê[Kd+KCèãÜ\ûiŸù½oû‹ÿm3ÿ"±-ˆ"Ït>Ž7ýÅÇÿ¶™ÿ‘KÑÆÿ¸¸ÿöÓ?ò(ÛØ’¬÷CèãÜ\ûiŸù½oû‹ÿm3ÿ"±-‰*Ït>Ž7ýÅÇÿ¶™ÿ‘KÑÆÿ¸¸ÿöÓ?ò(ÛØ’¬÷CèãÜ\ûiŸù½oû‹ÿm3ÿ"±-‰*Ït>Ž7ýÅÇÿ¶™ÿ‘KÑÆÿ¸¸ÿöÓ?ò(ÛØ’¬÷CèãÜ\ûiŸù½oû‹ÿm3ÿ"±-‰*Ït>Ž7ýÅÇÿ¶™ÿ‘L)¡Çkq1äA$ÔÀ5ãóO‚>Å:+÷¿àßÊäU¯v·ÙYÿq1´íé²ê6šô11ÎÄš˜?4¢à` g^ð6zŽ†Ö 41’Ö8N®ÉQôf-õ°KŸNÖŽ5!À I?V?egýÄÆÓ·¦Éÿ¨LÊh³VbcÀML‘?º{,NŸM9BÊ1~ÌßMÍyöêIah†¹Þ? lµg¨ç@kwmÖxÔAðI_V.Ç©­.8˜Ð51[ Žü°*yXXnθãS½xh hl:·ÎæÄs+Œ”ïZ× r8Þ ÀÙù»xÑC%¿­b»ÿ=½%k{ºÝ3£äÝÓ1-k™¢²&ckyö£Í»|kî 9àO‰AZ] þCéÿø^¯ú†«¨Y<’©äᎃ’VàIÿÈ¥û /÷ëûÏþEn$…•¼rpÿaeþýyÿÈ¥û /÷ëûÏþEn$’¸äáþÂËýúþóÿ‘Kö_ï×÷ŸüŠÜI%qÉÃý…—ûõýçÿ"—ì,¿ß¯ï?ù¸’J㓇û /÷ëûÏþE/ØY¿_Þò+q$•Ç'ö_ï×÷ŸüŠ_°²ÿ~¿¼ÿäVâI+ŽNì,¿ß¯ï?ù¿aeþýyÿÈ­Ä’Wœ?ØY¿_Þò)~ÂËýúþóÿ‘[‰$®98°²ÿ~¿¼ÿäPÕY~òÚ·s2î|cl.$•îžÕ—Xð÷Š‹‡\àÔ›õeÍc«h¨5ú¸K ü}«¡I+*÷$óù_VŸ•^Vн<`¥ ¸Ò–¹Û½½¶è™ßUËÃC…PÏ£«„|!«¡I*÷%ÝÀ³êíÖ3Ó°Öæi¡.8üÔŸõrÛé¿ÒsCeѧš·ÒA^äžrϪm´Í©ÝŽ®|š¤ß«k·4TnÐeÜx}Ф••{’yÇ}T`am[[$ pÔÿeNŸ« ¥Ž¯Ò¡õ»é1ÅÑ33 OÀ®$l«Ü“wÕì‹ò}¬Ím¥•É elú,`Ù îTõXµ¥­mv„KŽžEtI%e^仸Lú¿‘[êÃ[ b?ÍOû /÷ëûÏþEn$‚½É<åßUÎ.µµ8žL¸}ðÔÿó[ù5}¼»¢º$’²¯rO<>«d ¤ £WqáôTõIŒ~ö²í@2îöWH’VUîIçÛõjÆÕé7Ò™–Éú•}VØ×1­¨5ú8K¸ÿ5tI%e^äžyßVàÀEQ_ÐÕÚ|=¨¿°²¿~½<ÏþEn$–ª÷ ‡û /÷ëûÏþE/ØY¿_Þò+q$•Ç'ö_ï×÷ŸüŠ_°²ÿ~¿¼ÿäVâI+ŽNì,¿ß¯ï?ù¿aeþýyÿÈ­Ä’Wœ?ØY¿_Þò)~ÂËýúþóÿ‘[‰$®98°²ÿ~¿¼ÿäRý…—ûõýçÿ"·I\rpÿaeþýyÿÈ¥û /÷ëûÏþEn$’¸äáþÂËýúþóÿ‘Kö_ï×÷ŸüŠÜI%qÉÃý…—ûõýçÿ"—ì©ìi!Î>!«q$¬«ŽNì£Í3ÈÞò?"Ø9\ï`ŽáÎ<4jÜI%{…Âýƒ”y±¦yÞGäKöW!ìŒ9ãò5n¤••{’p¿`ålaÎ#î!TÍèù,Îéì.dÛe€jy=߻亅ŸÔ¿å>‘ÿwþx±ð‘_S˹÷Rifw¾k¯<ÕcƒÃÃ[¨;AiT2³zžOIê™7Œ±ÒÜê…,/±´›jnç¶Öì¾èwd‘z»²ñ¿yßæÕÿ¤’ý—ûÎÿ6¯ý$¨œÎ·~fuxŸfm8V5•‹òë ª®âÒæ¼jÿ¥´ü°³:†wT7Ñ{‡n&Ch²·9Á¶›Ëƒ\.kCÌjí¾iªW ­Ý?Ùxß¼ïójÿÒI~ËÆýç›Wþ’YÕu|·õe¸øñs«f-ÕØÛƸ€ö\^âà7¶w!ª!¯û/÷þm_úI/Ùxß¼ïójÿÒJÆå‘GÖšÜ rì·<Ö)4Ü'ptÖ#l{§„µP;7ÿeã~ó¿Í«ÿI%û/÷þm_úIXÜ–ä×ý—ûÎÿ6¯ý$—ì¼oÞwùµé%cr[’Uµÿeã~ó¿Í«ÿI%û/÷þm_úIXÜ–ä•mÙxß¼ïójÿÒI~ËÆýç›Wþ’V7%¹%[_ö^7ï;üÚ¿ô’_²ñ¿yßæÕÿ¤•ÉnIV×ý—ûÎÿ6¯ý$—ì¼oÞwùµé%cr[’Uµÿeã~ó¿Í«ÿI%û/÷þm_úIXÜ–ä•mÙxß¼ïójÿÒI~ËÆýç›Wþ’V7%¹%[_ö^7ï;üÚ¿ô’_²ñ¿yßæÕÿ¤•ÉnIV×ý—ûÎÿ6¯ý$—ì¼oÞwùµé%cr[’Uµÿeã~ó¿Í«ÿI%û/÷þm_úIXÜ–ä•mÙxß¼ïójÿÒI~ËÆýç›Wþ’V7%¹%[_ö^7ï;üÚ¿ô’_²ñ¿yßæÕÿ¤•ÉnIVZÿ³ñ«²®]ºÚØA ö´êÆ5ÃC¤³‹cßÓ©µÄ›C\]ÞK'ïYŽ?¤£þ>ŸüøÕ£‡ÿ$Ñÿ…ÙÿPQØy¹4TÛh®Û]c¬±­{¨ö‰x 5®D颛¨¡¼›I:‹n$üOÜ«1õ3 ö´9Œ¯qi m G}Fˆ÷õ\~‰Šgº¯p$¹Ö‚CޤÖhìøùydáÔžš$pÙ³@2n=ƒa>µ±ç§û56Û¶ÿäÖ/BëŽêY—Õ\;¶——†–€÷»F²IÓBVÞäÌØe†fÜ"û-öj3o¿ŽÈôéhª·â¾·;mm65¥áïráîOÑAÂÁÉËÈ̶Ê*·4½– ¶€Ì‹K¬ýMt #ts§ +‡K·gìÔxÙÿnÛÿ“C¨`ݦÉcl/±ÞÇÎLj³‡Aƒä±±z‡TgPÃfHÈô³\úȹ”VÀ[[î¦Uc®B"Éå/«'ùŸý4ôïýÙI\n¾M3 ¡ùygk´·!ìøë©ÒÜ,ŠÅ´Zëkweö9§àáaRÊÅÉ=Gí˜vRn¶§Óp&÷5Í{L³q&}ºÀðU¾ßvÁEUàåÛ™öl›Ú×z>¹±„µ¡ÅÌhs{ù$ªÓBìýš?íÛòj"¬Scªy± 9Ìõ¬ÜâàÒG©"KL|foí:5YÎ/ÉÊ,vC묿ÒÛii ha3^‡oûjç߉fUtäÍí¯§µ¹V×Qwéòî­Ûö1€§M?JJ¾®ÿÙ¨ñ³þÝ·ÿ&—Ù¨ñ³þÝ·ÿ&¹î´siÁÏÁ·1ù »§ä^ÛÚÛc A¡ì;+ -°Yá<ê·1j¶ŠË-ȳ(’H}¢°à šØÞÝÂJ"…Ú_³Qãgý»oþM/³Qãgý»oþM>ä·$µo³Qãgý»oþM=#ÐÍÅôžð,ycÚç¹à®wç“Gd·(ƒúöüqÿ¨zJw–Rÿ”úGüußùâÅ ³ú—ü§Ò?ã®ÿÏ$œ§ýÒÏ¡È}?ÿ ÕÿPzüŸ•ÿgýCºü‡Óÿð½_õ¨ÿÉù_ñ6Ô9#º²ÿ8~ޤËðì¢ÉÙo¬Ç€KL9ï5àöU«é :¿_/#*º\××UÎahs °¸²¶¹ûHÓsŠÜ³¥ôì|Vdäe]KlÁ­-2çûˆk}78’|kÇéN{XüœÊ Èú̵Äð} Iðå/«4y|¤XÆôÖ3!×S‘uU¾ÏVÌvŠÜù¸Ë Æâ=À8J“ºv;º~GO.w£•ëï27´9ï~Ó¡°íºù·ÿr²>úÿô’…½¦‡[›ul.kœêš7=Áh&¾\âó(Ò=©¼¨éÛ›Ô/~Eøìʵ¾Ú\ÐÛ+mW&Zç0îŸÁ[ý›[2+¿ë1½62—WVÂÇ×Qs˜Ç±ÄFãôHåt_óoþåd}õÿé$¿æÞ?ýÊÈûëÿÒHRŽ9ø<å1¶Ü,·&û)m­¹¸Î-5‡±ÂÆë³|5Â@Ý îå­ÿ6èÿ¹Y}úI/ù·ÿr²>úÿô’4£†EÉÜ€Ì,6fYžÊXÜ»˜Úì¸æ´è ü¿/·æÞ?ýÊÈûëÿÒIͺ?îVGß_þ’J”0È9;’ܵ¿æÞ?ýÊÈûëÿÒIͼû•‘÷×ÿ¤’¤{2rw%¹kͼû•‘÷×ÿ¤’ÿ›xÿ÷+#ï¯ÿI%JödäîKrÖÿ›xÿ÷+#ï¯ÿI%ÿ6ñÿîVGß_þ’J•ìÉÉÜ–å­ÿ6ñÿîVGß_þ’Kþmãÿܬ¾¿ý$•+Ù““¹-Ë[þmãÿܬ¾¿ý$—üÛÇÿ¹Y}úI*W³''r[–·üÛÇÿ¹Y}úI/ù·ÿr²>úÿô’T¯fNNä·-où·ÿr²>úÿô’_óoþåd}õÿé$©^ÌœÉnZßóoþåd}õÿé$¿æÞ?ýÊÈûëÿÒIR½™9;’ܵ¿æÞ?ýÊÈûëÿÒIͼû•‘÷×ÿ¤’¥{2rw%¹kͼû•‘÷×ÿ¤’ÿ›xÿ÷+#ï¯ÿI%JödäîKrÖÿ›xÿ÷+#ï¯ÿI%ÿ6ñÿîVGß_þ’J•ìÉÉÜ–å­ÿ6ñÿîVGß_þ’Kþmãÿܬ¾¿ý$•+Ù““¹-Ë[þmãÿܬ¾¿ý$—üÛÇÿ¹Y}úI*W³'#wéqÿãéÿÏZ¸òMø]ŸõMŸW±ë±–î³Ópxk‹"ZC„í¬Þ)ºx¦âƒÁ¥ƒå´ BÌ‘1œ ±ôô÷±­{iuvY[œXÖÖDn wçxDêL§¨4‹ze'’ì‹"|t¥l…ÓÉ.ÆÉ&cš$™0Ð@MûÆßûuÿù%,3ÎÂj¶Ô…¼Cù yþÓÓÅå•WG®ðá]NsÚZ÷= “3ÙhîWÿ`àxÛÿn¿ÿ$—ìí×ÿä“2d”äg#d«ˆ47%¹_ýƒãoýºÿü’_°pŸÿ…êÿ¨½GþOÊÿ‰³þ¡È] þCéÿø^¯ú€‹Ôäü¯ø›?ê‘ÝYœ?G#7<ÓÕqZúÍÛqªTêýÛÈÞÚ'_Ët÷Š«ûH{½;·æÒ`ŽØéݯ2´¯éuæãbÜË= ªkÍÖC„‚GÍR£êÍÅÎfFKEU• €‚IÑ4ÆZŽîÞØ8qJZ{`qG_Uy%S"¿«ØvnÛ²Ã* 2±m|»k^úÛ&¶9Òç@äø,»3ú¬ÈéùÂðqrúEÕ»,c ¢üö4µßa{«èé :®Ÿ/§`fc3ö~Ч5Õìs«sÐC\ÇÖæ½„ $V«½Úêé%÷º‹.±öÙcÞü[ ô9ï²ÂâXýu=ïm²·¸µÎ³óaÜëÄ3ê·@Îõ†M}y%κuÍ¥ÎÒy¥– ÷“®í³:ò´iÇÆ¢Ëí¨¿*ÁmæIÜñ[) ì­£O©kÊÑ‘õ—þntβz©³+4aÒú)ûªgkÛ77ÕÜ}ñ#…±Œî¡‡Ö©ÀÈÌ~u9x×^s*k˜ú,Ça 4WXÚáq:r®·¦ôöàãôñ\bbz…[íû3˜ú=Û·®­¼{¢»ùUæ8‘Moª·ÉÑ–šÜñº¦öì•)ËêÏêVu¾Ó±3N 7ãå[{˜ÊßcNÆk ¬{A¡ä'ÊORêT9Ç"ÿ^Ž›ö<Ë6µ¾¥V×Së¹ÛDTëZ#q„\Ÿ«8eôÀ·¥âÝCmµÚÇ<ã vVàñµ”¸ºuî—ÓM]%ý7¤UC[x}v‡¼€ÛC½K]í±Ö¾N¡ÎûÉR’t¼¼ŒìœÜÿ©WoÙñYSL¶û7D™°–sù¾kIVéøxý?Œ,sú,v6¶’dÑãÜžJ±¹¾!*Ré&Üß–æø„”ºI·7Ä%¹¾!%.’mÍñ noˆIK¤›s|B[›âRé&Üß–æø„”ºI·7Ä%¹¾!%.’mÍñ noˆIK¤›s|B[›âRé&Üß–æø„”ºI·7Ä%¹¾!%.’mÍñ noˆIK¤›s|B[›âRÁX•Zêz.gÓ¯=½Ä¶¹ˆ[E̓ªÂ?øÿÐ?ýè׿:5Ë#›n1˽kÎðÈ*¿´ºoýÌwþÄYÿ¥óòk¢‹dít´@.2é@ ¦þ»fLm;ì®¶·iÐHj~JÇ-ÊË5Ð;Ðè×2Œ~cNf»]Ö½ŽÕ®ÚAGÔRÚ?Ò]ÿo[ÿ¥GÕî¥NV'¦ õØ\ë›´†´½îpÄAç±ZÛ”9qœs”£Z¤uEöô—ÛÖÿéD¶ô—ÛÖÿéE—“UyýYØyC~5ì´PIØ÷XûKÛÃbñU‰é];"Úp¬Åôñ.¼º­¢ÚéôÜýµ±ó½¥À hFô½]Ý£ý%ßöõ¿úQ-£ý%ßöõ¿úQaauŽ©‘{)}prèwÙ2«m .o¨ëƒ[cdF…ªÏÕË3ßÒ1.̽—ú¸ô½„1Í~¬ÆÇ¾Û7“:˜j 0¡©u6ô—ÛÖÿéD¶ô—ÛÖÿéEÏçQõ†Þ¤Âc^ÞÆ‹,ÊõÅ…­È¥{—×p3¤úeY‹ŽýŸ Þÿ?sCõOŠIáñèôGúK¿íëô¢[GúK¿íëô¢Å§«u'QÔlý‡1õµ´´8ZÆd9¬©ååå®2æî¡==O©z}G$ÒÌ,7åIŒ{­{1ßcÜl iökí?)Ñ#„÷vvô—ÛÖÿéD¶ô—ÛÖÿéE‰ÓzÏP¿*š²)%—‡mÅɤRCKÀu·´5àÄHÛ¬h®uŒkòñëe!¶†Xn;ÜXÛXàksšçíGdTbA¢ßÚ?Ò]ÿo[ÿ¥Ú?Ò]ÿo[ÿ¥=ý;¦›g}8ö^k¯h®ÊëÚ^[é„´ÇÒlê¬_—Öq:v^vIÇq§Ë™Sñ²Æ4½­s‹Îñ¦¦‚¸{[hÿIwý½oþ”KhÿIwý½oþ”Y~{rzqÏôë2O¦ÚšöúGìÙ.qÞm!þ´wÓˆUëÁÁê9ƒјik驯gÚ XLJ¹äs„·o~RWè]Ý£ý%ßöõ¿úQ-£ý%ßöõ¿úQaô»úÃ:~VMÖ³4Õfg¥C+s,u•ßhkCÝmƒiÛ nÝ4×MOÒz•Ùv¹¶dãݵ›UuÙM¬$Ë^çΤ5%Õ볫´¤»þÞ·ÿJ%½ôÙSë²É6±Ž±ï¯sXàZ÷ô„Û”,>úGü=?ùñ¨¡ÝYýKþSéñ×ç‹‚Ïê_òŸHÿŽ»ÿ…ÿ!ôÿü/Wý@Eê?ò~WüMŸõBè_òOÿÂõÔ^£ÿ'åÄÙÿPäŽêËüáú5­Í¼»§âÒÛv¿ÖL”޽ú;˜0ÀñÀ@÷ Yïùhô¿´±z…– ñÞÖ¼9ßË 4@Ô’ã\ýbé Ä·2ËÍ4c¹•ßëWeOc¬sXÍõØÀñ¹ÎKU\®ŸÔhèØX˜¾¥ž‹ÙöÊñìÛe{]¹µXç44ï-?IºªÌ§¢õ7ß™gØî¦‹­éF–ee›K1suåî²ëvía¡Ñᬩ†Â÷hLDJB&ãf¼º;_ó£¢îôͶ²Òeǽ¶¼ÖªP}œk±¥X¯¬tÛ0Ÿœ.Û[¶X^×1Í|†ìsÐðòâilê/Ĺý{02i§*§Ù#GÙf#˜Ø™ÔVîÎÌÀêÍv{ñÙi«#¨2ç×E­ªëq†¸WasvUšË› >(­oŸ¬]!¸–æYy¦Œw2»ýjì©ìuŽk¾»œáµ;ºÿLn;rë˜×¼ÕUnǽ¶½ào>&¯Qãn²ÖÂÁ§¢õ;.ͳìwSEöô³MyY_j´³1×^^ë.·nÖÚÊÛê”æWÔ0ú–.9Ì̺›qØæ5ûn58XÃkšÂZj\4%%.îµU¯é®Âsm§;)øö4WFEÅ»L9¯¤¸x«˜¹ØÙfß³¿Ô¸Ö÷vîH5ämt`®{# õ Æ:æ¿ åõ 2®ØÝøõ»Ì6Àí.. .Û?Hö[] fÕö\ÊK±¢ºßNÑMŒÚêØæiËHÓÍ%/Ÿ™n6WN¥¥¹™.¢ÒdÖãä^ `wT9óPè½R¾¥ƒU‚Ö[*¥ù¦½¬ÝmM¸ @~ÇKd~ §êX×ߙҭ©»™‹–ën2Ö\šA‚dû¬o+¾•×0zgMû[s_ÓééÙÃ{¢æ1¡—Îèw¢âñ¡3))Ù³ëI­•¼Üë=Rñ[jªÛ^áSopelsö5Â7D+¸ùäÐÌŒw‹iµ¡õ½¦AH ®7 72›ññ²²qkÄ« ”áå;Æ \÷4˜¾†<8?Yv‘æ´ºm6àáaãQ„êk}–zÕ¾ókªký[½G½åΰ¹ðåÞ%1oÖnŠëÝCoquw;ÇúVúL¹®5ßw§±§p.×Ov¬Ü[YsÙ`ÛŒ÷Wq ·c«àíÀv2¹|fu<Þ‘ÔºM8'ÒÍÌê3ËZ)c‡¤9Ú¹£¸>R¶cdÿܦüMDŸœXÜý“ÿr™ÿmý*‹6Lfá*,Õ¡‹F%"šÁ©ñ'¹'¹F•cö6OýÊgý´ôªØÙ?÷)ŸöÑÿÒª9HÈ’M’¸p@¸=O¨ä^,Ʀ¶:©å7%Õ[¹®oÙ­i‡xBÃÀêG+ÔêMfK][èsß‘¼¶·í.kjf% ;‹2WGû+þå3þÚ?úU/ØÙ_÷)ŸöÑÿÒ©'ŒU+§»Æ;íy×\útØæ–¢KXèMÎ)ú~Ø*ô}¶ÐƵ”×fÂ+k­,c\týâxZŸ±²îS?í£ÿ¥Rý“ÿr™ÿmý*’8¼Z¡“nN¥÷VÊžÓ«vÖls`Gsi•acŠßI˜O6RÊÀkA5ÙLÄXxZ?±²îS?í£ÿ¥Rý“ÿr™ÿmý*‚¸¼\Zº6=o¬ ®v=õ)Äsšjc%¤CˆiÕ º³NcÙÊ­}¯{_}wº×Ò^ahþÆÉÿ¹Lÿ¶þ•Kö6OýÊgý´ôª)âî\¬nžì{ïµä[]séÓcšX‰-`{ 78©ça³6¶1ÖYKªx²»iv×5À9³ÁBA-/ØÙ?÷)ŸöÑÿÒ©~ÆÉÿ¹Lÿ¶þ•IZݹtÊšçÙ“m™–YY¤ºý¿Íº Ø[+hÝûT?d0ã]‰fVE´]KñÃæŒxÚvÀI‚òåµû'þå3þÚ?úU/ØÙ?÷)ŸöÑÿÒ©'‹Å¡~=wÛkÉÃk".5ÙI‘¯µåeô~†ì|e]sŽ;+qÄ{˜ê™sZ$‚Öî!®Ô{ˆ]ìlŸû”ÏûhÿéT¿cdÿܦÛGÿJ¤®=*Üšzp¡×†d\)¼ØãD´5޵Åï{Ö ÜIîéñºx£#í6ä]•sXjc­Ø6±Å®ph­•ƒ%¢gÁjþÆÉÿ¹Lÿ¶þ•Kö6OýÊgý´ôªJâñkJ‰?¤£þ>ŸüøÕoö6OýÊgý´ôª•=ÆÜÇÝx±µ¸<5¬ÚIi–ˋݤù$‹Ý5ŸÔ¿å>‘ÿwþx±h,þ¥ÿ)ôøë¿óʼn'éÿt³è_òOÿÂõÔ^£ÿ'åÄÙÿPä.…ÿ!ôÿü/Wý@Eê?ò~WüMŸõH΢o´bb`SfKö1Ì`I$Z$Ÿ‚ C¤‹CŠû uµ: âxÎhÔøJÈÍÏ4õ\V¾³vÜj…:¿vò#÷¶òDëùB¬ŠkûC^ïNââÚL±Û;µæP3Üöv1r¤ŒQÖòFÀMé7Ä¥é7Ĭçç¿£ôšê·ÑÉêV3ÙDU—9á®–îpª:IT³3zþýG¾¥ë¾³Ò†%ÖÕVæ}³1øöú­­•µÒÖöHˆ:§ƒ`¬£Ã#¸$}Wè·Ä¥è·Ä¬N¡n~4à×™—›”÷ØÓ]XμSXklô÷ (`kžßuÜÆ½³kêÝw!˜øC!øy« ®½˜î¸Õö7æC›I²ò@|ŽZ•”SÕZh©¡ö¼VÂæ°9Ä4n{ƒÐOw8€<ÊŸ¢ß¹N±gRm})Ù_h·'¥[™k¸ó˜Ö¶ÖÔ+c‹TèÖèB·—Ôz÷ ²¬êuþÏËÎkmel{_ˆiö4Ñ]ckÅÝÄéÊVUOAè·Äª¹Ý';g®ü†zs·ÐÈ»éDîû=•îãIY#ë9ÍÆûe9Vc^×}©÷Œ&ÕYÚ\Çcý’û,‚á¶»™c›×Òúo[oQ-n~N©„k«Óm9WÔÃS³ÔÞÖ¾Kx²²ªz “‹ƒ¿Ð~CýHÝëä]‘ôf6ý¢Ë6ó¬+^‹|JÁ»ªæ³ê§Wê>¬eb¦(´µ¾ÓvEtiNÖ±£Q¯tÝ_¨u3.£¦;,Œ6´\q+Å-m®h·m¶gZÀá±Í;kÞÕ+*§f˰ëy­÷±o§¹Ž{A³UH:þ‘ãk|J7¢ß¸áÔ­Ì{z‰cfn/ÕÛ\ÂÐö_:âàÐðF›½§‘ÈÕjÛ_R³­6Œ.©’úê´]›[™Œh®²w·Œ,.xÐ{å­÷ôw+*§f¬jjieL´¹Ï-h žâ÷:åÎ$• ú~yåWK“~ÑuÍcCÞ[½àI€ JæŸÕ>´däeä`ceXÌ|›(Ç¡ƒcØÚ,5;Õ}×· –˜ 64ÑÝô°ÿjæõž¥»=ôáàåUU8Õ×W¸}Ÿ÷¶ÇÙ[ÜZçYù°îuâ•S³è·Ä¥è·Ä¢$••R?E¾%/E¾%$¬ª‘ú-ñ)z-ñ(‰%eTÑo‰KÑo‰DI+*¤~‹|J^‹|J"IYU#ô[âRô[âQJÊ©¢ß—¢ßˆ’VUHýø”½ø”D’²ªGè·Ä¥è·Ä¢$••R?E¾%/E¾%$¬ª‘šÚë++¥Ý3¡Å…Ô0¶7X=Ãp"Gi ]ßD¬l[…›È‘V3_À‚¯Ìteöü°Êû±¿÷/°äå†WÝÿ¼ê·Úú‡wÒp+s€>½Q?r_kÏÿIOý´ïý,ƒðûgì7ÿå†WÝÿ¼é}‡#ÿ,2¾ìoýçU¾×Ÿþ’ŸûißúY/µçÿ¤§þÚwþ–JÕgÃì Ÿ°äå†WÝÿ¼é}‡#ÿ,2¾ìoýçU¾×Ÿþ’ŸûißúY/µçÿ¤§þÚwþ–JÕÄ|>ÀÙûGþXe}ØßûΗØr?òÃ+îÆÿÞu[íyÿé)ÿ¶ÿ¥’û^úJí§éd­\GÃì Ÿ°äå†WÝÿ¼é}‡#ÿ,2¾ìoýçU¾×Ÿþ’ŸûißúY/µçÿ¤§þÚwþ–JÕÄ|>ÀÙûGþXe}ØßûΗØr?òÃ+îÆÿÞu[íyÿé)ÿ¶ÿ¥’û^úJí§éd­\GÃì Ÿ°äå†WÝÿ¼é}‡#ÿ,2¾ìoýçU¾×Ÿþ’ŸûißúY/µçÿ¤§þÚwþ–JÕÄ|>ÀÙûGþXe}ØßûΗØr?òÃ+îÆÿÞu[íyÿé)ÿ¶ÿ¥’û^úJí§éd­\GÃì Ÿ°äå†WÝÿ¼é}‡#ÿ,2¾ìoýçU¾×Ÿþ’ŸûißúY/µçÿ¤§þÚwþ–JÕÄ|>ÀÙûGþXe}ØßûΗØr?òÃ+îÆÿÞu[íyÿé)ÿ¶ÿ¥’û^úJí§éd­\GÃì Ÿ°äå†WÝÿ¼é3æ½®9Ù –8Q´ù§mëÞ ­ö¼ÿô”ÿÛNÿÒÉ üºì¯Õ5ØÇ½µ¸5Žc†ò&Çë¢V«>c¦³ú—ü§Ò?ã®ÿÏ-ŸÔ¿å>‘ÿwþx±$ãý?î–} þCéÿø^¯ú€‹Ôäü¯ø›?ê…пä>Ÿÿ…êÿ¨½GþOÊÿ‰³þ¡ÉÕ—ùÃôZþ—^n6-Ì·Ðʦ¶úw7]$>j•VnÜædd´Pøõk¨lÌNˆ¶æÞ]Óñ*±Õ1öÜè;C†Ö†i¹Ä ‡fàÔì–e=â¢=Jò½0ÇÝkšÖãÚ ‡rl'8ljĿ†®—SÁ¯+§;ºê³nÃS,s«h, ˆ}^öµÍáfô«uQf^Fs×å¿Ʀ_uðpÞn¥ïÈ¿m–?y“" ­duÞ™‹‡™“iª¬Ç5”{^ç9îk¬kX×-i²:õÂ8'{›—‹‹mv±õ½ž½õRàúì {NË%²<€hÖ6 jègôÜ¡éœíô’j¶«l¦Æî86ÊÇãQ+/'ê—Jsq1ñªmx¬Í9Ùm6Y¹ïû5¸í±Ü]¿qaÉåZÉë3 ãÝi4µ¶82Ç2²ð ¶5¥•È"7¸+fâÚËžËÜgº»‰»X—n±”¨"ØÕÑ:UT;µ—1÷W÷>Ëcí¥Ì²·¾×¼½Û\ÆÄ»´p¬Û‹‹nK2žÐ몮ÊXâLzvšÝcKfã[y ¯?3(6§T1ŸšÜz‹Ùc^úŸ€Üñ´£÷Îm󕊾±t«œEO¶ÁµÎcÛEå–÷ ^+ÛiÚ „¥J¶Æ/CéX™ ¾†<:©ô˜ë­}uÈ-ýO°±šö€©uªÝ:ãUØŒôï«/-¡ÖÛè´×‘]÷9”î5µïk]¨ou»‘Õú33:^3›™eTX*ÊeÕRÓvÒâÛ_S­`'Zùâpó:•}HtÞ ê/}”;!–ã±Õm sæ½²Ó©|´‡kD©V—3êÇBÍ7ý¦—=™D›é\Ê^çsÝK,ïþVÙDÌè6÷ß‘[‹®·µ—[[- ÐzÕ×cYd =À¬î‰õ«¨`à>ç–dæUVâ*¹´zïhsêeÎi®C¤î•<­8x™9vW~5XŸh}γö°Wcës·¾–´¸µ²X=ÃQØ¥J¶ý}¤WUu2˜eUâÔÁ½æ‚óv(’ïðo3çÞTkú¿ÒéÉvUNÈ®ÇÜrÖæd¶£c½ÄÒ.ôÈ'–í…Wþut)nì‡0?Z\únkmãJêÃm&tØJl¬;ÖÁ%Ö³+꯮ʞÆäßU$º»Eo×’ÒBT«ndô.“•sîµÝiæ2ëk®ÂmUØÖ?AùÍ:+”ããQeöÔ_•`¶ó$îx­”ƒÀöVѧ‚­ŸÔ0ún+ó3­ã°µ¯°‚@69µ¶v‚u. µX:Sê¶ßUõ·5Ö¶Ú­©ícÎÖ¼²Æ5û üà!*U»›âÜß©]•E7QEŽ‹2\YK`’âÖ¹îà†ŽèÈÒ->æø„·7Ä $•*ÓîoˆKs|BIR­>æø„·7Ä $•*ÓîoˆKs|BIR­>æø„·7Ä $•*ÓîoˆKs|BIR­>æø„·7Ä $•*ÓîoˆKs|BIR­>æø„·7Ä $•*Ó4ƒªÂ?øÿÐ?ýµÇ+ ÿâwÿ@ÿôRd†Ìú4ò¯ô«sÄÐx—Ñ?3ª±‹‡Ó®ke–]ù.s^æíƒÎÖ¸©fVo©õƒ:´öd|¤*¸ïôqriy±–\6†H— ÃÁ[å¡ b>®—õ¯ìbŽ¢Åumãe1÷]C,õE$l³‚Zdk ‚;+–wNÆ4ïµãk¬€¤†¶bcÄ•wr‡™d1›ŽŸoT ­&ä·!îKr…4“r[÷%¹%RMÊŸUɺ¬a^3¶ää½´Pèkž}Ï‚; õ•Ë« Ôi9Ÿiô)­Î¨b³(»Ô°í%Öb³M­ ÝÏ’ ˆ²Êî­•ÑÝu®.ÊÃɧ%Íh.xõëcœ~’§ÈÝ]§¬R÷ZÌš­Â}UúîmûDÖ>“ÚêßctïªÄv#²}])×3Õû=Äç3/Kq®®ÍÁù,×smÝØy«ötüÌ÷\î£éÔn#Cœÿmû}G¹ïe¸ B+ˆ«o¬×}ÕÔü{ñŽ@.ÇuÍhÄ7kÜAÛ¬8¦Þ«ŽîŸÔ_èåz›`nisÍÂcC`ÝT«©Ý“‹fy¥¬Ã.{M.s–9ޤ9Ís6¼˜ʳzwXx7õq‡f9õ·<½õãY[ÀÙéÃC?x¤ŠßéW+=7âYŽeìVÈ®×T µîÞ}ÞØ™òZ;–oN§7öÑcj8ζ뫵¯w©7Z붺³XhçPîÊöä*½nKrä·"ŠI¹-È{’Ü’©&å ºŸøúóãSnQqý%ñôÿçÆ¤§}gõ/ùO¤Ç]ÿž,Z ?©Ê}#þ:ïüñbIÇúÝ,úü‡Óÿð½_õ¨ÿÉù_ñ6Ô9 ¡È}?ÿ ÕÿPzüŸ•ÿgýC’;«/ó‡èâõ\'³#5î{pßUl½ÌZX :Aå¨åŽ«OÙÜÒoabeN/–Ÿim€»_ë.Ÿí˜¸Û“fÆ9Œh‘$’>‹Z$Ÿ‚ C¤‹ŠûH uµ: âx‡9 Ið”Ó›Ö¯pìàæf!ÀdqD‡íîäu*2º~7Õêh¤e_F`š·îŒL²ý®|6@²yS¿©fÙ‘œìSŽëï願Ï}eâ¼<¡‘e¯,{Ù%®vÇFŽú-ΡIÂeY=Nú1™]Ÿ¡»!ì`9®o±ÖG¸°¸iÚT©Îé™íÊÇ˦Üw=µ¶æX×0½îkÐàH%Î 2¥œŒ¥##¹6~¯#×zW\ÌÅêxÿeËËËÈõÛ‹s3} AS÷zM4²úýÍi‡VC&þ·eM?K­´7= Ámtú–Gü-gÒ'ú«¨ô[âPkéøuä[•],fMûE×5xh n÷&(Ú)Â/4u´ ¢Õ~Ô¹ z?²þɺ&öÄ~}'ªbæãÕ‘…ÓêÜÜŠ/º«ñölpcqˆs®è‰ gNEëaú¾—®ÏSÔô}=ÍÝêz~·§îôýñûº¢ú-ñ)Z©ç:mg§ý\f%}2Ë3ºv58õVë( ½ìh¨¹#qދЕ[í9xYUåÞòsr1sL6¶2Œ‹œÆ´±±ë']×¶¶4½îÚÖ‰s‰52J©‰Õ:6uŽ« ;*Æêêé¶»#Ä0’•ªœŠº^k>ªôžŸéFV/ìÓu{›í8÷c¾ÿtí;ZÇ ¸}Mݬôa‡a³!EøÙôúV«-¶ºÇéw‡~–æ¡Õu>‹|J^‹|JVªrº–·åô›*`ux™n¶Ó  aÆÉ©¤u÷ØÑ¢£Õ:fmýG"úkÝ]Ÿ²vºZ'ì™Öä_ÉÙ[óìº?E¾%/E¾%+UúÏfcºUín;w×€ÜP÷‚Û‡Úq  {¨âÃ>ݬl®¥ÔNVvÄÆf-¸†›[Ýo®êÜòáKìhcEp%ÝÊÛ·›ZkkÃ\†æ8=®‚9k€!+qiº§ÓsEµXÒË+xkšákšDF„%j§œú»VFFU¹Y.õYӚlîõn›¯'ÅûX×y´®…JœJ(©”ÐÆÕM`5•°µ pÐ )ú-ñ)Z)H¾‹|J^‹|JVªD’/¢ß—¢ß•ª‘$‹è·Ä¥è·Ä¥j¤I"ú-ñ)z-ñ)Z©H¾‹|J^‹|JVªD’/¢ß—¢ß•ª‘$‹è·Ä¥è·Ä¥j¤I"ú-ñ)z-ñ)Z©H¾‹|J^‹|JVªD9Y”RoèµÐ qZÀ|ÝXø­ƒ[@edáÚÊzM?èWŽ×»¾`'ð ’èÁŸ£šqºŒëŠéﬔ¼¼&û/Qÿ¸ÿ>¿ý(¯~ÑËÿ¸õ#iŸŠˆŸKö†_ú ¿í×élöhý—¨ÿÜGÿŸ_þ”Kì½Gþâ?üúÿô¢½ûC/ý_öë¿ôŠ_´2ÿÐUÿn»ÿH¤›=š?eê?÷ÿç×ÿ¥û/Qÿ¸ÿ>¿ý(¯~ÐËÿAWýºïý"—í ¿ôÛ®ÿÒ)"ÏfÙzýÄùõÿéD¾ËÔî#ÿϯÿJ+ß´2ÿÐUÿn»ÿH¥ûC/ý_öë¿ôŠJ³Ù£ö^£ÿqþ}úQ/²õûˆÿóëÿÒŠ÷í ¿ôÛ®ÿÒ)~ÐËÿAWýºïý"’¬öhý—¨ÿÜGÿŸ_þ”Kì½Gþâ?üúÿô¢½ûC/ý_öë¿ôŠ_´2ÿÐUÿn»ÿH¤›=š?eê?÷ÿç×ÿ¥û/Qÿ¸ÿ>¿ý(¯~ÐËÿAWýºïý"—í ¿ôÛ®ÿÒ)*ÏfÙzýÄùõÿéD¾ËÔî#ÿϯÿJ+ß´2ÿÐUÿn»ÿH¥ûC/ý_öë¿ôŠH³Ù£ö^£ÿqþ}úQ/²õûˆÿóëÿÒŠ÷í ¿ôÛ®ÿÒ)~ÐËÿAWýºïý"’¬öhý—¨ÿÜGÿŸ_þ”Kì½Gþâ?üúÿô¢½ûC/ý_öë¿ôŠ_´2ÿÐUÿn»ÿH¤«=š?eê?÷ÿç×ÿ¥êÁβú·Ðic,eŽ{œÂ!Ž€âd·ûC/ý_öë¿ôŠMêV¶Æ6êZÖ=Ífæ<¸‚ãµ²Ó[tŸ4“g³ ³ú—ü§Ò?ã®ÿÏ-ŸÔ¿å>‘ÿwþx±$ãý?î–} þCéÿø^¯ú€‹Ôäü¯ø›?ê…пä>Ÿÿ…êÿ¨½GþOÊÿ‰³þ¡ÉÕ—ùÃôr3sÍ=W¯¬Ý·¡E@N¯Ý¼ˆîí |‘:þX«§¼U_ÚCÝéݸ‡6“ìvÇNíy•¥K¯7æYèeSXôîn°$>j•Vn.s22Z(|z¬¨lÌN‰¦2×ÅÛÛ)KOl(ëê®ÔŠüÌ“…õk(Óf]ÿj?¢¬°XùÂÌ Ï­œjeʸÙGí=JüS€Ì¼ÞÆc9ÌsÉ«:­×Yè¹ìÜñ`nŽ:4.øx8ÅÍ©¿ÔÇ‚@k½7Ó0ŸeŽ©dããeÖ*¼±¶WhG¾›ugÚGÑ{R iÎBR”€ I5Ùæ:ß]ê”3;©`}ªÌNê7^+q‰Ç–ÜË_‘h½ðö¸M@|ßG/¬etßÚ5]ú|†í³¦´€ßPdUU{@·{OòKQs>«t ïXdÐç×’\ë¨\Ú\çý'šY`¯y:îÛ3¯)òzmÙ½o3%´·§n~)k‹¬}–46licZƲ ]&•-rpŽF?Wm7X2-wYmwÜæ2\æôV¹Ïo·ØK›ù±¤Ž 7MÊêÏÈ«ªfeáçdµì4:Š?¨ç~©{kx–mÞßQÎ5jÛý›Ó¾ÓöŸLzßhû^ýÎþ{ÐûøÝÍ{cš/CéX™ È¥ŽßTú-}ÖØÊ÷ÓéWeŽer {Z¥8½¤Y“õ+‹ú…ŽnN. é ¤ÕS˜*±•†×]N{àæ½Ä‘¤­_›GQ£ªââ½×9õáåã̲ÆÖûÓ]–V×jןv}^è­Ä»Ôë0ò6‡ã[m¶TÐù‚¦Yc›\;€vðSÂè/ á‘K^ûXÒÆ>û­È,i‰k öY²cXJ”átŽ«õ£;ì}@ce:Œ·±ÖRá„ÜfcØ~“\ÛÎFúÚdÈÖ#k{ƒõ‹+3¨ÓÔë¨ÊÌn&+¤Vúñ²m­”ÚçTçû…{w5ÍíÝj·¡t–䌆±áͳÕ ­ú“¿xÇzS»YÛÊ·‰Yª€ÇYe¤I>û¬uÖq?Iï%*S‰õ‰ï`Ëé§ÕÆÅÀ³©ä€>›][¾ÏAHÞCœc_ošGÈúÎsq¾ÙNU˜×µßj}ã µVv—1Øÿd¾Ë ¸m‡nægE¯ƒÒºgO·¦Ö2¬u· ÅÁÎw0L7Á£Aà‡‹ÐúV&C/¡ª}&:ë_]r O¥Sì,f†= %Jj}Uý«‘Ò°zŸRÏ~U¹˜µØêu2 lk^6Vº9÷mÔéÂŽQê¹XïÀ£¨? Œ,{öTÊa²ÛrXHuÕÙíŠÆí<"5/Ù½;öWìƒì‡Ù}Îþgg¥³víßGI™Tr¾¯bæõ»úŽY;‹F=.¦ëiµ¦»2hs©sÇzŒüîÉRôþ­œã…‘™cN=î¿ âÖ†°dcÛel¹§Û›[¹?» ÷CËÉÎÃ~}®ý]Ž·¸n>«'{Fó?½_£œ¾›WEÄ®šzsÃY{‹‹_]ls\ÑC Œhâá´ëîZÌmU±µ²ÆÑ’T¤‰(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¦I(îoˆKs|BT¥;‚°Oþ'ôÿE-ÒæuXGÿ¿úÿ¢=üÇF¦VG¡[¬ÎÖ·‰sˆkDö’TÙÓ¬~7ÚmÊ´Á"ÃNÀÊÈk˜âZ;’ÙS¨ÔûñÞÚÿœigmZf>a?Oë.Âé6ÔÛ²ßcˆ/€+Z=ÀÇq¢³ƒ–;ñÑ·&(‘gˆiL±²‹­·ö6Û)ˆ±š4Ì$Áj¬nYÕ¾ÛÏÑx iˆI$È´÷(¹˜Â9eˆ¯·ªÑ¶Ô“r[÷%¹D”›’܇¹-É)&ä·!îKrJhädõ;:•ظ–ÑMtQUÎ7Të ®¹§VÝP ¼;¢tþ¬ÌŒLko-e¹6YC6K˜÷ÔmÜXèú.mEÍ••ÿ7ìëY'«? ÀcÑSCê.kƒ¯{ÀkÎæËla• '‡cc×Óì¯=½#(¹Œ¦êÞçcº»j¬nßµ¶@ÜDíIyˆ¯åÙÜÊê¸8~¯ÚmôÅ ©ö’ mï5VI=ÎiKªáåØê©sÅ­hyeµÙS¶“šÛXÒDé!d[Ô³rr/³ÐËÓÅL{ës‹qòu¥Á®-öµÞ+JÚmwVÆÉ ýxù½Ò4sߎæé3¨­Ü‘Â?—“r[÷%¹%©7%¹r[’RMÉnCܖ䔓r‡ÝOü}?ùñª;”\é²øúóãPS¾³ú—ü§Ò?ã®ÿÏ-ŸÔ¿å>‘ÿwþx±ãý?î–} þCéÿø^¯ú€‹Ôäü¯ø›?ê…пä>Ÿÿ…êÿ¨½GþOÊÿ‰³þ¡ÉÕ—ùÃôk[›yv?OÄxªÇTÇÛs íZ¦çT2›ƒKòY–÷Šˆõ+Êôö;ù-sZÒ{FŠUÂ{21³^ç· õVËÜÁ%¥€Á3 P:Ž[z­?gsI½ŽýI•8¾Z}¥¶í¬™){ôw0a†#c€î²;ßòÑÙê]lQÓñrñÍlfmŒ¬dd*¤=®x}°F’Ý£Qî!#?¬átœþ¢û°³kÆÄºú,¥–0z•´½­{ Ö‚ÓÃÂ7£Ô:wHÅ£™ï¯k2i/ .¬µÛÍeþÉ#Bx•—•Ñòò¨êÂ鿳WNÈÆû1u-vFE§=´½Õ€]ùÞJqt/v„ÄD¤"n6kË£µ‰×º^eìÇ¢×Ø ©/ªÊÙ`h’j}Œk,~é)U×úUÙC»‰±Ïuu¿Ó°T÷²w1— Þá@wdýCë²úU”²Y‹”ë.2ÚÎ.M Á#ó¬hÑdã`u_°ôþ‰f®¼ qÜþ _Y­ìÄ{lk˜Àãfûv ÒÑÉÕ%®Ûºž poêßÕq}o^Í®öý™ÏeÞØÜvº³Àìªáuü|¾¥—Ó…7²Ì[Í y¦ÿMÛj®ç9Öšƒ«ˆh.ÖH,¬ün¸Î‰Õz67NvCòÎi£$[K*-Ë}·àûÃÛêÇÑ9Z˜LÍÅêùìv-Çν¹å±Õúl Ʀ‚×µÖ 'u:CO!%%«¯t«²Æ%wcžêší– c'ul¸³Ós„hwdøÝw¦åå;ï¶Úì²› i¸±–TK^×ÛéìaºKµÒ9 ¦ôaŒ<+ðròë#-Ùö}”šœÛ}Lé»g¥¶t[ìL;k½ž›ß—™p ¶Ü›m¬ËIåŽ )—Pë=;§[M9v9·d‡ºŠ™]–½â²ÝᬩŽq#xà~E,~¯Ó²}FíÇ$½µ ®i.¯W±ÁÍ^ØÕ§]‚ÈÎÊê-ë]$`2ƒ–ìœ6YY²²çaoØ÷VÇ–8ÇÒJ{p﫦gõ, Ü<ƒ’z•,sš«®¶µïl·ô¬ïƒùÅ%;ŒË¡ù6â±Ó} cílh³vÉtm“´÷FYŸWñîn³2˜Y—Ôr²yaxºÏu†°üšJRI$Š”’I ¥$’I)I$’*RI$‚”’I$¥$’H©I$’ RI$Š”’I$¥$’I)C•—UN»¡²–};1CØK«ø•¨9T0ÖtÜg8Àm $ù )“èÁŸ£Ž]tëx=Ǥóø†~ED°¹Ûi#‚iy?õ+t_a(°ƒÇÐ>à§õ¬ÿ@ÿ¾¿üšh$lÃ~ÛÇ¡wý³gþE)·ýÿöÍŸù¹ëYþÿ}ù4½k?Ð?ï¯ÿ&…ªü9·ýÿöÍŸù¦ßôÿÛ6äVç­gúýõÿäÒõ¬ÿ@ÿ¾¿üšJ¿mÿAý³gþE)·ýÿöÍŸù¹ëYþÿ}ù4½k?Ð?ï¯ÿ&’¯ÁÛÐ_ÿlÙÿ‘JmÿAý³gþEnzÖ ß_þM/ZÏôûëÿɤ«ðpæßôÿÛ6äR›Ð_ÿlÙÿ‘[žµŸè÷×ÿ“KÖ³ýþúÿòi*ü9·ýÿöÍŸù¦ßôÿÛ6äVç­gúýõÿäÒõ¬ÿ@ÿ¾¿üšJ¿mÿAý³gþE)·ýÿöÍŸù¹ëYþÿ}ù4½k?Ð?ï¯ÿ&’¯ÁÛÐ_ÿlÙÿ‘JmÿAý³gþEnzÖ ß_þM/ZÏôûëÿɤ«ðpæßôÿÛ6äR›Ð_ÿlÙÿ‘[žµŸè÷×ÿ“KÖ³ýþúÿòi*ü9·ýÿöÍŸù*ª¾ëékiµ»mcÜç±Ìh pq$¸ÀÑmzÖ ß_þM/]ÁÀ>§°8†‡¤Ià®'^U¥YýKþSéñ×ç‹‚Ïê_òŸHÿŽ»ÿ#Ã݋ӭ¦šº°uä4PÒ…㌊~‰ìægžÃÎ`×ôúºc2ß„Ëo¿&æ5®}¢¶±Œ¥ÛCZðí ô—|e_ŽïÊÝ DŸ?Ç}¶ÿŒ¾¥¦ìJ DÁxýÙLL:>#ÃÜl_¯ý{)Ûqúk2Ð ÛSlqÛ'ÚI‰ñìVàôê/ËÅkh»&Œ«jk2ì}@Ôõ¥Žc˜ÝÄÌî(AìÆé=J‡â±¯•W¶Ç<º¹f@Xæ´–é§ŒÎ,5¤{uî£ËòÄzqë§^ç}Ý–ÿŒ¾¥¦ìJ DÁxýÙLL:>#ÃÜ›þ2ú–›±(Òdj¥Š12lÈÉ~+^%ß³Ôë^íì¬nu{€›=Ðxœ8„ˆàü{®—+ËÆD{{×¹ªwÛþ2ú–›±(1ã÷f510èøroøËêZnÄ ÄLݘÔÄãâ<=ÜîuxÎÃÆÍ¢Ÿ³›mO¨9“P¬ïi°¸Ãƒü{(ôz±­ÍÛ”Ãm ¦ûÀí¤útÙh‡ µc —×ײ~éËpû{_]tzFÿŒ¾¥¦ìJ DÁxýÙLL:>#ÃÜ›þ2ú–›±(1ã÷f510èøv3-éOé÷fžÆÛEµÔÆ6Ë}7 [c¦Àç—¾—æ¸"ÑÓo¶¼·µ¸øç å>’ë {Ûs±¶î`²Ý¤Æ5ü©¾Ö¼Ú°òü°»ÄGMúïZQ¿ã/©i»ƒ0^?vcSˆð÷Ÿñ‰ÖmÛ³«%̬ì{¶Ã«ö¿hþíqN'HÈËÆ=Ž–\üª1»b–±Ù ÀÛÝYéoÄÊ¢V/ÙKº¦,5>ÈsH¿nÒç—5ÂL|8BXðbíñDðrÂ61ðŽÚ×vëÆ_RÓv%"`¼~ìÆ¦&áîMÿ}KMØ”‰‚ñû³˜˜t|G‡»§âa³«s[9.&±{ïÜkÓýqXâàá.?%C¨c7?'„¹¸÷YSIä†8´OšpÄ’8ñåyYHÄcÛÇG©oøËêZnÄ ñ0^?vcSîˆð÷Ißã#«V@· –˜kˆ;ÚK\é7 Å¿áîçqÛ‰Ó›™v8˲ÛSZ÷=¬h­µ¼“é9¤—oñìV®N'N~^V]Á•ÓE8UÑNA·h6c°ç…çhg’l±aä5çãKeËòÑ5íׯ[­mÿ}KMØ”& ÇîÌjbaÑñé3üdugá…K…`:ÂÝú6ki3&$ÈáîÅ»¥Þ슰\×Ýè Šö6×»Ö¥¾³Zâ =âGhKì”QÓffiö¡†Ü‹œá®F?§Yhö˜¬îã“äö°éé7§U}Û•ÓõdF„ž½]†ÿŒ¾§¦ìJ DÁxýÙLL:>#ÃÜ›þ2ú–›±(1ã÷f510èøvTX·_ÓêÅøîôÆQ{÷¹Í0çîÙµÚÆž«ÝC¡âý§Õ¤[ŽÒÖXÓ’nu­9¦¿GkÈ8ýâ—µ‡OA×ùZO-ËzT}^7§}ÿŒ¾¥¦ìJ DÁxýÙLL:>#ÃÝ*ÿÆGV°ínO npfùÚÐ×<ÄžyòÓÃ^W§7 Ù•ŒÓþíÄȶŀ¸4º& cš)Ϫ×cTÜwcænv-Î{, Çy-Ç=ÌpYñ%<8EŽ—º²r¼´l{zÑ–ÿƒ ßñ—Դ݉Aˆ˜/»1©‰‡GÄx{“Æ_RÓv%"`¼~ìÆ¦&áîçïy6̪±›‹mWYôÜ÷5͵¶¸n¹æZkæVrty|'ôÑäùi_êê¼^Å¿ã/©i»ƒ0^?vcSˆð÷&ÿŒ¾¥¦ìJ DÁxýÙLL:>#ÃÝÇ$ݱ~ïâ¿î<·î~%ì[þ2ú–›±(1ã÷f510èøroøËêZnÄ ÄLݘÔÄãâ<=ÜrI}Ûîþ*û-ûŸ‰{ÿŒ¾¥¦ìJ DÁxýÙLL:>#ÃÜ›þ2ú–›±(1ã÷f510èøw’_vÅû¿Š¾ãËþçâ^ó¤}êýKÜzknEŒ­Ï:–ƒÏXtkÜsî–ù¿ü*?óØ^eõaÑõ‡§ë{Ìrb's9Ÿ‘ázuò-øTç°¨ópŒ&E q~+ŠòB0*þ­«mmLuŽá½‡30ø”»*ÆïÜ3 ¹ãà\Ÿ’Yì{ñݳW4‡ýS*B¶cµkœá2Z’t“櫆„6Jl{Í»šàÙ ƒÃ‡‘FY*·‡ÙaàÃAñ3'â´¥ºÙP&—I4¥)-]$Ò”¤¥ÒM)JIbcš6Gº"?…µ—– Í1$0%B ›ì©Í°ñ¡|Ü=¥M¤µïhÝÄȈÚÑÈÓ²4»„VËïní¡ÃpäHŸ¹/Q“·p“ 'îP`qmu†‘´´¸@ÐËŽî5QS«c ¹ÎÖ Nãw%JáN’grcÇD¥§z]$Ò”¤…ÒM)JJ] 'ù¶ÿÆWÿVÔIBÉú ÿŒ¯þ­©)2Ïê_òŸHÿŽ»ÿ…ÿ!ôÿü/Wý@Eê?ò~WüMŸõBè_òOÿÂõÔ^£ÿ'åÄÙÿPäŽêËüáú<˜_YqúÝÙ¸8—½xØø0D4¼éLj NÿùÓm§¦]@¼aƒ¨%¤LÀ¼sçàåØÝ›yv?OÅxªÇTÇÛs íZ¦çPò›ƒS²Y”÷Šˆõ+ÊØãû­sZÒ{A„ó’6 €& òîîaæ3pc  "6@ÙóìN‰õ£Ãe87cCS\×5ņÛZG.ŽÇÀÃYÐ~³ÞÁ[°.Ùê:Ö°VÐû…aÄ€ûtàkàW¥åuRÌ\,Üp“u,´¸ ¼úl-ƒ¡9³>htu“oÖ ®”XXôµì·»¬]{I˜†¶êÕ‘ÍKqý‹Ä2‰„,xjðxØß]qÅ^†-­}A­ªÃC=F´mÚßQì. „‚ï©?ê÷Ö[›KƒymMÔ #k\íúè?:ÝgÏÀǤâõÚGIÅêA³›.Ǫ¦=ï{^\úƒ+`±îw¥ÐàÔþ¹Œ“Œ}K«s[k®ö¿t³iý- hÛ¼'±ð* é[NKr™ƒewmÛ,¡•´µûg{Æ´Ï©îÜaé ½cx>}ÿ7¾²õ;X2év3XÀ+/©Ì­ –­f=d6M’tñð);êŸ^ÃÜVúï°‹k®ààË™±Äúô° AÖyðtw™ŸXñeu,¬dàbÙ)ȪʱŽ{æZÚÜXâÞBÔÊÉ£켇l£·[kà¬`.q†‚LØ%÷©ì¯Ý­þ˰÷kGÉ™õ{ë/¢ê â«\ËÒÈ÷4mdÈÒ=c:øø-]ëcC«Ã½¦–zuMpíû\‚ ¸Îï?õ‡¤änô­yÛ[®lÕkwÖÁ.};«¨þU§õ 6QNK­ŽK«e.»y´€Í¡ “2Þ§Ö1ûþ‘Êw„~Ï£æé[­²›FÕº“ºŸJ¦ÒÖ—l×mmh×p™‚œO®4bXÆ×k2+k(®¶‹[^ZÖ4Hõ5‘ã?GORI#ÌÈþŒ~Ä~f¯?±ò¬^Ÿõêê§ÐÖ¨¾–9Õ—í2ÇØÂæ}=`ŽþH}Rë¹Î9y$U~KÍ–2ʯÜ÷4’ïJ‡4I|óãàèõ4ûÌîÀù(üC%ØŒbz#WʪèŸZ0êqqŸ}O-tú;ëqöí!¹U‚ }NHü G§ýq³)ÙoŽ÷^Ö2ÂúšZæ[ZÇ·i‰lÈÒ^ª’?y–æ1¿%¤2naz·|£öWÖ×åU–0îmÕmô‹jkÑí †6jñðrƒú7Ö»¬¾×aÞ_˜n%‘¸W`Òl;oãàW­$—Þ¥û±ûþ‘Éû˜þÇÊ,é[¯ cÙ‡s˜àÖ—š,-6µÖí¸r{y—ìï­ï§Ò8Vö ËÍ,õ685»M¥›À‡‰“ãàWª¤—Þ¥û±ûþŸîCì|–®õ©¡ì¼:†útÍz¼î!Àˆ‚n3»ÏÀÁÓ>·Zæ8áÚØcëcYK+hmík,ö1hÜÛ5?ú:z²I}æ_»±GâðÇö>BÏ«ßY}P0oÚæ=Í,sFÖL#Ö×_oÕ¬?É÷ÑÂ9Û<}13çàW°¤Þæ:±#âYGèÇì|y¿V>°ÿ'Þ7DKçlLñôÄÏŸH}XúÂcüŸxÝ,#±3ÇÓ>~{ I}ó'aö+ý'›´~Âøðú±õ„Çù>ñº"XG;bg¦&|ü CêÇÖäûÆè‰a퉞>˜™óð+ØRKï™;±_é<ß»°¾<>¬}a1þO¼nˆ–ÎØ™ã鉟?ú±õ„Çù>ñº"XG;bg¦&|ü ö’ûæNÃìWúO7hý–ý_è=o­`äÝ…}u2æ¿c„Z$ÚcÞ'_aÁz3\îSZ$» òk´‡*‡O1Ó±IãÑ®OöB¯Ÿ)ÈD¤5ªÑ¡ÏóÍ(Ê@h¿ÚñøV"@?0uûМzkÎç:¢N¤îüuÕeTD€ò;[È" þÓ_îÙÿmÙÿ‘P´µ`ܬFˆmµ€48ùSý¯ý3?ÎÞ¥öšÿvÏûnÏüŠ_i¯÷lÿ¶ìÿȤ¯£µã¦gùÃûÒû^7úfœ?½Kí5þíŸöÝŸù¾Ó_îÙÿmÙÿ‘I_F?kÆÿLÏó‡÷¥ö¼oôÌÿ8z—ÚkýÛ?í»?ò)}¦¿Ý³þÛ³ÿ"’¾Œ~×þ™ŸçïLr±ƒmpt#pʧöšÿvÏûnÏüŠ_i¯÷lÿ¶ìÿȤ¯¢?_÷©ÿ¡ýÉþ׋ÚÚÀ[pSûK?vÏûnÏüŠ_i¯÷lÿ¶ìÿÈ¢›'{cö¼oôÌÿ8za•Š kþpîwêi¯÷lÿ¶ìÿÈ¥öšÿvÏûnÏüŠÕÚñ¿Ó3üáýé}¯ý3?ÎÞ¥öšÿvÏûnÏüŠ_i¯ÂÏûnÏüŠJú1û^7úfœ?½/µã¦gùÃûÔ¾Ó_îÙÿmÙÿ‘Kí5þíŸöÝŸù•ôcö¼oôÌÿ8z_kÆÿLÏó‡÷©}¦¿Ý³þÛ³ÿ"—ÚkýÛ?í»?ò)+èÇíxßé™þpþô;.¦ÝŒ­í{‹Øa¤ s\I¾Ó_…ŸöÝŸù†EEÁ¾æ“ Ü×4à € +è•gõ/ùO¤Ç]ÿž,Z ?©Ê}#þ:ïüñb+ñþŸ÷K>…ÿ!ôÿü/Wý@Eê?ò~WüMŸõBè_òOÿÂõÔ^£ÿ'åÄÙÿPäŽêËüáú8½W ìÈÆÍ{žÜ7Õ[/s––΀y@ê9mê´ýÍ&ö8}‰•8¾Z}¥¶í¬ºìZÚqižõ·OSf&=dšØÖÉhò0I×C»¯‡0Ž;Ëô¯µÈ³¤Ûÿ6ÝÓGÚµ»°¸ ÌwÉà,¼¾“Ö,éUäQNΫ}Ù½›Û,fc_VÒýÛO¢ÓY0uغïI¾izMóRhY)älý^{¬ôce¸ÑU×U]´ý›!ØÖí°UµÌ{-¤ßN6—ª¦þ››E8Y2Ýõu#—~>FPºç0âÛŽlu–Û`ß$·yíÆ±Öú-ñ)z-ñ(Ú(¼ÛºfwR9ùvÕö r(ŪÒ׸? ÇdWe¾“œÏuŽ‚´+Mê=möUHé.¨—´_}—Rik$o,ØócÎÙÛ,jÚô[âRô[âR´SÊã`u_°tþ‰f®¼ qÜþ _Y­ìÄ{lk˜Àãfûv ÒÑÉÕΗš~«ulÕúÞ_í#M{š7‹²AÝ;Fæ½¼•Ñú-ñ)z-ñ)ZiÅÂfn/WÏc±l~>uíȯ-ޝÓ`n54½®°Y;©Òy µ]'4}PÁé¶·7Œ7:—´ÛŠjµÕ¹Í‘îu{I+£ô[âRô[âRµQyN©…Õz½9÷}‰Ø=3+ ›l¨Ùm¹!¤I®Ç05¦±¶]Üð®ýg²óкÝN«m é×9—î{Ý]ÁìÙÈØÓ=÷y-ïE¾%BÜZn©ôÜÑmV4²ÊÞšæ¸Cšæ‘¡ Z¨¸T³©çfô÷äàœtç:Ûl­í{ÝKè ¤Vç;gé7{ƒx*ý3Çõ§aèîŸÑçcdz¹ –VGЭÎhjê=ø”^Ÿ…‡H£–cÒÙ-ª–µŒdÃZÕ+UÒEô[âRô[âR´R$‘}ø”½ø”­TQ$‹è·Ä¥è·Ä¥j¤I"ú-ñ)z-ñ)Z©H¾‹|J^‹|JVªD’/¢ß—¢ß•ª‘$‹è·Ä¥è·Ä¥j¤I"ú-ñ)z-ñ)Z©H¾‹|J^‹|JVªD’/¢ß—¢ß•ª‘Veò%øTç°¶ muXôȵÿáQÿžÂdŽÌÇFãžÖÆã`|TCÌn1Û]=ˆ3æšæ¶Dê8 ‚;‚ ©{²XƲÑ#ii$H2‘Ï‚k@>mô•|lŸWØèõ©ð#Ä#ÊKH£K¤šR”ºRšTlÌsG.æBIXØcpc‹xG NïÁø!ºúü`þççy@P~Ðý<½ÌÉÛøðF“[Òuè!¡¥ÄÉ’dÝGÓ¬ºÂZwÄxkxQcZçTççz@Éë,=þ)RDuÕ(2"$Lu×Tè ôÃYêFßM›wDIîtðJ·1­c‰†íxÚsfš”©F;ë²tÈ-Ùc„‰i´ÏiŠ´Iá¡Þí`h-–É&tÜЕ+‡m–éÒPd Û®í±p“ùT¥¤Q¥ÒM)JH] 'ù¶ÿÆWÿVÔIBÉú ÿŒ¯þ­©)2Ïê_òŸHÿŽ»ÿ…ÿ!ôÿü/Wý@Eê?ò~WüMŸõBè_òOÿÂõÔ^£ÿ'åÄÙÿPäŽêËüáú:Ñ)ÿ‹gäÈ8Ñ)ÿ‹gäÉÍÁ°]$’I*I$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IL]ÁX´ èµÿqZý¶Ó¸++¦ÿÉø¿ñ5ÿÔ _˜è”9® ðyâ85í-p§Bg_Ñdî³v² ®g¼¥öއþ“üêÿ½5¯E%µÒòö¹Î$@ÜAÒAì‡tyU=~‡þ“üêÿ½/´t?ô˜¿çWýè¨ë»nR•S×èé1ίûÒõúúL_ó«þôM¹Q0áçÄUo´t?ô˜¿çWýé}£¡ÿ¤Åÿ:¿ïIT[ 4ðÞÿü’–ó¬ŸUO_¡ÿ¤Åÿ:¿ïK×èé1ίûÑÕ6[sçÆ°–ï?÷¨U>ÑÐÿÒbÿ_÷¥öއþ“üêÿ½jÚ$’ç4ÿ$Ž>`§ Ð9=ÉŸŠ©ëô?ô˜¿çWýézýý&/ùÕÿzZ¦ÍSl¸žOãâtj ~ Ÿ¯ÐÿÒbÿ_÷¥ëô?ô˜¿çWýè£[½[…Ó©2”ªž¿CÿI‹þuÞ—Ú:úL_ó«þô«nR•S×èé1ίûÒõúúL_ó«þô•M¹AÈ>ÖæÊÀ4˜ù/´t?ô˜¿çWýêxöôÇYÏ¡Ök¥e…Ñßèê’©´³ú—ü§Ò?ã®ÿÏ-ŸÔ¿å>‘ÿwþx±øÿOû¥ŸBÿúþ«þ "õù?+þ&Ïú‡!t/ù§ÿáz¿ê/Qÿ“ò¿âlÿ¨rGueþpý ?è”ÿųòd?è”ÿųòdæàØ.’I$•$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¦.à¬)#êôƒaÈ<ôÖë¸+ÿâwÿ@ÿôR£_˜è×¶ú±ªsÞáU5Iá­kGàU«ÎêW³×ÇÁ{¨:µÖ[]OpýæÖ÷nÔq0¨}jµõôÃcFæ²êÝhþHx:ÿj¯IÏm½;ö‰¢¾£×;¦ÖçháÃhfš»ýe:1ÒÑ‹²¶'P¯)Ž,ÜÇÖâËjxÚö< ÚæöÐöGÞï¹o«ùRî»ÔPp6´_¶6‡µÎÚ·MÂé7&Î4H 'ïw‰K{¼Jä·&¬K½Þ%-îñ([’Ü’—n]n½øÁÿ¦­Œ±í×F¼½­3Æ¥ŽïÙ&åÖëߌújØËÝtkËÚÓ°d5ä4߉G¤›vd†øíõ?ŸÔí}¹y§çTOìÌg]Q‚×§ïhOÙ­mÏ´µ®`xwithN.WWv[mÈvü,+ë&ëX].¾ ØÇµ§@%±ø”•À5·£Þï«þÓÆõ½Pú¾¯Ùöÿô¾Ñ¶b?›Õs=c¨ez½OƺðÜöTë2ÝPRv·ºœÇ‡8iê:LöV·–ö­?ü+EBYzMîñ)ow‰BÜ–ä%Þï–÷x”-ÉnIIw»Ä¡Üâ]Gˆ¾¢}^Ðcäa6å»ßGü}?ùñ©%ÞYýKþSéñ×ç‹‚Ïê_òŸHÿŽ»ÿ…ÿ!ôÿü/Wý@Eê?ò~WüMŸõBè_òOÿÂõÔ^£ÿ'åÄÙÿPäŽêËüáú:Ñ)ÿ‹gäÈ8Ñ)ÿ‹gäÉÍÁ°]$’I*I$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IL]ôJÁ?øÿÐ?ý·ÁY=<Óq ym¿1ú.=ì®æ>«Z[ÁkšuAXÎúµXwè²^ÊÇÑk^托kÏá!u¿±ºwjÜ<²Àð_±ºwî?þݳÿ&‘!26.&7O§ÒÇÜwX÷jç¸ò\{«;–—ìnŸûÿ·lÿÉ¥û§~ãÿíÛ?òh]›A•›.nä·-/ØÝ;÷ÿnÙÿ“Kö7NýÇÿÛ¶äÒU‡7r[–—ìnûÿ·lÿÉ¥û§~ãÿíÛ?òi*ÃÎuÞ ãëäÙè“- ×c@Z.¢ÇkñRÂéLÄh¨ÜûñÄc¾¼vÖ×5Áí{[M5ijºØÝ;÷ÿnÙÿ“Kö7NýÇÿÛ¶äÒO”äÛMO­[,–:³½¡ÞÇÆö:%&µŒ/sZl!Ï \àAq@ |§ìnûÿ·lÿÉ¥û§~ãÿíÛ?òh#ˆ8–ôî›s+e¸´ØÚÚZêÚàÀ´ i Váá_evÝEVÙI—½s˜A¸‰Dè¶ctÿÜý»gþM/ØÝ?÷ÿnÙÿ“I\^n½3¦]k®»‹-xÚë[\âÚAqdhèÑ¿ÔôÙ¿©»hû}-ó;=³àµ¿ctïÜý»gþM/ØÝ;÷ÿnÙÿ“I\Nnä·-/ØÝ;÷ÿnÙÿ“Kö7NýÇÿÛ¶äÑU‡7r[–—ìnûÿ·lÿÉ¥û§~ãÿíÛ?òi*Û¹DŸÒQÿOþ|jÔýÓ¿qÿöíŸù5*º^ 66ÖVw³èî{ßĸ‰Ak?©Ê}#þ:ïüñbÐYýKþSéñ×ç‹]ôÿºYô/ù§ÿáz¿ê/Qÿ“ò¿âlÿ¨rBÿúþ«þ "õù?+þ&Ïú‡$wV_çÑÐÃþ‰Oü[? FAÃþ‰Oü[? FNn ‚é$’IRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’JRI$’”’I$¥$’I)I$’Jbî Êéßò~/üMõj»‚²ºwüŸ‹ÿ_ý@M“[™èÙI$k©$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’RË?©Ê}#þ:ïüñbÐYýKþSéñ×ç‹_iÿt³è_òOÿÂõÔ^£ÿ'åÄÙÿPä.…ÿ!ôÿü/Wý@V2ª7ã]H0mc˜›Å#ºrÿ8~Ü?è”ÿųòe™}TW[°î.cZÒZêˆ ÄÚ |‘?i[ÿp¯ÿ:Ÿý,a²2B†­ô•ÚVÿÜ+ÿΧÿK%ûJßû…ùÔÿéd,'݇vúJ‡í+îÿçSÿ¥’ý¥oý¿üêô²Vîû}%Cö•¿÷ ÿó©ÿÒÉ~Ò·þá_þu?úY+ ÷aݾ’¡ûJßû…ùÔÿéd¿i[ÿp¯ÿ:Ÿý,•…{°îßIPý¥oý¿üêô²_´­ÿ¸WÿOþ–J½Øwo¤¨~Ò·þá_þu?úY/ÚVÿÜ+ÿΧÿK%a^ì;·ÒT?i[ÿp¯ÿ:Ÿý,—í+îÿçSÿ¥’°¯vÛé*´­ÿ¸WÿOþ–Kö•¿÷ ÿó©ÿÒÉXW»íô•ÚVÿÜ+ÿΧÿK%ûJßû…ùÔÿéd¬+݇vúJ‡í+îÿçSÿ¥’ý¥oý¿üêô²Vîû}%Cö•¿÷ ÿó©ÿÒÉ~Ò·þá_þu?úY+ ÷aݾ’¡ûJßû…ùÔÿéd¿i[ÿp¯ÿ:Ÿý,•…{°îßIPý¥oý¿üêô²_´­ÿ¸WÿOþ–J½Øwo¤¨~Ò·þá_þu?úY/ÚVÿÜ+ÿΧÿK%a^ì;·ÒT?i[ÿp¯ÿ:Ÿý,—í+îÿçSÿ¥’°¯vÛé*´­ÿ¸WÿOþ–Kö•¿÷ ÿó©ÿÒÉXW»íô•ÚVÿÜ+ÿΧÿK%ûJßû…ùÔÿéd¬+݇vó¾‰Y];þOÅÿ‰¯þ #;©dÌ+wAΨ í$XL|”1j4ãSI2jcXO›@ÁÁžQ•Q´É$’ I$’R’I$”¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’R’I$”²Ïê_òŸHÿŽ»ÿ/þÄYÿ¼©z_þãâÿìEŸûÊ­¤•«ˆ~èüZž§Wÿ¸ø¿ûgþò¥êuû‹ÿ±ï*¶’V®!û£ñjz_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªÚIZ¸‡îÅ©êuû‹ÿ±ï*^§Wÿ¸ø¿ûgþò«i%jâº?§©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ­¤•«ˆ~èüZž§Wÿ¸ø¿ûgþò¥êuû‹ÿ±ï*¶’V®!û£ñjz_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªÚIZ¸‡îÅ©êuû‹ÿ±ï*^§Wÿ¸ø¿ûgþò«i%jâº?§©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ­¤•«ˆ~èüZž§Wÿ¸ø¿ûgþò¥êuû‹ÿ±ï*¶’V®!û£ñjz_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªÚIZ¸‡îÅ©êuû‹ÿ±ï*^§Wÿ¸ø¿ûgþò«i%jâº?§©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ­¤•«ˆ~èüZž§Wÿ¸ø¿ûgþò¥êuû‹ÿ±ï*¶’V®!û£ñjz_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªÚIZ¸‡îÅ©êuû‹ÿ±ï*^§Wÿ¸ø¿ûgþò«i%jâº?Ÿ©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ®$•«ˆ~èüZ~§Wÿ¸ø¿ûgþò¥êuû‹ÿ±ï*¸’V®!û¡§êuû‹ÿ±ï*^§Wÿ¸ø¿ûgþò«‰%jâº?Ÿ©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ®$•«ˆ~èiú_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªâIZ¸‡î†Ÿ©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ®$•«ˆ~èiú_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªâIZ¸‡î†Ÿ©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ®$•«ˆ~èiú_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªâIZ¸‡î†Ÿ©Õÿî>/þÄYÿ¼©z_þãâÿìEŸûÊ®$•«ˆ~èiú_þãâÿìEŸûÊ—©Õÿî>/þÄYÿ¼ªâIZ¸‡î†Ÿ©Õÿî>/þÄYÿ¼©Øþ¨^Ðú1Ã$n-¾Ç:'XiÆéƪÚHÚ¸‡î…–Rÿ”úGüußùâÅ ³ú—ü§Ò?ã®ÿÏ$»éÿt³è_òOÿÂõÔ|Û_N÷3é×[Þß‹ZHüP:ü‡Óÿð½_õ=³!ŒœúžÖ·Ä–Gueþpýþϳþæß÷Sÿ¤P«W—n;­uÍmuØ×<4:^l{ÑÁÙ9ê”H®øÖ?AoþA‹=lËî {Xk©€½Ža–›K€è,¹8O [‘Õ:•tõ«±rº×ìŠ+Ä¢ÚY8Íõe™ ±Ó“SÜ`VÑí*ÆZ#¢cçf]eÏuT ˜Cïý#›KØÂDzµ´?Sà®3 ãªåf?k©ÈÆÇ 3Rf§ä=Û\#_‰Ôº^>/O«úFE8ÙoÈÀ£ì×eSéÇ¥{i¦ÐÀßYÁºviíhÅ¡¡äꎽŒÜ{í¾›±îÆul³Æ´ÛºçS·cÜÇ a¤:>ä þ»™†.¯¦ä2á‘IªßKVßkj%®mû À÷hâ7{U.—U9ù˜´tœL7ÞÖ³œLЍ±¬w¸[uظáÒí¾ÝN¨µô.¤12ßJ‚ëqnÆÃ[u,~-ͽߤ±Íí€Ø’ª êë?>Êñ{ð²¶»kq­öN¿I̱Õ49/Ž;ª¶ýcƪšžìlƒu¹?c8¡6²ïM׆¸í‚Ñ ‡F£²TéC¨·ÜŒlKÍ> ¿§ÝkÝŽâý»,õ=\ÀÝ&¯Î?•õw3ÊÞöâÐÆuæú ²¶Vü'b1»ÜuñçÉËg®u zµ¸OéyÔʨ|—cîgªûØçØ[’FȬFÐ]¡Ó…©õzf³/kß[_[ jnç“m¥»["}Ï YÔ+ë.ÍÆe6Ñ‘M4^,±Õ½‚›.~öÔðù o¢õ\K31YUe¡ÍÈÆ¸î6Ñ‘Uî© 0Š ;1Æêž¶Mx·bß‹uÕÛkw¦e”šZâ}+l‰7Ÿó__ÅűÕz7Ýcr›‚SZâë]Ž2ÚD¼{vIï媟PÅÏ9ØÙø«-Ç®êMîums.5<¸=Œ°‚×R?5SÅèýPe·/1ôzŸ´]šöÔ]³‚pšÆîh—DÏm|’PëüŠ{>±ãQ‘nN6M⺆ۊæµÖÆM‚šœÁUktðéСfuÒÜ,æÙNOMɧìªk*±Û+oºÊÃ-sXH–¹Ã‰ŸÒ2rsnÈ­Ì ³övÐâgõ,»2­˜iµÞÝyðK®ôŒž¥êúcwôìÜ1¼‘úL¯Ca0Óí™Ü‚G †Võö·/+Œ¼§`¹­È}-¯hÞÆ\6›,awµü4O— vuÜÐ :.Ï~M-Éc1ÃdRÿ¡c¯©£wa2…‰n>OPµå¥¹y º¸™ ôQ5š eßW)À±ùm·ì4àÞÜ«EEØ íuwzNïc½¥¾ï’* vÝÝé}FŽ©„ÌÚöV÷XÀÛ[µàÕc©væÉXƒWZmÙºpòl¡·;Ùmmf±ck·Ôõ!®NÈBú¬Ü†ôJ“üí¶ä\NÒÀávE·5Á®Ô5à€U{:.kº Ê¦¬|Që¶ë2è²ÖYcà]]˜á‚·—´ms‹¼á$P²ÞoXe™n¢Œ\‹ë®ßFܪÚÓSl2ðó´˜qkH –WÖ/S¨Ù‹•K0Ù”Ë3öTæWf0±¥Íe—4Ù«=°#Æ5‹¸[÷Ñö{0mÈ}þ¥Ž{m`ºÇ]kÂ×ûœí¤¸sÁ…:FK¾¯õ˜Ï_7íÞ›¤ìk²û+Üv΂Á»D8m{¾°Õ^V^-xYY`-VÔÆ4=¸ºÀçû_¨kK¼¸Q§®d]Ö,çÌŒ?C겫5mŒ‡Z=C¾æ¸²"»GvÛ5hoö§\ÏMÖ`ä`â×SÞöN@n÷Ø÷VëlÝ5åigbY‘“ÓíahnC®²fK]}ØY´r‚j4Ÿ&ñK­,}»bSKÞI! 3¬ð³®úÇ‹}ùXÙYŠê[n3š×[ jsEv=®ÓûN¹ÓîêÕWP®ÁU¢Ë1ï.mW05Í5Øæ5Æ%ÁßDêçòºv>nETá`œËú[1¨ÄiôÙeY£ÝdWVù6 Ȫ‰Ü»§ëS•fV6F-˜xïËuŠ÷¾–\êÍv9†8 »I xn¬›ê¦Ì\ŒO´´»÷µ­m¡£q Ø÷9§n»^afu¼N¥oLê½C¨Šju=3.Š)¡î°E¬±î{ë«RkhoнNYÈË÷©}¬À.±†‡9ζ×Vêœ×±¢°cŽÐ]ñI$F­­Òzáû y}B÷>:fU­´~“#Ös6{œëÐ6†øG+S¨ºÚ®²ì<œ_E»Ë-c\ç6 ö nã§Ñï%“õk-˜M¡öÖÛkÁéØõ½²à2:}–]¸´†Ë ‹c_̬^µÔ:vF6HÇDZþŸ¦Ú¬±ípcƒìm,©Á¶°ÀÐO(h©pÞˆz‡Ö;1º~u¬Â¾œÌl[2¨¦ñ\XÊà:Ïeѵ…Ãp.ŽÒ­;¨d>Üe7`òI¦ÑKÍn=×CUÖ6Y ƒ2" ÊÇU2l»)ÍÅÀé•dôüœ˜`¹Ûï5Å–?ѧx‘§œ­sÔòìé÷e×E6adºç¶›k\Ãu´ºªŽíöñwIG†˜Óõ‡ë*Š/f&Ež•Îk}¸’/ÄCIh ýgÇ ¾ï±åLKm§#/m~› /uOtw¹€¶e­(Xýª·¥Zê?g`YK™{\ãsÙŒöÙCY`kH,nçž8ÕΑ’ï«ýG¦3×Íûw¦é;Úì¾Ê÷³ °n€’ª?˳¥•“N&5ÙW»m41ÖØè&À\ã]Y9ý.Ž•›™_MɪÜlk2)õÅ[°L¸×q³.i!Ñ1ª×Èc¬Ç²¶†=ŽkEƒs$‚ö‚$x‰\ýW3]Fv>Úz~>^¸£Ûn¨¾ÀÛvXÊÛ^Á"5Ÿ$Q˰Ìû~Èü›ð²(s(!–Xé€ F=–¶ 1©øéª«oÖ,j1¯»'"‹1]KmÅsXëc&ÁMNhªÇ5À»ÁÓ¡î£Ô0z¯RÁ®¼šq…µ^,³Õ±ô_XinËé1Í÷;tmpÐr¨býY̪ܫXLȳ§ØÌl@ZÆŒ<“‘n÷ «Þç4èvùv”z¶ß×ú‹z–>+zFW§mZZN0°šßCAlå†aÝ:ê<Ö®>eydÒÀàìKE6Ásª®ñ¶ Ÿm¡Tê½Cíø½C”Úú*º‡Õ}ލÜê_¸=•Ú}¦ŸÝî†üNµ™›gOÏ«=í¸¾÷½®ªÆÕ^9†2· TÒj(4@èÁŸYè¹ôW‰…•“fF%9Íem¯ÛUû¶îu–µ»†ÍDü%iaåÑ›^Ušì‰®×5Í:‚×+é¸k§õbbŒkŸ‹Ò01òYkÞÆ—±ÙLcÛ]†iзYì·ºVðp[EZ]e¶¼i²ëu›A&ç˜ISlÜI$X¤’I%)$’IJI$’R’I$”¤’I%)$’IJI$’RË?©Ê}#þ:ïüñbÐYýKþSéñ×ç‹_iÿt³è_òOÿÂõÔuRè@ž‡Óÿð½_õ W¶”Šì ñš–I>Ò–Ò…,á—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e’O´¥´¥Já—e,î¥ÿ)ôøë¿óÅ‹GiYÝKþSéñ×ç‹_Œ^Ÿ¢ât¯µþÌÅÛû^=&Ç¥öoOèÿƒß¬xJµúïþnÿöQx*H¶_zýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²‰~»ÿ›¿ý”^ ’J}ëõßüÝÿì¢_®ÿæïÿe‚¤’Ÿzýwÿ7û(—ë¿ù»ÿÙEà©$§Þ¿]ÿÍßþÊ%úïþnÿöQx*I)÷¯×ówÿ²Šž_ÚþÛƒ?µ§}›wý›ÔþeÿÍF“ã=—ˆ¤’ÿÙ endstream endobj 71 0 obj <> stream H‰bd`ab`dd÷wsññr׎J,HsÉÌKOJ,)ö qIYüaü!ÁòC–G¬û÷Nöó2lͬr <šfÎüßÝ`ñ°Ïáÿ^(ð½T°ûû6!fFF–´ÒDsãèäXçü‚Ê¢ÌôŒCKKK]#…Äb…Ä<…Ò¼‚Ò¤œÌâŒÔ…òü¢l…¤J÷ĜĂÄôüb—ÔâÌô<÷¢üÒϼd=Çœ°QÅ E©Å©Ee©)èÎFÆv&…<+”Õ¬Myÿ{§èÏ32l'ÿž‘ùiÎöý;›¨ ë“Ïe~ÉüyÎÎ÷ã,Ÿ ›¸ ëE1Ö^™_Å ÄÚËÎ`^tcã endstream endobj 70 0 obj <> endobj 72 0 obj <> endobj 69 0 obj <> endobj 66 0 obj <> /ColorSpace <> /Font <> /XObject <> /ProcSet [/PDF /Text /ImageC] >> endobj 73 0 obj <> stream H‰ìW[rÛ8­Y€öp?é®"À˜ª©™´í¸Ó‰“t¤T2ew¹h‰’S¤"’vÜûìýÌ@”lw&ó×JÅAà>Î=÷N«ÑälÊiU\ B—6íw>Z޾Ž8e4»Ì‹ñQëÌ•ù’I«'Ò.íN~¢Âüf<~¸K½….¡tý<M^zÄi¶Åäâ_L^ÀÜPF$\­e¶MŽ«æ¹,öðÁ·„2Ä·ë"ö©šC!sŽísõK1ÍîFÎôÝù)~ž}xAg§çÓ£Ùè‹>îj…ø²¹”­FxÀ]×u¹•EJâ…ójI÷eCÉîˆG,rRjª¬XÑë“Sò˜ÿL¿œ'íš‚^—Å×&mw–;JŠ¥Eîèè÷Ù¯0…ÆÉü°u_ÄœÅ~$÷¬Q6h‡6é"KžOžrÄsYàôþì£^8YAõ:URÆ"Ƒȣ1g‚f'ð0/çI•-³4_0úÅzþyĹ‹<¡ô6ÅŸ¤ÊàÎ&­×åâ9míΪ¢y=~)½ ˜œ—+º.¿i·g?AI²Ý¦É®b4keÞoÓ¿@%—ÖCÿGAážÏ¢( gA‘PÂjãú3°yžÍoô›éuS×eÁ4t’…ÂÈ%K‹ò5e@‰¶å¶É–Ìi›'÷@k *€/Œöö7Uº«h“­Ö5åÙMJu©ñ€xÏýšf›—ÉB™”YÉ‹Ì"?¯ó{ZZ±›}uÙžÊ>d·+¸9Œ¦iŽs](Ê2¯l(B§€¯Q,€(,@ÿ=Б 2”f“ÁX¨­Ît¾Ë¶µ¥[†3O$ÙyR$+…Tï‡ À&AŒ6iÑ 2K•Fwël¾Ì=èZ—M¾ Ã/å`U {ò•&ÒgiMçe—ÈÆÊʆÄ-Ò;ºËŠEy·/‹µR›gUMårÀêÛ$Ë“ë3´ÕÑã¨órXìÔã×T¦ÚÃÇmb´ ”;­MŸrkL.:4a­“§ËÚÝg¥)…ÔÚJm_'·*ù¨Ìx‰ •A@‰>zqg¤ƒbÞ7þ"¹ÍVI¶Å–6eSÔÀ0+ä¦j~÷4ÑMšêz‘U7º<(ó6ã”P[òwÉü¦:¬ö ÅNµ±†Ñ’¸˜ÚCOô’ uî ,µ¨ÏZd³/ãø‡ÛÀƒÿqúó!âwºÀ¶Ïà¯kʰµNpæGaô0;4FY –j<ÙÝSmR-ýÒ±]™,Ê}†-9M.ÙÜè‹®šX¯©œZB³U ‡×¹0¾GzìˆÈ—ÅB@ÍñCc쨧3<áÿ¯û{¹èNÍ5çtñ»K‹‘`ÖSê}óÆïøÈ0¶ ùhjæì6:R[(©= Õø½±÷ŽIhÚÜä_R3Û>¾W=VŽq©‚— QÖÍ3î°u¿ùÒ\ç_PRŸÑ4/16føu·.û"ç)¯t$× pŠN–©9ÙV:Ecí7YÑ|ÓùûòÒysyôn:Ei+Ð&Q` ’aLWó5z-’ûŠõEï?ŠÝ¨¾&¥ÐÀê5`mT¥cô…\%ÁF»Ê*íê¿wM}“°£B¹7@cG 5'¬K0m« Ð¥£‡èº<ht}Ùå "»®ëíóÉdOÓeUÄäYßMD<]c/XËŠÿ‘MçÙ»šï“ˆpKR—°ewÝÓÔhÉËÍŒ«ÁVߊ"·=/bœãÂ÷ ráÌ>~> °Ø9ýüþÍ‹Wo§ÈAÓ逎0Opâ`œ§w)ƒx„ù,6Ú5k¹0 Š\ÕtqH)s9=_uóu|a’Qîß(C‰"\ ;WćW€ çîNõxÆV7ß6É*ù#+R6/7½/«0à">&Kˆô$nBÀå‚GÜ`ûÛè+ŽdÔî \|yÝÖñ`ï§Ÿ¨ÀfOÂBȘk“E0Å'Ü]¤ºˆ Q(ÕÍpŽZòjƒ”PÕ)ƒK^Œ¡kc.i¬žP¿¡ÌUo€ì'*ÌoìÒo1× ‹ÎAɱQý®{må‘.ª Iÿ‡*#ª•ïٺ䛲ôÒŒjõô]R:¨á¦´Kuã9ñô…Ç5Äy‚…àU„Û¦Ôqô¡f/G|H‘’cð p“ÜŒ|_˜¢Û®äX‰˜PkWü€³@ïP”÷Ï0ïç#»…¶a¸¢)Y‰aÈÔõÕªlç d¢_ȱ XvÁ‹¤N©V\÷hÔá|»`-Ê+Æf+Ðúd5ÚçùhùSÏ¿¿Qz ¥6Ë# ‚Ngjž8èîÄÈ~DhÞ‘Mrï É;}cÎdߨ ¼ [ñ†€AËà¹Ù¬ @nP•¬Äм€,AÈ¡Œí‚òPôâºÇ!ÈâÈb`³h}ê@ö­äá¬$/Z#ø‚Õÿ©—Äí ÔE7B1R—£æFhíAD->æÞ#ó‰×6Óñå{˜QL˜³å4‘át«G±§Ów?ŸNíXÕÚ8œ˜û¾Õ« mï²3œèffišS{³|·4Cã2›gIN¿¨Añ=ºÑs2p7(bê y4˜ú„ì ½°C£žUÐi–í”x5Ó†N7¬hs¬ ±@·²ís²åvŒW ¬Çåfƒ±züF=¾è/:—G0ro˜u»[×¾YJØ¢3ÖUeÓËótYîV©š¡'Vgg«Û¹oÙªÉ`×oõäõÉ)}|õÐÉ> endobj 75 0 obj <> /Subtype /Link /A 76 0 R /Type /Annot /Rect [518.690796 96.080002 599.561951 105.367966] >> endobj 78 0 obj <> endobj 77 0 obj <> /Subtype /Link /A 78 0 R /Type /Annot /Rect [544.844116 461.579987 631.670776 473.189941] >> endobj 80 0 obj <> endobj 79 0 obj <> /Subtype /Link /A 80 0 R /Type /Annot /Rect [438.672119 425.579987 592.80957 437.189941] >> endobj 82 0 obj <> endobj 81 0 obj <> /Subtype /Link /A 82 0 R /Type /Annot /Rect [521.995117 401.579987 634.586304 413.189941] >> endobj 84 0 obj <> endobj 83 0 obj <> /Subtype /Link /A 84 0 R /Type /Annot /Rect [565.874146 377.579987 697.628235 389.189941] >> endobj 86 0 obj <> endobj 85 0 obj <> /Subtype /Link /A 86 0 R /Type /Annot /Rect [438.67215 341.579987 683.329956 353.189941] >> endobj 88 0 obj <> endobj 87 0 obj <> /Subtype /Link /A 88 0 R /Type /Annot /Rect [438.67215 305.579987 535.428833 317.189941] >> endobj 90 0 obj <> endobj 89 0 obj <> /Subtype /Link /A 90 0 R /Type /Annot /H /I /Rect [575.474854 106.580002 655.183838 115.867966] >> endobj 92 0 obj <> endobj 91 0 obj <> /Subtype /Link /A 92 0 R /Type /Annot /H /I /Rect [615.775879 14.7798 703.724121 25.471695] >> endobj 74 0 obj [75 0 R 77 0 R 79 0 R 81 0 R 83 0 R 85 0 R 87 0 R 89 0 R 91 0 R] endobj 64 0 obj <> endobj 1 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj xref 0 95 0000000000 65535 f 0000259510 00000 n 0000000000 00000 n 0000035717 00000 n 0000000578 00000 n 0000000531 00000 n 0000000015 00000 n 0000030638 00000 n 0000001176 00000 n 0000001257 00000 n 0000004015 00000 n 0000001340 00000 n 0000006486 00000 n 0000004050 00000 n 0000004445 00000 n 0000006151 00000 n 0000004711 00000 n 0000012863 00000 n 0000012231 00000 n 0000007020 00000 n 0000019410 00000 n 0000013612 00000 n 0000013978 00000 n 0000018912 00000 n 0000014389 00000 n 0000025202 00000 n 0000020400 00000 n 0000020796 00000 n 0000024773 00000 n 0000021164 00000 n 0000029941 00000 n 0000029497 00000 n 0000025740 00000 n 0000030814 00000 n 0000034184 00000 n 0000034021 00000 n 0000033958 00000 n 0000035533 00000 n 0000034209 00000 n 0000035632 00000 n 0000000000 00000 n 0000102528 00000 n 0000035910 00000 n 0000100377 00000 n 0000037021 00000 n 0000100589 00000 n 0000102503 00000 n 0000102340 00000 n 0000102277 00000 n 0000000000 00000 n 0000213425 00000 n 0000102724 00000 n 0000210123 00000 n 0000103623 00000 n 0000209952 00000 n 0000209032 00000 n 0000209321 00000 n 0000209739 00000 n 0000209387 00000 n 0000210347 00000 n 0000213400 00000 n 0000213237 00000 n 0000213174 00000 n 0000000000 00000 n 0000259314 00000 n 0000213621 00000 n 0000254272 00000 n 0000214873 00000 n 0000218284 00000 n 0000254110 00000 n 0000253840 00000 n 0000253478 00000 n 0000254051 00000 n 0000254521 00000 n 0000259233 00000 n 0000257228 00000 n 0000257166 00000 n 0000257446 00000 n 0000257388 00000 n 0000257686 00000 n 0000257607 00000 n 0000257912 00000 n 0000257846 00000 n 0000258142 00000 n 0000258073 00000 n 0000258394 00000 n 0000258303 00000 n 0000258613 00000 n 0000258554 00000 n 0000258840 00000 n 0000258773 00000 n 0000259070 00000 n 0000259007 00000 n 0000259587 00000 n 0000259636 00000 n trailer <<43bc372876ebca092198584a25c9575e>] >> startxref 259858 %%EOF ifpgui-1.0.0/radiofreqdlg.h000755 001750 000144 00000004175 11335200570 014011 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include #include //#include "ifp.h" #include "backend/ifpinterface.h" class RadioFreqWindow: public QDialog { Q_OBJECT public: RadioFreqWindow(QWidget *parent=0, Qt::WFlags f=0); ~RadioFreqWindow(); public slots: virtual void btnDone_clicked(); virtual void btnCancel_clicked(); virtual void tableValueChanged(int row, int col); private: char buf[IFP_TUNER_PRESET_DATA]; QGridLayout *freqLayout; QTableWidget *freqTable; QPushButton *btnDone; QPushButton *btnCancel; void initalizeDisplaySettings(void); void finalizeDisplaySettings(void); }; ifpgui-1.0.0/moc_radiofreqdlg.cpp000755 001750 000144 00000004576 11331146514 015212 0ustar00000000 000000 /**************************************************************************** ** Meta object code from reading C++ file 'radiofreqdlg.h' ** ** Created: Sat Jan 30 16:22:37 2010 ** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include "radiofreqdlg.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'radiofreqdlg.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 61 #error "This file was generated using the moc from 4.5.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_RadioFreqWindow[] = { // content: 2, // revision 0, // classname 0, 0, // classinfo 3, 12, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors // slots: signature, parameters, type, tag, flags 17, 16, 16, 16, 0x0a, 35, 16, 16, 16, 0x0a, 63, 55, 16, 16, 0x0a, 0 // eod }; static const char qt_meta_stringdata_RadioFreqWindow[] = { "RadioFreqWindow\0\0btnDone_clicked()\0" "btnCancel_clicked()\0row,col\0" "tableValueChanged(int,int)\0" }; const QMetaObject RadioFreqWindow::staticMetaObject = { { &QDialog::staticMetaObject, qt_meta_stringdata_RadioFreqWindow, qt_meta_data_RadioFreqWindow, 0 } }; const QMetaObject *RadioFreqWindow::metaObject() const { return &staticMetaObject; } void *RadioFreqWindow::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_RadioFreqWindow)) return static_cast(const_cast< RadioFreqWindow*>(this)); return QDialog::qt_metacast(_clname); } int RadioFreqWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QDialog::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: btnDone_clicked(); break; case 1: btnCancel_clicked(); break; case 2: tableValueChanged((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; default: ; } _id -= 3; } return _id; } QT_END_MOC_NAMESPACE ifpgui-1.0.0/revision.h000755 001750 000144 00000003106 10366305714 013206 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef _REVISION_H_ #define _REVISION_H_ #include extern QString AppRevision; extern QString LibRevision; #endif // _REVISION_H_ ifpgui-1.0.0/moc_ifpguiview.cpp000755 001750 000144 00000013402 11331146516 014713 0ustar00000000 000000 /**************************************************************************** ** Meta object code from reading C++ file 'ifpguiview.h' ** ** Created: Sat Jan 30 16:22:38 2010 ** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include "ifpguiview.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'ifpguiview.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 61 #error "This file was generated using the moc from 4.5.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_ifpGUIView[] = { // content: 2, // revision 0, // classname 0, 0, // classinfo 24, 12, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors // signals: signature, parameters, type, tag, flags 17, 12, 11, 11, 0x05, 56, 48, 11, 11, 0x05, 100, 84, 11, 11, 0x05, // slots: signature, parameters, type, tag, flags 127, 11, 11, 11, 0x0a, 144, 11, 11, 11, 0x0a, 165, 11, 11, 11, 0x0a, 188, 11, 11, 11, 0x0a, 209, 48, 11, 11, 0x0a, 231, 84, 11, 11, 0x0a, 256, 11, 252, 11, 0x0a, 283, 11, 275, 11, 0x0a, 300, 11, 275, 11, 0x0a, 313, 11, 252, 11, 0x0a, 327, 11, 252, 11, 0x0a, 342, 11, 11, 11, 0x0a, 360, 11, 11, 11, 0x0a, 377, 11, 11, 11, 0x0a, 397, 11, 11, 11, 0x0a, 416, 11, 11, 11, 0x0a, 430, 11, 11, 11, 0x0a, 444, 11, 11, 11, 0x0a, 462, 11, 11, 11, 0x0a, 481, 11, 11, 11, 0x0a, 506, 498, 11, 11, 0x0a, 0 // eod }; static const char qt_meta_stringdata_ifpGUIView[] = { "ifpGUIView\0\0text\0signalChangeStatusbar(QString)\0" "bStatus\0signalSetBatteryStatus(int)\0" "capSize,capFree\0signalSetCapacity(int,int)\0" "uploadPlaylist()\0uploadSelectedFile()\0" "downloadSelectedFile()\0deleteSelectedFile()\0" "setBatteryStatus(int)\0setCapacity(int,int)\0" "int\0getBatteryStatus()\0QString\0" "getFirmwareRev()\0getifpType()\0" "getCapacity()\0getFreeSpace()\0" "formatIfpDevice()\0UpdateFirmware()\0" "setRadioFrequency()\0create_directory()\0" "rename_file()\0delete_file()\0" "file_properties()\0align_horizontal()\0" "align_vertical()\0checked\0" "btnCancel_clicked(bool)\0" }; const QMetaObject ifpGUIView::staticMetaObject = { { &QWidget::staticMetaObject, qt_meta_stringdata_ifpGUIView, qt_meta_data_ifpGUIView, 0 } }; const QMetaObject *ifpGUIView::metaObject() const { return &staticMetaObject; } void *ifpGUIView::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_ifpGUIView)) return static_cast(const_cast< ifpGUIView*>(this)); return QWidget::qt_metacast(_clname); } int ifpGUIView::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: signalChangeStatusbar((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 1: signalSetBatteryStatus((*reinterpret_cast< int(*)>(_a[1]))); break; case 2: signalSetCapacity((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; case 3: uploadPlaylist(); break; case 4: uploadSelectedFile(); break; case 5: downloadSelectedFile(); break; case 6: deleteSelectedFile(); break; case 7: setBatteryStatus((*reinterpret_cast< int(*)>(_a[1]))); break; case 8: setCapacity((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; case 9: { int _r = getBatteryStatus(); if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; case 10: { QString _r = getFirmwareRev(); if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; case 11: { QString _r = getifpType(); if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; case 12: { int _r = getCapacity(); if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; case 13: { int _r = getFreeSpace(); if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break; case 14: formatIfpDevice(); break; case 15: UpdateFirmware(); break; case 16: setRadioFrequency(); break; case 17: create_directory(); break; case 18: rename_file(); break; case 19: delete_file(); break; case 20: file_properties(); break; case 21: align_horizontal(); break; case 22: align_vertical(); break; case 23: btnCancel_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; default: ; } _id -= 24; } return _id; } // SIGNAL 0 void ifpGUIView::signalChangeStatusbar(const QString & _t1) { void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; QMetaObject::activate(this, &staticMetaObject, 0, _a); } // SIGNAL 1 void ifpGUIView::signalSetBatteryStatus(int _t1) { void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; QMetaObject::activate(this, &staticMetaObject, 1, _a); } // SIGNAL 2 void ifpGUIView::signalSetCapacity(int _t1, int _t2) { void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)), const_cast(reinterpret_cast(&_t2)) }; QMetaObject::activate(this, &staticMetaObject, 2, _a); } QT_END_MOC_NAMESPACE ifpgui-1.0.0/libifp/000755 001750 000144 00000000000 11403105326 012427 5ustar00000000 000000 ifpgui-1.0.0/libifp/prim.h000755 001750 000144 00000014432 10512336016 013560 0ustar00000000 000000 /* * Interface for accessing iRiver's IFP devices * $Id: prim.h,v 1.1.1.1 2005/08/04 19:45:27 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #ifndef IFP_PRIM_H #define IFP_PRIM_H 1 //WARNING: this is a dumping ground for everything that doesn't have a home //.. it used to be 'ifp.h' #define IFP_REQ_TYPE 0xc0 //192 //#define TIMEOUT 1000 //#define TIMEOUT 5000 #define IFP_TIMEOUT 5000 #define IFP_FAT_PAGE_SIZE 0x0200 //512 #define IFP_FAT_SLOT_WIDTH 0x0020 #define IFP_FAT_SLOTS_PER_PAGE (IFP_FAT_PAGE_SIZE/IFP_FAT_SLOT_WIDTH) #define IFP_PATH_XFER_SIZE 0x0100 //256 //request values #define IFP_ECHO 0x00 //no idea. PING/ACK, start? #define IFP_GOLF 0x01 //reset? #define IFP_02_COMMAND 0x02 //see below #define IFP_UNKNOWN_1 0x03 #define IFP_UNKNOWN_2 0x04 #define IFP_FILE_OPEN 0x05 //file open #define IFP_FILE_OPEN_NEW 0x06 //'file_info' for uploading #define IFP_FILE_DOWNLOAD 0x07 //requests next data block #define IFP_FILE_UPLOAD 0x08 //accepts one data block #define IFP_UNKNOWN_3 0x09 //? segfaults my test program #define IFP_UNKNOWN_4 0x0a #define IFP_FILE_SIZE 0x0b //context 'file_info' #define IFP_UNKNOWN_5 0x0c #define IFP_FILE_CLOSE 0x0d //file close for 'info' 'upload' and 'download ' (?) #define IFP_FILE_DELETE 0x0e #define IFP_LS_OPEN 0x0f //15 #define IFP_LS_NEXT 0x10 //16 #define IFP_LS_CLOSE 0x11 //17 #define IFP_DIR_CREATE 0x12 //18 #define IFP_DIR_DELETE 0x13 //19 #define IFP_GET_CAPACITY 0x14 //20 #define IFP_GET_FREE 0x15 //21 #define IFP_FORMAT 0x16 //22 #define IFP_FIRMWARE_UPDATE 0x17 //23 #define IFP_SET_BUFFER 0x18 //24 I believe it sets the buffer size #define IFP_UNKNOWN_6 0x19 //25 #define IFP_GET_FAT_PAGE 0x1a //26 "alpha" #define IFP_LS_NEXT_DEBUG 0x1b //27 "bravo" #define IFP_SET_FAT_PAGE 0x1c //28 "charlie" #define IFP_GET_PRESET 0x1d //29 #define IFP_SET_PRESET 0x1e //30 //when request is '02_COMMAND', index is one of these: #define IFP_02_STRING 0x00 #define IFP_02_FIRMWARE 0x03 #define IFP_02_DELTA 0x04 //I always get "0108 0616 ffff ffff" #define IFP_02_UPLOAD_FLUSH 0x06 #define IFP_02_BATTERY 0x08 struct ifp_device; int ifp_control_send(struct ifp_device * dev, int command, int arg1, int arg2, int * r2); int ifp_control_send_bool(struct ifp_device * dev, int command, int arg1, int arg2, int * r2); //Logical primatives // //Parameter of type "char *" are either string or filename (named s and f //respectively) and are utf8 strings. "void *" buffers will be treated as //binary data and will not be modified. // //The parameter "n" immediately following string and data buffers is the //buffer size. int ifp_rmdir_nocheck(struct ifp_device * dev, const char * d); //returns 0 on success, and 1 on failure because file doesn't exist. int ifp_file_open(struct ifp_device * dev, const char * f); int ifp_file_open_new(struct ifp_device * dev, const char * f, int filesize); int ifp_file_close(struct ifp_device * dev); int ifp_file_size(struct ifp_device * dev); int ifp_file_download(struct ifp_device * dev, void * p, int n); int ifp_file_upload(struct ifp_device * dev, void * p, int n); int ifp_file_flush(struct ifp_device * dev); //returns 0 on success, 1 on failure because the dir doesn't exist. int ifp_dir_open(struct ifp_device * dev, const char * f); int ifp_dir_next(struct ifp_device * dev, void * s, int n, int mode); int ifp_dir_close(struct ifp_device * dev); int ifp_update_firmware_raw(struct ifp_device * dev); int ifp_ping(struct ifp_device * dev); //returns a raw bcd value. For human consumption, I suggest ("%x.%02x", r/0x100, r%0x100). // 'debug' here refers to the hardware--I believe this wasn't intended for use // in the production firmware. int ifp_dir_next_debug(struct ifp_device * dev, char * s, int n, int mode, int * dir, int * slot, int * size); //sizeof(p) == 512 bytes (0x0100) int ifp_get_fat_page(struct ifp_device * dev, int dir, int page, void * p, int n); int ifp_set_fat_page(struct ifp_device * dev, int dir, int page, void * p, int n); //"compound" or task-oriented functions. int ifp_count_subdirs(struct ifp_device * dev, const char * dirname); int ifp_copy_parent_string(char * p, const char * f, int n); static const int ifp_product_ums_bit = 0x0100; #define IFP_PRODUCT_IDs 8 extern int ifp_product_ids[IFP_PRODUCT_IDs]; extern char * ifp_product_strings[IFP_PRODUCT_IDs]; //Returns a negative number on error, 0 on success, and the number of //bytes written (if the whole block wasn't written). static inline int _ifp_set_buffer_size(struct ifp_device * dev, int n, int force) { int i = 0, allowed; if (dev->last_buffer_size != n || force) { i = ifp_control_send(dev, IFP_SET_BUFFER, n, 0, &allowed); if (allowed >= 0) { dev->last_buffer_size = allowed; } if (i == 1 && allowed == n) { return 0; } if (i == 1) { ifp_dbg("_ifp_set_buffer_size: SUCCESS But buffer size mismatch: try %d, return %d.", n, allowed); return(0); } } return i ? i : 0; } static inline int _ifp_file_download(struct ifp_device * dev, int bytes, int * actual) { int i; i = ifp_control_send(dev, IFP_FILE_DOWNLOAD, bytes, 0, NULL); if (actual) { *actual = i; } if (i < 0) { ifp_err_i(i, "error sending code to download block."); return i; } else if (i == bytes) { return 0; } else if (i > bytes) { ifp_err_i(i, "Something's wierd. The return value is larger than %d", bytes); return -1; } else if (i == 0) { ifp_wrn("warning: return value is 0 instead of %d, which is often a sign of corruption.", bytes); return 1; } else { //ifp_wrn("[_ifp_file_download] warning: got %d instead of %d.\n", i, bytes); return 0; } } #endif // IFP_PRIM_H ifpgui-1.0.0/libifp/userfile.c000755 001750 000144 00000077300 11403071470 014425 0ustar00000000 000000 /* * IRiver ifp supporting functions, a basic (primative) API. * $Id: userfile.c,v 1.4 2005/10/11 01:53:18 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ static const char rcsid[] = "$Id: "; #include #include #include #include #include #include #include #include #include "ifp.h" #include "ifp_os.h" #include "prim.h" //semi-constructor static struct ifp_transfer_status * init_progress( struct ifp_transfer_status * p, ifp_progress fn, void * fn_context) { if (fn == NULL) { return NULL; } else { p->batch_bytes = 0; p->batch_total = 0; p->file_bytes = 0; p->file_total = 0; p->file_name = NULL; p->files_count = 0; p->files_total = 1; p->is_batch = 0; p->reserved1 = fn; p->reserved2 = fn_context; p->reserved3 = NULL; return p; } } /** User callback can return 1 to cancel the transfer. This get translated * into IFP_ERR_USER_CANCEL. */ static inline int update_progress(struct ifp_transfer_status * p, int freshbytes) { int i = 0; if (p == NULL) { return 0; } else { ifp_progress fn = p->reserved1; p->file_bytes += freshbytes; p->batch_bytes += freshbytes; if (fn == NULL) { ifp_err("fn is NULL!"); i = -1; goto out; } i = fn(p->reserved2, p); if (i == 1) { i = IFP_ERR_USER_CANCEL; } ifp_err_expect(i, i==IFP_ERR_USER_CANCEL, out, "progress callback error\n"); } out: return i; } /** Returns -ENOENT if 'f' doesn't exist; -EACCES if 'f' is read-protected by the device; and IFP_ERR_USER_CANCEL is the callback requested a cancel. Also expect -ENOSPC, in case the local disc fills. */ int _ifp_read_stream_progress(struct ifp_device * dev, FILE *dst, const char *f, struct ifp_transfer_status * p) { int i = 0; int e = 0; unsigned char buf[IFP_BULK_BUFF_SIZE]; i = ifp_read_open(dev, f); ifp_err_expect(i, i==-ENOENT || i==-EACCES, out0, "opening file ifp:\\%s\n", f); if (p) { p->file_total = (int)ifp_read_size(dev); } while (!ifp_read_eof(dev)) { int j; i = ifp_read_data(dev, buf, IFP_BULK_BUFF_SIZE); if (i < 0){ e = i; //quiet on pipe errors if (!(i == -EIO && dev->download_pipe_errors > 0)) { ifp_err_i(i, "read data error on file ifp:\\%s\n", f); } goto out1; } else if (i == 0) { ifp_wrn("got 0 bytes.. should that happen? The reported " "filesize is %d and current pos is %d\n", (int)dev->filesize, (int)dev->current_offset); //done break; } j = fwrite(buf,1,i,dst); if (i != j) { e = errno > 0 ? -errno : -1; if (e != -ENOSPC) { ifp_wrn("error writing downloaded file: %d bytes written instead of %d. error = %d", j, i, e); } goto out1; } i = update_progress(p, j); ifp_err_expect(i, i==IFP_ERR_USER_CANCEL, out1, "progress callback error\n"); } out1: e = ifp_read_close(dev); if (e) { ifp_err_i(e, "close error on file ifp:\\%s\n", f); } out0: return e?e:i; } /** Returns -EEXIST, -ENOENT, -ENOSPC, IFP_ERR_BAD_FILENAME, IFP_ERR_USER_CANCEL */ static int _ifp_write_stream_progress(struct ifp_device * dev, FILE *src, int filesize, const char *f, struct ifp_transfer_status * p) { int i = 0; int e = 0; unsigned char buf[IFP_BULK_BUFF_SIZE]; i = ifp_write_open(dev, f, filesize); ifp_err_expect(i, i==-ENOENT || i==-EEXIST || i==-ENOSPC || i==IFP_ERR_BAD_FILENAME, out0, "opening new file ifp:\\%s", f); while (filesize > 0) { int step; int j; step = min(filesize,IFP_BULK_BUFF_SIZE); j = fread(buf,1,step,src); if (j <= 0 || j > step) { ifp_err("Read error from src. Got only %d bytes instead of %d as requested.", j, step); goto out1; } filesize -= j; i = ifp_write_data(dev, buf, j); ifp_err_jump(i, out1, "write data error on file ifp:\\%s", f); i = update_progress(p, j); ifp_err_expect(i, i==IFP_ERR_USER_CANCEL, out1, "progress callback error\n"); } out1: e = ifp_write_close(dev); if (e) { ifp_err_i(e, "close error on file ifp:\\%s", f); } if (i == IFP_ERR_USER_CANCEL) { e = ifp_delete(dev, f); if (e) { ifp_err_i(e, "error attempting to delete parcially written file ifp:\\%s", f); } } out0: return e?e:i; } static int old_style_progress(void * context, struct ifp_transfer_status * p) { int i = 0; int(*fn)(void*,int); fn = NULL; if (p == NULL) { ifp_err("p is NULL!"); i = -1; goto err; } fn = p->reserved3; if (fn == NULL) { ifp_err("fn is NULL!"); i = -1; goto err; } i = fn(context, p->file_bytes); ifp_err_expect(i, i==1, err, "err from progress callback"); err: return i; } static struct ifp_transfer_status * init_progress_cludge( struct ifp_transfer_status * p, int(*fn)(void*,int), void * context) { if (fn == NULL) { return NULL; } else { p = init_progress(p, old_style_progress, context); if (p == NULL) { //shouldn't happen ifp_err("shouldn't be here"); return NULL; } p->reserved3 = fn; return p; } } /** \brief Downloads a file; includes a hook for a progress metre. Reads the file 'f' from the device and saves it in 'dst'. \param f name of the remote file we're downloading \param dst where the data will be saved \param progress Optional. If given, this function will be called occationally so an application can update a progress metre. (For example.) \param context Context for the progress metre. (Safe to leave NULL.) (Available only in userland.) Returns -ENOENT if 'f' doesn't exist; -EACCES if 'f' is read-protected by the device; -ENOSPC; and ::IFP_ERR_USER_CANCEL if the callback requested the transfer cancelled. (Available only in userland.) */ int ifp_read_file_progress(struct ifp_device * dev, FILE *dst, const char *f, int(*fn)(void*,int), void * fn_context) { int i = 0; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; p = init_progress_cludge(&progress, fn, fn_context); i = _ifp_read_stream_progress(dev, dst, f, p); ifp_err_expect(i, i==-ENOENT||i==-EACCES||i==-ENOSPC||i==IFP_ERR_USER_CANCEL, err, "error reading into stream"); err: return i; } IFP_EXPORT(ifp_read_file_progress); /** \brief Uploads a file; includes a hook for a progress metre. Creates a new file 'f' on the device and populates it with data from 'src'. Filesize is the number of bytes to be uploaded from 'src'. (Note: it appears the device might not need to know the number of bytes in a file ahead time. The current implementation doesn't support this, but if you don't have access to the filesize ahead of time, you might be able to hack libifp to let you do it anyways.) \param src data to be uploaded \param filesize number of bytes to copy from src \param f name of the file to be created \param progress Optional. If given, this function will be called occationally so an application can update its progress metre. \param context Context for the progress metre. (Safe to leave NULL.) Returns -EEXIST, -ENOENT, -ENOSPC, ::IFP_ERR_BAD_FILENAME, ::IFP_ERR_USER_CANCEL (Available only in userland.) */ int ifp_write_file_progress(struct ifp_device * dev, FILE *src, int filesize, const char *f, int(*fn)(void*,int), void * fn_context) { int i = 0; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; p = init_progress_cludge(&progress, fn, fn_context); i = _ifp_write_stream_progress(dev, src, filesize, f, p); ifp_err_expect(i, i==-EEXIST||i==-ENOENT||i==-ENOSPC ||i==IFP_ERR_BAD_FILENAME||i==IFP_ERR_USER_CANCEL, err, "error reading into stream"); err: return i; } IFP_EXPORT(ifp_write_file_progress); /** Returns -ENOENT, -EACCES, -ENOSPC, IFP_ERR_USER_CANCEL */ static int _download_file(struct ifp_device * dev, const char * remotefile, const char * localfile, struct ifp_transfer_status * status) { int i=0; FILE * f = NULL; int tries = 8; if (status) { status->file_name = remotefile; status->file_bytes = 0; } if (dev->download_pipe_errors > 0) { ifp_dbg("resetting pipe count to 0. Was %d", dev->download_pipe_errors); } dev->download_pipe_errors = 0; f = fopen(localfile, "wb"); if (f == NULL) { ifp_err("could not open '%s' for writing", localfile); return -EIO; } //Note: this is a work-around for the EPIPE bug. We can tell a //transfer failed because of that bug because i==-EIO and the //download_pipe_errors counter is non-zero. do { if (dev->download_pipe_errors > 0) { dev->download_pipe_errors = 0; if (i == -EIO) { //last loop failed because of a pipe error. i = fseek(f, 0, SEEK_SET); if (i) { i = -errno; ifp_err_i(i, "seek failed to rewind file"); goto err; } if (status) { status->batch_bytes -= status->file_bytes; status->file_bytes = 0; } } } i = _ifp_read_stream_progress(dev, f, remotefile, status); //quiet on pipe errors if (!(i == -EIO && dev->download_pipe_errors > 0)) { ifp_err_expect(i, i==-ENOENT||i==-EACCES||i==-ENOSPC||i==IFP_ERR_USER_CANCEL, err, "problem reading.. ifp:\\%s", remotefile); } else { //ifp_dbg("retrying"); } tries--; } while (i==-EIO && dev->download_pipe_errors > 0 && tries > 0); if (tries == 0 && i==-EIO) { ifp_err("Download failed because of the pipe bug. (I tried several times before giving up.)"); } fclose(f); f = NULL; return i; err: fclose(f); f = NULL; if (remove(localfile)) { ifp_err("couldn't remove %s", localfile); } return i; } /** Returns -EEXIST, -ENOENT, -ENOSPC, IFP_ERR_BAD_FILENAME, or IFP_ERR_USER_CANCEL. */ static int _upload_file(struct ifp_device * dev, const char * localfile, const char * remotefile, size_t filesize, struct ifp_transfer_status * status) { int i; FILE * f = NULL; f = fopen(localfile, "rb"); if (f == NULL) { ifp_err("could not open '%s' for reading", localfile); return -ENOENT; } if (status) { status->file_name = remotefile; status->file_bytes = 0; status->file_total = (int)filesize; } i = _ifp_write_stream_progress(dev, f, (int)filesize, remotefile, status); ifp_err_expect(i, i==-ENOENT||i==-EEXIST||i==-ENOSPC ||i==IFP_ERR_BAD_FILENAME||i==IFP_ERR_USER_CANCEL, err, "problem reading.."); err: fclose(f); f = NULL; return i; } /** \brief Downloads 'remotefile' and saves it directly on the filesystem as * 'localfile'. * * The progress callback function 'fn' and its context pointer are optional. * See ::ifp_progress and ::ifp_transfer_status for more information. * * Returns -ENOENT, -EACCES, -ENOSPC and ::IFP_ERR_USER_CANCEL * (Available only in userland.) * * Note: There is currently a 'EPIPE' bug in the wild that is relatively rare * but causes file corruption during download. ifp_download_file and ifp_download_dir * detect and recover from it automatically, but you might see the progress * numbers "jump backwards" occasionally. */ int ifp_download_file(struct ifp_device * dev, const char * remotefile, const char * localfile, ifp_progress fn, void * fn_context) { int i = 0; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; p = init_progress(&progress, fn, fn_context); i = _download_file(dev, remotefile, localfile, p); ifp_err_expect(i, i==-ENOENT||i==-EACCES||i==-ENOSPC||i==IFP_ERR_USER_CANCEL, err, "problem reading.."); err: return i; } IFP_EXPORT(ifp_download_file); /** \brief Uploads 'localfile' from the filesystem onto the device as * 'remotefile'. * * The progress callback function 'fn' and its context pointer are optional. * See ::ifp_progress and ::ifp_transfer_status for more information. * * Returns -EEXIST, -ENOENT, -ENOSPC, ::IFP_ERR_BAD_FILENAME, ::IFP_ERR_USER_CANCEL (Available only in userland.) */ int ifp_upload_file(struct ifp_device * dev, const char * localfile, const char * remotefile, ifp_progress fn, void * fn_context) { int i = 0; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; struct stat st; p = init_progress(&progress, fn, fn_context); i = stat(localfile, &st); if (i) { i = errno; ifp_err_expect(i, i==-ENOENT, err, "couldn't stat file '%s'", localfile); } i = _upload_file(dev, localfile, remotefile, st.st_size, p); ifp_err_expect(i, i==-ENOENT||i==-EEXIST||i==-ENOSPC ||i==IFP_ERR_BAD_FILENAME||i==IFP_ERR_USER_CANCEL, err, "problem writing.."); err: return i; } IFP_EXPORT(ifp_upload_file); typedef struct dir_entry { struct dir_entry *next; char * name; int type; int filesize; } dir_entry; /** inserts 'i' before 'n'. 'p' is the previous field */ static int ll_insert(dir_entry **p, dir_entry *n, dir_entry *i) { i->next = n; if (p) { *p = i; } return 0; } #if 0 static int ll_insert_after(dir_entry *n, dir_entry *i) { ll_insert(&(n->next), n, i); return 0; } #endif static dir_entry * ll_pop_head(dir_entry ** l) { dir_entry * i = *l; *l = i->next; return i; } /** Adds entry to end of linked list, returns new entry. '*l' will be set to * the new entry. */ static dir_entry * queue_dentry(dir_entry ** p, dir_entry * n, const char *name, int ftype, int fsize) { int i = 0; dir_entry *d; if (!p) return NULL; if ( (d = malloc(sizeof(dir_entry))) == NULL) { return NULL; } //printf("======================== Pushing dir %s\n",name); d->name = strdup(name); d->next = NULL; d->type = ftype; d->filesize = fsize; i = ll_insert(p, n, d); if (i) { printf("[queue_dentry] error doing something %d\n",i); return NULL; } return d; } static int dequeue_dentry(dir_entry ** l, char *name, int n, int * ftype, int * fsize) { dir_entry *i; if (!l) return -1; if (*l) { //printf("========================= Poping dir %s\n",name); i = ll_pop_head(l); strncpy(name,i->name, n); *ftype = i->type; *fsize = i->filesize; free(i->name); free(i); i = NULL; //bak = bak->next; //*l = bak; return 1; } else { return 0; } } struct recursive_context { dir_entry **prev; dir_entry *next; }; static int recursive_callback(void * context, int type, const char * f, int filesize) { struct recursive_context * cfc = context; int i = 0; dir_entry * foo = NULL; foo = queue_dentry(cfc->prev, cfc->next, f, type, filesize); cfc->prev = &(foo->next); return i; } struct treewalk_state { struct ifp_device * dev; char pathbuff[IFP_MAXPATHLEN]; dir_entry * q; char * remote; char * rp; int rn; struct ifp_treewalk_entry entry; }; /** \brief Recursively walk a remote directory. (Interface similar to "fts.h".) * * Start a treewalk for the 'directory' on the device. The handle for this * session is placed at *handle; this handle is freed by calling ::ifp_treewalk_close. * * 'dev' won't be left in a "special state" after calling treewalk-family functions. * Likewise, please don't leave dev in a "special state" before calling ::ifp_treewalk_open * or ::ifp_treewalk_next. * * Returns -ENOENT if the directory doesn't exist. * */ int ifp_treewalk_open(struct ifp_device * dev, const char * directory, void ** handle) { struct treewalk_state * tws = NULL; int len; int i = 0; if (handle == NULL) { i = -1; ifp_err("handle shouldn't be null"); goto err; } tws = (struct treewalk_state *)malloc(sizeof(struct treewalk_state)); if (tws == NULL) { i = -ENOMEM; ifp_err("out of memory"); goto err; } i = ifp_is_dir(dev, directory); if (i == 0) { i = -ENOENT; } else if (i == 1) { //good i = 0; } ifp_err_expect(i, i==-ENOENT, err, "problem checking ifp:\\%s", directory); tws->dev = dev; tws->q = NULL; tws->entry.path = tws->pathbuff; tws->entry.type = IFP_WALK_NONE; strncpy(tws->pathbuff, directory, sizeof(tws->pathbuff)); len = strlen(directory); tws->rp = tws->pathbuff + len; tws->rn = sizeof(tws->pathbuff) - len; queue_dentry(&(tws->q), tws->q, tws->rp, IFP_WALK_DIR_PRE, 0); err: if (i == 0) { *handle = tws; } else if (tws != NULL) { free(tws); tws = NULL; } return i; } IFP_EXPORT(ifp_treewalk_open); /** \brief Returns the next file or directory in a treewalk. * * The structure returned is valid until the next ::ifp_treewalk_next or * ::ifp_treewalk_close function call. See ::ifp_treewalk_entry for details * about the fields. * * Likewise, please don't leave 'dev' in a "special state" before calling ::ifp_treewalk_next. * * NULL is returned after the last entry. */ struct ifp_treewalk_entry * ifp_treewalk_next(void * tws_p) { struct treewalk_state * tws = tws_p; struct ifp_treewalk_entry * r = NULL; int n; int i = 0; r = &tws->entry; //Check if the last item was a directory.. because we only load those //at the last possible minute. if (r->type == IFP_WALK_DIR_PRE) { struct recursive_context ctx; ctx.next = queue_dentry(&tws->q, tws->q, tws->rp, IFP_WALK_DIR_POST, tws->entry.filesize); ctx.prev = &tws->q; //printf("[_wrt] about to list 'ifp:\\%s'\n", pathbuff); i = ifp_list_dirs(tws->dev, tws->pathbuff, recursive_callback, &ctx); if (i) { ifp_err_i(i, "couldn't get directory list for 'ifp:\\%s'", tws->pathbuff); return NULL; } //append "/" and "\\" to the paths for future use tws->rp += r->namelen; tws->rn -= r->namelen; if (tws->rp - tws->pathbuff > 0 && tws->rp[-1] != '\\') { tws->rp[0] = '\\'; tws->rp++; tws->rn--; } tws->rp[0] = '\0'; } //Read to process the next entry.. but if the queue is empty, there isn't one. if (tws->q == NULL) { //ifp_err("queue is empty"); return NULL; } //copy entry name to paths i = dequeue_dentry(&tws->q, tws->rp, tws->rn, &r->type, &r->filesize); if (i<=0) { ifp_err_i(i, "error dequing"); return NULL; } i = 0; n = strlen(tws->rp); switch(r->type) { case IFP_WALK_DIR_POST: //printf("[_wrt] dir_post rn=%d n=%d\n", rn, n); if ((tws->rp - tws->pathbuff-1) > 0) { tws->rp--; tws->rn++; } tws->rp[0] = '\0'; tws->rp -= n; tws->rn += n; //fallthrough case IFP_WALK_FILE: case IFP_WALK_DIR_PRE: default: r->name = tws->rp; r->namelen = n; r->pathlen = sizeof(tws->pathbuff) - tws->rn + n; break; } //ifp_err("normal exit, r=%p, r=%p, i=%d", r, i==0 ? r : NULL, i); return i==0 ? r : NULL; } IFP_EXPORT(ifp_treewalk_next); /** \brief Releases the resources used in a treewalk. * * Must be called after each successful call of ::ifp_treewalk_open. */ int ifp_treewalk_close(void * tws_p) { struct treewalk_state * tws = tws_p; int i = 0; //empty and free remaining items while (tws->q) { int a1, a2; int e; e = dequeue_dentry(&tws->q, tws->rp, tws->rn, &a1, &a2); if (e <= 0) { ifp_err_i(e, "problem cleaning up"); if (i == 0) { i = e; } } } free(tws); tws = tws_p = NULL; return i; } IFP_EXPORT(ifp_treewalk_close); /** \brief Deletes the directory 'f', its files and subdirectories. (Think of 'rm -Rf'.) * * Will return -ENOENT if 'f' doesn't exist or isn't a directory. * * (Available only in userland, at this time.) */ int ifp_delete_dir_recursive(struct ifp_device * dev, const char * f) { void * tw = NULL; struct ifp_treewalk_entry * r = NULL; int i = 0; int e; i = ifp_treewalk_open(dev, f, &tw); ifp_err_expect(i, i==-ENOENT, err_0, "couldn't open directory ifp:\\%s", f); //ifp_dbg("[iddr] opened ifp:\\%s", f); while(i == 0 && ((r = ifp_treewalk_next(tw)) != NULL)) { switch(r->type) { case IFP_WALK_FILE: //ifp_dbg("about to remove file ifp:\\%s", r->path); i = ifp_delete(dev, r->path); ifp_err_jump(i, err_1, "couldn't delete file ifp:\\%s", r->path); break; case IFP_WALK_DIR_POST: //ifp_dbg("about to remove dir ifp:\\%s", r->path); ifp_rmdir(dev, r->path); ifp_err_jump(i, err_1, "couldn't delete dir ifp:\\%s", r->path); break; default: break; } } err_1: e = ifp_treewalk_close(tw); if (e) { ifp_err_i(e, "error closing treewalk"); i = i ? i : e; } err_0: return i; } IFP_EXPORT(ifp_delete_dir_recursive); /** Returns the size of all 'f's children. * * Can return -ENOENT. */ static int remote_treesize(struct ifp_device * dev, const char * f, struct ifp_transfer_status * p) { void * tw = NULL; struct ifp_treewalk_entry * r = NULL; int i = 0; int e; long bytes = 0; int files = 0; i = ifp_treewalk_open(dev, f, &tw); ifp_err_expect(i, i==-ENOENT, err_0, "couldn't open directory ifp:\\%s", f); //ifp_dbg("[iddr] opened ifp:\\%s", f); while(i == 0 && ((r = ifp_treewalk_next(tw)) != NULL)) { if (r->type == IFP_WALK_FILE) { //ifp_dbg("%d bytes used by ifp:\\%s", r->filesize, r->path); bytes += r->filesize; files++; } } e = ifp_treewalk_close(tw); if (e) { ifp_err_i(e, "error closing treewalk"); i = i ? i : e; } if (i == 0) { p->batch_total = bytes; p->files_total = files; } err_0: return i; } /** Returns the size of all 'f's children. * * Can return -ENOENT. */ static int local_treesize(const char * f, struct ifp_transfer_status * p) { FTS * tw = NULL; FTSENT * r = NULL; char *argv[2] = {(char*)f, NULL}; int i = 0; int e; long bytes = 0; int files = 0; tw = fts_open(argv, FTS_LOGICAL | FTS_NOCHDIR, NULL); if (tw == NULL) { ifp_err("couldn't open %s", f); goto err_0; } //ifp_dbg("[iddr] opened ifp:\\%s", f); while(i == 0 && ((r = fts_read(tw)) != NULL) && r->fts_info != FTS_ERR) { if (r->fts_info == FTS_F) { //ifp_dbg("%d bytes used by ifp:\\%s", r->filesize, r->path); bytes += r->fts_statp->st_size; files++; } } if (r && r->fts_info == FTS_ERR) { i = r->fts_errno; ifp_err_i(i, "error fetching directory entry"); } e = fts_close(tw); if (e) { ifp_err_i(e, "error closing fts"); i = i ? i : e; } if (i == 0) { p->batch_total = bytes; p->files_total = files; } err_0: return i; } /** * * Returns -ENOENT, -EACCES, -ENOSPC IFP_ERR_USER_CANCEL * */ static int _ifp_download_dir(struct ifp_device * dev, const char * remotedir, const char * localdir, struct ifp_transfer_status * p) { char path[256]; void * tw = NULL; struct ifp_treewalk_entry * r = NULL; int n,e,i = 0; strncpy(path, localdir, sizeof(path)); n = strlen(path); i = ifp_treewalk_open(dev, remotedir, &tw); ifp_err_expect(i, i==-ENOENT, err_0, "couldn't open directory ifp:\\%s", remotedir); //ifp_dbg("[iddr] opened ifp:\\%s", f); while(i == 0 && ((r = ifp_treewalk_next(tw)) != NULL)) { //maintain 'path' switch(r->type) { case IFP_WALK_FILE: case IFP_WALK_DIR_PRE: strncpy(path + n, r->name, sizeof(path) - n); break; case IFP_WALK_DIR_POST: if (n > 1 && path[n-1] == '/') { n--; path[n]='\0'; } n -= r->namelen; break; } //do the 'action' switch(r->type) { case IFP_WALK_DIR_PRE: //ifp_dbg("pretending to mkdir %s", path); i = mkdir(path, (S_IRWXU | S_IRWXG | S_IRWXO)); i = i ? errno : 0; ifp_err_jump(i, err_1, "couldn't create %s", path); break; case IFP_WALK_FILE: //ifp_dbg("pretending to create %s", path); if (p) { p->file_bytes = 0; p->file_total = r->filesize; } i = _download_file(dev, r->path, path, p); ifp_err_expect(i, i==-ENOENT||i==-EACCES||i==-ENOSPC||i==IFP_ERR_USER_CANCEL, err_1, "couldn't download file ifp:\\%s", r->path); if (p) p->files_count++; break; } //maintain 'path' if (r->type == IFP_WALK_DIR_PRE) { n += r->namelen; //append '/' to path if needed if (path[n-1] != '/') { n++; path[n-1] = '/'; path[n] = '\0'; } } } err_1: e = ifp_treewalk_close(tw); if (e) { ifp_err_i(e, "error closing treewalk"); i = i ? i : e; } err_0: return i; } //int file_compare_fts(const FTSENT * const*p1, const FTSENT * const*p2) int file_compare_fts(const FTSENT **p1, const FTSENT **p2) { if (p1 == NULL) { ifp_err("p1 shouldn't be NULL"); return 0; } if (p2 == NULL) { ifp_err("p2 shouldn't be NULL"); return 0; } if (*p1 == NULL) { ifp_err("*p1 shouldn't be NULL"); return 0; } if (*p2 == NULL) { ifp_err("*p2 shouldn't be NULL"); return 0; } return strcmp((*p1)->fts_name, (*p2)->fts_name); } /** * * Returns -EEXIST, -ENOENT, -ENOSPC, IFP_ERR_BAD_FILENAME, IFP_ERR_USER_CANCEL * FIXME: handle invalid filenames from local filesystem with more grace */ static int _ifp_upload_dir(struct ifp_device * dev, const char * localdir, const char * remotedir, struct ifp_transfer_status * p) { char path[256]; char *argv[2] = {(char*)localdir, NULL}; FTS * tw = NULL; FTSENT * r = NULL; int e, n, i = 0; strncpy(path, remotedir, sizeof(path)); n = strlen(path); tw = fts_open(argv, FTS_LOGICAL | FTS_NOCHDIR, file_compare_fts); if (tw == NULL) { ifp_err("couldn't open %s", localdir); goto err_0; } while(i == 0 && ((r = fts_read(tw)) != NULL) && r->fts_info != FTS_ERR) { //maintain 'path' switch(r->fts_info) { case FTS_F: case FTS_D: //ignore the root node if (r->fts_level != 0) { strncpy(path + n, r->fts_name, sizeof(path) - n); } break; case FTS_DP: //it doesn't matter if the root node triggers this if (n > 1 && path[n-1] == '\\') { n--; path[n]='\0'; } n -= r->fts_namelen; break; } //do the 'action' switch(r->fts_info) { case FTS_D: //ifp_dbg("mkdir ifp:\\%s", path); i = ifp_mkdir(dev, path); ifp_err_jump(i, err_1, "couldn't create ifp:\\%s", path); break; case FTS_F: if (p) { p->file_bytes = 0; p->file_total = r->fts_statp->st_size; } i = _upload_file(dev, r->fts_path, path, r->fts_statp->st_size, p); ifp_err_expect(i, i==-EEXIST||i==-ENOENT||i==-ENOSPC ||i==IFP_ERR_BAD_FILENAME||i==IFP_ERR_USER_CANCEL, err_1, "couldn't download file ifp:\\%s", r->fts_path); if (p) p->files_count++; break; } //maintain 'path' if (r->fts_info == FTS_D) { //matches the strncpy above if (r->fts_level != 0) { n += r->fts_namelen; } //Yes, it's ok to do this to the root node //append '\\' to path if needed if (path[n-1] != '\\') { n++; path[n-1] = '\\'; path[n] = '\0'; } } } if (r && r->fts_info == FTS_ERR) { i = r->fts_errno; ifp_err_i(i, "error fetching directory entry"); } err_1: e = fts_close(tw); if (e) { ifp_err_i(e, "error closing fts"); i = i ? i : e; } err_0: return i; } /** \brief Downloads the contents of 'remotedir' (including all subdirectories) and saves it * as 'localdir'. * * Note that 'localdir' must not allready exist. Example: * suppose localdir was '/tmp/tunes/tame' and remotedir was '\\classical\\junk'. * The directory '/tmp/tunes/tame' will be created and the file * '\\classical\\junk\\buz\\fud.ogg' will be copied as '/tmp/tunes/tame/buz/fud.ogg' * * The progress callback function 'fn' and its context pointer are optional. * See ::ifp_progress and ::ifp_transfer_status for more information. * * Returns -ENOENT, -EACCES, -ENOSPC ::IFP_ERR_USER_CANCEL * * (Available only in userland.) * * Note: There is currently a 'EPIPE' bug in the wild that is relatively rare * but causes file corruption during download. ifp_download_file and ifp_download_dir * detect and recover from it automatically, but you might see the progress * numbers "jump backwards" occasionally. */ int ifp_download_dir(struct ifp_device * dev, const char * remotedir, const char * localdir, ifp_progress fn, void * fn_context) { int i = 0; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; p = init_progress(&progress, fn, fn_context); if (p) { p->is_batch = 1; i = remote_treesize(dev, remotedir, p); ifp_err_expect(i, i==-ENOENT, err, "couldn't open directory ifp:\\%s", remotedir); //ifp_dbg("The total transfer size is expected to be %d bytes", // (int)progress.batch_total); } i = _ifp_download_dir(dev, remotedir, localdir, p); ifp_err_expect(i, i==-ENOENT||i==-EACCES||i==-ENOSPC||i==IFP_ERR_USER_CANCEL, err, "couldn't download directory ifp:\\%s", remotedir); err: return i; } IFP_EXPORT(ifp_download_dir); /** \brief Uploads the contents of 'localdir' (including all subdirectories) to the * device as 'remotedir'. * * Note that 'remotedir' must not exist on the remote device. Example: * suppose localdir was '/tmp/tunes/tame' and remotedir was '\\classical\\junk'. * The directory '\\classical\\junk' will be created and the file * '/tmp/tunes/tame/buz/fud.ogg' will be copied as * '\\classical\\junk\\buz\\fud.ogg'. * * The progress callback function 'fn' and its context pointer are optional. * See ::ifp_progress and ::ifp_transfer_status for more information. * * Returns -EEXIST, -ENOENT, -ENOSPC, ::IFP_ERR_BAD_FILENAME, or ::IFP_ERR_USER_CANCEL. * FIXME: handle invalid filenames from local filesystem with more grace * * (Available only in userland.) */ int ifp_upload_dir(struct ifp_device * dev, const char * localdir, const char * remotedir, ifp_progress fn, void * fn_context) { int i = 0; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; p = init_progress(&progress, fn, fn_context); if (p) { p->is_batch = 1; i = local_treesize(localdir, p); ifp_err_expect(i, i==-ENOENT, err, "couldn't open directory %s", localdir); //ifp_dbg("The total transfer size is expected to be %d bytes", // (int)progress.batch_total); } i = _ifp_upload_dir(dev, localdir, remotedir, p); ifp_err_expect(i, i==-EEXIST||i==-ENOENT||i==-ENOSPC||i==IFP_ERR_BAD_FILENAME ||i==IFP_ERR_USER_CANCEL, err, "coudln't upload ifp:\\%s", remotedir); err: return i; } IFP_EXPORT(ifp_upload_dir); #define FIRMWARE_HEADER_SIZE 4 /** \brief Upgrades the firmware. * * This is much like a file upload, except: the filename on the local disk must * be in the format "IFP-?XXT.HEX", "IFP-1XXTC.HEX" or "N10.HEX". The progress * meter only tracks the firmware upload. The flash-upgrading itself and * reboot take extra time we can't predict. * * Immediately after calling ifp_update_firmware, the caller should release * 'dev', and wait a healthy ammount of time (10 or more seconds) before trying * to reconnect. During this time, you'll see the message "upgrading firmware * please don't touch" on the device, after which the device will shutdown: * user will likely have to turn it back on themselves. * * I welcome suggestions and/or code on how to help monitor the device status * during a firmware upgrade. */ int ifp_update_firmware(struct ifp_device *dev, const char * localfile, ifp_progress fn, void * fn_context) { char magic_header_original[FIRMWARE_HEADER_SIZE] = {0x39, 0xb0, 0x5d, 0xed}; char magic_header_n10[FIRMWARE_HEADER_SIZE] = {0x37, 0x13, 0x0d, 0xda}; FILE *fp; int i = 0; char buf[FIRMWARE_HEADER_SIZE]; char * checkdata = NULL; char remotename[20]; const char *basename; struct ifp_transfer_status progress; struct ifp_transfer_status * p = NULL; struct stat st; i = stat(localfile, &st); if (i) { i = errno; ifp_err_expect(i, i==-ENOENT, err0, "couldn't stat file '%s'", localfile); } p = init_progress(&progress, fn, fn_context); basename = strrchr(localfile, '/'); if (basename) { basename++; } else { //no '/' basename = localfile; } if (dev->model == IFP_N10) { //eg "N10.HEX" if (strncmp(basename, "N10", 3) != 0) { ifp_err("Firmware filename must be \"N10.HEX\"."); return -1; } checkdata = magic_header_n10; } else { //eg "IFP-5XXT.HEX" if (strncmp(basename, "IFP-", 4) != 0) { ifp_err("Firmware filename must be set \"IFP-?XXT.HEX\" or \"IFP-1XXTC.HEX\"."); return -1; } checkdata = magic_header_original; } if ( (fp = fopen(localfile, "r")) == NULL) { //ifp_dbg("invalid firmware file(too short!)."); return errno; } if ( fread(buf, sizeof(unsigned char), sizeof(checkdata), fp) < FIRMWARE_HEADER_SIZE) { ifp_err("invalid firmware file(too short!)."); fclose(fp); return -1; } rewind(fp); // DO NOT REMOVE IT! if (strncmp(buf, checkdata, FIRMWARE_HEADER_SIZE) != 0) { fprintf(stderr, "ifp firmupdate: Invalid format firmware file.\n"); fclose(fp); return -1; } remotename[0] = '\\'; strncpy(remotename+1, basename, sizeof(remotename) - 1); if ( (i = _ifp_write_stream_progress(dev, fp, (int)st.st_size, remotename, p))) { ifp_err_i(i, "Failed firmware upload."); fclose(fp); return i; } fclose(fp); i = ifp_update_firmware_raw(dev); ifp_err_jump(i, err0, "firmware update code failed"); err0: return i; } ifpgui-1.0.0/libifp/ifp_os_libusb.c000755 001750 000144 00000022465 11403074337 015435 0ustar00000000 000000 /* * userland + libusb specific functions * $Id: ifp_os_libusb.c,v 1.2 2005/08/25 04:10:54 jim-campbell Exp $ * * Copyright (C) 2004 Geoff Oakham */ #include #include #include #include #include #include #include #include "ifp.h" #include "ifp_os.h" #include "prim.h" static int local_iconv(char const * i_type, char const * o_type, char * ob, int max_o, const char * ib, int max_i) { int i=0, e=0; char * ibb = (char *)ib; char * obb = (char *)ob; size_t i_n = max_i; size_t o_n = max_o; iconv_t ICONV; size_t r; if (i_type == NULL) { ifp_err("itype is NULL"); i = -EINVAL; goto err; } if (o_type == NULL) { ifp_err("otype is NULL"); i = -EINVAL; goto err; } ICONV = iconv_open(o_type, i_type); if (ICONV == (iconv_t)-1) { i = -errno; if(i==-EINVAL) { ifp_err_i(i, "conversion not supported by system"); } else { ifp_err_i(i, "couldn't open conversion handle"); } goto err; } r = iconv(ICONV, &ibb, &i_n, &obb, &o_n); if (r == (size_t)-1) { i = -errno; ifp_err_i(i, "problem converting, i_n is %ld, o_n is %ld, r = %ld", i_n, o_n, r); goto err2; } err2: e = iconv_close(ICONV); if (e) { e = -errno; ifp_err_i(e, "couldn't close conversion"); i = i?i:e; } err: return i; } int ifp_locale_to_utf16(char * ob, int max_o, const char * ib, int max_i) { int i; i = local_iconv(nl_langinfo(CODESET), "UTF-16LE", ob, max_o, ib, max_i); ifp_err_jump(i, err, "conversion failed"); err: return i; } static int utf16_sizeof(uint16_t * data, int max) { int i=0, j; for (j=0; j!=max && i==0; j++) { if (data[j] == 0) { return j; } } return max; } int ifp_utf16_to_locale(char * ob, int max_o, const char * ib, int max_i) { int i; int n; n = utf16_sizeof((uint16_t *)ib, max_i/sizeof(uint16_t)); i = local_iconv("UTF-16LE", nl_langinfo(CODESET), ob, max_o, ib, (n+1)*sizeof(uint16_t)); //i = local_iconv("UTF-16LE", nl_langinfo(CODESET), ob, max_o, ib, max_i); ifp_err_jump(i, err, "conversion failed"); err: return i; } int ifp_os_sleep(int ms) { struct timespec ts; ts.tv_sec = ms / 1000; ts.tv_nsec = (ms % 1000)*1000000; return nanosleep(&ts, NULL); } #define MAX_TRIES 8 int ifp_os_control_send(struct ifp_device * dev, int command, int arg1, int arg2, int * r1, int * r2) { struct libusb_device_handle * usbdev = dev->device; uint8_t ctl[8]; int c_size; int i; int max_try = MAX_TRIES; IFP_BUG_ON(r1 == NULL); c_size = r2 ? 8 : 4; //usb PIPE/stall error detection and correction. // // AFAIK, only Linux is affected by this bug, so I think it's important // that the code get really noisy if this happens on another platform. // (Hence the ifdefs.) do { i = libusb_control_transfer(usbdev, IFP_REQ_TYPE, command, arg1, arg2, ctl, c_size, IFP_TIMEOUT); max_try--; if (i == -EPIPE) { #ifdef linux if (command != IFP_FILE_DOWNLOAD || max_try != (MAX_TRIES - 1)) { #endif ifp_err("found an EPIPE error not previously documented. " "command=%02x try=%d", command, MAX_TRIES - max_try); #ifdef linux } if (command == IFP_FILE_DOWNLOAD) { dev->download_pipe_errors++; } #endif ifp_os_sleep(100); //I'm still not convienced this helps anything } } while(i == -EPIPE && max_try > 0); if (i < 0) { ifp_err_i(i, "error %s ifp control code the command %0x (%d, %d)." " ctl[%d] Returned %d.", "sending", command, arg1, arg2, c_size, i); return i; } else if (i != c_size) { if (command == IFP_FILE_DOWNLOAD) { dev->alt_readcount++; } ifp_err_i(i, "warning: unexpected error value.. I expected %d.", c_size); } else { if (command == IFP_FILE_DOWNLOAD) { dev->alt_readcount++; } i = 0; } if (r2) { *r2 = ifp_os_le32_to_cpup(ctl + 4); } *r1 = ifp_os_le32_to_cpup(ctl); return i; } int ifp_os_push(struct ifp_device * dev, void * p, int n) { int i = 0; int actual_length; if (dev->bulk_to & 0x80) { /* libusb-0.1 on BSD strangely fix up a write request to endpoint * 0x81 to be to endpoint 0x01. do the same thing here, but * warn about this silly behaviour. */ ifp_wrn("endpoint %x has excessive IN direction bit, fixing", dev->bulk_to); dev->bulk_to &= ~0x80; } i = libusb_bulk_transfer(dev->device, dev->bulk_to, p, n, &actual_length, IFP_TIMEOUT); if (i == 0 || (i == LIBUSB_ERROR_TIMEOUT && actual_length > 0)) i = actual_length; if (i < 0) { ifp_err_i(i, "usb_bulk_msg failed"); return i; } else if (i != n) { ifp_wrn(" usb_bulk_msg wrote %d bytes instead of %d.", i, n); } return 0; } int ifp_os_pop(struct ifp_device * dev, void * p, int n) { int i = 0; int actual_length; memset(p, 0, n); if (!(dev->bulk_from & 0x80)) { /* libusb-0.1 will strangely fix up a read request from endpoint * 0x01 to be from endpoint 0x81. do the same thing here, but * warn about this silly behaviour. */ ifp_wrn("endpoint %x is missing IN direction bit, fixing", dev->bulk_from); dev->bulk_from |= 0x80; } //ifp_wrn("endpoint %x size %d timeout %d", dev->bulk_from, n, IFP_TIMEOUT); i = libusb_bulk_transfer(dev->device, dev->bulk_from, p, n, &actual_length, IFP_TIMEOUT); /* if we timed out but did transfer some data, report as successful short * read. FIXME: is this how libusb-0.1 works? */ if (i == 0 || (i == LIBUSB_ERROR_TIMEOUT && actual_length > 0)) i =actual_length; if (i < 0) { ifp_err_i(i, "usb_bulk_msg failed"); return i; } else if (i != n) { ifp_wrn("read in %d bytes instead of %d",i,n); } return 0; } int ifp_os_init(struct ifp_device * dev, void * device_handle) { int i = 0; libusb_device_handle *ldev = device_handle; libusb_device *usbdev = libusb_get_device(ldev); struct libusb_device_descriptor desc; struct libusb_config_descriptor *config; const struct libusb_interface_descriptor *idesc; int address0, address1; //FIXME: move this to a more appropriate place. setlocale(LC_ALL, ""); libusb_get_device_descriptor(usbdev, &desc); dev->model = desc.idProduct; dev->device = device_handle; libusb_get_config_descriptor(usbdev, 0, &config); /* sanity checks that we're looking at an acceptable device */ if (/*dev->descriptor.bNumConfigurations != 1 || TODO: ?*/ config->bNumInterfaces != 1 || config->interface[0].num_altsetting != 1) return 1; idesc = &config->interface[0].altsetting[0]; if (idesc->bNumEndpoints != 2) return 1; /* grab the pointers */ //const static int ENDPOINT_BULK_IN=0x82; /* endpoint 0x81 address for IN */ //const static int ENDPOINT_BULK_OUT=0x02; /* endpoint 1 address for OUT */ address0 = (idesc->endpoint[0]).bEndpointAddress; address1 = (idesc->endpoint[1]).bEndpointAddress; if (address0 & 0x0080) { IFP_BUG_ON(address1 & 0x0080); dev->bulk_from = address0; dev->bulk_to = address1; } else { IFP_BUG_ON((address1 & 0x0080)==0); dev->bulk_from = address1; dev->bulk_to = address0; } return i; } int ifp_os_finalize(struct ifp_device * dev) { //release happens somewhere else dev->device = NULL; //libusb_exit(NULL); return 0; } void * ifp_find_device(void) { const int iRiver_Vendor = 0x4102; int listSize; int cnt; int ret; libusb_device **list; libusb_device *found = NULL; libusb_device_handle *handle = NULL; ret = libusb_init(NULL); if (ret != 0) return NULL; listSize = libusb_get_device_list(NULL, &list); if (listSize < 0) return NULL; for (cnt = 0; cnt < listSize; cnt++) { libusb_device *dev = list[cnt]; struct libusb_device_descriptor desc; ret = libusb_get_device_descriptor(dev, &desc); if (ret < 0) { fprintf(stderr, "failed to get device descriptor"); return NULL; } if (desc.idVendor == iRiver_Vendor) { if ((desc.idProduct & 0xFF00) == 0x1100) { ifp_info("ignoring device with UMS firmware."); } else if ((desc.idProduct & 0xFF00) != 0x1100) { found = dev; break; } } } if (found) { ret = libusb_open(found, &handle); if (ret != 0) { handle = NULL; } } libusb_free_device_list(list, 1); return handle; } int ifp_release_device(void * dh) { if (dh != NULL) { libusb_close(dh); //free((libusb_device_handle *)dh); } return 0; } ifpgui-1.0.0/libifp/tuner.c000755 001750 000144 00000010315 11403073632 013737 0ustar00000000 000000 /* * IRiver ifp tuner manipulation functions. * $Id: tuner.c,v 1.1.1.1 2005/08/04 19:45:27 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ static const char rcsid[] = "$Id: "; #include #include #include "ifp.h" #include "ifp_os.h" #define FREQ_WIDTH 6 #define CALL_WIDTH IFP_TUNER_LABEL #define ROW_WIDTH 12 static int get_station_helper(uint8_t * b, char * callsign, int * freq) { uint8_t * bm = b + CALL_WIDTH; uint8_t * bf = b; if (bf[3] != '.') { ifp_err("data consistancy problem %d should be %d (internal error)", (int)bf[3], (int)'.'); return -1; } if ( bf[0] > 9 || bf[1] > 9 || bf[2] > 9 || bf[4] > 9 || bf[5] > 9 ) { ifp_err("data consistancy problem (internal error)"); return -1; } *freq = bf[0]*10000 + bf[1]*1000 + bf[2]*100 + bf[4]*10 + bf[5]*1; if (*freq > IFP_FREQ_MAX || *freq < IFP_FREQ_MIN) { //ifp_wrn("frequency is out of range: %d.%02dMHz", // *freq/100, *freq%100); printf("warning: frequency is out of range: %d.%02dMHz\n", *freq/100, *freq%100); } callsign[CALL_WIDTH] = '\0'; memcpy(callsign, bm, CALL_WIDTH); return 0; } /** returns IFP_ERR_BAD_FREQUENCY */ static int set_station_helper(uint8_t * b, const char * callsign, int freq) { char tmp[FREQ_WIDTH+1]; char * bm = (char *)(b + CALL_WIDTH); uint8_t * bf = b; int j,i; if (freq > IFP_FREQ_MAX || freq < IFP_FREQ_MIN) { //ifp_dbg("frequency out of range"); return IFP_ERR_BAD_FREQUENCY; } i = snprintf(tmp, FREQ_WIDTH+1, "%03d.%02d", freq/100, freq%100); if (i != FREQ_WIDTH || tmp[3] != '.') { ifp_err("(internal) formatting error for freq=%d. i=%d, tmp[3]=%d", freq, i, (int)tmp[3]); } for (j=0; j!=FREQ_WIDTH; j++) { if (tmp[j] != '.') { tmp[j] -= '0'; } } memcpy(bf, tmp, FREQ_WIDTH); memset(bm, '\0', CALL_WIDTH); strncpy(bm, callsign, CALL_WIDTH); return 0; } /** \brief Reads station #n from the binary datablock into more * useful forms. * * b is the block of data loaded using ::ifp_get_tuner_presets, * n is a number between 0 and ::IFP_PRESET_TOTAL-1, * callsign is a pointer to a buffer of at least ::IFP_TUNER_LABEL+1 bytes, * freq is a pointer to an integer, where the station's frequency will be * saved. The frequency units are 10*kHz (0.01MHz) and should range from * ::IFP_FREQ_MIN to ::IFP_FREQ_MAX. * * Apon successful return, 'callsign' will be loaded the station's label * as a zero-terminated string, and 'freq' will be the station's * frequency in units of 10*kHz (0.01MHz). */ int ifp_get_station(int n, void * b, char * callsign, int * freq) { if (n >= IFP_PRESET_TOTAL || n < 0) { ifp_err("n=%d is out of range",n); return -EINVAL; } return get_station_helper((uint8_t *)b + n*12, callsign, freq); } IFP_EXPORT(ifp_get_station); /** \brief Sets station #n to 'freq' and 'callsign'. * * b is the block of data loaded using ::ifp_get_tuner_presets, * n is a number between 0 and ::IFP_PRESET_TOTAL-1, * callsign is a zero-terminated string (but only the first 6 characters will be * used), * freq is the FM frequency in units of Hz*10^4 (or 0.01 MHz); freq should * range from ::IFP_FREQ_MIN to ::IFP_FREQ_MAX. * * eg: * //sets station #4 to 94.9MHz and labeled 'bbc1' * i = ::ifp_set_station(3, p, "bbc1", 9490); * * * * Notes: * -::ifp_set_tuner_presets must be called before any changes to take affect. * * -Although this interface suggests frequency accuracy of 0.01MHz is * possible, I've found some players only support increments 0.05MHz. * Setting a frequency to a more accurate value is *not* an error: the * hardware will silently truncate to a nearby acceptable value. * * -User interfaces can provide feedback to the user of the above "effect" * by saving and reloading the preset data after every change. Any * trunction by the hardware will be immediately obvious. * * Returns ::IFP_ERR_BAD_FREQUENCY if the frequency is out of range. */ int ifp_set_station(int n, void * b, const char * callsign, int freq) { if (n >= IFP_PRESET_TOTAL || n < 0) { ifp_err("n=%d is out of range",n); return -EINVAL; } if (callsign == NULL) { callsign = ""; } return set_station_helper((uint8_t *)b + n*12, callsign, freq); } IFP_EXPORT(ifp_set_station); ifpgui-1.0.0/libifp/readwrite.c000755 001750 000144 00000036637 11403075464 014614 0ustar00000000 000000 /* * IRiver ifp supporting functions * $Id: readwrite.c,v 1.2 2005/08/25 04:10:54 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #include "ifp.h" #include "ifp_os.h" #include "prim.h" //This needs a home. (Currently declared in ifp_prim.h) int ifp_copy_parent_string(char * p, const char * f, int n) { int i = 0; char * c; if (n){} // satisfy compiler c = strrchr(f, '\\'); if (c == NULL) { ifp_err("apparently '%s' doesn't contain a '\\'\n", f); i = -1; goto out; } if (c == f) { //special case p[0] = '\\'; p[1] = '\0'; } else { memcpy(p, f, (c-f)); p[c-f] = '\0'; } out: return i; } /** returns -EACCES */ static int check_permissions(struct ifp_device * dev, const char * f) { //ifp_dbg("here in check_perms"); if (dev->model <= IFP_5XX) { const char * s; int n = strlen(f); if (n <= 4) { return 0; } s = f + n - 4; if (ifp_strnicmp(s, ".mp3", 4) == 0 || ifp_strnicmp(s, ".wma", 4) == 0 || ifp_strnicmp(s, ".asf", 4) == 0) { return -EACCES; } } return 0; } //copies 's' to 'd' and swaps the last two letters of the filename. //Eg. ".mp3" becomes ".m3p".. etc. static int mangle_filename(char * d, const char * s, int n) { int l = strlen(s); strncpy(d, s, n); d[l-1] = s[l-2]; d[l-2] = s[l-1]; return 0; } /** \brief Opens the file f for reading. * * Returns -ENOENT if 'f' doesn't exist and -EACCES if 'f' is read-protected * by the device. */ int ifp_read_open(struct ifp_device * dev, const char * f) { const char * realfile = NULL; int i = 0; int j; //ifp_dbg("here in ifp_read_open"); if (dev->mode != IFP_MODE_NONE) { ifp_err("device has been left for %sing.", dev->mode == IFP_MODE_READING ? "read" : "writ"); i = -1; goto out; } strncpy((char*)dev->filename, f, IFP_BUFFER_SIZE); i = ifp_copy_parent_string((char*)dev->dirname, f, IFP_BUFFER_SIZE); ifp_err_jump(i, out, "error copying directory name"); i = check_permissions(dev, (char*)dev->filename); if (i == -EACCES) { //rename file i = mangle_filename((char*)dev->iobuff, (char*)dev->filename, IFP_BUFFER_SIZE); ifp_err_jump(i, out, "mangle failed for '%s'", dev->filename); i = ifp_rename(dev, (char*)dev->filename, (char*)dev->iobuff); ifp_err_jump(i, out, "rename from %s to %s failed", dev->filename, dev->iobuff); realfile = (char*)dev->iobuff; } else { ifp_err_jump(i, out, "filename permission check failed for '%s'", dev->filename); realfile = (char*)dev->filename; } i = ifp_dir_open(dev, (char*)dev->dirname); ifp_err_expect(i, i==-ENOENT, out, "error opening directory '%s'.", dev->dirname); i = ifp_file_open(dev, realfile); ifp_err_expect(i, i==-ENOENT, out2, "error opening file '%s'.", realfile); dev->mode = IFP_MODE_READING; dev->current_offset = 0; dev->filesize = ifp_file_size(dev); if (dev->filesize < 0) { ifp_err_i((int)(dev->filesize), "error reading filesize of '%s'.", f); goto out3; } dev->readcount = 0; dev->alt_readcount = 0; //ifp_dbg("opened %s successfully, returning %d", f, i); return i; out3: j = ifp_file_close(dev); ifp_err_jump(j, out2, "file close also failed"); out2: j = ifp_dir_close(dev); ifp_err_jump(j, out1, "dir close also failed"); out1: dev->mode = IFP_MODE_NONE; out: return i; } IFP_EXPORT(ifp_read_open); /** \brief Closes a file open for reading. */ int ifp_read_close(struct ifp_device * dev) { int i = 0; if (dev->alt_readcount != dev->readcount) { ifp_err("readcounts don't match. readcount=%d, alt_readcount=%d", dev->readcount, dev->alt_readcount); } i = ifp_file_close(dev); if (i) { ifp_err_i(i, "file close failed"); } i = ifp_dir_close(dev); if (i) { ifp_err_i(i, "dir close failed"); } i = check_permissions(dev, (char*)dev->filename); if (i == -EACCES) { i = mangle_filename((char*)dev->iobuff, (char*)dev->filename, IFP_BUFFER_SIZE); ifp_err_jump(i, out, "mangle failed for '%s'", dev->filename); i = ifp_rename(dev, (char*)dev->iobuff, (char*)dev->filename); ifp_err_jump(i, out, "rename from %s to %s failed", dev->iobuff, dev->filename); } else if (i != 0) { ifp_err_i(i, "filename permission check failed for '%s'", dev->filename); } dev->mode = IFP_MODE_NONE; //ifp_dbg("closing %s, returning %d", dev->filename, i); out: return i; } IFP_EXPORT(ifp_read_close); //Reads next block. 'bytes' should be IFP_BULK_BUFF_SIZE unless //it's the last block--in which case 'bytes' is the number of bytes //we believe are left to download. static int read_next_block(struct ifp_device * dev, int bytes) { int i; IFP_BUG_ON(bytes > IFP_BULK_BUFF_SIZE); if (dev->readcount * IFP_BULK_BUFF_SIZE + bytes > dev->filesize) { ifp_err("Sanity check failed. We've read %d x 16384 bytes, and" " are about to read %d more from a %d byte file.", dev->readcount, bytes, (int)dev->filesize); } i = ifp_file_download(dev, dev->iobuff, IFP_BULK_BUFF_SIZE); if (i < 0) { ifp_err_i(i, "error reading block at %s+%#lx", dev->filename, (long)dev->current_offset); goto out; } else if (i != bytes) { dev->readcount++; if (dev->alt_readcount != dev->readcount) { ifp_err("readcount=%d, alt_readcount=%d", dev->readcount, dev->alt_readcount); } if (dev->download_pipe_errors) { //ifp_dbg("pipe error hit, with corruption: epipes=%d, readcount=%d, bytes received=%d, bytes expected=%d.", //dev->download_pipe_errors, dev->readcount, i, bytes); } else { ifp_err("error reading block.. I expected %d bytes but got %d; readcount is %d", bytes, i, dev->readcount); } i = -EIO; goto out; } dev->readcount++; IFP_BUG_ON(i > bytes); i = 0; //not strickly necessary.. if (bytes < IFP_BULK_BUFF_SIZE) { memset(dev->iobuff + bytes, 0, IFP_BULK_BUFF_SIZE - bytes); } out: return i; } /** \brief Reads from an open file. Reads the next 'bytes' of data into 'buff'. \return the number of bytes read, or <0 on error. */ int ifp_read_data(struct ifp_device * dev, void * buff, int bytes) { int bytes_requested = bytes; int bytes_read = 0; int n; int i = 0; int block_off; int available; uint8_t * o = buff; bytes = min(bytes, (int)(dev->filesize - dev->current_offset)); while (bytes > 0) { block_off = dev->current_offset % IFP_BULK_BUFF_SIZE; if (block_off == 0) { //read next block available = min(IFP_BULK_BUFF_SIZE, (int)(dev->filesize - dev->current_offset)); i = read_next_block(dev, available); if (i) { //quiet on pipe errors if (!(i == -EIO && dev->download_pipe_errors > 0)) { ifp_err_i(i, "error reading next block" " filesize=%d position=%d", (int)dev->filesize, (int)dev->current_offset); } goto out; } } else { available = IFP_BULK_BUFF_SIZE - block_off; } n = min(bytes, available); IFP_BUG_ON(n <= 0); memcpy(o, dev->iobuff + block_off, n); o += n; dev->current_offset += n; bytes -= n; bytes_read += n; } IFP_BUG_ON(bytes < 0); IFP_BUG_ON(bytes != 0); if (bytes_read != bytes_requested && dev->current_offset != dev->filesize) { ifp_dbg("returning %d instead of %d (but not EOF)", bytes_read, bytes_requested); } IFP_BUG_ON(bytes_read != bytes_requested && dev->current_offset != dev->filesize); return bytes_read; out: return i; } IFP_EXPORT(ifp_read_data); /** \brief Check if we've reached the end of the file. (EOF) */ int ifp_read_eof(struct ifp_device * dev) { return dev->current_offset == dev->filesize; } IFP_EXPORT(ifp_read_eof); /** \brief Returns the size of the current file in bytes. */ int ifp_read_size(struct ifp_device * dev) { return dev->filesize; } IFP_EXPORT(ifp_read_size); static int fake_block_reads(struct ifp_device * dev, int n) { int actual, j,i = 0; const int blocksize = IFP_BULK_BUFF_SIZE; ifp_dbg("here -- sanity check"); i = _ifp_set_buffer_size(dev, blocksize, 1); if (i) { ifp_err_i(i, "set buffer failed"); return i > 0 ? -EIO : i; } for (j=0; j < n; j++) { i = _ifp_file_download(dev, (int)blocksize, &actual); ifp_err_jump(i, out, "download control message failed"); dev->readcount++; if (actual != blocksize) { i = -EIO; ifp_err("fake read failed, I can't handle " "getting %d bytes instead of %d\n", actual, (int)blocksize); goto out; } } out: return i; } /** \brief Fast-forward within the current file. * * In the current open file, skip forward to 'bytes' (ignoring the data). * Caution: the implementation isn't particularily fast, and can only seek * forward. Avoid it if you can. */ int ifp_read_seek(struct ifp_device * dev, int bytes) { int i = 0; int available = 0; const int blocksize = IFP_BULK_BUFF_SIZE; //int bitsize = IFP_BULK_BUFF_BITS; ifp_off_t tar_offset = dev->current_offset + bytes; ifp_off_t cur_offset = dev->current_offset; int cur_block = cur_offset == 0 ? -1 : (int)(cur_offset-1) / blocksize; int tar_block = tar_offset == 0 ? -1 : (int)(tar_offset-1) / blocksize; int count = tar_block - cur_block; if (tar_block != -1) { ifp_dbg("seeking forward %d blocks from %ld to %ld (%d:%d to %d:%d)", count, (long)cur_offset, (long)tar_offset, cur_block, (int)cur_offset % blocksize, tar_block, (int)tar_offset % blocksize); } //ifp_dbg("seeking forward %d blocks from %ld to %ld (%d:%d to %d:%d)", // count, // (long)cur_offset, (long)tar_offset, // cur_block, (int)cur_offset % blocksize, // tar_block, (int)tar_offset % blocksize); IFP_BUG_ON(count < 0); //cases: // count == 0 update current_offset and return // count == 1 download next block, update current_offset // count >= 2 several fake downloads, ... switch (count > 1 ? 2 : count) { case 2: //ifp_dbg("doing fake reads"); i = fake_block_reads(dev, count - 1); ifp_err_jump(i, out, "fake block reads failed"); //fallthrough case 1: //ifp_dbg("doing real read"); available = (int)(dev->filesize - (tar_block*blocksize)); if (available > blocksize) { available = blocksize; } i = read_next_block(dev, available); //ifp_err("filesize=%d, current_pos=%d; bytes=%d; available=%d", // (int)dev->filesize, (int)dev->current_offset, // bytes, available); ifp_err_jump(i, out, "error reading destination block of %d bytes", available); //fallthrough case 0: //ifp_dbg("adjusting 'current_offset' by %d", bytes); dev->current_offset += bytes; break; default: IFP_BUG_ON(1); } //ifp_dbg("done"); if (i) { ifp_dbg("returning %d", i); } out: return i; } IFP_EXPORT(ifp_read_seek); /*This code is borrowed from ifp-line and appears to work fine. The original *driver behaves slightly differently: * * on open * ifp_dir_open(d) * ifp_file_open(f) * fails because file doesn't exist yet. Good. * ifp_dir_close() * * ifp_dir_open(d) * ifp_file_open_new(d) * * on close * ifp_file_close() * ifp_dir_close() * * ifp_freespace() * * ls, I think. */ /** \brief Opens the file f for writing. * * Creates and opens a new file of 'filesize' bytes with the name 'f'. * Returns -EEXIST if the name 'f' isn't available. (Ie, * if there allready exists a file or directory with the same name.) * Returns -ENOENT, -ENOSPC, or IFP_ERR_BAD_FILENAME */ int ifp_write_open(struct ifp_device * dev, const char * f, int filesize) { int i; int j; if (dev->mode != IFP_MODE_NONE) { ifp_err("device has been left for %sing.", dev->mode == IFP_MODE_READING ? "read" : "writ"); i = -1; goto out; } memcpy(dev->filename, f, IFP_BUFFER_SIZE); i = ifp_copy_parent_string((char*)dev->dirname, f, IFP_BUFFER_SIZE); ifp_err_jump(i, out, "error copying directory name"); i = ifp_dir_open(dev, (char*)dev->dirname); ifp_err_expect(i, i==-ENOENT, out, "open_dir request failed."); i = ifp_freespace(dev); if (i < 0) { ifp_err_jump(i, out2, "free space request failed"); } else if (i < filesize) { i = -ENOSPC; ifp_err_jump(i, out2, "not enough free space on the device"); } i = ifp_file_open_new(dev, (char*)dev->filename, filesize); ifp_err_expect(i, i==-EEXIST||i==IFP_ERR_BAD_FILENAME, out2, "file create failed"); dev->mode = IFP_MODE_WRITING; dev->current_offset = 0; dev->filesize = filesize; dev->readcount = 0; return i; out2: j = ifp_dir_close(dev); ifp_err_jump(j, out1, "dir close also failed"); out1: dev->mode = IFP_MODE_NONE; out: return i; } IFP_EXPORT(ifp_write_open); static int quick_write_verify(struct ifp_device * dev) { int i = 0; int size; i = ifp_dir_open(dev, (char*)dev->dirname); ifp_err_jump(i, out, "open dir failed"); i = ifp_file_open(dev, (char*)dev->filename); ifp_err_jump(i, out, "open file failed"); size = ifp_file_size(dev); if (size < 0) { ifp_err_i(size, "file size query failed"); goto out; } i = ifp_file_close(dev); ifp_err_jump(i, out, "close file failed"); i = ifp_dir_close(dev); ifp_err_jump(i, out, "close dir failed"); if (size != dev->current_offset) { ifp_err("reported file size is %d instead of %d.. upload failed", size, (int)dev->filesize); i = -EIO; } out: return i; } /** \brief Closes a file open for writing. */ int ifp_write_close(struct ifp_device * dev) { int i = 0; int e = 0; int remainder = dev->current_offset % IFP_BULK_BUFF_SIZE; if (remainder != 0) { i = ifp_file_upload(dev, dev->iobuff, remainder); if (i != remainder) { ifp_err_i(i, "problem uploading last %d bytes. " "Attempting to close file anyways.", remainder); e=e?e:i; //no jump } } #if 0 //User can abort transfers, but we still have to close with grace ifp_wrn_on(dev->current_offset != dev->filesize, "received %d fewer bytes than expected", (int)(dev->filesize - dev->current_offset)); #endif //ifp_dbg("new write code finishing for %s.. all good, apparently.", // dev->filename); i = ifp_file_flush(dev); if (i) { ifp_err_i(i, "flush failed, closing anyways."); e=e?e:i; //no jump } i = ifp_file_close(dev); if (i) { ifp_err_i(i, "file close failed, closing dir anyways."); e=e?e:i; //no jump } i = ifp_dir_close(dev); if (i) { ifp_err_i(i, "dir close failed."); e=e?e:i; } if (e == 0) { i = quick_write_verify(dev); if (i) { ifp_err_i(i, "quick-verify failed--upload may have failed."); } } dev->mode = IFP_MODE_NONE; return i?i:e; } IFP_EXPORT(ifp_write_close); /** \brief Writes 'bytes' of data from buff to the file. * * Returns 0 on success. (Does not return the number of bytes written--it's * all or nothing.) */ int ifp_write_data(struct ifp_device * dev, void * buff, int bytes) { int e = 0; uint8_t * i = buff; uint8_t * o = dev->iobuff; int n; const int bs = IFP_BULK_BUFF_SIZE; int block_off = dev->current_offset % bs; while (bytes > 0) { n = bs - block_off; if (n > bytes) { n = bytes; } memcpy(o + block_off, i, n); { //ifp_dbg("ifp_write_data: block_off is %d, bytes to write is %d.", block_off, n); } i += n; block_off += n; bytes -= n; dev->current_offset += n; if (block_off == bs) { //At the end of the file, we have to write a partial block e = ifp_file_upload(dev, o, block_off); if (e == 0) { ifp_dbg("ifp_file_upload returned 0: dev->current_offset = %ld", dev->current_offset); } else if (e != block_off) { ifp_err_jump(e, out, "upload of %d bytes failed", block_off); block_off = 0; } e = 0; } } out: return e; } IFP_EXPORT(ifp_write_data); ifpgui-1.0.0/libifp/ifp_os.h000755 001750 000144 00000012542 10303242316 014065 0ustar00000000 000000 /* * linux-kernel specific functions * $Id: ifp_os.h,v 1.2 2005/08/25 04:10:54 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #ifndef IFP_OS_H #define IFP_OS_H 1 #ifdef __KERNEL__ #include // #include #include #include #include #include #include #else #include #include #include #include #include #include #endif struct ifp_device; int ifp_os_control_send(struct ifp_device * dev, int command, int arg1, int arg2, int * r1, int * r2); int ifp_os_push(struct ifp_device * dev, void * p, int n); int ifp_os_pop(struct ifp_device * dev, void * p, int n); int ifp_os_init(struct ifp_device * dev, void * osdev); int ifp_os_finalize(struct ifp_device * dev); //'ms' is time in milli-seconds (1/1000ths of a second) int ifp_os_sleep(int ms); #ifdef __KERNEL__ //#define ifp_os_err(fmt, arg...) printk(KERN_ERR fmt, ##arg) #define ifp_os_wrn(fmt, arg...) printk(KERN_WARNING fmt, ##arg) #define ifp_os_dbg(fmt, arg...) printk(KERN_DEBUG fmt, ##arg) #define ifp_os_info(fmt, arg...) printk(fmt, ##arg) #define ifp_os_print(fmt, arg...) printk(fmt, ##arg) #define IFP_EXPORT(x) EXPORT_SYMBOL(x) #define ifp_strnicmp(a,b,c) strnicmp(a,b,c) #define IFP_BUG_ON BUG_ON #else //not __KERNEL__ //#define ifp_os_err(fmt, arg...) fprintf(stderr, "err: " fmt, ##arg) #define ifp_os_wrn(fmt, arg...) fprintf(stderr, "wrn: " fmt, ##arg) #define ifp_os_dbg(fmt, arg...) fprintf(stderr, "dbg: " fmt, ##arg) #define ifp_os_info(fmt, arg...) fprintf(stderr, "info: " fmt, ##arg) #define ifp_os_print(fmt, arg...) fprintf(stderr, fmt, ##arg) #define IFP_EXPORT(x) //nothing #define ifp_strnicmp(a,b,c) strncasecmp(a,b,c) #define IFP_BUG_ON(b) \ if (b) { ifp_os_print("bug assertion tripped in %s() at %s:%d", \ __FUNCTION__ , __FILE__ , __LINE__ ); } //stolen from linux/kernel.h #ifndef min # define min(x,y) ({ \ typeof(x) _x = (x); \ typeof(y) _y = (y); \ (void) (&_x == &_y); \ _x < _y ? _x : _y; }) #endif #ifndef max # define max(x,y) ({ \ typeof(x) _x = (x); \ typeof(y) _y = (y); \ (void) (&_x == &_y); \ _x > _y ? _x : _y; }) #endif #endif //__KERNEL__ #if defined(CONFIG_IRIVER_FS_RENAME) #define IFP_RENAME #endif #if defined(CONFIG_IRIVER_FS_DEBUG_VFS) #define IFP_DEBUG_SYSCALL 1 #endif #if defined(CONFIG_IRIVER_FS_DEBUG_USB) #define IFP_DEBUG_USB_SNOOPING 1 #if defined(CONFIG_IRIVER_FS_DEBUG_USB_RAW) #define IFP_DEBUG_USB_RAWDATA 1 #endif #endif //automake config switches #if defined(AMM_USBDBG) #define IFP_DEBUG_USB_SNOOPING 1 #endif #if defined(AMM_USBVERBOSE) #define IFP_DEBUG_USB_RAWDATA 1 #if !defined(IFP_DEBUG_USB_SNOOPING) #define IFP_DEBUG_USB_SNOOPING 1 #endif #endif //I would like this moved into ifp.h because it's so useful our callers //might want to use it. #define ifp_wrn(fmt, arg...) ifp_os_wrn("[%s] " fmt "\n", __FUNCTION__ , ##arg) #define ifp_dbg(fmt, arg...) ifp_os_dbg("[%s] " fmt "\n", __FUNCTION__ , ##arg) #define ifp_info(fmt, arg...) ifp_os_info(fmt "\n", ##arg) #define ifp_print(fmt, arg...) ifp_os_print(fmt, ##arg) #if 0 #define ifp_err(fmt, arg...) ifp_os_err("[%s] " fmt "\n", __FUNCTION__ , ##arg) #define ifp_err_i(i, fmt, arg...) ifp_err("err=%d. " fmt, i, ##arg) #define ifp_err_jump(i, label, fmt, arg...) \ if (i) { ifp_err_i(i, fmt, ##arg); goto label; } #define ifp_err_expect(i, e, label, fmt, arg...) \ if (i) { if(!(e)){ifp_err_i(i, fmt, ##arg);} goto label; } #endif #define ifp_wrn_on(b, fmt, arg...) \ if (b) { ifp_wrn("warning: " fmt, ##arg); } int ifp_locale_to_utf16(char * o, int max_o, const char * i, int max_i); int ifp_utf16_to_locale(char * o, int max_o, const char * i, int max_i); /* I truely wish this section didn't exist.. mostly because this is neither * the first nor last time I've written something like it. Ideally, someone * like ANSI, ISO or even GCC would put their foot down and define standard * macros for handling portable data. */ #if defined(__KERNEL__) #define ifp_os_cpu_to_le32 cpu_to_le32 #define ifp_os_cpu_to_le16 cpu_to_le16 #if 0 //I'll change this back when 2.6.9 stablizes #define ifp_os_le32_to_cpup le32_to_cpup #define ifp_os_le16_to_cpup le16_to_cpup #else #define ifp_os_le32_to_cpup(x) (*(__force uint32_t*)(x)) #define ifp_os_le16_to_cpup(x) (*(__force uint16_t*)(x)) #endif #else //kernel #ifndef WORDS_BIGENDIAN //Little endian #define ifp_os_cpu_to_le16(x) ((uint16_t)(x)) #define ifp_os_cpu_to_le32(x) ((uint32_t)(x)) #define ifp_os_le16_to_cpup(x) (*(uint16_t*)(x)) #define ifp_os_le32_to_cpup(x) (*(uint32_t*)(x)) #else //Big endian #warning "Big endian support has not yet been tested. Please report if this code works for you." #define ifp_os_swap16(x) ( \ ((uint16_t)x & 0x00ff) << 8 | \ ((uint16_t)x & 0xff00) >> 8 \ ) #define ifp_os_swap32(x) ( \ ((uint32_t)x & 0x000000ff) << 24 | \ ((uint32_t)x & 0x0000ff00) << 8 | \ ((uint32_t)x & 0x00ff0000) >> 8 | \ ((uint32_t)x & 0xff000000) >> 24 \ ) #define ifp_os_cpu_to_le16(x) (ifp_os_swap16(x)) #define ifp_os_cpu_to_le32(x) (ifp_os_swap32(x)) #define ifp_os_le16_to_cpup(x) (ifp_os_swap16(*(uint16_t*)(x))) #define ifp_os_le32_to_cpup(x) (ifp_os_swap32(*(uint32_t*)(x))) #endif //endian #endif //kernel #endif // IFP_OS_H ifpgui-1.0.0/libifp/error_strings.c000755 001750 000144 00000002543 10274470126 015514 0ustar00000000 000000 /* * IRiver ifp supporting functions, a basic (primative) API. * $Id: error_strings.c,v 1.1.1.1 2005/08/04 19:45:27 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ static const char rcsid[] = "$Id: "; #include #include #include "ifp.h" #include "ifp_os.h" #define IFP_ERR_BASE (3) #define MAX_MESSAGES 9 static const char * messages[MAX_MESSAGES] = { "File not found.", "Filename is not available--allready in use by a file or directory.", "Directory not found.", "Directory exists.", "Directory is not empty.", "Device is present, but not responding; try jiggling the handle.", "FM station frequency is outside the reasonable range. Typically, FM stations are between 87.5MHz and 108.0MHz.", "Filename contains characters that aren't supported by iFP devices.", "Progress callback requested transfer be cancelled.", }; /** \brief Return an English string describing an error number. * * (Available only in userland.)*/ const char * ifp_error_message(int n) { if (n<0) { return strerror(-n); } else if (n == 0) { return "error: succeeded. Please install windows and try again."; } else if (n < IFP_ERR_BASE || n >= IFP_ERR_BASE + MAX_MESSAGES) { return "internal error.. unknown error number."; } else { return messages[n - IFP_ERR_BASE]; } } IFP_EXPORT(ifp_error_message); ifpgui-1.0.0/libifp/ifp_os_linux.c000755 001750 000144 00000017333 11305367442 015315 0ustar00000000 000000 /* * linux-kernel specific functions * $Id: ifp_os_linux.c,v 1.2 2005/08/25 04:10:54 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #include #include "ifp.h" #include "ifp_os.h" #include "prim.h" int ifp_locale_to_utf16(char * ob, int max_o, const char * ib, int max_i) { int i = 0; //Warning about possible buffer overrun: here 'n' is the //size of the buffer 's', but we have no way of preventing //'buf' from being overrun. (We can tell afterwards, but by //then it's too late.) i = utf8_mbstowcs((wchar_t *)ob, ib, max_i); BUG_ON(i > max_o/sizeof(wchar_t)); return 0; } int ifp_utf16_to_locale(char * ob, int max_o, const char * ib, int max_i) { int i = 0; i = utf8_wcstombs(ob, (wchar_t *)ib, max_o); BUG_ON(i >= max_o); ob[i] = '\0'; return 0; } int ifp_os_sleep(int ms) { int i; //what about this: //interruptible_sleep_on_timeout(wait_queue_head_t *q,long timeout); // //sleep for 1/1000 seconds int timeout = (int)((long)HZ*(long)ms/(long)1000); current->state = TASK_INTERRUPTIBLE; timeout = schedule_timeout(timeout); if (timeout) { ifp_err("interuptted while waiting for flush."); i = -EINTR; return i; } return 0; } int ifp_os_control_send(struct ifp_device * dev, int command, int arg1, int arg2, int * r1, int * r2) { struct libusb_device * usbdev = dev->device; int pipe; u8 ctl[8]; int c_size; int i; int loops_left = 20; BUG_ON(r1 == NULL); c_size = r2 ? 8 : 4; pipe = usb_rcvctrlpipe(dev->device,0); do { #if 0 if (i == -EPIPE) { i = usb_clear_halt(dev->device, pipe); if (i == -EPIPE) { //loop? ifp_err_i(i, "failed to clear halt"); } else if (i) { ifp_err_jump(i, out, "error attempting to clear halt"); } } #endif #if 0 if (command == 0x07) { //ifp_os_sleep(5); schedule(); } #endif i = libusb_control_msg(usbdev, pipe, command, IFP_REQ_TYPE, arg1, arg2, ctl, c_size, IFP_TIMEOUT); //This is a big hack. I actually have no clue why EPIPE //is occasionally returned here, nor how to correctly handle it. // //When this happens, I find that reissuing the control message //once is usually sufficient. However, the device occasionally //behaves as if it successfully received an extra request. // //In other words, one of the requests that returned EPIPE //succeeded. (But most of them didn't.) If I could detect //which request succeeded, I could work around this. However, //none of the return values tell me.. I've checked: //'endpoint_halted', 'i', r1 and r2. if (i == -EPIPE) { int rr1, rr2 = 0; if (r2) { rr2 = ifp_os_le32_to_cpup(ctl + 4); } rr1 = ifp_os_le32_to_cpup(ctl); //ifp_dbg("If you see the message \"error reading block.. I expected x bytes but got less\" there's a corruption or a read error. What USB chipset are you using anyways? Mail geoff please!"); ifp_dbg("got epipe; loop=%d (r1=%d, r2=%d)", loops_left, rr1, rr2 ); if (loops_left != 20 || command != IFP_FILE_DOWNLOAD) { ifp_err("wierd case: command=%02x and loop=%d", command, 20 + 1 - loops_left); } if (command == IFP_FILE_DOWNLOAD) { dev->download_pipe_errors++; } if (loops_left == 15) { ifp_dbg("waiting for device to be available"); } //ifp_dbg("sleeping for a bit"); ifp_os_sleep(200); loops_left--; } if (!loops_left) { ifp_err_i(i, "timeout attempting to %s ifp control code " "the command %0x (%d, %d). ctl[%d] Returned %d.", "sending", command, arg1, arg2, c_size, i); return i; } } while (i == -EPIPE); if (i < 0) { ifp_err_i(i, "error %s ifp control code the command %0x (%d, %d)." " ctl[%d] Returned %d.", "sending", command, arg1, arg2, c_size, i); return i; } else if (i != c_size) { if (command == IFP_FILE_DOWNLOAD) { dev->alt_readcount++; } ifp_err_i(i, "warning: unexpected error value.. I expected %d.", c_size); } else { if (command == IFP_FILE_DOWNLOAD) { dev->alt_readcount++; } i = 0; } if (r2) { *r2 = ifp_os_le32_to_cpup(ctl + 4); } *r1 = ifp_os_le32_to_cpup(ctl); return i; } int ifp_os_push(struct ifp_device * dev, void * p, int n) { int i = 0, actual; int pipe; pipe = usb_sndbulkpipe(dev->device,(dev->bulk_to & 0x7f)); i = usb_bulk_msg(dev->device, pipe, p, n, &actual, IFP_TIMEOUT); if (i == -EPIPE) { ifp_dbg("EPIPE status received"); i = usb_clear_halt(dev->device, pipe); ifp_err_jump(i, out, "failed to clear halt"); i = usb_bulk_msg(dev->device, pipe, p, n, &actual,IFP_TIMEOUT); ifp_err_jump(i, out, "failed to reissue xfer"); } else if (i < 0) { ifp_err_i(i, "usb_bulk_msg failed"); return i; } else if (actual != n) { ifp_dbg("usb_bulk_msg could only send %d of %d bytes", actual, n); } out: return i; } int ifp_os_pop(struct ifp_device * dev, void * p, int n) { int i = 0, actual; int pipe; memset(p, 0, n); pipe = usb_rcvbulkpipe(dev->device,(dev->bulk_from & 0x7f)); i = usb_bulk_msg(dev->device, pipe, p, n, &actual, IFP_TIMEOUT); if (i == -EPIPE) { ifp_dbg("EPIPE status received"); i = usb_clear_halt(dev->device, pipe); ifp_err_jump(i, out, "failed to clear halt"); i = usb_bulk_msg(dev->device, pipe, p, n, &actual,IFP_TIMEOUT); ifp_err_jump(i, out, "failed to reissue xfer"); } else if (i < 0) { ifp_err_i(i, "usb_bulk_msg failed"); return i; } else { if (i) { ifp_dbg("(warning) i=%d is positive",i); } if (actual != n) { ifp_dbg("(warning) usb_bulk_msg only received %d of %d bytes", actual, n); return actual ? actual : -1; } } out: return i; } int ifp_os_init(struct ifp_device * dev, void * device_handle) { int i = 0; struct libusb_device * ldev = device_handle; struct usb_host_interface * interface; int address0, address1; dev->model = ldev->descriptor.idProduct; dev->device = device_handle; interface = &ldev->actconfig->interface[0]->altsetting[0]; address0 = interface->endpoint[0].desc.bEndpointAddress; address1 = interface->endpoint[1].desc.bEndpointAddress; if (address0 & 0x0080) { BUG_ON(address1 & 0x0080); dev->bulk_from = address0; dev->bulk_to = address1; } else { BUG_ON((address1 & 0x0080)==0); dev->bulk_from = address1; dev->bulk_to = address0; } return i; } int ifp_os_finalize(struct ifp_device * dev) { //release happens somewhere else dev->device = NULL; return 0; } void * ifp_find_device(void) { int i; struct libusb_device * dev = NULL; const int iRiver_Vendor = 0x4102; //search for working devices first. for (i = 0; i != IFP_PRODUCT_IDs; i++) { dev = usb_find_device(iRiver_Vendor, ifp_product_ids[i]); if (dev) { ifp_info("iRiverFS: detected a %s series device.", ifp_product_strings[i]); return dev; } } //We haven't found a compatible device with the 'manager' firmware. //To be helpful to the user, let's check if there are any devices //using the alternative 'ums' firmware--the firmware that emulates //a USB mass storage device. for (i = 0; i != IFP_PRODUCT_IDs; i++) { dev = usb_find_device(iRiver_Vendor, ifp_product_ids[i] | ifp_product_ums_bit); if (dev) { ifp_info("iRiverFS: skipping the %s device with 'UMS' " "firmware because the USB mass storage driver " "will work better with it.\n", ifp_product_strings[i]); return NULL; } } return NULL; } IFP_EXPORT(ifp_find_device); int ifp_release_device(void * dev) { #if 0 int i = 0; i = usb_reset_device(dev); if (i) { ifp_err_i(i, "usb_reset() returned an error"); } #endif usb_put_dev(dev); return 0; } IFP_EXPORT(ifp_release_device); #if !defined (__KERNEL__) # error "makefile error" #endif // __KERNEL__ ifpgui-1.0.0/libifp/main.c000755 001750 000144 00000001113 11331143550 013517 0ustar00000000 000000 /* * IRiver ifp filesystem driver for Linux * Revision : $Id: main.c,v 1.1.1.1 2005/08/04 19:45:27 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #include static int __init init_libifp(void) { printk("libifp: successfully initialized.\n"); return 0; } static void __exit exit_libifp(void) { printk("libifp: unloaded.\n"); } module_init(init_libifp) module_exit(exit_libifp) MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("iRiver iFP Manager library"); MODULE_AUTHOR("Geoff Oakham "); ifpgui-1.0.0/libifp/prim.c000755 001750 000144 00000103110 11403072751 013546 0ustar00000000 000000 /* * IRiver ifp supporting functions, a basic (primative) API. * $Id: prim.c,v 1.2 2005/08/25 04:10:54 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #include "ifp.h" #include "ifp_os.h" #include "prim.h" //Constants needed for autodetection. (Platform-indendent, I might add.) //This list is a guestimate. We've confirmed all models except //iFP-10xx. int ifp_product_ids[IFP_PRODUCT_IDs] = { 0x1001, 0x1003, 0x1005, 0x1007, 0x1008, 0x1009, 0x1010, 0x1011, }; char * ifp_product_strings[IFP_PRODUCT_IDs] = { "iFP-1xx", "iFP-3xx", "iFP-5xx", "iFP-7xx", "iFP-8xx", "iFP-9xx", "iFP-10xx", "N10", }; #ifdef IFP_DEBUG_USB_SNOOPING static char const * ifp_human_commands[] = { "echo (ping)", //0x00 "golf (goodbye)", //0x01 "02_command", //0x02 "0x03", //0x03 "0x04", //0x04 "f.open", //0x05 "f.new", //0x06 "download", //0x07 "upload", //0x08 "0x09", //0x09 "0x0a", //0x0a "f.size", //0x0b "0x0c", //0x0c "f.close", //0x0d "delete", //0x0e "d.open", //0x0f "d.next", //0x10 "d.close", //0x11 "mkdir", //0x12 "rmdir", //0x13 "capacity", //0x14 "availa", //0x15 "format", //0x16 "firmware update", //0x17 "buffsz", //0x18 "0x19", //0x19 "getFAT page", //0x1a "d.next_debug", //0x1b "setFAT page", //0x1c "getRadio stations", //0x1d "setRadio stations", //0x1e "0x1f", //0x1f }; static char const * ifp_human_02_commands[] = { "string", //0x00 "02_01", //0x01 "02_02", //0x02 "firmwr", //0x03 "delta", //0x04 "02_05", //0x05 "flush", //0x06 "02_07", //0x07 "battery", //0x08 }; static int _ifp_control_debug(struct ifp_device * dev, int command, int arg1, int arg2, int r1, int * pr2, int ivalue ) { int i = 0; int r2 = -1; char const * s_command = NULL; if (pr2) { r2 = *pr2; } if (command == 0x02 && arg2 >= 0 && arg2 <= 0x08) { s_command = ifp_human_02_commands[arg2]; } else if (command >= 0 && command <= 0x1f) { s_command = ifp_human_commands[command]; } else { s_command = ""; } ifp_print("ifp: %-6.6s c0%02x %04x %04x | %04x", s_command, command, arg1, arg2, r1); if (pr2) { ifp_print(" %04x", r2); } if (ivalue) { ifp_print(" i=%d", ivalue); } ifp_print("\n"); return i; } static inline int ifp_control_debug_info(struct ifp_device * dev, int command, int arg1, int arg2, int r1, int * pr2, int ivalue ) { return _ifp_control_debug(dev, command, arg1, arg2, r1, pr2, ivalue); } #else //IFP_DEBUG_USB_SNOOPING static inline int ifp_control_debug_info(struct ifp_device * dev, int command, int arg1, int arg2, int r1, int * pr2, int ivalue) { if (dev){} // satisfy compiler if (command){} // satisfy compiler if (arg1){} // satisfy compiler if (arg2){} // satisfy compiler if (r1){} // satisfy compiler if (pr2){} // satisfy compiler if (ivalue){} // satisfy compiler return 0; } #endif //IFP_DEBUG_USB_SNOOPING int ifp_control_send(struct ifp_device * dev, int command, int arg1, int arg2, int * pr2) { int i, r1; i = ifp_os_control_send(dev, command, arg1, arg2, &r1, pr2); ifp_control_debug_info(dev, command, arg1, arg2, r1, pr2, i); if (i < 0) { ifp_err_i(i, "error sending control value"); } else if (i) { //caller allready warned about unexpected value. i = 0; } if (i == 0) { i = r1; } return i; } //Convience method to convert ifp's "success" return value to 0 int ifp_control_send_bool(struct ifp_device * dev, int command, int arg1, int arg2, int * ret) { int i = ifp_control_send(dev, command, arg1, arg2, ret); if (i == 0) { //FIXME: change to i = 1; //i = -1; i = 1; } else if (i == 1) { i = 0; } return i; } #ifdef IFP_DEBUG_USB_RAWDATA static int hexdump_line(void * pp, int n, int lw) { uint8_t * p = pp; int j, c; for (j=0; j!=lw; j++) { if (j >= n) { ifp_print(" "); } else { ifp_print("%02x", (int)(p[j])); } if (j % 4 == 3) { ifp_print(" "); } } for (j=0; j!=lw; j++) { if (j >= n) { break; //printk(" "); } else { c = (int)p[j]; if (isprint(c)) { ifp_print("%c", c); } else { ifp_print("."); } } } return 0; } static int hexdump(char * prefix, void * pp, int n) { uint8_t * p = pp; int const lw = 32; int zeros = 0; int j = n; int total = n; while (p[j-1] == 0) { j--; } if (n-j > 3) { zeros = n - j; n = j; } while (n > 0) { ifp_print("%s", prefix); hexdump_line(p, n, lw); n -= lw; if (n > 0) { p += lw; } else { if (zeros > 0) { ifp_print(" [%d]", total); } } ifp_print("\n"); } return 0; } #endif // // primatives // //Returns a negative number on error, 0 on success, and the number of //bytes written (if the whole block wasn't written). static inline int _ifp_push(struct ifp_device * dev, void * p, int n) { int i = 0; i = ifp_os_push(dev, p, n); #ifdef IFP_DEBUG_USB_RAWDATA hexdump("<--dn ", p, n); #endif return i; } /* Note that 'n' must be a power of 2. */ static inline int _ifp_pop(struct ifp_device * dev, void * p, int n) { int i = 0; i = ifp_os_pop(dev, p, n); #ifdef IFP_DEBUG_USB_RAWDATA hexdump("-->up ", p, n); #endif return i; } static inline int _ifp_push_unicode(struct ifp_device * dev, const char * s, int blocksize) { int i; uint8_t * buf = dev->b1; memset(buf, 0, IFP_BUFFER_SIZE); //Warning about possible buffer overrun: here 'n' is the //size of the buffer 's', but we have no way of preventing //'buf' from being overrun. (We can tell afterwards, but by //then it's too late.) i = ifp_locale_to_utf16((char*)buf, IFP_BUFFER_SIZE, s, strlen(s)+1); ifp_err_jump(i, err, "character conversion failed"); i = ifp_os_push(dev, buf, blocksize); err: #ifdef IFP_DEBUG_USB_SNOOPING ifp_print("<--dn '%s'[unicode]\n", s); #endif // IFP_DEBUG_USB_SNOOPING return i; } static inline int _ifp_pop_unicode(struct ifp_device * dev, char * s, int n, int blocksize) { int i; uint8_t * buf = dev->b1; memset(buf, 0, IFP_BUFFER_SIZE); i = ifp_os_pop(dev, buf, blocksize); if (i) { //Either an error occured, or fewer bytes than 'n' was read. if (i < 0) { ifp_err_i(i, "pop error."); } else { ifp_err("pop read only %d bytes.", i); } return i; } i = ifp_utf16_to_locale(s, n,(char*) buf, IFP_BUFFER_SIZE); ifp_err_jump(i, err, "character conversion failed"); err: #ifdef IFP_DEBUG_USB_SNOOPING ifp_print("-->up '%s'[unicode]\n", s); #endif // IFP_DEBUG_USB_SNOOPING return i; } #if 0 //Returns a negative number on error, 0 on success, and the number of //bytes written (if the whole block wasn't written). static inline int _ifp_set_buffer_size(struct ifp_device * dev, int n, int force) { int i = 0, allowed; if (dev->last_buffer_size != n || force) { i = ifp_control_send(dev, IFP_SET_BUFFER, n, 0, &allowed); if (allowed >= 0) { dev->last_buffer_size = allowed; } if (i == 1 && allowed == n) { return 0; } } //return 0; return i ? i : 0; } #endif static inline int _ifp_file_open(struct ifp_device * dev, int type) { return ifp_control_send_bool(dev, IFP_FILE_OPEN, type, 0, NULL); } static inline int _ifp_file_open_new(struct ifp_device * dev, int size) { return ifp_control_send_bool(dev, IFP_FILE_OPEN_NEW, size, 0, NULL); } static inline int _ifp_file_close(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_FILE_CLOSE, 0, 0, NULL); } static inline int _ifp_file_size(struct ifp_device * dev) { int i, n; i = ifp_control_send_bool(dev, IFP_FILE_SIZE, 0, 0, &n); if (i) { return i; } return n; } #if 0 /* returns 0 on success, 1 on "device not ready!" and negative on error. */ static inline int _ifp_file_download(struct ifp_device * dev, int bytes, int * actual) { int i; i = ifp_control_send(dev, IFP_FILE_DOWNLOAD, bytes, 0, NULL); if (actual) { *actual = i; } if (i < 0) { ifp_err_i(i, "error sending code to download block."); return i; } else if (i == bytes) { return 0; } else if (i > bytes) { ifp_err_i(i, "Something's wierd. The return value is larger than %d", bytes); return -1; } else if (i == 0) { ifp_wrn("warning: return value is 0 instead of %d, which is often a sign of corruption.", bytes); return 1; } else { //ifp_wrn("[_ifp_file_download] warning: got %d instead of %d.\n", i, bytes); return 0; } } #endif static inline int _ifp_dir_open(struct ifp_device * dev) { return ifp_control_send(dev, IFP_LS_OPEN, 0, 0, NULL); } static inline int _ifp_dir_next(struct ifp_device * dev, int mode) { return ifp_control_send(dev, IFP_LS_NEXT, mode, 0, NULL); } static inline int _ifp_dir_close(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_LS_CLOSE, 0, 0, NULL); } //Returns a negative number on error, 0 on success, and the number of //bytes written (if the whole block wasn't written). static inline int _ifp_file_upload(struct ifp_device * dev, int bytes) { int i, cnt; for (cnt = 0; cnt < 3; cnt++) { i = ifp_control_send(dev, IFP_FILE_UPLOAD, bytes, 0, NULL); ifp_os_sleep(1); // JMC - ifp_control_send() needs to take a breath... if ((i > 0 && i == bytes) || (i == 0)) { return i; } ifp_dbg("FAILED with error %d. retrying %d of 3", i, cnt + 1); ifp_os_sleep(100); } return i < 0 ? i : -1; } static inline int _ifp_file_flush(struct ifp_device * dev) { int n; return ifp_control_send_bool(dev, IFP_02_COMMAND, 0, IFP_02_UPLOAD_FLUSH, &n); //printk("[_ifp_file_flush] info, n=%d\n", n); } static inline int _ifp_delete(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_FILE_DELETE, 0, 0, NULL); } static inline int _ifp_mkdir(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_DIR_CREATE, 0, 0, NULL); } static inline int _ifp_rmdir(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_DIR_DELETE, 0, 0, NULL); } static inline int _ifp_format(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_FORMAT, 0, 0, NULL); } static inline int _ifp_update_firmware(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_FIRMWARE_UPDATE, 0, 0, NULL); } //return 1 on success, 0 on 'done', and negative on error static inline int _ifp_dir_next_debug(struct ifp_device * dev, int mode) { return ifp_control_send(dev, IFP_LS_NEXT_DEBUG, mode, 0, NULL); } static inline int _ifp_get_fat_page(struct ifp_device * dev, int dir, int page) { return ifp_control_send_bool(dev, IFP_GET_FAT_PAGE, dir, page, NULL); } static inline int _ifp_set_fat_page(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_SET_FAT_PAGE, 0, 0, NULL); } static inline int _ifp_get_tuner_preset(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_GET_PRESET, 0, 0, NULL); } static inline int _ifp_set_tuner_preset(struct ifp_device * dev) { return ifp_control_send_bool(dev, IFP_SET_PRESET, 0, 0, NULL); } static inline int get_control_value(struct ifp_device * dev, int cmd, int arg1, int arg2) { int i,n; i = ifp_control_send_bool(dev, cmd, arg1, arg2, &n); if (i < 0) { return i; } return n; } static inline int _ifp_echo(struct ifp_device * dev) { return ifp_control_send(dev, IFP_ECHO, 0, 0, NULL); } static inline int _ifp_golf(struct ifp_device * dev) { return ifp_control_send(dev, IFP_GOLF, 0, 0, NULL); } static inline int _ifp_battery(struct ifp_device * dev) { return get_control_value(dev, IFP_02_COMMAND, 0, IFP_02_BATTERY); } static inline int _ifp_capacity(struct ifp_device * dev) { return get_control_value(dev, IFP_GET_CAPACITY, 0, 0); } static inline int _ifp_freespace(struct ifp_device * dev) { return get_control_value(dev, IFP_GET_FREE, 0, 0); } static inline int _ifp_model(struct ifp_device * dev) { return get_control_value(dev, IFP_02_COMMAND, 0, IFP_02_STRING); } static inline int _ifp_firmware_version(struct ifp_device * dev) { return get_control_value(dev, IFP_02_COMMAND, 0, IFP_02_FIRMWARE); } static inline int _ifp_delta(struct ifp_device * dev) { return get_control_value(dev, IFP_02_COMMAND, 0, IFP_02_DELTA); } // //public functions (to this module) // /* * Called on startup by the windows program. Returns 0 the first time it is * called, and 1 every time after that until you powercycle the device. */ int ifp_echo(struct ifp_device * dev) { return _ifp_echo(dev); } /* * Called on startup by the windows program, but only the second time. (ie, when ifp_echo would * be expected to return 1). Called before ifp_echo; returns 1. * * (Note: returns 0 if called the first time, just like ifp_echo.) * (further note: does not appear to help reset the device.) */ int ifp_golf(struct ifp_device * dev) { return _ifp_golf(dev); } /** \brief Initializes device. Initialzies and tests the device for use with device_handle. (::ifp_finalize should be called when you're finished with 'dev'.) \param dev Unitialized memory ready for use as an ifp_device. \param device_handle The iFP USB hardware device handle. \return ::IFP_ERR_DEV_FUBAR if the self-test failed. (Ask the user to jiggle the handle.) \return 0 on success. */ int ifp_init(struct ifp_device * dev, void * device_handle) { int i = 0; if (dev == NULL) { ifp_err("Um, dev is NULL."); i = -EINVAL; goto out; } if (device_handle == NULL) { ifp_err("Um, device_handle is NULL."); i = -EINVAL; goto out; } i = ifp_os_init(dev, device_handle); if (i) { ifp_err_i(i, "ifp_os_init error."); //reserve postive values for special errors. i = i < 0 ? i : -1; goto out; } dev->last_buffer_size = 0; dev->mode = IFP_MODE_NONE; dev->download_pipe_errors = 0; #if 0 i = ifp_golf(dev); ifp_dbg("golf returned %d", i); i = ifp_echo(dev); ifp_dbg("echo returned %d", i); #endif i = ifp_selftest(dev); if (i) { ifp_err_i(i, "self test failed."); i = IFP_ERR_DEV_FUBAR; goto out_err; } return 0; out_err: ifp_os_finalize(dev); out: return i; } IFP_EXPORT(ifp_init); /** \brief Releases device. * Releases any resources aquired by ::ifp_init. Basically, when * ::ifp_init returns 0 (success), ::ifp_finalize must be called * after you're finished with dev. */ int ifp_finalize(struct ifp_device * dev) { int i = 0; if (dev->download_pipe_errors) { ifp_dbg("%d pipe errors were counted", dev->download_pipe_errors); } i = ifp_os_finalize(dev); ifp_err_jump(i, out, "ifp_os_finalize returned an error."); out: return i; } IFP_EXPORT(ifp_finalize); /** returns -ENOENT */ int ifp_file_open(struct ifp_device * dev, const char * s) { int i; //i = _ifp_set_buffer_size(dev, n, 1); i = _ifp_set_buffer_size(dev, IFP_PATH_XFER_SIZE, 1); ifp_err_jump(i, out, "set buffer failed"); i = _ifp_push_unicode(dev, s, IFP_PATH_XFER_SIZE); ifp_err_jump(i, out, "push failed"); i = _ifp_file_open(dev, IFP_FILE); if (i == 1) { i = -ENOENT; } else if (i != 0) { ifp_err_i(i, "open directive failed"); } out: return i; } static int check_path_string(const char * f, int max) { int n; int pn; char * c; if (max){} // satisfy compiler if (strpbrk(f, "/:*?\"<>|")) { return IFP_ERR_BAD_FILENAME; } n = strlen(f); c = strrchr(f, '\\'); if (c == NULL) { if (n >= IFP_MAX_FILENAME) { //ifp_dbg("filename too long (%d) for ifp:\\%s",n,f); return -1; } return 0; } pn = (int)(c-f); if (n - pn >= IFP_MAX_FILENAME) { //ifp_dbg("filename too long (%d) for ifp:\\%s",n-pn,f); return IFP_ERR_BAD_FILENAME; } if (n >= IFP_MAX_PATH) { //ifp_dbg("path too long (%d) for ifp:\\%s",n,f); return IFP_ERR_BAD_FILENAME; } return 0; } /** returns -EEXIST and IFP_ERR_BAD_FILENAME */ int ifp_file_open_new(struct ifp_device * dev, const char * s, int filesize) { int i; //i = _ifp_set_buffer_size(dev, n, 1); i = _ifp_set_buffer_size(dev, IFP_PATH_XFER_SIZE, 0); if (i) { ifp_err_i(i, "set buffer failed"); return i; } i = _ifp_push_unicode(dev, s, IFP_PATH_XFER_SIZE); if (i) { ifp_err_i(i, "push failed"); return i; } i = _ifp_file_open_new(dev, filesize); if (i == 1) { i = check_path_string(s, IFP_PATH_XFER_SIZE); if (i == 0) { i = -EEXIST; } } else if (i != 0) { ifp_err_i(i, "open_new directive failed"); } return i; } int ifp_file_close(struct ifp_device * dev) { return _ifp_file_close(dev); } int ifp_file_size(struct ifp_device * dev) { return _ifp_file_size(dev); } //I'd like to move this out of this file, eventually int ifp_read_seek_forward(struct ifp_device * dev, int count, int blocksize) { int i, j, actual; i = _ifp_set_buffer_size(dev, blocksize, 1); if (i) { ifp_err_i(i, "set buffer failed"); return i > 0 ? -EIO : i; } for (j=0; j != count; j++) { i = _ifp_file_download(dev, blocksize, &actual); if (i) { ifp_err_i(i, "download control message failed"); return i; } if (actual != blocksize) { i = -EIO; ifp_err("seek failed, I can't handle " "getting %d bytes instead of %d\n", i, blocksize ); return -EIO; } } return 0; } //returns the number of bytes received, or a negative number on error. int ifp_file_download(struct ifp_device * dev, void * p, int n) { int i; int actual; if (n == 0) { ifp_err("refusing to download 0 bytes."); return -1; } i = _ifp_set_buffer_size(dev, n, 1); if (i) { ifp_err_i(i, "set buffer failed"); return i > 0 ? -EIO : i; } i = _ifp_file_download(dev, n, &actual); if (i) { ifp_err_i(i, "download control code failed"); return i; } if (actual == 0) { ifp_wrn("warning: zero bytes available for download."); return 0; } //printk("[ifp_file_download] download returned %d\n",i); n = actual; i = _ifp_pop(dev, p, n); if (i) { //Either an error occured, or fewer bytes than 'n' was read. if (i < 0) { ifp_err_i(i, "pop failed"); } else { ifp_err_i(i, "pop returned an unexpected value (fewer bytes read than expected.)"); i = -1; } return i; } return n; } int ifp_file_upload(struct ifp_device * dev, void * p, int n) { int i; if (n == 0) { ifp_err("refusing to upload 0 bytes."); return -1; } i = _ifp_set_buffer_size(dev, n, 1); ifp_err_jump(i, out, "set buffer failed"); i = _ifp_push(dev, p, n); ifp_err_jump(i, out, "push failed"); i = _ifp_file_upload(dev, n); if (i != n) { ifp_dbg("_ifp_file_upload returned %d -- continue anyway on 0", i); ifp_err_jump(i, out, "upload control code failed"); } out: return i; } int ifp_file_flush(struct ifp_device * dev) { unsigned char buf[4]; int i; int status; int n = 0; int const obsene_limit = 100; do { //Sleep even on the first loop.. it's good for soul.. call it "kerma" i = ifp_os_sleep(100); ifp_err_jump(i, out, "trouble falling asleep, loading Dickens.."); i = _ifp_file_flush(dev); ifp_err_jump(i, out, "error issuing 'flush' command"); i = _ifp_pop(dev, buf, sizeof(buf)); ifp_err_jump(i, out, "pop failed"); //flush returns 1 when it's ready to continue, but 2 when //it's still writing to flash. status = ifp_os_le32_to_cpup(buf); if (status == 1) { //done return 0; } if (n == 10) { ifp_wrn("[ifp_file_flush] waiting for device 'ready'."); ifp_wrn("[ifp_file_flush] (normally it doesn't take this long)."); } //infinite loop plug n++; if (n == obsene_limit) { ifp_err("timeout: hit obscene limit"); i = -1; goto out; } } while(status == 2); ifp_err("unrecognized return value %d.",i); i = -1; out: return i; } /** \brief Reports the battery's status on the scale from 0 to 4. * * Typical values are 4, 0 and occasionally 2. */ int ifp_battery(struct ifp_device * dev) { uint8_t buf[4]; int n, i = 0; n = _ifp_battery(dev); if (n < 0) { ifp_err_i(n, "error reading battery"); return n; } IFP_BUG_ON(n != sizeof(buf)); i = _ifp_pop(dev, buf, sizeof(buf)); ifp_err_jump(i, out, "pop failed"); n = ifp_os_le32_to_cpup(buf); return n; out: return i; } /** returns -ENOENT if dir doesn't exist */ int ifp_dir_open(struct ifp_device * dev, const char * s) { int i; //i = _ifp_set_buffer_size(dev, IFP_BUFFER_SIZE, 1); i = _ifp_set_buffer_size(dev, IFP_PATH_XFER_SIZE, 1); ifp_err_jump(i, out, "set buffer failed"); i = _ifp_push_unicode(dev, s, IFP_PATH_XFER_SIZE); ifp_err_jump(i, out, "push failed"); i = _ifp_dir_open(dev); if (i < 0) { ifp_err_i(i, "open directive failed"); } else if (i == 0) { //dir doesn't exist, so it wasn't opened. This isn't //an error, so don't print any messages to the user. i = -ENOENT; } else if (i == 1) { //dir found.. open succeeded. i = 0; } else { ifp_err_i(i, "unexpected return value"); i = -1; } out: return i; } int ifp_dir_next(struct ifp_device * dev, void * s, int n, int mode) { int i; //printk("[ifp_dir_next] buffer is %#03x, n=%#03x.\n", sizeof(buf), n); //i = _ifp_set_buffer_size(dev, IFP_BUFFER_SIZE, 1); //FIXME: IFP_MAXLSLEN 0x80 //use it for 'n' in here. Or check that n is 0x80 i = _ifp_dir_next(dev, mode); if (i < 0) { ifp_err_i(i, "error requesting next filename"); return i; } else if (i == 0) { //no more files to return. Just to be nice, //we're putting a null terminator on s. if (n > 0) { *((char *)s) = 0; } return i; } mode = i; i = _ifp_pop_unicode(dev, s, n, IFP_PATH_XFER_SIZE); if (i) { ifp_err_i(i, "pop failed"); return i > 0 ? -1 : i; } return mode; } int ifp_dir_close(struct ifp_device * dev) { return _ifp_dir_close(dev); } /** \brief Delete the file f. * * Returns -ENOENT if f doesn't exist. */ int ifp_delete(struct ifp_device * dev, const char * f) { int i = 0; i = _ifp_set_buffer_size(dev, IFP_PATH_XFER_SIZE, 1); ifp_err_jump(i, out, "set buffer failed"); i = _ifp_push_unicode(dev, f, IFP_PATH_XFER_SIZE); ifp_err_jump(i, out, "push failed"); i = _ifp_delete(dev); if (i < 0) { ifp_err_i(i, "open request failed"); return i; } else if (i == 1) { //ifp_err("file not found"); return -ENOENT; } i = 0; out: return i; } IFP_EXPORT(ifp_delete); /** \brief Creates a new directory, f. * * Returns -ENOENT if f's parent doesn't exist, -EEXISTS the * dirname 'f' is allready in use, and IFP_ERR_BAD_FILENAME * if 'f' contains unsupported characters. */ int ifp_mkdir(struct ifp_device * dev, const char * f) { int i; i = check_path_string(f, IFP_PATH_XFER_SIZE); if (i == IFP_ERR_BAD_FILENAME) { return i; } i = _ifp_set_buffer_size(dev, IFP_PATH_XFER_SIZE, 1); ifp_err_jump(i, out, "set buffer failed"); i = _ifp_push_unicode(dev, f, IFP_PATH_XFER_SIZE); ifp_err_jump(i, out, "push failed"); i = _ifp_mkdir(dev); if (i < 0) { ifp_err_i(i, "open failed"); return i; } else if (i == 1) { //ifp_err("no such directory"); i = ifp_exists(dev, f); if (i == 1 || i == 2) { //ifp_dbg("directory exists, i=%d, f='%s'", i,f); return -EEXIST; } else if (i == 0) { return -ENOENT; } else { ifp_err("can't determine cause of error"); return -1; } } i = 0; out: return i; } IFP_EXPORT(ifp_mkdir); /* \brief Deletes the directory f. * * (f must be empty.)*/ int ifp_rmdir_nocheck(struct ifp_device * dev, const char * f) { int i; i = _ifp_set_buffer_size(dev, IFP_PATH_XFER_SIZE, 1); ifp_err_jump(i, out, "set buffer failed"); i = _ifp_push_unicode(dev, f, IFP_PATH_XFER_SIZE); ifp_err_jump(i, out, "push failed"); i = _ifp_rmdir(dev); if (i < 0) { ifp_err_i(i, "open failed"); return i; } else if (i == 1) { ifp_err("no such directory"); return -ENOENT; } i = 0; out: return i; } /** \brief Reports the device's capacity in bytes. */ int ifp_capacity(struct ifp_device * dev) { return _ifp_capacity(dev); } IFP_EXPORT(ifp_capacity); /** \brief Reports the device's available free space in bytes. */ int ifp_freespace(struct ifp_device * dev) { return _ifp_freespace(dev); } IFP_EXPORT(ifp_freespace); /** \brief Reformats the device's storage media. * * (Deletes all your stuff.) Returns 0 on success, 1 on error. * This function hasn't been tested--please report if you've successfully used * it. */ int ifp_format(struct ifp_device * dev) { int i = 0; //implemenation note: I don't know if it actually returns 0 on success. i = _ifp_format(dev); //FIXME: figure out how to send the previous URB with a much longer timeout. if (i == -ETIMEDOUT) { i = 0; } return i; } IFP_EXPORT(ifp_format); /** \brief Reformats the device's storage media. * * (Deletes all your stuff.) Returns 0 on success, 1 on error. * This function hasn't been tested--please report if you've successfully used * it. */ int ifp_update_firmware_raw(struct ifp_device * dev) { int i = 0; //implemenation note: I don't know if it actually returns 0 on success. i = _ifp_update_firmware(dev); //FIXME: figure out how to send the previous URB with a much longer timeout. if (i == -ETIMEDOUT) { i = 0; } return i; } IFP_EXPORT(ifp_update_firmware_raw); /** \brief (experimental) retrieves a mystery value. * * I've coined this mystery value "Delta" until a better name is chosen. * * \param values an empty int[4] for the output values. * * Integers returned in 'values' are my interpretation of the data. * The actual raw data has been varried widely: * * \code * 0108 0312 ffff ffff * 0108 0415 ffff ffff * 0108 0616 ffff ffff * 0108 0417 0000 0000 * 0108 0418 ffff ffff * \endcode * * Two devices returned 4 bytes instead of 8. */ int ifp_delta(struct ifp_device * dev, int * values) { uint8_t buf[8]; int i = 0; int bytes; unsigned int nn; bytes = _ifp_delta(dev); if (bytes < 0) { i = bytes; ifp_err_i(i, "error sending control code"); goto out; } else if (bytes > 8) { i = -1; ifp_err("unexpected buffer size of %d, which is more than %d", bytes, (int)sizeof(buf)); goto out; } if (bytes != 8 && bytes != 4) { ifp_wrn("interesting, %d bytes are being sent.", bytes); } i = _ifp_pop(dev, buf, bytes); ifp_err_jump(i, out, "pop failed"); values[0] = buf[0]; values[1] = buf[1]; values[2] = buf[2]; values[3] = buf[3]; if (bytes > 4) { nn = ifp_os_le32_to_cpup(buf + 4); if ( nn != 0xffffffff ) { ifp_wrn("interesting, the last 4 bytes are %08x.", nn); } } else { ifp_wrn("interesting, there were only %d bytes.", bytes); } out: return i; } IFP_EXPORT(ifp_delta); /** \brief Reads in the device's model number into 's'. * * ('size' is the size of the buffer s points to.) * Typical results look like "IFP-590T". */ int ifp_model(struct ifp_device * dev, char * s, int size) { int n, i = 0; n = _ifp_model(dev); if (n < 0) { ifp_err_i(n, "error reading device model string"); return n; } if (n >= size) { ifp_wrn("warning: the buffer is too small for the model string. Truncating. (%d instead of %d.)", n, size); n = size - 1; } i = _ifp_pop(dev, s, n); ifp_err_jump(i, out, "pop failed"); s[n] = '\0'; out: return i; } IFP_EXPORT(ifp_model); /** \brief Reads the device's firmware version. * The firmware version is returned in raw BCD. For human consumption, * I suggest: * * \code * sprintf(s, "%x.%02x", r/0x0100, r%0x100) * \endcode */ int ifp_firmware_version(struct ifp_device * dev) { uint8_t * s = dev->b1; const int transfer_size = 64; int n, i; n = _ifp_firmware_version(dev); if (n < 0) { ifp_err_i(n, "error reading device model string"); return n; } //printk("[ifp_firmware_version] info, asking for %d bytes.\n", n); if (n >= transfer_size) { ifp_wrn("warning: the buffer is too small for the firmware string. Truncating. (%d instead of %d.)", n, transfer_size); n = transfer_size - 1; } i = _ifp_pop(dev, s, n); if (i) { ifp_err_i(i, "pop failed"); return i >= 0 ? -1 : i; } //s[n] = '\0'; return ifp_os_le32_to_cpup(s); } // 0x0100 >= sizeof(raw) >= 0x0010 /* * dir : directory code * slot : the first slot assigned to this entry. * size : number of slots used in this directory entry. (between 1 and 9?) * * eg: * If an entry returned 'slot=42' and 'size=5', you can expect to find * data for this entry in slots 42-46, inclusive: * * 40. ............. * 41. ............. * 42. extra data #4 * 43. extra data #3 * 44. extra data #2 * 45. extra data #1 * 46. main entry * 47. ............. * 48. ............. * 49. ............. */ int ifp_dir_next_debug(struct ifp_device * dev, char * s, int n, int mode, int * dir, int * slot, int * size) { uint8_t * spec_buff = dev->b1; int i; if (dev == NULL) { ifp_err("dev is NULL.."); } //mode = 0; i = _ifp_dir_next_debug(dev, mode); if (i == 0) { //no more files to return. Just to be nice, //we're putting a null terminator on s. if (n > 0) { *((char *)s) = 0; } return 0; } else if (i < 0 || i != 1) { ifp_err_i(i, "error getting next file"); return i < 0 ? i : -1; } i = _ifp_pop_unicode(dev, s, n, IFP_PATH_XFER_SIZE); if (i) { //Either an error occured, or fewer bytes than 'n' was read. if (i < 0) { ifp_err_i(i, "pop error"); } else { ifp_err_i(i, "unexpected pop return value"); } return i; } i = _ifp_dir_next_debug(dev, mode); if (i != 1) { ifp_err_i(i, "error requesting file debug info for %s", s); return i < 0 ? i : -1; } //buffer is actually IFP_BUFFER_SIZE i = _ifp_pop(dev, spec_buff, 0x0100); if (i) { ifp_err_i(i, "error getting file debug info for %s", s); return i < 0 ? i : -1; } if (dir) { *dir = ifp_os_le16_to_cpup(spec_buff); if (*dir != ifp_os_le16_to_cpup(spec_buff + 2)) { ifp_wrn("warning %d != %d [2]", *dir, ifp_os_le16_to_cpup(spec_buff + 2)); } if (*dir != ifp_os_le16_to_cpup(spec_buff + 4)) { ifp_wrn("warning %d != %d [4]", *dir, ifp_os_le16_to_cpup(spec_buff + 4)); } //BUG_ON(*dir != ifp_os_le16_to_cpup(spec_buff + 2)); //BUG_ON(*dir != ifp_os_le16_to_cpup(spec_buff + 4)); } if (size) { *size = ifp_os_le16_to_cpup(spec_buff + 6); } //Combined with the directory number, this is effectively an 'inode number'. i = ifp_os_le16_to_cpup(spec_buff + 8); //Point to the begining of the last entry, not the end of the last (and //all) entries if (slot) { *slot = i - *size; if (*slot < 0) { ifp_err("slot calculated as %d, i=%d, size=%d", *slot, i, *size); return -1; } } //IFP_FAT_SLOTS_PER_PAGE; i = ifp_os_le16_to_cpup(spec_buff + 10); if (i != 0x0100) { ifp_wrn("warning: the field at +10 is %04x instead of 0x0100." " (For %s)", i, s); } mode = ifp_os_le16_to_cpup(spec_buff + 12); if (mode == 0) { ifp_err_i(mode, "more error (on %s)", s); return -1; } return mode; } /** * Loads a page from a directory's FAT. Pages are numbered from 0 onwards. * Each page holds ::IFP_FAT_SLOTS_PER_PAGE (16) slots, so you can calculate * which page you will find which slots. Eg, page 0 has slots 0-15, page 1 * slots 16-31.. etc. * * Note that fat pages are IFP_FAT_PAGE_SIZE bytes each. */ int ifp_get_fat_page(struct ifp_device * dev, int dir, int page, void * p, int n) { const int DOWNLOAD_PAGE_SIZE = IFP_FAT_PAGE_SIZE/2; int i = 0; IFP_BUG_ON(n < DOWNLOAD_PAGE_SIZE*2); i = _ifp_get_fat_page(dev, dir, page); ifp_err_jump(i, out, "error requesting chuck #1 of (%#x, %#x)\n", dir, page); i = _ifp_pop(dev, p, DOWNLOAD_PAGE_SIZE); ifp_err_jump(i, out, "error downloading chuck #1 of (%#x, %#x)\n", dir, page); i = _ifp_get_fat_page(dev, dir, page); ifp_err_jump(i, out, "error requesting chuck #2 of (%#x, %#x)\n", dir, page); i = _ifp_pop(dev, (uint8_t *)p + DOWNLOAD_PAGE_SIZE, DOWNLOAD_PAGE_SIZE); ifp_err_jump(i, out, "error downloading chuck #2 of (%#x, %#x)\n", dir, page); out: return i; } /* Saves a fat page, overwriting previous contents. * Note that fat pages are IFP_FAT_PAGE_SIZE bytes each. */ int ifp_set_fat_page(struct ifp_device * dev, int dir, int page, void * p, int n) { const int HEADER = 0x0010; uint8_t * buf = dev->b1; int i = 0; IFP_BUG_ON(n < IFP_FAT_PAGE_SIZE); //Create the upload payload. memset(buf, 0, HEADER); memcpy(buf + HEADER, p, IFP_FAT_PAGE_SIZE); ((uint16_t *)(buf))[0] = ifp_os_cpu_to_le16(dir); ((uint16_t *)(buf))[1] = ifp_os_cpu_to_le16(page); i = _ifp_set_buffer_size(dev, IFP_FAT_PAGE_SIZE + HEADER, 1); ifp_err_jump(i, out, "error setting buffer size"); i = _ifp_push(dev, buf, IFP_FAT_PAGE_SIZE + HEADER); ifp_err_jump(i, out, "error pushing data for (%d, %d)", dir, page); i = _ifp_set_fat_page(dev); ifp_err_jump(i, out, "error setting FAT page (%d, %d)", dir, page); out: return i; } #define IFP_PRESET_GET_BUF 0x0100 #define IFP_PRESET_SET_BUF 0x0200 #define IFP_PRESET_ENTRY 12 /** \brief Retrieves the tuner preset file into 'data'. * * 'data' is a buffer of 'n' bytes.. n must be at least * ::IFP_TUNER_PRESET_DATA bytes. */ int ifp_get_tuner_presets(struct ifp_device * dev, void * data, int n) { int i = 0; uint8_t * buf = dev->b1; if (n < IFP_TUNER_PRESET_DATA) { ifp_err("buffer too small"); return -1; } i = _ifp_get_tuner_preset(dev); ifp_err_jump(i, out, "problem requesting first chunk"); i = _ifp_pop(dev, buf, IFP_PRESET_GET_BUF); ifp_err_jump(i, out, "problem retrieving first chunk"); memcpy(data, buf+2*IFP_PRESET_ENTRY, 10*IFP_PRESET_ENTRY); i = _ifp_get_tuner_preset(dev); ifp_err_jump(i, out, "problem requesting second chunk"); i = _ifp_pop(dev, buf, IFP_PRESET_GET_BUF); ifp_err_jump(i, out, "problem retrieving second chunk"); memcpy(data + 10*IFP_PRESET_ENTRY, buf, 10*IFP_PRESET_ENTRY); out: if (i > 0) { ifp_err("returning silent error"); } return i>0 ? -1 : i; } /** \brief Stores the tuner preset file 'data' on the device. * * 'data' is tuner preset file to be stored.. it is extactly * ::IFP_TUNER_PRESET_DATA bytes. 'n' must be exactly ::IFP_TUNER_PRESET_DATA * */ int ifp_set_tuner_presets(struct ifp_device * dev, void * data, int n) { //20*12bytes = 240bytes. int i = 0; uint8_t * buf = dev->b1; #if IFP_BUFFER_SIZE < IFP_PRESET_SET_BUF #error "assumptions no longer true." #endif if (n != IFP_TUNER_PRESET_DATA) { ifp_err("this buffer is %d instead of %d bytes.",n, IFP_TUNER_PRESET_DATA); return -1; } memset(buf, 0, IFP_BUFFER_SIZE); memcpy(buf, data, IFP_TUNER_PRESET_DATA); i = _ifp_set_buffer_size(dev, IFP_PRESET_SET_BUF, 1); ifp_err_jump(i, out, "error setting buffer size"); i = _ifp_push(dev, buf, IFP_PRESET_SET_BUF); ifp_err_jump(i, out, "error sending data"); i = _ifp_set_tuner_preset(dev); ifp_err_jump(i, out, "problem sending 'save preset' command"); out: if (i > 0) { ifp_err("returning silent error"); } return i>0 ? -1 : i; } ifpgui-1.0.0/libifp/comp.c000755 001750 000144 00000047725 11403075155 013561 0ustar00000000 000000 /* * ifp supporting functions.. "compound" ones * $Id: comp.c,v 1.1.1.1 2005/08/04 19:45:27 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; */ #include "ifp.h" #include "ifp_os.h" #include "prim.h" static char * battery_status_art [] = { "=[ ]", "=[# ]", "=[## ]", "=[### ]", "=[####]", }; /** \brief Creates a human readable status string. * * Creates a human readable status string similar to * "model IFP-007T, firmware 1.14, battery =[####], delta 1.8.4.42". */ int ifp_device_info(struct ifp_device * dev, char * s, int n) { char * p = (char*)dev->b2; char * battery_info = NULL; int i = 0; int version, battery; int deltas[4]; i = ifp_model(dev, p, IFP_BUFFER_SIZE); if (i) { ifp_err_i(i, "error getting model number."); p[0] = '-'; p[1] = '\0'; } version = ifp_firmware_version(dev); if (version < 0) { ifp_err_i(version, "error getting firmware version."); i = version; } battery = ifp_battery(dev); if (battery < 0) { ifp_err_i(battery, "error getting firmware version."); battery_info = "=[fubr]"; i = battery; } else if (battery > 4) { battery_info = "=[????]"; } else { battery_info = battery_status_art[battery]; } i = ifp_delta(dev, deltas); if (i) { ifp_wrn("problem getting delta value (error code %d).", i); //experimental feature, don't return the error i = 0; } snprintf(s, n, "model %s, firmware %x.%02x, battery %s" ", delta %d.%d.%d.%d" , p, version/0x100, version % 0x100, battery_info , deltas[0], deltas[1], deltas[2], deltas[3] ); return i; } IFP_EXPORT(ifp_device_info); static int noop_dir_callbk(void * p, int t, const char * s, int fs) { int * pn = p; if (t){} // satisfy compiler if (s){} // satisfy compiler if (fs){} // satisfy compiler if (*pn == 5) { //return early--save time. return 1; } (*pn)++; return 0; } /** \brief Tests communications with the device. * * This is done automatically on startup by ::ifp_init, so normal shouldn't * need to call this.. unless they really want to. */ int ifp_selftest(struct ifp_device * dev) { int i = 0; int n = 0; i = ifp_firmware_version(dev); if (i < 0) { ifp_err_i(i, "couldn't get firmware version."); return i; } i = ifp_battery(dev); if (i < 0) { ifp_err_i(i, "couldn't get battery status."); return i; } i = ifp_list_dirs(dev, "\\", noop_dir_callbk, &n); if (i) { ifp_err_i(i, "couldn't get basic directory listing."); return i; } if (n < 3) { ifp_wrn("only %d items could be found in the root directory. Either there's a problem, or the device is empty.", n); } return i; } IFP_EXPORT(ifp_selftest); /** returns -ENOENT, -EEXIST */ static int touch(struct ifp_device * dev, const char * dir, const char * file) { int i = 0; //ifp_dbg("[ifp touch] touching %s\n", (char *)file); //ifp_dbg("[ifp touch] in %s\n", (char *)dir); i = ifp_dir_open(dev, dir); ifp_err_expect(i, i==-ENOENT, out, "couldn't open dir."); i = ifp_file_open_new(dev, file, 0); ifp_err_expect(i, i==-EEXIST||i==-IFP_ERR_BAD_FILENAME, out, "couldn't create file."); i = ifp_file_close(dev); ifp_err_jump(i, out, "couldn't close file."); i = ifp_dir_close(dev); ifp_err_jump(i, out, "couldn't close dir."); out: return i; } int _ifp_list_dirs_debug( struct ifp_device * dev, const char * name, int(*callbk)(void *, int, const char *, int, int, int, int), void * context) { //unsigned char utf8_buf[IFP_BULK_MAXPATHLEN]; uint8_t * utf8_buf = dev->b2; int i = 0; i = ifp_dir_open(dev, name); ifp_err_jump(i, out, "dir.open failed."); while(1) { int dir, slot, entrysize; int ret; ret = ifp_dir_next_debug(dev, (char*)utf8_buf, IFP_BUFFER_SIZE, IFP_FILE|IFP_DIR, &dir, &slot, &entrysize); if (ret < 0) { ifp_err_i(ret, "error sending dir.next."); i = ret; goto out; } else if (ret == 0) { //ifp_dbg("Done."); break; } else { i = callbk(context, ret, (char*)utf8_buf, strlen((char*)utf8_buf), dir, slot, entrysize); if (i < 0) { ifp_err_i(i, "callback returned error."); break; } else if (i == 1) { //ifp_dbg("callback requested early break."); break; } else if (i != 0) { ifp_err_i(i, "callback returned a wierd value."); i = -1; goto out; } else { //ifp_dbg("callback returned %d for '%s'.", // i, utf8_buf); } } } i = ifp_dir_close(dev); ifp_err_jump(i, out, "dir.close failed."); i = 0; out: return i; } static int get_id_callback(void * context, int type, const char * name, int n, int dir, int slot, int entrysize) { void ** pp = (void **) context; char * target = pp[0]; int * target_width = pp[1]; int * pdir = pp[2]; int * pslot = pp[3]; int * pentrysize = pp[4]; int * found = pp[5]; if (type){} // satisfy compiler #if 0 if (entrysize>1) { ifp_dbg("%10.10s: dir=%#x %d slots end at %2d, so you can find them in %d-%d", name, dir, entrysize, slot, slot-entrysize, slot-1); } else { ifp_dbg("%10.10s: dir=%#x a slot ends at %2d, it's just %d", name, dir, slot, slot-1); } #endif if ( *target_width == n) { if (strncmp(target, name, n)==0) { //printk("[get_id_callback] '%s' matches '%s'.\n", // target, name); *pdir = dir; *pslot = slot; *pentrysize = entrysize; *found = 1; return 1; } } return 0; } static int get_file_id(struct ifp_device * dev, const char * dir, const char * file, int * id_dir, int * id_slot, int * id_size) { int i = 0; int filelen; int dirlen; int found = 0; void ** context[6] = {(void*)file, (void*)&filelen, (void*)id_dir, (void*)id_slot, (void*)id_size, (void*)&found}; dirlen = strlen(dir); //one extra for the path separator filelen = strlen(file) - dirlen; file += dirlen; if (dirlen > 1) { filelen--; file++; } //ifp_dbg("file='%s', filelen=%d, dir='%s', dirlen=%d", file, filelen, // dir, dirlen); if (filelen < 0) { ifp_err_i(i, "bailing"); return -1; } IFP_BUG_ON(filelen < 0); context[0] = (void *)(file); //FIXME: return an error on not finding a matching entry. i = _ifp_list_dirs_debug(dev, dir, get_id_callback, (void *)context); ifp_err_jump(i, out, "list failed."); if (found == 0) { ifp_err("entry not found for dir='%s' file='%s'", dir, file); i = -1; } //ifp_dbg("returning dir=%#x, page=%#x, off=%#x", *id_dir, *id_slot, *id_size); out: return i; } /* * need to convert "slot number" -> "page" and "offset" * * */ /* Calculates the address of * * Given that an entry ends on (base_page, slot_number * */ static inline int calc_slot_address( int slot_number, int record_offset, int * page, int * offset ) { const int slot_width = IFP_FAT_SLOT_WIDTH; int abs_offset; IFP_BUG_ON(page == NULL); IFP_BUG_ON(offset == NULL); abs_offset = slot_width * slot_number + record_offset; *page = abs_offset / IFP_FAT_PAGE_SIZE; *offset = abs_offset % IFP_FAT_PAGE_SIZE; return 0; } static int swap_fat_entries(struct ifp_device * dev, int id_dirA, int id_slotA, int id_sizeA, int id_dirB, int id_slotB, int id_sizeB) { const int data_ptr_size = 8; const int page_size = IFP_FAT_PAGE_SIZE; uint8_t tmp[data_ptr_size]; uint8_t * _buffA = dev->b2, * _buffB = dev->b3; uint8_t * buffA = _buffA, * buffB = _buffB; int i = 0; int id_pageA, id_pageB, id_offA, id_offB; // +2*IFP_FAT_PAGE_SIZE/IFP_FAT_SLOT_WIDTH == +2*16 == +32 == +0x20 i = calc_slot_address(id_slotA+id_sizeA - 1, IFP_FAT_SLOT_WIDTH - data_ptr_size, &id_pageA, &id_offA); ifp_err_jump(i, out, "cal failed. (a)"); i = calc_slot_address(id_slotB+id_sizeB-1, IFP_FAT_SLOT_WIDTH - data_ptr_size, &id_pageB, &id_offB); ifp_err_jump(i, out, "cal failed. (b)"); i = ifp_get_fat_page(dev, id_dirA, id_pageA, _buffA, page_size); ifp_err_jump(i, out, "read failed for page=%#x, dir=%#x (a)", id_pageA, id_dirA); if (id_dirA == id_dirB && id_pageA == id_pageB) { //ifp_dbg("same page number, using same buffers."); buffB = _buffA; } else { i = ifp_get_fat_page(dev, id_dirB, id_pageB, _buffB, page_size); ifp_err_jump(i, out, "read failed for page=%#x, dir=%#x (b)", id_pageB, id_dirB); } buffA += id_offA; buffB += id_offB; #if 0 { uint8_t *slot; slot = buffA - (IFP_FAT_SLOT_WIDTH - data_ptr_size); ifp_dbg("slot %d is %02x ('%s')", id_slotA, (int)slot[0], slot); ifp_dbg("page %d, offset %d", id_pageA, id_offA); slot = buffB - (IFP_FAT_SLOT_WIDTH - data_ptr_size); ifp_dbg("slot %d is %02x ('%s')", id_slotB, (int)slot[0], slot); ifp_dbg("page %d, offset %d", id_pageB, id_offB); } #endif memcpy(tmp, buffA, data_ptr_size); memcpy(buffA, buffB, data_ptr_size); memcpy(buffB, tmp, data_ptr_size); i = ifp_set_fat_page(dev, id_dirA, id_pageA, _buffA, page_size); ifp_err_jump(i, out, "write failed. (a)"); if (id_dirA != id_dirB || id_pageA != id_pageB) { i = ifp_set_fat_page(dev, id_dirB, id_pageB, _buffB, page_size); ifp_err_jump(i, out, "write failed. (b)"); } out: return i; } static int swap_filenames(struct ifp_device * dev, const char * oldpath, const char * newpath) { int id_dirA, id_dirB, id_slotA, id_slotB, id_sizeA, id_sizeB; int i; char * b = (char*)dev->b3; i = ifp_copy_parent_string(b, oldpath, IFP_BUFFER_SIZE); ifp_err_jump(i, out, "getting parent directory of %s failed.",oldpath); i = get_file_id(dev, b, oldpath, &id_dirA, &id_slotA, &id_sizeA); ifp_err_jump(i, out, "file_id failed. (a)"); i = ifp_copy_parent_string(b, newpath, IFP_BUFFER_SIZE); ifp_err_jump(i, out, "getting parent directory of %s failed.",newpath); i = get_file_id(dev, b, newpath, &id_dirB, &id_slotB, &id_sizeB); ifp_err_jump(i, out, "file_id failed. (b)"); b = NULL; //release b3 //uses b1,b2,b3. i = swap_fat_entries(dev, id_dirA, id_slotA, id_sizeA, id_dirB, id_slotB, id_sizeB); ifp_err_jump(i, out, "swap failed. " "dirA=%#x, pageA=%#x, offA=%#x, dirB=%#x, pageB=%#x, offB=%#x", id_dirA, id_slotA, id_sizeA, id_dirB, id_slotB, id_sizeB); out: return i; } /** returns -ENOENT, -EEXIST, IFP_ERR_BAD_FILENAME */ int ifp_rename_file(struct ifp_device * dev, const char * old_file, const char * new_file) { int i; char * b = (char*)dev->b3; i = ifp_copy_parent_string(b, new_file, strlen(new_file)); ifp_err_jump(i, out, "getting parent directory of %s failed.",new_file); i = touch(dev, b, new_file); ifp_err_expect(i, i==-ENOENT || i==-EEXIST || i==IFP_ERR_BAD_FILENAME, out, "Touch failed."); b = NULL; //release b3 i = swap_filenames(dev, old_file, new_file); ifp_err_jump(i, out, "filename swap failed."); i = ifp_delete(dev, old_file); ifp_err_jump(i, out, "delete failed."); out: return i; } /** returns -ENOENT, -EEXIST, -EACCES, IFP_ERR_BAD_FILENAME */ int ifp_rename_dir(struct ifp_device * dev, const char * old_dir, const char * new_dir) { int i; if (strcmp(old_dir, "\\VOICE") == 0 || strcmp(old_dir, "\\RECORD") == 0) { return -EACCES; } i = ifp_mkdir(dev, new_dir); ifp_err_expect(i, i==-ENOENT || i==-EEXIST || i==IFP_ERR_BAD_FILENAME, out, "mkdir failed."); i = swap_filenames(dev, old_dir, new_dir); ifp_err_jump(i, out, "filename swap failed."); i = ifp_rmdir(dev, old_dir); ifp_err_jump(i, out, "rmdir failed."); out: return i; } /** \brief Renames a file or directory. Renames or moves the object 'old_path' to 'new_path'. \param old_path an existing file or directory. \param new_path an available path for a new file or directory. (Ie, the path's parent directory exists and the path isn't in use by another object in that directory.) Returns 0 on success and -ENOENT, -EEXIST, -EACCES, IFP_ERR_BAD_FILENAME on failure, as appropriate. */ int ifp_rename(struct ifp_device * dev, const char * old_path, const char * new_path) { int i; i = ifp_is_dir(dev, old_path); if (i < 0) { ifp_err_jump(i, out, "ifp_is_dir failed"); } if (i) { //directory i = ifp_rename_dir(dev, old_path, new_path); ifp_err_expect(i, i==-ENOENT || i==-EEXIST || i==-EACCES, out, "ifp_rename_dir failed"); } else { i = ifp_rename_file(dev, old_path, new_path); ifp_err_expect(i, i==-ENOENT || i==-EEXIST, out, "ifp_rename_file failed"); } out: return i; } IFP_EXPORT(ifp_rename); static int get_file_size(struct ifp_device * dev, const char * dir, int dsize, const char * f, int fsize) { int size = 0; int i; char * buf = (char*)dev->b3; char * p = buf; int dlen, flen; if (dsize){} // satisfy compiler if (fsize){} // satisfy compiler dlen = strlen(dir); flen = strlen(f); IFP_BUG_ON(dlen + flen + 2 >= IFP_BULK_MAXPATHLEN); memcpy(p, dir, dlen); p += dlen; if (dlen > 1) { //if dir ls simply \ we don't want to make it \\. *p = '\\'; p++; } memcpy(p, f, flen); p += flen; *p = 0; p++; i = ifp_file_open(dev, buf); if (i == 1) { ifp_err("The file '%s' doesn't exist!", buf); return -ENOENT; } else if (i) { ifp_err_i(i, "Error opening file '%s'.", buf); return i < 0 ? i : -EIO; } size = ifp_file_size(dev); if (size < 0) { ifp_err_i(size, "Error getting size of '%s'.", buf); //fallthrough } i = ifp_file_close(dev); if (i) { ifp_err_i(i, "Error closing file '%s'.", buf); return i < 0 ? i : -EIO; } return size; } int _ifp_list_dirs( struct ifp_device * dev, const char * dirname, int dsize, int type, int(*callbk)(void *, int, const char *, int), void * context) { uint8_t * utf8_buf = dev->b2; int i = 0; IFP_BUG_ON(sizeof(dev->b2) < IFP_BULK_MAXPATHLEN); while(1) { int ret; ret = ifp_dir_next(dev, utf8_buf, IFP_BULK_MAXPATHLEN, type); if (ret < 0) { ifp_err_i(ret, "Error sending control message dir.next."); i = ret; return i; } else if (ret == 0) { //ifp_dbg("Done."); break; } else { int filesize = 0; if (ret == IFP_FILE) { filesize = get_file_size(dev, dirname, dsize, (char*)utf8_buf, IFP_BULK_MAXPATHLEN); } if (filesize < 0) { ifp_err_i(filesize, "Error getting filesize."); return filesize; } i = callbk(context, ret, (char*)utf8_buf, filesize); if (i < 0) { ifp_err_i(i, "Callback returned error."); return i; } else if (i == 1) { //ifp_dbg("[_ifp_list_dirs] callback requested early break.\n"); break; } else if (i != 0) { ifp_err_i(i, "Callback returned a wierd value."); return -EIO; } } } i = 0; return i; } /** \brief Reads directory contents. Passes the contents of 'dirname' to a callback function, one entry at a time. The parameters given to the callback function are: - void * context is the same context passed to list_dirs - int type is either ::IFP_FILE or ::IFP_DIR - char * name is the entry name without a full path. (Ie, no '\\' chars) - int filesize is the number of bytes in a file (undefied for directories) . The callback can return '0' on success, '1' to "break" (leave early without error) or <0 on error. Returns 0 on success or -ENOENT if the directory doesn't exist. */ int ifp_list_dirs( struct ifp_device * dev, const char * filename, int(*callbk)(void *, int, const char *, int), void * context) { int i = 0; i = ifp_dir_open(dev, filename); ifp_err_expect(i, i==-ENOENT, out, "dir.open failed."); i = _ifp_list_dirs(dev, filename, strlen(filename), IFP_FILE|IFP_DIR, callbk, context); ifp_err_jump(i, out, "_list_dirs failed."); i = ifp_dir_close(dev); ifp_err_jump(i, out, "dir.close failed."); out: return i; } IFP_EXPORT(ifp_list_dirs); static int _subdir_counter(void * context, int type, const char * name, int size) { int * pn = context; (*pn) += 1; if (type){} // satisfy compiler if (name){} // satisfy compiler if (size){} // satisfy compiler return 0; } //NOTE: this is should be removed int ifp_count_subdirs(struct ifp_device * dev, const char * dirname) { int i = 0; int n = 0; i = ifp_dir_open(dev, dirname); if (i) { ifp_err_i(i, "dir_open failed"); return i; } i = _ifp_list_dirs(dev, dirname, strlen(dirname), IFP_DIR, _subdir_counter, &n); if (i) { ifp_err_i(i, "ifp_list_dirs failed"); return i; } else { IFP_BUG_ON(n < 0); } i = ifp_dir_close(dev); if (i) { ifp_err_i(i, "dir_close failed"); return i; } return n; } /** \brief Tests if f is a file. * * Returns 1 if it is, and 0 if it doesn't exist or isn't a file. */ int ifp_is_file(struct ifp_device * dev, const char * f) { int i = 0, r = 0; char * b = (char*)dev->b2; i = ifp_copy_parent_string(b, f, IFP_BULK_MAXPATHLEN); ifp_err_jump(i, out, "parent directory copy failed"); i = ifp_dir_open(dev, b); if (i == -ENOENT) { //no such dir, therefore no such file. qed return 0; } else if (i != 0) { ifp_err_i(i, "dir.open failed"); goto out; } i = ifp_file_open(dev, f); if (i == -ENOENT) { //no such file r = 0; } else { r = 1; i = ifp_file_close(dev); ifp_err_jump(i, out, "file.close failed."); } i = ifp_dir_close(dev); ifp_err_jump(i, out, "dir.close failed."); return r; out: if (i > 0) { i = -1; } return i; } IFP_EXPORT(ifp_is_file); /** \brief Tests if f is a directory. * * Returns 1 if it is, and 0 if it doesn't exist or isn't a dir. */ int ifp_is_dir (struct ifp_device * dev, const char * f) { int i = 0; i = ifp_dir_open(dev, f); if (i == 0) { //does exist i = ifp_dir_close(dev); ifp_err_jump(i, out, "dir.close failed."); //ifp_dbg("here, dir ifp:\\%s exists", f); return 1; } else if (i == -ENOENT) { //does not exist //ifp_dbg("here, dir ifp:\\%s does not exist", f); return 0; } else { //chipmunk ifp_err_i(i, "dir.open failed"); } out: i = i < 0 ? i : -1; return i; } IFP_EXPORT(ifp_is_dir); /** \brief Tests for the existance of f. * * \return ::IFP_FILE if f is a file * \return ::IFP_DIR if f is a directory * \return 0 if f doesn't exist * \return <0 error. */ int ifp_exists (struct ifp_device * dev, const char * f) { int i = 0; i = ifp_is_dir(dev, f); //ifp_dbg("is_dir returned %d for %s.", i, f); if (i == 1) { return IFP_DIR; } else if (i < 0) { ifp_err_i(i, "dir checking failed"); return i; } else if (i != 0) { ifp_err_i(i, "unexpected result checking dir"); return -1; } i = ifp_is_file(dev, f); //ifp_dbg("is_file returned %d for %s / %s", i, d, f); if (i == 1) { return IFP_FILE; } else if (i == 0) { return 0; } else if (i < 0) { ifp_err_i(i, "dir checking failed"); return i; } else { ifp_err_i(i, "unexpected result checking file"); return -1; } return i; } IFP_EXPORT(ifp_exists); static int _empty_dir_checker(void * context, int type, const char * name, int size) { int * pn = context; (*pn) += 1; if (type){} // satisfy compiler if (name){} // satisfy compiler if (size){} // satisfy compiler //return early return 1; } //NOTE: this is should be removed //returns -ENOTEMPTY static int check_dir_is_empty(struct ifp_device * dev, const char * dirname) { int i = 0; int n = 0; i = ifp_dir_open(dev, dirname); ifp_err_expect(i, i == -ENOENT, err, "dir_open failed"); i = _ifp_list_dirs(dev, dirname, strlen(dirname), IFP_FILE|IFP_DIR, _empty_dir_checker, &n); ifp_err_jump(i, err, "ifp_list_dirs failed"); IFP_BUG_ON(n < 0); i = ifp_dir_close(dev); ifp_err_jump(i, err, "dir_close failed"); if (n != 0) { i = -ENOTEMPTY; } err: return i; } /** \brief Deletes the directory f. * * Returns 0 on success or: * -ENOENT * -ENOTEMPTY * -EACCES */ int ifp_rmdir(struct ifp_device * dev, const char * d) { int i = 0; if (strcmp(d, "\\VOICE") == 0 || strcmp(d, "\\RECORD") == 0) { //ifp_err("Can't delete ifp:\\%s", d); return -EACCES; } //will catch if the directory doesn't exist. i = check_dir_is_empty(dev, d); ifp_err_expect(i, i==-ENOENT || i==-ENOTEMPTY, err, "error checking dir"); i = ifp_rmdir_nocheck(dev, d); ifp_err_jump(i, err, "error removing dir"); err: return i; } IFP_EXPORT(ifp_rmdir); ifpgui-1.0.0/gui_user.cpp000755 001750 000144 00000052616 11334723014 013530 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include #include #include //#include //#include //#include //#include //#include #include "gui_user.h" #include "backend/iointerface.h" #include "backend/ifpinterface.h" #include "ifpguiview.h" QList new_ifp_file_tree; QString iFPNotConnectedMsg = QObject::tr("Could not communicate with iRiver device.\n" "Try unplugging the USB link, powering off the device, and plugging it back in.\n\n" "After you have reconnected, double-click the root ('\\') directory in the iRiver Filesystem panel."); //----------------------------------------------------------- // helper functions //----------------------------------------------------------- int get_next_filedir_basename(char *str); void slash2backslash(QString& str); int ifp_get_size_recursive(QList *ifp_fi, int *filecnt); //=========================================================================== // file_dir_callbk() // This is the ifp list callback. This is used to build the file tree // which is stored in ifp_file_tree; // // context : the current node to populate in the file tree. // type : the type of node (file or directory) // filename : the name of the node // filesize : the size of the file if the node is a file // // Returns: 0 on success //=========================================================================== static int file_dir_callbk(void * context, int type, const char * filename, int filesize) { QList *list; FileInfos fi; list = (QList *)context; if (list == NULL) return(-1); fi = FileInfos(QString::fromUtf8(filename, -1), type, filesize, NULL); list->append(fi); return 0; } //=========================================================================== // get_next_filedir_basename() // This function returns the first position of a dir seperator char. //=========================================================================== int get_next_filedir_basename(QString str) { int ret; ret = str.indexOf("\\", 0); if (ret == -1) ret = str.indexOf("/", 0); return(ret); } //=========================================================================== // ifp_get_size_recursive() // This function gets size of the directory @ifp_fi recursively. // // Returns: size on success //=========================================================================== int ifp_get_size_recursive(FileInfos *finfo, int *filecnt) { int size; QList *list; QList::iterator fi_iter; size = 0; list = finfo->sub_file_tree; for (fi_iter= list->begin(); fi_iter != list->end(); ++fi_iter) { if (fi_iter->FileType() == IFP_FILE) { size += fi_iter->FileSize(); (*filecnt) += 1; } else if (fi_iter->FileType() == IFP_DIR) { size += ifp_get_size_recursive(&(*fi_iter), filecnt); } } return(size); } //=========================================================================== // local_get_dir_size() // This function gets size of the directory @filename. All its files // and subdirectories with their files. // // Returns: filesize on success // -ENOENT for filename not found //=========================================================================== int local_get_dir_size(QString dirName, int *filecnt) { int filesize, cnt, tmpcnt; QDir dir(dirName, "", QDir::Name | QDir::IgnoreCase, QDir::AllEntries); if (!dir.exists()) return(0); QFileInfoList list = dir.entryInfoList(); QFileInfo finfo; filesize = 0; for (cnt = 0; cnt < list.size(); cnt++) { finfo = list.at(cnt); if (finfo.isFile()) { filesize += finfo.size(); *filecnt += 1; } else { if ((finfo.fileName() != ".") && (finfo.fileName() != "..")) { tmpcnt = 0; filesize += local_get_dir_size(finfo.filePath(), &tmpcnt); *filecnt += tmpcnt; } } } return(filesize); } int showYesNoAllMsgBox(const QString& msgH, const QString& msgB) { int mbret; QMessageBox mb(msgH, msgB, QMessageBox::Question, QMessageBox::No | QMessageBox::Escape, QMessageBox::Yes | QMessageBox::Default, QMessageBox::YesAll); mbret = mb.exec(); return(mbret); } int showYesNoMsgBox(const QString& msgH, const QString& msgB) { int mbret; QMessageBox mb(msgH, msgB, QMessageBox::Question, QMessageBox::No | QMessageBox::Escape, QMessageBox::Yes | QMessageBox::Default, 0); mbret = mb.exec(); return(mbret); } void showInfoMsgBox(const QString& msgH, const QString& msgB) { QMessageBox mb(msgH, msgB, QMessageBox::Information, QMessageBox::Ok, 0, 0); mb.exec(); return; } void backslash2slash(QString& str) { str.replace('\\', '/'); } void slash2backslash(QString& str) { str.replace('/', '\\'); } //=========================================================================== // ifp_get_info() // This function gets the FileInfos for the given @filename. // // Returns: IFP_OK on success // -ENOENT for filename not found //=========================================================================== int TiFPgetInfo::iFPgetInfo(QString filename, FileInfos& finfo) { t_filename = filename; t_finfo = finfo; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } finfo = t_finfo; return (t_result); } void TiFPgetInfo::run() { int cnt; QString tmp_name, scratch_name, split_str; FileInfos fi_temp; QList *list; QList::iterator fi_iter; t_result = -ENOENT; if ((t_filename == "\\") || (t_filename == "/")) { t_finfo = new_ifp_file_tree.first(); t_result = IFP_OK; return; } if (new_ifp_file_tree.isEmpty()) return; // create the path list split_str = t_filename.left(1); QStringList lst(t_filename.split(split_str)); // start with the node after the root node (\) fi_temp = new_ifp_file_tree.first(); QStringList::Iterator it2 = lst.begin(); for ( ; it2 != lst.end(); ++it2) { list = fi_temp.sub_file_tree; if (list == NULL) return; if (list->isEmpty()) return; // get the name of the node to find tmp_name = *it2; // find the node in the list for (cnt=0; cnt < list->count(); cnt++) { if (list->at(cnt).FileName() == tmp_name) { t_finfo = list->at(cnt); t_result = IFP_OK; break; } } if (t_result == IFP_OK) break; } return; } //=========================================================================== // iFPreadFileTree() // This function retrieves all files on the iFP device. It stores them // in the ifp_file_tree structure. // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPreadFileTree::iFPreadFileTree() { start(); while (isRunning()) { qApp->processEvents(); msleep(10); } return (t_result); } void TiFPreadFileTree::run() { QString start_dir; FileInfos fi_temp; new_ifp_file_tree.clear(); // the list owns the objects //new_ifp_file_tree.setAutoDelete(TRUE); // Add the first element "/" fi_temp = FileInfos("/", IO_INTF_DIR, 0, NULL); fi_temp.sub_file_tree = new QList; start_dir = "/"; t_result = iFPgetDirList(&ifp_dev, start_dir, fi_temp.sub_file_tree); new_ifp_file_tree.append(fi_temp); return; } //=========================================================================== // iFPgetDirList() // This function retrieves all files in the directory specified by // @filename and fills in the @file_info_ptr parameter with the infos // about every entry. Also, it goes through the list and gets the info // (files and directories) for each subdirectiry. // // dev : the ifp_device structure // filename : the name of the directory to get the list of // file_finfo_ptr : the address of the structure to place the info into // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPreadFileTree::iFPgetDirList(struct ifp_device * dev, QString& filename, QList *list) { int ret; QString fullname, tmp_str; //char fullname[IFP_MAXPATHLEN]; QList::iterator fi_iter; slash2backslash(filename); // check if directory exists if (ifp_exists(dev, filename.toUtf8().data()) != IFP_DIR) { return (-ENOENT); } ret = ifp_list_dirs(dev, filename.toUtf8().data(), file_dir_callbk, list); if (ret) { ifp_err_i(ret, "couldn't get basic directory listing."); return IFP_ERR_DEV_FUBAR; } // check if directory is empty if (list->isEmpty()) { return(IFP_OK); } // now look through results and get the subdirectories for (fi_iter= list->begin(); fi_iter != list->end(); ++fi_iter) { if (fi_iter->FileType() == IO_INTF_DIR) { fullname = filename; if (!fullname.endsWith("\\")) fullname.append("\\"); fullname.append(fi_iter->FileName()); fullname.truncate(IFP_MAXPATHLEN); // get the subdirectiry info fi_iter->sub_file_tree = new QList; ret = iFPgetDirList(dev, fullname, fi_iter->sub_file_tree); if (ret != IFP_OK) return(ret); } } return(IFP_OK); } //=========================================================================== // iFPgetDirSize() // This function gets size of the directory @filename. All its files // and subdirectories with their files. // // Returns: filesize on success // -ENOENT for filename not found //=========================================================================== int TiFPgetDirSize::iFPgetDirSize(QString filename, int *filecnt) { t_filename = filename; t_filecnt = *filecnt; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } *filecnt = t_filecnt; return (t_result); } void TiFPgetDirSize::run() { FileInfos fi_temp; TiFPgetInfo t_info; // = new TiFPgetInfo(); t_result = t_info.iFPgetInfo(t_filename, fi_temp); if (t_result != IFP_OK) return; if (fi_temp.FileType() == IFP_FILE) { t_result = -ENOENT; return; } // get the size t_result = ifp_get_size_recursive(&fi_temp, &t_filecnt); return; } //=========================================================================== // iFPgetFileList() // This function gets the list of files and sub directories for a given // file. The data is gathered from the local copy and not queried from // the iFP device. // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPgetFileList::iFPgetFileList(const QString& filename, QList *list) { t_filename = filename; t_list = list; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } return (t_result); } void TiFPgetFileList::run() { FileInfos finfo, nfinfo; QList *tmp_list; QList::iterator fi_iter; TiFPgetInfo t_info; // = new TiFPgetInfo(); t_result = t_info.iFPgetInfo(t_filename, finfo); if (t_result != IFP_OK) return; tmp_list = finfo.sub_file_tree; if (tmp_list == NULL) { t_result = IFP_OK; return; } for (fi_iter= tmp_list->begin(); fi_iter != tmp_list->end(); ++fi_iter) { nfinfo = FileInfos(fi_iter->FileName(), fi_iter->FileType(), fi_iter->FileSize(), NULL); t_list->append(nfinfo); } return; } //=========================================================================== // iFPdownloadFile() // Download the file sfilename from the iFP device to the local directory destDir // // @param sfilename the source filename on the iFP device. Must be / delimited. // @param destDir the local directory; the place to save the downloaded file // @param fn_context the current context of the transfer. User defined structure // usually used to keep track of the progress of the download. // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPdownloadFile::iFPdownloadFile(const QString& sfilename, const QString& destDir, void* fn_context) { t_sfilename = sfilename; t_destDir = destDir; t_fn_context = fn_context; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } return (t_result); } void TiFPdownloadFile::run() { int pos; QByteArray sbuffer, dbuffer; QString Message, destination, baseName, err, ifpSourceName; t_result = -1; if (ifp_dh == NULL) return; baseName = t_sfilename; pos = baseName.lastIndexOf('/'); baseName.remove(0, pos + 1); destination = t_destDir + baseName; ifpSourceName = t_sfilename; slash2backslash(ifpSourceName); sbuffer = ifpSourceName.toUtf8(); dbuffer = destination.toUtf8(); t_result = ifpgui_ifp_download_file(&ifp_dev, sbuffer, dbuffer, progress, t_fn_context); return; } //=========================================================================== // iFPdownloadDirectory() // Download the directory sdirname from the iFP device to the local directory destDir // // @param sdirname the source directory name on the iFP device. Must be / delimited. // @param destDir the local directory; the place to save the downloaded directory // @param fn_context the current context of the transfer. User defined structure // usually used to keep track of the progress of the download. // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPdownloadDirectory::iFPdownloadDirectory(const QString& sdirname, const QString& destDir, void* fn_context) { t_sdirname = sdirname; t_destDir = destDir; t_fn_context = fn_context; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } return (t_result); } void TiFPdownloadDirectory::run() { int pos; QByteArray sbuffer, dbuffer; QString Message, destination, baseName, err, ifpSourceName; t_result = -1; if (ifp_dh == NULL) return; baseName = t_sdirname; pos = baseName.lastIndexOf('/'); baseName.remove(0, pos + 1); destination = t_destDir + baseName; ifpSourceName = t_sdirname; slash2backslash(ifpSourceName); sbuffer = ifpSourceName.toUtf8(); dbuffer = destination.toUtf8(); t_result = ifpgui_ifp_download_dir(&ifp_dev, sbuffer, dbuffer, progress, t_fn_context); return; } //=========================================================================== // iFPuploadFile() // Upload the file sfilename from the iFP device to the iRiver directory destDir // // @param sdirname the source directory name on the iFP device. Must be / delimited. // @param destDir the local directory; the place to save the downloaded directory // @param fn_context the current context of the transfer. User defined structure // usually used to keep track of the progress of the download. // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPuploadFile::iFPuploadFile(const QString& sfilename, const QString& destDir, void* fn_context) { t_sfilename = sfilename; t_destDir = destDir; t_fn_context = fn_context; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } return (t_result); } void TiFPuploadFile::run() { int pos; QByteArray sbuffer, dbuffer; QString Message, destination, baseName, err, ifpDestName; t_result = -1; if (ifp_dh == NULL) return; baseName = t_sfilename; pos = baseName.lastIndexOf('/'); baseName.remove(0, pos + 1); destination = t_destDir + baseName; ifpDestName = destination; slash2backslash(ifpDestName); sbuffer = t_sfilename.toUtf8(); dbuffer = ifpDestName.toUtf8(); t_result = ifpgui_ifp_upload_file(&ifp_dev, sbuffer, dbuffer, progress, t_fn_context); return; } //=========================================================================== // iFPuploadFile() // Upload the directory sdirname to the iRiver device directory destDir // // @param sdirname the source directory name on the iFP device. Must be / delimited. // @param destDir the local directory; the place to save the downloaded directory // @param fn_context the current context of the transfer. User defined structure // usually used to keep track of the progress of the download. // // Returns: IFP_OK if successful, // IFP_DIRECTORY_NOT_FOUND if filename does not exist // IFP_LOCAL_FILE_OPEN_ERROR if dir list fails // ENOMEM on memory error //=========================================================================== int TiFPuploadDirectory::iFPuploadDirectory(const QString& sdirname, const QString& destDir, void* fn_context) { t_sdirname = sdirname; t_destDir = destDir; t_fn_context = fn_context; start(); while (isRunning()) { qApp->processEvents(); msleep(10); } return (t_result); } void TiFPuploadDirectory::run() { int pos; QByteArray sbuffer, dbuffer; QString Message, destination, baseName, err, ifpDestName; t_result = -1; if (ifp_dh == NULL) return; baseName = t_sdirname; pos = baseName.lastIndexOf('/'); baseName.remove(0, pos + 1); destination = t_destDir + baseName; ifpDestName = destination; slash2backslash(ifpDestName); sbuffer = t_sdirname.toUtf8(); dbuffer = ifpDestName.toUtf8(); t_result = ifpgui_ifp_upload_dir(&ifp_dev, sbuffer, dbuffer, progress, t_fn_context); return; } //=========================================================================== // TiFPformatDevice() // Reformats the device's storage media. (Deletes all your stuff.) // // Returns: IFP_OK if successful, // 1 on error //=========================================================================== int TiFPformatDevice::iFPformatDevice() { start(); while (isRunning()) { qApp->processEvents(); msleep(1); } return (t_result); } void TiFPformatDevice::run() { t_result = ifpgui_ifp_format(&ifp_dev); } ifpgui-1.0.0/playlist/000755 001750 000144 00000000000 11403103103 013012 5ustar00000000 000000 ifpgui-1.0.0/playlist/playlistloader.h000755 001750 000144 00000010615 11304571154 016240 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef NOATUNPlaylistLoader_H #define NOATUNPlaylistLoader_H #include #include /** * Most of this code was taken from the noatun playlist source code. * Holds a playlist entry. **/ class PlayListEntry { public: PlayListEntry(): fl("") {} PlayListEntry( const QString& filename, const QString& title, const QString& length ) : fl(filename), tl(title), ln(length) {} QString filename() const { return fl; } QString title() const { return tl; } QString length() const { return ln; } private: QString fl; QString tl; QString ln; }; typedef QList PlayList; /** * Most of this code was taken from the noatun playlist source code. * Reads playlist files. **/ class PlaylistLoader { public: enum Options { XMLPlaylist=1, M3U=2, PLS=4, EXTM3U=8, ASX=16 }; PlayList list; PlaylistLoader(); virtual ~PlaylistLoader(); /** * Read a file parsing through the file while calling readItem. * The items looked for are "url", "file", "title", "author" * and "length". * Currently there is no support for remote files or nonlocal URLs. * @param playlistfile the file to be opened and read * @param options the type of playlist * @return returns true on success. * \brief Loads a playlist file. */ bool load(QFile &playlistfile, int options=0); /** * This function gets the total size of all files in the playlist. * @return returns size on success * \brief Returns the size of the playlist. */ int sizeOfPlaylist(); /** * This function returns the total number of files in the playlist. * @return returns numbers of files on success * \brief Returns total number of files in the playlist. */ int numFilesInPlaylist(); protected: /** * Populates a playlist entry based on the input QString Map * which coincide with the standard noatun ones. * Both url and file are treated the same. * @param properties a QString Map that holds the info. * \brief Populates a playlist entry based on the input QString Map. */ void readItem(const QMap &properties); /** * This is called when you should either clear your list, * or start writing from the start of the list. * * You usually don't need to implement this, since it'l always * be called immediately after load() or save() * \brief Clears the playlist entries. **/ virtual void reset() {} private: /** * Read a M3U file parsing through the file while calling readItem. * The items looked for are url/file, title, author and length. * Currently there is no support for remote files or nonlocal URLs. * @param playlistfile the file to be opened and read * @param opt the type of playlist (not used for M3U) * @return bool (true/false) did it load or not. * \brief Loads M3U format playlist */ bool loadM3U(QFile &playlistfile, int x=0); }; #endif ifpgui-1.0.0/playlist/playlistloader.cpp000755 001750 000144 00000013244 11371724012 016571 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include //#include //#include //#include //#include //#include //#include PlaylistLoader::PlaylistLoader() {} PlaylistLoader::~PlaylistLoader() {} bool PlaylistLoader::load(QFile &playlistfile, int opt) { switch (opt) { default: case M3U: case EXTM3U: return loadM3U(playlistfile, opt); case PLS: //return loadPLS(playlistfile, opt); case XMLPlaylist: //return loadXML(playlistfile, opt); break; } return false; } void PlaylistLoader::readItem(const QMap &properties) { QString FileName, Title, Length; for (QMap::ConstIterator i=properties.begin(); i!=properties.end(); ++i ) { QString n = i.key(); QString val = i.value(); if ((n == "url") || (n == "file")) { FileName = val; } else if (n == "title") { Title = val; } else if (n == "length") { Length = val; } } PlayListEntry NewEntry(FileName, Title, Length); list.append(NewEntry); } bool PlaylistLoader::loadM3U(QFile &playlistfile, int /*opt*/) { playlistfile.open(QIODevice::ReadOnly); QTextStream t(&playlistfile); bool isExt = false; // flag telling if we load an EXTM3U file QString filename; QString extinf; QMap prop; QUrl baseurl(QFileInfo(playlistfile).absolutePath() + "/"); reset(); while (!t.atEnd()) { if (isExt) { extinf = t.readLine(); if (!extinf.startsWith("#EXTINF:")) { filename = extinf; extinf=""; } else { filename = t.readLine(); // read in second line containing the filename } } else // old style m3u { filename = t.readLine(); } if (filename == "#EXTM3U") // on first line { isExt=true; continue; // skip parsing the first (i.e. this) line } if (filename.isEmpty()) continue; QUrl protourl(filename); if (protourl.isRelative()) { prop["url"] = baseurl.resolved(protourl).toString(); prop["title"] = prop["url"]; } else if (protourl.isValid()) { prop["url"] = protourl.toLocalFile(); prop["title"] = prop["url"]; } else // don't handle non-local files { continue; } // parse line of the following format: //#EXTINF:length,displayed_title if (isExt) { extinf.remove(0,8); // remove "#EXTINF:" int timeTitleSep = extinf.indexOf(','); int length = (extinf.left(timeTitleSep)).toInt(); if (length>0) prop["length"]=QString::number(length*1000); QString displayTitle=extinf.mid(timeTitleSep+1); if (!displayTitle.isEmpty()) { int artistTitleSep = displayTitle.indexOf(" - "); if (artistTitleSep == -1) // no "artist - title" like format, just set it as title { prop["title"] = displayTitle; } else { prop["author"] = displayTitle.left(artistTitleSep); prop["title"] = displayTitle.mid(artistTitleSep+3); } } // END !displayTitle.isEmpty() } // END if(isExt) readItem(prop); prop.clear(); } // END while() return true; } int PlaylistLoader::sizeOfPlaylist() { int filesize; PlayList::iterator it; QFileInfo finfo; filesize = 0; for(it = list.begin(); it != list.end(); ++it) { finfo.setFile((*it).filename()); if (finfo.isFile()) { filesize += finfo.size(); } } return(filesize); } int PlaylistLoader::numFilesInPlaylist() { int count; PlayList::iterator it; count = 0; for(it = list.begin(); it != list.end(); ++it) { count++; } return(count); } ifpgui-1.0.0/settings.h000755 001750 000144 00000004403 11312615352 013203 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ class Settings { public: Settings(QString &fileName); ~Settings(); void saveSettings(QString &fileName); void setWindowSize(int width, int height); void setDefaultFolder(QString &defFolder); void setPlaylistFolder(QString &defFolder); void setDirViewWidth(int width); void setIfpViewWidth(int width); void setAutoConvertREC(bool autoCvt); void setViewAlignment(int alignment); void getWindowSize(int *width, int *height); QString getDefaultFolder(); QString getPlaylistFolder(); int getDirViewWidth(); int getIfpViewWidth(); bool getAutoConvertREC(); int getViewAlignment(); private: QString folderName; QString playlistFolder; int windowHeight; int windowWidth; int dirViewWidth; int ifpViewWidth; bool autoConvert; int viewAlignment; }; ifpgui-1.0.0/moc_createdirdlg.cpp000755 001750 000144 00000005442 11331146526 015174 0ustar00000000 000000 /**************************************************************************** ** Meta object code from reading C++ file 'createdirdlg.h' ** ** Created: Sat Jan 30 16:22:47 2010 ** by: The Qt Meta Object Compiler version 61 (Qt 4.5.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include "createdirdlg.h" #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'createdirdlg.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 61 #error "This file was generated using the moc from 4.5.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_CreateDirWindow[] = { // content: 2, // revision 0, // classname 0, 0, // classinfo 4, 12, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors // signals: signature, parameters, type, tag, flags 17, 16, 16, 16, 0x05, 38, 16, 16, 16, 0x05, // slots: signature, parameters, type, tag, flags 56, 16, 16, 16, 0x08, 71, 16, 16, 16, 0x08, 0 // eod }; static const char qt_meta_stringdata_CreateDirWindow[] = { "CreateDirWindow\0\0onOkClicked(QString)\0" "onCancelClicked()\0btnOkClicked()\0" "btnCancelClicked()\0" }; const QMetaObject CreateDirWindow::staticMetaObject = { { &QDialog::staticMetaObject, qt_meta_stringdata_CreateDirWindow, qt_meta_data_CreateDirWindow, 0 } }; const QMetaObject *CreateDirWindow::metaObject() const { return &staticMetaObject; } void *CreateDirWindow::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_CreateDirWindow)) return static_cast(const_cast< CreateDirWindow*>(this)); return QDialog::qt_metacast(_clname); } int CreateDirWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QDialog::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: onOkClicked((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 1: onCancelClicked(); break; case 2: btnOkClicked(); break; case 3: btnCancelClicked(); break; default: ; } _id -= 4; } return _id; } // SIGNAL 0 void CreateDirWindow::onOkClicked(const QString & _t1) { void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; QMetaObject::activate(this, &staticMetaObject, 0, _a); } // SIGNAL 1 void CreateDirWindow::onCancelClicked() { QMetaObject::activate(this, &staticMetaObject, 1, 0); } QT_END_MOC_NAMESPACE ifpgui-1.0.0/bin/000755 001750 000144 00000000000 11403347052 011736 5ustar00000000 000000 ifpgui-1.0.0/bin/translations/000755 001750 000144 00000000000 11403347073 014462 5ustar00000000 000000 ifpgui-1.0.0/bin/nonroot.sh000755 001750 000144 00000007212 11347115657 014010 0ustar00000000 000000 #!/bin/sh # $Id: nonroot.sh,v 1.1.1.1 2005/08/04 19:45:19 jim-campbell Exp $ # # nonroot.sh -- Add permission to usb device file for run ifp by non-root user # uid check if [ ! `id -u` = 0 ]; then echo "You are not root. Cannot run this script." exit fi case `uname` in Linux) if [ ! -d /etc/udev ]; then echo "This script needs udev support." exit fi # cite from giriver README. # if group "ifp" exist, groupadd exit with error message. /usr/sbin/groupadd ifp echo echo "****************************************************************" echo "Please add iFP users to group \"users\"." echo "****************************************************************" echo if [ -d /etc/udev/rules.d/90-iRiver.rules ]; then echo "/etc/udev/rules.d/90-iRiver.rules exists." echo "Please modify it yourself if necessary." else cat >> /etc/udev/rules.d/90-iRiver.rules << EOF # for iRiver iFP MP3 player SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1001", MODE="0664", GROUP="users" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1003", MODE="0664", GROUP="users" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1005", MODE="0664", GROUP="users" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1007", MODE="0664", GROUP="users" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1008", MODE="0664", GROUP="users" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1009", MODE="0664", GROUP="users" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="4102", ATTR{idProduct}=="1010", MODE="0664", GROUP="users" EOF echo "/etc/udev/rules.d/90-iRiver.rules created" fi ;; FreeBSD) if [ -f /etc/defaults/devfs.rules ]; then # for after FreeBSD 5.2-RELEASE. if egrep -q '^add[[:blank:]]path[[:blank:]][[:punct:]]*ugen' /etc/devfs.rules; then echo "****************************************************************" echo "/etc/devfs.rules already changed." echo "Please modify yourself for your system." else echo "/etc/devfs.rules changed."; \ cat >> /etc/devfs.rules << EOF # for iRiver iFP MP3 player [iriver_ruleset=4012] add path 'ugen*' mode 664 EOF if egrep -q '^devfs_system_ruleset=' /etc/rc.conf; then echo "****************************************************************" echo "/etc/rc.conf already changed." echo "Please modify yourself for your system." echo echo "example /etc/devfs.rules:" echo " [iriver_ruleset=4012]" echo " add path 'ugen*' mode 664" echo echo "example /etc/rc.conf:" echo " devfs_system_ruleset=\"iriver_ruleset\"" else echo 'devfs_system_ruleset="iriver_ruleset"' >> /etc/rc.conf; \ echo "/etc/rc.conf changed."; \ /etc/rc.d/devfs start fi fi else # for 4.* chmod g+rw /dev/usb* /dev/ugen* fi echo echo "****************************************************************" echo "Please add iFP users to group \"operator\"." echo "****************************************************************" echo ;; NetBSD) chmod g+rw /dev/usb* /dev/ugen* echo echo "****************************************************************" echo "Please add iFP users to group \"wheel\"." echo "****************************************************************" echo ;; Darwin) # Mac OS X echo "No need to configuration for run ifp by non-root user on Mac OS X" ;; *) echo "Sorry, this script did not support your OS." ;; esac ifpgui-1.0.0/ifp.h000755 001750 000144 00000042321 11312615352 012122 0ustar00000000 000000 /* * Interface for accessing iRiver's IFP devices * $Id: ifp.h,v 1.3 2005/08/25 04:10:54 jim-campbell Exp $ * * Copyright (C) Geoff Oakham, 2004; * * This driver 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; only version 2 of the License. * * 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 in the * files "COPYING" or "COPYING.iriverfs"; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef IFP_H #define IFP_H 1 #ifdef __KERNEL__ #include //uint8_t, loff_t, ... etc #else #include //uint8_t (16,32...) #include //off_t #include //FILE* #endif #ifdef __KERNEL__ typedef loff_t ifp_off_t; #else typedef off_t ifp_off_t; #endif /** \example simple.c * * Basic introduction into how to use libifp. */ /** @file ifp.h \brief An interface for iRiver's flash-based portable music players. \author Copyright (C) Geoff Oakham, 2004; Calling Conventions (unless otherwise stated): - integer return value 0 indicates success, error otherwise - argument 'dev' is a device handle - argument 'f' is the full path to a remote file or directory. (eg. '\\foo\\bar.mp3') - argument 'b' is a buffer for returning data - remote pathnames use '\\' instead of '/' for separating directories (eg '\\classical\\mozart\\magicflute.ogg') - functions that return numerical values (eg. ::ifp_freespace) return negative values on error */ //You should be able to set these from a build configuration tool: either //'configure' or 'make menuconfig' //#define IFP_DEBUG_SYSCALL 1 //#define IFP_DEBUG_USB_SNOOPING 1 //#define IFP_DEBUG_USB_RAWDATA 1 #define IFP_BULK_MAXPATHLEN 0x400 //ie, utf16 #define IFP_MAXPATHLEN 0x200 //old value. (no idea where it came from) #define IFP_MAX_PATH 0x080 //maximum number of latin characters (discovered experimentally) #define IFP_MAX_FILENAME 0x080 //maximum number of latin characters #define IFP_BUFFER_SIZE IFP_BULK_MAXPATHLEN #define IFP_BULK_BUFF_BITS 14 #define IFP_BULK_BUFF_SIZE 0x4000 #define IFP_1XX 0x1001 /**< Model number for iFP-100 series */ #define IFP_3XX 0x1003 /**< Model number for iFP-300 series */ #define IFP_5XX 0x1005 /**< Model number for iFP-500 series */ #define IFP_7XX 0x1007 /**< Model number for iFP-700 series */ #define IFP_8XX 0x1008 /**< Model number for iFP-800 series */ #define IFP_9XX 0x1008 /**< Model number for iFP-900 series */ #define IFP_N10 0x1011 /**< Model number for N10 */ /** \brief An ifp_device handle. * * End-users are responsible for allocating and deallocating this structure. * However, its contents should be considered private and not directly * accessible. * * (This requirement---that users allocate memory themselves---helps make the * library more flexible. For example, it could be used inside a kernel, where * memory allocation failure is a headache. On the positive side, userland * coders can declare their structures on the stack. Bad habit? Maybe. Does * it matter? Perhaps not.) */ struct ifp_device { /** \internal usb outgoing endpoint */ int bulk_to; /** \internal usb incomming endpoint */ int bulk_from; /** \internal USB ProductID, which indicates the family number. * Observed values include ::IFP_1XX, ::IFP_8XX, ::IFP_N10.. etc. */ int model; //These buffers are use for servicing individual function calls. //(Which eliminates the need for memory allocations.) Contents are //not preserved between calls. /** \internal b1 is used by: push_unicode pop_unicode ifp_dir_next_debug ifp_set_fat_page */ uint8_t b1[IFP_BUFFER_SIZE]; /** \internal b1 is used by: swap_fat_entries (ifp_rename* helper) _ifp_list_dirs_debug (ifp_rename* helper) _ifp_list_dirs (ifp_list_dirs helper) ifp_device_info */ uint8_t b2[IFP_BUFFER_SIZE]; /** \internal b3 is used by: swap_fat_entries (ifp_rename* helper) swap_filenames (ifp_rename* helper) get_file_size (_ifp_list_dirs helper) */ uint8_t b3[IFP_BUFFER_SIZE]; //State preserved between function calls. Used to track things like //open files or the last block of data received. /** \internal The last buffer size announced to the device.*/ int last_buffer_size; /** \internal * Main data buffer. Contains the last block read, or part of the * block being written. The current position (for reading or writing) * is current_offset % IFP_BULK_BUFF_SIZE. * * If current_offset%IFP_BULK_BUFF_SIZE=0, the data is "old".. ie has * not yet been read or has been written (respectively). */ uint8_t iobuff[IFP_BULK_BUFF_SIZE]; #define IFP_MODE_NONE (0) /** \internal */ #define IFP_MODE_READING (1) /** \internal */ #define IFP_MODE_WRITING (2) /** \internal */ /** \internal Current device mode. Either 'reading', 'writing' or 'none' (other). */ int mode; /** \internal Current read/write offset. */ ifp_off_t current_offset; /** \internal Total filesize (expected or actual). */ ifp_off_t filesize; /** \internal Cache of the current file's directory name. */ uint8_t dirname[IFP_BUFFER_SIZE]; /** \internal Cache of the current file's file name. */ uint8_t filename[IFP_BUFFER_SIZE]; /** \internal debugging/sanity counters */ int readcount; int alt_readcount; int download_pipe_errors; /** \internal USB device handle (system specific) */ void * device; }; //Note: you can also use these to request only directories, only files //or both files and directories by ORing them together: // IFP_DIR // IFP_FILE // IFP_FILE | IFP_DIR // //Of course this is only useful inside libifp. /** File 'type'. */ #define IFP_FILE 1 /** Dir 'type'. */ #define IFP_DIR 2 //0-2 reserved for boolean functions and other simplish stuff. //#define IFP_ERR_FILE_NOT_FOUND (-ENOENT) /**< File not found */ //#define IFP_ERR_FILE_EXISTS (-EEXIST) /**< Filename unavailable, file or dir exists */ //#define IFP_ERR_DIR_NOT_FOUND (-ENOENT) /**< Directory not found */ //#define IFP_ERR_DIR_EXISTS (-EEXIST) /**< Directory exists */ //#define IFP_ERR_DIR_NOT_EMPTY (-ENOTEMPTY) /**< Directory is not empty */ #define IFP_ERR_DEV_FUBAR 8 /**< device not responding; try jiggling handle */ #define IFP_ERR_BAD_FREQUENCY 9 /**< tuner frequency out of range */ #define IFP_ERR_BAD_FILENAME 10 /**< filename is invalid. Likely causes are unsupported characters, * or a filename that's too long (more than ::IFP_MAXFILENAMELEN chars). * * note: linux's fatfs returns EINVAL instead. Should * we switch?*/ #define IFP_ERR_USER_CANCEL 11 /**< A user callback requested the transfer be cancelled. */ #define IFP_TUNER_PRESET_DATA 240 /**< Tuner preset buffer size. */ #define IFP_FREQ_MIN 8750 /**< lowist valid frequency (87.5kHz) */ #define IFP_FREQ_MAX 10800 /**< highist valid frequency (108.0kHz) */ #define IFP_PRESET_TOTAL 20 /**< number of preset stations. */ #define IFP_TUNER_LABEL 6 /**< max size of label string. */ #ifndef KERNEL /** \brief Statistics about a file transfer in progress. * * The fields file_bytes, batch_bytes and is_batch are guaranteed to be valid. * Fields not in use are set to 0 or NULL, so test before dereferrencing * pointers or dividing numbers. */ struct ifp_transfer_status { int file_bytes; /**< the number of bytes transferred for the current file */ int file_total; /**< the expected number of bytes in the current file */ const char * file_name; /**< the name of the current file */ long batch_bytes; /**< The number of bytes transferred in the transfer so far */ long batch_total; /**< the total number of bytes expected during this transfer */ int files_count; /**< The number of files successfully transferred so far. */ int files_total; /**< The number of files expected to be transferred in this batch. */ int is_batch; /**< 0 during single-file transfers, 1 during multi-file transfers */ void * reserved1; /**< reserved for internal use. */ void * reserved2; /**< reserved for internal use. */ void * reserved3; /**< reserved for internal use. */ }; /** \brief File types for treewalking */ enum { IFP_WALK_FILE = IFP_FILE, /**< file */ IFP_WALK_DIR_PRE = IFP_DIR, /**< directory, before visiting its children */ IFP_WALK_DIR_POST, /**< directory, after visiting its children */ IFP_WALK_NONE /**< none of the above */ }; /** \brief A remote file or directory. */ struct ifp_treewalk_entry { int type; /**< ::IFP_WALK_FILE, ::IFP_WALK_DIR_PRE, or ::IFP_WALK_DIR_POST */ const char * path; /**< full pathname */ int pathlen; /**< strlen(path) */ const char * name; /**< filename without directory stuff */ int namelen; /**< strlen(name) */ int filesize; /**< filesize, if type==::IFP_WALK_FILE */ }; /** \brief Callback for implementing a progress metre. * * If provided, this function is typically called several times during a file * transfer to give GUI applications a chance provide user feedback. * * This function should return 0 for 'success' or 1 to request the transfer * be cancelled when possible. (The request might be ignored.) Other values * are considered 'error values'. * * The first parameter is whatever if you passed to the main function as * 'context'. You may use this for anything you like or leave it NULL. * * The second parameter is a pointer to information about the transfer in * progress. The only value guaranteed to be valid for _all_ transfers is * file_bytes. Which values *are* valid should be obvious from context. * To be on the safe side, please guard against NULL pointers and divide-by * -zero errors. (The structure itself won't be NULL. I promise.) */ typedef int(*ifp_progress)(void *, struct ifp_transfer_status *); #endif #ifdef __cplusplus extern "C" { #endif /** @name Setup and initialization */ //@{ int ifp_init(struct ifp_device * dev, void * dev_handle); int ifp_finalize(struct ifp_device * dev); /** \brief Scans the system and returns the first compatible iFP device. * * If no device is found, NULL is returned. The handle must be released with * ::ifp_release_device. */ void * ifp_find_device(void); /** \brief Releases device handle allocated by ::ifp_find_device. */ int ifp_release_device(void *); /** Quick communications test with the device. Normally, users shouldn't have * to use this because it's run automatically by ifp_init. */ int ifp_selftest(struct ifp_device * dev); int ifp_format(struct ifp_device * dev); #ifndef KERNEL int ifp_update_firmware(struct ifp_device * dev, const char * localfile, ifp_progress fn, void * context); #endif //@} /** @name Device status */ //@{ //status and misc int ifp_device_info(struct ifp_device * dev, char * b, int n); int ifp_battery(struct ifp_device * dev); int ifp_capacity(struct ifp_device * dev); int ifp_freespace(struct ifp_device * dev); int ifp_model(struct ifp_device * dev, char * b, int n); int ifp_delta(struct ifp_device * dev, int * values); //int values[4] /* Version is returned in raw BCD. */ int ifp_firmware_version(struct ifp_device * dev); #ifndef KERNEL const char * ifp_error_message(int n); #endif //@} /** @name Metadata */ //@{ int ifp_rename(struct ifp_device * dev, const char * old_path, const char * new_path); int ifp_delete(struct ifp_device * dev, const char * f); int ifp_mkdir(struct ifp_device * dev, const char * f); int ifp_rmdir(struct ifp_device * dev, const char * f); int ifp_list_dirs(struct ifp_device * dev, const char * dirname, int(*callbk)(void *, int, const char *, int), void * context); #ifndef KERNEL /* Tree-walking functions--the API is similar to 'tws'. */ struct ifp_treewalk_entry; int ifp_treewalk_open(struct ifp_device * dev, const char * directory, void ** handle); int ifp_treewalk_close(void * tws_p); struct ifp_treewalk_entry * ifp_treewalk_next(void * tws_p); #endif //@} /** @name Reading files */ //@{ // reading files int ifp_read_open(struct ifp_device * dev, const char * f); int ifp_read_close(struct ifp_device * dev); int ifp_read_seek(struct ifp_device * dev, int abs_position); /* Returns number of bytes read. */ int ifp_read_data(struct ifp_device * dev, void * b, int bytes); int ifp_read_eof(struct ifp_device * dev); int ifp_read_size(struct ifp_device * dev); //@} /** @name Creating files */ //@{ // writing files int ifp_write_open(struct ifp_device * dev, const char * f, int fsize); int ifp_write_close(struct ifp_device * dev); int ifp_write_data(struct ifp_device * dev, void * b, int bytes); //@} #ifndef __KERNEL__ /** @name Bulk file transfers (userland only) */ //@{ int ifp_read_file_progress(struct ifp_device * dev, FILE * dst, const char * f, int(*progress)(void *, int), void * context); int ifp_write_file_progress(struct ifp_device * dev, FILE * src, int filesize, const char * f, int(*progress)(void *, int), void * context); /** \brief Reads the file 'f' into dst. */ static inline int ifp_read_file (struct ifp_device * dev, FILE * dst, const char * f) { return ifp_read_file_progress(dev, dst, f, NULL, NULL);} /** \brief Creates a new file 'f' from src. */ static inline int ifp_write_file (struct ifp_device * dev, FILE * src, int filesize, const char * f) { return ifp_write_file_progress(dev, src, filesize, f, NULL, NULL);} struct ifp_transfer_status; int ifp_download_file(struct ifp_device * dev, const char * remotefile, const char * localfile, ifp_progress fn, void * fn_context); int ifp_upload_file(struct ifp_device * dev, const char * localfile, const char * remotefile, ifp_progress fn, void * fn_context); int ifp_delete_dir_recursive(struct ifp_device * dev, const char * f); int ifp_download_dir(struct ifp_device * dev, const char * remotedir, const char * localdir, ifp_progress fn, void * fn_context); int ifp_upload_dir(struct ifp_device * dev, const char * localdir, const char * remotedir, ifp_progress fn, void * fn_context); #ifdef FUTURE //int ifp_check_filename(const char * s); //int ifp_clean_filename(const char * s); #endif //FUTURE //@} #endif /** @name Boolean tests */ //@{ int ifp_is_file(struct ifp_device * dev, const char * f); int ifp_is_dir (struct ifp_device * dev, const char * f); int ifp_exists (struct ifp_device * dev, const char * f); //@} /** @name FM Tuner preset station manipulation */ //@{ int ifp_get_tuner_presets(struct ifp_device * dev, void * data, int n); int ifp_set_tuner_presets(struct ifp_device * dev, void * data, int n); int ifp_get_station(int n, void * b, char * callsign, int * freq); int ifp_set_station(int n, void * data, const char * callsign, int freq); //@} #ifdef IFP_FUTURE //int ifp_file_size(struct ifp_device * dev, char * f); //int ifp_read_pos(struct ifp_device * dev); /* current read position */ //missing functionality: //problem: this is a multi-block call //int ifp_update_firmware(struct ifp_device * dev, void * data, int n); #endif //IFP_FUTURE #ifdef __cplusplus } #endif //portable error-handling macros. #ifdef __KERNEL__ /** \internal */ #define ifp_os_err(fmt, arg...) printk(KERN_ERR fmt, ##arg) #else /** \internal */ #define ifp_os_err(fmt, arg...) fprintf(stderr, "err: " fmt, ##arg) #endif /*** \brief Super-portable error reporting. */ #define ifp_err(fmt, arg...) ifp_os_err("[%s] " fmt "\n", __FUNCTION__ , ##arg) /*** \brief Super-portable error value reporting. */ #define ifp_err_i(i, fmt, arg...) ifp_err("err=%d. " fmt, i, ##arg) /*** \brief Error handling macro. If 'i' is non-zero, display an error message * and jump to 'label'. */ #define ifp_err_jump(i, label, fmt, arg...) \ if (i){ ifp_err_i(i, fmt, ##arg); goto label; } /*** \brief Error handling macro. If 'i' is non-zero, display an error message * and jump to 'label'. If 'e' is true, don't report the message. */ #define ifp_err_expect(i, e, label, fmt, arg...) \ if (i){ if (!(e)){ifp_err_i(i, fmt, ##arg);} goto label; } //#define ifp_err_jump(i, label, fmt, arg...) // if (i){ if(i<0){ifp_err_i(i, fmt, ##arg);} goto label; } #endif // IFP_H ifpgui-1.0.0/progressdlg.h000755 001750 000144 00000007413 11312621154 013677 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef PROGRESSDLG_H #define PROGRESSDLG_H //#include //#include //#include //#include //#include //#include "ifpguiview.h" //#include "ifpinterface.h" //extern int progress(void *context, struct ifp_transfer_status *status); // // //typedef struct progress_info //{ // ifpGUIView *ifpgui; // // bool is_batch; // ifp-gui defined is batch (user selected multiple files) // int total_transfered; // The number of bytes transferred in the transfer so far // int total_to_transfer; // The total number of bytes expected during this transfer // // QString file_name; // the name of the current file // int file_bytes; // The number of bytes transferred for the current file // int file_total; // The number of bytes in the current file // // bool is_status_batch; // libifp defined is batch (called up/download directory) // int batch_total; // int batch_bytes; // // int files_count; // The number of files successfully transferred so far. // int files_total; // The number of files expected to be transferred in this batch. // // bool delete_success; // a return value for the ifp_delete function // bool auto_convert; // whether or not to convert the file after download //} //ifp_progress_info; //class ProgressWindow; // //class ProgressWindow: public QDialog //{ // Q_OBJECT // //public: // ProgressWindow(const QString title = ""); // ~ProgressWindow(); // // bool cancel_progress; // // void updateProgress(ifp_progress_info *pg_info); // void setFileName(const QString &fileName); // void setFileProgress(int progress); // void setFileProgressTarget(int totalSteps); // void setTotalProgress(int progress); // void setTotalProgressTarget(int totalSteps); // void hideCancelBtn(void); // void showCancelBtn(void); // void removeStayOnTop(void); // //public slots: // virtual void btnCancel_clicked(); // //signals: // void btnCancelClicked(void); // // //private: // QGridLayout *layout; // QProgressBar *fileprogress; // QProgressBar *totalprogress; // QLabel *lblFilename; // QPushButton *btnCancel; // QString lastFileName; // QString truncateFileName(const QString &org, const QFontMetrics &fm, int width); // QString truncateFilePath(QString &fileStr); // //}; #endif //PROGRESSDLG ifpgui-1.0.0/gui_user.h000755 001750 000144 00000014477 11334205343 013200 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef __GUI_USER_H__ #define __GUI_USER_H__ #include #include class FileInfos { public: FileInfos() : sub_file_tree(NULL), ftype(-1), fsize(0), fprocessed(0) { } FileInfos(const QString& filename, int filetype, int filesize, void *context) : sub_file_tree(NULL), fname(filename), ftype(filetype), fsize(filesize), fprocessed(0), cntx(context) { } void setValues(const QString& filename, int filetype, int filesize, void *context) { fname = filename; ftype = filetype; fsize = filesize; cntx = context; }; void setValues(const QString& filename, int filetype, int filesize) { fname = filename; ftype = filetype; fsize = filesize; }; void setValues(int filetype, int filesize) { ftype = filetype; fsize = filesize; }; void copy(const FileInfos *fi_to_copy) { fname = fi_to_copy->FileName(); ftype = fi_to_copy->FileType(); fsize = fi_to_copy->FileSize(); cntx = fi_to_copy->Context(); } void setProcessed(int value) { fprocessed = value; } QString FileName() const { return fname; } int FileType() const { return ftype; } int FileSize() const { return fsize; } int Processed() const { return fprocessed; } void * Context() const { return cntx; } QList *sub_file_tree; private: QString fname; int ftype; int fsize; int fprocessed; void *cntx; }; #ifdef __cplusplus extern "C" { #endif // private extern QList new_ifp_file_tree; //extern int ifp_get_file_list(struct ifp_device * dev, QString& filename, QList *list); // public extern QString iFPNotConnectedMsg; extern int showYesNoAllMsgBox(const QString& msgH, const QString& msgB); extern int showYesNoMsgBox(const QString& msgH, const QString& msgB); extern void showInfoMsgBox(const QString& msgH, const QString& msgB); extern void backslash2slash(QString& str); extern void slash2backslash(QString& str); // threaded //extern int ifp_get_info(QString filename, FileInfos& finfo); //extern int ifp_get_dir_size(QString filename, int *filecnt); //extern int ifp_read_file_tree(); //extern int iFPgetFileList(const QString& filename, QList *list); //extern int iFPdownloadFile(const QString& sfilename, const QString& destDir, void* fn_context); //extern int iFPdownloadDirectory(const QString& sdirname, const QString& destDir, void* fn_context); //extern int iFPuploadFile(const QString& sfilename, const QString& destDir, void* fn_context); //extern int iFPuploadDirectory(const QString& sdirname, const QString& destDir, void* fn_context); extern int local_get_dir_size(QString dirName, int *filecnt); #ifdef __cplusplus } #endif class TiFPreadFileTree : public QThread { public: void run(); int iFPreadFileTree(); private: int iFPgetDirList(struct ifp_device * dev, QString& filename, QList *list); int t_result; }; class TiFPgetInfo : public QThread { public: void run(); int iFPgetInfo(QString filename, FileInfos& finfo); private: QString t_filename; FileInfos t_finfo; int t_result; }; class TiFPgetDirSize : public QThread { public: void run(); int iFPgetDirSize(QString filename, int *filecnt); private: QString t_filename; int t_filecnt; int t_result; }; class TiFPgetFileList : public QThread { public: void run(); int iFPgetFileList(const QString& filename, QList *list); private: QString t_filename; QList *t_list; int t_result; }; class TiFPdownloadFile : public QThread { public: void run(); int iFPdownloadFile(const QString& sfilename, const QString& destDir, void* fn_context); private: QString t_sfilename; QString t_destDir; void *t_fn_context; int t_result; }; class TiFPdownloadDirectory : public QThread { public: void run(); int iFPdownloadDirectory(const QString& sdirname, const QString& destDir, void* fn_context); private: QString t_sdirname; QString t_destDir; void *t_fn_context; int t_result; }; class TiFPuploadFile : public QThread { public: void run(); int iFPuploadFile(const QString& sfilename, const QString& destDir, void* fn_context); private: QString t_sfilename; QString t_destDir; void *t_fn_context; int t_result; }; class TiFPuploadDirectory : public QThread { public: void run(); int iFPuploadDirectory(const QString& sdirname, const QString& destDir, void* fn_context); private: QString t_sdirname; QString t_destDir; void *t_fn_context; int t_result; }; class TiFPformatDevice : public QThread { public: void run(); int iFPformatDevice(); private: int t_result; }; #endif //__GUI_USER_H__ ifpgui-1.0.0/revision.cpp000755 001750 000144 00000022035 11403102704 013526 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2010 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * **************************************************************************/ /*************************************************************************** 0.7.0 2005-06-19 - Added check box menu item to convert the *.REC files to mp3 files. This is still incomplete because I do not have access to any REC files in the iRiver format. 0.8.0 2005-07-09 - Added support for uploading files using a playlist. Currently only m3u files are supported. If the need arrises other formats can be supported as well. 0.8.1 2005-07-15 - Fixed bug with deleting a directory and some files from iFP device. - Fixed bug with uploading a directory and some files to iFP device. It used to upload the files under the directory and also upload the directory (including the files). So you got the files twice. - Fixed same bug as above, but for download. - Fixed refreshing and current file/directory selection after upload or download. Now it places the current item in a better place and also selects/opens the item to show the contents. - Fixed the progress dialog. It never shows multiple dialogs for one user initiated transfer. All transfers are shown with two progress bars (one for total progress and one for current file progress). The only exception is when the user is actually transfering only one file. 0.8.5 2005-07-16 - Added preliminary support for multi-national filename support. 0.9.1 2005-07-27 - Rearanged menus to look similar to windows version of iRiver Manager. - Added horizontal and vertical view alignments. - Progress dialog appears after a yes/yes all to confirm action. - Dialogs to confirm action are better worded. 0.9.2 2005-07-31 - Added support for drag drop from Konqueror and Nautilus. 0.9.3 2005-08-04 - Put project on CVS - Implemented dialogs to show while deleting files and directories. There is still a problem with deleting just one file or directory. The dialog shows but there is nothing in it. It seems to be random because sometimes it works. 2005-08-07 - Added check for sane values when reading from settings file. - Changed the update firmware and format icons 2005-08-24 - Patched libifp files into ifp_gui. - Fixed support for deleting local files and directories with multi-national characters. - Fixed some anomalies with the handling of the selected item within the file trees. Mainly dealing with what happens after an item is deleted. 2005-09-02 - Just a little code cleanup in ifpviewer.cpp and fileviewer.cpp - Fixed Delete tool button to check the window with focus before calling the appropriate delete function. 0.10.1 2005-09-21 - Made an I/O interface so that all function dealing with the file systems can be centralized. All local functions are handled from one class and all ifp functions are handled from another class. Both classes are decendants of a base i/o class. - Made a major overhall to the internals of the GUI to use the new I/O interface classes. This includes the removal of ifpviewer.cpp and ifpviewer.h. There is now only one widget that supports the viewing of files. This widget is a now the fileviewer.cpp class and functions; but all the backend is handled by the I/O interface class. In theory, any protocol can be added to the I/O interface and the file viewer can use this new protocol seemlessly. 2005-09-28 - Changes to dialogs. All Yes/No and OK dialogs use a standard function for their display. The dialogs come to the front when they popup. Also the progress dialog now is a stay-on- top dialog that will minimize with the application. 2005-10-03 - Added a toolbar to the file viewer. Now the standard file system functions will be accessable via an attached toolbar. These functions include: up one directory, refresh, new directory, properties, rename and delete. 2005-10-06 - Fixed several bugs: Making directories would not put selected node at new directory. Menu items, delete, rename, mkdir, etc were not working. Different file picker for Upload Playlist and Update Firmware. About QT broken Buttons would do nothing when clicked when iRiver not plugged in. Filelist would not clear on disconnect. 0.10.2 2005-10-07 - Added Icons to menu commands. 2005-10-10 - Fixed Format, was not showing a message stating what it was doing. Also the file list was not refreshed. - Another fix with create directory. The cancel was showing a message even though the uses chose cancel. 0.10.3 2005-10-07 - Added #include to iointerface.cpp 0.10.4 2005-10-19 - Fixed support for utf-8. All buffers to and from the ifp library are converted to utf-8 compatable buffers. (I hope). 0.10.5 2005-10-27 - Applied patch from Sergey V Turchin for adding translations. - Added the Russian translation from Sergey V Turchin. 2005-11-19 - Finished translation stuff. 0.10.6 2005-12-02 - Added patch by John Steele Scott to support directories that are symbolic links. - Changed name back to ifpgui. - Added Ubuntu Debian package support files under the debian directory 2005-12-17 - Moved the SuSE spec file to the suse directory. 0.10.7 2006-01-22 - Added Translation for Danish and German Danish translation added by Jørgen Elgaard Larsen German translation added by Peter Bittner - Fixed some translations problems. 0.10.8 2006-05-24 - Added patch from d-frog to fix renaming directories and then doing a refresh. 0.10.9 2006-09-23 - in prim.c ifp_file_flush, changed obsene_limit to 100. This loop was actually being used and waiting a long time. - Errors on upload are no longer hidden behind progress dialog. - Playlist directory is saved and restored when loading playlists. - File View directory is saved and restored. 0.12.0 2007-08-30 - Added the processingFile flags to ioInterface. - Do not update status when isProcessing() is TRUE. This fixes a very serious bug the caused upload and download corruption. - isProcessing() runs from the top leve of the GUI down to the ioInterface to determine if the application is transfering files. - minor changes to the directory structure. 0.12.1 2010-01-23 - New Catalan translation provided by Xavi Drudis Ferran 1.0.0 2010-06-06 - QT framework ported to version 4.x - usblib ported to version 1.0.x - Threaded data transfer between application and iFP device because the new QT4 gui is too heavy to support updating the progress bars in the callback function. - libifp updated to support usblib 1.0.x and fixed compiler warnings ***************************************************************************/ #include QString AppRevision = "ifpgui-1.0.0"; QString LibRevision = "libifp-1.0.0.3"; ifpgui-1.0.0/fileviewer.cpp000755 001750 000144 00000073461 11400664076 014056 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "fileviewer.h" #include "ifpguiview.h" #include "ifp_gui.h" #include #include #include #include "errno.h" #include "qglobal.h" #ifdef BSD4 #include "libgen.h" #endif //#include "gui_user.h" #include "backend/ifpinterface.h" #include "createdirdlg.h" #include "backend/iointerface.h" static const int autoopenTime = 1500; QPixmap *folderLocked = 0; QPixmap *folderClosed = 0; QPixmap *folderOpen = 0; QPixmap *fileNormal = 0; QPixmap *fileMusic = 0; /***************************************************************************** * * Class Directory * *****************************************************************************/ DirectoryItem::DirectoryItem(DirectoryItem * parent, const QStringList& dirname, IOInterface *Intf) : QTreeWidgetItem(parent, dirname, IO_INTF_DIR + 1000), file(dirname[0]), showDirsOnly(parent->showDirsOnly) { QString fullFileName; parent_dir = parent; ioIntf = Intf; if ((dirname[0].isNull()) || (dirname[0].isEmpty())) throw "Exception"; setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); fullFileName = ioIntf->ProtocolType + fullName(); readable = ioIntf->get_isReadable(fullFileName); if (!readable) setIcon(0, QIcon(QPixmap(*folderLocked))); else setIcon(0, QIcon(QPixmap(*folderClosed))); } DirectoryItem::DirectoryItem(QTreeWidget * parent, const QStringList& dirname, IOInterface *Intf) : QTreeWidgetItem(parent, dirname, IO_INTF_DIR + 1000), file(dirname[0]), showDirsOnly(((DirectoryView*)parent)->showDirsOnly()) { QString fullFileName; parent_dir = 0; ioIntf = Intf; setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); fullFileName = ioIntf->ProtocolType + fullName(); readable = Intf->get_isReadable(fullFileName); if (!readable) setIcon(0, QIcon(QPixmap(*folderLocked))); else setIcon(0, QIcon(QPixmap(*folderClosed))); } void DirectoryItem::setOpen(bool opn) { int ret; QString dirName, filenamestr, sizestr, filetype; QList file_info_list; QList::iterator fi_iter; if (opn) setIcon(0, QIcon(QPixmap(*folderOpen))); else setIcon(0, QIcon(QPixmap(*folderClosed))); if (opn && !childCount()) { dirName = ioIntf->ProtocolType + fullName(); ret = ioIntf->exec_GetDirectoryListing(dirName, &file_info_list); if (ret != IO_INTF_OK) { setIcon(0, QIcon(QPixmap(*folderClosed))); return; } if (file_info_list.isEmpty()) { readable = FALSE; return; } for (fi_iter= file_info_list.begin(); fi_iter != file_info_list.end(); ++fi_iter) { sizestr = " "; filenamestr = fi_iter->FileName(); if (fi_iter->FileType() == IO_INTF_FILE) { // Add file sizestr = QString("%1").arg(fi_iter->FileSize(), 12); filetype = "File"; QStringList tmp; tmp << filenamestr << filetype << sizestr; new FileItem(this, tmp, ioIntf); } else if (fi_iter->FileType() == IO_INTF_DIR) { // Add directory filetype = "Directory"; QStringList tmp; tmp << filenamestr << "Directory"; new DirectoryItem(this, tmp, ioIntf); } else if (fi_iter->FileType() == IO_INTF_SYMLINK) { // Add directory filetype = "Symbolic Link"; } else if (fi_iter->FileType() == IO_INTF_SPECIAL) { // Add directory QStringList tmp; tmp << filenamestr << "Special" << sizestr; new FileItem(this, tmp, ioIntf); } } } } QString DirectoryItem::fullName() { QString lFileName = ""; lFileName = file.fileName(); if (parent_dir) { lFileName = parent_dir->fullName() + lFileName + "/"; } return lFileName; } QString DirectoryItem::baseName() { QString lFileName = ""; lFileName = file.fileName(); return lFileName; } void DirectoryItem::setDirName(const QString& newName) { file.setFileName(newName); } /***************************************************************************** * * Class DirectoryView * *****************************************************************************/ DirectoryView::DirectoryView(QWidget *parent, bool sdo) : QTreeWidget(parent), dirsOnly(sdo), oldCurrent(0), dropItem(0), mousePressed(FALSE) { autoopen_timer = new QTimer(this); if (!folderLocked) { folderLocked = new QPixmap(":/images/folder-locked.png"); folderClosed = new QPixmap(":/images/folder.png"); folderOpen = new QPixmap(":/images/folder-open.png"); fileNormal = new QPixmap(":/images/file.png"); fileMusic = new QPixmap(":/images/audio.png"); } createActions(); connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(fvItemRenamed(QTreeWidgetItem *, int))); connect(this, SIGNAL(itemExpanded(QTreeWidgetItem *)), this, SLOT(setItemExpanded(QTreeWidgetItem *))); setItemsExpandable(TRUE); //setSelectionMode(QListView::Extended); //setAcceptDrops(TRUE); viewport()->setAcceptDrops(TRUE); setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); connect(autoopen_timer, SIGNAL(timeout()), this, SLOT(openFolder())); msgflag = 0; OldRenamePath = ""; } void DirectoryView::openFolder() { autoopen_timer->stop(); if (dropItem && !dropItem->isExpanded()) { dropItem->setExpanded(TRUE); //dropItem->repaint(); } } void DirectoryView::setItemExpanded ( QTreeWidgetItem * item ) { if (item->type() == IO_INTF_DIR + 1000) ((DirectoryItem*)item)->setOpen(true); //else // ((DirectoryItem*)item->parent())->setOpen(true); } void DirectoryView::keyPressEvent(QKeyEvent *kpevent) { if (kpevent->key() == Qt::Key_Delete) { fvDeleteFile(); kpevent->accept(); } else if (kpevent->key() == Qt::Key_F2) { fvRenameFile(); kpevent->accept(); } else if (kpevent->key() == Qt::Key_F5) { fvRefreshFileItem(); } } void DirectoryView::dragEnterEvent(QDragEnterEvent *dr_event) { if (!dr_event->mimeData()->hasUrls()) { dr_event->ignore(); return; } dr_event->acceptProposedAction(); oldCurrent = currentItem(); QTreeWidgetItem *itm = itemAt(dr_event->pos()); if (itm) { if (itm != dropItem) { autoopen_timer->stop(); } dropItem = itm; autoopen_timer->start(autoopenTime); } } void DirectoryView::dragMoveEvent(QDragMoveEvent *dr_event) { QWidget * srcWidget, *destWidget; srcWidget = dr_event->source(); destWidget = (QWidget*)(this); if ((srcWidget == NULL) || (srcWidget == destWidget)) { dr_event->ignore(); return ; } if (!dr_event->mimeData()->hasUrls()) { dr_event->ignore(); return ; } dr_event->acceptProposedAction(); QPoint vp = ((QDragMoveEvent*)dr_event)->pos(); QTreeWidgetItem *itm = itemAt(vp); if (itm) { clearSelection(); setItemSelected(itm, TRUE); setCurrentItem(itm); if (itm != dropItem) { autoopen_timer->stop(); } dropItem = itm; autoopen_timer->start(autoopenTime); } } void DirectoryView::dragLeaveEvent(QDragLeaveEvent *) { autoopen_timer->stop(); dropItem = 0; } void DirectoryView::dropEvent(QDropEvent *dr_event) { autoopen_timer->stop(); QWidget *srcWidget, *destWidget; QString filename, Message, destDir; //ifp_progress_info pginfo; QList lst; QTreeWidgetItem *item; FileInfos fi; QList list; if (!dr_event->mimeData()->hasUrls()) { dr_event->ignore(); return ; } srcWidget = dr_event->source(); destWidget = (QWidget*)(this); if ((srcWidget == NULL) || (srcWidget == destWidget)) { dr_event->ignore(); return ; } lst = dr_event->mimeData()->urls(); if (lst.count() <= 0) { dr_event->ignore(); return; } dr_event->accept(); QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); //------------------------------------------------------- // Copy from ifp device to local file system //------------------------------------------------------- item = itemAt(dr_event->pos()); destDir = baseDirectory(item); for (int cnt = 0; cnt < lst.count(); ++cnt) { filename = lst.at(cnt).toString(); backslash2slash(filename); fi = FileInfos(filename, -1, 0, NULL); list.append(fi); } MainIfpGuiWindow->enableWindow(false); ioIntf->exec_TransferDownload(destDir, &list); MainIfpGuiWindow->enableWindow(true); setDir(destDir); fvRefreshFileItem(); QApplication::restoreOverrideCursor(); return; } QString DirectoryView::fullPath(QTreeWidgetItem* item) { QString fullpath = item->text(0); while((item = item->parent())) { if (item->parent()) fullpath = item->text(0) + "/" + fullpath; else fullpath = item->text(0) + fullpath; } #ifdef Q_WS_WIN if (fullpath.length() > 2 && fullpath[ 1 ] != ':') { QDir dir(fullpath); fullpath = dir.currentDirPath().left(2) + fullpath; } #endif return fullpath; } QString DirectoryView::baseDirectory(QTreeWidgetItem* item) { QString baseDir; QTreeWidgetItem *parentItem; baseDir = "/"; if (item == NULL) return(baseDir); //how to get the directory?? // are we in a directory?? if (item->type() == IO_INTF_FILE + 1000) { parentItem = item->parent(); if (parentItem) baseDir = fullPath(parentItem) + "/"; } else { baseDir = fullPath(item) + "/"; } return baseDir; } QString DirectoryView::currentDirectory(void) { QTreeWidgetItem *item = currentItem(); if ((!item) || ( !item->isSelected() )) { setCurrentItem(findItems("/", Qt::MatchExactly).first()); //return("/"); } return(baseDirectory(item)); } void DirectoryView::mousePressEvent(QMouseEvent* evnt) { QTreeWidget::mousePressEvent(evnt); QPoint pnt(evnt->pos()); QTreeWidgetItem *itm = itemAt(pnt); // Ignore all clicks except button 1 if (evnt->button() != Qt::LeftButton) return; if (itm) { presspos = evnt->pos(); mousePressed = TRUE; //// if the user clicked into the root decoration of the item, don't try to start a drag! //if (pnt.x() > header()->cellPos(header()->mapToActual(0)) + // treeStepSize() * (itm->depth() + (rootIsDecorated() ? 1 : 0)) + itemMargin() || // pnt.x() < header()->cellPos(header()->mapToActual(0))) // { // presspos = evnt->pos(); // mousePressed = TRUE; // } } } void DirectoryView::unselectAllChildren(QTreeWidgetItem *parentItem) { QTreeWidgetItem *current; int cnt; for(cnt = 0; cnt < parentItem->childCount(); cnt++) { current = parentItem->child(cnt); if(current != NULL) { current->setSelected(false); if (current->childCount() > 0) unselectAllChildren(current); } } } int DirectoryView::getListOfSelectedItems(QList *file_info_list) { QString filename; FileInfos fi; QList selected; //-------------------------------------------------------- // make a list of all selected files //-------------------------------------------------------- selected = this->selectedItems(); for (int i = 0; i < selected.size(); ++i) { filename = fullPath(selected.at(i)); if (selected.at(i)->type() == IO_INTF_FILE + 1000) { fi = FileInfos(QString(filename), IO_INTF_FILE, 0, (void*)selected.at(i)); file_info_list->append(fi); } else { // do not include files or directories below this one unselectAllChildren(selected.at(i)); fi = FileInfos(QString(filename), IO_INTF_DIR, 0, (void*)selected.at(i)); file_info_list->append(fi); } } return(IO_INTF_OK); } void DirectoryView::mouseMoveEvent(QMouseEvent* evnt) { if (mousePressed && (presspos - evnt->pos()).manhattanLength() > QApplication::startDragDistance()) { QList source; QString filename; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; mousePressed = FALSE; QTreeWidgetItemIterator it(this); while(*it) { filename = fullPath(*it); if ((*it)->isSelected()) { if ((*it)->type() == IO_INTF_DIR + 1000) { unselectAllChildren(*it); } source << QUrl(filename); } ++it; } mimeData->setUrls(source); drag->setMimeData(mimeData); drag->start(Qt::CopyAction); } } void DirectoryView::mouseReleaseEvent(QMouseEvent *) { mousePressed = FALSE; } void DirectoryView::setDir(const QString &s) { QTreeWidgetItem *item; QTreeWidgetItemIterator it(this); ++it; for ( ; (*it); ++it) { (*it)->setExpanded(FALSE); } QStringList lst(s.split("/", QString::SkipEmptyParts)); item = topLevelItem(0); QStringList::Iterator it2 = lst.begin(); for ( ; it2 != lst.end(); ++it2) { while(item) { if (item->text(0) == *it2) { item->setExpanded(TRUE); break; } item = itemBelow(item); } } if (item) { setUpdatesEnabled(FALSE); clearSelection(); setCurrentItem(item); item->setSelected(TRUE); scrollToItem(item); setUpdatesEnabled(TRUE); } } void DirectoryView::contextMenuEvent(QContextMenuEvent *event) { QList actions; QTreeWidgetItem *item = currentItem(); if (item != NULL) { actions.append(dvRenameFileAct); actions.append(dvDeleteFileAct); if (item->type() == IO_INTF_DIR + 1000) actions.append(dvCreateDirectoryAct); actions.append(dvRefreshFileItemAct); } if (actions.count() > 0) QMenu::exec(actions, event->globalPos()); } void DirectoryView::createActions() { //QAction *fmTransferSelectedFilesAct; dvRefreshFileItemAct = new QAction(QIcon(":/images/reload.png"), tr("Refresh"), this); dvRefreshFileItemAct->setStatusTip(tr("Refresh the current view or selected directory")); dvRefreshFileItemAct->setWhatsThis(tr("

Refresh the current view or selected directory.

")); connect(dvRefreshFileItemAct, SIGNAL(triggered()), this, SLOT(fvRefreshFileItem())); dvCreateDirectoryAct = new QAction(QIcon(":/images/newfolder.png"), tr("New Directory"), this); dvCreateDirectoryAct->setStatusTip( tr("Create a new directory")); dvCreateDirectoryAct->setWhatsThis( tr("

Create a new subdirectory at the current level or below the current selected directory.

")); connect(dvCreateDirectoryAct, SIGNAL(triggered()), this, SLOT(fvCreateDirectory())); //dvPropertiesAct = new QAction(QIcon(":/images/properties.png"), tr("Properties"), this); //dvPropertiesAct->setStatusTip( tr("Show the properties for the selected file or directory")); //dvPropertiesAct->setWhatsThis( tr("

Select a file from the list and press this button to show it's properties.

")); //connect(dvPropertiesAct, SIGNAL(triggered()), this, SLOT(propertiesClick())); dvRenameFileAct = new QAction(QIcon(":/images/rename.png"), tr("Rename"), this); dvRenameFileAct->setStatusTip( tr("Rename Selected File or Directory")); dvRenameFileAct->setWhatsThis( tr("

Select a file from the list and press this button to rename it.

")); connect(dvRenameFileAct, SIGNAL(triggered()), this, SLOT(fvRenameFile())); dvDeleteFileAct = new QAction(QIcon(":/images/delete.png"), tr("Delete"), this); dvDeleteFileAct->setStatusTip( tr("Delete Selected File or Directory")); dvDeleteFileAct->setWhatsThis( tr("

Select a file from the list and press this button to delete it.

")); connect(dvDeleteFileAct, SIGNAL(triggered()), this, SLOT(fvDeleteFile())); } void DirectoryView::fvUpOneLevel(void) { QString baseDir; QTreeWidgetItem *parentItem; QTreeWidgetItem *item = currentItem(); if (!item) { setDir("/"); return; } if (item->type() == IO_INTF_FILE + 1000) { parentItem = item->parent(); if (!parentItem) { baseDir = "/"; } else { parentItem = item->parent(); if (!parentItem) baseDir = "/"; else baseDir = fullPath(parentItem) + "/"; } } else { parentItem = item->parent(); if (!parentItem) { baseDir = "/"; } else { baseDir = fullPath(parentItem) + "/"; } } setDir(baseDir); } void DirectoryView::fvCreateDirectory(void) { QString BaseNewDirPath, newDirPath, err; int ret; QTreeWidgetItem *item; item = currentItem(); BaseNewDirPath = "/"; if (item) { BaseNewDirPath = fullPath(item); } ret = ioIntf->exec_Mkdir(BaseNewDirPath, newDirPath); if (ret == IO_INTF_USER_CANCEL) { // do nothing } else if (ret != IO_INTF_OK) { err = ioIntf->get_LastError(); showInfoMsgBox(tr("Make Directory Status"), err); } else { setDir(BaseNewDirPath); fvRefreshFileItem(); backslash2slash(newDirPath); setDir(newDirPath); } } void DirectoryView::fvRenameFile(void) { QTreeWidgetItem *item = currentItem(); if (item) { OldRenamePath = fullPath(item); OldFileName = item->text(0); this->openPersistentEditor(item); } } void DirectoryView::fvDeleteFile(void) { int ret; QList file_info_list; //-------------------------------------------------------- // make a list of all selected files then call exec_Delete //-------------------------------------------------------- ret = getListOfSelectedItems(&file_info_list); ret = ioIntf->exec_Delete(&file_info_list); for (int i = 0; i < file_info_list.size(); ++i) { if (file_info_list.at(i).Processed()) file_info_list.removeAt(i); } QList selected; int idx; selected = this->selectedItems(); for (int i = 0; i < selected.size(); ++i) { idx = selected[i]->parent()->indexOfChild(selected[i]); selected[i]->parent()->takeChild(idx); } } void DirectoryView::clearItem(QTreeWidgetItem* item) { QTreeWidgetItem *childItem; setUpdatesEnabled(FALSE); while(item->child(0)) { childItem = item->takeChild(0); delete(childItem); } setUpdatesEnabled(TRUE); } void DirectoryView::fvItemRenamed(QTreeWidgetItem * item, int col) { QString newName, baseName, err, temp; int ret; if (!item) return; this->closePersistentEditor(item); if ((col != 0) || (OldRenamePath == "")) return; // rename item newName = fullPath(item); if (OldRenamePath != newName) { ret = ioIntf->exec_Rename(OldRenamePath, newName); if (ret != 0) { //baseName = basename(OldRenamePath); item->setText(0, OldFileName); err = ioIntf->get_LastError(); showInfoMsgBox(tr("Rename Status"), err); } if (item->type() == IO_INTF_DIR + 1000) { ((DirectoryItem*)item)->setDirName(newName); } } OldRenamePath = ""; OldFileName = ""; } void DirectoryView::fvProperties(void) { QString fileName; QTreeWidgetItem *item = currentItem(); if (item) { fileName = fullPath(item); ioIntf->exec_ShowProperties(fileName); } } void DirectoryView::fvRefreshFileItem(void) { QTreeWidgetItem *dirItem; QTreeWidgetItem *item = currentItem(); if ((!item) || ( !item->isSelected() )) { setCurrentItem(findItems("/", Qt::MatchExactly).first()); item = currentItem(); if ((!item) || ( !item->isSelected() )) return; } QString setFocusName = fullPath(item); if (setFocusName == "/") setFocusName = "//"; if (item) { if (item->type() == IO_INTF_FILE + 1000) { dirItem = item->parent(); } else { dirItem = item; } } else { return; } clearItem(dirItem); setUpdatesEnabled(FALSE); ((DirectoryItem*)dirItem)->setOpen(TRUE); setUpdatesEnabled(TRUE); setDir(setFocusName); } void DirectoryView::fvTransferSelectedFiles(QString& destDir) { int ret; QList list; //---------------------------------------------------------------- // make a list of all selected files then call exec_TransferUpload //---------------------------------------------------------------- ret = getListOfSelectedItems(&list); MainIfpGuiWindow->enableWindow(false); ret = ioIntf->exec_TransferUpload(destDir, &list); MainIfpGuiWindow->enableWindow(true); } fileManagerView::fileManagerView(QWidget *parent, QString title, bool sort, int ioIntfType) : QWidget(parent) { QStringList lst; QVBoxLayout *vLayout = new QVBoxLayout(this); QFrame *frame = new QFrame(); frame->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); vLayout->addWidget(frame); top_layout = new QGridLayout(); top_layout->setVerticalSpacing(0); frame->setLayout(top_layout); createActions(); createToolBars(); internal_fileview = new DirectoryView(this, FALSE); top_layout->addWidget(internal_fileview); setFocusProxy(internal_fileview); switch (ioIntfType) { case IO_INTF_TYPE_LOCAL : internal_fileview->ioIntf = new FileInterface(); break; case IO_INTF_TYPE_IFP : internal_fileview->ioIntf = new iFPInterface(); break; default: // IO_INTF_TYPE_LOCAL internal_fileview->ioIntf = new FileInterface(); } internal_fileview->setColumnCount(3); lst.clear(); lst << tr("Name") << tr("Type") << tr("Size"); internal_fileview->setHeaderLabels(lst); internal_fileview->setWindowTitle(title); internal_fileview->setAllColumnsShowFocus(TRUE); internal_fileview->setSortingEnabled(sort); if (sort) { internal_fileview->sortItems(1, Qt::AscendingOrder); } //internal_fileview->setColumnWidth(0, internal_fileview->width() - 200); internal_fileview->setColumnWidth(0, 340); internal_fileview->setColumnWidth(1, 60); internal_fileview->setColumnWidth(2, 100); // add the root directory and set it to open lst.clear(); lst << "/"; DirectoryItem *fileview_root = new DirectoryItem(internal_fileview, lst, internal_fileview->ioIntf); fileview_root->setExpanded(TRUE); } fileManagerView::~fileManagerView() { } void fileManagerView::createActions() { //QAction *fmTransferSelectedFilesAct; fmUpOneLevelAct = new QAction(QIcon(":/images/updirectory.png"), tr("Up 1 Level"), this); fmUpOneLevelAct->setStatusTip(tr("Go Up a Directory")); fmUpOneLevelAct->setWhatsThis(tr("

Press this button to go up a directory from the current selected directory.

")); connect(fmUpOneLevelAct, SIGNAL(triggered()), this, SLOT(upOneLevelClick())); fmRefreshFileItemAct = new QAction(QIcon(":/images/reload.png"), tr("Refresh"), this); fmRefreshFileItemAct->setStatusTip(tr("Refresh the current view or selected directory")); fmRefreshFileItemAct->setWhatsThis(tr("

Refresh the current view or selected directory.

")); connect(fmRefreshFileItemAct, SIGNAL(triggered()), this, SLOT(refreshClick())); fmCreateDirectoryAct = new QAction(QIcon(":/images/newfolder.png"), tr("New Directory"), this); fmCreateDirectoryAct->setStatusTip( tr("Create a new directory")); fmCreateDirectoryAct->setWhatsThis( tr("

Create a new subdirectory at the current level or below the current selected directory.

")); connect(fmCreateDirectoryAct, SIGNAL(triggered()), this, SLOT(createDirectoryClick())); fmPropertiesAct = new QAction(QIcon(":/images/properties.png"), tr("Properties"), this); fmPropertiesAct->setStatusTip( tr("Show the properties for the selected file or directory")); fmPropertiesAct->setWhatsThis( tr("

Select a file from the list and press this button to show it's properties.

")); connect(fmPropertiesAct, SIGNAL(triggered()), this, SLOT(propertiesClick())); fmRenameFileAct = new QAction(QIcon(":/images/rename.png"), tr("Rename"), this); fmRenameFileAct->setStatusTip( tr("Rename Selected File or Directory")); fmRenameFileAct->setWhatsThis( tr("

Select a file from the list and press this button to rename it.

")); connect(fmRenameFileAct, SIGNAL(triggered()), this, SLOT(renameClick())); fmDeleteFileAct = new QAction(QIcon(":/images/delete.png"), tr("Delete"), this); fmDeleteFileAct->setStatusTip( tr("Delete Selected File or Directory")); fmDeleteFileAct->setWhatsThis( tr("

Select a file from the list and press this button to delete it.

")); connect(fmDeleteFileAct, SIGNAL(triggered()), this, SLOT(deleteClick())); } void fileManagerView::createToolBars() { fileToolBar = new QToolBar(tr("File"), this); top_layout->addWidget(fileToolBar); fileToolBar->addAction(fmUpOneLevelAct); fileToolBar->addAction(fmRefreshFileItemAct); fileToolBar->addAction(fmCreateDirectoryAct); fileToolBar->addWidget(new QLabel(" ")); //fileToolBar->addSeparator(); fileToolBar->addAction(fmPropertiesAct); fileToolBar->addAction(fmRenameFileAct); fileToolBar->addWidget(new QLabel(" ")); //fileToolBar->addSeparator(); fileToolBar->addAction(fmDeleteFileAct); } void fileManagerView::showItemContextMenu(const QPoint &position) { QList actions; QTreeWidgetItem *item = internal_fileview->itemAt(position); if (item != NULL) { actions.append(fmRenameFileAct); actions.append(fmDeleteFileAct); if (item->type() == IO_INTF_DIR + 1000) actions.append(fmCreateDirectoryAct); actions.append(fmRefreshFileItemAct); } if (actions.count() > 0) QMenu::exec(actions, internal_fileview->mapToGlobal(position)); } void fileManagerView::setDir(const QString &dirName) { internal_fileview->setDir(dirName); } void fileManagerView::fmCreateDirectory(void) { internal_fileview->fvCreateDirectory(); } void fileManagerView::fmRenameFile(void) { internal_fileview->fvRenameFile(); } void fileManagerView::fmDeleteFile(void) { internal_fileview->fvDeleteFile(); } void fileManagerView::fmRefreshFileItem(void) { internal_fileview->fvRefreshFileItem(); } void fileManagerView::fmTransferSelectedFiles(QString& destDir) { internal_fileview->fvTransferSelectedFiles(destDir); } int fileManagerView::fmUploadFileList(QString& destination, QList *file_info_list) { int ret; MainIfpGuiWindow->enableWindow(false); ret = internal_fileview->ioIntf->exec_TransferUpload(destination, file_info_list); MainIfpGuiWindow->enableWindow(true); return(ret); } void fileManagerView::upOneLevelClick(void) { internal_fileview->fvUpOneLevel(); } void fileManagerView::refreshClick(void) { internal_fileview->fvRefreshFileItem(); } void fileManagerView::createDirectoryClick(void) { internal_fileview->fvCreateDirectory(); } void fileManagerView::propertiesClick(void) { internal_fileview->fvProperties(); } void fileManagerView::renameClick(void) { internal_fileview->fvRenameFile(); } void fileManagerView::deleteClick(void) { internal_fileview->fvDeleteFile(); } QString fileManagerView::currentDirectory(void) { return(internal_fileview->currentDirectory()); } bool fileManagerView::isProcessing() { return(internal_fileview->ioIntf->isProcessing()); } ifpgui-1.0.0/createdirdlg.cpp000755 001750 000144 00000006014 11312615352 014327 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "createdirdlg.h" CreateDirWindow::CreateDirWindow(const QString caption) : QDialog(NULL, 0) { setWindowTitle(caption); layout = new QGridLayout(this); lblInstructions = new QLabel(tr("Enter New Directory Name:"), this); lblInstructions->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); dirTextBox = new QLineEdit("dirTextBox", this); dirTextBox->setText(tr("New Directory")); dirTextBox->setMinimumSize(100, 25); dirTextBox->setMaximumSize(1000, 25); dirTextBox->selectAll(); btnCancel = new QPushButton(tr("Cancel"), this); btnCancel->setMaximumSize(200, 30); btnCancel->setDefault(FALSE); btnOk = new QPushButton("Ok", this); btnOk->setMaximumSize(200, 30); btnOk->setDefault(TRUE); connect(btnCancel, SIGNAL(clicked()), this, SLOT(btnCancelClicked())); connect(btnOk, SIGNAL(clicked()), this, SLOT(btnOkClicked())); layout->addWidget(lblInstructions, 1, 0, 1, 2); layout->addWidget(dirTextBox, 2, 0, 1, 2); layout->addWidget(btnCancel, 4, 0); layout->addWidget(btnOk, 4, 1); this->setModal(TRUE); } /* * Destroys the object and frees any allocated resources */ CreateDirWindow::~CreateDirWindow() { // no need to delete child widgets, Qt does it all for us } void CreateDirWindow::btnOkClicked() { emit onOkClicked(dirTextBox->text()); accept(); } void CreateDirWindow::btnCancelClicked() { emit onCancelClicked(); reject(); } void CreateDirWindow::setNewDirName(const QString &dirName) { dirTextBox->setText(dirName); dirTextBox->selectAll(); } ifpgui-1.0.0/ifpgui.pro.user000755 001750 000144 00000062710 11403102725 014155 0ustar00000000 000000 RunConfiguration0-BaseEnvironmentBase 2 RunConfiguration0-CommandLineArguments RunConfiguration0-ProFile ifpgui.pro RunConfiguration0-RunConfiguration.name ifpgui RunConfiguration0-UseDyldImageSuffix false RunConfiguration0-UseTerminal false RunConfiguration0-UserEnvironmentChanges RunConfiguration0-UserSetName false RunConfiguration0-UserSetWorkingDirectory false RunConfiguration0-UserWorkingDirectory RunConfiguration0-type Qt4ProjectManager.Qt4RunConfiguration activeRunConfiguration 0 activebuildconfiguration Debug buildConfiguration-Debug Debug 0 0 2 /home/family/Development/ifpgui INCLUDEPATH=/usr/lib/libusb1.0 buildConfiguration-Release Release 0 0 buildconfiguration-Debug-buildstep0 Debug COLORTERM=1 CPU=x86_64 CSHEDIT=emacs DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zdoSFtzd1y,guid=d6581c4461fb2225871f22b94c0c656c DESKTOP_SESSION=kde4 DISPLAY=:0.0 DM_CONTROL=/var/run/xdmctl ENV=/etc/bash.bashrc FROM_HEADER= GPG_AGENT_INFO=/tmp/gpg-vGMuO1/S.gpg-agent:3894:1 GS_LIB=/home/family/.fonts GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/usr/share/themes//QtCurve/gtk-2.0/gtkrc:/home/family/.gtkrc-2.0-qtengine:/home/family/.gtkrc-2.0:/home/family/.kde4/share/config/gtkrc-2.0 GTK_IM_MODULE=cedilla GTK_RC_FILES=/etc/gtk/gtkrc:/home/family/.gtkrc::/home/family/.kde4/share/config/gtkrc G_BROKEN_FILENAMES=1 G_FILENAME_ENCODING=@locale,UTF-8,ISO-8859-15,CP1252 HISTSIZE=1000 HOME=/home/family HOST=linux-box HOSTNAME=linux-box HOSTTYPE=x86_64 INCLUDEPATH=/usr/lib/libusb1.0 INPUTRC=/home/family/.inputrc JAVA_BINDIR=/usr/lib64/jvm/java/bin JAVA_HOME=/usr/lib64/jvm/java JAVA_ROOT=/usr/lib64/jvm/java JDK_HOME=/usr/lib64/jvm/java JRE_HOME=/usr//jvm/jre KDE_FULL_SESSION=true KDE_MULTIHEAD=false KDE_NO_IPV6=1 KDE_SESSION_UID=1000 KDE_SESSION_VERSION=4 LANG=en_US.UTF-8 LD_LIBRARY_PATH=/usr/lib/qtcreator:/usr/lib64/mpi/gcc/openmpi/lib64 LESS=-M -I LESSCLOSE=lessclose.sh %s %s LESSKEY=/etc/lesskey.bin LESSOPEN=lessopen.sh %s LESS_ADVANCED_PREPROCESSOR=no LIBGL_DRIVERS_PATH=/usr/lib/dri:/usr/lib64/dri LOGNAME=family LS_COLORS=no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.xz=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32: LS_OPTIONS=-N --color=tty -T 0 MACHTYPE=x86_64-suse-linux MAIL=/var/spool/mail/family MANPATH=/usr/lib64/mpi/gcc/openmpi/share/man:/usr/local/man:/usr/share/man MINICOM=-c on MORE=-sl NNTPSERVER=news OSTYPE=linux PAGER=less PATH=/usr/bin:/usr/lib64/mpi/gcc/openmpi/bin:/home/family/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/real/RealPlayer PROFILEREAD=true PWD=/home/family/Documents PYTHONSTARTUP=/etc/pythonstart QTDIR=/usr/share/qt4/ QT_IM_MODULE=xim QT_IM_SWITCHER=imsw-multi QT_PLUGIN_PATH=/home/family/.kde4/lib64/kde4/plugins/:/usr/lib64/kde4/plugins/ QT_SYSTEM_DIR=/usr/share/desktop-data SDK_HOME=/usr/lib64/jvm/java SESSION_MANAGER=local/linux-box:@/tmp/.ICE-unix/4024,unix/linux-box:/tmp/.ICE-unix/4024 SHELL=/bin/bash SHLVL=1 SSH_AGENT_PID=3895 SSH_ASKPASS=/usr/lib64/ssh/x11-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-GOLWK3817/agent.3817 TERM=xterm TMPDIR=/tmp USER=family USE_FAM= WINDOWMANAGER=/usr/bin/startkde WINDOWPATH=7 XAUTHLOCALHOSTNAME=linux-box XCURSOR_THEME=DMZ XDG_CONFIG_DIRS=/etc/xdg XDG_DATA_DIRS=/usr/share:/etc/opt/kde3/share:/opt/kde3/share XDG_SESSION_COOKIE=bb8a098b5d04224d403dcb714aef6f78-1275880812.261918-786395583 XDM_MANAGED=method=classic XKEYSYMDB=/usr/share/X11/XKeysymDB XMODIFIERS=@im=local XNLSPATH=/usr/share/X11/nls XSESSION_IS_UP=yes /home/family/Development/ifpgui/ifpgui.pro -spec linux-g++-64 -r CONFIG+=debug /usr/bin/qmake false /home/family/Development/ifpgui buildconfiguration-Debug-buildstep1 Debug COLORTERM=1 CPU=x86_64 CSHEDIT=emacs DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zdoSFtzd1y,guid=d6581c4461fb2225871f22b94c0c656c DESKTOP_SESSION=kde4 DISPLAY=:0.0 DM_CONTROL=/var/run/xdmctl ENV=/etc/bash.bashrc FROM_HEADER= GPG_AGENT_INFO=/tmp/gpg-vGMuO1/S.gpg-agent:3894:1 GS_LIB=/home/family/.fonts GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/usr/share/themes//QtCurve/gtk-2.0/gtkrc:/home/family/.gtkrc-2.0-qtengine:/home/family/.gtkrc-2.0:/home/family/.kde4/share/config/gtkrc-2.0 GTK_IM_MODULE=cedilla GTK_RC_FILES=/etc/gtk/gtkrc:/home/family/.gtkrc::/home/family/.kde4/share/config/gtkrc G_BROKEN_FILENAMES=1 G_FILENAME_ENCODING=@locale,UTF-8,ISO-8859-15,CP1252 HISTSIZE=1000 HOME=/home/family HOST=linux-box HOSTNAME=linux-box HOSTTYPE=x86_64 INCLUDEPATH=/usr/lib/libusb1.0 INPUTRC=/home/family/.inputrc JAVA_BINDIR=/usr/lib64/jvm/java/bin JAVA_HOME=/usr/lib64/jvm/java JAVA_ROOT=/usr/lib64/jvm/java JDK_HOME=/usr/lib64/jvm/java JRE_HOME=/usr//jvm/jre KDE_FULL_SESSION=true KDE_MULTIHEAD=false KDE_NO_IPV6=1 KDE_SESSION_UID=1000 KDE_SESSION_VERSION=4 LANG=en_US.UTF-8 LD_LIBRARY_PATH=/usr/lib/qtcreator:/usr/lib64/mpi/gcc/openmpi/lib64 LESS=-M -I LESSCLOSE=lessclose.sh %s %s LESSKEY=/etc/lesskey.bin LESSOPEN=lessopen.sh %s LESS_ADVANCED_PREPROCESSOR=no LIBGL_DRIVERS_PATH=/usr/lib/dri:/usr/lib64/dri LOGNAME=family LS_COLORS=no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.xz=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32: LS_OPTIONS=-N --color=tty -T 0 MACHTYPE=x86_64-suse-linux MAIL=/var/spool/mail/family MANPATH=/usr/lib64/mpi/gcc/openmpi/share/man:/usr/local/man:/usr/share/man MINICOM=-c on MORE=-sl NNTPSERVER=news OSTYPE=linux PAGER=less PATH=/usr/bin:/usr/lib64/mpi/gcc/openmpi/bin:/home/family/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/real/RealPlayer PROFILEREAD=true PWD=/home/family/Documents PYTHONSTARTUP=/etc/pythonstart QTDIR=/usr/share/qt4/ QT_IM_MODULE=xim QT_IM_SWITCHER=imsw-multi QT_PLUGIN_PATH=/home/family/.kde4/lib64/kde4/plugins/:/usr/lib64/kde4/plugins/ QT_SYSTEM_DIR=/usr/share/desktop-data SDK_HOME=/usr/lib64/jvm/java SESSION_MANAGER=local/linux-box:@/tmp/.ICE-unix/4024,unix/linux-box:/tmp/.ICE-unix/4024 SHELL=/bin/bash SHLVL=1 SSH_AGENT_PID=3895 SSH_ASKPASS=/usr/lib64/ssh/x11-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-GOLWK3817/agent.3817 TERM=xterm TMPDIR=/tmp USER=family USE_FAM= WINDOWMANAGER=/usr/bin/startkde WINDOWPATH=7 XAUTHLOCALHOSTNAME=linux-box XCURSOR_THEME=DMZ XDG_CONFIG_DIRS=/etc/xdg XDG_DATA_DIRS=/usr/share:/etc/opt/kde3/share:/opt/kde3/share XDG_SESSION_COOKIE=bb8a098b5d04224d403dcb714aef6f78-1275880812.261918-786395583 XDM_MANAGED=method=classic XKEYSYMDB=/usr/share/X11/XKeysymDB XMODIFIERS=@im=local XNLSPATH=/usr/share/X11/nls XSESSION_IS_UP=yes false -w /usr/bin/make true /home/family/Development/ifpgui buildconfiguration-Debug-cleanstep0 Debug COLORTERM=1 CPU=x86_64 CSHEDIT=emacs DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zdoSFtzd1y,guid=d6581c4461fb2225871f22b94c0c656c DESKTOP_SESSION=kde4 DISPLAY=:0.0 DM_CONTROL=/var/run/xdmctl ENV=/etc/bash.bashrc FROM_HEADER= GPG_AGENT_INFO=/tmp/gpg-vGMuO1/S.gpg-agent:3894:1 GS_LIB=/home/family/.fonts GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/usr/share/themes//QtCurve/gtk-2.0/gtkrc:/home/family/.gtkrc-2.0-qtengine:/home/family/.gtkrc-2.0:/home/family/.kde4/share/config/gtkrc-2.0 GTK_IM_MODULE=cedilla GTK_RC_FILES=/etc/gtk/gtkrc:/home/family/.gtkrc::/home/family/.kde4/share/config/gtkrc G_BROKEN_FILENAMES=1 G_FILENAME_ENCODING=@locale,UTF-8,ISO-8859-15,CP1252 HISTSIZE=1000 HOME=/home/family HOST=linux-box HOSTNAME=linux-box HOSTTYPE=x86_64 INCLUDEPATH=/usr/lib/libusb1.0 INPUTRC=/home/family/.inputrc JAVA_BINDIR=/usr/lib64/jvm/java/bin JAVA_HOME=/usr/lib64/jvm/java JAVA_ROOT=/usr/lib64/jvm/java JDK_HOME=/usr/lib64/jvm/java JRE_HOME=/usr//jvm/jre KDE_FULL_SESSION=true KDE_MULTIHEAD=false KDE_NO_IPV6=1 KDE_SESSION_UID=1000 KDE_SESSION_VERSION=4 LANG=en_US.UTF-8 LD_LIBRARY_PATH=/usr/lib/qtcreator:/usr/lib64/mpi/gcc/openmpi/lib64 LESS=-M -I LESSCLOSE=lessclose.sh %s %s LESSKEY=/etc/lesskey.bin LESSOPEN=lessopen.sh %s LESS_ADVANCED_PREPROCESSOR=no LIBGL_DRIVERS_PATH=/usr/lib/dri:/usr/lib64/dri LOGNAME=family LS_COLORS=no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.xz=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32: LS_OPTIONS=-N --color=tty -T 0 MACHTYPE=x86_64-suse-linux MAIL=/var/spool/mail/family MANPATH=/usr/lib64/mpi/gcc/openmpi/share/man:/usr/local/man:/usr/share/man MINICOM=-c on MORE=-sl NNTPSERVER=news OSTYPE=linux PAGER=less PATH=/usr/bin:/usr/lib64/mpi/gcc/openmpi/bin:/home/family/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/real/RealPlayer PROFILEREAD=true PWD=/home/family/Documents PYTHONSTARTUP=/etc/pythonstart QTDIR=/usr/share/qt4/ QT_IM_MODULE=xim QT_IM_SWITCHER=imsw-multi QT_PLUGIN_PATH=/home/family/.kde4/lib64/kde4/plugins/:/usr/lib64/kde4/plugins/ QT_SYSTEM_DIR=/usr/share/desktop-data SDK_HOME=/usr/lib64/jvm/java SESSION_MANAGER=local/linux-box:@/tmp/.ICE-unix/4024,unix/linux-box:/tmp/.ICE-unix/4024 SHELL=/bin/bash SHLVL=1 SSH_AGENT_PID=3895 SSH_ASKPASS=/usr/lib64/ssh/x11-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-GOLWK3817/agent.3817 TERM=xterm TMPDIR=/tmp USER=family USE_FAM= WINDOWMANAGER=/usr/bin/startkde WINDOWPATH=7 XAUTHLOCALHOSTNAME=linux-box XCURSOR_THEME=DMZ XDG_CONFIG_DIRS=/etc/xdg XDG_DATA_DIRS=/usr/share:/etc/opt/kde3/share:/opt/kde3/share XDG_SESSION_COOKIE=bb8a098b5d04224d403dcb714aef6f78-1275880812.261918-786395583 XDM_MANAGED=method=classic XKEYSYMDB=/usr/share/X11/XKeysymDB XMODIFIERS=@im=local XNLSPATH=/usr/share/X11/nls XSESSION_IS_UP=yes true clean -w /usr/bin/make true /home/family/Development/ifpgui true clean buildconfiguration-Release-buildstep0 Release buildconfiguration-Release-buildstep1 Release buildconfiguration-Release-cleanstep0 Release buildconfigurations Debug Release buildstep0 buildstep1 buildsteps trolltech.qt4projectmanager.qmake trolltech.qt4projectmanager.make cleanstep0 true cleansteps trolltech.qt4projectmanager.make defaultFileEncoding System project ifpgui-1.0.0/OpenSUSE/000755 001750 000144 00000000000 11403345652 012573 5ustar00000000 000000 ifpgui-1.0.0/OpenSUSE/ifpgui.spec000644 001750 000144 00000024607 11403346446 014745 0ustar00000000 000000 Name: ifpgui Version: 1.0.0 Release: SuSE11.2 Group: Applications/Multimedia Packager: Jim Campbell Summary: iRiver Manager for GNU/Linux Source: %{name}-%{version}.tar.gz License: GPL Requires: libusb-1.0 qt4.5 BuildRoot: /var/tmp/%{name}-buildroot Prefix: /usr/local/bin %description ifpgui is an iRiver Manager like software interface for GNU/Linux. It uses a pure QT programming interface. There is support for iFP-100 series iFP-300 series iFP-500 series iFP-700 series iFP-800 series iFP-900 series and possibly for the N10 series. Please send feedback to ifpgui@gmail.com Implemented are: Upload using m3u playlist. Upload File/Directory Download File/Directory Delete File/Directory (and multiple files/directories) File Rename Make Directory Format Device Update Firmware Battery Status Used/Free Space iFP info (model, firmware, etc) Download MP3 files Tuner Support Convert *.REC to *.mp3 on download(INCOMPLETE) Expands and hi-lights newly up/down(loaded) files and directories Detect iFP disconnect Local File Delete Local File/Dir Rename Local Make Directory Local Directory Refresh %prep %setup %build # For updating the translation file # lupdate src/src.pro # For building the translation binaries lrelease ifpgui.pro # For compiling source code qmake ifpgui.pro make strip bin/ifpgui %install rm -rf $RPM_BUILD_ROOT mkdir -p -m 755 $RPM_BUILD_ROOT mkdir -p -m 755 $RPM_BUILD_ROOT/usr mkdir -p -m 755 $RPM_BUILD_ROOT/usr/local mkdir -p -m 755 $RPM_BUILD_ROOT/usr/local/ifpgui mkdir -p -m 755 $RPM_BUILD_ROOT/usr/local/ifpgui/translations cp bin/ifpgui $RPM_BUILD_ROOT/usr/local/ifpgui/ cp bin/nonroot.sh $RPM_BUILD_ROOT/usr/local/ifpgui/ cp translations/*.qm $RPM_BUILD_ROOT/usr/local/ifpgui/translations/ %post echo "We may need to allow non-root user access to USB iFP Device." echo "Run nonroot.sh (/usr/local/ifpgui/nonroot.sh) if needed." %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) /usr/local/ifpgui/ifpgui /usr/local/ifpgui/nonroot.sh /usr/local/ifpgui/translations/* %changelog * Sun Jun 06 2010 (ifpgui-1.0.0) - QT framework ported to version 4.x - usblib ported to version 1.0.x - Threaded data transfer between application and iFP device because the new QT4 gui is too heavy to support updating the progress bars in the callback function. - libifp updated to support usblib 1.0.x and fixed compiler warnings * Thu Aug 30 2007 (ifpgui-0.12.0) - Added the processingFile flags to ioInterface. - Do not update status when isProcessing() is TRUE. This fixes a very serious bug the caused upload and download corruption. - isProcessing() runs from the top leve of the GUI down to the ioInterface to determine if the application is transfering files. - minor changes to the directory structure. * Wed May 24 2006 (ifpgui-0.10.8) - Added patch from d-frog to fix renaming directories and then doing a refresh. * Sun Jan 22 2006 (ifpgui-0.10.7) - Added Translation for Danish and German Danish translation added by Jørgen Elgaard Larsen German translation added by Peter Bittner - Fixed some translations problems. * Fri Dec 17 2005 (ifpgui-0.10.6) - Added patch by John Steele Scott to support directories that are symbolic links. - Changed name back to ifpgui. - Added Ubuntu Debian package support files under the debian directory. - Moved the SuSE spec file to the suse directory. * Sat Nov 19 2005 (ifpgui-0.10.5) - Finished translation stuff. - Applied patch from Sergey V Turchin for adding translations. - Added the Russian translation from Sergey V Turchin. * Wed Oct 19 2005 (ifpgui-0.10.4) - Fixed support for utf-8. All buffers to and from the ifp library are converted to utf-8 compatable buffers. (I hope). * Sat Oct 15 2005 (ifpgui-0.10.3) - Added #include to iointerface.cpp. * Mon Oct 10 2005 (ifpgui-0.10.2) - Fixed Format, was not showing a message stating what it was doing. Also the file list was not refreshed. - Another fix with create directory. The cancel was showing a message even though the uses chose cancel. - Added Icons to menu commands. * Thu Oct 06 2005 (ifpgui-0.10.1) - Fixed several bugs: Making directories would not put selected node at new directory. Menu items, delete, rename, mkdir, etc were not working. Different file picker for Upload Playlist and Update Firmware. About QT broken Buttons would do nothing when clicked when iRiver not plugged in. Filelist would not clear on disconnect. - Added a toolbar to the file viewer. Now the standard file system functions will be accessable via an attached toolbar. These functions include: up one directory, refresh, new directory, properties, rename and delete. - Changes to dialogs. All Yes/No and OK dialogs use a standard function for their display. The dialogs come to the front when they popup. Also the progress dialog now is a stay-on- top dialog that will minimize with the application. * Wed Sep 21 2005 (ifpgui-0.10.0) - Made an I/O interface so that all function dealing with the file systems can be centralized. All local functions are handled from one class and all ifp functions are handled from another class. Both classes are decendants of a base i/o class. - Made a major overhall to the internals of the GUI to use the new I/O interface classes. This includes the removal of ifpviewer.cpp and ifpviewer.h. There is now only one widget that supports the viewing of files. This widget is a now the fileviewer.cpp class and functions; but all the backend is handled by the I/O interface class. In theory, any protocol can be added to the I/O interface and the file viewer can use this new protocol seemlessly. * Fri Sep 02 2005 (ifpgui-0.9.3) - Just a little code cleanup in ifpviewer.cpp and fileviewer.cpp - Fixed Delete tool button to check the window with focus before calling the appropriate delete function. - Patched libifp files into ifp_gui. - Fixed support for deleting local files and directories with multi-national characters. - Fixed some anomalies with the handling of the selected item within the file trees. Mainly dealing with what happens after an item is deleted. - Added check for sane values when reading from settings file. - Changed the update firmware and format icons - CVS Repository created on sourceforge. - CVS Repository created on sourceforge. - Implemented dialogs to show while deleting files and directories. There is still a problem with deleting just one file or directory. The dialog shows but there is nothing in it. It seems to be random because sometimes it works. * Sun Jul 31 2005 (ifpgui-0.9.2) - Added support for drag drop from Konqueror and Nautilus. * Wed Jul 27 2005 (ifpgui-0.9.1) - Rearanged menus to look similar to windows version of iRiver Manager. - Added horizontal and vertical view alignments. - Progress dialog appears after a yes/yes all to confirm action. - Dialogs to confirm action are better worded. * Sat Jul 16 2005 (ifpgui-0.8.5) - Added preliminary support for multi-national filename support. * Fri Jul 15 2005 (ifpgui-0.8.1) - Fixed bug with deleting a directory and some files from iFP device. - Fixed bug with uploading a directory and some files to iFP device. It used to upload the files under the directory and also upload the directory (including the files). So you got the files twice. - Fixed same bug as above, but for download. - Fixed refreshing and current file/directory selection after upload or download. Now it places the current item in a better place and also selects/opens the item to show the contents. - Fixed the progress dialog. It never shows multiple dialogs for one user initiated transfer. All transfers are shown with two progress bars (one for total progress and one for current file progress). The only exception is when the user is actually transfering only one file. * Thu Jul 7 2005 (ifpgui-0.8.0) - Added support for uploading files using a playlist. Currently only m3u files are supported. If the need arrises other formats can be supported as well. * Sun Jun 19 2005 (ifpgui-0.7.0) - Added check box menu item to convert the *.REC files to mp3 files. This is still incomplete because I do not have access to any *.REC files in the iRiver format. * Thu May 26 2005 (ifpgui-0.6.4.1) - Fixed the filename truncation routines in progressdlg.cpp Now the file path truncator is seperate from the file name truncator. This also make it more CPU friendly. * Sun May 22 2005 (ifpgui-0.6.4) - Fixed infinite loop on truncating long file names in progress window. * Thu Mar 24 2005 (ifpgui-0.6.3) - Added #include errno.h to filevewer.cpp. * Thu Feb 24 2005 (ifpgui-0.6.2) - Fixed a bug with using tuner support and libifp. - Fixed a rounding problem with tuner support. - Added an application icon. (there are two multimedia.png and music.png). I chose music.png - Updated to libifp-1.0.0.1 * Wed Feb 16 2005 (ifpgui-0.6.1) - Icons are now embedded into the application. - application parameters (window size, etc) are stored in ~/.ifp_gui_rc ( ~ is your home directory: ie /home/user) - Built a .spec file for rpm distribution. * Sun Feb 13 2005 (ifpgui-0.6.0) - Added button with pixmap to open tuner dialog - Added support for changing tuner presets * Sun Feb 6 2005 (ifpgui-0.5.5) - Fixed the drag drop upload. Now it uploads to the root directory on the iFP device when a file is dropped on a file in the root directory. - Added the nonroot script to add the iFP device to the usb list of supported hardware.ifpgui-1.0.0/build.sh000755 001750 000144 00000000701 11403110230 012604 0ustar00000000 000000 # /bin/sh mkdir ./bin/translations lrelease ifpgui.pro cp ./translations/*.qm ./bin/translations qmake ifpgui.pro make echo " " echo " " #echo "Making usb iRiver device available to all users." #echo "You will need root privilage for this." #su -c ./nonroot.sh echo "if you have trouble connecting to your iRiver device," echo "run the script ./bin/nonroot.sh." echo " " echo " " echo "to run ifpgui: change directory to 'bin' and type './ifpgui'" ifpgui-1.0.0/translations/000755 001750 000144 00000000000 11403110640 013676 5ustar00000000 000000 ifpgui-1.0.0/translations/ifpgui_blank.ts000755 001750 000144 00000061001 11324246672 016722 0ustar00000000 000000 CreateDirWindow Enter New Directory Name: New Directory Cancel DirectoryView &Rename &Delete &Create Directory &Refresh Make Directory Status Rename Status FileViewToolBar Go Up a Directory <p>Press this button to go up a directory from the current selected directory.</p> Refresh the current view or selected directory <p>Refresh the current view or selected directory.</p> Create a new directory <p>Create a new subdirectory at the current level or below the current selected directory.</p> Show the properties for the selected file or directory <p>Select a file from the list and press this button to show it's properties.</p> Rename Selected File or Directory <p>Select a file from the list and press this button to rename it.</p> Delete Selected File or Directory <p>Select a file from the list and press this button to delete it.</p> ProgressWindow FileName Cancel QObject Get Directory Listing Could not get the listing for Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. ERROR: Could not SET radio frequency presets. Error: frequency out of range. Enter a value between 87.5 and 108.0 (MHz) iRiver device not connected. Remote destination protocol not supported "%1" Local file protocol not supported "%1" There is not enough free space to upload the requested files. iRiver Upload File Status Uploading Files to iRiver device %1 Upload files to iRiver device %1 ? Uploading files to iRiver Upload %1 to iRiver device %2 ? Local destination protocol not supported "%1" Remote file protocol not supported "%1" Downloading Files from ifp device to %1 Download files from iRiver to local directory %1 ? Download file from iRiver to local directory %1 ? Downloading files from iRiver Download %1 from iRiver device to %2 ? Download File Status Create a local directory Could not make directory [%1] File does not exist: %1. Could not rename %1 to %2 Delete selected files? Delete selected local files and directories? Directory not empty %1 Delete local directory %1? Delete local directory Could not delete directory %1 Delete local file %1? Delete local file Could not delete file %1 Delete Status The ifplib Library is missing one or more functions. Please get the latest version from http://ifp-driver.sourcefourge.net. USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS. Error Create a directory on iRiver device. Could not rename %1 to %2 on iRiver device. Delete selected files on iRiver device? Delete selected iRiver files and directories? Delete iRiver directory %1? Delete iRiver directory Delete iRiver file? %1 Delete iRiver file iRiver Delete Status RadioFreqWindow Set Radio Frequencies Station Frequency (MHz) Done Cancel ERROR: Could not GET radio frequency presets. Retrieve Radio Frequency Status Could not get station #%1. Error: frequency is not valid. Enter a value between 87.5 and 108.0 (MHz) Set Radio Frequency Status Warning: station label can only be 6 character. Error: Could not store settings for station %1 fileManagerView Name Type Size ifpGUIView Local File System iRiver File System PlayList (*.m3u) Open Playlist Dialog Choose a playlist There is not enough free space to upload the entire playlist. iFP GUI Upload Playlist - Error iFP GUI Upload Selected Files - Error iFP GUI Download Selected Files - Error iFP GUI Delete Selected Files - Error iFP GUI Format iRiver Device - Error Format IFP Device. WARNING--- Answering 'Yes' will erase all data on this device! Format IFP Device? Please Wait while formatting IFP device. Format Device Status Format Done. iFP GUI Update Firmware - Error Update Firmware Update firmware? Make sure your battery is full. DO NOT disconnect your USB cable until this process is finished! IFP Firmware Files (*.hex; *.HEX) Open Firmware File Choose a Firmware HEX file Please Wait while updating firmware. Firmware Update Status Path to firmware file is too long. Update Done DO NOT touch the device until it has turned itself off! Afterwards, you may have to turn the device back on. iFP GUI Tuner Settings - Error ifpToolsWidget BatteryStatus Battery Status <p>This status bar shows the Battery Status.</p> Used Storage <p>This shows the ammount of space used by uploaded songs and files.</p> MB Free Storage Upload Playlist to iFP <p>Select a destination on the iFP device. Then, press this button to upload an m3u playist to the iFP device at the selected destination.</p> Upload File to iFP <p>Select a file from the left and press this button to upload it to the iFP device.</p> Download File from iFP <p>Select a file from the right and press this button to download it to your hard drive.</p> Edit Radio Frequency Settings <p>Press this button to open the dialog that allows you to edit the radio frequency settings for your iFP device.</p> Format iFP Flash <p>Press this button to format the iFP device.</p> Update iFP Firmware <p>Use this to update the iFP device firmware.</p> <br><p>You must first download a firmware file and save it to your hard drive.</p><br> %1 MB free ifp_gui &File &New Folder &Delete &Rename &Properties E&xit &View Align &Left-Right Align &Top-Bottom &Tools &Upload Playlist &Auto-Convert REC files to MP3 &Tuner Settings &Upgrade Firmware &Help &iFP Info &About About &Qt What's &This Ready Not Connected - Try unplugging iRiver and reconnecting. Then, double-click the root ('\') directory in the iRiver Filesystem panel. iRiver Connected iFP GUI Device Info - Error Using Using static ifp functions (ifplib not available). static ifp functions equivelant to %1 iFP GUI Device Info This application can be used to interface with an iRiver iFP device. Revision: please send feedback to ifpgui@gmail.com. iFP Device Not Connected. static ifp functions equivelant to iFP GUI Application ifpgui-1.0.0/translations/ifpgui_de.ts000755 001750 000144 00000106625 11324246614 016233 0ustar00000000 000000 @default Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. Kommunikation mit iRiver Gerät nicht möglich. Versuchen Sie, die USB-Verbindung zu trennen, das Gerät auszuschalten und wieder neu anzustecken. Nach dem Herstellen der Verbindung, doppelklicken Sie auf das Stammverzeichnis ('\') im iRiver Dateisystem Paneel. CreateDirWindow Enter New Directory Name: Name für neues Verzeichnis: New Directory Neues Verzeichnis Cancel Abbruch Directory Get Directory Listing Verzeichnisinhalt abrufen Could not get the listing for Konnte Verzeichnisinhalt nicht abrufen für DirectoryView &Rename &Umbenennen &Delete &Löschen &Create Directory &Verzeichnis erstellen &Refresh &Aktualisieren Make Directory Status Status Verzeichnis erstellen Rename Status Status Umbenennen FileInterface Local file protocol not supported "%1" Lokales Dateiprotokoll nicht unterstützt "%1" Create a local directory Lokales Verzeichnis erstellen Could not make directory [%1] Verzeichnis Erstellen fehlgeschlagen [%1] File does not exist: %1. Datei existiert nicht: %1. Could not rename %1 to %2 Umbenennen von %1 in %2 fehlgeschlagen Delete selected files? Ausgewählte Dateien löschen? Delete selected local files and directories? Ausgewählte lokale Dateien und Verzeichnisse löschen? Directory not empty %1 Verzeichnis nicht leer %1 Delete local directory %1? Lokales Verzeichnis %1 löschen? Delete local directory Lokales Verzeichnis löschen Could not delete directory %1 Löschen von Verzeichnis %1 fehlgeschlagen Delete local file %1? Lokale Datei %1 löschen? Delete local file Lokale Datei löschen Could not delete file %1 Löschen von Datei %1 fehlgeschlagen Delete Status Status Löschen FileViewToolBar <p>Press this button to go up a directory from the current selected directory.</p> <p>Drücken Sie diesen Knopf, um ins übergeordnete Verzeichnis des aktuell ausgewählten zu wechseln.</p> <p>Refresh the current view or selected directory.</p> <p>Aktuelle Ansicht oder gewähltes Verzeichnis aktualisieren.</p> <p>Create a new subdirectory at the current level or below the current selected directory.</p> <p>Ein neues Unterverzeichnis auf der aktuellen Ebene oder unter dem aktuell ausgewählten Verzeichnis erzeugen.</p> <p>Select a file from the list and press this button to show it's properties.</p> <p>Wählen Sie eine Datei aus der Liste aus und drücken Sie diesen Knopf, um deren Eigenschaften anzuzeigen.</p> <p>Select a file from the list and press this button to rename it.</p> <p>Wählen Sie eine Datei aus der Liste aus und drücken Sie diesen Knopf, um sie umzubenennen.</p> <p>Select a file from the list and press this button to delete it.</p> <p>Wählen Sie eine Datei aus der Liste aus und drücken Sie diesen Knopf, um sie zu löschen.</p> Go Up a Directory Ein Verzeichnis nach oben wechseln Refresh the current view or selected directory Aktuelle Ansicht oder gewähltes Verzeichnis aktualisieren Create a new directory Neues Verzeichnis erzeugen Show the properties for the selected file or directory Eigenschaften von gewählter Datei oder Verzeichnis anzeigen Rename Selected File or Directory Gewählte Datei oder Verzeichnis umbenennen Delete Selected File or Directory Gewählte Datei oder Verzeichnis löschen IOInterface iRiver device not connected. Das iRiver Gerät ist nicht verbunden. Remote destination protocol not supported "%1" Entferntes Zielprotokoll wird nicht unterstützt "%1" Local file protocol not supported "%1" Lokales Dateiprotokoll wird nicht unterstützt "%1" There is not enough free space to upload the requested files. Es ist nicht genug freier Speicher verfügbar, um die gewünschten Dateien hinaufzuladen. iRiver Upload File Status iRiver Dateiupload Status Upload files to iRiver device %1 ? Dateien auf das iRiver Gerät %1 hinaufladen? Uploading files to iRiver Lade Dateien auf den iRiver Upload %1 to iRiver device %2 ? %1 auf das iRiver Gerät %2 hinaufladen? Local destination protocol not supported "%1" Lokales Zielprotokoll wird nicht unterstützt "%1" Remote file protocol not supported "%1" Entferntes Dateiprotokoll wird nicht unterstützt "%1" Downloading Files from ifp device to %1 Dateien werden vom ifp Gerät nach %1 heruntergeladen Download files from iRiver to local directory %1 ? Dateien vom iRiver ins lokale Verzeichnis %1 herunterladen? Download file from iRiver to local directory %1 ? Dateien vom iRiver ins lokale Verzeichnis %1 herunterladen? Downloading files from iRiver Dateien werden vom iRiver heruntergeladen Download %1 from iRiver device to %2 ? %1 vom iRiver Gerät nach %2 herunterladen? Download File Status Dateidownload Status ProgressWindow FileName DateiName Cancel Abbruch QObject Station Station Frequency (MHz) Frequenz (MHz) Get Directory Listing Verzeichnisinhalt abrufen Could not get the listing for Konnte Verzeichnisinhalt nicht abrufen für Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. Kommunikation mit dem iRiver Gerät fehlgeschlagen. Versuchen Sie, die USB-Verbindung zu trennen, das Gerät auszuschalten und anschließend wieder anzustecken. Nach dem Herstellen der Verbindung doppelklicken Sie auf das Stammverzeichnis ('\') im iRiver Dateisystem Paneel. iRiver device not connected. iRiver Gerät nicht verbunden. Remote destination protocol not supported "%1" Entferntes Zielprotokoll wird nicht unterstützt "%1" Local file protocol not supported "%1" Lokales Dateiprotokoll wird nicht unterstützt "%1" There is not enough free space to upload the requested files. Es ist nicht genug freier Speicher verfügbar, um die gewünschten Dateien hinaufzuladen. iRiver Upload File Status iRiver Dateiupload Status Upload files to iRiver device %1 ? Dateien auf das iRiver Gerät %1 hinaufladen? Uploading files to iRiver Dateien werden auf den iRiver hinaufgeladen Upload %1 to iRiver device %2 ? %1 auf das iRiver Gerät %2 hinaufladen? Local destination protocol not supported "%1" Lokales Zielprotokoll wird nicht unterstützt "%1" Remote file protocol not supported "%1" Entferntes Dateiprotokoll wird nicht unterstützt "%1" Downloading Files from ifp device to %1 Dateien vom ifp Gerät werden nach %1 heruntergeladen Download files from iRiver to local directory %1 ? Dateien vom iRiver ins lokale Verzeichnis %1 herunterladen? Download file from iRiver to local directory %1 ? Dateien vom iRiver ins lokale Verzeichnis %1 herunterladen? Downloading files from iRiver Dateien werden vom iRiver heruntergeladen Download %1 from iRiver device to %2 ? %1 vom iRiver Gerät nach %2 herunterladen? Download File Status Dateidownload Status Create a local directory Lokales Verzeichnis erstellen Could not make directory [%1] Konnte Verzeichnis nicht erstellen [%1] File does not exist: %1. Datei existiert nicht: %1. Could not rename %1 to %2 Konnte %1 nicht in %2 umbenennen Delete selected files? Gewählte Dateien löschen? Delete selected local files and directories? Gewählte lokale Dateien und Verzeichnisse löschen? Directory not empty %1 Verzeichnis ist nicht leer %1 Delete local directory %1? Lokales Verzeichnis %1 löschen? Delete local directory Lokales Verzeichnis löschen Could not delete directory %1 Verzeichnis %1 konnte nicht gelöscht werden Delete local file %1? Lokale Datei %1 löschen? Delete local file Lokale Datei löschen Could not delete file %1 Ðе удалоÑÑŒ удалить файл %1 Delete Status Löschen Status The ifplib Library is missing one or more functions. Please get the latest version from http://ifp-driver.sourcefourge.net. USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS. In der ifplib Bibliothek fehlen eine oder mehrere Funktionen. Bitte besorgen Sie die neueste Version von http://ifp-driver.sourcefourge.net. BENUTZE DIE INTERNEN, STATISCHEN VERSIONEN DER FUNKTIONEN. Error Fehler Create a directory on iRiver device. Verzeichnis am iRiver Gerät erstellen. Could not rename %1 to %2 on iRiver device. Konnte %1 nicht in %2 am iRiver Gerät umbenennen. Delete selected files on iRiver device? Gewählte Dateien am iRiver Gerät löschen? Delete selected iRiver files and directories? Gewählte iRiver Dateien oder Verzeichnisse löschen? Delete iRiver directory %1? iRiver Verzeichnis %1 löschen? Delete iRiver directory iRiver Verzeichnis löschen iRiver Delete Status iRiver Löschen Status ERROR: Could not SET radio frequency presets. Error: frequency out of range. Enter a value between 87.5 and 108.0 (MHz) Uploading Files to iRiver device %1 Delete iRiver file? %1 Delete iRiver file RadioFreqWindow Station Station Frequency (MHz) Frequenz (MHz) Done Fertig Cancel Abbruch ERROR: Could not GET radio frequency presets. FEHLER: Konnte die Radio Frequenz Vorgabewerte nicht ABRUFEN. Retrieve Radio Frequency Status Radiofrequenz abrufen Status Could not get station #%1. Error: frequency is not valid. Enter a value between 87.5 and 108.0 (MHz) Fehler: Frequenz ungültig. Geben Sie einen Wert zwischen 87.5 und 108.0 (MHz) ein Set Radio Frequency Status Radiofrequenz einstellen Status Warning: station label can only be 6 character. Warnung: Stationsname darf nur 6 Zeichen lang sein. Error: Could not store settings for station %1 Fehler: Konnte Einstellungen für Station %1 nicht speichern Set Radio Frequencies fileManagerView Name Name Type Typ Size Größe ifpGUIView Local File System Lokales Dateisystem iRiver File System iRiver Dateisystem PlayList (*.m3u) PlayListe (*.m3u) Open Playlist Dialog Playlist Dialog öffnen Choose a playlist Playlist auswählen There is not enough free space to upload the entire playlist. Es ist nicht genug freier Speicher vorhanden, um die gesamte Playlist hinaufzuladen. iFP GUI Upload Playlist - Error iFP GUI Playlist hinaufladen - Fehler iFP GUI Upload Selected Files - Error iFP GUI Gewählte Dateien hinaufladen - Fehler iFP GUI Download Selected Files - Error iFP GUI Gewählte Dateien herunterladen - Fehler iFP GUI Delete Selected Files - Error iFP GUI Gewählte Dateien löschen - Fehler iFP GUI Format iRiver Device - Error iFP GUI iRiver Gerät formatieren - Fehler Format IFP Device. WARNING--- Answering 'Yes' will erase all data on this device! IFP Gerät formatieren. WARNUNG--- Wenn Sie 'Ja' wählen, werden alle Daten auf diesem Gerät gelöscht! Format IFP Device? IFP Gerät formatieren? Please Wait while formatting IFP device. Bitte warten Sie, während das IFP Gerät formatiert wird. Format Device Status Gerät formatieren Status Format Done. Formatieren abgeschlossen. iFP GUI Update Firmware - Error iFP GUI Firmware aktualisieren - Fehler Update Firmware Firmware aktualisieren Update firmware? Firmware aktualisieren? Make sure your battery is full. Stellen Sie sicher, dass Ihre Batterie voll ist. DO NOT disconnect your USB cable until this process is finished! Stecken Sie das USB-Kabel NICHT aus, bevor dieser Vorgang abschlossen ist! IFP Firmware Files (*.hex; *.HEX) IFP Firmware Dateien (*.hex; *.HEX) Open Firmware File Firmware Dateien öffnen Choose a Firmware HEX file Wählen Sie eine Firmware HEX-Datei Please Wait while updating firmware. Bitte warten Sie, während die Firmware aktualisiert wird. Firmware Update Status Firmware aktualisieren Status Path to firmware file is too long. Pfad zur Firmware Datei ist zu lang. Update Done Aktualisierung abgeschlossen DO NOT touch the device until it has turned itself off! Berühren Sie das Gerät NICHT, bis es sich selbst abgeschaltet hat! Afterwards, you may have to turn the device back on. Danach müssen Sie das Gerät u.U. wieder einschalten. iFP GUI Tuner Settings - Error iFP GUI Tuner Einstellungen - Fehler ifpToolsWidget <p>This status bar shows the Battery Status.</p> <p>Diese Statuszeile zeigt den Batteriestatus.</p> <p>This shows the ammount of space used by uploaded songs and files.</p> <p>Zeigt die Größe des verwendeten Speicherplatzes für hinaufgeladen Lieder und Dateien.</p> <p>Select a destination on the iFP device. Then, press this button to upload an m3u playist to the iFP device at the selected destination.</p> <p>Wählen Sie ein Ziel auf dem iFP Gerät. Dann drücken Sie diesen Knopf, um eine m3u-Playlist auf das iFP Gerät an das gewählte Ziel hinaufzuladen.</p> <p>Select a file from the left and press this button to upload it to the iFP device.</p> <p>Wählen Sie links eine Datei und drücken Sie diesen Knopf, um sie auf das iFP-Gerät hinaufzuladen.</p> <p>Select a file from the right and press this button to download it to your hard drive.</p> <p>Wählen Sie rechts eine Datei und drücken Sie diesen Knopf, um sie auf Ihre Festplatte herunter zu laden.</p> <p>Press this button to open the dialog that allows you to edit the radio frequency settings for your iFP device.</p> <p>Drücken Sie diesen Knopf, um den Dialog zu öffnen, der Ihnen das Bearbeiten der Radiofrequenzeinstellungen Ihres iFP Gerätes erlaubt.</p> <p>Press this button to format the iFP device.</p> <p>Drücken Sie diesen Knopf, um das iFP Gerät zu formatieren.</p> <p>Use this to update the iFP device firmware.</p> <br><p>You must first download a firmware file and save it to your hard drive.</p><br> <p>Verwenden Sie diese Option, um die Firmware des iFP Geräts zu aktualisieren.</p> <br><p>Sie müssen zuerst eine Firmware-Datei herunterladen und auf Ihrer Festplatte speichern.</p><br> BatteryStatus BatterieStatus Battery Status Batterie Status Used Storage Verwendeter Speicher MB MB Free Storage Freier Speicher Upload Playlist to iFP Playlist auf iFP hinaufladen Upload File to iFP Datei auf iFP hinaufladen Download File from iFP Datei vom iFP herunterladen Edit Radio Frequency Settings Radiofrequenzeinstellungen... Format iFP Flash iFP Flash formatieren Update iFP Firmware iFP Firmware aktualisieren %1 MB free ifp_gui &File &Datei &New Folder &Neues Verzeichnis &Delete &Löschen &Rename &Umbenennen &Properties &Eigenschaften E&xit &Beenden &View &Ansicht Align &Left-Right &Links-Rechts ausrichten Align &Top-Bottom &Oben-Unten ausrichten &Tools &Extras &Upload Playlist Playlist &hinaufladen &Auto-Convert REC files to MP3 Autokonvertierung REC Dateien in MP3 &Tuner Settings &Tuner Einstellungen &Upgrade Firmware Firmware &Upgrade &Help &Hilfe &iFP Info &iFP Info &About &Über About &Qt Über &Qt What's &This Was ist &das? Ready Bereit Not Connected - Try unplugging iRiver and reconnecting. Then, double-click the root ('\') directory in the iRiver Filesystem panel. Nicht verbunden - Versuchen Sie, den iRiver abzustecken und neu zu verbinden. Anschließend doppelklicken Sie auf das Stammverzeichnis ('\') im iRiver Dateisystem Paneel. iRiver Connected iRiver verbunden iFP GUI Application iFP GUI Anwendung iFP GUI Device Info - Error iFP GUI Geräteinformation - Fehler Using Benutze static ifp functions equivelant to %1 statische ifp-Funktionen entsprechend %1 iFP GUI Device Info iFP GUI Geräteinformation This application can be used to interface Diese Anwendung dient als Schnittstelle with an iRiver iFP device. zu einem iRiver iFP-Gerät. Revision: Revision: please send feedback to ifpgui@gmail.com. Feedback bitte an ifpgui@gmail.com. iFP Device Not Connected. iFP-Gerät nicht verbunden. static ifp functions equivelant to statische ifp-Funktionen entsprechen Using static ifp functions (ifplib not available). ifpgui-1.0.0/translations/ifpgui_ca.ts000755 001750 000144 00000073452 11337423367 016235 0ustar00000000 000000 @default Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. No he pogut comunicar amb el dispositiu iRiver. Prova de desconnectar el cable USB, apagar el dispositiu, i tornar-lo a connectar. Quan hagis reconnectat, fes doble clic al directori arrel ('\') en el plaf� de Sistema de fitxers de l'iRiver CreateDirWindow Enter New Directory Name: Introduiu el nom del nou directori: New Directory Nou directori Cancel Cancel�la DirectoryView &Rename Can&via el nom &Delete &Elimina &Create Directory &Crea Directori &Refresh &Refresca Make Directory Status Estat de creaci� de directori Rename Status Estat de canvi de nom FileViewToolBar Go Up a Directory Directori superior <p>Press this button to go up a directory from the current selected directory.</p> <p>Premeu aquest bot� per anar al directori que cont� el directori actualment seleccionat (amunt).</p> Refresh the current view or selected directory Refresca la vista actual o el directori seleccionat <p>Refresh the current view or selected directory.</p> <p>Refresca la vista actual o el directori seleccionat.</p> Create a new directory Crea un directori nou <p>Create a new subdirectory at the current level or below the current selected directory.</p> <p>Crea un subdirectori nou al nivell atual o dins del directori seleccionat actualment.</p> Show the properties for the selected file or directory Mostra les propietats del fitxer o directori seleccionat <p>Select a file from the list and press this button to show it's properties.</p> <p>Selecciona un fitxer de la llista i apreta aquest bot� per veure les seves propietats.</p> Rename Selected File or Directory Canvia el nom del fitxer o directori seleccionat <p>Select a file from the list and press this button to rename it.</p> <p>Selecciona un fitxer de la llista i apreta aquest bot� per a canviar-li el nom.</p> Delete Selected File or Directory Elimina el fitxer o directori seleccionat <p>Select a file from the list and press this button to delete it.</p> <p>Selecciona un fitxer de la llista i apreta aquest bot� per eliminar-lo.</p> ProgressWindow FileName Nom de fitxer Cancel Cancel�la QObject Get Directory Listing Llista el directori Could not get the listing for No hem pogut llistar el directori Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. No he pogut comunicar amb el dispositiu iRiver. Prova de desconnectar el cable USB, apagar el dispositiu, i tornar-lo a connectar. Quan hagis reconnectat, fes doble clic al directori arrel ('\') en el plaf� de Sistema de fitxers de l'iRiver ERROR: Could not SET radio frequency presets. ERROR: No he pogut FIXAR les presintonies de frequ�ncies de radio. Error: frequency out of range. Enter a value between 87.5 and 108.0 (MHz) Error: la freq��ncia surt del rang Introduiu un valor entre 87,5 i 108,0 (MHz) iRiver device not connected. El dispositiu iRiver no est� connectat Remote destination protocol not supported "%1" No hi ha suport per al protocol de la destinaci� remota "%1" Local file protocol not supported "%1" No hi ha suport per al protocol de fitxer local "%1" There is not enough free space to upload the requested files. No hi ha prou espai lliure per enviar els fitxers demanats. iRiver Upload File Status Estat de l'enviament de fitxer(s) a l'iRiver Uploading Files to iRiver device %1 Enviament de fitxers al dispositiu iRiver %1 Upload files to iRiver device %1 ? Enviem els fitxers al dispositiu iRiver %1 ? Uploading files to iRiver Enviament de fitxers a l'iRiver Upload %1 to iRiver device %2 ? Enviem %1 al dispositiu iRiver %2 ? Local destination protocol not supported "%1" No hi ha suport per al protocol de destinaci� local "%1" Remote file protocol not supported "%1" No hi ha suport per al protocol de fitxer remot "%1" Downloading Files from ifp device to %1 Recepci� de fitxers del dispositiu ifp a %1 Download files from iRiver to local directory %1 ? Recepci� de fitxers de l'iRiver al directori local %1 ? Downloading files from iRiver Recepci� de fitxers de l'iRiver Download %1 from iRiver device to %2 ? Rebem %1 des del dispositiu iRiver a %2 ? Download File Status Estat de recepci� de fitxers Create a local directory Crea un directori local Could not make directory [%1] No he pogut crear el directori [%1] File does not exist: %1. No existeix el fitxer: %1. Could not rename %1 to %2 No he pogut canviar el nom de %1 a %2 Delete selected files? Eliminem els fitxers seleccionats ? Delete selected local files and directories? Eliminem els fitxers i directoris seleccionats ? Directory not empty %1 El directory %1 no �s buit Delete local directory %1? Eliminem el directori local %1 ? Delete local directory Elimina el directori local Could not delete directory %1 No he pogut eliminar el directori %1 Delete local file %1? Elimina el fitxer local %1 ? Delete local file Elimina el fitxer local Could not delete file %1 No he pogut eliminar el fitxer %1 Delete Status Estat d'eliminaci� The ifplib Library is missing one or more functions. Please get the latest version from http://ifp-driver.sourcefourge.net. USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS. A la biblioteca ifplib li manquen una o m�s funcions. Si us plau obteniu l'�ltima versi� de http://ifp-driver.sourcefourge.net. FAREM SERVIR LES VERSIONS EST�TIQUES INTERNES DE LES FUNCIONS. Error Error Create a directory on iRiver device. Crea un directori al dispositiu iRiver. Could not rename %1 to %2 on iRiver device. No he pogut canviar el nom de %1 a %2 al dispositiu iRiver. Delete selected files on iRiver device? Eliminem els fitxers seleccionats del dispositiu iRiver ? Delete selected iRiver files and directories? Eliminem els fitxers i directoris de l'iRiver ? Delete iRiver directory %1? Eliminem el directori %1 de l'iRiver ? Delete iRiver directory Elimina el directori de l'iRiver Delete iRiver file? %1 Eliminem el fitxer de l'iRiver? %1 Delete iRiver file Elimina el fitxer de l'iRiver iRiver Delete Status Estat d'eliminaci� de l'iRiver RadioFreqWindow Set Radio Frequencies Fixa les freq��ncies de r�dio Station Emissora Frequency (MHz) Freq��nia (MHz) Done Fet Cancel Cancel�la ERROR: Could not GET radio frequency presets. ERROR: No he pogut OBTENIR les presintonies de freq��ncies de r�dio. Retrieve Radio Frequency Status Mirar l'estat de les freq��ncies de r�dio Could not get station #%1. No he pogut recuperar l'emissora n�m. %1 Error: frequency is not valid. Enter a value between 87.5 and 108.0 (MHz) Error: la freq��nia no �s v�lida. Introduiu un valor entre 87,5 i 108,0 (MHz) Set Radio Frequency Status Fixa l'estat de freq��ncies de r�dio Warning: station label can only be 6 character. Av�s: l'etiqueta de l'emissora nom�s pot tenir 6 caracters. Error: Could not store settings for station %1 Error: No he pogut desar els par�metres de l'emissora %1 fileManagerView Name Nom Type Tipus Size Mida ifpGUIView Local File System Sistema de fitxers local iRiver File System Sistema de fitxers de l'iRiver PlayList (*.m3u) Llista de reproducci� (*.m3u) Open Playlist Dialog Obre el quadre de di�leg de llista de reproducci� Choose a playlist Tria una llista de reproducci� There is not enough free space to upload the entire playlist. No hi ha prou espai lliure per enviar la llista de reproducci� sencera. iFP GUI Upload Playlist - Error Error- Enviament de llista de reproducci� de l'iFP GUI iFP GUI Upload Selected Files - Error Error - Enviament de fitxers seleccionats a l'iFP GUI iFP GUI Download Selected Files - Error Error - Recepci� dels fitxers seleccionats a l'iFP GUI iFP GUI Delete Selected Files - Error Error - Eliminaci� dels fitxers seleccionats a l'iFP GUI iFP GUI Format iRiver Device - Error Error - Formatat del dispositiu iRiver amb l'iFP GUI Format IFP Device. WARNING--- Answering 'Yes' will erase all data on this device! Formata el dispositiu IFP. AV�S--- Si contesteu 'Si' esborrarem totes les dades d'aquest dispositiu ! Format IFP Device? Formatem el dispositiu iFP ? Please Wait while formatting IFP device. Si us plau, espereu mentre formatem el dispositiu IFP. Format Device Status Estat del formatat del dispositiu Format Done. Formatat Fet. iFP GUI Update Firmware - Error Error - Actualitaci� de programari (firmware) des de l'iFP GUI Update Firmware Actualitza el programari (firmware) Update firmware? Actualitzem el programari (firmware) ? Make sure your battery is full. Assegureu-vos que la bateria estigui plena. DO NOT disconnect your USB cable until this process is finished! NO desconnecteu el cable USB fins que acabi aquest proc�s! IFP Firmware Files (*.hex; *.HEX) Fitxers amb programari (firmware) per al IFP (*.hex; *.HEX) Open Firmware File Obre fitxer de programari (firmware) Choose a Firmware HEX file Trieu un fitxer HEX de programari (firmware) Please Wait while updating firmware. Si us plau espereu mentre actualitzem el programari (firmware). Firmware Update Status Estat d'actualitzaci� del programari (firmware) Path to firmware file is too long. El cam� fins al fitxer amb el programari (firmware) �s massa llarg. Update Done L'actualitzaci� ha acabat DO NOT touch the device until it has turned itself off! NO TOQUEU el dispositiu fins que s'apagui sol! Afterwards, you may have to turn the device back on. Despr�s, pot ser que calgui tornar a engegar el dispositiu. iFP GUI Tuner Settings - Error Error - Par�metes de sintonitzaci� - iFP GUI ifpToolsWidget BatteryStatus Estat de la bateria Battery Status Estat de la bateria <p>This status bar shows the Battery Status.</p> <p>Aquesta barra d'estat mostra l'estat de la bateria.</p> Used Storage Espai utilitzat <p>This shows the ammount of space used by uploaded songs and files.</p> <p>Aix� mostra la quantitat de capacitat d'emmagatzament utilitzada pels fitxers i can�ons enviats.</p> MB MB Free Storage Espai lliure Upload Playlist to iFP Envia la llista de reproducci� a l'iFP <p>Select a destination on the iFP device. Then, press this button to upload an m3u playist to the iFP device at the selected destination.</p> <p>Trieu una destinaci� al dispositiu iFP. Llavors, apreteu aquest bot� per enviar una llista de reproducci� m3u a la destinaci� seleccionada del dispositiu iFP.</p> Upload File to iFP Envia un fitxer al iFP <p>Select a file from the left and press this button to upload it to the iFP device.</p> <p>Seleccioneu un fitxer de l'esquerra i apreteu aquest bot� per enviar-lo al dispositiu iFP</p> Download File from iFP Rebre el fitxer de l'iFP <p>Select a file from the right and press this button to download it to your hard drive.</p> <p>Seleccioneu un fitxer de la dreta i premeu aquest bot� per transferir-lo al disc dur</p> Edit Radio Frequency Settings Modifica les presintonies de freq��ncies de r�dio <p>Press this button to open the dialog that allows you to edit the radio frequency settings for your iFP device.</p> <p>Apreteu aquest bot� per obrir el quadre de di�leg que us permet modificar les sintonies de freq�encies de r�dio per al dispositiu iFP.</p> Format iFP Flash Formata la mem�ria Flash de l'iFP <p>Press this button to format the iFP device.</p> <p>Areteu aquest bot� per formatar el dispositiu iFP.</p> Update iFP Firmware Actualitza el programari (firmware) de l'iFP <p>Use this to update the iFP device firmware.</p> <br><p>You must first download a firmware file and save it to your hard drive.</p><br> <p>Feu-ho servir per actualitzar el programari (firmware) del dispositiu.</p><br><p>Primer cal que us descarregueu un fitxer de programari (firmware) i el deseu al disc dur.</p><br> %1 MB free %1 MB lliures ifp_gui &File &Fitxer &New Folder &Nova carpeta &Delete &Elimina &Rename Can&via el nom &Properties &Propietats E&xit &Surt &View &Visualitzaci� Align &Left-Right Alinea &Esquerra-Dreta Align &Top-Bottom Alinea &Dalt-Baix &Tools &Eines &Upload Playlist &Envia llista de reproducci� &Auto-Convert REC files to MP3 &Autoconverteix fitxers REC (enregistraments) a MP3 &Tuner Settings &Par�metres de sintonitzaci� &Upgrade Firmware &Actualitza el programari (firmware) &Help &Ajuda &iFP Info &Informaci� de l'iFP &About Quant &a ... About &Qt Quant a &Qt What's &This Qu� �s ai&x� ? Ready Llestos Not Connected - Try unplugging iRiver and reconnecting. Then, double-click the root ('\') directory in the iRiver Filesystem panel. No connectat - Proveu de desconnectar l'iRiver i reconnectar-lo. Llavors, feu doble clic al directori arrel ('\') del plaf� del sistema de fitxers de l'iRiver. iRiver Connected Hi ha connexi� a l'iRiver iFP GUI Device Info - Error Error - Informaci� de dispositiu . iFP GUI Using Usem Using static ifp functions (ifplib not available). Usem les funcions ifp est�tiques (no est� disponible la ifplib). static ifp functions equivelant to %1 funcions ifp est�tiques equivalents a %! iFP GUI Device Info Informaci� del dispositiu. iFP GUI This application can be used to interface Aquesta aplicaci� es pot fer servir per comunicar with an iRiver iFP device. amb un dispositiu iFP d'iRiver. Revision: Versi�: please send feedback to ifpgui@gmail.com. Si us plau, envieu comentaris a ifpgui@gmail.com. iFP Device Not Connected. El dispositiu iFP no est� connectat. static ifp functions equivelant to funcions ifp est�tiques equivalents a iFP GUI Application Aplicaci� iFP GUI ifpgui-1.0.0/translations/ifpgui_ru.ts000755 001750 000144 00000116654 11324246644 016277 0ustar00000000 000000 @default Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. Ðе могу ÑоединитьÑÑ Ñ Ð¿Ð»ÐµÐµÑ€Ð¾Ð¼. Попробуйте отÑоеденить кабель USB и подключить Ñнова. Потом щелкните двойным щелчком по корневой директории ('/') на панели файловой ÑиÑтемы плеера. CreateDirWindow Enter New Directory Name: Введите Ð¸Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ директории: New Directory ÐÐ¾Ð²Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Cancel Отмена Directory Get Directory Listing Получить ÑпиÑок файлов каталога Could not get the listing for Ðе удалоÑÑŒ получить ÑпиÑок файлов Ð´Ð»Ñ DirectoryView &Rename &Переименовать &Delete &Удалить &Create Directory &Создать директорию &Refresh &Обновить Make Directory Status Получить ÑÑ‚Ð°Ñ‚ÑƒÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð¸ Rename Status Переименовать ÑÑ‚Ð°Ñ‚ÑƒÑ FileInterface Local file protocol not supported "%1" Локальный протокол не поддерживаетÑÑ "%1" Create a local directory Созлать локальную директорию Could not make directory [%1] Ðе удалоÑÑŒ Ñоздать директорию [%1] File does not exist: %1. Файл не ÑущеÑтвует: %1. Could not rename %1 to %2 Ðе удалоÑÑŒ переименовать %1 в %2 Delete selected files? Удалить выбранные файлы? Delete selected local files and directories? УдалитьÑÑ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ðµ файлы и директории? Directory not empty %1 Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ðµ пуÑта %1 Delete local directory %1? Удалить локальную директорию %1? Delete local directory Удалить локальную директорию Could not delete directory %1 Ðе удалоÑÑŒ удалить директорию %1 Delete local file %1? Удалить локальный файл %1? Delete local file Удалить локальный файл Could not delete file %1 Ðе удалоÑÑŒ удалить файл %1 Delete Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ FileViewToolBar <p>Press this button to go up a directory from the current selected directory.</p> <p>Ðажмите кнопку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в вышеÑтоÑщий каталог.</p> <p>Refresh the current view or selected directory.</p> <p>Обновить текущий вид или выбранную директорию.</p> <p>Create a new subdirectory at the current level or below the current selected directory.</p> <p>Создать новую поддиректорию на текущем уровне или в выбранной директории.</p> <p>Select a file from the list and press this button to show it's properties.</p> <p>Выберите файл из ÑпиÑка и нажмите кнопку Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ ÑвойÑтв.</p> <p>Select a file from the list and press this button to rename it.</p> <p>Выберите файл из ÑпиÑка и нажмите кнопку, чтобы переименовать его.</p> <p>Select a file from the list and press this button to delete it.</p> <p>Выберите файл из ÑпиÑка и нажмите кнопку, чтобы удалить его.</p> Go Up a Directory Перейти в вышеÑтоÑщую директорию Refresh the current view or selected directory Обновить текущий вид или выбранную директорию Create a new directory Создать новую директорию Show the properties for the selected file or directory Показать ÑвойÑтва выбранного файла или директории Rename Selected File or Directory Переименовать файл или директорию Delete Selected File or Directory Удалить файл или директорию IOInterface iRiver device not connected. Ðет ÑвÑзи Ñ Ð¿Ð»ÐµÐµÑ€Ð¾Ð¼. Remote destination protocol not supported "%1" ДиÑтанционный протокол не поддерживаетÑÑ "%1" Local file protocol not supported "%1" Локальный протокол файла не поддерживаетÑÑ "%1" There is not enough free space to upload the requested files. Ðе хватает меÑта Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ запрошенных файлов. iRiver Upload File Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла Upload files to iRiver device %1 ? Загрузить файлы в плеер %1 ? Uploading files to iRiver Загрузка файлов на плеер Upload %1 to iRiver device %2 ? Загрузить %1 на плеер %2 ? Local destination protocol not supported "%1" Протокол локального Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ поддерживаетÑÑ "%1" Remote file protocol not supported "%1" ДиÑтанционный протокол файла не поддерживаетÑÑ "%1" Downloading Files from ifp device to %1 Загрузка файлов Ñ Ð¿Ð»ÐµÐµÑ€Ð° в %1 Download files from iRiver to local directory %1 ? Загрузить файлы Ñ Ð¿Ð»ÐµÐµÑ€Ð° в локальную директорию %1 ? Download file from iRiver to local directory %1 ? Загрузить файлы Ñ Ð¿Ð»ÐµÐµÑ€Ð° в локальную директорию %1 ? Downloading files from iRiver Загрузка файлов Ñ Ð¿Ð»ÐµÐµÑ€Ð° Download %1 from iRiver device to %2 ? Загрузить %1 Ñ Ð¿Ð»ÐµÐµÑ€Ð° в %2 ? Download File Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла ProgressWindow FileName Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Cancel Отмена QObject Station Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ Frequency (MHz) ЧаÑтота (МГц) Get Directory Listing Получить ÑпиÑок файлов каталога Could not get the listing for Ðе удалоÑÑŒ получить ÑпиÑок файлов Ð´Ð»Ñ Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. Ðе могу ÑоединитьÑÑ Ñ Ð¿Ð»ÐµÐµÑ€Ð¾Ð¼. Попробуйте отÑоеденить кабель USB и подключить Ñнова. Потом щелкните двойным щелчком по корневой директории ('/') на панели файловой ÑиÑтемы плеера. iRiver device not connected. Ðет ÑвÑзи Ñ Ð¿Ð»ÐµÐµÑ€Ð¾Ð¼. Remote destination protocol not supported "%1" ДиÑтанционный протокол не поддерживаетÑÑ "%1" Local file protocol not supported "%1" Протокол локального файла не поддерживаетÑÑ "%1" There is not enough free space to upload the requested files. Ðе хватает меÑта Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ запрошенных файлов. iRiver Upload File Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла Upload files to iRiver device %1 ? Загрузить файлы в плеер %1 ? Uploading files to iRiver Загрузка файлов на плеер Upload %1 to iRiver device %2 ? Загрузить %1 на плеер %2 ? Local destination protocol not supported "%1" Протокол локального Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ поддерживаетÑÑ "%1" Remote file protocol not supported "%1" ДиÑтанционный протокол файла не поддерживаетÑÑ "%1" Downloading Files from ifp device to %1 Загрузка файлов Ñ Ð¿Ð»ÐµÐµÑ€Ð° в %1 Download files from iRiver to local directory %1 ? Загрузить файлы Ñ Ð¿Ð»ÐµÐµÑ€Ð° в локальную директорию %1 ? Download file from iRiver to local directory %1 ? Загрузить файлы Ñ Ð¿Ð»ÐµÐµÑ€Ð° в локальную директорию %1 ? Downloading files from iRiver Загрузка файлов Ñ Ð¿Ð»ÐµÐµÑ€Ð° Download %1 from iRiver device to %2 ? Загрузить %1 Ñ Ð¿Ð»ÐµÐµÑ€Ð° в %2 ? Download File Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла Create a local directory Созлать локальную директорию Could not make directory [%1] Ðе удалоÑÑŒ Ñоздать директорию [%1] File does not exist: %1. Файл не ÑущеÑтвует: %1. Could not rename %1 to %2 Ðе удалоÑÑŒ переименовать %1 в %2 Delete selected files? Удалить выбранные файлы? Delete selected local files and directories? УдалитьÑÑ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ðµ файлы и директории? Directory not empty %1 Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ðµ пуÑта %1 Delete local directory %1? Удалить локальную директорию %1? Delete local directory Удалить локальную директорию Could not delete directory %1 Ðе удалоÑÑŒ удалить директорию %1 Delete local file %1? Удалить локальный файл %1? Delete local file Удалить локальный файл Could not delete file %1 Ðе удалоÑÑŒ удалить файл %1 Delete Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ The ifplib Library is missing one or more functions. Please get the latest version from http://ifp-driver.sourcefourge.net. USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS. Боблиотека ifplib не Ñодержит требуемой функции. Возьмите поÑледнюю верÑию Ñ http://ifp-driver.sourcefourge.net. ЮСПОЛЬЗУЮ СТÐТИЧЕСКУЮ ВЕРСИЮ ФУÐЦИИ. Error Ошибка Create a directory on iRiver device. Создать директорию на плеере. Could not rename %1 to %2 on iRiver device. Ðе удалоÑÑŒ переименовать %1 в %2 на плеере. Delete selected files on iRiver device? Удалить выбранные файлы Ñ Ð¿Ð»ÐµÐµÑ€Ð°? Delete selected iRiver files and directories? Удалить выбранные файлы и директории Ñ Ð¿Ð»ÐµÐµÑ€Ð°? Delete iRiver directory %1? Удалить директорию %1 Ñ Ð¿Ð»ÐµÐµÑ€Ð°? Delete iRiver directory Удалить директорию Ñ Ð¿Ð»ÐµÐµÑ€Ð° iRiver Delete Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ð»ÐµÐµÑ€Ð° ERROR: Could not SET radio frequency presets. Error: frequency out of range. Enter a value between 87.5 and 108.0 (MHz) Uploading Files to iRiver device %1 Delete iRiver file? %1 Delete iRiver file RadioFreqWindow Station Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ Frequency (MHz) ЧаÑтота (МГц) Done Готово Cancel ÐžÑ‚Ð¼ÐµÐ½Ñ ERROR: Could not GET radio frequency presets. ОШИБКÐ: Ðе удалоÑÑŒ получить предуÑтановки радиочаÑтот. Retrieve Radio Frequency Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð´Ð¸Ð¾Ñ‡Ð°Ñтот Could not get station #%1. Error: frequency is not valid. Enter a value between 87.5 and 108.0 (MHz) Ошибка: недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ñ‡Ð°Ñтота. Введите значение в интервале от 87.5 да 108.0 (МГц) Set Radio Frequency Status УÑтановить ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð°Ð´Ð¸Ð¾Ñ‡Ð°Ñтоты Warning: station label can only be 6 character. Внимание: название Ñтанции может быть не более, чем из 6-и Ñимволов. Error: Could not store settings for station %1 Ошибка: не удалоÑÑŒ Ñохранить наÑтройки Ð´Ð»Ñ Ñтанции %1 Set Radio Frequencies fileManagerView Name Ð˜Ð¼Ñ Type Тип Size Размер ifpGUIView Local File System Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема iRiver File System Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема плеера PlayList (*.m3u) СпиÑок (*.m3u) Open Playlist Dialog Открыть диалог ÑпиÑков Choose a playlist Выберите ÑпиÑок There is not enough free space to upload the entire playlist. ÐедоÑтаточно меÑта Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ вÑего ÑпиÑка. iFP GUI Upload Playlist - Error iFP GUI загрузка ÑпиÑка - Ошибка iFP GUI Upload Selected Files - Error iFP GUI загрузка выбранных файлов - Ошибка iFP GUI Download Selected Files - Error iFP GUI загрузка выбранных файлов - Ошибка iFP GUI Delete Selected Files - Error iFP GUI удаление выбранных файлов - Ошибка iFP GUI Format iRiver Device - Error iFP GUI форматирование диÑка плеера - Ошибка Format IFP Device. WARNING--- Answering 'Yes' will erase all data on this device! Форматирование диÑка плеера. Ð’ÐИМÐÐИЕ--- ПоÑле ответа 'Да' вÑе данные на плеере будут удалены! Format IFP Device? Форматировать диÑк плеера? Please Wait while formatting IFP device. ПожалуйÑта подождите, пока форматируетÑÑ Ð´Ð¸Ñк плеера. Format Device Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñка плеера Format Done. Форматирование завершено. iFP GUI Update Firmware - Error iFP GUI обновление микропрограммы - Ошибка Update Firmware Обновить микропрограмму Update firmware? Обновить микропрограмму? Make sure your battery is full. УбедитеÑÑŒ, что Ð±Ð°Ñ‚Ð°Ñ€ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾Ñтью зарÑжена. DO NOT disconnect your USB cable until this process is finished! ÐЕ вынимайте кабель USB до Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа! IFP Firmware Files (*.hex; *.HEX) Файлы микропрограмм Ð´Ð»Ñ IFP (*.hex; *.HEX) Open Firmware File Открыть файл микропрограммы Choose a Firmware HEX file Выбрать HEX-файл микропрограммы Please Wait while updating firmware. ПожалуйÑта подождите, пока обновлÑетÑÑ Ð¼Ð¸ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°. Firmware Update Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ Path to firmware file is too long. Путь к микропрограмме Ñлишком длинный. Update Done Обновление завершено DO NOT touch the device until it has turned itself off! ÐЕ трогайте плеер, пока он не выключитьÑÑ Ñам! Afterwards, you may have to turn the device back on. ПоÑле вы можете включить его Ñнова. iFP GUI Tuner Settings - Error iFP GUI наÑтройка тюнера - Ошибка ifpToolsWidget <p>This status bar shows the Battery Status.</p> <p>Отображение ÑтатуÑа зарÑда батареи.</p> <p>This shows the ammount of space used by uploaded songs and files.</p> <p>Отображение количеÑтва меÑта, занÑтого загруженными звуками и файлами .</p> <p>Select a destination on the iFP device. Then, press this button to upload an m3u playist to the iFP device at the selected destination.</p> <p>Выберите меÑто Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ð° плеере и нажмите кнопку Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ ÑпиÑка m3u в выбранное меÑто.</p> <p>Select a file from the left and press this button to upload it to the iFP device.</p> <p>Выберите файл на диÑке и нажмите кнопку Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ на плеер.</p> <p>Select a file from the right and press this button to download it to your hard drive.</p> <p>Выберите файл на плеере и нажмите кнопку Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ на диÑк.</p> <p>Press this button to open the dialog that allows you to edit the radio frequency settings for your iFP device.</p> <p>Ðажмите кнопку Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñтроек радиоÑтанций плеера.</p> <p>Press this button to format the iFP device.</p> <p>Ðажмите Ñру кнопку Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы плеера.</p> <p>Use this to update the iFP device firmware.</p> <br><p>You must first download a firmware file and save it to your hard drive.</p><br> <p>ИÑпользуйте Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ плеера.</p> <br><p>Перед Ñтим необходимо загрузить файл новой прошивки и Ñохранить его на жеÑтком диÑке.</p><br> BatteryStatus Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð±Ð°Ñ‚Ð°Ñ€ÐµÐ¸ Battery Status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð±Ð°Ñ‚Ð°Ñ€ÐµÐ¸ Used Storage ИÑпользование меÑта MB МБ Free Storage Свободное меÑто Upload Playlist to iFP Загрузить ÑпиÑок на плеер Upload File to iFP Загрузить файл на плеер Download File from iFP Загрузить файл Ñ Ð¿Ð»ÐµÐµÑ€Ð° Edit Radio Frequency Settings Редактировать параметры радиочаÑтот Format iFP Flash Форматировать диÑк плеера Update iFP Firmware Обновить микропрограмму плеера %1 MB free ifp_gui &File &Файл &New Folder &ÐÐ¾Ð²Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ &Delete &Удалить &Rename &Переименовать &Properties &СвойÑтва E&xit Ð’&ыход &View &Вид Align &Left-Right РаÑположить &вертикально Align &Top-Bottom РаÑположить &горизонтально &Tools &ИнÑтрументы &Upload Playlist &Загрузить ÑпиÑок &Auto-Convert REC files to MP3 ÐвтоматичеÑки &конвертировать файлы REC в MP3 &Tuner Settings ÐаÑтройки &радиотюнера &Upgrade Firmware Обновить &микропрограмму &Help &Помошь &iFP Info &Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð»ÐµÐµÑ€Ð° &About &О программе About &Qt &О Qt What's &This Что &Ñто? Ready Готово Not Connected - Try unplugging iRiver and reconnecting. Then, double-click the root ('\') directory in the iRiver Filesystem panel. Ðет ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ - попробуйте переподключить плеер. Потом щелкните двойным щелчком по корневой директории ('/') на панели файловой ÑиÑтемы плеера. iRiver Connected Плеер Ñоединен iFP GUI Application iFP GUI приложение iFP GUI Device Info - Error iFP GUI Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑƒÑтройÑтва - ошибка Using ИÑпользование static ifp functions equivelant to %1 ÑтатичеÑÐºÐ°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ ifp Ñквивалентна %1 iFP GUI Device Info iFP GUI Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± уÑтройÑтве This application can be used to interface Это приложение можно иÑпользовать, как Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ with an iRiver iFP device. к плееру iRiver iFP. Revision: ВерÑиÑ: please send feedback to ifpgui@gmail.com. пожалуйÑта шлите отзывы на ifpgui@gmail.com. iFP Device Not Connected. Ðет ÑвÑзи Ñ Ð¿Ð»ÐµÐµÑ€Ð¾Ð¼. static ifp functions equivelant to ÑтатичеÑÐºÐ°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ библиотеки ifp Ñквивалентны Using static ifp functions (ifplib not available). ifpgui-1.0.0/translations/ifpgui_da_DK.ts000755 001750 000144 00000103302 11324246614 016572 0ustar00000000 000000 @default Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. Kunne ikke kommunikere med iRiver-enheden. Prøv at tage USB-stikket ud, sluk iRiver-enheden, og sæt stikket i igen. Tænd for iRiver'en igen. Prøv derefter at dobbeltklikke pÃ¥ rod-kataloget ('\') i iRiver-panelet. CreateDirWindow Enter New Directory Name: Indtast navn pÃ¥ det nye katalog: New Directory Nyt katalog Cancel Annullér Directory Get Directory Listing Hent katalog-liste Could not get the listing for Kunne ikke hente katalog-listen for DirectoryView &Rename &Omdøb &Delete &Slet &Create Directory &Opret nyt katalog &Refresh &Opdatér Make Directory Status Status pÃ¥ oprettelse af katalog Rename Status Status pÃ¥ omdøb FileInterface Local file protocol not supported "%1" Lokal fil-protokol er ikke understøttet: "%1" Create a local directory Opret nyt lokalt katalog Could not make directory [%1] Kunne ikke oprette nyt katalog: [%1] File does not exist: %1. Filen eksisterer ikke: %1. Could not rename %1 to %2 Kunne ikke omdøbe %1 til %2 Delete selected files? Slet markerede filer? Delete selected local files and directories? Slet markerede lokale filer og kataloger? Directory not empty %1 Kataloget er ikke tomt: %1 Delete local directory %1? Slet lokalt katalog %1? Delete local directory Slet lokalt katalog Could not delete directory %1 Kunne ikke slette katalog %1 Delete local file %1? Slet den lokale fil %1? Delete local file Slet lokal fil Could not delete file %1 Kunne ikke slette filen %1 Delete Status Status pÃ¥ sletning FileViewToolBar <p>Press this button to go up a directory from the current selected directory.</p> <p>Tryk pÃ¥ denne knap for at gÃ¥ et katalog op fra det markerede katalog.</p> <p>Refresh the current view or selected directory.</p> <p>Opdater det nuværende billede eller markerede katalog.</p> <p>Create a new subdirectory at the current level or below the current selected directory.</p> <p>Opret et nyt underkatalog pÃ¥ det nuværende niveau eller under det markerede katalog.</p> <p>Select a file from the list and press this button to show it's properties.</p> <p>Markér en fil i listen og tryk pÃ¥ denne knap for at vise dens egenskaber.</p> <p>Select a file from the list and press this button to rename it.</p> <p>Markér en fil i listen og tryk pÃ¥ denne knap for at omdøbe den.</p> <p>Select a file from the list and press this button to delete it.</p> <p>Markér en fil i listen og tryk pÃ¥ denne knap for at slette den.</p> Go Up a Directory GÃ¥ et katalog opad Refresh the current view or selected directory Opdatér det nuværende billede eller markerede katalog Create a new directory Opret nyt katalog Show the properties for the selected file or directory Vis egenskaber for den markerede fil eller katalog Rename Selected File or Directory Omdøb den markerede fil eller katalog Delete Selected File or Directory Slet den markerede fil eller katalog IOInterface iRiver device not connected. iRiver-enhed er ikke forbundet. Remote destination protocol not supported "%1" Fjernprotokol er ikke understøttet "%1" Local file protocol not supported "%1" Lokal fil-protokol ikke understøttet: "%1" There is not enough free space to upload the requested files. Der er ikke nok ledig plads til at overføre de valgte filer. iRiver Upload File Status Status pÃ¥ iRiver-overførsel Upload files to iRiver device %1 ? Overfør filer til iRiver-enhed %1 ? Uploading files to iRiver Overfører filer til iRiver Upload %1 to iRiver device %2 ? Overfør %1 til iRiver-enhed %2 ? Local destination protocol not supported "%1" Lokal destinationsprotokol ikke understøttet: "%1" Remote file protocol not supported "%1" Fjernprotokol ikke understøttet: "%1" Downloading Files from ifp device to %1 Overfører filer fra ifp-enhed til %1 Download files from iRiver to local directory %1 ? Overfør filer fra iRiver til lokalt katalog %1 ? Download file from iRiver to local directory %1 ? Overfør filer fra iRiver til lokalt katalog %1 ? Downloading files from iRiver Overfører filer fra iRiver Download %1 from iRiver device to %2 ? Overfør %1 fra iRiver til %2 ? Download File Status Status pÃ¥ fil-overførsel ProgressWindow FileName Filnavn Cancel Annullér QObject Station Station Frequency (MHz) Frekvens (MHz) Get Directory Listing Hent katalog-liste Could not get the listing for Kunne ikke hente listen for Could not communicate with iRiver device. Try unplugging the USB link, powering off the device, and plugging it back in. After you have reconnected, double-click the root ('\') directory in the iRiver Filesystem panel. Kunne ikke kommunikere med iRiver-enheden. Prøv at tage USB-stikket ud, sluk iRiver-enheden, og sæt stikket i igen. Tænd for iRiver'en igen. Prøv derefter at dobbeltklikke pÃ¥ rod-katatoget ('\') i iRiver-panelet. iRiver device not connected. iRiver-enhed ikke forbundet. Remote destination protocol not supported "%1" Fjernprotokol ikke understøttet: "%1" Local file protocol not supported "%1" Lokal fil-protokol ikke understøttet: "%1" There is not enough free space to upload the requested files. Der er ikke nok ledig plads til at overføre de valgte filer. iRiver Upload File Status Status pÃ¥ overførsel til iRiver Upload files to iRiver device %1 ? Overfør filer til iRiver-enhed %1 ? Uploading files to iRiver Overfører filer til iRiver Upload %1 to iRiver device %2 ? Overfør %1 til iRiver-enhed %2 ? Local destination protocol not supported "%1" Lokal destinationsprotokol ikke understøttet: "%1" Remote file protocol not supported "%1" Fjernprotokol ikke understøttet: "%1" Downloading Files from ifp device to %1 Overfører filer fra ifp-enhed til %1 Download files from iRiver to local directory %1 ? Overfør filer fra iRiver til lokalt katalog %1 ? Download file from iRiver to local directory %1 ? Overfør filer fra iRiver til lokalt katalog %1 ? Downloading files from iRiver Overfører filer fra iRiver Download %1 from iRiver device to %2 ? Overfør %1 fra iRiver til %2 ? Download File Status Status pÃ¥ fil-overførsel Create a local directory Opret lokalt katalog Could not make directory [%1] Kunne ikke oprette katalog [%1] File does not exist: %1. Filen eksisterer ikke: %1. Could not rename %1 to %2 Kunne ikke omdøbe %1 til %2 Delete selected files? Slet markerede filer? Delete selected local files and directories? Slet markerede lokale filer og kataloger? Directory not empty %1 Kataloget er ikke tomt: %1 Delete local directory %1? Slet lokat katalog %1? Delete local directory Slet lokalt katalog Could not delete directory %1 Kunne ikke slette katalog %1 Delete local file %1? Slet lokal fil %1? Delete local file Slet lokal fil Could not delete file %1 Kunne ikke slette fil: %1 Delete Status Status pÃ¥ sletning The ifplib Library is missing one or more functions. Please get the latest version from http://ifp-driver.sourcefourge.net. USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS. ifplib-biblioteket mangler en eller flere funktioner. Hent venligst den seneste version fra http://ifp-driver.sourcefourge.net. ANVENDER DE INTERNE, STATISKE VERSIONER AF FUNKTIONERNE. Error Fejl Create a directory on iRiver device. Opret nyt katalog pÃ¥ iRiver. Could not rename %1 to %2 on iRiver device. Kunne ikke omdøbe %1 til %2 pÃ¥ iRiver. Delete selected files on iRiver device? Slet markerede filer pÃ¥ iRiver? Delete selected iRiver files and directories? Slet markerede iRiver-filer og -kataloger? Delete iRiver directory %1? Slet iRiver-katalog %1? Delete iRiver directory Slet iRiver-katalog iRiver Delete Status Status for sletning pÃ¥ iRiver ERROR: Could not SET radio frequency presets. FEJL: Kunne ikke SÆTTE radio-indstillinger. Error: frequency out of range. Enter a value between 87.5 and 108.0 (MHz) Fejl: Frekvensen er uden for det gyldige omrÃ¥de. Indtast en værdi mellem 87.5 og 108.0 (MHz) Uploading Files to iRiver device %1 Overfører filer til iRiver-enhed %1 Delete iRiver file? %1 Slet iRiver-fil? %1 Delete iRiver file Slet iRiver-fil RadioFreqWindow Station Station Frequency (MHz) Frekvens (MHz) Done Færdig Cancel Annullér ERROR: Could not GET radio frequency presets. FEJL: Kunne ikke HENTE radio-instillingerne. Retrieve Radio Frequency Status Status pÃ¥ hentning af radiofrekvenser Could not get station #%1. Kunne ikke hente station nr. %1. Error: frequency is not valid. Enter a value between 87.5 and 108.0 (MHz) Fejl: Frekvensen er ikke gyldig. Indtast en værdi mellem 87.5 og 108.0 (MHz) Set Radio Frequency Status Status pÃ¥ lagring af frekvenser Warning: station label can only be 6 character. Advarsel: Stationsnavn kan højst være 6 tegn langt. Error: Could not store settings for station %1 Fejl: Kunne ikke gemme indstillinger for station %1 Set Radio Frequencies Gem radio-frekvenser fileManagerView Name Navn Type Type Size Størrelse ifpGUIView Local File System Lokale filer iRiver File System iRiver PlayList (*.m3u) Playliste (*.m3u) Open Playlist Dialog Ã…bn Playliste-dialog Choose a playlist Vælg en playliste There is not enough free space to upload the entire playlist. Der er ikke nok ledig plads til at overføre hele playlisten. iFP GUI Upload Playlist - Error iFP GUI Overfør PLayliste - Fejl iFP GUI Upload Selected Files - Error iFP GUI Overfør Markerede Filer - Fejl iFP GUI Download Selected Files - Error iFP GUI Overfør Markerede Filer - Fejl iFP GUI Delete Selected Files - Error iFP GUI Slet Markerede Filer - Fejl iFP GUI Format iRiver Device - Error iFP GUI Formattér iRiver - Fejl Format IFP Device. WARNING--- Answering 'Yes' will erase all data on this device! Formattér iRiver-enhed. ADVARSEL--- Hvis du svarer 'Ja' til dette, vil alt pÃ¥ denne iRiver-enhed blive slettet! Format IFP Device? Formattér iRiver-enhed? Please Wait while formatting IFP device. Vent venligst mens IFP-enheden bliver formatteret. Format Device Status Status pÃ¥ formattering Format Done. Formattering færdig. iFP GUI Update Firmware - Error iFP GUI Opdatér Firmware - Fejl Update Firmware Opdatér Firmware Update firmware? Opdatér firmware? Make sure your battery is full. Sørg for, at dit batteri er fuldt. DO NOT disconnect your USB cable until this process is finished! Du mÃ¥ IKKE afbryde USB-kablet, før denne proces er overstÃ¥et! IFP Firmware Files (*.hex; *.HEX) IFP Firmware-filer (*.hex; *.HEX) Open Firmware File Ã…bn firmware-fil Choose a Firmware HEX file Vælg en firmware HEX-fil Please Wait while updating firmware. Vent venligst mens firmwaren bliver opdateret. Firmware Update Status Status pÃ¥ firmware-opdatering Path to firmware file is too long. Stien til firmware-filen er for lang. Update Done Opdatering færdig DO NOT touch the device until it has turned itself off! Du mÃ¥ IKKE røre iRiver-enheden, før den har slukket sig selv! Afterwards, you may have to turn the device back on. Bagefter kan det være, du bliver nødt til selv at tænde den igen. iFP GUI Tuner Settings - Error iFP GUI Radio-indstillinger - Fejl ifpToolsWidget <p>This status bar shows the Battery Status.</p> <p>Her vises batteri-status.</p> <p>This shows the ammount of space used by uploaded songs and files.</p> <p>Her vises hvor meget plads, der bruges af sange og filer.</p> <p>Select a destination on the iFP device. Then, press this button to upload an m3u playist to the iFP device at the selected destination.</p> <p>Markér en destination pÃ¥ iFP-enheden. Tryk derefter pÃ¥ denne knap for at overføre en m3u-playliste til iFP-enheden pÃ¥ den valgte destination.</p> <p>Select a file from the left and press this button to upload it to the iFP device.</p> <p>Markér en fil i venstre side og tryk pÃ¥ denne knap for at overføre den til iFP-enheden.</p> <p>Select a file from the right and press this button to download it to your hard drive.</p> <p>Markér en fil i højre side og tryk pÃ¥ denne knap for at overføre den til din computer.</p> <p>Press this button to open the dialog that allows you to edit the radio frequency settings for your iFP device.</p> <p>Tryk pÃ¥ denne knap for at redigere radiofrekvens-indstillingerne pÃ¥ din iFP-enhed.</p> <p>Press this button to format the iFP device.</p> <p>Tryk pÃ¥ denne knap for at formattere iFP-enheden.</p> <p>Use this to update the iFP device firmware.</p> <br><p>You must first download a firmware file and save it to your hard drive.</p><br> <p>Brug denne knap til at opdatere firmwaren pÃ¥ din iFP-enhed.</p> <br><p>Først skal du dog downloade en firmware-fil og gemme den pÃ¥ din harddisk.</p><br> BatteryStatus Batteristatus Battery Status Batteri-status Used Storage Brugt plads MB MB Free Storage Ledig plads Upload Playlist to iFP Overfør playliste til iFP Upload File to iFP Overfør fil til iFP Download File from iFP Overfør fil fra iFP Edit Radio Frequency Settings Redigér radiofrekvens-indstillinger Format iFP Flash Formattér iFP-flash-hukommelse Update iFP Firmware Opdatér iFP-firmware %1 MB free %1 MB ledig ifp_gui &File &Filer &New Folder &Nyt katalog &Delete &Slet &Rename &Omdøb &Properties &Egenskaber E&xit &Afslut &View &Vis Align &Left-Right Opstil &Venstre-Højre Align &Top-Bottom Opstil &Top-Bund &Tools &Værktøjer &Upload Playlist &Overfør playliste &Auto-Convert REC files to MP3 Auto-&Konvertér REC-filer til MP3 &Tuner Settings &Radio-indstillinger &Upgrade Firmware Opgradér &Firmware &Help &Hjælp &iFP Info &iFP Info &About &Om... About &Qt Om &Qt What's &This Hvad er &dette? Ready Klar Not Connected - Try unplugging iRiver and reconnecting. Then, double-click the root ('\') directory in the iRiver Filesystem panel. Ikke forbundet - Prøv at frakoble din iRiver og tilkoble den igen. Dobbeltklik derefter pÃ¥ rod-kataloget ('/') i iRiver-panelet. iRiver Connected iRiver forbundet iFP GUI Application iFP GUI Applikation iFP GUI Device Info - Error iFP GUI Enheds-oplysninger - Fejl Using Bruger static ifp functions equivelant to %1 statiske ifp-funktioner svarende til %1 iFP GUI Device Info iFP GUI Enheds-oplysninger This application can be used to interface Dette program kan anvendes til at kommunikere with an iRiver iFP device. med en iRiver iFP. Revision: Version: please send feedback to ifpgui@gmail.com. send venligst feedback pÃ¥ engelsk til forfatteren pÃ¥ ifpgui@gmail.com. iFP Device Not Connected. iFP-enhed ikke forbundet. static ifp functions equivelant to statiske ifp-funktioner svarende til Using static ifp functions (ifplib not available). Anvender statiske ifp-funktioner (ifplib ikke tilgængeligt). ifpgui-1.0.0/ifpguiview.h000755 001750 000144 00000012524 11334201212 013512 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef _IFPGUIVIEW_H_ #define _IFPGUIVIEW_H_ #include #include "fileviewer.h" #include "settings.h" #include "ifpguiview.h" //int progress(void *context, struct ifp_transfer_status *status); class QPainter; class ifpGUIView; //class fileManagerView; extern int progress(void *context, struct ifp_transfer_status *status); typedef struct progress_info { bool show_progress; // show the ifp progress bar bool is_batch; // ifp-gui defined is batch (user selected multiple files) int total_transfered; // The number of bytes transferred in the transfer so far int total_to_transfer; // The total number of bytes expected during this transfer int file_bytes; // The number of bytes transferred for the current file int file_total; // The number of bytes in the current file bool is_status_batch; // libifp defined is batch (called up/download directory) int batch_total; int batch_bytes; int files_count; // The number of files successfully transferred so far. int files_total; // The number of files expected to be transferred in this batch. bool delete_success; // a return value for the ifp_delete function bool auto_convert; // whether or not to convert the file after download QString file_name; // the name of the current file } ifp_progress_info; /** * This is the main view class for ifpGUI. Most of the non-menu, * non-toolbar, and non-statusbar (e.g., non frame) GUI code should go * here. * * @short Main view * @author Jim Campbell * @version 0.1 */ class ifpGUIView : public QWidget { Q_OBJECT public: ifpGUIView(QMainWindow *parent); ~ifpGUIView(); void enableWindow(bool enable); int updateFileAndStatus(void); int updateStatus(void); bool isProcessing(); Settings *guiSettings; bool cancel_progress; //QString truncateFileName(const QString &org, const QFontMetrics &fm, int width); //QString truncateFilePath(QString &fileStr); void setFileName(const QString &fileName); void setFileProgress(int progress); void setFileProgressTarget(int totalSteps); void setTotalProgress(int progress); void setTotalProgressTarget(int totalSteps); void hideCancelBtn(void); void showCancelBtn(void); void showTransferProgress(); void hideTransferProgress(); bool isTransferProgressVisible(); void updateProgress(ifp_progress_info *pg_info); public slots: void uploadPlaylist(void); void uploadSelectedFile(void); void downloadSelectedFile(void); void deleteSelectedFile(void); void setBatteryStatus(int bStatus); void setCapacity(int capSize, int capFree); int getBatteryStatus(); QString getFirmwareRev(); QString getifpType(); int getCapacity(); int getFreeSpace(); void formatIfpDevice(); void UpdateFirmware(); void setRadioFrequency(); void create_directory(); void rename_file(); void delete_file(); void file_properties(); void align_horizontal(); void align_vertical(); void btnCancel_clicked(bool checked); signals: void signalChangeStatusbar(const QString& text); //void signalChangeCaption(const QString& text); void signalSetBatteryStatus(int bStatus); void signalSetCapacity(int capSize, int capFree); //private slots: // void slotSetTitle(const QString& title); private: QMainWindow *parent_window; QGridLayout *top_layout; QSplitter *split; int msgflag; bool yesAll; fileManagerView *dirview; fileManagerView *ifpview; // Transfer toolbar QToolBar *ifpTransferToolBar; QVBoxLayout *transferLayout; QProgressBar *fileprogress; QProgressBar *totalprogress; QLabel *lblFilename; QPushButton *btnCancel; QString lastFileName; void refreshFileItem(void); void unselectAllChildren(QTreeWidgetItem *parentItem); void createToolBars(); }; #endif // _IFPGUIVIEW_H_ ifpgui-1.0.0/ifp_gui.cpp000755 001750 000144 00000042225 11334723747 013340 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include "backend/ifpinterface.h" #include "radiofreqdlg.h" #include "revision.h" #include "ifp_gui.h" ifpGUIView *MainIfpGuiWindow; ifp_progress_info ifpTransferInfo; ifp_gui::ifp_gui() : QMainWindow(0), m_view( new ifpGUIView( this )) { QPixmap openIcon, saveIcon, printIcon; //resize( 640, 480 ); setAttribute(Qt::WA_DeleteOnClose); createActions(); createMenus(); createToolBars(); createStatusBar(); readSettings(); // make m_view the central widget MainIfpGuiWindow = m_view; setCentralWidget(m_view); connect_timer = new QTimer(this); connect(connect_timer, SIGNAL(timeout()), this, SLOT(ifpConnect())); connect_timer->start(5000); // check every 5 seconds progress_timer = new QTimer(this); connect(progress_timer, SIGNAL(timeout()), this, SLOT(ifpTransferProgress())); progress_timer->start(100); // check every 1/10 seconds connect(m_view, SIGNAL(signalSetBatteryStatus(int)), this, SLOT(setBatteryStatus(int))); connect(m_view, SIGNAL(signalSetCapacity(int, int)), this, SLOT(setCapacity(int, int))); updateStatus(); } ifp_gui::~ifp_gui() { } void ifp_gui::enableWindow(bool enable) { ifpToolBar->setEnabled(enable); menuBar()->setEnabled(enable); } void ifp_gui::ifpConnect() { int ret; if (ifp_dh == NULL) { statusBar()->showMessage(tr("Not Connected - Try unplugging iRiver and reconnecting. Then, double-click the root ('\\') directory in the iRiver Filesystem panel."), 3000); } else { if (m_view->isProcessing() == FALSE) { ret = updateStatus(); if (ret >= 0) statusBar()->showMessage(tr("iRiver Connected"), 10000); connect_timer->start(5000); // check every 5 seconds } else { connect_timer->start(500); // check every 1/2 seconds } } } void ifp_gui::ifpTransferProgress() { //if (m_view->isProcessing() && if (ifpTransferInfo.show_progress) { if (!MainIfpGuiWindow->isTransferProgressVisible()) { MainIfpGuiWindow->showTransferProgress(); } m_view->updateProgress(&ifpTransferInfo); } else { MainIfpGuiWindow->hideTransferProgress(); } } void ifp_gui::closeEvent( QCloseEvent* ce ) { ce->accept(); return; } int ifp_gui::updateStatus() { int ret; ret = m_view->getBatteryStatus(); setBatteryStatus(ret); return m_view->updateStatus(); } void ifp_gui::setBatteryStatus(int bStatus) { switch (bStatus) { case 1: BatteryStatus->setPixmap(QPixmap(":/images/battery1.png")); break; case 2: BatteryStatus->setPixmap(QPixmap(":/images/battery2.png")); break; case 3: BatteryStatus->setPixmap(QPixmap(":/images/battery3.png")); break; case 4: BatteryStatus->setPixmap(QPixmap(":/images/battery4.png")); break; default: BatteryStatus->setPixmap(QPixmap(":/images/battery0.png")); } } void ifp_gui::setCapacity(int capSize, int capFree) { int sizeMB; CapacityStatus->setMaximum(capSize); CapacityStatus->setValue(capSize - capFree); sizeMB = capFree / 1000000; Capacitylbl->setText(tr("%1 MB\n free").arg(sizeMB)); } void ifp_gui::showToolbar() { ifpToolBar->setVisible(TRUE); } void ifp_gui::hideToolbar() { ifpToolBar->setVisible(FALSE); } void ifp_gui::showToolbarText() { ifpToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); } void ifp_gui::hideToolbarText() { ifpToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); } void ifp_gui::uploadPlayList() { m_view->uploadPlaylist(); } void ifp_gui::uploadSelectedFile() { m_view->uploadSelectedFile(); } void ifp_gui::downloadSelectedFile() { m_view->downloadSelectedFile(); } void ifp_gui::formatIfpDevice() { m_view->formatIfpDevice(); } void ifp_gui::show_ifp_info() { char info_str[500]; QString libLoaded, Message; if (ifp_dh == NULL) { showInfoMsgBox(tr("iFP GUI Device Info - Error"), iFPNotConnectedMsg); return; } if (usingLibrary) libLoaded = tr("Using ") + ifpLibraryVersion; else { libLoaded = tr("Using static ifp functions (ifplib not available).\r\n"); libLoaded += tr(" static ifp functions equivelant to %1").arg(LibRevision); } ifpgui_ifp_device_info(&ifp_dev, info_str, 500); Message = tr(info_str) + "\n\n" + libLoaded; showInfoMsgBox(tr("iFP GUI Device Info"), Message); } void ifp_gui::show_radiofreq_info() { RadioFreqWindow *rfdialog; rfdialog = new RadioFreqWindow(); rfdialog->setModal(TRUE); rfdialog->exec(); delete rfdialog; } void ifp_gui::about() { char info_str[500]; QString msg; QString libLoaded; msg = tr("This application can be used to interface\n"); msg += tr("with an iRiver iFP device.\n\n"); msg += tr("Revision: ") + AppRevision + "\n\n"; msg += tr("please send feedback to ifpgui@gmail.com.\n\n\n"); if (ifp_dh == NULL) { msg += tr("iFP Device Not Connected."); } else { ifpgui_ifp_device_info(&ifp_dev, info_str, 500); msg += QString(info_str); if (usingLibrary) libLoaded = tr("Using ") + ifpLibraryVersion; else { libLoaded = tr("Using static ifp functions (ifplib not available).\r\n"); libLoaded += tr(" static ifp functions equivelant to ") + LibRevision; } msg += "\n\n"; msg += libLoaded; } showInfoMsgBox(tr("iFP GUI Application"), msg); } void ifp_gui::aboutQt() { QMessageBox::aboutQt(this, tr("iFP GUI Application")); } void ifp_gui::auto_convert() { bool autoConvert; autoConvert = auto_convertAct->isChecked(); autoConvert = !autoConvert; auto_convertAct->setChecked(autoConvert); m_view->guiSettings->setAutoConvertREC(autoConvert); } void ifp_gui::create_directory(void) { m_view->create_directory(); } void ifp_gui::rename_file(void) { m_view->rename_file(); } void ifp_gui::delete_file(void) { m_view->delete_file(); } void ifp_gui::file_properties(void) { m_view->file_properties(); } void ifp_gui::align_horizontal(void) { m_view->align_horizontal(); align_horizontalAct->setChecked(true); align_verticalAct->setChecked(false); m_view->guiSettings->setViewAlignment(Qt::Horizontal); } void ifp_gui::align_vertical(void) { m_view->align_vertical(); align_verticalAct->setChecked(true); align_horizontalAct->setChecked(false); m_view->guiSettings->setViewAlignment(Qt::Vertical); } void ifp_gui::updateFirmware(void) { m_view->UpdateFirmware(); } void ifp_gui::createActions() { create_directoryAct = new QAction(QIcon(":/images/newfolder.png"), tr("&New Folder"), this); create_directoryAct->setShortcut(tr("Ctrl+N")); create_directoryAct->setStatusTip(tr("Create a new directory folder")); connect(create_directoryAct, SIGNAL(triggered()), this, SLOT(create_directory())); delete_fileAct = new QAction(QIcon(":/images/delete.png"), tr("&Delete"), this); delete_fileAct->setShortcut(tr("Del")); delete_fileAct->setStatusTip(tr("Delete selected file")); connect(delete_fileAct, SIGNAL(triggered()), this, SLOT(delete_file())); rename_fileAct = new QAction(QIcon(":/images/rename.png"), tr("&Rename"), this); rename_fileAct->setShortcut(tr("F2")); rename_fileAct->setStatusTip(tr("Delete selected file")); connect(rename_fileAct, SIGNAL(triggered()), this, SLOT(rename_file())); file_propertiesAct = new QAction(QIcon(":/images/properties.png"), tr("&Properties"), this); file_propertiesAct->setShortcut(tr("F3")); file_propertiesAct->setStatusTip(tr("Show properties of selected file")); connect(file_propertiesAct, SIGNAL(triggered()), this, SLOT(file_properties())); closeAllWindowsAct = new QAction(tr("E&xit"), this); closeAllWindowsAct->setShortcut(tr("Alt+X")); closeAllWindowsAct->setStatusTip(tr("Exit Application")); connect(closeAllWindowsAct, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); align_horizontalAct = new QAction(QIcon(":/images/view_left_right.png"), tr("Align &Left-Right"), this); align_horizontalAct->setCheckable(true); align_horizontalAct->setStatusTip(tr("Show application file trees side to side in a Left-Right layout")); connect(align_horizontalAct, SIGNAL(triggered()), this, SLOT(align_horizontal())); align_verticalAct = new QAction(QIcon(":/images/view_top_bottom.png"), tr("Align &Top-Bottom"), this); align_verticalAct->setStatusTip(tr("Show application file trees one on top and the other on the bottom")); align_verticalAct->setCheckable(true); connect(align_verticalAct, SIGNAL(triggered()), this, SLOT(align_vertical())); uploadPlayListAct = new QAction(QIcon(":/images/playlist.png"),tr("&Upload Playlist"), this); uploadPlayListAct->setShortcut(tr("Ctrl+U")); uploadPlayListAct->setStatusTip(tr("Upload a playlist to the ifp device")); uploadPlayListAct->setWhatsThis(tr("

Select a destination on the iFP device. Then, press this button to upload an m3u playist to the iFP device at the selected destination.

")); connect(uploadPlayListAct, SIGNAL(triggered()), this, SLOT(uploadPlayList())); auto_convertAct = new QAction(tr("&Auto-Convert REC files to MP3"), this); auto_convertAct->setCheckable(true); auto_convertAct->setShortcut(tr("Ctrl+A")); auto_convertAct->setStatusTip(tr("Convert REC files to MP3 as they are downloaded from the ifp device")); connect(auto_convertAct, SIGNAL(triggered()), this, SLOT(auto_convert())); show_radiofreq_infoAct = new QAction(QIcon(":/images/radio_s.png"), tr("&Tuner Settings"), this); show_radiofreq_infoAct->setShortcut(tr("Ctrl+T")); show_radiofreq_infoAct->setStatusTip(tr("Open the FM tuner settings options")); show_radiofreq_infoAct->setWhatsThis(tr("

Press this button to open the dialog that allows you to edit the radio frequency settings for your iFP device.

")); connect(show_radiofreq_infoAct, SIGNAL(triggered()), this, SLOT(show_radiofreq_info())); updateFirmwareAct = new QAction(QIcon(":/images/reload_s.png"), tr("&Upgrade Firmware"), this); updateFirmwareAct->setStatusTip(tr("Upgrade the Firmware in the ifp")); updateFirmwareAct->setWhatsThis(tr("

Use this to update the iFP device firmware.


" "

You must first download a firmware file and save it to your hard drive.


" )); connect(updateFirmwareAct, SIGNAL(triggered()), this, SLOT(updateFirmware())); show_ifp_infoAct = new QAction(tr("&iFP Info"), this); show_ifp_infoAct->setShortcut(tr("Ctrl+F")); show_ifp_infoAct->setStatusTip(tr("Show information about this iFP device")); connect(show_ifp_infoAct, SIGNAL(triggered()), this, SLOT(show_ifp_info())); aboutAct = new QAction(tr("&About"), this); aboutAct->setShortcut(tr("F1")); aboutAct->setStatusTip(tr("Show information about this program")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); aboutQtAct = new QAction(tr("About &Qt"), this); aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); uploadFileAct = new QAction(QIcon(":/images/upload_s.png"), tr("Upload File"), this); uploadFileAct->setToolTip(tr("Upload File to iFP")); uploadFileAct->setWhatsThis(tr("

Select a file from the left and press this button to upload it to the iFP device.

")); connect(uploadFileAct, SIGNAL(triggered()), this, SLOT(uploadSelectedFile())); downloadFileAct = new QAction(QIcon(":/images/download_s.png"), tr("Download File"), this); downloadFileAct->setToolTip(tr("Download File from iFP")); downloadFileAct->setWhatsThis(tr("

Select a file from the right and press this button to download it to your hard drive.

")); connect(downloadFileAct, SIGNAL(triggered()), this, SLOT(downloadSelectedFile())); formatAct = new QAction(QIcon(":/images/format_s.png"), tr("Format"), this); formatAct->setToolTip(tr("Format iFP Filesystem")); formatAct->setWhatsThis(tr("

Press this button to format the iFP device.

")); connect(formatAct, SIGNAL(triggered()), this, SLOT(formatIfpDevice())); } void ifp_gui::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(create_directoryAct); fileMenu->addAction(delete_fileAct); fileMenu->addAction(rename_fileAct); fileMenu->addAction(file_propertiesAct); fileMenu->addSeparator(); fileMenu->addAction(closeAllWindowsAct); viewMenu = menuBar()->addMenu(tr("&View")); viewMenu->addAction(align_horizontalAct); viewMenu->addAction(align_verticalAct); optionsMenu = menuBar()->addMenu(tr("&Tools")); optionsMenu->addAction(uploadPlayListAct); optionsMenu->addAction(auto_convertAct); optionsMenu->addAction(show_radiofreq_infoAct); optionsMenu->addSeparator(); optionsMenu->addAction(updateFirmwareAct); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(show_ifp_infoAct); helpMenu->addSeparator(); helpMenu->addAction(aboutAct); helpMenu->addAction(aboutQtAct); } void ifp_gui::createToolBars() { //ifpToolBar = new QToolBar(tr("File"), parent); ifpToolBar = addToolBar(tr("Toolbar")); ifpToolBar->setIconSize(QSize(30,30)); ifpToolBar->addAction(uploadPlayListAct); ifpToolBar->addAction(show_radiofreq_infoAct); ifpToolBar->addAction(updateFirmwareAct); BatteryStatus = new QLabel(tr("BatteryStatus")); BatteryStatus->setPixmap(QPixmap(":/images/battery0.png")); BatteryStatus->setToolTip(tr("Battery Status")); QString batteryStatusText = tr("

This status bar shows the Battery Status.

"); BatteryStatus->setWhatsThis(batteryStatusText); ifpToolBar->addWidget(BatteryStatus); ifpToolBar->addWidget(new QLabel(" ")); CapacityStatus = new QProgressBar(); CapacityStatus->setMaximumWidth(250); CapacityStatus->setMinimum(0); CapacityStatus->setMaximum(100000); CapacityStatus->setToolTip(tr("Used Storage")); QString CapacityStatusText = tr("

This shows the ammount of space used by uploaded songs and files.

"); CapacityStatus->setWhatsThis(CapacityStatusText); ifpToolBar->addWidget(CapacityStatus); Capacitylbl = new QLabel(tr(" MB")); Capacitylbl->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); Capacitylbl->setToolTip(tr("Free Storage")); QString CapacityText = tr("

This shows the ammount of space used by uploaded songs and files.

"); Capacitylbl->setWhatsThis(CapacityText); ifpToolBar->addWidget(Capacitylbl); ifpToolBar->addWidget(new QLabel(" ")); ifpToolBar->addAction(uploadPlayListAct); ifpToolBar->addAction(uploadFileAct); ifpToolBar->addAction(downloadFileAct); ifpToolBar->addWidget(new QLabel(" ")); ifpToolBar->addAction(show_radiofreq_infoAct); ifpToolBar->addWidget(new QLabel(" ")); ifpToolBar->addAction(formatAct); ifpToolBar->addAction(updateFirmwareAct); } void ifp_gui::createStatusBar() { statusBar()->showMessage( tr("Ready"), 2000 ); } void ifp_gui::readSettings() { bool autoConvert; int viewAlignment; viewAlignment = m_view->guiSettings->getViewAlignment(); if (viewAlignment == Qt::Vertical) { align_horizontalAct->setChecked(false); align_verticalAct->setChecked(true); align_vertical(); } else { align_horizontalAct->setChecked(true); align_verticalAct->setChecked(false); align_horizontal(); } autoConvert = m_view->guiSettings->getAutoConvertREC(); auto_convertAct->setChecked(autoConvert); } ifpgui-1.0.0/backend/000755 001750 000144 00000000000 11331474606 012563 5ustar00000000 000000 ifpgui-1.0.0/backend/iointerface.h000755 001750 000144 00000013556 11317014000 015217 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef IOINTERFACE_H #define IOINTERFACE_H #include #include "gui_user.h" /** Successful return code. */ #define IO_INTF_OK 0 /**< A user callback requested the transfer be cancelled. */ #define IO_INTF_USER_CANCEL 11 /** File 'type'. */ #define IO_INTF_FILE 0x01 //1001 /** Dir 'type'. */ #define IO_INTF_DIR 0x02 //1002 /** Symbolic Link 'type'. */ #define IO_INTF_SYMLINK 0x03 //1003 /** Special 'type'. */ #define IO_INTF_SPECIAL 0x04 //1004 /** Locked Dir 'type'. */ #define IO_INTF_DIR_LOCKED 0x05 //1005 /** * Types of I/O Interfaces. Define one for each type. * if you add new types you will also need to add to the * case statement in fileviewer.cpp */ #define IO_INTF_TYPE_LOCAL 0 #define IO_INTF_TYPE_IFP 1 class IOInterface { private: protected: int internal_exec_TransferToiFP(QString& remoteDest, QList *local_file_list); int internal_exec_TransferFromiFP(QString& localDest, QList *remote_file_list); QString internal_get_ProtocolStr(QString& fileName); int internal_remove_ProtocolStr(QString& fileName); int internal_norm_ProtocolStr(QString& fileName, QString protoStr); QString lastErrString; int interfaceType; bool processingFiles; public: IOInterface() {}; virtual ~IOInterface() {}; virtual int exec_TransferUpload(QString& destination, QList *file_info_list) = 0; virtual int exec_TransferDownload(QString& destination, QList *file_info_list) = 0; virtual int exec_Mkdir(QString& baseDir, QString& newDir) = 0; virtual int exec_Rename(const QString& oldName, const QString& newName) = 0; virtual int exec_Delete(QList *file_info_list) = 0; virtual int exec_ShowProperties(const QString& fileName) = 0; virtual int exec_GetDirectoryListing(QString dirName, QList *file_info_list) = 0; virtual bool get_isReadable(QString& dirName) = 0; virtual QString get_LastError() = 0; bool isProcessing() {return (processingFiles);}; bool isAudioFileType(const QString& fileName) { QString ext; ext = fileName.right(4); if ((ext == ".aac") || // Advanced Audio Coding File (ext == ".aif") || // Audio Interchange File Format (ext == ".iff") || // Interchange File Format //(ext == ".m3u") || // Media Playlist File (ext == ".mid") || // MIDI File (ext == ".midi") || // MIDI File (ext == ".mp3") || // MP3 Audio File (ext == ".mpa") || // MPEG-2 Audio File (ext == ".ra") || // Real Audio File (ext == ".wav") || // WAVE Audio File (ext == ".wma")) // Windows Media Audio File { return true; } return false; } QString ProtocolType; // examples (file: ifp: ftp:) }; class FileInterface : public IOInterface { private: public: FileInterface() { interfaceType = IO_INTF_TYPE_LOCAL; ProtocolType = "file://"; }; ~FileInterface() {}; int exec_TransferUpload(QString& destination, QList *file_info_list); int exec_TransferDownload(QString& destination, QList *file_info_list); int exec_Mkdir(QString& baseDir, QString& newDir); int exec_Rename(const QString& oldName, const QString& newName); int exec_Delete(QList *file_info_list); int exec_ShowProperties(const QString& fileName); int exec_GetDirectoryListing(QString dirName, QList *file_info_list); bool get_isReadable(QString& dirName); QString get_LastError(); }; class iFPInterface : public IOInterface { private: int ifp_connect(bool showError); public: iFPInterface() { interfaceType = IO_INTF_TYPE_IFP; ProtocolType = "ifp://"; }; virtual ~iFPInterface() {}; int exec_TransferUpload(QString& destination, QList *file_info_list); int exec_TransferDownload(QString& destination, QList *file_info_list); int exec_Mkdir(QString& baseDir, QString& newDir); int exec_Rename(const QString& oldName, const QString& newName); int exec_Delete(QList *file_info_list); int exec_ShowProperties(const QString& fileName); int exec_GetDirectoryListing(QString dirName, QList *file_info_list); bool get_isReadable(QString& dirName); QString get_LastError(); }; #endif ifpgui-1.0.0/backend/ifpinterface.cpp000755 001750 000144 00000052171 11332726626 015742 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include "backend/ifpinterface.h" #include "ifprecconv.h" int cancel_progress; QLibrary *ifpLib = NULL; bool usingLibrary = FALSE; bool errorInLibrary = FALSE; QString ifpLibraryVersion; // ifp_init my_ifp_init ifpgui_ifp_init; // ifp_finalize my_ifp_finalize ifpgui_ifp_finalize; // ifp_find_device my_ifp_find_device ifpgui_ifp_find_device; // ifp_release_device; my_ifp_release_device ifpgui_ifp_release_device; // ifp_format my_ifp_format ifpgui_ifp_format; // ifp_update_firmware my_ifp_update_firmware ifpgui_ifp_update_firmware; // ifp_device_info my_ifp_device_info ifpgui_ifp_device_info; // ifp_battery my_ifp_battery ifpgui_ifp_battery; // ifp_capacity my_ifp_capacity ifpgui_ifp_capacity; // ifp_freespace my_ifp_freespace ifpgui_ifp_freespace; // ifp_model my_ifp_model ifpgui_ifp_model; // ifp_delta my_ifp_delta ifpgui_ifp_delta; // ifp_firmware_version my_ifp_firmware_version ifpgui_ifp_firmware_version; // ifp_error_message my_ifp_error_message ifpgui_ifp_error_message; // ifp_rename my_ifp_rename ifpgui_ifp_rename; // ifp_delete my_ifp_delete ifpgui_ifp_delete; // ifp_mkdir my_ifp_mkdir ifpgui_ifp_mkdir; // ifp_rmdir my_ifp_rmdir ifpgui_ifp_rmdir; // ifp_list_dirs my_ifp_list_dirs ifpgui_ifp_list_dirs; // ifp_read_file_progress my_ifp_read_file_progress ifpgui_ifp_read_file_progress; // ifp_write_file_progress my_ifp_write_file_progress ifpgui_ifp_write_file_progress; // ifp_download_file my_ifp_download_file ifpbase_ifp_download_file; // ifp_upload_file my_ifp_upload_file ifpgui_ifp_upload_file; // ifp_delete_dir_recursive my_ifp_delete_dir_recursive ifpgui_ifp_delete_dir_recursive; // ifp_download_dir my_ifp_download_dir ifpgui_ifp_download_dir; // ifp_upload_dir my_ifp_upload_dir ifpgui_ifp_upload_dir; // ifp_is_file my_ifp_is_file ifpgui_ifp_is_file; // ifp_is_dir my_ifp_is_dir ifpgui_ifp_is_dir; // ifp_exists my_ifp_exists ifpgui_ifp_exists; // ifp_get_tuner_presets my_ifp_get_tuner_presets ifpgui_ifp_get_tuner_presets; // ifp_set_tuner_presets my_ifp_set_tuner_presets ifpgui_ifp_set_tuner_presets; // ifp_get_station my_ifp_get_station ifpgui_ifp_get_station; // ifp_set_station my_ifp_set_station ifpgui_ifp_set_station; libusb_device_handle *ifp_dh = NULL; struct libusb_device *libusb_dev = NULL; struct ifp_device ifp_dev; int libusb_interface; //----------------------------------------------------------- // helper functions //----------------------------------------------------------- void print_library_error(void) { errorInLibrary = TRUE; fprintf(stderr, "The ifplib Library is missing one or more functions.\n"); fprintf(stderr, "Please get the latest version from http://ifp-driver.sourcefourge.net.\n\n"); fprintf(stderr, "USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS.\n"); } //=========================================================================== // initialize_ifp_device() // This function will initialize the usb bus, find the iFP usb device, // claim the iFP interface, and initialize the iFP library // // Returns: %IFP_OK if successful, %IFP_ERR_DEV_FUBAR on error //=========================================================================== int initialize_ifp_device(void) { int ret; ret = IFP_ERR_DEV_FUBAR; // until further notice the libifp.so library will no longer work with // ifpgui. ifpgui now uses libusb1.0 and requires structure changes // within libifp. ifpLib = new QLibrary("ifp-1.X"); // ifp_init ifpgui_ifp_init = (my_ifp_init)ifpLib->resolve("ifp_init"); if (ifpgui_ifp_init == NULL) { ifpgui_ifp_init = ifp_init; } usingLibrary = ifpLib->isLoaded(); if (usingLibrary) { ifpLibraryVersion = ifpLib->fileName(); } else { ifpLibraryVersion = "ifpgui-internal"; } if (usingLibrary) { // ifp_finalize ifpgui_ifp_finalize = (my_ifp_finalize)ifpLib->resolve("ifp_finalize"); if (ifpgui_ifp_finalize == NULL) { printf("ERROR: ifp_finalize() not available in libifp\n"); print_library_error(); } // ifp_find_device ifpgui_ifp_find_device = (my_ifp_find_device)ifpLib->resolve("ifp_find_device"); if (ifpgui_ifp_find_device == NULL) { printf("ERROR: ifp_find_device() not available in libifp\n"); print_library_error(); } // ifp_release_device ifpgui_ifp_release_device = (my_ifp_release_device)ifpLib->resolve("ifp_release_device"); if (ifpgui_ifp_release_device == NULL) { printf("ERROR: ifp_release_device() not available in libifp\n"); print_library_error(); } // ifp_format ifpgui_ifp_format = (my_ifp_format)ifpLib->resolve("ifp_format"); if (ifpgui_ifp_format == NULL) { printf("ERROR: ifp_format() not available in libifp\n"); print_library_error(); } // ifp_update_firmware ifpgui_ifp_update_firmware = (my_ifp_update_firmware)ifpLib->resolve("ifp_update_firmware"); if (ifpgui_ifp_update_firmware == NULL) { printf("ERROR: ifp_update_firmware() not available in libifp\n"); print_library_error(); } // ifp_device_info ifpgui_ifp_device_info = (my_ifp_device_info)ifpLib->resolve("ifp_device_info"); if (ifpgui_ifp_device_info == NULL) { printf("ERROR: ifp_device_info() not available in libifp\n"); print_library_error(); } // ifp_battery ifpgui_ifp_battery = (my_ifp_battery)ifpLib->resolve("ifp_battery"); if (ifpgui_ifp_battery == NULL) { printf("ERROR: ifp_battery() not available in libifp\n"); print_library_error(); } // ifp_capacity ifpgui_ifp_capacity = (my_ifp_capacity)ifpLib->resolve("ifp_capacity"); if (ifpgui_ifp_capacity == NULL) { printf("ERROR: ifp_capacity() not available in libifp\n"); print_library_error(); } // ifp_freespace ifpgui_ifp_freespace = (my_ifp_freespace)ifpLib->resolve("ifp_freespace"); if (ifpgui_ifp_freespace == NULL) { printf("ERROR: ifp_freespace() not available in libifp\n"); print_library_error(); } // ifp_model ifpgui_ifp_model = (my_ifp_model)ifpLib->resolve("ifp_model"); if (ifpgui_ifp_model == NULL) { printf("ERROR: ifp_model() not available in libifp\n"); print_library_error(); } // ifp_delta ifpgui_ifp_delta = (my_ifp_delta)ifpLib->resolve("ifp_delta"); if (ifpgui_ifp_delta == NULL) { printf("ERROR: ifp_delta() not available in libifp\n"); print_library_error(); } // ifp_firmware_version ifpgui_ifp_firmware_version = (my_ifp_firmware_version)ifpLib->resolve("ifp_firmware_version"); if (ifpgui_ifp_firmware_version == NULL) { printf("ERROR: ifp_firmware_version() not available in libifp\n"); print_library_error(); } // ifp_error_message ifpgui_ifp_error_message = (my_ifp_error_message)ifpLib->resolve("ifp_error_message"); if (ifpgui_ifp_error_message == NULL) { printf("ERROR: ifp_error_message() not available in libifp\n"); print_library_error(); } // ifp_rename ifpgui_ifp_rename = (my_ifp_rename)ifpLib->resolve("ifp_rename"); if (ifpgui_ifp_rename == NULL) { printf("ERROR: ifp_rename() not available in libifp\n"); print_library_error(); } // ifp_delete ifpgui_ifp_delete = (my_ifp_delete)ifpLib->resolve("ifp_delete"); if (ifpgui_ifp_delete == NULL) { printf("ERROR: ifp_delete() not available in libifp\n"); print_library_error(); } // ifp_mkdir ifpgui_ifp_mkdir = (my_ifp_mkdir)ifpLib->resolve("ifp_mkdir"); if (ifpgui_ifp_mkdir == NULL) { printf("ERROR: ifp_mkdir() not available in libifp\n"); print_library_error(); } // ifp_rmdir ifpgui_ifp_rmdir = (my_ifp_rmdir)ifpLib->resolve("ifp_rmdir"); if (ifpgui_ifp_rmdir == NULL) { printf("ERROR: ifp_rmdir() not available in libifp\n"); print_library_error(); } // ifp_list_dirs ifpgui_ifp_list_dirs = (my_ifp_list_dirs)ifpLib->resolve("ifp_list_dirs"); if (ifpgui_ifp_list_dirs == NULL) { printf("ERROR: ifp_list_dirs() not available in libifp\n"); print_library_error(); } // ifp_read_file_progress ifpgui_ifp_read_file_progress = (my_ifp_read_file_progress)ifpLib->resolve("ifp_read_file_progress"); if (ifpgui_ifp_read_file_progress == NULL) { printf("ERROR: ifp_read_file_progress() not available in libifp\n"); print_library_error(); } // ifp_write_file_progress ifpgui_ifp_write_file_progress = (my_ifp_write_file_progress)ifpLib->resolve("ifp_write_file_progress"); if (ifpgui_ifp_write_file_progress == NULL) { printf("ERROR: ifp_write_file_progress() not available in libifp\n"); print_library_error(); } // ifp_download_file ifpbase_ifp_download_file = (my_ifp_download_file)ifpLib->resolve("ifp_download_file"); if (ifpbase_ifp_download_file == NULL) { printf("ERROR: ifp_download_file() not available in libifp\n"); print_library_error(); } // ifp_upload_file ifpgui_ifp_upload_file = (my_ifp_upload_file)ifpLib->resolve("ifp_upload_file"); if (ifpgui_ifp_upload_file == NULL) { printf("ERROR: ifp_upload_file() not available in libifp\n"); print_library_error(); } // ifp_delete_dir_recursive ifpgui_ifp_delete_dir_recursive = (my_ifp_delete_dir_recursive)ifpLib->resolve("ifp_delete_dir_recursive"); if (ifpgui_ifp_delete_dir_recursive == NULL) { printf("ERROR: ifp_delete_dir_recursive() not available in libifp\n"); print_library_error(); } // ifp_download_dir ifpgui_ifp_download_dir = (my_ifp_download_dir)ifpLib->resolve("ifp_download_dir"); if (ifpgui_ifp_download_dir == NULL) { printf("ERROR: ifp_download_dir() not available in libifp\n"); print_library_error(); } // ifp_upload_dir ifpgui_ifp_upload_dir = (my_ifp_upload_dir)ifpLib->resolve("ifp_upload_dir"); if (ifpgui_ifp_upload_dir == NULL) { printf("ERROR: ifp_upload_dir() not available in libifp\n"); print_library_error(); } // ifp_is_file ifpgui_ifp_is_file = (my_ifp_is_file)ifpLib->resolve("ifp_is_file"); if (ifpgui_ifp_is_file == NULL) { printf("ERROR: ifp_is_file() not available in libifp\n"); print_library_error(); } // ifp_is_dir ifpgui_ifp_is_dir = (my_ifp_is_dir)ifpLib->resolve("ifp_is_dir"); if (ifpgui_ifp_is_dir == NULL) { printf("ERROR: ifp_is_dir() not available in libifp\n"); print_library_error(); } // ifp_exists ifpgui_ifp_exists = (my_ifp_exists)ifpLib->resolve("ifp_exists"); if (ifpgui_ifp_exists == NULL) { printf("ERROR: ifp_exists() not available in libifp\n"); print_library_error(); } // ifp_get_tuner_presets ifpgui_ifp_get_tuner_presets = (my_ifp_get_tuner_presets)ifpLib->resolve("ifp_get_tuner_presets"); if (ifpgui_ifp_get_tuner_presets == NULL) { printf("ERROR: ifp_get_tuner_presets() not available in libifp\n"); print_library_error(); } // ifp_set_tuner_presets ifpgui_ifp_set_tuner_presets = (my_ifp_set_tuner_presets)ifpLib->resolve("ifp_set_tuner_presets"); if (ifpgui_ifp_set_tuner_presets == NULL) { printf("ERROR: ifp_set_tuner_presets() not available in libifp\n"); print_library_error(); } // ifp_get_station ifpgui_ifp_get_station = (my_ifp_get_station)ifpLib->resolve("ifp_get_station"); if (ifpgui_ifp_get_station == NULL) { printf("ERROR: ifp_get_station() not available in libifp\n"); print_library_error(); } // ifp_set_station ifpgui_ifp_set_station = (my_ifp_set_station)ifpLib->resolve("ifp_set_station"); if (ifpgui_ifp_set_station == NULL) { printf("ERROR: ifp_set_station() not available in libifp\n"); print_library_error(); } } //------------------------------------------------------------------------- // if there was an error loading the library or the library was not found //------------------------------------------------------------------------- if ((errorInLibrary) || (!usingLibrary)) { // ifp_finalize ifpgui_ifp_finalize = ifp_finalize; // ifp_find_device ifpgui_ifp_find_device = ifp_find_device; // ifp_release_device ifpgui_ifp_release_device = ifp_release_device; // ifp_format ifpgui_ifp_format = ifp_format; // ifp_update_firmware ifpgui_ifp_update_firmware = ifp_update_firmware; // ifp_device_info ifpgui_ifp_device_info = ifp_device_info; // ifp_battery ifpgui_ifp_battery = ifp_battery; // ifp_capacity ifpgui_ifp_capacity = ifp_capacity; // ifp_freespace ifpgui_ifp_freespace = ifp_freespace; // ifp_model ifpgui_ifp_model = ifp_model; // ifp_delta ifpgui_ifp_delta = ifp_delta; // ifp_firmware_version ifpgui_ifp_firmware_version = ifp_firmware_version; // ifp_error_message ifpgui_ifp_error_message = ifp_error_message; // ifp_rename ifpgui_ifp_rename = ifp_rename; // ifp_delete ifpgui_ifp_delete = ifp_delete; // ifp_mkdir ifpgui_ifp_mkdir = ifp_mkdir; // ifp_rmdir ifpgui_ifp_rmdir = ifp_rmdir; // ifp_list_dirs ifpgui_ifp_list_dirs = ifp_list_dirs; // ifp_read_file_progress ifpgui_ifp_read_file_progress = ifp_read_file_progress; // ifp_write_file_progress ifpgui_ifp_write_file_progress = ifp_write_file_progress; // ifp_download_file ifpbase_ifp_download_file = ifp_download_file; // ifp_upload_file ifpgui_ifp_upload_file = ifp_upload_file; // ifp_delete_dir_recursive ifpgui_ifp_delete_dir_recursive = ifp_delete_dir_recursive; // ifp_download_dir ifpgui_ifp_download_dir = ifp_download_dir; // ifp_upload_dir ifpgui_ifp_upload_dir = ifp_upload_dir; // ifp_is_file ifpgui_ifp_is_file = ifp_is_file; // ifp_is_dir ifpgui_ifp_is_dir = ifp_is_dir; // ifp_exists ifpgui_ifp_exists = ifp_exists; // ifp_get_tuner_presets ifpgui_ifp_get_tuner_presets = ifp_get_tuner_presets; // ifp_set_tuner_presets ifpgui_ifp_set_tuner_presets = ifp_set_tuner_presets; // ifp_get_station ifpgui_ifp_get_station = ifp_get_station; // ifp_set_station ifpgui_ifp_set_station = ifp_set_station; } //--------------------------------------------------------------------------- // initialize ifp device //--------------------------------------------------------------------------- ifp_dh = (libusb_device_handle*)ifpgui_ifp_find_device(); if (ifp_dh == NULL) { return(IFP_ERR_DEV_FUBAR); } libusb_dev = libusb_get_device(ifp_dh); if (libusb_dev == NULL) { release_ifp_device(); return(IFP_ERR_DEV_FUBAR); } struct libusb_config_descriptor *config; const struct libusb_interface_descriptor *idesc; libusb_get_config_descriptor(libusb_dev, 0, &config); /* sanity checks that we're looking at an acceptable device */ if (/*dev->descriptor.bNumConfigurations != 1 || TODO: ?*/ config->bNumInterfaces != 1 || config->interface[0].num_altsetting != 1) return 1; idesc = &config->interface[0].altsetting[0]; libusb_interface = idesc->bInterfaceNumber; ret = ifpgui_ifp_init(&ifp_dev, ifp_dh); if (ret != IFP_OK) { release_ifp_device(); ret = IFP_ERR_DEV_FUBAR; return(ret); } /* "must be called" written in the libusb documentation */ if (libusb_claim_interface(ifp_dh, libusb_interface)) { fprintf(stderr, "Device is busy. (I was unable to claim its interface.)\n"); release_ifp_device(); return(IFP_ERR_DEV_FUBAR); } return(ret); } //=========================================================================== // release_ifp_device() // This function will release all the resources created with // initialize_ifp_device(). Call this function when you are finished // the iFP device. // // Returns: %IFP_OK if successful //=========================================================================== int release_ifp_device(void) { int ret; ret = IFP_OK; if ((ifp_dh != NULL) && (libusb_dev != NULL)) { ret = ifpgui_ifp_finalize(&ifp_dev); libusb_release_interface(ifp_dh, libusb_interface); } if (ifp_dh != NULL) { ifpgui_ifp_release_device(ifp_dh); } ifp_dh = NULL; libusb_dev = NULL; delete ifpLib; ifpLib = NULL; return(ret); } int ifpgui_ifp_download_file(struct ifp_device * dev, const char * remotefile, const char * localfile, ifp_progress fn, void * fn_context) { int ret, conv_ret; char ext[10], newfile[1000]; ret = ifpbase_ifp_download_file(dev, remotefile, localfile, fn, fn_context); if ((ret == IFP_OK) && FALSE)// && (convert)) { //--------------------------------------------------------------- // convert the *.rec file //--------------------------------------------------------------- ext[0] = remotefile[strlen(remotefile) - 4]; // . ext[1] = remotefile[strlen(remotefile) - 3]; // r or R ext[2] = remotefile[strlen(remotefile) - 2]; // e or E ext[3] = remotefile[strlen(remotefile) - 1]; // c or C if ((strncmp(ext,".rec",4) == 0) || (strncmp(ext,".REC",4) == 0)) { // do conversion strncpy(newfile, localfile, 999); newfile[999] = '\0'; if (strlen(newfile) != strlen(localfile)) { fprintf(stderr, "File name length greater than 1000.\r\n"); fprintf(stderr, "Cannot convert REC file to MP3.\r\n"); return(ret); } newfile[strlen(localfile) - 3] = 'w'; newfile[strlen(localfile) - 2] = 'a'; newfile[strlen(localfile) - 1] = 'v'; conv_ret = ifprecconv(localfile, newfile); if (conv_ret == 77) { newfile[strlen(localfile) - 3] = 'm'; newfile[strlen(localfile) - 2] = 'p'; newfile[strlen(localfile) - 1] = '3'; rename(localfile, newfile); } else if (!conv_ret) { // lame sample.wav sample.mp3 // lame -h sample.wav sample.mp3 // highest quality // lame -r sample.rec sample.mp3 // assume raw format ??? this might work or might not } } } return(ret); } ifpgui-1.0.0/backend/ifpinterface.h000755 001750 000144 00000020210 11312615352 015363 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef __IFPINTERFACE_H__ #define __IFPINTERFACE_H__ #include #include #include #ifdef __cplusplus extern "C" { #endif /* Return codes */ #define IFP_OK 0 extern int cancel_progress; extern QLibrary *ifpLib; extern bool usingLibrary; extern bool errorInLibrary; extern QString ifpLibraryVersion; // ifp_init typedef int (*my_ifp_init)(struct ifp_device * dev, void * dev_handle); extern my_ifp_init ifpgui_ifp_init; // ifp_finalize typedef int (*my_ifp_finalize)(struct ifp_device * dev); extern my_ifp_finalize ifpgui_ifp_finalize; // ifp_find_device typedef void * (*my_ifp_find_device)(void); extern my_ifp_find_device ifpgui_ifp_find_device; // ifp_release_device; typedef int (*my_ifp_release_device)(void *); extern my_ifp_release_device ifpgui_ifp_release_device; // ifp_format typedef int (*my_ifp_format)(struct ifp_device * dev); extern my_ifp_format ifpgui_ifp_format; // ifp_update_firmware typedef int (*my_ifp_update_firmware)(struct ifp_device * dev, const char * localfile, ifp_progress fn, void * context); extern my_ifp_update_firmware ifpgui_ifp_update_firmware; // ifp_device_info typedef int (*my_ifp_device_info)(struct ifp_device * dev, char * b, int n); extern my_ifp_device_info ifpgui_ifp_device_info; // ifp_battery typedef int (*my_ifp_battery)(struct ifp_device * dev); extern my_ifp_battery ifpgui_ifp_battery; // ifp_capacity typedef int (*my_ifp_capacity)(struct ifp_device * dev); extern my_ifp_capacity ifpgui_ifp_capacity; // ifp_freespace typedef int (*my_ifp_freespace)(struct ifp_device * dev); extern my_ifp_freespace ifpgui_ifp_freespace; // ifp_model typedef int (*my_ifp_model)(struct ifp_device * dev, char * b, int n); extern my_ifp_model ifpgui_ifp_model; // ifp_delta typedef int (*my_ifp_delta)(struct ifp_device * dev, int * values); extern my_ifp_delta ifpgui_ifp_delta; // ifp_firmware_version typedef int (*my_ifp_firmware_version)(struct ifp_device * dev); extern my_ifp_firmware_version ifpgui_ifp_firmware_version; // ifp_error_message typedef const char * (*my_ifp_error_message)(int n); extern my_ifp_error_message ifpgui_ifp_error_message; // ifp_rename typedef int (*my_ifp_rename)(struct ifp_device * dev, const char * old_path, const char * new_path); extern my_ifp_rename ifpgui_ifp_rename; // ifp_delete typedef int (*my_ifp_delete)(struct ifp_device * dev, const char * f); extern my_ifp_delete ifpgui_ifp_delete; // ifp_mkdir typedef int (*my_ifp_mkdir)(struct ifp_device * dev, const char * f); extern my_ifp_mkdir ifpgui_ifp_mkdir; // ifp_rmdir typedef int (*my_ifp_rmdir)(struct ifp_device * dev, const char * f); extern my_ifp_rmdir ifpgui_ifp_rmdir; // ifp_list_dirs typedef int (*my_ifp_list_dirs)(struct ifp_device * dev, const char * dirname, int(*callbk)(void *, int, const char *, int), void * context); extern my_ifp_list_dirs ifpgui_ifp_list_dirs; // ifp_read_file_progress typedef int (*my_ifp_read_file_progress)(struct ifp_device * dev, FILE * dst, const char * f, int(*progress)(void *, int), void * context); extern my_ifp_read_file_progress ifpgui_ifp_read_file_progress; // ifp_write_file_progress typedef int (*my_ifp_write_file_progress)(struct ifp_device * dev, FILE * src, int filesize, const char * f, int(*progress)(void *, int), void * context); extern my_ifp_write_file_progress ifpgui_ifp_write_file_progress; // ifp_download_file typedef int (*my_ifp_download_file)(struct ifp_device * dev, const char * remotefile, const char * localfile, ifp_progress fn, void * fn_context); extern my_ifp_download_file ifpbase_ifp_download_file; extern int ifpgui_ifp_download_file(struct ifp_device * dev, const char * remotefile, const char * localfile, ifp_progress fn, void * fn_context); // ifp_upload_file typedef int (*my_ifp_upload_file)(struct ifp_device * dev, const char * localfile, const char * remotefile, ifp_progress fn, void * fn_context); extern my_ifp_upload_file ifpgui_ifp_upload_file; // ifp_delete_dir_recursive typedef int (*my_ifp_delete_dir_recursive)(struct ifp_device * dev, const char * f); extern my_ifp_delete_dir_recursive ifpgui_ifp_delete_dir_recursive; // ifp_download_dir typedef int (*my_ifp_download_dir)(struct ifp_device * dev, const char * remotedir, const char * localdir, ifp_progress fn, void * fn_context); extern my_ifp_download_dir ifpgui_ifp_download_dir; // ifp_upload_dir typedef int (*my_ifp_upload_dir)(struct ifp_device * dev, const char * localdir, const char * remotedir, ifp_progress fn, void * fn_context); extern my_ifp_upload_dir ifpgui_ifp_upload_dir; // ifp_is_file typedef int (*my_ifp_is_file)(struct ifp_device * dev, const char * f); extern my_ifp_is_file ifpgui_ifp_is_file; // ifp_is_dir typedef int (*my_ifp_is_dir)(struct ifp_device * dev, const char * f); extern my_ifp_is_dir ifpgui_ifp_is_dir; // ifp_exists typedef int (*my_ifp_exists)(struct ifp_device * dev, const char * f); extern my_ifp_exists ifpgui_ifp_exists; // ifp_get_tuner_presets typedef int (*my_ifp_get_tuner_presets)(struct ifp_device * dev, void * data, int n); extern my_ifp_get_tuner_presets ifpgui_ifp_get_tuner_presets; // ifp_set_tuner_presets typedef int (*my_ifp_set_tuner_presets)(struct ifp_device * dev, void * data, int n); extern my_ifp_set_tuner_presets ifpgui_ifp_set_tuner_presets; // ifp_get_station typedef int (*my_ifp_get_station)(int n, void * b, char * callsign, int * freq); extern my_ifp_get_station ifpgui_ifp_get_station; // ifp_set_station typedef int (*my_ifp_set_station)(int n, void * data, const char * callsign, int freq); extern my_ifp_set_station ifpgui_ifp_set_station; extern libusb_device_handle *ifp_dh; extern struct ifp_device ifp_dev; extern struct libusb_device *libusb_dev; extern int initialize_ifp_device(void); extern int release_ifp_device(void); #ifdef __cplusplus } #endif #endif //__IFPINTERFACE_H__ ifpgui-1.0.0/backend/iointerface.cpp000755 001750 000144 00000100512 11403100311 015534 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include #include #include "ifpguiview.h" #include "createdirdlg.h" #include "backend/iointerface.h" #include "backend/ifpinterface.h" #include "ifp_gui.h" int IOInterface::internal_norm_ProtocolStr(QString& fileName, QString protoStr) { int pat_pos; QString filestr; pat_pos = fileName.indexOf("://"); if (pat_pos >= 0) { filestr = fileName.left(pat_pos + 3); if (filestr != protoStr) { return(-1); } fileName = fileName.remove(0, pat_pos + 3); } return(IO_INTF_OK); } QString IOInterface::internal_get_ProtocolStr(QString& fileName) { int pat_pos; QString filestr; filestr = ""; pat_pos = fileName.indexOf("://"); if (pat_pos >= 0) { filestr = fileName.left(pat_pos + 3); } return(filestr); } int IOInterface::internal_remove_ProtocolStr(QString& fileName) { int pat_pos, ret; ret = IO_INTF_OK; pat_pos = fileName.indexOf("://"); if (pat_pos >= 0) { fileName = fileName.remove(0, pat_pos + 3); } return(ret); } /** * Upload the files in local_file_list from the local harddrive to the iRiver directory remoteDest * @param local_file_list the list of filenames on the local harddrive. * @param remoteDest the iRiver directory; the place to put the uploaded file * @return IFP_INTF_OK on success (0). Otherwise return an error code. */ int IOInterface::internal_exec_TransferToiFP(QString& remoteDest, QList *local_file_list) { int ret, tret, mbret, freespace; int filecount, totalsize, tmpcnt, dir_size; QFileInfo finfo; ifp_progress_info pginfo; QString Message, fileName; QList::iterator fi_iter; TiFPgetDirSize t_dirSize; TiFPreadFileTree t_ifpTree; TiFPuploadDirectory t_uploadDir; TiFPuploadFile t_uploadFile; ret = IO_INTF_OK; if (ifp_dh == NULL) { lastErrString = QObject::tr("iRiver device not connected."); return(-1); } if (local_file_list == NULL) { return(IO_INTF_OK); } if (local_file_list->isEmpty()) { return(IO_INTF_OK); } // remove the protocol info ret = internal_norm_ProtocolStr(remoteDest, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote destination protocol not supported \"%1\"").arg(internal_get_ProtocolStr(remoteDest)); return(-1); } filecount = 0; totalsize = 0; // get the size of the files/directories and the number of files for (fi_iter = local_file_list->begin(); fi_iter != local_file_list->end(); ++fi_iter) { // remove the protocol info fileName = fi_iter->FileName(); ret = internal_norm_ProtocolStr(fileName, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(fileName)); return(-1); } // get the file info if (QFileInfo(fileName).isFile()) { finfo.setFile(fileName); fi_iter->setValues(fileName, IO_INTF_FILE, finfo.size()); totalsize += finfo.size(); filecount++; } else if (QFileInfo(fileName).isDir()) { tmpcnt = 0; dir_size = local_get_dir_size(fileName, &tmpcnt); fi_iter->setValues(fileName, IO_INTF_DIR, dir_size); totalsize += dir_size; // this only counts as one file for case where //this is the only thing being uploaded filecount++;// += tmpcnt; } else { fi_iter->setValues(fileName, -1, 0); } } freespace = ifpgui_ifp_freespace(&ifp_dev); if (freespace < totalsize) { lastErrString = QObject::tr("There is not enough free space to upload the requested files."); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), lastErrString); return -ENOMEM; } // do the transfer Message = QObject::tr("Uploading Files to iRiver device %1").arg(remoteDest); pginfo.total_to_transfer = totalsize; pginfo.total_transfered = 0; if (filecount > 1) { pginfo.is_batch = true; Message = QObject::tr("Upload files to iRiver device %1 ?").arg(remoteDest); mbret = showYesNoAllMsgBox(QObject::tr("Uploading files to iRiver"), Message); } else { pginfo.is_batch = false; Message = QObject::tr("Upload file to iRiver device %1 ?").arg(remoteDest); mbret = showYesNoMsgBox(QObject::tr("Uploading files to iRiver"), Message); } if (mbret == QMessageBox::No) return(IO_INTF_USER_CANCEL); ret = IO_INTF_OK; for (fi_iter = local_file_list->begin(); fi_iter != local_file_list->end(); ++fi_iter) { processingFiles = TRUE; fi_iter->setProcessed(FALSE); fileName = fi_iter->FileName(); if ((mbret != QMessageBox::YesAll) && ((mbret != QMessageBox::Yes) || (filecount != 1))) { Message = QObject::tr("Upload %1 to iRiver device %2 ?").arg(fileName).arg(remoteDest); mbret = showYesNoAllMsgBox(QObject::tr("Uploading files to iRiver"), Message); } lastErrString = ""; if (fi_iter->FileType() == IO_INTF_DIR) { if ((mbret != QMessageBox::Yes) || (mbret != QMessageBox::YesAll)) { ret = t_uploadDir.iFPuploadDirectory(fileName, remoteDest, &pginfo); fi_iter->setProcessed(TRUE); tmpcnt = 0; pginfo.total_transfered += t_dirSize.iFPgetDirSize(fileName, &tmpcnt); } } else { if ((mbret != QMessageBox::Yes) || (mbret != QMessageBox::YesAll)) { ret = t_uploadFile.iFPuploadFile(fileName, remoteDest, &pginfo); fi_iter->setProcessed(TRUE); pginfo.total_transfered += fi_iter->FileSize(); } } if ((ret != IO_INTF_OK) && (ret != IO_INTF_USER_CANCEL)) { MainIfpGuiWindow->hideTransferProgress(); lastErrString = QString(ifpgui_ifp_error_message(ret)); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), lastErrString); break; } if (ret == IO_INTF_USER_CANCEL) { break; } MainIfpGuiWindow->updateFileAndStatus(); } MainIfpGuiWindow->hideTransferProgress(); tret = t_ifpTree.iFPreadFileTree(); if (tret != IO_INTF_OK) { Message = QObject::tr("Could not get the file list. Check your battery. Try replugging the USB cable."); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), Message); } processingFiles = FALSE; return(ret); } /** * Download the files in remote_file_list from the iFP device to the local directory localDest * @param remote_file_list the list of filenames on the iFP device. * @param localDest the local directory; the place to save the downloaded file * @return IFP_INTF_OK on success (0). Otherwise return an error code. */ int IOInterface::internal_exec_TransferFromiFP(QString& localDest, QList *remote_file_list) { int ret, mbret; FileInfos fi_info; int filecount, totalsize, tmpcnt; ifp_progress_info pginfo; QString Message, fileName, filestr; QList::iterator fi_iter; TiFPgetInfo t_info; TiFPgetDirSize t_dirSize; TiFPdownloadDirectory t_downloadDir; TiFPdownloadFile t_downloadFile; ret = IO_INTF_OK; if (remote_file_list == NULL) { return(IO_INTF_OK); } if (remote_file_list->isEmpty()) { return(IO_INTF_OK); } // remove the protocol info ret = internal_norm_ProtocolStr(localDest, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local destination protocol not supported \"%1\"").arg(internal_get_ProtocolStr(localDest)); return(-1); } filecount = 0; totalsize = 0; // get the size of the files/directories and the number of files for (fi_iter = remote_file_list->begin(); fi_iter != remote_file_list->end(); ++fi_iter) { // remove the protocol info fileName = fi_iter->FileName(); ret = internal_norm_ProtocolStr(fileName, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(fileName)); return(-1); } // get the file info if (t_info.iFPgetInfo(fileName, fi_info) == IO_INTF_OK) { // copy data from fi_info into fi_iter fi_iter->setValues(fileName, fi_info.FileType(), fi_info.FileSize()); if (fi_iter->FileType() == IO_INTF_FILE) { filecount++; totalsize += fi_iter->FileSize(); } else { tmpcnt = 0; totalsize += t_dirSize.iFPgetDirSize(fi_iter->FileName(), &tmpcnt); // this only counts as one file for case where //this is the only thing being uploaded filecount++;// += tmpcnt; } } else { // copy data from fi_info into fi_iter fi_iter->setValues(fileName, -1, 0); } } // do the transfer Message = QObject::tr("Downloading Files from ifp device to %1").arg(localDest); pginfo.total_to_transfer = totalsize; pginfo.total_transfered = 0; if (filecount > 1) { pginfo.is_batch = true; Message = QObject::tr("Download files from iRiver to local directory %1 ?").arg(localDest); mbret = showYesNoAllMsgBox(QObject::tr("Downloading files from iRiver"), Message); } else { pginfo.is_batch = false; Message = QObject::tr("Download file from iRiver to local directory %1 ?").arg(localDest); mbret = showYesNoMsgBox(QObject::tr("Downloading files from iRiver"), Message); } if (mbret == QMessageBox::No) return(IO_INTF_USER_CANCEL); ret = IO_INTF_OK; for (fi_iter = remote_file_list->begin(); fi_iter != remote_file_list->end(); ++fi_iter) { processingFiles = TRUE; fi_iter->setProcessed(FALSE); if ((mbret != QMessageBox::YesAll) && ((mbret != QMessageBox::Yes) || (filecount != 1))) { Message = QObject::tr("Download %1 from iRiver device to %2 ?").arg(fi_iter->FileName()).arg(localDest); mbret = showYesNoAllMsgBox(QObject::tr("Downloading files from iRiver"), Message); } lastErrString = ""; if (fi_iter->FileType() == IO_INTF_DIR) { if ((mbret != QMessageBox::Yes) || (mbret != QMessageBox::YesAll)) { fileName = fi_iter->FileName(); ret = t_downloadDir.iFPdownloadDirectory(fileName, localDest, &pginfo); fi_iter->setProcessed(TRUE); tmpcnt = 0; pginfo.total_transfered += t_dirSize.iFPgetDirSize(fi_iter->FileName(), &tmpcnt); } } else { if ((mbret != QMessageBox::Yes) || (mbret != QMessageBox::YesAll)) { fileName = fi_iter->FileName(); ret = t_downloadFile.iFPdownloadFile(fileName, localDest, &pginfo); fi_iter->setProcessed(TRUE); pginfo.total_transfered += fi_iter->FileSize(); } } if ((ret != IO_INTF_OK) && (ret != IO_INTF_USER_CANCEL)) { lastErrString = QString(ifpgui_ifp_error_message(ret)); showInfoMsgBox(QObject::tr("Download File Status"), lastErrString); break; } if (ret == IO_INTF_USER_CANCEL) { break; } } MainIfpGuiWindow->hideTransferProgress(); processingFiles = FALSE; return(ret); } /** * FileInterface * Functions to implement the local file io routines. */ /** * Upload the files from the local drive to the iFP device * @param file_info_list the list of filenames on the local hard drive. * @param destination the iFP destination directory. * @return IFP_INTF_OK on success (0). Otherwise return an error code. */ int FileInterface::exec_TransferUpload(QString& destination, QList *file_info_list) { return(internal_exec_TransferToiFP(destination, file_info_list)); } /** * Download the files from iFP to local drive * @param file_info_list the list of filenames on the iFP device. * @param destination the local destination directory. * @return IFP_INTF_OK on success (0). Otherwise return an error code. */ int FileInterface::exec_TransferDownload(QString& destination, QList *file_info_list) { return(internal_exec_TransferFromiFP(destination, file_info_list)); } int FileInterface::exec_Mkdir(QString& baseDir, QString& newDir) { int ret; QDir dirObj; ret = internal_norm_ProtocolStr(baseDir, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(baseDir)); return(-1); } CreateDirWindow *mkdirdlg; lastErrString = ""; mkdirdlg = new CreateDirWindow(QObject::tr("Create a local directory")); mkdirdlg->setBaseDir(baseDir); ret = mkdirdlg->exec(); newDir = mkdirdlg->getNewDirName(); delete mkdirdlg; if (ret == QDialog::Accepted) { ret = dirObj.mkdir(newDir); if (ret != true) { lastErrString = QObject::tr("Could not make directory [%1]").arg(newDir); return(-1); } return(IO_INTF_OK); } return(IO_INTF_USER_CANCEL); } int FileInterface::exec_Rename(const QString& oldName, const QString& newName) { int ret; QString tmp_oldName, tmp_newName; tmp_oldName = oldName; tmp_newName = newName; ret = internal_norm_ProtocolStr(tmp_oldName, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(tmp_oldName)); return(-1); } ret = internal_norm_ProtocolStr(tmp_newName, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(tmp_newName)); return(-1); } QFile file(oldName); if (!file.exists()) { lastErrString = QObject::tr("File does not exist: %1.").arg(oldName); return(-ENOENT); } QDir dir; ret = dir.rename(oldName, newName); if (ret != TRUE) { lastErrString = QObject::tr("Could not rename %1 to %2").arg(oldName).arg(newName); return(-1); } return(IO_INTF_OK); } int FileInterface::exec_Delete(QList *file_info_list) { int mbret, ret; QString Message, filename; QList::iterator fi_iter; if (file_info_list == NULL) { return(IO_INTF_OK); } if (file_info_list->isEmpty()) { return(IO_INTF_OK); } Message = QObject::tr("Delete selected files?"); mbret = showYesNoAllMsgBox(QObject::tr("Delete selected local files and directories?"), Message); if (mbret == QMessageBox::No) return(IO_INTF_USER_CANCEL); for (fi_iter = file_info_list->begin(); fi_iter != file_info_list->end(); ++fi_iter) { lastErrString = ""; fi_iter->setProcessed(FALSE); filename = fi_iter->FileName(); ret = internal_norm_ProtocolStr(filename, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(filename)); return(-1); } if (fi_iter->FileType() == IO_INTF_DIR) { // Delete Directory QDir dir(filename); if (dir.count() > 2) { lastErrString = QObject::tr("Directory not empty %1").arg(filename); } else { if (mbret != QMessageBox::YesAll) { Message = QObject::tr("Delete local directory %1?").arg(filename); mbret = showYesNoAllMsgBox(QObject::tr("Delete local directory"), Message); } if ((mbret == QMessageBox::Yes) || (mbret == QMessageBox::YesAll)) { if (!dir.rmdir(filename)) { lastErrString = QObject::tr("Could not delete directory %1").arg(filename); } else { fi_iter->setProcessed(TRUE); } } else if (mbret != QMessageBox::NoAll) { break; } } } else // IO_INTF_FILE, IO_INTF_SYMLINK, IO_INTF_SPECIAL { // Delete File if (mbret != QMessageBox::YesAll) { Message = QObject::tr("Delete local file %1?").arg(filename); mbret = showYesNoAllMsgBox(QObject::tr("Delete local file"), Message); } if ((mbret == QMessageBox::Yes) || (mbret == QMessageBox::YesAll)) { QFile file(filename); if (!file.remove()) { lastErrString = QObject::tr("Could not delete file %1").arg(filename); //lastErrString = file.errorString(); } else { fi_iter->setProcessed(TRUE); } } else if (mbret != QMessageBox::NoAll) { break; } } if (lastErrString != "") { // dispaly error showInfoMsgBox(QObject::tr("Delete Status"), lastErrString); } } return(IO_INTF_OK); } int FileInterface::exec_ShowProperties(const QString& fileName) { if (fileName == "") { // satisfy compilier } return(IO_INTF_OK); } int FileInterface::exec_GetDirectoryListing(QString dirName, QList *file_info_list) { int ret, cnt; QFileInfoList files; if (file_info_list == NULL) { return(IO_INTF_OK); } file_info_list->clear(); // remove the protocol info ret = internal_norm_ProtocolStr(dirName, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(dirName)); return(-1); } QDir thisDir(dirName); if (!thisDir.isReadable()) { return(IO_INTF_OK); } processingFiles = TRUE; files = thisDir.entryInfoList(); for(cnt = 0; cnt < files.size(); cnt++) { QFileInfo fi = files.at(cnt); if (fi.fileName() == "." || fi.fileName() == "..") continue; // nothing // fill in info // check for directories before symlinks, so we catch symlinks to directories if (fi.isDir()) { if (fi.isReadable()) { file_info_list->append(FileInfos(fi.fileName(), IO_INTF_DIR, 0, NULL)); } else { file_info_list->append(FileInfos(fi.fileName(), IO_INTF_DIR_LOCKED, 0, NULL)); } } else if (fi.isSymLink()) { file_info_list->append(FileInfos(fi.fileName(), IO_INTF_SYMLINK, 0, NULL)); } else { if (fi.isFile()) { file_info_list->append(FileInfos(fi.fileName(), IO_INTF_FILE, fi.size(), NULL)); } else { file_info_list->append(FileInfos(fi.fileName(), IO_INTF_SPECIAL, fi.size(), NULL)); } } } processingFiles = FALSE; return(IO_INTF_OK); } bool FileInterface::get_isReadable(QString& dirName) { int ret; // remove the protocol info ret = internal_norm_ProtocolStr(dirName, "file://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Local file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(dirName)); return(false); } return (QDir(dirName).isReadable()); } QString FileInterface::get_LastError() { return(lastErrString); } /** * iFPInterface * Functions to implement the file io routines to interact with the iFP device. */ int iFPInterface::ifp_connect(bool showError) { int ret; QString message; TiFPreadFileTree t_ifpTree; ret = -1; if (ifp_dh == NULL) { ret = initialize_ifp_device(); if (errorInLibrary) { message = QObject::tr("The ifplib Library is missing one or more functions.\n" "Please get the latest version from http://ifp-driver.sourcefourge.net.\n\n" "USING THE INTERNAL STATIC VERSIONS OF THE FUNCTIONS."); showInfoMsgBox(QObject::tr("Error"), message); } } else { ret = IO_INTF_OK; } if (ret == IO_INTF_OK) { processingFiles = TRUE; if ((ret = t_ifpTree.iFPreadFileTree()) != IO_INTF_OK) { showInfoMsgBox(QObject::tr("Error"), iFPNotConnectedMsg); fprintf(stderr, "Could not communicate with iRiver device.\n"); fprintf(stderr, "Try unplugging the USB link, powering off the device, and plugging it back in.\n"); processingFiles = FALSE; return(ret); } processingFiles = FALSE; } else { if (showError) { showInfoMsgBox(QObject::tr("Error"), iFPNotConnectedMsg); fprintf(stderr, "ifp Device NOT found\n"); } } return(ret); } /** * Upload the files from iFP to local drive * @param file_info_list the list of filenames on the iFP device. * @param destination the local destination directory. * @return IFP_INTF_OK on success (0). Otherwise return an error code. */ int iFPInterface::exec_TransferUpload(QString& destination, QList *file_info_list) { return(internal_exec_TransferFromiFP(destination, file_info_list)); } /** * Download the files from the local drive to the iFP device * @param file_info_list the list of filenames on the local hard drive. * @param destination the iFP destination directory. * @return IFP_INTF_OK on success (0). Otherwise return an error code. */ int iFPInterface::exec_TransferDownload(QString& destination, QList *file_info_list) { return(internal_exec_TransferToiFP(destination, file_info_list)); } int iFPInterface::exec_Mkdir(QString& baseDir, QString& newDir) { int ret, tret; QString Message; QDir dirObj; QByteArray qcfilename; TiFPreadFileTree t_ifpTree; if (ifp_dh == NULL) { lastErrString = QObject::tr("iRiver device not connected."); return(-1); } ret = internal_norm_ProtocolStr(baseDir, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(baseDir)); return(-1); } CreateDirWindow *mkdirdlg; lastErrString = ""; mkdirdlg = new CreateDirWindow(QObject::tr("Create a directory on iRiver device.")); mkdirdlg->setBaseDir(baseDir); ret = mkdirdlg->exec(); newDir = mkdirdlg->getNewDirName(); delete mkdirdlg; if (ret == QDialog::Accepted) { processingFiles = TRUE; slash2backslash(newDir); qcfilename = newDir.toUtf8(); ret = ifpgui_ifp_mkdir(&ifp_dev, qcfilename); if (ret != IO_INTF_OK) { lastErrString = QString("Could not make directory [%1] on iRiver device.").arg(newDir); ret = -1; } else { processingFiles = TRUE; tret = t_ifpTree.iFPreadFileTree(); if (tret != IO_INTF_OK) { Message = QObject::tr("Could not get the file list. Check your battery. Try replugging the USB cable."); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), Message); } ret = IO_INTF_OK; } processingFiles = FALSE; } else { ret = IO_INTF_USER_CANCEL; } return(ret); } int iFPInterface::exec_Rename(const QString& oldName, const QString& newName) { int ret, tret; QString Message; QByteArray qcfilename_old, qcfilename_new; QString tmp_oldName, tmp_newName; TiFPreadFileTree t_ifpTree; if (ifp_dh == NULL) { lastErrString = QObject::tr("iRiver device not connected."); return(-1); } tmp_oldName = oldName; tmp_newName = newName; ret = internal_norm_ProtocolStr(tmp_oldName, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(tmp_oldName)); return(-1); } ret = internal_norm_ProtocolStr(tmp_newName, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(tmp_newName)); return(-1); } processingFiles = TRUE; slash2backslash(tmp_oldName); slash2backslash(tmp_newName); qcfilename_old = tmp_oldName.toUtf8(); qcfilename_new = tmp_newName.toUtf8(); ret = ifpgui_ifp_rename(&ifp_dev, qcfilename_old, qcfilename_new); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Could not rename %1 to %2 on iRiver device.").arg(oldName).arg(newName); ret = -1; } else { processingFiles = TRUE; tret = t_ifpTree.iFPreadFileTree(); if (tret != IO_INTF_OK) { Message = QObject::tr("Could not get the file list. Check your battery. Try replugging the USB cable."); showInfoMsgBox(QObject::tr("iRiver Upload File Status"), Message); } ret = IO_INTF_OK; } processingFiles = FALSE; return(ret); } int iFPInterface::exec_Delete(QList *file_info_list) { int mbret, ret; QByteArray qcfilename; QString Message, filename; QList::iterator fi_iter; TiFPreadFileTree t_ifpTree; if (ifp_dh == NULL) { lastErrString = QObject::tr("iRiver device not connected."); return(-1); } if (file_info_list == NULL) { return(IO_INTF_OK); } if (file_info_list->isEmpty()) { return(IO_INTF_OK); } Message = QObject::tr("Delete selected files on iRiver device?"); mbret = showYesNoAllMsgBox(QObject::tr("Delete selected iRiver files and directories?"), Message); if (mbret == QMessageBox::No) return(IO_INTF_USER_CANCEL); processingFiles = TRUE; for (fi_iter = file_info_list->begin(); fi_iter != file_info_list->end(); ++fi_iter) { lastErrString = ""; fi_iter->setProcessed(FALSE); // remove the protocol info filename = fi_iter->FileName(); ret = internal_norm_ProtocolStr(filename, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(filename)); processingFiles = FALSE; return(-1); } slash2backslash(filename); // get the file info if (fi_iter->FileType() == IO_INTF_DIR) { // Delete Directory if (mbret != QMessageBox::YesAll) { Message = QObject::tr("Delete iRiver directory %1?").arg(filename); mbret = showYesNoAllMsgBox(QObject::tr("Delete iRiver directory"), Message); } if ((mbret == QMessageBox::Yes) || (mbret == QMessageBox::YesAll)) { qcfilename = filename.toUtf8(); ret = ifpgui_ifp_delete_dir_recursive(&ifp_dev, qcfilename); if (ret != IO_INTF_OK) { lastErrString = QString(ifpgui_ifp_error_message(ret)); } else { fi_iter->setProcessed(TRUE); } } else if (mbret != QMessageBox::NoAll) { break; } } else // IO_INTF_FILE, IO_INTF_SYMLINK, IO_INTF_SPECIAL { // Delete File if (mbret != QMessageBox::YesAll) { Message = QObject::tr("Delete iRiver file? %1").arg(filename); mbret = showYesNoAllMsgBox(QObject::tr("Delete iRiver file"), Message); } if ((mbret == QMessageBox::Yes) || (mbret == QMessageBox::YesAll)) { qcfilename = filename.toUtf8(); ret = ifpgui_ifp_delete(&ifp_dev, qcfilename); if (ret != IO_INTF_OK) { lastErrString = QString(ifpgui_ifp_error_message(ret)); } else { fi_iter->setProcessed(TRUE); } } else if (mbret != QMessageBox::NoAll) { break; } } if (lastErrString != "") { // dispaly error showInfoMsgBox(QObject::tr("iRiver Delete Status"), lastErrString); } } t_ifpTree.iFPreadFileTree(); processingFiles = FALSE; return(IO_INTF_OK); } int iFPInterface::exec_ShowProperties(const QString& fileName) { if (ifp_dh == NULL) { lastErrString = QObject::tr("iRiver device not connected."); return(-1); } if (fileName == "") { // satisfy compilier } return(IO_INTF_OK); } int iFPInterface::exec_GetDirectoryListing(QString dirName, QList *file_info_list) { int ret; TiFPgetFileList t_fileList; if (ifp_dh == NULL) { ret = ifp_connect(TRUE); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("iRiver device not connected."); return(ret); } } if (file_info_list == NULL) { return(IO_INTF_OK); } file_info_list->clear(); // remove the protocol info ret = internal_norm_ProtocolStr(dirName, "ifp://"); if (ret != IO_INTF_OK) { lastErrString = QObject::tr("Remote file protocol not supported \"%1\"").arg(internal_get_ProtocolStr(dirName)); return(-1); } slash2backslash(dirName); processingFiles = TRUE; ret = t_fileList.iFPgetFileList(dirName, file_info_list); processingFiles = FALSE; return(ret); } bool iFPInterface::get_isReadable(QString& dirName) { if (dirName == "") { // satisfy compilier } return(true); } QString iFPInterface::get_LastError() { return(lastErrString); } ifpgui-1.0.0/ifprecconv/000755 001750 000144 00000000000 11331474574 013336 5ustar00000000 000000 ifpgui-1.0.0/ifprecconv/adpcm.c000755 001750 000144 00000020444 11403071520 014555 0ustar00000000 000000 /*********************************************************** Copyright 1992 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* ** Intel/DVI ADPCM coder/decoder. ** ** The algorithm for this coder was taken from the IMA Compatability Project ** proceedings, Vol 2, Number 2; May 1992. ** ** Version 1.2, 18-Dec-92. ** ** Change log: ** - Fixed a stupid bug, where the delta was computed as ** stepsize*code/4 in stead of stepsize*(code+0.5)/4. ** - There was an off-by-one error causing it to pick ** an incorrect delta once in a blue moon. ** - The NODIVMUL define has been removed. Computations are now always done ** using shifts, adds and subtracts. It turned out that, because the standard ** is defined using shift/add/subtract, you needed bits of fixup code ** (because the div/mul simulation using shift/add/sub made some rounding ** errors that real div/mul don't make) and all together the resultant code ** ran slower than just using the shifts all the time. ** - Changed some of the variable names to be more meaningful. */ #include "adpcm.h" #include /*DBG*/ #ifndef __STDC__ #define signed #endif /* Intel ADPCM step variation table */ static int indexTable[16] = { -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8, }; static int stepsizeTable[89] = { 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 }; void adpcm_coder(indata, outdata, len, state) short indata[]; char outdata[]; int len; struct adpcm_state *state; { short *inp; /* Input buffer pointer */ signed char *outp; /* output buffer pointer */ int val; /* Current input sample value */ int sign; /* Current adpcm sign bit */ int delta; /* Current adpcm output value */ int diff; /* Difference between val and valprev */ int step; /* Stepsize */ int valpred; /* Predicted output value */ int vpdiff; /* Current change to valpred */ int index; /* Current step change index */ int outputbuffer; /* place to keep previous 4-bit value */ int bufferstep; /* toggle between outputbuffer/output */ outp = (signed char *)outdata; inp = indata; valpred = state->valprev; index = state->index; step = stepsizeTable[index]; bufferstep = 1; for ( ; len > 0 ; len-- ) { val = *inp++; /* Step 1 - compute difference with previous value */ diff = val - valpred; sign = (diff < 0) ? 8 : 0; if ( sign ) diff = (-diff); /* Step 2 - Divide and clamp */ /* Note: ** This code *approximately* computes: ** delta = diff*4/step; ** vpdiff = (delta+0.5)*step/4; ** but in shift step bits are dropped. The net result of this is ** that even if you have fast mul/div hardware you cannot put it to ** good use since the fixup would be too expensive. */ delta = 0; vpdiff = (step >> 3); if ( diff >= step ) { delta = 4; diff -= step; vpdiff += step; } step >>= 1; if ( diff >= step ) { delta |= 2; diff -= step; vpdiff += step; } step >>= 1; if ( diff >= step ) { delta |= 1; vpdiff += step; } /* Step 3 - Update previous value */ if ( sign ) valpred -= vpdiff; else valpred += vpdiff; /* Step 4 - Clamp previous value to 16 bits */ if ( valpred > 32767 ) valpred = 32767; else if ( valpred < -32768 ) valpred = -32768; /* Step 5 - Assemble value, update index and step values */ delta |= sign; index += indexTable[delta]; if ( index < 0 ) index = 0; if ( index > 88 ) index = 88; step = stepsizeTable[index]; /* Step 6 - Output value */ if ( bufferstep ) { outputbuffer = (delta << 4) & 0xf0; } else { *outp++ = (delta & 0x0f) | outputbuffer; } bufferstep = !bufferstep; } /* Output last step, if needed */ if ( !bufferstep ) *outp++ = outputbuffer; state->valprev = valpred; state->index = index; } void adpcm_decoder(indata, outdata, len, state) unsigned char indata[]; short outdata[]; int len; struct adpcm_state *state; { unsigned char *inp; /* Input buffer pointer */ short *outp; /* output buffer pointer */ int sign; /* Current adpcm sign bit */ int delta; /* Current adpcm output value */ int step; /* Stepsize */ int valpred; /* Predicted value */ int vpdiff; /* Current change to valpred */ int index; /* Current step change index */ int inputbuffer; /* place to keep next 4-bit value */ int bufferstep; /* toggle between inputbuffer/input */ outp = outdata; inp = (unsigned char *)indata; valpred = state->valprev; index = state->index; step = stepsizeTable[index]; bufferstep = 0; for ( ; len > 0 ; len-- ) { /* Step 1 - get the delta value */ if ( bufferstep ) { delta = inputbuffer & 0xf; } else { inputbuffer = *inp++; delta = (inputbuffer >> 4) & 0xf; } bufferstep = !bufferstep; /* Step 2 - Find new index value (for later) */ index += indexTable[delta]; if ( index < 0 ) index = 0; if ( index > 88 ) index = 88; /* Step 3 - Separate sign and magnitude */ sign = delta & 8; delta = delta & 7; /* Step 4 - Compute difference and new predicted value */ /* ** Computes 'vpdiff = (delta+0.5)*step/4', but see comment ** in adpcm_coder. */ vpdiff = step >> 3; if ( delta & 4 ) vpdiff += step; if ( delta & 2 ) vpdiff += step>>1; if ( delta & 1 ) vpdiff += step>>2; // vpdiff=((delta+delta+1)*step)>>3; // vpdiff=((delta+0.5)*step)/4; vpdiff = 0; if ( delta & 4 ) vpdiff += step; if ( delta & 2 ) vpdiff += step>>1; if ( delta & 1 ) vpdiff += step>>2; vpdiff += step>>3; // vpdiff=((delta+delta+1)*step)>>3; if ( sign ) valpred -= vpdiff; else valpred += vpdiff; /* Step 5 - clamp output value */ if ( valpred > 32767 ) valpred = 32767; else if ( valpred < -32768 ) valpred = -32768; /* Step 6 - Update step value */ step = stepsizeTable[index]; /* Step 7 - Output value */ *outp++ = valpred; } state->valprev = valpred; state->index = index; } ifpgui-1.0.0/ifprecconv/adpcm.h000755 001750 000144 00000000650 10274470126 014571 0ustar00000000 000000 /* ** adpcm.h - include file for adpcm coder. ** ** Version 1.0, 7-Jul-92. */ struct adpcm_state { short valprev; /* Previous output value */ char index; /* Index into stepsize table */ }; #ifdef __STDC__ #define ARGS(x) x #else #define ARGS(x) () #endif void adpcm_coder ARGS((short [], char [], int, struct adpcm_state *)); void adpcm_decoder ARGS((unsigned char [], short [], int, struct adpcm_state *)); ifpgui-1.0.0/ifprecconv/endian.h000755 001750 000144 00000001321 10274470126 014737 0ustar00000000 000000 /* $Id: endian.h,v 1.1.1.1 2005/08/04 19:45:27 jim-campbell Exp $ */ #ifndef RECCONV_ENDIAN_H #define RECCONV_ENDIAN_H #include #ifdef __BIG_ENDIAN__ #define le16toh(x) _bswap16((u_int16_t)x) #define le32toh(x) _bswap32((u_int32_t)x) #define htole16(x) _bswap16((u_int16_t)x) #define htole32(x) _bswap32((u_int32_t)x) #else #define le16toh(x) (x) #define le32toh(x) (x) #define htole16(x) (x) #define htole32(x) (x) #endif /* __BIG_ENDIAN__ */ #define _bswap16(x) ( ((x & 0xff00) >> 8) | \ ((x & 0x00ff) << 8) ) #define _bswap32(x) ( ((x & 0xff000000) >> 24) | \ ((x & 0x00ff0000) >> 8) | \ ((x & 0x0000ff00) << 8) | \ ((x & 0x000000ff) << 24) ) #endif /* RECCONV_ENDIAN_H */ ifpgui-1.0.0/ifprecconv/ifprecconv.c000755 001750 000144 00000012217 11403071520 015626 0ustar00000000 000000 #include #include #include #include #include "adpcm.h" #ifndef le32toh #include "endian.h" #endif #define SOX "sox -r %ld -c %d -t raw -s -w - %s" typedef struct { char chunkID[4]; long chunkSize; short wFormatTag; unsigned short wChannels; unsigned long dwSamplesPerSec; unsigned long dwAvgBytesPerSec; unsigned short wBlockAlign; unsigned short wBitsPerSample; } FormatChunk; //const struct adpcm_state state={0,0}; #define NSAMPLES 1008 FormatChunk fc; int read_header(FILE *infile) { long num; unsigned char first_two_bytes[2]; char abuf[NSAMPLES]; num = fread(abuf, 1, 12, infile); if (num < 0) { perror("input file"); return(1); } if (num < 12) return 1; if (strncmp(abuf, "RIFF", 4)) { first_two_bytes[0] = abuf[0]; first_two_bytes[1] = abuf[1]; if (first_two_bytes[0] == 0xFF) { if ((first_two_bytes[1] & 0xE0) == 0xE0) { // this matches the "synch frame of the MP3 header fprintf(stderr, "This appears to be an MP3 file\r\n"); fprintf(stderr, "This just rename to *.mp3\r\n"); return 77; // Ascii letter M for mp3 } } return 2; } if (strncmp(abuf+8, "WAVE", 4)) return 3; num = fread(&fc, 1, sizeof(FormatChunk), infile); // change endian for host architecture fc.chunkSize = le32toh(fc.chunkSize); fc.wFormatTag = le16toh(fc.wFormatTag); fc.wChannels = le16toh(fc.wChannels); fc.dwSamplesPerSec = le32toh(fc.dwSamplesPerSec); fc.dwAvgBytesPerSec = le32toh(fc.dwAvgBytesPerSec); fc.wBlockAlign = le16toh(fc.wBlockAlign); fc.wBitsPerSample = le16toh(fc.wBitsPerSample); if (num < 0) { perror("input file"); return(1); } if (num < (signed)sizeof(fc)) return 4; if (strncmp(fc.chunkID, "fmt ", 4)) return 5; if ((fc.wFormatTag) != 0x11) { fprintf(stderr, "This doesn't seem to be a rec file\r\n"); return(1); } if ((fc.wChannels>2) || (!fc.wChannels)) { fprintf(stderr, "I can only handle 1 or 2 channel[s]s\r\n"); return(1); } fread(abuf, fc.chunkSize + 8 - sizeof(fc), 1, infile); fread(abuf, 4, 1, infile); if (strncmp(abuf, "fact", 4)) return 6; fread(&num, 4, 1, infile); num = le32toh(num); fread(abuf, num, 1, infile); fread(abuf, 4, 1, infile); if (strncmp(abuf, "data", 4)) return 6; fread(abuf, 4, 1, infile); return 0; } int ifprecconv(const char *sourcefile, const char *destfile) { long num, cnt, ret; signed short header[8]; char command[1000]; FILE *PIPE, *infile; unsigned char abuf[NSAMPLES]; unsigned char labuf[NSAMPLES/2]; unsigned char rabuf[NSAMPLES/2]; short lsbuf[NSAMPLES]; short rsbuf[NSAMPLES]; short buf[NSAMPLES*2]; struct adpcm_state lstate={0,0}; struct adpcm_state rstate={0,0}; infile = fopen(sourcefile, "r"); if (!infile) { fprintf(stderr, "Error opening recfile: %s\r\n", sourcefile); return(10); } ret = read_header(infile); if ((ret) && (ret != 77)) { fprintf(stderr, "There was an error reading the header. Code %ld\r\n", ret); return(ret); } sprintf(command, SOX, fc.dwSamplesPerSec, fc.wChannels, destfile); fprintf(stderr, "I'm going to run '%s'\r\n", command); fflush(stderr); PIPE = popen(command, "w"); if (PIPE == NULL) { perror("program failed"); return(11); } while(1) { fread(header, 1, 16, infile); //read block header for (cnt = 0; cnt < 8; cnt++) { // change endian for host architecture header[cnt] = le16toh(header[cnt]); } lstate.valprev=header[2]; //somehow we need the previous value from rstate.valprev=header[6]; //the rec file to avoid inexplicable drifting lstate.index=header[0]; //somehow we need the previous value from rstate.index=header[4]; //the rec file to avoid inexplicable drifting num = fread(abuf, 1, NSAMPLES, infile); if (num < 0) { perror("input file"); return(12); } if (num == 0) break; for (cnt = 0; cnt < num; cnt++) { //swab nibbles char nib = (abuf[cnt] >> 4) & (char)0x0F; abuf[cnt] = ((abuf[cnt] << 4) & (char)0xF0) | nib; } if (fc.wChannels == 2) { for (cnt = 0; cnt < NSAMPLES / 2; cnt++) { labuf[cnt] = abuf[2 * cnt]; rabuf[cnt] = abuf[2 * cnt + 1]; } adpcm_decoder(labuf, lsbuf, num, &lstate); adpcm_decoder(rabuf, rsbuf, num, &rstate); for (cnt = 0; cnt < num; cnt++) { buf[2 * cnt] = rsbuf[cnt]; //I'm not sure which is the left buf[2 * cnt + 1] =lsbuf[cnt];//and which the right channel } fwrite(buf, 4*num, 1, PIPE); } else { adpcm_decoder(abuf, buf, 2 * num, &lstate); fwrite(buf, 4 * num, 1, PIPE); } } pclose(PIPE); return 0; } ifpgui-1.0.0/ifpgui.qrc000755 001750 000144 00000002312 11310646366 013170 0ustar00000000 000000 images/battery0.png images/battery1.png images/battery2.png images/battery3.png images/battery4.png images/download_s.png images/editdelete_s.png images/fileclose_s.png images/format_s.png images/radio_s.png images/reload_s.png images/upload_s.png images/multimedia.png images/music.png images/playlist.png images/delete.png images/newfolder.png images/properties.png images/reload.png images/rename.png images/updirectory.png images/view_left_right.png images/view_top_bottom.png images/audio.png images/file.png images/folder-locked.png images/folder-open.png images/folder.png ifpgui-1.0.0/settings.cpp000755 001750 000144 00000014406 11331150056 013536 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include "settings.h" Settings::Settings(QString &fileName) { QDomNodeList nodeList; folderName = QDir::homePath(); playlistFolder = folderName; windowHeight = 480; windowWidth = 640; autoConvert = false; viewAlignment = Qt::Horizontal; QDomDocument doc("ifpgui-settings"); QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) return; if (!doc.setContent(&file)) { file.close(); return; } file.close(); // load settings nodeList = doc.elementsByTagName("WindowHeight"); if (nodeList.count() > 0) { windowHeight = nodeList.item(0).toElement().text().toInt(); } nodeList = doc.elementsByTagName("WindowWidth"); if (nodeList.count() > 0) { windowWidth = nodeList.item(0).toElement().text().toInt(); } nodeList = doc.elementsByTagName("DirViewWidth"); if (nodeList.count() > 0) { dirViewWidth = nodeList.item(0).toElement().text().toInt(); } nodeList = doc.elementsByTagName("iFPViewWidth"); if (nodeList.count() > 0) { ifpViewWidth = nodeList.item(0).toElement().text().toInt(); } nodeList = doc.elementsByTagName("DefaultFolder"); if (nodeList.count() > 0) { folderName = nodeList.item(0).toElement().text(); } nodeList = doc.elementsByTagName("PlaylistFolder"); if (nodeList.count() > 0) { playlistFolder = nodeList.item(0).toElement().text(); } nodeList = doc.elementsByTagName("Auto-ConvertRECFiles"); if (nodeList.count() > 0) { if (nodeList.item(0).toElement().text() == "TRUE") autoConvert = true; } nodeList = doc.elementsByTagName("iFPViewAlignment"); if (nodeList.count() > 0) { if (nodeList.item(0).toElement().text() == "VERT") viewAlignment = Qt::Vertical; } } Settings::~Settings() { } void Settings::saveSettings(QString &fileName) { QDomElement tag; QDomText txt; QDomDocument doc("ifpgui-settings"); QDomElement root = doc.createElement("Settings" ); doc.appendChild( root ); tag = doc.createElement("WindowWidth"); root.appendChild(tag); txt = doc.createTextNode(QString("%1").arg(windowWidth)); tag.appendChild(txt); tag = doc.createElement("WindowHeight"); root.appendChild(tag); txt = doc.createTextNode(QString("%1").arg(windowHeight)); tag.appendChild(txt); tag = doc.createElement("DirViewWidth"); root.appendChild(tag); txt = doc.createTextNode(QString("%1").arg(dirViewWidth)); tag.appendChild(txt); tag = doc.createElement("iFPViewWidth"); root.appendChild(tag); txt = doc.createTextNode(QString("%1").arg(ifpViewWidth)); tag.appendChild(txt); tag = doc.createElement("DefaultFolder"); root.appendChild(tag); txt = doc.createTextNode(folderName); tag.appendChild(txt); tag = doc.createElement("PlaylistFolder"); root.appendChild(tag); txt = doc.createTextNode(playlistFolder); tag.appendChild(txt); tag = doc.createElement("Auto-ConvertRECFiles"); root.appendChild(tag); if (autoConvert == true) txt = doc.createTextNode(QString("TRUE")); else txt = doc.createTextNode(QString("FALSE")); tag.appendChild(txt); tag = doc.createElement("iFPViewAlignment"); root.appendChild(tag); if (viewAlignment == Qt::Horizontal) txt = doc.createTextNode(QString("HORZ")); else txt = doc.createTextNode(QString("VERT")); tag.appendChild(txt); QString xml = doc.toString(); QFile file(fileName); if (!file.open(QIODevice::WriteOnly)) return; QTextStream textstream(&file); textstream << xml; file.close(); } void Settings::setWindowSize(int width, int height) { windowHeight = height; windowWidth = width; } void Settings::setDefaultFolder(QString &defFolder) { folderName = defFolder; } void Settings::setPlaylistFolder(QString &defFolder) { playlistFolder = defFolder; } void Settings::setDirViewWidth(int width) { dirViewWidth = width; } void Settings::setIfpViewWidth(int width) { ifpViewWidth = width; } void Settings::setAutoConvertREC(bool autoCvt) { autoConvert = autoCvt; } void Settings::setViewAlignment(int alignment) { viewAlignment = alignment; } void Settings::getWindowSize(int *width, int *height) { *height = windowHeight; *width = windowWidth; } QString Settings::getDefaultFolder() { return(folderName); } QString Settings::getPlaylistFolder() { return(playlistFolder); } int Settings::getDirViewWidth() { return(dirViewWidth); } int Settings::getIfpViewWidth() { return(ifpViewWidth); } bool Settings::getAutoConvertREC() { return(autoConvert); } int Settings::getViewAlignment() { return(viewAlignment); } ifpgui-1.0.0/progressdlg.cpp000755 001750 000144 00000025243 11312621006 014227 0ustar00000000 000000 /*************************************************************************** * Copyright (C) 2004-2006 by Jim Campbell * * ifpgui@gmail.com * * * * 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 of the License, 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //#include "progressdlg.h" //#include //#include //#include // //// progess stuff //ProgressWindow *pgw; ////int progress(void *context, struct ifp_transfer_status *status); // //ProgressWindow::ProgressWindow(const QString title) // : QDialog(qApp->activeWindow(), Qt::Dialog) // //Qt::WindowStaysOnTopHint | Qt::Tool) //{ // setWindowTitle(title); // //setWFlags(Qt::WStyle_StaysOnTop | Qt::WStyle_Tool); // // lastFileName = ""; // // layout = new QGridLayout(this); // // fileprogress = new QProgressBar(this); // fileprogress->setMaximum(25); // totalprogress = new QProgressBar(this); // totalprogress->setMaximum(25); // // lblFilename = new QLabel(tr("FileName"), this); // lblFilename->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); // lblFilename->setMinimumSize(400, 30); // lblFilename->setMaximumSize(400, 30); // // btnCancel = new QPushButton(tr("Cancel"), this); // btnCancel->setMaximumSize(200, 30); // // connect(btnCancel, SIGNAL(clicked()), // this, SLOT(btnCancel_clicked())); // // //layout->addSpacing(10); // layout->addWidget(lblFilename); // layout->addWidget(fileprogress); // //layout->addSpacing(10); // layout->addWidget(totalprogress); // //layout->addSpacing(15); // layout->addWidget(btnCancel, 0, Qt::AlignHCenter); // // cancel_progress = false; // // setFileProgressTarget(0); // setTotalProgressTarget(0); // setFileProgress(0); // setTotalProgress(0); // // this->setModal(FALSE); //} // ///* // * Destroys the object and frees any allocated resources // */ //ProgressWindow::~ProgressWindow() //{ // // no need to delete child widgets, Qt does it all for us //} // // //void ProgressWindow::btnCancel_clicked() //{ // //emit btnCancelClicked(); // //reject(); // cancel_progress = true; //} // ///*! // Creates a string with ... like "Trollte..." or "...olltech", depending on the alignment. // I took this from the base qt source code. //*/ //static QString qEllipsisText(const QString &org, const QFontMetrics &fm, int width, int align) //{ // int ellWidth = fm.width("..."); // QString text = QString::fromLatin1(""); // int i = 0; // int len = org.length(); // int offset = (align & Qt::AlignRight) ? (len-1) - i : i; // // while (i < len && fm.width(text + org[offset]) + ellWidth < width) // { // if (align & Qt::AlignRight) // text.prepend(org[offset]); // else // text += org[offset]; // offset = (align & Qt::AlignRight) ? (len-1) - ++i : ++i; // } // if (text.isEmpty()) // text = (align & Qt::AlignRight) ? org.right(1) : text = org.left(1); // if (align & Qt::AlignRight) // text.prepend("..."); // else // text += "..."; // return text; //} // ////============================================================================= //// take a file name and truncate it leaving the extension intact ////============================================================================= //QString ProgressWindow::truncateFileName(const QString &org, const QFontMetrics &fm, int width) //{ // int pos, extlen; // QString tmpFileName = QString::fromLatin1(""); // QString fileExt = QString::fromLatin1(""); // int extWidth; // // // first extract the file extension from the filename // pos = org.lastIndexOf('.'); // if (pos > 0) // { // // file name has an extension // extlen = org.length() - pos; // fileExt = org.mid(pos, extlen); // tmpFileName = org.mid(0, pos); // } // else // { // // file name does not have an extension // extlen = 0; // tmpFileName = org; // } // extWidth = fm.width(fileExt); // tmpFileName = qEllipsisText(tmpFileName, fm, width - extWidth, Qt::AlignLeft) + fileExt; // return(tmpFileName); //} // ////============================================================================= //// take a file path and remove whole parts replacing them with "..." ////============================================================================= //QString ProgressWindow::truncateFilePath(QString &fileStr) //{ // int pos; // int cnt, middle; // QStringList lst; // QStringList::Iterator lst_it; // QString truncFileName, tmpFileName, fileExt; // // pos = fileStr.lastIndexOf('\\'); // if (pos >= 0) // lst = fileStr.split("\\"); // else // lst = fileStr.split("/"); // // // remove any "..." elements // lst_it = lst.begin(); // while(lst_it != lst.end()) // { // if (*lst_it == "...") // lst_it = lst.erase(lst_it); // else // lst_it++; // } // // middle = lst.size() / 2; // // // build truncated string // if (pos >= 0) // truncFileName = "\\"; // else // truncFileName = "/"; // // cnt = 1; // lst_it = lst.begin(); // for ( ; lst_it != lst.end(); ++lst_it) // { // // replace middlemost element with a right side emphesis // if (cnt != middle) // { // truncFileName += *lst_it; // if (cnt != lst.size()) // { // if (pos >= 0) // truncFileName += "\\"; // else // truncFileName += "/"; // } // } // else // { // truncFileName += "..."; // if (pos >= 0) // truncFileName += "\\"; // else // truncFileName += "/"; // } // cnt++; // } // return(truncFileName); //} // //void ProgressWindow::setFileName(const QString &fileName) //{ // int width, targetWidth; // QString truncFileName, tmpFileName; // // if (fileName == lastFileName) // return; // // tmpFileName = fileName; // // targetWidth = this->width() - (layout->margin() * 2); // QFontMetrics fm = this->fontMetrics(); // width = fm.width(tmpFileName); // if (targetWidth > 20) // { // do // { // truncFileName = truncateFilePath(tmpFileName); // if (truncFileName == tmpFileName) // { // truncFileName = truncateFileName(tmpFileName, fm, targetWidth); // } // width = fm.width(truncFileName); // tmpFileName = truncFileName; // } while(width > targetWidth); // } // // lblFilename->setText(truncFileName); // lastFileName = truncFileName; //} // //void ProgressWindow::setFileProgress(int progress) //{ // fileprogress->setValue(progress); //} // //void ProgressWindow::setFileProgressTarget(int totalSteps) //{ // fileprogress->setMaximum(totalSteps); //} // //void ProgressWindow::setTotalProgress(int progress) //{ // if (totalprogress->isHidden() == FALSE) // { // totalprogress->setValue(progress); // } //} // //void ProgressWindow::setTotalProgressTarget(int totalSteps) //{ // if (totalSteps == -1) // { // totalprogress->hide(); // } // else // { // totalprogress->show(); // totalprogress->setMaximum(totalSteps); // } //} // //void ProgressWindow::hideCancelBtn(void) //{ // btnCancel->hide(); //} // //void ProgressWindow::showCancelBtn(void) //{ // btnCancel->show(); //} // //void ProgressWindow::removeStayOnTop(void) //{ // setWindowFlags(Qt::Tool); //} // //void ProgressWindow::updateProgress(ifp_progress_info *pg_info) //{ // setFileName(pg_info->file_name); // // if (pg_info->is_batch) // { // setFileProgressTarget(pg_info->file_total); // setFileProgress(pg_info->file_bytes); // // if (pg_info->is_status_batch) // { // setTotalProgressTarget(pg_info->total_to_transfer); // setTotalProgress(pg_info->total_transfered + pg_info->batch_bytes);// + pg_info->file_bytes); // } // else // { // setTotalProgressTarget(pg_info->total_to_transfer); // setTotalProgress(pg_info->total_transfered + pg_info->file_bytes); // } // } // else if (pg_info->is_status_batch) // { // setFileProgressTarget(pg_info->file_total); // setFileProgress(pg_info->file_bytes); // // setTotalProgressTarget(pg_info->batch_total); // setTotalProgress(pg_info->batch_bytes);// + pg_info->file_bytes); // } // else // { // setTotalProgressTarget(-1); // // setFileProgressTarget(pg_info->file_total); // setFileProgress(pg_info->file_bytes); // } // qApp->processEvents(); //} //int progress(void *context, struct ifp_transfer_status *status) // { // ifp_progress_info *pginfo; // // if (context == NULL) // return(0); // this is really a bad error // // pginfo = (ifp_progress_info*)context; // if (pginfo->pgw == NULL) // return(0); // another bad error // // if (pginfo->pgw->cancel_progress == 1) // return(1); // // pginfo->file_name = QString(status->file_name); // pginfo->file_bytes = status->file_bytes; // pginfo->file_total = status->file_total; // pginfo->is_status_batch = status->is_batch; // pginfo->batch_total = status->batch_total; // pginfo->batch_bytes = status->batch_bytes; // // pginfo->pgw->updateProgress(pginfo); // if (pginfo->pgw->isHidden()) // { // pginfo->pgw->show(); // pginfo->pgw->raise(); // pginfo->pgw->activateWindow(); // } // return(0); // } ifpgui-1.0.0/build/000755 001750 000144 00000000000 11403110617 012260 5ustar00000000 000000