summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2007-07-25 20:21:06 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2007-07-25 20:21:06 +0000
commit680408f4ac8b04d716fd8921c01b73d30a3c66c7 (patch)
tree08908a7d5e3b95daa9a1d3ed0703e64cff712022
parentaa643db434e230643e18e454032fb708e0f1848d (diff)
downloadrockbox-680408f4ac8b04d716fd8921c01b73d30a3c66c7.tar.gz
rockbox-680408f4ac8b04d716fd8921c01b73d30a3c66c7.zip
First stab at porting rbutil to Qt4. Currently only installing a current or archived build is working. To build, run qmake && make in the source folder. Beware that the syntax of rbutil.ini has slightly changed. Caching of the downloaded files is also still missing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13989 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/rbutilqt/COPYING280
-rw-r--r--rbutil/rbutilqt/CREDITS6
-rw-r--r--rbutil/rbutilqt/aboutbox.h0
-rw-r--r--rbutil/rbutilqt/aboutbox.ui178
-rw-r--r--rbutil/rbutilqt/configure.cpp100
-rw-r--r--rbutil/rbutilqt/configure.h48
-rw-r--r--rbutil/rbutilqt/configurefrm.ui180
-rw-r--r--rbutil/rbutilqt/httpget.cpp144
-rw-r--r--rbutil/rbutilqt/httpget.h63
-rw-r--r--rbutil/rbutilqt/icons/bootloader_btn.pngbin0 -> 3345 bytes
-rw-r--r--rbutil/rbutilqt/icons/doom_btn.pngbin0 -> 2286 bytes
-rw-r--r--rbutil/rbutilqt/icons/font_btn.pngbin0 -> 1926 bytes
-rw-r--r--rbutil/rbutilqt/icons/rbinstall_btn.pngbin0 -> 3026 bytes
-rw-r--r--rbutil/rbutilqt/icons/rblogo.xpm254
-rw-r--r--rbutil/rbutilqt/icons/rbutil.xpm666
-rw-r--r--rbutil/rbutilqt/icons/rembootloader_btn.pngbin0 -> 3693 bytes
-rw-r--r--rbutil/rbutilqt/icons/remrb_btn.pngbin0 -> 3634 bytes
-rw-r--r--rbutil/rbutilqt/icons/talkfile_btn.pngbin0 -> 2796 bytes
-rw-r--r--rbutil/rbutilqt/icons/themes_btn.pngbin0 -> 2238 bytes
-rw-r--r--rbutil/rbutilqt/icons/wizard.xpm689
-rw-r--r--rbutil/rbutilqt/install.cpp331
-rw-r--r--rbutil/rbutilqt/install.h77
-rw-r--r--rbutil/rbutilqt/installfrm.ui187
-rw-r--r--rbutil/rbutilqt/installprogressfrm.ui64
-rw-r--r--rbutil/rbutilqt/main.cpp38
-rw-r--r--rbutil/rbutilqt/rbutil.ini326
-rw-r--r--rbutil/rbutilqt/rbutil_de.ts643
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp231
-rw-r--r--rbutil/rbutilqt/rbutilqt.h58
-rw-r--r--rbutil/rbutilqt/rbutilqt.pro35
-rw-r--r--rbutil/rbutilqt/rbutilqt.qrc21
-rw-r--r--rbutil/rbutilqt/rbutilqtfrm.ui685
-rw-r--r--rbutil/rbutilqt/settings.h0
-rw-r--r--rbutil/rbutilqt/version.h20
-rw-r--r--rbutil/rbutilqt/zip/LICENSE.GPL341
-rw-r--r--rbutil/rbutilqt/zip/README68
-rw-r--r--rbutil/rbutilqt/zip/README.ROCKBOX7
-rw-r--r--rbutil/rbutilqt/zip/unzip.cpp1360
-rw-r--r--rbutil/rbutilqt/zip/unzip.h144
-rw-r--r--rbutil/rbutilqt/zip/unzip_p.h112
-rw-r--r--rbutil/rbutilqt/zip/zip.cpp1219
-rw-r--r--rbutil/rbutilqt/zip/zip.h113
-rw-r--r--rbutil/rbutilqt/zip/zip_p.h93
-rw-r--r--rbutil/rbutilqt/zip/zipentry_p.h78
-rw-r--r--rbutil/rbutilqt/zlib/zconf.h326
-rw-r--r--rbutil/rbutilqt/zlib/zlib.h1200
46 files changed, 10385 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/COPYING b/rbutil/rbutilqt/COPYING
new file mode 100644
index 0000000000..5a965fbc58
--- /dev/null
+++ b/rbutil/rbutilqt/COPYING
@@ -0,0 +1,280 @@
1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991
3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 Preamble
10
11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public
13License is intended to guarantee your freedom to share and change free
14software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by
18the GNU Library General Public License instead.) You can apply it to
19your programs, too.
20
21 When we speak of free software, we are referring to freedom, not
22price. Our General Public Licenses are designed to make sure that you
23have the freedom to distribute copies of free software (and charge for
24this service if you wish), that you receive source code or can get it
25if you want it, that you can change the software or use pieces of it
26in new free programs; and that you know you can do these things.
27
28 To protect your rights, we need to make restrictions that forbid
29anyone to deny you these rights or to ask you to surrender the rights.
30These restrictions translate to certain responsibilities for you if you
31distribute copies of the software, or if you modify it.
32
33 For example, if you distribute copies of such a program, whether
34gratis or for a fee, you must give the recipients all the rights that
35you have. You must make sure that they, too, receive or can get the
36source code. And you must show them these terms so they know their
37rights.
38
39 We protect your rights with two steps: (1) copyright the software, and
40(2) offer you this license which gives you legal permission to copy,
41distribute and/or modify the software.
42
43 Also, for each author's protection and ours, we want to make certain
44that everyone understands that there is no warranty for this free
45software. If the software is modified by someone else and passed on, we
46want its recipients to know that what they have is not the original, so
47that any problems introduced by others will not reflect on the original
48authors' reputations.
49
50 Finally, any free program is threatened constantly by software
51patents. We wish to avoid the danger that redistributors of a free
52program will individually obtain patent licenses, in effect making the
53program proprietary. To prevent this, we have made it clear that any
54patent must be licensed for everyone's free use or not licensed at all.
55
56 The precise terms and conditions for copying, distribution and
57modification follow.
58
59 GNU GENERAL PUBLIC LICENSE
60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
62 0. This License applies to any program or other work which contains
63a notice placed by the copyright holder saying it may be distributed
64under the terms of this General Public License. The "Program", below,
65refers to any such program or work, and a "work based on the Program"
66means either the Program or any derivative work under copyright law:
67that is to say, a work containing the Program or a portion of it,
68either verbatim or with modifications and/or translated into another
69language. (Hereinafter, translation is included without limitation in
70the term "modification".) Each licensee is addressed as "you".
71
72Activities other than copying, distribution and modification are not
73covered by this License; they are outside its scope. The act of
74running the Program is not restricted, and the output from the Program
75is covered only if its contents constitute a work based on the
76Program (independent of having been made by running the Program).
77Whether that is true depends on what the Program does.
78
79 1. You may copy and distribute verbatim copies of the Program's
80source code as you receive it, in any medium, provided that you
81conspicuously and appropriately publish on each copy an appropriate
82copyright notice and disclaimer of warranty; keep intact all the
83notices that refer to this License and to the absence of any warranty;
84and give any other recipients of the Program a copy of this License
85along with the Program.
86
87You may charge a fee for the physical act of transferring a copy, and
88you may at your option offer warranty protection in exchange for a fee.
89
90 2. You may modify your copy or copies of the Program or any portion
91of it, thus forming a work based on the Program, and copy and
92distribute such modifications or work under the terms of Section 1
93above, provided that you also meet all of these conditions:
94
95 a) You must cause the modified files to carry prominent notices
96 stating that you changed the files and the date of any change.
97
98 b) You must cause any work that you distribute or publish, that in
99 whole or in part contains or is derived from the Program or any
100 part thereof, to be licensed as a whole at no charge to all third
101 parties under the terms of this License.
102
103 c) If the modified program normally reads commands interactively
104 when run, you must cause it, when started running for such
105 interactive use in the most ordinary way, to print or display an
106 announcement including an appropriate copyright notice and a
107 notice that there is no warranty (or else, saying that you provide
108 a warranty) and that users may redistribute the program under
109 these conditions, and telling the user how to view a copy of this
110 License. (Exception: if the Program itself is interactive but
111 does not normally print such an announcement, your work based on
112 the Program is not required to print an announcement.)
113
114These requirements apply to the modified work as a whole. If
115identifiable sections of that work are not derived from the Program,
116and can be reasonably considered independent and separate works in
117themselves, then this License, and its terms, do not apply to those
118sections when you distribute them as separate works. But when you
119distribute the same sections as part of a whole which is a work based
120on the Program, the distribution of the whole must be on the terms of
121this License, whose permissions for other licensees extend to the
122entire whole, and thus to each and every part regardless of who wrote it.
123
124Thus, it is not the intent of this section to claim rights or contest
125your rights to work written entirely by you; rather, the intent is to
126exercise the right to control the distribution of derivative or
127collective works based on the Program.
128
129In addition, mere aggregation of another work not based on the Program
130with the Program (or with a work based on the Program) on a volume of
131a storage or distribution medium does not bring the other work under
132the scope of this License.
133
134 3. You may copy and distribute the Program (or a work based on it,
135under Section 2) in object code or executable form under the terms of
136Sections 1 and 2 above provided that you also do one of the following:
137
138 a) Accompany it with the complete corresponding machine-readable
139 source code, which must be distributed under the terms of Sections
140 1 and 2 above on a medium customarily used for software interchange; or,
141
142 b) Accompany it with a written offer, valid for at least three
143 years, to give any third party, for a charge no more than your
144 cost of physically performing source distribution, a complete
145 machine-readable copy of the corresponding source code, to be
146 distributed under the terms of Sections 1 and 2 above on a medium
147 customarily used for software interchange; or,
148
149 c) Accompany it with the information you received as to the offer
150 to distribute corresponding source code. (This alternative is
151 allowed only for noncommercial distribution and only if you
152 received the program in object code or executable form with such
153 an offer, in accord with Subsection b above.)
154
155The source code for a work means the preferred form of the work for
156making modifications to it. For an executable work, complete source
157code means all the source code for all modules it contains, plus any
158associated interface definition files, plus the scripts used to
159control compilation and installation of the executable. However, as a
160special exception, the source code distributed need not include
161anything that is normally distributed (in either source or binary
162form) with the major components (compiler, kernel, and so on) of the
163operating system on which the executable runs, unless that component
164itself accompanies the executable.
165
166If distribution of executable or object code is made by offering
167access to copy from a designated place, then offering equivalent
168access to copy the source code from the same place counts as
169distribution of the source code, even though third parties are not
170compelled to copy the source along with the object code.
171
172 4. You may not copy, modify, sublicense, or distribute the Program
173except as expressly provided under this License. Any attempt
174otherwise to copy, modify, sublicense or distribute the Program is
175void, and will automatically terminate your rights under this License.
176However, parties who have received copies, or rights, from you under
177this License will not have their licenses terminated so long as such
178parties remain in full compliance.
179
180 5. You are not required to accept this License, since you have not
181signed it. However, nothing else grants you permission to modify or
182distribute the Program or its derivative works. These actions are
183prohibited by law if you do not accept this License. Therefore, by
184modifying or distributing the Program (or any work based on the
185Program), you indicate your acceptance of this License to do so, and
186all its terms and conditions for copying, distributing or modifying
187the Program or works based on it.
188
189 6. Each time you redistribute the Program (or any work based on the
190Program), the recipient automatically receives a license from the
191original licensor to copy, distribute or modify the Program subject to
192these terms and conditions. You may not impose any further
193restrictions on the recipients' exercise of the rights granted herein.
194You are not responsible for enforcing compliance by third parties to
195this License.
196
197 7. If, as a consequence of a court judgment or allegation of patent
198infringement or for any other reason (not limited to patent issues),
199conditions are imposed on you (whether by court order, agreement or
200otherwise) that contradict the conditions of this License, they do not
201excuse you from the conditions of this License. If you cannot
202distribute so as to satisfy simultaneously your obligations under this
203License and any other pertinent obligations, then as a consequence you
204may not distribute the Program at all. For example, if a patent
205license would not permit royalty-free redistribution of the Program by
206all those who receive copies directly or indirectly through you, then
207the only way you could satisfy both it and this License would be to
208refrain entirely from distribution of the Program.
209
210If any portion of this section is held invalid or unenforceable under
211any particular circumstance, the balance of the section is intended to
212apply and the section as a whole is intended to apply in other
213circumstances.
214
215It is not the purpose of this section to induce you to infringe any
216patents or other property right claims or to contest validity of any
217such claims; this section has the sole purpose of protecting the
218integrity of the free software distribution system, which is
219implemented by public license practices. Many people have made
220generous contributions to the wide range of software distributed
221through that system in reliance on consistent application of that
222system; it is up to the author/donor to decide if he or she is willing
223to distribute software through any other system and a licensee cannot
224impose that choice.
225
226This section is intended to make thoroughly clear what is believed to
227be a consequence of the rest of this License.
228
229 8. If the distribution and/or use of the Program is restricted in
230certain countries either by patents or by copyrighted interfaces, the
231original copyright holder who places the Program under this License
232may add an explicit geographical distribution limitation excluding
233those countries, so that distribution is permitted only in or among
234countries not thus excluded. In such case, this License incorporates
235the limitation as if written in the body of this License.
236
237 9. The Free Software Foundation may publish revised and/or new versions
238of the General Public License from time to time. Such new versions will
239be similar in spirit to the present version, but may differ in detail to
240address new problems or concerns.
241
242Each version is given a distinguishing version number. If the Program
243specifies a version number of this License which applies to it and "any
244later version", you have the option of following the terms and conditions
245either of that version or of any later version published by the Free
246Software Foundation. If the Program does not specify a version number of
247this License, you may choose any version ever published by the Free Software
248Foundation.
249
250 10. If you wish to incorporate parts of the Program into other free
251programs whose distribution conditions are different, write to the author
252to ask for permission. For software which is copyrighted by the Free
253Software Foundation, write to the Free Software Foundation; we sometimes
254make exceptions for this. Our decision will be guided by the two goals
255of preserving the free status of all derivatives of our free software and
256of promoting the sharing and reuse of software generally.
257
258 NO WARRANTY
259
260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268REPAIR OR CORRECTION.
269
270 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278POSSIBILITY OF SUCH DAMAGES.
279
280 END OF TERMS AND CONDITIONS
diff --git a/rbutil/rbutilqt/CREDITS b/rbutil/rbutilqt/CREDITS
new file mode 100644
index 0000000000..6351fcd85c
--- /dev/null
+++ b/rbutil/rbutilqt/CREDITS
@@ -0,0 +1,6 @@
1Christi Alice Scarborough
2Dave Chapman
3Dominik Wenger
4Bryan Childs
5Dave Hooper
6Dominik Riebeling
diff --git a/rbutil/rbutilqt/aboutbox.h b/rbutil/rbutilqt/aboutbox.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/rbutil/rbutilqt/aboutbox.h
diff --git a/rbutil/rbutilqt/aboutbox.ui b/rbutil/rbutilqt/aboutbox.ui
new file mode 100644
index 0000000000..8972b27846
--- /dev/null
+++ b/rbutil/rbutilqt/aboutbox.ui
@@ -0,0 +1,178 @@
1<ui version="4.0" >
2 <class>aboutBox</class>
3 <widget class="QWidget" name="aboutBox" >
4 <property name="geometry" >
5 <rect>
6 <x>0</x>
7 <y>0</y>
8 <width>443</width>
9 <height>450</height>
10 </rect>
11 </property>
12 <property name="windowTitle" >
13 <string>About Rockbox Utility</string>
14 </property>
15 <layout class="QGridLayout" >
16 <item row="0" column="0" colspan="3" >
17 <layout class="QHBoxLayout" >
18 <item>
19 <widget class="QLabel" name="label" >
20 <property name="text" >
21 <string/>
22 </property>
23 <property name="pixmap" >
24 <pixmap resource="qrbutil.qrc" >:/icons/icons/rbutil.xpm</pixmap>
25 </property>
26 </widget>
27 </item>
28 <item>
29 <widget class="QLabel" name="labelTitle" >
30 <property name="text" >
31 <string>The Rockbox Utility</string>
32 </property>
33 </widget>
34 </item>
35 <item>
36 <spacer>
37 <property name="orientation" >
38 <enum>Qt::Horizontal</enum>
39 </property>
40 <property name="sizeHint" >
41 <size>
42 <width>40</width>
43 <height>20</height>
44 </size>
45 </property>
46 </spacer>
47 </item>
48 </layout>
49 </item>
50 <item row="1" column="0" colspan="3" >
51 <widget class="QLabel" name="labelText" >
52 <property name="text" >
53 <string>Installer and housekeeping utility for the Rockbox open source digital audio player firmware.
54
55© 2005 - 2007 The Rockbox Team.
56Released under the GNU General Public License v2.
57</string>
58 </property>
59 <property name="wordWrap" >
60 <bool>true</bool>
61 </property>
62 <property name="openExternalLinks" >
63 <bool>true</bool>
64 </property>
65 </widget>
66 </item>
67 <item row="2" column="0" colspan="3" >
68 <widget class="QTabWidget" name="tabWidget" >
69 <property name="currentIndex" >
70 <number>0</number>
71 </property>
72 <widget class="QWidget" name="creditsTab" >
73 <attribute name="title" >
74 <string>&amp;Credits</string>
75 </attribute>
76 <layout class="QGridLayout" >
77 <item row="0" column="0" >
78 <widget class="QTextBrowser" name="browserCredits" >
79 <property name="focusPolicy" >
80 <enum>Qt::NoFocus</enum>
81 </property>
82 <property name="acceptDrops" >
83 <bool>false</bool>
84 </property>
85 <property name="autoFillBackground" >
86 <bool>true</bool>
87 </property>
88 <property name="autoFormatting" >
89 <set>QTextEdit::AutoNone</set>
90 </property>
91 <property name="textInteractionFlags" >
92 <set>Qt::NoTextInteraction</set>
93 </property>
94 <property name="openExternalLinks" >
95 <bool>true</bool>
96 </property>
97 </widget>
98 </item>
99 </layout>
100 </widget>
101 <widget class="QWidget" name="licenceTab" >
102 <attribute name="title" >
103 <string>&amp;License</string>
104 </attribute>
105 <layout class="QGridLayout" >
106 <item row="0" column="0" >
107 <widget class="QTextBrowser" name="browserLicense" >
108 <property name="font" >
109 <font>
110 <family>Courier New</family>
111 </font>
112 </property>
113 <property name="lineWrapMode" >
114 <enum>QTextEdit::NoWrap</enum>
115 </property>
116 </widget>
117 </item>
118 </layout>
119 </widget>
120 </widget>
121 </item>
122 <item row="3" column="0" >
123 <spacer>
124 <property name="orientation" >
125 <enum>Qt::Horizontal</enum>
126 </property>
127 <property name="sizeHint" >
128 <size>
129 <width>191</width>
130 <height>20</height>
131 </size>
132 </property>
133 </spacer>
134 </item>
135 <item row="3" column="1" >
136 <widget class="QPushButton" name="okButton" >
137 <property name="text" >
138 <string>&amp;Ok</string>
139 </property>
140 </widget>
141 </item>
142 <item row="3" column="2" >
143 <spacer>
144 <property name="orientation" >
145 <enum>Qt::Horizontal</enum>
146 </property>
147 <property name="sizeHint" >
148 <size>
149 <width>40</width>
150 <height>20</height>
151 </size>
152 </property>
153 </spacer>
154 </item>
155 </layout>
156 </widget>
157 <resources>
158 <include location="qrbutil.qrc" />
159 </resources>
160 <connections>
161 <connection>
162 <sender>okButton</sender>
163 <signal>clicked()</signal>
164 <receiver>aboutBox</receiver>
165 <slot>close()</slot>
166 <hints>
167 <hint type="sourcelabel" >
168 <x>210</x>
169 <y>398</y>
170 </hint>
171 <hint type="destinationlabel" >
172 <x>210</x>
173 <y>210</y>
174 </hint>
175 </hints>
176 </connection>
177 </connections>
178</ui>
diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp
new file mode 100644
index 0000000000..5c95e10731
--- /dev/null
+++ b/rbutil/rbutilqt/configure.cpp
@@ -0,0 +1,100 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include <QtGui>
21
22#include "configure.h"
23#include "ui_configurefrm.h"
24
25Config::Config(QWidget *parent) : QDialog(parent)
26{
27 ui.setupUi(this);
28 ui.radioManualProxy->setChecked(true);
29 QRegExpValidator *proxyValidator = new QRegExpValidator(this);
30 QRegExp validate("[0-9]*");
31 proxyValidator->setRegExp(validate);
32 ui.proxyPort->setValidator(proxyValidator);
33
34 ui.radioSystemProxy->setEnabled(false); // not implemented yet
35
36 connect(ui.buttonOk, SIGNAL(clicked()), this, SLOT(accept()));
37 connect(ui.buttonCancel, SIGNAL(clicked()), this, SLOT(abort()));
38 connect(ui.radioNoProxy, SIGNAL(toggled(bool)), this, SLOT(setNoProxy(bool)));
39}
40
41
42void Config::accept()
43{
44 qDebug() << "Config::accept()";
45 QUrl proxy;
46 proxy.setScheme("http");
47 proxy.setUserName(ui.proxyUser->text());
48 proxy.setPassword(ui.proxyPass->text());
49 proxy.setHost(ui.proxyHost->text());
50 proxy.setPort(ui.proxyPort->text().toInt());
51
52 userSettings->setValue("defaults/proxy", proxy.toString());
53 qDebug() << "new proxy:" << proxy;
54
55 QString proxyType;
56 if(ui.radioNoProxy->isChecked()) proxyType = "none";
57 else if(ui.radioSystemProxy->isChecked()) proxyType = "system";
58 else proxyType = "manual";
59 userSettings->setValue("defaults/proxytype", proxyType);
60
61 userSettings->sync();
62 this->close();
63 emit settingsUpdated();
64}
65
66
67void Config::abort()
68{
69 qDebug() << "Config::abort()";
70 this->close();
71}
72
73
74void Config::setUserSettings(QSettings *user)
75{
76 userSettings = user;
77 QUrl proxy = userSettings->value("defaults/proxy").toString();
78
79 ui.proxyPort->insert(QString("%1").arg(proxy.port()));
80 ui.proxyHost->insert(proxy.host());
81 ui.proxyUser->insert(proxy.userName());
82 ui.proxyPass->insert(proxy.password());
83
84 QString proxyType = userSettings->value("defaults/proxytype").toString();
85 if(proxyType == "manual") ui.radioManualProxy->setChecked(true);
86 else if(proxyType == "system") ui.radioSystemProxy->setChecked(true);
87 else if(proxyType == "none") ui.radioNoProxy->setChecked(true);
88
89}
90
91
92void Config::setNoProxy(bool checked)
93{
94 bool i = !checked;
95 ui.proxyPort->setEnabled(i);
96 ui.proxyHost->setEnabled(i);
97 ui.proxyUser->setEnabled(i);
98 ui.proxyPass->setEnabled(i);
99}
100
diff --git a/rbutil/rbutilqt/configure.h b/rbutil/rbutilqt/configure.h
new file mode 100644
index 0000000000..f3b879e333
--- /dev/null
+++ b/rbutil/rbutilqt/configure.h
@@ -0,0 +1,48 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#ifndef CONFIGURE_H
21#define CONFIGURE_H
22
23#include "ui_configurefrm.h"
24#include <QtGui>
25
26class Config : public QDialog
27{
28 Q_OBJECT
29 public:
30 Config(QWidget *parent = 0);
31 void setUserSettings(QSettings*);
32
33 signals:
34 void settingsUpdated(void);
35
36 public slots:
37 void accept(void);
38 void abort(void);
39
40 private:
41 Ui::ConfigForm ui;
42 QSettings *userSettings;
43
44 private slots:
45 void setNoProxy(bool);
46};
47
48#endif
diff --git a/rbutil/rbutilqt/configurefrm.ui b/rbutil/rbutilqt/configurefrm.ui
new file mode 100644
index 0000000000..dee9deab6b
--- /dev/null
+++ b/rbutil/rbutilqt/configurefrm.ui
@@ -0,0 +1,180 @@
1<ui version="4.0" >
2 <class>ConfigForm</class>
3 <widget class="QDialog" name="ConfigForm" >
4 <property name="geometry" >
5 <rect>
6 <x>0</x>
7 <y>0</y>
8 <width>476</width>
9 <height>384</height>
10 </rect>
11 </property>
12 <property name="windowTitle" >
13 <string>Configuration</string>
14 </property>
15 <layout class="QGridLayout" >
16 <item row="0" column="0" colspan="3" >
17 <widget class="QLabel" name="labelTitle" >
18 <property name="text" >
19 <string>Configure Rockbox Utility</string>
20 </property>
21 </widget>
22 </item>
23 <item row="2" column="0" >
24 <spacer>
25 <property name="orientation" >
26 <enum>Qt::Horizontal</enum>
27 </property>
28 <property name="sizeHint" >
29 <size>
30 <width>40</width>
31 <height>20</height>
32 </size>
33 </property>
34 </spacer>
35 </item>
36 <item row="2" column="1" >
37 <widget class="QPushButton" name="buttonOk" >
38 <property name="text" >
39 <string>&amp;Ok</string>
40 </property>
41 </widget>
42 </item>
43 <item row="2" column="2" >
44 <widget class="QPushButton" name="buttonCancel" >
45 <property name="text" >
46 <string>&amp;Cancel</string>
47 </property>
48 </widget>
49 </item>
50 <item row="1" column="0" colspan="3" >
51 <widget class="QTabWidget" name="tabConfiguration" >
52 <property name="currentIndex" >
53 <number>0</number>
54 </property>
55 <widget class="QWidget" name="tabProxy" >
56 <attribute name="title" >
57 <string>&amp;Proxy</string>
58 </attribute>
59 <layout class="QGridLayout" >
60 <item row="0" column="0" >
61 <widget class="QRadioButton" name="radioNoProxy" >
62 <property name="text" >
63 <string>&amp;No Proxy</string>
64 </property>
65 <property name="checked" >
66 <bool>true</bool>
67 </property>
68 </widget>
69 </item>
70 <item row="1" column="0" >
71 <widget class="QRadioButton" name="radioSystemProxy" >
72 <property name="text" >
73 <string>Use &amp;System values</string>
74 </property>
75 </widget>
76 </item>
77 <item row="2" column="0" >
78 <widget class="QRadioButton" name="radioManualProxy" >
79 <property name="text" >
80 <string>&amp;Manual Proxy settings</string>
81 </property>
82 </widget>
83 </item>
84 <item row="3" column="0" >
85 <widget class="QGroupBox" name="groupBox" >
86 <property name="title" >
87 <string>Proxy Values</string>
88 </property>
89 <layout class="QGridLayout" >
90 <item row="0" column="0" >
91 <widget class="QLabel" name="label" >
92 <property name="text" >
93 <string>&amp;Host:</string>
94 </property>
95 <property name="buddy" >
96 <cstring>proxyHost</cstring>
97 </property>
98 </widget>
99 </item>
100 <item row="0" column="1" >
101 <widget class="QLineEdit" name="proxyHost" >
102 <property name="frame" >
103 <bool>true</bool>
104 </property>
105 </widget>
106 </item>
107 <item row="1" column="0" >
108 <widget class="QLabel" name="label_2" >
109 <property name="text" >
110 <string>&amp;Port:</string>
111 </property>
112 <property name="buddy" >
113 <cstring>proxyPort</cstring>
114 </property>
115 </widget>
116 </item>
117 <item row="1" column="1" >
118 <widget class="QLineEdit" name="proxyPort" />
119 </item>
120 <item row="2" column="1" >
121 <widget class="QLineEdit" name="proxyUser" />
122 </item>
123 <item row="3" column="1" >
124 <widget class="QLineEdit" name="proxyPass" />
125 </item>
126 <item row="2" column="0" >
127 <widget class="QLabel" name="label_3" >
128 <property name="text" >
129 <string>&amp;Username</string>
130 </property>
131 <property name="buddy" >
132 <cstring>proxyUser</cstring>
133 </property>
134 </widget>
135 </item>
136 <item row="3" column="0" >
137 <widget class="QLabel" name="label_4" >
138 <property name="text" >
139 <string>P&amp;assword</string>
140 </property>
141 <property name="buddy" >
142 <cstring>proxyPass</cstring>
143 </property>
144 </widget>
145 </item>
146 </layout>
147 </widget>
148 </item>
149 <item row="4" column="0" >
150 <spacer>
151 <property name="orientation" >
152 <enum>Qt::Vertical</enum>
153 </property>
154 <property name="sizeHint" >
155 <size>
156 <width>20</width>
157 <height>40</height>
158 </size>
159 </property>
160 </spacer>
161 </item>
162 </layout>
163 </widget>
164 <widget class="QWidget" name="tabLanguage" >
165 <attribute name="title" >
166 <string>&amp;Language</string>
167 </attribute>
168 </widget>
169 <widget class="QWidget" name="tabScrobbler" >
170 <attribute name="title" >
171 <string>&amp;Scrobbler</string>
172 </attribute>
173 </widget>
174 </widget>
175 </item>
176 </layout>
177 </widget>
178 <resources/>
179 <connections/>
180</ui>
diff --git a/rbutil/rbutilqt/httpget.cpp b/rbutil/rbutilqt/httpget.cpp
new file mode 100644
index 0000000000..b567a7df80
--- /dev/null
+++ b/rbutil/rbutilqt/httpget.cpp
@@ -0,0 +1,144 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include <QtCore>
21#include <QtNetwork>
22#include <QtDebug>
23
24#include "httpget.h"
25
26
27HttpGet::HttpGet(QObject *parent)
28 : QObject(parent)
29{
30
31 outputFile = new QFile(this);
32 connect(&http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
33 connect(&http, SIGNAL(dataReadProgress(int, int)), this, SLOT(httpProgress(int, int)));
34 connect(&http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpFinished(int, bool)));
35 connect(&http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader&)), this, SLOT(httpResponseHeader(const QHttpResponseHeader&)));
36}
37
38
39QHttp::Error HttpGet::error()
40{
41 return http.error();
42}
43
44void HttpGet::httpProgress(int read, int total)
45{
46 emit dataReadProgress(read, total);
47}
48
49
50void HttpGet::setProxy(const QUrl &proxy)
51{
52 qDebug() << "HttpGet::setProxy" << proxy.toString();
53 http.setProxy(proxy.host(), proxy.port(), proxy.userName(), proxy.password());
54}
55
56
57void HttpGet::setFile(QFile *file)
58{
59 outputFile = file;
60 qDebug() << "HttpGet::setFile" << outputFile->fileName();
61}
62
63
64void HttpGet::abort()
65{
66 http.abort();
67 outputFile->close();
68}
69
70
71bool HttpGet::getFile(const QUrl &url)
72{
73 if (!url.isValid()) {
74 qDebug() << "Error: Invalid URL" << endl;
75 return false;
76 }
77
78 if (url.scheme() != "http") {
79 qDebug() << "Error: URL must start with 'http:'" << endl;
80 return false;
81 }
82
83 if (url.path().isEmpty()) {
84 qDebug() << "Error: URL has no path" << endl;
85 return false;
86 }
87
88 QString localFileName = outputFile->fileName();
89 if (localFileName.isEmpty())
90 outputFile->setFileName(QFileInfo(url.path()).fileName());
91
92 if (!outputFile->open(QIODevice::ReadWrite)) {
93 qDebug() << "Error: Cannot open " << qPrintable(outputFile->fileName())
94 << " for writing: " << qPrintable(outputFile->errorString())
95 << endl;
96 return false;
97 }
98
99 http.setHost(url.host(), url.port(80));
100 http.get(url.path(), outputFile);
101 http.close();
102 return true;
103}
104
105void HttpGet::httpDone(bool error)
106{
107 if (error) {
108 qDebug() << "Error: " << qPrintable(http.errorString()) << endl;
109 } else {
110 qDebug() << "File downloaded as " << qPrintable(outputFile->fileName())
111 << endl;
112 }
113 outputFile->close();
114 emit done(error);
115}
116
117
118void HttpGet::httpFinished(int id, bool error)
119{
120 qDebug() << "HttpGet::httpFinished";
121 qDebug() << "id:" << id << "error:" << error;
122 emit requestFinished(id, error);
123
124}
125
126
127QString HttpGet::errorString()
128{
129 return http.errorString();
130}
131
132
133void HttpGet::httpResponseHeader(const QHttpResponseHeader &resp)
134{
135 qDebug() << "HttpGet::httpResponseHeader()" << resp.statusCode();
136 response = resp.statusCode();
137 if(response != 200) http.abort();
138}
139
140
141int HttpGet::httpResponse()
142{
143 return response;
144}
diff --git a/rbutil/rbutilqt/httpget.h b/rbutil/rbutilqt/httpget.h
new file mode 100644
index 0000000000..1a86e1d4ce
--- /dev/null
+++ b/rbutil/rbutilqt/httpget.h
@@ -0,0 +1,63 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20
21#ifndef HTTPGET_H
22#define HTTPGET_H
23
24#include <QFile>
25#include <QHttp>
26
27class QUrl;
28
29class HttpGet : public QObject
30{
31 Q_OBJECT
32
33 public:
34 HttpGet(QObject *parent = 0);
35
36 bool getFile(const QUrl &url);
37 void setProxy(const QUrl &url);
38 QHttp::Error error(void);
39 QString errorString(void);
40 void setFile(QFile*);
41 int httpResponse(void);
42
43 public slots:
44 void abort(void);
45
46 signals:
47 void done(bool);
48 void dataReadProgress(int, int);
49 void requestFinished(int, bool);
50
51 private slots:
52 void httpDone(bool error);
53 void httpProgress(int, int);
54 void httpFinished(int, bool);
55 void httpResponseHeader(const QHttpResponseHeader&);
56
57 private:
58 QHttp http;
59 QFile *outputFile;
60 int response;
61};
62
63#endif
diff --git a/rbutil/rbutilqt/icons/bootloader_btn.png b/rbutil/rbutilqt/icons/bootloader_btn.png
new file mode 100644
index 0000000000..3590c9c4b9
--- /dev/null
+++ b/rbutil/rbutilqt/icons/bootloader_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/doom_btn.png b/rbutil/rbutilqt/icons/doom_btn.png
new file mode 100644
index 0000000000..c086024e14
--- /dev/null
+++ b/rbutil/rbutilqt/icons/doom_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/font_btn.png b/rbutil/rbutilqt/icons/font_btn.png
new file mode 100644
index 0000000000..dd47a2912a
--- /dev/null
+++ b/rbutil/rbutilqt/icons/font_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/rbinstall_btn.png b/rbutil/rbutilqt/icons/rbinstall_btn.png
new file mode 100644
index 0000000000..c37ebec263
--- /dev/null
+++ b/rbutil/rbutilqt/icons/rbinstall_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/rblogo.xpm b/rbutil/rbutilqt/icons/rblogo.xpm
new file mode 100644
index 0000000000..d14f01517f
--- /dev/null
+++ b/rbutil/rbutilqt/icons/rblogo.xpm
@@ -0,0 +1,254 @@
1/* WxStaticBitmap1_XPM XPM */
2static char * rblogo_xpm[] = {
3"400 123 128 2",
4" c #FFC500",
5". c #DBA500",
6"+ c #C79600",
7"@ c #A1B4C5",
8"# c #798C9C",
9"$ c #8C8F92",
10"% c #6B7176",
11"& c #B38700",
12"* c #876601",
13"= c #B3C3D2",
14"- c #392B00",
15"; c #E7E7E7",
16"> c #EBB200",
17", c #9CB1C4",
18"' c #FFC800",
19") c #8497A9",
20"! c #4A4D4F",
21"~ c #2D2E30",
22"{ c #FEFEFE",
23"] c #CCD8E2",
24"^ c #E3AC00",
25"/ c #745801",
26"( c #BBC9D6",
27"_ c #97ADC1",
28": c #A5B9CA",
29"< c #C7C7C7",
30"[ c #C6D2DD",
31"} c #8AA1B6",
32"| c #493801",
33"1 c #C1CDD9",
34"2 c #654D00",
35"3 c #A37B00",
36"4 c #9A7400",
37"5 c #F4B800",
38"6 c #BECBD8",
39"7 c #5A4401",
40"8 c #AABCCC",
41"9 c #D5D5D5",
42"0 c #B8B8B8",
43"a c #A6A6A6",
44"b c #ACBECD",
45"c c #FFC300",
46"d c #93AABE",
47"e c #000000",
48"f c #FCBE00",
49"g c #98ABBD",
50"h c #A2B6C7",
51"i c #FFD200",
52"j c #FFCC00",
53"k c #AC8200",
54"l c #AFC1D0",
55"m c #EFB500",
56"n c #B2C1CE",
57"o c #757D86",
58"p c #F2F2F2",
59"q c #6E5300",
60"r c #191300",
61"s c #A8BACA",
62"t c #FABD00",
63"u c #D09D01",
64"v c #92A3B4",
65"w c #AEBFCE",
66"x c #171718",
67"y c #DCE0E4",
68"z c #261D00",
69"A c #A8BCCC",
70"B c #B8C6D3",
71"C c #616468",
72"D c #AFBECC",
73"E c #ABB0B5",
74"F c #A1AEB9",
75"G c #BE8F00",
76"H c #AABED0",
77"I c #969DA4",
78"J c #8F6C00",
79"K c #A7BBCD",
80"L c #F7BB00",
81"M c #8FA6BB",
82"N c #9BA9B6",
83"O c #7E5F01",
84"P c #ACBDCB",
85"Q c #54595D",
86"R c #0B0B0C",
87"S c #B7CADA",
88"T c #F9C000",
89"U c #130E00",
90"V c #ABB9C5",
91"W c #A5B7C7",
92"X c #424446",
93"Y c #0C0900",
94"Z c #FCC000",
95"` c #9D7B0F",
96" . c #FFC000",
97".. c #080A10",
98"+. c #FDC200",
99"@. c #B3C6D5",
100"#. c #FFC202",
101"$. c #A7B6C3",
102"%. c #DFE8EF",
103"&. c #9DAFBF",
104"*. c #98A5B0",
105"=. c #FAC500",
106"-. c #ACBBC8",
107";. c #393A3C",
108">. c #232425",
109",. c #1C1D1E",
110"'. c #B7C7D5",
111"). c #ECF4FA",
112"!. c #F7BE05",
113"~. c #070500",
114"{. c #644F0B",
115"]. c #FFC100",
116"^. c #050506",
117"/. c #080909",
118"(. c #101011",
119"_. c #FEBF00",
120":. c #FDC100",
121"<. c #F5BF00",
122"[. c #8A6B0B",
123"}. c #8E6F0D",
124"|. c #FCC003",
125"1. c #FFC102",
126"2. c #B78F0B",
127"3. c #716027",
128"4. c #FEC304",
129"5. c #F7C10D",
130"6. c #977E20",
131"7. c #FBC303",
132"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
133"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
134"e e ~.r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r Y e e ",
135"e e - _. ._._._._._._._._._._._._._.c ]._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.].' ]._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._. J e e ",
136"e e - ].c ].].].].].].].].].].].].].L f ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].c c ].].].].].].].].].].].].].].].].].].].].].].].].]. m 3 > c ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].' J e e ",
137"e e - .]. . . . . . . . . . . .].t | 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .c ' ' ' ' c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .c ' ' ' ' ' ' c . . . . . . . . . . . . . . . . . . . . . . . . . .> m . . . . . . . . . . . . . . . . . . . . . . . . .' 3 e k ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
138"e e - .]. . . . . . . . . . . .c L ~.O ' ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u | 7 * & ^ t j c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . j t ^ . G 3 k k + ^ > j . . . . . . . . . . . . . . . . . . . . . .c t - / ]. . . . . . . . . . . . . . . . . . . . . . . . - z m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
139"e e - .]. . . . . . . . . . . ' T ~.O j ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u - z Y e Y - J > ' . . . . . . . . . . . . . . . . . . . . . . . . . .c ' u O | r e e e e e e ~.z 7 J . c ' ' ]. . .].' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' T z 7 j ' . . . . . . . ' ' ' ' ' ' ' ' ' ' ' ' ' i G e J i ' c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
140"e e - .]. . . . . . . . . .' k 2 q e - / / / / / / / / / / / / / / / / / / / q / ^ c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .]._.L m ^ G / z e U / ^ ' c . . . . . . . . . . . . . . . . . . . . . . . =.G | e e z q 4 G . . u & * | r e e - 4 . ' ' c 5 / / / / / / / / / / / / / / / / q U z / q 4 .]. . . .c 5 J q / / / / / / / / / / / / O - e 7 / q G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
141"e e - .]. . . . . . . . . .j / ~.r e Y r r r r r r r r r r r r r r r r r r r r r u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ' ' j i i T G | e r 4 +.' . . . . . . . . . . . . . . . . . . . .].' ^ 7 e U / u ' i i j ' ' ' j j i =.+ O - e Y 2 + j > e Y r r r r r r r r r r r r r r r ~.Y r Y 7 .c . . . m | U r r r r r r r r r r r r U e r r r U 4 ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
142"e e - .]. . . . . . . . . .].5 m > e / L m m m m m m m m m m m m m m m m m m m m _.].].].]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . j > + J q | | | 7 O & . ' i G - e | ^ ' . . . . . . . . . . . . . . . . . .].' k r e / > j i T u 3 / | | | 7 q J + 5 i +.+ 7 ~.e 7 G e J L m m m m m m m m m m m m m > z 7 5 m 5 . . . . . ._.m m m m m m m m m m m m m _.q e G L m m L ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
143"e e - .]. . . . . . . . . . .c T e O j c c c c c c c c c c c c c c c c c c c . . .c ' ' . . . . . . . . . . . . . . . . . . . . . . . . ' . q z e e e e e e e e e U 7 k +.i T * e r + j ]. . . . . . . . . . . . . . . .c ' * e z + j j 5 4 | Y e e e e e e e e e z 2 + ' i . q ~.~.e 4 j c c c c c c c c c c c T z 2 ' c . . . . . . .c c c c c c c c c c c m r | c c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
144"e e - .]. . . . . . . . . . . .c L e O ' 5 - - - - - - - - - - - - - - - - - - - - - - 7 / 3 + 5 j c . . . . . . . . . . . . . . . . . . . . .' > / Y e e e e e e e e e e e e e e - + j j G r ~.k j . . . . . . . . . . . . . .]. O e | > j ' & z e e e e e e e e e e e e e e e - G j j . | e 4 j + - - - - - - - - - - - G ].z 7 ]. . . . . . . . .' u - - - - - - - - - - - z e 4 j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
145"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e ~.- J L ' . . . . . . . . . . . . . . . . . .].j G z e e e e e e e e e e e e e e e e e Y * j . - e k ' ]. . . . . . . . . . . .].j J e 7 ].j L q e e e e e e e e e e e e e e e e e e e 7 > i 4 & j & e e e e e e e e e e e 3 c z 7 ]. . . . . . . . .' q e e e e e e e e e e e e z m c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
146"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e - u ' ]. . . . . . . . . . . . . . . .].j 3 ~.e e e e e e e e e e e e e e e e e e e e 2 L i > - ~.G ' . . . . . . . . . . .j & e | L j ^ | e e e e e e e e e e e e e e e e e e e e e z + ' ' .' & e e e e e e e e e e e 3 c z 7 ]. . . . . . . .c m r e e e e e e e e e e e e O ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
147"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e U & ' . . . . . . . . . . . . . .].' 3 ~.e e e e e e e e e e e e e e e e e e e e e e 7 <.j . z r . . . . . . . . . . . U z > i ^ - e e e e e e e e e e e e e e e e e e e e e e e Y k ' c ' & e e e e e e e e e e e 3 c z 7 ]. . . . . . . .j 4 e e e e e e e e e e e e Y . ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
148"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e U + ' . . . . . . . . . . . . .j & ~.e e e e e e e e e e e e e e e e e e e e e e e e / ' j + ~.| T c . . . . . . .c T | e + j L | e e e e e e e e e e e e e e e e e e e e e e e e e e J ' & e e e e e e e e e e e 3 c z 7 ]. . . . . . .c t | e e e e e e e e e e e e 7 c c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
149"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e z ^ . . . . . . . . . . . . z e e e e e e e e e e e e e e e e e e e e e e e e e e 4 ' ' J e J ' . . . . . . .' 4 e J j +.2 e e e e e e e e e e e e e e e e e e e e e e e e e e e e 3 j & e e e e e e e e e e e 3 c z 7 ]. . . . . . .' u e e e e e e e e e e e e ~.& ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
150"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e 7 c . . . . . . . . .c +.| e e e e e e e e e e e e e e e e e e e e e e e e e e e r . ' c | Y ^ . . . . . > U - L i 3 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . . . . .' q e e e e e e e e e e e e - c ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
151"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e k ' . . . . . . . . .j 4 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e | .j G e / ' . . . .].' q e G j ^ r e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . . . .c m z e e e e e e e e e e e e 4 ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
152"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e z 5 c . . . . . . . ^ r e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e 3 j | Y . ' . . .' . e 7 j 2 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . . . .j 4 e e e e e e e e e e e e z ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
153"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e 3 ' . . . . . .].' / e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e z > j + e J ' . . .' q e u j + ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . . .c Z | e e e e e e e e e e e e q ' ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
154"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e - c c . . . . . ^ U e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e J j :.- r L ]. . . Y 7 ' 7 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . . .' u ~.e e e e e e e e e e e Y u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
155"e e - .]. . . . . . . . . . . .c L e O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e Y + ' . . . . .' / e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e z 5 j 3 e 3 ' .' O e + i + Y e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . . .' / e e e e e e e e e e e e | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
156"e e - .]. . . . . . . . . . . .c L ~.O ' m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e * ' ]. . . . ^ z e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e 3 j m r | m z - ' ' 2 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . .c m z e e e e e e e e e e e e k ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
157"e e - .]. . . . . . . . . . . .].f 4 + m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e - t c . . .' 4 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e | _.j q e u j & e k i . U e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . .j 3 e e e e e e e e e e e e - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
158"e e - .]. . . . . . . . . . . . . .' c m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ~.^ . .c t - e e e e e e e e e e e e e e e e e ~.e e e e e e e e e e e e e e e e e ~.+ i u e J i 7 U ^ j J e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . .c c 7 e e e e e e e e e e e e * j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
159"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e & ' . . u e e e e e e e e e e e e e e e Y 7 k u G O z e e e e e e e e e e e e e e e O ' t - z > U 2 ' - e e e e e e e e e e e e e e e e ~.- 2 O 2 - ~.e e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . . u ~.e e e e e e e e e e e U ^ c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
160"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e r - - - - - - - U e e e e e e e e e e e e e e e e * ' . .j O e e e e e e e e e e e e e e - + ' i i j j > 2 e e e e e e e e e e e e e e z f j O Y / ~.k i + Y e e e e e e e e e e e e e e e - G L j j j T + | e e e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . .' O e e e e e e e e e e e e q ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
161"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e 2 i L & - e e e e e e e e e e e e e e 2 j .c _.- e e e e e e e e e e e e e - ^ j Z + & ^ ' ' ' O e e e e e e e e e e e e e ~.+ j + U e r > j * e e e e e e e e e e e e e e e O +.' c .c ' :.* ~.e e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. .c 5 z e e e e e e e e e e e ~.+ ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
162"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e | + G G G G G . 5 i <.2 e e e e e e e e e e e e e | j .' u U e e e e e e e e e e e e r u ' c L - e U * T ' 7 e e e e e e e e e e e e e / j ].- e | j t | e e e e e e e e e e e e e e O ' c ' m > . . .c ' 3 ~.e e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. .j k e e e e e e e e e e e e | ].c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
163"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e e e e e e e e e z 3 j L - e e e e e e e e e e e e - L c j 4 e e e e e e e e e e e e e J j .c L z - | e | L j . r e e e e e e e e e e e e | _.j q e * j ^ Y e e e e e e e e e e e e e 7 c L O Y 7 c c . .].j 3 ~.e e e e e q j & e e e e e e e e e e e 3 c z 7 ].c c 7 e e e e e e e e e e e e & i ' ' ' ' ' ' ' ' ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
164"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e | u + + + + G 4 z e 3 i k e e e e e e e e e e e e - 5 c 2 e e e e e e e e e e e e - L c .c L z 2 ' O e / ' ' O e e e e e e e e e e e e r . j + | u j & e e e e e e e e e e e e e z . > | e 7 + ].]. . . .].' J e e e e e q j & e e e e e e e e e e e 3 c z 7 ]. . ~.e e e e e e e e e e e Y O [.[.* * * * * * * * 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
165"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e 2 i ' ' ' ' ' j m z r ^ - e e e e e e e e e e e z . ' 5 z e e e e e e e e e e e e k ' . .c L z 7 ' ' 7 e G j ^ r e e e e e e e e e e e e & ' c ' c ' q e e e e e e e e e e e e e J j c | e 3 ' . . . . . .c 7 e e e e q j & e e e e e e e e e e e 3 c z 7 .' O e e e e e e e e e e e e e e e e e e e e e e e e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
166"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e 2 ' . . . . ._.' & e 4 i q e e e e e e e e e e e r . j u e e e e e e e e e e e e z m c . .c L z 7 ' ^ U | ].j 2 e e e e e e e e e e e e O . . . - e e e e e e e e e e e e z t ].' 4 e * j ]. . . . . . . . . > z e e e q j & e e e e e e e e e e e 3 c z 7 c t z e e e e e e e e e e e R Q C C C C C C C C C Q e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
167"e e - .]. . . ._. ' ' ' c . . . . .c m ~.e e e e e e e e e e 2 ' . . . . . .c 5 r 7 j 4 e e e e e e e e e e e r . j 3 e e e e e e e e e e e e / ' ]. . .c L z 7 .j / e u i + e e e e e e e e e e e e | ]. . ^ r e e e e e e e e e e e e 4 ' > r - <. . . . . . . . . . .' & e e e q j & e e e e e e e e e e e 3 c z 7 j & e e e e e e e e e e e e X [ 6 ( ( ( 6 6 1 6 [ $.e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
168"e e - .]. . . . . q | O + ].c . . . .c m ~.e e e e e e e e e e 2 ' . . . . . .c .| z ' G e e e e e e e e e e e r . i q e e e e e e e e e e e ~.G ' . . .c L z 7 ]. . e O j m z e e e e e e e e e e e r L ]. .' G Y e e e e e e e e e e e r . ' j 4 e k ' . . . . . . . . . . .].' / e e q j & e e e e e e e e e e e 3 c z 7 c 7 e e e e e e e e e e e e ) S = = = = = = @.= S F e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
169"e e - .]. . . .j O e e e ~.7 . c f . .c m ~.e e e e e e e e e e 2 ' . . . . . .]. q Y ' ^ e e e e e e e e e e e r . i | e e e e e e e e e e e z m c . . .c L z 7 ].c f | z .' q e e e e e e e e e e e Y . .j J e e e e e e e e e e e e 7 ' c t - z .]. . . . . . . . . . . . . > z e q j & e e e e e e e e e e e 3 c z 7 ' . Y e e e e e e e e e e e >., , , , , , , , , , h ) e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
170"e e - .]. . . .j O e z z e e r & t t _.c m ~.e e e e e e e e e e 2 ' . . . . . .].' / ~.f ^ e e e e e e e e e e e r ^ t - e e e e e e e e e e e 7 j . . . .c L z 7 ]. .j J e + i 3 e e e e e e e e e e e e k ' ].' / e e e e e e e e e e e e 3 ' u e * ' . . . . . . . . . . . . . .' k e q j & e e e e e e e e e e e 3 c z 7 i * e e e e e e e e e e e e % H , , @ @ , @ , , , : v e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
171"e e - .]. . . .j O e 2 & 7 Y e U k m L c m ~.e e e e e e e e e e 2 ' . . . . . . .j 4 e . ^ e e e e e e e e e e e r ^ . U e e e e e e e e e e e * ' . . . .c L z 7 ]. .' + ~.* i . U e e e e e e e e e e e * j c t | e e e e e e e e e e e Y ^ c ' O e + ' . . . . . . . . . . . . . .].T G . ' & e e e e e e e e e e e 3 c z 2 .- e e e e e e e e e e e ,.*.b : : : s s s W : : H N e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
172"e e - .]. . . .j O e r * J 2 Y e r G > t > ~.e e e e e e e e e e 2 ' . . . . . . .j J e > ^ e e e e e e e e e e e z m + e e e e e e e e e e e e + . . . .c L z 7 ]. .c t r 7 c z e e e e e e e e e e e 2 j m z e e e e e e e e e e e - :.c ' - - 5 . . . . . . . . . . . . . . .].' ' & e e e e e e e e e e e 3 c z q G e e e e e e e e e e e e Q l s s s s : 8 s s s : H N e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
173"e e - .]. . . .' k ~.e | * * 7 e e 7 u > ^ ~.e e e e e e e e e e 2 ' . . . . . .]. q Y ' ^ e e e e e e e e e e e - k e e e e e e e e e e e ~.^ . . . .c L z 7 ]. . .' | z m ' | e e e e e e e e e e e | ].' ^ Y e e e e e e e e e e e / ^ U 2 j . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 c z 2 2 e e e e e e e e e e e e *.A : : : s : : s s s W H *.e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
174"e e - .]. . . . .t 7 e Y / 4 3 z e U 4 . . ~.e e e e e e e e e e 2 ' . . . . . .]. q Y u e e e e e e e e e e e - J e e e e e e e e e e e z m . . . .c L z 7 ]. . .' O ~.^ j * e e e e e e e e e e e - m ' u e e e e e e e e e e e e k j ' & e 4 ' . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 c z - U e e e e e e e e e e e e N : @ W h h h @ @ @ W h K v e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
175"e e - .]. . . . .t + r e - 3 G q e e 7 + u ~.e e e e e e e e e e 2 ' . . . . . .c .| z ' & e e e e e e e e e e e | i q e e e e e e e e e e e 7 _.c . . . .c L z 7 ]. . .' k e + i k e e e e e e e e e e e z ^ j & e e e e e e e e e e e ~.+ ' j J e u . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 c - e e e e e e e e e e e e e e v , d _ _ _ _ _ _ &., &.h ) e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
176"e e - .]. . . . .L m * e e O + 4 ~.e - 3 G ~.e e e e e e e e e e 2 ' . . . . . .c 5 r 7 j J e e e e e e e e e e e 7 j 7 e e e e e e e e e e e q ]. . . . .c L z 7 ]. . .' u e 3 i u e e e e e e e e e e e U . i 4 e e e e e e e e e e e z ^ ' 2 Y f ]. . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 c - e e e e e e e e e e e e e e F @.l l l l l l l = l l @.N e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
177"e e - .]. . . . .f m . - e z & 3 U e z 4 k ~.e e e e e e e e e e 2 ' . . . . . .' G e 3 i 7 e e e e e e e e e e e * ' - e e e e e e e e e e e * j . . . . .c L z 7 ]. . . ^ ~.* j . Y e e e e e e e e e e e u i * e e e e e e e e e e e - L f | - c . . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 c - e e e e e e e e e e e ~.7 e F = w w l l l l l = l w @.F e - ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
178"e e - .]. . . . . .L m 3 e e / J e e z J 4 ~.e e e e e e e e e e 2 ' . . . . .c j 7 U ^ L z e e e e e e e e e e e k - e e e e e e e e e e e 3 j . . . . .c L z 7 ]. . . > z 2 j ^ z e e e e e e e e e e e G i q e e e e e e e e e e e | j c 5 r 2 . . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 - e e e e e e e e e e e z k e F l 8 8 8 8 8 8 8 b 8 8 l *.e - ' . . ' ' ' ' ' ' ' ' ' ' ' ' ' c . . . . . . . . . . . . . . . . . . . . . . . . . . . . .c ' ' ' ' ' ' ' ' ' ' ' ' ' ]. .].c c c c c c c c c c c c c c c c c c c ]. . . . . . . . . . . .].c c c c c c c c c c c c c c c c c c c c ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
179"e e - .]. . . . . ._.5 . | e z 7 e e - * 4 ~.e e e e e e e e e e 2 ' ]. ' ' j j 3 e / i 3 e e e e e e e e e e e e u f r e e e e e e e e e e e k ' . . . . .c L z 7 ]. . .c 5 - | j m - e e e e e e e e e e e & i 2 e e e e e e e e e e e 2 j c > e * ' . . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e 3 m U e e e e e e e e e e e O + e F = w w w w w w w w w b '.N e - ' ' j 5 . k * 7 | z z z z | 7 * & ^ t ' . . . . . . . . . . . . . . . . . . . . . . . . . j t ^ G J 2 | z z z z - 7 O 4 u > ' ' .c c #.#.#.#.#.#.#.#.#.#.c c c c c #.c c . . . . . . . . . . c #.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.1._. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
180"e e - .]. . . . . . .f 5 k ~.e Y e e | * J ~.e e e e e e e e e e 2 j t + G 3 J 7 e - m T - e e e e e e e e e e e r L L Y e e e e e e e e e e Y + ' . . . . .c L z 7 ]. . .c _.| z ' _.| e e e e e e e e e e e 4 i | e e e e e e e e e e e O j . e k ' . . . . . . . . . . . . . . . . . . . .' & e e e e e e e e e e e k 4 e e e e e e e e e e e Y u + e F = w w w w w w w w l b = F e - j + / - e e e e e e e e e e e e e Y | * . ' ' c . . . . . . . . . . . . . . . . . . .c ' ' . * | Y e e e e e e e e e e e e e z 2 k J 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 2 ^ . . . . . . . .' 4 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
181"e e - .]. . . . . . ._.L ^ | e e e Y 2 * J ~.e e e e e e e e e e 2 j > - e ~.~.U 2 ^ i J e e e e e e e e e e e e | ].5 Y e e e e e e e e e e U + ' . . . . .c L z 7 ]. . .c c 7 z j _.| e e e e e e e e e e e 4 i - e e e e e e e e e e e 4 ' G e G ' . . . .]. ]. . . . . . . . . . . . . .' & e e e e e e e e e e e 4 | e e e e e e e e e e e | i G e F @.l w w w l l n l w w = F e r 7 ~.e ^.>.~ % # o # # # ) ) # C ~ ,.^.e Y 7 + =.' . . . . . . . . . . . . . . . . .' t & 7 Y e e ,.~ C $ I I *.*.*.I ) o X >...e e ~.e e e e e e e e e e e e e e e e e e e e {.' ]. . . . . . .' u U e e e e e e e e e e e e e e e e e e e 7 f c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
182"e e - .]. . . . . . . .f L 3 e e e z q O 4 ~.e e e e e e e e e e 2 j ^ z 7 G u 5 i j & U e e e e e e e e e e e e * j u ~.e e e e e e e e e e r ^ . . . . .c L z 7 ]. . .]. 7 r _.' 2 e e e e e e e e e e e * i - e e e e e e e e e e e 3 ' ' 3 ~.u ' . . .].L . 5 ]. . . . . . . . . . . . .' & e e e e e e e e e e ~.7 Y e e e e e e e e e e e k i G e F @.= w 8 b w w l l w b @.N e e e x C ) l @.@., # ) , d , d d _ h F % Q (.e ~.7 u ' c . . . . . . . . . . . . . G - e e (.Q # -.S l 1 H h @.S 1 = H : [ ( I o ;.e e e /.% % % % % % o % % % % % % o o o x e 2.' . . . . .c +.| e X o % % % % % % % % % % % o C % ! e r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
183"e e - .]. . . . . . . ._.f u z e e | 2 * 3 ~.e e e e e e e e e e 2 i m z 3 i c m + q ~.e e e e e e e e e e e e Y + j + ~.e e e e e e e e e e z > c . . . . .c L z 7 ]. . . .j O Y > i q e e e e e e e e e e e q z e e e e e e e e e e e k ' ' 4 ~.u ' . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e U e e e e e e e e e e e - 5 j G e F = l n b b w b b b b H @.N e x % $.S @.A -.w g o ) d M d M M d , &.} S $.% ,.e Y O L ' . . . . . . . . . .].' > 2 ~.e >.% F = @.8 8 8 b s @ 8 b b P s h @.l @.y N N Q (.e $ %.] ] ] ] ] ] ] ] ] ] [ %.%.).C e - !.c . . . .j 3 e >.( %.] ] ] y ] ] ] ] ] [ ] %.@.1 ~ e J ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
184"e e - .]. . . . . . . . . G e e e | 2 J & ~.e e e e e e e e e e z 2 7 Y - 7 - z ~.e e e e e e e e e e e e e e - .' u ~.e e e e e e e e e e z > c . . . . .c L z 7 ]. . . .j O Y > i q e e e e e e e e e e e / 5 z e e e e e e e e e e ~.+ ' * r . . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e J ' ' G e F = w l l l l = b b b b @.*.~ F S w 8 w s -.w g o ) d M _ } M M &.N ) = 1 ] @ Q ^.e | . ' . . . . . . . .c ' G z e /.% P @.H A s s s 8 : l : s 8 8 : W @ l w n 1 M S ).E ;.x V [ 6 1 1 1 1 1 ( ( ( B [ ] ] n ~ e }.j . . . > z e # ] 1 ( 6 6 [ 6 ( ( 6 6 = 1 [ l % e - <. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
185"e e - .]. . . . . . . . . / e e e z / 3 G ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e J ' u ~.e e e e e e e e e e z > . . . . .c L z 7 ]. . . .j O Y > i q e e e e e e e e e e e / 5 z e e e e e e e e e e e + ' 2 z > . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e & j ' G e F = b b l l l B l w w b b B $.= b 8 8 w 8 s b g o ) M M @ M M M _ N ) = 1 1 H S ) >.e r + ' . . . . . .c J ~.e X F @.H b A A A A A A h = A 8 w = s : @ s 8 w [ v = %.] [ o % [ ( 6 6 1 6 1 ( 6 ( = [ ] ] '.$ e r . ' .]. q e X B [ 6 '.( 6 1 6 ( ( 6 6 = 1 ] I /.~.+ ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
186"e e - .]. . . . . . . .].t z e e e Y 2 k + ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e Y ^ u ~.e e e e e e e e e e z > c . .]. ' T z 2 ' ' i O Y m i / e e e e e e e e e e e / <.z e e e e e e e e e e e u j i q z > j j u e & j . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e q j G e F l 8 b l l l n n l w b 8 ( K K w 8 A b b D w g o ) d } , } M _ _ N ) = 6 1 s P l V X e R & j . . . . / e ^.C = l A A b A A A A A A : s h b w w 8 l K h W 8 [ v @.y 1 1 ] E n 1 6 6 1 1 1 ( 1 1 B [ ] ] n 6 ! e 7 .' + e (.N @.1 1 ( ( ( 1 ( '.( 6 6 = [ y ;.e q ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
187"e e - .]. . . . . . . .' G ~.e U U e | k + ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e / ' ]. u ~.e e e e e e e e e e - ' . .].L . . . u z | . . . . . > 2 Y + > 7 e e e e e e e e e e e 2 u r e e e e e e e e e e e k ^ ^ 7 r + . . . . ^ & e 4 ^ . . . ^ _. . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e r > j G e F = b 8 l l l = w n l l w ( : A 8 8 8 b A P w g o ) d M _ M M M _ N ) l 6 6 8 w h @.@.Q e U u ' . .c c q e (.# S b 8 b A A A A A 8 K : = s , A b w : = = 8 W s [ v @.%.1 6 1 [ 1 6 6 1 1 6 6 ( 6 1 6 ] ] [ n = V x e & j L - e % 6 n [ 1 ( ( ( ( ( ( ( ( ( = ] $ e z > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
188"e e - .]. . . . . . . .j O e e | - e U 4 G ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e r . ' . u ~.e e e e e e e e e e - ' . . . r U U U e ~.U U U U U U Y e U U ~.e e e e e e e e e e e ~.U e e e e e e e e e e e e U U U ~.e U U U U U U U e Y U U U Y - L c . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e k i G e F = b 8 l l l = w w w l n ( : 8 b 8 8 w A -.b g o # M M _ M M M _ N ) l 1 1 s w h w w @.Q e r . ' ].' O e (.$ @.8 8 8 b A A A A K 8 8 : l w h s 8 8 h : b n s 8 [ v = %.1 6 1 1 1 6 6 6 1 6 ( '.'.( ( [ ] ] n D ] o e - T J e ;.n D = [ 1 ( ( 6 '.( ( ( 6 ( '.n ,.e k ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
189"e e - .]. . . . . . .c _.| e ~./ 7 e e q k ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e O j . . u ~.e e e e e e e e e e - ' . .c > * O * O U - * * * * * J - ~./ J - e e e e e e e e e e e - O U e e e e e e e e e e e 2 * * - U / * * * * * q e 7 * * * O 4 t ]. . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e | i G e F = w b l l l = w w w w w 6 W A w 8 A b b P w d o # } } d M M M _ N ) = 6 6 8 w h w P H @.! e | !.j 3 e (.$ S 8 8 8 s b K A A A b s K K : w : A b l s : h b 8 w [ v = %.1 6 [ 1 6 6 6 6 1 1 1 '.( ( '.[ ] ] D D ( y X e 2 r e E [ -.D [ 1 ( ( ( ( ( ( ( 6 ( 1 Q e 7 ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
190"e e - .]. . . . . . . ^ r e z O q z e - 3 ~.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e - m c . . u ~.e e e e e e e e e e z 5 c . .c j j j =.z 2 i j j j j i O Y m i / e e e e e e e e e e e / T z e e e e e e e e e e e u i i q z m i j j j i . e G i j j j ' . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e U . + e F = w b w l l = w l w b b 6 W A w 8 8 b 8 P l d o # } } M M M M _ N ) = 6 6 8 w h w b K l -.~ e O . U e o S b 8 s 8 P 8 K : A A 8 8 A K h = : K b l 8 W @ b 8 w [ v = %.1 6 1 6 6 6 6 6 1 1 1 B ( ( B [ ] ] n D = %.E e e e Q %.1 D D [ 1 6 ( ( 6 ( 6 ( 6 [ ) e U . ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
191"e e - .]. . . . . . .' G e e | * O 7 e Y O Y e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ~.G ' . . . u ~.e e e e e e e e e e z > . . . . .c L z 7 ]. . . .j O Y > i q e e e e e e e e e e e / 5 z e e e e e e e e e e e + ' 2 z ^ . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e e J u e F = w H l l l l w l w b b 1 : K b 8 8 w : s l g o # d M M d M M _ N ) l 1 1 8 w h w b A s S I /.U z e Q @.b b 8 8 8 8 b K : A A A b 8 K h w : s b l b A @ 8 s b [ v = %.1 6 1 6 6 6 6 1 1 1 1 6 6 6 B [ ] ] n n B y ] Q e ,.-.%.1 n D [ 6 6 ( ( ( ( 6 ( 1 6 ~ e [.j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
192"e e - .]. . . . . . .' J e e 2 * J J r e | Y e e e e e e e e e e e e e e e e e e e e e e e e e e e e e * ' . . . . u ~.e e e e e e e e e e z > c . . . . .c L z 7 ]. . . .j O Y > i q e e e e e e e e e e e / 5 z e e e e e e e e e e ~.+ ' q r ^ . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e e - & e F = b b l l l = w w w b b ( : 8 l 8 K l 8 s b g o ) d _ } d M M &.v ) l 6 1 8 w h w P b 8 8 S C e e >.W H b b s b 8 s b K : A A A A 8 8 K b h b b b : l b : s b [ v = %.1 6 1 6 6 6 6 1 1 6 1 ( ( ( B [ ] ] D D ( y ] $.,.o [ y 1 D D 1 1 ( ( ( ( ( ( ( [ % e - !.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
193"e e - .]. . . . . . . 7 e U O * 4 G | e U e e e e e e e e e e e e e e e e e e e e e e e e e e e e e 7 +.c . . . . + ~.e e e e e e e e e e z > c . . . . .c L z 7 ]. . . .j O Y ^ i q e e e e e e e e e e e q t z e e e e e e e e e e e G ' 4 Y u ' . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e e ~./ e F = b b l w b = w w w b b 6 W 8 8 l b 8 w D w g o } , _ M M M } d ) ) l 6 1 8 w : w b 8 b 8 l -.>.e $ @.8 b b b b b 8 8 A : : : : : s 8 K H H = @.@.H l l : W 8 6 v = %.[ 1 1 6 1 1 ( 1 1 6 1 6 ( ( B [ [ [ -.D = y [ B $ B [ y 1 D D 1 [ 6 ( ( ( 6 ( 1 E (.e 2.' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
194"e e - .]. . . . . . .c z e z J * 3 u 3 e e U Y U Y e e e e e e e e e e e e e e e e e e e e e e e e z 5 . . . . . u ~.e e e e e e e e e e z > . . . . . ._.. ^ ]. . . .].' 2 U 5 j 2 e e e e e e e e e e e O i - e e e e e e e e e e e 3 ' ' 4 ~.u ' . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e e e r e F @.w b l = l = w w w b s 1 W P W w @.h b @.'.) C o # o ) , d ) } ) ) l ( ( s b : w b K w w w S % ;.l K 8 8 K b 8 8 8 A 8 K K K 8 8 A l S W ) ) ) ) v l S : W 8 1 v = y [ 1 1 ( 1 [ ( ( 1 6 ( [ 6 6 B [ ] y D n b ] ] 1 w = [ y [ n D 6 1 1 1 6 B 6 1 1 X e {.' ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
195"e e - .]. . . . . .c > r e - J J & . > z e 4 + u + 4 - e e e e e e e e e e e e e e e e e e e e e e U u ' . . . . .c > Y e e e e e e e e e e U u . . . . . . . . . . .c c 7 z j .| e e e e e e e e e e e 4 i - e e e e e e e e e e e 3 ' ' & e + ' . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e e e e e F = b b b b b = b b b w w B s s 8 8 b @.D % X x e e e e >.X o M d v ) = 1 [ W 8 s w b K b b 8 l $.V b s s 8 b 8 8 8 b b K A A : s l @.$ ! ~ e e e e (.X C &.l b 1 v = ] 1 1 [ 1 ( [ 6 6 1 6 6 1 ( 6 B 1 [ y = = B ] [ B D = [ y 1 = D ( 6 6 6 ( ( 6 [ $ e x > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
196"e e - .]. . . . . . + Y e - J J + > 4 Y ~.u i i i j L O e e e e e e e e e e e e e e e e e e e e e e O ' ]. . . . .c 5 Y e e e e e e e e e e U u ' . . . . . . . . . . . . .c ].| z ' _.| e e e e e e e e e e e 4 i - e e e e e e e e e e e * ' + e & ' . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e e e e e e e e e e e e e e e e F = l w b b b l b b b w w n b A b w l o ,.e e r - | | - Y e ^.~ # g ) = 1 [ : s s w b K w w 8 b b l 8 8 8 8 8 8 8 8 8 l : : A A @.*.;.^.e ~.z | | | z e e (.% D ] v = y 1 1 1 6 6 1 6 1 [ ( '.6 [ 1 ( ( 1 ] B ( [ 1 6 6 6 ( 6 1 1 6 1 [ ( 6 6 6 B [ n >.e ` ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
197"e e - .]. . . . . .' k e e | * 4 u / e e ~.u + 2 J m ' ' / e e e e e e e e e e e e e e e e e e e e e z m . . . .c 5 U e e e e e e e e e e ~.& ' . . . . . . . . . . . . .c 5 - | j m - e e e e e e e e e e e k i 7 e e e e e e e e e e e / j > e 4 ' . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e Y Y e e e e e e e e e e e e e F = l w b b b l w w w b w B l = @.$.! e e | k ^ ' ^ 4 3 k }.z e ^.% } = 6 1 8 8 : w b K b w b b s w 8 8 8 b b b 8 8 8 l 8 s 8 S o (.e r * u T m 3 3 3 k 2 ~.e ;.( g = y 1 6 6 6 6 1 6 6 [ ( '.6 6 1 6 ( ( 1 '.B [ B B ( 6 1 ( ( 6 6 1 1 6 6 ( ( '.[ C e | 4.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
198"e e - .]. . . . . .' 4 e e - * k / e e z z u & e e - m ' > z e e e e e e e e e e e e e e e e e e e e e k ' . . . .c t - e e e e e e e e e e e k j . . . . . . . . . . . . . m z 7 j > z e e e e e e e e e e e G i 7 e e e e e e e e e e e 7 i c m Y / . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e e q | e e e e e e e e e e e e e ) @.l l w w w w w w w P : '.s [ @ ;.e x & j . 4 J q O + O e e % 1 '.( b b : w b s 8 b w b s 8 8 8 8 8 8 8 b 8 8 K 8 b @.% e e q m ' ' > 4 4 * q 3 & - e >.v S y [ 1 1 1 6 [ ( 6 [ 6 ( 1 6 1 1 1 1 1 6 6 1 B ( 1 6 6 1 6 6 6 1 1 1 1 6 ( [ *.e Y u ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
199"e e - .]. . . . . .j J e e - J * U e | k q + 5 r e e J ' j * e e e e e e e e e e e e e e e e e e e e e | ' . . . .c f - e e e e e e e e e e e J j . . . . . . . . . . . . . ^ Y O j . U e e e e e e e e e e e + i / e e e e e e e e e e e | c L - | . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e ~.u 3 e e e e e e e e e e e e e ! S l l l l l l l l l l w = : [ ! e ~ u j c . . u q 2 4 4 7 & 4 e ^.) [ ( s P K b 8 8 8 8 b 8 A 8 8 8 8 s s s 8 8 8 8 K @.$ e e J ' . . . * q O k * q u | e ~ ( y 1 1 1 1 6 [ 6 6 [ 6 ( 1 6 6 6 1 1 [ 1 6 6 1 1 1 ( 6 1 1 1 6 6 1 1 1 1 1 ( ~ e * ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
200"e e - .]. . . . . .j / e e r J 2 e 7 + 3 O u ' q e e - c ' G Y e z O q U | 2 e e e e e e e e e e e e e U u ' . . .].].7 e e e e e e e e e e e O ' ]. . . . . . . . . . . . . . e 4 i u e e e e e e e e e e e Y u i * e e e e e e e e e e e z > ].7 z . . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e z > U e e e e e e e e e e e e ,.g H h h h h : h h h W 8 l l o e x . j . . . . ._.5 . * 7 k 2 & 4 e >.n 1 : s b s 8 8 8 8 b 8 s 8 8 8 8 8 s s s s s 8 H @ >.e * ' c . . . ._.L m G q O 3 2 u - e o %.1 6 6 ( ( 1 ( 6 1 B = '.B '.= B @.B = n l = B B n = B B B B = = = B = 1 % e - m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
201"e e - .]. . . . . .j / e e U / J * G & 4 O J i & e e r > ^ r e 7 i m z 4 ' r e e e e e e e e e e e e e * ' ]. . .]. q e e e e e e e e e e e 7 ].c . . . . . . . . . . . .' G e G i & e e e e e e e e e e e z ^ j 3 e e e e e e e e e e e U u ' ' O e ^ c . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e e ~.u ' 2 e e e e e e e e e e e e e % @.s : : : s W W W h h b P ,.e 6.j . . . . . . .c c j + | & 7 u | e o ] W W w s s 8 8 8 s 8 : s s s s b s s s s s 8 l % e | T . . . . . .].c J q 3 / G e ,.6 [ 6 1 6 B 1 ( 6 [ = l B B F ( B B 6 B ( = B = B = = n B B B B B = B 6 E (.e 2.' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
202"e e - .]. . . . . .' J e e e 7 4 G G k 3 J | .5 z e U . ' ^ r e 7 .^ z J j / e e e e e e e e e e e e e z 5 c . . .' * e e e e e e e e e e e - 5 c . . . . . . . . . . . .' J e . j J e e e e e e e e e e e - m j G e e e e e e e e e e e e & j j 3 e & ' . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e Y e / i & e e e e e e e e e e e e e ;.8 s s s s w s s s W , @.o e | 5.c . . . . . . . . . .j + 7 3 / G e >.1 b s : b 8 : s 8 b s : s s s : s s 8 s s s b s x e G ' . . . . . . . . . .c j * J q & 7 e $ ] 1 6 6 B 1 6 1 y ( = B B $ I 1 B ( ( B n 1 ( D B 6 = n B B 1 B n B 1 X e 2 ' ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
203"e e - .]. . . . . .' 4 e e e - J k G G + G Y + i 7 e z t ' + Y e | t ^ z J i G e e e e e e e e e e e e e e G ' . . .j 3 e e e e e e e e e e e Y ^ . . . . . . . . . . . .' 7 z > j 7 e e e e e e e e e e e | .' . e e e e e e e e e e e e J ' ' u ~.O j . .' u e & ' . . . . . . . . . . . .' & e e e e e e e e e e e O | z L L z e e e e e e e e e e e e ^.v b @ W W W $.@ W $.8 l ! e 4 j . . . . . . . . . . . .j * J 2 + | e $ 6 = b l w w w w l l l w w l l w w l b w l @.I e >.!.c . . . . . . . . . . .].L 2 3 / & e ;.'.1 ( '.'.'.'.( 1 = l = S # ;.'.= = '.@.l n P s b @.= = = = = = n 6 # e r ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
204"e e - .]. . . . . . + Y e e Y O k + . > . e O j & e 7 ' j * e e | L ^ z J j t - e e e e e e e e e e e e e 7 ' . . .' G e e e e e e e e e e e e + . . . . . . . . . . .].c z | ]. - e e e e e e e e e e e 2 j ^ U e e e e e e e e e e e | c c .z | c c .' u e & ' . . . . . . . . . . ' & e e e e e e e e e e e & 3 e G i / e e e e e e e e e e e e e Q H g &.&.g &.g &.g , $.>.Y u ' . . . . . . . . . . . . . q J k O e % @.h : h h h h h h h h : h h h h h h h h h H Q e 3.' ]. . . . . . . . . . . . .' 4 J / u U /.D ( B B B B B ( 1 n l = 6 ) e o 1 l n = = B D D D n n B n n n = B B ,.e 3 j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
205"e e - .]. . . . . .].5 z e e e | k u > t > e z c ^ - u j > z e e | t ^ z J ' ' * e e e e e e e e e e e e e r . . .' u U e e e e e e e e e e e J ' . . . . . . . . . . . u ~.O i ^ r e e e e e e e e e e e * j c 5 - e e e e e e e e e e e U 5 c j 2 Y ^ .' u e & ' . . . . . . . . .+.^ > ' & e e e e e e e e e e e 3 > e q j u e e e e e e e e e e e e e >.h l b l s l P D B ] F e z m c . . . . . . . . . . . . .c 2 3 3 ` e Q : , , _ _ _ _ _ _ &.g d _ _ _ _ _ _ _ _ _ h X e 3 j . . . . . . . . . . . . .' G O * G - e I v ) v v v } v &.} ) } v o e ,.) } } } ) ) # # # # # # # # # # ) ! e | f c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
206"e e - .]. . . . . . .].O e e e ~.7 + m m ~.~.G _.^ ' 2 e e e 7 _.^ z J ' . Y e e e e e e e e e e e e e J j . . > z e e e e e e e e e e e 7 j . . . . . . . . . . .j 3 e & i k e e e e e e e e e e e e 3 ' c .7 e e e e e e e e e e e e & ' & e & ' .' u e & ' . . . . . . . . . ~.q j & e e e e e e e e e e e 3 j 7 U t :.| e e e e e e e e e e e e e # @.b w 8 = l n 1 y E e - j . . . . . . . . . . . . . . O 4 3 ` e ! P W W @ @ @ @ @ @ h @ , @ @ @ @ @ @ @ @ @ H X e 2.' . . . . . . . . . . . . .' + * 4 k | e ) g d g g d M g $.v v v g o e e C , N v } v # # # ) ) ) ) # # ) o (.e 2.j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
207"e e - .]. . . . . . . .u z e e e e z * u u z 2 u ' 5 q e e e e 7 ^ z J ' ].c 7 e e e e e e e e e e e e e - L c .].' | e e e e e e e e e e e z 5 c . . . . . . . . .c 7 U 5 j / e e e e e e e e e e e Y u .j O e e e e e e e e e e e e q j > U | .' u e & ' . . . . . . .c c | e q j & e e e e e e e e e e e 3 i 3 e k i 4 e e e e e e e e e e e e e ! @.n = 8 B = = 6 [ 0 e z f c . . . . . . . . . . . . .c 2 3 3 3 e Q l W h h h h h h h @ h h @ @ @ h h @ @ @ @ H X e k j . . . . . . . . . . . . .' G O * G - e F = w P P s W D [ s @ W H # e /.# l P W , W v v d &.V @ &.g d &.$.! e 7 c c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
208"e e - .]. . . . . . .f 5 3 U e e e e e e U + i ' c > | e e e e e 7 ' ^ z J ' .j k e e e e e e e e e e e e e e + ' . .j 2 e e e e e e e e e e e ~.G ' . . . . . . . . . ^ ~.2 j 5 - e e e e e e e e e e e r L c .j 3 e e e e e e e e e e e e - m ' q e . ' u e & ' . . . . . . .j k e e q j & e e e e e e e e e e e 3 j ^ U 7 j ^ r e e e e e e e e e e e e R &.@.= 8 B = l '.1 -.x U . . . . . . . . . . . . . ^ q J k J e C l W W @ @ h @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ l X e J ' . . . . . . . . . . . . .' 4 J / . r ^.&.b b h : s h 8 1 W , @ H # e Q = h s @ _ , ) } } M _ , _ _ d _ W } x e & ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
209"e e - .]. . . . . . . .5 ^ 3 - Y ~.e e ~.U k G * ^ f z e e e e e 7 j ^ z J ' . > z e e e e e e e e e e e e e 2 ' . .' 3 e e e e e e e e e e e e O ' ]. . . . .j ' . .j O e + j u e e e e e e e e e e e e | c ]. .' + Y e e e e e e e e e e e e & ' ' + e q ' ' u e & ' . . . . . . > z e e q j & e e e e e e e e e e e 3 ' j 7 U ^ i 7 e e e e e e e e e e e e e % 6 = s ( '.l 6 [ [ ! e k j . . . . . . . . . . . .j * J 2 u 7 e o = &.8 h h h h h h h h @ @ @ @ W @ , @ @ @ : o e | +.]. . . . . . . . . . . .].L 2 3 q u e >.@ @ s s W h h s 6 W , h H # x &.: h 8 h , , } } } M _ , , _ d _ s h % e z m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ._._. ._. . . ._.f _.' J e e ",
210"e e - .]. . . . . . . .t > u k / 7 | | 2 / Y e e k i 2 e e e e e 2 j ^ z J ' . .j 2 e e e e e e e e e e e e e r . . u e e e e e e e e e e e e z 5 c . .].t O 3 c ' ^ Y 7 j / e e e e e e e e e e e e O . .c L z e e e e e e e e e e e e | ].' 7 e + i u e & ' . . . . .c ' 2 e e e q j & e e e e e e e e e e e 3 ' ' & e k i G e e e e e e e e e e e e e ~ = '.: '.( b ( ] ] C e 7 c . . . . . . . . . .j + 7 3 / . ~.>.g 8 = d @ @ @ @ @ @ @ @ W @ @ @ @ @ @ @ @ @ , @ R ~.. . . . . . . . . . .c j * * q & / e % S n : h s W h 8 1 h , W K o % l W @ s h , , } M } d _ _ _ , _ d : , , ~ e O ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .f t L f L .t L L 5 t ' * e e ",
211"e e - .]. . . . . . . ._.5 ^ + 3 J O O * O ~.e e 2 j & e e e e e 2 j ^ z J ' . . + e e e e e e e e e e e e e e 4 ' .c 5 r e e e e e e e e e e e e k ' . .c L r 7 j 2 e + j > r e e e e e e e e e e e e & ' . . .' | e e e e e e e e e e e e e & ' ^ U - 5 . e & ' . . . . .' 3 e e e e q j & e e e e e e e e e e e 3 ' c 5 r | ' m z e e e e e e e e e e e e ^.) 1 : '.B l ( [ ] N x e + ' . . . . . . .].c j u | & 7 . / e X = W @ s @ @ @ @ @ @ @ @ @ @ @ @ W @ , @ @ @ h 8 ! e q ' ]. . . . . . .].]. 4 2 3 q u /.R ) = 8 : w : s h 8 [ h _ @ h I W : W @ h h , @ } M M d _ _ _ _ d _ _ , , # ^.~.u ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ._.L 5 t m c 5 5 L m L ' J e e ",
212"e e - .]. . . . . . . . .f 5 ^ u G 3 4 4 J ~.e e z c ^ Y e e e e 2 j ^ z J ' . .c L - e e e e e e e e e e e e e - T c ].c 7 e e e e e e e e e e e e - Z c .c L z 2 i 3 e 2 ' j J e e e e e e e e e e e e Y u ' . . .' * e e e e e e e e e e e e e - 5 ' & e - 4 e & ' . . . .' u U e e e e q j & e e e e e e e e e e e 3 ' ].' / ~.^ j / e e e e e e e e e e e e e Q 6 8 = ( w ( [ [ H C e - 5 . . . . ._.L ^ * 7 k 2 k 2.e (.v K h @ s h h h h h h h h @ @ @ @ h h @ @ @ @ h A v (.e & j ]. . . . ._.t 5 u q / 3 7 ^ 7 e ! l : s 8 b s s @ 8 [ h , @ @ s W W W @ : @ , @ } } d _ d _ _ _ d _ d , _ h Q e | 7.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .].L m > t 5 > ^ > > ^ 5 ' J e e ",
213"e e - .]. . . . . . . . . .f L m ^ . u + & ~.e e Y u f - e e e e 2 j ^ z J ' . . .' J e e e e e e e e e e e e e e + .' 4 e e e e e e e e e e e e e k j .c L z | J e z > j ^ z e e e e e e e e e e e e - L c . . .' + e e e e e e e e e e e e e e / j ].' & r e e & ' . . .' > z e e e e e q j & e e e e e e e e e e e 3 ' .' G e J i + Y e e e e e e e e e e e e x V w l 6 b 6 ] 1 : g ~ e 7 |. . . . . 2 2 4 4 7 k u r e % w , @ @ h @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ W , H % e r u ' ]. . . ^ * q O k J 2 ^ {.e >.&.8 W W 8 s P 8 h 8 [ W , @ , s s @ W @ P @ _ , } } d , d _ _ , d d _ _ _ , g >.e 3 j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ._.f f ].f ^ ^ 5 f t ].' J e e ",
214"e e - .]. . . . . . . . . . . .f L 5 m m . ~.e e e 4 i q e e e e 2 j ^ z J ' . . .' u U e e e e e e e e e e e e e q j .' + Y e e e e e e e e e e e e z > ' c L z e e | ^ ' ' 2 e e e e e e e e e e e e e / j . . . . > z e e e e e e e e e e e e e e 4 j c ' m * e & ' . .' ^ - e e e e e e q j & e e e e e e e e e e e 3 ' .c t z - _.' - e e e e e e e e e e e e e o @.n 6 b 6 ] 1 W h F x e | ^ j ' ]. . 4 J 2 O . & (.e Q 8 h @ @ @ h @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ W , , H Q e U 3 ' c ^ 4 4 * 2 3 . 7 e x *.l : s 8 s : s b h 8 [ W , @ @ @ W W h @ s W , , } } M _ d _ _ _ _ _ _ _ _ _ : o e r ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .]. . .].]. .].].].].].].].f > 5 ]. .].].' J e e ",
215"e e - .]. . . . . . . . . . . . . . ._.c > ~.e e e 2 i 4 e e e e 2 j ^ z J ' . . .]. | e e e e e e e e e e e e e z ^ c t - e e e e e e e e e e e e e | m ' f 4 O & +.j ' J e e e e e e e e e e e e e ~.G ' . . . .c 7 e e e e e e e e e e e e e e ~.4 ' j . e & ' j + z e e e e e e e q j & e e e e e e e e e e e 3 ' . .' O e u i J e e e e e e e e e e e e e ;.l = 6 b 6 ] 1 W _ S *.,.e r * . i u * & u G 7 e e C s W @ @ @ @ W @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ W @ , h w Q e e 7 G 5 i k 2 3 + u 4 r e ,.I @.W h h s 8 W W : @ s 6 W , h @ @ W W @ , s s , , } } M _ d _ _ d _ , _ _ _ d , h X e 2 ' ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .f t .t 5 t t 5 m L c t 5 L 5 t m > ^ ^ f c ].c c ].' J e e ",
216"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e | c + Y e e e 2 j ^ z J ' . . . .' 3 e e e e e e e e e e e e e e 3 ' .j / e e e e e e e e e e e e e e - ^ ' i i j j t O e e e e e e e e e e e e e e r L c . . . . .j 4 e e e e e e e e e e e e e e e e 7 u ' . e G j > O U e e e e e e e e q j & e e e e e e e e e e e 3 ' . . u e * j ^ Y e e e e e e e e e e e e /.I ( 6 b ( ] [ W , l @.F ! e e U | {./ O {.- e e x o 8 h @ @ @ @ @ W @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ h , @ @ h 8 o ,.e e z 2 | {./ | U e e ;.N l = W @ , h P W , @ , h ( : @ : h @ W W h , h s @ , } } d &.d , _ d d _ _ _ _ _ _ , ) (.e 2.' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .L 5 f t m L ^ t m ^ t L ^ . m u u u u . . . ^ ^ > _.^ u t > q e e ",
217"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e z > > r e e e 2 j ^ z J ' . . . . > r e e e e e e e e e e e e e | +.]. u e e e e e e e e e e e e e e e r O + u u 3 - e e e e e e e e e e e e e e e q ]. . . . . . ^ r e e e e e e e e e e e e e e e e ~.7 q e 2 q U e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . .c L - z c 2 e e e e e e e e e e e e e C ( 6 b ( ] [ h , = 8 l '.) ! x e e e e e e ~ Q &.H h @ @ @ W h @ @ @ @ @ @ @ @ @ h 8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ H &.C ~ e e e e e e (.X # h : b ( w @ , , 6 B &.h , W B h , @ s h W W h h , 8 h @ } } d _ _ , _ _ d _ _ _ _ _ _ _ : % e - !.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .m m m 5 > 5 ^ L > . 5 . ^ u ^ . . u u + + ^ + + + + + G + u / e e ",
218"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e ~.u j z e e e 2 j ^ z J ' . . . .]. q e e e e e e e e e e e e e ~.u c L - e e e e e e e e e e e e e e e e Y U U e e e e e e e e e e e e e e e e e G ' . . . . . . .' 7 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . .j J e + i k e e e e e e e e e e e e e >.n 6 b ( ] [ W , = P 8 8 w S v I # % o # ) @ H , h @ @ @ @ W h @ @ @ @ @ @ @ @ K ) % K @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ h l @ # # o o o # v H @.&., s ( w W @ , '.B @ W @ : ( W , @ s @ @ h W w g W @ @ } } _ _ _ , _ _ d _ _ _ _ _ _ _ , , ~ e * ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .> m > ^ . 5 . m m ^ . ^ . G . u t + G u u + G G k k & k . G O e e ",
219"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e + i | e e e 2 j ^ z J ' . . . . .' G ~.e e e e e e e e e e e e e / j .' J e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e - t c . . . . . . .' k e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . .' u ~./ j L z e e e e e e e e e e e e ^.# [ b ( ] 6 W , l 8 8 P s w : [ '.@ : K l h @ , h @ @ @ @ W h @ @ @ @ @ @ @ h K X ^.*.: @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ h A 8 K : : K : , = , , : B b s W h w l W : h K 6 s @ h s @ @ s 8 n M _ , @ } M ) , _ , _ _ d , , , _ _ _ _ _ h # ^.Y . ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .f ^ > c m . 5 m . . f c t ^ 5 > _.^ . + + .. ^ . > . & t ^ * e e ",
220"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e 3 j 2 e e e 2 j ^ z J ' . . . . .c f - e e e e e e e e e e e e e z > ^ r e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e J ' . . . . . . . . > z e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . .].' - z > j / e e e e e e e e e e e e e ! [ b ( ] 1 W , l 8 s P s w @ ( D g , , W , , @ @ @ @ @ @ W h @ @ @ @ @ @ @ A $ e e ! H h @ @ @ @ @ @ h @ @ @ @ @ @ @ @ , @ h @ , , @ @ , P , , : w : : : : : : s s @ : @.@ , h = W d h K 6 M d d , } } ~ o , _ _ _ d d _ , , _ d d _ _ : ! e | c ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .c c .c c ].]. . . .c c c .c .c c c ' ].j J e e ",
221"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e 4 j * e e e 2 j ^ z J ' . . . . . .' * e e e e e e e e e e e e e e k ' .' q e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e r > c . . . . . . . . .' * e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . . .' 3 e G i + e e e e e e e e e e e e e (.$.= ( [ [ W , l w 8 P s 8 @ ( n g , , W , , @ @ @ @ @ @ W W h h @ @ @ @ h W ~ e e e % H @ @ @ @ @ @ @ @ @ @ @ @ @ @ h @ W @ h s b @ @ h s &._ : s 8 h s : @ h s h : 8 6 , d _ 8 8 h d g @ , @ _ , _ Q e >.} M d _ _ d } M , , , } M M , g ,.e 3 j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .]. . .].]. .].].]. . ._. .].f f ].].].].].]. .]. .c c .c c c ]._.L ].c c c ].c ]. .c c . c .c ].' J e e ",
222"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e 4 j O e e e 2 j ^ z J ' . . . . . . . ~.e e e e e e e e e e e e e | ]. . Y e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e * ' . . . . . . . . . . ^ r e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . . . ^ ~.2 j L | e e e e e e e e e e e e e o S 6 [ [ W , 8 w w 8 n W @ ( D g , , W , @ @ @ , @ @ @ @ @ @ W @ @ @ @ l C e - [.e (.v A h h h h h h h @ @ , , @ , @ @ W _ @ l ( @ _ @ W , , b W l @ 8 P h W l @ : W ] n &._ , s 6 @ &.d -.W , h # R e e C _ M d : h M } _ h n d M } _ , % e z > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .t _.].t t ].f f t c 5 . f ].> m ].f L t f t ].L .m 5 L > > _.^ . c > > > t 5 ^ Z c m ^ 5 +.^ m ].m ^ c .J e e ",
223"e e - .]. . . . . . . . . . . . . . . .c m ~.e - | e 4 j O e e e 2 j ^ z J ' . . . . . .c Z 7 e e e e e e e e e e e e e Y . ].' q e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e z ^ . . . . . . . . . . .' O e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . . .c c 7 U m j J e e e e e e e e e e e e e ~ @.6 [ 6 h , K b P : D s @ ( n g , , s , , @ , , @ @ @ @ @ @ h @ @ @ H o e Y u j {.e >.&.K , @ @ @ @ @ W @ , , @ @ @ s @ d , b 6 s , @ , d , W W = : b P , @ 8 h w w = W @ , h @ W W @ g n P h : ;.e | U /.# _ _ 8 d , } _ _ W _ g } K K d ;.e / ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 > t L > ^ L ^ ^ ^ t ^ + t ].u > _.u u . . ^ ' u ^ + G ^ + G + L + + c + & 4 ^ + k u . & 3 . . 3 u ' u 3 . + 7 e e ",
224"e e - .]. . . . . . . . . . . . . . . .c m e / . .| k i O e e e 7 j ^ z J ' . . . . . . .j 3 e e e e e e e e e e e e e e O j .' . r e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e J ' . . . . . . . . . . . . > z e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . . . .j k e k i . U e e e e e e e e e e e e /.) [ ] 1 @ , b P P s P h h ( n &., , W , , W @ @ @ , @ @ @ @ W @ @ H # R e 4 j 5 | e ~ &.: @ @ @ , @ @ @ @ @ , , @ W @ _ , : n W &.&.( , _ 8 @ @ s = n @ h b @ @ s [ W &._ : 8 D , , &.8 8 K o e z . - e ~ _ d @.s M } , h W d _ M d _ @.v ^.~.+ ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .].L ^ L . L 5 . . 5 ^ > m u m . . f G m u k ^ T 3 & & & . u G u ].. G ' L + > u 4 k & ^ G k > 4 5 . G 3 4 & 7 e e ",
225"e e - .]. . . . . . . . . . . . . . . .c m e G i u | . i 2 e e e 7 j ^ z J ' . . . . . . . > z e e e e e e e e e e e e e - m _.j J e e e e e e e e e e e e e e e e e e e e e e e e e e e e e - L c . . . . . . . . . . . . .j 3 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . . . .c m U 7 ' | e e e e e e e e e e e e e Q ] ] [ @ , b 8 8 P D s @ 6 n &., , s , , @ @ @ @ , , @ @ @ h @ H I ,.e / c .' ^ z e >.&.H @ @ h h @ @ h W @ @ h @ , @ , W P P , , B h @ B : @ w l b s l = ( 8 b '.: : h = n = W @ , = = &.,.e & * * - e % h b b , M @ 8 : , K , : , K l C e - !.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ._.^ u ^ > . u m u c . ^ ].+ . G & 5 G ].+ + G + 3 u 3 & m & 3 G t & J m k J & u & * ^ u 3 * ^ + 4 k . k O 4 & / e e ",
226"e e - .]. . . . . . . . . . . . . . . .c m e & i / 4 ' L z e e e 7 j ^ z J ' . . . . . . . .' 2 e e e e e e e e e e e e e e & ' .c L - e e e e e e e e e e e e e e e e e e e e e e e e e e e Y + ' . . . . . . . . . . . . . .]. 7 e e e e e e e e e e e e e e e e e e e e e e e e e e e e e q j & e e e e e e e e e e e 3 ' . . . . . .' 7 Y ^ j & e e e e e e e e e e e e e ,.n y [ @ , l s : 8 8 8 h 6 n _ , @ s , h s @ @ @ @ @ @ @ @ h l o (.e {.4.c . . .' ^ - e ,.I H h @ h h h h @ @ @ @ P d , , , h 8 , _ _ d _ @ , , H @ @ @ W h 8 @ : @ _ , , , , s , _ d h @.Q e 7 + 2 . | e x } h M d } M d _ d d } _ _ M _ d >.e }.j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .].Z 5 f c L L c f ._.f c t ]._.5 5 _.t .f +.5 L Z c 5 5 f m m T ].5 m t 5 5 > f f > _.5 m m +.^ 5 L > t J e e ",
227"e e - .]. . . . . . . . . . . . . . . .c m e 2 ' j i j * e e e e 2 j ^ z J ' . . . . . . . .' G e e e e e e e e e e e e e e 7 . .' u U e e e e e e e e e e e e e e e e e e e e e e e e e e * ' ]. . . . . . . . . . . . . . . . > z e e e e e e e e e e e e e e e e e e e e e e e e e e e ~.k j & e e e e e e e e e e e 3 ' . . . . . .' G e 3 j ^ z e e e e e e e e e e e e e $ y [ : @ b : : b 8 l , '.D _ &., W &., h h h h @ h h @ A 8 % /.e q 7. . . . . .' ^ | e x % b K , @ @ @ @ , , , _ h = , &.&.@ h P } M M M } } M } _ # % } } } M v ) ) ) } } ) ) ) } } o e U u 2 + q G {.e X } # # # ) ) # # ) # # # # # # % e (.u ' . . . . . . . . . . . . . . . . . .].]. . . . . .].]. . . . . . .].]. .c c .].].].]. .]. . .c c .]. .].].].].]. .c c ].c c c .c c .c c c ].].c ].].c c . .c ]. .].c c ' J e e ",
228"e e - .]. . . . . . . . . . . . . . . .c m ~.~.O k k O ~.e e e e 2 j ^ z J ' . . . . . . . . 5 - e e e e e e e e e e e e e Y ^ . .' 3 e e e e e e e e e e e e e e e e e e e e e e e e e 7 +.c . . . . . . . . . . . . . . . . .' + U e e e e e e e e e e e e e e e e e e e e e e e e e U & ' & e e e e e e e e e e e 3 ' . . . . . . m z - ' ' q e e e e e e e e e e e e e X [ *.Q : K , , h , s _ w h M d g , d _ _ _ _ _ _ _ , : ) ;.e ~.[. . . . . . . .' !.q ^.e ;.) : , _ _ &.g g g M h s M d d _ s B } g g g M M s g C x # g g &.&.} } } M } } ) } v g v ~ e }.3 * & q j . r e % ) ) # ) ) # ) } ) # # # # } } X e 7 c .].c c . . . .c c ].].c c > u u ^ c c c ^ . c ].c c ].c .c f u ^ ]. ^ 5 c c c c > ^ c c c .c c c c ].c ' u m ]. c c ].c c c ].].c c c c c . ' J e e ",
229"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e 2 j ^ z J ' . . . . . . . . .' O e e e e e e e e e e e e e e * j c c ' 4 e e e e e e e e e e e e e e e e e e e e e e e | m . . . . . . . . . . . . . . . . . . .j & Y e e e e e e e e e e e e e e e e e e e e e e e z + j .' & e e e e e e e e e e e 3 ' . . . . . .].' / ~.. j G ~.e e e e e e e e e e e e x B < e ;.N b A l W b _ ( n d &.&.h _ , @ @ , , H 8 *.Q (.e z G ' c . . . . . . . . .c k z e /.Q v h K h , , , M W [ g g _ d @ = ) M d , h v o ~ e Q , M M s s } } M A , , d M d ] % e - u 7 . 7 ^ c j }.e >.) } ) d , } ) } : d M ) ) _ d v ,.e 3 5 > .m . ^ f ].].f . ^ m > ^ u 5 t . & > ^ u ^ > k L u . t . c ^ L + + L k m ].. G u 3 4 t . + u c u G > . u + c u + 4 . + & 5 & . u ].u G . u m m . 5 & . ^ ^ _.u q e e ",
230"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e 2 i m z 4 i j . . . . . . .' u U e e e e e e e e e e e e e - ^ 5 m m 5 j 4 ~.e e e e e e e e e e e e e e e e e e e e | 5 ' . . . . . . . . . . . . . . . . . . . .].' G U e e e e e e e e e e e e e e e e e e e e e - . ' . .' & e e e e e e e e e e e 3 ' . . .].' j j i u e J i j - e e e e e e e e e e e e e C I e e ^.! # B @.l h 1 = d &., h , h h : H 8 # Q /.e /./ > j ]. . . . . . . . . . . .c ' > / Y e ^.! o @ H h h w _ @ @ : b , h '.} d , ) % ~ e e /.$ # # o # ) I o o o ) # I # o o x e 2./ k O 4 ' .c !.| e X o o # # *.# % o # # o o o o *.! e z u . . . u ^ . c L + + + + G > + u & ^ k . G m Z G 5 + k u G ' G > . u ].& > > G k ^ G G t 3 G + 5 + k 3 k & G & & . J & + + & 3 & & & G G 3 k ^ ^ & & 3 3 4 u +.k + 7 e e ",
231"e e - .]. . . . . . . . . . . . . . . .c m ~.e e e e e e e e e e z 2 7 Y - 2 7 & . . . . . . . | e e e e e e e e e e e e e e r r r U - ' ' k r e e e e e e e e e e e e e e e e e e 2 L . . . . . . . . . . . . . . . . . . . . . . .' + z e e e e e e e e e e e e e e e e e e Y O 5 ' . . .' & e e e e e e e e e e e 3 ' . .c 5 7 - - - - e r - - U e e e e e e e e e e e e e ^.R e ~.U e /.>.! $ I $.$.d g g &.d } v # X >./.e ~.{.u ' . . . . . . . . . . . . . . .c ' u {.U e ^.,.;.o I v N d &.h W g } F # Q >.(.e e e e e ..............................^.e {.& q G 7 T c . .' + Y e /.............................^.e e 7 . > ^ G + L & ^ L G G k k + 5 & 5 ^ u k k > k > > 4 f + & * G & ^ k > + k _. 4 u t G 4 G j u & G 3 5 . 3 k / 4 > u J k t J 4 + u 4 4 3 k J G . 4 3 u 4 3 4 4 k & G & * & | e e ",
232"e e - .]. . . . . . . . . . . . . . . .c m r U U U U U U U U U U r z z ~.r z r 4 . . . . . . .' k Y U U U U U U U U U U U U e r q 2 2 O ].' . 7 e e e e e e e e e e e e e e e z k . . . . . . . . . . . . ._. ' ' ' ' ' ' ' ' ' ' i <.O U e e e e e e e e e e e e e e e | + ' . . . . & Y U U U U U U U U U U k ' . .c m | z z z z z e r z z U U U U U U U U U U U U U U U z 7 ^ O z e e e e e >.~ ~ ~ ~ >.^.e e e e z O u ' ' ]. . . . . . . . . . . . . . . . . .].' ' ^ [.- ~.e e e e ,.~ ~ ;.~ >./.e e e e r {.7 - - - z z z z z z z z z z z z z z z z - > & ^ G u . . . .' [.z z z z z z z z z z z z z z z z z - z - + Z u G > ].+ > _.. . . G k G 5 ^ & G ^ 3 & . ' . & > 5 G k m > 3 4 ^ + G 5 5 & + ^ G k m c c u > u f ].c + & G u L ^ ^ . k & 5 + k m u . . ^ . 4 4 m G + . t 3 + + + u ' q e e ",
233"e e - .]. . . . . . . . . . . . . . . . .f . . . . . . . . . . . ^ 5 . z * L > L . . . . . . . .].t . . . . . . . . . . . . ^ 7 U L i i j . . . T G | U e e e e e e e e e ~.z J > ' . . . . . . . . . . . . . . .' k | 7 7 7 7 7 7 7 7 7 7 7 7 z e e e e e e e e e e e e U 7 G :.' . . . . . .].5 . . . . . . . . . . . 5 ]. . . ._.m m m m L + e / f > . . . . . . . . . . . . . . ^ m m ' m u }.7 z z z z z r z z z z 7 }.u m j . . . . . . . . . . . . . . . . . . . . . . .c j L . 3 {.- z z z z r z z z z | O G > L m m m m m m m m m m m m m m m m > > > m c ' . . . . . .|.> > m m m m m m m m > > > > > > > m m > f c c . c .c c ' u ^ j ].c ' ' m + _. ' c ]. ' ^ 4 u .' ' ].].' c ' ' ]. . . c . . . ' ].c c c ' ' ]. ' ]. c <.G L ' c ].' _. ' J e e ",
234"e e - .]. . . . . . . . . . . . . . . . . . ' > z J j c . . . . . . . . .c i G e * j . . . . . .c ' ' u 4 q | - - - - 2 * G t ' . . . . . . . . . . . . . . . .j 4 z - - - - - - - - - - - - - - - - - - - - - - | q 4 . ' ' c . . . . . . . .c c . . . . .c ' T - z :. c . . ' ' ' ' ' ' . . . . . . . . . . . . . . . . . . . . . . . . . . .c ' ' ' ' ' ' c c . . . . . . . . . . .c ]. . . . . . . . . . . .].]. . . . . . .c . . . . . . . . . . .f c ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .c . . . . . . . . . . .' J e e ",
235"e e - .]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - 3 ' . . . . . . . . . . . . . . . . . . . . . . . .c t - q ]. . . . . . . . . j ' t 5 5 5 5 j ' ]. . . . . . . . . . . . . . . . . . .].t 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 t ' j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .j J e k ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
236"e e - .]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ._.m L ]. . . . . . . . . . . . . . . . . . . . . . . . . .c > . . . . . . . . . . . . .].c c c c c c . . . . . . . . . . . . . . . . . . . . . .].c c c c c c c c c c c c c c c c c c c c c c c c ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .c > J + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .' J e e ",
237"e e - ].c ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].c c ].].].].].].].].].].].].].].].].].].].].].].].].].].]. ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].]. j .].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].' J e e ",
238"e e - j J e e ",
239"e e r 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 q - e e ",
240"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
241"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
242"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ,.$ ! e e e e e e e e e e e e e e e e e e e e e ~ 0 ! e e e e e e e e e e e e e e e e e e e e e e e e /.$ $ e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e Q I ;.e e e e e e e >.I ;.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
243"e e e e e e e e e e e e e e e e e e e e e e ^.^.e e e e e e e e e e e e e R ^.e e e e e e e e e e e e /./.e e e e e e e e e e e e e /.e e e e e e e e e e e e e e e e e e e e e e e /.e e e e e e e e e e e e ^./.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e R e e e e e e e e e e e ^.(.e e e e e e e e e e e e e e e e e e e e e ~ p o e e e e e e e e e e e e e e e e e e e e e X { % e e ^.e e e e e e e e e e R ^.e e e e e e e e e (.9 9 e /.e e e e e e e e e e e e e R ^.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e % { { C e e e e e e e ;.{ C e e e e e e e e e e ^.e e e e e e e e e e ^.^.e e /.e e e e e e e e e e e e e e e e e e e e e e e e e e e e R ^.e e e e e e e e e e e e e ^.e e e e e e e e e e /.e e e e e e e e e e e e e e e e e e e e e e ",
244"e e e e e e e e e e e e e e e e e e e e R o y 9 % ^.e e e e e e e e % < E y < X e e e e e e e e e /.o y 9 % ^.e e e e e e e e $ 0 < y % e e e e e e e e e e e e e e e e e e e e (.I y 0 >.e e e e e e e e e % 9 y $ R e e e e e e e e ! < ~ e o 0 /.e e e e e e e % < < X e e e e e e e e ;.0 ; 0 ~ e e e e e e e e X < ; E >.e e e e e e e e e e e e e e e e e e e >.< C e e e e e e e (.E o e ~ < ! e e e e e e e ;.{ C ~ < o e e e e e e e e ,.a ; < ! e e e e e e e e R < p E ; E >.e e e e e e e e e ,.I ; < ! e e e e e e e e $ < >.C 9 X e e e e e e e e e e e e e e e e e e % p { 0 (.e e e e e e e ~ 9 ! e e e e e e e >.E < E e e e e e e e (.I 0 < 9 % a ; 0 ~ e e e e e e e (.a I e I 0 e o 0 ,.e e e e e e e R $ y < a 0 x e e e e e e e ~ 0 0 I e e e e e e e e ,.I ; < ! e e e e e e e e e e e e e e e e e e e e ",
245"e e e e e e e e e e e e e e e e e e e e $ { < 9 { o e e e e e e e e $ { p 0 p p ;.e e e e e e e e $ { < < { $ e e e e e e e e 0 { 9 y { C e e e e e e e e e e e e e e e e e e e $ { < ; $ e e e e e e e e % { 9 < { I e e e e e e e e % { ;.e a { /.e e e e e e e a { ; ;.e e e e e e e ~ p p < ; ! e e e e e e e ;.p ; E { 9 x e e e e e e e e e e e e e e e e e e ;.{ $ e e e e e e e x p a e X { % e e e e e e e ;.{ o < { ;.e e e e e e e R < { 0 ; { ! e e e e e e e R < { y < { < (.e e e e e e e R < { 0 ; { ! e e e e e e e X { 9 ; < (.e e e e e e e e e e e e e e e e e e o { { $ e e e e e e e e ;.{ C e e e e e e e ~ p { a e e e e e e e x 9 { < y { { < { 9 /.e e e e e e e E p ! ; { ! < 9 /.e e e e e e e I { < 9 { { x e e e e e e e ! { { $ e e e e e e e (.< { 0 y { ! e e e e e e e e e e e e e e e e e e e ",
246"e e e e e e e e e e e e e e e e e e e R { E ^.(.< p (.e e e e e e e I { Q e X { $ e e e e e e e ,.p { E 0 { ; ,.e e e e e e e < p ,.,.p a e e e e e e e e e e e e e e e e e e e o { < I ~ e e e e e e e (.y 9 (.e a { ~ e e e e e e e % { ;.e a { /.e e e e e e e a p ~ e e e e e e e e $ { ;.e x e e e e e e e e I { < a y { % e e e e e e e e e e e e e e e e e e ;.{ $ e e e e e e e x p a e X { % e e e e e e e ;.{ ; { C e e e e e e e e Q { ; a < { 0 e e e e e e e R < p >.e o { Q e e e e e e e ! { % e ~ p 0 e e e e e e e e o { p ;.e e e e e e e e e e e e e e e e e e e R 0 p R e e e e e e e e ;.{ C e e e e e e e ~ { a e e e e e e e e x y < e ! { I e o { X e e e e e e e % { < p { < { $ e e e e e e e >.p E ^./.0 { x e e e e e e e X { $ e e e e e e e e ! { ; a < { 0 e e e e e e e e e e e e e e e e e e e ",
247"e e e e e e e e e e e e e e e e e e e R { $ e e I { ,.e e e e e e e I { ;.e (.{ I e e e e e e e >.{ { y y ; 9 ~ e e e e e e e < y (./.; E e e e e e e e e e e e e e e e e e e e /.% < { E e e e e e e e ,.p E e e o { ;.e e e e e e e % { ;.e a { /.e e e e e e e a p (.e e e e e e e e a { (.e e e e e e e e e e E { ; ; y ; o e e e e e e e e e e e e e e e e e e ;.{ $ e e e e e e e x p a e X { % e e e e e e e ;.{ { { Q e e e e e e e e % { p ; y ; 0 e e e e e e e R 9 9 e e Q { C e e e e e e e C { X e (.9 9 e e e e e e e e C { ; x e e e e e e e e e e e e e e e e e e e e E p e e e e e e e e e ;.{ C e e e e e e e ~ { $ e e e e e e e e x ; 0 e ;.{ o e C { ! e e e e e e e >.p { p ; { { X e e e e e e e ~ { $ e e I { x e e e e e e e X { % e e e e e e e e C { p y y ; E /.e e e e e e e e e e e e e e e e e e ",
248"e e e e e e e e e e e e e e e e e e e ^.< { % o { E e e e e e e e e $ { < Q 0 { C e e e e e e e /.< { $ I $ ,.^.e e e e e e e < y (.R ; E e e e e e e e e e e e e e e e e e e e a < % y y R e e e e e e e a { o C p 9 (.e e e e e e e ! { E C ; p /.e e e e e e e a p x e e e e e e e e Q { 0 C $ >.e e e e e e e C { < o E ;.R e e e e e e e e e e e e e e e e e e ;.{ $ e e e e e e e e 9 p C E { % e e e e e e e ;.{ $ 9 p ~ e e e e e e e >.p ; o E C x e e e e e e e R < { I Q y p ~ e e e e e e e >.p 9 Q I { o e e e e e e e ,.y { { I e e e e e e e e e e e e e e e e e e e e 0 p e e e e e e e e e ;.{ C e e e e e e e ~ { $ e e e e e e e e x ; 0 e ;.{ o e C { ! e e e e e e e e < { E $ { ; R e e e e e e e /.9 { % o p { x e e e e e e e X { % e e e e e e e e >.p ; o a % (.e e e e e e e e e e e e e e e e e e e ",
249"e e e e e e e e e e e e e e e e e e e e ~ 9 { { < >.e e e e e e e e $ { p { { $ /.e e e e e e e e ~ < { { 0 R e e e e e e e e < y (.R ; E e e e e e e e e e e e e e e e e e e e Q p { { o e e e e e e e e ,.< { { 9 ;.e e e e e e e e ^.$ { { p p /.e e e e e e e a p x e e e e e e e e ^.$ { { { Q e e e e e e e /.$ { { p X e e e e e e e e e e e e e e e e e e e ;.{ $ e e e e e e e e X ; { p { % e e e e e e e ;.{ C ;.{ 9 x e e e e e e e Q p { { $ e e e e e e e e R < { p { p C e e e e e e e e e Q p { { I R e e e e e e e I { ! a { ! e e e e e e e e e e e e e e e e e e e 0 p e e e e e e e e e ;.{ C e e e e e e e ~ { $ e e e e e e e e x ; 0 e ;.{ o e C { ! e e e e e e e e o { C ! { a e e e e e e e e e ;.y { { p { x e e e e e e e ! { % e e e e e e e e e Q ; { { $ e e e e e e e e e e e e e e e e e e e e ",
250"e e e e e e e e e e e e e e e e e e e e e (.X ;.R e e e e e e e e e I { X X ~ e e e e e e e e e e e (.X ;.R e e e e e e e e e x ,.e e ,.x e e e e e e e e e e e e e e e e e e e e ,.! ~ e e e e e e e e e e /.;.X (.e e e e e e e e e e ^.;.;.,.,.e e e e e e e e x ,.^.e e e e e e e e e e >.! >.e e e e e e e e e e >.! ,.e e e e e e e e e e e e e e e e e e e e C { o e e e e e e e e e ,.X >.>.(.e e e e e e e /.>.(.e x >.R e e e e e e e e x ! ~ ^.e e e e e e e e e ,.,.>.X >.e e e e e e e e e e e x ! ~ ^.e e e e e e e e >.>.e (.>.(.e e e e e e e e e e e e e e e e e e e x ,.e e e e e e e e e /.>.(.e e e e e e e ^.>.x e e e e e e e e ^.,.x e /.>.(.e (.>.R e e e e e e e e R >./.^.>.(.e e e e e e e e e e (.! ~ x >.^.e e e e e e e /.>.(.e e e e e e e e e e ,.X ~ ^.e e e e e e e e e e e e e e e e e e e e ",
251"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e I { ~ e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e /.p p ~ e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
252"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e X C (.e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ^.C ~ e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
253"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ",
254"e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e "};
diff --git a/rbutil/rbutilqt/icons/rbutil.xpm b/rbutil/rbutilqt/icons/rbutil.xpm
new file mode 100644
index 0000000000..84d3d52444
--- /dev/null
+++ b/rbutil/rbutilqt/icons/rbutil.xpm
@@ -0,0 +1,666 @@
1/* rbutilFrm XPM */
2static char *rbutilFrm_XPM[]={
3"32 32 630 2",
4" c None",
5" 0 c #F7F8FD",
6" 1 c #EBEEF5",
7" 2 c #E4E9F8",
8" 3 c #FAFCFE",
9" 4 c #FAFBFD",
10" 5 c #7085D8",
11" 6 c #204DC6",
12" 7 c #2350C7",
13" 8 c #7C95D6",
14" 9 c #F3F7FD",
15" a c #8C9ED8",
16" b c #1F4FD1",
17" c c #2153D3",
18" d c #1645BF",
19" e c #001F94",
20" f c #687AB7",
21" g c #FFFFFE",
22" h c #FCFCFD",
23" i c #FDFDFE",
24" j c #FEFEFE",
25" k c #F4F6FC",
26" l c #F5F7FC",
27" m c #DEE2F6",
28" n c #2B54CF",
29" o c #1B4ECF",
30" p c #1B4AC5",
31" q c #153DB6",
32" r c #062793",
33" s c #7788B7",
34" t c #D5D8E0",
35" u c #DCDCE5",
36" v c #E4E2EB",
37" w c #E5E2E9",
38" x c #F4F4F6",
39" y c #F7F6F9",
40" z c #F9F9FA",
41" A c #FEFEFF",
42" B c #C6CDF0",
43" C c #6C86D4",
44" D c #6989D4",
45" E c #BECFED",
46" F c #F9FAFE",
47" G c #FEFFFF",
48" H c #7F96D4",
49" I c #0532B3",
50" J c #1342BC",
51" K c #1A48C2",
52" L c #072BA3",
53" M c #394C9D",
54" N c #CCBEBC",
55" O c #D7D0D0",
56" P c #C4C4CE",
57" Q c #B7BCC6",
58" R c #B4B9C4",
59" S c #C3C6D0",
60" T c #D1D3DE",
61" U c #D8DBE4",
62" V c #DDDFE3",
63" W c #9EA7D4",
64" X c #3559C6",
65" Y c #194BC4",
66" Z c #1240B9",
67" & c #002397",
68"0 c #8191C7",
69"00 c #FDFEFE",
70"01 c #EEF1F9",
71"02 c #3048A1",
72"03 c #4B5B9A",
73"04 c #4059A0",
74"05 c #0B288B",
75"06 c #16338B",
76"07 c #A8ADBE",
77"08 c #EDC5B8",
78"09 c #E5BDAD",
79"0a c #DAB6A6",
80"0b c #D5B6A7",
81"0c c #BDB0B3",
82"0d c #AEB2C0",
83"0e c #C7CBD7",
84"0f c #D3D7DE",
85"0g c #97A8C8",
86"0h c #2E50B9",
87"0i c #1D4ECC",
88"0j c #184AC6",
89"0k c #173EB1",
90"0l c #08248F",
91"0m c #000A5E",
92"0n c #E0E0EB",
93"0o c #F2F2F7",
94"0p c #B7B4CC",
95"0q c #FFFBFF",
96"0r c #CED1E1",
97"0s c #6B7588",
98"0t c #6179B2",
99"0u c #8198CD",
100"0v c #97A3D6",
101"0w c #9DAADB",
102"0x c #A5AED1",
103"0y c #C9C6D4",
104"0z c #C5BEC3",
105"0A c #C5CACC",
106"0B c #C2C3C9",
107"0C c #C7C5CA",
108"0D c #627BBC",
109"0E c #204CCC",
110"0F c #1949C5",
111"0G c #1746C1",
112"0H c #1439AB",
113"0I c #072282",
114"0J c #080D53",
115"0K c #CFCEE5",
116"0L c #FAF9F9",
117"0M c #F5F0F1",
118"0N c #F7F9FD",
119"0O c #BCBFCC",
120"0P c #A9B4CB",
121"0Q c #5474C9",
122"0R c #6B6F83",
123"0S c #757679",
124"0T c #6B738C",
125"0U c #6B78A2",
126"0V c #6E81B2",
127"0W c #778CB9",
128"0X c #8E9DCC",
129"0Y c #A3B2DD",
130"0Z c #AFB8D6",
131"0& c #2C4395",
132"1 c #082887",
133"10 c #0E3095",
134"11 c #0F33A7",
135"12 c #0C2C9C",
136"13 c #071A67",
137"14 c #191955",
138"15 c #BEBDD9",
139"16 c #EEEDF0",
140"17 c #F9F8FB",
141"18 c #D1D8E8",
142"19 c #BBBEC3",
143"1a c #889FE5",
144"1b c #5C6994",
145"1c c #918B6C",
146"1d c #8C886D",
147"1e c #8F846F",
148"1f c #8F8471",
149"1g c #878274",
150"1h c #7E7C79",
151"1i c #7B7B7E",
152"1j c #5268AC",
153"1k c #688AD7",
154"1l c #798699",
155"1m c #959AAC",
156"1n c #9FA9C8",
157"1o c #495181",
158"1p c #0B1765",
159"1q c #131455",
160"1r c #161547",
161"1s c #ACACC5",
162"1t c #FBFAFB",
163"1u c #EBE8ED",
164"1v c #F7F8FF",
165"1w c #B8BAC4",
166"1x c #ACB5CB",
167"1y c #5474C4",
168"1z c #7E7B73",
169"1A c #93896C",
170"1B c #8A836C",
171"1C c #8B846E",
172"1D c #918870",
173"1E c #928D70",
174"1F c #958D71",
175"1G c #968D73",
176"1H c #4D6AB1",
177"1I c #8399C5",
178"1J c #C4C0B8",
179"1K c #F8F7F7",
180"1L c #EDF4FF",
181"1M c #B0ABAA",
182"1N c #353448",
183"1O c #16134E",
184"1P c #161638",
185"1Q c #C5C5CC",
186"1R c #EAE5EB",
187"1S c #FAFBFF",
188"1T c #D9DBED",
189"1U c #B6B6BA",
190"1V c #7F94D5",
191"1W c #576895",
192"1X c #98896B",
193"1Y c #96886C",
194"1Z c #95886B",
195"1& c #93896D",
196"2 c #8F8672",
197"20 c #8A8673",
198"21 c #948F6F",
199"22 c #768092",
200"23 c #5B7DD7",
201"24 c #B3B5B8",
202"25 c #D1CFD3",
203"26 c #F7FFFF",
204"27 c #C9D0DF",
205"28 c #A09088",
206"29 c #5B5255",
207"2a c #3B3852",
208"2b c #94949D",
209"2c c #F8F8F9",
210"2d c #EFEEF5",
211"2e c #F5F9FF",
212"2f c #B3B4C0",
213"2g c #A0A9B2",
214"2h c #4D78EB",
215"2i c #3C63D6",
216"2j c #5D72B4",
217"2k c #6576A3",
218"2l c #707B91",
219"2m c #827F86",
220"2n c #887F7B",
221"2o c #8B8071",
222"2p c #918871",
223"2q c #5873B6",
224"2r c #91A3D4",
225"2s c #B9B7B5",
226"2t c #EAF0F5",
227"2u c #E8F2FC",
228"2v c #B1AFBA",
229"2w c #84736E",
230"2x c #93807A",
231"2y c #665E65",
232"2z c #D8D9E2",
233"2A c #EAEAEF",
234"2B c #F8FAFE",
235"2C c #D4DEF0",
236"2D c #9C9C9F",
237"2E c #6D81BE",
238"2F c #436EE8",
239"2G c #5E87ED",
240"2H c #3867DA",
241"2I c #4069DB",
242"2J c #456CDF",
243"2K c #4261D2",
244"2L c #4663C3",
245"2M c #5871BC",
246"2N c #5C73B8",
247"2O c #5D80D7",
248"2P c #B2B6BB",
249"2Q c #C3C3CE",
250"2R c #FCFFFF",
251"2S c #CFD9E9",
252"2T c #9C8F8E",
253"2U c #7C6E66",
254"2V c #927C7C",
255"2W c #83819D",
256"2X c #FCFCFF",
257"2Y c #F9F6FA",
258"2Z c #ECEBF1",
259"2& c #FBFFFF",
260"3 c #B9BCC9",
261"30 c #AAB0C3",
262"31 c #4870EB",
263"32 c #2B5DE1",
264"33 c #4F72CE",
265"34 c #3C62CB",
266"35 c #4E73D6",
267"36 c #5777DA",
268"37 c #456ED4",
269"38 c #7393E1",
270"39 c #4D77F4",
271"3a c #3060F1",
272"3b c #7C94C8",
273"3c c #A8A6A6",
274"3d c #E6E9EF",
275"3e c #EDFAFF",
276"3f c #BBBDC7",
277"3g c #8C7A74",
278"3h c #827670",
279"3i c #90847E",
280"3j c #ECECF0",
281"3k c #ECE5EC",
282"3l c #DAE0EF",
283"3m c #ACB0B3",
284"3n c #869EDC",
285"3o c #577EDE",
286"3p c #B0C0E7",
287"3q c #EFF4FF",
288"3r c #E4EAFF",
289"3s c #9EC0FC",
290"3t c #3265E4",
291"3u c #3366E5",
292"3v c #4871DC",
293"3w c #3660DB",
294"3x c #5075E7",
295"3y c #8C9097",
296"3z c #B3B4B6",
297"3A c #D8E4F1",
298"3B c #A89A92",
299"3C c #837069",
300"3D c #91817A",
301"3E c #E0DDD8",
302"3F c #F8F5F6",
303"3G c #F6F2F2",
304"3H c #B9BCC7",
305"3I c #A8ACC0",
306"3J c #BBCCEC",
307"3K c #F8F9FA",
308"3L c #DCD3CD",
309"3M c #EEECEF",
310"3N c #D9D8D9",
311"3O c #E2E4DB",
312"3P c #A4BADE",
313"3Q c #3161E4",
314"3R c #5F85F4",
315"3S c #6387ED",
316"3T c #8597D5",
317"3U c #A4A8AA",
318"3V c #DEE2E9",
319"3W c #F4FFFF",
320"3X c #BEC3CC",
321"3Y c #8D7C6F",
322"3Z c #7A6D65",
323"3& c #A2928E",
324"4 c #FDFBFB",
325"40 c #FCFCFE",
326"41 c #D1D6EB",
327"42 c #F7FAFD",
328"43 c #B2B4C6",
329"44 c #D0D4E4",
330"45 c #F9FCFF",
331"46 c #E7EBF4",
332"47 c #C3C4CE",
333"48 c #B6B3C1",
334"49 c #989BA1",
335"4a c #E7E7E4",
336"4b c #E9ECF7",
337"4c c #3B61D1",
338"4d c #92A0D0",
339"4e c #C7CACC",
340"4f c #A0A6B2",
341"4g c #B2B4BA",
342"4h c #FAFFFF",
343"4i c #E2EAF6",
344"4j c #A9A3A4",
345"4k c #7F6F64",
346"4l c #85776E",
347"4m c #CAC4C0",
348"4n c #EAEDFA",
349"4o c #5A80EA",
350"4p c #2D64E7",
351"4q c #4778E8",
352"4r c #788FC7",
353"4s c #B4B7CA",
354"4t c #CBCCD7",
355"4u c #E7EAE9",
356"4v c #C6CDD5",
357"4w c #AEB3B9",
358"4x c #8A8C8B",
359"4y c #C0C5C5",
360"4z c #B8C4E3",
361"4A c #2859CF",
362"4B c #2855CD",
363"4C c #7989A5",
364"4D c #A4A69F",
365"4E c #D6DAE0",
366"4F c #CBD1DD",
367"4G c #938781",
368"4H c #84756D",
369"4I c #9B8985",
370"4J c #F6F3F2",
371"4K c #F7F9FE",
372"4L c #5C7CE7",
373"4M c #205CF1",
374"4N c #1C5DEA",
375"4O c #0641C7",
376"4P c #072DAA",
377"4Q c #8593C5",
378"4R c #B1B1B5",
379"4S c #BCC0C2",
380"4T c #F7FBFD",
381"4U c #E3E3E1",
382"4V c #C6BCA9",
383"4W c #AAB4CC",
384"4X c #4168D4",
385"4Y c #7AA1DF",
386"4Z c #9AB2E2",
387"4& c #A4ADBD",
388"5 c #BDB8BB",
389"50 c #E8F4FE",
390"51 c #B5B2B9",
391"52 c #82736C",
392"53 c #817770",
393"54 c #BFB4B2",
394"55 c #FFFEFE",
395"56 c #9FB3ED",
396"57 c #1857E7",
397"58 c #185ADE",
398"59 c #1656DD",
399"5a c #1244C2",
400"5b c #112D9F",
401"5c c #959EC7",
402"5d c #D0D1D3",
403"5e c #A7AFB2",
404"5f c #ACAEB5",
405"5g c #B5B2B6",
406"5h c #B0AEB5",
407"5i c #948C8B",
408"5j c #8990B2",
409"5k c #7792D9",
410"5l c #ABABB5",
411"5m c #BAB5B4",
412"5n c #8B95AE",
413"5o c #A8B1D8",
414"5p c #E7EEFF",
415"5q c #D7DEE7",
416"5r c #9E918A",
417"5s c #80736A",
418"5t c #898078",
419"5u c #EBE9E8",
420"5v c #EEF1FA",
421"5w c #3262E5",
422"5x c #1457E6",
423"5y c #1653D9",
424"5z c #1852D7",
425"5A c #1039BB",
426"5B c #2E46A6",
427"5C c #BDC4CB",
428"5D c #CECDD4",
429"5E c #AEB4BF",
430"5F c #A2A6B2",
431"5G c #A4A3A7",
432"5H c #ABADB5",
433"5I c #C1C1CF",
434"5J c #D4D0DE",
435"5K c #DBD8E5",
436"5L c #B7BAC3",
437"5M c #586DB4",
438"5N c #2A5BD4",
439"5O c #2457CF",
440"5P c #375FCF",
441"5Q c #6F7AB3",
442"5R c #8C7C77",
443"5S c #928274",
444"5T c #B4A6A2",
445"5U c #FDFDFD",
446"5V c #A6B3EA",
447"5W c #1037B9",
448"5X c #1C4CD1",
449"5Y c #1E53DC",
450"5Z c #1547CB",
451"5& c #1331A4",
452"6 c #7788BA",
453"60 c #CBCBD3",
454"61 c #C6C6D4",
455"62 c #BABDCA",
456"63 c #B5B9C7",
457"64 c #BABDC7",
458"65 c #AEB4C0",
459"66 c #C8BBC1",
460"67 c #C5BDC7",
461"68 c #CDCDD0",
462"69 c #6C7AB2",
463"6a c #204ED0",
464"6b c #1E53D9",
465"6c c #164BC8",
466"6d c #0C33B1",
467"6e c #001B87",
468"6f c #3F4877",
469"6g c #8A7971",
470"6h c #E2DDDA",
471"6i c #4B5DA9",
472"6j c #02126B",
473"6k c #0F2079",
474"6l c #152C8F",
475"6m c #0B2596",
476"6n c #3A4CA9",
477"6o c #CBCED8",
478"6p c #CFD2D5",
479"6q c #CAD2D9",
480"6r c #D1D1D8",
481"6s c #DBCECD",
482"6t c #C5C2CF",
483"6u c #C3C3D2",
484"6v c #CBC5CD",
485"6w c #D6D5DF",
486"6x c #A5AFC9",
487"6y c #2B4DB9",
488"6z c #1B50D9",
489"6A c #174AC5",
490"6B c #1547BF",
491"6C c #1636AA",
492"6D c #031D7B",
493"6E c #192066",
494"6F c #9A8F99",
495"6G c #FDFCFC",
496"6H c #6778B7",
497"6I c #001B72",
498"6J c #041E7A",
499"6K c #00166D",
500"6L c #000F66",
501"6M c #1D2364",
502"6N c #908886",
503"6O c #B4A89F",
504"6P c #C1B7B3",
505"6Q c #DDD6D4",
506"6R c #EBE2DB",
507"6S c #E2DFE4",
508"6T c #E7E7F3",
509"6U c #D4D6E2",
510"6V c #E9D2C8",
511"6W c #6A7AA7",
512"6X c #1549C7",
513"6Y c #184AC8",
514"6Z c #1545C2",
515"6& c #1544BD",
516"7 c #0F309F",
517"70 c #05196E",
518"71 c #231F64",
519"72 c #C6C1C9",
520"73 c #AAB6E3",
521"74 c #001D80",
522"75 c #102874",
523"76 c #27397E",
524"77 c #162769",
525"78 c #21274C",
526"79 c #393D43",
527"7a c #6F695C",
528"7b c #897C73",
529"7c c #7A6D69",
530"7d c #96827C",
531"7e c #AA958B",
532"7f c #BFB1AC",
533"7g c #DBCFC9",
534"7h c #DFD4D1",
535"7i c #344B90",
536"7j c #0B38B0",
537"7k c #1A46BF",
538"7l c #1A4AC3",
539"7m c #123FB6",
540"7n c #08288F",
541"7o c #08115A",
542"7p c #3E3B6F",
543"7q c #F7F7F7",
544"7r c #E1E6F7",
545"7s c #04228A",
546"7t c #131C4C",
547"7u c #74696C",
548"7v c #847675",
549"7w c #897872",
550"7x c #766B61",
551"7y c #6C625B",
552"7z c #675E57",
553"7A c #46463B",
554"7B c #595645",
555"7C c #645F4B",
556"7D c #7A6C60",
557"7E c #615249",
558"7F c #2D2E34",
559"7G c #0D1C65",
560"7H c #0D155F",
561"7I c #17236A",
562"7J c #172B7C",
563"7K c #0B2582",
564"7L c #081C6E",
565"7M c #11104A",
566"7N c #65678F",
567"7O c #B4C0E3",
568"7P c #4A5B97",
569"7Q c #6976AA",
570"7R c #8283A2",
571"7S c #807B88",
572"7T c #80767D",
573"7U c #9D8A84",
574"7V c #928075",
575"7W c #8E7D73",
576"7X c #746C61",
577"7Y c #605D4F",
578"7Z c #625E51",
579"7& c #594F48",
580"8 c #332F34",
581"80 c #1B1E58",
582"81 c #110C4C",
583"82 c #120D3F",
584"83 c #15103F",
585"84 c #16123D",
586"85 c #22225B",
587"86 c #8081A9",
588"87 c #F8FCFF",
589"88 c #E6EBF9",
590"89 c #D5DBEF",
591"8a c #D5DAE8",
592"8b c #E7E5E7",
593"8c c #EAE3DF",
594"8d c #D2CAC5",
595"8e c #BBACA8",
596"8f c #AA938F",
597"8g c #948079",
598"8h c #927D76",
599"8i c #9C857A",
600"8j c #766F73",
601"8k c #524F6B",
602"8l c #332F5D",
603"8m c #171656",
604"8n c #17154A",
605"8o c #1A1744",
606"8p c #282E71",
607"8q c #D3D5E3",
608"8r c #FBFAFA",
609"8s c #FBFAF9",
610"8t c #F0EDED",
611"8u c #DAD3CF",
612"8v c #C1B7AF",
613"8w c #968F8B",
614"8x c #7E736F",
615"8y c #8A7570",
616"8z c #55506E",
617"8A c #151C6A",
618"8B c #151964",
619"8C c #30378A",
620"8D c #EDEFF6",
621"8E c #F0F3F9",
622"8F c #9FA9C6",
623"8G c #9396B4",
624"8H c #455687",
625"8I c #071F7B",
626"8J c #00106C",
627"8K c #7C81B7",
628"8L c #F9FAFC",
629"8M c #F6F7FD",
630"8N c #EFF2F9",
631"8O c #B8C1DD",
632"8P c #939FCA",
633"8Q c #F7F7FB",
634" 0 1 2 3 ",
635" 4 5 6 7 8 9 ",
636" a b c d e f g h i j j k l j ",
637" m n o p q r s t u v w x y z g A B C D E F ",
638" G H I J K L M N O P Q R S T U V W X Y Z &0 00",
639" 0102030405060708090a0b0c0d0e0f0g0h0i0j0k0l0m0n",
640" 0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K",
641" 0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0&1 101112131415",
642" j161718191a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s",
643" 1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q",
644" 1R1S1T1U1V1W1X1Y1Z1&2 202122232425262728292a2b j",
645" 2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z ",
646" j2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X ",
647" 2Y2Z2&3 303132333435363738393a3b3c3d3e3f3g3h3i3j ",
648" j3k 3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z2&3A3B3C3D3E ",
649" 3F3G G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3&4 ",
650" 4041423d434445464748494a4b4c4d4e4f4g4h4i4j4k4l4m ",
651" 4n4o4p4q4r4s4t4u4v4w4x4y 4z4A4B4C4D4E4h4F4G4H4I4J ",
652" 4K4L4M4N4O4P4Q4R4S 4T4U4V4W4X4Y4Z4&5 3K505152535455 ",
653" j565758595a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u ",
654" 5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U ",
655" 5V5W5X5Y5Z5&6 606162636465666768696a6b6c6d6e6f6g6h ",
656" 6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G ",
657" 6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z6&7 707172 ",
658" 737475767778797a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q ",
659" 7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N j ",
660" A7O7P7Q7R7S7T7U7V7W7X7Y7Z7&8 8081828384848586 i ",
661" A 48788898a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q ",
662" j8r8s8t8u8v8w8x8y8z8A8B8C8D ",
663" 8E8F8G8H8I8J8K8L ",
664" A8M8N8O8P8Q ",
665" "};
666
diff --git a/rbutil/rbutilqt/icons/rembootloader_btn.png b/rbutil/rbutilqt/icons/rembootloader_btn.png
new file mode 100644
index 0000000000..8abf1da30e
--- /dev/null
+++ b/rbutil/rbutilqt/icons/rembootloader_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/remrb_btn.png b/rbutil/rbutilqt/icons/remrb_btn.png
new file mode 100644
index 0000000000..bd484b96c1
--- /dev/null
+++ b/rbutil/rbutilqt/icons/remrb_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/talkfile_btn.png b/rbutil/rbutilqt/icons/talkfile_btn.png
new file mode 100644
index 0000000000..ba168676e1
--- /dev/null
+++ b/rbutil/rbutilqt/icons/talkfile_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/themes_btn.png b/rbutil/rbutilqt/icons/themes_btn.png
new file mode 100644
index 0000000000..264ba79460
--- /dev/null
+++ b/rbutil/rbutilqt/icons/themes_btn.png
Binary files differ
diff --git a/rbutil/rbutilqt/icons/wizard.xpm b/rbutil/rbutilqt/icons/wizard.xpm
new file mode 100644
index 0000000000..d19402a414
--- /dev/null
+++ b/rbutil/rbutilqt/icons/wizard.xpm
@@ -0,0 +1,689 @@
1/* XPM */
2static char * wizard_xpm[] = {
3"200 430 256 2",
4" c #040B0E",
5". c #0B080D",
6"+ c #090B07",
7"@ c #030D15",
8"# c #140F0D",
9"$ c #0D1214",
10"% c #071515",
11"& c #0A1319",
12"* c #181008",
13"= c #09141E",
14"- c #081424",
15"; c #101411",
16"> c #14140B",
17", c #061630",
18"' c #1C1406",
19") c #0F1B1E",
20"! c #061A3D",
21"~ c #151A1F",
22"{ c #101C26",
23"] c #161D16",
24"^ c #1B1B16",
25"/ c #211911",
26"( c #131D2F",
27"_ c #251B0C",
28": c #0F202F",
29"< c #171C31",
30"[ c #142225",
31"} c #13222B",
32"| c #10223D",
33"1 c #0A234C",
34"2 c #0F214C",
35"3 c #2B1F0B",
36"4 c #0E2447",
37"5 c #172832",
38"6 c #152838",
39"7 c #11294B",
40"8 c #18264A",
41"9 c #122755",
42"0 c #1A2B2E",
43"a c #1D283B",
44"b c #0E2B54",
45"c c #1E2D24",
46"d c #312711",
47"e c #102D4C",
48"f c #372511",
49"g c #272A2D",
50"h c #292B25",
51"i c #172E46",
52"j c #1C2F38",
53"k c #1A2F3F",
54"l c #34291C",
55"m c #3C2B0F",
56"n c #342C27",
57"o c #422B11",
58"p c #1C3645",
59"q c #0F3864",
60"r c #223448",
61"s c #18395A",
62"t c #223942",
63"u c #233A3C",
64"v c #1D3A52",
65"w c #40341E",
66"x c #4A3113",
67"y c #32373B",
68"z c #463415",
69"A c #2C3C31",
70"B c #203D4D",
71"C c #353831",
72"D c #4C3811",
73"E c #4D3A0C",
74"F c #164770",
75"G c #244558",
76"H c #0E4A81",
77"I c #1E486B",
78"J c #064E8D",
79"K c #2A484E",
80"L c #024F96",
81"M c #284855",
82"N c #2E4846",
83"O c #264862",
84"P c #334A3E",
85"Q c #584117",
86"R c #4A4531",
87"S c #2A4D5F",
88"T c #3F4841",
89"U c #574220",
90"V c #464540",
91"W c #3F484B",
92"X c #57471C",
93"Y c #554729",
94"Z c #564824",
95"` c #23577E",
96" . c #345764",
97".. c #335769",
98"+. c #315770",
99"@. c #5F4F25",
100"#. c #39595C",
101"$. c #5F4F2B",
102"%. c #625020",
103"&. c #694C24",
104"*. c #664E24",
105"=. c #644E2C",
106"-. c #4A5457",
107";. c #68501C",
108">. c #46584F",
109",. c #605133",
110"'. c #644F33",
111"). c #5C5435",
112"!. c #5E523F",
113"~. c #475D46",
114"{. c #6D5318",
115"]. c #66542A",
116"^. c #535752",
117"/. c #645530",
118"(. c #5A5743",
119"_. c #29638D",
120":. c #59584B",
121"<. c #3E6678",
122"[. c #5D5F4B",
123"}. c #406774",
124"|. c #36688B",
125"1. c #5C6052",
126"2. c #3D6782",
127"3. c #45686C",
128"4. c #306B96",
129"5. c #4D695D",
130"6. c #60605B",
131"7. c #775F23",
132"8. c #416597",
133"9. c #646053",
134"0. c #5C6359",
135"a. c #6E5F3E",
136"b. c #79601E",
137"c. c #76602F",
138"d. c #516D59",
139"e. c #5C6661",
140"f. c #556870",
141"g. c #6C6350",
142"h. c #62676C",
143"i. c #5C6B6B",
144"j. c #3A75A5",
145"k. c #3E769F",
146"l. c #457599",
147"m. c #5B7181",
148"n. c #497792",
149"o. c #53777A",
150"p. c #517492",
151"q. c #5E727A",
152"r. c #57796B",
153"s. c #547684",
154"t. c #50778A",
155"u. c #66726A",
156"v. c #896D2B",
157"w. c #5A758A",
158"x. c #736F6A",
159"y. c #8F6C33",
160"z. c #836E4C",
161"A. c #8A7034",
162"B. c #877041",
163"C. c #8A713B",
164"D. c #906E41",
165"E. c #4882AE",
166"F. c #5482A2",
167"G. c #93753E",
168"H. c #598299",
169"I. c #907935",
170"J. c #90793B",
171"K. c #618099",
172"L. c #917A43",
173"M. c #5F868D",
174"N. c #6B8282",
175"O. c #917A49",
176"P. c #648782",
177"Q. c #628593",
178"R. c #8E7C52",
179"S. c #508AB5",
180"T. c #6C848E",
181"U. c #897E66",
182"V. c #5C8AAB",
183"W. c #618AA2",
184"X. c #7C8689",
185"Y. c #88887E",
186"Z. c #6093B9",
187"`. c #6694B3",
188" + c #6994AC",
189".+ c #8B8F75",
190"++ c #6C989E",
191"@+ c #7492AC",
192"#+ c #709995",
193"$+ c #6E98A5",
194"%+ c #7E949F",
195"&+ c #7996A5",
196"*+ c #829593",
197"=+ c #699CC1",
198"-+ c #679EBC",
199";+ c #7498B9",
200">+ c #6E9CB4",
201",+ c #6E9CBB",
202"'+ c #6EA5C4",
203")+ c #73A4BD",
204"!+ c #70A4CA",
205"~+ c #76A3C3",
206"{+ c #7CA8B9",
207"]+ c #85A6B9",
208"^+ c #77ADCA",
209"/+ c #96A5A5",
210"(+ c #78ACD2",
211"_+ c #7FABCA",
212":+ c #8DAEAA",
213"<+ c #8AABC9",
214"[+ c #7CB4D9",
215"}+ c #85B2D3",
216"|+ c #7EB6D5",
217"1+ c #90B0CD",
218"2+ c #8EB6D1",
219"3+ c #8FB8C9",
220"4+ c #87BBD4",
221"5+ c #82BEE3",
222"6+ c #85BEDD",
223"7+ c #8FBCDD",
224"8+ c #8DC5E5",
225"9+ c #94C2E3",
226"0+ c #88C8E6",
227"a+ c #A2C1D1",
228"b+ c #94C6DF",
229"c+ c #8EC9E1",
230"d+ c #9DC7CC",
231"e+ c #96C8DA",
232"f+ c #8FD0ED",
233"g+ c #9ACDE8",
234"h+ c #8ED3EA",
235"i+ c #95D0E9",
236"j+ c #A0CBEA",
237"k+ c #9AD1E3",
238"l+ c #A2CEE1",
239"m+ c #95DAF1",
240"n+ c #A2D4EE",
241"o+ c #9DD8F0",
242"p+ c #9CDBEC",
243"q+ c #A4DAEC",
244"r+ c #A7DAE6",
245"s+ c #A3E3F5",
246"t+ c #AAE1F3",
247"u+ c #ADE3E9",
248"v+ c #A9E4EF",
249"w+ c #B6E3F8",
250"x+ c #AAEAFB",
251"y+ c #B3E9FC",
252"z+ c #C6E8DE",
253"A+ c #BBE9FD",
254"B+ c #BAF0FC",
255"C+ c #C2F7FD",
256"D+ c #CBFDFC",
257"E+ c #D6FFFA",
258"F+ c #E1FFFC",
259"G+ c #EEFFFE",
260"Q.Q.$+Q.Q.Q.Q.Q.Q.Q.s.s.s.}.s.s.M.M.}...+.O O O r e e 8 7 | | | ( ( | a { ) % & ~ ) ~ ) ) ) & ~ [ [ [ u N r.d.P c [ 0 j u M <.n.F.V.V.V.V.F.F.F.F.F.F.F.p.F.n.l.l.p.p.n.p.p.p.p.n.n.p.2.2.2.n.2.n.2.n.n.n.n.t.n.n.n.n.n.n.n.F.H.H.H.W.W.`. +>+ +>+-+`.-+-+=+Z.`.,+=+=+=+Z.=+=+=+;+;+!+,+,+~+~+~+~+~+~+~+~+~+_+~+_+_+~+_+_+_+_+_+_+_+_+_+_+_+_+_+_+(+_+_+_+_+_+(+_+_+(+(+_+_+_+_+_+(+(+(+(+(+(+(+(+(+(+(+(+_+(+_+",
261"3.r.o.o.o.r.o.o.o.o.r.3.#.3.#.3.3.3.f.+.m.<.2.O +.O H 8.8.F I s s e e i | < - - - = = ( = = & { ~ $ = ) c N A c ) ) { : k B ..p.V.V.V.@+K.V.V.W.Q.W.W.H.F.H.F.V.F.F.F.F.F.F.F.F.K.F.l.n.n.n.l.l.|.n.n.2.n.n.t.2.p.n.n.n.n.n.t.n.n.H.F.H.H.H.W.W.W.W.>+>+`.`.Z.`.`.-+,+=+;+Z.;+=+=+=+=+=+=+=+-+,+,+~+'+'+'+'+'+)+~+'+^+'+~+~+~+_+~+(+!+(+!+_+!+_+^+^+(+^+(+^+(+_+(+(+_+_+(+(+(+(+(+_+<+(+(+(+_+_+_+_+(+(+<+(+<+(+",
262"K N N N N P #.P P #.P #.N K K M N . .+.<.m.f.+.+.p.p.p.p.p.8.|.2.` ` I v e < | < , ( < ( ( ~ = { ~ ) = [ [ [ % % = ( ( a B -.p.V.`.Z.Z.;+@+W.Q.Q.M.W.Q.W.W.H.W.V.W.K.W.W.V.H.F.F.V.F.H.n.n.n.n.n.n.n.n.n.n.n.n.n.n.t.n.n.t.t.n.n.n.n.n.n.H.H.W.W.H.H.W.W.W.`.V.-+`. +Z.Z.=+=+=+!+=+=+-+`.=+=+=+-+-+`.,+,+>+)+>+~+;+_+!+~+~+!+!+~+~+~+~+!+~+!+!+~+'+!+'+!+'+'+'+'+~+!+'+'+~+~+~+!+!+!+!+;+(+!+!+!+~+~+!+!+!+!+!+",
263"p t p j 5 0 c 0 j c u c u N t K M B G +.+.<.+.m.+.8.S.;+K.K.p.p.p.p.p.p.8.+.I I s s e e | : ( ( { - { { : : { & = { ( a r r O p.V.V.W. +`.W.++o.o.o.o.M.o.M.M.Q.Q.W.W.W.W.W.W.V.@+H.W.F.W.H.F.F.F.F.n.F.n.H.n.n.n.n.n.n.n.n.}.n.n.n.n.n.n.n.n.n.H.n.H.H.W.W.W.H.W.W.W.W.W. +>+,+-+-+-+=+=+Z.Z.`.Z.`.=+=+,+=+;+,+,+=+,+,+!+'+,+,+!+!+=+!+~+!+;+=+;+=+!+!+~+~+!+~+=+=+=+~+,+=+!+=+!+;+!+!+!+~+'+'+!+!+!+(+!+!+!+!+",
264"+.B p i | : ( ( { } ) [ [ 0 u u t G S +.2.p.2.2.p.p.K. +W.H.K.K.p.p.p.p.p.p.p.8.+.8.I O O v v 7 a | | < | | | - , , a i r G +.p.F.Z.V. + +Q.o.#.#.#.5.3.3.3.o.o.s.Q.Q.H.Q.W.Q.V.W.Q.W.W.V.H.V.F.F.V.H.W.F.W.H.F.H.l.n.n.n.n.n.n.k.l.l.H.n.n.n.n.n.F.n.n.H.n.H.M.n.W.W.W.W.-+W.-+W.>+W.`.`.`.`.`.`.`.Z.`.`.Z.Z.`.`.,+`.`.,+,+,+,+=+=+=+=+;+;+!+!+=+,+-+=+=+;+=+,+!+=+=+=+!+=+=+!+=+!+!+!+!+!+!+'+~+!+=+!+!+!+!+!+",
265"<.S O s v e i | : } } ) [ [ [ j y O +.+.2.p.p.p.p.K.W.Q.t.K.H.p.K.K.H.n.w.p.p.p.p.p.p.p.2.2.I O I s s s q q q s 7 e s s I +.` p.V.V.`.V.-+Q.#.u u c u N K K #.#.5.3.3.o.s.Q.Q.Q.W.W.$+W.W.V.V.V.W.W.V.V.W.W.V.W.F.V.F.F.F.F.F.F.l.l.n.n.E.n.E.F.k.n.n.n.n.n.n.n.H.n.n.n.n.H.W.H.W.H.-+W.W.-+V.W.V.Z.`.Z.V.V.V.V.`.V.`.`.`.`.`.Z.`.Z.;+=+=+=+Z.;+=+=+=+=+=+=+,+=+=+;+;+;+;+=+!+Z.!+!+;+!+;+=+'+=+!+=+!+!+!+!+~+!+",
266"p.+.+.` +.I O s s k 6 } ) { { } k r +.m.m.m.w.w.K.w.H.H.H.n.H.H.n.H.K.F.H.t.H.K.F.l.F.p.p.p.p.8.p.|.8.` 8.8.8.8.F 8.8.8.8.p.8.S.;+Z.=+Z.-+M.N [ { ) [ [ 0 0 t u u N #.#.3.}.o.o.s.Q.M.Q.Q.Q.$+W.W.W.W.W.W.W.V.V.W.V.V.V.F.F.S.F.F.F.E.F.H.F.F.F.F.F.k.n.H.n.n.n.n.n.n.H.F.n.H.H.H.H.H.H.H.F.V.V.W.W.W.Z.Z.V.V.F.V.F.V.V.V.V.V.`.`.`.Z.Z.Z.;+Z.,+Z.Z.=+=+=+=+=+=+=+=+=+=+-+=+=+=+!+!+Z.!+!+=+!+=+'+!+,+~+,+;+!+!+",
267"m.2.p.p.2.p.` 8.+.O v 6 : - ( ~ a r ..}.}.3.o.3.m.t.m.w.s.q.s.t.p.w.t.w.t.n.H.n.H.W.W.W.K.p.p.p.p.p.p.j.p.E.K.p.8.2.p.p.@+8.;+S.;+!+!+'+-+H.K 5 { } ) } 5 ) { : [ c 0 u N #.#.3.o.}.o.s.s.M.Q.Q.Q.Q.W.$+ + +W. +V.V.`.`.V.V.V.V.S.V.F.W.W.V.F.F.F.F.F.F.n.n.n.H.n.S.n.n.n.H.n.n.n.n.n.H.n.H.n.F.F.F.V.H.W.W.F.F.F.V.F.V.F.V.V.V.W.V.V.V.Z.Z.`.`.>+`.;+;+;+Z.Z.`.`.=+Z.=+=+=+=+!+Z.=+!+=+=+!+-+!+=+-+!+=+!+!+=+;+",
268"2.p.2.p.p.p.p.|.|.2.+.I e i | { { a S 3. . . . .#. . .<.}.3.}.}.<.m.s.s.s.w.H.W.Q.W.Q.W.W.F.V.F.F.F.K.V.;+;+;+V.p.p.j.p.;+;+V.;+;+(+(+^+{+Q.M k : 6 : 5 5 : : : = } [ [ c t u N N #.#.5.3.3.3.s.M.M.M.Q.H.W.W.W. +V.W. +`.W.W.V.V.V.V.V.V.W.`.W.V.V.V.V.F.F.F.F.H.H.F.W.F.F.F.H.n.H.n.n.n.n.n.n.n.n.n.n.H.H.n.F.n.V.F.V.F.F.S.F.S.F.S.F.F.S.F.V.`.V.Z.Z.Z.Z.Z.`.Z.;+Z.Z.,+=+;+=+!+Z.!+=+=+=+=+=+!+!+!+=+=+!+!+!+",
269"t.m.2.p.2.p.p.p.p.p.8.+.O B k a } r S K M G O G S M S S ......+.....f.}.<.2.V.$+t.H.Q.H.F.K.V.p.V.F.V.F.;+;+;+V.;+V.;+V.V.;+;+=+!+'+)+{+)+n.O v i i i p 6 a 6 6 : : { : ) } [ 0 u u u K N N #.#.3.3.o.o.o.M.M.Q.W.@+W.W.W. +`.`.V.Z.-+W.-+-+V.V.Z.V.-+W.V.V.W.W.F.W.W.-+W.W.n.H.n.n.H.n.F.n.n.n.n.n.H.n.n.n.n.n.n.n.n.n.n.S.n.S.F.F.F.F.E.F.F.F.F.F.H.V.V.`.V.V.Z.Z.`.`.Z.Z.=+=+Z.=+Z.Z.=+;+=+;+=+=+=+!+!+!+S.=+",
270"<.t.2.t.p.p.p.t.n.p.p.w.<. .N 0 g 5 B G O I +.+.+.+.I 2.+.+.+.+.2...+.+.2.w.F.W.2.n.F.H.F.l.;+E.;+V.;+F.Z.~+)+`.V.V.;+S.Z.;+`.,+'+-+)+$+>+H._.` I I v I i i r r a 6 : 6 : 6 } [ } 5 } 0 0 u A N N K #.3.3.3.o.o.s.W.W.Q.Q.Q.W.Z.Z.Z.`.W.W.-+`.`.`.Z.Z.V.-+V.-+W.-+W.-+W.W.W.F.W.W.n.F.n.S.n.n.n.n.n.n.n.n.n.k.n.n.n.k.n.n.n.n.k.F.n.E.n.F.F.n.F.n.n.n.H.n.F.F.H.F.V.V.V. +V.Z.;+Z.Z.;+!+Z.=+Z.=+=+=+=+Z.!+=+!+;+",
271"}.}.m.2.2.p.n.H.H.Q.Q.M.5.>.0 [ ) a r O ` 2.8.2.p.8.2.p.8.p.p.p.2.p.p.p.2.n.K.E.E.E.E.V.F.E.V.;+;+S.@+`.-+>+)+>+Z.Z.Z.`.`.>+>+>+>+>+-+-+`.F.p.|.2.|.` +.I O G B s v k a i i i 6 6 6 6 [ [ [ 0 0 u u u N N K #.3.o.M.M.M.o.s.M. +;+(+'+$+M.Q. +`.=+`.`.Z.-+W.-+W.-+F.-+W.-+-+F.-+V.S.V.V.W.V.F.n.k.n.k.k.|.k.|.|.|.n.n.|.4.|.|.n.n.k.n.n.k.n.|.k.k.k.n.n.n.n.k.n.F.F.F.F.F.V.V.V.;+S.;+S.;+=+Z.;+=+Z.!+S.;+!+Z.=+",
272"3.#.#.<.n.t.t.M.s.o.o.r.P A [ ) & < s m.+.p.p.p.p.p.p.p.p.m.p.m.m.p.2.p.m.p.K.E.!+(+(+=+;+@+V.;+;+Z.`. +~+>+)+@+,+ +;+>+-+,+,+,+,+,+,+-+,+V.K.l.p.l.|.p.|.2.2.+.O O O v v v p v p i 6 p 5 [ 5 5 [ [ [ 0 0 c u K #.3.o.o.>.#.o. +^+3+++M.o.H.W.`.'+-+=+=+=+=+`.-+-+-+-+-+W.-+V.W.W.S.-+F.-+F.V.F.F.n.n.k.n.k.k.k.n.k.k.k.k.|.|.|.<.|.|.n.2.n.k.|.n.|.|.n.|.k.|.k.|.n.n.n.n.n.F.F.F.V.V.Z.Z.Z.Z.Z.=+Z.;+Z.!+Z.;+=+",
273"N K K S s.o.o.3.3.5.#.N c % % ~ ( i s +.m.2.p.w.m.p.m.s.s.w.m.2.m.m.}.m.t.s.8.Z.5+j+b+)+ +V.Z.Z.=+@+>+>+>+)+,+-+ +>+)+>+>+,+!+;+,+~+>+ +`.;+;+S.V.F.F.l.p.l.p.l.p.|.|.+.` I I O v v B p p p p k j 6 : { { } [ 0 u >.>.P A N 3.M.:+#+P.3.#.}.W. +-+'+-+=+=+=+=+=+Z.Z.-+-+-+Z.-+-+-+V.-+Z.`.-+V.V.V.V.V.W.V.F.S.F.F.S.k.n.n.n.k.|.n.2.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.2.k.n.n.|.n.l.F.l.E.F.F.V.V.V.;+Z.Z.;+Z.Z.;+",
274"0 } 0 M 3.3.>.P N c 0 5 : ~ & = < 7 +.8.m.m.2.p.f.t.<.s.}.}.f.}...f.3.3.3.3.n.!+j+o+e+{+>+`.`.;+=+,+,+,+;+>+~+,+,+>+~+)+)+>+'+~+>+,+,+~+Z.Z.;+Z.;+V.V.V.F.F.F.l.l.p.p.|.2.2.|.` ` O O G B B B p p k k : : 6 } } 5 u u [ ] 0 N 5.r.r.P N K .Q. +~+~+'+!+!+!+!+!+!+!+-+-+=+-+-+-+-+-+Z.Z.`.-+`.-+V.V.-+F.Z.V.V.V.W.V.V.V.F.H.E.n.k.n.k.|.n.n.n.k.|.|.|.|.2.2.<.|.|.|.2.|.|.|.|.|.|.n.2.l.n.n.F.l.F.F.V.V.V.;+`.Z.",
275"k k 6 p K N 0 } } - : i 6 : : < i s +...2.2.s.3.}.f.f.#.-. . .......#.#. . .2.`.4+e+3+{+,+;+;+`.,+,+,+;+~+;+;+=+'+~+>+~+,+~+-+-+,+~+;+,+,+,+;+@+;+Z.`.Z.;+V.V.V.K.E.p.F.l.l.l.p.l.|.|.` +.+.O O G G p r r k 6 6 k 5 [ ) } % [ u u c 0 [ p <.t. +>+)+)+~+~+)+)+'+~+'+'+!+!+!+!+-+=+=+!+'+=+=+=+=+-+Z.-+-+Z.V.-+W.-+-+-+V.F.-+F.F.F.k.n.n.k.k.n.n.k.|.|.|.|.|.2.|.|.|.|.2.|.|.|.|.|.|.|.|.|.|.|.k.n.l.F.n.F.F.V.V.",
276"W y r B t B 5 ( ( < 6 v O r i e s ` m.<.f.f. .f.#. .M .K M W . .K W K B G +.H.{+$+)+>+`.Z.,+,+,+-+!+,+=+,+,+,+,+~+-+'+>+>+)+~+,+,+;+~+,+=+=+`. +`.;+ +`.`.;+`.`.Z.Z.V.F.V.F.F.p.p.p.l.p._.|.|.+.+.O O v M B B r r a { { { { 6 6 6 6 k B ..t.W.>+>+>+<+~+'+)+'+!+^+'+'+'+^+!+^+'+'+'+'+'+!+'+-+-+=+=+-+=+Z.=+-+-+V.-+`.V.`.V.S.V.V.S.F.H.V.F.H.k.n.n.|.|.2.2.|.|.|.|.|.2.|.2.|.k.|.k.|.2.|.|.|.|.|.n.k.n.n.F.n.",
277"K K K M K B G r v r v r O +.O s O +...}... .#.W M K t M G M M M K G B O s I ` n.-+-+-+-+-+>+Z.,+,+,+-+=+,+-+,+,+-+,+,+ +~+>+,+,+,+'+-+,+!+,+,+'+,+,+>+,+,+ +-+`.=+@+;+;+;+V.S.;+S.V.E.p.E.p.p.p.p.p.2.8.+.+.+.O I I s 7 | i i e s s I I O <.n.Q.W.`.,+'+_+_+!+^+'+!+_+~+_+~+^+'+^+_+~+_+'+^+~+_+'+!+=+!+!+=+=+=+=+-+-+-+-+-+-+`.Z.Z.V.W.V.W.Z.F.F.E.k.k.k.k.|.k.|.|.|.|.|.|.|.|.k.k.n.2.|.|.|.|.|.|.|.|.|.|.k.n.",
278"M G S I I I 8.s H s O W ..m.I 8.p.m.3.#. .}. .M M B r W r B r B r s I F ` 8.j.F.V.`.`.`.-+>+=+,+,+;+;+,+,+>+>+>+-+,+-+>+~+'+,+;+,+'+-+,+,+=+,+~+~+=+=+,+,+,+,+ +=+=+Z.Z.=+,+Z.;+Z.;+Z.@+S.V.F.p.E.p.p.8.p.2.p.8.2.8.I I F I F F 8.` ` 8.2.2.l.F.V.;+=+!+~+_+~+_+_+!+(+!+^+~+_+'+^+(+!+(+!+(+!+_+~+(+!+'+^+!+~+!+!+=+=+=+`.-+Z.`.`.=+`.-+Z.W.-+V.V.W.V.H.n.F.n.k.n.k.|.|.|.k.k.|.n.F.k.|.n.|.|.n.|.|.2.|.|.|.|.|.",
279"q q F 8.8.8.8.8.8.E.t.-.M -.p.p.p.<.#. .M S K M r B G v O s s I ` ` 8.8.E.E.Z.;+=+,+>+>+>+,+;+,+,+,+,+,+;+,+-+;+>+~+>+-+-+,+)+=+,+-+>+~+!+;+=+-+,+;+;+,+,+~+,+-+-+,+,+'+,+,+,+Z.,+`.;+Z.;+;+Z.Z.K.S.p.F.p.p.p.p.p.p.p.8.p.8.|.8.p.p.p.p.4.p.F.V.Z.=+<+~+^+~+_+~+!+_+~+~+_+^+^+_+~+'+^+^+_+_+(+(+(+(+(+!+!+^+!+'+'+^+'+!+!+!+-+-+=+-+=+Z.`.Z.V.`. +S.`.V.-+F.V.F.S.n.k.k.n.n.F.n.W.W.n.|.2.2.|.|.2.n.|.|.|.2.|.|.",
280"8.8.;+8.<+;+]+]+]+*+M.>.j O |.V. +M. .G O +.S O O I O F ` 8.8.8.8.E.8.;+;+Z.;+;+;+;+;+;+,+>+,+,+`.,+,+-+~+,+,+;+>+;+<+>+-+,+>+;+;+~+>+>+>+~+~+'+'+!+,+~+,+~+~+,+-+-+>+-+,+~+>+,+~+-+,+=+Z.Z.;+;+Z.;+S.;+V.V.F.V.E.;+p.p.p.p.V.E.E.p.E.p.F.S.Z.;+!+!+(+!+^+_+^+^+!+(+_+~+!+!+^+^+_+!+^+^+(+_+!+!+(+_+_+_+(+^+^+^+'+^+~+!+'+^+!+'+;+=+!+=+=+=+Z.`.`.`.Z.W.`.V.-+F.V.W.V.V.V.S.F.F.W.-+n.n.k.n.|.|.|.|.|.2.|.<.|.|.",
281";+]+>+$+{+++++P.#+o.o.K 6 v 2.W.M.o.G O O O ` I +.8.8.p.8.E.l.;+;+;+;+;+;+`.`.-+-+-+=+,+,+-+,+,+,+-+>+>+>+,+~+,+,+>+>+,+>+,+~+-+,+,+~+,+~+)+,+,+,+,+!+=+~+-+-+'+~+~+'+~+!+-+-+!+=+~+;+>+)+,+=+=+,+Z.,+;+Z.@+;+V.;+;+;+Z.;+V.;+;+;+Z.@+V.V.;+!+!+!+(+)+_+_+!+(+!+(+<+(+!+_+_+_+'+!+^+!+!+)+_+^+^+^+[+(+(+_+^+(+(+(+!+(+(+!+!+(+!+(+!+!+!+,+=+-+=+=+Z.Z.-+V.-+`.W.-+`.`.S.V.W.S.F.V.W.W.k.n.n.n.k.|.|._.|.|.2.|.|.",
282"Q.$+%+#+P.M.M.o.3.3. .G i s ` H.M.}.O 8.8.8.p.8.F.E.E.;+;+;+;+V.;+@+`.`.-+>+>+>+,+,+=+,+,+Z. +,+>+,+,+-+>+>+,+,+-+,+-+,+,+,+,+-+,+,+,+>+,+,+,+~+=+,+,+=+,+~+-+)+-+,+,+~+)+~+-+~+;+!+!+'+'+-+-+~+,+=+=+,+=+Z.=+Z.!+!+;+Z.V.V.;+!+~+=+Z.;+Z.=+(+_+^+(+_+(+^+'+_+(+(+(+<+!+(+!+(+^+_+_+^+_+(+~+^+'+)+^+^+^+_+^+^+_+_+^+'+^+_+(+(+!+(+!+!+(+~+!+!+!+!+!+=+=+=+Z.=+`.Z.Z.-+`.-+V.`.Z.`.W.V.V.V.F.n.n.k.n.k.|.|.|.2._.",
283"s.s.}.}.<. .2.+.2.` |.+.` ` 2.n.p.p.2.p.p.p.;+V.;+K.;+V.V.;+;+;+`.`.`.>+`.`.`.-+,+ +>+>+,+,+,+,+,+,+-+,+>+>+,+,+;+,+,+,+,+,+~+>+~+;+,+~+~+=+!+,+~+'+~+~+;+-+~+-+'+~+~+-+~+'+~+'+!+~+~+,+~+~+)+-+~+~+'+,+-+~+!+;+!+!+!+;+=+,+(+<+^+~+,+Z.,+'+~+^+!+<+_+^+_+_+!+_+(+(+(+<+~+^+_+_+~+^+~+(+'+^+~+^+_+_+!+!+^+~+(+(+^+_+_+(+(+<+(+(+(+(+_+^+(+_+(+!+!+!+!+!+!+!+=+'+=+=+`.`.`.-+`.W.-+`.`.S.S.-+-+V.S.F.k.k.k.|.k.|.",
284"2.2.n.2.2.2.2.|.p.p.p.p.p.p.p.n.K.p.p.E.;+;+V.;+V.;+;+;+;+V.`.`.;+`.`. +-+ + +`.,+`.`.,+,+=+=+,+,+ +,+-+-+>+>+>+,+,+>+,+,+,+,+,+-+~+-+>+,+-+'+>+)+-+'+-+~+>+~+,+'+~+~+-+~+~+,+,+~+~+'+'+'+~+)+'+)+)+~+~+,+~+!+!+<+!+!+,+!+-+^+_+^+~+~+!+~+'+~+_+!+(+!+(+_+^+!+_+_+(+!+(+!+~+_+^+^+^+)+_+!+_+!+!+~+_+~+!+^+_+!+(+(+[+(+(+!+<+(+(+^+(+(+^+!+^+(+[+(+(+(+!+(+^+!+!+!+!+!+=+=+=+=+-+Z.Z.-+`.Z.V.V.W.S.W.S.S.E.E.p.E.",
285"n.K.p.p.p.H.p.p.p.F.p.p.p.F.F.K.F.V.V.@+Z.V.Z.`. +`.V.`.;+ + +;+ + +`.>+ +-+;+ +`. +,+`.,+,+;+;+>+,+,+>+>+~+)+)+>+)+,+>+,+,+~+-+~+-+,+'+'+,+-+'+>+)+>+~+;+~+,+~+-+'+~+)+,+-+~+~+'+'+~+'+~+'+~+'+~+!+'+~+!+!+<+!+!+!+~+!+;+~+^+(+<+^+'+~+~+^+!+!+_+!+<+_+!+_+_+(+_+_+(+!+<+(+!+!+(+^+^+^+^+(+<+^+(+~+^+_+!+_+^+(+_+_+_+(+(+(+_+^+^+^+_+(+^+^+^+_+_+_+(+^+!+(+(+(+!+^+!+(+'+!+!+=+-+=+=+-+-+-+Z.=+`.Z.Z.V.V.;+S.V.",
286"n.F.K.F.W.H.F.V.H.K.H.H.W.W.V.W.W.@+V.@+`.@+`.`. + + +;+;+Z.`.;+`. +`.>+ +`.,+,+,+-+>+-+,+=+,+,+,+,+,+;+-+,+>+-+ +~+=+,+,+,+,+-+,+,+,+>+~+,+,+!+-+~+>+'+~+,+~+~+-+'+'+'+~+'+~+,+~+'+~+'+~+~+~+'+~+'+'+~+~+!+~+<+~+(+~+!+<+!+~+^+!+!+'+^+!+'+~+(+(+!+(+^+'+^+_+!+_+(+!+(+~+^+_+(+(+(+(+_+^+!+(+!+(+~+_+_+(+_+_+(+(+(+}+_+(+(+(+(+^+[+_+_+(+_+(+(+(+^+^+^+(+(+(+(+(+^+(+!+^+!+(+!+(+'+=+!+=+!+=+=+=+=+=+=+Z.;+S.;+",
287"H.H.n.H.H.H.H.H.n.H.H.H.H.F.H.@+V.V.;+`. +`. +`.`.`.;+`.;+,+ +>+ +>+>+`.,+-+`.`.`. + +,+;+>+,+,+>+,+-+-+,+,+,+>+,+,+,+-+-+;+>+>+,+~+>+'+>+'+'+-+,+'+~+,+,+!+,+~+~+-+'+~+~+~+'+~+)+)+'+~+~+~+~+~+'+!+'+^+'+~+!+!+_+~+!+!+!+~+^+~+!+^+~+!+!+_+!+~+~+^+'+_+^+^+!+^+(+_+<+^+^+^+!+<+<+_+_+_+(+(+(+(+^+(+(+(+^+}+(+^+_+}+^+(+_+^+_+}+(+_+(+(+}+(+(+}+(+(+(+(+(+(+[+^+^+(+(+[+(+(+(+(+(+!+(+_+(+!+(+!+(+!+!+!+(+;+!+=+",
288"t.H.H.n.H.t.H.K.n.H.F.H.K.F.F.V.V.V.V.@+`.;+`. +`.Z.;+Z.;+`.`. +>+ + +@+@+ +,+-+=+,+ +>+;+,+,+,+>+,+,+,+-+,+;+;+,+,+,+,+'+!+~+;+,+,+,+-+>+-+)+~+,+'+'+'+>+~+'+)+)+~+)+'+-+~+'+~+~+)+'+)+'+!+~+~+~+~+~+'+~+)+~+!+~+_+~+'+<+~+^+)+_+_+~+_+!+_+!+_+_+_+!+!+^+^+_+_+!+(+_+)+(+(+(+!+(+(+(+_+(+(+(+(+_+^+^+(+(+}+(+^+^+^+^+^+_+[+^+^+(+^+^+^+_+<+(+(+}+(+(+[+^+^+(+[+^+[+(+(+[+(+(+(+(+}+(+(+[+(+(+(+(+(+(+(+(+(+(+(+",
289"H.t.H.t.F.H.K.p.K.p.K.F.F.W.W.V.V.@+;+V.@+Z. +`.`. +Z.;+`.,+,+,+ +>+;+,+=+,+,+;+ +,+>+,+,+,+,+,+'+>+,+,+>+~+=+,+;+>+,+,+,+,+,+~+,+=+'+)+'+~+;+,+~+>+,+)+'+'+>+~+~+,+!+~+~+'+'+'+'+~+~+'+'+)+'+'+'+'+'+~+!+<+~+'+^+~+^+~+!+~+!+^+'+!+_+!+_+^+_+(+!+!+(+_+!+'+^+_+<+_+_+^+'+(+(+(+_+_+_+^+_+(+<+}+^+^+(+(+(+(+}+_+^+_+^+^+_+)+^+_+^+_+(+(+(+(+(+}+(+}+(+(+[+(+}+_+|+^+|+[+(+[+(+[+[+(+[+(+[+[+[+[+[+[+(+(+(+(+(+(+",
290"p.H.H.t.K.n.F.p.F.p.K.K.H.K.K.;+V.V.;+V. +;+ + +`. +`.`.`.`. +>+`. +,+ +Z.`.,+;+,+,+>+,+=+,+>+>+-+>+>+,+,+>+,+>+;+>+>+,+,+,+-+,+~+,+'+-+,+!+~+~+~+'+-+'+)+~+~+~+'+-+'+~+'+)+>+)+~+~+,+~+~+^+)+'+'+'+^+~+!+~+~+~+'+'+^+_+'+_+~+^+(+!+_+!+!+!+^+_+(+~+!+_+_+~+^+_+(+(+(+^+_+(+(+(+(+(+(+_+_+[+(+(+[+(+^+^+_+(+(+_+!+^+^+^+^+~+'+_+^+^+_+^+}+_+(+^+(+|+}+}+|+[+[+(+[+(+[+|+}+[+}+[+}+[+|+(+|+|+[+[+(+[+[+7+[+[+}+[+",
291"H.p.n.H.H.K.K.H.K.K.F.F.V.V.F.V.V.@+V.@+Z.`. + + +`.`.,+ + +,+`.,+;+ +>+>+>+,+Z.`.,+,+`.,+>+>+>+ +-+>+>+,+>+>+,+-+,+~+;+,+,+~+-+,+!+,+>+~+,+=+'+-+>+)+>+~+~+~+~+~+~+~+~+>+)+'+~+~+-+!+'+'+'+'+'+'+'+~+'+~+~+_+~+_+_+~+'+_+'+^+!+^+^+_+_+(+^+_+^+~+(+_+^+_+_+_+^+^+^+_+(+(+(+(+(+^+(+_+^+(+(+(+_+(+^+[+^+^+^+[+_+^+'+~+!+~+^+^+)+'+_+^+^+)+^+<+(+^+(+(+(+^+^+(+}+[+}+|+|+|+(+}+(+(+|+(+[+}+[+[+7+[+[+[+(+}+[+[+}+",
292"H.H.K.n.H.H.K.n.H.H.F.W.H.V.F.V.V.@+V.@+`.`. +>+ + + + +,+;+`.`.Z.;+`.>+>+`.>+,+,+,+,+`.,+,+>+-+-+,+,+>+,+,+>+>+,+,+-+~+,+,+~+,+,+=+!+-+,+~+=+~+~+~+'+'+'+~+-+,+,+'+~+!+'+'+'+~+!+~+~+~+'+~+~+~+'+^+!+_+!+'+^+'+~+_+_+'+^+!+~+_+~+^+~+<+'+'+(+^+'+!+!+(+(+(+(+_+_+!+<+(+~+_+^+(+^+^+(+(+_+_+^+_+(+_+(+[+(+(+!+_+_+^+^+^+!+~+~+_+)+'+^+)+^+^+^+(+_+}+}+[+[+[+(+(+[+}+|+[+|+[+}+[+[+|+}+(+(+[+}+[+(+[+[+(+7+}+|+|+",
293"n.H.F.H.H.H.F.H.H.F.H.W.W.W.W.W.`.V.`.`. + +`. +>+ +`.,+`.-+ +,+ +,+ +,+>+>+,+,+`. +-+>+,+,+ + +>+=+,+-+,+=+,+>+,+,+;+,+;+~+,+,+-+>+>+-+-+,+~+,+,+~+,+>+'+-+~+~+'+,+'+)+-+'+'+'+~+~+'+-+~+!+~+'+~+!+_+!+^+_+~+_+)+<+'+^+~+^+^+~+(+!+'+^+^+^+'+(+(+_+_+~+^+!+!+(+(+_+!+(+(+(+(+^+(+(+(+(+(+[+}+}+(+(+^+_+(+^+[+(+(+(+(+(+^+(+(+~+~+^+'+^+'+^+_+^+^+^+^+}+[+[+[+}+|+[+[+|+(+[+[+[+|+(+[+[+7+(+[+}+[+[+[+[+[+|+^+}+",
294"H.t.F.n.H.Q.F.F.Q.F.F.V.K.W.W.W.W. +V.`.`. +`. + + + +>+`.,+>+,+`.,+`.`.-+`.`.,+`. +`.,+ +,+;+,+>+;+,+-+ +=+=+,+,+-+>+'+,+)+>+>+)+~+,+~+'+,+~+'+-+!+!+>+~+'+-+'+'+)+~+~+)+)+'+'+~+~+~+'+~+'+~+^+)+'+'+~+~+'+'+_+'+~+'+'+~+~+(+~+_+_+~+_+)+<+)+_+(+(+(+~+_+<+!+!+(+(+_+_+(+(+!+_+(+(+<+(+(+(+^+}+(+(+(+_+(+(+^+^+(+(+(+(+[+!+(+(+'+^+)+^+!+(+_+^+^+^+^+^+|+|+|+[+^+}+[+[+}+[+|+(+|+[+(+[+}+[+[+[+[+[+7+^+|+[+|+|+",
295"p.H.H.H.F.H.F.F.F.F.K.H.V.V.W.W. +V. +`. +`. +`.;+;+`.`. + +`. +>+`.,+-+ +@+;+;+,+>+>+>+,+;+,+;+,+,+,+,+-+>+>+,+-+~+,+,+,+,+,+)+,+,+~+>+>+)+-+-+,+,+~+~+)+>+~+>+'+~+'+)+-+)+)+'+'+~+~+>+'+~+'+)+'+'+^+)+'+_+_+!+^+'+~+^+^+^+'+(+'+!+^+_+_+^+_+_+_+^+'+^+(+!+(+_+_+(+(+(+<+(+(+(+_+<+(+(+(+(+(+(+}+}+}+(+(+^+(+(+(+}+[+[+^+[+(+^+[+^+(+^+^+(+(+(+^+[+^+|+^+[+|+|+[+|+[+|+5+(+[+[+[+[+}+|+[+}+[+7+[+[+[+|+|+[+[+[+",
296"F.H.H.W.F.H.K.W.W.F.V.V.K.W.W.V.@+V. +`. + + +`.V.`. +,+`. +,+>+>+ +;+,+-+,+`.;+;+,+,+-+,+,+,+;+,+@+;+;+~+,+,+,+>+,+,+,+,+~+;+~+-+>+'+>+>+>+)+~+~+,+~+~+~+'+~+~+'+)+'+)+'+~+,+~+-+~+!+~+)+'+!+^+)+~+~+<+'+'+)+<+'+!+!+_+~+_+'+^+^+'+~+'+'+^+)+^+!+^+_+)+^+<+(+(+^+'+(+(+_+}+(+(+(+(+(+(+^+(+^+(+[+(+(+(+}+(+[+}+[+_+|+(+^+[+(+^+[+[+[+(+^+[+^+(+^+[+_+[+^+^+^+|+|+|+[+[+5+7+5+[+[+[+[+[+[+(+[+}+7+[+[+[+|+5+|+[+",
297"K.K.H.H.H.K.H.H.F.F.V.W.V.H.V.W.V.V.`.V.;+W.`.@+@+@+,+`.;+,+ +>+ +;+-+ + +`.;+-+>+,+,+>+,+,+,+-+,+,+~+,+-+-+-+,+,+,+~+;+>+>+~+@+>+,+>+)+)+>+~+,+,+~+,+,+~+>+)+~+>+)+>+~+~+'+~+-+~+~+~+)+^+~+~+)+'+)+)+'+'+'+^+'+'+^+^+!+^+^+<+~+^+~+^+!+_+'+^+^+)+_+'+<+^+'+_+'+_+(+_+!+_+_+_+_+(+(+_+(+(+(+[+^+^+^+(+(+(+(+_+[+_+[+(+[+[+^+(+(+(+(+[+[+[+^+[+[+[+[+[+|+|+|+|+6+|+6+6+6+5+5+[+[+7+|+}+[+7+[+7+[+[+|+|+6+[+|+|+6+",
298"K.l.H.H.F.F.F.K.K.W.K.W.W.W.V.@+V.W. + +`.W. + +`.`. +`.`.-+ +`.`.@+`.>+,+,+ +,+ +>+@+ +>+-+,+,+-+>+-+>+;+,+,+,+,+,+-+~+;+'+'+~+~+>+>+-+~+>+>+-+,+~+~+~+~+~+)+~+~+~+~+'+~+'+~+'+'+~+'+'+'+_+'+)+)+^+'+~+~+~+)+^+'+'+)+(+~+^+^+~+^+!+^+!+!+'+)+^+!+(+'+'+^+'+_+^+^+!+_+(+^+^+!+_+_+(+_+^+^+(+[+(+(+(+[+[+(+[+[+(+[+[+(+[+[+|+[+[+[+[+[+[+[+[+6+|+|+5+[+|+|+^+|+6+|+6+5+6+6+6+7+5+7+7+[+5+7+[+[+5+6+6+5+7+5+6+6+6+",
299"p.K.F.K.H.F.K.F.F.H.W.W.W.F.W.V. +`.W.`. +&+`.`. + +>+ +;+ +>+>+,+`. +,+ +`.,+ +,+,+,+,+,+>+ +,+`.,+>+,+>+,+,+,+,+,+~+,+-+>+>+>+)+,+'+>+-+~+~+>+~+-+>+>+)+'+,+~+)+~+~+'+'+~+'+'+~+'+~+'+~+~+'+)+'+'+'+'+'+'+'+)+)+^+^+)+^+~+'+_+!+'+)+^+^+^+^+'+^+^+^+)+(+_+^+!+!+(+(+!+(+^+^+(+(+^+(+(+(+^+^+|+[+[+(+(+[+[+|+[+[+|+6+[+|+[+|+[+|+|+|+[+7+5+|+6+5+5+6+5+6+6+6+6+5+5+6+6+6+6+5+[+5+5+5+[+7+5+7+|+7+|+4+6+6+5+6+6+",
300"F.F.F.K.H.F.K.H.F.H.H.F.W.W.W.W.V.`.W. + + + +`.;+`. + +`.`. + + + + +,+>+ +,+`.`.>+`.,+`.-+>+>+-+,+>+,+>+,+-+>+ +>+;+>+,+-+-+,+'+,+~+,+,+>+~+,+~+'+~+>+>+'+'+,+)+'+~+-+'+~+~+'+~+~+~+'+'+~+'+)+'+~+'+^+'+^+'+^+^+'+_+~+^+)+^+_+_+^+)+'+'+'+)+~+~+^+^+)+(+!+_+_+^+(+_+!+(+(+^+^+(+[+(+[+(+|+|+[+|+|+[+[+[+[+5+|+[+|+6+[+6+5+[+5+[+[+6+5+5+6+6+6+6+6+6+5+5+6+6+0+6+8+6+6+6+8+5+5+5+7+9+5+5+5+5+5+5+5+6+7+6+6+7+5+",
301"K.K.K.H.H.H.H.F.W.H.W.W.W.V.Q.`.W.V. +W.`.V.`. +`.`.;+`. +>+>+>+,+;+;+ +>+-+`.@+>+`.>+>+>+ +`.,+,+,+,+>+,+-+,+-+)+;+=+,+~+,+~+~+,+=+=+'+)+~+>+~+>+>+-+~+~+)+-+!+,+'+)+~+-+'+'+'+)+'+)+,+~+'+'+'+'+'+~+~+'+)+)+'+'+~+!+^+'+'+'+'+'+~+^+_+_+^+^+^+^+~+^+(+^+^+(+(+(+^+(+^+^+[+(+[+(+[+[+[+|+[+|+6+|+5+6+|+6+5+[+7+5+6+5+5+5+5+5+7+9+7+5+5+5+6+6+6+5+5+6+6+6+0+6+6+5+5+5+5+5+5+7+8+5+8+5+5+5+5+5+5+8+8+6+6+7+6+5+6+",
302"H.H.H.H.K.F.K.H.H.H.Q.F.W.V.W.V.@+W. +W. + +`.W. + + + +>+ + +>+`.`.;+`. +>+-+`.>+ +`.>+>+,+;+;+;+Z.,+>+>+>+ +,+>+>+~+,+,+-+-+,+,+)+>+,+-+!+,+'+'+,+,+~+'+)+)+'+-+'+'+)+,+'+>+~+,+;+~+,+~+'+'+'+'+'+'+'+'+'+-+)+'+)+,+'+^+'+'+!+(+!+'+(+!+!+!+!+(+!+'+[+(+[+[+[+[+[+[+(+[+[+[+[+|+|+|+5+5+|+5+0+|+6+6+5+6+6+5+8+6+5+6+5+5+0+6+5+5+9+5+8+8+0+0+0+8+5+0+0+6+0+0+b+c+0+0+8+8+5+5+8+5+8+8+8+8+8+8+7+5+6+6+6+7+6+6+5+",
303"F.H.F.F.F.V.K.F.H.F.F.Q.V.W.W.W.W. +W.;+V.;+`. +>+`.`.`. +>+>+$+>+ +`.-+`. + + +>+,+>+ +,+`.`.,+=+,+>+-+~+,+,+>+-+,+,+,+~+>+>+'+,+~+~+~+,+,+)+>+,+)+~+-+-+~+,+,+~+'+)+~+'+~+!+-+'+!+'+~+-+^+)+~+~+'+'+-+)+'+'+'+'+!+!+^+'+~+_+^+!+'+(+!+_+^+^+[+^+[+[+[+[+[+|+[+|+5+[+[+|+6+6+6+5+5+5+5+6+5+6+6+8+5+0+8+8+5+0+0+0+0+5+0+8+8+0+0+8+8+8+8+0+5+6+8+5+8+5+9+0+0+5+5+5+8+b+0+8+0+b+0+0+8+0+8+8+9+5+8+8+9+7+9+5+5+|+6+",
304"F.H.K.K.p.;+p.F.H.H.V.H.V.H.W.V.V. +W.@+`.@+`. +$+ + +Z.`.`.>+`.-+`. + +,+,+,+,+,+>+,+>+>+,+ +>+ +,+ + +~+,+,+>+,+,+,+>+~+'+,+~+,+-+-+~+,+,+,+)+,+>+)+)+>+~+>+>+,+,+)+>+>+'+~+=+-+,+'+)+>+'+)+'+'+)+)+^+)+~+!+'+'+^+!+^+^+!+(+^+(+(+[+(+^+(+^+[+|+[+^+|+|+5+6+5+6+7+5+5+5+0+6+6+5+0+6+6+5+0+5+0+8+5+0+0+0+8+0+8+5+8+g+0+f+8+8+8+5+8+0+g+0+0+0+0+0+9+5+5+5+8+8+9+9+f+8+8+8+8+8+8+0+8+0+8+5+8+5+5+5+5+5+5+9+5+6+6+",
305"H.K.F.K.F.K.H.H.H.V.F.W.Q.W.F.@+W.W. + +V.V. +`. + +`.@+;+`.`. +`.>+;+,+`.;+`.>+ +,+>+>+,+>+>+-+-+>+,+,+,+,+,+>+,+,+-+'+>+,+-+,+=+,+>+>+>+,+>+>+-+,+>+~+=+>+-+)+)+-+-+'+'+)+-+~+~+!+=+'+'+'+^+^+~+^+^+~+(+^+_+!+(+!+[+(+^+[+(+[+(+[+(+[+[+|+[+5+5+|+6+|+6+6+6+6+5+0+5+8+8+5+0+5+0+0+0+0+0+0+0+0+8+f+f+f+f+f+f+f+f+f+f+f+f+f+8+f+f+f+f+0+g+8+8+8+8+8+0+8+8+0+8+8+5+9+0+8+8+8+8+8+5+8+5+8+8+8+8+8+0+0+8+8+5+8+6+6+",
306"F.F.K.K.F.W.F.F.H.F.K.V.W.W.W.V.`.W.`.@+`.V. +`.`. +`.`.,+-+`. +,+>+`.>+`. +,+,+ +>+>+ +>+,+>+ +>+>+,+-+-+,+,+,+-+-+-+-+>+)+>+)+,+,+>+>+)+-+-+{+-+,+,+>+,+)+,+,+~+>+-+'+'+'+~+^+~+~+!+!+^+'+)+(+^+^+!+(+(+(+(+^+[+[+(+[+[+[+[+|+|+[+|+5+|+6+6+6+5+5+5+5+0+8+0+0+8+0+8+0+f+0+0+8+0+0+f+f+f+f+f+f+g+8+f+c+f+i+0+g+g+f+f+i+f+f+f+f+0+8+f+f+f+f+f+f+0+8+8+8+8+f+f+5+f+8+8+0+f+8+8+g+0+8+8+5+f+5+j+5+8+5+5+8+7+8+5+6+",
307"p.F.H.F.H.K.K.K.K.F.V.W.V.K.V.W.W.V.@+`.W.`.V.`. + + +;+@+ + +;+;+`. +`.>+>+`.,+,+>+>+,+,+>+>+,+,+,+>+ +>+>+-+`.,+,+,+,+'+>+-+-+-+-+-+,+,+>+>+-+>+-+,+=+'+>+~+~+!+!+~+'+'+^+'+(+!+^+~+^+^+^+(+^+(+^+[+[+[+[+|+[+[+|+|+|+6+[+5+5+5+8+5+6+0+6+6+0+0+0+0+0+0+0+0+8+f+f+f+f+f+f+f+f+f+0+h+f+h+h+f+f+h+o+f+f+h+f+i+f+f+o+i+f+h+f+f+m+f+f+f+f+f+f+c+f+f+f+f+f+0+f+f+f+g+8+0+g+8+8+f+5+8+9+f+8+f+5+8+8+8+0+8+5+5+7+8+0+",
308"l.F.H.K.F.H.F.H.K.V.H.H.V.W.W. +W.V.W.`. + +@+@+Z.`. +`. + +`. + +>+&+>+ + + +;+,+-+>+`.,+ + +,+`.,+>+>+-+>+>+ +>+>+=+>+>+>+>+>+)+,+'+-+!+~+>+-+'+)+~+~+~+'+'+'+_+~+'+!+'+^+^+^+(+(+(+(+[+^+[+(+[+[+[+7+5+7+7+[+5+5+6+6+6+6+6+6+6+0+0+0+0+0+0+0+0+f+f+0+0+f+f+0+f+f+f+c+h+f+h+f+h+f+h+h+f+m+f+f+f+m+h+m+h+m+m+h+m+o+m+m+m+m+f+f+o+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+g+f+0+f+0+f+f+5+8+5+8+9+8+f+8+8+8+8+8+5+6+6+6+",
309"p.n.K.F.H.F.H.W.F.K.V.F.V.V.V.V.`.W. +W.W.`.Z.`.@+W.W. +;+;+@+`.,+`.`. +`.`.;+`. + +-+-+-+,+,+ + +>+>+,+ +>+>+>+,+,+ +,+~+-+~+=+,+'+-+,+,+'+'+~+>+'+~+!+!+~+_+_+(+^+(+(+[+(+(+[+|+[+[+|+|+5+7+5+5+6+6+5+5+0+5+6+5+5+5+6+0+0+0+8+0+8+0+0+f+0+f+f+f+0+f+f+f+i+f+f+f+f+h+f+f+h+m+h+h+m+h+m+m+o+h+o+m+f+o+m+o+m+f+o+i+m+m+o+m+f+o+m+m+o+o+o+o+m+m+m+o+f+o+f+f+f+h+f+f+f+g+f+f+f+f+n+8+f+f+5+f+0+8+8+8+8+5+8+8+8+7+6+",
310"8.k.n.F.H.H.H.H.F.H.F.W.W.V.V.K.Z.V. +`.W.W.;+`.;+;+W. +`.`.;+`.`.`. + +;+`.>+ +>+ +>+@+;+;+;+,+,+,+>+>+)+>+,+>+)+!+,+,+'+-+~+=+,+~+'+~+=+!+'+!+~+'+(+(+!+(+(+^+^+|+^+(+[+[+[+|+|+[+|+|+5+5+5+5+5+8+5+8+5+0+0+0+0+0+0+0+f+f+f+f+0+c+f+h+h+i+i+f+h+f+i+h+h+h+m+h+h+m+m+m+m+m+m+o+h+m+o+p+m+o+f+o+m+m+o+m+q+s+m+m+m+q+m+o+m+o+o+f+m+m+m+m+o+o+f+m+o+o+o+o+o+f+m+h+f+f+g+0+g+f+f+8+f+8+8+8+8+f+0+8+0+8+8+6+6+5+7+5+",
311"_.4.4.n.F.H.F.W.K.V.K.F.V.V.F.;+K.@+V.W.`.@+@+V. +W.;+ + + + +;+@+ +`. + +,+ +,+ +>+>+>+`.;+-+Z.,+=+=+-+>+)+,+~+-+,+~+-+)+~+~+~+!+~+~+!+!+'+_+^+(+(+_+(+(+(+[+(+7+(+5+5+5+6+6+0+6+6+6+0+0+0+5+8+f+8+0+8+f+f+f+0+0+f+f+f+f+f+f+f+f+f+i+f+f+f+f+h+m+o+f+o+o+m+o+o+m+p+p+s+p+o+s+o+o+q+m+m+o+o+s+m+m+p+m+s+s+m+t+t+m+s+o+m+o+m+s+m+m+q+m+m+m+m+o+o+m+m+o+f+o+o+f+f+m+f+f+f+0+f+f+f+f+f+f+8+8+8+8+8+8+0+6+8+8+6+5+6+",
312"` _.4.l.l.F.F.V.V.K.V.K.@+V.V.V.V.@+@+`.V.V.;+;+;+`.W. +`.`. +>+,+ +,+-+`.,+>+ + +>+,+;+=+;+,+=+,+,+,+!+,+~+,+~+~+'+~+~+'+!+!+_+(+(+(+_+(+(+(+(+[+[+|+[+5+[+5+[+6+7+[+7+5+0+0+4+0+0+6+0+0+f+f+8+f+f+f+f+f+f+f+f+m+f+f+h+h+m+o+o+m+o+o+o+m+m+o+o+m+p+o+m+m+m+o+o+s+s+p+m+m+o+s+t+m+m+o+m+m+o+x+s+m+s+m+m+t+s+m+t+m+t+t+s+t+o+s+q+m+q+s+m+p+m+o+f+o+m+o+m+o+o+o+f+f+g+n+g+8+f+g+f+8+f+8+f+0+8+0+8+8+0+6+6+6+5+6+6+",
313"_._._.|.k.p.F.F.F.;+F.;+V.W.V.;+;+`.V.`.>+ + +`.`. +,+ +@+ +`.-+>+ +;+;+>+ + +,+,+,+>+,+,+=+-+,+~+~+!+,+!+'+!+!+'+_+_+!+^+^+(+(+^+^+_+(+|+[+7+5+[+7+|+6+5+6+5+5+9+5+8+0+5+8+0+0+c+0+f+f+0+h+f+f+f+f+f+h+h+f+f+m+h+m+m+m+m+m+m+m+o+m+m+m+m+q+s+o+s+s+m+s+q+s+s+m+s+s+s+t+t+t+t+s+y+y+m+y+y+m+y+y+s+s+y+x+m+t+t+s+s+s+s+t+s+s+o+s+m+m+p+s+m+s+m+m+m+o+o+f+o+f+f+i+f+f+f+f+f+g+0+g+f+8+g+f+8+0+8+8+6+6+8+8+7+6+7+6+",
314"_._._._.4.j.E.V.V.V.@+K.Z.@+V. + +,+;+V.`. + +$+Z.;+`. +;+`. + +>+>+`.;+!+-+=+=+;+~+)+;+)+~+'+'+'+_+^+~+!+~+~+(+(+(+^+(+(+_+(+[+[+[+|+|+|+[+6+7+5+6+6+6+5+0+0+0+0+8+8+f+0+c+i+c+f+f+i+i+f+h+f+m+m+m+o+o+o+o+o+m+m+p+m+o+t+o+o+m+t+s+o+y+s+m+s+o+s+s+t+m+x+s+s+s+s+s+s+m+x+m+y+m+s+x+s+s+x+m+x+y+y+m+y+y+x+x+o+y+m+x+s+o+y+m+y+s+t+t+p+q+o+o+p+s+m+m+o+m+o+o+o+i+f+h+h+f+f+f+0+f+g+8+f+0+8+8+5+9+8+6+6+6+6+5+7+5+",
315"` _.4._._.8.k.l.F.V.V.;+V.`. +`.`.@+`. +>+`.>+`.@+`.>+-+Z.;+;+>+,+-+;+=+,+,+,+,+!+,+)+'+!+~+~+_+~+_+(+(+^+^+(+(+(+^+}+}+(+5+[+[+}+6+6+6+6+0+6+5+5+8+0+8+8+b+8+8+8+8+f+8+8+f+f+f+i+h+h+h+i+m+m+o+o+o+m+m+m+o+m+m+p+p+s+s+s+s+s+t+s+y+x+s+o+y+y+w+y+m+x+x+s+s+x+t+y+y+y+y+x+y+x+w+y+o+y+y+y+y+y+o+y+y+x+m+x+x+x+s+y+o+x+m+s+y+m+t+o+s+t+m+m+o+o+m+o+o+o+o+o+o+f+f+i+i+f+f+h+f+f+8+f+0+8+f+8+8+0+8+5+8+8+5+6+6+5+|+",
316"|.` _.4._._.4.k.F.V.V. +@+ +$+`.`. +`. + +`.@+ + +,+ +>+-+,+;+,+;+=+!+~+'+)+~+'+~+_+_+)+_+(+!+_+(+_+^+(+(+}+}+}+[+[+|+4+|+6+6+6+4+6+8+0+6+7+0+0+8+0+0+0+0+0+f+f+f+f+f+i+h+h+m+h+h+o+o+m+p+p+m+o+m+s+m+t+s+s+y+m+s+m+s+t+m+y+x+y+m+y+y+m+x+y+x+y+y+y+m+x+x+x+y+m+x+m+x+y+x+y+x+y+y+y+y+y+y+y+y+w+y+w+y+y+o+x+x+m+y+x+x+y+m+y+s+s+y+s+o+t+s+o+o+m+o+o+o+o+o+o+o+f+f+i+h+0+c+c+i+f+f+8+8+0+0+b+8+8+6+6+6+8+|+6+6+[+",
317"_._._._._._._.4.j.E.V.Z.`.-+ +>+`.;+,+-+>+>+,+,+>+-+=+=+,+-+!+=+'+'+~+'+)+!+(+~+^+'+~+_+!+_+_+(+[+[+(+|+|+[+[+[+[+|+6+7+6+6+8+6+8+8+4+b+b+0+8+8+f+c+c+c+c+h+0+f+f+f+h+h+m+p+p+o+q+p+p+p+p+m+o+m+s+s+s+m+s+y+s+s+x+x+x+x+y+x+x+x+y+m+y+y+y+y+y+y+y+y+y+y+m+y+x+y+y+x+y+y+y+y+x+y+y+y+y+y+x+y+y+x+y+x+y+y+y+y+y+y+x+y+y+y+y+x+o+y+o+t+s+s+o+m+m+o+o+o+o+m+m+f+i+h+o+c+c+k+h+0+f+c+c+c+c+8+8+8+5+6+6+6+8+6+4+|+|+6+",
318"_.` 8.` _.8._._.|.k.l.V.`.-+>+-+Z.`.,+`.,+,+,+,+>+~+~+~+~+'+~+~+~+^+^+^+'+'+(+!+^+^+(+}+^+[+(+(+(+6+|+5+|+6+4+}+5+6+5+7+6+0+0+8+8+0+0+8+8+8+f+f+c+c+i+i+c+i+i+f+f+n+o+o+p+p+p+m+m+m+o+m+s+s+s+y+o+y+m+y+m+y+y+s+y+y+y+x+y+y+y+x+y+x+x+x+x+y+y+y+y+y+y+x+B+y+x+x+y+y+y+y+y+y+y+y+y+y+y+y+y+y+y+y+y+x+x+y+y+o+y+y+o+y+s+o+y+y+s+s+y+o+o+s+t+m+m+s+m+o+m+m+o+f+o+i+f+h+h+c+c+0+i+f+8+8+c+c+6+0+8+8+7+7+6+7+6+6+4+|+",
319"8.H ` _._._._._.4._.j.E.Z.`.-+>+;+;+;+,+,+'+~+!+!+-+,+'+'+'+^+!+~+_+~+~+^+(+(+(+[+}+[+(+[+}+}+6+|+7+7+|+5+6+6+6+6+8+0+5+5+8+4+0+c+c+0+c+c+c+c+h+i+h+i+i+i+m+f+f+f+m+m+p+m+p+m+m+p+t+m+t+s+s+y+s+x+y+y+y+y+y+s+y+x+y+y+y+x+y+x+y+B+y+B+y+x+x+y+B+x+B+B+B+B+y+y+y+B+A+B+y+y+y+y+y+x+y+y+y+y+y+y+y+x+y+y+y+x+y+y+y+x+m+y+y+t+s+o+y+m+y+m+o+s+t+m+o+m+m+i+o+f+o+i+h+h+c+f+f+0+g+c+c+0+6+6+5+5+6+7+6+6+5+7+6+|+|+|+|+",
320"` 8.8.8._._.4.4._._._.4.F.Z.,+>+'+)+~+,+,+,+~+~+~+~+~+^+~+_+^+(+^+^+(+(+_+(+[+(+[+(+7+}+|+|+}+6+6+6+9+5+5+8+6+6+9+8+0+8+b+8+0+0+f+c+0+0+8+f+c+k+i+k+h+o+f+m+o+m+o+s+m+p+s+s+s+m+s+y+s+y+s+s+y+y+o+y+y+y+y+y+x+y+x+x+y+y+y+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+C+B+C+A+B+y+B+y+y+y+y+B+y+y+y+y+y+y+y+y+y+x+y+y+y+y+x+o+y+s+s+s+o+s+o+y+o+m+t+m+o+m+o+f+m+h+i+i+i+i+c+c+i+0+f+c+0+0+8+0+8+7+8+7+|+4+6+6+|+|+}+}+}+",
321"_._._._.8.4._._.4._.8.j.j.F.Z.'+,+=+'+'+~+'+'+'+!+(+'+_+^+(+(+^+(+[+|+^+|+(+}+7+5+|+5+6+6+6+6+6+6+6+6+8+8+5+0+8+0+0+8+0+f+i+8+i+f+i+i+g+h+f+f+f+h+m+m+o+q+m+m+s+m+s+s+s+s+s+t+t+s+s+o+y+y+y+x+y+y+y+x+y+y+y+y+y+y+B+B+B+B+B+B+C+B+B+B+B+B+B+B+B+C+A+B+C+C+C+C+A+C+C+B+B+B+B+y+y+B+y+C+A+y+y+y+y+y+y+y+y+w+m+x+x+m+y+x+s+o+s+y+m+o+y+m+s+o+m+q+o+o+i+o+k+k+i+f+i+0+f+i+0+c+0+0+g+8+6+6+6+5+5+5+6+6+6+[+7+}+[+^+^+",
322"_._._._.4.|.|.4.4.4.4.k.j.l.F.Z.;+!+~+'+_+_+^+^+^+(+^+^+^+_+(+^+}+[+|+|+|+[+|+|+6+|+6+6+6+6+6+5+0+0+c+8+0+8+8+8+b+c+g+0+f+i+0+i+f+f+f+g+i+m+m+o+h+m+m+m+q+p+o+t+t+t+m+s+y+s+s+o+y+x+y+y+x+y+x+x+y+y+x+y+B+y+B+B+B+B+C+C+B+C+B+C+B+C+A+C+C+A+C+C+D+C+C+C+C+C+C+D+C+C+C+B+C+C+A+C+B+B+y+B+y+y+C+y+y+x+y+x+y+y+y+x+x+o+y+m+y+y+o+x+m+y+m+m+t+m+m+i+f+f+h+h+k+i+0+g+8+8+g+8+8+8+8+b+8+6+5+5+|+6+6+6+6+7+[+[+}+[+(+}+",
323"_._.8.8.j.4.4.4.4.|._.4.4.k.k.V.,+~+^+_+!+^+_+!+(+^+[+|+(+[+}+[+[+|+6+5+6+|+6+6+6+8+6+0+6+6+5+8+5+8+8+8+8+g+0+f+0+f+0+h+h+h+i+f+m+o+o+f+o+o+m+o+o+o+m+s+m+y+x+m+y+x+y+y+s+y+y+y+x+y+y+y+y+A+B+B+B+B+B+B+B+B+B+B+C+C+C+C+C+C+C+C+D+C+D+D+C+D+C+C+D+D+C+D+C+C+C+C+C+C+C+B+B+B+B+B+C+B+B+C+y+B+y+y+y+y+y+y+y+y+x+x+x+x+y+y+s+m+s+m+y+o+q+p+m+p+o+f+f+h+h+c+f+0+g+8+8+0+f+0+4+8+6+0+6+2+7+6+5+6+|+|+}+}+[+}+[+(+(+(+",
324"4.4._.4.j.4.j.k.k.4.4.8.4.|.4.k.V.`.'+^+^+^+_+(+}+^+}+|+[+|+|+4+|+|+6+6+8+6+6+7+6+6+|+0+0+8+5+8+8+0+0+8+0+i+8+g+f+i+i+i+c+m+m+o+o+f+m+m+p+t+m+o+t+m+o+x+s+y+y+s+y+y+y+y+x+y+y+y+x+x+x+y+B+B+A+B+B+C+C+C+C+C+B+C+C+C+C+D+C+C+D+C+D+C+C+D+D+D+E+D+D+C+D+C+D+F+C+C+C+C+C+C+B+B+B+y+B+B+y+B+B+B+B+B+y+y+y+y+y+o+y+m+y+y+t+y+o+y+o+s+s+m+m+h+m+o+o+h+i+c+h+f+8+0+0+0+8+8+8+8+8+8+6+8+6+|+7+6+6+6+|+6+|+2+}+|+[+}+(+(+",
325"k.4.4.4.4.8.j.k.4.8.8.4.4.4.4.4.k.Z.Z.'+(+^+(+(+[+|+|+|+7+7+7+|+4+6+6+6+5+6+9+5+8+b+0+6+7+5+f+0+8+8+b+f+f+c+c+f+i+i+i+f+m+o+i+m+m+m+o+o+s+s+t+m+s+s+x+o+t+x+m+y+y+y+y+y+y+y+y+y+B+B+B+B+C+B+B+B+C+C+C+C+C+D+C+C+C+C+E+D+D+D+D+D+D+D+D+D+D+D+E+D+D+D+C+C+C+C+C+C+B+F+C+C+C+A+C+B+B+B+y+y+B+y+y+y+y+x+y+y+y+x+x+y+m+m+y+s+s+m+t+o+m+m+q+p+k+p+i+i+i+f+0+8+8+8+0+8+8+6+0+5+6+6+8+6+6+4+6+4+4+[+|+4+4+|+[+(+}+(+^+_+",
326"_.4.j.k.j.4.k.k._.4.4.4.|.k.4.4.k.F.S.-+[+|+|+[+[+6+|+|+|+|+6+|+6+6+8+0+5+5+0+8+8+b+8+0+b+0+b+0+b+0+c+i+i+h+f+f+f+f+m+f+m+m+p+o+t+s+m+y+o+x+o+y+y+m+x+x+y+y+x+x+y+y+y+y+B+y+B+B+B+C+B+B+C+C+C+C+D+D+D+C+D+C+D+D+D+D+C+E+D+D+D+D+D+D+D+D+D+D+D+D+D+F+D+C+D+D+E+C+B+C+B+C+C+C+B+B+C+y+B+y+B+B+y+y+y+y+y+m+y+y+m+y+y+s+t+m+m+m+s+m+p+f+i+m+i+i+g+f+c+b+f+9+8+8+5+8+0+4+c+0+6+6+|+6+6+6+|+|+7+}+}+^+^+|+}+(+}+_+^+^+",
327"4.4.4.4.4.j.k.k.4.4.4.k.4.4.4.4.k.k.n.`.'+_+|+|+4+|+|+6+6+|+5+7+|+8+6+8+0+6+8+4+0+8+b+8+f+i+f+b+f+g+i+h+o+f+h+i+m+m+o+m+m+s+t+s+m+o+y+y+x+y+x+x+x+y+y+y+y+y+B+y+C+B+C+B+B+B+B+C+C+D+C+C+D+D+C+D+C+D+D+D+D+D+D+D+D+D+D+D+D+D+E+E+D+E+D+E+D+D+D+D+E+D+D+C+D+D+D+C+C+B+B+D+B+B+B+B+B+y+B+y+y+y+y+y+y+x+y+x+x+s+y+s+s+o+s+y+o+o+o+q+o+h+h+f+i+i+c+8+8+0+8+5+9+5+0+0+8+6+6+|+0+|+6+6+4+4+|+|+|+|+^+}+|+^+(+^+^+(+_+_+",
328"_.4.k.4.4.k.|.4.j.j.j.j.k.j.j.4.4.4.4.S.`.!+6+6+6+6+6+5+6+6+6+5+5+5+0+8+0+6+0+8+0+8+i+0+g+f+f+f+0+g+i+f+o+o+m+p+m+m+t+s+s+s+s+x+x+x+x+x+y+y+x+y+y+x+B+B+B+B+C+C+B+C+C+C+C+C+C+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D+E+D+E+D+D+E+E+E+D+E+D+D+D+D+D+D+D+D+C+D+E+C+C+B+C+B+C+A+C+B+y+C+y+y+y+y+y+y+y+y+y+f+x+s+m+x+s+m+m+s+p+m+m+m+m+f+h+f+h+i+g+g+8+8+8+8+5+7+6+4+8+6+4+4+6+6+4+|+|+4+|+^+4+[+^+}+}+^+_+_+)+^+!+'+",
329"4.4.4.8.4.4.4.j.k.4.j.k.j.j.j.j.j.8.j.k.E.Z._+7+6+6+6+8+6+6+0+8+8+8+8+8+8+0+8+c+b+g+f+i+f+i+m+h+f+f+f+m+o+o+q+m+t+t+s+y+y+o+y+y+y+y+x+y+B+y+B+B+B+B+B+B+B+B+C+C+D+C+C+D+C+C+D+D+D+D+D+D+D+D+D+D+D+D+D+E+D+D+D+D+C+D+E+D+D+D+D+E+D+E+D+D+D+D+D+E+D+E+E+D+C+D+C+C+B+C+A+C+B+B+B+C+A+y+y+y+y+y+y+y+y+y+y+x+x+x+s+o+y+p+s+o+o+q+o+i+i+o+i+h+f+0+0+0+5+8+5+0+8+8+6+6+6+4+6+}+|+6+|+4+4+4+^+(+_+_+|+)+^+^+^+!+'+)+'+~+",
330"4.k.4.4.j.4.4.j.k.4.j.j.j.j.j.4.8.j.8.4.k.E.=+}+6+6+5+5+0+5+8+5+8+8+0+0+g+f+0+f+0+g+f+f+o+i+o+p+m+o+o+s+s+y+t+o+y+o+m+x+y+y+x+y+x+B+y+B+x+B+B+B+B+B+C+C+B+C+C+C+D+D+E+D+D+D+D+D+D+D+D+D+E+D+E+D+E+D+E+D+D+D+E+E+C+D+E+E+E+D+D+E+D+F+E+D+D+E+D+D+D+D+C+D+C+D+C+C+B+C+C+A+C+B+B+y+A+B+y+y+x+y+y+y+x+x+y+o+s+t+s+m+p+p+m+o+f+h+o+i+i+i+i+c+i+c+8+8+8+8+6+6+6+|+|+4+6+4+^+4+4+|+|+^+^+(+|+[+^+^+^+^+~+(+'+)+~+)+'+~+",
331"j.4.4.4.k.4.j.k.k.j.j.j.j.j.j.j.j.j.j.j.4.k.S.=+(+6+8+8+8+c+0+8+8+8+i+f+f+i+i+f+i+i+i+o+f+m+s+m+m+s+s+t+y+m+w+y+y+x+y+y+y+B+y+B+B+B+B+B+C+C+C+C+C+C+D+C+C+D+D+D+D+D+E+D+D+D+E+E+D+F+E+D+E+E+E+E+E+F+E+F+E+E+E+E+E+D+E+D+D+E+E+D+E+D+D+E+E+D+D+D+D+C+D+C+B+C+C+C+B+B+C+B+B+B+B+B+B+y+x+y+y+x+x+m+x+y+m+s+o+m+m+m+o+m+o+f+i+o+f+i+f+f+0+b+8+8+6+0+5+6+6+6+6+6+6+^+4+|+|+^+|+(+^+^+^+4+^+)+)+'+^+~+)+_+)+~+'+~+>+,+",
332"j.j.j.|.|.4.j.k.k.4.j.j.j.j.j.j.j.j.j.j.k.|.j.S.=+[+5+5+8+b+f+g+0+g+f+i+i+i+h+m+m+m+m+m+o+m+x+s+t+s+y+m+y+x+y+y+y+y+A+x+B+y+B+B+B+C+C+C+C+C+D+C+D+D+D+D+D+D+D+D+E+E+E+D+D+E+D+E+D+D+F+D+D+D+E+D+E+D+D+E+D+E+E+D+E+D+E+E+F+D+E+D+E+E+F+D+D+E+D+D+E+D+C+C+y+y+B+B+A+B+B+B+B+y+y+y+y+B+y+x+y+y+x+y+m+x+s+m+s+p+m+m+i+i+h+f+h+h+h+f+0+b+f+b+6+0+6+0+7+7+6+6+|+4+|+[+^+|+|+^+|+|+^+_+^+)+^+^+)+)+^+'+)+~+)+)+-+~+>+,+",
333"j.k.n.k._.k.j.E.4.j.j.j.j.j.j.j.j.j.E.E.4.j.4.k.S.=+5+f+f+f+f+f+g+f+i+h+h+p+p+p+m+q+o+y+y+x+s+y+y+y+x+y+y+y+y+y+B+A+B+B+C+C+A+C+D+C+D+C+D+C+D+D+C+D+D+D+D+D+D+D+D+E+E+E+E+E+E+E+E+E+D+E+E+E+E+E+D+E+E+E+E+D+E+E+E+E+D+E+D+E+D+E+E+D+D+D+E+C+C+D+D+C+C+B+B+B+y+B+B+B+y+y+B+y+B+y+y+y+x+m+y+x+y+m+s+m+m+p+m+q+q+i+o+f+f+h+g+g+8+0+b+0+b+8+6+8+9+|+6+[+5+5+|+|+[+^+}+_+}+[+^+_+_+^+)+^+^+'+~+'+)+<+~+)+~+,+>+>+,+-+",
334"k.k.|.4._.j.k.j.j.j.j.E.E.j.S.j.E.E.E.E.E.j.8.j.k.S.(+0+g+g+f+f+o+o+m+o+m+m+m+p+s+x+s+s+o+x+x+x+y+y+y+x+x+y+y+B+B+B+B+C+C+D+C+D+D+C+D+D+D+D+D+D+D+D+D+D+E+D+F+D+E+E+F+E+E+E+E+E+E+E+E+E+E+D+E+E+E+F+E+E+E+D+E+E+D+E+E+E+F+D+D+D+E+E+D+D+D+D+C+D+D+C+B+C+B+x+x+x+y+B+y+C+y+y+y+y+x+x+y+x+x+m+m+y+s+s+m+o+h+f+m+h+h+f+g+f+0+g+b+8+9+5+8+6+6+6+7+5+5+}+[+}+[+^+}+_+^+(+}+_+^+~+~+~+_+_+_+'+)+)+)+)+~+-+~+)+>+>+>+,+",
335"k.k.4.4.4.j.E.j.k.k.j.E.E.E.S.S.E.E.E.k.k.j.j.j.j.j.=+|+f+f+m+m+o+p+p+m+q+p+s+y+s+o+y+y+y+y+x+y+y+y+B+B+B+B+C+C+C+C+C+C+C+D+E+D+D+D+D+D+D+E+D+D+E+D+E+E+E+F+E+E+E+E+E+E+E+E+E+E+E+F+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+D+E+E+E+D+D+E+C+D+D+C+C+B+B+B+B+C+B+x+p+x+x+x+y+x+x+x+x+x+y+x+m+m+s+s+m+f+m+o+o+o+m+i+f+i+g+0+0+g+0+0+8+5+8+5+7+6+6+5+[+|+7+}+(+^+^+^+(+(+_+^+_+~+^+~+~+~+'+'+<+~+)+)+>+>+>+-+,+>+>+,+ +",
336"|.4.4.4.j.j.j.E.F.k.E.k.j.j.S.E.E.E.E.E.E.k.j.j.j.j.E.!+6+o+o+s+m+o+y+s+y+o+x+y+x+y+y+y+y+B+B+B+B+A+B+A+C+C+C+C+D+D+D+C+D+C+D+D+D+D+D+E+D+E+E+E+F+E+F+E+E+E+F+E+F+D+E+E+E+E+F+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+D+E+E+E+E+E+D+E+D+D+D+C+D+E+B+B+B+A+y+C+x+B+x+p+m+m+x+B+y+y+y+x+m+y+m+x+m+m+s+p+o+m+h+f+i+f+c+g+8+g+8+8+6+8+8+8+5+6+6+6+|+|+|+[+[+(+}+_+_+^+^+^+^+^+^+_+~+)+'+'+'+)+~+)+>+>+~+'+,+>+,+>+@+>+-+>+",
337"4.j.j.4.j.j.j.j.E.k.k.j.j.E.E.E.j.E.E.j.E.E.j.j.j.j.j.S.[+f+m+s+y+s+m+y+y+y+y+y+A+x+y+y+B+B+B+B+B+D+C+C+D+C+D+D+C+D+E+C+E+E+D+E+E+E+E+E+E+E+E+E+E+E+D+E+E+E+E+F+E+F+E+F+F+E+E+E+E+E+E+E+F+E+F+E+E+E+E+E+E+D+E+E+E+D+E+E+D+D+E+D+E+D+E+C+C+C+B+C+B+y+y+B+y+y+t+s+p+p+m+s+m+x+o+o+y+s+y+o+p+p+m+m+p+o+i+h+0+c+f+f+g+5+6+5+8+6+6+6+6+7+6+4+6+6+|+|+^+(+^+(+(+!+^+_+^+^+^+'+-+'+'+)+)+~+,+!+;+,+>+@+,+~+@+;+,+;+&+ +",
338"j.j.j.j.k.j.j.E.E.k.k.j.j.S.E.j.E.S.S.E.j.E.E.j.j.j.j.j.Z.|+f+t+o+y+x+x+y+y+y+y+B+B+B+B+B+C+C+C+C+C+C+C+D+D+D+D+D+D+D+D+D+E+E+E+D+E+E+F+E+E+E+E+F+F+F+E+F+F+F+F+F+F+F+E+E+F+F+G+E+E+E+E+F+E+E+E+E+E+F+F+E+E+E+E+E+D+E+D+E+E+D+D+D+C+C+C+C+C+y+B+y+y+B+C+B+x+y+y+s+p+h+h+s+o+y+m+s+m+m+s+m+m+i+i+k+i+8+c+f+8+8+0+8+9+6+5+5+6+7+|+6+4+|+|+4+^+^+(+}+(+)+_+(+!+(+'+~+~+>+)+'+>+)+~+'+~+@+~+@+)+,+;+,+,+`.`. +`. + +",
339"j.j.E.E.E.j.j.E.S.k.j.j.j.S.E.E.j.S.F.E.E.j.E.E.S.E.j.k.j.Z.0+m+y+y+B+y+B+C+B+C+B+C+B+C+C+C+D+D+D+C+D+C+D+D+D+E+D+D+E+D+E+E+E+D+E+D+F+F+F+E+F+F+E+E+E+F+E+F+F+F+F+F+F+F+F+F+F+F+F+F+F+F+F+F+E+F+F+E+E+E+F+E+F+E+E+E+D+E+D+D+E+D+C+D+C+C+B+C+B+B+B+y+y+y+x+y+x+x+o+m+h+f+f+s+m+o+t+m+m+o+o+i+h+h+f+f+c+8+0+b+8+8+4+8+7+|+4+8+|+7+|+5+[+[+^+^+|+_+_+'+^+'+_+_+^+~+'+'+~+~+,+~+,+>+)+>+)+>+,+ + +>+`.`. +@+`.`. + +",
340"k.E.E.k.k.j.j.S.S.F.j.j.S.S.E.E.j.S.F.k.k.j.S.S.E.S.E.j.8.j.(+f+x+y+B+B+B+B+C+C+D+C+D+C+D+D+D+C+E+D+D+D+D+D+E+E+E+E+F+D+E+E+E+E+F+E+E+F+F+E+F+G+F+G+F+F+F+G+G+F+F+F+G+F+F+F+F+G+E+F+E+E+E+E+E+E+F+E+E+E+E+E+E+E+E+D+D+D+D+D+C+D+C+C+B+A+B+B+B+y+y+x+B+y+y+y+x+x+s+p+h+f+0+m+m+s+m+p+h+h+h+i+i+c+8+8+6+8+0+8+8+7+[+6+6+|+|+|+[+|+|+|+^+(+|+_+(+^+_+~+~+'+_+~+^+-+)+'+,+~+-+>+)+>+,+>+>+ + + +-+ + +;+`. +W. +`.V.",
341"E.E.E.k.j.j.E.S.V.j.j.j.S.E.S.E.S.E.E.E.j.E.j.E.E.k.j.j.j.j.S.5+o+B+B+B+C+C+C+C+D+C+D+D+D+E+D+F+D+E+E+E+D+F+E+E+E+E+D+E+E+F+F+E+E+F+F+F+F+F+G+F+G+F+F+F+F+F+F+F+G+G+F+F+F+G+F+F+F+E+F+F+F+F+E+F+E+E+E+E+E+C+E+E+E+D+D+D+D+C+D+C+C+C+B+B+A+B+y+x+y+y+x+x+x+s+y+m+t+o+m+f+h+q+m+h+o+q+i+c+c+i+f+0+8+8+6+6+5+7+6+5+[+|+}+|+|+}+^+[+|+^+[+(+!+'+'+!+'+'+'+_+'+'+,+)+>+>+,+{+>+~+ +>+>+`.`. +,+`. +`.;+W. +W. +V.@+ +",
342"k.k.j.E.j.j.E.E.S.E.8.E.S.E.E.E.S.S.E.j.j.j.E.E.j.E.j.j.j.j.j.!+5+x+C+C+E+C+D+D+E+D+D+D+E+D+E+E+E+E+E+E+F+E+E+E+F+E+E+F+E+F+F+F+G+F+G+G+F+F+F+E+F+G+G+G+F+G+G+F+F+G+G+F+F+F+F+G+F+F+F+E+E+F+F+F+E+F+E+E+E+E+E+C+E+C+C+C+C+C+C+C+A+C+A+B+y+B+y+x+y+y+x+t+t+m+t+s+s+q+o+f+m+p+o+c+f+f+i+0+0+0+8+8+6+6+6+b+6+6+6+7+7+[+[+|+[+}+(+_+^+_+_+_+(+~+_+<+)+-+'+~+)+~+~+'+>+>+,+>+>+,+>+,+>+ + + + +;+ + + +W. +W.@+W.W.W.",
343"j.j.E.j.E.E.E.E.E.S.8.E.E.E.j.S.E.S.k.E.j.E.S.j.E.S.E.E.S.j.j.j.[+f+B+C+D+E+D+C+E+D+E+E+E+E+E+E+E+F+E+F+E+E+E+E+E+F+F+F+F+F+E+F+E+G+F+F+G+G+F+F+G+F+F+F+G+F+F+F+G+F+E+G+F+F+E+E+F+E+E+F+E+E+E+F+E+C+E+D+C+D+D+E+D+D+D+C+C+A+B+B+B+y+y+B+y+y+y+y+x+x+o+s+s+o+s+o+o+f+o+o+f+i+h+i+b+0+0+c+6+8+8+6+6+6+6+|+6+}+6+|+^+4+|+(+(+(+^+^+^+^+(+(+~+'+'+)+'+,+)+)+,+>+>+>+-+,+>+>+)+ +;+ +@+;+ + + + + +`.V.@+W.@+W.K.W.W.",
344"j.j.j.S.S.E.S.E.j.S.S.S.E.E.j.;+E.E.E.j.S.S.S.E.S.E.E.S.S.j.j.j.E.[+m+D+D+D+F+D+E+F+D+F+E+E+F+E+E+F+E+G+E+F+F+F+E+F+F+G+F+F+F+G+F+G+G+G+G+G+G+F+G+G+F+F+F+F+F+F+G+G+E+F+F+F+F+E+F+F+C+E+F+E+E+E+E+E+C+D+C+D+D+C+D+C+C+C+C+B+A+y+y+B+x+B+y+y+t+y+y+y+o+o+s+o+m+m+m+m+f+h+h+i+f+0+8+f+8+4+b+5+5+7+|+4+|+|+|+}+^+[+^+_+}+|+_+'+~+~+'+^+'+^+_+,+'+)+-+-+>+~+,+,+-+ +>+$+>+,+,+ +`.`.W.@+W.W. +W.W. +W.V.W.@+V.@+@+W.",
345"S.j.E.S.S.j.S.j.S.S.S.E.E.E.E.S.E.S.j.E.j.S.S.S.S.S.S.S.k.j.j.j.j.S.0+B+D+F+D+E+F+F+E+E+F+G+E+F+F+F+F+F+G+F+F+F+F+F+F+G+G+G+G+F+G+G+G+F+G+G+G+G+G+F+G+F+G+G+G+G+G+F+F+F+F+F+E+F+F+F+E+E+D+E+E+E+E+D+D+D+C+C+C+C+B+A+C+C+B+y+B+B+x+x+y+x+y+x+o+t+s+m+m+m+o+m+o+p+k+f+i+c+c+c+b+8+0+8+6+0+6+6+6+5+|+|+|+|+^+4+}+^+(+(+(+_+'+'+'+~+~+'+'+~+'+~+,+'+>+>+>+>+>+>+ +-+ + +>+ + +>+ +@+Z.V.`. + +K.@+V.V.@+V.K.K.H.W.K.",
346"E.j.S.S.E.E.E.j.j.S.S.E.E.S.E.E.S.E.E.E.E.S.S.j.S.S.S.S.S.j.k.j.j.j.(+f+C+E+F+E+F+F+F+F+F+G+G+G+G+G+G+F+G+G+G+G+F+G+F+G+G+F+G+G+G+F+G+G+G+F+F+F+G+G+G+F+F+F+F+F+G+G+E+F+E+F+E+E+F+F+E+E+E+C+D+D+D+D+C+D+B+C+C+B+C+B+B+A+B+y+A+y+y+y+y+x+y+s+s+t+p+t+m+m+p+m+o+h+i+f+f+f+b+6+0+8+0+6+6+6+6+6+|+6+[+|+^+|+^+^+_+'+^+_+!+(+^+^+'+~+~+'+,+,+'+~+>+~+,+-+>+,+ + + +`. +`.`.`. +W.`.@+@+Q.W.W.V.V.@+W.V.@+F.W.W.W.W.K.",
347"j.j.S.S.E.S.j.j.S.j.;+j.S.S.E.E.E.E.E.S.E.E.S.j.E.S.S.S.S.S.j.j.8.j.E.[+x+D+D+F+F+F+F+F+F+G+F+F+F+G+G+G+G+G+G+G+G+F+G+G+G+G+F+G+G+G+G+G+F+G+G+G+G+F+F+G+F+F+E+F+F+F+F+C+F+D+E+E+E+D+D+C+E+E+C+C+C+C+C+C+C+B+B+B+B+B+B+B+y+y+x+y+x+t+y+y+o+p+m+m+o+h+i+h+o+o+f+o+i+c+c+4+6+5+|+c+4+4+6+6+7+(+}+[+}+(+[+_+^+^+'+_+~+_+_+)+~+~+~+-+-+,+'+~+,+-+,+,+`.,+>+>+,+`. + +`. +&+ +`. +Q.W.V.W.W.;+K.W.W.F.@+F.@+K.H.H.H.W.",
348"E.E.j.S.S.j.S.S.S.S.S.S.;+S.E.;+j.E.S.j.S.S.S.j.S.E.E.S.S.E.k.j.j._.j.E.f+B+F+F+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+F+F+G+G+G+F+F+G+G+F+F+E+F+F+F+E+E+E+E+E+E+E+E+D+D+E+D+C+D+C+C+B+B+C+B+y+B+y+B+y+y+y+x+s+s+t+o+s+o+p+p+m+o+i+o+h+i+m+c+i+b+8+0+6+6+5+|+0+4+6+|+|+6+|+(+(+_+^+(+(+^+^+)+^+!+)+_+^+>+)+~+)+>+>+ +,+;+,+>+,+`.`. + +@+`.`.`.`.`. +;+V.V.W.W.@+W.W.V.W.W.W.V.K.K.K.K.Q.W.K.H.",
349"j.E.S.j.S.S.S.j.E.j.S.j.S.S.S.S.S.S.S.S.S.Z.S.S.S.j.E.E.-+k.E.j.j.j.j.j.(+m+C+F+F+F+F+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+F+F+F+F+F+G+C+F+E+E+E+E+E+D+D+E+D+D+D+D+C+C+B+C+C+C+C+A+B+y+y+B+y+x+x+t+s+y+y+y+s+x+o+q+p+o+o+i+i+c+o+b+f+i+c+c+|+4+4+6+8+8+6+|+|+4+|+6+|+_+_+(+(+^+^+_+^+)+^+_+'+'+^+~+~+,+-+,+>+,+-+,+-+,+ + + +`.-+`.`. + + +W.W.@+W. +W.W.W.V.Q.W.W.H.W.Q.Q.K.V.V.W.H.K.H.K.",
350"S.j.j.S.S.S.8.S.j.j.E.S.S.S.S.Z.S.E.j.S.(+S.Z.E.S.E.E.S.E.E.E.E.j.j.j.j.j.5+x+D+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+F+F+F+F+E+F+F+E+F+E+E+D+E+D+D+E+E+E+C+C+C+C+C+A+C+B+B+B+B+y+y+y+y+x+s+o+m+m+s+o+m+s+m+q+h+f+h+f+c+8+f+4+0+c+b+4+^+|+|+6+7+7+|+^+|+^+|+|+^+^+_+^+'+'+^+'+^+'+-+'+~+,+,+,+-+)+'+,+ + + + +,+,+`.`. + +@+W.`.W. + + +V.W.W.W.W.W.K.V.K.K.K.K.W.V.W.K.K.H.H.Q.H.H.K.",
351"S.S.j.j.S.!+j.S.S.8.j.E.E.E.S.S.;+S.j.S.=+Z.Z.E.S.E.E.S.E.E.j.j.j.E.k.j.8.S.f+C+F+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+F+F+F+G+C+F+F+F+E+E+E+D+E+E+D+D+E+D+C+C+C+C+C+A+B+B+B+B+B+B+y+y+v+y+x+s+m+x+m+s+y+o+m+q+o+i+h+k+h+i+c+0+c+0+4+b+0+6+|+'+|+6+|+6+[+^+|+^+^+4+^+(+(+^+^+)+)+_+)+'+)+'+'+'+,+,+~+,+ +>+>+>+ +,+;+ +`.>+ +W.;+`.`.W.`.V.@+W.W.W.@+H.@+V.K.@+K.W.W.W.K.K.H.H.K.K.Q.K.H.m.t.",
352"E.E.j.S.;+j.j.!+j.S.S.S.E.S.;+E.S.8.S.S.S.S.S.E.E.S.E.E.E.S.E.E.j.E.j.j.8.j.5+x+F+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+F+G+G+G+G+G+E+F+G+F+C+F+E+C+E+C+D+D+D+D+D+D+C+B+C+B+B+y+y+B+B+y+y+x+x+y+s+y+s+t+o+q+o+p+m+o+m+h+k+c+0+k+c+0+b+8+c+6+|+4+0+6+^+^+|+|+|+|+|+^+|+^+^+^+'+_+~+'+'+)+)+^+)+'+)+)+'+,+`.>+ +,+-+`.,+,+ +`.;+ +`. +`. +@+V.;+V.W.W.@+Q. +W.W.H.K.W.K.V.K.H.K.F.K.H.m.H.s.w.Q.s.H.w.w.",
353"S.j.S.S.S.j.j.(+Z.S.S.E.E.S.S.Z.S.j.j.S.S.S.S.E.S.S.E.E.E.V.k.j.E.j.j.j.4.j.E.f+C+G+G+G+G+G+G+G+G+E+F+G+G+G+G+G+G+G+G+G+G+G+G+G+F+G+F+G+G+F+E+F+F+E+E+E+D+E+E+E+E+E+D+D+C+C+D+A+C+A+B+y+x+B+y+y+x+B+t+x+s+m+s+t+m+p+m+m+h+k+p+i+c+0+0+c+0+c+4+6+6+6+^+^+6+c+^+^+!+4+^+4+^+^+!+^+^+^+^+^+_+_+)+^+'+^+)+>+>+>+>+>+`. + +,+`. + + + +;+`.W.`.V.`.W.W.V.@+W.K. +W.W.W.H.Q.K.V.W.H.H.K.H.H.H.K.H.K.t.w.K.H.s.w.m.m.s.",
354"E.S.S.S.j.S.S.S.S.Z.S.S.S.S.S.S.S.S.E.j.S.Z.S.E.E.E.j.j.S.S.j.j.j.j.k.j.8.j.j.!+s+F+G+G+G+G+G+G+G+E+F+F+G+G+G+G+G+G+G+G+G+G+G+G+F+G+F+F+F+F+F+F+F+E+E+E+D+E+D+D+C+E+C+D+C+B+C+B+C+y+B+B+x+y+x+t+s+s+t+o+s+p+s+i+o+i+k+i+f+f+i+c+0+8+0+c+6+4+|+|+6+4+^+^+6+|+[+)+^+|+^+4+'+^+^+(+^+'+'+^+~+~+'+'+~+>+)+)+-+>+,+>+ + + + +;+`.W.>+ + +`. + +W.W.@+ +W.V.K.@+K.V.W.K.K.V.K.K.K.H.H.t.K.H.s.K.s.K.m.w.w.m.w.m.m.m.m.",
355"S.j.S.S.S.j.!+Z.S.Z.Z.S.Z.S.E.S.Z.S.S.S.S.Z.E.E.S.k.j.E.S.k.j.E.j.E.j.4.j.8.4.k.6+B+G+G+G+G+G+G+G+F+E+F+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+F+E+E+C+E+E+E+E+D+E+D+D+D+D+C+C+B+B+t+B+B+y+y+t+y+o+m+s+m+s+s+p+p+p+o+o+i+f+i+i+c+c+c+i+b+4+c+6+6+4+|+|+|+|+^+'+^+6+^+4+-+)+'+^+'+^+^+!+'+'+^+'+'+'+^+,+'+{+>+ +>+)+ + + +W.W.H.W. +W. +`.`.`. +V.W. +W.W.H.W.@+V.K.V.K.F.K.F.H.K.K.K.w.Q.w.Q.m.K.w.s.s.t.m.K.w.m.s.q.f.q.",
356"S.S.S.8.S.S.S.S.S.S.Z.E.S.V.E.E.S.S.S.S.S.S.S.E.S.j.E.E.E.4.j.j.j.E.4.4.j.j.4.4.E.m+F+G+G+G+G+G+G+z+E+E+G+G+G+G+G+G+G+G+G+G+F+G+F+F+F+F+E+E+E+E+C+E+D+C+C+C+C+E+B+C+C+B+B+y+y+B+B+y+o+y+t+o+s+m+p+m+o+i+m+m+i+i+i+i+e+c+6+0+0+|+}+4+4+|+|+[+(+[+[+|+'+^+|+^+4+-+)+!+^+~+^+^+)+)+'+)+)+)+~+'+,+,+>+>+>+ + + + +H.n.F.n.Q.>+V.W. +W.V. + +W. +W.W.W.H.K.V.H.H.K.K.K.K.H.H.n.w.K.t.w.t.m.s.w.q.s.s.m.m.w.m.m.m.m.f.",
357"j.S.S.j.S.S.(+S.S.S.Z.j.E.E.E.j.E.S.S.S.S.S.E.V.E.E.E.E.E.8.E.E.k.k.4.8.j._._._.k.(+C+G+G+G+G+G+G+E+E+F+F+G+G+G+G+G+G+G+G+G+G+F+F+F+F+C+E+E+E+E+E+D+D+D+C+E+C+B+B+B+B+B+y+y+t+w+y+t+o+w+m+m+s+q+p+k+h+h+i+i+c+f+c+c+0+4+4+4+4+|+|+|+^+^+|+}+}+|+^+^+^+^+^+^+^+`.-+)+'+-+!+_+'+'+>+,+'+'+-+)+>+>+ +W.W.Q.H. +W.n.t.t.t.H.W.W.W.W. +W.@+W.W.W.Q.H.H.H.W.H.H.H.H.H.K.t.K.m.w.K.w.w.w.m.Q.m.m.t.q.m.f.m.m.m.f.f.f.f.",
358"E.j.j.S.(+S.S.S.E.S.E.j.S.S.E.E.S.E.S.Z.E.S.S.F.E.j.S.l.k.j.E.E.k.j.j.j.j._.4._.4.j.f+C+G+G+G+G+G+E+E+E+E+F+G+G+G+G+G+G+G+G+G+F+F+E+F+E+D+D+D+D+C+C+E+C+B+B+C+B+A+A+y+y+s+y+m+t+y+o+m+o+q+i+o+i+m+i+8+c+i+0+c+c+c+4+6+6+|+^+^+^+^+^+_+_+^+^+<+^+[+^+)+^+'+'+>+`.-+>+)+>+~+,+>+~+'+>+>+>+>+>+W. + +n.n.H.H.V.K.2.t.t.t.}.W.W.W.K.W.W.W.Q.W.V.Q.Q.H.w.H.Q.Q.s.H.s.w.s.H.w.m.w.w.w.w.m.m.q.q.m.f.m.f.f.m.f.f.f.f.f.",
359"E.S.j.j.S.;+S.E.j.E.E.E.E.;+j.S.S.j.S.S.E.S.F.E.j.j.S.F.j.j.E.k.4.j.j.j.j.8.j._.4.4.=+B+G+G+G+G+G+F+E+E+F+F+G+G+G+G+G+G+G+G+F+F+F+F+D+E+E+D+C+C+D+C+B+C+B+B+A+B+B+y+x+B+t+o+t+s+m+p+m+o+h+h+c+i+i+c+8+g+b+4+6+6+6+6+^+|+|+(+^+4+)+'+^+'+^+'+)+-+)+'+^+)+)+)+-+-+>+;+,+,+,+,+>+>+ +>+W.>+>+W.Q. +F.}.t.Q.W. +F.n.n.t.}.n.Q.W.V.H.@+K.K.W.W.K.K.Q.K.H.T.w.w.K.w.K.s.w.w.T.s.t.w.m.m.m.f.m.f.f.m.f.f.m.f.f.f.i.f.h.",
360"j.j.S.!+S.E.S.j.j.S.E.E.S.E.j.S.S.E.Z.E.k.S.E.j.j.E.S.4.j.k.E.E.k.j.E.4.4.j._.` 4._.j.6+C+G+G+G+G+G+E+E+z+E+F+G+G+G+G+G+G+G+F+F+E+D+E+C+D+D+C+C+B+C+B+y+y+B+A+y+x+B+s+s+m+m+m+s+m+k+m+h+c+c+6+c+0+4+5+0+6+6+|+6+6+6+^+[+|+_+^+)+)+^+)+)+{+`.>+>+)+)+)+>+{+ +&+~+>+>+{+>+>+>+>+>+ + +H. +>+H.H.W.F.2.H.Q.Q.H.H.t.}.n.n.n.n.H.K.H.W.H.H.K.Q.H.t.s.t.w.H.t.s.m.m.m.t.s.t.w.m.s.m.f.m.m.f.m.f.f.f.m.h.f.h.f.h.i.f.h.",
361"E.E.j.E.S.E.E.l.j.E.E.E.V.S.j.S.E.E.S.V.k.E.E.E.E.E.k.4.j.k.k.k.k.k.k.4.j.k._._._._._.S.i+C+G+G+G+G+G+F+E+z+F+G+G+G+G+G+G+F+F+D+F+B+E+D+C+C+E+A+B+B+y+v+B+t+x+x+s+s+t+q+q+o+m+p+k+f+c+i+c+8+8+6+6+|+|+7+|+|+4+4+4+^+^+'+_+'+~+)+)+)+>+$+`. +-+$+{+$+$+++$+$+$+++++++M.P.++W.>+,+`.W.t. +W.H.n.H.n.n.n.n.n.s.H.n.}.}.t.<.t.H.H.H.K.H.m.Q.K.m.Q.Q.s.s.m.w.m.s.s.s.q.m.m.f.q.m.m.q.f.f.f.f.f.h.f.h.h.f.f.i.f.f.h.f.",
362"j.j.S.S.S.E.k.E.j.S.E.E.F.j.E.S.E.S.E.k.j.j.E.F.l.l.j.4.k.k.j.k.|.k.k.4.k.4._._._.` ` 4.=+t+G+G+G+G+G+G+F+F+G+G+G+G+G+G+F+F+F+F+u+E+C+D+C+B+C+C+B+x+y+t+x+y+t+y+o+m+m+o+o+q+o+m+h+b+c+c+c+4+6+4+|+|+|+4+|+^+4+4+^+_+^+'+~+'+-+-+)+>+>+$+>+Q.$+$+++++P.P.P.P.P.P.r.P.P.P.o.Q. + +W.W.t.W.W.Q.n.H.n.n.t.t.t.}.M.n.<.t.s.<.t.Q.w.H.w.H.m.s.H.m.w.w.w.q.M.q.w.m.f.q.s.m.m.s.m.f.f.q.f.f.f.f.f.f.f.f.h.f.f.e.e.e.e.e.",
363"E.j.S.S.E.E.j.E.k.E.S.E.j.j.j.E.E.F.l.l.j.E.E.k.k.k.4.j.k.4.4.k._.4.j.k.|._._.` _._.|._.E.f+F+G+G+G+G+G+G+G+G+G+G+G+F+F+F+F+F+D+C+C+D+C+B+C+A+C+v+t+B+s+t+s+s+s+s+p+q+o+i+o+i+i+8+0+c+c+6+6+|+(+^+_+|+^+4+)+^+{+)+'+>+)+'+)+>+>+&+W.$+ +M.M.++P.P.r.r.r.o.r.r.d.5.~.~.5.o.Q.W.>+ +H.n.H.W.H.t.n.H.Q.t.Q.n.}.t.n.n.2.2.t.K.t.t.w.w.s.t.K.m.t.m.s.w.s.m.s.q.f.s.o.f.f.m.f.f.m.q.f.i.i.e.h.f.h.f.f.f.i.i.-.h.-.h.^.",
364"E.S.V.F.F.E.j.j.j.E.V.k.j.E.8.;+E.E.j.j.l.l.E.k.k.|.4.4.4.4.4._._._.j.E.|.` 8.H _._.` ` j.(+y+F+G+G+G+G+G+G+G+G+G+G+G+G+E+D+F+u+D+D+C+C+A+B+u+q+k+c+x+s+q+t+p+p+o+o+o+o+c+k+c+c+6+8+6+|+6+|+|+[+}+^+|+^+)+{+)+{+)+)+>+>+>+>+ +W.$+M.P.M.M.P.r.r.d.d.~.~.P P P P A N P P 3.M.Q. +`.F.n.n.H.Q.}.n.H.H.n.s.<.<.s.t.n.t.<.m.w.w.K.w.w.m.m.m.m.m.m.s.m.s.m.t.m.f.f.q.h.f.f.f.f.f.h.m.h.f.f.f.h.f.h.e.-.-.e.0.6.6.^.6.",
365"S.S.S.E.E.p.E.E.j.E.S.p.j.S.j.j.E.E.j.l.E.j.k.4.k.k.|.k.4.4._._._.4.4.4._.H 4._.|.` ` ` _.E.0+F+G+G+G+G+G+G+G+G+G+F+G+E+F+E+E+r+D+B+B+B+C+d+e+^+6+f+t+o+m+p+q+o+p+m+o+b+0+c+b+6+4+4+4+|+6+[+(+_+^+^+(+'+'+'+'+-+$+>+&+$+$+$+++M.P.P.r.d.5.d.~.~.A A A u u c c c 0 0 u N 3.M.$+W.W.W.n.n.Q.H.<.t.H.H.s.n.<.t.H.t.w.w.w.w.w.m.m.m.p.m.m.m.q.m.m.f.f.m.w.f.m.q.f.i.f.h.f.f.m.f.h.f.f.f.e.e.i.-.e.e.e.e.^.0.^.^.h.^.",
366"S.S.E.E.S.E.j.E.E.V.E.k.j.j.E.E.E.E.E.E.l.j.k.j.E.4.4.4.4.k.4._._.4.k.4._.` j._._.` F ` _.8.S.y+F+G+G+G+G+G+G+G+z+F+G+E+D+C+B+k+B+t+C+B+u+++-+[+0+f+m+t+o+o+i+o+p+i+f+b+8+0+4+6+8+|+|+}+_+(+_+^+^+)+^+)+{+$+{+{+$+$+$+M.P.P.P.P.5.~.~.~.P A c ] ] % ] [ 0 0 0 0 0 u u N #.o.M.M.Q.H.n.2.n.t.}.H.Q.n.s.2.t.t.t.t.t.w.w.w.w.m.s.m.s.m.m.m.q.q.m.m.f.f.m.f.m.f.f.h.f.f.f.i.f.f.i.i.e.e.e.-.e.0.>.0.^.6.0.^.^.6.^.^.",
367"E.F.F.E.j.E.j.S.E.E.E.j.j.8.E.j.S.V.E.F.4.4.4.k.k.|.4.4.k.4.4._.4._._._.` _.4._.` F H ` H _.j.8+E+G+G+G+G+G+G+G+F+F+E+C+u+r+e+4+e+e+t+B+v+n.S.5+f+f+q+m+m+m+i+f+k+k+8+8+8+6+|+4+4+|+|+[+_+_+(+'+^+)+{+++$+++++++P.P.P.r.r.5.5.P P c c c ] ] % % % % % [ 0 [ 0 j 0 u u P #.o.M.M.Q.W.t.n.t.<.n.H.t.s.t.m.w.w.s.s.w.w.w.m.m.t.m.m.m.q.q.q.f.f.f.f.f.q.f.f.f.h.h.f.i.i.i.f.e.e.i.e.e.>.e.6.6.^.9.6.6.-.6.6.6.6.6.6.",
368"E.E.j.j.S.8.;+S.l.l.j.j.j.j.S.E.E.l.k.l._.8.4.k.k.k._.4.k.|.4._.4.4._._.|._.4._.` I F ` F _.j.!+B+E+G+G+G+G+F+G+F+F+E+r+e+3+^+6+|+|+c+s+r+n.=+f+y+h+i+q+q+c+c+f+h+4+8+8+6+7+(+|+4+^+^+[+^+)+^+)+{+++{+++#+#+P.r.r.d.d.~.P P c c % ) % % % % + & ) ) ) c 5 0 5 j u u N P r.M.Q.H.K.w.n.t.t.t.t.H.m.w.w.w.w.w.m.m.m.m.m.q.m.m.f.f.f.q.q.f.f.f.h.f.f.h.q.f.f.h.f.f.i.e.e.f.>.h.-.6.6.6.^.h.0.^.e.6.h.-.6.6.^.^.6.",
369"l.E.p.j.S.j.k.F.k.8.l.j.j.E.p.l.k.k.|._._._._.n.|._.4.k.k._.4._.k.` |._._._.|.` ` ` H ` F H _.E.m+E+F+G+G+F+G+F+F+E+D+d+ +=+0+m+0+^+'+c+h+-+-+6+m+i+k+f+f+c+0+c+h+c+8+c+7+|+|+|+^+^+^+3+^+{+{+++++#+#+r.r.d.5.~.P A c c ] ] ] ] ] ~ [ [ [ % % [ % ) 5 0 j j 0 j u N #.5.P.M.H.s.K.s.t.t.t.s.s.s.w.m.s.m.m.m.m.f.m.q.f.q.f.m.m.q.f.f.q.h.m.h.i.q.f.i.i.f.f.i.e.>.e.6.6.0.0.6.h.^.0.6.^.6.1.^.6.6.6.^.6.6.^.6.",
370"k.j.l.j.l.j.E.l.4.j.j.j.E.E.4.|.l.|._.8.4.4.k.k._._.j.k.k._.4._._.` _.|._._.|.` F I F _.` F H 4.[+x+E+z+G+F+F+F+E+E+C+v+-+!+o+x+i+4+>+^+0+|+W.^+i+h+c+c+0+8+0+8+c+8+6+b+7+7+^+|+^+{+{+++#+#+#+P.r.d.d.~.P A c c c ] ] % ] ] ] h h h c c 0 [ % % ) ) [ 0 0 u p j t u u N 5.M.M.H.s.H.s.w.w.s.w.T.w.w.m.q.f.q.q.f.q.f.q.f.q.f.h.h.h.f.f.q.f.f.q.i.i.i.e.0.e.6.e.e.0.>.6.^.6.-.0.^.0.^.0.6.6.0.0.^.-.h.6.-.6.6.^.",
371"E.k.j.k.j.k.l.k.k.j.l.j.E.l.|.4.4._.8.4.4.k._._._.k.k.4._._._._.` _._.|.|.|.` F ` H ` _.F H F 8.E.m+D+F+F+F+E+E+F+C+E+r+)+=+o+y+s+e+>+-+6+0+`.-+^+3+3+^+4+6+8+c+8+6+8+0+6+4+4+{+{+++#+#+r.r.d.~.P P c c ] ] > > ] ] l l d w w l l h ] c C g % % ) ) [ 0 j j j j u u N P 3.o.M.s.w.s.m.m.Q.m.m.m.m.m.q.q.q.q.q.q.h.q.f.q.m.f.m.m.q.q.i.i.i.h.f.e.e.e.5.e.e.^.6.6.^.i.>.e.e.6.e.0.>.6.h.-.h.^.6.6.6.6.6.6.-.6.6.",
372"k.E.l.l.j.S.k.4.l.4.4.k.l.4.4.j.4.|.4.j.4.4._._.4.E.n.|.F _._.` H _._.` |.` ` I F F ` ` I F F H j.5+x+E+F+F+E+C+C+C+B+r+^+=+6+q+p+k+$+F.^+6+^+-+-+>+>+!+|+|+8+4+c+6+|+6+|+3+#+#+#+P.5.d.~.P c c ] ] % % % ] ] d w w w w w w A c ] ^ [ [ A y ) @ & ) ) [ 5 j j j j u u K N 3.P.o.Q.m.s.Q.q.m.m.m.m.q.m.m.m.f.f.h.q.m.f.h.q.q.h.f.f.f.i.i.e.i.6.e.e.6.^.e.^.e.^.0.e.6.e.>.e.^.0.^.0.e.6.6.6.-.6.^.6.6.V h.6.6.-.6.",
373"E.l.l.j.j.F.l.j.k.4.k.F.|.8.j.k.k.k.|.4._.4.4.4.4.k.` ` ` ` _.F _.` I ` ` ` ` ` F F F F F F ` H _.S.m+D+E+E+E+B+A+B+B+o+c+^+-+c+p+h+Q.n.[+0+^+-+-+V.Z.'+|+6+|+|+4+4+6+^+4+:+#+r.d.P P c c ] ] ] % % > ] h P R Z Y R w C l ] _ ] ] ; % ] W j $ % % ) ) 0 0 j u t p u u N N 3.o.Q.M.m.m.m.w.q.q.m.m.m.m.m.f.f.q.f.f.h.f.o.i.f.i.i.i.h.i.e.e.6.e.6.0.0.6.6.6.0.e.0.:.0.^.e.0.0.0.e.^.^.6.-.6.9.^.6.-.6.^.:.^.6.6.6.",
374"k.k.l.|.j.k._.8.|._.k.E.|.4.k.k.|._._._._.4.4._.|.|.` ` ` _._.H ` ` F F ` ` ` F ` F F q F F H F _.j.[+x+D+C+u+r+y+y+s+p+h+4+`.^+3+{+n.k.(+f+4+^+!+=+!+(+|+|+|+|+^+|+|+|+4+#+r.P A ] % % ] + > ] h l n C C R R w d c ] ] > % % % ] % % c T g $ % ) ) 0 0 t 0 u j u u N N 3.o.s.Q.s.m.m.m.m.f.f.m.h.h.m.f.h.f.q.q.q.f.i.i.i.e.i.e.-.e.^.e.-.6.e.0.e.e.e.6.6.e.0.0.6.6.^.0.0.0.h.6.^.9.6.>.:.0.:.6.6.6.:.0.^.:.:.",
375"k.l.|.4.j.4.8.|._._.4.k.|.k.k.|.` _.` ` _.k._._.|.` ` ` H _.` ` ` F F ` _.` ` F ` F F H q q F F F _.S.f+v+r+g+y+y+x+s+s+p+e+`.-+>+`.E.Z.0+0+0+6+5+(+[+|+^+}+(+[+|+^+[+^+3+#+~.c ] % % $ ] h l w w w R h R C c ] ] > % > % ; % ] ] ) % c P c & % ) ) 0 0 0 j u p t u N K }.s.M.o.q.f.m.f.f.h.m.m.m.f.h.m.f.q.q.f.f.i.i.5.0.e.^.0.0.e.e.6.6.e.^.0.0.6.6.6.^.6.^.6.6.-.6.^.0.6.^.6.6.0.6.:.6.:.0.6.^.6.^.6.:.1.1.",
376"k.k.4.4.j.4.4._._.4.k.|._.|.|._._.` ` _.4.|._._._.` ` F _._._.` F F F ` |.I F ` F F I q q H q ` F ` |.)+e+4+m+x+t+t+t+s+m+e+-+=+Z.=+=+(+0+e+4+4+6+|+)+,+^+}+_+!+[+^+}+4+{+#+P ] ] ^ l n l T R R C l c ] c ] ) % % % & % % ; % % ] ~ ] A T c $ % ) ) 0 u p t j p t u N N 3.}.Q.s.s.h.f.h.m.h.f.q.f.q.q.q.i.i.i.i.i.e.e.e.0.e.^.e.6.0.0.0.0.0.0.0.0.0.e.e.0.0.0.e.6.e.6.6.^.6.6.^.6.6.6.:.6.:.^.1.1.:.1.:.^.^.:.",
377"4.j.4.j.8.k.|._.` 4.|.4._.` _.` _.+.` _._._.` |.` ` F H _._.` ` ` F F _.` F F F I F q q H q H F F ` |.n.n.!+o+o+s+y+m+p+i+0+|+!+[+[+[+8+c+{+{+)+^+3+>+V.!+^+_+^+~+^+^+^+)+++o.h n C w R w C l c c ] ] ] % ; % ] % % % % > % % ] % % ) A P C $ % % % ) 0 j j u t u u u N #.3.q.o.M.m.f.m.h.f.q.q.f.q.f.i.e.e.5.5.0.6.e.0.0.^.6.h.6.^.e.0.0.0.0.^.e.^.0.6.e.^.1.^.1.0.^.6.^.6.6.6.6.6.6.^.0.6.6.1.:.1.0.:.0.:.:.^.",
378"_.4.4.k.4.k.|.|.` 4.4._.` _._.` _.` ` _._._._._.` ` F _._._.` F F F ` ` I F F F F F q q q q H F q F ` +.2.=+f+o+m+q+o+k+c+c+0+6+6+4+)+4+4+$+Q.-+-+)+Q.H.-+!+_+'+~+^+)+)+)+++N.T w w C l ] h ] ] ] > % % % ) ) % ] % ) % > % % ] ] ) ] A T g % ) ) 0 u u j t u N N N #.3.}.s.o.m.f.q.q.q.q.i.e.e.e.e.5.1.1.d.1.6.6.e.0.0.6.e.0.6.e.6.6.e.e.6.0.e.0.0.0.e.0.0.1.0.^.e.^.6.^.:.^.6.:.^.6.^.^.6.^.:.^.^.:.^.:.^.",
379"|.|.|.|.|._._._.` _.j._.` _._.` _._.` _._.` ` ` F ` H _.` ` F F F F F ` I ` F F q q q H q q F q F F O O B |.^+f+h+i+k+h+c+0+0+6+c+3+>+)+6+-+<.n. +$+>+n.`.)+~+)+'+'+)+)+{+:+#+T n h ^ ) ; > ] > % % % % ; % % & ) ) % % % % % ] [ c P >.g & % % [ ) 0 u u t u u N N N #.3.o.M.Q.q.q.f.f.i.e.e.e.e.e.e.0.0.0.0.0.6.h.0.0.0.6.6.e.6.6.6.h.6.6.e.^.6.0.0.>.6.^.0.>.1.0.6.6.^.:.0.9.:.e.^.^.:.6.:.:.^.^.6.:.:.:.:.",
380"` |.k.|.|.` ` ` ` _.j._.` ` ` ` _.` ` ` ` ` |.` F ` _._.` ` F F F F F F ` ` q F q q q q F q q q q q s I 6 G V.6+0+f+c+c+4+6+5+|+4+$+n.>+)+>+n.<.W.W.$+n.H.>+>+>+>+ +{+>+>+++#+A ^ & $ ; & % % % % ~ & $ ) ) % @ = ) ; % % + % ] [ c A >.u % % % ) [ j u j t u N N N N K 3.s.T.M.T.f.i.i.i.e.e.^.6.9.e.0.0.e.e.e.6.h.6.6.6.h.6.h.-.0.1.e.6.6.e.e.6.0.^.e.e.6.6.6.0.1.^.6.6.^.6.^.:.6.6.^.(.^.^.9.^.:.^.6.^.1.:.",
381"_._.` |.|.` _.F ` _.k.|.` |.F H _._.` F ` ` I F F ` ` I I F F q F F F F _.F q q q q q q q q 7 e e e e v : { 2.-+c+8+6+6+6+|+4+6+4+)+n.W.)+>+t.2.n.H.Q.t.n. +,+ +W.$+>+ +>+#+#+A ) ) % % % ] % @ % ) = & & % ) & & ) ) % + % % % ] ] ] P P A c % % ) [ 0 t u u u u u N N #.3.q.M.T.o.e.e.>.0.0.0.0.1.0.0.e.e.6.6.6.h.6.6.h.e.6.6.6.6.0.1.0.0.e.0.6.-.6.6.6.6.^.^.^.0.>.0.^.6.6.^.:.:.:.:.:.6.:.6.!.6.^.:.^.:.:.^.",
382"_._.` |.` ` _.` ` 4.|.|._.` ` _.` F F H F I ` F ` I F F F F F F F F F F ` F q q F q b b s e e e i : e | : = v F.(+}+4+|+_+|+^+)+^+{+n.n.-+W.n.2.H.H.t.}.n.Q. +>+W.V.`.Q. +$+#+P ^ ) % & ) ) $ $ % ~ ) ) ) g { ) [ ) $ + + % % ] ] c P N c % % ) 0 u u u u u N N u N N 3.s.M.N.q.0.0.1.0.1.0.^.0.1.0.e.e.e.6.0.6.6.6.6.6.h.6.e.0.0.6.6.0.e.6.6.6.0.6.^.0.0.0.6.:.:.0.^.^.1.0.^.:.:.1.:.^.:.^.:.V 6.!.^.!.:.!.",
383"_.+.` |.` _.|._._.|.` ` ` ` ` ` ` F F I F I F ` I I F F F F q F q H F ` F F q q F s b b 4 i | : : - | 4 - @ 6 |.=+[+|+|+^+^+4+)+)+>+Q.n.Q.>+Q.n.H.H.Q.<.}.H.`.W.`.Q.W.W.W.++#+>.[ ~ ~ & & ) ) ; ) = } [ ) ) } g [ ] ) % % % c P P c + % ) c 0 u u u u u K K N #.3.M.P.P.0.e.0.0.e.0.0.0.e.0.h.6.0.6.1.0.e.e.0.e.e.6.e.6.0.0.0.^.6.6.e.-.e.^.1.1.:.^.6.^.6.0.^.6.6.^.:.[.1.^.6.:.[.:.:.:.^.6.:.^.!.^.:.",
384"_.` _.` ` _.|.` ` ` ` ` ` ` ` F ` H F F F F q F F F ` F q q q q F F F F q q 9 q s e | i : { : - ( | | e ( @ { v F.^+^+^+!+^+)+)+)+)+Q.<.H.W.H.<.H.H.n.<.2.n. +Q.W.W.W.H.H.M.#+5.] { ) ) $ ~ ] h ; ~ } 0 [ [ } 0 [ ) ; % + + & @ % % u N [ & ) [ p u u u u u K N N N 5.M.N.u.0.6.6.0.6.6.0.6.6.0.h.6.0.6.0.0.0.0.1.1.0.6.0.6.e.0.0.^.6.6.0.0.0.0.1.1.1.0.:.:.:.:.^.^.:.:.:.:.:.:.:.:.:.(.^.!.!.V :.(.:.:.:.",
385"` ` |.` ` |.|.F ` +.` ` F F ` F F F I F F F F ` F ` ` I q q q q q F q q b 9 b e i : : { { - - : ( | | e ( @ - 6 2.`.)+^+)+^+)+>+)+$+W.}.n.W.W.<.n.H.H.n.n.H.W.W.W.K.W.H.K.$+#+r.% { { g & } [ [ ~ [ [ [ ] [ [ ) ; ; + + + % % % % % % c N c % % ) 0 0 0 t K u u K N N #.3.P.u.5.0.e.6.6.0.e.0.1.6.6.0.e.e.e.x.6.6.0.1.d.0.0.6.>.0.0.0.6.6.0.1.^.6.^.6.1.^.^.0.:.1.^.9.(.:.:.:.:.:.(.^.:.^.!.:.^.^.!.:.(.R :.(.",
386"_.` _.` ` ` I I F ` ` ` ` F ` H F F F F F F F ` ` ` I F q 9 H q ` F b b 7 7 | : : { { - ) : , | | 4 4 7 | & @ { G n.,+)+>+>+-+>+>+$+H.n.n.n.W.o.n.W.H.n.n.t.Q.H.W.K.H.Q.K.*+*+P.) { } } = ) [ { { ~ ] [ % ] ; % ; + % % > ] % % c N c % ) 0 u u t t u K u K #.#.o.P.q.0.1.0.6.0.0.e.0.0.0.1.1.0.0.0.0.6.i.0.0.0.0.6.6.9.:.0.1.1.1.0.1.0.1.^.6.1.:.:.^.:.1.^.6.:.^.:.:.:.:.(.^.:.^.^.!.(.:.V ^.(.:.:.R ",
387"|.` +.I ` ` ` F ` I O ` ` F F q q F F F F F ` F ` I F q q q H _.` b 7 4 | ( : : ) ~ = = - - ( | 4 4 b e | = % = 6 2.W.-+>+>+Q.>+Q.W.W.n.<.F.V.n.t.H.H.w.H.H.H.Q.w.Q.T.K.T.$+P.u.g { a ~ ~ [ ~ ) & & % > + ; + % % % % % % % ] ] ] u P [ % % % 0 u u t K u N N K N #.o.o.i.e.0.1.1.6.0.0.6.0.1.1.0.0.0.0.6.6.6.1.1.6.6.6.6.0.0.~.[.~.1.:.0.^.6.6.:.9.^.6.:.1.(.:.:.0.:.6.^.9.(.:.:.(.(.:.:.:.:.:.R (.R :.:.",
388"|.` ` F I F I ` F F F I ` I q q F F F F F ` F F F F b q 9 F ` |.O e 7 | ( - = { { { - ( ( | | | 4 4 1 b | = & : O n.`.`.W. +W.W.W.W.H.n.Q.H.H.H.K.K.w.H.m.w.H.K.w.s.T.H.Q.M.P.y g ~ ) % ; $ $ ; + % & ; % + % % % % % ) ] % % [ N P ) ; % ) u u t K u K K K N #.3.P.o.5.6.0.d.1.6.6.0.6.6.0.0.0.0.6.6.6.6.6.6.1.0.0.9.6.1.0.1.[.~.1.6.6.6.:.^.:.g.:.6.^.^.1.^.^.:.(.(.:.!.6.!.^.:.!.:.:.T (.:.:.R (.:.:.",
389"` +.` ` ` ` I F F F F I F I F F F F F q F F F F F q q q q q ` I b | ( - - { = - = ( ( < | | | | | b b 8 7 { % & - e |.F.$+W.W.W. +H.K.H.t.Q.w.K.w.K.Q.w.T.t.w.q.T.t.T.s.s.M.o.N.A % ) $ ; ; % + + + @ % [ % > % % % % ) ) 0 0 [ [ [ 0 N u % % % ) t K B K K u K N K N 5.o.o.e.e.0.0.1.6.x.6.u.1.6.0.0.0.h.6.6.6.x.1.9.9.1.0.1.1.1.d.1.1.0.:.:.6.^.:.:.:.:.:.:.:.[.:.[.^.:.:.(.^.!.V !.6.T :.(.(.(.R :.(.R R !.",
390"F ` F ` ` ` I ` I I q F I F F ` F F q q F q q s F q q q q F s i | ( , { = { ~ ( : ( ( | | 8 7 7 e 4 b b 4 ( $ = 6 +.F.W.Q.W.Q.W.Q.H.H.H.Q.s.K.Q.w.w.K.m.s.w.s.q.m.m.s.T.s.o.N.u % + + + + + % [ 0 [ % % % % % [ 0 c c [ c c u W c + % % [ B K K K K K K N N #.5.o.5.6.0.0.6.6.0.0.9.0.0.6.1.u.0.6.6.6.1.9.0.1.[.1.:.1.1.1.1.1.1.1.^.:.0.^.0.^.:.6.:.:.:.:.^.(.^.:.:.R :.!.9.!.(.(.:.R (.(.R :.(.!.(.(.",
391"` ` ` I ` I F I F F F I F q F ` I F q q F q F s F q q F s e e | - - = ~ = { = ( ( : : | ! | 7 | | 7 7 4 b | = & & : S t.H.Q.W.Q.Q.H.K.m.s.s.m.T.m.T.w.q.T.q.q.T.m.q.q.q.Q.T.q.M.P + + $ % 0 c [ % % $ ) ) ) c c 0 c u N #.P % % % % 5 . .K K K K K N N #.o.N.e.0.6.e.0.0.6.0.e.6.6.6.6.6.6.6.6.6.6.6.9.[.1.[.1.1.1.1.0.~.1.:.1.0.:.0.:.(.:.:.^.^.:.^.(.:.:.!.:.^.!.:.(.(.:.:.(.:.R (.:.!.!.R (.!.",
392"` ` I I I I F F F q F I F F ` +.I I q F q q q s q q q I s e ( : = = = { = { = - ( ( ( | | | 4 7 | 7 7 7 7 e { & & : p <.K.H.W.Q.Q.s.H.w.w.s.m.w.m.T.m.m.w.m.m.q.q.m.m.q.m.H.s.++#.+ + % + ; % [ 0 c % ) ) [ { 0 [ [ 0 u N P P c % % @ } B }. .K .K #.#.5.P #.3.i.e.6.6.6.0.6.6.9.6.6.6.1.1.1.e.6.0.0.0.6.1.[.1.[.[.[.[.0.0.1.1.:.^.:.:.:.:.:.:.:.:.^.:.:.:.:.:.^.!.^.:.!.:.R :.R :.:.:.R :.V !.!.!.R ",
393"I ` F I I I F s F I I ` I F I I q F q q q b q q b q q I v | - { = { ~ ) $ $ & { - : ( ( | 7 | 7 1 7 b 1 9 | ( @ & = 6 O n.s.w.T.m.Q.q.q.T.q.Q.q.s.m.m.m.q.q.T.q.m.m.t.H. +Q.Q.$+5.% % % % ) [ % % [ [ [ ) ) [ } [ 0 u u u u N N N ) = : p ..}.o.}.#...#.K #.3.#.5.N.3.e.6.6.0.u.1.1.0.6.0.1.1.[.9.9.1.1.9.9.9.9.[.[.1.1.1.1.^.>.:.1.1.:.^.:.:.6.:.:.(.(.:.(.:.:.^.!.:.:.(.V !.(.:.R (.R !.(.R (.!.!.Y ,.!.",
394"I F F F I I F q F F I F F s F s q q q q 9 9 b b b q q I 6 : { ~ & ) ~ % ; + . % = - - ( < | 8 | 7 4 b 7 b 7 : = & = ( r <.w.w.w.m.T.w.m.m.q.q.T.m.m.m.q.m.m.m.w.K.K.%+>+{+&+$+#+r.; % % % % ] ] [ c [ [ [ [ c ) ) c 0 u u u P c u u 0 0 5 B G ..n.t.o.}.}.}.}. .#.#.#.5.i.e.6.6.0.1.1.5.1.1.1.1.1.0.1.9.9.:.1.:.1.0.6.(.[.1.:.1.1.:.:.1.:.(.[.[.(.:.:.:.:.[.(.:.!.^.(.:.:.:.:.(.(.!.!.(.(.(.R (.(.R ).).).R ,.,.",
395"I F F I I I F q F s F q q F q b q b q 9 9 q q b q q F e : } ) & % % ; . $ . & = - - < | 8 1 8 8 1 4 b | - @ & - r S t.w.m.w.m.m.m.q.q.q.m.h.T.m.w.m.K.@+@+ +]+ +$+++$+++#+u.% ] [ [ [ [ 0 c c [ u c [ [ c u u u u c N u u 0 t t M .}.}.<.o.M.t.3.}.}.}.}. .}.3.3.i.5.0.1.0.1.1.1.0.u.1.1.1.1.6.6.9.9.1.1.:.6.:.1.:.[.:.:.^.1.^.(.:.:.:.(.:.9.V ^.(.(.(.!.^.!.:.(.R :.(.R :.(.R (.!.!.(.R (.!.R (.Y ).Y Y ",
396"I F F I I F s q s F F q q q q q q e q 9 9 q q 9 q q s i : - ~ . + + ; + + @ @ @ = - ( < 4 4 4 1 1 4 b | - $ $ = ( M f.w.m.m.T.q.m.q.m.m.w.p.w.K.@+]+$+>+$+$+$+++{+++++++#+~.] [ c u c c c j 0 c t u 0 u u u u 0 0 u u u M .. .#.}.}.}.}.<.}.3.o.n.}.n.}.}.o.}.o.o.5.0.1.[.d.0.u.0.0.1.1.1.1.1.:.6.(.1.0.^.1.6.(.:.:.[.:.:.6.(.:.[.:.:.:.(.(.(.(.:.:.:.(.!.:.:.(.(.:.:.(.(.R (.!.R !.(.!.Y ).).Y ).).Y Z Y ",
397"I F F I s F F q q F F q q q e q q q q q 9 q q q b s i 6 } $ ; + + + . + + . + . . @ = - , | | ! 2 1 b 4 e : & @ @ : r +.m.m.m.m.K.m.m.w.w.@+@+<+&+&+$+>+++M.$+++M.P.++$+#+#+P [ 0 c [ u 0 0 c u u N u c 0 0 u 0 p B M }.}.}.<.}.}.}.}.}.3.}.}.}.3.o.t.M.M.++++M.M.o.e.e.1.1.1.0.1.0.0.1.[.1.[.6.6.:.0.1.[.1.(.(.9.[.[.(.(.:.:.:.[.:.:.:.^.^.(.(.(.R (.(.(.:.:.(.R (.(.R (.(.(.,.).).).R (.R ).Y R Y Z @.Y Z ",
398"I F F F F F e F q F q q q q s s q e 9 9 q 9 b 9 b e 5 } ~ + + + + + + @ @ - ! 4 4 7 4 7 | 7 | & & - 6 O h.m.q.q.T.K.@+@+@+<+&+$+ +&+++T.M.M.o.N.N.N.N.N.*+P.c ] 0 c 0 u u N u u u N 0 u 0 0 p G ....}.}.n.}.n.}.n.}.}.}.M.}.M.o.M.M.M.++++#+#+#+P.r.5.0.1.1.9.1.6.:.0.0.[.:.1.^.9.:.9.:.[.1.1.[.[.[.[.1.:.:.:.(.[.:.:.:.(.(.!.(.(.(.[.(.(.R (.(.(.R (.(.).!.R !.R ).).).).Y Y Y Z Y Y Z U Y ",
399"F I F s F q F q q q q q q q q q e q q b q b q b e 6 = ) + ; + + ; $ + + + + @ - , | 4 4 4 4 7 8 4 - @ @ & a r <.f.m.m.K.w.H.T. +&+&+T.N.o.q.o.N.o.u.o.u.u.u.P.P.r.c 0 c u K u N N u 0 0 c 0 j B S <.<.n.n.M.n.t.n.M.n.}.M.}.M.n.M.M.M.++$+++++#+#+#+#+u.0.[.1.6.0.[.9.:.1.1.:.1.1.:.1.:.6.0.1.:.(.(.(.[.[.:.(.:.:.:.(.(.(.:.:.(.!.:.(.[.(.(.(.(.).!.(.(.!.(.R (.(.(.).).Y ).Z Z ).Y ).Y Y U U Y U ",
400"I F q F q e q q s q 9 q q b e q b b b 9 9 9 b 7 | { % % + + + + + + + . + + . @ - , | | 4 8 4 8 | - @ = & - r ..q.q.q.T.T.Q.T.N.M.q.q.i.i.u.e.e.i.h.i.u.u.u.N.N.3.c N N u u P c c 0 [ j B .}.<.<.t.}.n.n.t.}.M.}.M.H.t.M.M.M.++++++++#+++#+#+#+#+#+r.r.0.1.0.6.6.:.9.9.[.1.0.:.1.:.1.(.:.^.1.:.(.(.:.:.(.1.(.:.(.:.(.(.(.(.!.:.(.:.(.(.(.(.(.(.!.(.!.(.!.).).).Y !.Y ).Y ).Z X Z X Y U Y U U U Y ",
401"I I q q q q s q s s b b q b q b b q 9 q 9 9 b e { % + + + + + . + + + @ @ - - < 4 | 4 1 2 8 | = @ @ ( r +.w.m.s.s.s.q.o.q.i.i.i.i.x.h.e.x.h.x.h.e.0.0.o.u.5.P P u N c c c 0 j B +.<.<.t.t.n.M.n.}.t.}.n.n.n.n.M.M.++++++++#+#+#+#+#+#+#+P.r.r.u.1.1.0.6.:.6.9.[.:.0.:.^.0.:.9.(.1.:.[.:.[.).[.(.:.:.[.:.(.:.(.(.(.:.:.:.!.!.!.(.R (.!.R (.!.R ).).).(.R ).).).Y Z Z X Y z Y Y U Z Q w '.U Z ",
402"I q s q q q q F q q b 4 b b q b b q b b b 9 4 | ) + + + + + . @ + + + . + + + . @ - , ! | 7 8 1 8 | - @ @ - i +.m.q.f.q.q.h.q.e.h.h.i.i.0.u.e.u.i.6.h.u.x.6.i.P.5.A A c c [ 6 B G ..<.n.n.t.t.o.}.}.n.t.n.n.H.H.M.W.++++++#+#+#+#+P.r.r.u.u.u.u.u.1.1.1.1.1.6.6.^.:.[.[.:.:.:.1.1.1.(.9.:.[.[.[.[.(.(.(.~.).[.(.(.(.!.(.(.!.R (.:.!.(.!.(.(.).).).(.R ).Y ).Z Z Z Z Z Z Z X Z U U Y Y Z X U Y U Z ",
403"q q q q q q q s e q b 9 q b b q b 9 q 9 1 1 | : & + + + + + + + + . % % . . + + @ @ - , | 4 4 8 4 4 | - @ $ - a +.m.q.h.h.q.h.x.h.i.i.x.h.h.i.5.0.e.u.e.e.e.u.i.r.d.c [ 0 p K ..<.<.<.M.s.t.H.Q.n.n.n.o.M.M.++M.M.++++#+#+#+P.P.r..+u.u.[.d.u.d.[.1.0.6.1.:.[.:.:.6.6.^.:.1.1.1.1.[.[.[.(.(.:.[.(.(.(.(.(.(.[.(.(.(.(.(.).!.(.(.(.!.(.!.R (.).!.(.).).).Y ).Z ).Z X Z Z z Y Z Z X U X U Z U '.U Y U ",
404"q q q b q q q q q b 9 q q q b q b b b 9 1 1 | ) @ + + . . @ & + + + . @ . , , | 4 4 4 1 e ( - - ( v 2.m.q.x.q.i.e.u.h.i.e.e.h.h.i.e.e.e.u.e.6.h.i.P.5.0 u M .}.}.t.n.t.t.t.n.H.M.M.H.++W.++++$+++++P.P.P.r.u.r.u.e.1.1.1.0.[.[.[.d.9.6.6.0.0.^.1.:.1.6.9.:.[.[.[.^.(.(.(.:.(.:.(.[.(.(.(.(.(.(.).~.(.(.(.!.(.!.!.!.(.(.(.!.(.).).Y Y Z Z Z Y U Z Z E Z z Z Y Z z Z U Z U Z U Y U Y Y ",
405"q 9 b q q q q q 9 q 9 b s q b q b q b b 1 | : @ + . . . + + . . $ + . + + . @ @ - , | | 7 4 | 8 | = @ & < r +.q.q.q.u.i.u.i.u.e.x.e.e.h.x.u.i.i.h.u.e.u.u.N.3.#.}.}.}.}.t.t.}.t.M.H.M.H.W.M.++++++++#+#+P.P.r.r.u.u.1.6.0.0.0.1.[.[.1.1.1.[.6.^.9.(.[.[.[.[.:.:.:.9.(.[.:.1.1.1.[.(.:.:.(.(.(.(.(.:.(.(.(.(.R (.!.(.,.R (.).).R (.!.Y ).Y ).).Z Z Z z Z Y Y Y Y Z z Z Z @.Z Z Y Z Z Y Z Z Z Z ",
406"q q 9 q b b q b b b b q q b 9 b b 9 9 1 7 | ) @ + @ + + . . . + . @ , | 4 4 1 | 4 4 ( @ @ ( a ..N.e.h.h.i.u.i.h.i.e.u.e.i.h.h.h.x.e.i.6.e.5.N.f.}.n.}.t.M.o.M.M.t.M.++$+>+++++++#+#+P.M.u.u.u.0.1.[.1.1.9.1.1.9.1.1.[.1.1.1.:.1.0.:.:.9.:.1.1.1.^.(.:.:.:.(.:.(.:.(.:.:.:.(.(.:.(.(.(.(.(.(.(.(.(.,.(.,.!.!.,.'.,.).Y Y Z Y Y Y Y Z Z Y Z z Z z Y Y Y U Y Z U X U U U Y Y Y Y Y ",
407"q b q b q b b b q b b b q b q 9 9 1 1 b | : @ + . + + + . . % + + . + . @ @ - | | 8 | 8 8 | ( = = = ( ..o.q.q.h.i.i.x.i.e.u.e.e.6.h.i.h.i.6.x.6.e.i.N.s.t.n.M.M.M.++M.$+++++{+#+++++#+#+P.o.P.d.u.0.0.1.[.[.1.9.1.9.6.9.9.1.1.[.[.1.1.1.(.9.g.:.:.[.(.(.[.:.9.:.:.9.9.(.(.:.:.!.(.(.(.!.!.).!.(.(.(.(.!.!.(.).(.).!.!.,.,.Y Y Z Z X Z U Y Y z Z Z Z Y Z Z U U U X Z U Z Z '.Y Y Y Z U Z ",
408"q q q b b 9 b 1 1 1 1 b b b 1 1 1 1 1 b | ) @ + ; + + . . . . + + + + . . - , 4 1 | | 8 4 < = @ = ( S q.h.i.h.h.i.0.x.h.x.e.i.e.x.e.6.x.i.h.x.6.u.N.o.M.M.$+{+++++++++++:+#+++#+#+r.r.u.0.0.1.u.1.d.1.1.[.[.1.1.9.6.6.6.9.1.1.:.1.:.1.[.:.:.(.:.:.:.:.[.(.(.!.(.:.!.(.(.:.:.:.(.[.[.(.(.(.(.!.(.!.(.(.!.,.).).Y Y Y Y ).Z Y Y Y Z Y Z z Y Y z Y z Y Y Y Z U Z X Z Y Y Y Y Y Z Z Y Y Y ",
409"b q e q b b b b 1 1 1 1 9 9 b b b 1 b 4 | - - } % @ + . . . ; + + + @ @ - ( | | 7 4 8 | | = % = ( O s.q.h.i.f.u.i.e.e.h.i.h.i.e.u.e.e.6.6.h.e.e.o.++++{+d+:+d+:+:+:+#+#+#+P.P.d.u.u.1.0.0.1.1.0.[.d.[.1.1.9.:.:.1.:.9.6.1.:.1.:.1.:.:.:.(.1.:.:.9.[.(.[.(.(.9.!.!.(.9.!.:.(.(.(.(.(.(.).!.!.(.!.!.,.,.,.Y ).Y Y Y Y Z Y Y Y Z z Y Y Y Y Y Y Z Y Z Z Z Z X Z Y Y Y '.Y Y U Y Y Z U '.",
410"9 q b b b b b 1 1 b 1 b b 1 9 1 1 1 1 7 | b _.s.>.) % ; + + . + . . + . % + + + . . - , 4 4 | 4 8 4 | - % & ( i m.q.h.h.q.h.i.e.u.h.e.x.i.6.u.6.x.e.6.h.h.e.o.++:+d+++{+++++#+#+P.r.u.u.0.1.[.1.0.9.0.1.1.1.1.0.1.1.1.1.9.9.0.:.:.:.9.[.[.(.1.[.1.:.(.[.:.:.:.[.[.(.(.(.(.9.!.!.9.!.:.(.(.(.(.!.(.).).).).).Y ,.Y Y '.Z Y Y Z Z X Y Y Z Z Z Z X Z X Z Y U Z Z Z U Y Z Z Y Y Y U U '.Y Y Y ).Y Y ",
411"9 9 9 q b q b b b b b 1 b 9 1 9 9 1 1 7 7 H j+z+d.h % % . . . + . . + . + + + + . @ @ - | | 4 | 4 4 | - @ & ( i <.q.h.h.x.i.h.e.h.u.h.i.h.i.e.e.e.i.u.6.6.u.o.#+#+d+#+:+#+P.P.r.u.1.0.0.u.0.0.1.9.9.6.0.9.6.9.^.0.1.[.[.:.9.(.6.1.1.:.:.(.1.:.:.(.9.9.:.9.(.(.:.:.9.9.(.:.(.(.:.:.!.(.(.(.(.!.!.(.R (.Y ).Y Y Y Y X U U U z Z Z z Z Z Z X X z Y Z Y Y Y Y Z Y Y Y Z Y Z Z Z Z Z Y Y Y '.'.Y Z Y ",
412"b b b 7 1 1 9 b 1 e b 4 1 1 9 9 1 1 b 4 b E.A+:+).c ^ ; + + . + + + + . @ @ + . . . @ - 4 4 1 | 8 8 i { @ & - k f.q.q.f.e.u.x.u.i.e.6.u.h.h.x.6.6.h.0.u.e.e.i.P.#+#+++#+P.u.0.1.u.e.6.6.0.[.[.1.0.1.6.^.6.6.1.:.0.0.6.1.[.9.[.(.:.:.[.9.:.[.[.9.(.(.(.(.:.(.(.g.:.(.9.(.(.(.!.!.!.(.(.!.).!.).,.).).Y Z X Z Z Z Y Z U Y Z Z Z Z Z Z w Z Z X Z Y Z Z Z Z Y Z Y Y Y Y Y Y Z Z X Y '.Y Y Y Y Y ).Z ",
413"b b b b 1 9 9 b b b b 1 1 2 2 9 2 2 b 8 s ]+z+d.c h h + # + + . @ + + . @ . @ @ , | b 7 | 8 8 8 ( @ = ( a .q.e.h.h.e.i.h.e.x.h.i.u.e.i.i.e.u.0.0.e.u.i.N.P.#+P.5.u.1.u.0.0.1.e.0.0.0.1.0.0.1.[.1.:.^.6.1.:.0.1.[.[.[.(.g.:.g.(.(.(.[.(.(.(.[.~.).[.(.(.(.(.9.!.!.(.(.:.(.(.!.).).).).Y Z Z Z Z Z Z X X U X Z Z X X Z Y Z Z Z Z Z Y Z Z z Y Y Y Y Z R Y Y Y Y Y Z ).Z Z Z U Y '.Y '.,.X '.",
414"b b b b b b 1 1 b 9 9 2 1 9 2 2 9 2 7 | i t.P.~.T C ] ] + + + + + + + + + @ . + @ @ @ - | e s | < | | : @ @ - a .q.u.e.h.e.e.i.i.i.h.h.e.e.x.e.1.e.e.u.e.e.e.i.o.i.u.e.e.5.1.0.0.1.6.9.1.1.1.1.0.0.[.~.[.:.:.1.:.9.1.:.:.(.9.(.6.:.:.[.[.[.[.[.:.(.[.(.).[.(.(.(.(.(.).).).(.).).Y ).Y Z Z Z Z Z Z Z X Z Z X Z Z Z Y Z X Z Y Z Y Y Z Z Y Z X Z Y Y Y Y Z Y Y Y Y Y Y Z Z X Z Z '.Y '.Y U '.X Z ",
415"b b b 1 b q 9 b 1 1 9 2 1 9 2 2 1 4 4 6 : M o.r.1.T ] ; + + . + . + + . @ - | e e | | 8 | 6 & & - i S q.i.h.i.h.h.e.6.x.6.i.i.i.e.u.u.e.e.0.0.0.e.u.u.i.u.6.u.[.1.6.0.1.1.1.1.1.1.0.1.1.1.[.1.1.0.6.(.6.:.1.:.g.(.9.(.:.[.:.[.(.[.(.:.(.[.).[.).g.).).g.(.(.).).$.).Y ,.U Z @.@.Z U Z Z X Z Z X Z U Y Y Z Z Y Y D R Y Z Z Y Z Z Z Z Z Y Z Z Z Z Y Y Y Z Y Z Z Z X Z Y '.Z U '.=.Z =.",
416"b b 1 b b 1 1 b b b 2 2 9 2 9 2 1 4 4 : : +.X.r.d.T ] + + + + . + . + + + + + + + + @ @ @ , | i | | | | | : & ; = 6 S f.i.h.i.u.h.u.e.e.6.h.6.e.e.0.6.e.e.u.e.0.0.0.0.0.0.9.0.1.1.1.1.1.1.1.1.1.6.9.1.[.1.:.[.(.(.6.[.(.(.9.:.[.[.:.(.[.(.(.(.(.(.(.:.!.[.[.(.).).).).)./.).).Z @.@.Z Y ,.Z Z Z Y Z X Z X Z Z X Z Z Z Z Z Z Y Y Y U Y Y Z Y Y Z X Z Y Y Z Z Z Z ).Y Y X Y Y ,.Y =.U Z '.=.Q U =.'.'.",
417"b b 1 1 9 1 9 1 b 1 1 1 9 2 1 1 4 1 | ( ( <.N.r.[.c ] + . . + % % @ @ @ @ - , | | a < | | 6 & ) k ..m.h.u.h.i.u.e.e.x.e.e.6.6.0.h.h.h.e.0.0.0.6.0.0.6.6.0.1.1.1.1.1.[.[.g.6.9.:.^.9.1.(.1.:.:.1.(.(.[.9.:.[.[.[.(.[.(.(.(.(.(.[.(.[.(.(.).).).).).$.@.Z X @.Z Z Z Y Z U Z X Z X U Z Z Z Z Z Z Z Z Z Z Y Y Z Y Z Y Y Y Z Y Y ).Z Y Y Z Z ).Y Z Z Z Z Y Y $.Z =.'.=.@.*.=.*.*.U &.=.",
418"7 1 1 1 9 9 1 b 1 7 1 1 1 1 1 1 4 1 | - = M 3.>.A ] + + + + + + . @ & % + + . . @ @ = - , | | | 6 | | 8 | - @ = 6 .f.f.u.u.e.u.e.e.e.0.e.x.e.0.6.h.6.e.0.e.e.6.6.e.0.6.0.0.0.1.1.0.1.1.[.0.1.:.:.:.9.(.0.:.(.1.:.(.[.[.(.(.[.(.(.(.[.(.(.).!.).,.).).).).Y ).Z @.$.@.@.@.Z Z Y Z Y Z Z X X X Z Z Z Z Z Z Y Y Z Z Z Z Y Y Z Y Z Z Z Y Z Y Y Y Z Z Y Y Z Y Y ).Z Y ,.Y Y Z Z X Z =.Z *.Z &.&.=.&.*.",
419"4 1 2 1 2 1 1 4 1 1 4 1 1 1 4 4 b b a & @ [ c c ] > + + + + + + . + + . @ ~ @ % + @ @ & $ @ = - , | | | | < < | ( - @ = 6 ..f.i.i.i.u.e.i.x.x.6.0.e.h.h.h.x.0.0.e.0.6.6.6.6.1.0.0.6.6.1.1.1.1.1.:.1.:.g.:.[.1.9.:.9.9.(.[.(.(.(.(.(.[.).(.).(.).).).).).Y ).Z Z Y Y Z Z Z X @.@.Z Z Z Z Z Z X X X Z Z @.X X Z Z Y Y Y Z Z Y Y Z Z Y Y Z Z Z X Y Y Y Y ,.Y ).Y ).Z Y X Z Z Y Z Y '.=.Z X =.=.=.=.*.=.&.*.*.",
420"1 4 1 1 1 1 b 1 1 1 1 1 7 1 b 1 1 4 | & @ ; ; + + + @ { ~ $ + . = = = @ @ - , 4 | 8 | < | | 7 a - @ @ a S f.i.x.i.0.0.e.e.e.h.e.0.0.6.6.h.e.0.6.0.6.0.1.1.1.1.1.1.1.1.1.:.1.1.:.1.:.:.:.(.[.(.(.:.!.:.1.(.).(.).).).).).$.).).Y Y Y Y Z X X X w Z X Z Z X Z X Z Z Z Z Z Z X X X X @.X Z X Z Y Z ).Y Z Z Z Z Z Z Z Y Z Z Z Z Y ).Y Y ).Y ).Y Y Y ).Z ).=.Y $.Z Z $.=.X *.Q *.@.=.=.&.Q &.",
421"1 1 7 1 b 4 4 1 4 1 4 1 4 1 1 1 1 b 6 ) + + + . + $ ) % @ . = - - & = = , | 4 < ! | < | < | ( @ $ ( O 3.q.i.e.e.e.e.0.6.0.x.0.e.0.e.0.6.6.h.6.e.0.1.1.1.1.1.1.1.9.^.1.:.:.9.[.[.[.[.g.!.9.!.!.(.(.).).).$.).).).).$.Z @.X Z Z X Z Z Z Z Z X w Z X @.Z X Z Z X @.$.X @.Z X X @.X Z @.Z Z Z Y Z Z Z Z ).Y Z Z Y ,.Y @.Z ,.Z X $.Y Y Y Y Y R ).Z Z Z Y $.Y Y Z *.=.$.$.*.*.&.=.Q *.&.*.",
422"4 | 7 e 4 e 1 4 4 4 4 1 2 2 1 1 1 1 i % . + + + % ) ; + + @ @ - - - - - - , | | i < ! a | < | ( @ % { r f.f.h.h.e.0.u.0.6.e.e.0.0.0.0.e.e.6.h.6.6.0.1.1.[.1.1.^.:.1.1.9.9.(.[.[.[.(.(.(.!.(.(.,.).).).).).Z Z @.X Y @.X @.X Z Z X Z Z @.Z Z Z X Z @.X X X Z Z Z X X @.X Z @.U Y Z Y Z Y Y Y Z Z Z @.Z Z Z ).@.Y =.Z Z Z ,.Y Z $.Z Z Y ).Z Z Y ).Z $.Z @.$.=.Z *.*.*.*.*.*.&.=.=.%.Q &.",
423"1 4 4 | e | 1 1 1 4 1 2 2 1 1 8 4 4 i = + . + @ & % @ @ - - - - @ - , 8 4 | | | < | ( | | ( @ @ ( t .i.e.e.h.e.1.u.e.6.6.6.0.0.0.6.6.0.6.6.:.6.6.1.1.[.(.1.1.[.(.(.[.).[.).).(.).,./.$./.).$.Z X X @.X X @.X X @.@.X @.@.Z Z @.X Z X Z Z Z X X X Z Z X X Z Z Z Z =.Z Z Y '.'.Z Z $.Z Z Z @.Z Z Z Z Z X Z @.X '.'.U '.'.$.Z Y ).Z Y ).Y Z Z Z Z Z $.Z $.Z ,.*.*.*.%.*.=.*.Q X X z ",
424"4 1 7 4 e ! 1 1 1 4 ! 1 1 ! 4 4 1 b | { & . + @ = & - , , - , - - ( | 4 8 < ( | | ( a < a ( = j -.f.e.0.e.e.0.0.e.6.6.0.0.0.0.6.0.1.0.0.9.0.6.:.(.1.g.(.:.(.).).).).).)./.).).$.$.@.*.@.@.Z @.X @.@.X @.%.%.X @.X X @.@.Z Z X Z X @.X Z @.@.X Z Z Z X Z Z Z Y Z Z '.Y U '.Y Z Z Z $.Z Z ).Z Z Z ).,.Z =.@.Z ).Y Y Y ).Y Y ).).Y $.).Y Y Z =.Z @.$.$.*.=.*.*.&.*.&.Q *.Q z m f ",
425"1 1 1 4 4 1 1 4 1 4 1 1 2 1 4 4 7 1 e : ) + + . = & @ @ . . - ( < | , , , , | 4 | 4 | | ( < | < a | ( = & 6 M h.e.0.0.e.e.6.6.1.e.6.0.0.6.0.1.1.9.:.1.:.[.[.g.).(.(.).).).).@.%.].=.$.@.X @.X X @.@.*.@.@.X Z Z Z X X Z %.@.X @.%.X %.@.Z Z @.X @.X Z X Z *.=.Z Z Z Y Y Z Z '.Z Z Z Y Y Z Z Z Z ).Z Z $./.Z Z Y '.'.Z @.X Z U '.Z ).).Y '.=.$.U Z =.=.=.@.%.%.=.=.=.*.*.*.*.*.U z w f / * ",
426"1 1 1 1 b 1 1 1 4 4 1 2 2 8 1 1 8 1 b e : @ + + @ $ $ % = $ @ @ @ - , | | | | , , ! 7 4 | | ( ( a ( | ( < a ( & $ $ [ B h.e.6.6.0.0.0.0.1.0.0.0.1.1.[.[.[.[.(.[.(.(.(.)./.$.).).].@.@.@.%.*.&.=.X X @.*.X *.X X X %.X @.X $.@.%.@.X @.@.X %.@.X %.@.@.X @.@.Z Z Z Z X Z X @.Z '.'.Z Z Y Z $.X $.@.Z ,.Y @.Z /.Z Z $.$.$.'.U '.Y ,.$.$.Z =.Z Y ,.Z ,.Y @.@.Z =.*.=.@.@.*.*.*.].%.*.=.U z w d _ / * # ",
427"4 1 1 7 1 1 1 4 7 4 1 1 4 1 9 2 9 9 7 e k { . @ @ & @ $ & ) & - | e v e | | : | 4 e e 7 | ( < 6 ( ( } a < | ( ) % % : y e.0.0.0.6.e.6.9.9.9.[.[.1.[.[.(.[.).(.).,.$.@.$.$.$.%.%.%.@.%.%.%.@.=.=.=.*.Q Z @.X @.@.@.X %.%.%.&.*.@.X @.X X @.%.%.@.@.X @.@.X Z X Z $.U *.*.@.Z Z Z Z Z Z Z Z Z ,.Z Z Y R Y Y Z ).,.$.Y Z '.X =.*.=.Z Z '.=.Z $.$.=.$.=.=.=.X *.=.@.&.&.&.*.=.=.U *.Z z w f _ ' # # # * ",
428"4 4 4 4 1 4 4 4 1 7 4 1 4 7 1 9 8 7 e e e | | 6 { % % % % $ @ & = : 5 = - , O O O i | i : 4 b 7 e 4 | | | : 6 a : : < a < ~ ) ] } y -.0.0.0.1.[.1.1.1.[.[.(.(.(.).).).Z @.@.@.@.%.X @.=.%.*.*.*.].%.;.%.*.*.$.$.@.U $.*.X X @.@.X X %.X U *.*.$.@.X @.X X X X @.X %.@.@.@.=.X $.X X X $.Z Z Z X @.X Z Z Y Y $.$.Y ,.Y Z Z '.@.$.X =.*.X *.=.=.X '.=.Z Z $.X $.U ,.=.*.&.&.@.=.*.*.=.U '.U w w f _ ' * * * + # * ",
429"4 7 b | 1 7 4 1 4 4 1 7 4 4 1 b b b 7 e i i i p } { { ) = = - ( : 6 6 i e v S G G v i | 7 e s 7 7 | | ( ( ( ( < < < | < } [ l h g W >.1.9.[.[.[.[.(.).).).)./.$./.@.$.$.].%.*.Q *.;.*.*.%.%.*.*.&.*.%.%.$.=.=.$.U $.U Z @.@.@.X $.@.@.$.=.=.=.X X %.X %.%.%.@.@.X @.X @.@.X $.Z U =.=.'.Y $.=.$.Z $.$.Y ,.Z Y Y ,.Y Z '.'.Z Z @.$.@.$.*.$.@.X $.Z =.=.$.@.@.%.@.X *.=.=.&.*.*.Z Q U '.x f f _ ' * * * . # * ' ' ",
430"4 7 4 7 7 4 e 4 7 7 b 8 4 7 8 b 8 8 b 7 e e v v 6 5 i 6 : - : 6 6 i e v e v O v v v e | 7 e s | | < ( ( 6 : : a ( a | | } h C w R R !.!.!.)././.).).,.$.@.Z Z @.@.%.%.X @.@.@.;.%.;.X *.*.X X @.*.*.*.@.*.*.*.X *.*.Z *.X @.$.X $.@.*.*.*.*.*.@.@.%.%.X X X @.@.@.@.X =.Y Z @.@.X X Z Z Z X *.X $.Z $.Y ).Z $.Z $.).Y Y $.=.Z @.*.@.*.*.@.$.Z =.$.*.=.=.*.*.%.@.@.@.&.*.*.*.@.Z U z w f / * * * * * * * * ' _ 3 ",
431"1 7 1 7 1 4 4 7 4 7 7 4 4 8 4 7 b b e 7 e e e e i v G 6 i i i k v s v s s v v v e e e e 7 s e i < ( ( ( ( ( : ( | < ( a g h R '.Y !.Y ,.,.).@.@.%.].%.@.@.@.%.@.$.X X *.%.;.%.X *.X *.X Z *.@.@.%.X %.@.X X @.*.*.X *.X *.@.@.=.Z Z @.@.*.@.$.=.Z @.%.%.@.%.@.@.Z Z @.Z $.$.Z @.Z $.Y '.Z X =.Z Z Z Z Z =.,.Z @.Z @.$.Y Z Z @.@.@.*.*.@.$.@.$.*.=.=.*.*.*.%.;.*.*.@.X $.X U Y w w f / * * * + + * * ' _ _ _ f f ",
432"7 4 4 7 4 1 4 4 7 b b 7 7 7 4 7 7 b b e b 7 e s e s O v e v v s i s e s I s e q s I s e e e | | < | : ( a ( : ( < | < ( 6 C R =.Z Y =.=.@.@.%.@.%.].@.$.X Z $.X =.].%.X @.*.;.X *.X X X X U *.Z %.%.;.%.*.*.*.X =.X *.*.*.@.@.*.$.Z X %.X @.@.$.@.@.$.Z @.%.X @.@.U =.Z Z X @.%.@.X U =.Z @.@.$.$.$.$.Y '.=.Z ).Z @.).Z $.Z *.X @.@.=.*.X *.$.=.*.$.@.@.*.%.;.%.*.@.X X Z z w l ' _ * * # * * * * _ _ f f f o x ",
433"7 4 4 7 4 4 1 4 4 7 | 4 e | e 7 9 b 4 b 4 7 q b q s s s s F s v v e v I I v I s v v s e | | : : | : ( | ( { ( ( ( < | | a g R Y Y $.$.@.%.%.%.%.@.%.X X @.@.@.=.*.*.*.*.&.X @.*.Q *.E X $.@.@.@.@.X %.%.@.@.@.*.*.$.=.=.@.*.=.$.*.=.$.@.@.@.=.*.@.*.@.].Z *.*.@.Z $.*.$.$.Z X Z Z '.,.U '.Z Z $.Y Y Z '.=.Z Z Z Z X @.).,.=.Z @.%.%.Q =.*.=.&.*.*.*.=.*.%.;.%.*.Z Z X z d d _ ' > # * + * * * * _ _ 3 f o x D D ",
434"4 4 4 7 4 7 7 7 b b 7 4 e 7 7 7 b b e 7 4 b 7 1 b b e s v s q I s s v I v I e s s s v i ( | ( ( | ( ( ( < ( a ( < ( ( ( a 5 V $.$.Z ,.$.@.@.%.%.*.$.%.X @.=.*.@.*.X ;.X *.*.%.X X U D X X %.@.@.@.@.X %.*.*.*.@.*.=.=.=.$.@.=.Z ].@.*.].*.=.*.=.@.*.@.*.$.X =.=.=.Y '.,.,.Z $.Z X Z ,.Z '.Z $.Y '.Y $.'.U ,.@./.).Z @.X Z $.$.$.Q *.*.*.@.=.*.@.*.*.@.@.@.X X Q Y w w d _ ' * # * * * * * / _ 3 f o o o E x &.Q ",
435"4 4 4 b 4 4 7 7 7 7 4 7 b 7 4 b b 7 7 7 7 7 7 7 b b b e e s e q F s s s e v s e e e 6 | : ( ( ( ( ( : ( ( ( < < ( < | a a g T Y Z $.X $.$.%.%.@.$.Q X %.X *.X *.*.;.%.%.*.%.X @.@.z Z X @.X X =.@.@.@.@.@.].@.@.$.@.@.@.@.*.*.*.@.].@.$.'.=.=.=.=.%.*.'.$.$.X =.'.=.Z Z Z ,.Y ,.Y =.X Z Z @.Z $.Z $.Z Y Y @.Z Z Z Y ,.$.$.=.*.=.=.@.*.%.*.*.*.;.%.;.;.%.X X Q z f d 3 ' > * . * # # * / _ _ f f o o E E E ;.Q {.",
436"7 4 4 4 b 4 7 7 4 b b 4 7 7 4 7 7 b e 7 7 4 4 b 4 b 4 b b q 7 q s s s e e e e | | | ( | : ( ( < ( ( : : ( { : : : ( ( < | a C ).$.$.%.X @.%.%.X =.@.*.*.@.@.@.*.%.X *.Z %.%.X Q X X X X *.$.@.X @.%.@.].@.*.=.*.@.].@.@.@.=.$.%.%.@.@.%.=.=.=.=.=.$.@.=.$.$.$.Z $.=.@.@.X $.Z $.U =.$.@.Z ,.Z $.Z Y =.$.Y $.$.$./.Z $.$.X $.*.X *.@.*.*.*.*.&.*.*.=.Q X X z w d _ > > + > * * * * / _ f f f o x D E E Q {.{.;.;.",
437"7 7 4 b 4 7 7 7 7 7 7 7 4 7 7 7 7 7 7 | 4 4 4 4 | 4 4 4 7 b b e e q e e 7 | | | | ( : : ( : : a ( ( : ( ( ( : ( : ( < | a a C Y Z @.*.;.*.=.X =.X *.@.*.%.*.*.X %.%.X *.X Q &.X D Z X X $.$.@.%.%.@.*.@.=.$.].$.*.@.@.@.$.@.].*.@.@.].*.*.*.*.*.*.@.$./.$.$.$.@.=.$.Z $.$.X $.U $.Z X Z '.Z '.Z $.@.$.Y $.Y Z ).Y ,.Z @.=.*.@.*.@.*.%.;.;.;.%.*.X U U z w d _ ' > + * * * * * _ _ _ f f o x E D Q E {.{.E ;.{.{.",
438"4 4 7 b 4 7 7 4 7 7 7 e 7 7 7 7 7 b 7 | 4 4 4 4 4 7 | 7 4 7 7 4 | e | | | | : : | , ( ( ( ( } : } ( ( ( : ( ( < ( ( < < < a C R $.Z *.*.%.*.$.$.X =.=.*.;.%.*.*.%.%.@.*.%.X X $.X X X X Q /.$.%.%.@.*.=.$.'.=.$.$.$.$.@.=.@.@.].].].].%././.].].]./.=.=.%.@.$.$.*.$.@.Z $.X @.=.=.$.Z @.Z X =.Z =.$.@.$.$.$.Z ,.Y $.=.@.*.&.*.].%.*.%.%.%.;.*.Q Q z m 3 ' > * * * + ' ' ' _ _ 3 f o o o D E Q ;.Q {.;.;.{.{.{.{.",
439"b b 4 b b 4 7 7 7 4 b | 7 | 7 7 7 7 e e , | | , | | 7 | | | | 7 | | | | | : : : : ( a : < < < { : : } ( ( ( ( ( ( | < | a k y Y Y Z @.%./.].@.X *.*.*.%.X *.*.X %.X %.X X %.X *.X X X @.$.=.@.@.@.@.$.].$.@.=.$.'.$.=.$.@.*.@.@.$.*.].*.*./.].].].*.=.].@.%.$.,.).Y Z @.=.$.X @.Q *.@.@.*.@.Z $.@.Z Z $.Z Y ,.Y $.$.*.*.=.=.].*.].c.*.;.%.*.U z w f ' ' ' + * + * * * _ _ 3 o o x x D Q Q Q Q ;.{.&.{.{.{.{.{.{.",
440"1 1 7 7 1 7 4 7 e 7 7 | e 7 e 7 7 7 i | | | | | | | ( | ( | ( | ( | : | ( : { ( ( ( a : ( ( ( } { ( : ( ( : : : ( ( ( ( < a j Y Z Z '.*.%.c.@.$.@.%.%.%.*.*.Q @.@.X %.%.X X %.X X X Z Z @.=./.$.].$.$.@.@.Z =.$.'.$.@.=.@.@.@.@.$.*.%.].=.*.*.*.=.=.=.$.$.$.$.'.$.,.,.$.Z $.@.@.X *.X X @.*.U $.).).Y /.Z Y $.=.@.@.%.*.*.=.=.%.@.%.%.X X z w d ' ' > + + ' * * ' ' _ _ f m o E E Q ;.;.;.;.&.{.;.{.{.{.{.{.{.{.",
441"b 4 7 e 7 4 7 4 1 7 7 b 1 7 4 7 e e e | | | | | | : 6 : : : | , | ( < | , ( ( : : 6 } ( ( ( ( ( ( { ( = { - ( < ( ( ( < | a y R @.$.$./.].*.@./.*.*.%.%.%.@.@.Z /.@.%.X X *.X %.X X $.$.=.$.@.%.$.$.$.$.$.$.Z '.'.*.@.@.,.=.'.=.$.@.].'.=.=./.=.*.*.$.'.$./.).$.,.$.@.X @.X Z @.=.Z @.@.X @.@.Y Z Z /.Y $.@.=.=.@.;.*.c.*.&.*.*.*.U X E w d _ ' > + + * * * * * _ _ f f o x E Q E ;.E {.{.{.;.{.{.{.{.{.b.{.7.{.",
442"7 4 7 7 7 b 4 7 7 7 7 7 4 b 7 7 8 7 e | | < | | i | | ( : : : | ( ( ( : : : { ( { : ~ { = { < ( ( = { ( ( { - { { ( | ( < a 0 R Z @.$.].].=.*.*.*.*.X %.@.@.@.@.$.@.%.X Q *.Q X X @.@././.$.@.].@.]./.,.@.$.$.Z Z =.=.@.=.&.=.*.$.$.*.'.'.=.]././.].@.$.$.@.$.$.$.=.$.@.$.X $.X $.$.@.@.Z Z @.=.,.,.$.Z $.=.*.&.].;.*.*.*.*.*.Z X z w d ' > > * * * # * * * _ _ f o o o x E Q ;.;.;.{.{.{.{.;.{.{.{.7.{.7.7.y.{.",
443"e 7 4 b 7 7 4 7 7 7 7 7 7 7 7 7 b 7 7 | ( | ( ( i , | | ( : : : ( : : : ( { ( { ( { { { { { = = = ~ ( = { = ( < - : ( ( | | 6 R Z =.=.*.@.*.$.@.$./.*.$.*.Z @.@.@.].$.@.@.X X @.$.$.$.$.@.@./.$.).$.$.$./.@.@.=.'.].Z '.$./.*.].].]./.=.a.*.*.].].].].%.@.].].$.$.'.@.=.'.=.X $.Z X Z '.'.*.=.*.X Z $.$.$.@.*.].;.c.*.*.;.X Z z f 3 ' ' > * + + * * * _ _ _ f f o x x Q Q E ;.E {.E {.{.{.{.{.{.{.{.7.b.b.7.7.b.",
444"4 7 7 e b e 7 7 8 b 8 b 7 7 7 4 7 8 7 | | ( | | | : : , | ( : ( : : ( { : { { = - ( @ & @ ~ = = = & = ~ - ~ - ( ( { ( ( ( | 6 C $.@.@.@.X $.=.*.*./.*.].@.@.Z ).$.].$.$.$.@.X @.@././.=.,.$.$.$./.$.$.).$.$.].].,.$.$.$.@.].%.%.%.*.c.*.=.a.*.%.*.%.].].@.].].$.$.'.@.*.=.'.=.@.@.@.@.X Y *.Z *.*.@.@.]././.*.].%.%.@.X Z z m d ' * * + + * * * * / _ _ f f o o E E E Q ;.&.{.;.{.{.;.{.{.{.{.{.{.y.{.7.7.7.7.b.",
445"7 7 7 e e 7 | e 7 7 7 | 4 b 7 7 7 7 e | : , | < ( , < : : ( ( - : - : : } ~ ~ = = . @ = @ @ @ = @ & & = & - ( - { { ( ( | | a C Y %.@.@.$.$.,.,.].*.].$.*.$.).Z /./.@.$.@.%.$./.,.$.$.,.$.).@.@.)./.).Z ).$.@.$.Z /.$.@.].%.%.%.c.%.*.=.&.*.*.*.].].].*.].@.].$.$.$.$.$.U =.=.@.Q *.@.@.@.$.*.*.%.%.;.%.@.].].*.%.%.Z z d d ' > + * + * * * * * / _ f f o x E D Q Q {.E ;.;.{.{.&.{.;.;.{.{.{.{.{.b.b.b.b.7.y.b.",
446"7 7 7 | 7 e 4 7 7 7 7 e 7 7 7 7 b 8 7 | a | < | | < ( : : | : ( : ( { ~ & $ @ . . . . . . @ . & @ = = - - - - ( ( < < a a V Y @.X @.@.$.$.,.].].]./.@.@./.Z @././././.@./.$.$.,.$.,.$././.@.).*.).$.).$.$./.Y ,.$.@.%.%.%.].].].].].c.%.c.%.]./.$.].].@.@.$.$.@.%.@.=.=.=.$.$.=.@.%.*.*.*.*.%.].%.*.*.*.].=.U z w d ^ > + * + * * * ' ' _ f 3 o o E E E E Q Q {.;.;.;.;.{.{.{.{.{.{.{.{.{.{.b.b.b.b.b.7.7.7.",
447"7 | e 7 4 1 b 1 8 7 7 4 | 7 e 4 7 7 7 7 ( ( ( ( < ( | < ( { ( ( ( = & @ & . . @ . @ @ # @ @ @ = - - - - , ( | | | y !.Z ,.)./.).)././.$.'.=.$.@./.@.@./.@./.$.].$.'.'.]./.].].$./.Z @.$.@.$.$./.@././.$.$.%.*.].@.].].].]./.*.*.].].$.@./.].*././.].@.$.@.@.%.X %.*.@.%.%.%.%.%.%.%.%.%.].].].@.X z w d / * * * # + * * * ' 3 3 3 f o m E D E E {.Q {.Q {.{.;.{.{.{.{.{.{.{.{.b.b.{.b.b.b.7.7.7.7.7.",
448"7 | 7 7 e 7 7 b 1 7 | 7 | | 7 e 7 8 7 | | | | , ( : : , ( : { = = @ @ . @ @ @ @ + . + $ . . @ = - - { < < < a a y !.Y ,.).).).).)./.$.$.$./.@.,.)././.@.@./.$.$.$.,./.=.=.$.$././.@.$.$.@.@.@.Z )././.].%.].].].].].*.*./.].%.].@.].*.].].$././././.@.$.$.%.@.@.*.*.%.;.;.;.;.%.c.%.].@.Z U z w 3 * > + + + * . * * ' _ 3 3 m o D D E E ;.;.;.{.;.;.{.{.E {.{.{.{.{.{.b.{.{.b.b.{.7.b.b.7.7.A.7.y.",
449"4 7 b 7 4 | 4 7 7 8 e e e 7 7 4 7 7 e e i ( | | | | ( : : { = $ $ @ @ @ @ - - - , , , - - @ @ + @ . @ = = - - , ( | | y !.).,.a.).).).,.,.'.,.].$.$.@.$./.*./.).$.].*.$.$.,.=./.'.'.'.,./.$.$.$.$.)./.).).a.].=.$.$.$.=.=.*./.].;.%.*.@.*.].*.$.*.$././.$.$.*.@.$.@.@.@.@.;.%.%.%.%.*.%.@.*.U w d l ' # * # + + * > * * _ 3 3 m o D D D Q X {.;.;.;.%.{.{.{.{.{.{.{.b.{.y.{.{.{.y.{.b.b.7.7.b.b.7.y.v.b.",
450"4 7 4 7 b 7 4 1 b b 4 7 7 7 e 7 7 7 v i , ( | , < ( ( : { ) @ @ @ . - , , ! ! ! , ! ! ! , , - @ @ @ @ = = < , ( | a t !.(.).(.).a.a.,.,.,.).]./.$.].$.@.].=.).$./.].].$.)././.,.).=.,.)./.Z @.@./.@.,.,./.%.%.$.=.=.*.].*.*./.*.%.*.*.&.].].=.=././.@./.'.*.%.@.=.*.%.%.*.c.*.*.;.*.%.U z z l ' ' * + * + # * * * _ _ 3 f m m E E Q Q ;.;.;.;.%.{.{.{.{.{.{.{.{.{.{.b.{.b.y.{.b.{.7.b.b.b.b.b.b.b.y.b.",
451"7 | b b 7 7 e 7 4 7 7 7 7 e 4 7 b e e 6 | | ( ( < , { & @ - , ! ! 4 e e b 2 2 2 2 2 ! ! , - @ . . . @ @ = - < | a | y :.'.!.a.).).).,.!.,.*.$.].].$.].].].,.$./.].*.$././.$.$./.].,.'.,.)././.$.$././.].@.@.].*./.].].*.%.].=./.*.*.]./.&.*.].@.].].].@.@.=.].*.*.*.*.c.*.&.].%.%.X z w _ ' ' ' + + * * * ' * _ _ _ f o o x D E E ;.Q ;.;.;.;.{.{.{.{.b.{.b.;.7.b.{.{.b.{.b.b.b.v.b.v.b.A.7.b.y.b.b.y.",
452"b 7 4 1 b 4 | 7 1 8 7 7 7 e e e 7 s e | : | ( : ( < { & @ @ - , ! 2 2 q 4.k.` s 9 1 9 9 9 b b ! ! - @ @ . . @ . @ = - , , | | k ^.!.!.).).,.,.,.,.,./.$.]./.$.].@./.'.$.$.$.$.$.$.=./././.]././.$.Z $.$.).$.$.$.$.].$././.$.*.*.*.].%.*././.*.&./.*.].%.@.]./.%.].*.%.].*.c.;.*.].=.=.&.$.Y w d _ > > + * + # + * / / 3 3 f o o E E E Q ;.;.{.E {.{.{.;.;.{.{.{.{.b.b.7.7.b.b.b.b.y.b.y.b.y.b.b.v.7.A.b.y.y.v.v.",
453"| 7 4 7 7 e b | 4 7 7 b 7 7 | 4 4 e e i | : : ( ( = @ @ @ - , ! 2 q H S.V.|.I q 9 9 9 9 b b b q 7 ! , @ @ . @ @ - - - < < | r V '.).).).).g.(.,.,./.]./.@./.$./.*./.,.=./.]././.,./.$./.$.,.'.).).,.'.$.$.$.$.$.X ].].@.].*.].].].].].=.*.*.].&.].%.].].a.].].].c.].].].].].].=.*.=.Y f f _ ' + * # * * * * ' _ _ 3 3 m D D D E ;.E {.E {.{.{.{.{.;.;.;.{.{.{.{.b.7.7.y.b.v.b.b.b.7.7.7.v.7.A.7.v.b.y.v.y.v.v.",
454"4 | e 7 4 e 7 e 7 7 7 b 4 7 e e | 7 7 | < < ( ~ = = @ - , ! ! 2 9 j.S.=+n.I s 1 9 2 2 9 9 b b b 7 7 , - @ . @ @ . - - , ! < 8 y :.'.,./.a.!.,.(.'.'./.].].$./.$./.].].=.=./.@./.$.,.,.,./.$./.$.$.).$./.,./.$.=.$.].@.=.].].].].@.*.&.*.*.*.*.].*.].].%.%./.].c.].c.c.].c.].].=.,.U w 3 / ' + > + * # * * / _ 3 f f m z z E Q *.;.{.{.{.{.{.{.{.;.{.%.;.;.7.{.b.{.{.b.7.7.b.b.v.b.y.y.7.b.v.A.v.7.A.v.y.b.y.y.v.",
455"4 e | 7 b 4 e i | 8 8 | | 4 4 | 7 7 | ( | ( ( = = - - , ! 2 1 H j.S.-+|.I q 1 2 2 9 2 2 1 4 b 7 b 4 4 , @ @ . @ - @ - - < 8 | r !.)././.).!.a.'.,.,.=.$.$././.@.].].].].*.]./.,.,.,.,.$.$./.Z /.)./.).,.Y ).,.=./.@.$.$.$.].%.*.*.].].&.*.].]./.=.=.=.*.].c.].].&.].=.*.@.@.'.w w d 3 > * * + + ' * * / _ 3 f f o z z U X Q ;.Q ;.;.{.{.{.{.{.{.{.;.7.c.{.{.b.{.{.b.7.{.7.7.b.7.7.b.v.v.I.7.v.A.v.y.y.v.y.y.C.G.",
456"4 7 | | 7 e e | 7 7 1 e 7 7 b 7 7 b e a ( < - @ - , , , ! b H S.S.V.+.v 4 4 1 1 2 1 2 2 9 1 7 b b b b | - @ @ @ @ - - - , < 8 y ^.)./.,.a.,.(.,.,.,.'./.=./././././././.=././.,.,.!.,.).$./.$.@.$.@.).).$.,.,.=.=.=././.$.=.].].].].].].%.].].*.*.&.=.c././.].c.'.a.=.'.Z z w l / * * > # * ' * * ' _ _ f o m z Q Q X ;.;.*.;.*.;.{.{.{.{.{.{.7.7.7.b.c.c.7.7.7.c.7.b.7.b.7.7.7.v.b.b.7.I.A.v.A.v.v.v.v.I.A.y.A.",
457"7 4 4 b 4 | e e 4 8 8 8 7 7 4 7 | 7 7 i ( - = @ - , ! 4 q _.S.-+n.F e 1 ! 1 2 2 1 1 2 2 1 4 4 4 7 7 7 | - @ - @ @ @ < < | | r R )././.!.a.'.(.,.,./.'././././.).].,.'.=.=.'.a.'.'.!./.).Z /./.Z /.$.$.,.$.].=.*.*.].*.=.=.%.%.].*.*.&.*.*.].=.a.*.*.=././.].].*.=.U Y w d / ' * * # # # * * ' _ _ 3 f f o E E Q Q ;.{.%.;.&.;.;.{.{.{.7.{.c.{.c.{.7.7.7.7.b.7.7.7.7.7.7.v.7.v.b.b.v.v.b.v.y.y.C.y.v.v.A.v.v.A.",
458"7 b 7 4 7 e e e 4 8 4 | 7 e 7 7 | e 7 i { = @ , , ! ! q H S.`.|.s 4 1 b b 1 ! ! 1 1 2 1 1 1 1 1 8 8 7 e ( - @ @ @ , - , , ! a y !.(.).a.,.!.,.).,.,./.=.].$.$././././.'.=./.,.,.'.'.,.)./.@.@./.,.$./.$.$.$.].].].%.].*.].c./.*.].=.a.*.].*.c.&.*.c.*.=././.]./.Y Y m l / / # # # * # * * ' / 3 f f o o x x Q ;.;.;.;.{.%.{.c.;.{.7.7.{.c.7.7.b.7.7.7.7.7.{.7.b.7.7.v.A.c.A.y.7.v.v.b.I.7.A.A.7.y.A.v.v.v.v.A.A.",
459"4 4 4 4 b e e | 7 | 4 7 7 4 7 e e 7 7 a { - , , 2 2 b q E.S.` e 1 b 1 q b q 1 1 2 2 2 4 1 1 b b 7 7 7 e i ( @ @ . - - - , | | r :.!.,.).).).,.).,.$.'./.$.]./.,.,.,.=./.,.'.'.,.,.'.,././././.$.$.,.$.,.,.$.].@.].%.c.%.*.].].].a.=.&.].c.;.].]./.=./.=./.@.Z Y w d / ' * * * * * * ' / / _ 3 f m m x x U Q Q E {.X {.{.{.7.b.7.7.{.{.{.b.7.c.7.b.c.7.b.b.7.y.b.v.b.b.A.A.7.A.v.A.v.A.A.I.A.y.y.7.v.v.b.A.A.v.y.",
460"4 4 b 4 7 4 7 7 7 7 1 4 7 4 4 4 7 7 7 a - , , ! 2 2 q F k.I e q e q q q e b b b 1 4 1 1 4 1 7 7 7 7 | i | ( = @ @ @ - , , ! a t (.,.!.!.).).,.$.=./.=././.$.,.,.$.,././.a.,.'././.,.,.)./.@.].=././.$.$././.].%.%.%.]./.=.].].%.%.].].*.%.c.].].c././.$.Z Y w d ' _ > * # # # # * / / _ f m m z D E Q Q *.;.;.{.;.;.{.{.{.;.{.{.7.7.b.b.b.b.b.7.b.7.c.b.b.b.7.7.7.A.b.I.I.7.A.v.b.I.y.y.A.A.C.y.y.v.v.v.v.b.v.y.",
461"4 4 4 7 7 8 1 4 b 4 7 7 4 4 | 7 | | e | - , ! ! 2 b b F s e 7 q s s e q e q e 4 e | 4 7 7 4 | 7 i 8 i 7 i | - @ @ @ - - , | | y (.g.'.!.!.,.,.'.,.,.,.=.,.,.'.=.,.$./.].$.a.,.,././.,./././.]./.=.,././.$.$./.=.*.].].].].].].].c.;.c.].].]./.].].$.Y Y z d _ > > > * # * * / / _ _ f m m z D E X X %.;.;.;.;.*.;.;.{.{.{.{.{.7.{.{.b.{.7.b.b.7.7.c.7.v.b.v.b.v.v.b.A.b.I.v.v.v.y.C.C.A.v.y.y.A.A.v.v.v.v.v.b.v.",
462"b b 4 4 7 7 4 4 7 8 7 e 7 4 4 8 7 7 4 | , ! ! 2 1 b 7 b 1 1 q v s q e q e b e e | | e s O 7 | 8 8 8 i | i | - @ - @ - - , < | y !.).,.,.).,.,.=.=.,.,./.=.,.,./.=.'./.=./.,.,.,.'./.).Z /./.].].=.,.@./.).$.=.=.c.].%.].].].c.*.].*.].]././.$.Z X Y w _ ' ] > + # # * # / / _ 3 f f m z D X X %.%.{.{.%.;.{.{.&.;.;.{.{.b.{.b.b.{.7.b.{.7.7.b.7.A.c.c.v.b.v.b.b.A.A.A.A.b.v.A.v.v.A.A.A.A.y.A.v.A.v.y.y.A.v.y.y.",
463"| 7 b e | 8 b 7 4 4 4 4 7 7 7 7 4 8 | | , ! ! ! 4 1 4 1 1 q e F e q e q e b e e i i 6 M G a 7 i 8 i 8 i | a ( @ @ - - , < | a N ).).,.!.,.)./.=.,././././.=.,././.,.'.,.'.,.a.,.$.)./.)./././././.=.,.,.=.=.a.*.*.%.%.c./.*./.].a./.c./.$.,.Y Y w d / ' > * # ; * ' / / / / _ f f z z X X X %.{.%.{.%.{.{.{.{.{.;.&.7.b.b.b.b.7.b.b.b.b.7.7.b.7.7.7.A.7.y.v.y.y.7.A.A.v.I.v.v.A.A.v.A.A.y.A.A.A.y.y.A.A.y.y.C.C.",
464"| | 4 7 4 4 b 7 4 7 4 4 1 4 7 4 | b 7 | , ! , ! 1 ! 1 1 e q e e e e b 4 e e B B 6 : k t B B r r | i i | 7 i a @ = @ - , , 8 | C (.).).,.,.=././.'.'.'.'././.,./.]././.,.'.!.g.).$.)./.,.,././.]./.=./.,.].%.].].].c.%.c.].].a.].=.'./.,.Y Y w d _ ' > * > + * > > ' _ _ f f w z z X X X ;.;.*.%.7.{.7.%.7.b.b.7.b.7.7.7.7.7.7.7.b.b.b.7.7.C.7.L.c.7.A.b.b.b.v.y.A.y.A.A.I.v.v.A.J.J.A.A.A.A.A.A.C.A.A.C.C.c.B.c.",
465"7 e 7 4 | 4 4 4 7 7 4 b b 7 8 7 1 b 8 ! ! ! , ! ! 1 4 q e q e q e e e e s G K K [ { } 6 y B M B p a 8 a 7 a } @ - - - , ! 8 a T ).).).).,.,.'.'./.=.=.]././.$.$.)./.,./.).a.).).,.).,.,.$.$.].a././.=.a.].c.%.c.]./.].].a.=.]./.,.,.Y Y w 3 _ / * ; # + # / * / _ 3 l m m z z Z X X X %.*.*.{.%.%.c.%.c.{.b.7.b.b.b.7.7.7.7.7.7.7.b.7.7.7.7.A.7.A.7.7.v.v.v.y.7.y.y.A.v.A.v.I.v.J.A.I.G.y.A.C.C.A.A.A.y.B.B.z.z.",
466"1 4 4 4 | | 4 4 4 7 | 4 4 4 7 7 8 b 7 4 , ! 1 ! ! 1 b e b b b e b 7 4 e G .N u ) ) % - a y y p B a 7 7 7 a : @ @ - , , | 8 a V !.,.,./.$././.'./.*.'.'.,.).).=.,.,.a./.)./.).).)./././.'.'./.,./.,.=.a.%.c.].a.a.a.].c.).a./.,.).R w l / ] ; # # # / * > / ' _ 3 d m z z X X X Q %.*.%.%.*.;.c.%.c.c.c.7.b.7.b.7.7.b.b.b.7.7.7.C.7.A.7.I.7.A.c.A.A.A.v.v.v.y.v.v.v.A.v.A.y.I.v.v.G.v.G.C.A.J.C.A.C.C.A.B.B.c.z.",
467"4 4 4 7 | e 7 1 | 7 4 | 7 7 4 4 1 8 4 ! ! ! 1 ! 1 4 e b 4 e 4 7 4 e 4 v ..u u 0 [ & @ @ & { 5 j p r a 7 a r { = - - - | ! ! a V ).,.$.,././.=.]././././.=.$././.'.).).)./.)./.)./.).'.a./././.a.=.a.'.*.].%.c.&.a.=./.)./.,.Y Y R l _ ' > * * # / * > ^ / _ l l w m z Y D X X *.%.%.;.*.{.c.;.7.;.;.{.{.7.7.7.7.b.7.b.b.7.I.7.A.7.A.7.A.c.A.A.v.7.A.7.A.v.v.v.y.y.y.v.A.y.v.y.v.G.v.D.v.A.C.C.A.A.A.A.C.C.B.B.B.",
468"4 4 4 7 7 e 4 4 4 7 4 7 | 4 | 7 1 8 7 7 ! ! ! ! 1 1 1 7 4 4 7 4 e | e u K j j 0 [ & @ @ @ & } r r | i a a ( = - , - , 8 8 5 R '.'.$.,.$././.$./.,.,.,.$.$././.,.).).).).).).a./.).,.,./.=./.a.=.].a.].a.].a.c.a.=.a.$.Y R w d ] ^ ; > # # / > ' / 3 l l d d w z Y D Z X *.;.*.c.%.c.c.7.7.c.7.7.;.7.{.%.7.7.c.7.7.7.I.c.7.I.7.7.I.7.I.7.A.A.A.A.y.A.C.y.A.y.y.v.v.v.v.y.A.y.I.v.y.D.y.C.A.A.A.A.v.v.A.y.C.B.D.",
469"4 b b 7 | 4 7 b 7 4 4 | b 4 7 | 7 4 4 | , ! ! 1 b 4 1 4 1 4 4 ! e 6 k 5 j K K t ) @ @ @ = = - : K G a i a a = - , - , ! ! 4 y !.Y ,.,.].=.=././././.$./.,./././.,.'.).)././.).)./.].].a./.a.].a.=.a.].c.].a.]./.].$.Z Y w d ^ > * # * ; * # ^ / ] d l l d Y z Y Z X @.@.@.%.;.c.*.c.%.%.7.%.{.7.7.b.7.c.b.%.c.c.7.c.c.c.7.7.L.I.c.c.A.A.A.A.v.v.v.A.A.A.A.G.G.v.y.y.v.I.v.v.A.y.A.y.y.C.A.y.A.A.v.A.A.A.y.C.y.A.",
470"4 4 4 b e 7 | 7 | b 1 4 7 4 | 4 | 4 1 4 | ! ! b 7 4 4 4 4 4 1 4 v 6 6 : 5 W u K & @ = @ : : k 6 K M a a a a < , , ! , ! 8 | j !.).$.,.,.,.,.$.$.$.'.'./.,.$.,./.).$.).).)./.).).)././.].].a./.a.].c.a./.a.].a./.).Y w d ] ' # # # # * ^ / / / l l c C R R R (.).).).,.].c.].%.c.].c.c.c.%.7.%.7.c.7.7.c.7.I.7.c.7.7.C.c.I.7.7.I.7.L.c.C.C.A.A.A.v.A.v.v.I.G.y.v.I.y.G.J.I.I.A.A.y.y.y.c.A.A.A.A.A.y.A.y.y.y.7.v.",
471"4 4 1 4 7 7 7 7 4 1 4 4 4 | 7 | 1 1 4 e i ! , 4 4 4 | ! ! 4 1 e .5 } - p B K [ & = = : 6 k p j S W 7 a a < - , , ! ! ! | | V Y *./.'.'.'.=././.=././.$.].=.$.).$.Y ).).,.)./.)./.,.,.,.]./.a.a.a.].].c./.).$.R w l ' ^ * / # ~ / / ^ ^ c C T #.i.q.N.P.++#+*+*+P.N.u.u.U.[.a.a.c.c.%.c.c.c.7.7.7.c.7.7.c.c.c.c.I.7.c.I.c.7.I.7.A.A.A.C.7.A.A.y.A.A.J.I.I.v.G.G.A.A.I.v.y.A.A.y.y.y.y.v.A.I.v.A.A.A.y.y.y.y.A.v.",
472"4 1 1 4 4 4 4 b b 1 4 4 1 4 7 7 7 7 b e | 4 1 4 ! | ! ! | ! 1 s G ) : : t t t u & = = } 6 k p p S a i a a a < , , ! < 1 ! < V !.$./././.,.'.'./.=.=./.$.].*.@.,./.).).).$.)./.).).).'.a.=.a.].a.).].a.).).Y w d ] > > ; ; # / ^ ^ g y W 3.M.N.$+{+{+3+3+3+3+3+3+3+3+/+{+:+*+P.U.a.c.7.c.c.%.7.7.7.c.7.I.7.7.I.%.7.b.L.7.I.c.I.c.A.7.A.C.L.A.A.A.v.J.A.v.I.v.y.y.v.A.A.J.G.A.G.C.C.C.C.A.J.A.A.v.A.A.y.y.A.v.G.v.",
473"4 4 4 4 1 7 4 4 4 4 4 4 4 b 8 8 | 4 7 7 , ! | ! 4 ! 4 ! 4 ! 4 s v - | p M K N u [ & : ( 5 t k B W a | g a - < , ! ! ! 8 | a V ,.,./.a.)./././.'.a.,.,.'.,./.=.).).Z ).).).,.).a.)./.a.,.a./.a./././.Y Y w l ] ^ * # $ # / ^ [ y -.q.T.$+{+{+e+e+e+e+e+k+r+k+r+r+l+k+k+l+e+3+{+:+#+.+d.c.c.c.L.c.c.7.7.7.c.7.%.I.7.7.c.I.7.I.7.I.C.L.A.A.A.A.C.C.A.I.J.A.I.J.G.G.G.G.G.I.v.A.y.y.y.y.A.A.I.v.v.A.A.A.y.A.C.G.A.J.",
474"4 4 1 4 4 1 7 7 | | 4 4 8 1 8 1 7 7 7 e , ! ! ! , 4 ! ! | ! 1 e 6 : B ..M K K u [ ) = ( : 6 j K B a < a a ( , < | 8 4 4 | g !.).).$./.,.,.'./.'.'././.'.'./././.).$.).,.).,.).).).).].].a././.,.Y R l l ^ ' ; # ~ ^ ~ 0 u -.s.H.&+{+3+e+k+e+k+r+p+p+q+p+r+p+r+v+r+q+r+r+r+r+l+d+:+:+*+.+a.a.L.7.L.%.I.7.I.7.c.A.7.I.c.I.c.I.c.A.A.C.C.C.C.J.A.A.C.A.A.G.G.I.I.G.A.A.A.J.G.G.A.A.A.A.A.A.A.A.A.y.y.A.A.A.C.A.A.A.",
475"4 4 4 1 7 4 | 7 4 4 4 1 1 4 1 8 1 4 4 | | ! ! ! ! ! , ! , , 4 s p v S }.}.}. .p 5 } & & = } k M p a a a < , < | < | 8 7 | y !.$./.).,./.).]./.,.,./././.,.'.'.).,.).).).,.(.,./.,./.,./.=.'.Y Y l l / * > $ ^ ~ y M f.Q.&+{+{+3+c+e+h+k+p+p+p+p+q+t+s+s+s+t+s+t+y+x+v+y+y+o+q+p+e+3+d+:+#+R.d./.L.c.L.c.L.c.I.c.C.].I.c.7.C.7.A.b.A.A.v.J.J.v.A.A.A.G.v.I.J.v.I.G.J.I.J.I.I.A.A.A.A.v.A.C.y.A.y.C.C.C.A.A.C.G.G.",
476"4 4 4 7 7 | 7 7 4 | 1 b 1 4 4 8 b 4 b | | , ! ! ! ! | , | ! e O t G S <.n.<.S p p [ = = { = p M 6 a a a a | , | ! | 7 8 i V )./././.,././.]./.,.,./././.).,.,./.,.$.).).,.,.,./.,./.,.,.Y w l l / ^ ; # ~ u .T.M.$+$+3+3+e+k+k+m+r+p+r+p+r+s+s+s+s+t+v+v+y+y+t+t+y+v+t+B+t+t+v+v+p+k+d+3+:+.+R.c.L.c.L.7.L.c.L.A.L.7.I.L.C.7.C.A.A.C.A.C.A.I.I.A.J.J.G.J.J.G.I.I.J.J.C.C.I.I.v.I.L.A.A.C.A.A.7.A.G.O.C.y.C.C.C.",
477"4 4 7 4 4 | 4 4 | 4 4 4 4 8 8 4 4 4 | e 4 , , , , ! | , , ! e ..B G +.n.|.+.G B p p : : : i B r a 5 g a < | | 4 | e v | a V ,.,.'.'./.$././.,.a./.'.).).a.).,.,.,.,./.,.'.'.,.).,.'.'.R n l / / > * ^ [ W T.&+{+3+3+e+k+k+p+p+p+r+p+v+s+s+s+s+r+t+t+v+B+v+v+y+v+B+t+y+w+w+y+y+y+s+v+r+r+e+3+:+#+R.~.L.R.c.L.I.7.R.I.I.7.J.J.C.A.A.A.y.C.C.C.A.y.C.A.G.J.G.G.I.v.J.I.J.L.J.A.J.J.J.J.L.J.y.v.A.A.G.C.G.A.A.A.A.A.",
478"4 4 4 | 4 4 4 1 4 4 8 4 ! 8 4 | 7 4 1 4 | , , , ! , , , | 4 s .K G I |.I O G G G G G p p B #.t a g 5 ( | | | 7 4 s e i y !.'.'.=.'.)./.$./.,.,.a./.$.).).(.)./././.a.,.!.'.'.'.Y w w l / / ; / ; # [ 3.$+{+c+c+k+p+p+p+r+r+r+p+p+s+p+r+s+t+y+B+v+v+x+x+y+x+y+y+x+y+B+t+y+y+y+t+y+v+v+v+r+k+e+:+:+.+c.I.L.c.L.L.L.I.I.I.L.L.C.A.A.A.I.A.A.A.C.C.G.C.A.A.J.J.J.J.J.I.J.L.L.J.J.A.J.J.J.I.A.A.G.C.J.L.C.J.A.L.C.A.",
479"4 7 7 4 4 4 4 4 4 4 4 8 4 4 4 | 7 7 b b 4 , , , , , , , , , I S ..G +.O p v S ......<. .S s.}.y g a } i | e e e e s 7 e y !.,.,.,.)./.)./././.).).a.,.!.!.,.,.,.).a.'.,.a.,.!.Y w d / # # # # # / ] W &+^+c+e+e+h+k+r+p+p+s+s+s+r+v+v+s+s+v+t+t+x+x+v+y+t+B+y+y+B+t+y+y+y+A+t+B+y+A+y+y+y+t+k+e+:+:+r.c.R.I.L.L.L.L.L.L.J.J.L.J.J.I.A.L.C.J.A.C.C.A.C.C.L.A.A.J.J.J.I.G.v.G.J.J.J.J.J.A.J.J.A.J.J.J.A.I.J.J.L.L.",
480"4 7 4 4 4 4 4 7 4 4 4 4 4 7 1 4 7 | 7 7 | , , , , , , , | ! I S ..<...p v B S ..<.n.}.<.n.s.K k a a : i e e e q 7 7 | j R a./.]./.,.@./.,./././.,.a.$.).!.!.,.a.).).!.'.R w l l ] ^ > # ~ ~ ^ ^ ^ u $+3+3+b+4+e+k+h+k+p+k+q+t+t+t+y+t+B+t+x+x+y+y+x+v+x+y+t+y+y+B+B+y+B+y+B+y+y+y+y+B+t+y+A+r+t+k+d+:+.+R.c.L.c.L.I.L.L.L.I.J.J.J.J.J.J.J.I.A.A.L.L.A.A.J.A.A.A.v.v.v.C.y.A.J.J.J.I.I.L.L.L.G.G.J.J.J.I.J.J.C.A.",
481"4 7 4 b 4 4 4 7 7 4 4 4 4 7 4 4 4 4 7 e | , , , , , , , , ! I 2.+.2.S p G S ....-+n.W.n.t. .j g a : i e s s s s q b i C ).)././.'./././.a.,.,.,./.).).).!.!.).).,.,.'.Y V n n ~ ~ ) g 0 g 0 y N W q.{+3+4+4+e+c+c+c+k+e+i+i+i+k+r+v+v+t+x+v+t+B+t+y+y+y+y+y+y+y+y+y+y+y+B+y+B+B+y+B+y+y+w+t+w+t+r+a+d+:+d.c.L.I.L.L.I.L.L.I.L.J.I.I.L.I.J.J.I.L.J.J.A.I.A.A.A.A.v.A.y.C.C.C.C.A.J.L.L.L.C.L.J.I.G.J.A.J.J.L.J.L.",
482"4 4 4 4 4 4 4 4 4 4 4 7 | 4 4 4 4 4 4 1 | , , , , , , , , ! I +.|.<...G +.+.<.}.-+n.M.n. .j 5 g ( 6 v s e s s s s 7 a V /./.)./.a.).).,.'./.a.,././.).).(.(.(.,.Y R w l g j r -...f.f.o.M.M.M.$+W.{+|+4+4+c+e+c+3+6+4+3+4+4+4+e+e+p+s+y+y+x+t+y+t+x+y+w+A+A+A+A+y+B+y+A+A+y+A+A+A+A+A+y+A+y+y+t+s+q+a+d+/+.+a.I.B.L.L.L.L.I.L.L.I.I.I.I.I.J.J.L.J.J.J.J.L.C.A.A.v.A.A.y.C.A.A.A.v.v.J.J.C.B.G.J.G.J.A.L.J.J.J.J.",
483"4 4 4 4 4 4 4 7 b 1 4 7 4 4 4 4 1 7 1 7 | - - , - , , , , , F O I 2...}.n.n.n.W.n.H.<.M k 6 } 6 | e e s v O I F s e y !.'.a.,.,.'.'./.a./././.a.a.).a.!.,.).,.R V C -.#.s.K.@+@+&+&+>+{+{+{+4+{+4+b+4+4+c+c+e+e+c+e+4+4+4+3+3+4+4+b+g+q+s+B+y+t+y+y+A+y+y+A+A+y+B+y+A+y+y+A+B+B+y+B+A+A+B+y+t+B+t+y+q+l+3+*+.+L.c.L.L.L.L.L.L.I.L.L.I.L.I.I.J.J.J.J.A.J.J.v.I.J.L.A.A.A.A.C.J.v.A.A.A.A.c.C.B.A.J.A.L.C.L.J.I.J.",
484"4 1 1 4 4 | 4 1 1 1 4 4 4 4 4 4 1 1 7 4 | , , , , , , - , , | e I O 2.<.n.n.n.M.n.<.O 6 a } ( | e s s I I O s I 7 i V ,.'.,.).).a.,././.].a./.a.a.g.,.(.(.:.V ^.f.Q.W.>+]+{+|+4+6+b+b+c+c+e+i+c+0+h+h+h+h+h+k+i+h+k+c+e+4+4+{+{+^+3+2+g+o+t+B+t+B+t+y+y+v+y+y+y+A+B+B+y+B+A+A+A+y+B+A+A+A+A+w+B+t+y+r+r+l+/+*+R.O.L.L.I.L.L.L.I.L.I.I.L.L.I.J.I.I.J.I.I.J.I.A.A.L.A.A.J.J.A.C.J.C.C.A.v.y.y.C.A.C.C.c.C.c.I.J.J.",
485"4 4 ! 4 4 7 7 4 2 2 4 1 4 | 7 4 4 b 1 4 | , - , , , , , , , , , e I +.|.n.|.n.<.G k | ( a < 4 v s s F F I I I s O y !.,.,.,./.,.,.,.'.a.a.a.a.[.g.(.6.^.i.q.Q. +$+{+3+4+c+b+e+c+h+i+i+k+k+p+k+q+k+k+i+h+p+p+m+q+k+p+k+c+e+e+3+3+]+{+3+3+b+k+q+B+y+y+B+B+B+B+B+y+B+y+A+B+A+A+B+B+B+A+A+A+y+y+y+w+B+t+t+B+r+k+:+.+R.B.L.L.L.C.L.L.I.J.L.I.J.L.L.L.I.I.I.J.J.J.A.J.A.A.A.A.J.L.A.C.C.A.J.J.A.A.A.C.J.C.J.C.A.C.C.A.",
486"4 4 1 4 4 4 4 4 1 2 1 2 2 4 4 4 b 4 1 1 | , , , , , , , , , ! , , e v I +.+.I G 6 : ( ( | , e s I G I I ` +.F s t R ).,.a.,.).).).a.a.a.a.[.[.1.u.N.T.Q.>+]+{+6+4+c+e+c+h+h+h+i+h+m+m+m+p+p+p+o+s+q+q+p+p+p+p+m+p+p+p+m+h+h+c+e+{+{+)+{+4+b+i+q+t+y+w+w+y+y+A+A+y+y+A+B+A+A+A+A+B+A+A+A+y+y+y+w+y+A+t+t+w+w+e+/+U.L.I.L.L.L.I.L.I.I.J.J.J.A.J.L.L.L.I.J.J.J.G.G.G.A.J.J.A.L.J.J.J.J.J.J.J.J.J.J.J.C.C.J.C.A.C.A.",
487"4 4 4 4 b 1 4 1 4 1 1 1 1 b 4 4 4 4 4 b 1 < - - , , , ! ! , , , , , e e e | | | , - - , | e s I I I ` F ` I s i y (.,.,.'.!.a.a.,.a.(.[.1.u.N.*+&+&+^+1+4+c+0+b+h+k+h+k+k+p+p+p+p+q+p+p+p+s+q+s+q+p+q+p+m+p+o+t+s+p+s+p+q+k+k+c+b+2+]+]+]+]+e+i+t+y+B+y+y+y+y+y+A+B+y+A+B+B+A+A+A+B+A+y+A+y+y+y+w+y+w+y+r+q+l+a+#+R.R.I.L.I.L.L.L.J.J.J.J.A.A.A.L.J.L.J.J.L.L.A.I.J.J.L.J.I.A.J.J.L.J.J.L.J.J.I.J.J.J.L.J.L.J.C.",
488"4 4 4 4 4 4 4 4 4 1 1 1 4 4 4 4 4 1 1 1 7 | - , , , , , , , , , , , , , , , , , - , - ( e e I I O ` |.` ` O e y R )./.a./.,.g.g.9.g.u.N.%+&+{+{+|+4+c+e+e+k+k+k+k+k+p+p+k+p+p+p+p+q+s+p+p+m+t+s+s+m+t+t+t+s+s+p+s+s+s+s+s+s+p+p+k+c+4+{+^+]+3+0+k+s+B+B+B+B+A+B+y+B+y+A+A+B+A+A+A+A+A+B+A+A+y+y+w+y+t+y+B+r+r+l+/+.+R.R.L.L.L.I.I.I.J.A.J.J.I.J.C.J.L.L.L.L.L.J.v.J.A.I.I.J.I.A.J.C.C.J.J.J.J.I.J.J.I.L.L.L.J.J.",
489"2 4 1 ! 1 4 4 4 7 ! 4 4 4 4 4 4 4 4 1 7 4 i - - , , , , , - - , - , , , , - , - , - | | e v I I ` +.` ` +.s a V (./.a.a.a.).[.x.i.M.*+{+^+4+4+c+c+k+e+h+h+i+p+p+m+p+p+p+m+p+o+t+q+m+p+s+s+s+m+t+o+s+s+s+s+v+s+t+t+t+t+s+s+s+v+q+p+k+e+e+3+^+^+2+i+k+s+y+y+y+y+y+B+y+B+B+A+A+B+y+B+y+x+y+y+y+y+B+y+y+A+t+t+t+t+r+d+:+.+R.L.I.L.L.I.J.C.A.A.J.A.I.J.J.C.C.G.G.L.C.L.L.C.L.J.I.J.C.J.J.J.A.J.J.I.I.I.L.L.R.L.J.I.J.",
490"4 4 4 1 1 1 1 ! | 4 2 4 1 4 4 1 1 4 1 b 7 | - - , , , , , , , - , - , - , - , - , : i v v I I ` ` ` ` ` O r y !.).a./.a.a.1.u.%+]+^+3+e+e+c+h+k+h+h+k+p+q+h+q+p+p+p+p+p+q+s+o+s+s+t+s+o+t+s+x+s+s+m+y+t+t+s+x+x+s+x+t+s+s+s+s+t+t+p+p+e+e+4+4+4+6+e+q+t+B+y+A+y+B+y+y+y+A+A+A+A+A+A+y+B+y+y+w+y+w+t+B+y+t+t+t+q+l+/+.+R.R.L.R.I.L.I.C.G.A.L.C.A.J.J.L.C.G.A.J.C.J.A.A.I.J.J.C.C.L.J.I.I.J.L.L.L.L.L.L.L.L.I.I.J.",
491"1 1 1 4 4 1 1 1 1 4 4 2 4 4 4 4 4 1 8 1 b | - @ - , , - , , , , , , , - - : - : | i B I O I +.I ` ` ` I O y V (.[.).[.[.e.X.]+{+3+e+4+h+k+h+k+p+k+p+m+o+o+q+p+q+q+s+p+s+m+v+s+t+t+s+s+t+s+v+s+s+s+t+s+y+s+x+s+s+t+t+s+t+t+t+s+v+s+v+p+p+h+e+3+4+4+0+i+q+y+A+B+A+y+y+A+A+B+A+B+y+y+B+y+y+B+v+y+w+y+B+t+t+A+t+t+r+r+d+:+.+L.L.L.L.L.L.L.G.L.L.J.J.A.J.L.L.L.G.G.J.J.A.A.A.A.J.A.L.L.L.L.J.J.L.L.I.L.I.L.L.L.L.J.J.",
492"8 1 ! 1 1 4 4 1 1 1 4 1 ! 4 4 7 8 1 b 2 b 7 < - - - , , - , , - - , - : : } 6 6 e G I G ` I ` ` ` ` ` I p V 9.g.[.a.[.e.Q.>+^+4+4+c+c+c+c+h+k+h+p+q+p+p+q+p+m+m+r+s+p+s+m+s+m+v+s+s+s+s+y+m+x+t+s+x+s+y+t+x+y+s+x+y+x+x+x+y+s+s+s+s+s+p+p+h+c+4+^+4+6+i+t+y+y+A+A+y+y+A+B+y+y+B+A+B+A+y+A+t+B+t+w+y+B+v+B+w+t+w+q+d+/+.+R.R.R.L.L.L.L.L.L.L.L.J.A.J.L.G.J.J.C.L.C.J.C.A.L.A.A.J.L.L.J.I.I.J.J.J.L.I.L.I.L.L.C.A.",
493"4 ! 1 ! 1 1 1 8 1 1 4 4 b b 4 8 1 4 8 b 4 e , - @ - - , : , , : : - - 6 B B B B I G I G ` G I F F F ` G W :.!.[.(.(.:.f.]+^+7+6+6+0+4+0+6+6+0+h+o+m+q+o+s+o+t+s+s+p+s+s+t+s+v+s+s+s+s+t+s+t+s+x+y+t+y+s+x+t+y+y+y+s+y+t+t+s+y+t+t+t+s+v+p+p+k+c+3+4+4+e+k+t+B+y+A+B+y+y+y+y+B+A+y+A+y+A+w+B+w+B+x+v+t+t+t+v+t+r+r+l+d+:+.+L.L.L.O.J.J.L.J.L.J.L.J.J.J.L.L.C.J.A.C.C.A.L.A.J.J.L.L.L.L.I.L.I.I.L.L.L.L.C.C.J.J.A.",
494"1 8 2 2 2 2 1 1 4 b 7 7 7 b 4 7 1 4 4 7 4 7 | - = - - 6 5 { : : 6 6 6 B B G O O +.` I +.G ` +.I ` F I G >.!.!.(.Y T W &+<+^+^+4+4+|+|+^+|+|+|+6+b+i+p+m+s+m+p+m+s+s+r+s+t+t+o+t+t+x+s+y+x+y+s+s+x+s+y+y+y+t+y+m+x+x+x+x+y+s+x+y+s+o+t+s+r+p+k+h+e+3+|+4+e+o+t+B+y+A+y+y+B+y+y+y+y+A+y+y+w+s+t+A+y+B+x+y+v+t+B+w+r+r+d+/+.+L.R.L.L.I.I.L.L.O.J.L.J.J.J.J.J.J.C.J.A.A.A.G.A.J.J.J.L.L.L.J.L.L.J.L.I.L.L.L.L.J.J.I.",
495"4 1 ! 4 4 1 1 4 4 e b b b 4 7 7 7 7 7 1 b b 8 | | - 6 B u K p p p p G ..S +.+.+.+.<.|.2.2.+.|.` ` |.` #.0.:.(.R C g p.'+)+)+4+^+^+^+)+)+'+'+!+[+[+8+g+q+t+s+v+s+s+s+s+s+s+x+s+x+x+v+x+s+t+s+y+x+y+y+x+m+y+x+x+y+y+y+y+x+y+y+y+x+y+x+s+v+s+s+p+p+c+c+4+^+6+e+q+q+B+B+A+t+B+B+y+A+w+y+y+y+t+B+B+t+t+t+t+v+t+v+t+t+t+r+l+d+.+.+I.L.L.I.J.J.L.L.L.J.L.L.L.L.L.L.J.J.J.G.G.A.J.C.I.J.L.C.J.L.A.C.C.A.I.A.L.C.G.A.I.J.",
496"! 4 8 4 ! 1 4 4 b | 7 4 e 7 7 7 7 1 7 4 b b b e s i v G K N M .+...2.k.n.n.n.H.F.n.-+W.-+H.W.F.F.W.n.M.o.q.f.i.e... +^+)+)+)+)+)+~+,+>+>+>+>+>+~+[+5+f+o+m+t+s+s+s+s+t+t+s+t+s+x+t+y+y+y+t+y+s+t+y+y+y+y+y+x+x+y+y+y+s+x+y+s+x+t+y+s+x+s+s+m+p+h+e+4+4+|+4+i+o+t+B+B+w+t+y+y+y+y+t+t+y+y+t+v+B+w+v+y+v+v+t+r+t+r+w+d+d+.+R.L.R.L.I.I.J.J.L.G.L.L.L.L.L.J.J.I.J.J.L.J.J.J.L.J.J.L.L.J.C.A.C.A.J.C.C.L.C.D.A.J.J.",
497"4 ! 4 4 4 4 4 7 7 7 4 e 4 4 1 4 7 e 7 e e 7 q s v G I +.}.}.n.H.n.H.-+>+-+-+-+)+-+-+-+)+)+^+)+^+'+-+)+>+>+Q.$+W.W.@+_+}+^+)+{+{+>+&+ +>+`.$+ + +>+ +~+|+b+o+s+t+t+s+t+s+s+y+s+x+o+y+y+t+y+x+s+y+y+y+y+y+y+x+y+y+y+x+y+y+y+x+y+y+y+s+y+s+s+s+s+p+q+m+e+4+^+|+b+e+t+t+y+y+y+y+y+w+w+y+y+y+t+x+y+y+v+y+v+v+B+u+t+t+t+r+q+l+:+.+R.L.R.L.L.J.J.L.L.G.J.J.L.L.L.L.I.J.J.J.I.L.I.L.L.L.L.O.O.C.L.A.A.J.A.C.G.D.A.G.L.L.",
498"1 1 4 1 4 7 4 7 ! b b 7 7 8 1 b 1 b 4 7 e s s I |.2.|.W.W.>+>+-+)+-+)+^+^+4+4+^+6+|+0+6+|+0+|+6+6+|+4+^+4+)+4+)+)+4+4+2+4+^+)+{+)+{+ + + + + +W. + +@+!+^+0+h+p+t+s+x+x+s+t+y+s+x+s+x+y+t+y+y+o+x+y+y+y+y+y+y+x+y+x+y+x+y+x+y+y+y+y+y+v+x+t+x+s+q+m+k+c+4+4+4+c+k+t+B+t+t+y+x+t+w+y+t+y+y+v+s+y+t+t+v+v+s+v+t+r+r+r+r+l+/+.+O.L.L.J.J.J.J.J.L.L.J.J.J.J.L.L.L.J.L.L.I.I.L.L.L.O.L.L.O.L.L.O.J.A.A.L.G.G.G.J.L.L.",
499"4 4 4 2 2 4 7 4 1 4 7 4 4 4 7 8 7 7 e s s +.|.n.n.W.-+-+)+-+^+|+|+|+0+|+6+6+4+0+6+^+6+6+6+6+0+0+0+6+6+c+b+6+4+c+4+4+6+6+4+4+4+4+^+)+]+$+ + +Q. +Q.Q.W.W.-+^+c+m+m+s+s+s+x+s+s+y+t+x+s+s+y+y+y+y+y+o+y+o+y+y+x+y+x+x+x+y+x+y+x+x+y+y+x+x+y+x+s+p+s+p+m+k+4+|+^+4+c+p+t+A+t+B+t+x+x+v+x+v+v+s+t+s+w+B+t+t+B+r+w+w+t+r+w+l+d+.+R.O.L.O.L.J.J.L.J.J.O.I.I.J.L.L.L.L.L.I.R.L.L.L.L.L.L.L.L.O.O.O.O.L.L.B.C.C.C.C.C.G.",
500"7 4 4 4 4 4 7 4 4 4 b 4 b 1 7 e e s F ` |.F.V.-+-+)+-+^+[+[+[+|+6+0+|+6+6+6+0+|+0+6+0+c+4+c+4+0+0+0+8+0+c+c+0+0+0+8+b+b+c+c+4+c+4+4+^+{+{+&+ +$+Q.W.W.K.@+`.)+4+h+s+s+t+y+y+s+x+y+y+x+x+s+x+y+y+y+y+y+y+x+y+x+y+y+y+y+y+y+y+y+y+y+y+y+s+t+s+s+p+t+s+p+h+c+4+}+}+4+k+v+B+t+v+B+t+y+v+x+t+t+v+t+v+t+t+t+t+t+v+r+r+t+r+r+l+a+/+R.L.L.L.L.L.L.L.O.L.O.O.L.I.O.O.L.L.L.L.L.L.R.I.I.L.L.O.L.L.L.O.L.L.J.L.L.C.L.L.L.C.",
501"| 7 4 4 7 4 | e 4 4 4 1 1 7 e s I ` n.F.`.-+'+!+^+|+[+[+[+|+6+6+|+6+6+0+4+6+6+0+6+0+4+6+0+0+c+c+c+c+0+0+c+c+c+c+c+h+h+0+c+c+k+k+c+c+e+6+3+^+{+>+$+$+T.Q.Q.W. +^+6+f+t+x+y+t+y+t+s+s+y+y+y+y+x+y+y+y+y+y+y+y+y+y+y+y+y+y+x+y+y+y+s+y+y+y+x+t+t+s+s+p+p+k+c+6+4+2+^+c+k+t+v+y+t+B+s+t+B+v+v+v+v+t+v+B+r+r+r+w+s+t+r+r+r+l+a+/+.+O.L.L.L.J.J.L.L.O.L.L.L.L.L.L.L.J.L.L.L.I.L.L.L.I.L.L.L.R.O.O.L.J.I.J.L.L.J.L.J.J.",
502"4 4 2 4 4 e e v 7 4 4 e 7 s O +.p.F.`.-+~+_+^+(+[+|+6+4+6+4+6+4+6+6+6+0+6+0+8+0+5+0+c+0+0+0+0+0+h+h+i+h+i+i+f+i+c+c+k+h+c+f+h+k+c+h+c+0+e+e+{+{+{+$+$+ +T.Q.W.W.'+5+f+s+y+t+y+y+y+y+t+y+s+y+y+x+x+x+y+A+x+y+y+y+y+B+y+B+y+x+x+y+y+s+s+y+x+x+t+s+s+o+m+p+k+c+4+2+^+4+e+t+v+v+x+t+y+t+t+v+x+y+s+s+t+t+t+y+r+r+l+t+q+r+r+l+a+/+R.O.O.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.R.I.R.L.L.L.L.L.L.R.I.R.L.J.J.L.L.L.L.O.L.L.L.I.",
503"4 1 1 1 4 7 s e b b e s O 2.l.F.`.-+'+~+}+(+|+|+|+6+|+6+4+0+4+5+5+0+0+7+0+c+0+8+c+g+f+i+c+i+h+h+h+c+h+h+h+h+h+f+h+h+f+c+h+c+f+h+h+h+i+k+h+k+h+4+4+^+{+&+ +H.Q.Q. +^+8+f+y+y+x+v+x+s+x+y+y+x+y+y+y+y+x+B+y+B+x+B+y+y+y+y+B+y+y+y+y+y+y+t+y+v+x+x+t+s+q+p+h+k+c+|+^+)+c+k+s+y+v+B+r+t+y+t+v+v+t+r+t+t+t+q+t+t+q+w+l+w+r+r+d+/+U.O.L.L.L.L.L.I.R.L.L.L.L.I.L.I.I.L.L.R.L.I.R.L.L.L.L.L.O.L.L.L.J.J.L.L.R.L.L.L.L.L.",
504"4 ! ! 4 4 e s 7 7 q ` 2.n.K.;+-+,+'+^+(+^+}+|+|+|+5+6+6+4+0+4+0+5+8+0+8+8+0+f+0+0+0+0+f+8+c+k+k+h+c+e+h+h+i+h+i+h+h+f+h+h+h+f+i+f+k+h+h+h+k+c+h+4+4+3+{+{+&+Q.Q.W.=+[+0+m+y+y+t+y+y+s+y+y+y+y+x+x+y+B+x+B+y+y+B+B+x+B+y+y+y+y+y+y+y+y+t+y+s+s+x+y+m+t+p+m+m+k+e+4+)+4+e+r+v+s+t+y+v+s+r+r+v+v+v+q+t+t+q+t+r+r+v+r+l+l+l+a+/+R.L.L.L.J.L.L.J.L.L.L.L.L.L.L.L.I.R.L.R.L.L.L.L.L.L.L.L.R.O.L.O.L.I.L.L.L.L.L.L.L.L.",
505"| 4 4 4 | e e | I 2.n.F.`.,+~+<+)+^+(+^+[+|+|+6+5+6+6+4+0+6+8+8+8+8+8+8+0+c+c+c+i+i+i+c+i+i+f+0+i+h+h+i+i+i+i+i+i+f+h+c+h+k+p+i+h+m+m+h+h+p+k+h+e+h+4+6+{+)+$+ + +>+^+7+i+p+x+v+y+x+x+x+y+y+x+y+B+x+B+y+x+B+x+y+y+y+y+y+y+y+y+y+x+y+x+x+s+x+y+s+s+t+m+q+q+q+h+h+4+4+^+3+h+r+t+x+v+q+B+t+t+t+t+q+q+w+r+r+r+t+q+r+q+w+r+l+l+:+U.L.L.O.O.O.O.L.O.L.L.L.L.I.L.L.L.I.L.L.L.R.L.L.L.L.I.R.L.L.R.L.R.L.L.L.L.L.L.O.O.L.",
506"| ! 4 ! | | 7 s 2.H. +$+'+'+^+_+_+^+^+^+|+|+|+|+[+6+6+4+b+6+8+c+8+8+8+b+8+c+h+c+c+c+f+h+h+h+k+h+i+i+i+i+f+i+h+k+k+i+h+h+f+f+p+k+h+h+p+k+h+k+p+c+h+k+h+8+e+4+{+{+{+>+'+[+0+m+y+x+y+y+y+y+y+y+x+y+y+x+y+x+B+y+y+B+y+y+y+y+y+y+y+y+s+y+y+y+t+s+t+s+s+t+s+s+p+q+k+k+c+^+)+{+c+r+u+t+t+t+s+t+t+q+t+w+q+q+t+t+r+r+q+r+r+l+l+l+a+/+U.O.L.L.L.L.O.J.L.L.L.L.L.L.L.R.L.L.L.L.I.L.L.I.L.L.L.O.R.L.R.L.R.L.L.I..+I.R.O.O.L.",
507"4 1 | 4 4 7 q ` F.`. +,+>+)+^+^+|+}+}+|+4+4+|+4+6+6+6+8+6+b+b+8+0+0+c+0+0+f+c+i+c+h+c+h+c+k+h+h+k+h+o+i+m+f+n+h+h+k+h+o+m+m+h+m+f+k+p+m+m+f+p+h+p+h+k+e+c+e+4+3+^+^+)+^+|+c+m+t+y+x+y+y+y+y+y+y+B+y+x+y+x+B+x+y+y+y+y+y+y+x+x+y+y+x+t+y+v+x+x+t+y+s+s+o+p+p+p+h+e+e+4+)+4+c+t+s+v+t+q+w+q+t+q+q+q+r+r+r+q+w+r+l+w+l+l+l+l+/+U.R.O.R.L.O.G.L.J.L.L.I.L.L.L.L.L.L.L.L.L.L.J.L.L.L.L.L.L.L.I.R.I..+I.I.I.R.L.L.L.L.",
508"1 1 4 4 ! 7 I l.W. + +`.>+'+!+^+|+|+4+|+4+4+6+4+6+6+6+c+6+8+8+8+8+c+c+c+c+i+c+i+c+k+k+k+h+h+k+h+i+h+h+i+f+f+f+h+h+k+h+p+p+p+o+o+m+m+h+f+m+p+k+p+k+h+h+h+c+c+6+4+3+4+4+4+^+5+f+m+y+y+t+x+y+y+y+x+x+y+B+y+B+y+y+y+y+y+y+y+y+y+y+x+y+x+s+x+t+y+s+s+s+o+s+t+p+p+p+h+h+e+^+)+^+e+r+t+v+r+p+q+q+r+p+q+q+q+q+r+r+l+r+r+l+r+l+l+a+/+z.O.O.D.G.L.G.G.A.J.L.J.I.L.R.L.R.I.O.L.J.L.J.I.G.G.L.L.R.L.R.L.I.L.L..+I.L.L.I.L.L.",
509"4 ! 2 1 4 e _.H.W.W.`. +`.`.-+!+'+[+[+|+6+|+4+4+|+6+6+6+c+0+8+9+b+8+0+c+f+c+h+c+h+h+h+h+h+k+h+h+h+i+i+i+m+m+i+p+i+h+p+k+p+m+p+p+o+o+o+o+o+m+m+p+m+p+p+k+k+k+c+c+c+4+4+4+^+^+5+i+s+x+x+y+x+x+x+y+y+x+y+y+y+B+y+y+y+y+y+y+y+y+s+y+t+y+y+y+s+s+y+s+t+s+t+m+q+p+p+k+e+h+e+{+{+3+b+q+t+t+q+w+r+t+r+w+l+w+r+q+q+r+l+l+r+l+r+a+a+/+z.O.O.G.B.G.A.A.A.A.L.L.L.L.L.O.L.L.J.L.O.L.J.J.J.J.L.J.J.O.L.R.L.I.I.L.L.R.R.L.O.L.",
510"4 ! 2 4 1 s |.H.H.W.W.W.W. +W.=+,+_+}+|+4+4+6+4+6+6+6+6+6+4+8+8+c+c+8+8+c+f+i+i+f+h+h+i+h+k+i+i+f+m+h+i+h+m+f+k+i+i+m+h+k+m+m+m+m+q+m+m+p+p+p+p+p+m+p+h+h+k+k+c+c+4+c+{+4+^+|+5+f+y+x+y+y+y+x+x+y+x+x+y+y+x+y+x+B+y+y+y+y+y+y+x+y+s+s+y+s+s+t+x+t+s+t+m+s+p+m+p+k+c+c+4+)+^+e+l+t+t+p+w+p+q+r+q+q+l+l+l+l+r+r+l+l+l+l+a+a+Y.z.G.G.G.D.G.G.C.A.A.C.J.A.J.L.L.L.L.L.L.L.L.L.J.L.J.L.L.J.O.O.L.L.R.L.L.L.L.L.L.R.L.",
511"! 4 ! 4 4 q |.H.H.Q.H.W.V.F.V.W.Z.=+!+}+6+6+4+c+4+c+6+0+8+0+8+8+0+8+f+c+f+c+f+h+c+h+k+k+i+h+k+m+h+i+o+i+o+k+p+f+h+m+m+p+m+k+p+p+p+m+p+p+m+m+m+p+p+p+m+p+p+p+h+c+c+h+e+c+4+4+^+6+g+o+t+y+t+y+y+x+y+y+y+x+y+y+y+y+y+y+x+y+y+y+t+y+x+v+x+x+t+y+x+m+s+s+s+t+q+q+p+p+k+c+4+4+)+{+3+k+q+r+q+p+q+q+q+n+q+q+r+l+q+l+l+l+k+k+a+a+/+U.O.O.O.G.G.C.C.y.D.C.C.C.A.L.B.O.O.O.O.O.L.L.L.L.L.O.L.O.L.L.O.O.L.R.L.R.O.O.O.L.L.O.",
512"! 4 4 4 1 F l.H.H.H.H.H.H.Q.H.H.F.V.=+!+^+4+4+c+4+c+|+6+6+0+8+8+c+8+c+c+c+h+c+k+h+f+f+h+h+h+i+i+f+h+m+h+h+h+m+m+h+p+p+p+m+m+m+o+p+q+p+q+p+p+m+m+p+p+p+h+h+k+p+k+e+0+c+4+4+|+^+[+5+f+m+x+x+y+y+x+x+y+y+y+y+x+B+s+x+y+y+t+o+y+y+t+y+y+v+x+s+s+v+s+o+t+o+o+s+q+m+m+k+h+4+4+<+)+{+e+m+t+q+q+q+q+r+l+w+k+k+l+q+q+l+l+l+k+a+a+/+z.O.G.O.L.L.A.C.A.G.C.O.B.L.A.C.B.B.O.L.L.L.O.L.L.L.O.O.O.O.O.O.L.L.L.L.R.L.O.O.L.O.O.",
513"4 ! 4 2 9 I 2.n.t.H.H.t.H.H.n.H.H.F.V.Z.!+^+4+4+c+8+c+6+8+8+0+c+0+c+c+c+g+8+h+f+c+h+h+f+f+f+h+f+h+o+i+f+m+m+k+i+q+k+m+m+m+o+k+m+p+p+p+m+q+p+p+p+p+p+k+p+k+h+h+h+h+e+h+c+4+4+4+4+|+8+o+t+y+y+y+y+y+y+y+y+y+t+y+y+y+x+x+x+x+y+t+x+s+s+s+s+s+t+y+t+t+s+s+s+o+m+p+k+p+e+c+4+{+{+{+4+l+q+r+r+q+q+l+l+l+w+l+k+l+l+k+l+l+e+g+1+Y.R.O.O.O.O.L.L.L.L.J.L.J.G.C.L.C.A.G.C.C.C.D.O.O.D.O.O.O.O.D.O.G.L.J.L.L.O.O.L.L.L.L.O.",
514"4 4 ! 2 2 F 2.n.p.n.t.t.n.Q.n.n.n.p.p.V.Z.!+^+|+4+4+c+4+c+6+8+c+0+0+g+c+i+c+c+c+h+c+i+i+h+o+h+o+f+f+o+o+i+m+m+m+m+k+o+q+m+o+p+m+p+p+p+m+o+p+p+p+m+m+h+m+p+p+p+k+k+h+e+c+4+4+4+4+^+|+f+m+s+y+y+t+y+w+y+s+y+t+y+s+y+t+y+y+s+y+o+y+t+y+s+x+s+s+s+s+y+o+o+s+t+o+m+o+m+k+e+4+]+{+$+3+e+q+q+r+q+q+n+q+k+k+n+l+l+l+k+a+l+a+a+a+U.R.L.L.O.O.L.L.L.L.J.G.L.L.C.L.L.G.G.D.y.y.y.D.B.O.O.O.D.O.D.R.D.D.G.J.L.O.O.L.O.O.O.O.",
515"! 4 ! ! 9 I 2.t.p.t.p.t.t.n.t.t.H.p.p.l.E.V.!+^+6+8+4+c+b+6+c+b+8+8+0+f+g+c+h+h+c+f+h+k+k+f+o+i+h+o+f+f+o+f+o+f+m+m+p+m+p+m+o+p+m+p+p+q+p+p+p+p+p+m+q+p+p+h+p+p+m+k+4+c+c+c+4+6+6+|+5+8+o+n+y+y+s+x+s+x+s+t+s+y+t+y+s+t+y+m+t+y+x+s+s+s+y+s+t+y+m+t+t+o+p+p+p+h+k+k+h+b+4+{+>+{+3+l+q+k+r+k+r+l+k+l+l+l+e+e+e+k+a+a+a+/+U.G.O.G.G.L.O.L.L.L.J.J.L.L.G.A.L.O.O.B.C.C.G.O.D.B.O.O.G.O.O.R.L.L.O.O.O.O.G.L.L.O.O.O.",
516"! ! 1 ! 8 q 2.2.w.t.s.t.t.n.t.n.n.p.p.p.n.n.Z.=+^+6+4+0+e+8+0+c+b+8+8+0+f+f+c+i+h+h+h+h+h+c+f+i+f+m+m+f+m+f+o+k+p+m+k+h+o+o+o+p+o+o+m+m+s+p+p+p+p+p+o+p+p+p+m+p+p+p+e+c+c+c+c+4+6+6+5+8+f+y+s+y+y+y+t+x+s+B+t+y+s+y+x+x+y+y+s+o+x+t+t+s+s+s+m+t+s+s+t+q+q+q+q+m+h+k+c+4+3+{+$+{+3+e+q+k+k+k+k+k+k+l+k+k+k+l+e+e+e+a+a+Y.R.O.O.O.D.G.L.O.L.L.L.G.G.J.G.G.L.O.L.L.A.A.G.O.D.D.G.B.O.D.R.O.D.L.O.O.O.G.O.O.R.R.O.O.",
517"! ! ! 8 8 s 2.<.n.2.t.<.<.t.<.t.<.n.w.n.n.n.l.F.=+!+6+b+c+4+b+8+8+8+8+b+c+c+g+i+c+k+i+f+i+i+h+o+m+i+i+m+o+m+o+m+o+p+m+q+p+p+m+m+p+s+s+q+m+o+p+p+s+o+s+m+p+m+q+p+h+p+h+e+c+c+b+8+b+|+|+5+0+m+s+x+s+y+B+t+v+t+x+s+x+s+y+t+m+s+t+y+o+s+s+t+t+s+t+s+s+o+o+o+o+m+m+k+p+h+i+b+4+2+&+%+{+e+r+q+k+k+r+k+k+l+e+a+e+a+a+a+a+a+/+U.O.O.O.D.O.L.G.L.G.G.G.J.L.J.J.J.L.O.O.O.O.O.O.B.O.G.O.G.O.R.O.O.O.D.O.O.O.G.L.O.L.L.R.R.",
518"! < , 8 ! s +.<.<.2.t.t.<.p.<.n.<.n.<.p.2.n.l.p.S.;+(+|+c+c+b+8+8+g+8+b+0+0+f+i+c+k+h+f+f+i+h+i+o+o+i+i+i+f+f+f+f+m+m+m+m+p+q+m+m+m+m+p+p+s+p+p+p+o+q+s+p+m+o+q+o+p+m+k+i+c+c+c+c+4+4+|+6+f+o+y+t+y+v+y+x+x+x+t+x+s+s+v+s+s+m+t+y+o+s+s+s+s+q+s+s+s+t+t+q+k+m+i+k+k+e+b+e+^+%+*+*+d+e+r+k+k+e+d+k+b+e+a+e+e+3+e+d+a+Y.R.G.G.O.D.O.L.G.G.B.L.L.G.L.L.G.L.O.O.L.L.G.O.G.O.O.G.G.G.O.O.D.D.D.O.G.O.O.G.L.O.O.L.O.R.",
519"! , | ! ! 8 ` 2.n.<.<.<.p.2.p.<.2.<.n.2.2.2.2.l.l.S.=+(+6+0+c+0+c+8+8+8+g+c+c+c+h+0+c+c+h+h+k+i+f+h+i+m+f+o+o+o+q+q+p+p+p+o+m+p+p+p+p+p+p+p+m+m+s+o+o+p+p+p+m+m+p+p+r+h+h+k+e+c+e+c+4+|+6+0+f+o+y+t+y+s+y+t+t+x+t+s+t+y+s+s+s+y+o+t+t+s+r+t+s+s+r+q+m+m+p+m+q+q+i+i+i+c+b+3+{+X.*+3+k+k+k+k+k+k+e+e+e+e+3+a+3+3+a+/+U.O.O.O.G.D.G.D.J.G.G.O.O.L.L.L.L.G.O.G.L.O.O.L.L.G.G.L.L.L.G.O.R.D.O.G.O.O.O.L.L.O.O.O.O.R.",
520", , < ! ! 8 I +.<.<.t.<.<.<.2.t.m.<.<.t.t.<.m.2.n.k.S.=+}+6+b+8+c+c+0+8+8+g+f+0+h+f+f+c+i+f+h+h+f+o+i+o+m+f+m+m+i+o+m+m+p+p+p+p+q+o+o+s+s+p+q+o+q+o+o+o+s+p+p+o+p+m+p+p+h+h+c+c+e+c+c+|+}+6+0+o+x+x+y+s+x+v+t+x+t+x+s+t+y+t+m+s+t+o+t+t+s+s+q+s+s+t+q+o+q+m+i+p+k+k+k+c+e+3+{+*+*+:+e+g+l+l+l+l+e+a+3+a+e+a+3+/+a+Y.R.L.G.C.L.D.L.O.B.O.D.D.L.L.L.L.L.G.O.O.G.O.O.L.L.O.G.G.L.L.O.O.R.D.D.O.O.O.O.L.L.O.O.O.R.R.",
521", < , ! ! 8 I +.<.<.<.<.2.2.<.2.2.<.<.}.<.2.}.}.<.p.l.S.=+[+5+b+8+0+b+c+0+0+8+i+c+c+c+i+i+h+i+i+i+f+o+h+i+h+o+o+m+m+k+q+p+p+m+o+m+s+p+p+m+p+p+s+m+s+m+p+p+p+o+p+k+p+p+k+p+k+k+h+h+4+c+4+4+|+8+f+o+s+x+t+s+x+s+t+s+t+t+s+o+s+t+t+x+o+s+s+p+q+s+s+o+q+p+p+p+k+k+k+i+i+c+l+c+3+]+X.*+%+a+l+c+e+b+e+e+3+e+3+3+3+3+]+/+U.R.L.C.L.O.O.O.C.G.D.B.C.G.G.G.G.G.O.O.G.O.L.G.O.O.L.O.O.G.O.O.L.L.O.G.O.O.O.O.L.O.O.L.L.R.R.",
522"- , - , , , s ..<.}.}.<.<.2.<.<.2.<.<.}.}.}.}.<.<.2.p.k.V.!+[+8+j+f+b+b+8+0+8+8+f+i+c+f+i+i+h+k+h+f+f+f+o+f+i+k+o+m+m+m+m+p+p+t+m+p+p+p+p+p+p+p+p+s+m+m+p+p+o+m+q+k+m+m+m+k+k+c+h+c+c+6+4+4+|+0+i+p+x+y+t+x+s+y+s+s+t+s+t+s+s+o+s+t+m+t+s+o+m+t+o+t+q+o+o+o+o+k+k+k+c+b+b+3+{+*+*+*+a+l+b+l+b+2+e+a+3+3+/+a+/+/+Y.D.O.G.G.O.O.O.O.G.C.G.D.D.G.B.D.C.C.O.O.G.G.O.G.G.O.O.O.O.O.O.L.L.L.O.O.O.O.R.R.L.L.O.O.L.R.R.",
523"- - , - - < e +...<...<.<.<.<.<.}.2.<.<.}.}.}.}.}.}.2.2.l.S.!+[+6+b+b+8+0+b+8+8+0+c+i+c+i+h+h+f+h+h+o+o+f+o+m+o+k+p+m+p+p+m+m+m+p+m+m+o+s+m+o+p+m+p+s+p+p+s+p+p+p+m+p+k+p+m+h+k+k+c+b+c+4+4+4+|+c+o+o+s+x+t+y+s+t+t+s+y+o+t+o+m+s+m+t+s+o+s+s+s+q+o+o+q+l+o+l+k+k+i+k+b+b+b+]+%+*+*+d+e+e+a+a+e+2+3+a+3+3+/+/+Y.U.z.B.O.B.L.L.G.G.L.J.L.G.B.C.D.y.L.C.G.C.B.B.y.G.O.D.D.O.G.O.R.O.L.L.O.O.O.O.L.L.L.L.L.O.R.O.O.",
524"- - - - - < | O +.+.<.....<...<...<.+.<.<.}.}. .}.}.2.2.p.l.S.!+[+0+c+b+8+0+c+b+0+f+g+c+i+c+h+h+f+i+h+m+f+o+f+m+o+k+p+p+m+m+m+o+s+p+s+o+s+p+o+o+o+p+o+m+m+m+p+m+p+p+m+m+h+p+h+h+e+h+c+c+4+4+4+|+6+h+q+v+v+s+o+x+t+t+s+o+y+o+t+p+s+p+q+p+q+q+o+m+s+q+o+o+q+o+o+i+e+c+l+b+b+4+3+*+*+*+3+d+e+e+3+3+3+3+3+/+]+/+X.z.D.D.O.G.C.L.O.L.J.J.J.C.J.G.J.G.G.O.B.L.L.G.B.G.G.O.O.D.G.G.G.R.G.O.O.O.O.L.L.R.R.L.L.L.L.L.O.O.",
525"- - - - - , < s +.+.+.+.....<.....+.}. ...<. .<.}...<.<.<.l.p.Z.!+|+b+g+c+8+8+0+g+8+g+i+f+i+i+i+h+f+i+i+m+i+h+o+h+m+m+h+p+p+q+p+p+m+o+p+m+t+o+o+q+m+p+p+p+p+o+p+p+p+p+p+m+h+k+i+h+c+e+b+c+0+4+4+4+6+f+o+t+v+s+o+s+s+s+t+o+t+s+o+s+o+o+q+s+p+s+p+o+m+q+p+o+o+k+k+k+k+c+b+2+b+]+%+*+*+:+e+3+e+a+3+3+]+a+]+/+Y.U.z.R.O.G.L.C.G.L.R.O.G.G.L.L.O.O.C.L.O.O.O.O.O.A.G.L.J.D.O.G.O.D.O.O.O.O.R.O.L.L.L.L.L.O.O.O.O.O.L.",
526"- - - - @ - < e O -.+.f.+.+.....<.+.<. ...+.....2...<...}.2._.p.;+!+|+9+j+0+g+0+f+0+8+b+g+8+g+k+k+h+i+i+i+o+h+o+i+k+p+p+o+m+p+m+p+m+o+t+m+o+o+o+t+p+q+m+o+m+q+o+o+m+m+k+o+m+p+i+i+h+c+0+4+4+4+6+^+|+0+m+t+t+s+t+o+t+s+t+o+t+p+q+v+s+o+p+s+p+q+p+p+o+q+p+p+o+o+i+b+b+c+b+2+a+3+*+*+*+{+e+d+3+3+3+3+/+]+/+Y.U.z.z.D.G.G.L.C.O.L.O.G.G.J.G.C.L.L.O.O.O.D.O.O.O.D.L.L.O.O.D.D.O.D.O.D.D.G.O.O.R.O.L.O.O.O.O.O.O.R.R.",
527"- @ - = @ - , i s +.O -.........+.+. .<......... .......<...2.4.k.Z.!+[+0+g+c+c+b+8+g+0+0+i+c+c+h+k+h+h+f+i+o+h+p+m+o+h+p+p+m+m+o+s+m+m+m+m+m+m+o+o+m+q+p+q+m+o+m+k+p+m+m+f+i+f+k+k+c+b+c+0+4+4+|+4+4+f+m+s+t+s+t+s+t+o+s+m+q+s+p+q+p+q+q+q+m+p+q+p+m+k+k+k+k+i+f+l+e+b+b+4+]+%+N.*+:+3+3+3+a+]+]+]+/+X.U.z.D.D.O.C.L.O.O.L.O.G.O.O.O.O.O.L.O.O.O.O.O.O.O.G.L.L.O.O.D.O.G.G.O.O.O.O.O.O.O.O.O.L.L.O.O.O.O.O.R.O.",
528"- @ @ @ @ @ , < v S +.S S -.........S +... . . . . ... . .}...+.8.|.S.!+[+8+c+f+8+f+8+g+0+f+f+c+h+i+f+i+f+f+o+h+h+h+p+m+o+p+p+m+o+p+p+q+m+t+t+p+p+m+m+m+m+m+p+q+m+k+h+m+o+f+m+f+h+h+c+c+c+0+4+4+|+^+|+0+o+s+t+s+q+p+s+o+t+m+p+m+p+t+m+o+o+q+p+m+k+k+o+p+o+i+k+e+c+e+b+3+b+3+3+%+X.*+3+3+3+a+]+]+/+/+X.z.D.D.z.D.C.A.C.B.B.B.O.D.D.O.D.O.O.L.O.O.O.O.O.O.O.L.C.L.O.R.O.D.G.G.O.O.O.O.R.O.O.D.O.O.O.O.R.R.R.O.R.R.",
529"@ - - @ @ - - , i O S ..S ..O S -...S +... ...........+.....S G O F 8.S.(+6+c+c+c+8+f+8+8+0+c+h+f+f+i+f+f+f+f+h+h+m+h+i+h+h+p+p+p+m+p+m+p+m+m+m+o+q+p+p+p+k+o+m+q+m+p+o+h+o+i+m+h+k+h+c+c+4+c+4+4+|+}+|+0+o+s+q+s+t+q+t+s+v+s+s+q+p+q+p+q+q+k+q+m+o+k+o+k+k+k+h+k+b+a+4+2+3+]+%+*+*+:+]+3+]+a+]+/+X.U.U.D.D.D.B.C.C.G.B.O.D.D.B.B.D.B.B.B.B.B.L.O.O.L.R.O.O.O.O.O.L.O.J.O.G.O.O.O.O.O.O.O.O.O.G.O.O.O.O.O.R.R.O.",
530"@ @ @ @ . . @ - ( r S -.S -...S S S -.S S .. ...S ..+...S r G r i e F 8.S.(+0+b+b+9+0+8+f+0+0+c+c+f+i+i+i+h+i+k+m+p+i+o+q+h+o+i+q+o+m+o+m+p+p+m+m+p+p+m+m+m+o+m+h+o+h+o+o+o+k+k+h+k+k+c+e+c+4+e+3+4+_+^+6+f+m+t+s+s+p+q+q+q+r+p+q+q+q+p+o+o+k+q+k+m+k+n+o+i+k+c+b+c+j+3+2+3+]+%+*+*+:+]+3+]+/+%+X.U.D.z.D.C.D.D.D.D.D.y.B.B.B.B.B.D.D.O.B.C.B.B.B.D.O.O.D.D.O.O.O.R.O.O.O.O.O.O.R.R.O.R.R.O.R.O.R.R.D.O.O.D.R.R.",
531"@ - @ @ @ @ @ - ( k M M S S W S S S S ..S M .S S S -.M W r k : a a s I j.Z.[+8+f+i+b+0+8+0+f+0+f+i+h+f+f+i+i+h+k+h+h+m+h+q+p+p+m+m+q+m+p+h+o+p+q+o+m+p+p+m+o+f+m+f+m+f+f+h+m+o+k+h+h+c+0+b+c+6+4+4+4+^+|+8+q+p+q+s+t+p+p+p+m+p+m+o+p+p+k+q+o+i+m+k+o+i+k+k+c+l+b+j+3+b+3+3+]+*+*+:+:+3+/+]+/+Y.U.z.z.B.R.B.B.D.C.C.C.B.G.O.O.O.G.C.B.B.G.B.C.C.L.R.O.O.O.O.O.L.R.O.R.R.O.O.R.R.R.R.R.O..+R.R.R..+R.R.R.R.R.U.R.",
532"- - @ @ @ @ @ = - a B W M M .S S M O S S W K S S G r r 6 a } } 6 6 a s ` k.=+[+8+i+g+b+c+c+h+0+8+f+h+h+f+h+h+f+i+m+i+o+h+h+o+k+p+h+p+i+p+p+p+m+h+p+p+h+p+h+o+o+m+i+m+m+i+h+h+m+i+h+k+i+0+c+c+6+c+3+4+)+^+5+f+p+p+p+t+p+p+p+p+p+p+q+k+m+i+q+q+k+o+k+k+i+k+l+i+b+b+c+2+2+3+]+]+T.%+*+*+{+/+]+X.U.D.D.D.B.O.B.B.B.D.D.D.B.B.B.O.R.B.L.L.B.C.B.G.C.G.B.D.O.R.L.R.O.R.R.R.R.R.R.R.R..+.+.+.+.+/+.+.+/+.+.+/+.+.+U..+",
533"@ @ @ @ @ . @ = < r M K K M M W S M S K S M M M y k : ( } ( : } 5 a | s _.E.!+6+8+c+0+8+8+8+c+f+0+c+c+c+f+f+i+f+i+h+i+o+q+o+m+m+p+o+m+m+h+m+h+p+i+i+p+i+o+m+k+k+p+h+i+h+p+k+i+i+k+h+b+k+c+4+c+4+|+4+|+_+^+b+o+t+s+p+t+q+q+p+p+o+o+o+n+p+h+k+i+k+i+k+k+i+i+b+c+b+b+3+3+3+]+]+*+*+%+:+]+/+X.Y.z.B.R.R.z.D.B.B.y.c.D.D.O.O.D.O.D.G.L.O.L.O.B.O.C.R.O.R.O.O.R.R.R..+R.U..+/+.+/+.+.+z+.+z+/+z+/+z+/+z+/+d+/+/+/+/+",
534"@ @ . . @ @ . @ @ - 6 B K K M M M M M M M G G j j 5 } : : } ( : : 6 ( | 8 s 4.S.(+8+f+c+c+c+8+8+g+f+g+f+c+g+f+i+i+g+o+i+f+h+p+k+m+h+o+o+p+i+o+o+m+m+o+m+m+i+m+p+h+i+h+o+i+h+h+p+h+i+i+c+k+k+c+4+c+4+3+^+'+!+|+c+k+p+p+m+s+p+q+k+k+o+k+k+q+m+h+h+k+h+k+k+e+i+b+b+2+b+4+3+]+]+%+%+*+%+/+%+/+U.D.D.B.B.O.B.z.y.B.D.B.B.D.D.B.D.R.O.O.O.B.O.L.O.O.O.R.R..+R..+.+.+:+.+/+/+/+z+/+z+/+d+/+a+/+a+d+a+a+d+d+a+r+l+r+d+d+",
535". @ @ @ @ @ @ @ - , r B K B M B B W G B t t 5 5 [ } { : : } } } : } 6 a 7 F 8.Z.(+8+c+8+8+8+b+8+8+0+0+f+f+f+f+f+h+f+f+h+o+h+m+k+o+f+m+i+p+m+h+k+h+h+h+k+p+o+h+k+h+i+f+i+i+k+h+k+k+h+h+0+0+c+c+c+4+4+3+<+~+~+6+o+q+q+p+p+q+p+o+q+q+o+o+i+i+k+k+i+k+c+c+i+e+j+b+b+3+3+3+1+]+X.*+%+*+%+Y.U.U.D.R.B.D.B.B.D.B.C.y.C.B.c.C.B.B.D.O.R.z.O.O.R.R..+.+.+.+.+:+:+:+:+:+d+d+d+d+d+a+d+a+a+z+r+r+r+r+r+w+r+w+r+r+r+r+p+p+",
536"@ @ . @ @ @ . @ - 6 p K r M W v M y y 6 } } ) } } { - : { } } ( ( : a a s 8.j.=+5+c+g+g+8+b+g+f+c+8+0+c+i+i+i+h+h+f+f+h+h+m+m+m+i+p+i+k+p+m+k+m+q+m+h+k+h+h+k+o+i+f+f+i+i+i+h+k+i+k+h+c+c+4+4+4+0+^+^+)+'+(+h+m+q+o+h+o+q+m+h+k+k+q+k+o+h+k+k+k+k+c+8+b+7+3+b+3+2+{+]+%+X.*+*+*+Y.Y.z.B.O.B.O.B.R.R.B.c.B.y.B.B.B.y.B.B.B.O.O.R.R.R..+:+.+:+d+d+d+d+z+d+u+d+d+d+d+r+l+r+r+r+r+r+r+r+r+r+r+r+r+w+l+t+s+r+r+t+",
537"@ @ @ . @ @ . . - ( y r K r B p r 6 : } : ) { ) { = { { { : { } } : : 6 | s 8.j.!+7+8+8+0+0+0+c+b+c+i+f+f+i+i+k+i+f+f+f+h+h+h+h+o+h+p+h+i+o+f+i+i+i+k+f+i+h+m+h+h+h+h+i+i+f+i+h+k+h+e+c+0+c+c+6+4+{+3+)+{+)+6+k+p+q+q+k+o+k+p+h+o+k+k+k+l+i+c+c+b+b+b+8+e+b+2+2+1+a+]+%+X.Y.Y.Y.Y.z.D.G.L.O.B.R.O.B.O.B.C.R.O.B.y.D.D.C.D.O.R.R..+.+:+z+d+d+d+d+d+d+k+r+r+r+v+r+r+r+r+t+w+w+t+t+r+r+w+w+t+t+t+v+v+v+t+v+v+t+",
538"@ @ . . . @ @ . - - k p t W k 6 : } { = - - { { { { - : = { ( : } } : : ( 7 F 8.S.(+5+g+c+c+8+0+8+0+8+0+8+f+f+k+h+i+i+i+h+o+i+h+i+h+o+o+i+o+o+f+o+f+m+o+k+h+h+i+f+i+h+h+c+h+c+h+c+i+c+c+c+4+c+4+0+|+{+)+>+>+|+c+h+q+o+k+o+k+p+k+i+i+i+i+i+g+c+i+e+8+b+7+2+b+2+3+]+]+%+X.Y.Y..+U.z.z.L.L.O.O.C.O.R.R.R.C.C.B.O.B.B.O.B.C.B.B.R..+:+z+d+d+d+u+r+u+p+r+v+r+r+p+s+q+t+t+r+r+r+q+t+t+t+v+r+t+t+v+t+t+t+v+y+x+v+v+",
539". @ . @ . @ @ . . = 6 k j j } ) = = = = = - = { ) { { { { { : { } } } } 6 a s H j.Z.[+8+b+b+c+8+0+8+0+g+f+c+h+f+k+h+i+h+k+h+f+f+h+h+f+h+h+f+f+f+f+f+f+h+f+i+i+i+i+i+i+k+h+c+i+c+i+c+g+c+0+0+4+4+4+4+4+]+{+>+'+c+q+m+k+o+h+m+k+k+k+k+k+k+l+g+g+b+0+b+7+b+4+3+3+1+1+]+/+x.u.U.U.R.z.B.O.O.O.B.O.B.B.O.B.B.O.O.D.O.G.B.B.R.z.R..+:+:+d+d+k+k+k+k+q+q+k+q+p+s+r+p+s+r+r+t+s+s+t+v+s+t+t+x+t+v+y+v+t+y+y+v+t+x+y+",
540". @ @ @ @ @ @ = 6 } ) = { = { = { = = { { ) ) = { { } : { } } } [ } 6 i s 8.E.!+5+8+8+8+b+8+b+0+0+0+0+0+0+i+h+k+f+g+h+h+f+f+h+f+f+h+f+i+f+i+g+i+h+i+i+f+i+i+k+h+c+h+f+i+i+f+c+c+c+c+c+c+6+4+|+4+)+{+$+>+^+e+o+k+k+k+h+h+i+i+k+k+c+b+b+c+b+b+b+2+3+2+2+3+1+]+%+X.U.U.z.U.B.z.D.B.C.D.B.B.O.O.C.C.C.O.R.R.z.O.O.z.O.z..+.+r+e+k+k+k+k+n+g+o+o+q+t+p+t+t+r+y+t+t+v+v+s+t+t+v+x+v+x+y+t+y+v+v+B+w+y+B+s+y+",
541"@ @ . . . . @ = = = = = & = = { = = { = = ) = { { ~ : { { } : } : 5 a r i s 8.S.(+6+b+c+8+c+0+b+b+8+g+0+f+f+c+h+h+f+f+i+h+i+i+i+i+f+h+f+f+f+f+f+i+i+h+i+f+h+h+h+h+c+i+c+c+c+f+c+c+c+8+0+3+|+4+^+^+{+ + +)+0+k+p+k+o+k+k+k+k+i+i+k+8+b+j+2+9+2+b+2+2+4+1+/+1+X.x.z.z.z.z.z.D.z.D.B.O.B.B.B.B.L.C.R.O.R.U.R.D.O.O.z.R..+d+3+e+e+e+k+i+e+i+k+k+o+k+q+t+r+t+t+x+v+v+t+B+s+B+y+t+s+v+s+y+y+y+t+w+y+y+t+B+t+",
542" @ + . @ @ = @ @ @ = = = = = = ) ) { - ) ) ) ~ { { { } } [ 6 5 6 6 a s F l.Z.[+8+c+c+c+c+8+c+0+8+8+c+f+0+f+0+i+f+i+h+f+i+h+i+f+i+h+i+f+c+f+f+i+h+k+c+k+k+e+h+k+h+k+c+8+f+c+b+c+4+0+e+4+4+3+)+$+$+ + +|+k+p+k+k+k+i+i+k+e+c+e+b+c+b+b+b+4+4+b+2+2+1+]+%+X.z.z.z.D.z.z.O.z.B.C.C.O.O.O.B.R.B.O.R.R.z.z.z.z.R.R..+:+d+3+c+b+b+l+g+l+b+b+c+i+k+i+o+q+s+q+t+v+v+t+t+t+s+v+y+y+y+v+t+A+A+t+y+t+y+y+y+y+",
543". . @ @ % . . $ @ % = = { = & = = = = = - { ) ) } } } { } } 5 } 6 5 k k i s ` j.=+7+8+b+c+b+b+8+8+8+0+8+b+b+c+i+c+c+h+f+c+f+f+h+c+f+i+f+c+f+i+i+0+h+h+k+c+0+f+c+c+e+c+c+b+c+b+0+b+c+4+6+2+4+|+3+^+&+Q. +<+c+k+p+i+i+k+k+c+h+c+0+c+4+b+3+4+2+2+2+1+3+]+1+X.x.g.z.g.a.z.z.z.z.B.R.R.R.U.R.R.R.R.R.R.R.R.R.D.O.R.R..+:+3+e+3+l+b+j+e+b+b+b+j+b+j+b+l+k+k+q+s+t+y+y+y+w+B+y+t+t+t+x+y+y+t+w+w+A+A+t+y+y+",
544"@ . . . $ @ @ @ @ & @ = = = @ & & ) = = = - { ) ) = { } { } } 5 5 6 5 6 6 a i I 8.E.(+6+b+0+0+8+8+8+8+0+f+0+g+0+f+f+0+c+i+c+i+f+f+c+c+i+f+c+f+0+i+c+0+c+h+h+c+c+f+f+h+c+c+0+0+c+0+0+0+c+4+4+4+4+{+)+{+Q.Q.{+4+k+k+k+c+e+k+e+e+e+b+b+b+4+b+3+2+4+3+<+]+]+%+Y.U.U.U.U.x.U.U..+.+.+.+.+.+.+.+.+.+.+U..+U.R.R.R.R.R.R.#+:+2+b+2+j+3+j+2+2+b+3+e+4+b+4+b+e+e+k+o+k+s+r+x+t+t+B+w+B+t+t+y+A+y+y+y+y+w+y+t+y+",
545" @ @ @ @ @ @ @ . @ @ = @ @ = = = ) = = = - { { ) ) } } ~ { } { } [ g ( 6 5 k a a i I 4.Z.(+8+2+b+c+6+8+8+8+0+c+0+0+8+c+c+c+0+g+c+c+0+f+h+h+0+f+0+i+c+f+i+f+8+c+0+f+0+0+8+8+f+c+c+8+b+c+4+6+c+4+4+^+4+{+>+&+m.@+3+b+n+i+k+i+c+e+c+c+c+e+4+3+4+b+4+3+3+3+]+a+]+/+Y.*+/+*+/+*+*+:+#+*+#+:+:+:+:+/+:+.+/+.+.+.+.+.+R..+.+:+3+3+3+b+2+7+a+b+2+2+4+2+a+2+2+2+2+3+b+b+i+k+t+t+y+B+w+t+w+t+B+t+y+y+w+w+w+y+A+A+y+",
546" . % @ @ @ = = = @ @ = = = = = = = = = { } } { { [ } } } } } } 5 6 k a a s ` j.!+5+8+b+b+6+8+8+8+0+8+8+0+0+f+0+c+0+0+0+c+0+8+0+c+c+c+0+f+c+c+c+c+f+c+0+8+c+c+0+0+8+0+c+6+0+0+8+6+4+4+4+4+^+{+$+++q.K.1+b+g+c+c+b+c+b+b+3+8+4+b+3+2+3+2+3+3+3+3+3+:+d+:+:+d+:+d+:+d+d+3+d+e+e+e+d+d+d+d+d+:+d+:+/+/+/+.+*+.+:+{+3+3+4+2+7+2+a+2+a+2+7+2+a+3+3+4+3+2+4+a+e+r+r+w+v+B+t+A+w+A+s+y+y+y+y+y+w+y+w+y+",
547"@ @ @ @ @ = @ @ @ % = = & ) = = { = { { { { { : : ) } [ { 5 } 6 5 6 j 6 k a a s |.S.!+6+8+6+c+4+6+b+4+0+0+0+0+8+0+0+g+c+0+g+8+g+8+f+0+f+g+0+0+0+8+8+0+0+c+0+0+f+b+8+c+0+8+c+4+8+4+0+c+4+3+^+3+{+{+%+q.T.]+b+e+k+b+c+c+c+b+0+3+b+4+b+b+b+e+h+e+e+e+e+e+e+e+h+d+k+k+e+e+k+k+k+d+e+k+k+e+a+d+k+d+d+d+3+d+d+3+:+:+3+3+3+4+a+3+3+4+1+3+2+2+1+2+4+2+3+3+2+3+1+4+4+b+g+o+q+t+y+t+y+t+B+t+y+w+w+w+y+A+B+A+",
548"@ @ @ @ @ % $ @ @ @ & = @ @ = % & & { { ) { ) ) { { : } } { } 0 ~ 5 5 6 5 g 6 j a r I l.Z.^+b+b+6+0+6+8+b+6+6+7+c+c+8+0+8+0+8+0+0+0+0+c+c+0+c+c+c+0+g+8+c+0+c+c+8+0+b+8+8+c+4+b+b+b+4+6+8+6+4+4+)+{+$+*+q.q.%+6+b+i+b+b+e+4+e+b+b+l+e+e+b+e+e+k+k+k+k+k+k+k+r+k+k+k+r+k+k+k+k+h+p+r+k+p+k+o+k+p+r+r+k+e+e+e+a+e+3+e+4+e+c+c+c+3+3+3+<+]+1+1+]+]+2+]+1+1+3+]+1+]+3+4+g+q+t+y+t+B+w+A+y+y+y+A+A+B+w+t+y+",
549"@ . @ @ $ @ $ @ & @ & @ = % = & ) ) { = ) { { { } } { } } { ( } } 5 5 } 5 j 5 g 5 0 a r ` F.!+[+6+c+b+6+6+6+9+9+0+6+6+0+8+8+8+0+8+5+8+8+0+8+0+8+0+0+c+0+c+0+c+c+8+0+8+0+0+8+8+8+8+8+6+8+4+4+4+4+4+4+{+{+$+N.N.@+1+c+b+b+b+b+b+b+b+e+c+k+k+k+h+k+k+h+k+k+h+h+k+h+h+k+k+h+k+k+k+m+k+k+k+r+r+m+k+k+i+h+o+k+k+k+k+k+e+e+b+e+b+e+e+e+b+3+e+3+2+]+3+]+3+]+3+]+]+1+3+]+]+1+1+3+j+l+q+B+t+y+y+A+w+w+A+A+w+y+A+A+",
550"@ @ % @ % $ = = @ = @ = & = = ) % { : { ) { { { { { } } ( } 5 [ } } 5 5 5 5 j j 5 6 i I 4.Z.(+|+6+8+6+7+5+5+6+8+5+8+6+0+8+9+8+0+8+9+9+8+b+0+8+8+0+0+0+c+0+8+0+b+8+8+8+8+6+b+8+6+0+b+8+6+6+4+^+4+^+{+{+T.N.i.N.3+b+b+e+c+e+e+i+c+k+i+k+k+e+i+h+k+h+k+k+k+h+k+k+p+k+p+k+p+m+k+q+k+h+h+h+k+o+o+p+q+k+q+o+q+k+k+p+h+o+i+k+c+k+k+i+i+e+e+e+b+3+3+]+1+]+]+1+]+]+]+1+]+]+1+]+2+j+n+o+y+t+y+y+y+y+y+A+A+B+A+y+",
551" @ % % & @ & @ = = & = % ) ) = = ) { ) } } { { { { a { g } } } { g } 5 5 6 6 6 5 0 } a s I k.Z.[+8+4+4+6+|+6+6+6+6+6+0+6+9+5+6+b+0+0+5+8+8+8+8+0+b+8+c+0+8+0+8+0+0+c+c+8+b+8+b+b+b+6+6+4+4+4+4+4+^+)+{+$+N.N.$+{+b+e+b+l+i+k+e+k+i+k+h+h+i+h+k+k+k+h+k+h+k+q+k+k+k+k+m+i+k+k+o+m+q+k+p+p+q+q+k+p+p+o+q+i+m+o+k+q+k+k+i+q+i+k+p+k+m+k+l+e+b+3+3+]+3+]+]+]+]+]+]+3+]+]+]+1+3+a+l+q+B+w+A+w+A+y+y+y+w+A+B+",
552"@ . @ @ & & @ @ & $ & & = ) = = { = ) - ) { [ { { { } } } 5 { g 5 5 [ ~ } } 6 } : 6 5 } 5 k v ` F.!+6+6+7+7+6+6+6+6+6+6+6+6+5+0+6+6+5+8+5+8+8+8+8+0+c+8+c+c+b+b+8+8+6+8+4+8+6+8+6+0+0+4+6+6+|+|+4+^+{+)+{+$+$+*+{+3+c+c+c+e+c+k+i+e+h+e+k+k+k+k+h+k+k+h+k+k+i+o+i+m+k+k+p+q+o+k+k+o+p+k+k+k+o+q+o+p+p+o+q+q+p+o+k+o+o+q+k+q+m+k+m+k+p+p+k+k+c+i+e+3+3+3+]+]+]+]+]+]+:+]+]+]+]+3+b+g+s+y+y+y+A+y+A+y+y+A+y+",
553"@ @ @ % @ @ % @ & @ @ @ = & = ) = = { = : - ~ } } { } ~ { } 6 5 5 0 5 5 0 0 5 : a { 5 } } } 5 : 6 i O 4.V.^+4+6+6+7+|+6+6+0+6+6+0+6+5+6+8+0+0+0+6+0+6+6+8+5+6+8+6+0+5+0+6+0+6+0+8+8+6+c+4+6+0+6+|+4+1+2+4+|+)+{+{+{+3+3+e+e+e+e+k+e+c+e+h+e+i+c+k+i+h+k+i+o+k+k+o+k+k+k+k+p+k+k+i+k+o+p+k+k+p+q+o+q+o+p+k+q+q+p+o+o+p+m+q+q+k+m+q+q+q+q+q+k+q+o+o+k+e+k+l+e+a+3+3+3+]+/+{+]+{+/+]+]+]+4+e+k+s+x+y+B+A+y+y+y+A+A+",
554" @ @ @ % @ & $ & = & = = = ) ~ = : { { { : { { { ( { a { } 5 5 0 5 j 5 0 0 [ 5 } 5 [ g } 0 6 6 a i F l.;+[+6+|+6+6+|+6+|+6+5+6+6+5+5+6+5+|+6+6+6+6+6+0+0+6+0+6+c+6+8+8+c+4+6+8+8+7+6+9+6+4+4+|+|+|+4+^+<+)+]+3+3+e+e+e+b+i+c+k+k+c+e+i+c+l+c+e+b+c+k+e+k+o+k+i+i+k+k+i+m+m+p+o+k+i+o+m+o+h+p+o+q+k+m+m+p+q+p+p+q+q+m+o+o+q+o+o+m+q+o+o+o+q+k+m+q+k+p+r+k+e+a+3+3+{+]+/+]+:+{+:+{+{+4+4+c+o+t+t+y+A+A+B+y+B+y+",
555"@ @ = @ @ @ & & & & $ & = = = = = } { : ) : ~ { ) { { : } } a 6 6 6 p k j 6 } 5 ~ } [ [ } } ( ~ } : | r 8.S.;+4+4+4+4+6+|+6+[+|+6+|+5+|+5+5+6+6+|+6+8+6+7+6+c+6+6+6+8+6+6+6+8+8+6+6+6+b+6+7+6+4+4+|+}+^+4+{+{+4+e+4+4+6+8+c+b+e+e+c+e+b+e+e+c+c+i+i+k+c+i+i+i+i+k+k+o+o+k+k+k+k+k+m+l+o+k+p+q+o+k+o+o+q+q+k+m+p+q+m+p+r+t+q+o+q+q+q+m+p+q+q+o+m+q+p+p+q+m+m+h+k+e+3+d+3+{+{+]+]+]+]+3+{+2+2+b+o+t+t+y+A+w+A+w+A+",
556"@ = & $ % @ = = = = & = = : { { - { { : } 6 [ : } ( } 5 6 [ 5 5 k j p k j k j 5 0 } 0 [ } } : { } } ( i s 4.Z.^+4+4+4+|+|+6+6+|+|+5+6+|+|+6+6+6+5+6+6+6+7+7+6+6+6+6+5+8+8+6+6+9+8+b+6+4+6+6+4+4+|+^+}+_+^+^+3+^+3+4+e+4+2+b+c+c+k+c+e+b+b+e+e+c+e+c+i+k+i+k+k+k+h+h+i+p+k+i+n+o+k+m+k+o+p+k+p+m+p+q+o+o+m+q+q+p+q+q+m+p+m+t+o+t+t+q+o+o+m+p+q+p+q+o+p+q+p+t+p+p+k+b+e+3+3+{+{+{+^+^+1+^+4+|+4+f+p+t+y+y+B+A+A+A+",
557"@ @ $ @ = = = & = { = { = ~ { { { { } { } [ } { 6 5 } 5 j k j j t p p k k k j 0 } } } } { { } { } } : a e ` l.=+^+4+|+4+|+^+|+6+|+|+|+6+6+|+|+6+6+6+6+6+5+5+7+6+6+6+0+6+6+0+6+6+6+6+4+6+6+|+6+|+4+4+^+^+3+{+^+3+6+4+|+b+3+4+4+e+e+k+c+c+c+g+i+e+c+e+c+h+e+i+i+h+k+k+k+i+o+q+i+i+o+k+p+p+k+h+k+q+o+o+q+q+q+p+h+o+q+m+q+m+p+q+t+q+q+t+t+p+q+q+t+q+p+q+q+t+t+q+p+r+s+q+k+d+d+e+3+4+3+]+^+^+^+4+4+b+g+q+s+y+A+A+A+A+",
558"& = & & = & = = & { { ( = { = ) : ( } } } } [ : k 6 6 k k p r r t M M p k p j 0 5 [ } ~ { { { { { [ } { 6 s 8.S.!+4+|+|+|+^+|+|+|+[+[+}+5+6+|+6+|+6+6+6+6+6+6+|+4+4+|+6+6+4+6+7+6+6+4+4+6+6+|+|+_+<+<+)+<+{+2+)+^+4+}+4+4+4+6+4+c+c+e+l+e+a+g+b+c+e+b+f+c+k+k+k+h+h+k+k+k+k+q+k+o+g+k+o+q+o+h+k+q+o+i+m+q+q+q+o+q+p+q+q+p+p+o+o+o+t+t+p+m+m+p+s+s+o+p+o+s+t+s+p+p+p+p+p+k+k+3+4+4+3+4+3+^+4+4+4+0+i+q+s+x+y+A+y+",
559"= = = @ ) = = = = ) ~ ) { ~ ) { { } : } } } } 6 r k j a r p K t G M M B t j 5 j 5 : } } ~ ~ } ~ [ { { } : a I l.`.^+4+4+4+[+(+[+[+}+}+5+|+|+6+|+5+|+6+6+7+6+7+6+|+6+6+4+4+6+6+|+|+4+6+6+4+4+|+}+|+^+3+{+{+4+^+^+{+<+<+2+2+4+3+4+2+2+b+c+c+c+b+g+g+g+c+e+k+i+i+i+k+k+k+h+k+q+i+o+k+q+l+k+n+i+k+m+m+k+p+p+m+q+o+q+q+q+p+s+o+o+t+t+q+q+p+o+q+t+o+q+q+t+t+s+q+p+p+s+o+s+p+r+r+p+i+b+3+4+^+4+4+^+4+4+4+b+h+p+t+y+y+A+",
560"@ = = - { ) { = { { : { } { { { { } : } : 5 0 6 p r p r r B K K S M K K K j j 5 5 { { } { { { { } { { { : a e ` F.=+^+^+^+}+_+}+[+|+|+|+|+|+5+|+|+|+|+6+5+6+4+|+6+6+6+6+6+4+4+4+6+4+4+4+4+4+4+_+^+)+^+{+<+]+<+^+{+3+)+^+]+^+3+3+7+6+7+j+e+l+e+l+e+l+c+c+e+k+i+k+k+h+k+h+i+k+k+o+i+o+o+i+o+i+o+o+m+o+q+q+m+p+o+o+o+s+m+q+s+m+p+o+o+w+s+s+t+t+o+o+s+q+q+m+t+t+q+s+q+t+p+p+r+q+p+i+e+e+4+4+4+4+^+4+|+4+b+h+t+y+y+A+",
561"= = = ) ) ) & { = { { = : : : ( ( } 5 5 5 5 j p B K t p B M S S S S S .K t j 6 g ( { { { ~ ) ~ { = = { { : | s 4.Z.'+4+4+}+[+(+}+(+[+|+[+[+|+[+7+[+5+[+|+4+|+4+|+6+5+7+7+6+6+7+7+|+|+^+|+}+_+|+4+)+{+_+{+^+{+{+{+^+^+3+1+^+<+_+{+1+}+2+9+b+g+c+k+c+b+c+k+c+l+i+h+e+p+k+k+o+o+k+k+p+k+p+i+o+n+i+q+q+o+o+q+q+o+q+p+o+q+o+q+t+o+t+q+m+q+o+o+p+s+s+q+o+t+t+n+t+m+q+p+q+t+t+m+p+q+q+h+e+e+4+4+|+4+|+2+6+4+b+i+o+y+y+",
562"& = = { { ) = ) ) = : ( ( 6 : : 6 6 k 6 p t u t S M K r B G S S S S S G G t p 5 } = ( ~ = ~ & ) = ) ) ~ { { < e I F.=+^+^+_+}+^+}+_+[+[+[+[+|+[+[+[+5+}+[+|+|+|+|+|+[+[+|+6+|+4+|+|+[+[+^+|+_+_+^+^+)+)+]+^+)+4+{+3+{+{+]+{+^+<+)+1+4+<+4+e+e+k+e+i+k+c+l+c+e+l+i+i+k+k+k+k+o+o+k+h+k+p+i+p+k+m+m+o+p+q+o+q+o+q+o+o+o+o+o+s+o+m+t+o+t+s+t+q+o+o+s+o+t+t+o+t+o+t+o+t+o+s+t+q+p+r+o+i+e+b+3+4+4+|+7+6+4+c+c+k+s+t+",
563"{ { - { { ) } ) [ } : ( 6 ( 6 6 a p 6 p B K K M S ..G B O ......S .G G B M t j ~ { = ~ = ) ) ) ) ) ) = % { ( 8 s _.V.~+}+<+^+(+(+(+(+(+(+_+}+^+|+}+}+|+|+[+5+7+7+|+|+7+|+4+4+|+4+}+}+}+}+_+<+_+)+<+]+_+>+]+{+{+{+{+)+]+^+)+]+{+{+{+<+{+2+4+e+e+k+l+c+e+e+k+h+c+k+k+i+i+i+i+k+k+h+k+o+k+p+k+m+o+k+q+o+m+q+q+q+o+s+s+t+t+s+p+s+t+t+s+o+q+o+o+t+s+o+s+o+o+t+t+o+y+t+o+s+t+s+o+t+m+p+p+k+e+c+4+4+4+4+4+6+4+4+h+k+t+",
564"= ) { - : : } ) [ [ 5 6 a a ( a p v k t S S K G +...O K S ........ .S G G K p 5 ~ { { ) = % ) ) ~ = ) { $ ~ { < | F l.;+(+}+}+_+(+^+(+}+[+[+[+^+|+^+|+|+}+|+[+[+[+}+[+|+|+^+4+^+|+}+_+^+^+^+_+)+)+)+]+]+>+>+{+{+)+]+)+{+{+)+{+{+$+{+{+)+<+3+6+b+b+a+h+h+e+e+k+e+c+i+i+k+k+k+i+k+q+k+o+i+m+k+p+o+o+k+k+o+o+o+p+q+q+o+q+q+v+q+q+m+q+t+m+t+t+t+t+t+o+s+s+t+t+o+o+t+o+t+s+q+s+m+t+t+q+p+p+k+e+b+4+4+4+{+6+4+4+c+c+o+",
565") { { : { { : : } : 5 6 k a 6 k p p B G .S G O ....G G +.+.+.+. . .M B B p j } } ~ ) ) ) = ~ ) & ) & = { ~ = ( < i ` E.)+_+_+^+^+(+(+[+^+^+^+}+^+|+^+_+|+}+^+|+|+[+(+[+^+[+|+4+4+^+[+_+_+^+)+<+]+>+>+>+$+$+$+)+{+<+)+{+{+{+>+{+{+$+]+]+{+)+{+4+8+b+l+e+i+i+c+i+l+b+g+h+k+i+k+h+h+h+i+k+k+p+i+h+p+o+o+q+q+p+o+o+o+p+m+p+o+s+m+t+s+s+t+o+t+m+q+s+s+t+o+s+t+y+o+t+t+o+r+s+o+t+s+o+t+t+q+p+h+c+c+e+e+4+3+|+4+4+6+b+",
566"} { } { } } } : } } 5 k k k r p B B G G S G G O <.f.O G O O +.+...G B p k k a { } { = = ) & & ) & ) % % = = = = ( | I p.Z.'+}+)+^+^+_+_+_+(+(+^+^+|+[+}+|+|+^+}+}+}+}+[+|+^+_+_+^+^+^+^+)+<+>+)+]+ +&+&+&+>+$+>+$+]+&+>+$+&+]+$+{+>+&+{+{+)+{+]+6+2+l+e+l+l+b+c+g+g+l+h+k+k+k+k+k+k+o+i+i+p+p+i+q+o+o+o+o+q+p+p+t+q+q+p+o+t+p+q+q+t+t+o+t+s+o+q+o+t+o+o+o+t+y+o+t+s+s+t+t+q+s+o+t+o+s+r+k+k+c+4+4+4+4+|+4+4+6+8+",
567"} } } } { } } [ 5 6 j p t p i B G G O O G G G +.+.+.M G S S G G G v v p j ( } { = ) { & & % % & & & % & & = = & = < 8 ` F.~+)+^+<+_+~+!+[+_+(+_+^+^+^+(+^+^+}+^+|+(+(+(+_+_+}+|+_+^+^+)+<+'+>+>+>+>+>+ +$+$+&+]+,+&+{+$+{+$+>+&+&+&+]+@+&+]+)+)+<+7+2+b+b+e+g+l+e+e+c+l+c+h+k+k+o+i+i+k+k+k+k+p+m+q+p+m+q+m+q+o+o+s+m+q+s+p+t+o+t+n+s+o+t+o+s+s+t+o+y+t+t+o+s+o+t+o+t+t+o+t+t+t+t+s+q+s+q+q+k+h+0+|+4+4+4+4+6+4+",
568": : 6 : : } 5 j 6 6 6 p p p v O G G S G v B B S +. ...S S S S G p a a k } ~ ) = { = = = & & & % % & $ $ $ & & @ & = , s p.Z.^+)+^+^+^+)+^+^+(+^+_+_+^+}+(+(+(+_+}+}+^+^+}+^+_+^+<+)+{+)+{+~+{+>+$+&+&+@+ +$+ +&+ +&+&+ +>+&+&+>+$+$+$+&+$+&+@+]+)+<+4+2+g+e+c+k+e+e+c+c+g+i+i+e+k+i+i+o+i+o+k+k+h+o+k+m+q+o+q+p+q+q+o+q+t+m+t+t+s+t+s+t+t+t+t+o+s+o+t+o+t+o+s+s+t+o+o+t+t+o+t+t+q+t+q+s+q+p+k+e+c+6+|+|+4+4+}+|+",
569"6 6 6 : } 5 5 k k r k p K B v G G S S G B B O O S ..S S K ..G B p k 6 : { { = ) = = = & $ & & % % % $ $ % $ & $ $ = { i F F.,+^+<+)+<+^+^+_+^+^+^+(+_+(+_+^+}+^+^+^+_+_+^+~+^+_+^+)+)+{+,+&+ +$+&+ +W. +Q.&+$+&+&+ +$+&+$+$+>+&+&+&+%+>+&+@+&+ +&+{+<+4+3+e+k+i+i+h+c+l+c+e+k+i+h+k+k+k+k+i+h+p+p+k+m+o+o+o+o+o+m+p+s+o+o+t+s+m+t+s+t+o+y+o+t+t+t+s+s+s+t+t+s+o+t+t+s+o+t+t+o+p+t+o+o+q+s+q+o+m+c+c+c+4+^+4+4+|+",
570": a 6 : } 0 6 k j p i v M B G S S S S M G G O S S S O S S S B r 6 : } { = [ = = @ = @ & $ $ @ $ & $ $ % & & ) $ & = ( s 4.Z.)+^+)+)+)+'+)+~+^+)+^+^+_+!+_+_+^+^+^+(+_+^+<+_+!+~+_+)+{+>+>+ + + + +Q.%+W.Q.W.&+&+&+$+&+&+&+$+&+&+$+&+&+&+&+@+&+&+>+&+<+2+2+e+e+l+e+c+e+i+c+k+e+c+g+i+i+k+k+i+k+m+k+k+h+m+o+q+q+q+q+p+t+o+o+t+t+o+s+t+o+y+t+o+x+o+s+t+s+m+t+s+o+t+t+s+t+s+t+o+t+t+o+y+r+q+t+r+r+c+b+c+4+4+4+4+^+",
571"6 : : : 6 j p t B p p B M S G S S ...... .S S +. .S v G G G r k ( : : : { { { @ @ $ $ % @ $ $ . & & @ % % ) ~ { | ` p.,+)+{+)+'+)+~+^+~+^+^+~+(+_+^+^+^+'+(+)+^+)+)+~+)+'+>+)+$+>+$+@+ +Q.%+W.Q.T.%+++Q.W.Q.Q.&+Q.Q.&+Q.Q.&+Q.$+T.@+$+Q.&+&+&+>+_+3+b+b+e+g+k+e+l+b+c+i+i+i+k+k+i+k+k+h+k+p+m+p+k+p+o+o+m+m+q+o+t+t+t+s+t+t+t+s+o+y+x+o+s+t+s+t+t+o+t+t+s+s+q+t+o+o+t+t+o+t+o+o+t+p+q+o+n+c+c+4+|+|+}+}+",
572": } : 6 6 k B K K p B G G G S ..S S ........S S G B v B B p : 6 } { { : { ) & $ @ @ $ + % + & $ % $ & $ & < s 8.`._+{+{+)+^+'+'+~+~+^+)+~+~+_+)+_+)+_+<+)+^+{+~+)+)+>+>+>+ + +@+W.W.T.Q.Q.M.Q.M.%+%+T.$+Q.&+Q.T.$+Q.%+Q.&+T.%+Q.$+Q.&+&+&+>+<+1+4+e+c+k+c+l+e+b+b+c+c+i+k+i+h+k+h+i+k+k+m+i+o+o+q+k+o+q+o+o+o+o+t+t+t+t+s+o+o+y+t+o+t+o+y+o+t+o+o+t+o+s+t+t+o+t+t+t+o+t+s+t+p+p+p+o+k+c+c+4+|+|+|+",
573"5 6 5 a i B G M M B M M B G G ..S S +.+.+.S S G G k 6 k p 6 : [ { { = { - = $ @ $ @ % $ + $ @ % % @ % $ % @ @ - | +.l.>+)+)+)+)+~+)+)+'+~+^+)+^+'+_+)+^+)+)+)+{+~+)+>+;+>+>+ +@+ +Q.@+T.Q.Q.T.T.T.Q.M.M.%+T.T.M.%+W.T.%+Q.T.&+K.%+T.T.%+&+T.@+@+>+)+2+2+e+c+l+c+b+g+c+c+h+c+i+i+k+i+k+k+i+o+i+n+o+o+o+m+p+o+t+o+s+t+m+y+o+y+t+s+x+o+t+y+t+t+t+o+y+t+t+t+t+o+o+o+t+o+o+t+t+s+p+p+s+q+q+p+i+c+b+7+2+2+_+",
574"6 k p p p v S M M G S S B G G ..S S S S S G G G p p 6 6 k } : ~ & = = = = @ $ $ @ @ & $ @ @ ; $ . - ( s p.`.{+{+~+>+~+_+]+-+~+^+)+)+'+_+)+)+)+<+~+)+)+)+>+ +&+ + +&+&+Q.W.K.T.H.T.T.T.T.Q.M.Q.Q.T.Q.T.&+K.T.M.T.T.Q.%+T.%+Q.T.Q.%+&+%+]+<+1+4+b+e+g+e+g+l+e+k+e+k+i+k+k+n+k+i+k+p+i+i+p+q+o+o+o+o+o+m+s+m+m+o+y+o+t+t+t+o+y+o+y+s+o+y+o+t+o+t+t+t+t+m+t+o+o+o+t+q+q+s+t+q+q+q+c+b+8+6+2+|+",
575"k p t t B O S S G +.S B O G +.S ..G G O G B p p p B p 5 : : = = @ @ @ & @ & $ @ % + % + ; & . - r ` F.`.~+)+>+{+>+>+_+>+)+'+'+~+>+<+~+)+>+{+>+]+>+>+ +>+$+Q.W.Q.M.Q.Q.t.m.m.q.T.T.T.T.T.T.Q.T.Q.T.T.T.%+M.T.X.M.M.T.%+T.%+Q.Q.W. +&+]+4+4+j+e+l+e+c+b+c+i+e+k+h+i+i+i+k+i+i+k+k+i+o+o+o+o+o+t+t+t+t+y+o+s+s+s+s+y+t+t+o+t+o+y+o+t+x+o+y+o+t+m+t+y+o+o+t+o+t+o+q+p+q+m+o+q+c+j+b+4+2+",
576"p B G B B O O +.S S S S O O O S +.G v p p p i p B p 6 } { { = ~ $ $ $ $ + + + + . + ; + ; + % @ $ @ a s n.V.@+~+>+>+-+>+)+>+)+)+~+'+>+{+~+~+,+>+>+&+>+ + + +W.@+@+K.%+T.w.T.q.T.q.T.X.T.Q.Q.N.T.T.T.Q.T.T.T.T.T.T.T.T.Q.T.T.X.T.%+T.Q. +@+]+^+2+6+k+e+k+l+e+h+c+c+i+l+n+h+k+i+o+m+q+i+k+o+o+q+o+q+o+p+o+t+y+t+t+y+o+y+t+t+s+s+o+t+y+o+s+m+s+t+t+o+o+t+s+o+t+o+s+s+q+m+r+q+q+k+k+b+b+4+4+",
577"B G M M G O O G +.S G S S S O S G G B p B p v p p 6 : : ~ = = = @ $ $ + + % + % + % + % & @ - i ` F.;+)+>+>+>+-+>+)+)+'+>+>+{+>+>+>+>+>+>+>+$+ + +W.W.Q.Q.Q.Q.s.T.q.q.h.f.h.N.w.N.T.T.M.N.M.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T. +@+<+_+4+4+k+k+e+c+e+e+e+e+h+k+k+h+k+g+k+h+q+o+q+o+m+p+m+p+q+s+t+o+s+x+o+y+o+y+s+t+t+s+t+m+t+t+t+o+o+t+o+t+m+n+t+o+t+q+q+o+t+m+o+o+o+p+k+k+b+4+",
578"M M M B M G G O S S G G O G G S B v i p i i i 6 6 6 { = & @ & & & @ $ @ & @ + + + % % + + % + + + + $ & < O p.@+>+>+,+>+-+>+$+ +,+,+-+>+>+,+>+;+`. + + +Q. +Q.@+Q.Q.Q.T.q.q.q.i.6.h.q.q.T.q.T.q.T.q.N.s.T.q.Q.T.X.T.T.X.T.T.T.T.T.T.T.T.w.K.K.V.;+^+4+c+c+e+k+c+b+c+e+c+i+i+i+i+g+i+h+h+h+p+p+p+p+o+o+q+o+s+t+t+s+o+y+o+w+y+s+t+t+t+s+t+t+o+y+o+t+s+t+m+o+t+o+n+o+s+q+q+q+q+p+o+o+i+k+e+b+",
579"S K K B v B G S ..S O v O G G G G p i i 6 6 6 : { { { = & $ @ @ @ & . + . + + . + + + + + . & . $ = i 2.H.>+>+>+&+ +>+>+>+ +>+ +-+;+>+;+ + + + +&+Q.@+K.Q.Q.Q.q.Q.s.s.i.x.V 6.h.X.q.N.N.M.N.N.q.X.N.T.q.T.q.T.q.T.X.q.T.T.T.T.Q.w.w.m.2.p.F. +^+|+b+c+k+k+c+e+i+b+b+g+i+l+i+p+k+k+o+i+o+h+k+q+t+o+t+t+o+s+t+y+s+y+s+o+t+s+s+y+o+t+t+t+o+t+y+o+m+t+p+o+q+s+q+q+p+q+o+o+k+p+p+p+h+c+b+",
580"S S K B B G G S ..S G p v B G v i k i 6 : : } { { = = & $ $ @ $ + + + $ . & @ % ) 6 O H. +>+>+ + + + +>+ +>+ +>+ +>+ +&+ + +W.W.W.Q.K.Q.T.Q.o.w.q.q.i.9.R (.h.q.q.N.q.q.m.T.q.q.X.X.q.T.N.N.T.q.X.T.q.T.m.m.m.<.2.......2.F.`.~+4+4+e+e+i+e+c+g+i+g+i+k+e+h+m+k+k+h+p+m+m+o+p+o+q+t+o+y+o+o+s+y+s+y+t+t+o+y+y+o+y+o+t+o+t+t+p+q+q+o+q+o+m+o+o+q+p+o+q+k+q+k+k+c+b+",
581"S S G M K G G S . .B p k v B B v k k : : : { { = ) ) % $ $ . + . + + + + + + + + $ @ $ $ $ { G m.W. +$+ + + + + + + + + + + + +W.W.W.W.@+K.Q.Q.T.M.q.T.o.q.f.6.V Y ).u.u.N.q.q.q.q.q.N.o.q.T.w.N.q.X.q.T.m.X.q.m.s.m.<...S ..S ..+.2.F.`.!+4+c+e+e+e+l+c+b+i+c+h+h+k+e+h+m+k+i+k+q+p+o+o+o+o+t+o+s+t+t+t+t+s+y+x+t+t+m+x+o+t+o+t+m+o+o+o+o+q+o+p+q+q+q+m+o+p+o+o+m+m+o+i+c+",
582"S S G M M G G S +. .M p k i v k i 6 6 : - = ) ) = & & @ % @ . @ @ + + + + . + + + + + + + # . $ ^ g r <.H. +$+$+ + + + + + + + +W. + +@+W.Q.Q.W.W.T.t.s.M.s.q.q.i.e.g.Y Y ).1.u.i.q.q.q.q.q.N.q.N.q.q.N.q.q.T.q.s.w.s.f.....S S M M K S G S 2.F.`.'+6+c+c+c+g+c+l+c+e+k+h+h+k+h+h+p+m+i+o+q+q+q+s+o+t+o+s+t+s+s+t+s+t+y+o+y+o+y+o+y+o+t+t+t+t+t+o+q+q+q+m+m+q+q+o+p+q+q+k+n+n+i+c+",
583"S S S M M S G G S S B p 6 i i k | 6 : ) ) = ) ) = ) % + + . + + + + + + + + + + + + . ; ] ~ y y ..w.Q.$+ + + + +W.W. +Q. + +W.@+Q.W.K.Q.Q.K.K.H.w.m.q.q.i.i.0.R Z @./.g.u.X.h.X.q.q.N.q.N.q.N.q.T.q.T.q.q.m.m.....S S M K G K M B B O +.2.F.`.'+}+b+l+e+l+c+e+c+h+c+k+h+k+k+i+i+k+h+i+m+m+m+s+o+t+o+s+t+y+s+t+x+o+y+t+y+o+t+o+t+t+o+o+o+o+o+o+o+o+q+p+o+o+q+q+o+o+q+o+k+k+l+",
584"G O G G M G B G O v r 6 6 k i { : : - ) = & @ & = & @ + + + @ @ $ + + + + + + + + + + $ + # . # ] h g y r S m.Q.$+Q. +Q. + +W.W.W.Q.W.Q.W.Q.W.Q.Q.T.t.w.Q.m.m.s.o.3.>.9.Y X %./.[.0.i.h.h.N.h.i.q.N.q.N.i.N.q.q.m.f...+.S S M M M K B B B r B B B +.2.n.Z._+|+c+e+e+c+k+c+e+h+e+h+h+k+k+i+q+o+k+q+q+q+p+o+s+y+s+s+y+s+t+t+t+s+s+t+y+t+t+t+o+t+t+t+t+o+o+o+o+k+q+q+o+o+q+q+o+p+p+q+o+i+",
585"G G O B B v k v r k 6 6 6 : : - - = & = @ & = = = @ + @ + . . $ $ . . + + + + + + + + + + + $ ~ ^ h c y y y W ..t.W.$+W. +Q.Q.W. +W.W.W.W.K.K.Q.Q.Q.H.T.w.m.w.m.q.f.e.6.Y Z @.%.@.(.x.h.q.i.i.N.i.q.q.i.q.q.q.f.m.......S G M B B B B t t B p p t B B +.|.F.`.~+4+c+k+k+c+b+f+b+h+e+k+i+f+f+g+o+o+i+p+m+o+s+t+m+o+t+o+t+t+s+y+t+t+y+o+t+o+w+t+t+o+o+o+o+q+o+o+o+o+i+i+n+o+o+q+k+q+o+k+k+",
586"G G G B B p k i | ( 6 6 : : = & = = = = = @ @ = @ . + + . % . + + ; ; + > ^ g y 0 j y y B f.p.H.&+Q.W.W.W.Q.Q.W.Q.K.W.Q.Q.H.M.q.t.w.T.q.q.m.f.f.1.(.Z @.@.*.*.).x.x.i.q.i.q.u.q.q.q.o.f.f.+...S W M W G r B p B B B t p p p p B v G +.2.F.`.^+|+4+b+g+e+c+c+h+c+k+k+k+f+f+i+p+i+q+q+q+o+t+s+y+o+y+y+o+s+s+s+s+y+t+o+s+o+t+o+t+s+s+n+o+o+n+o+o+q+q+k+k+h+o+o+k+o+k+k+",
587"G G B p p k 6 6 6 6 6 } : = & = & = = = = @ @ % + + + + + + + + + + . + . + + . + + $ ; h c c g g y y y y M m.K.W.W.H.Q.Q.Q.W.K.K.Q.Q.H.Q.T.s.Q.w.q.s.s.q.f.h.e.:.Z X @.*.%.%.).g.i.x.h.q.i.q.h.m.f.f.f.S -.r G B B B B B B p p p p p p t t p p p t B +.2.F.-+^+4+b+e+e+l+l+e+g+h+i+h+k+i+h+i+q+o+o+o+t+m+o+m+t+y+o+y+t+o+y+t+m+y+y+o+t+t+t+o+o+o+o+o+p+o+i+k+o+i+o+o+q+o+q+o+l+o+o+",
588"v v v i k k : ( ( 6 5 { - & % $ % @ @ @ @ @ @ @ + . + + + + + + + . + + + + + + ; ; ] ^ g h g y g g g y y G ..m.Q.Q.W.Q.Q.H.H.W.H.H.s.Q.s.s.m.T.s.q.q.3.o.f.e.^.Y Z @.].=.].].a.9.e.h.x.q.i.q.f.f...S G O G M B W p r p t k p p t p k p t k k k p p p M S 2.F.-+_+7+b+c+c+c+e+c+c+k+i+k+k+o+i+h+q+q+m+p+p+y+o+t+o+y+t+t+t+t+w+o+t+m+s+o+o+s+o+o+m+q+o+m+o+m+k+q+o+k+i+l+g+o+o+k+k+k+",
589"v i i 6 i : : : : { : = & & @ @ % & @ % @ . . . + @ + + + + + + + . + + + + ; > ^ h h h 0 c g g y h y y y +.w.K.T.Q.H.H.Q.H.t.Q.s.Q.q.H.m.s.m.m.s.s.f.i.f.^.(.Y @.].%.%.*.*.,.).x.u.i.f.f.3.-.-.O W S y B B p r r r p p p k a k k k 6 k p k i k p j p O +.2.F.-+^+4+b+b+g+i+l+g+g+i+i+i+k+i+k+h+i+q+q+t+o+t+t+y+o+o+y+y+o+s+t+y+o+y+t+t+o+s+o+o+m+k+k+o+n+m+h+i+h+o+o+o+l+k+n+o+o+",
590"i : : : : : = = = = { = & $ + + . . + @ + . . + + + + + + + * # # ] ] c g g h g g g j c C y y S m.w.T.t.s.K.w.s.w.Q.o.t.s.m.m.m.q.f.m.m.f.e.6.!.,.$.@.].%.%.].]./.).6.e.i.#.-. .S W G B B W B B t p p k k j j j j j k k r 6 k k r 6 k 5 j r O +.2.W.-+^+b+b+e+c+e+c+i+i+h+h+k+m+o+m+o+m+o+o+t+o+t+t+y+s+s+y+t+s+o+t+o+t+o+t+o+o+w+o+m+o+n+i+g+o+p+i+g+g+g+o+o+p+i+g+i+",
591": } { : { { { ) & & @ @ % + + + + + + + + + . + + + + + + . . . . + + $ # ~ h g ~ g g g h g g y h u C y W ..p.H.Q.H.s.H.w.t.s.s.s.s.t.m.o.q.3.f.f.-.i.^.!.U Z @.%.%.*.%.*.a.).:.i. . .M M K M W r B p t t p k p k p p k k t k 6 6 k a j k k j j k 6 p p O +.|.V.,+^+4+c+e+i+g+i+c+l+i+k+k+o+i+h+q+p+o+y+o+s+x+o+t+t+t+t+y+y+o+y+o+y+o+o+o+o+o+o+o+i+o+o+k+i+k+k+n+n+i+i+k+q+k+l+",
592": : { { { ) ~ & & & $ @ $ + + + + + + + . @ + + + + + + + + + . . + + + + + + . + # ~ ^ g ~ g g ~ n g h g g g g g c y N f.m.s.m.H.s.t.t.t.s.s.s.s.s.m.}.f.3.i.3.e.:.R Y U @.%.%.@.*.].].).(.>.W W M M M t t t r r B p k k k j k k k k k j j j 5 j k 5 5 6 j 0 j 0 j p B S +.p.V.;+}+8+b+i+c+i+h+k+h+k+h+o+i+o+q+q+o+o+s+o+y+y+t+s+o+t+m+t+o+t+o+o+t+s+o+o+o+n+q+n+g+i+k+o+h+h+g+g+n+g+i+o+i+k+",
593": { = { ~ { ) $ @ @ & $ % % + . . + + + + + + + + + + + + . + . > # g ] g / g h g c h h g y h y y C W M m.m.s.m.m.w.m.s.s.m.m.f.f.3.f.s.f.f.e.>.R Z X *.X %.@.X /.Z ).~.T K M M K t p B B t p k k k j k j k k 6 j k k k k k 6 6 5 6 6 j 5 0 0 j j j k p O +.|.V.,+}+b+b+k+k+e+k+k+i+k+i+k+h+m+m+p+t+o+t+o+o+m+t+s+o+t+t+t+m+t+o+o+o+o+k+q+o+o+i+i+n+o+k+o+k+i+k+i+i+l+g+k+o+",
594"{ { ) : ~ = & $ . & @ @ ; . . . . . + + + + + + + + + + + # # ^ ^ ^ ^ h ^ g ^ g g g g h g g g y c y K }.m.m.s.}.m.m.3.m.}.m.}.s.3.f.3.i.-.^.:.R U X Q Z @.Z Y ).~.C A N t t t t t B p p t j k k a k k 0 5 k a j j k 6 5 j k 6 5 5 5 0 j 0 j j p p k r v G +.|.W.,+2+8+b+i+h+c+k+i+k+o+q+i+q+o+o+t+o+t+t+y+y+o+s+t+t+o+t+m+s+s+o+o+n+o+q+g+o+k+i+i+f+i+i+k+g+g+i+i+k+i+k+k+",
595"- ) { & = = & @ $ . + . + + + + + . + + + + . + . . + + + + . > + + $ # ~ ~ ^ ] n ^ g g g g g g g y g y C y M -.m.m.m.q.}.3.s.}.f.}.f.f.f.i.#.i.-.:.Y U X X Z @.Z R ).A T W K t t B t B t k p k j k j 5 k 5 5 j 6 k k k 5 6 j k 6 5 g 6 a a 5 0 k j j k k k r r B O +.p.`.'+4+e+k+k+k+h+k+m+k+i+p+i+q+t+o+p+s+o+o+m+s+o+t+s+m+s+o+q+o+o+o+o+o+h+o+q+n+n+g+n+k+k+i+i+i+k+k+i+k+i+i+",
596"- & & & @ @ . @ @ . . + + + + + + + + + . + . . + + + + + + + > > * # # ] [ g ~ h ] g ~ g g h g h c C g y y M ..f.}.f.f.s.f.f.3.i.}.f.3.f.i.-.>.>.R Z X X X Y R R A T W u t t t t t t p p k j k 6 5 j 0 k 5 6 j 5 5 j j j 6 5 5 5 5 0 0 6 6 6 0 5 j 0 j k k a r r B O 2.n.`.^+4+e+i+k+i+k+h+k+i+m+m+m+p+o+o+q+o+t+t+m+t+o+o+o+s+m+t+o+o+q+p+o+i+g+o+i+n+i+h+h+c+i+i+i+g+k+i+k+k+k+",
597"& & & @ $ $ + + + + . + + + + . + + + . . + + . + + + + . + + + + > + > + $ ; ^ ^ ^ ^ / n h ~ h h c h C h h y y y -.}.q.3.3.f.}.3.3.3.f.f.-.3.-.>.>.R Z X Z Z Z R R A u u u B r t t t p k r k 5 6 5 5 5 0 5 5 6 5 0 j j j p 0 j j g 0 5 5 5 g 6 j 5 j k 6 6 k k k a r k B O 2.H.`.^+4+e+k+k+k+o+o+k+i+o+k+o+p+t+o+t+o+s+o+s+o+s+p+o+o+o+o+o+o+i+h+o+o+i+k+k+i+g+g+g+g+g+g+i+c+k+c+i+g+",
598"& & $ . @ @ @ + + + @ + + + . + + + + . . . + + + + + # > + > > + ; # ~ n ~ h ^ n g g h h h C c C y y y -. .f.f.f.f.f.f.f.-.f.-.f.-.-.T R R Z Z ~.w ~.A u u y t t t r B t p k 6 5 6 j 6 6 6 6 j 5 5 5 5 5 j p 0 p 0 5 j 0 0 0 0 5 5 5 5 5 5 5 k j 6 j t k k y r B +.<.F.-+^+8+b+g+k+o+o+q+k+m+q+q+o+o+o+s+m+o+s+s+p+o+t+q+o+q+o+p+q+l+i+g+i+i+i+l+k+c+i+i+c+b+g+g+g+g+g+b+g+",
599" @ @ & $ + + + . + + + + . . + + . + + + + + + + # + > * + > > + > > > ; * ~ / ~ n ^ ^ g g h h C h C C C W W #.3.3.#.f. .-.f. .f.-.-.-.T R R d Z d R A A t t B B t B B B k p 6 k 5 5 5 6 5 5 j j 6 6 5 p 5 k k j p j j j 5 5 j 5 5 j 0 0 0 5 5 6 5 6 k p 6 k j p p r G +.2.V.)+^+8+k+g+k+i+i+m+k+o+o+o+o+q+o+t+s+o+p+q+q+m+o+o+m+o+o+o+f+o+i+n+i+i+f+i+i+g+b+g+f+g+b+b+b+j+g+g+",
600"$ @ ; + . . @ + + + + + . + . + + + . . . + + + + + + * + + > # > ' > > + > + * # / ~ n g n ^ g g h h h C n A T W -.f.f.#.f. .f.-. .-.#.-.V C w R R A A A A u t B t p k k r k k k 6 k 6 } } 5 5 6 j k 6 6 6 5 p j p p p p 5 0 5 5 5 5 0 5 5 0 0 5 j 6 5 5 6 j j k j j p k p G +.p.V.~+}+c+i+k+q+k+q+k+q+q+o+m+q+q+q+m+s+m+o+q+m+p+o+i+n+g+o+i+o+h+i+i+g+i+l+i+g+g+g+c+f+g+j+g+j+j+g+",
601"@ @ + + . + . + . + + + + + + + . + + + + + + . * * + + + # ; # + + + + ' + > > # # # / # ^ g n g h h g y y C A y T -.3.-.f.-.-. .f.-.-.^.n A d A A A A A u t t k k p p j k k 6 5 5 6 6 } j 0 5 5 j 6 k 5 j 5 p t B p p k j k 6 6 6 k 0 5 6 0 5 j 5 0 0 5 5 6 6 k k 5 t j j p k G +.n.V.^+4+e+k+k+q+o+o+o+o+o+q+o+o+o+t+o+n+o+q+q+o+p+o+i+f+n+n+f+i+k+i+i+g+f+g+g+b+b+b+b+c+8+9+8+8+8+",
602" . + + + . + + + + + + + + + + + * + + + + * + ' > * # * * * > > > + # # # # # ^ / ^ ^ n g g h y n y y T T N -.f.-.-.-.-.-.-.W W y n C C A A A u p t t t p k k r j j 5 k 5 5 6 6 5 : 5 5 } 5 5 k 6 6 k p t B p k j j 0 6 j 5 6 0 j j 5 5 j k j 0 j 5 6 0 0 k 6 j j j t k t M 2.n. +|+0+k+l+k+q+k+q+k+o+q+n+o+o+q+q+o+o+o+h+o+k+o+i+i+k+g+g+i+i+k+c+g+i+g+g+8+g+f+g+g+c+g+g+b+g+",
603" . + . + + . + . + + + + . + + + + + + * + + + * + > > > ; # + * > > > * * * * # . / ~ ~ ~ n g g n y y V C T T #.-.-...-...W W y y n h l h y u t p p p k k k k k 6 6 6 6 6 5 } 5 j 5 5 } 0 0 5 0 j 5 j p p p p j k k j 0 j 5 j 0 j j 5 j j k 6 6 j 0 5 j k j 5 k k j j j j j B M 2.F.>+^+8+o+l+k+o+o+o+k+o+o+n+k+o+o+n+o+i+q+i+h+i+o+i+i+i+i+i+g+g+i+c+b+f+g+8+8+b+b+8+b+c+b+b+c+",
604" @ . + + . + + + . . + + + + + + + + # + + > + + # # # # # > * + + > + + ; # > * # # # # ~ g h n n h n y y V W V -.-.-.-.W W r y n n n j 0 u j j k k k t k k a 6 6 5 } 5 6 a 6 6 6 } 5 5 5 5 0 k 6 k k j p p v 6 6 6 5 5 p j k k j j j k k k j j 5 j j 5 0 k j 0 j j j j k r k p M S 2.V.)+}+c+o+o+o+o+o+i+n+o+f+o+o+o+o+p+i+o+n+i+g+i+i+l+g+i+i+i+g+g+i+b+8+g+g+j+9+j+8+b+8+j+9+8+",
605". @ . + + + + . + + + + + + + . + + . + + . . + + + # . + + * * + + # # # # * # # ; * * * * # # # * * # . / # # # ~ g g n y y y C W W -.-.-.W W y y y g c u j j r k k k r k r k a k j 5 6 6 } 6 : a } 5 k 6 6 6 5 j j k p k p k i 6 i 6 6 j 6 j k k j k k p j j k a j j j j g j 0 5 5 j 0 j j j k k k r G +.n.`.)+4+c+k+k+o+i+q+n+o+n+g+g+n+i+i+o+g+i+k+k+g+g+i+i+i+c+b+g+i+8+g+b+8+8+8+8+e+j+9+b+8+b+j+",
606". . + + + + + . + + + + + . + + + + + # . # * + + * * + # * * ; * * / # # # * * * * # * * * # . # # # ~ n g n n n W V T W -.W W y y n ^ g 0 0 j j j 6 k k 6 a 6 k 6 6 6 a a 5 6 5 6 5 0 5 a 6 k j j 6 6 k k k k k j 6 6 6 6 5 t p j j p p k j p t t t j j j j 0 j a 5 j 0 5 j j j 5 a j k k p B +.p.,+<+8+i+k+o+i+k+g+i+k+i+i+n+g+f+i+i+i+f+i+i+i+c+c+i+f+8+j+b+8+j+j+b+8+j+8+b+8+9+8+9+b+b+",
607" + + . . . + + + + + . + * + # + * + # + * * + * * * + * * ; ; > * * # ; # + + > * * * * * * # * ~ # g h y C N P W W y a g ~ g g 0 g j j j 5 j 5 6 k k a a 6 5 5 5 } } : 6 5 5 j 5 j j j 6 j j k a k p k t j j 5 5 5 p p t p p p t t t t p t j u t t y k k 5 j 5 j 5 5 6 6 g j 5 j 6 k r O 2.F.-+^+e+o+k+l+o+k+k+i+n+g+i+i+i+f+k+i+h+i+g+c+i+g+b+b+b+8+g+j+8+5+j+b+b+9+8+9+8+9+8+9+9+",
608" . . + + + + . + + + . + . + . + + + * * * + * + + + + * + + > > ' > ' ' * * ; * * * * > > + * * * * # . # * # # ~ n g y y y y y g ~ g ) } } 5 g j j k j 5 5 5 k 5 6 6 6 6 6 6 5 5 } 6 j 0 j 6 6 k t p 5 k k k k p p p p 5 5 j t t t t B t M B B B t p p t u j t j j k j 5 g 5 5 0 5 k 5 5 5 j j j k r G 2.V.)+4+b+o+n+m+g+i+c+i+i+i+k+i+f+i+i+i+0+c+c+c+f+0+g+8+9+8+j+b+8+9+8+b+9+8+9+j+2+j+2+b+",
609" + . + + . + + . + . + + + + . * + + + + + + + + + + > > ' ' * * > > * * > > ' > * > > * > > > * * # * * # # * # # / ~ g g y a ~ ~ ^ ~ { ~ } 5 6 5 6 k 6 5 j 6 5 6 a 5 } 5 } 5 5 6 6 6 0 p j j k 6 k j j k k p p p t t t j 5 p p t M B B M B B B K B t t t p t t u j j j 0 5 5 5 5 5 [ [ j 5 5 j j j p r ..p.V._+8+b+k+k+k+g+g+g+g+i+i+c+i+8+g+0+i+g+8+g+8+b+0+8+j+9+8+9+8+b+j+9+b+j+b+b+9+8+8+b+",
610"+ + + + . + + . + . + + + + + * + + > + > * * > * > > * * * * * ' / ' / / * * > * * ' * * * + * * * # * # # # # # / * ~ ~ ~ ~ ^ % ] ~ [ { } [ 5 6 5 5 : 6 5 6 5 0 } 6 6 5 [ 5 0 j 6 j j p p j p k k p 6 k k p p p B K t t t t B B M K B M t K M K t K B t t K t j u 5 k j } 5 } [ 0 j 5 5 6 : 6 j y p r M ..H.`.}+4+b+i+k+i+c+c+b+g+g+c+i+8+g+c+0+b+g+b+c+e+e+0+9+9+8+b+8+b+6+7+b+4+8+b+b+2+9+b+",
611" . . + + + + + + . + + + . + + + + # + + + + * > * ' + * > * * ' * ' ' ' ' > / ' > / > * * > + * * # > > * * * + * * * # * # # # ~ . & & % ) ) } { [ } 5 } 6 6 5 } 6 } } 5 5 0 } } 6 5 5 j j j p p p p 5 j k k p k p p p M K K K K B B M B t M K M M M K K K K K K K t t t k k j 5 0 [ 0 5 [ [ [ [ } 6 j k k j 6 p O 2.W.'+7+j+i+i+b+8+j+8+8+9+8+b+8+c+c+b+8+5+8+b+8+f+8+8+8+9+8+b+8+b+8+6+9+b+9+9+b+2+4+",
612" + + + + + . + . . + + . + + + > * + > * + ' > + * * ' > ' > ' ' ' ' ] _ ' ' / ' / * > ' ' ' ' ' * * * * + * * * * * # * * * # & . & # = { ~ } } [ [ 0 } } 6 6 } 6 5 } 6 6 5 6 5 6 6 j p p p p p k p p j k i k p B t B B S K M K K M M B M B K M G M K M K B M M M M t t t k j 6 0 } } } } 5 5 g [ [ j j k j 6 6 v O p.V.'+2+b+g+g+0+b+b+8+8+9+b+9+9+8+8+b+8+8+b+b+b+b+9+8+9+7+7+9+b+9+b+4+4+b+b+b+j+4+",
613". . + . + + + + + + + # + + * + + + + * + > * > ' ' ' ' ' _ _ ] _ _ _ _ ' _ ' _ ' ' ' ' ' ' ' * * * > > > + * + # # # ; $ . & & % = ) ) } ~ { 5 [ 5 5 } } } } 0 } 6 5 } 0 5 5 6 5 p u B t p p k j p p p p t B B B M M K M K M G G G M M .M M .S K S M M S M K B t t j j k 0 5 5 5 } } [ [ } [ 0 [ 5 0 5 5 5 6 v +.H. +4+4+b+b+b+8+9+8+j+8+9+8+8+8+9+j+9+c+c+6+8+7+6+b+4+c+b+7+7+b+7+b+j+3+2+4+b+b+",
614"+ + + + + . + . + + + + * * + > + ' > + * * * * ' ' _ ' ' _ _ 3 _ 3 _ ] 3 _ _ ' ' ' ' > _ ' ' ' ' ' ' ' > * + * + + + $ $ $ $ $ & ) { [ } } } : } } } 5 } 5 5 } 5 5 : 6 } 5 6 j k p t K K B p p k p p k k p K K B B G .K S .M K S S K .#. . .K . . .S S S O W G p t t t k 0 0 [ } [ [ { [ } [ } 5 } [ [ 5 [ 6 k O 2.F.~+|+b+b+j+8+9+8+9+8+9+8+9+8+6+8+8+9+8+6+9+b+7+8+6+8+b+9+7+b+2+b+6+b+2+2+2+b+",
615". . + + + + + . . + + + + # + + * * * > + > * * ' ' ' ] ' 3 3 _ d _ ] d d _ 3 _ _ _ 3 ] _ ' ' _ ' _ ' _ ' > ' ' + * + + % @ & $ % ) { [ ) [ : } } } } } } 6 } } 6 6 [ 0 0 5 j k k B p B K t t p r v p t p B t M B K K K S ...S . .S G . . .}. . . . . . .O S S G B p p t j k 6 0 0 ~ 0 } [ { } { } [ } } } [ 0 [ 5 k +.p.`.)+7+b+b+j+2+b+6+9+8+2+8+7+8+4+7+6+9+7+8+7+8+9+2+4+6+6+9+2+b+7+j+2+9+b+b+2+",
616". . + + . + + + + + . + # + + + + + # + + * > > ' ' ' ' _ _ 3 ] d _ d d 3 d 3 _ _ d ' 3 3 3 _ ] ' _ 3 ] _ ' ' > + > + # . & ; ; & = ) % ) { } } [ : : } [ [ 5 [ : : 6 } 6 6 } j 6 j p p t B K p K p p p p p B t K K G M K M .....+.+. .......}.}.}.}.}..... . . .+.O G B r p k p j j 6 [ 5 [ [ } } : : { { ~ } ~ } { } } } 6 r +.F. +_+6+b+8+9+j+6+7+8+7+8+7+b+4+9+6+9+7+8+4+b+8+9+9+2+b+8+2+3+b+7+2+2+4+b+4+",
617"+ . + + . + + + * + # * + * > + + * * > ' ' ' > 3 ] d d 3 d d d 3 d 3 d _ d d d 3 _ 3 3 3 3 _ _ ' _ ' _ ' > ' * + + % % $ % % & ) ) ~ ) } } } : : } } } 5 } 5 5 : g 6 6 5 j 6 p t B v B B B t p p k p p B t B K K K S M ...........+.....}.<.}.<.}.<.<.........S O G t p k k j p 6 [ 5 [ } } { } ~ { } { { ~ ) ) } [ } } ( r O 2.V.>+2+4+b+4+b+2+2+7+6+7+6+6+b+b+2+7+6+6+b+6+4+4+4+8+7+2+b+8+2+4+b+b+2+4+2+",
618"+ . . . + + + + + + + > > > + + > + ' > ' ' d _ _ d d d ] d 3 d d d d d d d d d d 3 3 d 3 3 3 3 3 _ ' ' > ; + . $ + % @ & ) = { } } } { : { { { } } } 5 6 g } 5 0 } k k k r p p B v v B B t K p B p p t B K K G M ... ...+.......<...<.<.<.n.2.<.<.+.<. .S S S O G y p k k 5 5 6 } } [ : { { } ~ { { { } } ~ ~ { { { ~ [ 5 r S p. +<+4+b+4+8+8+8+2+8+4+4+7+7+b+6+7+2+6+4+9+8+6+2+b+4+4+2+8+b+2+4+2+j+4+4+",
619" + + + + + + # * # + > > > + > > > ' ' ' 3 ' _ 3 d d d d f f f d d d d d d d f 3 d d d d d 3 3 _ ' ' ^ ; + ; $ $ @ & % & ) { = : ) { } } } { ( : : } 6 } 6 5 } 5 0 5 j k p p t p p k p p B t B B B t B p K B K K K S ........+.<.}.<.....<.<.<.2.+.2.+.....S +.S M G G r r k j 5 6 } ( ( { } ~ } ~ } { ~ ) ) ) } } ~ { } [ ~ } 5 M ..K.>+<+4+b+3+b+2+6+7+9+7+4+4+6+7+9+7+7+7+|+4+7+6+7+4+7+b+2+2+j+2+3+2+2+2+",
620"+ + + + + * + + # # # * + > * * * ' ' ' _ d d d ] d d d d f o o m f f d d d d m f m m d m d 3 _ / / * * $ ; % $ & = & ) { { : : ) [ } [ { 6 : } : } 5 5 0 j k k t t p B r r p v v p v p v B B M p B B B G S S ......}.....}.}.<.<.+.2.+.<.+.<.+.+.+.+.S G O B r r r k 6 6 } a { } { ~ { ~ { ) ~ { ~ ( = { ) ) ~ { { ~ } g : k S 2.W.>+1+b+3+4+2+4+4+b+4+4+2+4+4+7+6+4+b+7+2+7+6+7+4+7+2+6+2+2+7+b+2+e+4+",
621"+ + + + + + + + # # * * + + * > * ' > ' 3 3 ] d d d d m d m w m m m w m m m m m f m m d d m d _ / ' > ; % $ & $ % $ = & - { } ) { { } } } } } } } } 6 [ } } k 6 k j t t p B r r k k k p p k p t K M K B K G G S K ...}.+.<.....}.<.<...<.+.+.+...+.....+.O S B B M r B y j 5 } } { : { ~ ~ ~ { { = ) % ~ ) - ~ { { } ~ ) [ ~ { [ 0 t .p. +<+2+j+2+b+2+7+6+2+2+4+2+2+6+7+6+7+4+6+7+}+4+7+2+b+1+4+7+4+7+2+2+3+",
622" . + + + + # * * # + * * > ' ' ' _ _ _ d d d d d w m d m m m z z m w m m d m m m m m d 3 3 / / * # ; $ % $ & $ & & & = & = { ) : = ) : ) } } } { } } 6 5 0 0 k j p p k r r v i r v t t p B p B B K K B K B M K S ....}...<.}...}.2.2.}.+.}.....+.+.+...+.S O G M p B r B r 6 6 ( } ) { { ) [ ) ) ) = ) ) { ~ = ) = { ) ) ) [ [ ) } [ k M <.Q.-+^+3+7+4+4+1+6+4+b+6+4+4+4+7+4+7+7+2+2+2+4+2+7+4+2+3+a+2+4+2+2+4+",
623"+ + + # # > > ; + > # * + ' * * ' ' 3 _ d l d d z m m m z z z m m m z z m m o z z m w d _ _ ] ' # . $ & & & % & & = - = { - { { : } } } } } } 5 : 5 5 5 0 j j p r p k r i r v i p t p v p B B M M M M K .S S ..S ..}.}.2.<.}.}.}.2.<.2.....+.S +.2.+...S G O v v r r p k a { } { : ~ ~ ) % ] ) ) % = = & ) ) = ~ ~ ~ ) ) ) % ) ) [ } k +.n.@+]+}+4+2+3+4+2+}+}+2+4+4+2+4+7+2+2+6+4+6+a+4+4+2+7+|+4+2+3+4+2+3+",
624"+ + # . # * * # * > ' * ' _ _ 3 3 d d d m w m m d z z m z z z z z m z m o o m w d l / ] ' ; % $ @ $ % ) = ) & % $ ) = - { : { ) { ) } } } g } } : 6 k p p p p p k p k k k r p p p t t B B M S M S S M S S S .... .}.}.2.<.2.<.2.<.<.2...2.+.G S S ....+.+.B r r k p r k 6 a ( { = { = = ) & % ] ) ) ) & ~ & ~ ~ ~ ) % ) ) { ) ) ) ) } 6 B ..W.]+<+4+2+3+3+4+7+}+7+2+|+}+4+4+4+2+2+4+4+2+2+2+2+a+}+4+2+a+2+2+2+",
625"+ # * # * * > # * * * ' ' _ _ 3 d d d w m m m z z w z z z z m z D z z z z z w f l n / ^ > % % $ & ; ) % { ) ) % % ) & = = - { : { } } } } } } : 5 0 5 j t p k k k k k k k k p p B B M M B M G S S G .S ......+...}.}.<.}.2.<.<.2.<...+.....S +.G G +.S G O v r i k j a i a : { { ~ = { = & = & & & & & & & ~ & = = & ~ ) ~ ) { { ~ ~ ~ { r O p.W.{+2+4+2+4+<+2+2+}+}+4+4+2+3+2+7+7+2+|+4+2+|+4+4+3+3+2+2+2+4+3+",
626"+ + # # + # > > > ' ' _ _ 3 3 d f f f m w m z m z m z z w z z z D z z m w m l l ' ] > $ $ @ & % & % ) % [ ) [ ) % ~ & = { = { { } { : ) } 5 0 5 5 5 p p p p i k 5 j j k p k p p B B M K B .S +...S S S +...}.+.<.}.<.2.2.2.2.2.}.<.2.......S S S O +.G O v k | a a k : ( ( : { ~ = = = = ) & & & & & ) & $ % % % { & $ = { % ) ) ) ~ ~ } a B <.H.&+<+4+1+3+}+}+1+^+2+2+^+4+4+4+1+2+2+}+4+1+2+2+4+2+2+2+4+3+1+3+",
627"> > # * * * * ' ' _ _ d 3 f d o f f o w z z w z z m z z Z z z z z m w w f l ] ] ; ; $ @ $ & ) { ) } } [ } [ ) ) ) { ) } ) [ [ } : 6 5 5 6 p 5 p i p v k k 6 p 5 p p r B t t M G S G K S .S +.......+.+.}.....<.}.2.2.+.2.|.+.<...2.+.S G M G G v v i 6 6 6 a 6 } { } = ~ & ) & = & % $ $ & % % & $ @ ~ % % $ ) = ) ~ ~ % ) ) ~ ~ ~ } j S n. +{+]+3+}+1+}+^+4+2+2+2+}+1+2+|+^+2+2+2+3+2+4+2+}+4+2+1+1+2+1+",
628"* * + > ' ' ' 3 _ d d m f m f o o o x z m z m z z D z z z z z z z w l l _ ' ^ % & % @ % % @ = = = { ) [ [ } } [ ) ) = % [ } [ } j 6 6 6 5 j p k i i p k p 6 6 k p p p p B B M M S ..S S ....S +.....+.....+.....2.}.2.2...<.+.2.......+.G G B M B p i i | } } { : } } ) = { = & & & % % % & & & $ $ & ; % % ~ & & % & % ) ~ = ~ ) ) ~ ~ { g t .Q.{+{+3+^+1+2+<+^+|+2+1+|+^+2+2+}+}+1+}+2+3+1+2+1+2+1+1+1+^+3+",
629"+ + * * ' > d _ d d m z z z z z o z z z z z o z D X z z m z m w d l / ] ] ; & = @ = @ & % & = & = { = : [ } } 5 } [ { ) [ } } } } 6 j k k k p p p 6 i k k j 6 k k t p B p p M M S ..S +.+...+.+.....<.<.+...+...2...<.<.+.....+.+...2.+.O G G B B p 6 6 : } 5 } } ~ : { = { @ & & $ % @ @ % % ; $ & & ) $ $ % $ & % ; % $ & ~ & ~ ~ ) ~ ~ [ t -.w.Q.{+{+3+{+<+<+2+<+1+}+1+1+}+}+}+2+}+}+2+<+2+1+3+^+3+^+1+1+1+",
630"* * * * ' ' d d w m z E E E z z U U z U z z m z z X z w w w d l _ ] ' ] % ; @ = = @ = & ) - ~ { { { { ) 5 [ } } [ ) [ ) } [ 5 6 k p k k k k 6 i 6 i p j p p k p t t M t B G S S ......+.+.+.+.<.<...<.......+...+.<.+.+...+.+.+...+.G O B v v p p 6 6 5 0 5 } { & = = & $ & @ & $ $ $ & $ . $ $ ; @ @ & & @ & $ ~ ) $ % ~ ~ ) ~ ~ ~ ) [ [ [ 0 K m.K.]+<+4+3+^+<+^+<+^+_+}+1+1+2+1+2+1+}+}+}+2+2+1+2+3+<+1+]+2+",
631"* * ' ' _ 3 3 d m m Z E X X X z X D U z z z z z z z m f d d c ] ^ > ; % + $ & = - = & & & = ) ) { ) } } : } } } } ) } 5 : 5 j t t k r a i i 5 k 6 p p j t p B B B B M M M S ..<.<.+...<. . .<.}.<.<.<.......+.+.+.+.+.+.+.O G I G G v v i i 6 i : } } 5 : } = = & ) @ @ & . & + $ & & @ $ $ $ $ # & $ & & = & $ & ~ ~ $ % & ] % ) ) ) ) h c W f.T.W.{+]+]+3+1+1+_+2+<+1+^+^+^+^+1+1+1+}+]+^+1+3+]+<+3+]+2+]+",
632"' ' / _ 3 3 m d z m z E X E Z Z X D X X D X D Y w w w l ] / ] > $ % % & @ & @ $ @ = - = ) = - = = } { { [ : } } { } } : 6 : 5 k p p r k 6 k k 6 k k i k p p G G M B B M M .+.+...}.}...<.<.<.<.<.2.}.......+.S +.+.+...+.O O G v v v e i k 6 : : ( : 5 } : - = = $ $ $ . & . & + + + $ @ @ $ @ & . $ # & @ & @ & $ & ~ $ % % % ) ~ ~ ~ ) ~ 0 N -.q.@+$+{+1+{+{+2+<+_+<+1+3+3+1+^+<+_+2+4+3+^+1+<+3+<+1+1+<+3+",
633"/ _ f 3 f m z m f w z Z z Y Z Z Z D X Q D Z z z f d _ / / ; % & & $ @ & % & & & & = & { { } [ { } = } : : } } } } } } } } 6 6 6 p a 6 a 5 j k k i p B p p B B B M K M M .S ..+... .<.<...+...2.}.2.}...........O +.S G G G v v v v i k | : : ( : - : ) { = ~ = ) $ & . $ $ + % $ $ ; + $ ; ; $ $ & & ; $ $ # & $ & $ ~ % ~ $ & ~ ~ ~ 0 h T e.f.T.&+{+{+2+1+{+^+]+^+{+<+<+<+1+1+1+<+<+<+3+{+3+<+<+<+<+{+<+",
634"3 f f o m z z x o z z z z Z z Y Y Z E X X z w d l _ ] % $ $ & @ @ $ @ & % & % & & & ~ = - { } ) ) } { { ( : : : 5 5 } [ } } } 6 6 5 k k k k j k k r r B B p M G S G K G S .....+.<.+.<.+.+.<.+.+.}.+.}... .+.S S S S S O G v B v k k i 6 6 { - - { - = = ) = & & & $ & & @ & # + $ % $ $ # + ; + $ ; + ; % % $ ~ ; ; ; ; ; ] ~ ~ ~ ~ / g 0 T -.3.s.W.]+]+{+3+]+^+]+4+{+^+]+_+<+<+<+3+^+<+1+<+{+]+2+]+1+]+]+",
635"f f o z D z U x x D D D z Z z Z z X Z E Z w l / ; % ; $ & & & & & $ & = = & % % ) ) ) { } { } { } } { } [ a } 5 [ 5 5 5 5 : : } 0 6 6 6 6 5 k p p p B B B B G K S G S M ... .....+.+.<.+.+...2.+.<.+.+.<...+.+.S O S O G v p i p p p k 6 { - - = = = = = & % $ & . . . + $ $ $ & $ ; % $ $ % ; ; % $ > ; ~ ; ~ ] $ ^ ~ ~ ~ h g C T e.-.q.T.&+{+]+)+3+3+{+]+<+<+4+]+^+^+]+^+1+]+<+]+4+^+<+<+<+3+]+",
636"m m z z X D D E x D D X z Z z X z z z Y w d ^ ^ . & @ = = = & & = = = ) & = { ) { } } } } ) } } 5 [ 6 5 a 0 5 5 6 6 6 : } } : 6 6 j p k p B t M M M B G S S S S S .S ....+.+...+.+...+.+.+.+.+.+.+.S S O S G O G B p i k p i k 5 : } & & = & = @ & & $ @ $ . & & @ + + ; ; + ; > ; ; ] % $ $ $ ; ; ; ; ; ; ; # ; ; $ ^ ~ ^ ^ ^ ~ h C P ^.-.i.f.m.T.)+]+<+]+]+^+{+]+<+<+]+<+<+]+{+^+]+}+]+3+]+<+]+<+<+]+",
637"o z z z E Q E D E D D X X Z D Z z z Y w w l # . @ % & @ & @ - = = & % & = = { { { { } } } } } [ { } } k 6 k j 6 5 6 6 : } [ } } 5 5 6 5 k B p t M M M M S S .S S S S S +.+... .....+...+...I +.+.S S O O O G O G G B v k i 6 6 k k 6 : & & & @ & $ @ . @ . . . + @ + + + % + % ; ~ ) ] ] ] ; + ; ; ; ; ; $ # ~ ~ ] ; % $ ] ] ^ h A A T T ^.-.f.q.T.%+{+{+{+<+]+]+^+<+)+_+]+{+^+2+]+<+1+<+<+1+{+<+]+]+<+",
638"x x D U Q Q Q Q D D X X X Z z Z z z z w ] ^ $ . $ . @ @ @ = = = = % % = = ) { { : : { [ } } } [ : 5 5 6 k k 5 6 6 } 5 6 } } { } : 5 k p p B B B M K K . . . .S S S ..S ..+.+.+...S ..S .. .+.G I O O G O I B G B v e 6 6 6 6 | 6 : } { & & % & % $ $ $ $ . $ $ $ & + $ + % > % + ; # ^ ~ ] ; ~ $ > > % > ; $ ~ $ # ~ ^ ^ ~ ~ ^ h h c A ~.:.>.^.-.i.f.T.++$+]+{+<+{+]+]+<+]+1+<+]+]+1+]+{+]+]+]+]+3+{+]+]+]+",
639"U x U D D U Q Q E D E z Z z z X Z z w d / + @ @ . . @ @ & & = & ) ) ) } = } ) } : : : } : } : { } k a 6 6 a ( a 6 5 } } [ } 5 5 j p p B B B K B S S . ... . .S O S S +.+.+...+.+.S +.S S S +.G G v v p v v v i e | | : : : } : { { = & % @ & @ $ $ . $ . . + > > ^ ^ ~ ^ ; ^ ^ ; ; ; ; + ; $ $ ~ # ~ # ^ ] ] ] h c R ~.T -.^.^.^.-.h.q.T.&+{+]+{+]+]+_+<+)+<+]+<+3+)+1+]+3+{+<+<+{+3+]+]+]+",
640"z x &.D Q z X Q U X X D U X Z z R w l _ ^ + + + . & = = = { { } } } } } } : } 6 6 : 5 6 a 5 6 a a : : ( : } 0 5 } 0 [ 5 j k B B t B M G S . . ...+... .S S ..S +...+.+.+.+.S +.S S S G v v i i i p e i 6 | ( : 6 : { { - = ) & = @ % $ $ . @ . . $ . . $ . # + + + ; ; > ; ; ] ~ ~ ; ; > % $ $ ~ ; ; ~ ; ] ~ ] h h C A T T ^.-.-.>.^.-.-.q.T.%+]+]+]+]+]+{+]+]+<+]+<+]+]+<+<+<+]+]+]+]+]+]+]+]+",
641"x D x U x x Q Q E Q Q U D Z z z w h h # . $ + . . $ % = { { { { { } } } } : : 5 5 0 } } a 5 } a 6 5 : 6 [ } ( : 5 } 0 5 0 p k p M M M G G G +...+.<.<.........+.S +...+.+.+...S +.+.S G G v p i 6 6 i 6 i 6 ( ( - ( ( { ~ ( = = = @ @ = & @ @ $ . $ $ + + $ + $ # > + + + + > ^ ^ > > > ^ ^ # ; $ # $ $ ; % ; ^ ^ ] ^ g h A P T T ^.-.-.^.-.>.-.i.i.q.Q.&+{+{+{+]+]+)+{+]+)+]+<+<+]+]+]+]+{+]+<+]+]+]+]+",
642"Q Q x Q x x Q Q Q Q D x z w l h l ; $ . . @ @ & ) = ) ) { { : } } 0 5 5 0 5 6 6 } 5 a g a : 5 } 6 } } : : 6 5 5 j u p p M M M M M S S ..+.+.<.+.<.S ......+.S ....S S ..+.G O G G v v 6 p 6 | 6 : | ( = & { = { ( & ~ & @ & @ . & $ $ $ + . + + + $ + + # + . + $ $ $ # ; ] ] ] > ^ / ] ] ; $ ~ # ~ ; ] ^ ^ ^ h h C C R T :.>.V -.-.^.>.>.-.#.e.q.T.%+]+]+]+]+]+]+{+]+]+]+]+)+<+)+<+]+]+]+]+]+]+]+]+",
643"Q Q &.x Q x X X Q Q x z w d l ] $ # . $ . + @ . = = ) { { } : } } 0 5 6 6 5 6 : 6 6 } : : } } : } [ : : } 6 6 p p p t t B M G S S S .. .+.+.+.+.<...+.+.+.+.S +.S +.+.+...S O G p v 6 e 6 6 : : : : { - = = = - ~ & & & $ . . & . $ ; + + + ; + + # + ; $ $ + . . & # ; ] ] ; ] ] ] ^ ~ # # # ; ^ $ ^ ^ h h n V V T ^.T ^.-.^.>.-.e.-.>.^.e.i.q.&+$+]+{+{+]+]+>+]+]+{+{+]+]+]+]+]+]+{+]+]+]+]+&+",
644"Q Q x Q U x U Z U U x o l ^ # $ $ $ @ @ + . $ @ = ) { } { [ } 5 5 [ 5 k 6 6 6 a 5 a } a } 5 0 6 a : } a } j j p p t K K K M S K S +.S ..+.+.+.+.+.<.+.+.S +.S G S O S G G O I v v 6 i 6 | : : : { - { ) = = & = = & @ & & & $ @ $ $ $ $ % % + + + $ + # ; > # # $ + # . ] ; ] ] ] > > ] * ~ ~ ; ^ ; ^ ] h h C A T T >.T -.^.T -.-.>.-.-.-.-.-.e.f.q.T.$+%+{+$+{+]+@+)+@+]+]+]+]+]+<+]+&+]+{+]+&+]+]+",
645"Q Q &.x x w '.z U x w l _ * . . + + @ @ @ & ) ) ) ) } : } 6 j 5 6 k 6 a } { ( a } a : } 5 : 5 6 } k k p t B B K S K S S M G S +.+.+.+.+.+.+.+.+...+.S S G O O O G G O p e 6 i 6 : : } { - ( - @ & & = = & & . @ % . . + . + # $ $ . # . + > ^ ; ; # $ # + ; ] > ^ ; ; ; > ^ * # ; ; ] ] h c c R T ^.T W -.T >.-.-.^.-.-.-.-.e.>.-.e.i.T.%+$+]+]+{+]+]+<+]+]+>+]+@+]+]+]+]+$+]+%+]+]+&+",
646"Q U Q x '.w !.w Y x w l / $ + $ % @ $ % & & ) ) [ { ) : : : k k 6 6 5 6 5 6 6 : [ } 6 5 6 6 6 a 6 k p p t B M S . .S S S ..S ..+.+.+.+.+...+.+...S O G B v B v v B v i i : | 5 : : = ) & ~ = = & $ $ = = @ & . @ $ @ # $ . # . . # # + ; ; + ; ^ ^ ; ; $ . ; ; ] $ ^ ^ ; > > ^ ; ^ ^ ^ ^ h c R A P T T >.W -.T >.^.W -.-.^.-.-.-.^.^.i.f.q.%+%+$+]+]+]+&+@+<+]+<+]+]+]+]+]+]+]+{+%+%+%+]+",
647"U U w '.n V n V w w l / + # @ @ $ + $ % = = { { ~ ( } 5 6 6 6 6 5 5 5 } a 5 6 5 5 } 5 6 a 6 6 k t B B M M S S S ...S S S S +...I +.+.S +.S O S +.G G v p v s v p i 6 6 : : : } { { = = & . @ @ @ $ @ . & @ @ . . + @ $ + # @ . # # + ; ; > > ; > # # # # # # ^ # ; > > ] > ^ ; ] h h c A P T T W -.W ^.T -.T -.-.T -.>.^.-.-.e.-.e.e.i.T.&+%+%+&+]+]+]+]+&+&+]+@+]+%+]+%+]+%+{+{+%+%+",
648"U R V y -.W W y n n / # . + + . . + @ @ @ & $ % @ % = = = = { { : } 5 6 } : } [ 5 5 6 5 6 5 5 k 6 6 a 6 k p B M B M G S .....S . .S S S ..+.I O S G S O S G G B r e a e i i i 6 : } : ( { - - & & & $ $ % $ $ @ & . . $ & $ + . . $ . # . + . . + + > ; ] > ; > ; $ # $ ^ ; ^ # ; ; > ; > ] ^ c c C C R T W T W -.W V ^.T >.T -.>.-.>.>.^.>.>.-.e.i.q.N.&+&+{+%+]+$+$+]+]+]+]+]+]+]+:+$+]+]+/+%+%+]+",
649"n V r O s I O G W h ^ # # . . . . . % $ $ % $ % % = ~ ) & { = = } [ } } : } 5 j 5 k 6 k j 5 a k k r k k p B K M M G S S +.........S S S +.S G S O O G G G G G B k k : i 6 i 6 : : ( { = ~ { = & & $ @ & @ $ $ . + ; . $ . + . $ + + + + + > + > > ] ; ^ > # # ; ; > ; ; * > ] > c _ c A C A T P T T W W W W -.W -.-.-.^.^.>.>.1.>.6.-.>.^.h.f.q.T.*+]+]+$+]+]+$+&+]+@+]+&+]+&+/+:+&+]+%+/+%+",
650"r q 8.q 8.I I s r g ; @ . . . . + . @ @ @ & ~ % & = = ) = ) - ~ : { } { ( } } 5 5 j 6 k k k k p j p r p B B G M S S S O S S S ....+...O O O G G r v v B B B B v k 6 : : : : : : : ( { { { = = & $ $ $ $ % + + # . @ $ + $ @ . $ ; # + ; ; + + ; ; + $ ; > ; ^ > # * ; > > > ; ; > ] ] c c w A T W W T -.T >.W -.T ^.V W -.W -.W -.>.>.>.^.^.e.^.e.h.q.%+%+%+%+%+%+]+]+&+]+&+]+&+]+$+&+&+&+]+%+%+%+",
651"s s H H H H H I v : } . . . + . @ & = ~ % ~ = = & = & = & = ) { - ( { : 6 6 k 6 6 k j k p j B p t t B M .S S S S G +...+.....S S S S M G B B i v i v i i k 6 ( { ( { ( ( : { { = = $ & = @ & ; $ $ # + + $ + + ; $ + + > ; + + + ; ; > ; # > > ] > ^ ; ; > ; ; ; ; > ] 3 c l A A P A T W P T P W T T W T -.-.V -.-.-.-.-.-.-.>.-.-.e.-.i.q.q.%+]+]+%+]+&+&+]+&+]+@+]+&+]+]+]+%+%+%+%+%+",
652"H H H J 8.J F F s : { $ + . + + . . . @ = = ) ) = & & = = = = & ) = { { } 5 a 6 6 6 p t p B B B G M G G S .S S S .G S G S ......S S G M B r p i i i i i i a 5 } { { ) = { - = = & = $ $ & $ . + + ; + + + & $ @ . > > + ; > ; # ; > > + + + # ; ; ; > > ^ / + ; > > > > ; ] ] c A c C A P P T T P T T W W >.W T T -.T -.^.^.^.-.-.-.e.^.e.0.h.6.q.q.N.*+$+%+]+%+]+%+%+&+%+]+%+%+%+%+]+]+%+%+X.",
653"H J J L L J J q s i { & . . . . . + + % & & ~ = = ~ = ~ = = = { = = = ( ( : : a a p j B t K t M B G M S G S S S S G G G +.S S S S S O G G M r r 6 i 6 6 e ( 6 6 : ~ { - { = & & = = & & & . $ @ % . ; + + + @ . @ # ; + ; ; ; ^ # $ > ; + + > # / # ^ > ^ > # ; > > ; ; > ] ] ] l h C R T C A C W T T W -.W W -.T ^.-.T -.P W >.-.^.>.^.-.-.-.^.e.e.i.X.T.%+%+/+%+$+%+]+&+]+&+%+]+%+%+%+%+%+%+%+X.",
654"J L L J L J J F s i { = & . . + @ @ & & & ) & & = = ~ = = = ~ = = = ( : } : 6 p t K M M M M M S G .S I S +.S S S G G G S S S G G r r B v r 6 6 a ( : : { } : ~ { = { - = @ @ @ & @ & $ $ $ + + + . $ + + + $ > > > + ; ] ; ] ; ; . ^ ; # ^ ; ; ; ^ # $ + > > > ] _ l c c C C A A C W y W W T T T T T W W T -.^.-.>.-.T -.^.-.>.e.e.e.^.^.e.i.q.N.%+&+%+%+{+*+@+%+%+]+%+&+]+%+%+%+%+%+X.X.",
655"J L L L J J J q F i : { & @ . + + . $ @ % % & & & = ~ . = = = - ~ { = { { 6 6 6 p M M M M M M G S O S S G +.G +.+.G S G M G G G G B r v v a k a a ( : : : : : { { ~ { & & = & $ . $ $ . # + + ; + + . . . + ; + > > % ; ; > > ] ^ ^ > > . ; ] # > > > $ # # # # > ] ] c h C C h A C C y C T y W W T T W T T >.W W W >.T >.-.>.-.>.^.>.^.5.0.5.0.e.i.T.T.%+&+%+%+&+%+@+&+%+%+%+%+%+%+%+%+X.X.x.",
656"L L L L L J J F F e i : = & @ @ . . + . . @ @ $ % $ & = = ~ = = . - & & ~ { { 6 6 k B M M M G S G G S S S .G S O G S O S G M G S G O B r i e r k | : ( ( { = = = - - & = @ @ & @ $ $ . . @ # + + + + . $ + ; ; + + ] > > ; ^ ; ^ ^ ^ ; > # # ] ; ; # ; $ . . # > > / h l l l A C C A n y y T C T y W V T >.W >.T -.W -.W ^.^.>.^.-.-.e.^.5.e.0.e.i.i.X.T.%+%+%+&+]+%+%+%+&+%+@+%+%+%+%+%+X.X.x.",
657"L L L J L J H H F s e ( - @ . . $ @ $ & & & & & & & { { ) ~ & & = = : 6 6 p B G S S M M S S S G G K G G S +.S S G G G G G v p p a i 6 6 | 6 ( ( - = = = = = - = & $ . . $ $ . + + % ; + + + + $ + + $ > > > ; ^ ; / ^ ^ # # ; ; $ ; > * ; # * # # # # ] d c h c C h C c C V y y y u W V W W W W T T -.W -.-.V >.-.>.>.0.>.-.e.^.0.5.e.u.u.N.X.%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+X.x.x.",
658"L L L L J L J H q q e e , - @ @ @ + . & $ # = = = ~ & $ ) ~ ) ~ = = ~ { } k j B G S S G G G G G G G G G G G M G G S G G B v v v i k 6 | < ( < ( = ) = = = @ = & = . = & $ . $ + $ $ + + + $ + + + ; + ; + + + + ; ; ] / > > ^ ^ ^ ] ^ / > > ; # ; * > ; # * * * * ; ^ h h n y g C u C y y V V C V V W V T W -.W T W V -.^.T -.#.>.1.~.e.^.e.e.i.h.e.u.q.X.T.*+%+&+%+%+%+%+%+%+%+%+%+X.X.X.h.x.z.",
659"L L L J L J H H H q q 7 4 , - . . . @ . + . & # ~ { = ~ & & & { = } { { { = = { 6 k t M S S O S S M G M .G B B B B M G G G v B r i a k a 6 : } - - - - = = ~ = ~ & @ @ @ @ . . @ $ $ . . . . + + + + + $ + ; ; ; + > > $ ; ; ] > ] * ^ ; ; > ^ ^ ; # ; > ; > + # * * ' * * # / ^ h / g n C h C y C C y y y T y V W W P T W -.^.-.>.>.>.>.^.^.>.>.0.e.e.e.6.0.i.h.i.N.X.%+%+%+%+%+%+%+%+%+%+%+X.@+@+X.x.x.a.",
660"L L L L L L J J H H q b 1 ! , - @ @ . @ . & & % [ ~ ~ ~ & & { { ) { ~ ~ = { : k B B G G S O G G G K M M K M G B B B B B v p p e i 6 | 6 ( : { = = = = @ = = @ . # @ . . $ @ $ @ $ + ; > + + + + ; > > ; ; + * # + + ; ^ ] # # ^ ^ > > ] ; > + # + ; * # > * ^ * / # * * ^ g g g h y n C C A V C W C T T T T -.P T T T V ^.W -.^.>.^.^.e.^.^.e.u.e.x.x.h.X.N.X.X.%+%+%+%+%+%+%+X.X.%+X.X.X.x.x.z.'.",
661"L L L L L L J J L q H q b ! ! , @ @ @ . @ ) [ c 0 [ ) ~ & ) } } } ( { { = 5 p B M S G S O S G .M K G K B B B B B p v p i 6 6 i : : : : { { = = = & # @ # . @ @ & @ @ @ $ . + + + + + ; + + + + + * ^ ] ^ + $ + ; ; ; ] # ~ ^ $ # ; # ^ ; > # * > * * / * / / ' ' * ' / * / / / n C h C C A C y y C T T T T W T -.W -.-.>.>.>.>.-.^.^.^.e.e.e.0.e.x.x.i.x.u.X.N.%+X.%+X.%+X.%+%+%+%+%+X.@+x.x.z.z.c.",
662"L L L L L L L L J J 9 q 9 1 ! , - @ . @ . @ & } 0 0 6 { = = ) } 5 5 : { { ( 6 p B S G G S G G G S M G K B K B B v i i i 6 6 | : ( : { : - ~ = { & & & % ) & . # . # # # . $ @ . + $ + > + ; > ; ; ; > > ] > # $ + + > + ^ ; ^ ~ ; ; # # * ^ ; # / > / * / * * _ _ ' ' ' / * / / h ^ n h C C C y y W y C T W T T T T W W -.W ^.>.>.>.>.^.-.e.>.e.e.i.i.h.u.u.u.X.X.T.X.%+%+%+X.%+X.X.X.X.X.x.x.g.z.D.c.",
663"L L L L L J L L L L J J q b ! ! , . @ . - { 6 6 5 } ~ ) { 6 } 5 0 g ~ { 6 p G M G K M G G G G B B B B B B p e v k k k : : : : { - & ) = = & ~ & ) ) % ; $ $ . + $ # . + + % % > + + ; % ; ] ^ > + ; $ $ > ; * ^ # # ^ ; ; ; ^ * * * * > / / / / ' ' 3 _ / / / * / / ^ h c l n y y C C C u C A W V W W -.T T >.W ^.>.>.-.^.>.e.e.e.i.h.i.u.i.x.i.N.N.X.%+X.T.X.%+X.X.%+X.X.X.x.x.'.D.c.C.",
664"L L L L L L L L J J 9 J 9 q 9 2 , , @ @ . . @ = : : a : { & ) { 6 j t 0 0 5 ( 6 i B G G G B M B B B B O B B B v i i k 6 6 : { { & { ) ) = & = = & & % ) ) [ ] ; ; + + . . . . @ . + > > > > ] % > + ; > ; $ ~ * ; # + $ > > ; > ^ # * / # ; > > * / / ' ' _ _ _ 3 _ d 3 _ / / / ' / ' / c h h C C C T C T W V C V T T V ^.^.>.T ^.>.>.>.-.e.>.e.6.e.6.h.h.u.h.x.X.X.X.X.%+X.@+X.%+X.X.X.X.x.z.g.D.z.{.y.",
665"L L L L L L L L L L J L J 9 9 2 ! - - @ @ - : : { = { = { 5 j t t t 5 5 6 i v B B B B B B v v v v p v k i k 6 6 6 : { { { = & & @ @ & & & = ~ & ) ] [ ) ) ; $ + . . & & . $ # + > % + ] % > > + + > ; ; ; / ; * > > ; $ ; ; ^ # # ; ; ^ * > > / * / ' _ _ _ 3 ] d _ _ 3 3 3 3 _ _ ] / ^ l h C A C C C V C T T T T -.T V >.T ^.>.^.0.^.e.^.e.e.i.h.u.u.x.q.u.i.i.N.N.X.X.X.X.X.%+X.X.X.x.x.U.'.D.&.y.c.",
666"L L L L L L L J J J J q q J 9 q 2 , - @ @ . . . @ - - { = = { : a k B t t j k 6 6 i k v B v v v i p i i i i i 6 6 6 : : : { = = = % % $ @ @ @ @ @ & & { [ h ) ) % + + + + . + ; + > + ; ; % > % + % + ; # $ ^ ; ; # > ; ; ^ ; $ / ^ # # * / / * / * * / / _ _ _ 3 3 3 d _ _ _ _ _ 3 3 _ ^ l h h C C C V V y V P R T V ^.V ^.>.-.^.-.-.^.i.^.e.6.i.i.e.u.u.x.u.u.X.X.X.X.%+X.X.X.X.X.X.x.x.g.z.'.D.c.y.c.",
667"L L L L L L L L L J L J J q J 9 9 ! , - @ @ @ . - @ - & & ) { i v r K M t j 6 6 6 6 i i i i 6 p 6 i i i | i : : : : : - = = = & & . @ @ @ @ = = ) [ ~ ) . + $ # + ; + ; % ; ; # ; ] ; > + ; $ ; # ~ # * / ; ; > ; ; # # ; # * / * * * / / / / / _ _ _ 3 _ ' 3 ] d 3 3 f _ _ _ _ _ / / l h C C C y V T T ^.T T V T ^.V ^.-.-.e.>.e.e.6.h.h.h.u.u.h.x.X.i.u.u.X.X.X.X.X.X.X.X.x.x.g.z.z.c.D.&.y.7.",
668"L L L L L L L J L L J J H J 9 9 9 2 ! , - . . . . @ @ @ @ & = : 6 p B M M K j 5 6 : : i | i i 6 6 5 6 | 6 : | : { : - = - = @ & ; $ % . . . @ . . @ @ % ] ~ & + + ; + + . + ; > > % ; $ ; ; ; ; ; > + . $ ; # ^ ; * / # # > > / * / * # * ' / ' _ _ ' / _ _ _ 3 3 3 _ d 3 3 d 3 d 3 _ l _ _ _ / l l l C C C C R A T T T ^.W V ^.^.^.-.6.6.i.e.6.x.e.e.u.u.i.x.x.N.u.N.X.X.X.X.X.X.X.x.x.U.z.&.c.c.c.c.c.c.",
669"J J L L J L L J J L L J L J J J 9 b ! , - @ @ . . @ . @ @ = { a r v B M M t p 6 : : : | 6 6 i 6 6 6 | | : { - - = & = . @ @ $ % . & @ $ @ @ $ . = & $ $ + + + # + ; % ; $ + ; . ; ; > > > + ; # # # ; ; ^ > ; / # ^ # ; / * / / ' ' _ ' _ _ _ _ _ _ 3 ' d 3 _ _ _ _ 3 3 _ 3 _ 3 h d _ 3 / ] l n n C V A T :.T V -.V -.^.^.-.0.-.e.e.h.h.h.x.u.e.i.x.u.N.x.Y.N.u.X.X.X.X.X.x.x.g.z.z.c.B.c.D.y.y.7.",
670"J J L L L L L L L J L J 9 J H 9 L 1 b ! , - . @ . @ . @ @ = - < e v G B G t p 5 } - = : : 6 6 | 6 : : - - { = = = & = = # & . . . . . . . . . @ @ @ . @ + . + > ; ; $ . $ # ; ; ; ; ; # ; # # # # # ^ ^ ; ; # # # / # / > / / / _ _ 3 3 _ _ f 3 3 3 3 3 _ l 3 _ d d l _ 3 3 3 d _ d _ ] l l n C C V R T R V V -.V ^.^.>.e.e.e.e.6.6.e.x.x.u.u.i.u.u.u.u.Y.N.X.X.x.x.x.x.x.z.z.z.&.C.c.c.c.c.A.",
671"H H J L J L L J L L L L J L L q J q b 1 ! , @ . . . - - < i i B G M p p : } ) - - : : 6 | : : = { = = = & = . @ @ @ @ . $ @ @ @ @ $ . . . # . + + ; ; + ; $ + + ; $ # $ ; ; > ; # . # ; ^ # ^ ~ $ * > / # / / > / ' / / _ 3 3 3 3 3 f f _ 3 f d d 3 d d 3 3 3 _ f l 3 _ _ _ _ _ d _ _ / h l C n C T V V -.V ^.^.^.6.^.>.0.0.i.e.u.e.e.x.x.u.u.u.u.X.u.X.X.X.x.Y.x.g.z.z.c.D.B.c.B.c.C.7.C.",
672"J J J J L L L L L L L J J J J H 9 J 9 9 1 , = @ . . . @ - - | i i v p i k } { = - = - { : : ( : = = = & % & . $ . $ + + . + + # . . . # + # + # + $ . . # $ # # > # # ~ > ; * > > > > ^ ; ^ ; # ^ * ' ' _ _ _ _ _ 3 3 d f f 3 f f f d d m d f f 3 f f f 3 _ 3 3 3 3 d 3 3 _ d _ ] l h n V V V V -.-.V ^.^.^.6.e.e.0.x.h.u.u.e.x.x.u.u.u.u.Y.x.X.x.X.x.U.z.z.z.c.c.c.c.D.c.B.B.C.C.",
673"L J J L J L J L J L L L L L L L J J q q b | , - @ @ . . @ . - < < i e i i 6 : { ) = = - { - { - = = = = & $ + + $ . $ % . . . + + + + # . + . . + + + + + # # . $ + ; ; ; ~ # * ; / $ $ / > ^ ' ^ # / ' ' / ' _ _ _ 3 d d d d d d m m d f f d m f f f f f 3 f 3 f f f l _ l _ 3 3 d _ _ l / l n n C V V V V ^.^.^.^.6.6.0.6.e.e.6.x.x.e.u.x.u.Y.u.u.x.x.x.U.U.g.z.z.D.B.B.c.B.c.B.c.C.C.C.",
674"J J J J L L L L L J L J L 9 L H q H J 9 q 7 , - @ @ . . . . @ - - , | | 6 : : : = & ) % & & - = = = = = & @ & @ . . + . + + + . . + + + > + + + $ ; # # > > + > ~ ^ # ; * # ~ # > ^ > / * * * / / _ _ d _ d d d d d m d m d d f m m d m m m f f f f f f 3 f f f _ f l 3 _ d _ _ / l l n n C V V V V ^.-.e.^.0.0.6.x.6.e.e.x.x.u.u.u.u.u.N.Y.x.Y.g.z.z.z.B.c.B.B.c.C.B.B.B.B.B.B.",
675"J J J J L L L L L L L L L J L L L J H H q q e , - . @ @ . @ - - ( < ( 6 } { { & % @ @ & @ & & & & @ @ $ . . $ + + + + . + # + + + # + + ; ; + + # # + + $ ; ; ^ # / / ~ ^ * # ] ' * ; * / / _ _ _ d _ d d d m d m m m m m d d m m f m f m m m f f f f 3 f _ f f 3 f _ 3 _ f 3 3 / / l h n n V W W ^.^.^.0.5.0.0.h.e.x.x.u.0.x.x.x.x.x.x.x.x.U.z.z.z.z.B.B.B.B.B.B.c.B.c.C.C.B.",
676"L J L J L L L L L L L L L L L J J H J q q q q | - = @ . @ @ . = - - , - { { ) = = % & = @ & @ @ & . . . . + + + + + + + + + + + . . + + + # + + + # # ; ; + # / ; ; ; # * # ^ # / > ' ' ' ' ' / _ _ _ d d d d d m d m z z m z m d m m m m m m m f o f f f f f f f 3 f f l 3 d 3 3 3 _ _ _ l l n n n V V W -.^.0.0.0.0.e.0.1.u.u.6.h.x.x.x.x.g.g.z.g.B.B.c.B.B.B.c.B.B.B.B.B.c.B.B.",
677"L L L L J L L L L L J L L L L L L L J J H q q e | : = @ + @ . @ @ - - { = = = = @ @ . . @ . @ . . + + + + + + + + + + . . . . # + ; + + > . $ $ ; + # # ; > > ; / # ] ] ^ # ^ * > * / / ' / / _ _ 3 l 3 d f m m f o m m w z m z z m m m m m o o o o o o o f f f f f f 3 f f f f f f f d 3 3 _ l n n y y V ^.V ^.e.6.u.0.u.e.x.6.x.x.9.U.g.g.g.x.a.z.B.c.C.B.B.B.B.B.c.B.B.B.L.C.B.",
678"L L J L L L L L L L L L L L J L J J H H H q F q v : : - = + . @ = - = { = & & . @ . & + # . + + + + + + + + + + + . + . + + + ; > + + $ . $ # ; > ; ; ] ; ^ # > > / ; / * ^ ' ' ' _ _ _ 3 _ 3 l f d m m m m w o z z z z D z m z o o m m o o o m m m m f o f f o f f f l f f 3 _ l l 3 l _ n n n n V C V V ^.^.6.6.6.6.6.9.9.x.g.9.g.z.z.z.z.a.c.c.B.c.z.B.c.B.B.B.c.B.B.B.B.",
679"L L L L J L L L L L L L J L L J L L J J J H H q F s i : = @ + . . $ @ & & @ & = % @ $ @ + + . + + + + + + . + . . # . # # + + + > + + ; # # ; * ; ; ; > > > ] $ / ^ > > ' * * ' ' _ _ _ 3 f f f d d d f m m z z x x w z D D z D D o o f o m m m o o m m o o f o o m m f o o f o f f f f l f l / / n n n y n n V V -.^.6.9.9.9.[.g.g.z.z.'.z.'.z.B.c.C.c.z.c.c.B.c.B.B.B.C.B.R.z.",
680"L L L L L L L L L L L L L J L L L L L J J H H H F q e i { = @ . . @ & & & % & & % @ @ . . . . + + + + + + + + . # + + . + # + + $ $ + + + > + + # ; > > > ] ; ^ * ^ ; # # * * / / / ' _ 3 3 _ 3 3 o m m m w f z m m o m x w m z z z z z z x z x m z z m x o m f o m o f o z o o o o o o m f f f f f f f / _ l n n n V n V V !.6.!.(.(.a.a.a.a.B.c.z.z.c.B.c.C.B.B.B.B.B.B.B.B.c.B.R.B.",
681"L J L L L L L L L L L L L L L L J L J J J J H H F F F s 6 { & . @ @ & @ $ $ + + + + + + + + + . + . + + + + + + # # ; + $ + > ; ; ; > ; ; ; ^ # # > ^ / ' > / / / ' _ _ _ 3 3 f m d m m w m z z w x z o m x o m z z z D x D D x x m D z m z o x m m x x o o w o o o x o o o o f f f f f f f l l n o l n !.w R !.!.,.,.a.a.a.c.c.c.B.c.B.B.B.c.B.c.B.c.B.B.a.B.z.B.z.z.",
682"L L J J L L L L L L L L L L J L J L L J J J J H _.H F I v 6 = @ + + . $ & @ & & $ $ + + + + + + + + + + + + . + . . . . . + + + # # + + ; ; > ; ; ^ ^ * / # / ^ * > + ; / ' ' ' _ _ _ f 3 f f f f o o z z w z x x w o w x x x z z m z z z z D D z m D z z z D m D D x x x o x x w z z o x o w o o f f f l f l f f w o o w U U Y ,./.=.c.c.c.B.B.a.L.B.L.B.R.B.B.B.B.B.B.B.R.B.B.B.B.B.",
683"L L L J L L L L 9 L L L J L L J J J J J J J J H H H F I s p { & . . + + @ ; @ & + . + + . . . * + + + + + + + + + + + + + + + + + + > + ; ; $ + ; ; # $ ^ ; $ ^ # # # * * / ' ' ' _ 3 3 d f f f f f o o o o z z o w x x x x z x o x m D m D m D z z z z z D x x x x m z x o x x z z x z x w x o x o x o o f f f f f o w w x U w Y U *.].c.].a.a.c.R.c.B.a.R.L.B.B.C.L.C.L.B.B.R.R.B.B.B.B.",
684"L L L L L L L L L L L L L J L J L J L J L J J J j.J _.F F e : % + + $ $ @ + + + + + + + + + + + + + + + + + > + > + > > + ; ; * # ; > > > ^ # ~ ^ # ; * / / * ' / _ _ _ _ 3 f f m m z o o o m x x x x x w x x o x z x x x o z m z z E D D z D z E D E D D D D D x x x D D D D z U x w z z z o x o o f o w z z U Y U X X %.*.].].c.c.c.C.a.B.R.B.c.R.c.R.B.C.L.L.B.R.R.R.B.B.B.B.",
685"L L L L L 9 L L L L 9 L L L L L L J L j.L J L L J J H H F s 6 ) % + + # @ & $ . # + + . + + + . + + + + + + + + + + + + + + + + + # + ; > * ; ; ^ ; ; ^ ~ / # # / * # * * / / _ ' _ 3 f f o o o m o z o x x x x o x x x w x o o x o x x x o D x D z z z x o D x D x Q D D D D U U z x E D z D U U x x U z z z w x o z z z z U E X U *.*.&.*.c.c.c.c.c.c.R.].R.R.R.B.R.c.L.c.R.R.R.R.R.R.O.O.R.",
686"L L L L L L L L L L L L L J L L L J J L L j.L J J J J _.F q e : @ + + + . . @ . + + + + . . + + + . + + + + + . + ; + . + > ; ; # > ; > > > / # # ^ # # / * * / _ _ _ _ _ 3 3 f f o o o z m z z D o x o x o x x x o o x x x E o o o x o D z z z x x x x D D x E E E D D D D E E X D X z U z E D z z z z z U U D U X X ;.X ;.;.;.c.c.c.c.c.B.B.c.R.c.L.].L.B.L.c.R.L.c.R.R.R.R.R.L.R.",
687"L L 9 L L L L L L L J L L J J L L L j.L J J J J J J J H F q e : = ; + + . . . . . + + + + . + + + + + + # . . # + ; + > ; # $ + + > ] > ] ] ^ ^ # ^ * * * / * / / * / _ _ f f 3 f o o o o z o o o o o x o x o o x x x x x o x o x x D x x x z D D x x x x x x E Q Q D X X X X Q X D X Q Q D U Q D X D X X D D D U X X X X %.;.;.7.;.c.c.c.c.c.].R.a.R.a.L.R.c.L.R.c.R.R.R.a.R.R.R.L.R.O.",
688"L L L L J L L L 9 L J L J L J L L J L J L j.L J j.J J H H q 1 e = % + . + + + . . . # + + + + + + + + . . + + + + + + + + + + + ; ; $ # ^ # ] > > > # ^ * * > * * / / * _ _ f _ _ _ f f f o m o o o o o x o x o o x x x x o x x x x E x x o o o x z z D x x x x x x Q Q E Q D X X Z z Q X Q X E X X D U U E X D X U D X X X X ;.;.;.%.;.c.c.c.c.c.c.C.c.R.c.L.a.L.R.R.a.L.R.c.R.R.R.R.R.R.R.R.R.",
689"L J L L L L L L L L J L L J L J L j.L J L L J L J H J H L q b | - @ + + . + . . . + + + + . + + + + . + + + + + + + * # + > ; ; > > > ~ # # ^ ; ] ^ ^ ^ # * / * * / * _ _ _ _ f f f f f f o f o o o o x o x x x o o o x x x x x x D x x x x x x x D D x D x x x x x x x D D E X D z Z X X X U X X Q Z X X Z X X X X X X E %.;.%.%.%.;.c.%.c.7.c.c.B.c.c.a.R.L.a.L.].L.R.R.R.R.a.R.R.L.R.R.R.R.R.R."};
diff --git a/rbutil/rbutilqt/install.cpp b/rbutil/rbutilqt/install.cpp
new file mode 100644
index 0000000000..13b453e7d5
--- /dev/null
+++ b/rbutil/rbutilqt/install.cpp
@@ -0,0 +1,331 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "install.h"
21#include "ui_installfrm.h"
22#include "ui_installprogressfrm.h"
23#include "httpget.h"
24#include "zip/zip.h"
25#include "zip/unzip.h"
26
27#include <QtGui>
28#include <QtNetwork>
29
30Install::Install(QWidget *parent) : QDialog(parent)
31{
32 ui.setupUi(this);
33
34 connect(ui.radioCurrent, SIGNAL(toggled(bool)), this, SLOT(setCached(bool)));
35 connect(ui.radioStable, SIGNAL(toggled(bool)), this, SLOT(setDetailsStable(bool)));
36 connect(ui.radioCurrent, SIGNAL(toggled(bool)), this, SLOT(setDetailsCurrent(bool)));
37 connect(ui.radioArchived, SIGNAL(toggled(bool)), this, SLOT(setDetailsArchived(bool)));
38 connect(ui.buttonBrowse, SIGNAL(clicked()), this, SLOT(browseFolder()));
39}
40
41
42void Install::setCached(bool cache)
43{
44 ui.checkBoxCache->setEnabled(!cache);
45}
46
47
48void Install::setReleased(QString rel)
49{
50 releasever = rel;
51 if(!rel.isEmpty()) {
52 ui.radioStable->setChecked(true);
53 ui.radioStable->setEnabled(true);
54 QFont font;
55 font.setBold(true);
56 ui.radioStable->setFont(font);
57 }
58 else {
59 ui.radioCurrent->setChecked(true);
60 ui.radioStable->setEnabled(false);
61 ui.radioStable->setChecked(false);
62 QFont font;
63 font.setBold(true);
64 ui.radioCurrent->setFont(font);
65 }
66 qDebug() << "Install::setReleased" << releasever;
67
68}
69
70
71void Install::setProxy(QUrl proxy_url)
72{
73 proxy = proxy_url;
74 qDebug() << "Install::setProxy" << proxy;
75}
76
77
78void Install::setMountPoint(QString mount)
79{
80 QFileInfo m(mount);
81 if(m.isDir()) {
82 ui.lineMountPoint->clear();
83 ui.lineMountPoint->insert(mount);
84 }
85}
86
87
88void Install::browseFolder()
89{
90 QFileDialog browser(this);
91 if(QFileInfo(ui.lineMountPoint->text()).isDir())
92 browser.setDirectory(ui.lineMountPoint->text());
93 else
94 browser.setDirectory("/media");
95 browser.setReadOnly(true);
96 browser.setFileMode(QFileDialog::DirectoryOnly);
97 browser.setAcceptMode(QFileDialog::AcceptOpen);
98 if(browser.exec()) {
99 qDebug() << browser.directory();
100 QStringList files = browser.selectedFiles();
101 setMountPoint(files.at(0));
102 }
103}
104
105
106void Install::accept()
107{
108 QDialog *downloadProgress = new QDialog(this);
109 dp.setupUi(downloadProgress);
110 // connect close button now as it's needed if we break upon an error
111 connect(dp.buttonAbort, SIGNAL(clicked()), downloadProgress, SLOT(close()));
112 // show dialog with error if mount point is wrong
113 if(QFileInfo(ui.lineMountPoint->text()).isDir()) {
114 mountPoint = ui.lineMountPoint->text();
115 userSettings->setValue("defaults/mountpoint", mountPoint);
116 }
117 else {
118 dp.listProgress->addItem(tr("Mount point is wrong!"));
119 dp.buttonAbort->setText(tr("&Ok"));
120 downloadProgress->show();
121 return;
122 }
123
124 if(ui.radioStable->isChecked()) {
125 file = "stable"; // FIXME: this is wrong!
126 fileName = QString("rockbox.zip");
127 userSettings->setValue("defaults/build", "stable");
128 }
129 else if(ui.radioArchived->isChecked()) {
130 file = QString("%1%2/rockbox-%3-%4.zip")
131 .arg(devices->value("daily_url").toString(),
132 userSettings->value("defaults/platform").toString(),
133 userSettings->value("defaults/platform").toString(),
134 archived);
135 fileName = QString("rockbox-%1-%2.zip")
136 .arg(userSettings->value("defaults/platform").toString(),
137 archived);
138 userSettings->setValue("defaults/build", "archived");
139 }
140 else if(ui.radioCurrent->isChecked()) {
141 file = QString("%1%2/rockbox.zip")
142 .arg(devices->value("bleeding_url").toString(),
143 userSettings->value("defaults/platform").toString());
144 fileName = QString("rockbox.zip");
145 userSettings->setValue("defaults/build", "current");
146 }
147 else {
148 qDebug() << "no build selected -- this shouldn't happen";
149 return;
150 }
151 userSettings->sync();
152
153 dp.listProgress->addItem(tr("Downloading file %1.%2")
154 .arg(QFileInfo(file).baseName(), QFileInfo(file).completeSuffix()));
155
156 // temporary file needs to be opened to get the filename
157 downloadFile.open();
158 fileName = downloadFile.fileName();
159 downloadFile.close();
160 // get the real file.
161 getter = new HttpGet(this);
162 getter->setProxy(proxy);
163 getter->setFile(&downloadFile);
164
165
166 getter->getFile(QUrl(file));
167 connect(getter, SIGNAL(done(bool)), this, SLOT(downloadDone(bool)));
168 connect(dp.buttonAbort, SIGNAL(clicked()), getter, SLOT(abort()));
169 connect(getter, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int)));
170 connect(getter, SIGNAL(downloadDone(int, bool)), this, SLOT(downloadRequestFinished(int, bool)));
171
172 downloadProgress->show();
173}
174
175void Install::downloadRequestFinished(int id, bool error)
176{
177 qDebug() << "Install::downloadRequestFinished" << id << error;
178 qDebug() << "error:" << getter->errorString();
179
180 downloadDone(error);
181
182}
183
184void Install::downloadDone(bool error)
185{
186 qDebug() << "Install::downloadDone, error:" << error;
187
188 // update progress bar
189 int max = dp.progressBar->maximum();
190 if(max == 0) {
191 max = 100;
192 dp.progressBar->setMaximum(max);
193 }
194 dp.progressBar->setValue(max);
195 if(getter->httpResponse() != 200) {
196 dp.listProgress->addItem(tr("Download error: received HTTP error %1.").arg(getter->httpResponse()));
197 dp.buttonAbort->setText(tr("&Ok"));
198 connect(dp.buttonAbort, SIGNAL(clicked()), this, SLOT(close()));
199 return;
200 }
201 if(error) {
202 dp.listProgress->addItem(tr("Download error: %1").arg(getter->errorString()));
203 dp.buttonAbort->setText(tr("&Ok"));
204 connect(dp.buttonAbort, SIGNAL(clicked()), this, SLOT(close()));
205 return;
206 }
207 else dp.listProgress->addItem(tr("Download finished."));
208
209 // unzip downloaded file
210 qDebug() << "about to unzip the downloaded file" << fileName << "to" << mountPoint;
211
212 dp.listProgress->addItem(tr("Extracting file."));
213
214 qDebug() << "file to unzip: " << fileName;
215 UnZip::ErrorCode ec;
216 UnZip uz;
217 ec = uz.openArchive(fileName);
218 if(ec != UnZip::Ok) {
219 dp.listProgress->addItem(tr("Opening archive failed: %1.")
220 .arg(uz.formatError(ec)));
221 dp.buttonAbort->setText(tr("&Ok"));
222 connect(dp.buttonAbort, SIGNAL(clicked()), this, SLOT(close()));
223 return;
224 }
225 ec = uz.extractAll(mountPoint);
226 if(ec != UnZip::Ok) {
227 dp.listProgress->addItem(tr("Extracting failed: %1.")
228 .arg(uz.formatError(ec)));
229 dp.buttonAbort->setText(tr("&Ok"));
230 connect(dp.buttonAbort, SIGNAL(clicked()), this, SLOT(close()));
231 return;
232 }
233
234 dp.listProgress->addItem(tr("creating installation log"));
235 QStringList zipContents = uz.fileList();
236 QFile logfile(mountPoint + "/.rockbox/rbutil.log");
237 if(!logfile.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate))
238 {
239 dp.listProgress->addItem(tr("creating log failed!"));
240 logfile.close();
241 connect(dp.buttonAbort, SIGNAL(clicked()), this, SLOT(close()));
242 return;
243 }
244 QTextStream out(&logfile);
245 for(int i = 0; i < zipContents.size(); i++)
246 out << zipContents.at(i) << endl;
247 logfile.close();
248
249 // remove temporary file
250 downloadFile.remove();
251
252 dp.listProgress->addItem(tr("Extraction finished successfully."));
253 dp.buttonAbort->setText(tr("&Ok"));
254 connect(dp.buttonAbort, SIGNAL(clicked()), this, SLOT(close()));
255
256}
257
258
259void Install::setDetailsCurrent(bool show)
260{
261 if(show) {
262 ui.labelDetails->setText(tr("This is the absolute up to the minute "
263 "Rockbox built. A current build will get updated every time "
264 "a change is made."));
265 if(releasever == "")
266 ui.labelNote->setText(tr("<b>Note:</b> This option will always "
267 "download a fresh copy. "
268 "<b>This is the recommended version.</b>"));
269 else
270 ui.labelNote->setText(tr("<b>Note:</b> This option will always "
271 "download a fresh copy."));
272 }
273}
274
275
276void Install::setDetailsStable(bool show)
277{
278 if(show) {
279 ui.labelDetails->setText(
280 tr("This is the last released version of Rockbox."));
281
282 if(releasever != "") ui.labelNote->setText(tr("<b>Note:</b>"
283 "The lastest released version is %1. "
284 "<b>This is the recommended version.</b>").arg(releasever));
285 else ui.labelNote->setText("");
286 }
287}
288
289
290void Install::setDetailsArchived(bool show)
291{
292 if(show) {
293 ui.labelDetails->setText(tr("These are automatically built each day "
294 "from the current development source code. This generally has more "
295 "features than the last release but may be much less stable. "
296 "Features may change regularly."));
297 ui.labelNote->setText(tr("<b>Note:</b> archived version is %1.")
298 .arg(archived));
299 }
300}
301
302
303void Install::setDeviceSettings(QSettings *dev)
304{
305 devices = dev;
306 qDebug() << "Install::setDeviceSettings:" << devices;
307}
308
309
310void Install::setArchivedString(QString string)
311{
312 archived = string;
313 if(archived.isEmpty()) {
314 ui.radioArchived->setEnabled(false);
315 qDebug() << "no information about archived version available!";
316 }
317 qDebug() << "Install::setArchivedString" << archived;
318}
319
320
321void Install::updateDataReadProgress(int read, int total)
322{
323 dp.progressBar->setMaximum(total);
324 dp.progressBar->setValue(read);
325 qDebug() << "progress:" << read << "/" << total;
326}
327
328void Install::setUserSettings(QSettings *user)
329{
330 userSettings = user;
331}
diff --git a/rbutil/rbutilqt/install.h b/rbutil/rbutilqt/install.h
new file mode 100644
index 0000000000..f84b6008e2
--- /dev/null
+++ b/rbutil/rbutilqt/install.h
@@ -0,0 +1,77 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#ifndef INSTALL_H
21#define INSTALL_H
22
23#include <QtGui>
24#include <QtNetwork>
25
26#include <QSettings>
27
28#include "ui_installfrm.h"
29#include "ui_installprogressfrm.h"
30#include "httpget.h"
31
32class Install : public QDialog
33{
34 Q_OBJECT
35 public:
36 Install(QWidget *parent = 0);
37 void setProxy(QUrl);
38 void setReleased(QString);
39 void setMountPoint(QString);
40 void setUserSettings(QSettings*);
41 void setDeviceSettings(QSettings*);
42 void setArchivedString(QString);
43
44 public slots:
45 void accept(void);
46// void extractBuild(bool);
47
48 private:
49 Ui::InstallFrm ui;
50 Ui::InstallProgressFrm dp;
51 QUrl proxy;
52 QString releasever;
53 QSettings *devices;
54 QSettings *userSettings;
55 QDialog *downloadProgress;
56 QHttp *download;
57 QFile *target;
58 HttpGet *getter;
59 QString file;
60 QString fileName;
61 QString mountPoint;
62 QString archived;
63 QTemporaryFile downloadFile;
64
65 private slots:
66 void setCached(bool);
67 void browseFolder(void);
68 void setDetailsCurrent(bool);
69 void setDetailsStable(bool);
70 void setDetailsArchived(bool);
71 void updateDataReadProgress(int, int);
72 void downloadDone(bool);
73 void downloadRequestFinished(int, bool);
74};
75
76
77#endif
diff --git a/rbutil/rbutilqt/installfrm.ui b/rbutil/rbutilqt/installfrm.ui
new file mode 100644
index 0000000000..a3ec2a92d1
--- /dev/null
+++ b/rbutil/rbutilqt/installfrm.ui
@@ -0,0 +1,187 @@
1<ui version="4.0" >
2 <class>InstallFrm</class>
3 <widget class="QDialog" name="InstallFrm" >
4 <property name="windowModality" >
5 <enum>Qt::WindowModal</enum>
6 </property>
7 <property name="geometry" >
8 <rect>
9 <x>0</x>
10 <y>0</y>
11 <width>702</width>
12 <height>450</height>
13 </rect>
14 </property>
15 <property name="windowTitle" >
16 <string>Install Rockbox</string>
17 </property>
18 <layout class="QGridLayout" >
19 <item rowspan="8" row="0" column="0" >
20 <widget class="QLabel" name="label" >
21 <property name="text" >
22 <string/>
23 </property>
24 <property name="pixmap" >
25 <pixmap resource="rbutilqt.qrc" >:/icons/icons/wizard.xpm</pixmap>
26 </property>
27 </widget>
28 </item>
29 <item row="0" column="1" colspan="3" >
30 <widget class="QLabel" name="label_2" >
31 <property name="text" >
32 <string>Select your device in the filesystem</string>
33 </property>
34 </widget>
35 </item>
36 <item row="1" column="1" colspan="2" >
37 <widget class="QLineEdit" name="lineMountPoint" />
38 </item>
39 <item row="1" column="3" >
40 <widget class="QToolButton" name="buttonBrowse" >
41 <property name="text" >
42 <string>&amp;Browse</string>
43 </property>
44 </widget>
45 </item>
46 <item row="2" column="1" colspan="3" >
47 <widget class="QLabel" name="label_4" >
48 <property name="text" >
49 <string>Please select the Rockbox version you want to install on your player:</string>
50 </property>
51 <property name="wordWrap" >
52 <bool>true</bool>
53 </property>
54 </widget>
55 </item>
56 <item row="3" column="1" colspan="3" >
57 <widget class="QGroupBox" name="groupBox" >
58 <property name="title" >
59 <string>Version</string>
60 </property>
61 <layout class="QVBoxLayout" >
62 <item>
63 <widget class="QRadioButton" name="radioStable" >
64 <property name="text" >
65 <string>Rockbox &amp;stable</string>
66 </property>
67 </widget>
68 </item>
69 <item>
70 <widget class="QRadioButton" name="radioArchived" >
71 <property name="text" >
72 <string>&amp;Archived Build</string>
73 </property>
74 </widget>
75 </item>
76 <item>
77 <widget class="QRadioButton" name="radioCurrent" >
78 <property name="text" >
79 <string>&amp;Current Build</string>
80 </property>
81 </widget>
82 </item>
83 </layout>
84 </widget>
85 </item>
86 <item row="4" column="1" colspan="3" >
87 <widget class="QGroupBox" name="groupBox_2" >
88 <property name="title" >
89 <string>Details</string>
90 </property>
91 <layout class="QGridLayout" >
92 <item row="0" column="0" >
93 <widget class="QLabel" name="labelDetails" >
94 <property name="text" >
95 <string>Details about the selected version</string>
96 </property>
97 <property name="wordWrap" >
98 <bool>true</bool>
99 </property>
100 </widget>
101 </item>
102 <item row="1" column="0" >
103 <widget class="QLabel" name="labelNote" >
104 <property name="text" >
105 <string>Note</string>
106 </property>
107 <property name="wordWrap" >
108 <bool>true</bool>
109 </property>
110 </widget>
111 </item>
112 </layout>
113 </widget>
114 </item>
115 <item row="5" column="1" >
116 <widget class="QCheckBox" name="checkBoxCache" >
117 <property name="toolTip" >
118 <string>Rockbox Utility stores copies of Rockbox it has downloaded on the local hard disk to save network traffic. If your local copy is no longer working, tick this box to download a fresh copy.</string>
119 </property>
120 <property name="text" >
121 <string>&amp;Don't use locally cached copy</string>
122 </property>
123 </widget>
124 </item>
125 <item row="6" column="2" >
126 <spacer>
127 <property name="orientation" >
128 <enum>Qt::Vertical</enum>
129 </property>
130 <property name="sizeHint" >
131 <size>
132 <width>185</width>
133 <height>31</height>
134 </size>
135 </property>
136 </spacer>
137 </item>
138 <item row="7" column="2" colspan="2" >
139 <widget class="QDialogButtonBox" name="buttonBox" >
140 <property name="orientation" >
141 <enum>Qt::Horizontal</enum>
142 </property>
143 <property name="standardButtons" >
144 <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
145 </property>
146 </widget>
147 </item>
148 </layout>
149 </widget>
150 <resources>
151 <include location="rbutilqt.qrc" />
152 </resources>
153 <connections>
154 <connection>
155 <sender>buttonBox</sender>
156 <signal>accepted()</signal>
157 <receiver>InstallFrm</receiver>
158 <slot>accept()</slot>
159 <hints>
160 <hint type="sourcelabel" >
161 <x>248</x>
162 <y>254</y>
163 </hint>
164 <hint type="destinationlabel" >
165 <x>157</x>
166 <y>274</y>
167 </hint>
168 </hints>
169 </connection>
170 <connection>
171 <sender>buttonBox</sender>
172 <signal>rejected()</signal>
173 <receiver>InstallFrm</receiver>
174 <slot>reject()</slot>
175 <hints>
176 <hint type="sourcelabel" >
177 <x>316</x>
178 <y>260</y>
179 </hint>
180 <hint type="destinationlabel" >
181 <x>286</x>
182 <y>274</y>
183 </hint>
184 </hints>
185 </connection>
186 </connections>
187</ui>
diff --git a/rbutil/rbutilqt/installprogressfrm.ui b/rbutil/rbutilqt/installprogressfrm.ui
new file mode 100644
index 0000000000..34ef725cae
--- /dev/null
+++ b/rbutil/rbutilqt/installprogressfrm.ui
@@ -0,0 +1,64 @@
1<ui version="4.0" >
2 <class>InstallProgressFrm</class>
3 <widget class="QDialog" name="InstallProgressFrm" >
4 <property name="geometry" >
5 <rect>
6 <x>0</x>
7 <y>0</y>
8 <width>315</width>
9 <height>302</height>
10 </rect>
11 </property>
12 <property name="windowTitle" >
13 <string>Progress</string>
14 </property>
15 <layout class="QGridLayout" >
16 <item row="0" column="0" colspan="2" >
17 <widget class="QLabel" name="labelHeader" >
18 <property name="text" >
19 <string>Progress</string>
20 </property>
21 <property name="wordWrap" >
22 <bool>true</bool>
23 </property>
24 </widget>
25 </item>
26 <item row="1" column="0" colspan="2" >
27 <widget class="QListWidget" name="listProgress" >
28 <property name="focusPolicy" >
29 <enum>Qt::NoFocus</enum>
30 </property>
31 </widget>
32 </item>
33 <item row="2" column="0" colspan="2" >
34 <widget class="QProgressBar" name="progressBar" >
35 <property name="value" >
36 <number>0</number>
37 </property>
38 </widget>
39 </item>
40 <item row="3" column="0" >
41 <spacer>
42 <property name="orientation" >
43 <enum>Qt::Horizontal</enum>
44 </property>
45 <property name="sizeHint" >
46 <size>
47 <width>40</width>
48 <height>20</height>
49 </size>
50 </property>
51 </spacer>
52 </item>
53 <item row="3" column="1" >
54 <widget class="QPushButton" name="buttonAbort" >
55 <property name="text" >
56 <string>&amp;Abort</string>
57 </property>
58 </widget>
59 </item>
60 </layout>
61 </widget>
62 <resources/>
63 <connections/>
64</ui>
diff --git a/rbutil/rbutilqt/main.cpp b/rbutil/rbutilqt/main.cpp
new file mode 100644
index 0000000000..8212d04769
--- /dev/null
+++ b/rbutil/rbutilqt/main.cpp
@@ -0,0 +1,38 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20
21#include <QtGui>
22#include "rbutilqt.h"
23
24
25int main( int argc, char ** argv ) {
26 QApplication app( argc, argv );
27
28 QTranslator translator;
29// translator.load("rbutil_de.qm");
30 app.installTranslator(&translator);
31
32 RbUtilQt window(0);
33 window.show();
34
35// app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) );
36 return app.exec();
37
38}
diff --git a/rbutil/rbutilqt/rbutil.ini b/rbutil/rbutilqt/rbutil.ini
new file mode 100644
index 0000000000..a9deb7009c
--- /dev/null
+++ b/rbutil/rbutilqt/rbutil.ini
@@ -0,0 +1,326 @@
1[general]
2download_url=http://www.rockbox.org/download/
3daily_url=http://download.rockbox.org/daily/
4bleeding_url=http://build.rockbox.org/dist/build-
5server_conf_url=http://www.rockbox.org/daily/build-info
6font_url=http://www.rockbox.org/daily/fonts/rockbox-fonts-
7last_release=2.5
8prog_name=rockbox
9bootloader_url=http://download.rockbox.org/bootloader
10themes_url=http://www.rockbox-themes.org/
11manual_url=http://download.rockbox.org/manual
12doom_url=http://download.rockbox.org/useful/rockdoom.zip
13
14[platforms]
15platform01=player
16platform02=recorder
17platform03=recorder8mb
18platform04=recorderv2
19platform05=fmrecorder
20platform06=fmrecorder8mb
21platform07=ondiosp
22platform08=ondiofm
23platform09=h100
24platform10=h120
25platform11=h300
26platform12=h10_5gbums
27platform13=h10_5gbmtp
28platform14=h10
29platform15=ipod3g
30platform16=ipod4gray
31platform17=ipodcolor
32platform18=ipodvideo
33platform19=ipodmini1g
34platform20=ipodmini2g
35platform21=ipodnano
36platform22=iaudiox5
37platform23=iaudiom5
38platform24=iaudiox5v
39platform25=gigabeatf
40platform26=sansae200
41
42[player]
43name="Archos Jukebox Player 6000 / Jukebox Studio 5/10/20"
44platform=player
45released=yes
46needsbootloader=no
47bootloadermethod=
48bootloadername=
49resolution=11x2x1
50manualname=
51brand=archos
52
53[recorder]
54name="Archos Jukebox Recorder 10 / 20"
55platform=recorder
56released=yes
57needsbootloader=no
58bootloadermethod=
59bootloadername=
60resolution=112x64x1
61manualname=
62brand=archos
63
64[recorder8mb]
65name="Archos Jukebox Recorder 10 / 20 (with 8mb memory)"
66platform=recorder8mb
67released=no
68needsbootloader=no
69bootloadermethod=
70bootloadername=
71resolution=112x64x1
72manualname=rockbox-recorder
73brand=archos
74
75[recorderv2]
76name="Archos Jukebox Recorder v2 (20GB)"
77platform=recorderv2
78released=yes
79needsbootloader=no
80bootloadermethod=
81bootloadername=
82resolution=112x64x1
83manualname=
84brand=archos
85
86[fmrecorder]
87name="Archos Jukebox Recorder FM"
88platform=fmrecorder
89released=yes
90needsbootloader=no
91bootloadermethod=
92bootloadername=
93resolution=112x64x1
94manualname=
95brand=archos
96
97[fmrecorder8mb]
98name="Archos Jukebox Recorder FM (with 8mb memory)"
99platform=fmrecorder8mb
100released=no
101needsbootloader=no
102bootloadermethod=
103bootloadername=
104resolution=112x64x1
105manualname=rockbox-fmrecorder
106brand=archos
107
108[ondiosp]
109name="Archos Ondio SP"
110platform=ondiosp
111released=yes
112needsbootloader=no
113bootloadermethod=
114bootloadername=
115resolution=112x64x1
116manualname=
117brand=archos
118
119[ondiofm]
120name="Archos Ondio FM"
121platform=ondiofm
122released=yes
123needsbootloader=no
124bootloadermethod=
125bootloadername=
126resolution=112x64x1
127manualname=
128brand=archos
129
130[h100]
131name="Iriver iHP100 / iHP110"
132platform=h100
133released=no
134needsbootloader=yes
135bootloadermethod=fwpatcher
136bootloadername=bootloader-h100.bin
137resolution=160x128x2
138manualname=rockbox-h100
139brand=iriver
140
141[h120]
142name="Iriver iHP120 / iHP140 / H120 / H140"
143platform=h120
144released=no
145needsbootloader=yes
146bootloadermethod=fwpatcher
147bootloadername=bootloader-h120.bin
148resolution=160x128x2
149manualname=rockbox-h100
150brand=iriver
151
152[h300]
153name="Iriver H320 / H340"
154platform=h300
155released=no
156needsbootloader=yes
157bootloadermethod=fwpatcher
158bootloadername=bootloader-h300.bin
159resolution=220x176x16
160manualname=rockbox-h300
161brand=iriver
162
163[h10_5gbums]
164name="Iriver H10 (5 / 6GB) UMS"
165platform=h10_5gb
166released=no
167needsbootloader=yes
168bootloadermethod=h10
169bootloadername=H10.mi4
170resolution=128x128x16
171manualname=
172brand=iriver
173
174[h10_5gbmtp]
175name="Iriver H10 (5 / 6GB) MTP"
176platform=h10_5gb
177released=no
178needsbootloader=yes
179bootloadermethod=h10
180bootloadername=H10_5GB-MTP/H10.mi4
181resolution=128x128x16
182manualname=
183brand=iriver
184
185[h10]
186name="Iriver H10 (20GB)"
187platform=h10
188released=no
189needsbootloader=yes
190bootloadermethod=h10
191bootloadername=H10_20GC.mi4
192resolution=160x128x16
193manualname=
194brand=iriver
195
196[ipodcolor]
197name="Apple Ipod Colour / Photo / U2 (4th gen)"
198platform=ipodcolor
199released=no
200needsbootloader=yes
201bootloadermethod=ipodpatcher
202bootloadername=ipodcolor
203resolution=220x176x16
204manualname=
205brand=apple
206
207[ipodnano]
208name="Apple Ipod Nano (1st gen)"
209platform=ipodnano
210released=no
211needsbootloader=yes
212bootloadermethod=ipodpatcher
213bootloadername=ipodnano
214resolution=176x132x16
215manualname=
216brand=apple
217
218[ipod4gray]
219name="Apple Ipod (4th gen, greyscale)"
220platform=ipod4gray
221released=no
222needsbootloader=yes
223bootloadermethod=ipodpatcher
224bootloadername=ipod4g
225resolution=160x128x2
226manualname=
227brand=apple
228
229[ipodvideo]
230name="Apple Ipod Video (5th gen)"
231platform=ipodvideo
232released=no
233needsbootloader=yes
234bootloadermethod=ipodpatcher
235bootloadername=ipodvideo
236resolution=320x240x16
237manualname=
238brand=apple
239
240[ipod3g]
241name="Apple Ipod (3rd gen)"
242platform=ipod3g
243released=no
244needsbootloader=yes
245bootloadermethod=ipodpatcher
246bootloadername=ipod3g
247resolution=160x128x2
248manualname=
249brand=apple
250
251[ipodmini1g]
252name="Apple Ipod Mini (1st gen)"
253platform=ipodmini1g
254released=no
255needsbootloader=yes
256bootloadermethod=ipodpatcher
257bootloadername=ipodmini
258resolution=138x110x2
259manualname=rockbox-ipodmini2g
260brand=apple
261
262[ipodmini2g]
263name="Apple Ipod Mini (2nd gen)"
264platform=ipodmini2g
265released=no
266needsbootloader=yes
267bootloadermethod=ipodpatcher
268bootloadername=ipodmini2g
269resolution=138x110x2
270manualname=rockbox-ipodmini2g
271brand=apple
272
273[iaudiox5]
274name="Cowon iAudio X5 / X5L"
275platform=iaudiox5
276released=no
277needsbootloader=yes
278bootloadermethod=iaudio
279bootloadername=x5_fw.bin
280resolution=160x128x16
281manualname=
282brand=iaudio
283
284[iaudiox5v]
285name="Cowon iAudio X5V"
286platform=iaudiox5
287released=no
288needsbootloader=yes
289bootloadermethod=iaudio
290bootloadername=x5v_fw.bin
291resolution=160x128x2
292manualname=
293brand=iaudio
294
295[iaudiom5]
296name="Cowon iAudio M5 / M5L"
297platform=iaudiom5
298released=no
299needsbootloader=yes
300bootloadermethod=iaudio
301bootloadername=m5_fw.bin
302resolution=160x128x16
303manualname=
304brand=iaudio
305
306[gigabeatf]
307name="Toshiba Gigabeat F / X"
308platform=gigabeatf
309needsbootloader=yes
310bootloadermethod=gigabeatf
311bootloadername=FWIMG01.DAT
312resolution=240x320x16
313manualname=
314brand=toshiba
315
316[sansae200]
317name="Sandisk Sansa E200"
318platform=sansae200
319released=no
320needsbootloader=yes
321bootloadermethod=sansapatcher
322bootloadername=PP5022.mi4
323resolution=176x220x16
324manualname=
325brand=sandisk
326
diff --git a/rbutil/rbutilqt/rbutil_de.ts b/rbutil/rbutilqt/rbutil_de.ts
new file mode 100644
index 0000000000..abc7650b22
--- /dev/null
+++ b/rbutil/rbutilqt/rbutil_de.ts
@@ -0,0 +1,643 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE TS><TS version="1.1" language="de">
3<defaultcodec></defaultcodec>
4<context>
5 <name>ConfigForm</name>
6 <message>
7 <location filename="" line="478"/>
8 <source>Configuration</source>
9 <translation type="unfinished">Konfiguration</translation>
10 </message>
11 <message>
12 <location filename="" line="478"/>
13 <source>Configure Rockbox Utility</source>
14 <translation type="unfinished">Rockbox Utility konfigurieren</translation>
15 </message>
16 <message>
17 <location filename="" line="478"/>
18 <source>&amp;Ok</source>
19 <translation type="unfinished">&amp;Ok</translation>
20 </message>
21 <message>
22 <location filename="" line="478"/>
23 <source>&amp;Cancel</source>
24 <translation type="unfinished">&amp;Abbrechen</translation>
25 </message>
26 <message>
27 <location filename="" line="478"/>
28 <source>&amp;Proxy</source>
29 <translation type="unfinished">&amp;Proxy</translation>
30 </message>
31 <message>
32 <location filename="" line="478"/>
33 <source>&amp;No Proxy</source>
34 <translation type="unfinished">&amp;kein Proxy</translation>
35 </message>
36 <message>
37 <location filename="" line="478"/>
38 <source>Use &amp;System values</source>
39 <translation type="unfinished">&amp;Systemeinstellungen benutzen</translation>
40 </message>
41 <message>
42 <location filename="" line="478"/>
43 <source>&amp;Manual Proxy settings</source>
44 <translation type="unfinished">&amp;Manuelle Proxyeinstellungen</translation>
45 </message>
46 <message>
47 <location filename="" line="478"/>
48 <source>Proxy Values</source>
49 <translation type="unfinished">Proxyeinstellungen</translation>
50 </message>
51 <message>
52 <location filename="" line="478"/>
53 <source>&amp;Host:</source>
54 <translation type="unfinished"></translation>
55 </message>
56 <message>
57 <location filename="" line="478"/>
58 <source>&amp;Port:</source>
59 <translation type="unfinished"></translation>
60 </message>
61 <message>
62 <location filename="" line="478"/>
63 <source>&amp;Username</source>
64 <translation type="unfinished">&amp;Benutzername</translation>
65 </message>
66 <message>
67 <location filename="" line="478"/>
68 <source>P&amp;assword</source>
69 <translation type="unfinished">P&amp;asswort</translation>
70 </message>
71 <message>
72 <location filename="" line="478"/>
73 <source>&amp;Language</source>
74 <translation type="unfinished">&amp;Sprache</translation>
75 </message>
76 <message>
77 <location filename="" line="478"/>
78 <source>&amp;Scrobbler</source>
79 <translation type="unfinished"></translation>
80 </message>
81</context>
82<context>
83 <name>Install</name>
84 <message>
85 <location filename="" line="478"/>
86 <source>Mount point is wrong!</source>
87 <translation type="unfinished">Falscher Einhängepunkt!</translation>
88 </message>
89 <message>
90 <location filename="" line="478"/>
91 <source>&amp;Ok</source>
92 <translation type="unfinished">&amp;Ok</translation>
93 </message>
94 <message>
95 <location filename="" line="478"/>
96 <source>Downloading file %1.%2</source>
97 <translation type="unfinished">Herunterladen von Datei %1.%2</translation>
98 </message>
99 <message>
100 <location filename="" line="478"/>
101 <source>Download error!</source>
102 <translation type="unfinished">Download-Fehler!</translation>
103 </message>
104 <message>
105 <location filename="" line="478"/>
106 <source>Download finished.</source>
107 <translation type="unfinished">Download abgeschlossen.</translation>
108 </message>
109 <message>
110 <location filename="" line="478"/>
111 <source>Extracting file %1.%2</source>
112 <translation type="unfinished">Extrahiere Datei %1.%2</translation>
113 </message>
114 <message>
115 <location filename="" line="478"/>
116 <source>Opening archive failed: %1.</source>
117 <translation type="unfinished">Öffnen des Archives fehlgeschlagen: %1</translation>
118 </message>
119 <message>
120 <location filename="" line="478"/>
121 <source>Extracting failed: %1.</source>
122 <translation type="unfinished">Extrahieren fehlgeschlagen: %1</translation>
123 </message>
124 <message>
125 <location filename="" line="478"/>
126 <source>creating installation log</source>
127 <translation type="unfinished">erzeuge Installationshistorie</translation>
128 </message>
129 <message>
130 <location filename="" line="478"/>
131 <source>creating log failed!</source>
132 <translation type="unfinished">Erzeugen der Installationshistorie fehlgeschlagen!</translation>
133 </message>
134 <message>
135 <location filename="" line="478"/>
136 <source>Extraction finished successfully.</source>
137 <translation type="unfinished">Extraktion erfolgreich abgeschlossen.</translation>
138 </message>
139 <message>
140 <location filename="" line="478"/>
141 <source>This is the absolute up to the minute Rockbox built. A current build will get updated every time a change is made.</source>
142 <translation type="unfinished"></translation>
143 </message>
144 <message>
145 <location filename="" line="478"/>
146 <source>&lt;b&gt;Note:&lt;/b&gt; This option will always download a fresh copy. &lt;b&gt;This is the recommended version.&lt;/b&gt;</source>
147 <translation type="unfinished"></translation>
148 </message>
149 <message>
150 <location filename="" line="478"/>
151 <source>&lt;b&gt;Note:&lt;/b&gt; This option will always download a fresh copy.</source>
152 <translation type="unfinished"></translation>
153 </message>
154 <message>
155 <location filename="" line="478"/>
156 <source>This is the last released version of Rockbox.</source>
157 <translation type="unfinished"></translation>
158 </message>
159 <message>
160 <location filename="" line="478"/>
161 <source>&lt;b&gt;Note:&lt;/b&gt;The lastest released version is %1. &lt;b&gt;This is the recommended version.&lt;/b&gt;</source>
162 <translation type="unfinished"></translation>
163 </message>
164 <message>
165 <location filename="" line="478"/>
166 <source>These are automatically built each day from the current development source code. This generally has more features than the last release but may be much less stable. Features may change regularly.</source>
167 <translation type="unfinished"></translation>
168 </message>
169 <message>
170 <location filename="" line="478"/>
171 <source>&lt;b&gt;Note:&lt;/b&gt; archived version is %1.</source>
172 <translation type="unfinished"></translation>
173 </message>
174</context>
175<context>
176 <name>InstallFrm</name>
177 <message>
178 <location filename="" line="478"/>
179 <source>Install Rockbox</source>
180 <translation type="unfinished">Rockbox installieren</translation>
181 </message>
182 <message>
183 <location filename="" line="478"/>
184 <source>Select your device in the filesystem</source>
185 <translation type="unfinished"></translation>
186 </message>
187 <message>
188 <location filename="" line="478"/>
189 <source>&amp;Browse</source>
190 <translation type="unfinished"></translation>
191 </message>
192 <message>
193 <location filename="" line="478"/>
194 <source>Please select the Rockbox version you want to install on your player:</source>
195 <translation type="unfinished"></translation>
196 </message>
197 <message>
198 <location filename="" line="478"/>
199 <source>Version</source>
200 <translation type="unfinished">Version</translation>
201 </message>
202 <message>
203 <location filename="" line="478"/>
204 <source>Rockbox &amp;stable</source>
205 <translation type="unfinished"></translation>
206 </message>
207 <message>
208 <location filename="" line="478"/>
209 <source>&amp;Archived Build</source>
210 <translation type="unfinished"></translation>
211 </message>
212 <message>
213 <location filename="" line="478"/>
214 <source>&amp;Current Build</source>
215 <translation type="unfinished"></translation>
216 </message>
217 <message>
218 <location filename="" line="478"/>
219 <source>Details</source>
220 <translation type="unfinished"></translation>
221 </message>
222 <message>
223 <location filename="" line="478"/>
224 <source>Details about the selected version</source>
225 <translation type="unfinished"></translation>
226 </message>
227 <message>
228 <location filename="" line="478"/>
229 <source>Note</source>
230 <translation type="unfinished"></translation>
231 </message>
232 <message>
233 <location filename="" line="478"/>
234 <source>Rockbox Utility stores copies of Rockbox it has downloaded on the local hard disk to save network traffic. If your local copy is no longer working, tick this box to download a fresh copy.</source>
235 <translation type="unfinished"></translation>
236 </message>
237 <message>
238 <location filename="" line="478"/>
239 <source>&amp;Don&apos;t use locally cached copy</source>
240 <translation type="unfinished"></translation>
241 </message>
242</context>
243<context>
244 <name>InstallProgressFrm</name>
245 <message>
246 <location filename="" line="478"/>
247 <source>Progress</source>
248 <translation type="unfinished">Fortschritt</translation>
249 </message>
250 <message>
251 <location filename="" line="478"/>
252 <source>&amp;Abort</source>
253 <translation type="unfinished">&amp;Abbrechen</translation>
254 </message>
255</context>
256<context>
257 <name>QrbUtilMain</name>
258 <message>
259 <location filename="" line="478"/>
260 <source>&amp;File</source>
261 <translation type="obsolete">&amp;Datei</translation>
262 </message>
263 <message>
264 <location filename="" line="478"/>
265 <source>&amp;About</source>
266 <translation type="obsolete">Ü&amp;ber</translation>
267 </message>
268 <message>
269 <location filename="" line="478"/>
270 <source>Set &amp;Proxy</source>
271 <translation type="obsolete">&amp;Proxy einstellen</translation>
272 </message>
273 <message>
274 <location filename="" line="478"/>
275 <source>E&amp;xit</source>
276 <translation type="obsolete">&amp;Beenden</translation>
277 </message>
278 <message>
279 <location filename="" line="478"/>
280 <source>Ctrl+Q</source>
281 <translation type="obsolete">Strg+Q</translation>
282 </message>
283 <message>
284 <location filename="" line="478"/>
285 <source>About &amp;Qt</source>
286 <translation type="obsolete">Ãœber &amp;Qt</translation>
287 </message>
288</context>
289<context>
290 <name>RbUtilQt</name>
291 <message>
292 <location filename="" line="478"/>
293 <source>Network error: %1. Please check your network and proxy settings.</source>
294 <translation type="unfinished">Netzwerkfehler: %1. Bitte Netzwerk und Proxyeinstellungen überprüfen.</translation>
295 </message>
296</context>
297<context>
298 <name>RbUtilQtFrm</name>
299 <message>
300 <location filename="" line="478"/>
301 <source>Rockbox Utility</source>
302 <translation type="unfinished"></translation>
303 </message>
304 <message>
305 <location filename="" line="478"/>
306 <source>&amp;Quick Start</source>
307 <translation type="unfinished"></translation>
308 </message>
309 <message>
310 <location filename="" line="478"/>
311 <source>...</source>
312 <translation type="unfinished"></translation>
313 </message>
314 <message>
315 <location filename="" line="478"/>
316 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
317p, li { white-space: pre-wrap; }
318&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
319&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Complete Installation&lt;/span&gt;&lt;/p&gt;
320&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This installs the bootloader, a current build and the extras package. This is the recommended method for new installations.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
321 <translation type="unfinished"></translation>
322 </message>
323 <message>
324 <location filename="" line="478"/>
325 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
326p, li { white-space: pre-wrap; }
327&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
328&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Small installation&lt;/span&gt;&lt;/p&gt;
329&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This installs bootloader and the current build of Rockbox. If you don&apos;t want the extras package, choose this option.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
330 <translation type="unfinished"></translation>
331 </message>
332 <message>
333 <location filename="" line="478"/>
334 <source>&amp;Installation</source>
335 <translation type="unfinished"></translation>
336 </message>
337 <message>
338 <location filename="" line="478"/>
339 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
340p, li { white-space: pre-wrap; }
341&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
342&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Install the bootloader&lt;/span&gt;&lt;/p&gt;
343&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Before Rockbox can be run on your audio player, you may have to install a bootloader. This is only necessary the first time Rockbox is installed.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
344 <translation type="unfinished"></translation>
345 </message>
346 <message>
347 <location filename="" line="478"/>
348 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
349p, li { white-space: pre-wrap; }
350&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;
351&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Install Rockbox&lt;/span&gt; on your audio player&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
352 <translation type="unfinished"></translation>
353 </message>
354 <message>
355 <location filename="" line="478"/>
356 <source>&amp;Extras</source>
357 <translation type="unfinished"></translation>
358 </message>
359 <message>
360 <location filename="" line="478"/>
361 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
362p, li { white-space: pre-wrap; }
363&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
364&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Fonts Package&lt;/span&gt;&lt;/p&gt;
365&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The Fonts Package contains a couple of commonly used fonts. Installation is highly recommended.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
366 <translation type="unfinished"></translation>
367 </message>
368 <message>
369 <location filename="" line="478"/>
370 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
371p, li { white-space: pre-wrap; }
372&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
373&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Install Themes&lt;/span&gt;&lt;/p&gt;
374&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Rockbox&apos; look can be customized by themes. You can choose and install several officially distributed themes.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
375 <translation type="unfinished"></translation>
376 </message>
377 <message>
378 <location filename="" line="478"/>
379 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
380p, li { white-space: pre-wrap; }
381&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
382&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Install Game Files&lt;/span&gt;&lt;/p&gt;
383&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;&quot;&gt;&lt;span style=&quot; font-weight:400;&quot;&gt;Doom needs a base wad file to run.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
384 <translation type="unfinished"></translation>
385 </message>
386 <message>
387 <location filename="" line="478"/>
388 <source>&amp;Uninstallation</source>
389 <translation type="unfinished"></translation>
390 </message>
391 <message>
392 <location filename="" line="478"/>
393 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
394p, li { white-space: pre-wrap; }
395&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
396&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Remove the bootloader&lt;/span&gt;&lt;/p&gt;
397&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;After removing the bootloader you won&apos;t be able starting Rockbox.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
398 <translation type="unfinished"></translation>
399 </message>
400 <message>
401 <location filename="" line="478"/>
402 <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
403p, li { white-space: pre-wrap; }
404&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
405&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Uninstall Rockbox&lt;/span&gt; from your audio player.&lt;/p&gt;
406&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This will leave the bootloader in place (you need to remove it manually).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
407 <translation type="unfinished"></translation>
408 </message>
409 <message>
410 <location filename="" line="478"/>
411 <source>&amp;Manual</source>
412 <translation type="unfinished"></translation>
413 </message>
414 <message>
415 <location filename="" line="478"/>
416 <source>&amp;Device</source>
417 <translation type="unfinished"></translation>
418 </message>
419 <message>
420 <location filename="" line="478"/>
421 <source>&amp;Autodetect</source>
422 <translation type="unfinished"></translation>
423 </message>
424 <message>
425 <location filename="" line="478"/>
426 <source>&amp;File</source>
427 <translation type="unfinished">&amp;Datei</translation>
428 </message>
429 <message>
430 <location filename="" line="478"/>
431 <source>&amp;About</source>
432 <translation type="unfinished">Ü&amp;ber</translation>
433 </message>
434 <message>
435 <location filename="" line="478"/>
436 <source>Empty local download cache</source>
437 <translation type="unfinished"></translation>
438 </message>
439 <message>
440 <location filename="" line="478"/>
441 <source>Install Rockbox Utility on player</source>
442 <translation type="unfinished"></translation>
443 </message>
444 <message>
445 <location filename="" line="478"/>
446 <source>&amp;Configure</source>
447 <translation type="unfinished"></translation>
448 </message>
449 <message>
450 <location filename="" line="478"/>
451 <source>E&amp;xit</source>
452 <translation type="unfinished">&amp;Beenden</translation>
453 </message>
454 <message>
455 <location filename="" line="478"/>
456 <source>Ctrl+Q</source>
457 <translation type="unfinished">Strg+Q</translation>
458 </message>
459 <message>
460 <location filename="" line="478"/>
461 <source>About &amp;Qt</source>
462 <translation type="unfinished">Ãœber &amp;Qt</translation>
463 </message>
464</context>
465<context>
466 <name>UnZip</name>
467 <message>
468 <location filename="" line="478"/>
469 <source>ZIP operation completed successfully.</source>
470 <translation type="unfinished"></translation>
471 </message>
472 <message>
473 <location filename="" line="478"/>
474 <source>Failed to initialize or load zlib library.</source>
475 <translation type="unfinished"></translation>
476 </message>
477 <message>
478 <location filename="" line="478"/>
479 <source>zlib library error.</source>
480 <translation type="unfinished"></translation>
481 </message>
482 <message>
483 <location filename="" line="478"/>
484 <source>Unable to create or open file.</source>
485 <translation type="unfinished"></translation>
486 </message>
487 <message>
488 <location filename="" line="478"/>
489 <source>Partially corrupted archive. Some files might be extracted.</source>
490 <translation type="unfinished"></translation>
491 </message>
492 <message>
493 <location filename="" line="478"/>
494 <source>Corrupted archive.</source>
495 <translation type="unfinished"></translation>
496 </message>
497 <message>
498 <location filename="" line="478"/>
499 <source>Wrong password.</source>
500 <translation type="unfinished"></translation>
501 </message>
502 <message>
503 <location filename="" line="478"/>
504 <source>No archive has been created yet.</source>
505 <translation type="unfinished"></translation>
506 </message>
507 <message>
508 <location filename="" line="478"/>
509 <source>File or directory does not exist.</source>
510 <translation type="unfinished"></translation>
511 </message>
512 <message>
513 <location filename="" line="478"/>
514 <source>File read error.</source>
515 <translation type="unfinished"></translation>
516 </message>
517 <message>
518 <location filename="" line="478"/>
519 <source>File write error.</source>
520 <translation type="unfinished"></translation>
521 </message>
522 <message>
523 <location filename="" line="478"/>
524 <source>File seek error.</source>
525 <translation type="unfinished"></translation>
526 </message>
527 <message>
528 <location filename="" line="478"/>
529 <source>Unable to create a directory.</source>
530 <translation type="unfinished"></translation>
531 </message>
532 <message>
533 <location filename="" line="478"/>
534 <source>Invalid device.</source>
535 <translation type="unfinished"></translation>
536 </message>
537 <message>
538 <location filename="" line="478"/>
539 <source>Invalid or incompatible zip archive.</source>
540 <translation type="unfinished"></translation>
541 </message>
542 <message>
543 <location filename="" line="478"/>
544 <source>Inconsistent headers. Archive might be corrupted.</source>
545 <translation type="unfinished"></translation>
546 </message>
547 <message>
548 <location filename="" line="478"/>
549 <source>Unknown error.</source>
550 <translation type="unfinished"></translation>
551 </message>
552</context>
553<context>
554 <name>Zip</name>
555 <message>
556 <location filename="" line="478"/>
557 <source>ZIP operation completed successfully.</source>
558 <translation type="unfinished"></translation>
559 </message>
560 <message>
561 <location filename="" line="478"/>
562 <source>Failed to initialize or load zlib library.</source>
563 <translation type="unfinished"></translation>
564 </message>
565 <message>
566 <location filename="" line="478"/>
567 <source>zlib library error.</source>
568 <translation type="unfinished"></translation>
569 </message>
570 <message>
571 <location filename="" line="478"/>
572 <source>Unable to create or open file.</source>
573 <translation type="unfinished"></translation>
574 </message>
575 <message>
576 <location filename="" line="478"/>
577 <source>No archive has been created yet.</source>
578 <translation type="unfinished"></translation>
579 </message>
580 <message>
581 <location filename="" line="478"/>
582 <source>File or directory does not exist.</source>
583 <translation type="unfinished"></translation>
584 </message>
585 <message>
586 <location filename="" line="478"/>
587 <source>File read error.</source>
588 <translation type="unfinished"></translation>
589 </message>
590 <message>
591 <location filename="" line="478"/>
592 <source>File write error.</source>
593 <translation type="unfinished"></translation>
594 </message>
595 <message>
596 <location filename="" line="478"/>
597 <source>File seek error.</source>
598 <translation type="unfinished"></translation>
599 </message>
600 <message>
601 <location filename="" line="478"/>
602 <source>Unknown error.</source>
603 <translation type="unfinished"></translation>
604 </message>
605</context>
606<context>
607 <name>aboutBox</name>
608 <message>
609 <location filename="" line="478"/>
610 <source>About Rockbox Utility</source>
611 <translation type="unfinished">Ãœber Rockbox Utility</translation>
612 </message>
613 <message encoding="UTF-8">
614 <location filename="" line="478"/>
615 <source>Installer and housekeeping utility for the Rockbox open source digital audio player firmware.
616
617© 2005 - 2007 The Rockbox Team.
618Released under the GNU General Public License v2.
619</source>
620 <translation type="unfinished"></translation>
621 </message>
622 <message>
623 <location filename="" line="478"/>
624 <source>&amp;Credits</source>
625 <translation type="unfinished"></translation>
626 </message>
627 <message>
628 <location filename="" line="478"/>
629 <source>&amp;License</source>
630 <translation type="unfinished">&amp;Lizenz</translation>
631 </message>
632 <message>
633 <location filename="" line="478"/>
634 <source>&amp;Ok</source>
635 <translation type="unfinished">&amp;Ok</translation>
636 </message>
637 <message>
638 <location filename="" line="478"/>
639 <source>The Rockbox Utility</source>
640 <translation type="unfinished"></translation>
641 </message>
642</context>
643</TS>
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp
new file mode 100644
index 0000000000..14234244bf
--- /dev/null
+++ b/rbutil/rbutilqt/rbutilqt.cpp
@@ -0,0 +1,231 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include <QtGui>
21
22#include "version.h"
23#include "rbutilqt.h"
24#include "ui_rbutilqtfrm.h"
25#include "ui_aboutbox.h"
26#include "configure.h"
27#include "install.h"
28#include "httpget.h"
29
30RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent)
31{
32 QString programPath = qApp->arguments().at(0);
33 absolutePath = QFileInfo(programPath).absolutePath() + "/";
34 // use built-in rbutil.ini if no external file in binary folder
35 QString iniFile = absolutePath + "rbutil.ini";
36 if(QFileInfo(iniFile).isFile()) {
37 qDebug() << "using external rbutil.ini";
38 devices = new QSettings(iniFile, QSettings::IniFormat, 0);
39 }
40 else {
41 qDebug() << "using built-in rbutil.ini";
42 devices = new QSettings(":/ini/rbutil.ini", QSettings::IniFormat, 0);
43 }
44
45 ui.setupUi(this);
46 initDeviceNames();
47
48 // portable installation:
49 // check for a configuration file in the program folder.
50 QFileInfo config;
51 config.setFile(absolutePath + "RockboxUtility.ini");
52 if(config.isFile()) {
53 userSettings = new QSettings(absolutePath + "RockboxUtility.ini",
54 QSettings::IniFormat, 0);
55 qDebug() << "config: portable";
56 }
57 else {
58 userSettings = new QSettings(QSettings::IniFormat,
59 QSettings::UserScope, "rockbox.org", "RockboxUtility");
60 qDebug() << "config: system";
61 }
62
63 userSettings->beginGroup("defaults");
64 platform = userSettings->value("platform").toString();
65 userSettings->endGroup();
66 ui.comboBoxDevice->setCurrentIndex(ui.comboBoxDevice->findData(platform));
67 updateDevice(ui.comboBoxDevice->currentIndex());
68
69 connect(ui.actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
70 connect(ui.action_About, SIGNAL(triggered()), this, SLOT(about()));
71 connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(configDialog()));
72 connect(ui.comboBoxDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(updateDevice(int)));
73 connect(ui.buttonRockbox, SIGNAL(clicked()), this, SLOT(install()));
74
75 // disable unimplemented stuff
76 ui.buttonThemes->setEnabled(false);
77 ui.buttonSmall->setEnabled(false);
78 ui.buttonRemoveRockbox->setEnabled(false);
79 ui.buttonRemoveBootloader->setEnabled(false);
80 ui.buttonGames->setEnabled(false);
81 ui.buttonFonts->setEnabled(false);
82 ui.buttonComplete->setEnabled(false);
83
84 downloadInfo();
85
86}
87
88
89void RbUtilQt::downloadInfo()
90{
91 // try to get the current build information
92 daily = new HttpGet(this);
93 connect(daily, SIGNAL(done(bool)), this, SLOT(downloadDone(bool)));
94 connect(daily, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool)));
95 if(userSettings->value("defaults/proxytype") == "manual")
96 daily->setProxy(QUrl(userSettings->value("defaults/proxy").toString()));
97
98 qDebug() << "downloading build info";
99 daily->setFile(&buildInfo);
100 daily->getFile(QUrl(devices->value("server_conf_url").toString()));
101}
102
103
104void RbUtilQt::downloadDone(bool error)
105{
106 if(error) qDebug() << "network error:" << daily->error();
107 qDebug() << "network status:" << daily->error();
108
109}
110
111
112void RbUtilQt::downloadDone(int id, bool error)
113{
114 QString errorString;
115 errorString = tr("Network error: %1. Please check your network and proxy settings.").arg(daily->errorString());
116 if(error) QMessageBox::about(this, "Network Error", errorString);
117 qDebug() << "downloadDone:" << id << error;
118}
119
120
121void RbUtilQt::about()
122{
123 QDialog *window = new QDialog;
124 Ui::aboutBox about;
125 about.setupUi(window);
126
127 QFile copy(":/docs/COPYING");
128 copy.open(QIODevice::ReadOnly);
129 QTextStream c(&copy);
130 QString cline = c.readAll();
131 about.browserLicense->insertPlainText(cline);
132 about.browserLicense->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
133 QFile credits(":/docs/CREDITS");
134 credits.open(QIODevice::ReadOnly);
135 QTextStream r(&credits);
136 QString rline = r.readAll();
137 about.browserCredits->insertPlainText(rline);
138 about.browserCredits->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
139 QString title = QString("<b>The Rockbox Utility</b> Version %1").arg(VERSION);
140 about.labelTitle->setText(title);
141
142 window->show();
143
144}
145
146
147void RbUtilQt::configDialog()
148{
149 Config *cw = new Config(this);
150 cw->setUserSettings(userSettings);
151 cw->show();
152 connect(cw, SIGNAL(settingsUpdated()), this, SLOT(downloadInfo()));
153}
154
155
156void RbUtilQt::initDeviceNames()
157{
158 qDebug() << "RbUtilQt::initDeviceNames()";
159 devices->beginGroup("platforms");
160 QStringList a = devices->childKeys();
161 devices->endGroup();
162
163 for(int it = 0; it < a.size(); it++) {
164 QString curdev;
165 devices->beginGroup("platforms");
166 curdev = devices->value(a.at(it), "null").toString();
167 devices->endGroup();
168 QString curname;
169 devices->beginGroup(curdev);
170 curname = devices->value("name", "null").toString();
171 devices->endGroup();
172 ui.comboBoxDevice->addItem(curname, curdev);
173 }
174}
175
176
177void RbUtilQt::updateDevice(int index)
178{
179 platform = ui.comboBoxDevice->itemData(index).toString();
180 userSettings->setValue("defaults/platform", platform);
181 userSettings->sync();
182
183 devices->beginGroup(platform);
184 if(devices->value("needsbootloader", "") == "no") {
185 ui.buttonBootloader->setEnabled(false);
186 ui.buttonRemoveBootloader->setEnabled(false);
187 ui.labelBootloader->setEnabled(false);
188 ui.labelRemoveBootloader->setEnabled(false);
189 }
190 else {
191 ui.buttonBootloader->setEnabled(true);
192 ui.labelBootloader->setEnabled(true);
193 if(devices->value("bootloadermethod") == "fwpatcher") {
194 ui.labelRemoveBootloader->setEnabled(false);
195 ui.buttonRemoveBootloader->setEnabled(false);
196 }
197 else {
198 ui.labelRemoveBootloader->setEnabled(true);
199 ui.buttonRemoveBootloader->setEnabled(true);
200 }
201 }
202 devices->endGroup();
203
204 qDebug() << "new device selected:" << platform;
205}
206
207
208void RbUtilQt::install()
209{
210 Install *installWindow = new Install(this);
211 installWindow->setUserSettings(userSettings);
212 installWindow->setDeviceSettings(devices);
213 if(userSettings->value("defaults/proxytype") == "manual")
214 installWindow->setProxy(QUrl(userSettings->value("defaults/proxy").toString()));
215 installWindow->setMountPoint(userSettings->value("defaults/mountpoint").toString());
216
217 buildInfo.open();
218 QSettings info(buildInfo.fileName(), QSettings::IniFormat, this);
219 buildInfo.close();
220 installWindow->setArchivedString(info.value("dailies/date").toString());
221
222 devices->beginGroup(platform);
223 QString released = devices->value("released").toString();
224 devices->endGroup();
225 if(released == "yes")
226 installWindow->setReleased(devices->value("last_release", "").toString());
227 else
228 installWindow->setReleased(0);
229
230 installWindow->show();
231}
diff --git a/rbutil/rbutilqt/rbutilqt.h b/rbutil/rbutilqt/rbutilqt.h
new file mode 100644
index 0000000000..89a3610fba
--- /dev/null
+++ b/rbutil/rbutilqt/rbutilqt.h
@@ -0,0 +1,58 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20
21#ifndef QRBUTIL_H
22#define QRBUTIL_H
23
24#include "ui_rbutilqtfrm.h"
25#include "httpget.h"
26#include <QSettings>
27#include <QTemporaryFile>
28
29
30class RbUtilQt : public QMainWindow
31{
32 Q_OBJECT
33
34 public:
35 RbUtilQt(QWidget *parent = 0);
36
37 private:
38 Ui::RbUtilQtFrm ui;
39 QSettings *devices;
40 QSettings *userSettings;
41 void initDeviceNames(void);
42 QString deviceName(QString);
43 QString platform;
44 HttpGet *daily;
45 QString absolutePath;
46 QTemporaryFile buildInfo;
47
48 private slots:
49 void about(void);
50 void configDialog(void);
51 void updateDevice(int);
52 void install(void);
53 void downloadDone(bool);
54 void downloadDone(int, bool);
55 void downloadInfo(void);
56};
57
58#endif
diff --git a/rbutil/rbutilqt/rbutilqt.pro b/rbutil/rbutilqt/rbutilqt.pro
new file mode 100644
index 0000000000..4bda942514
--- /dev/null
+++ b/rbutil/rbutilqt/rbutilqt.pro
@@ -0,0 +1,35 @@
1SOURCES += rbutilqt.cpp \
2 main.cpp \
3 install.cpp \
4 httpget.cpp \
5 configure.cpp \
6 zip/zip.cpp \
7 zip/unzip.cpp
8
9HEADERS += rbutilqt.h \
10 settings.h \
11 install.h \
12 httpget.h \
13 configure.h \
14 zip/zip.h \
15 zip/unzip.h \
16 zip/zipentry_p.h \
17 zip/unzip_p.h \
18 zip/zip_p.h \
19 version.h
20
21TEMPLATE = app
22CONFIG += release \
23 warn_on \
24 thread \
25 qt
26TARGET = rbutilqt
27FORMS += rbutilqtfrm.ui \
28 aboutbox.ui \
29 installfrm.ui \
30 installprogressfrm.ui \
31 configurefrm.ui
32RESOURCES += rbutilqt.qrc
33
34TRANSLATIONS += rbutil_de.ts
35QT += network
diff --git a/rbutil/rbutilqt/rbutilqt.qrc b/rbutil/rbutilqt/rbutilqt.qrc
new file mode 100644
index 0000000000..df93eb0565
--- /dev/null
+++ b/rbutil/rbutilqt/rbutilqt.qrc
@@ -0,0 +1,21 @@
1<RCC>
2 <qresource prefix="/docs" >
3 <file>COPYING</file>
4 <file>CREDITS</file>
5 </qresource>
6 <qresource prefix="/icons" >
7 <file>icons/bootloader_btn.png</file>
8 <file>icons/doom_btn.png</file>
9 <file>icons/font_btn.png</file>
10 <file>icons/rbinstall_btn.png</file>
11 <file>icons/rembootloader_btn.png</file>
12 <file>icons/remrb_btn.png</file>
13 <file>icons/themes_btn.png</file>
14 <file>icons/wizard.xpm</file>
15 <file>icons/rblogo.xpm</file>
16 <file>icons/rbutil.xpm</file>
17 </qresource>
18 <qresource prefix="/ini" >
19 <file>rbutil.ini</file>
20 </qresource>
21</RCC>
diff --git a/rbutil/rbutilqt/rbutilqtfrm.ui b/rbutil/rbutilqt/rbutilqtfrm.ui
new file mode 100644
index 0000000000..7666696b9c
--- /dev/null
+++ b/rbutil/rbutilqt/rbutilqtfrm.ui
@@ -0,0 +1,685 @@
1<ui version="4.0" >
2 <class>RbUtilQtFrm</class>
3 <widget class="QMainWindow" name="RbUtilQtFrm" >
4 <property name="geometry" >
5 <rect>
6 <x>0</x>
7 <y>0</y>
8 <width>577</width>
9 <height>548</height>
10 </rect>
11 </property>
12 <property name="windowTitle" >
13 <string>Rockbox Utility</string>
14 </property>
15 <property name="windowIcon" >
16 <iconset resource="rbutilqt.qrc" >:/icons/icons/rbutil.xpm</iconset>
17 </property>
18 <widget class="QWidget" name="centralwidget" >
19 <layout class="QGridLayout" >
20 <property name="leftMargin" >
21 <number>9</number>
22 </property>
23 <property name="topMargin" >
24 <number>9</number>
25 </property>
26 <property name="rightMargin" >
27 <number>9</number>
28 </property>
29 <property name="bottomMargin" >
30 <number>9</number>
31 </property>
32 <property name="horizontalSpacing" >
33 <number>6</number>
34 </property>
35 <property name="verticalSpacing" >
36 <number>6</number>
37 </property>
38 <item row="2" column="0" >
39 <widget class="QTabWidget" name="tabWidget" >
40 <property name="currentIndex" >
41 <number>0</number>
42 </property>
43 <widget class="QWidget" name="quickStart" >
44 <attribute name="title" >
45 <string>&amp;Quick Start</string>
46 </attribute>
47 <layout class="QGridLayout" >
48 <item row="0" column="0" >
49 <widget class="QToolButton" name="buttonComplete" >
50 <property name="text" >
51 <string>...</string>
52 </property>
53 <property name="icon" >
54 <iconset resource="rbutilqt.qrc" >:/icons/icons/bootloader_btn.png</iconset>
55 </property>
56 <property name="iconSize" >
57 <size>
58 <width>56</width>
59 <height>46</height>
60 </size>
61 </property>
62 </widget>
63 </item>
64 <item row="0" column="1" >
65 <widget class="QLabel" name="labelComplete" >
66 <property name="text" >
67 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
68p, li { white-space: pre-wrap; }
69&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
70&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Complete Installation&lt;/span>&lt;/p>
71&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This installs the bootloader, a current build and the extras package. This is the recommended method for new installations.&lt;/p>&lt;/body>&lt;/html></string>
72 </property>
73 <property name="wordWrap" >
74 <bool>true</bool>
75 </property>
76 </widget>
77 </item>
78 <item row="1" column="0" >
79 <widget class="QToolButton" name="buttonSmall" >
80 <property name="text" >
81 <string>...</string>
82 </property>
83 <property name="icon" >
84 <iconset resource="rbutilqt.qrc" >:/icons/icons/rbinstall_btn.png</iconset>
85 </property>
86 <property name="iconSize" >
87 <size>
88 <width>56</width>
89 <height>46</height>
90 </size>
91 </property>
92 </widget>
93 </item>
94 <item row="1" column="1" >
95 <widget class="QLabel" name="labelSmall" >
96 <property name="text" >
97 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
98p, li { white-space: pre-wrap; }
99&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
100&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Small installation&lt;/span>&lt;/p>
101&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This installs bootloader and the current build of Rockbox. If you don't want the extras package, choose this option.&lt;/p>&lt;/body>&lt;/html></string>
102 </property>
103 <property name="wordWrap" >
104 <bool>true</bool>
105 </property>
106 <property name="buddy" >
107 <cstring>buttonRockbox</cstring>
108 </property>
109 </widget>
110 </item>
111 <item row="2" column="0" >
112 <spacer>
113 <property name="orientation" >
114 <enum>Qt::Vertical</enum>
115 </property>
116 <property name="sizeHint" >
117 <size>
118 <width>20</width>
119 <height>91</height>
120 </size>
121 </property>
122 </spacer>
123 </item>
124 <item row="2" column="1" >
125 <spacer>
126 <property name="orientation" >
127 <enum>Qt::Vertical</enum>
128 </property>
129 <property name="sizeHint" >
130 <size>
131 <width>20</width>
132 <height>81</height>
133 </size>
134 </property>
135 </spacer>
136 </item>
137 </layout>
138 </widget>
139 <widget class="QWidget" name="installation" >
140 <attribute name="title" >
141 <string>&amp;Installation</string>
142 </attribute>
143 <layout class="QGridLayout" >
144 <property name="leftMargin" >
145 <number>9</number>
146 </property>
147 <property name="topMargin" >
148 <number>9</number>
149 </property>
150 <property name="rightMargin" >
151 <number>9</number>
152 </property>
153 <property name="bottomMargin" >
154 <number>9</number>
155 </property>
156 <property name="horizontalSpacing" >
157 <number>6</number>
158 </property>
159 <property name="verticalSpacing" >
160 <number>6</number>
161 </property>
162 <item row="4" column="1" >
163 <spacer>
164 <property name="orientation" >
165 <enum>Qt::Vertical</enum>
166 </property>
167 <property name="sizeHint" >
168 <size>
169 <width>20</width>
170 <height>81</height>
171 </size>
172 </property>
173 </spacer>
174 </item>
175 <item row="4" column="0" >
176 <spacer>
177 <property name="orientation" >
178 <enum>Qt::Vertical</enum>
179 </property>
180 <property name="sizeHint" >
181 <size>
182 <width>20</width>
183 <height>91</height>
184 </size>
185 </property>
186 </spacer>
187 </item>
188 <item row="0" column="0" >
189 <widget class="QToolButton" name="buttonBootloader" >
190 <property name="text" >
191 <string>...</string>
192 </property>
193 <property name="icon" >
194 <iconset resource="rbutilqt.qrc" >:/icons/icons/bootloader_btn.png</iconset>
195 </property>
196 <property name="iconSize" >
197 <size>
198 <width>56</width>
199 <height>46</height>
200 </size>
201 </property>
202 </widget>
203 </item>
204 <item row="0" column="1" >
205 <widget class="QLabel" name="labelBootloader" >
206 <property name="text" >
207 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
208p, li { white-space: pre-wrap; }
209&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
210&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Install the bootloader&lt;/span>&lt;/p>
211&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Before Rockbox can be run on your audio player, you may have to install a bootloader. This is only necessary the first time Rockbox is installed.&lt;/p>&lt;/body>&lt;/html></string>
212 </property>
213 <property name="wordWrap" >
214 <bool>true</bool>
215 </property>
216 </widget>
217 </item>
218 <item row="2" column="0" >
219 <widget class="QToolButton" name="buttonRockbox" >
220 <property name="text" >
221 <string>...</string>
222 </property>
223 <property name="icon" >
224 <iconset resource="rbutilqt.qrc" >:/icons/icons/rbinstall_btn.png</iconset>
225 </property>
226 <property name="iconSize" >
227 <size>
228 <width>56</width>
229 <height>46</height>
230 </size>
231 </property>
232 </widget>
233 </item>
234 <item row="2" column="1" >
235 <widget class="QLabel" name="labelInstall" >
236 <property name="text" >
237 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
238p, li { white-space: pre-wrap; }
239&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
240&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Install Rockbox&lt;/span> on your audio player&lt;/p>&lt;/body>&lt;/html></string>
241 </property>
242 <property name="alignment" >
243 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
244 </property>
245 <property name="wordWrap" >
246 <bool>true</bool>
247 </property>
248 <property name="buddy" >
249 <cstring>buttonRockbox</cstring>
250 </property>
251 </widget>
252 </item>
253 </layout>
254 </widget>
255 <widget class="QWidget" name="extras" >
256 <attribute name="title" >
257 <string>&amp;Extras</string>
258 </attribute>
259 <layout class="QGridLayout" >
260 <item row="0" column="0" >
261 <widget class="QToolButton" name="buttonFonts" >
262 <property name="text" >
263 <string>...</string>
264 </property>
265 <property name="icon" >
266 <iconset resource="rbutilqt.qrc" >:/icons/icons/font_btn.png</iconset>
267 </property>
268 <property name="iconSize" >
269 <size>
270 <width>56</width>
271 <height>46</height>
272 </size>
273 </property>
274 </widget>
275 </item>
276 <item row="0" column="1" >
277 <widget class="QLabel" name="labelFonts" >
278 <property name="text" >
279 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
280p, li { white-space: pre-wrap; }
281&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
282&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Fonts Package&lt;/span>&lt;/p>
283&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The Fonts Package contains a couple of commonly used fonts. Installation is highly recommended.&lt;/p>&lt;/body>&lt;/html></string>
284 </property>
285 <property name="wordWrap" >
286 <bool>true</bool>
287 </property>
288 </widget>
289 </item>
290 <item row="1" column="0" >
291 <widget class="QToolButton" name="buttonThemes" >
292 <property name="text" >
293 <string>...</string>
294 </property>
295 <property name="icon" >
296 <iconset resource="rbutilqt.qrc" >:/icons/icons/themes_btn.png</iconset>
297 </property>
298 <property name="iconSize" >
299 <size>
300 <width>56</width>
301 <height>46</height>
302 </size>
303 </property>
304 </widget>
305 </item>
306 <item row="1" column="1" >
307 <widget class="QLabel" name="labelThemes" >
308 <property name="text" >
309 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
310p, li { white-space: pre-wrap; }
311&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
312&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Install Themes&lt;/span>&lt;/p>
313&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Rockbox' look can be customized by themes. You can choose and install several officially distributed themes.&lt;/p>&lt;/body>&lt;/html></string>
314 </property>
315 <property name="wordWrap" >
316 <bool>true</bool>
317 </property>
318 </widget>
319 </item>
320 <item row="2" column="0" >
321 <widget class="QToolButton" name="buttonGames" >
322 <property name="text" >
323 <string>...</string>
324 </property>
325 <property name="icon" >
326 <iconset resource="rbutilqt.qrc" >:/icons/icons/doom_btn.png</iconset>
327 </property>
328 <property name="iconSize" >
329 <size>
330 <width>56</width>
331 <height>46</height>
332 </size>
333 </property>
334 </widget>
335 </item>
336 <item row="2" column="1" >
337 <widget class="QLabel" name="labelGames" >
338 <property name="text" >
339 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
340p, li { white-space: pre-wrap; }
341&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
342&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Install Game Files&lt;/span>&lt;/p>
343&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">&lt;span style=" font-weight:400;">Doom needs a base wad file to run.&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
344 </property>
345 <property name="openExternalLinks" >
346 <bool>true</bool>
347 </property>
348 </widget>
349 </item>
350 <item row="3" column="0" >
351 <spacer>
352 <property name="orientation" >
353 <enum>Qt::Vertical</enum>
354 </property>
355 <property name="sizeHint" >
356 <size>
357 <width>20</width>
358 <height>40</height>
359 </size>
360 </property>
361 </spacer>
362 </item>
363 <item row="3" column="1" >
364 <spacer>
365 <property name="orientation" >
366 <enum>Qt::Vertical</enum>
367 </property>
368 <property name="sizeHint" >
369 <size>
370 <width>20</width>
371 <height>40</height>
372 </size>
373 </property>
374 </spacer>
375 </item>
376 </layout>
377 </widget>
378 <widget class="QWidget" name="uninstall" >
379 <attribute name="title" >
380 <string>&amp;Uninstallation</string>
381 </attribute>
382 <layout class="QGridLayout" >
383 <item row="0" column="0" >
384 <widget class="QToolButton" name="buttonRemoveBootloader" >
385 <property name="text" >
386 <string>...</string>
387 </property>
388 <property name="icon" >
389 <iconset resource="rbutilqt.qrc" >:/icons/icons/rembootloader_btn.png</iconset>
390 </property>
391 <property name="iconSize" >
392 <size>
393 <width>56</width>
394 <height>46</height>
395 </size>
396 </property>
397 </widget>
398 </item>
399 <item row="0" column="1" >
400 <widget class="QLabel" name="labelRemoveBootloader" >
401 <property name="text" >
402 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
403p, li { white-space: pre-wrap; }
404&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
405&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Remove the bootloader&lt;/span>&lt;/p>
406&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">After removing the bootloader you won't be able starting Rockbox.&lt;/p>&lt;/body>&lt;/html></string>
407 </property>
408 <property name="wordWrap" >
409 <bool>true</bool>
410 </property>
411 </widget>
412 </item>
413 <item row="1" column="0" >
414 <widget class="QToolButton" name="buttonRemoveRockbox" >
415 <property name="text" >
416 <string>...</string>
417 </property>
418 <property name="icon" >
419 <iconset resource="rbutilqt.qrc" >:/icons/icons/remrb_btn.png</iconset>
420 </property>
421 <property name="iconSize" >
422 <size>
423 <width>56</width>
424 <height>46</height>
425 </size>
426 </property>
427 </widget>
428 </item>
429 <item row="1" column="1" >
430 <widget class="QLabel" name="labelUninstall" >
431 <property name="text" >
432 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
433p, li { white-space: pre-wrap; }
434&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
435&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Uninstall Rockbox&lt;/span> from your audio player.&lt;/p>
436&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will leave the bootloader in place (you need to remove it manually).&lt;/p>&lt;/body>&lt;/html></string>
437 </property>
438 <property name="alignment" >
439 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
440 </property>
441 <property name="wordWrap" >
442 <bool>true</bool>
443 </property>
444 <property name="buddy" >
445 <cstring>buttonRockbox</cstring>
446 </property>
447 </widget>
448 </item>
449 <item row="2" column="0" >
450 <spacer>
451 <property name="orientation" >
452 <enum>Qt::Vertical</enum>
453 </property>
454 <property name="sizeHint" >
455 <size>
456 <width>20</width>
457 <height>40</height>
458 </size>
459 </property>
460 </spacer>
461 </item>
462 <item row="2" column="1" >
463 <spacer>
464 <property name="orientation" >
465 <enum>Qt::Vertical</enum>
466 </property>
467 <property name="sizeHint" >
468 <size>
469 <width>20</width>
470 <height>40</height>
471 </size>
472 </property>
473 </spacer>
474 </item>
475 </layout>
476 </widget>
477 <widget class="QWidget" name="manual" >
478 <attribute name="title" >
479 <string>&amp;Manual</string>
480 </attribute>
481 </widget>
482 </widget>
483 </item>
484 <item row="0" column="0" >
485 <layout class="QHBoxLayout" >
486 <property name="spacing" >
487 <number>6</number>
488 </property>
489 <property name="leftMargin" >
490 <number>0</number>
491 </property>
492 <property name="topMargin" >
493 <number>0</number>
494 </property>
495 <property name="rightMargin" >
496 <number>0</number>
497 </property>
498 <property name="bottomMargin" >
499 <number>0</number>
500 </property>
501 <item>
502 <spacer>
503 <property name="orientation" >
504 <enum>Qt::Horizontal</enum>
505 </property>
506 <property name="sizeHint" >
507 <size>
508 <width>40</width>
509 <height>20</height>
510 </size>
511 </property>
512 </spacer>
513 </item>
514 <item>
515 <widget class="QLabel" name="logoLabel" >
516 <property name="text" >
517 <string/>
518 </property>
519 <property name="pixmap" >
520 <pixmap resource="rbutilqt.qrc" >:/icons/icons/rblogo.xpm</pixmap>
521 </property>
522 </widget>
523 </item>
524 <item>
525 <spacer>
526 <property name="orientation" >
527 <enum>Qt::Horizontal</enum>
528 </property>
529 <property name="sizeHint" >
530 <size>
531 <width>40</width>
532 <height>20</height>
533 </size>
534 </property>
535 </spacer>
536 </item>
537 </layout>
538 </item>
539 <item row="1" column="0" >
540 <layout class="QHBoxLayout" >
541 <property name="spacing" >
542 <number>6</number>
543 </property>
544 <property name="leftMargin" >
545 <number>0</number>
546 </property>
547 <property name="topMargin" >
548 <number>0</number>
549 </property>
550 <property name="rightMargin" >
551 <number>0</number>
552 </property>
553 <property name="bottomMargin" >
554 <number>0</number>
555 </property>
556 <item>
557 <widget class="QLabel" name="labelDevice" >
558 <property name="sizePolicy" >
559 <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
560 <horstretch>0</horstretch>
561 <verstretch>0</verstretch>
562 </sizepolicy>
563 </property>
564 <property name="text" >
565 <string>&amp;Device</string>
566 </property>
567 <property name="buddy" >
568 <cstring>comboBoxDevice</cstring>
569 </property>
570 </widget>
571 </item>
572 <item>
573 <widget class="QComboBox" name="comboBoxDevice" >
574 <property name="sizePolicy" >
575 <sizepolicy vsizetype="Preferred" hsizetype="MinimumExpanding" >
576 <horstretch>0</horstretch>
577 <verstretch>0</verstretch>
578 </sizepolicy>
579 </property>
580 </widget>
581 </item>
582 <item>
583 <widget class="QPushButton" name="buttonDetect" >
584 <property name="text" >
585 <string>&amp;Autodetect</string>
586 </property>
587 </widget>
588 </item>
589 </layout>
590 </item>
591 </layout>
592 </widget>
593 <widget class="QMenuBar" name="menubar" >
594 <property name="geometry" >
595 <rect>
596 <x>0</x>
597 <y>0</y>
598 <width>577</width>
599 <height>29</height>
600 </rect>
601 </property>
602 <widget class="QMenu" name="menu_File" >
603 <property name="title" >
604 <string>&amp;File</string>
605 </property>
606 <addaction name="actionEmpty_local_download_cache" />
607 <addaction name="actionInstall_Rockbox_Utility_on_player" />
608 <addaction name="action_Configure" />
609 <addaction name="separator" />
610 <addaction name="actionE_xit" />
611 </widget>
612 <widget class="QMenu" name="menuAbout" >
613 <property name="title" >
614 <string>&amp;About</string>
615 </property>
616 <addaction name="action_About" />
617 <addaction name="actionAbout_Qt" />
618 </widget>
619 <addaction name="menu_File" />
620 <addaction name="menuAbout" />
621 </widget>
622 <widget class="QStatusBar" name="statusbar" />
623 <action name="actionEmpty_local_download_cache" >
624 <property name="text" >
625 <string>Empty local download cache</string>
626 </property>
627 </action>
628 <action name="actionInstall_Rockbox_Utility_on_player" >
629 <property name="text" >
630 <string>Install Rockbox Utility on player</string>
631 </property>
632 </action>
633 <action name="action_Configure" >
634 <property name="text" >
635 <string>&amp;Configure</string>
636 </property>
637 </action>
638 <action name="actionE_xit" >
639 <property name="text" >
640 <string>E&amp;xit</string>
641 </property>
642 <property name="shortcut" >
643 <string>Ctrl+Q</string>
644 </property>
645 </action>
646 <action name="action_About" >
647 <property name="text" >
648 <string>&amp;About</string>
649 </property>
650 </action>
651 <action name="actionAbout_Qt" >
652 <property name="text" >
653 <string>About &amp;Qt</string>
654 </property>
655 </action>
656 </widget>
657 <tabstops>
658 <tabstop>buttonDetect</tabstop>
659 <tabstop>tabWidget</tabstop>
660 <tabstop>buttonBootloader</tabstop>
661 <tabstop>buttonRockbox</tabstop>
662 <tabstop>comboBoxDevice</tabstop>
663 </tabstops>
664 <resources>
665 <include location="rbutilqt.qrc" />
666 </resources>
667 <connections>
668 <connection>
669 <sender>actionE_xit</sender>
670 <signal>triggered()</signal>
671 <receiver>RbUtilQtFrm</receiver>
672 <slot>close()</slot>
673 <hints>
674 <hint type="sourcelabel" >
675 <x>-1</x>
676 <y>-1</y>
677 </hint>
678 <hint type="destinationlabel" >
679 <x>279</x>
680 <y>315</y>
681 </hint>
682 </hints>
683 </connection>
684 </connections>
685</ui>
diff --git a/rbutil/rbutilqt/settings.h b/rbutil/rbutilqt/settings.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/rbutil/rbutilqt/settings.h
diff --git a/rbutil/rbutilqt/version.h b/rbutil/rbutilqt/version.h
new file mode 100644
index 0000000000..bead65b5cf
--- /dev/null
+++ b/rbutil/rbutilqt/version.h
@@ -0,0 +1,20 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id:$
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#define VERSION "0.1qt"
diff --git a/rbutil/rbutilqt/zip/LICENSE.GPL b/rbutil/rbutilqt/zip/LICENSE.GPL
new file mode 100644
index 0000000000..40c8c38e9c
--- /dev/null
+++ b/rbutil/rbutilqt/zip/LICENSE.GPL
@@ -0,0 +1,341 @@
1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991
3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 Preamble
10
11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public
13License is intended to guarantee your freedom to share and change free
14software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by
18the GNU Library General Public License instead.) You can apply it to
19your programs, too.
20
21 When we speak of free software, we are referring to freedom, not
22price. Our General Public Licenses are designed to make sure that you
23have the freedom to distribute copies of free software (and charge for
24this service if you wish), that you receive source code or can get it
25if you want it, that you can change the software or use pieces of it
26in new free programs; and that you know you can do these things.
27
28 To protect your rights, we need to make restrictions that forbid
29anyone to deny you these rights or to ask you to surrender the rights.
30These restrictions translate to certain responsibilities for you if you
31distribute copies of the software, or if you modify it.
32
33 For example, if you distribute copies of such a program, whether
34gratis or for a fee, you must give the recipients all the rights that
35you have. You must make sure that they, too, receive or can get the
36source code. And you must show them these terms so they know their
37rights.
38
39 We protect your rights with two steps: (1) copyright the software, and
40(2) offer you this license which gives you legal permission to copy,
41distribute and/or modify the software.
42
43 Also, for each author's protection and ours, we want to make certain
44that everyone understands that there is no warranty for this free
45software. If the software is modified by someone else and passed on, we
46want its recipients to know that what they have is not the original, so
47that any problems introduced by others will not reflect on the original
48authors' reputations.
49
50 Finally, any free program is threatened constantly by software
51patents. We wish to avoid the danger that redistributors of a free
52program will individually obtain patent licenses, in effect making the
53program proprietary. To prevent this, we have made it clear that any
54patent must be licensed for everyone's free use or not licensed at all.
55
56 The precise terms and conditions for copying, distribution and
57modification follow.
58
59 GNU GENERAL PUBLIC LICENSE
60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
62 0. This License applies to any program or other work which contains
63a notice placed by the copyright holder saying it may be distributed
64under the terms of this General Public License. The "Program", below,
65refers to any such program or work, and a "work based on the Program"
66means either the Program or any derivative work under copyright law:
67that is to say, a work containing the Program or a portion of it,
68either verbatim or with modifications and/or translated into another
69language. (Hereinafter, translation is included without limitation in
70the term "modification".) Each licensee is addressed as "you".
71
72Activities other than copying, distribution and modification are not
73covered by this License; they are outside its scope. The act of
74running the Program is not restricted, and the output from the Program
75is covered only if its contents constitute a work based on the
76Program (independent of having been made by running the Program).
77Whether that is true depends on what the Program does.
78
79 1. You may copy and distribute verbatim copies of the Program's
80source code as you receive it, in any medium, provided that you
81conspicuously and appropriately publish on each copy an appropriate
82copyright notice and disclaimer of warranty; keep intact all the
83notices that refer to this License and to the absence of any warranty;
84and give any other recipients of the Program a copy of this License
85along with the Program.
86
87You may charge a fee for the physical act of transferring a copy, and
88you may at your option offer warranty protection in exchange for a fee.
89
90 2. You may modify your copy or copies of the Program or any portion
91of it, thus forming a work based on the Program, and copy and
92distribute such modifications or work under the terms of Section 1
93above, provided that you also meet all of these conditions:
94
95 a) You must cause the modified files to carry prominent notices
96 stating that you changed the files and the date of any change.
97
98 b) You must cause any work that you distribute or publish, that in
99 whole or in part contains or is derived from the Program or any
100 part thereof, to be licensed as a whole at no charge to all third
101 parties under the terms of this License.
102
103 c) If the modified program normally reads commands interactively
104 when run, you must cause it, when started running for such
105 interactive use in the most ordinary way, to print or display an
106 announcement including an appropriate copyright notice and a
107 notice that there is no warranty (or else, saying that you provide
108 a warranty) and that users may redistribute the program under
109 these conditions, and telling the user how to view a copy of this
110 License. (Exception: if the Program itself is interactive but
111 does not normally print such an announcement, your work based on
112 the Program is not required to print an announcement.)
113
114These requirements apply to the modified work as a whole. If
115identifiable sections of that work are not derived from the Program,
116and can be reasonably considered independent and separate works in
117themselves, then this License, and its terms, do not apply to those
118sections when you distribute them as separate works. But when you
119distribute the same sections as part of a whole which is a work based
120on the Program, the distribution of the whole must be on the terms of
121this License, whose permissions for other licensees extend to the
122entire whole, and thus to each and every part regardless of who wrote it.
123
124Thus, it is not the intent of this section to claim rights or contest
125your rights to work written entirely by you; rather, the intent is to
126exercise the right to control the distribution of derivative or
127collective works based on the Program.
128
129In addition, mere aggregation of another work not based on the Program
130with the Program (or with a work based on the Program) on a volume of
131a storage or distribution medium does not bring the other work under
132the scope of this License.
133
134 3. You may copy and distribute the Program (or a work based on it,
135under Section 2) in object code or executable form under the terms of
136Sections 1 and 2 above provided that you also do one of the following:
137
138 a) Accompany it with the complete corresponding machine-readable
139 source code, which must be distributed under the terms of Sections
140 1 and 2 above on a medium customarily used for software interchange; or,
141
142 b) Accompany it with a written offer, valid for at least three
143 years, to give any third party, for a charge no more than your
144 cost of physically performing source distribution, a complete
145 machine-readable copy of the corresponding source code, to be
146 distributed under the terms of Sections 1 and 2 above on a medium
147 customarily used for software interchange; or,
148
149 c) Accompany it with the information you received as to the offer
150 to distribute corresponding source code. (This alternative is
151 allowed only for noncommercial distribution and only if you
152 received the program in object code or executable form with such
153 an offer, in accord with Subsection b above.)
154
155The source code for a work means the preferred form of the work for
156making modifications to it. For an executable work, complete source
157code means all the source code for all modules it contains, plus any
158associated interface definition files, plus the scripts used to
159control compilation and installation of the executable. However, as a
160special exception, the source code distributed need not include
161anything that is normally distributed (in either source or binary
162form) with the major components (compiler, kernel, and so on) of the
163operating system on which the executable runs, unless that component
164itself accompanies the executable.
165
166If distribution of executable or object code is made by offering
167access to copy from a designated place, then offering equivalent
168access to copy the source code from the same place counts as
169distribution of the source code, even though third parties are not
170compelled to copy the source along with the object code.
171
172 4. You may not copy, modify, sublicense, or distribute the Program
173except as expressly provided under this License. Any attempt
174otherwise to copy, modify, sublicense or distribute the Program is
175void, and will automatically terminate your rights under this License.
176However, parties who have received copies, or rights, from you under
177this License will not have their licenses terminated so long as such
178parties remain in full compliance.
179
180 5. You are not required to accept this License, since you have not
181signed it. However, nothing else grants you permission to modify or
182distribute the Program or its derivative works. These actions are
183prohibited by law if you do not accept this License. Therefore, by
184modifying or distributing the Program (or any work based on the
185Program), you indicate your acceptance of this License to do so, and
186all its terms and conditions for copying, distributing or modifying
187the Program or works based on it.
188
189 6. Each time you redistribute the Program (or any work based on the
190Program), the recipient automatically receives a license from the
191original licensor to copy, distribute or modify the Program subject to
192these terms and conditions. You may not impose any further
193restrictions on the recipients' exercise of the rights granted herein.
194You are not responsible for enforcing compliance by third parties to
195this License.
196
197 7. If, as a consequence of a court judgment or allegation of patent
198infringement or for any other reason (not limited to patent issues),
199conditions are imposed on you (whether by court order, agreement or
200otherwise) that contradict the conditions of this License, they do not
201excuse you from the conditions of this License. If you cannot
202distribute so as to satisfy simultaneously your obligations under this
203License and any other pertinent obligations, then as a consequence you
204may not distribute the Program at all. For example, if a patent
205license would not permit royalty-free redistribution of the Program by
206all those who receive copies directly or indirectly through you, then
207the only way you could satisfy both it and this License would be to
208refrain entirely from distribution of the Program.
209
210If any portion of this section is held invalid or unenforceable under
211any particular circumstance, the balance of the section is intended to
212apply and the section as a whole is intended to apply in other
213circumstances.
214
215It is not the purpose of this section to induce you to infringe any
216patents or other property right claims or to contest validity of any
217such claims; this section has the sole purpose of protecting the
218integrity of the free software distribution system, which is
219implemented by public license practices. Many people have made
220generous contributions to the wide range of software distributed
221through that system in reliance on consistent application of that
222system; it is up to the author/donor to decide if he or she is willing
223to distribute software through any other system and a licensee cannot
224impose that choice.
225
226This section is intended to make thoroughly clear what is believed to
227be a consequence of the rest of this License.
228
229 8. If the distribution and/or use of the Program is restricted in
230certain countries either by patents or by copyrighted interfaces, the
231original copyright holder who places the Program under this License
232may add an explicit geographical distribution limitation excluding
233those countries, so that distribution is permitted only in or among
234countries not thus excluded. In such case, this License incorporates
235the limitation as if written in the body of this License.
236
237 9. The Free Software Foundation may publish revised and/or new versions
238of the General Public License from time to time. Such new versions will
239be similar in spirit to the present version, but may differ in detail to
240address new problems or concerns.
241
242Each version is given a distinguishing version number. If the Program
243specifies a version number of this License which applies to it and "any
244later version", you have the option of following the terms and conditions
245either of that version or of any later version published by the Free
246Software Foundation. If the Program does not specify a version number of
247this License, you may choose any version ever published by the Free Software
248Foundation.
249
250 10. If you wish to incorporate parts of the Program into other free
251programs whose distribution conditions are different, write to the author
252to ask for permission. For software which is copyrighted by the Free
253Software Foundation, write to the Free Software Foundation; we sometimes
254make exceptions for this. Our decision will be guided by the two goals
255of preserving the free status of all derivatives of our free software and
256of promoting the sharing and reuse of software generally.
257
258 NO WARRANTY
259
260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268REPAIR OR CORRECTION.
269
270 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278POSSIBILITY OF SUCH DAMAGES.
279
280 END OF TERMS AND CONDITIONS
281
282 How to Apply These Terms to Your New Programs
283
284 If you develop a new program, and you want it to be of the greatest
285possible use to the public, the best way to achieve this is to make it
286free software which everyone can redistribute and change under these terms.
287
288 To do so, attach the following notices to the program. It is safest
289to attach them to the start of each source file to most effectively
290convey the exclusion of warranty; and each file should have at least
291the "copyright" line and a pointer to where the full notice is found.
292
293 <one line to give the program's name and a brief idea of what it does.>
294 Copyright (C) <year> <name of author>
295
296 This program is free software; you can redistribute it and/or modify
297 it under the terms of the GNU General Public License as published by
298 the Free Software Foundation; either version 2 of the License, or
299 (at your option) any later version.
300
301 This program is distributed in the hope that it will be useful,
302 but WITHOUT ANY WARRANTY; without even the implied warranty of
303 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 GNU General Public License for more details.
305
306 You should have received a copy of the GNU General Public License
307 along with this program; if not, write to the Free Software
308 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
309
310Also add information on how to contact you by electronic and paper mail.
311
312If the program is interactive, make it output a short notice like this
313when it starts in an interactive mode:
314
315 Gnomovision version 69, Copyright (C) year name of author
316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 This is free software, and you are welcome to redistribute it
318 under certain conditions; type `show c' for details.
319
320The hypothetical commands `show w' and `show c' should show the appropriate
321parts of the General Public License. Of course, the commands you use may
322be called something other than `show w' and `show c'; they could even be
323mouse-clicks or menu items--whatever suits your program.
324
325You should also get your employer (if you work as a programmer) or your
326school, if any, to sign a "copyright disclaimer" for the program, if
327necessary. Here is a sample; alter the names:
328
329 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
332 <signature of Ty Coon>, 1 April 1989
333 Ty Coon, President of Vice
334
335This General Public License does not permit incorporating your program into
336proprietary programs. If your program is a subroutine library, you may
337consider it more useful to permit linking proprietary applications with the
338library. If this is what you want to do, use the GNU Library General
339Public License instead of this License.
340
341-------------------------------------------------------------------------
diff --git a/rbutil/rbutilqt/zip/README b/rbutil/rbutilqt/zip/README
new file mode 100644
index 0000000000..81891e8516
--- /dev/null
+++ b/rbutil/rbutilqt/zip/README
@@ -0,0 +1,68 @@
1The *.cpp and *.h files in this archive are
2Copyright (C) 2007 Angius Fabrizio (blue_death@users.sourceforge.net)
3
4You may use, distribute and copy the files under the terms of
5GNU General Public License version 2 (see the file LICENSE.GPL for details)
6
7-------------------------------------------------------------------------
8
9Website: http://osdab.sourceforge.net/
10SourceForge.net project page: https://sourceforge.net/projects/osdab/
11
12**************** ******* ******************************************************
13
14detailed description
15--------------------
16Meet a couple of pure-Qt/C++ classes capable of handling PKZIP 2.0 compatible zip archives.
17
18This is not a "port" of some other existing implementation, everything has been written from scratch (althought some code was actually inspired by existing public domain projects) and it's all pure C++/Qt. Please note that this is not a complete stand-alone library, it's just a bunch of classes. You will have to add them to your project and modify them to best fit your needs.
19
20It supports basic features like file extraction and compression (with optional password encryption) and archive comments. There are methods to extract single files or the whole archive and methods to compress the contents of a whole directory. Nevertheless, it should be quite trivial to add other features. The public API only has a few methods because this is what I was looking for. This does not mean you can't write a few more lines of code (it really shouldn't take more than a few lines!) to add more features.
21
22The classes are great if you only need to use the PKZIP format for loading/saving your application's data. Just remember that you will need to customize a few parts of the code, i.e. to add your own password retrieval method.
23
24zlib is used for actual compression and decompression.
25
26Please refer to the example application's main.cpp file or to the class comments in the source files for details and more usage examples.
27
28history
29-------
302007-02-01 - New IgnorePaths compression option and two more "addDirectoryContents()" convenience methods to use this option.
312007-01-28 - Major changes:
32 - Bug fix: there was a big problem with directory names.
33 - API changes: the Zip::addDirectory() method is now easier to use.
34 The password can now be set using a setPassword() method and a new flag allows to preserve absolute paths.
35 - Added an "encrypted" flag to the Unzip::ZipEntry struct.
36 - Removed QObject inheritance. Internationalization is now achieved through QCoreApplication::translate().
372006-11-30 - A good part of the UnZip class has been rewritten. Zip entries with a Data Descriptor (like OpenOffice files) are now correctly parsed; some minor API changes and bug fixes; new features: comments, zip entry list, skip paths unzip option
382006-11-24 - Bug fix. An additional directory was being created for some files in the root directory
392006-10-23 - Minor API changes; QIODevice support added; better binary compatibility; "long long" issue with older compilers solved
402006-06-09 - Minor API changes
412005-10-03 - First public release
42
43features
44--------
45Pure C++/Qt based, clean & oo implementation.
46Retrieve archive contents information before extracting any file.
47Fast (but less robust with corrupt archives) parsing of the ZIP file format.
48Traditional PKWARE password encryption (strong encryption as introduced by PKZip versions 5.0 and later is NOT available).
49Support for archive comments.
50
51missing features and restrictions
52---------------------------------
53Needs to be modified to fit into an existing project (i.e.: you might need to add your own password handling routine).
54Weak support of corrupted archives (althought some files could be extracted even if the archive is corrupted).
55No support for filesystem specific features like unix symbolic links.
56No support for spanned archives.
57No support for strong encryption or features introduced after PKZIP version 2.0 (see the PKWARE specs for details).
58
59requirements
60------------
61Qt version 4.0.x or later
62zlib library
63
64
65**************** ******* ******************************************************
66BEFORE SENDING ANY EMAIL, CHECK OUT THE OSDAB WEBSITE HOSTED AT SOURCEFORGE.NET
67**************** ******* ******************************************************
68
diff --git a/rbutil/rbutilqt/zip/README.ROCKBOX b/rbutil/rbutilqt/zip/README.ROCKBOX
new file mode 100644
index 0000000000..36bc9f59fd
--- /dev/null
+++ b/rbutil/rbutilqt/zip/README.ROCKBOX
@@ -0,0 +1,7 @@
1This folder contains the zip extraction classes of the OSDaB project.
2These classes are distributed under the GPL license (see the file
3LICENSE.GPL in this folder). The source files are included unmodified as
4of 2007-07-24 with the examples folder left out.
5
6Details at http://osdab.sourceforge.net/snippets/zip.php
7
diff --git a/rbutil/rbutilqt/zip/unzip.cpp b/rbutil/rbutilqt/zip/unzip.cpp
new file mode 100644
index 0000000000..3cc385ab36
--- /dev/null
+++ b/rbutil/rbutilqt/zip/unzip.cpp
@@ -0,0 +1,1360 @@
1/****************************************************************************
2** Filename: unzip.cpp
3** Last updated [dd/mm/yyyy]: 28/01/2007
4**
5** pkzip 2.0 decompression.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28#include "unzip.h"
29#include "unzip_p.h"
30#include "zipentry_p.h"
31
32#include <QString>
33#include <QStringList>
34#include <QDir>
35#include <QFile>
36#include <QCoreApplication>
37
38// You can remove this #include if you replace the qDebug() statements.
39#include <QtDebug>
40
41/*!
42 \class UnZip unzip.h
43
44 \brief PKZip 2.0 file decompression.
45 Compatibility with later versions is not ensured as they may use
46 unsupported compression algorithms.
47 Versions after 2.7 may have an incompatible header format and thus be
48 completely incompatible.
49*/
50
51/*! \enum UnZip::ErrorCode The result of a decompression operation.
52 \value UnZip::Ok No error occurred.
53 \value UnZip::ZlibInit Failed to init or load the zlib library.
54 \value UnZip::ZlibError The zlib library returned some error.
55 \value UnZip::OpenFailed Unable to create or open a device.
56 \value UnZip::PartiallyCorrupted Corrupted zip archive - some files could be extracted.
57 \value UnZip::Corrupted Corrupted or invalid zip archive.
58 \value UnZip::WrongPassword Unable to decrypt a password protected file.
59 \value UnZip::NoOpenArchive No archive has been opened yet.
60 \value UnZip::FileNotFound Unable to find the requested file in the archive.
61 \value UnZip::ReadFailed Reading of a file failed.
62 \value UnZip::WriteFailed Writing of a file failed.
63 \value UnZip::SeekFailed Seek failed.
64 \value UnZip::CreateDirFailed Could not create a directory.
65 \value UnZip::InvalidDevice A null device has been passed as parameter.
66 \value UnZip::InvalidArchive This is not a valid (or supported) ZIP archive.
67 \value UnZip::HeaderConsistencyError Local header record info does not match with the central directory record info. The archive may be corrupted.
68
69 \value UnZip::Skip Internal use only.
70 \value UnZip::SkipAll Internal use only.
71*/
72
73/*! \enum UnZip::ExtractionOptions Some options for the file extraction methods.
74 \value UnZip::ExtractPaths Default. Does not ignore the path of the zipped files.
75 \value UnZip::SkipPaths Default. Ignores the path of the zipped files and extracts them all to the same root directory.
76*/
77
78//! Local header size (excluding signature, excluding variable length fields)
79#define UNZIP_LOCAL_HEADER_SIZE 26
80//! Central Directory file entry size (excluding signature, excluding variable length fields)
81#define UNZIP_CD_ENTRY_SIZE_NS 42
82//! Data descriptor size (excluding signature)
83#define UNZIP_DD_SIZE 12
84//! End Of Central Directory size (including signature, excluding variable length fields)
85#define UNZIP_EOCD_SIZE 22
86//! Local header entry encryption header size
87#define UNZIP_LOCAL_ENC_HEADER_SIZE 12
88
89// Some offsets inside a CD record (excluding signature)
90#define UNZIP_CD_OFF_VERSION 0
91#define UNZIP_CD_OFF_GPFLAG 4
92#define UNZIP_CD_OFF_CMETHOD 6
93#define UNZIP_CD_OFF_MODT 8
94#define UNZIP_CD_OFF_MODD 10
95#define UNZIP_CD_OFF_CRC32 12
96#define UNZIP_CD_OFF_CSIZE 16
97#define UNZIP_CD_OFF_USIZE 20
98#define UNZIP_CD_OFF_NAMELEN 24
99#define UNZIP_CD_OFF_XLEN 26
100#define UNZIP_CD_OFF_COMMLEN 28
101#define UNZIP_CD_OFF_LHOFFSET 38
102
103// Some offsets inside a local header record (excluding signature)
104#define UNZIP_LH_OFF_VERSION 0
105#define UNZIP_LH_OFF_GPFLAG 2
106#define UNZIP_LH_OFF_CMETHOD 4
107#define UNZIP_LH_OFF_MODT 6
108#define UNZIP_LH_OFF_MODD 8
109#define UNZIP_LH_OFF_CRC32 10
110#define UNZIP_LH_OFF_CSIZE 14
111#define UNZIP_LH_OFF_USIZE 18
112#define UNZIP_LH_OFF_NAMELEN 22
113#define UNZIP_LH_OFF_XLEN 24
114
115// Some offsets inside a data descriptor record (excluding signature)
116#define UNZIP_DD_OFF_CRC32 0
117#define UNZIP_DD_OFF_CSIZE 4
118#define UNZIP_DD_OFF_USIZE 8
119
120// Some offsets inside a EOCD record
121#define UNZIP_EOCD_OFF_ENTRIES 6
122#define UNZIP_EOCD_OFF_CDOFF 12
123#define UNZIP_EOCD_OFF_COMMLEN 16
124
125/*!
126 Max version handled by this API.
127 0x1B = 2.7 --> full compatibility only up to version 2.0 (0x14)
128 versions from 2.1 to 2.7 may use unsupported compression methods
129 versions after 2.7 may have an incompatible header format
130*/
131#define UNZIP_VERSION 0x1B
132//! Full compatibility granted until this version
133#define UNZIP_VERSION_STRICT 0x14
134
135//! CRC32 routine
136#define CRC32(c, b) crcTable[((int)c^b) & 0xff] ^ (c >> 8)
137
138//! Checks if some file has been already extracted.
139#define UNZIP_CHECK_FOR_VALID_DATA \
140 {\
141 if (headers != 0)\
142 {\
143 qDebug() << "Corrupted zip archive. Some files might be extracted.";\
144 ec = headers->size() != 0 ? UnZip::PartiallyCorrupted : UnZip::Corrupted;\
145 break;\
146 }\
147 else\
148 {\
149 delete device;\
150 device = 0;\
151 qDebug() << "Corrupted or invalid zip archive";\
152 ec = UnZip::Corrupted;\
153 break;\
154 }\
155 }
156
157
158/************************************************************************
159 Public interface
160*************************************************************************/
161
162/*!
163 Creates a new Zip file decompressor.
164*/
165UnZip::UnZip()
166{
167 d = new UnzipPrivate;
168}
169
170/*!
171 Closes any open archive and releases used resources.
172*/
173UnZip::~UnZip()
174{
175 closeArchive();
176 delete d;
177}
178
179/*!
180 Returns true if there is an open archive.
181*/
182bool UnZip::isOpen() const
183{
184 return d->device != 0;
185}
186
187/*!
188 Opens a zip archive and reads the files list. Closes any previously opened archive.
189*/
190UnZip::ErrorCode UnZip::openArchive(const QString& filename)
191{
192 QFile* file = new QFile(filename);
193
194 if (!file->exists()) {
195 delete file;
196 return UnZip::FileNotFound;
197 }
198
199 if (!file->open(QIODevice::ReadOnly)) {
200 delete file;
201 return UnZip::OpenFailed;
202 }
203
204 return openArchive(file);
205}
206
207/*!
208 Opens a zip archive and reads the entries list.
209 Closes any previously opened archive.
210 \warning The class takes ownership of the device so don't delete it!
211*/
212UnZip::ErrorCode UnZip::openArchive(QIODevice* device)
213{
214 if (device == 0)
215 {
216 qDebug() << "Invalid device.";
217 return UnZip::InvalidDevice;
218 }
219
220 return d->openArchive(device);
221}
222
223/*!
224 Closes the archive and releases all the used resources (like cached passwords).
225*/
226void UnZip::closeArchive()
227{
228 d->closeArchive();
229}
230
231QString UnZip::archiveComment() const
232{
233 if (d->device == 0)
234 return QString();
235 return d->comment;
236}
237
238/*!
239 Returns a locale translated error string for a given error code.
240*/
241QString UnZip::formatError(UnZip::ErrorCode c) const
242{
243 switch (c)
244 {
245 case Ok: return QCoreApplication::translate("UnZip", "ZIP operation completed successfully."); break;
246 case ZlibInit: return QCoreApplication::translate("UnZip", "Failed to initialize or load zlib library."); break;
247 case ZlibError: return QCoreApplication::translate("UnZip", "zlib library error."); break;
248 case OpenFailed: return QCoreApplication::translate("UnZip", "Unable to create or open file."); break;
249 case PartiallyCorrupted: return QCoreApplication::translate("UnZip", "Partially corrupted archive. Some files might be extracted."); break;
250 case Corrupted: return QCoreApplication::translate("UnZip", "Corrupted archive."); break;
251 case WrongPassword: return QCoreApplication::translate("UnZip", "Wrong password."); break;
252 case NoOpenArchive: return QCoreApplication::translate("UnZip", "No archive has been created yet."); break;
253 case FileNotFound: return QCoreApplication::translate("UnZip", "File or directory does not exist."); break;
254 case ReadFailed: return QCoreApplication::translate("UnZip", "File read error."); break;
255 case WriteFailed: return QCoreApplication::translate("UnZip", "File write error."); break;
256 case SeekFailed: return QCoreApplication::translate("UnZip", "File seek error."); break;
257 case CreateDirFailed: return QCoreApplication::translate("UnZip", "Unable to create a directory."); break;
258 case InvalidDevice: return QCoreApplication::translate("UnZip", "Invalid device."); break;
259 case InvalidArchive: return QCoreApplication::translate("UnZip", "Invalid or incompatible zip archive."); break;
260 case HeaderConsistencyError: return QCoreApplication::translate("UnZip", "Inconsistent headers. Archive might be corrupted."); break;
261 default: ;
262 }
263
264 return QCoreApplication::translate("UnZip", "Unknown error.");
265}
266
267/*!
268 Returns true if the archive contains a file with the given path and name.
269*/
270bool UnZip::contains(const QString& file) const
271{
272 if (d->headers == 0)
273 return false;
274
275 return d->headers->contains(file);
276}
277
278/*!
279 Returns complete paths of files and directories in this archive.
280*/
281QStringList UnZip::fileList() const
282{
283 return d->headers == 0 ? QStringList() : d->headers->keys();
284}
285
286/*!
287 Returns information for each (correctly parsed) entry of this archive.
288*/
289QList<UnZip::ZipEntry> UnZip::entryList() const
290{
291 QList<UnZip::ZipEntry> list;
292
293 if (d->headers != 0)
294 {
295 for (QMap<QString,ZipEntryP*>::ConstIterator it = d->headers->constBegin(); it != d->headers->constEnd(); ++it)
296 {
297 const ZipEntryP* entry = it.value();
298 Q_ASSERT(entry != 0);
299
300 ZipEntry z;
301
302 z.filename = it.key();
303 if (!entry->comment.isEmpty())
304 z.comment = entry->comment;
305 z.compressedSize = entry->szComp;
306 z.uncompressedSize = entry->szUncomp;
307 z.crc32 = entry->crc;
308 z.lastModified = d->convertDateTime(entry->modDate, entry->modTime);
309
310 z.compression = entry->compMethod == 0 ? NoCompression : entry->compMethod == 8 ? Deflated : UnknownCompression;
311 z.type = z.filename.endsWith("/") ? Directory : File;
312
313 z.encrypted = entry->isEncrypted();
314
315 list.append(z);
316 }
317 }
318
319 return list;
320}
321
322/*!
323 Extracts the whole archive to a directory.
324*/
325UnZip::ErrorCode UnZip::extractAll(const QString& dirname, ExtractionOptions options)
326{
327 return extractAll(QDir(dirname), options);
328}
329
330/*!
331 Extracts the whole archive to a directory.
332*/
333UnZip::ErrorCode UnZip::extractAll(const QDir& dir, ExtractionOptions options)
334{
335 // this should only happen if we didn't call openArchive() yet
336 if (d->device == 0)
337 return NoOpenArchive;
338
339 if (d->headers == 0)
340 return Ok;
341
342 bool end = false;
343 for (QMap<QString,ZipEntryP*>::Iterator itr = d->headers->begin(); itr != d->headers->end(); ++itr)
344 {
345 ZipEntryP* entry = itr.value();
346 Q_ASSERT(entry != 0);
347
348 if ((entry->isEncrypted()) && d->skipAllEncrypted)
349 continue;
350
351 switch (d->extractFile(itr.key(), *entry, dir, options))
352 {
353 case Corrupted:
354 qDebug() << "Removing corrupted entry" << itr.key();
355 d->headers->erase(itr++);
356 if (itr == d->headers->end())
357 end = true;
358 break;
359 case CreateDirFailed:
360 break;
361 case Skip:
362 break;
363 case SkipAll:
364 d->skipAllEncrypted = true;
365 break;
366 default:
367 ;
368 }
369
370 if (end)
371 break;
372 }
373
374 return Ok;
375}
376
377/*!
378 Extracts a single file to a directory.
379*/
380UnZip::ErrorCode UnZip::extractFile(const QString& filename, const QString& dirname, ExtractionOptions options)
381{
382 return extractFile(filename, QDir(dirname), options);
383}
384
385/*!
386 Extracts a single file to a directory.
387*/
388UnZip::ErrorCode UnZip::extractFile(const QString& filename, const QDir& dir, ExtractionOptions options)
389{
390 QMap<QString,ZipEntryP*>::Iterator itr = d->headers->find(filename);
391 if (itr != d->headers->end())
392 {
393 ZipEntryP* entry = itr.value();
394 Q_ASSERT(entry != 0);
395 return d->extractFile(itr.key(), *entry, dir, options);
396 }
397
398 return FileNotFound;
399}
400
401/*!
402 Extracts a single file to a directory.
403*/
404UnZip::ErrorCode UnZip::extractFile(const QString& filename, QIODevice* dev, ExtractionOptions options)
405{
406 if (dev == 0)
407 return InvalidDevice;
408
409 QMap<QString,ZipEntryP*>::Iterator itr = d->headers->find(filename);
410 if (itr != d->headers->end()) {
411 ZipEntryP* entry = itr.value();
412 Q_ASSERT(entry != 0);
413 return d->extractFile(itr.key(), *entry, dev, options);
414 }
415
416 return FileNotFound;
417}
418
419/*!
420 Extracts a list of files.
421 Stops extraction at the first error (but continues if a file does not exist in the archive).
422 */
423UnZip::ErrorCode UnZip::extractFiles(const QStringList& filenames, const QString& dirname, ExtractionOptions options)
424{
425 QDir dir(dirname);
426 ErrorCode ec;
427
428 for (QStringList::ConstIterator itr = filenames.constBegin(); itr != filenames.constEnd(); ++itr)
429 {
430 ec = extractFile(*itr, dir, options);
431 if (ec == FileNotFound)
432 continue;
433 if (ec != Ok)
434 return ec;
435 }
436
437 return Ok;
438}
439
440/*!
441 Extracts a list of files.
442 Stops extraction at the first error (but continues if a file does not exist in the archive).
443 */
444UnZip::ErrorCode UnZip::extractFiles(const QStringList& filenames, const QDir& dir, ExtractionOptions options)
445{
446 ErrorCode ec;
447
448 for (QStringList::ConstIterator itr = filenames.constBegin(); itr != filenames.constEnd(); ++itr)
449 {
450 ec = extractFile(*itr, dir, options);
451 if (ec == FileNotFound)
452 continue;
453 if (ec != Ok)
454 return ec;
455 }
456
457 return Ok;
458}
459
460/*!
461 Remove/replace this method to add your own password retrieval routine.
462*/
463void UnZip::setPassword(const QString& pwd)
464{
465 d->password = pwd;
466}
467
468/*!
469 ZipEntry constructor - initialize data. Type is set to File.
470*/
471UnZip::ZipEntry::ZipEntry()
472{
473 compressedSize = uncompressedSize = crc32 = 0;
474 compression = NoCompression;
475 type = File;
476 encrypted = false;
477}
478
479
480/************************************************************************
481 Private interface
482*************************************************************************/
483
484//! \internal
485UnzipPrivate::UnzipPrivate()
486{
487 skipAllEncrypted = false;
488 headers = 0;
489 device = 0;
490
491 uBuffer = (unsigned char*) buffer1;
492 crcTable = (quint32*) get_crc_table();
493
494 cdOffset = eocdOffset = 0;
495 cdEntryCount = 0;
496 unsupportedEntryCount = 0;
497}
498
499//! \internal Parses a Zip archive.
500UnZip::ErrorCode UnzipPrivate::openArchive(QIODevice* dev)
501{
502 Q_ASSERT(dev != 0);
503
504 if (device != 0)
505 closeArchive();
506
507 device = dev;
508
509 if (!(device->isOpen() || device->open(QIODevice::ReadOnly)))
510 {
511 delete device;
512 device = 0;
513
514 qDebug() << "Unable to open device for reading";
515 return UnZip::OpenFailed;
516 }
517
518 UnZip::ErrorCode ec;
519
520 ec = seekToCentralDirectory();
521 if (ec != UnZip::Ok)
522 {
523 closeArchive();
524 return ec;
525 }
526
527 //! \todo Ignore CD entry count? CD may be corrupted.
528 if (cdEntryCount == 0)
529 {
530 return UnZip::Ok;
531 }
532
533 bool continueParsing = true;
534
535 while (continueParsing)
536 {
537 if (device->read(buffer1, 4) != 4)
538 UNZIP_CHECK_FOR_VALID_DATA
539
540 if (! (buffer1[0] == 'P' && buffer1[1] == 'K' && buffer1[2] == 0x01 && buffer1[3] == 0x02) )
541 break;
542
543 if ( (ec = parseCentralDirectoryRecord()) != UnZip::Ok )
544 break;
545 }
546
547 if (ec != UnZip::Ok)
548 closeArchive();
549
550 return ec;
551}
552
553/*
554 \internal Parses a local header record and makes some consistency check
555 with the information stored in the Central Directory record for this entry
556 that has been previously parsed.
557 \todo Optional consistency check (as a ExtractionOptions flag)
558
559 local file header signature 4 bytes (0x04034b50)
560 version needed to extract 2 bytes
561 general purpose bit flag 2 bytes
562 compression method 2 bytes
563 last mod file time 2 bytes
564 last mod file date 2 bytes
565 crc-32 4 bytes
566 compressed size 4 bytes
567 uncompressed size 4 bytes
568 file name length 2 bytes
569 extra field length 2 bytes
570
571 file name (variable size)
572 extra field (variable size)
573*/
574UnZip::ErrorCode UnzipPrivate::parseLocalHeaderRecord(const QString& path, ZipEntryP& entry)
575{
576 if (!device->seek(entry.lhOffset))
577 return UnZip::SeekFailed;
578
579 // Test signature
580 if (device->read(buffer1, 4) != 4)
581 return UnZip::ReadFailed;
582
583 if ((buffer1[0] != 'P') || (buffer1[1] != 'K') || (buffer1[2] != 0x03) || (buffer1[3] != 0x04))
584 return UnZip::InvalidArchive;
585
586 if (device->read(buffer1, UNZIP_LOCAL_HEADER_SIZE) != UNZIP_LOCAL_HEADER_SIZE)
587 return UnZip::ReadFailed;
588
589 /*
590 Check 3rd general purpose bit flag.
591
592 "bit 3: If this bit is set, the fields crc-32, compressed size
593 and uncompressed size are set to zero in the local
594 header. The correct values are put in the data descriptor
595 immediately following the compressed data."
596 */
597 bool hasDataDescriptor = entry.hasDataDescriptor();
598
599 bool checkFailed = false;
600
601 if (!checkFailed)
602 checkFailed = entry.compMethod != getUShort(uBuffer, UNZIP_LH_OFF_CMETHOD);
603 if (!checkFailed)
604 checkFailed = entry.gpFlag[0] != uBuffer[UNZIP_LH_OFF_GPFLAG];
605 if (!checkFailed)
606 checkFailed = entry.gpFlag[1] != uBuffer[UNZIP_LH_OFF_GPFLAG + 1];
607 if (!checkFailed)
608 checkFailed = entry.modTime[0] != uBuffer[UNZIP_LH_OFF_MODT];
609 if (!checkFailed)
610 checkFailed = entry.modTime[1] != uBuffer[UNZIP_LH_OFF_MODT + 1];
611 if (!checkFailed)
612 checkFailed = entry.modDate[0] != uBuffer[UNZIP_LH_OFF_MODD];
613 if (!checkFailed)
614 checkFailed = entry.modDate[1] != uBuffer[UNZIP_LH_OFF_MODD + 1];
615 if (!hasDataDescriptor)
616 {
617 if (!checkFailed)
618 checkFailed = entry.crc != getULong(uBuffer, UNZIP_LH_OFF_CRC32);
619 if (!checkFailed)
620 checkFailed = entry.szComp != getULong(uBuffer, UNZIP_LH_OFF_CSIZE);
621 if (!checkFailed)
622 checkFailed = entry.szUncomp != getULong(uBuffer, UNZIP_LH_OFF_USIZE);
623 }
624
625 if (checkFailed)
626 return UnZip::HeaderConsistencyError;
627
628 // Check filename
629 quint16 szName = getUShort(uBuffer, UNZIP_LH_OFF_NAMELEN);
630 if (szName == 0)
631 return UnZip::HeaderConsistencyError;
632
633 if (device->read(buffer2, szName) != szName)
634 return UnZip::ReadFailed;
635
636 QString filename = QString::fromAscii(buffer2, szName);
637 if (filename != path)
638 {
639 qDebug() << "Filename in local header mismatches.";
640 return UnZip::HeaderConsistencyError;
641 }
642
643 // Skip extra field
644 quint16 szExtra = getUShort(uBuffer, UNZIP_LH_OFF_XLEN);
645 if (szExtra != 0)
646 {
647 if (!device->seek(device->pos() + szExtra))
648 return UnZip::SeekFailed;
649 }
650
651 entry.dataOffset = device->pos();
652
653 if (hasDataDescriptor)
654 {
655 /*
656 The data descriptor has this OPTIONAL signature: PK\7\8
657 We try to skip the compressed data relying on the size set in the
658 Central Directory record.
659 */
660 if (!device->seek(device->pos() + entry.szComp))
661 return UnZip::SeekFailed;
662
663 // Read 4 bytes and check if there is a data descriptor signature
664 if (device->read(buffer2, 4) != 4)
665 return UnZip::ReadFailed;
666
667 bool hasSignature = buffer2[0] == 'P' && buffer2[1] == 'K' && buffer2[2] == 0x07 && buffer2[3] == 0x08;
668 if (hasSignature)
669 {
670 if (device->read(buffer2, UNZIP_DD_SIZE) != UNZIP_DD_SIZE)
671 return UnZip::ReadFailed;
672 }
673 else
674 {
675 if (device->read(buffer2 + 4, UNZIP_DD_SIZE - 4) != UNZIP_DD_SIZE - 4)
676 return UnZip::ReadFailed;
677 }
678
679 // DD: crc, compressed size, uncompressed size
680 if (
681 entry.crc != getULong((unsigned char*)buffer2, UNZIP_DD_OFF_CRC32) ||
682 entry.szComp != getULong((unsigned char*)buffer2, UNZIP_DD_OFF_CSIZE) ||
683 entry.szUncomp != getULong((unsigned char*)buffer2, UNZIP_DD_OFF_USIZE)
684 )
685 return UnZip::HeaderConsistencyError;
686 }
687
688 return UnZip::Ok;
689}
690
691/*! \internal Attempts to find the start of the central directory record.
692
693 We seek the file back until we reach the "End Of Central Directory"
694 signature PK\5\6.
695
696 end of central dir signature 4 bytes (0x06054b50)
697 number of this disk 2 bytes
698 number of the disk with the
699 start of the central directory 2 bytes
700 total number of entries in the
701 central directory on this disk 2 bytes
702 total number of entries in
703 the central directory 2 bytes
704 size of the central directory 4 bytes
705 offset of start of central
706 directory with respect to
707 the starting disk number 4 bytes
708 .ZIP file comment length 2 bytes
709 --- SIZE UNTIL HERE: UNZIP_EOCD_SIZE ---
710 .ZIP file comment (variable size)
711*/
712UnZip::ErrorCode UnzipPrivate::seekToCentralDirectory()
713{
714 qint64 length = device->size();
715 qint64 offset = length - UNZIP_EOCD_SIZE;
716
717 if (length < UNZIP_EOCD_SIZE)
718 return UnZip::InvalidArchive;
719
720 if (!device->seek( offset ))
721 return UnZip::SeekFailed;
722
723 if (device->read(buffer1, UNZIP_EOCD_SIZE) != UNZIP_EOCD_SIZE)
724 return UnZip::ReadFailed;
725
726 bool eocdFound = (buffer1[0] == 'P' && buffer1[1] == 'K' && buffer1[2] == 0x05 && buffer1[3] == 0x06);
727
728 if (eocdFound)
729 {
730 // Zip file has no comment (the only variable length field in the EOCD record)
731 eocdOffset = offset;
732 }
733 else
734 {
735 qint64 read;
736 char* p = 0;
737
738 offset -= UNZIP_EOCD_SIZE;
739
740 if (offset <= 0)
741 return UnZip::InvalidArchive;
742
743 if (!device->seek( offset ))
744 return UnZip::SeekFailed;
745
746 while ((read = device->read(buffer1, UNZIP_EOCD_SIZE)) >= 0)
747 {
748 if ( (p = strstr(buffer1, "PK\5\6")) != 0)
749 {
750 // Seek to the start of the EOCD record so we can read it fully
751 // Yes... we could simply read the missing bytes and append them to the buffer
752 // but this is far easier so heck it!
753 device->seek( offset + (p - buffer1) );
754 eocdFound = true;
755 eocdOffset = offset + (p - buffer1);
756
757 // Read EOCD record
758 if (device->read(buffer1, UNZIP_EOCD_SIZE) != UNZIP_EOCD_SIZE)
759 return UnZip::ReadFailed;
760
761 break;
762 }
763
764 offset -= UNZIP_EOCD_SIZE;
765 if (offset <= 0)
766 return UnZip::InvalidArchive;
767
768 if (!device->seek( offset ))
769 return UnZip::SeekFailed;
770 }
771 }
772
773 if (!eocdFound)
774 return UnZip::InvalidArchive;
775
776 // Parse EOCD to locate CD offset
777 offset = getULong((const unsigned char*)buffer1, UNZIP_EOCD_OFF_CDOFF + 4);
778
779 cdOffset = offset;
780
781 cdEntryCount = getUShort((const unsigned char*)buffer1, UNZIP_EOCD_OFF_ENTRIES + 4);
782
783 quint16 commentLength = getUShort((const unsigned char*)buffer1, UNZIP_EOCD_OFF_COMMLEN + 4);
784 if (commentLength != 0)
785 {
786 QByteArray c = device->read(commentLength);
787 if (c.count() != commentLength)
788 return UnZip::ReadFailed;
789
790 comment = c;
791 }
792
793 // Seek to the start of the CD record
794 if (!device->seek( cdOffset ))
795 return UnZip::SeekFailed;
796
797 return UnZip::Ok;
798}
799
800/*!
801 \internal Parses a central directory record.
802
803 Central Directory record structure:
804
805 [file header 1]
806 .
807 .
808 .
809 [file header n]
810 [digital signature] // PKZip 6.2 or later only
811
812 File header:
813
814 central file header signature 4 bytes (0x02014b50)
815 version made by 2 bytes
816 version needed to extract 2 bytes
817 general purpose bit flag 2 bytes
818 compression method 2 bytes
819 last mod file time 2 bytes
820 last mod file date 2 bytes
821 crc-32 4 bytes
822 compressed size 4 bytes
823 uncompressed size 4 bytes
824 file name length 2 bytes
825 extra field length 2 bytes
826 file comment length 2 bytes
827 disk number start 2 bytes
828 internal file attributes 2 bytes
829 external file attributes 4 bytes
830 relative offset of local header 4 bytes
831
832 file name (variable size)
833 extra field (variable size)
834 file comment (variable size)
835*/
836UnZip::ErrorCode UnzipPrivate::parseCentralDirectoryRecord()
837{
838 // Read CD record
839 if (device->read(buffer1, UNZIP_CD_ENTRY_SIZE_NS) != UNZIP_CD_ENTRY_SIZE_NS)
840 return UnZip::ReadFailed;
841
842 bool skipEntry = false;
843
844 // Get compression type so we can skip non compatible algorithms
845 quint16 compMethod = getUShort(uBuffer, UNZIP_CD_OFF_CMETHOD);
846
847 // Get variable size fields length so we can skip the whole record
848 // if necessary
849 quint16 szName = getUShort(uBuffer, UNZIP_CD_OFF_NAMELEN);
850 quint16 szExtra = getUShort(uBuffer, UNZIP_CD_OFF_XLEN);
851 quint16 szComment = getUShort(uBuffer, UNZIP_CD_OFF_COMMLEN);
852
853 quint32 skipLength = szName + szExtra + szComment;
854
855 UnZip::ErrorCode ec = UnZip::Ok;
856
857 if ((compMethod != 0) && (compMethod != 8))
858 {
859 qDebug() << "Unsupported compression method. Skipping file.";
860 skipEntry = true;
861 }
862
863 // Header parsing may be a problem if version is bigger than UNZIP_VERSION
864 if (!skipEntry && buffer1[UNZIP_CD_OFF_VERSION] > UNZIP_VERSION)
865 {
866 qDebug() << "Unsupported PKZip version. Skipping file.";
867 skipEntry = true;
868 }
869
870 if (!skipEntry && szName == 0)
871 {
872 qDebug() << "Skipping file with no name.";
873 skipEntry = true;
874 }
875
876 if (!skipEntry && device->read(buffer2, szName) != szName)
877 {
878 ec = UnZip::ReadFailed;
879 skipEntry = true;
880 }
881
882 if (skipEntry)
883 {
884 if (ec == UnZip::Ok)
885 {
886 if (!device->seek( device->pos() + skipLength ))
887 ec = UnZip::SeekFailed;
888
889 unsupportedEntryCount++;
890 }
891
892 return ec;
893 }
894
895 QString filename = QString::fromAscii(buffer2, szName);
896
897 ZipEntryP* h = new ZipEntryP;
898 h->compMethod = compMethod;
899
900 h->gpFlag[0] = buffer1[UNZIP_CD_OFF_GPFLAG];
901 h->gpFlag[1] = buffer1[UNZIP_CD_OFF_GPFLAG + 1];
902
903 h->modTime[0] = buffer1[UNZIP_CD_OFF_MODT];
904 h->modTime[1] = buffer1[UNZIP_CD_OFF_MODT + 1];
905
906 h->modDate[0] = buffer1[UNZIP_CD_OFF_MODD];
907 h->modDate[1] = buffer1[UNZIP_CD_OFF_MODD + 1];
908
909 h->crc = getULong(uBuffer, UNZIP_CD_OFF_CRC32);
910 h->szComp = getULong(uBuffer, UNZIP_CD_OFF_CSIZE);
911 h->szUncomp = getULong(uBuffer, UNZIP_CD_OFF_USIZE);
912
913 // Skip extra field (if any)
914 if (szExtra != 0)
915 {
916 if (!device->seek( device->pos() + szExtra ))
917 {
918 delete h;
919 return UnZip::SeekFailed;
920 }
921 }
922
923 // Read comment field (if any)
924 if (szComment != 0)
925 {
926 if (device->read(buffer2, szComment) != szComment)
927 {
928 delete h;
929 return UnZip::ReadFailed;
930 }
931
932 h->comment = QString::fromAscii(buffer2, szComment);
933 }
934
935 h->lhOffset = getULong(uBuffer, UNZIP_CD_OFF_LHOFFSET);
936
937 if (headers == 0)
938 headers = new QMap<QString, ZipEntryP*>();
939 headers->insert(filename, h);
940
941 return UnZip::Ok;
942}
943
944//! \internal Closes the archive and resets the internal status.
945void UnzipPrivate::closeArchive()
946{
947 if (device == 0)
948 return;
949
950 skipAllEncrypted = false;
951
952 if (headers != 0)
953 {
954 qDeleteAll(*headers);
955 delete headers;
956 headers = 0;
957 }
958
959 delete device; device = 0;
960
961 cdOffset = eocdOffset = 0;
962 cdEntryCount = 0;
963 unsupportedEntryCount = 0;
964
965 comment.clear();
966}
967
968//! \internal
969UnZip::ErrorCode UnzipPrivate::extractFile(const QString& path, ZipEntryP& entry, const QDir& dir, UnZip::ExtractionOptions options)
970{
971 QString name(path);
972 QString dirname;
973 QString directory;
974
975 int pos = name.lastIndexOf('/');
976
977 // This entry is for a directory
978 if (pos == name.length() - 1)
979 {
980 if (options.testFlag(UnZip::SkipPaths))
981 return UnZip::Ok;
982
983 directory = QString("%1/%2").arg(dir.absolutePath()).arg(QDir::cleanPath(name));
984 if (!createDirectory(directory))
985 {
986 qDebug() << QString("Unable to create directory: %1").arg(directory);
987 return UnZip::CreateDirFailed;
988 }
989
990 return UnZip::Ok;
991 }
992
993 // Extract path from entry
994 if (pos > 0)
995 {
996 // get directory part
997 dirname = name.left(pos);
998 if (options.testFlag(UnZip::SkipPaths))
999 {
1000 directory = dir.absolutePath();
1001 }
1002 else
1003 {
1004 directory = QString("%1/%2").arg(dir.absolutePath()).arg(QDir::cleanPath(dirname));
1005 if (!createDirectory(directory))
1006 {
1007 qDebug() << QString("Unable to create directory: %1").arg(directory);
1008 return UnZip::CreateDirFailed;
1009 }
1010 }
1011 name = name.right(name.length() - pos - 1);
1012 } else directory = dir.absolutePath();
1013
1014 name = QString("%1/%2").arg(directory).arg(name);
1015
1016 QFile outFile(name);
1017
1018 if (!outFile.open(QIODevice::WriteOnly))
1019 {
1020 qDebug() << QString("Unable to open %1 for writing").arg(name);
1021 return UnZip::OpenFailed;
1022 }
1023
1024 //! \todo Set creation/last_modified date/time
1025
1026 UnZip::ErrorCode ec = extractFile(path, entry, &outFile, options);
1027
1028 outFile.close();
1029
1030 if (ec != UnZip::Ok)
1031 {
1032 if (!outFile.remove())
1033 qDebug() << QString("Unable to remove corrupted file: %1").arg(name);
1034 }
1035
1036 return ec;
1037}
1038
1039//! \internal
1040UnZip::ErrorCode UnzipPrivate::extractFile(const QString& path, ZipEntryP& entry, QIODevice* dev, UnZip::ExtractionOptions options)
1041{
1042 Q_UNUSED(options);
1043 Q_ASSERT(dev != 0);
1044
1045 if (!entry.lhEntryChecked)
1046 {
1047 UnZip::ErrorCode ec = parseLocalHeaderRecord(path, entry);
1048 entry.lhEntryChecked = true;
1049
1050 if (ec != UnZip::Ok)
1051 return ec;
1052 }
1053
1054 if (!device->seek(entry.dataOffset))
1055 return UnZip::SeekFailed;
1056
1057 // Encryption keys
1058 quint32 keys[3];
1059
1060 if (entry.isEncrypted())
1061 {
1062 UnZip::ErrorCode e = testPassword(keys, path, entry);
1063 if (e != UnZip::Ok)
1064 {
1065 qDebug() << QString("Unable to decrypt %1").arg(path);
1066 return e;
1067 }//! Encryption header size
1068 entry.szComp -= UNZIP_LOCAL_ENC_HEADER_SIZE; // remove encryption header size
1069 }
1070
1071 if (entry.szComp == 0)
1072 {
1073 if (entry.crc != 0)
1074 return UnZip::Corrupted;
1075
1076 return UnZip::Ok;
1077 }
1078
1079 uInt rep = entry.szComp / UNZIP_READ_BUFFER;
1080 uInt rem = entry.szComp % UNZIP_READ_BUFFER;
1081 uInt cur = 0;
1082
1083 // extract data
1084 qint64 read;
1085 quint64 tot = 0;
1086
1087 quint32 myCRC = crc32(0L, Z_NULL, 0);
1088
1089 if (entry.compMethod == 0)
1090 {
1091 while ( (read = device->read(buffer1, cur < rep ? UNZIP_READ_BUFFER : rem)) > 0 )
1092 {
1093 if (entry.isEncrypted())
1094 decryptBytes(keys, buffer1, read);
1095
1096 myCRC = crc32(myCRC, uBuffer, read);
1097
1098 if (dev->write(buffer1, read) != read)
1099 return UnZip::WriteFailed;
1100
1101 cur++;
1102 tot += read;
1103
1104 if (tot == entry.szComp)
1105 break;
1106 }
1107
1108 if (read < 0)
1109 return UnZip::ReadFailed;
1110 }
1111 else if (entry.compMethod == 8)
1112 {
1113 /* Allocate inflate state */
1114 z_stream zstr;
1115 zstr.zalloc = Z_NULL;
1116 zstr.zfree = Z_NULL;
1117 zstr.opaque = Z_NULL;
1118 zstr.next_in = Z_NULL;
1119 zstr.avail_in = 0;
1120
1121 int zret;
1122
1123 // Use inflateInit2 with negative windowBits to get raw decompression
1124 if ( (zret = inflateInit2_(&zstr, -MAX_WBITS, ZLIB_VERSION, sizeof(z_stream))) != Z_OK )
1125 return UnZip::ZlibError;
1126
1127 int szDecomp;
1128
1129 // Decompress until deflate stream ends or end of file
1130 do
1131 {
1132 read = device->read(buffer1, cur < rep ? UNZIP_READ_BUFFER : rem);
1133 if (read == 0)
1134 break;
1135 if (read < 0)
1136 {
1137 (void)inflateEnd(&zstr);
1138 return UnZip::ReadFailed;
1139 }
1140
1141 if (entry.isEncrypted())
1142 decryptBytes(keys, buffer1, read);
1143
1144 cur++;
1145 tot += read;
1146
1147 zstr.avail_in = (uInt) read;
1148 zstr.next_in = (Bytef*) buffer1;
1149
1150
1151 // Run inflate() on input until output buffer not full
1152 do {
1153 zstr.avail_out = UNZIP_READ_BUFFER;
1154 zstr.next_out = (Bytef*) buffer2;;
1155
1156 zret = inflate(&zstr, Z_NO_FLUSH);
1157
1158 switch (zret) {
1159 case Z_NEED_DICT:
1160 case Z_DATA_ERROR:
1161 case Z_MEM_ERROR:
1162 inflateEnd(&zstr);
1163 return UnZip::WriteFailed;
1164 default:
1165 ;
1166 }
1167
1168 szDecomp = UNZIP_READ_BUFFER - zstr.avail_out;
1169 if (dev->write(buffer2, szDecomp) != szDecomp)
1170 {
1171 inflateEnd(&zstr);
1172 return UnZip::ZlibError;
1173 }
1174
1175 myCRC = crc32(myCRC, (const Bytef*) buffer2, szDecomp);
1176
1177 } while (zstr.avail_out == 0);
1178
1179 }
1180 while (zret != Z_STREAM_END);
1181
1182 inflateEnd(&zstr);
1183 }
1184
1185 if (myCRC != entry.crc)
1186 return UnZip::Corrupted;
1187
1188 return UnZip::Ok;
1189}
1190
1191//! \internal Creates a new directory and all the needed parent directories.
1192bool UnzipPrivate::createDirectory(const QString& path)
1193{
1194 QDir d(path);
1195 if (!d.exists())
1196 {
1197 int sep = path.lastIndexOf("/");
1198 if (sep <= 0) return true;
1199
1200 if (!createDirectory(path.left(sep)))
1201 return false;
1202
1203 if (!d.mkdir(path))
1204 {
1205 qDebug() << QString("Unable to create directory: %1").arg(path);
1206 return false;
1207 }
1208 }
1209
1210 return true;
1211}
1212
1213/*!
1214 \internal Reads an quint32 (4 bytes) from a byte array starting at given offset.
1215*/
1216quint32 UnzipPrivate::getULong(const unsigned char* data, quint32 offset) const
1217{
1218 quint32 res = (quint32) data[offset];
1219 res |= (((quint32)data[offset+1]) << 8);
1220 res |= (((quint32)data[offset+2]) << 16);
1221 res |= (((quint32)data[offset+3]) << 24);
1222
1223 return res;
1224}
1225
1226/*!
1227 \internal Reads an quint64 (8 bytes) from a byte array starting at given offset.
1228*/
1229quint64 UnzipPrivate::getULLong(const unsigned char* data, quint32 offset) const
1230{
1231 quint64 res = (quint64) data[offset];
1232 res |= (((quint64)data[offset+1]) << 8);
1233 res |= (((quint64)data[offset+2]) << 16);
1234 res |= (((quint64)data[offset+3]) << 24);
1235 res |= (((quint64)data[offset+1]) << 32);
1236 res |= (((quint64)data[offset+2]) << 40);
1237 res |= (((quint64)data[offset+3]) << 48);
1238 res |= (((quint64)data[offset+3]) << 56);
1239
1240 return res;
1241}
1242
1243/*!
1244 \internal Reads an quint16 (2 bytes) from a byte array starting at given offset.
1245*/
1246quint16 UnzipPrivate::getUShort(const unsigned char* data, quint32 offset) const
1247{
1248 return (quint16) data[offset] | (((quint16)data[offset+1]) << 8);
1249}
1250
1251/*!
1252 \internal Return the next byte in the pseudo-random sequence
1253 */
1254int UnzipPrivate::decryptByte(quint32 key2) const
1255{
1256 quint16 temp = ((quint16)(key2) & 0xffff) | 2;
1257 return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
1258}
1259
1260/*!
1261 \internal Update the encryption keys with the next byte of plain text
1262 */
1263void UnzipPrivate::updateKeys(quint32* keys, int c) const
1264{
1265 keys[0] = CRC32(keys[0], c);
1266 keys[1] += keys[0] & 0xff;
1267 keys[1] = keys[1] * 134775813L + 1;
1268 keys[2] = CRC32(keys[2], ((int)keys[1]) >> 24);
1269}
1270
1271/*!
1272 \internal Initialize the encryption keys and the random header according to
1273 the given password.
1274 */
1275void UnzipPrivate::initKeys(const QString& pwd, quint32* keys) const
1276{
1277 keys[0] = 305419896L;
1278 keys[1] = 591751049L;
1279 keys[2] = 878082192L;
1280
1281 QByteArray pwdBytes = pwd.toAscii();
1282 int sz = pwdBytes.size();
1283 const char* ascii = pwdBytes.data();
1284
1285 for (int i=0; i<sz; ++i)
1286 updateKeys(keys, (int)ascii[i]);
1287}
1288
1289/*!
1290 \internal Attempts to test a password without actually extracting a file.
1291 The \p file parameter can be used in the user interface or for debugging purposes
1292 as it is the name of the encrypted file for wich the password is being tested.
1293*/
1294UnZip::ErrorCode UnzipPrivate::testPassword(quint32* keys, const QString& file, const ZipEntryP& header)
1295{
1296 Q_UNUSED(file);
1297
1298 // read encryption keys
1299 if (device->read(buffer1, 12) != 12)
1300 return UnZip::Corrupted;
1301
1302 // Replace this code if you want to i.e. call some dialog and ask the user for a password
1303 initKeys(password, keys);
1304 if (testKeys(header, keys))
1305 return UnZip::Ok;
1306
1307 return UnZip::Skip;
1308}
1309
1310/*!
1311 \internal Tests a set of keys on the encryption header.
1312*/
1313bool UnzipPrivate::testKeys(const ZipEntryP& header, quint32* keys)
1314{
1315 char lastByte;
1316
1317 // decrypt encryption header
1318 for (int i=0; i<11; ++i)
1319 updateKeys(keys, lastByte = buffer1[i] ^ decryptByte(keys[2]));
1320 updateKeys(keys, lastByte = buffer1[11] ^ decryptByte(keys[2]));
1321
1322 // if there is an extended header (bit in the gp flag) buffer[11] is a byte from the file time
1323 // with no extended header we have to check the crc high-order byte
1324 char c = ((header.gpFlag[0] & 0x08) == 8) ? header.modTime[1] : header.crc >> 24;
1325
1326 return (lastByte == c);
1327}
1328
1329/*!
1330 \internal Decrypts an array of bytes long \p read.
1331*/
1332void UnzipPrivate::decryptBytes(quint32* keys, char* buffer, qint64 read)
1333{
1334 for (int i=0; i<(int)read; ++i)
1335 updateKeys(keys, buffer[i] ^= decryptByte(keys[2]));
1336}
1337
1338/*!
1339 \internal Converts date and time values from ZIP format to a QDateTime object.
1340*/
1341QDateTime UnzipPrivate::convertDateTime(const unsigned char date[2], const unsigned char time[2]) const
1342{
1343 QDateTime dt;
1344
1345 // Usual PKZip low-byte to high-byte order
1346
1347 // Date: 7 bits = years from 1980, 4 bits = month, 5 bits = day
1348 quint16 year = (date[1] >> 1) & 127;
1349 quint16 month = ((date[1] << 3) & 14) | ((date[0] >> 5) & 7);
1350 quint16 day = date[0] & 31;
1351
1352 // Time: 5 bits hour, 6 bits minutes, 5 bits seconds with a 2sec precision
1353 quint16 hour = (time[1] >> 3) & 31;
1354 quint16 minutes = ((time[1] << 3) & 56) | ((time[0] >> 5) & 7);
1355 quint16 seconds = (time[0] & 31) * 2;
1356
1357 dt.setDate(QDate(1980 + year, month, day));
1358 dt.setTime(QTime(hour, minutes, seconds));
1359 return dt;
1360}
diff --git a/rbutil/rbutilqt/zip/unzip.h b/rbutil/rbutilqt/zip/unzip.h
new file mode 100644
index 0000000000..a48fbe8724
--- /dev/null
+++ b/rbutil/rbutilqt/zip/unzip.h
@@ -0,0 +1,144 @@
1/****************************************************************************
2** Filename: unzip.h
3** Last updated [dd/mm/yyyy]: 28/01/2007
4**
5** pkzip 2.0 decompression.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28#ifndef OSDAB_UNZIP__H
29#define OSDAB_UNZIP__H
30
31#include <QtGlobal>
32#include <QMap>
33#include <QDateTime>
34
35#include <zlib/zlib.h>
36
37class UnzipPrivate;
38class QIODevice;
39class QFile;
40class QDir;
41class QStringList;
42class QString;
43
44
45class UnZip
46{
47public:
48 enum ErrorCode
49 {
50 Ok,
51 ZlibInit,
52 ZlibError,
53 OpenFailed,
54 PartiallyCorrupted,
55 Corrupted,
56 WrongPassword,
57 NoOpenArchive,
58 FileNotFound,
59 ReadFailed,
60 WriteFailed,
61 SeekFailed,
62 CreateDirFailed,
63 InvalidDevice,
64 InvalidArchive,
65 HeaderConsistencyError,
66
67 Skip, SkipAll // internal use only
68 };
69
70 enum ExtractionOption
71 {
72 //! Extracts paths (default)
73 ExtractPaths = 0x0001,
74 //! Ignores paths and extracts all the files to the same directory
75 SkipPaths = 0x0002
76 };
77 Q_DECLARE_FLAGS(ExtractionOptions, ExtractionOption)
78
79 enum CompressionMethod
80 {
81 NoCompression, Deflated, UnknownCompression
82 };
83
84 enum FileType
85 {
86 File, Directory
87 };
88
89 typedef struct ZipEntry
90 {
91 ZipEntry();
92
93 QString filename;
94 QString comment;
95
96 quint32 compressedSize;
97 quint32 uncompressedSize;
98 quint32 crc32;
99
100 QDateTime lastModified;
101
102 CompressionMethod compression;
103 FileType type;
104
105 bool encrypted;
106 };
107
108 UnZip();
109 virtual ~UnZip();
110
111 bool isOpen() const;
112
113 ErrorCode openArchive(const QString& filename);
114 ErrorCode openArchive(QIODevice* device);
115 void closeArchive();
116
117 QString archiveComment() const;
118
119 QString formatError(UnZip::ErrorCode c) const;
120
121 bool contains(const QString& file) const;
122
123 QStringList fileList() const;
124 QList<ZipEntry> entryList() const;
125
126 ErrorCode extractAll(const QString& dirname, ExtractionOptions options = ExtractPaths);
127 ErrorCode extractAll(const QDir& dir, ExtractionOptions options = ExtractPaths);
128
129 ErrorCode extractFile(const QString& filename, const QString& dirname, ExtractionOptions options = ExtractPaths);
130 ErrorCode extractFile(const QString& filename, const QDir& dir, ExtractionOptions options = ExtractPaths);
131 ErrorCode extractFile(const QString& filename, QIODevice* device, ExtractionOptions options = ExtractPaths);
132
133 ErrorCode extractFiles(const QStringList& filenames, const QString& dirname, ExtractionOptions options = ExtractPaths);
134 ErrorCode extractFiles(const QStringList& filenames, const QDir& dir, ExtractionOptions options = ExtractPaths);
135
136 void setPassword(const QString& pwd);
137
138private:
139 UnzipPrivate* d;
140};
141
142Q_DECLARE_OPERATORS_FOR_FLAGS(UnZip::ExtractionOptions)
143
144#endif // OSDAB_UNZIP__H
diff --git a/rbutil/rbutilqt/zip/unzip_p.h b/rbutil/rbutilqt/zip/unzip_p.h
new file mode 100644
index 0000000000..c05ac67b47
--- /dev/null
+++ b/rbutil/rbutilqt/zip/unzip_p.h
@@ -0,0 +1,112 @@
1/****************************************************************************
2** Filename: unzip_p.h
3** Last updated [dd/mm/yyyy]: 28/01/2007
4**
5** pkzip 2.0 decompression.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28//
29// W A R N I N G
30// -------------
31//
32// This file is not part of the Zip/UnZip API. It exists purely as an
33// implementation detail. This header file may change from version to
34// version without notice, or even be removed.
35//
36// We mean it.
37//
38
39#ifndef OSDAB_UNZIP_P__H
40#define OSDAB_UNZIP_P__H
41
42#include "unzip.h"
43#include "zipentry_p.h"
44
45#include <QtGlobal>
46
47// zLib authors suggest using larger buffers (128K or 256K) for (de)compression (especially for inflate())
48// we use a 256K buffer here - if you want to use this code on a pre-iceage mainframe please change it ;)
49#define UNZIP_READ_BUFFER (256*1024)
50
51class UnzipPrivate
52{
53public:
54 UnzipPrivate();
55
56 // Replace this with whatever else you use to store/retrieve the password.
57 QString password;
58
59 bool skipAllEncrypted;
60
61 QMap<QString,ZipEntryP*>* headers;
62
63 QIODevice* device;
64
65 char buffer1[UNZIP_READ_BUFFER];
66 char buffer2[UNZIP_READ_BUFFER];
67
68 unsigned char* uBuffer;
69 const quint32* crcTable;
70
71 // Central Directory (CD) offset
72 quint32 cdOffset;
73 // End of Central Directory (EOCD) offset
74 quint32 eocdOffset;
75
76 // Number of entries in the Central Directory (as to the EOCD record)
77 quint16 cdEntryCount;
78
79 // The number of detected entries that have been skipped because of a non compatible format
80 quint16 unsupportedEntryCount;
81
82 QString comment;
83
84 UnZip::ErrorCode openArchive(QIODevice* device);
85
86 UnZip::ErrorCode seekToCentralDirectory();
87 UnZip::ErrorCode parseCentralDirectoryRecord();
88 UnZip::ErrorCode parseLocalHeaderRecord(const QString& path, ZipEntryP& entry);
89
90 void closeArchive();
91
92 UnZip::ErrorCode extractFile(const QString& path, ZipEntryP& entry, const QDir& dir, UnZip::ExtractionOptions options);
93 UnZip::ErrorCode extractFile(const QString& path, ZipEntryP& entry, QIODevice* device, UnZip::ExtractionOptions options);
94
95 UnZip::ErrorCode testPassword(quint32* keys, const QString& file, const ZipEntryP& header);
96 bool testKeys(const ZipEntryP& header, quint32* keys);
97
98 bool createDirectory(const QString& path);
99
100 inline void decryptBytes(quint32* keys, char* buffer, qint64 read);
101
102 inline quint32 getULong(const unsigned char* data, quint32 offset) const;
103 inline quint64 getULLong(const unsigned char* data, quint32 offset) const;
104 inline quint16 getUShort(const unsigned char* data, quint32 offset) const;
105 inline int decryptByte(quint32 key2) const;
106 inline void updateKeys(quint32* keys, int c) const;
107 inline void initKeys(const QString& pwd, quint32* keys) const;
108
109 inline QDateTime convertDateTime(const unsigned char date[2], const unsigned char time[2]) const;
110};
111
112#endif // OSDAB_UNZIP_P__H
diff --git a/rbutil/rbutilqt/zip/zip.cpp b/rbutil/rbutilqt/zip/zip.cpp
new file mode 100644
index 0000000000..bb02147da3
--- /dev/null
+++ b/rbutil/rbutilqt/zip/zip.cpp
@@ -0,0 +1,1219 @@
1/****************************************************************************
2** Filename: zip.cpp
3** Last updated [dd/mm/yyyy]: 01/02/2007
4**
5** pkzip 2.0 file compression.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28#include "zip.h"
29#include "zip_p.h"
30#include "zipentry_p.h"
31
32// we only use this to seed the random number generator
33#include <time.h>
34
35#include <QMap>
36#include <QString>
37#include <QStringList>
38#include <QDir>
39#include <QFile>
40#include <QDateTime>
41#include <QCoreApplication>
42
43// You can remove this #include if you replace the qDebug() statements.
44#include <QtDebug>
45
46//! Local header size (including signature, excluding variable length fields)
47#define ZIP_LOCAL_HEADER_SIZE 30
48//! Encryption header size
49#define ZIP_LOCAL_ENC_HEADER_SIZE 12
50//! Data descriptor size (signature included)
51#define ZIP_DD_SIZE_WS 16
52//! Central Directory record size (signature included)
53#define ZIP_CD_SIZE 46
54//! End of Central Directory record size (signature included)
55#define ZIP_EOCD_SIZE 22
56
57// Some offsets inside a local header record (signature included)
58#define ZIP_LH_OFF_VERS 4
59#define ZIP_LH_OFF_GPFLAG 6
60#define ZIP_LH_OFF_CMET 8
61#define ZIP_LH_OFF_MODT 10
62#define ZIP_LH_OFF_MODD 12
63#define ZIP_LH_OFF_CRC 14
64#define ZIP_LH_OFF_CSIZE 18
65#define ZIP_LH_OFF_USIZE 22
66#define ZIP_LH_OFF_NAMELEN 26
67#define ZIP_LH_OFF_XLEN 28
68
69// Some offsets inside a data descriptor record (including signature)
70#define ZIP_DD_OFF_CRC32 4
71#define ZIP_DD_OFF_CSIZE 8
72#define ZIP_DD_OFF_USIZE 12
73
74// Some offsets inside a Central Directory record (including signature)
75#define ZIP_CD_OFF_MADEBY 4
76#define ZIP_CD_OFF_VERSION 6
77#define ZIP_CD_OFF_GPFLAG 8
78#define ZIP_CD_OFF_CMET 10
79#define ZIP_CD_OFF_MODT 12
80#define ZIP_CD_OFF_MODD 14
81#define ZIP_CD_OFF_CRC 16
82#define ZIP_CD_OFF_CSIZE 20
83#define ZIP_CD_OFF_USIZE 24
84#define ZIP_CD_OFF_NAMELEN 28
85#define ZIP_CD_OFF_XLEN 30
86#define ZIP_CD_OFF_COMMLEN 32
87#define ZIP_CD_OFF_DISKSTART 34
88#define ZIP_CD_OFF_IATTR 36
89#define ZIP_CD_OFF_EATTR 38
90#define ZIP_CD_OFF_LHOFF 42
91
92// Some offsets inside a EOCD record (including signature)
93#define ZIP_EOCD_OFF_DISKNUM 4
94#define ZIP_EOCD_OFF_CDDISKNUM 6
95#define ZIP_EOCD_OFF_ENTRIES 8
96#define ZIP_EOCD_OFF_CDENTRIES 10
97#define ZIP_EOCD_OFF_CDSIZE 12
98#define ZIP_EOCD_OFF_CDOFF 16
99#define ZIP_EOCD_OFF_COMMLEN 20
100
101//! PKZip version for archives created by this API
102#define ZIP_VERSION 0x14
103
104//! Do not store very small files as the compression headers overhead would be to big
105#define ZIP_COMPRESSION_THRESHOLD 60
106
107//! This macro updates a one-char-only CRC; it's the Info-Zip macro re-adapted
108#define CRC32(c, b) crcTable[((int)c^b) & 0xff] ^ (c >> 8)
109
110/*!
111 \class Zip zip.h
112
113 \brief Zip file compression.
114
115 Some quick usage examples.
116
117 \verbatim
118 Suppose you have this directory structure:
119
120 /root/dir1/
121 /root/dir1/file1.1
122 /root/dir1/file1.2
123 /root/dir1/dir1.1/
124 /root/dir1/dir1.2/file1.2.1
125
126 EXAMPLE 1:
127 myZipInstance.addDirectory("/root/dir1");
128
129 RESULT:
130 Beheaves like any common zip software and creates a zip file with this structure:
131
132 dir1/
133 dir1/file1.1
134 dir1/file1.2
135 dir1/dir1.1/
136 dir1/dir1.2/file1.2.1
137
138 EXAMPLE 2:
139 myZipInstance.addDirectory("/root/dir1", "myRoot/myFolder");
140
141 RESULT:
142 Adds a custom root to the paths and creates a zip file with this structure:
143
144 myRoot/myFolder/dir1/
145 myRoot/myFolder/dir1/file1.1
146 myRoot/myFolder/dir1/file1.2
147 myRoot/myFolder/dir1/dir1.1/
148 myRoot/myFolder/dir1/dir1.2/file1.2.1
149
150 EXAMPLE 3:
151 myZipInstance.addDirectory("/root/dir1", Zip::AbsolutePaths);
152
153 NOTE:
154 Same as calling addDirectory(SOME_PATH, PARENT_PATH_of_SOME_PATH).
155
156 RESULT:
157 Preserves absolute paths and creates a zip file with this structure:
158
159 /root/dir1/
160 /root/dir1/file1.1
161 /root/dir1/file1.2
162 /root/dir1/dir1.1/
163 /root/dir1/dir1.2/file1.2.1
164
165 EXAMPLE 4:
166 myZipInstance.setPassword("hellopass");
167 myZipInstance.addDirectory("/root/dir1", "/");
168
169 RESULT:
170 Adds and encrypts the files in /root/dir1, creating the following zip structure:
171
172 /dir1/
173 /dir1/file1.1
174 /dir1/file1.2
175 /dir1/dir1.1/
176 /dir1/dir1.2/file1.2.1
177
178 \endverbatim
179*/
180
181/*! \enum Zip::ErrorCode The result of a compression operation.
182 \value Zip::Ok No error occurred.
183 \value Zip::ZlibInit Failed to init or load the zlib library.
184 \value Zip::ZlibError The zlib library returned some error.
185 \value Zip::FileExists The file already exists and will not be overwritten.
186 \value Zip::OpenFailed Unable to create or open a device.
187 \value Zip::NoOpenArchive CreateArchive() has not been called yet.
188 \value Zip::FileNotFound File or directory does not exist.
189 \value Zip::ReadFailed Reading of a file failed.
190 \value Zip::WriteFailed Writing of a file failed.
191 \value Zip::SeekFailed Seek failed.
192*/
193
194/*! \enum Zip::CompressionLevel Returns the result of a decompression operation.
195 \value Zip::Store No compression.
196 \value Zip::Deflate1 Deflate compression level 1(lowest compression).
197 \value Zip::Deflate1 Deflate compression level 2.
198 \value Zip::Deflate1 Deflate compression level 3.
199 \value Zip::Deflate1 Deflate compression level 4.
200 \value Zip::Deflate1 Deflate compression level 5.
201 \value Zip::Deflate1 Deflate compression level 6.
202 \value Zip::Deflate1 Deflate compression level 7.
203 \value Zip::Deflate1 Deflate compression level 8.
204 \value Zip::Deflate1 Deflate compression level 9 (maximum compression).
205 \value Zip::AutoCPU Adapt compression level to CPU speed (faster CPU => better compression).
206 \value Zip::AutoMIME Adapt compression level to MIME type of the file being compressed.
207 \value Zip::AutoFull Use both CPU and MIME type detection.
208*/
209
210
211/************************************************************************
212 Public interface
213*************************************************************************/
214
215/*!
216 Creates a new Zip file compressor.
217*/
218Zip::Zip()
219{
220 d = new ZipPrivate;
221}
222
223/*!
224 Closes any open archive and releases used resources.
225*/
226Zip::~Zip()
227{
228 closeArchive();
229 delete d;
230}
231
232/*!
233 Returns true if there is an open archive.
234*/
235bool Zip::isOpen() const
236{
237 return d->device != 0;
238}
239
240/*!
241 Sets the password to be used for the next files being added!
242 Files added before calling this method will use the previously
243 set password (if any).
244 Closing the archive won't clear the password!
245*/
246void Zip::setPassword(const QString& pwd)
247{
248 d->password = pwd;
249}
250
251//! Convenience method, clears the current password.
252void Zip::clearPassword()
253{
254 d->password.clear();
255}
256
257//! Returns the currently used password.
258QString Zip::password() const
259{
260 return d->password;
261}
262
263/*!
264 Attempts to create a new Zip archive. If \p overwrite is true and the file
265 already exist it will be overwritten.
266 Any open archive will be closed.
267 */
268Zip::ErrorCode Zip::createArchive(const QString& filename, bool overwrite)
269{
270 QFile* file = new QFile(filename);
271
272 if (file->exists() && !overwrite) {
273 delete file;
274 return Zip::FileExists;
275 }
276
277 if (!file->open(QIODevice::WriteOnly)) {
278 delete file;
279 return Zip::OpenFailed;
280 }
281
282 Zip::ErrorCode ec = createArchive(file);
283 if (ec != Zip::Ok) {
284 file->remove();
285 }
286
287 return ec;
288}
289
290/*!
291 Attempts to create a new Zip archive. If there is another open archive this will be closed.
292 \warning The class takes ownership of the device!
293 */
294Zip::ErrorCode Zip::createArchive(QIODevice* device)
295{
296 if (device == 0)
297 {
298 qDebug() << "Invalid device.";
299 return Zip::OpenFailed;
300 }
301
302 return d->createArchive(device);
303}
304
305/*!
306 Returns the current archive comment.
307*/
308QString Zip::archiveComment() const
309{
310 return d->comment;
311}
312
313/*!
314 Sets the comment for this archive. Note: createArchive() should have been
315 called before.
316*/
317void Zip::setArchiveComment(const QString& comment)
318{
319 if (d->device != 0)
320 d->comment = comment;
321}
322
323/*!
324 Convenience method, same as calling
325 Zip::addDirectory(const QString&,const QString&,CompressionLevel)
326 with an empty \p root parameter (or with the parent directory of \p path if the
327 AbsolutePaths options is set).
328
329 The ExtractionOptions are checked in the order they are defined in the zip.h heaser file.
330 This means that the last one overwrites the previous one (if some conflict occurs), i.e.
331 Zip::IgnorePaths | Zip::AbsolutePaths would be interpreted as Zip::IgnorePaths.
332 */
333Zip::ErrorCode Zip::addDirectory(const QString& path, CompressionOptions options, CompressionLevel level)
334{
335 return addDirectory(path, QString(), options, level);
336}
337
338/*!
339 Convenience method, same as calling Zip::addDirectory(const QString&,const QString&,CompressionOptions,CompressionLevel)
340 with the Zip::RelativePaths flag as compression option.
341 */
342Zip::ErrorCode Zip::addDirectory(const QString& path, const QString& root, CompressionLevel level)
343{
344 return addDirectory(path, root, Zip::RelativePaths, level);
345}
346
347/*!
348 Convenience method, same as calling Zip::addDirectory(const QString&,const QString&,CompressionOptions,CompressionLevel)
349 with the Zip::IgnorePaths flag as compression option and an empty \p root parameter.
350*/
351Zip::ErrorCode Zip::addDirectoryContents(const QString& path, CompressionLevel level)
352{
353 return addDirectory(path, QString(), IgnorePaths, level);
354}
355
356/*!
357 Convenience method, same as calling Zip::addDirectory(const QString&,const QString&,CompressionOptions,CompressionLevel)
358 with the Zip::IgnorePaths flag as compression option.
359*/
360Zip::ErrorCode Zip::addDirectoryContents(const QString& path, const QString& root, CompressionLevel level)
361{
362 return addDirectory(path, root, IgnorePaths, level);
363}
364
365/*!
366 Recursively adds files contained in \p dir to the archive, using \p root as name for the root folder.
367 Stops adding files if some error occurs.
368
369 The ExtractionOptions are checked in the order they are defined in the zip.h heaser file.
370 This means that the last one overwrites the previous one (if some conflict occurs), i.e.
371 Zip::IgnorePaths | Zip::AbsolutePaths would be interpreted as Zip::IgnorePaths.
372
373 The \p root parameter is ignored with the Zip::IgnorePaths parameter and used as path prefix (a trailing /
374 is always added as directory separator!) otherwise (even with Zip::AbsolutePaths set!).
375*/
376Zip::ErrorCode Zip::addDirectory(const QString& path, const QString& root, CompressionOptions options, CompressionLevel level)
377{
378 // qDebug() << QString("addDir(path=%1, root=%2)").arg(path, root);
379
380 // Bad boy didn't call createArchive() yet :)
381 if (d->device == 0)
382 return Zip::NoOpenArchive;
383
384 QDir dir(path);
385 if (!dir.exists())
386 return Zip::FileNotFound;
387
388 // Remove any trailing separator
389 QString actualRoot = root.trimmed();
390
391 // Preserve Unix root
392 if (actualRoot != "/")
393 {
394 while (actualRoot.endsWith("/") || actualRoot.endsWith("\\"))
395 actualRoot.truncate(actualRoot.length() - 1);
396 }
397
398 // QDir::cleanPath() fixes some issues with QDir::dirName()
399 QFileInfo current(QDir::cleanPath(path));
400
401 if (!actualRoot.isEmpty() && actualRoot != "/")
402 actualRoot.append("/");
403
404 /* This part is quite confusing and needs some test or check */
405 /* An attempt to compress the / root directory evtl. using a root prefix should be a good test */
406 if (options.testFlag(AbsolutePaths) && !options.testFlag(IgnorePaths))
407 {
408 QString absolutePath = d->extractRoot(path);
409 if (!absolutePath.isEmpty() && absolutePath != "/")
410 absolutePath.append("/");
411 actualRoot.append(absolutePath);
412 }
413
414 if (!options.testFlag(IgnorePaths))
415 {
416 actualRoot = actualRoot.append(QDir(current.absoluteFilePath()).dirName());
417 actualRoot.append("/");
418 }
419
420 // actualRoot now contains the path of the file relative to the zip archive
421 // with a trailing /
422
423 QFileInfoList list = dir.entryInfoList(
424 QDir::Files |
425 QDir::Dirs |
426 QDir::NoDotAndDotDot |
427 QDir::NoSymLinks);
428
429 ErrorCode ec = Zip::Ok;
430 bool filesAdded = false;
431
432 CompressionOptions recursionOptions;
433 if (options.testFlag(IgnorePaths))
434 recursionOptions |= IgnorePaths;
435 else recursionOptions |= RelativePaths;
436
437 for (int i = 0; i < list.size() && ec == Zip::Ok; ++i)
438 {
439 QFileInfo info = list.at(i);
440
441 if (info.isDir())
442 {
443 // Recursion :)
444 ec = addDirectory(info.absoluteFilePath(), actualRoot, recursionOptions, level);
445 }
446 else
447 {
448 ec = d->createEntry(info, actualRoot, level);
449 filesAdded = true;
450 }
451 }
452
453
454 // We need an explicit record for this dir
455 // Non-empty directories don't need it because they have a path component in the filename
456 if (!filesAdded && !options.testFlag(IgnorePaths))
457 ec = d->createEntry(current, actualRoot, level);
458
459 return ec;
460}
461
462/*!
463 Closes the archive and writes any pending data.
464*/
465Zip::ErrorCode Zip::closeArchive()
466{
467 Zip::ErrorCode ec = d->closeArchive();
468 d->reset();
469 return ec;
470}
471
472/*!
473 Returns a locale translated error string for a given error code.
474*/
475QString Zip::formatError(Zip::ErrorCode c) const
476{
477 switch (c)
478 {
479 case Ok: return QCoreApplication::translate("Zip", "ZIP operation completed successfully."); break;
480 case ZlibInit: return QCoreApplication::translate("Zip", "Failed to initialize or load zlib library."); break;
481 case ZlibError: return QCoreApplication::translate("Zip", "zlib library error."); break;
482 case OpenFailed: return QCoreApplication::translate("Zip", "Unable to create or open file."); break;
483 case NoOpenArchive: return QCoreApplication::translate("Zip", "No archive has been created yet."); break;
484 case FileNotFound: return QCoreApplication::translate("Zip", "File or directory does not exist."); break;
485 case ReadFailed: return QCoreApplication::translate("Zip", "File read error."); break;
486 case WriteFailed: return QCoreApplication::translate("Zip", "File write error."); break;
487 case SeekFailed: return QCoreApplication::translate("Zip", "File seek error."); break;
488 default: ;
489 }
490
491 return QCoreApplication::translate("Zip", "Unknown error.");
492}
493
494
495/************************************************************************
496 Private interface
497*************************************************************************/
498
499//! \internal
500ZipPrivate::ZipPrivate()
501{
502 headers = 0;
503 device = 0;
504
505 // keep an unsigned pointer so we avoid to over bloat the code with casts
506 uBuffer = (unsigned char*) buffer1;
507 crcTable = (quint32*) get_crc_table();
508}
509
510//! \internal
511ZipPrivate::~ZipPrivate()
512{
513 closeArchive();
514}
515
516//! \internal
517Zip::ErrorCode ZipPrivate::createArchive(QIODevice* dev)
518{
519 Q_ASSERT(dev != 0);
520
521 if (device != 0)
522 closeArchive();
523
524 device = dev;
525
526 if (!device->isOpen())
527 {
528 if (!device->open(QIODevice::ReadOnly)) {
529 delete device;
530 device = 0;
531 qDebug() << "Unable to open device for writing.";
532 return Zip::OpenFailed;
533 }
534 }
535
536 headers = new QMap<QString,ZipEntryP*>;
537 return Zip::Ok;
538}
539
540//! \internal Writes a new entry in the zip file.
541Zip::ErrorCode ZipPrivate::createEntry(const QFileInfo& file, const QString& root, Zip::CompressionLevel level)
542{
543 //! \todo Automatic level detection (cpu, extension & file size)
544
545 // Directories and very small files are always stored
546 // (small files would get bigger due to the compression headers overhead)
547
548 // Need this for zlib
549 bool isPNGFile = false;
550 bool dirOnly = file.isDir();
551
552 QString entryName = root;
553
554 // Directory entry
555 if (dirOnly)
556 level = Zip::Store;
557 else
558 {
559 entryName.append(file.fileName());
560
561 QString ext = file.completeSuffix().toLower();
562 isPNGFile = ext == "png";
563
564 if (file.size() < ZIP_COMPRESSION_THRESHOLD)
565 level = Zip::Store;
566 else
567 switch (level)
568 {
569 case Zip::AutoCPU:
570 level = Zip::Deflate5;
571 break;
572 case Zip::AutoMIME:
573 level = detectCompressionByMime(ext);
574 break;
575 case Zip::AutoFull:
576 level = detectCompressionByMime(ext);
577 break;
578 default:
579 ;
580 }
581 }
582
583 // entryName contains the path as it should be written
584 // in the zip file records
585 // qDebug() << QString("addDir(file=%1, root=%2, entry=%3)").arg(file.absoluteFilePath(), root, entryName);
586
587 // create header and store it to write a central directory later
588 ZipEntryP* h = new ZipEntryP;
589
590 h->compMethod = (level == Zip::Store) ? 0 : 0x0008;
591
592 // Set encryption bit and set the data descriptor bit
593 // so we can use mod time instead of crc for password check
594 bool encrypt = !dirOnly && !password.isEmpty();
595 if (encrypt)
596 h->gpFlag[0] |= 9;
597
598 QDateTime dt = file.lastModified();
599 QDate d = dt.date();
600 h->modDate[1] = ((d.year() - 1980) << 1) & 254;
601 h->modDate[1] |= ((d.month() >> 3) & 1);
602 h->modDate[0] = ((d.month() & 7) << 5) & 224;
603 h->modDate[0] |= d.day();
604
605 QTime t = dt.time();
606 h->modTime[1] = (t.hour() << 3) & 248;
607 h->modTime[1] |= ((t.minute() >> 3) & 7);
608 h->modTime[0] = ((t.minute() & 7) << 5) & 224;
609 h->modTime[0] |= t.second() / 2;
610
611 h->szUncomp = dirOnly ? 0 : file.size();
612
613 // **** Write local file header ****
614
615 // signature
616 buffer1[0] = 'P'; buffer1[1] = 'K';
617 buffer1[2] = 0x3; buffer1[3] = 0x4;
618
619 // version needed to extract
620 buffer1[ZIP_LH_OFF_VERS] = ZIP_VERSION;
621 buffer1[ZIP_LH_OFF_VERS + 1] = 0;
622
623 // general purpose flag
624 buffer1[ZIP_LH_OFF_GPFLAG] = h->gpFlag[0];
625 buffer1[ZIP_LH_OFF_GPFLAG + 1] = h->gpFlag[1];
626
627 // compression method
628 buffer1[ZIP_LH_OFF_CMET] = h->compMethod & 0xFF;
629 buffer1[ZIP_LH_OFF_CMET + 1] = (h->compMethod>>8) & 0xFF;
630
631 // last mod file time
632 buffer1[ZIP_LH_OFF_MODT] = h->modTime[0];
633 buffer1[ZIP_LH_OFF_MODT + 1] = h->modTime[1];
634
635 // last mod file date
636 buffer1[ZIP_LH_OFF_MODD] = h->modDate[0];
637 buffer1[ZIP_LH_OFF_MODD + 1] = h->modDate[1];
638
639 // skip crc (4bytes) [14,15,16,17]
640
641 // skip compressed size but include evtl. encryption header (4bytes: [18,19,20,21])
642 buffer1[ZIP_LH_OFF_CSIZE] =
643 buffer1[ZIP_LH_OFF_CSIZE + 1] =
644 buffer1[ZIP_LH_OFF_CSIZE + 2] =
645 buffer1[ZIP_LH_OFF_CSIZE + 3] = 0;
646
647 h->szComp = encrypt ? ZIP_LOCAL_ENC_HEADER_SIZE : 0;
648
649 // uncompressed size [22,23,24,25]
650 setULong(h->szUncomp, buffer1, ZIP_LH_OFF_USIZE);
651
652 // filename length
653 QByteArray entryNameBytes = entryName.toAscii();
654 int sz = entryNameBytes.size();
655
656 buffer1[ZIP_LH_OFF_NAMELEN] = sz & 0xFF;
657 buffer1[ZIP_LH_OFF_NAMELEN + 1] = (sz >> 8) & 0xFF;
658
659 // extra field length
660 buffer1[ZIP_LH_OFF_XLEN] = buffer1[ZIP_LH_OFF_XLEN + 1] = 0;
661
662 // Store offset to write crc and compressed size
663 h->lhOffset = device->pos();
664 quint32 crcOffset = h->lhOffset + ZIP_LH_OFF_CRC;
665
666 if (device->write(buffer1, ZIP_LOCAL_HEADER_SIZE) != ZIP_LOCAL_HEADER_SIZE)
667 {
668 delete h;
669 return Zip::WriteFailed;
670 }
671
672 // Write out filename
673 if (device->write(entryNameBytes) != sz)
674 {
675 delete h;
676 return Zip::WriteFailed;
677 }
678
679 // Encryption keys
680 quint32 keys[3] = { 0, 0, 0 };
681
682 if (encrypt)
683 {
684 // **** encryption header ****
685
686 // XOR with PI to ensure better random numbers
687 // with poorly implemented rand() as suggested by Info-Zip
688 srand(time(NULL) ^ 3141592654UL);
689 int randByte;
690
691 initKeys(keys);
692 for (int i=0; i<10; ++i)
693 {
694 randByte = (rand() >> 7) & 0xff;
695 buffer1[i] = decryptByte(keys[2]) ^ randByte;
696 updateKeys(keys, randByte);
697 }
698
699 // Encrypt encryption header
700 initKeys(keys);
701 for (int i=0; i<10; ++i)
702 {
703 randByte = decryptByte(keys[2]);
704 updateKeys(keys, buffer1[i]);
705 buffer1[i] ^= randByte;
706 }
707
708 // We don't know the CRC at this time, so we use the modification time
709 // as the last two bytes
710 randByte = decryptByte(keys[2]);
711 updateKeys(keys, h->modTime[0]);
712 buffer1[10] ^= randByte;
713
714 randByte = decryptByte(keys[2]);
715 updateKeys(keys, h->modTime[1]);
716 buffer1[11] ^= randByte;
717
718 // Write out encryption header
719 if (device->write(buffer1, ZIP_LOCAL_ENC_HEADER_SIZE) != ZIP_LOCAL_ENC_HEADER_SIZE)
720 {
721 delete h;
722 return Zip::WriteFailed;
723 }
724 }
725
726 qint64 written = 0;
727 quint32 crc = crc32(0L, Z_NULL, 0);
728
729 if (!dirOnly)
730 {
731 QFile actualFile(file.absoluteFilePath());
732 if (!actualFile.open(QIODevice::ReadOnly))
733 {
734 qDebug() << QString("An error occurred while opening %1").arg(file.absoluteFilePath());
735 return Zip::OpenFailed;
736 }
737
738 // Write file data
739 qint64 read = 0;
740 qint64 totRead = 0;
741 qint64 toRead = actualFile.size();
742
743 if (level == Zip::Store)
744 {
745 while ( (read = actualFile.read(buffer1, ZIP_READ_BUFFER)) > 0 )
746 {
747 crc = crc32(crc, uBuffer, read);
748
749 if (password != 0)
750 encryptBytes(keys, buffer1, read);
751
752 if ( (written = device->write(buffer1, read)) != read )
753 {
754 actualFile.close();
755 delete h;
756 return Zip::WriteFailed;
757 }
758 }
759 }
760 else
761 {
762 z_stream zstr;
763
764 // Initialize zalloc, zfree and opaque before calling the init function
765 zstr.zalloc = Z_NULL;
766 zstr.zfree = Z_NULL;
767 zstr.opaque = Z_NULL;
768
769 int zret;
770
771 // Use deflateInit2 with negative windowBits to get raw compression
772 if ((zret = deflateInit2_(
773 &zstr,
774 (int)level,
775 Z_DEFLATED,
776 -MAX_WBITS,
777 8,
778 isPNGFile ? Z_RLE : Z_DEFAULT_STRATEGY,
779 ZLIB_VERSION,
780 sizeof(z_stream)
781 )) != Z_OK )
782 {
783 actualFile.close();
784 qDebug() << "Could not initialize zlib for compression";
785 delete h;
786 return Zip::ZlibError;
787 }
788
789 qint64 compressed;
790
791 int flush = Z_NO_FLUSH;
792
793 do
794 {
795 read = actualFile.read(buffer1, ZIP_READ_BUFFER);
796 totRead += read;
797
798 if (read == 0)
799 break;
800 if (read < 0)
801 {
802 actualFile.close();
803 deflateEnd(&zstr);
804 qDebug() << QString("Error while reading %1").arg(file.absoluteFilePath());
805 delete h;
806 return Zip::ReadFailed;
807 }
808
809 crc = crc32(crc, uBuffer, read);
810
811 zstr.next_in = (Bytef*) buffer1;
812 zstr.avail_in = (uInt)read;
813
814 // Tell zlib if this is the last chunk we want to encode
815 // by setting the flush parameter to Z_FINISH
816 flush = (totRead == toRead) ? Z_FINISH : Z_NO_FLUSH;
817
818 // Run deflate() on input until output buffer not full
819 // finish compression if all of source has been read in
820 do
821 {
822 zstr.next_out = (Bytef*) buffer2;
823 zstr.avail_out = ZIP_READ_BUFFER;
824
825 zret = deflate(&zstr, flush);
826 // State not clobbered
827 Q_ASSERT(zret != Z_STREAM_ERROR);
828
829 // Write compressed data to file and empty buffer
830 compressed = ZIP_READ_BUFFER - zstr.avail_out;
831
832 if (password != 0)
833 encryptBytes(keys, buffer2, compressed);
834
835 if (device->write(buffer2, compressed) != compressed)
836 {
837 deflateEnd(&zstr);
838 actualFile.close();
839 qDebug() << QString("Error while writing %1").arg(file.absoluteFilePath());
840 delete h;
841 return Zip::WriteFailed;
842 }
843
844 written += compressed;
845
846 } while (zstr.avail_out == 0);
847
848 // All input will be used
849 Q_ASSERT(zstr.avail_in == 0);
850
851 } while (flush != Z_FINISH);
852
853 // Stream will be complete
854 Q_ASSERT(zret == Z_STREAM_END);
855
856 deflateEnd(&zstr);
857
858 } // if (level != STORE)
859
860 actualFile.close();
861 }
862
863 // Store end of entry offset
864 quint32 current = device->pos();
865
866 // Update crc and compressed size in local header
867 if (!device->seek(crcOffset))
868 {
869 delete h;
870 return Zip::SeekFailed;
871 }
872
873 h->crc = dirOnly ? 0 : crc;
874 h->szComp += written;
875
876 setULong(h->crc, buffer1, 0);
877 setULong(h->szComp, buffer1, 4);
878 if ( device->write(buffer1, 8) != 8)
879 {
880 delete h;
881 return Zip::WriteFailed;
882 }
883
884 // Seek to end of entry
885 if (!device->seek(current))
886 {
887 delete h;
888 return Zip::SeekFailed;
889 }
890
891 if ((h->gpFlag[0] & 8) == 8)
892 {
893 // Write data descriptor
894
895 // Signature: PK\7\8
896 buffer1[0] = 'P';
897 buffer1[1] = 'K';
898 buffer1[2] = 0x07;
899 buffer1[3] = 0x08;
900
901 // CRC
902 setULong(h->crc, buffer1, ZIP_DD_OFF_CRC32);
903
904 // Compressed size
905 setULong(h->szComp, buffer1, ZIP_DD_OFF_CSIZE);
906
907 // Uncompressed size
908 setULong(h->szUncomp, buffer1, ZIP_DD_OFF_USIZE);
909
910 if (device->write(buffer1, ZIP_DD_SIZE_WS) != ZIP_DD_SIZE_WS)
911 {
912 delete h;
913 return Zip::WriteFailed;
914 }
915 }
916
917 headers->insert(entryName, h);
918 return Zip::Ok;
919}
920
921//! \internal
922int ZipPrivate::decryptByte(quint32 key2) const
923{
924 quint16 temp = ((quint16)(key2) & 0xffff) | 2;
925 return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
926}
927
928//! \internal Writes an quint32 (4 bytes) to a byte array at given offset.
929void ZipPrivate::setULong(quint32 v, char* buffer, unsigned int offset)
930{
931 buffer[offset+3] = ((v >> 24) & 0xFF);
932 buffer[offset+2] = ((v >> 16) & 0xFF);
933 buffer[offset+1] = ((v >> 8) & 0xFF);
934 buffer[offset] = (v & 0xFF);
935}
936
937//! \internal Initializes decryption keys using a password.
938void ZipPrivate::initKeys(quint32* keys) const
939{
940 // Encryption keys initialization constants are taken from the
941 // PKZip file format specification docs
942 keys[0] = 305419896L;
943 keys[1] = 591751049L;
944 keys[2] = 878082192L;
945
946 QByteArray pwdBytes = password.toAscii();
947 int sz = pwdBytes.size();
948 const char* ascii = pwdBytes.data();
949
950 for (int i=0; i<sz; ++i)
951 updateKeys(keys, (int)ascii[i]);
952}
953
954//! \internal Updates encryption keys.
955void ZipPrivate::updateKeys(quint32* keys, int c) const
956{
957 keys[0] = CRC32(keys[0], c);
958 keys[1] += keys[0] & 0xff;
959 keys[1] = keys[1] * 134775813L + 1;
960 keys[2] = CRC32(keys[2], ((int)keys[1]) >> 24);
961}
962
963//! \internal Encrypts a byte array.
964void ZipPrivate::encryptBytes(quint32* keys, char* buffer, qint64 read)
965{
966 char t;
967
968 for (int i=0; i<(int)read; ++i)
969 {
970 t = buffer[i];
971 buffer[i] ^= decryptByte(keys[2]);
972 updateKeys(keys, t);
973 }
974}
975
976//! \internal Detects the best compression level for a given file extension.
977Zip::CompressionLevel ZipPrivate::detectCompressionByMime(const QString& ext)
978{
979 // files really hard to compress
980 if ((ext == "png") ||
981 (ext == "jpg") ||
982 (ext == "jpeg") ||
983 (ext == "mp3") ||
984 (ext == "ogg") ||
985 (ext == "ogm") ||
986 (ext == "avi") ||
987 (ext == "mov") ||
988 (ext == "rm") ||
989 (ext == "ra") ||
990 (ext == "zip") ||
991 (ext == "rar") ||
992 (ext == "bz2") ||
993 (ext == "gz") ||
994 (ext == "7z") ||
995 (ext == "z") ||
996 (ext == "jar")
997 ) return Zip::Store;
998
999 // files slow and hard to compress
1000 if ((ext == "exe") ||
1001 (ext == "bin") ||
1002 (ext == "rpm") ||
1003 (ext == "deb")
1004 ) return Zip::Deflate2;
1005
1006 return Zip::Deflate9;
1007}
1008
1009/*!
1010 Closes the current archive and writes out pending data.
1011*/
1012Zip::ErrorCode ZipPrivate::closeArchive()
1013{
1014 // Close current archive by writing out central directory
1015 // and free up resources
1016
1017 if (device == 0)
1018 return Zip::Ok;
1019
1020 if (headers == 0)
1021 return Zip::Ok;
1022
1023 const ZipEntryP* h;
1024
1025 unsigned int sz;
1026 quint32 szCentralDir = 0;
1027 quint32 offCentralDir = device->pos();
1028
1029 for (QMap<QString,ZipEntryP*>::ConstIterator itr = headers->constBegin(); itr != headers->constEnd(); ++itr)
1030 {
1031 h = itr.value();
1032
1033 // signature
1034 buffer1[0] = 'P';
1035 buffer1[1] = 'K';
1036 buffer1[2] = 0x01;
1037 buffer1[3] = 0x02;
1038
1039 // version made by (currently only MS-DOS/FAT - no symlinks or other stuff supported)
1040 buffer1[ZIP_CD_OFF_MADEBY] = buffer1[ZIP_CD_OFF_MADEBY + 1] = 0;
1041
1042 // version needed to extract
1043 buffer1[ZIP_CD_OFF_VERSION] = ZIP_VERSION;
1044 buffer1[ZIP_CD_OFF_VERSION + 1] = 0;
1045
1046 // general purpose flag
1047 buffer1[ZIP_CD_OFF_GPFLAG] = h->gpFlag[0];
1048 buffer1[ZIP_CD_OFF_GPFLAG + 1] = h->gpFlag[1];
1049
1050 // compression method
1051 buffer1[ZIP_CD_OFF_CMET] = h->compMethod & 0xFF;
1052 buffer1[ZIP_CD_OFF_CMET + 1] = (h->compMethod >> 8) & 0xFF;
1053
1054 // last mod file time
1055 buffer1[ZIP_CD_OFF_MODT] = h->modTime[0];
1056 buffer1[ZIP_CD_OFF_MODT + 1] = h->modTime[1];
1057
1058 // last mod file date
1059 buffer1[ZIP_CD_OFF_MODD] = h->modDate[0];
1060 buffer1[ZIP_CD_OFF_MODD + 1] = h->modDate[1];
1061
1062 // crc (4bytes) [16,17,18,19]
1063 setULong(h->crc, buffer1, ZIP_CD_OFF_CRC);
1064
1065 // compressed size (4bytes: [20,21,22,23])
1066 setULong(h->szComp, buffer1, ZIP_CD_OFF_CSIZE);
1067
1068 // uncompressed size [24,25,26,27]
1069 setULong(h->szUncomp, buffer1, ZIP_CD_OFF_USIZE);
1070
1071 // filename
1072 QByteArray fileNameBytes = itr.key().toAscii();
1073 sz = fileNameBytes.size();
1074 buffer1[ZIP_CD_OFF_NAMELEN] = sz & 0xFF;
1075 buffer1[ZIP_CD_OFF_NAMELEN + 1] = (sz >> 8) & 0xFF;
1076
1077 // extra field length
1078 buffer1[ZIP_CD_OFF_XLEN] = buffer1[ZIP_CD_OFF_XLEN + 1] = 0;
1079
1080 // file comment length
1081 buffer1[ZIP_CD_OFF_COMMLEN] = buffer1[ZIP_CD_OFF_COMMLEN + 1] = 0;
1082
1083 // disk number start
1084 buffer1[ZIP_CD_OFF_DISKSTART] = buffer1[ZIP_CD_OFF_DISKSTART + 1] = 0;
1085
1086 // internal file attributes
1087 buffer1[ZIP_CD_OFF_IATTR] = buffer1[ZIP_CD_OFF_IATTR + 1] = 0;
1088
1089 // external file attributes
1090 buffer1[ZIP_CD_OFF_EATTR] =
1091 buffer1[ZIP_CD_OFF_EATTR + 1] =
1092 buffer1[ZIP_CD_OFF_EATTR + 2] =
1093 buffer1[ZIP_CD_OFF_EATTR + 3] = 0;
1094
1095 // relative offset of local header [42->45]
1096 setULong(h->lhOffset, buffer1, ZIP_CD_OFF_LHOFF);
1097
1098 if (device->write(buffer1, ZIP_CD_SIZE) != ZIP_CD_SIZE)
1099 {
1100 //! \todo See if we can detect QFile objects using the Qt Meta Object System
1101 /*
1102 if (!device->remove())
1103 qDebug() << tr("Unable to delete corrupted archive: %1").arg(device->fileName());
1104 */
1105 return Zip::WriteFailed;
1106 }
1107
1108 // Write out filename
1109 if ((unsigned int)device->write(fileNameBytes) != sz)
1110 {
1111 //! \todo SAME AS ABOVE: See if we can detect QFile objects using the Qt Meta Object System
1112 /*
1113 if (!device->remove())
1114 qDebug() << tr("Unable to delete corrupted archive: %1").arg(device->fileName());
1115 */
1116 return Zip::WriteFailed;
1117 }
1118
1119 szCentralDir += (ZIP_CD_SIZE + sz);
1120
1121 } // central dir headers loop
1122
1123
1124 // Write end of central directory
1125
1126 // signature
1127 buffer1[0] = 'P';
1128 buffer1[1] = 'K';
1129 buffer1[2] = 0x05;
1130 buffer1[3] = 0x06;
1131
1132 // number of this disk
1133 buffer1[ZIP_EOCD_OFF_DISKNUM] = buffer1[ZIP_EOCD_OFF_DISKNUM + 1] = 0;
1134
1135 // number of disk with central directory
1136 buffer1[ZIP_EOCD_OFF_CDDISKNUM] = buffer1[ZIP_EOCD_OFF_CDDISKNUM + 1] = 0;
1137
1138 // number of entries in this disk
1139 sz = headers->count();
1140 buffer1[ZIP_EOCD_OFF_ENTRIES] = sz & 0xFF;
1141 buffer1[ZIP_EOCD_OFF_ENTRIES + 1] = (sz >> 8) & 0xFF;
1142
1143 // total number of entries
1144 buffer1[ZIP_EOCD_OFF_CDENTRIES] = buffer1[ZIP_EOCD_OFF_ENTRIES];
1145 buffer1[ZIP_EOCD_OFF_CDENTRIES + 1] = buffer1[ZIP_EOCD_OFF_ENTRIES + 1];
1146
1147 // size of central directory [12->15]
1148 setULong(szCentralDir, buffer1, ZIP_EOCD_OFF_CDSIZE);
1149
1150 // central dir offset [16->19]
1151 setULong(offCentralDir, buffer1, ZIP_EOCD_OFF_CDOFF);
1152
1153 // ZIP file comment length
1154 QByteArray commentBytes = comment.toAscii();
1155 quint16 commentLength = commentBytes.size();
1156
1157 if (commentLength == 0)
1158 {
1159 buffer1[ZIP_EOCD_OFF_COMMLEN] = buffer1[ZIP_EOCD_OFF_COMMLEN + 1] = 0;
1160 }
1161 else
1162 {
1163 buffer1[ZIP_EOCD_OFF_COMMLEN] = commentLength & 0xFF;
1164 buffer1[ZIP_EOCD_OFF_COMMLEN + 1] = (commentLength >> 8) & 0xFF;
1165 }
1166
1167 if (device->write(buffer1, ZIP_EOCD_SIZE) != ZIP_EOCD_SIZE)
1168 {
1169 //! \todo SAME AS ABOVE: See if we can detect QFile objects using the Qt Meta Object System
1170 /*
1171 if (!device->remove())
1172 qDebug() << tr("Unable to delete corrupted archive: %1").arg(device->fileName());
1173 */
1174 return Zip::WriteFailed;
1175 }
1176
1177 if (commentLength != 0)
1178 {
1179 if ((unsigned int)device->write(commentBytes) != commentLength)
1180 {
1181 //! \todo SAME AS ABOVE: See if we can detect QFile objects using the Qt Meta Object System
1182 /*
1183 if (!device->remove())
1184 qDebug() << tr("Unable to delete corrupted archive: %1").arg(device->fileName());
1185 */
1186 return Zip::WriteFailed;
1187 }
1188 }
1189
1190 return Zip::Ok;
1191}
1192
1193//! \internal
1194void ZipPrivate::reset()
1195{
1196 comment.clear();
1197
1198 if (headers != 0)
1199 {
1200 qDeleteAll(*headers);
1201 delete headers;
1202 headers = 0;
1203 }
1204
1205 delete device; device = 0;
1206}
1207
1208//! \internal Returns the path of the parent directory
1209QString ZipPrivate::extractRoot(const QString& p)
1210{
1211 QDir d(QDir::cleanPath(p));
1212 if (!d.exists())
1213 return QString();
1214
1215 if (!d.cdUp())
1216 return QString();
1217
1218 return d.absolutePath();
1219}
diff --git a/rbutil/rbutilqt/zip/zip.h b/rbutil/rbutilqt/zip/zip.h
new file mode 100644
index 0000000000..03c4d8af0b
--- /dev/null
+++ b/rbutil/rbutilqt/zip/zip.h
@@ -0,0 +1,113 @@
1/****************************************************************************
2** Filename: zip.h
3** Last updated [dd/mm/yyyy]: 01/02/2007
4**
5** pkzip 2.0 file compression.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28#ifndef OSDAB_ZIP__H
29#define OSDAB_ZIP__H
30
31#include <QtGlobal>
32#include <QMap>
33
34#include <zlib/zlib.h>
35
36class ZipPrivate;
37
38class QIODevice;
39class QFile;
40class QDir;
41class QStringList;
42class QString;
43
44
45class Zip
46{
47public:
48 enum ErrorCode
49 {
50 Ok,
51 ZlibInit,
52 ZlibError,
53 FileExists,
54 OpenFailed,
55 NoOpenArchive,
56 FileNotFound,
57 ReadFailed,
58 WriteFailed,
59 SeekFailed
60 };
61
62 enum CompressionLevel
63 {
64 Store,
65 Deflate1 = 1, Deflate2, Deflate3, Deflate4,
66 Deflate5, Deflate6, Deflate7, Deflate8, Deflate9,
67 AutoCPU, AutoMIME, AutoFull
68 };
69
70 enum CompressionOption
71 {
72 //! Does not preserve absolute paths in the zip file when adding a file/directory (default)
73 RelativePaths = 0x0001,
74 //! Preserve absolute paths
75 AbsolutePaths = 0x0002,
76 //! Do not store paths. All the files are put in the (evtl. user defined) root of the zip file
77 IgnorePaths = 0x0004
78 };
79 Q_DECLARE_FLAGS(CompressionOptions, CompressionOption)
80
81 Zip();
82 virtual ~Zip();
83
84 bool isOpen() const;
85
86 void setPassword(const QString& pwd);
87 void clearPassword();
88 QString password() const;
89
90 ErrorCode createArchive(const QString& file, bool overwrite = true);
91 ErrorCode createArchive(QIODevice* device);
92
93 QString archiveComment() const;
94 void setArchiveComment(const QString& comment);
95
96 ErrorCode addDirectoryContents(const QString& path, CompressionLevel level = AutoFull);
97 ErrorCode addDirectoryContents(const QString& path, const QString& root, CompressionLevel level = AutoFull);
98
99 ErrorCode addDirectory(const QString& path, CompressionOptions options = RelativePaths, CompressionLevel level = AutoFull);
100 ErrorCode addDirectory(const QString& path, const QString& root, CompressionLevel level = AutoFull);
101 ErrorCode addDirectory(const QString& path, const QString& root, CompressionOptions options = RelativePaths, CompressionLevel level = AutoFull);
102
103 ErrorCode closeArchive();
104
105 QString formatError(ErrorCode c) const;
106
107private:
108 ZipPrivate* d;
109};
110
111Q_DECLARE_OPERATORS_FOR_FLAGS(Zip::CompressionOptions)
112
113#endif // OSDAB_ZIP__H
diff --git a/rbutil/rbutilqt/zip/zip_p.h b/rbutil/rbutilqt/zip/zip_p.h
new file mode 100644
index 0000000000..b3c45ac7b8
--- /dev/null
+++ b/rbutil/rbutilqt/zip/zip_p.h
@@ -0,0 +1,93 @@
1/****************************************************************************
2** Filename: zip_p.h
3** Last updated [dd/mm/yyyy]: 28/01/2007
4**
5** pkzip 2.0 file compression.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28//
29// W A R N I N G
30// -------------
31//
32// This file is not part of the Zip/UnZip API. It exists purely as an
33// implementation detail. This header file may change from version to
34// version without notice, or even be removed.
35//
36// We mean it.
37//
38
39#ifndef OSDAB_ZIP_P__H
40#define OSDAB_ZIP_P__H
41
42#include "zip.h"
43#include "zipentry_p.h"
44
45#include <QtGlobal>
46#include <QFileInfo>
47
48/*!
49 zLib authors suggest using larger buffers (128K or 256K) for (de)compression (especially for inflate())
50 we use a 256K buffer here - if you want to use this code on a pre-iceage mainframe please change it ;)
51*/
52#define ZIP_READ_BUFFER (256*1024)
53
54class ZipPrivate
55{
56public:
57 ZipPrivate();
58 virtual ~ZipPrivate();
59
60 QMap<QString,ZipEntryP*>* headers;
61
62 QIODevice* device;
63
64 char buffer1[ZIP_READ_BUFFER];
65 char buffer2[ZIP_READ_BUFFER];
66
67 unsigned char* uBuffer;
68
69 const quint32* crcTable;
70
71 QString comment;
72 QString password;
73
74 Zip::ErrorCode createArchive(QIODevice* device);
75 Zip::ErrorCode closeArchive();
76 void reset();
77
78 bool zLibInit();
79
80 Zip::ErrorCode createEntry(const QFileInfo& file, const QString& root, Zip::CompressionLevel level);
81 Zip::CompressionLevel detectCompressionByMime(const QString& ext);
82
83 inline void encryptBytes(quint32* keys, char* buffer, qint64 read);
84
85 inline void setULong(quint32 v, char* buffer, unsigned int offset);
86 inline void updateKeys(quint32* keys, int c) const;
87 inline void initKeys(quint32* keys) const;
88 inline int decryptByte(quint32 key2) const;
89
90 inline QString extractRoot(const QString& p);
91};
92
93#endif // OSDAB_ZIP_P__H
diff --git a/rbutil/rbutilqt/zip/zipentry_p.h b/rbutil/rbutilqt/zip/zipentry_p.h
new file mode 100644
index 0000000000..a201d0ac6e
--- /dev/null
+++ b/rbutil/rbutilqt/zip/zipentry_p.h
@@ -0,0 +1,78 @@
1/****************************************************************************
2** Filename: ZipEntryP.h
3** Last updated [dd/mm/yyyy]: 28/01/2007
4**
5** Wrapper for a ZIP local header.
6**
7** Some of the code has been inspired by other open source projects,
8** (mainly Info-Zip and Gilles Vollant's minizip).
9** Compression and decompression actually uses the zlib library.
10**
11** Copyright (C) 2007 Angius Fabrizio. All rights reserved.
12**
13** This file is part of the OSDaB project (http://osdab.sourceforge.net/).
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22**
23** See the file LICENSE.GPL that came with this software distribution or
24** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information.
25**
26**********************************************************************/
27
28//
29// W A R N I N G
30// -------------
31//
32// This file is not part of the Zip/UnZip API. It exists purely as an
33// implementation detail. This header file may change from version to
34// version without notice, or even be removed.
35//
36// We mean it.
37//
38
39#ifndef OSDAB_ZIPENTRY_P__H
40#define OSDAB_ZIPENTRY_P__H
41
42#include <QtGlobal>
43#include <QString>
44
45class ZipEntryP
46{
47public:
48 ZipEntryP()
49 {
50 lhOffset = 0;
51 dataOffset = 0;
52 gpFlag[0] = gpFlag[1] = 0;
53 compMethod = 0;
54 modTime[0] = modTime[1] = 0;
55 modDate[0] = modDate[1] = 0;
56 crc = 0;
57 szComp = szUncomp = 0;
58 lhEntryChecked = false;
59 }
60
61 quint32 lhOffset; // Offset of the local header record for this entry
62 quint32 dataOffset; // Offset of the file data for this entry
63 unsigned char gpFlag[2]; // General purpose flag
64 quint16 compMethod; // Compression method
65 unsigned char modTime[2]; // Last modified time
66 unsigned char modDate[2]; // Last modified date
67 quint32 crc; // CRC32
68 quint32 szComp; // Compressed file size
69 quint32 szUncomp; // Uncompressed file size
70 QString comment; // File comment
71
72 bool lhEntryChecked; // Is true if the local header record for this entry has been parsed
73
74 inline bool isEncrypted() const { return gpFlag[0] & 0x01; }
75 inline bool hasDataDescriptor() const { return gpFlag[0] & 0x08; }
76};
77
78#endif // OSDAB_ZIPENTRY_P__H
diff --git a/rbutil/rbutilqt/zlib/zconf.h b/rbutil/rbutilqt/zlib/zconf.h
new file mode 100644
index 0000000000..b849dbb63c
--- /dev/null
+++ b/rbutil/rbutilqt/zlib/zconf.h
@@ -0,0 +1,326 @@
1/* zconf.h -- configuration of the zlib compression library
2 * Copyright (C) 1995-2004 Jean-loup Gailly.
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/* @(#) $Id$ */
7
8#ifndef ZCONF_H
9#define ZCONF_H
10
11/*
12 * If you *really* need a unique prefix for all types and library functions,
13 * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
14 */
15#ifdef Z_PREFIX
16# define deflateInit_ z_deflateInit_
17# define deflate z_deflate
18# define deflateEnd z_deflateEnd
19# define inflateInit_ z_inflateInit_
20# define inflate z_inflate
21# define inflateEnd z_inflateEnd
22# define deflateInit2_ z_deflateInit2_
23# define deflateSetDictionary z_deflateSetDictionary
24# define deflateCopy z_deflateCopy
25# define deflateReset z_deflateReset
26# define deflateParams z_deflateParams
27# define deflateBound z_deflateBound
28# define deflatePrime z_deflatePrime
29# define inflateInit2_ z_inflateInit2_
30# define inflateSetDictionary z_inflateSetDictionary
31# define inflateSync z_inflateSync
32# define inflateSyncPoint z_inflateSyncPoint
33# define inflateCopy z_inflateCopy
34# define inflateReset z_inflateReset
35# define inflateBack z_inflateBack
36# define inflateBackEnd z_inflateBackEnd
37# define compress z_compress
38# define compress2 z_compress2
39# define compressBound z_compressBound
40# define uncompress z_uncompress
41# define adler32 z_adler32
42# define crc32 z_crc32
43# define get_crc_table z_get_crc_table
44# define zError z_zError
45
46# define Byte z_Byte
47# define uInt z_uInt
48# define uLong z_uLong
49# define Bytef z_Bytef
50# define charf z_charf
51# define intf z_intf
52# define uIntf z_uIntf
53# define uLongf z_uLongf
54# define voidpf z_voidpf
55# define voidp z_voidp
56#endif
57
58#if defined(__MSDOS__) && !defined(MSDOS)
59# define MSDOS
60#endif
61#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
62# define OS2
63#endif
64#if defined(_WINDOWS) && !defined(WINDOWS)
65# define WINDOWS
66#endif
67#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
68# define WIN32
69#endif
70#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
71# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
72# ifndef SYS16BIT
73# define SYS16BIT
74# endif
75# endif
76#endif
77
78/*
79 * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
80 * than 64k bytes at a time (needed on systems with 16-bit int).
81 */
82#ifdef SYS16BIT
83# define MAXSEG_64K
84#endif
85#ifdef MSDOS
86# define UNALIGNED_OK
87#endif
88
89#ifdef __STDC_VERSION__
90# ifndef STDC
91# define STDC
92# endif
93# if __STDC_VERSION__ >= 199901L
94# ifndef STDC99
95# define STDC99
96# endif
97# endif
98#endif
99#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
100# define STDC
101#endif
102#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
103# define STDC
104#endif
105#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
106# define STDC
107#endif
108#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
109# define STDC
110#endif
111
112#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
113# define STDC
114#endif
115
116#ifndef STDC
117# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
118# define const /* note: need a more gentle solution here */
119# endif
120#endif
121
122/* Some Mac compilers merge all .h files incorrectly: */
123#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
124# define NO_DUMMY_DECL
125#endif
126
127/* Maximum value for memLevel in deflateInit2 */
128#ifndef MAX_MEM_LEVEL
129# ifdef MAXSEG_64K
130# define MAX_MEM_LEVEL 8
131# else
132# define MAX_MEM_LEVEL 9
133# endif
134#endif
135
136/* Maximum value for windowBits in deflateInit2 and inflateInit2.
137 * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
138 * created by gzip. (Files created by minigzip can still be extracted by
139 * gzip.)
140 */
141#ifndef MAX_WBITS
142# define MAX_WBITS 15 /* 32K LZ77 window */
143#endif
144
145/* The memory requirements for deflate are (in bytes):
146 (1 << (windowBits+2)) + (1 << (memLevel+9))
147 that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
148 plus a few kilobytes for small objects. For example, if you want to reduce
149 the default memory requirements from 256K to 128K, compile with
150 make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
151 Of course this will generally degrade compression (there's no free lunch).
152
153 The memory requirements for inflate are (in bytes) 1 << windowBits
154 that is, 32K for windowBits=15 (default value) plus a few kilobytes
155 for small objects.
156*/
157
158 /* Type declarations */
159
160#ifndef OF /* function prototypes */
161# ifdef STDC
162# define OF(args) args
163# else
164# define OF(args) ()
165# endif
166#endif
167
168/* The following definitions for FAR are needed only for MSDOS mixed
169 * model programming (small or medium model with some far allocations).
170 * This was tested only with MSC; for other MSDOS compilers you may have
171 * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
172 * just define FAR to be empty.
173 */
174#ifdef SYS16BIT
175# if defined(M_I86SM) || defined(M_I86MM)
176 /* MSC small or medium model */
177# define SMALL_MEDIUM
178# ifdef _MSC_VER
179# define FAR _far
180# else
181# define FAR far
182# endif
183# endif
184# if (defined(__SMALL__) || defined(__MEDIUM__))
185 /* Turbo C small or medium model */
186# define SMALL_MEDIUM
187# ifdef __BORLANDC__
188# define FAR _far
189# else
190# define FAR far
191# endif
192# endif
193#endif
194
195#if defined(WINDOWS) || defined(WIN32)
196 /* If building or using zlib as a DLL, define ZLIB_DLL.
197 * This is not mandatory, but it offers a little performance increase.
198 */
199# ifdef ZLIB_DLL
200# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
201# ifdef ZLIB_INTERNAL
202# define ZEXTERN extern __declspec(dllexport)
203# else
204# define ZEXTERN extern __declspec(dllimport)
205# endif
206# endif
207# endif /* ZLIB_DLL */
208 /* If building or using zlib with the WINAPI/WINAPIV calling convention,
209 * define ZLIB_WINAPI.
210 * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
211 */
212# ifdef ZLIB_WINAPI
213# ifdef FAR
214# undef FAR
215# endif
216# include <windows.h>
217 /* No need for _export, use ZLIB.DEF instead. */
218 /* For complete Windows compatibility, use WINAPI, not __stdcall. */
219# define ZEXPORT WINAPI
220# ifdef WIN32
221# define ZEXPORTVA WINAPIV
222# else
223# define ZEXPORTVA FAR CDECL
224# endif
225# endif
226#endif
227
228#if defined (__BEOS__)
229# ifdef ZLIB_DLL
230# ifdef ZLIB_INTERNAL
231# define ZEXPORT __declspec(dllexport)
232# define ZEXPORTVA __declspec(dllexport)
233# else
234# define ZEXPORT __declspec(dllimport)
235# define ZEXPORTVA __declspec(dllimport)
236# endif
237# endif
238#endif
239
240#ifndef ZEXTERN
241# define ZEXTERN extern
242#endif
243#ifndef ZEXPORT
244# define ZEXPORT
245#endif
246#ifndef ZEXPORTVA
247# define ZEXPORTVA
248#endif
249
250#ifndef FAR
251# define FAR
252#endif
253
254#if !defined(__MACTYPES__)
255typedef unsigned char Byte; /* 8 bits */
256#endif
257typedef unsigned int uInt; /* 16 bits or more */
258typedef unsigned long uLong; /* 32 bits or more */
259
260#ifdef SMALL_MEDIUM
261 /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
262# define Bytef Byte FAR
263#else
264 typedef Byte FAR Bytef;
265#endif
266typedef char FAR charf;
267typedef int FAR intf;
268typedef uInt FAR uIntf;
269typedef uLong FAR uLongf;
270
271#ifdef STDC
272 typedef void const *voidpc;
273 typedef void FAR *voidpf;
274 typedef void *voidp;
275#else
276 typedef Byte const *voidpc;
277 typedef Byte FAR *voidpf;
278 typedef Byte *voidp;
279#endif
280
281#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */
282# include <sys/types.h> /* for off_t */
283# include <unistd.h> /* for SEEK_* and off_t */
284# ifdef VMS
285# include <unixio.h> /* for off_t */
286# endif
287# define z_off_t off_t
288#endif
289#ifndef SEEK_SET
290# define SEEK_SET 0 /* Seek from beginning of file. */
291# define SEEK_CUR 1 /* Seek from current position. */
292# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
293#endif
294#ifndef z_off_t
295# define z_off_t long
296#endif
297
298#if defined(__OS400__)
299# define NO_vsnprintf
300#endif
301
302#if defined(__MVS__)
303# define NO_vsnprintf
304# ifdef FAR
305# undef FAR
306# endif
307#endif
308
309/* MVS linker does not support external names larger than 8 bytes */
310#if defined(__MVS__)
311# pragma map(deflateInit_,"DEIN")
312# pragma map(deflateInit2_,"DEIN2")
313# pragma map(deflateEnd,"DEEND")
314# pragma map(deflateBound,"DEBND")
315# pragma map(inflateInit_,"ININ")
316# pragma map(inflateInit2_,"ININ2")
317# pragma map(inflateEnd,"INEND")
318# pragma map(inflateSync,"INSY")
319# pragma map(inflateSetDictionary,"INSEDI")
320# pragma map(compressBound,"CMBND")
321# pragma map(inflate_table,"INTABL")
322# pragma map(inflate_fast,"INFA")
323# pragma map(inflate_copyright,"INCOPY")
324#endif
325
326#endif /* ZCONF_H */
diff --git a/rbutil/rbutilqt/zlib/zlib.h b/rbutil/rbutilqt/zlib/zlib.h
new file mode 100644
index 0000000000..e067b127bf
--- /dev/null
+++ b/rbutil/rbutilqt/zlib/zlib.h
@@ -0,0 +1,1200 @@
1/* zlib.h -- interface of the 'zlib' general purpose compression library
2 version 1.2.2, October 3rd, 2004
3
4 Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler
5
6 This software is provided 'as-is', without any express or implied
7 warranty. In no event will the authors be held liable for any damages
8 arising from the use of this software.
9
10 Permission is granted to anyone to use this software for any purpose,
11 including commercial applications, and to alter it and redistribute it
12 freely, subject to the following restrictions:
13
14 1. The origin of this software must not be misrepresented; you must not
15 claim that you wrote the original software. If you use this software
16 in a product, an acknowledgment in the product documentation would be
17 appreciated but is not required.
18 2. Altered source versions must be plainly marked as such, and must not be
19 misrepresented as being the original software.
20 3. This notice may not be removed or altered from any source distribution.
21
22 Jean-loup Gailly Mark Adler
23 jloup@gzip.org madler@alumni.caltech.edu
24
25
26 The data format used by the zlib library is described by RFCs (Request for
27 Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
28 (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
29*/
30
31#ifndef ZLIB_H
32#define ZLIB_H
33
34#include "zconf.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40#define ZLIB_VERSION "1.2.2"
41#define ZLIB_VERNUM 0x1220
42
43/*
44 The 'zlib' compression library provides in-memory compression and
45 decompression functions, including integrity checks of the uncompressed
46 data. This version of the library supports only one compression method
47 (deflation) but other algorithms will be added later and will have the same
48 stream interface.
49
50 Compression can be done in a single step if the buffers are large
51 enough (for example if an input file is mmap'ed), or can be done by
52 repeated calls of the compression function. In the latter case, the
53 application must provide more input and/or consume the output
54 (providing more output space) before each call.
55
56 The compressed data format used by default by the in-memory functions is
57 the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
58 around a deflate stream, which is itself documented in RFC 1951.
59
60 The library also supports reading and writing files in gzip (.gz) format
61 with an interface similar to that of stdio using the functions that start
62 with "gz". The gzip format is different from the zlib format. gzip is a
63 gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
64
65 This library can optionally read and write gzip streams in memory as well.
66
67 The zlib format was designed to be compact and fast for use in memory
68 and on communications channels. The gzip format was designed for single-
69 file compression on file systems, has a larger header than zlib to maintain
70 directory information, and uses a different, slower check method than zlib.
71
72 The library does not install any signal handler. The decoder checks
73 the consistency of the compressed data, so the library should never
74 crash even in case of corrupted input.
75*/
76
77typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
78typedef void (*free_func) OF((voidpf opaque, voidpf address));
79
80struct internal_state;
81
82typedef struct z_stream_s {
83 Bytef *next_in; /* next input byte */
84 uInt avail_in; /* number of bytes available at next_in */
85 uLong total_in; /* total nb of input bytes read so far */
86
87 Bytef *next_out; /* next output byte should be put there */
88 uInt avail_out; /* remaining free space at next_out */
89 uLong total_out; /* total nb of bytes output so far */
90
91 char *msg; /* last error message, NULL if no error */
92 struct internal_state FAR *state; /* not visible by applications */
93
94 alloc_func zalloc; /* used to allocate the internal state */
95 free_func zfree; /* used to free the internal state */
96 voidpf opaque; /* private data object passed to zalloc and zfree */
97
98 int data_type; /* best guess about the data type: ascii or binary */
99 uLong adler; /* adler32 value of the uncompressed data */
100 uLong reserved; /* reserved for future use */
101} z_stream;
102
103typedef z_stream FAR *z_streamp;
104
105/*
106 The application must update next_in and avail_in when avail_in has
107 dropped to zero. It must update next_out and avail_out when avail_out
108 has dropped to zero. The application must initialize zalloc, zfree and
109 opaque before calling the init function. All other fields are set by the
110 compression library and must not be updated by the application.
111
112 The opaque value provided by the application will be passed as the first
113 parameter for calls of zalloc and zfree. This can be useful for custom
114 memory management. The compression library attaches no meaning to the
115 opaque value.
116
117 zalloc must return Z_NULL if there is not enough memory for the object.
118 If zlib is used in a multi-threaded application, zalloc and zfree must be
119 thread safe.
120
121 On 16-bit systems, the functions zalloc and zfree must be able to allocate
122 exactly 65536 bytes, but will not be required to allocate more than this
123 if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
124 pointers returned by zalloc for objects of exactly 65536 bytes *must*
125 have their offset normalized to zero. The default allocation function
126 provided by this library ensures this (see zutil.c). To reduce memory
127 requirements and avoid any allocation of 64K objects, at the expense of
128 compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
129
130 The fields total_in and total_out can be used for statistics or
131 progress reports. After compression, total_in holds the total size of
132 the uncompressed data and may be saved for use in the decompressor
133 (particularly if the decompressor wants to decompress everything in
134 a single step).
135*/
136
137 /* constants */
138
139#define Z_NO_FLUSH 0
140#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
141#define Z_SYNC_FLUSH 2
142#define Z_FULL_FLUSH 3
143#define Z_FINISH 4
144#define Z_BLOCK 5
145/* Allowed flush values; see deflate() and inflate() below for details */
146
147#define Z_OK 0
148#define Z_STREAM_END 1
149#define Z_NEED_DICT 2
150#define Z_ERRNO (-1)
151#define Z_STREAM_ERROR (-2)
152#define Z_DATA_ERROR (-3)
153#define Z_MEM_ERROR (-4)
154#define Z_BUF_ERROR (-5)
155#define Z_VERSION_ERROR (-6)
156/* Return codes for the compression/decompression functions. Negative
157 * values are errors, positive values are used for special but normal events.
158 */
159
160#define Z_NO_COMPRESSION 0
161#define Z_BEST_SPEED 1
162#define Z_BEST_COMPRESSION 9
163#define Z_DEFAULT_COMPRESSION (-1)
164/* compression levels */
165
166#define Z_FILTERED 1
167#define Z_HUFFMAN_ONLY 2
168#define Z_RLE 3
169#define Z_DEFAULT_STRATEGY 0
170/* compression strategy; see deflateInit2() below for details */
171
172#define Z_BINARY 0
173#define Z_ASCII 1
174#define Z_UNKNOWN 2
175/* Possible values of the data_type field (though see inflate()) */
176
177#define Z_DEFLATED 8
178/* The deflate compression method (the only one supported in this version) */
179
180#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
181
182#define zlib_version zlibVersion()
183/* for compatibility with versions < 1.0.2 */
184
185 /* basic functions */
186
187ZEXTERN const char * ZEXPORT zlibVersion OF((void));
188/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
189 If the first character differs, the library code actually used is
190 not compatible with the zlib.h header file used by the application.
191 This check is automatically made by deflateInit and inflateInit.
192 */
193
194/*
195ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
196
197 Initializes the internal stream state for compression. The fields
198 zalloc, zfree and opaque must be initialized before by the caller.
199 If zalloc and zfree are set to Z_NULL, deflateInit updates them to
200 use default allocation functions.
201
202 The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
203 1 gives best speed, 9 gives best compression, 0 gives no compression at
204 all (the input data is simply copied a block at a time).
205 Z_DEFAULT_COMPRESSION requests a default compromise between speed and
206 compression (currently equivalent to level 6).
207
208 deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
209 enough memory, Z_STREAM_ERROR if level is not a valid compression level,
210 Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
211 with the version assumed by the caller (ZLIB_VERSION).
212 msg is set to null if there is no error message. deflateInit does not
213 perform any compression: this will be done by deflate().
214*/
215
216
217ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
218/*
219 deflate compresses as much data as possible, and stops when the input
220 buffer becomes empty or the output buffer becomes full. It may introduce some
221 output latency (reading input without producing any output) except when
222 forced to flush.
223
224 The detailed semantics are as follows. deflate performs one or both of the
225 following actions:
226
227 - Compress more input starting at next_in and update next_in and avail_in
228 accordingly. If not all input can be processed (because there is not
229 enough room in the output buffer), next_in and avail_in are updated and
230 processing will resume at this point for the next call of deflate().
231
232 - Provide more output starting at next_out and update next_out and avail_out
233 accordingly. This action is forced if the parameter flush is non zero.
234 Forcing flush frequently degrades the compression ratio, so this parameter
235 should be set only when necessary (in interactive applications).
236 Some output may be provided even if flush is not set.
237
238 Before the call of deflate(), the application should ensure that at least
239 one of the actions is possible, by providing more input and/or consuming
240 more output, and updating avail_in or avail_out accordingly; avail_out
241 should never be zero before the call. The application can consume the
242 compressed output when it wants, for example when the output buffer is full
243 (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
244 and with zero avail_out, it must be called again after making room in the
245 output buffer because there might be more output pending.
246
247 If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
248 flushed to the output buffer and the output is aligned on a byte boundary, so
249 that the decompressor can get all input data available so far. (In particular
250 avail_in is zero after the call if enough output space has been provided
251 before the call.) Flushing may degrade compression for some compression
252 algorithms and so it should be used only when necessary.
253
254 If flush is set to Z_FULL_FLUSH, all output is flushed as with
255 Z_SYNC_FLUSH, and the compression state is reset so that decompression can
256 restart from this point if previous compressed data has been damaged or if
257 random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
258 the compression.
259
260 If deflate returns with avail_out == 0, this function must be called again
261 with the same value of the flush parameter and more output space (updated
262 avail_out), until the flush is complete (deflate returns with non-zero
263 avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
264 avail_out is greater than six to avoid repeated flush markers due to
265 avail_out == 0 on return.
266
267 If the parameter flush is set to Z_FINISH, pending input is processed,
268 pending output is flushed and deflate returns with Z_STREAM_END if there
269 was enough output space; if deflate returns with Z_OK, this function must be
270 called again with Z_FINISH and more output space (updated avail_out) but no
271 more input data, until it returns with Z_STREAM_END or an error. After
272 deflate has returned Z_STREAM_END, the only possible operations on the
273 stream are deflateReset or deflateEnd.
274
275 Z_FINISH can be used immediately after deflateInit if all the compression
276 is to be done in a single step. In this case, avail_out must be at least
277 the value returned by deflateBound (see below). If deflate does not return
278 Z_STREAM_END, then it must be called again as described above.
279
280 deflate() sets strm->adler to the adler32 checksum of all input read
281 so far (that is, total_in bytes).
282
283 deflate() may update data_type if it can make a good guess about
284 the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
285 binary. This field is only for information purposes and does not affect
286 the compression algorithm in any manner.
287
288 deflate() returns Z_OK if some progress has been made (more input
289 processed or more output produced), Z_STREAM_END if all input has been
290 consumed and all output has been produced (only when flush is set to
291 Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
292 if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
293 (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
294 fatal, and deflate() can be called again with more input and more output
295 space to continue compressing.
296*/
297
298
299ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
300/*
301 All dynamically allocated data structures for this stream are freed.
302 This function discards any unprocessed input and does not flush any
303 pending output.
304
305 deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
306 stream state was inconsistent, Z_DATA_ERROR if the stream was freed
307 prematurely (some input or output was discarded). In the error case,
308 msg may be set but then points to a static string (which must not be
309 deallocated).
310*/
311
312
313/*
314ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
315
316 Initializes the internal stream state for decompression. The fields
317 next_in, avail_in, zalloc, zfree and opaque must be initialized before by
318 the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
319 value depends on the compression method), inflateInit determines the
320 compression method from the zlib header and allocates all data structures
321 accordingly; otherwise the allocation will be deferred to the first call of
322 inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
323 use default allocation functions.
324
325 inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
326 memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
327 version assumed by the caller. msg is set to null if there is no error
328 message. inflateInit does not perform any decompression apart from reading
329 the zlib header if present: this will be done by inflate(). (So next_in and
330 avail_in may be modified, but next_out and avail_out are unchanged.)
331*/
332
333
334ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
335/*
336 inflate decompresses as much data as possible, and stops when the input
337 buffer becomes empty or the output buffer becomes full. It may introduce
338 some output latency (reading input without producing any output) except when
339 forced to flush.
340
341 The detailed semantics are as follows. inflate performs one or both of the
342 following actions:
343
344 - Decompress more input starting at next_in and update next_in and avail_in
345 accordingly. If not all input can be processed (because there is not
346 enough room in the output buffer), next_in is updated and processing
347 will resume at this point for the next call of inflate().
348
349 - Provide more output starting at next_out and update next_out and avail_out
350 accordingly. inflate() provides as much output as possible, until there
351 is no more input data or no more space in the output buffer (see below
352 about the flush parameter).
353
354 Before the call of inflate(), the application should ensure that at least
355 one of the actions is possible, by providing more input and/or consuming
356 more output, and updating the next_* and avail_* values accordingly.
357 The application can consume the uncompressed output when it wants, for
358 example when the output buffer is full (avail_out == 0), or after each
359 call of inflate(). If inflate returns Z_OK and with zero avail_out, it
360 must be called again after making room in the output buffer because there
361 might be more output pending.
362
363 The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH,
364 Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much
365 output as possible to the output buffer. Z_BLOCK requests that inflate() stop
366 if and when it get to the next deflate block boundary. When decoding the zlib
367 or gzip format, this will cause inflate() to return immediately after the
368 header and before the first block. When doing a raw inflate, inflate() will
369 go ahead and process the first block, and will return when it gets to the end
370 of that block, or when it runs out of data.
371
372 The Z_BLOCK option assists in appending to or combining deflate streams.
373 Also to assist in this, on return inflate() will set strm->data_type to the
374 number of unused bits in the last byte taken from strm->next_in, plus 64
375 if inflate() is currently decoding the last block in the deflate stream,
376 plus 128 if inflate() returned immediately after decoding an end-of-block
377 code or decoding the complete header up to just before the first byte of the
378 deflate stream. The end-of-block will not be indicated until all of the
379 uncompressed data from that block has been written to strm->next_out. The
380 number of unused bits may in general be greater than seven, except when
381 bit 7 of data_type is set, in which case the number of unused bits will be
382 less than eight.
383
384 inflate() should normally be called until it returns Z_STREAM_END or an
385 error. However if all decompression is to be performed in a single step
386 (a single call of inflate), the parameter flush should be set to
387 Z_FINISH. In this case all pending input is processed and all pending
388 output is flushed; avail_out must be large enough to hold all the
389 uncompressed data. (The size of the uncompressed data may have been saved
390 by the compressor for this purpose.) The next operation on this stream must
391 be inflateEnd to deallocate the decompression state. The use of Z_FINISH
392 is never required, but can be used to inform inflate that a faster approach
393 may be used for the single inflate() call.
394
395 In this implementation, inflate() always flushes as much output as
396 possible to the output buffer, and always uses the faster approach on the
397 first call. So the only effect of the flush parameter in this implementation
398 is on the return value of inflate(), as noted below, or when it returns early
399 because Z_BLOCK is used.
400
401 If a preset dictionary is needed after this call (see inflateSetDictionary
402 below), inflate sets strm->adler to the adler32 checksum of the dictionary
403 chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
404 strm->adler to the adler32 checksum of all output produced so far (that is,
405 total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
406 below. At the end of the stream, inflate() checks that its computed adler32
407 checksum is equal to that saved by the compressor and returns Z_STREAM_END
408 only if the checksum is correct.
409
410 inflate() will decompress and check either zlib-wrapped or gzip-wrapped
411 deflate data. The header type is detected automatically. Any information
412 contained in the gzip header is not retained, so applications that need that
413 information should instead use raw inflate, see inflateInit2() below, or
414 inflateBack() and perform their own processing of the gzip header and
415 trailer.
416
417 inflate() returns Z_OK if some progress has been made (more input processed
418 or more output produced), Z_STREAM_END if the end of the compressed data has
419 been reached and all uncompressed output has been produced, Z_NEED_DICT if a
420 preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
421 corrupted (input stream not conforming to the zlib format or incorrect check
422 value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
423 if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
424 Z_BUF_ERROR if no progress is possible or if there was not enough room in the
425 output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
426 inflate() can be called again with more input and more output space to
427 continue decompressing. If Z_DATA_ERROR is returned, the application may then
428 call inflateSync() to look for a good compression block if a partial recovery
429 of the data is desired.
430*/
431
432
433ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
434/*
435 All dynamically allocated data structures for this stream are freed.
436 This function discards any unprocessed input and does not flush any
437 pending output.
438
439 inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
440 was inconsistent. In the error case, msg may be set but then points to a
441 static string (which must not be deallocated).
442*/
443
444 /* Advanced functions */
445
446/*
447 The following functions are needed only in some special applications.
448*/
449
450/*
451ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
452 int level,
453 int method,
454 int windowBits,
455 int memLevel,
456 int strategy));
457
458 This is another version of deflateInit with more compression options. The
459 fields next_in, zalloc, zfree and opaque must be initialized before by
460 the caller.
461
462 The method parameter is the compression method. It must be Z_DEFLATED in
463 this version of the library.
464
465 The windowBits parameter is the base two logarithm of the window size
466 (the size of the history buffer). It should be in the range 8..15 for this
467 version of the library. Larger values of this parameter result in better
468 compression at the expense of memory usage. The default value is 15 if
469 deflateInit is used instead.
470
471 windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
472 determines the window size. deflate() will then generate raw deflate data
473 with no zlib header or trailer, and will not compute an adler32 check value.
474
475 windowBits can also be greater than 15 for optional gzip encoding. Add
476 16 to windowBits to write a simple gzip header and trailer around the
477 compressed data instead of a zlib wrapper. The gzip header will have no
478 file name, no extra data, no comment, no modification time (set to zero),
479 no header crc, and the operating system will be set to 255 (unknown). If a
480 gzip stream is being written, strm->adler is a crc32 instead of an adler32.
481
482 The memLevel parameter specifies how much memory should be allocated
483 for the internal compression state. memLevel=1 uses minimum memory but
484 is slow and reduces compression ratio; memLevel=9 uses maximum memory
485 for optimal speed. The default value is 8. See zconf.h for total memory
486 usage as a function of windowBits and memLevel.
487
488 The strategy parameter is used to tune the compression algorithm. Use the
489 value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
490 filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
491 string match), or Z_RLE to limit match distances to one (run-length
492 encoding). Filtered data consists mostly of small values with a somewhat
493 random distribution. In this case, the compression algorithm is tuned to
494 compress them better. The effect of Z_FILTERED is to force more Huffman
495 coding and less string matching; it is somewhat intermediate between
496 Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as
497 Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy
498 parameter only affects the compression ratio but not the correctness of the
499 compressed output even if it is not set appropriately.
500
501 deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
502 memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
503 method). msg is set to null if there is no error message. deflateInit2 does
504 not perform any compression: this will be done by deflate().
505*/
506
507ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
508 const Bytef *dictionary,
509 uInt dictLength));
510/*
511 Initializes the compression dictionary from the given byte sequence
512 without producing any compressed output. This function must be called
513 immediately after deflateInit, deflateInit2 or deflateReset, before any
514 call of deflate. The compressor and decompressor must use exactly the same
515 dictionary (see inflateSetDictionary).
516
517 The dictionary should consist of strings (byte sequences) that are likely
518 to be encountered later in the data to be compressed, with the most commonly
519 used strings preferably put towards the end of the dictionary. Using a
520 dictionary is most useful when the data to be compressed is short and can be
521 predicted with good accuracy; the data can then be compressed better than
522 with the default empty dictionary.
523
524 Depending on the size of the compression data structures selected by
525 deflateInit or deflateInit2, a part of the dictionary may in effect be
526 discarded, for example if the dictionary is larger than the window size in
527 deflate or deflate2. Thus the strings most likely to be useful should be
528 put at the end of the dictionary, not at the front.
529
530 Upon return of this function, strm->adler is set to the adler32 value
531 of the dictionary; the decompressor may later use this value to determine
532 which dictionary has been used by the compressor. (The adler32 value
533 applies to the whole dictionary even if only a subset of the dictionary is
534 actually used by the compressor.) If a raw deflate was requested, then the
535 adler32 value is not computed and strm->adler is not set.
536
537 deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
538 parameter is invalid (such as NULL dictionary) or the stream state is
539 inconsistent (for example if deflate has already been called for this stream
540 or if the compression method is bsort). deflateSetDictionary does not
541 perform any compression: this will be done by deflate().
542*/
543
544ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
545 z_streamp source));
546/*
547 Sets the destination stream as a complete copy of the source stream.
548
549 This function can be useful when several compression strategies will be
550 tried, for example when there are several ways of pre-processing the input
551 data with a filter. The streams that will be discarded should then be freed
552 by calling deflateEnd. Note that deflateCopy duplicates the internal
553 compression state which can be quite large, so this strategy is slow and
554 can consume lots of memory.
555
556 deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
557 enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
558 (such as zalloc being NULL). msg is left unchanged in both source and
559 destination.
560*/
561
562ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
563/*
564 This function is equivalent to deflateEnd followed by deflateInit,
565 but does not free and reallocate all the internal compression state.
566 The stream will keep the same compression level and any other attributes
567 that may have been set by deflateInit2.
568
569 deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
570 stream state was inconsistent (such as zalloc or state being NULL).
571*/
572
573ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
574 int level,
575 int strategy));
576/*
577 Dynamically update the compression level and compression strategy. The
578 interpretation of level and strategy is as in deflateInit2. This can be
579 used to switch between compression and straight copy of the input data, or
580 to switch to a different kind of input data requiring a different
581 strategy. If the compression level is changed, the input available so far
582 is compressed with the old level (and may be flushed); the new level will
583 take effect only at the next call of deflate().
584
585 Before the call of deflateParams, the stream state must be set as for
586 a call of deflate(), since the currently available input may have to
587 be compressed and flushed. In particular, strm->avail_out must be non-zero.
588
589 deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
590 stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
591 if strm->avail_out was zero.
592*/
593
594ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
595 uLong sourceLen));
596/*
597 deflateBound() returns an upper bound on the compressed size after
598 deflation of sourceLen bytes. It must be called after deflateInit()
599 or deflateInit2(). This would be used to allocate an output buffer
600 for deflation in a single pass, and so would be called before deflate().
601*/
602
603ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
604 int bits,
605 int value));
606/*
607 deflatePrime() inserts bits in the deflate output stream. The intent
608 is that this function is used to start off the deflate output with the
609 bits leftover from a previous deflate stream when appending to it. As such,
610 this function can only be used for raw deflate, and must be used before the
611 first deflate() call after a deflateInit2() or deflateReset(). bits must be
612 less than or equal to 16, and that many of the least significant bits of
613 value will be inserted in the output.
614
615 deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
616 stream state was inconsistent.
617*/
618
619/*
620ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
621 int windowBits));
622
623 This is another version of inflateInit with an extra parameter. The
624 fields next_in, avail_in, zalloc, zfree and opaque must be initialized
625 before by the caller.
626
627 The windowBits parameter is the base two logarithm of the maximum window
628 size (the size of the history buffer). It should be in the range 8..15 for
629 this version of the library. The default value is 15 if inflateInit is used
630 instead. windowBits must be greater than or equal to the windowBits value
631 provided to deflateInit2() while compressing, or it must be equal to 15 if
632 deflateInit2() was not used. If a compressed stream with a larger window
633 size is given as input, inflate() will return with the error code
634 Z_DATA_ERROR instead of trying to allocate a larger window.
635
636 windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
637 determines the window size. inflate() will then process raw deflate data,
638 not looking for a zlib or gzip header, not generating a check value, and not
639 looking for any check values for comparison at the end of the stream. This
640 is for use with other formats that use the deflate compressed data format
641 such as zip. Those formats provide their own check values. If a custom
642 format is developed using the raw deflate format for compressed data, it is
643 recommended that a check value such as an adler32 or a crc32 be applied to
644 the uncompressed data as is done in the zlib, gzip, and zip formats. For
645 most applications, the zlib format should be used as is. Note that comments
646 above on the use in deflateInit2() applies to the magnitude of windowBits.
647
648 windowBits can also be greater than 15 for optional gzip decoding. Add
649 32 to windowBits to enable zlib and gzip decoding with automatic header
650 detection, or add 16 to decode only the gzip format (the zlib format will
651 return a Z_DATA_ERROR. If a gzip stream is being decoded, strm->adler is
652 a crc32 instead of an adler32.
653
654 inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
655 memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
656 memLevel). msg is set to null if there is no error message. inflateInit2
657 does not perform any decompression apart from reading the zlib header if
658 present: this will be done by inflate(). (So next_in and avail_in may be
659 modified, but next_out and avail_out are unchanged.)
660*/
661
662ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
663 const Bytef *dictionary,
664 uInt dictLength));
665/*
666 Initializes the decompression dictionary from the given uncompressed byte
667 sequence. This function must be called immediately after a call of inflate
668 if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
669 can be determined from the adler32 value returned by this call of
670 inflate. The compressor and decompressor must use exactly the same
671 dictionary (see deflateSetDictionary).
672
673 inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
674 parameter is invalid (such as NULL dictionary) or the stream state is
675 inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
676 expected one (incorrect adler32 value). inflateSetDictionary does not
677 perform any decompression: this will be done by subsequent calls of
678 inflate().
679*/
680
681ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
682/*
683 Skips invalid compressed data until a full flush point (see above the
684 description of deflate with Z_FULL_FLUSH) can be found, or until all
685 available input is skipped. No output is provided.
686
687 inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
688 if no more input was provided, Z_DATA_ERROR if no flush point has been found,
689 or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
690 case, the application may save the current current value of total_in which
691 indicates where valid compressed data was found. In the error case, the
692 application may repeatedly call inflateSync, providing more input each time,
693 until success or end of the input data.
694*/
695
696ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
697 z_streamp source));
698/*
699 Sets the destination stream as a complete copy of the source stream.
700
701 This function can be useful when randomly accessing a large stream. The
702 first pass through the stream can periodically record the inflate state,
703 allowing restarting inflate at those points when randomly accessing the
704 stream.
705
706 inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
707 enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
708 (such as zalloc being NULL). msg is left unchanged in both source and
709 destination.
710*/
711
712ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
713/*
714 This function is equivalent to inflateEnd followed by inflateInit,
715 but does not free and reallocate all the internal decompression state.
716 The stream will keep attributes that may have been set by inflateInit2.
717
718 inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
719 stream state was inconsistent (such as zalloc or state being NULL).
720*/
721
722/*
723ZEXTERN int ZEXPORT inflateBackInit OF((z_stream FAR *strm, int windowBits,
724 unsigned char FAR *window));
725
726 Initialize the internal stream state for decompression using inflateBack()
727 calls. The fields zalloc, zfree and opaque in strm must be initialized
728 before the call. If zalloc and zfree are Z_NULL, then the default library-
729 derived memory allocation routines are used. windowBits is the base two
730 logarithm of the window size, in the range 8..15. window is a caller
731 supplied buffer of that size. Except for special applications where it is
732 assured that deflate was used with small window sizes, windowBits must be 15
733 and a 32K byte window must be supplied to be able to decompress general
734 deflate streams.
735
736 See inflateBack() for the usage of these routines.
737
738 inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
739 the paramaters are invalid, Z_MEM_ERROR if the internal state could not
740 be allocated, or Z_VERSION_ERROR if the version of the library does not
741 match the version of the header file.
742*/
743
744typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
745typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
746
747ZEXTERN int ZEXPORT inflateBack OF((z_stream FAR *strm,
748 in_func in, void FAR *in_desc,
749 out_func out, void FAR *out_desc));
750/*
751 inflateBack() does a raw inflate with a single call using a call-back
752 interface for input and output. This is more efficient than inflate() for
753 file i/o applications in that it avoids copying between the output and the
754 sliding window by simply making the window itself the output buffer. This
755 function trusts the application to not change the output buffer passed by
756 the output function, at least until inflateBack() returns.
757
758 inflateBackInit() must be called first to allocate the internal state
759 and to initialize the state with the user-provided window buffer.
760 inflateBack() may then be used multiple times to inflate a complete, raw
761 deflate stream with each call. inflateBackEnd() is then called to free
762 the allocated state.
763
764 A raw deflate stream is one with no zlib or gzip header or trailer.
765 This routine would normally be used in a utility that reads zip or gzip
766 files and writes out uncompressed files. The utility would decode the
767 header and process the trailer on its own, hence this routine expects
768 only the raw deflate stream to decompress. This is different from the
769 normal behavior of inflate(), which expects either a zlib or gzip header and
770 trailer around the deflate stream.
771
772 inflateBack() uses two subroutines supplied by the caller that are then
773 called by inflateBack() for input and output. inflateBack() calls those
774 routines until it reads a complete deflate stream and writes out all of the
775 uncompressed data, or until it encounters an error. The function's
776 parameters and return types are defined above in the in_func and out_func
777 typedefs. inflateBack() will call in(in_desc, &buf) which should return the
778 number of bytes of provided input, and a pointer to that input in buf. If
779 there is no input available, in() must return zero--buf is ignored in that
780 case--and inflateBack() will return a buffer error. inflateBack() will call
781 out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
782 should return zero on success, or non-zero on failure. If out() returns
783 non-zero, inflateBack() will return with an error. Neither in() nor out()
784 are permitted to change the contents of the window provided to
785 inflateBackInit(), which is also the buffer that out() uses to write from.
786 The length written by out() will be at most the window size. Any non-zero
787 amount of input may be provided by in().
788
789 For convenience, inflateBack() can be provided input on the first call by
790 setting strm->next_in and strm->avail_in. If that input is exhausted, then
791 in() will be called. Therefore strm->next_in must be initialized before
792 calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called
793 immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in
794 must also be initialized, and then if strm->avail_in is not zero, input will
795 initially be taken from strm->next_in[0 .. strm->avail_in - 1].
796
797 The in_desc and out_desc parameters of inflateBack() is passed as the
798 first parameter of in() and out() respectively when they are called. These
799 descriptors can be optionally used to pass any information that the caller-
800 supplied in() and out() functions need to do their job.
801
802 On return, inflateBack() will set strm->next_in and strm->avail_in to
803 pass back any unused input that was provided by the last in() call. The
804 return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
805 if in() or out() returned an error, Z_DATA_ERROR if there was a format
806 error in the deflate stream (in which case strm->msg is set to indicate the
807 nature of the error), or Z_STREAM_ERROR if the stream was not properly
808 initialized. In the case of Z_BUF_ERROR, an input or output error can be
809 distinguished using strm->next_in which will be Z_NULL only if in() returned
810 an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to
811 out() returning non-zero. (in() will always be called before out(), so
812 strm->next_in is assured to be defined if out() returns non-zero.) Note
813 that inflateBack() cannot return Z_OK.
814*/
815
816ZEXTERN int ZEXPORT inflateBackEnd OF((z_stream FAR *strm));
817/*
818 All memory allocated by inflateBackInit() is freed.
819
820 inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
821 state was inconsistent.
822*/
823
824ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
825/* Return flags indicating compile-time options.
826
827 Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
828 1.0: size of uInt
829 3.2: size of uLong
830 5.4: size of voidpf (pointer)
831 7.6: size of z_off_t
832
833 Compiler, assembler, and debug options:
834 8: DEBUG
835 9: ASMV or ASMINF -- use ASM code
836 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
837 11: 0 (reserved)
838
839 One-time table building (smaller code, but not thread-safe if true):
840 12: BUILDFIXED -- build static block decoding tables when needed
841 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
842 14,15: 0 (reserved)
843
844 Library content (indicates missing functionality):
845 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
846 deflate code when not needed)
847 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
848 and decode gzip streams (to avoid linking crc code)
849 18-19: 0 (reserved)
850
851 Operation variations (changes in library functionality):
852 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
853 21: FASTEST -- deflate algorithm with only one, lowest compression level
854 22,23: 0 (reserved)
855
856 The sprintf variant used by gzprintf (zero is best):
857 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
858 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
859 26: 0 = returns value, 1 = void -- 1 means inferred string length returned
860
861 Remainder:
862 27-31: 0 (reserved)
863 */
864
865
866 /* utility functions */
867
868/*
869 The following utility functions are implemented on top of the
870 basic stream-oriented functions. To simplify the interface, some
871 default options are assumed (compression level and memory usage,
872 standard memory allocation functions). The source code of these
873 utility functions can easily be modified if you need special options.
874*/
875
876ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
877 const Bytef *source, uLong sourceLen));
878/*
879 Compresses the source buffer into the destination buffer. sourceLen is
880 the byte length of the source buffer. Upon entry, destLen is the total
881 size of the destination buffer, which must be at least the value returned
882 by compressBound(sourceLen). Upon exit, destLen is the actual size of the
883 compressed buffer.
884 This function can be used to compress a whole file at once if the
885 input file is mmap'ed.
886 compress returns Z_OK if success, Z_MEM_ERROR if there was not
887 enough memory, Z_BUF_ERROR if there was not enough room in the output
888 buffer.
889*/
890
891ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
892 const Bytef *source, uLong sourceLen,
893 int level));
894/*
895 Compresses the source buffer into the destination buffer. The level
896 parameter has the same meaning as in deflateInit. sourceLen is the byte
897 length of the source buffer. Upon entry, destLen is the total size of the
898 destination buffer, which must be at least the value returned by
899 compressBound(sourceLen). Upon exit, destLen is the actual size of the
900 compressed buffer.
901
902 compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
903 memory, Z_BUF_ERROR if there was not enough room in the output buffer,
904 Z_STREAM_ERROR if the level parameter is invalid.
905*/
906
907ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
908/*
909 compressBound() returns an upper bound on the compressed size after
910 compress() or compress2() on sourceLen bytes. It would be used before
911 a compress() or compress2() call to allocate the destination buffer.
912*/
913
914ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
915 const Bytef *source, uLong sourceLen));
916/*
917 Decompresses the source buffer into the destination buffer. sourceLen is
918 the byte length of the source buffer. Upon entry, destLen is the total
919 size of the destination buffer, which must be large enough to hold the
920 entire uncompressed data. (The size of the uncompressed data must have
921 been saved previously by the compressor and transmitted to the decompressor
922 by some mechanism outside the scope of this compression library.)
923 Upon exit, destLen is the actual size of the compressed buffer.
924 This function can be used to decompress a whole file at once if the
925 input file is mmap'ed.
926
927 uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
928 enough memory, Z_BUF_ERROR if there was not enough room in the output
929 buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
930*/
931
932
933typedef voidp gzFile;
934
935ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
936/*
937 Opens a gzip (.gz) file for reading or writing. The mode parameter
938 is as in fopen ("rb" or "wb") but can also include a compression level
939 ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
940 Huffman only compression as in "wb1h", or 'R' for run-length encoding
941 as in "wb1R". (See the description of deflateInit2 for more information
942 about the strategy parameter.)
943
944 gzopen can be used to read a file which is not in gzip format; in this
945 case gzread will directly read from the file without decompression.
946
947 gzopen returns NULL if the file could not be opened or if there was
948 insufficient memory to allocate the (de)compression state; errno
949 can be checked to distinguish the two cases (if errno is zero, the
950 zlib error is Z_MEM_ERROR). */
951
952ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
953/*
954 gzdopen() associates a gzFile with the file descriptor fd. File
955 descriptors are obtained from calls like open, dup, creat, pipe or
956 fileno (in the file has been previously opened with fopen).
957 The mode parameter is as in gzopen.
958 The next call of gzclose on the returned gzFile will also close the
959 file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
960 descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
961 gzdopen returns NULL if there was insufficient memory to allocate
962 the (de)compression state.
963*/
964
965ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
966/*
967 Dynamically update the compression level or strategy. See the description
968 of deflateInit2 for the meaning of these parameters.
969 gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
970 opened for writing.
971*/
972
973ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
974/*
975 Reads the given number of uncompressed bytes from the compressed file.
976 If the input file was not in gzip format, gzread copies the given number
977 of bytes into the buffer.
978 gzread returns the number of uncompressed bytes actually read (0 for
979 end of file, -1 for error). */
980
981ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
982 voidpc buf, unsigned len));
983/*
984 Writes the given number of uncompressed bytes into the compressed file.
985 gzwrite returns the number of uncompressed bytes actually written
986 (0 in case of error).
987*/
988
989ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
990/*
991 Converts, formats, and writes the args to the compressed file under
992 control of the format string, as in fprintf. gzprintf returns the number of
993 uncompressed bytes actually written (0 in case of error). The number of
994 uncompressed bytes written is limited to 4095. The caller should assure that
995 this limit is not exceeded. If it is exceeded, then gzprintf() will return
996 return an error (0) with nothing written. In this case, there may also be a
997 buffer overflow with unpredictable consequences, which is possible only if
998 zlib was compiled with the insecure functions sprintf() or vsprintf()
999 because the secure snprintf() or vsnprintf() functions were not available.
1000*/
1001
1002ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
1003/*
1004 Writes the given null-terminated string to the compressed file, excluding
1005 the terminating null character.
1006 gzputs returns the number of characters written, or -1 in case of error.
1007*/
1008
1009ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
1010/*
1011 Reads bytes from the compressed file until len-1 characters are read, or
1012 a newline character is read and transferred to buf, or an end-of-file
1013 condition is encountered. The string is then terminated with a null
1014 character.
1015 gzgets returns buf, or Z_NULL in case of error.
1016*/
1017
1018ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
1019/*
1020 Writes c, converted to an unsigned char, into the compressed file.
1021 gzputc returns the value that was written, or -1 in case of error.
1022*/
1023
1024ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
1025/*
1026 Reads one byte from the compressed file. gzgetc returns this byte
1027 or -1 in case of end of file or error.
1028*/
1029
1030ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
1031/*
1032 Push one character back onto the stream to be read again later.
1033 Only one character of push-back is allowed. gzungetc() returns the
1034 character pushed, or -1 on failure. gzungetc() will fail if a
1035 character has been pushed but not read yet, or if c is -1. The pushed
1036 character will be discarded if the stream is repositioned with gzseek()
1037 or gzrewind().
1038*/
1039
1040ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
1041/*
1042 Flushes all pending output into the compressed file. The parameter
1043 flush is as in the deflate() function. The return value is the zlib
1044 error number (see function gzerror below). gzflush returns Z_OK if
1045 the flush parameter is Z_FINISH and all output could be flushed.
1046 gzflush should be called only when strictly necessary because it can
1047 degrade compression.
1048*/
1049
1050ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
1051 z_off_t offset, int whence));
1052/*
1053 Sets the starting position for the next gzread or gzwrite on the
1054 given compressed file. The offset represents a number of bytes in the
1055 uncompressed data stream. The whence parameter is defined as in lseek(2);
1056 the value SEEK_END is not supported.
1057 If the file is opened for reading, this function is emulated but can be
1058 extremely slow. If the file is opened for writing, only forward seeks are
1059 supported; gzseek then compresses a sequence of zeroes up to the new
1060 starting position.
1061
1062 gzseek returns the resulting offset location as measured in bytes from
1063 the beginning of the uncompressed stream, or -1 in case of error, in
1064 particular if the file is opened for writing and the new starting position
1065 would be before the current position.
1066*/
1067
1068ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
1069/*
1070 Rewinds the given file. This function is supported only for reading.
1071
1072 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
1073*/
1074
1075ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
1076/*
1077 Returns the starting position for the next gzread or gzwrite on the
1078 given compressed file. This position represents a number of bytes in the
1079 uncompressed data stream.
1080
1081 gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
1082*/
1083
1084ZEXTERN int ZEXPORT gzeof OF((gzFile file));
1085/*
1086 Returns 1 when EOF has previously been detected reading the given
1087 input stream, otherwise zero.
1088*/
1089
1090ZEXTERN int ZEXPORT gzclose OF((gzFile file));
1091/*
1092 Flushes all pending output if necessary, closes the compressed file
1093 and deallocates all the (de)compression state. The return value is the zlib
1094 error number (see function gzerror below).
1095*/
1096
1097ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
1098/*
1099 Returns the error message for the last error which occurred on the
1100 given compressed file. errnum is set to zlib error number. If an
1101 error occurred in the file system and not in the compression library,
1102 errnum is set to Z_ERRNO and the application may consult errno
1103 to get the exact error code.
1104*/
1105
1106ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
1107/*
1108 Clears the error and end-of-file flags for file. This is analogous to the
1109 clearerr() function in stdio. This is useful for continuing to read a gzip
1110 file that is being written concurrently.
1111*/
1112
1113 /* checksum functions */
1114
1115/*
1116 These functions are not related to compression but are exported
1117 anyway because they might be useful in applications using the
1118 compression library.
1119*/
1120
1121ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
1122
1123/*
1124 Update a running Adler-32 checksum with the bytes buf[0..len-1] and
1125 return the updated checksum. If buf is NULL, this function returns
1126 the required initial value for the checksum.
1127 An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
1128 much faster. Usage example:
1129
1130 uLong adler = adler32(0L, Z_NULL, 0);
1131
1132 while (read_buffer(buffer, length) != EOF) {
1133 adler = adler32(adler, buffer, length);
1134 }
1135 if (adler != original_adler) error();
1136*/
1137
1138ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
1139/*
1140 Update a running crc with the bytes buf[0..len-1] and return the updated
1141 crc. If buf is NULL, this function returns the required initial value
1142 for the crc. Pre- and post-conditioning (one's complement) is performed
1143 within this function so it shouldn't be done by the application.
1144 Usage example:
1145
1146 uLong crc = crc32(0L, Z_NULL, 0);
1147
1148 while (read_buffer(buffer, length) != EOF) {
1149 crc = crc32(crc, buffer, length);
1150 }
1151 if (crc != original_crc) error();
1152*/
1153
1154
1155 /* various hacks, don't look :) */
1156
1157/* deflateInit and inflateInit are macros to allow checking the zlib version
1158 * and the compiler's view of z_stream:
1159 */
1160ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
1161 const char *version, int stream_size));
1162ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
1163 const char *version, int stream_size));
1164ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
1165 int windowBits, int memLevel,
1166 int strategy, const char *version,
1167 int stream_size));
1168ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
1169 const char *version, int stream_size));
1170ZEXTERN int ZEXPORT inflateBackInit_ OF((z_stream FAR *strm, int windowBits,
1171 unsigned char FAR *window,
1172 const char *version,
1173 int stream_size));
1174#define deflateInit(strm, level) \
1175 deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
1176#define inflateInit(strm) \
1177 inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
1178#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
1179 deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
1180 (strategy), ZLIB_VERSION, sizeof(z_stream))
1181#define inflateInit2(strm, windowBits) \
1182 inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
1183#define inflateBackInit(strm, windowBits, window) \
1184 inflateBackInit_((strm), (windowBits), (window), \
1185 ZLIB_VERSION, sizeof(z_stream))
1186
1187
1188#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
1189 struct internal_state {int dummy;}; /* hack for buggy compilers */
1190#endif
1191
1192ZEXTERN const char * ZEXPORT zError OF((int));
1193ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z));
1194ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
1195
1196#ifdef __cplusplus
1197}
1198#endif
1199
1200#endif /* ZLIB_H */