From 89a1244623411083963b0740602234c9dd9ea6c7 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 23 Aug 2011 07:33:40 +0200 Subject: [PATCH] imported from svn 'pve-installer/pve2' --- Makefile | 74 ++ Xdefaults | 5 + changelog.Debian | 107 ++ checktime | 22 + conffiles | 2 + control | 9 + copyright | 212 ++++ fake-start-stop-daemon | 5 + html/Makefile | 27 + html/country.htm | 63 + html/extract1-license.htm | 61 + html/extract2-rulesystem.htm | 62 + html/extract3-spam.htm | 68 + html/extract4-virus.htm | 52 + html/fail.htm | 39 + html/installer_logo_installation.png | Bin 0 -> 12656 bytes html/installer_logo_license.png | Bin 0 -> 8646 bytes html/installer_logo_rulesystem.png | Bin 0 -> 13337 bytes html/installer_logo_spamfilter.png | Bin 0 -> 8567 bytes html/ipconf.htm | 70 ++ html/license.htm | 312 +++++ html/nohds.htm | 39 + html/page1.htm | 65 + html/passwd.htm | 57 + html/plus.png | Bin 0 -> 1098 bytes html/success.htm | 39 + interfaces | 6 + policy-disable-rc.d | 7 + proxinstall | 1729 ++++++++++++++++++++++++++ proxlogo.xpm | 680 ++++++++++ unconfigured.sh | 122 ++ xinitrc | 4 + xorg.conf.fbdev | 213 ++++ 33 files changed, 4151 insertions(+) create mode 100644 Makefile create mode 100644 Xdefaults create mode 100644 changelog.Debian create mode 100755 checktime create mode 100644 conffiles create mode 100644 control create mode 100644 copyright create mode 100755 fake-start-stop-daemon create mode 100644 html/Makefile create mode 100644 html/country.htm create mode 100755 html/extract1-license.htm create mode 100755 html/extract2-rulesystem.htm create mode 100755 html/extract3-spam.htm create mode 100755 html/extract4-virus.htm create mode 100644 html/fail.htm create mode 100755 html/installer_logo_installation.png create mode 100644 html/installer_logo_license.png create mode 100755 html/installer_logo_rulesystem.png create mode 100755 html/installer_logo_spamfilter.png create mode 100644 html/ipconf.htm create mode 100755 html/license.htm create mode 100644 html/nohds.htm create mode 100644 html/page1.htm create mode 100644 html/passwd.htm create mode 100755 html/plus.png create mode 100644 html/success.htm create mode 100644 interfaces create mode 100755 policy-disable-rc.d create mode 100755 proxinstall create mode 100755 proxlogo.xpm create mode 100755 unconfigured.sh create mode 100644 xinitrc create mode 100644 xorg.conf.fbdev diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6d86e05 --- /dev/null +++ b/Makefile @@ -0,0 +1,74 @@ +# achtung: also set release in proxinstall! +RELEASE=2.0 + +DEB=pve-installer_2.0-2_all.deb + +INSTALLER_SOURCES= \ + unconfigured.sh \ + xorg.conf.fbdev \ + fake-start-stop-daemon \ + policy-disable-rc.d \ + interfaces \ + proxlogo.xpm \ + checktime \ + proxinstall + +HTML_SOURCES=$(wildcard html/*.htm) $(wildcard html/*.png) + +${DEB}: ${INSTALLER_SOURCES} ${HTML_SOURCES} Makefile html/Makefile + rm -rf debian + mkdir debian + make DESTDIR=`pwd`/debian install + mkdir debian/DEBIAN + install -m 0644 control debian/DEBIAN + install -m 0644 conffiles debian/DEBIAN + dpkg-deb --build debian ${DEB} + rm -rf debian + lintian -X man ${DEB} + +.phony: install +install: ${INSTALLER_SOURCES} ${HTML_SOURCES} + make DESTDIR=`pwd`/debian -C html install + install -D -m 644 interfaces ${DESTDIR}/etc/network/interfaces + mkdir -p ${DESTDIR}/var/lib/dhcp3/ + ln -s /tmp/dhclient.eth0.leases ${DESTDIR}/var/lib/dhcp3 + ln -s /tmp/resolv.conf.dhclient-new ${DESTDIR}/etc/resolv.conf + ln -s /tmp/resolv.conf.dhclient-new ${DESTDIR}/etc/resolv.conf.dhclient-new + install -D -m 755 fake-start-stop-daemon ${DESTDIR}/var/lib/pve-installer/fake-start-stop-daemon + install -D -m 755 policy-disable-rc.d ${DESTDIR}/var/lib/pve-installer/policy-disable-rc.d + install -D -m 644 proxlogo.xpm ${DESTDIR}/var/lib/pve-installer/proxlogo.xpm + install -D -m 755 unconfigured.sh ${DESTDIR}/sbin/unconfigured.sh + install -D -m 755 proxinstall ${DESTDIR}/usr/bin/proxinstall + install -D -m 755 checktime ${DESTDIR}/usr/bin/checktime + install -D -m 644 xinitrc ${DESTDIR}/.xinitrc + install -D -m 644 Xdefaults ${DESTDIR}/.Xdefaults + install -D -m 644 xorg.conf.fbdev ${DESTDIR}/etc/X11/xorg.conf + install -D -m 644 copyright ${DESTDIR}/usr/share/doc/pve-installer/copyright + install -D -m 644 changelog.Debian ${DESTDIR}/usr/share/doc/pve-installer/changelog.Debian + gzip --best ${DESTDIR}/usr/share/doc/pve-installer/changelog.Debian + +.phony: upload +upload: ${DEB} + umount /pve/${RELEASE}; mount -o rw /pve/${RELEASE} + mkdir -p /pve/${RELEASE}/extra + rm -rf /pve/${RELEASE}/extra/pve-installer_*.deb + rm -f /pve/${RELEASE}/extra/Packages* + cp ${DEB} /pve/${RELEASE}/extra + cd /pve/${RELEASE}/extra; dpkg-scanpackages . /dev/null > Packages; gzip -9c Packages > Packages.gz + umount /pve/${RELEASE}; mount -o ro /pve/${RELEASE} + +packages: /pve/${RELEASE}/install/pve.files + rm -rf packages packages.tmp; mkdir packages.tmp + for i in `cat $<`; do install -m 644 $$i packages.tmp/; done + mv packages.tmp packages + +test.img: + dd if=/dev/zero of=test.img bs=1024 count=800000 + +check: packages test.img + ./proxinstall -t test.img + +.phony: clean +clean: + make -C html clean + rm -rf *~ ${DEB} target debian packages packages.tmp test.img pve-final.pkglist diff --git a/Xdefaults b/Xdefaults new file mode 100644 index 0000000..a46c917 --- /dev/null +++ b/Xdefaults @@ -0,0 +1,5 @@ +Xft.antialias: 1 +Xft.dpi: 96.000000 +Xft.hinting: 1 +Xft.hintstyle: hintfull +Xft.rgba: 1 diff --git a/changelog.Debian b/changelog.Debian new file mode 100644 index 0000000..62c12aa --- /dev/null +++ b/changelog.Debian @@ -0,0 +1,107 @@ +pve-installer (2.0-2) unstable; urgency=low + + * support new kernel parameter 'ext4' switch (use ext4 instead of ext3) + + * use 'ext3' by default + + -- Proxmox Support Team Thu, 04 Aug 2011 12:58:27 +0200 + +pve-installer (2.0-1) unstable; urgency=low + + * use ext4 fs + + * align LVM on 128k boundary + + * use 'parted' to create partitions + + * support > 2TB disks (use GPT partition tables) + + * mount with barrier=0 during install (speedup) + + * write keyboard settings to /etc/pve-installer.cfg + + * adjust for pve2 + + * avoid to run update-grub or update-initramfs during install + + * use --no-triggers for faster unpack + + * also mount sysfs to /target/sys + + * do not write /etc/default/grub - not really needed + + * we now use openbox instead of metacity + + * wait one second after partitioning (give kernel time to reread part + table) + + * use update-initramfs -c (instead of -u) + + * do not write /etc/apache2/ports.conf (not really needed) + + * enable apache port redirect (a2ensite pve-redirect.conf) + + -- Proxmox Support Team Mon, 15 Feb 2010 14:09:46 +0100 + +pve-installer (1.0-9) unstable; urgency=low + + * fix netmask bug + + * use 'udevadm info' to detect disks + + -- Proxmox Support Team Fri, 22 Jan 2010 13:13:11 +0100 + +pve-installer (1.0-8) unstable; urgency=low + + * use UUID= for /boot in fstab + + -- Proxmox Support Team Fri, 22 Jan 2010 13:11:58 +0100 + +pve-installer (1.0-7) unstable; urgency=low + + * unconfigured.sh: use -q flag for modprobe + + * proxinstall: use 'removable' flag on older kernels (instead + of 'capability') to detect cdroms. + + -- Proxmox Support Team Fri, 04 Dec 2009 18:03:59 +0100 + +pve-installer (1.0-6) unstable; urgency=low + + * pass --no-floppy to grub-install (some users reported delays) + + -- Proxmox Support Team Fri, 19 Jun 2009 10:48:37 +0200 + +pve-installer (1.0-5) unstable; urgency=low + + * fixes for debian lenny + + * support dynamically allocated virtio blk devices + + -- Proxmox Support Team Fri, 08 May 2009 16:53:42 +0200 + +pve-installer (1.0-4) unstable; urgency=low + + * proxinstall: better postfix configuration + + -- Proxmox Support Team Mon, 12 Jan 2009 12:21:13 +0100 + +pve-installer (1.0-3) unstable; urgency=low + + * ause grub instead of lilo + + -- Proxmox Support Team Wed, 20 Aug 2008 14:39:57 +0200 + +pve-installer (1.0-2) stable; urgency=low + + * proxinstall (extract_data): added maxroot and swapsize boot parameters, + set bridge parameters (stp = on, fd = 0) + + -- Proxmox Support Team Tue, 8 Jul 2008 06:54:03 +0200 + +pve-installer (1.0-1) stable; urgency=low + + * initial release + + -- Proxmox Support Team Mon, 19 Nov 2007 15:48:05 +0100 + diff --git a/checktime b/checktime new file mode 100755 index 0000000..fc609c6 --- /dev/null +++ b/checktime @@ -0,0 +1,22 @@ +#!/usr/bin/perl -w + +use strict; +use File::stat; + +sub testtime { + + my $st = stat ("/usr/bin/checktime") || stat ("./checktime"); + + my $ctime = time(); + + if ($ctime < $st->atime) { + warn "detected wrong system time\n"; + my $tstr = localtime $st->atime; + # correct system time to avoid errors, i.e gpg fails + system ("date -s '$tstr'"); + } +} + +testtime(); + +exit (0); diff --git a/conffiles b/conffiles new file mode 100644 index 0000000..4a58d35 --- /dev/null +++ b/conffiles @@ -0,0 +1,2 @@ +/etc/X11/xorg.conf +/etc/network/interfaces diff --git a/control b/control new file mode 100644 index 0000000..cd5204f --- /dev/null +++ b/control @@ -0,0 +1,9 @@ +Package: pve-installer +Version: 2.0-2 +Section: utils +Priority: optional +Architecture: amd64 +Depends: +Maintainer: Proxmox Support Team +Description: The Proxmox Installer + This package contains Proxmox graphical installer diff --git a/copyright b/copyright new file mode 100644 index 0000000..a77ee61 --- /dev/null +++ b/copyright @@ -0,0 +1,212 @@ +Please note: this document may contain more than one Proxmox end user +license agreement and one or more third party end user license +agreements. By indicating your acceptance, you are agreeing to the +terms and conditions of all these agreements. + +Proxmox Software License Agreement + +Please read this agreement carefully. By installing or otherwise using +the software (including its components), you agree to the terms of +this agreement. If you do not agree with these terms, do not download, +install or use the software. The software may not be sold, +transferred, of further distributed without prior written +authorization from Proxmox. + +Rights and Licenses + +This Proxmox Software License Agreement ("Agreement") is a legal +agreement between you (an entity or a person) and Proxmox Server +Solutions GmbH ("Proxmox") with respect to the software product +identified in the title of this Agreement, media (if any) and +accompanying documentation (collectively the "Software"). + +The Software is a collective work of Proxmox. You must acquire a +license for each installation of the Software and for each additional +copy (or partial copy) of the Software stored or loaded in memory or +virtual memory beyond the initial copy necessary for execution of the +Software installed on the hardware. + +The Software is a modular operating system. Most of the components are +open source packages, developed independently, and accompanied by +separate license terms. Your license rights with respect to individual +components accompanied by separate license terms are defined by those +terms; nothing in this Agreement shall restrict, limit, or otherwise +affect any rights or obligations you may have, or conditions to which +you may be subject, under such license terms. + +While the license terms for a component may authorize you to +distribute the component, you may not use any Proxmox marks in +distributing the component, whether or not the component contains +Proxmox marks. + +Other license terms and restrictions + +The Software is protected by the copyright laws and treaties of +Austria and other countries and is subject to the terms of this +Agreement. The Software is licensed to you, not sold. + +The Software may be bundled with other software programs ("Bundled +Programs"). Your license rights with respect to Bundled Programs +accompanied by separate license terms are defined by those terms; +nothing in this Agreement shall restrict, limit, or otherwise affect +any rights or obligations you may have, or conditions to which you may +be subject, under such license terms. + +Proxmox reserves all rights not expressly granted to you. You may not: +(1) reverse engineer, decompile, or disassemble the Software except +and only to the extent it is expressly permitted by applicable law or +the license terms accompanying a component of the Software; or (2) +transfer the Software or your license rights under this Agreement, in +whole or in part. + +Maintenance and support + +Your rights with respect to updates, patches, or other materials +received under a subscription to a Proxmox maintenance program for the +Software are defined by the relevant maintenance program terms. + +Proxmox has no obligation under this Agreement to provide maintenance +or support for the Software. Depending on how you acquired the +Software, you may have also acquired a maintenance subscription for +the Software. For more information on Proxmox´s current maintenance +and support offerings, see http://www.proxmox.com. + +Ownership rights + +No title to or ownership of the Software is transferred to +you. Proxmox and/or its licensors owns and retains all title and +ownership of all intellectual property rights in the Software, +including any adaptations or copies. You acquire only a license to use +the Software. + +Warranty + +The Software is being delivered to you "as is" and Proxmox makes no +warranty as to its use or performance. Proxmox and its suppliers do +not and cannot warrant the performance or results you may obtain by +using the software. Except for any warranty, condition, representation +or term to the extent to which the same cannot or may not be excluded +or limited by law applicable to you in your jurisdiction, Proxmox and +its suppliers make no warranties conditions, representations, or terms +(express or implied whether by statute, common law, custom, usage or +otherwise) as to any matter including without limitation +non-infringement of third party rights, merchantability, integration, +satisfactory quality, or fitness for any particular purpose. + +The software is not designed, manufactured or intended for use or +distribution with on- line control equipment in hazardous environments +requiring fail-safe performance, such as in the operation of nuclear +facilities, aircraft navigation, communication, or control systems, or +other uses in which failure of the software could lead directly to +death, personal injury, or severe physical or environmental damage. + +The software is only compatible with certain computers and operating +systems. The software is not warranted for non-compatible +systems. Call Proxmox or your dealer for information about +compatibility. + +Non-Proxmox Products. The Software may include or be bundled with +hardware or other software programs licensed or sold by a licensor +other than Proxmox. Proxmox does not warrant non-Proxmox products. Any +such products are provided on an "as is" basis. Any warranty service +for Proxmox products is provided by the product licensor in accordance +with the applicable licensor warranty. + +Expect as otherwise restricted by law, Proxmox disclaims and excludes +any and all implied warranties including any warranties of +merchantability, title, non-infringement, or fitness for a particular +purpose. Proxmox makes no warranty, representation or promise not +expressly set forth in this limited warranty. Proxmox does not warrant +that the software will satisfy your requirements or that the operation +of the software will be uninterrupted. Some jurisdictions do not allow +certain disclaimers and limitations of warranties, so portions of the +above limitations may not apply to you. This limited warranty gives +you specific rights and you may also have other rights which vary from +state to state. + +Limitation of liability + +In no event will Proxmox or its suppliers be liable for any loss of +data, loss of income, loss of opportunity or profits, cost of recovery +or any other special, incidental, consequential or indirect damages +arising out of or in connection with this agreement, or the use of the +software, reference materials or accompanying documentation, however +caused and on any theory of liability. This limitation will apply even +if Proxmox, its suppliers or authorized distributors have been advised +of the possibility of such damage. In no event shall the liability of +Proxmox exceed the amount paid for the licensed software at issue. You +acknowledge that the license fee reflects this allocation of risk. +Some jurisdictions do not allow the limitation or exclusion of +liability for incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +General terms + +Term. This Agreement becomes effective on the date you legally acquire +the Software and will automatically terminate if you breach any of its +terms. Upon termination of this Agreement, you must destroy the +original and all copies of the Software or return them to Proxmox and +delete the Software from your systems. + +Benchmark Testing. This benchmark testing restriction applies to you +if you are a software vendor or if you are performing testing on the +Software at the direction of or on behalf of a software vendor. You +may not, without Proxmox's prior written consent not to be +unreasonably withheld, publish or disclose to any third party the +results of any benchmark test of the Software. If you are a vendor of +products that are functionally similar to or compete with the Software +("Similar Products"), or are acting on behalf of such a vendor, and +you publish or disclose benchmark information on the Software in +violation of this restriction, then notwithstanding anything to the +contrary in the Similar Product's end user license agreement, and in +addition to any other remedies Proxmox may have, Proxmox shall have +the right to perform benchmark testing on Similar Products and to +disclose and publish that benchmark information and you hereby +represent that you have authority to grant such right to Proxmox. + +Transfer. This Agreement may not be transferred or assigned without +the prior written approval of Proxmox. + +Law and Jurisdiction. This Agreement is governed by the laws of +Austria, Europe. Any action at law relating to this Agreement may only +be brought before the courts of competent jurisdiction of Austria. + +Entire Agreement. This Agreement and the Upgrade/Additive Agreement +(if applicable) sets forth the entire understanding and agreement +between you and Proxmox and may be amended only in a writing signed by +both parties. No licensor, distributor, dealer, retailer, reseller, +sales person, or employee is authorized to modify this agreement or to +make any representation or promise that is different from, or in +addition to, the terms of this agreement. + +Waiver. No waiver of any right under this Agreement will be effective +unless in writing, signed by a duly authorized representative of the +party to be bound. No waiver of any past or present right arising from +any breach or failure to perform will be deemed to be a waiver of any +future right arising under this Agreement. + +Severability. If any provision in this Agreement is invalid or +unenforceable, that provision will be construed, limited, modified or, +if necessary, severed, to the extent necessary, to eliminate its +invalidity or unenforceability, and the other provisions of this +Agreement will remain unaffected. + +Export Compliance. Any person or entity exporting or re-exporting +Proxmox products directly or indirectly and via any means, including +electronic transfer, is wholly responsible for doing so in accordance +with the Austrian Export Administration Regulations and the laws of +host countries. Proxmox assumes no responsibility or liability for +your failure to obtain any necessary export approvals. Approvals are +dependent upon an item's technical characteristics, the destination, +end-use and end-user, as well as other activities of the end user. +Specifically, no Proxmox product may be exported to embargoed or +otherwise restricted countries or end users. Please consult the Bureau +of Industry and Security web page and other sources before exporting +Proxmox products and familiarize yourself with the laws of destination +countries before re-exporting Proxmox products. This provision shall +survive the expiration or earlier termination of this Agreement. + +Other. The application of the United Nations Convention of Contracts +for the International Sale of Goods is expressly excluded. + +(c) 2011 Proxmox Server Solutions GmbH, All Rights Reserved. diff --git a/fake-start-stop-daemon b/fake-start-stop-daemon new file mode 100755 index 0000000..9bed70e --- /dev/null +++ b/fake-start-stop-daemon @@ -0,0 +1,5 @@ +#!/bin/sh + +#do nothing + +echo "fake start-stop-daemon called" diff --git a/html/Makefile b/html/Makefile new file mode 100644 index 0000000..824c7ab --- /dev/null +++ b/html/Makefile @@ -0,0 +1,27 @@ + +all: + +.phony: install +install: + install -D -m 644 page1.htm ${DESTDIR}/var/lib/pve-installer/html/page1.htm + install -D -m 644 country.htm ${DESTDIR}/var/lib/pve-installer/html/country.htm + install -D -m 644 passwd.htm ${DESTDIR}/var/lib/pve-installer/html/passwd.htm + install -D -m 644 license.htm ${DESTDIR}/var/lib/pve-installer/html/license.htm + install -D -m 644 extract1-license.htm ${DESTDIR}/var/lib/pve-installer/html/extract1-license.htm + install -D -m 644 extract2-rulesystem.htm ${DESTDIR}/var/lib/pve-installer/html/extract2-rulesystem.htm + install -D -m 644 extract3-spam.htm ${DESTDIR}/var/lib/pve-installer/html/extract3-spam.htm + install -D -m 644 extract4-virus.htm ${DESTDIR}/var/lib/pve-installer/html/extract4-virus.htm + install -D -m 644 fail.htm ${DESTDIR}/var/lib/pve-installer/html/fail.htm + install -D -m 644 ipconf.htm ${DESTDIR}/var/lib/pve-installer/html/ipconf.htm + install -D -m 644 nohds.htm ${DESTDIR}/var/lib/pve-installer/html/nohds.htm + install -D -m 644 success.htm ${DESTDIR}/var/lib/pve-installer/html/success.htm + install -D -m 644 plus.png ${DESTDIR}/var/lib/pve-installer/html/plus.png + install -D -m 644 installer_logo_installation.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_installation.png + install -D -m 644 installer_logo_rulesystem.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_rulesystem.png + install -D -m 644 installer_logo_spamfilter.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_spamfilter.png + install -D -m 644 installer_logo_license.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_license.png + + +.phony: clean +clean: + rm -rf *~ diff --git a/html/country.htm b/html/country.htm new file mode 100644 index 0000000..8ab52c0 --- /dev/null +++ b/html/country.htm @@ -0,0 +1,63 @@ + + + +
+
+ + + + + + + + + + +
+ + + + +
+
 
+ Location and Time Zone selection +

+ + +
The Proxmox Installer + automatically makes location based optimizations, like + choosing the nearest mirror to download files. Also make sure + to select the right time zone and keyboard layout. +

+ Press the Next button to continue installation. +
+
+


+ + + + + + + + + + + + + +
Country: + The selected country is used to choose nearby mirror + servers. This will speedup downloads and make updates more + reliable. +

+
Time Zone: + Automatically adjust daylight saving time. +

+
Keyboard + Layout: Choose your keyboard layout. +

+
+

+
+ \ No newline at end of file diff --git a/html/extract1-license.htm b/html/extract1-license.htm new file mode 100755 index 0000000..9b1cf5f --- /dev/null +++ b/html/extract1-license.htm @@ -0,0 +1,61 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Virtualization Platform

+ + +
+ Open Source Virtualization Platform

+ - Enterprise ready
+ - Central Management
+ - Clustering
+ - Online Backup solution
+ - Live Migration
+ - 32 and 64 bit guests

+ + Visit www.proxmox.com + for additional information and the Wiki about Proxmox VE. +

+
+
+


+ + + + + + + + + +
+ Container Virtualization
+ Only 1-3% performance loss using OS virtualization as compared to using a standalone server.

+
+ Full Virtualization (KVM)
+ Run unmodified virtual servers - Linux or Windows.
+
+

+
+
+ \ No newline at end of file diff --git a/html/extract2-rulesystem.htm b/html/extract2-rulesystem.htm new file mode 100755 index 0000000..cacc4bb --- /dev/null +++ b/html/extract2-rulesystem.htm @@ -0,0 +1,62 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Virtualize your IT Infrastructure +

+ + +
+ Proxmox VE is ready for enterprise deployments.

The role based permission management combined with the integration of multiple external authenication sources is the base for a secure and stable environment.

+ Visit www.proxmox.com for more information about commercial support subscriptions.

+
+


+ + + + + + + + + + + + + + + + +
+ Commitment to Free Software
+ The source code is released under the GNU Affero General Public License. +
+ RESTful web API
+ Ressource Oriented Architecture (ROA) and declarative API definition using JSON Schema enables easy integration for third party management tools. +
+ Virtual Appliances
+ Pre-installed applications - up and running within a few seconds.
+
+

+
+
+ \ No newline at end of file diff --git a/html/extract3-spam.htm b/html/extract3-spam.htm new file mode 100755 index 0000000..5fb60e8 --- /dev/null +++ b/html/extract3-spam.htm @@ -0,0 +1,68 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Web Based Administration +

+ + +
+ Proxmox VE closes the gap between high performance Linux virtualization and the missing parts - easy deployment and management.

+ Proxmox VE is the number one choice for Linux based virtualization platforms.
+
+


+ + + + + + + + + + + + + + + + + + + +
+ JavaScript based GUI
+ Fast search-driven interface, capable of handling several hundreds VMs.
+
+ Web Based Console
+ SSL secured browser-integrated console view to all Virtual Servers and hosts.
+
+ Online Backup
+ Backup (and restore) your running Virtual Servers with LVM2 snapshots.
+
+ Live Migration
+ Move your running servers from one physical host to another without downtime. +
+

+
+
+ diff --git a/html/extract4-virus.htm b/html/extract4-virus.htm new file mode 100755 index 0000000..eb31e48 --- /dev/null +++ b/html/extract4-virus.htm @@ -0,0 +1,52 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Proxmox VE Cluster +

+ + +
+ With Proxmox VE you can join multiple physical server to one VE Cluster.

+ This flexible multi-master cluster eliminates a single point of failure.
+
+


+ + + + + + + + + + +
+ Central management
+ Create and manage new Virtual Servers by simply selecting the node where it should run.

+
+ Proxmox Cluster file system (pmcfs)
+ Database-driven file system for storing configuration files, replicated in realtime on all nodes using corosync.

+
+

+
+ \ No newline at end of file diff --git a/html/fail.htm b/html/fail.htm new file mode 100644 index 0000000..90f4181 --- /dev/null +++ b/html/fail.htm @@ -0,0 +1,39 @@ + + + +
+
+ + + + + + + +
+ + + + +
+
 

+

+ Installation failed! +


+ + The Proxmox VE could not be installed. +


+ + + + + + +
 Press ALT + F2 to see details

+


+
+

+
 
+
+ + \ No newline at end of file diff --git a/html/installer_logo_installation.png b/html/installer_logo_installation.png new file mode 100755 index 0000000000000000000000000000000000000000..c9d8738ed1bde5f71335ff80857b4d01e9cae4e2 GIT binary patch literal 12656 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 literal 0 HcmV?d00001 diff --git a/html/installer_logo_rulesystem.png b/html/installer_logo_rulesystem.png new file mode 100755 index 0000000000000000000000000000000000000000..24bf32c10e5c83c63ef781c2b59d68a670f37be9 GIT binary patch literal 13337 zcma)DRaBf!ke$H^3>Mr8?htfvm*5(l!GmUShe3k{f(Hvu@Zc_kyM!RY-JRgN{QI_V z`_NW>PSnZ?RUY()^bG(204XZSXug(SugMz?^F z^8MEal8vN_Bmhtyhw*5J{Mx3rP|#EX0DKq#09YshaQ`ZT?EwJpTmZlU1OO2F4ge5A zGg~x7UOUjC3i_@900!=V2^eT;8viOpbCcC`lm6`JXyxPvxE@XEe3cRZC)4_D?dECb zVg*n)vvqRgP?goD_Tb@o|GqJv$R7aU`JgBxsqJNQ?2qcEJy(D2O8)Dz*JGo%T{!k> zBcZ9UX^Vd1?kywhp{Q`AZ`aq}Y7p@sUsRwJ9>O$$h6ad-cC`{Fgg_&cxJQAABHYLB zz4CH%>^d=;C5bl$z}4loKjwQ%`IohPGrud+wJGjHCF+TU20hK+jfDqZE*T!S^CXYA z_e|Ex=Mb&^`1+X>^#nUHy8y z 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 + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Network Configuration +

+ + +
Please verify + the displayed network configuration. You will need a valid network + configuration to access the configuration interface after installation. +

+ Afterwards press the Next button to continue installation. The + installer will then partition your hard disk and start copying packages. +
+
+


+ + + + + + + + + + + + + + + + + +
IP address: + Set the IP address for the Proxmox Virtual Environment. +

+
Netmask: + Set the netmask of your network. +

+
Gateway: + IP address of your gateway or firewall. +

+
DNS Server: + IP address of your DNS server. +

+
+

+
+
+ \ No newline at end of file diff --git a/html/license.htm b/html/license.htm new file mode 100755 index 0000000..e997090 --- /dev/null +++ b/html/license.htm @@ -0,0 +1,312 @@ + + + +
+
+ + + + + + + +
+

+ Proxmox License Agreement +


+ +
 
+ +
+ \ No newline at end of file diff --git a/html/nohds.htm b/html/nohds.htm new file mode 100644 index 0000000..365aab8 --- /dev/null +++ b/html/nohds.htm @@ -0,0 +1,39 @@ + + + +
+
+ + + + + + + +
+ + + + +
+
 

+

+ No Hard Disk found! +


+ + The installer could not find a supported hard disk. Please visit www.proxmox.com for more information. +


+ + + + + + +
 Press ALT + F2 to see details

+


+
+

+
 
+
+ + diff --git a/html/page1.htm b/html/page1.htm new file mode 100644 index 0000000..804899e --- /dev/null +++ b/html/page1.htm @@ -0,0 +1,65 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Proxmox Virtualization Environment (PVE) +

+ + +
The Proxmox Installer + automatically partitions your hard disk. It installs all required + packages and finally makes the system bootable from hard disk. + All existing partitions and data will be lost. +

+ Press the Next button to continue installation. +
+
+


+ + + + + + + + + + + + + +
Please verify the installation target
+ The displayed hard disk is used for installation. +
Warning: All existing partitions and data will be lost. +


+
Automatic hardware detection
+ The installer automatically configures your hardware. +


+
Graphical user interface
+ Final configuration will be done on the graphical user + interface via a web browser. +


+
+

+
+
+ \ No newline at end of file diff --git a/html/passwd.htm b/html/passwd.htm new file mode 100644 index 0000000..427ae8e --- /dev/null +++ b/html/passwd.htm @@ -0,0 +1,57 @@ + + + +
+
+ + + + + + + + + + +
+ + + + +
+
 
+ Administration Password and E-Mail Address +

+ + +
Proxmox Virtual Environment is a + full featured GNU/Linux system based on Debian. Therefore you + should use a strong password with at least 5 characters. +

+ All administrative emails are sent to the specified address. +

+ Press the Next button to continue installation. +
+
+


+ + + + + + + + + +
Password: + Please use strong passwords. Your password should be 8 or + more characters in length. Also combine letters, numbers, + and symbols. +

+
E-Mail: + Administrator email address. +

+
+

+
+ \ No newline at end of file diff --git a/html/plus.png b/html/plus.png new file mode 100755 index 0000000000000000000000000000000000000000..cb5c0bd4def1de70d9a15cfab1a7d46a5af1908d GIT binary patch literal 1098 zcmdUsJud`N6o#L%WXG_{h7dG}hJQdrfmvn>8xe`<^cr7@+$nWhqLKXx;s;1H>m#C2 zQy@a4Qu#=HjB{t2xob8;BTjP9oO|Yd&pqco>yyRtoYUa|Ip1@qEIF#7jlcD5e1Qj21g!T+|@bP87+GHjR(xDxZ1^NWn@Crulh+t%vl-hz5xP?nN zj)ajyt4bxS>o_Ti#G;C5FbJcOmpQ*zGA<#wxCim69Dx~1R(4YTZp>C4R{7^&(1vEp ST?hHGdELBUD7w2Nb8Da1E!esM literal 0 HcmV?d00001 diff --git a/html/success.htm b/html/success.htm new file mode 100644 index 0000000..3c93bad --- /dev/null +++ b/html/success.htm @@ -0,0 +1,39 @@ + + + +
+
+ + + + + + + +
+ + + + +
+
 

+

+ Installation successful! +


+ + The Proxmox Virtual Environment is now installed and ready to use. +


+ + + + + + +
 Next steps

Reboot and point your web browser to the selected IP address. +


+
+

+
 
+
+ + \ No newline at end of file diff --git a/interfaces b/interfaces new file mode 100644 index 0000000..ddae99c --- /dev/null +++ b/interfaces @@ -0,0 +1,6 @@ +auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet dhcp + diff --git a/policy-disable-rc.d b/policy-disable-rc.d new file mode 100755 index 0000000..273e4c6 --- /dev/null +++ b/policy-disable-rc.d @@ -0,0 +1,7 @@ +#!/bin/sh + +# see /usr/share/doc/sysv-rc/README.policy-rc.d.gz + +# disable service activation + +exit 101 \ No newline at end of file diff --git a/proxinstall b/proxinstall new file mode 100755 index 0000000..fddd796 --- /dev/null +++ b/proxinstall @@ -0,0 +1,1729 @@ +#!/usr/bin/perl -w + +use strict; +use Getopt::Long; +use IPC::Open3; +use IO::File; +use IO::Dir; +use IO::Select; +use Cwd 'abs_path'; +use Gtk2 '-init'; +use Gtk2::Html2; +use Gtk2::Gdk::Keysyms; +use Encode; + +my $release = '2.0'; + +my $kapi = `uname -r`; +chomp $kapi; + +my $opt_testmode; + +if (!GetOptions ('testmode=s' => \$opt_testmode)) { + die "usage error\n"; + exit (-1); +} + +my $logfd = IO::File->new (">/tmp/install.log"); + +my $proxmox_dir = $opt_testmode ? "." : "/var/lib/pve-installer"; + +$ENV{DEBIAN_FRONTEND} = 'noninteractive'; +$ENV{LC_ALL} = 'C'; + +my ($window, $cmdbox, $inbox, $document, $htmlview); +my ($next, $next_fctn, $target_hd, $master_hd); +my ($progress, $progress_status); +my ($ipaddress, $ip_1, $ip_2, $ip_3, $ip_4); +my ($netmask, $mask_1, $mask_2, $mask_3, $mask_4); +my ($gateway, $gw_1, $gw_2, $gw_3, $gw_4); +my ($dnsserver, $dns_1, $dns_2, $dns_3, $dns_4); +my $hostname = 'proxmox'; +my $domain = 'domain.tld'; +my $cmdline = `cat /proc/cmdline` || ''; +my $ipconf; +my $country; +my $timezone = 'Europe/Vienna'; +my $password; +my $mailto; +my $keymap = 'en-us'; +my $cmap; + +my $filesys = ($cmdline =~ m/\sext4(\s.*)$/) ? 'ext4' : 'ext3'; + +my $postfix_main_cf = <<_EOD; +# See /usr/share/postfix/main.cf.dist for a commented, more complete version + +myhostname=__FQDN__ + +smtpd_banner = \$myhostname ESMTP \$mail_name (Debian/GNU) +biff = no + +# appending .domain is the MUA's job. +append_dot_mydomain = no + +# Uncomment the next line to generate "delayed mail" warnings +#delay_warning_time = 4h + +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases +mydestination = \$myhostname, localhost.\$mydomain, localhost +relayhost = +mynetworks = 127.0.0.0/8 +inet_interfaces = loopback-only +recipient_delimiter = + + +_EOD + +sub syscmd { + my ($cmd) = @_; + + return run_command ($cmd, undef, undef, 1); +} + +sub run_command { + my ($cmd, $func, $input, $noout) = @_; + + my $cmdtxt; + if ($input && ($cmd !~ m/chpasswd/)) { + $cmdtxt = "# $cmd <flush(); + print $logfd $cmdtxt; + + my $reader = IO::File->new(); + my $writer = IO::File->new(); + my $error = IO::File->new(); + + my $orig_pid = $$; + + my $pid; + eval { + $pid = open3 ($writer, $reader, $error, $cmd) || die $!; + }; + + my $err = $@; + + # catch exec errors + if ($orig_pid != $$) { + POSIX::_exit (1); + kill ('KILL', $$); + } + + die $err if $err; + + print $writer $input if defined $input; + close $writer; + + my $select = new IO::Select; + $select->add ($reader); + $select->add ($error); + + my ($ostream, $logout) = ('', '', ''); + + while ($select->count) { + my @handles = $select->can_read (0.2); + + Gtk2->main_iteration while Gtk2->events_pending; + + next if !scalar (@handles); # timeout + + foreach my $h (@handles) { + my $buf = ''; + my $count = sysread ($h, $buf, 4096); + if (!defined ($count)) { + my $err = $!; + kill (9, $pid); + waitpid ($pid, 0); + die "command '$cmd' failed: $err"; + } + $select->remove ($h) if !$count; + if ($h eq $reader) { + $ostream .= $buf if !($noout || $func); + $logout .= $buf; + while ($logout =~ s/^([^\010\r\n]*)(\r|\n|(\010)+|\r\n)//s) { + my $line = $1; + &$func($line) if $func; + } + + } elsif ($h eq $error) { + $ostream .= $buf if !($noout || $func); + } + print $buf; + STDOUT->flush(); + print $logfd $buf; + } + } + + &$func($logout) if $func; + + my $rv = waitpid ($pid, 0); + + return $? if $noout; # behave like standard system(); + + my $ec = ($? >> 8); + + if ($ec) { + die "command '$cmd' failed with exit code $ec"; + } + + return $ostream; +} + +sub detect_country { + + print "trying to detect country...\n"; + open (TMP, "traceroute -N 1 -q 1 -n www.debian.org|"); + + my $country; + + my $previous_alarm = alarm (10); + eval { + local $SIG{ALRM} = sub { die "timed out!\n" }; + my $line; + while (defined ($line = )) { + print $logfd "DC TRACEROUTE: $line"; + if ($line =~ m/\s*\d+\s+(\d+\.\d+\.\d+\.\d+)\s/) { + my $geoip = `geoiplookup $1`; + print $logfd "DC GEOIP: $geoip"; + if ($geoip =~ m/GeoIP Country Edition:\s*([A-Z]+),/) { + $country = lc ($1); + last; + } + } + } + }; + + my $err = $@; + + alarm ($previous_alarm); + + close (TMP); + + if ($err) { + print "unable to detect country - $err\n"; + } elsif ($country) { + print "detected country: " . uc($country) . "\n"; + } else { + print "unable to detect country\n"; + } + + return $country; +} + +sub get_memtotal { + + open (MEMINFO, "/proc/meminfo"); + + my $res = 512; # default to 512 if something goes wrong + while (my $line = ) { + if ($line =~ m/^MemTotal:\s+(\d+)\s*kB/i) { + $res = int ($1 / 1024); + } + } + + close (MEMINFO); + + return $res; +} + +my $total_memory = get_memtotal(); + +sub link_points_to { + my ($src, $dest) = @_; + + my ($dev1,$ino1) = stat ($src); + my ($dev2,$ino2) = stat ($dest); + + return 0 if !($dev1 && $dev2 && $ino1 && $ino2); + + return $ino1 == $ino2 && $dev1 == $dev2; +} + +sub find_stable_path { + my ($stabledir, $bdev) = @_; + + my $dh = IO::Dir->new ($stabledir); + if ($dh) { + while (defined(my $tmp = $dh->read)) { + my $path = "$stabledir/$tmp"; + if (link_points_to ($path, $bdev)) { + return wantarray ? ($path, $tmp) : $path; + } + } + + $dh->close; + } + + return wantarray ? () : undef; +} + +sub find_dev_by_uuid { + my $bdev = shift; + + my ($full_path, $name) = find_stable_path ("/dev/disk/by-uuid", $bdev); + + return $name; +} + +sub hd_list { + + my $res = (); + + if ($opt_testmode) { + push @$res, [-1, $opt_testmode, int((-s $opt_testmode)/512), "TESTDISK"]; + } + + my $count = 0; + + foreach my $bd () { + next if $bd =~ m|^/sys/block/ram\d+$|; + next if $bd =~ m|^/sys/block/loop\d+$|; + next if $bd =~ m|^/sys/block/md\d+$|; + next if $bd =~ m|^/sys/block/dm-.*$|; + next if $bd =~ m|^/sys/block/fd\d+$|; + next if $bd =~ m|^/sys/block/sr\d+$|; + + my $dev = `cat '$bd/dev'`; + chomp $dev; + + next if !$dev; + + my $info = `udevadm info --path $bd --query all`; + next if !$info; + + next if $info !~ m/^E: DEVTYPE=disk$/m; + + next if $info =~ m/^E: ID_CDROM/m; + + my ($name) = $info =~ m/^N: (\S+)$/m; + + if ($name) { + my $real_name = "/dev/$name"; + + my $size = `cat '$bd/size'`; + chomp $size; + $size = undef if !($size && $size =~ m/^\d+$/); + + my $model = `cat '$bd/device/model'`; + $model =~ s/^\s+//; + $model =~ s/\s+$//; + if (length ($model) > 30) { + $model = substr ($model, 0, 30); + } + push @$res, [$count++, $real_name, $size, $model] if $size; + } else { + print STDERR "ERROR: unable to map device $dev ($bd)\n"; + } + } + + return $res; +} + +sub read_cmap { + my $countryfn = $opt_testmode ? "/usr/share/pve-manager/country.dat" : + "/proxmox/country.dat"; + open (TMP, "<$countryfn") || die "unable to open '$countryfn' - $!\n"; + my $line; + my $country = {}; + my $countryhash = {}; + my $kmap = {}; + my $kmaphash = {}; + while (defined ($line = )) { + if ($line =~ m|^map:([^\s:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]*):$|) { + $kmap->{$1} = { + name => $2, + kvm => $3, + console => $4, + x11 => $5, + x11var => $6, + }; + $kmaphash->{$2} = $1; + } elsif ($line =~ m|^([a-z]{2}):([^:]+):([^:]*):([^:]*):$|) { + $country->{$1} = { + name => $2, + kmap => $3, + mirror => $4, + }; + $countryhash->{lc($2)} = $1; + } else { + warn "unable to parse 'country.dat' line: $line"; + } + } + close (TMP); + + my $zones = {}; + my $cczones = {}; + my $zonefn = "/usr/share/zoneinfo/zone.tab"; + open (TMP, "<$zonefn") || die "unable to open '$zonefn' - $!\n"; + while (defined ($line = )) { + next if $line =~ m/^\#/; + next if $line =~ m/^\s*$/; + if ($line =~ m|^([A-Z][A-Z])\s+\S+\s+(([^/]+)/\S+)\s|) { + my $cc = lc($1); + $cczones->{$cc}->{$2} = 1; + $country->{$cc}->{zone} = $2 if !defined ($country->{$cc}->{zone}); + $zones->{$2} = 1; + + } + } + close (TMP); + + return { + zones => $zones, + cczones => $cczones, + country => $country, + countryhash => $countryhash, + kmap => $kmap, + kmaphash => $kmaphash, + } +} + +# search for Harddisks +my $hds = hd_list (); + +sub hd_size { + my ($dev) = @_; + + foreach my $hd (@$hds) { + my ($disk, $devname, $size, $model) = @$hd; + return int($size/2) if $devname eq $dev; + } + + die "no such device '$dev'"; +} + +# find the master boot disk - return the first found scsi/ide disk +sub find_master { + my ($target_hd) = @_; + + foreach my $hd (sort { ${$a}[1] cmp ${$b}[1] } @$hds) { + my ($disk, $devname) = @$hd; + next if $disk < 0; + + if ($target_hd =~ m|^/dev/sd|) { + return $devname if $devname =~ m|^/dev/sd|; + } elsif ($target_hd =~ m|^/dev/hd|) { + return $devname if $devname =~ m|^/dev/hd|; + } elsif ($target_hd =~ m|^/dev/i2o/|) { + return $devname if $devname =~ m|^/dev/i2o/|; + } elsif ($target_hd =~ m|^/dev/ataraid/|) { + return $devname if $devname =~ m|^/dev/ataraid/|; + } elsif ($target_hd =~ m|^/dev/ida/|) { + return $devname if $devname =~ m|^/dev/ida/|; + } elsif ($target_hd =~ m|^/dev/cciss/|) { + return $devname if $devname =~ m|^/dev/cciss/|; + } elsif ($target_hd =~ m|^/dev/rd/|) { + return $devname if $devname =~ m|^/dev/rd/|; + } + } + + return $target_hd; +} + +sub get_partition_dev { + my ($target_hd, $partnum) = @_; + + if ($target_hd =~ m|^/dev/[hxsev]d[a-z]$|) { + return "${target_hd}$partnum"; + } elsif ($target_hd =~ m|^/dev/[^/]+/c\d+d\d+$|) { + return "${target_hd}p$partnum"; + } elsif ($target_hd =~ m|^/dev/[^/]+/d\d+$|) { + return "${target_hd}p$partnum"; + } elsif ($target_hd =~ m|^/dev/[^/]+/hd[a-z]$|) { + return "${target_hd}$partnum"; + } else { + die "unable to get device for partition $partnum on device $target_hd\n"; + } + +} + +sub get_boot_part { + my ($target_hd, $gpt) = @_; + + return get_partition_dev ($target_hd, $gpt ? 2 : 1); +} + +sub get_lvm_part { + my ($target_hd, $gpt) = @_; + + return get_partition_dev ($target_hd, $gpt ? 3 : 2); +} + +sub write_config { + my ($text, $filename) = @_; + + my $fd = IO::File->new (">$filename") || + die "unable to open file '$filename' - $!"; + print $fd $text; + $fd->close(); +} + +sub update_progress { + my ($frac, $start, $end, $text) = @_; + + my $part = $end - $start; + my $res = $start + $frac*$part; + + $progress->set_fraction ($res); + $progress->set_text (sprintf ("%d%%", int ($res*100))); + $progress_status->set_text ($text) if defined ($text); + + Gtk2->main_iteration while Gtk2->events_pending; +} + +sub create_filesystem { + my ($dev, $name, $type, $start, $end, $fs, $fe, $opts) = @_; + + $opts = '' if !$opts; + + my $range = $end - $start; + my $rs = $start + $range*$fs; + my $re = $start + $range*$fe; + my $max = 0; + + update_progress (0, $rs, $re, "creating $name filesystem"); + + run_command ("mkfs.$type $opts -F $dev", sub { + my $line = shift; + + if ($line =~ m/Writing inode tables:\s+(\d+)\/(\d+)/) { + $max = $2; + } elsif ($max && $line =~ m/(\d+)\/$max/) { + update_progress (($1/$max)*0.9, $rs, $re); + } elsif ($line =~ m/Creating journal.*done/) { + update_progress (0.95, $rs, $re); + } elsif ($line =~ m/Writing superblocks and filesystem.*done/) { + update_progress (1, $rs, $re); + } + }); +} + +sub debconfig_set { + my ($targetdir, $dcdata) = @_; + + my $cfgfile = "/tmp/debconf.txt"; + write_config ($dcdata, "$targetdir/$cfgfile"); + syscmd ("chroot $targetdir debconf-set-selections $cfgfile"); + unlink "$targetdir/$cfgfile"; +} + +sub diversion_add { + my ($targetdir, $cmd, $new_cmd) = @_; + + syscmd ("chroot $targetdir dpkg-divert --package proxmox " . + "--add --rename $cmd") == 0 || + die "unable to exec dpkg-divert\n"; + + syscmd ("ln -sf ${new_cmd} $targetdir/$cmd") == 0 || + die "unable to link diversion to ${new_cmd}\n"; +} + +sub diversion_remove { + my ($targetdir, $cmd) = @_; + + syscmd ("mv $targetdir/${cmd}.distrib $targetdir/${cmd};") == 0 || + die "unable to remove $cmd diversion\n"; + + syscmd ("chroot $targetdir dpkg-divert --remove $cmd") == 0 || + die "unable to remove $cmd diversion\n"; +} + +sub extract_data { + my ($tgzfile, $targetdir) = @_; + + die "target '$targetdir' does not exist\n" if ! -d $targetdir; + + my $rootdev; + my $bootdev; + my $datadev; + my $swapfile; + + my $ptype = 'msdos'; + + eval { + + my $maxper = 0.25; + + update_progress (0, 0, $maxper, "create partitions"); + + if ( -b $target_hd) { + syscmd ("dd if=/dev/zero of=${target_hd} bs=512 count=256"); + my $hdsize = hd_size ($target_hd); # size in blocks (1024 bytes) + + if ($hdsize >= 2*1024*1024*1024) { # MBR can only handle 2 TB + $ptype = 'gpt'; + } + + my $bootsize_mb = 512; + my $bootsize = $bootsize_mb * 1024; + my $hdsize_mb = $hdsize/1024; + + my $pcmd = "parted --align optimal ${target_hd}"; + $pcmd .= " unit MiB"; + $pcmd .= " mklabel $ptype"; + + my $pnum = 1; + + if ($ptype eq 'gpt') { + $pcmd .= " mkpart primary 1 2"; + $pcmd .= " set $pnum bios_grub on"; + $pnum++; + }; + + $pcmd .= " mkpart primary ext2 $pnum ${bootsize_mb}"; + $pcmd .= " set $pnum boot on"; + $pnum++; + + + $pcmd .= " mkpart primary ext2 ${bootsize_mb} ${hdsize_mb}"; + $pcmd .= " set $pnum lvm on"; + + syscmd($pcmd) == 0 || + die "unable to partition harddisk '${target_hd}'\n"; + + sleep(1); # give kernel time to reread part table + + my $lvmdev = get_lvm_part($target_hd, $ptype eq 'gpt'); + + $rootdev = '/dev/pve/root'; + $datadev = '/dev/pve/data'; + $swapfile = '/dev/pve/swap'; + + # we use --metadatasize 250k, which reseults in "pe_start = 512" + # so pe_start is aligned on a 128k boundary (advantage for SSDs) + syscmd ("/sbin/pvcreate --metadatasize 250k -y -ff $lvmdev") == 0 || + die "unable to initialize physical volume $lvmdev"; + syscmd ("/sbin/vgcreate pve $lvmdev") == 0 || + die "unable to create volume group"; + + my $hdgb = int($hdsize/(1024*1024)); + die "hardisk too small (${hdgb}GB)" if $hdgb < 4; + + my $swapsize; + if ($cmdline =~ m/swapsize=(\d+)[\s\n]/i) { + $swapsize=$1*1024*1024; + } else { + my $ss = int ($total_memory / 1024); + $ss = 4 if $ss < 4; + $ss = ($hdgb/8) if $ss > ($hdgb/8); + $swapsize = $ss*1024*1024; + } + + my $space = (($hdgb > 32) ? 4 : ($hdgb/8))*1024*1024; + + my $maxroot; + if ($cmdline =~ m/maxroot=(\d+)[\s\n]/i) { + $maxroot = $1; + } else { + $maxroot = 96; + } + + my $rootsize = (($hdgb > ($maxroot*4)) ? $maxroot : $hdgb/4)*1024*1024; + my $rest = int($hdsize) - $bootsize - $swapsize - $space - $rootsize; # in KB + syscmd ("/sbin/lvcreate -L${swapsize}K -nswap pve") == 0 || + die "unable to create swap volume"; + + syscmd ("/sbin/lvcreate -L${rootsize}K -nroot pve") == 0 || + die "unable to create root volume"; + + syscmd ("/sbin/lvcreate -L${rest}K -ndata pve") == 0 || + die "unable to create data volume"; + + syscmd ("/sbin/vgchange -a y pve") == 0 || + die "unable to activate volume group"; + + } else { + $rootdev = $target_hd; + syscmd ("umount $rootdev"); + } + + update_progress (0.03, 0, $maxper, "create swap space"); + if ($swapfile) { + syscmd ("mkswap $swapfile") == 0 || + die "unable to create swap space\n"; + } + + update_progress (0.05, 0, $maxper, "creating filesystems"); + + if ( -b $target_hd) { + $bootdev = get_boot_part ($target_hd, $ptype eq 'gpt'); + create_filesystem ($bootdev, 'boot', $filesys, 0.05, $maxper, 0, 0.1); + create_filesystem ($rootdev, 'root', $filesys, 0.05, $maxper, 0.1, 0.5); + create_filesystem ($datadev, 'data', $filesys, 0.05, $maxper, 0.5, 1, '-m 0'); + } else { + create_filesystem ($rootdev, 'root', $filesys, 0.05, $maxper, 0, 1); + } + + update_progress (1, 0.05, $maxper, "mounting target $rootdev"); + + if ( -b $target_hd) { + + # trigger udev to create /dev/disk/by-uuid + syscmd ("udevadm trigger --subsystem-match block"); + syscmd ("udevadm settle --timeout 10"); + + syscmd ("mount -n $rootdev -o noatime,barrier=0 $targetdir") == 0 || + die "unable to mount $rootdev\n"; + + mkdir "$targetdir/boot"; + syscmd ("mount -n $bootdev -o noatime,barrier=0 $targetdir/boot") == 0 || + die "unable to mount $bootdev\n"; + + mkdir "$targetdir/var"; + mkdir "$targetdir/var/lib"; + mkdir "$targetdir/var/lib/vz"; + syscmd ("mount -n $datadev $targetdir/var/lib/vz") == 0 || + die "unable to mount $datadev\n"; + + } else { + syscmd ("mount $rootdev $targetdir -o loop,noatime,barrier=0") == 0 || + die "unable to mount $rootdev\n"; + } + + display_html ("extract2-rulesystem.htm"); + update_progress (1, 0.05, $maxper, "extracting base system"); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = stat ($tgzfile); + $ino || die "unable to open file '$tgzfile' - $!\n"; + + my $files; + if ($opt_testmode) { + $files = `cat /pve/$release/install/pve-base.cnt`; + } else { + $files = `cat /proxmox/pve-base.cnt`; + } + + my $per = 0; + my $count = 0; + + run_command ("tar xvf $tgzfile -C $targetdir", sub { + my $line = shift; + $count++; + my $nper = int (($count *100)/$files); + if ($nper != $per) { + $per = $nper; + my $frac = $per > 100 ? 100 : $per/100; + update_progress ($frac, $maxper, 0.5); + } + }); + + syscmd ("mount -n -t tmpfs tmpfs $targetdir/tmp") == 0 || + die "unable to mount tmpfs on $targetdir/tmp\n"; + syscmd ("mount -n -t proc proc $targetdir/proc") == 0 || + die "unable to mount proc on $targetdir/proc\n"; + syscmd ("mount -n -t sysfs sysfs $targetdir/sys") == 0 || + die "unable to mount sysfs on $targetdir/sys\n"; + + display_html ("extract3-spam.htm"); + update_progress (1, $maxper, 0.5, "configuring base system"); + + # configure hosts + + my $hosts = + "127.0.0.1 localhost.localdomain localhost\n" . + "$ipaddress $hostname.$domain $hostname pvelocalhost\n\n" . + "# The following lines are desirable for IPv6 capable hosts\n\n" . + "::1 ip6-localhost ip6-loopback\n" . + "fe00::0 ip6-localnet\n" . + "ff00::0 ip6-mcastprefix\n" . + "ff02::1 ip6-allnodes\n" . + "ff02::2 ip6-allrouters\n" . + "ff02::3 ip6-allhosts\n"; + + write_config ($hosts, "$targetdir/etc/hosts"); + + write_config ("$hostname\n", "$targetdir/etc/hostname"); + + syscmd ("/bin/hostname $hostname") if !$opt_testmode; + + # configure interfaces + + my $ifaces = + "auto lo\niface lo inet loopback\n\n" . + "auto vmbr0\niface vmbr0 inet static\n" . + "\taddress $ipaddress\n" . + "\tnetmask $netmask\n" . + "\tgateway $gateway\n" . + "\tbridge_ports eth0\n" . + "\tbridge_stp off\n" . + "\tbridge_fd 0\n"; + + write_config ($ifaces, "$targetdir/etc/network/interfaces"); + + # configure dns + + my $resolfconf = "search $domain\nnameserver $dnsserver\n"; + write_config ($resolfconf, "$targetdir/etc/resolv.conf"); + + # try to use UUID=XXX for boot device + my $boot_uuid = $bootdev; + if (my $uuid = find_dev_by_uuid ($bootdev)) { + $boot_uuid = "UUID=$uuid"; + } + + # configure fstab + + my $fstab = + "# \n" . + "$rootdev / $filesys errors=remount-ro 0 1\n"; + + $fstab .= "$datadev /var/lib/vz $filesys defaults 0 1\n" if $datadev; + + $fstab .= "${boot_uuid} /boot $filesys defaults 0 1\n" if $boot_uuid; + + $fstab .= "$swapfile none swap sw 0 0\n" if $swapfile; + + $fstab .= "proc /proc proc defaults 0 0\n"; + + write_config ($fstab, "$targetdir/etc/fstab"); + write_config ("", "$targetdir/etc/mtab"); + + syscmd ("cp ${proxmox_dir}/policy-disable-rc.d " . + "$targetdir/usr/sbin/policy-rc.d") == 0 || + die "unable to copy policy-rc.d\n"; + syscmd ("cp ${proxmox_dir}/fake-start-stop-daemon " . + "$targetdir/sbin/") == 0 || + die "unable to copy start-stop-daemon\n"; + + diversion_add ($targetdir, "/sbin/start-stop-daemon", "/sbin/fake-start-stop-daemon"); + diversion_add ($targetdir, "/usr/sbin/update-grub", "/bin/true"); + diversion_add ($targetdir, "/usr/sbin/update-initramfs", "/bin/true"); + + syscmd ("touch $targetdir/proxmox_install_mode"); + + debconfig_set ($targetdir, <<_EOD); +locales locales/default_environment_locale select en_US.UTF-8 +locales locales/locales_to_be_generated select en_US.UTF-8 UTF-8 +samba-common samba-common/dhcp boolean false +samba-common samba-common/workgroup string WORKGROUP +postfix postfix/main_mailer_type select Local only +console-data console-data/keymap/policy select Don\'t touch keymap +_EOD + + write_config ("$mailto\n", "$targetdir/root/.forward"); + + my $pkgdir = $opt_testmode ? "packages" : "/proxmox/packages"; + my $pkg_count = 0; + while (<$pkgdir/*.deb>) { $pkg_count++ }; + + $count = 0; + while (<$pkgdir/*.deb>) { + chomp; + my $path = $_; + my ($deb) = $path =~ m/$pkgdir\/(.*\.deb)/; + update_progress ($count/$pkg_count, 0.5, 0.75, "extracting $deb"); + print "extracting: $deb\n"; + syscmd ("cp $path $targetdir/tmp/$deb") == 0 || + die "installation of package $deb failed\n"; + syscmd ("chroot $targetdir dpkg --force-depends --no-triggers --unpack /tmp/$deb") == 0 || + die "installation of package $deb failed\n"; + update_progress ((++$count)/$pkg_count, 0.5, 0.75); + } + + display_html ("extract4-virus.htm"); + + my $cmd = "chroot $targetdir dpkg --force-confold --configure -a"; + $count = 0; + run_command ($cmd, sub { + my $line = shift; + if ($line =~ m/Setting up\s+(\S+)/) { + update_progress ((++$count)/$pkg_count, 0.75, 0.95, + "configuring $1"); + } + }); + + debconfig_set ($targetdir, <<_EOD); +postfix postfix/main_mailer_type select No configuration +_EOD + + unlink "$targetdir/etc/mailname"; + $postfix_main_cf =~ s/__FQDN__/${hostname}.${domain}/; + write_config ($postfix_main_cf, "$targetdir/etc/postfix/main.cf"); + + # make sure we have all postfix directories + syscmd ("chroot $targetdir /usr/sbin/postfix check"); + # cleanup mail queue + syscmd ("chroot $targetdir /usr/sbin/postsuper -d ALL"); + + unlink "$targetdir/proxmox_install_mode"; + + # disable bacula-fd + syscmd ("touch '$targetdir/etc/bacula/do_not_run'"); + + # set timezone + unlink ("$targetdir/etc/localtime"); + symlink ("/usr/share/zoneinfo/$timezone", "$targetdir/etc/localtime"); + write_config ("$timezone\n", "$targetdir/etc/timezone"); + + # set console keymap + if (my $kmapfile = $cmap->{kmap}->{$keymap}->{console}) { + syscmd ("chroot $targetdir /usr/sbin/install-keymap '/usr/share/keymaps/i386/$kmapfile'"); + } + + my $vnckmap = $cmap->{kmap}->{$keymap}->{kvm} || 'en-us'; + write_config ("keyboard: $vnckmap\n", + "$targetdir/etc/pve-installer.cfg"); + + # enable apache port redirect + syscmd ("chroot $targetdir a2ensite pve-redirect.conf"); + + # set apt mirror + if (my $mirror = $cmap->{country}->{$country}->{mirror}) { + my $fn = "$targetdir/etc/apt/sources.list"; + syscmd ("sed -i 's/ftp\\.debian\\.org/$mirror/' '$fn'"); + } + + # save installer settings + my $ucc = uc ($country); + debconfig_set ($targetdir, <<_EOD); +pve-manager pve-manager/country string $ucc +_EOD + + update_progress (0.8, 0.95, 1, "make system bootable"); + + diversion_remove ($targetdir, "/usr/sbin/update-grub"); + diversion_remove ($targetdir, "/usr/sbin/update-initramfs"); + + if (!$opt_testmode && -b $target_hd) { + + unlink ("$targetdir/etc/mtab"); + symlink ("/proc/mounts", "$targetdir/etc/mtab"); + syscmd ("mount -n --bind /dev $targetdir/dev"); + + syscmd ("chroot $targetdir /usr/sbin/update-initramfs -c -k $kapi") == 0 || + die "unable to install initramfs\n"; + + syscmd ("chroot $targetdir /usr/sbin/grub-install --no-floppy '(hd0)'") == 0 || + die "unable to install the boot loader\n"; + + syscmd ("chroot $targetdir /usr/sbin/update-grub") == 0 || + die "unable to install the boot loader\n"; + + syscmd ("umount $targetdir/dev"); + } + + + # cleanup + + # hack: remove dead.letter from sshd installation + syscmd ("rm -rf $targetdir/dead.letter"); + + unlink ("$targetdir/etc/mtab"); + syscmd ("touch $targetdir/etc/mtab"); + + unlink "$targetdir/usr/sbin/policy-rc.d"; + + diversion_remove ($targetdir, "/sbin/start-stop-daemon"); + + # set root password + my $octets = encode("utf-8", $password); + run_command ("chroot $targetdir /usr/sbin/chpasswd", undef, + "root:$octets\n"); + }; + + my $err = $@; + + update_progress (1, 0, 1, ""); + + print $err if $err; + + if ($opt_testmode) { + syscmd ("chroot $targetdir /usr/bin/dpkg-query -W --showformat='\${package}\n'> pve-final.pkglist"); + } + + syscmd ("umount $targetdir/boot"); + syscmd ("umount $targetdir/var/lib/vz"); + syscmd ("umount $targetdir/tmp"); + syscmd ("umount $targetdir/proc"); + syscmd ("umount $targetdir/sys"); + syscmd ("umount -d $targetdir"); + + die $err if $err; +} + +sub display_html { + my ($filename) = @_; + + $htmlview->set_document(undef); + $document->clear; + $htmlview->set_document($document); + + $document->open_stream ("text/html"); + + my $fn = "${proxmox_dir}/html/$filename"; + open (HTML, $fn) || + die "unable to open file '$fn' - $!\n"; + while () { $document->write_stream ($_); } + close (HTML); + + $document->close_stream; +} + +sub set_next { + my ($text, $fctn) = @_; + + $next_fctn = $fctn; + $text = "_Next" if !$text; + $next->set_label ($text); + + $next->grab_focus (); +} + +sub url_requested { + my ($doc, $url, $stream) = @_; + + $stream->set_cancel_func (sub {}); # hack: avoid warning + + my $path = "${proxmox_dir}/html/$url"; + + if (-f $path) { + open (HTMLTMP, $path) || + die "unable to open file '$path' - $! "; + my $buf; + while (my $i = read (HTMLTMP, $buf, 4096)) { + $stream->write ($buf); + Gtk2->main_iteration while Gtk2->events_pending; + } + close (HTMLTMP); + } + + #$stream->close(); # hack: dont close - avoid crash +} + +sub create_main_window { + + $window = Gtk2::Window->new (); + $window->set_default_size (1024, 768); + $window->set_decorated (0) if !$opt_testmode; + + my $vbox = Gtk2::VBox->new (0, 0); + + my $image = Gtk2::Image->new_from_file ("${proxmox_dir}/proxlogo.xpm"); + $vbox->pack_start ($image, 0, 0, 0); + + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 1, 1, 0); + + my $f1 = Gtk2::Frame->new (); + $f1->set_shadow_type ('in'); + $hbox->pack_start ($f1, 1, 1, 0); + + my $sep1 = Gtk2::HSeparator->new; + $vbox->pack_start ($sep1, 0, 0, 0); + + $cmdbox = Gtk2::HBox->new (); + $vbox->pack_start ($cmdbox, 0, 0, 10); + + $next = Gtk2::Button->new ('_Next'); + $next->signal_connect (clicked => sub { &$next_fctn (); }); + $cmdbox->pack_end ($next, 0, 0, 10); + my $abort = Gtk2::Button->new ('_Abort'); + $abort->can_focus (0); + $cmdbox->pack_start ($abort, 0, 0, 10); + $abort->signal_connect (clicked => sub { exit (-1); }); + + my $vbox2 = Gtk2::VBox->new (0, 0); + $f1->add ($vbox2); + + $htmlview = new Gtk2::Html2::View; + # hack: create a separate style - else Gtk2::Html2 modifies + # main window style + my $rcs1 = Gtk2::RcStyle->new; + $htmlview->modify_style ($rcs1); + + $document = new Gtk2::Html2::Document; + $document->signal_connect (request_url => \&url_requested); + + $document->clear; + $htmlview->set_document ($document); + + my $hbox2 = Gtk2::HBox->new (0, 0); + $hbox2->pack_start ($htmlview, 1, 1, 0); + + $vbox2->pack_start ($hbox2, 1, 1, 0); + + my $vbox3 = Gtk2::VBox->new (0, 0); + $vbox2->pack_start ($vbox3, 0, 0, 0); + + my $sep2 = Gtk2::HSeparator->new; + $vbox3->pack_start ($sep2, 0, 0, 0); + + $inbox = Gtk2::HBox->new (0, 0); + $vbox3->pack_start ($inbox, 0, 0, 0); + + $window->add ($vbox); + + $window->show_all; + $window->realize (); +} + +sub cleanup_view { + my $list = $inbox->get_children; + foreach my $c ($list) { + next if !defined ($c); + $inbox->remove ($c); + } +} + +sub check_num { + my ($entry, $event) = @_; + + my $val = $event->keyval; + + if ($val == ord '.') { + $entry->parent->child_focus ('right'); + return 1; + } + + if ($val == $Gtk2::Gdk::Keysyms{ISO_Left_Tab} || + $val == $Gtk2::Gdk::Keysyms{Shift_L} || + $val == $Gtk2::Gdk::Keysyms{Tab} || + $val == $Gtk2::Gdk::Keysyms{BackSpace} || + $val == $Gtk2::Gdk::Keysyms{Delete} || + ($val >= ord '0' && $val <= ord '9') || + ($val >= $Gtk2::Gdk::Keysyms{KP_0} && + $val <= $Gtk2::Gdk::Keysyms{KP_9})) { + return undef; + } + + return 1; +} + +sub check_range { + my ($entry, $event) = @_; + + my $text = $entry->get_text; + if (!defined($text) || ($text !~ m/^(\d+)$/) || ($1 > 255)) { + $entry->set_text ($entry->{default}); + } + + return undef; +} + + +sub creat_text_input { + my ($default, $text) = @_; + + my $hbox = Gtk2::HBox->new (0, 0); + + my $label = Gtk2::Label->new ($text); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox->pack_start ($label, 0, 0, 10); + my $e1 = Gtk2::Entry->new (); + $e1->set_width_chars (30); + $hbox->pack_start ($e1, 0, 0, 0); + $e1->set_text ($default); + + return ($hbox, $e1); +} + +sub creat_ip_input { + my ($init, $default, $text) = @_; + + my (@ips) = split /\./, $init; + my (@defs) = split /\./, $default; + + my $hbox = Gtk2::HBox->new (0, 0); + + my $label = Gtk2::Label->new ($text); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox->pack_start ($label, 0, 0, 10); + + my $e1 = Gtk2::Entry->new_with_max_length (3); + $e1->{default} = $defs[0]; + $hbox->pack_start ($e1, 0, 0, 0); + $e1->set_width_chars (3); + $e1->set_text ($ips[0]); + $e1->signal_connect (key_press_event => \&check_num); + $e1->signal_connect (focus_out_event => \&check_range); + + my $l1 = Gtk2::Label->new ("."); + $hbox->pack_start ($l1, 0, 0, 2); + + my $e2 = Gtk2::Entry->new_with_max_length (3); + $e2->{default} = $defs[1]; + $hbox->pack_start ($e2, 0, 0, 0); + $e2->set_width_chars (3); + $e2->set_text ($ips[1]); + $e2->signal_connect (key_press_event => \&check_num); + $e2->signal_connect (focus_out_event => \&check_range); + + my $l2 = Gtk2::Label->new ("."); + $hbox->pack_start ($l2, 0, 0, 2); + + my $e3 = Gtk2::Entry->new_with_max_length (3); + $e3->{default} = $defs[2]; + $hbox->pack_start ($e3, 0, 0, 0); + $e3->set_width_chars (3); + $e3->set_text ($ips[2]); + $e3->signal_connect (key_press_event => \&check_num); + $e3->signal_connect (focus_out_event => \&check_range); + + my $l3 = Gtk2::Label->new ("."); + $hbox->pack_start ($l3, 0, 0, 2); + + my $e4 = Gtk2::Entry->new_with_max_length (3); + $e4->{default} = $defs[3]; + $hbox->pack_start ($e4, 0, 0, 0); + $e4->set_width_chars (3); + $e4->set_text ($ips[3]); + $e4->signal_connect (key_press_event => \&check_num); + $e4->signal_connect (focus_out_event => \&check_range); + + return ($hbox, $e1, $e2, $e3, $e4); +} + +sub get_ip_config { + + my $ifconfig = `ifconfig eth0`; + + my ($addr) = $ifconfig =~ m/inet addr:(\S*)/m; + my ($mask) = $ifconfig =~ m/Mask:(\S*)/m; + + my $route = `route -n`; + my ($gateway) = $route =~ m/^0\.0\.0\.0\s+(\d+\.\d+\.\d+\.\d+)\s+/m; + + my $resolvconf = `cat /etc/resolv.conf`; + my ($dnsserver) = $resolvconf =~ m/^nameserver\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/m; + + return { + addr => $addr, + mask => $mask, + gateway => $gateway, + dnsserver => $dnsserver, + } +} + +sub display_message { + my ($msg) = @_; + + my $dialog = Gtk2::MessageDialog->new ($window, 'modal', + 'info', 'ok', $msg); + $dialog->run(); + $dialog->destroy(); +} + +sub display_error { + my ($msg) = @_; + + my $dialog = Gtk2::MessageDialog->new ($window, 'modal', + 'error', 'ok', $msg); + $dialog->run(); + $dialog->destroy(); +} + +sub create_ipconf_view { + + cleanup_view (); + display_html ("ipconf.htm"); + + my $vbox = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox, 1, 0, 0); + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 0, 0, 30); + my $vbox2 = Gtk2::VBox->new (0, 0); + $hbox->add ($vbox2); + + my $addr = $ipconf->{addr} || '192.168.100.2'; + my $mask = $ipconf->{mask} || '255.255.255.0'; + + my ($hostbox, $hostentry) = + creat_text_input ('proxmox.domain.tld', 'Hostname (FQDN):'); + $vbox2->pack_start ($hostbox, 0, 0, 2); + + my $ipbox; + ($ipbox, $ip_1, $ip_2, $ip_3, $ip_4) = + creat_ip_input ($addr, '0.0.0.0', 'IP Address:'); + $vbox2->pack_start ($ipbox, 0, 0, 2); + + my $maskbox; + ($maskbox, $mask_1, $mask_2, $mask_3, $mask_4) = + creat_ip_input ($mask, '255.255.255.0', 'Netmask:'); + $vbox2->pack_start ($maskbox, 0, 0, 2); + + $gateway = $ipconf->{gateway} || '192.168.100.1'; + + my $gwbox; + ($gwbox, $gw_1, $gw_2, $gw_3, $gw_4) = + creat_ip_input ($gateway, '0.0.0.0', 'Gateway:'); + + $vbox2->pack_start ($gwbox, 0, 0, 15); + + $dnsserver = $ipconf->{dnsserver} || $gateway; + + my $dnsbox; + ($dnsbox, $dns_1, $dns_2, $dns_3, $dns_4) = + creat_ip_input ($dnsserver, '0.0.0.0', 'DNS Server:'); + + $vbox2->pack_start ($dnsbox, 0, 0, 0); + + $inbox->show_all; + set_next (undef, sub { + my $text = $hostentry->get_text(); + + $text =~ s/^\s+//; + $text =~ s/\s+$//; + + if ($text && $text =~ m/^[\w\-]+(\.[\w\-]+)+$/ && $text !~ m/.domain.tld$/ && + $text =~ m/^([^\.]+)\.(\S+)$/) { + $hostname = $1; + $domain = $2; + create_extract_view (); + return; + } + display_message ("Hostname does not look like a fully qualified domain name."); + $hostentry->grab_focus(); + }); + + $hostentry->grab_focus(); +} + +sub get_device_desc { + my ($devname, $size, $model) = @_; + + if ($size && ($size > 0) && $model) { + $size = int($size/2048); # size in MB + + if ($size >= 1024) { + $size = int($size/1024); # size in GB + return "$devname (${size}GB, $model)"; + } else { + return "$devname (${size}MB, $model)"; + } + + } else { + return $devname; + } +} + +sub update_layout { + my ($cb, $kmap) = @_; + + my $ind; + my $def; + my $i = 0; + my $kmaphash = $cmap->{kmaphash}; + foreach my $layout (sort keys %$kmaphash) { + $def = $i if $kmaphash->{$layout} eq 'en-us'; + $ind = $i if $kmap && $kmaphash->{$layout} eq $kmap; + $i++; + } + + $cb->set_active ($ind || $def || 0); +} + +my $lastzonecb; +sub update_zonelist { + my ($box, $cc) = @_; + + my $cczones = $cmap->{cczones}; + my $zones = $cmap->{zones}; + + my $sel; + if ($lastzonecb) { + $sel = $lastzonecb->get_active_text(); + $box->remove ($lastzonecb); + } else { + $sel = $timezone; # used once to select default + } + + my $cb = $lastzonecb = Gtk2::ComboBox->new_text (); + $cb->set_size_request (200, -1); + + $cb->signal_connect ('changed' => sub { + $timezone = $cb->get_active_text(); + }); + + my @za; + if ($cc && defined ($cczones->{$cc})) { + @za = keys %{$cczones->{$cc}}; + } else { + @za = keys %$zones; + } + my $ind; + my $i = 0; + foreach my $zone (sort @za) { + $ind = $i if $sel && $zone eq $sel; + $cb->append_text ($zone); + $i++; + } + + $cb->set_active ($ind || 0); + + $cb->show; + $box->pack_start ($cb, 0, 0, 0); +} + +sub create_password_view { + + cleanup_view (); + + my $vbox2 = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox2, 1, 0, 0); + my $vbox = Gtk2::VBox->new (0, 0); + $vbox2->pack_start ($vbox, 0, 0, 30); + + my $hbox1 = Gtk2::HBox->new (0, 0); + my $label = Gtk2::Label->new ("Password"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox1->pack_start ($label, 0, 0, 10); + my $pwe1 = Gtk2::Entry->new (); + $pwe1->set_visibility (0); + $pwe1->set_size_request (200, -1); + $hbox1->pack_start ($pwe1, 0, 0, 0); + + my $hbox2 = Gtk2::HBox->new (0, 0); + $label = Gtk2::Label->new ("Confirm"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox2->pack_start ($label, 0, 0, 10); + my $pwe2 = Gtk2::Entry->new (); + $pwe2->set_visibility (0); + $pwe2->set_size_request (200, -1); + $hbox2->pack_start ($pwe2, 0, 0, 0); + + my $hbox3 = Gtk2::HBox->new (0, 0); + $label = Gtk2::Label->new ("E-Mail"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox3->pack_start ($label, 0, 0, 10); + my $eme = Gtk2::Entry->new (); + $eme->set_size_request (200, -1); + $hbox3->pack_start ($eme, 0, 0, 0); + + + $vbox->pack_start ($hbox1, 0, 0, 5); + $vbox->pack_start ($hbox2, 0, 0, 5); + $vbox->pack_start ($hbox3, 0, 0, 15); + + $inbox->show_all; + + display_html ("passwd.htm"); + + set_next (undef, sub { + + my $t1 = $pwe1->get_text; + my $t2 = $pwe2->get_text; + + if (length ($t1) < 5) { + display_message ("Password is too short."); + $pwe1->grab_focus(); + return; + } + + if ($t1 ne $t2) { + display_message ("Password does not match."); + $pwe1->grab_focus(); + return; + } + + my $t3 = $eme->get_text; + if ($t3 !~ m/^\S+\@\S+\.\S+$/) { + display_message ("E-Mail does not look like a vaild address" . + " (user\@domain.tld)"); + $eme->grab_focus(); + return; + + } + + $password = $t1; + $mailto = $t3; + + create_ipconf_view(); + }); + + $pwe1->grab_focus(); + +} + +sub create_country_view { + + cleanup_view (); + + my $countryhash = $cmap->{countryhash}; + my $ctr = $cmap->{country}; + + my $vbox2 = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox2, 1, 0, 0); + my $vbox = Gtk2::VBox->new (0, 0); + $vbox2->pack_start ($vbox, 0, 0, 30); + + my $w = Gtk2::Entry->new (); + $w->set_size_request (200, -1); + + my $c = Gtk2::EntryCompletion->new (); + $c->set_text_column (0); + $c->set_minimum_key_length(0); + $c->set_popup_set_width (1); + + my $hbox2 = Gtk2::HBox->new (0, 0); + my $label = Gtk2::Label->new ("Time zone"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox2->pack_start ($label, 0, 0, 10); + update_zonelist ($hbox2); + + my $hbox3 = Gtk2::HBox->new (0, 0); + $label = Gtk2::Label->new ("Keyboard Layout"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox3->pack_start ($label, 0, 0, 10); + + my $kmapcb = Gtk2::ComboBox->new_text (); + $kmapcb->set_size_request (200, -1); + foreach my $layout (sort keys %{$cmap->{kmaphash}}) { + $kmapcb->append_text ($layout); + } + + update_layout ($kmapcb); + $hbox3->pack_start ($kmapcb, 0, 0, 0); + + $kmapcb->signal_connect ('changed' => sub { + my $sel = $kmapcb->get_active_text(); + if (my $kmap = $cmap->{kmaphash}->{$sel}) { + my $xkmap = $cmap->{kmap}->{$kmap}->{x11}; + my $xvar = $cmap->{kmap}->{$kmap}->{x11var}; + syscmd ("setxkbmap $xkmap $xvar") if !$opt_testmode; + $keymap = $kmap; + } + }); + + $w->signal_connect ('changed' => sub { + my ($entry, $event) = @_; + my $text = $entry->get_text; + + if (my $cc = $countryhash->{lc($text)}) { + update_zonelist ($hbox2, $cc); + my $kmap = $ctr->{$cc}->{kmap} || 'en-us'; + update_layout ($kmapcb, $kmap); + } + }); + + $w->signal_connect (key_press_event => sub { + my ($entry, $event) = @_; + my $text = $entry->get_text; + + my $val = $event->keyval; + if ($val == $Gtk2::Gdk::Keysyms{Tab}) { + my $cc = $countryhash->{lc($text)}; + return undef if $cc; + my $found = 0; + my $compl; + foreach my $cc (keys %$ctr) { + my $ct = $ctr->{$cc}->{name}; + if ($ct =~ m/^\Q$text\E.*$/i) { + $found++; + $compl = $ct; + } + last if $found > 1; + } + if ($found == 1) { + $entry->set_text ($compl); + return undef; + } else { + Gtk2::Gdk->beep(); + } + + $w->insert_text('', -1); # popup selection + return 1; + } + + return undef; + }); + + my $ls = Gtk2::ListStore->new('Glib::String'); + foreach my $cc (sort {$ctr->{$a}->{name} cmp $ctr->{$b}->{name} } keys %$ctr) { + my $iter = $ls->append(); + $ls->set ($iter, 0, $ctr->{$cc}->{name}); + } + $c->set_model ($ls); + + $w->set_completion ($c); + + my $hbox = Gtk2::HBox->new (0, 0); + + $label = Gtk2::Label->new ("Country"); + $label->set_alignment (1, 0.5); + $label->set_size_request (150, -1); + $hbox->pack_start ($label, 0, 0, 10); + $hbox->pack_start ($w, 0, 0, 0); + + $vbox->pack_start ($hbox, 0, 0, 5); + $vbox->pack_start ($hbox2, 0, 0, 5); + $vbox->pack_start ($hbox3, 0, 0, 5); + + if ($country) { + $w->set_text ($ctr->{$country}->{name}); + } + + $inbox->show_all; + + display_html ("country.htm"); + set_next (undef, sub { + + my $text = $w->get_text; + + if (my $cc = $countryhash->{lc($text)}) { + $country = $cc; + create_password_view(); + return; + } else { + display_message ("Please select a country first."); + $w->grab_focus(); + } + }); + + $w->grab_focus(); +} + +sub create_hdsel_view { + + cleanup_view (); + + my $vbox = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox, 1, 0, 0); + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 0, 0, 30); + + my ($disk, $devname, $size, $model) = @{@$hds[0]}; + $target_hd = $devname; + $master_hd = find_master ($target_hd); + my $label; + + if (scalar (@$hds) == 1) { + my $devdesc = get_device_desc ($devname, $size, $model); + $label = Gtk2::Label->new ("Target Harddisk: $devdesc"); + $hbox->pack_start ($label, 0, 0, 0); + } else { + $label = Gtk2::Label->new ("Target Harddisks: "); + $hbox->pack_start ($label, 0, 0, 0); + + my $combo = Gtk2::ComboBox->new_text (); + + foreach my $hd (@$hds) { + ($disk, $devname, $size, $model) = @$hd; + $combo->append_text (get_device_desc ($devname, $size, $model)); + } + + $combo->set_active (0); + $combo->signal_connect (changed => sub { + $a = shift->get_active; + my ($disk, $devname) = @{@$hds[$a]}; + $target_hd = $devname; + $master_hd = find_master ($target_hd); + }); + + $hbox->pack_start ($combo, 0, 0, 0); + } + + $inbox->show_all; + + display_html ("page1.htm"); + set_next (undef, \&create_country_view); +} + +sub create_extract_view { + + $ipaddress = $ip_1->get_text . "." . $ip_2->get_text . "." . + $ip_3->get_text . "." . $ip_4->get_text; + + $netmask = $mask_1->get_text . "." . $mask_2->get_text . "." . + $mask_3->get_text . "." . $mask_4->get_text; + + $gateway = $gw_1->get_text . "." . $gw_2->get_text . "." . + $gw_3->get_text . "." . $gw_4->get_text; + + $dnsserver = $dns_1->get_text . "." . $dns_2->get_text . "." . + $dns_3->get_text . "." . $dns_4->get_text; + + # print "TEST $ipaddress $netmask $gateway $dnsserver\n"; + cleanup_view (); + + display_html ("extract1-license.htm"); + $next->set_sensitive (0); + + my $vbox = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox, 1, 0, 0); + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 0, 0, 30); + + my $vbox2 = Gtk2::VBox->new (0, 0); + $hbox->pack_start ($vbox2, 0, 0, 0); + + $progress_status = Gtk2::Label->new (); + $vbox2->pack_start ($progress_status, 1, 1, 0); + + $progress = Gtk2::ProgressBar->new; + $progress->set_size_request (400, -1); + + $vbox2->pack_start ($progress, 0, 0, 0); + + $inbox->show_all; + + my $tdir = $opt_testmode ? "target" : "/target"; + mkdir $tdir; + my $base = $opt_testmode ? "/pve/$release/install/pve-base.tar" : "/proxmox/pve-base.tar"; + + eval { extract_data ($base, $tdir); }; + my $err = $@; + + $next->set_sensitive (1); + + set_next ("_Reboot", sub { exit (0); } ); + + display_html ($err ? "fail.htm" : "success.htm"); + + display_error ($err) if $err; +} + +sub mupdate_progress { + my $per = shift; + print "GOT1: $per\n"; + +} + +sub create_intro_view { + + cleanup_view (); + + display_html ("license.htm"); + + set_next ("I a_gree", \&create_hdsel_view); +} + +$ipconf = get_ip_config (); + +$country = detect_country () if $ipconf->{addr}; + +# read country, kmap and timezone infos +$cmap = read_cmap (); + +create_main_window (); + +if (!defined ($hds) || (scalar (@$hds) <= 0)) { + print "no hardisks found\n"; + display_html ("nohds.htm"); + set_next ("Reboot", sub { exit (0); } ); +} else { + + foreach my $hd (@$hds) { + my ($disk, $devname) = @$hd; + next if $devname =~ m|^/dev/md\d+$|; + print "found Disk$disk N:$devname\n"; + } + + create_intro_view (); +} + +Gtk2->main; + +exit 0; diff --git a/proxlogo.xpm b/proxlogo.xpm new file mode 100755 index 0000000..6af30bc --- /dev/null +++ b/proxlogo.xpm @@ -0,0 +1,680 @@ +/* XPM */ +static char * proxlogo_xpm[] = { +"1024 75 602 2", +" c None", +". c #E9E9E9", +"+ c #E8E8E8", +"@ c #E7E7E7", +"# c #E6E6E6", +"$ c #E5E5E5", +"% c #E4E4E4", +"& c #E3E3E3", +"* c #E2E2E2", +"= c #E1E1E1", +"- c #E0E0E0", +"; c #DFDFDF", +"> c #DEDEDE", +", c #DDDDDD", +"' c #DCDCDC", +") c #DBDBDB", +"! c #DADADA", +"~ c #D9D9D9", +"{ c #D7D7D7", +"] c #D8D8D8", +"^ c #D6D6D6", +"/ c #D5D5D5", +"( c #D4D4D4", +"_ c #D2D2D2", +": c #D3D3D3", +"< c #D0D0D0", +"[ c #D1D1D1", +"} c #CFCFCF", +"| c #CECECE", +"1 c #CDCDCD", +"2 c #CCCCCC", +"3 c #CBCBCB", +"4 c #CACACA", +"5 c #C8C8C8", +"6 c #C7C7C7", +"7 c #C5C5C5", +"8 c #C6C6C6", +"9 c #C4C4C4", +"0 c #C3C3C3", +"a c #C2C2C2", +"b c #C1C1C1", +"c c #BFBFBF", +"d c #BEBEBE", +"e c #BDBDBD", +"f c #BCBCBC", +"g c #BBBBBB", +"h c #BABABA", +"i c #B9B9B9", +"j c #B8B8B8", +"k c #B7B7B7", +"l c #B6B6B6", +"m c #B5B5B5", +"n c #B4B4B4", +"o c #B2B2B2", +"p c #B3B3B3", +"q c #B1B1B1", +"r c #AFAFAF", +"s c #B0B0B0", +"t c #AEAEAE", +"u c #ADADAD", +"v c #ACACAC", +"w c #AAAAAA", +"x c #ABABAB", +"y c #A9A9A9", +"z c #A8A8A8", +"A c #A7A7A7", +"B c #A6A6A6", +"C c #A5A5A5", +"D c #A4A4A4", +"E c #A3A3A3", +"F c #A2A2A2", +"G c #A1A1A1", +"H c #A0A0A0", +"I c #9F9F9F", +"J c #9E9E9E", +"K c #9D9D9D", +"L c #9C9C9C", +"M c #9B9B9B", +"N c #9A9A9A", +"O c #999999", +"P c #989898", +"Q c #979797", +"R c #969696", +"S c #949494", +"T c #959595", +"U c #939393", +"V c #929292", +"W c #919191", +"X c #909090", +"Y c #8F8F8F", +"Z c #8E8E8E", +"` c #8C8C8C", +" . c #8B8B8B", +".. c #8A8A8A", +"+. c #898989", +"@. c #878787", +"#. c #888888", +"$. c #868686", +"%. c #858585", +"&. c #848484", +"*. c #838383", +"=. c #828282", +"-. c #818181", +";. c #808080", +">. c #7E7E7E", +",. c #7D7D7D", +"'. c #7B7B7B", +"). c #7A7A7A", +"!. c #797979", +"~. c #787878", +"{. c #767676", +"]. c #757575", +"^. c #737373", +"/. c #727272", +"(. c #717171", +"_. c #707070", +":. c #6F6F6F", +"<. c #6D6D6D", +"[. c #6C6C6C", +"}. c #6B6B6B", +"|. c #6A6A6A", +"1. c #696969", +"2. c #686868", +"3. c #676767", +"4. c #666666", +"5. c #656565", +"6. c #646464", +"7. c #626262", +"8. c #616161", +"9. c #606060", +"0. c #5F5F5F", +"a. c #5E5E5E", +"b. c #5D5D5D", +"c. c #5B5B5B", +"d. c #5A5A5A", +"e. c #595959", +"f. c #585858", +"g. c #575757", +"h. c #555555", +"i. c #545454", +"j. c #535353", +"k. c #525252", +"l. c #515151", +"m. c #4F4F4F", +"n. c #4E4E4E", +"o. c #4C4C4C", +"p. c #4B4B4B", +"q. c #484848", +"r. c #474747", +"s. c #464646", +"t. c #444444", +"u. c #424242", +"v. c #414141", +"w. c #404040", +"x. c #3F3F3F", +"y. c #3E3E3E", +"z. c #3D3D3D", +"A. c #3C3C3C", +"B. c #3B3B3B", +"C. c #3A3A3A", +"D. c #383838", +"E. c #393939", +"F. c #373737", +"G. c #363636", +"H. c #353535", +"I. c #333333", +"J. c #323232", +"K. c #2F2F2F", +"L. c #2E2E2E", +"M. c #2D2D2D", +"N. c #2B2B2B", +"O. c #292929", +"P. c #2A2A2A", +"Q. c #282828", +"R. c #262626", +"S. c #252525", +"T. c #242424", +"U. c #222222", +"V. c #212121", +"W. c #202020", +"X. c #1E1E1E", +"Y. c #1D1D1D", +"Z. c #1C1C1C", +"`. c #1B1B1B", +" + c #1A1A1A", +".+ c #181818", +"++ c #161616", +"@+ c #151515", +"#+ c #141414", +"$+ c #121212", +"%+ c #101010", +"&+ c #0F0F0F", +"*+ c #0E0E0E", +"=+ c #0B0B0B", +"-+ c #0A0A0A", +";+ c #080808", +">+ c #090909", +",+ c #060606", +"'+ c #050505", +")+ c #030303", +"!+ c #000000", +"~+ c #0D0D0D", +"{+ c #171717", +"]+ c #191919", +"^+ c #1F1F1F", +"/+ c #232323", +"(+ c #272727", +"_+ c #2C2C2C", +":+ c #303030", +"<+ c #313131", +"[+ c #343434", +"}+ c #4E4E4F", +"|+ c #6C6C6B", +"1+ c #6C6C6D", +"2+ c #6D6D6E", +"3+ c #6E6E6E", +"4+ c #636363", +"5+ c #5A5A5B", +"6+ c #EAEAEA", +"7+ c #EBEBEB", +"8+ c #C9C9C9", +"9+ c #C0C0C0", +"0+ c #8D8D8D", +"a+ c #7F7F7F", +"b+ c #7C7C7C", +"c+ c #777777", +"d+ c #747474", +"e+ c #5C5C5C", +"f+ c #565656", +"g+ c #505050", +"h+ c #4D4D4D", +"i+ c #4A4A4A", +"j+ c #494949", +"k+ c #454545", +"l+ c #434343", +"m+ c #131313", +"n+ c #111111", +"o+ c #0C0C0C", +"p+ c #070707", +"q+ c #040404", +"r+ c #020202", +"s+ c #010101", +"t+ c #6B6B6C", +"u+ c #525253", +"v+ c #ECECEC", +"w+ c #EDEDED", +"x+ c #EFEFEF", +"y+ c #EEEEEE", +"z+ c #464647", +"A+ c #6F6F70", +"B+ c #F1F1F1", +"C+ c #F0F0F0", +"D+ c #434344", +"E+ c #535354", +"F+ c #545455", +"G+ c #F4F4F4", +"H+ c #F3F3F3", +"I+ c #F2F2F2", +"J+ c #444445", +"K+ c #616162", +"L+ c #505051", +"M+ c #F7F7F7", +"N+ c #F6F6F6", +"O+ c #F5F5F5", +"P+ c #383837", +"Q+ c #565657", +"R+ c #F9F9F9", +"S+ c #F8F8F8", +"T+ c #FAFAFA", +"U+ c #474746", +"V+ c #FBFBFB", +"W+ c #FCFCFC", +"X+ c #707071", +"Y+ c #FDFDFD", +"Z+ c #FEFEFE", +"`+ c #717170", +" @ c #6D6D6C", +".@ c #676766", +"+@ c #4A4A4B", +"@@ c #CECDCC", +"#@ c #CEB59D", +"$@ c #CDA276", +"%@ c #CD9F71", +"&@ c #CDAC8C", +"*@ c #CCC8C4", +"=@ c #C6B39F", +"-@ c #C79E74", +";@ c #C8996B", +">@ c #C6A37F", +",@ c #C4BCB4", +"'@ c #A2A1A0", +")@ c #AB947E", +"!@ c #B3885D", +"~@ c #B48658", +"{@ c #AE8D6B", +"]@ c #A19C96", +"^@ c #A1907E", +"/@ c #AD845B", +"(@ c #AF7F51", +"_@ c #AB8661", +":@ c #9C938A", +"<@ c #4F4F50", +"[@ c #717172", +"}@ c #CEB194", +"|@ c #CC741D", +"1@ c #CC6600", +"2@ c #CC6C0C", +"3@ c #CA9F73", +"4@ c #C6B3A0", +"5@ c #CA7B2B", +"6@ c #CB6804", +"7@ c #C78F57", +"8@ c #C2BFBC", +"9@ c #AD937C", +"0@ c #C46F1A", +"a@ c #C96807", +"b@ c #B48454", +"c@ c #A09F9F", +"d@ c #A19283", +"e@ c #BF7226", +"f@ c #CB6602", +"g@ c #B6783C", +"h@ c #98938E", +"i@ c #4D4D4E", +"j@ c #CDC8C3", +"k@ c #CC6F13", +"l@ c #CA9157", +"m@ c #C6AD94", +"n@ c #CB6A09", +"o@ c #C59F79", +"p@ c #A4A19F", +"q@ c #C66D14", +"r@ c #BA7B3C", +"s@ c #9D9C9C", +"t@ c #A18E7A", +"u@ c #C8690B", +"v@ c #AC8052", +"w@ c #CCB6A0", +"x@ c #CB6B0B", +"y@ c #CA9560", +"z@ c #C5B3A1", +"A@ c #C78B4F", +"B@ c #A79685", +"C@ c #C86A0D", +"D@ c #B87C40", +"E@ c #9F9082", +"F@ c #C76A0C", +"G@ c #B87734", +"H@ c #949393", +"I@ c #CCB197", +"J@ c #C99E74", +"K@ c #C4B7AA", +"L@ c #CB7015", +"M@ c #C78541", +"N@ c #C0BFBE", +"O@ c #A9937D", +"P@ c #CA6806", +"Q@ c #B38250", +"R@ c #9E958C", +"S@ c #C46D15", +"T@ c #BC732A", +"U@ c #959290", +"V@ c #6E6E6D", +"W@ c #CBA682", +"X@ c #CB6702", +"Y@ c #CB6600", +"Z@ c #C9A47F", +"`@ c #C3BAB2", +" # c #CA731B", +".# c #C97E31", +"+# c #C0BDBB", +"@# c #AC8E70", +"## c #CA6703", +"$# c #AF855B", +"%# c #9C9690", +"&# c #C36F1B", +"*# c #C07020", +"=# c #97938F", +"-# c #727273", +";# c #C99F75", +"># c #C6AA8E", +",# c #C2BDB8", +"'# c #C97929", +")# c #C87826", +"!# c #BFB9B3", +"~# c #AE8965", +"{# c #CB6601", +"]# c #AB8866", +"^# c #999694", +"/# c #BE7327", +"(# c #C36D17", +"_# c #988F87", +":# c #636364", +"<# c #656566", +"[# c #3F3F40", +"}# c #C9935D", +"|# c #CB6907", +"1# c #C4AE98", +"2# c #C3C0BE", +"3# c #CA721A", +"4# c #C0B7AF", +"5# c #B18255", +"6# c #A58A70", +"7# c #989796", +"8# c #BB752F", +"9# c #C56B10", +"0# c #988D82", +"a# c #656564", +"b# c #3C3C3B", +"c# c #666667", +"d# c #C98D51", +"e# c #CB6D0F", +"f# c #C98239", +"g# c #CA6E13", +"h# c #C0B1A3", +"i# c #B57F49", +"j# c #C86909", +"k# c #9D8B79", +"l# c #484847", +"m# c #737372", +"n# c #747473", +"o# c #4B4B4A", +"p# c #C1C0BF", +"q# c #C9823B", +"r# c #BEAC9A", +"s# c #9A9999", +"t# c #BA7838", +"u# c #C96705", +"v# c #9E8872", +"w# c #6F6F6E", +"x# c #CB6906", +"y# c #C0A58B", +"z# c #9A9998", +"A# c #BD752E", +"B# c #A48566", +"C# c #737374", +"D# c #C97521", +"E# c #BFA081", +"F# c #9A9692", +"G# c #A8835F", +"H# c #50504F", +"I# c #BEB3A9", +"J# c #C9721A", +"K# c #C0966C", +"L# c #9A938D", +"M# c #C26E1A", +"N# c #AD7D4D", +"O# c #6E6E6F", +"P# c #69696A", +"Q# c #C19A74", +"R# c #C77727", +"S# c #B8B7B7", +"T# c #A68565", +"U# c #C26C16", +"V# c #92908E", +"W# c #BDA894", +"X# c #CA6A0A", +"Y# c #C2864A", +"Z# c #9C8D7E", +"`# c #C7690C", +" $ c #B67533", +".$ c #8F8E8E", +"+$ c #585857", +"@$ c #BAAC9E", +"#$ c #CA6C0F", +"$$ c #BF8F5F", +"%$ c #C56A10", +"&$ c #AF7842", +"*$ c #3E3E3F", +"=$ c #B9AFA5", +"-$ c #C87119", +";$ c #BD9469", +">$ c #96908A", +",$ c #C16D19", +"'$ c #AB7B4B", +")$ c #4B4B4C", +"!$ c #B7B1AB", +"~$ c #C87420", +"{$ c #B8997A", +"]$ c #95918D", +"^$ c #BF6F1F", +"/$ c #A37E5A", +"($ c #B4B1AE", +"_$ c #C57A2E", +":$ c #C87018", +"<$ c #C0854A", +"[$ c #B69A80", +"}$ c #91908F", +"|$ c #BA722C", +"1$ c #C56A0F", +"2$ c #AE7741", +"3$ c #9D7D5F", +"4$ c #70706F", +"5$ c #B1B0AF", +"6$ c #C47D36", +"7$ c #C96D11", +"8$ c #B3A496", +"9$ c #AFAEAE", +"0$ c #C08448", +"a$ c #B09E8C", +"b$ c #908F8F", +"c$ c #B67534", +"d$ c #C86808", +"e$ c #978573", +"f$ c #AD7741", +"g$ c #96806A", +"h$ c #B3A18F", +"i$ c #ACABAA", +"j$ c #C37B34", +"k$ c #C86C11", +"l$ c #AE9F92", +"m$ c #AF7943", +"n$ c #99836D", +"o$ c #8B8A8A", +"p$ c #B37332", +"q$ c #C76808", +"r$ c #93816F", +"s$ c #BE8852", +"t$ c #B4997F", +"u$ c #AAA7A4", +"v$ c #C2782B", +"w$ c #C66F17", +"x$ c #ABA29A", +"y$ c #A97A4C", +"z$ c #9D7E5F", +"A$ c #898887", +"B$ c #B77029", +"C$ c #C4690E", +"D$ c #8C8176", +"E$ c #626261", +"F$ c #B98F65", +"G$ c #B39475", +"H$ c #A9A39D", +"I$ c #C5711D", +"J$ c #C37321", +"K$ c #A8A29C", +"L$ c #A17C57", +"M$ c #898581", +"N$ c #BD6D1D", +"O$ c #C06A14", +"P$ c #887F77", +"Q$ c #B6916D", +"R$ c #B68C62", +"S$ c #AA9F94", +"T$ c #C1762A", +"U$ c #9E8062", +"V$ c #CA6603", +"W$ c #A87848", +"X$ c #89827B", +"Y$ c #BF6B17", +"Z$ c #BB6B1B", +"`$ c #837F7B", +" % c #AAA5A0", +".% c #C86B0F", +"+% c #B68A5E", +"@% c #A89A8C", +"#% c #B18A63", +"$% c #8B8886", +"%% c #C36A11", +"&% c #A97643", +"*% c #8A7F74", +"=% c #BF6A15", +"-% c #A27345", +";% c #AC9D8E", +">% c #C07830", +",% c #C4721F", +"'% c #AF9478", +")% c #A59C93", +"!% c #BB7C3E", +"~% c #CA6705", +"{% c #C66C12", +"]% c #B08963", +"^% c #908377", +"/% c #B5702C", +"(% c #CA6602", +"_% c #C06B16", +":% c #9A7B5C", +"<% c #867F78", +"[% c #AB7136", +"}% c #C4680C", +"|% c #9E744A", +"1% c #7E7D7D", +"2% c #A89F97", +"3% c #AF947A", +"4% c #B09375", +"5% c #A99C8E", +"6% c #A29D97", +"7% c #AA9078", +"8% c #AC8E6E", +"9% c #A69482", +"0% c #9E9D9D", +"a% c #8A837C", +"b% c #977E64", +"c% c #9B7C5E", +"d% c #8F8070", +"e% c #827E7A", +"f% c #907860", +"g% c #957757", +"h% c #8D7A67", +"i% c #7F7E7D", +"j% c #4E4E4D", +"k% c #424243", +". + + + @ @ + . . . . + + @ # # @ @ @ @ @ # # # $ # % $ $ $ % % % & & % % * & & * * * = = = - = - - ; ; > , , , , > ' ) ) ' ) ) ! ! ! ! ~ ~ { { ] ^ ^ / / ^ ^ / ( ( ( _ : _ _ _ _ < [ < < } | 1 | | | 2 2 2 2 3 3 4 4 4 5 5 5 6 6 6 7 8 7 7 9 7 0 a 0 a a a a b b c c c d d d d e f f f g g h i h i j k j k k l l l m m n n o o o p o q q r s t r u t t v u v v w x w w w w y z z A z A B B C C D D E D E F F G H I H I H J K J L K M L M M M N N O P P P Q Q R R R S T S U U S V V V W X Y Y Y X Z Z Z ` ` ` . . .....+.+.@.@.@.#.@.$.$.%.%.&.&.*.*.*.=.-.-.-.;.;.;.;.>.>.,.,.,.'.).!.!.~.{.{.].^.^././.(._.:.<.[.[.}.|.1.2.3.3.4.5.5.6.7.8.8.9.0.a.a.b.c.d.e.e.f.f.g.h.h.i.j.k.k.l.m.n.o.o.o.p.p.q.r.r.r.s.t.t.u.v.v.w.w.x.y.z.A.B.C.D.E.F.G.G.H.I.I.I.J.K.K.L.M.M.M.N.O.P.O.Q.R.S.R.T.U.U.U.V.W.W.X.Y.Z.Z.`. + +.+++++++@+#+$+%+%+%+&+*+*+=+-+-+-+;+>+;+,+'+'+)+)+)+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.s.}+k.b.1.}.}.}.}.}.}.|+|+|+8.8.8.1+[.[.[.|.9.h.h.0.|.<.<.2+<.<.<.<.3+3+3+3+3+3+3+3+3+:.:.3+:.:.:.:.<.4+f.g.8.<.:._._._._._.(.(.(.(.(.(.(.(.(.(././.(.(.:.5.5+f.j.m.n.n.n.n.m.m.m.m.m.m.m.", +"6+. 7+7+6+6+. 6+6+6+6+6+6+. . . . . . . . . . . @ + @ + @ + @ @ # $ $ $ $ $ $ $ % % & % % * & * = = = = - ; > > > ; , , , > , ' ' ) ' ) ) ! ~ ~ ! { { ^ ^ { { ^ / ^ ^ : ( : : : : [ _ _ [ < } | } } } 1 1 | 1 2 2 3 3 3 8+8+8+5 5 5 8 6 8 8 7 8 9 0 9 0 0 0 0 a a 9+9+9+c d c c d e e e f f g h g h i j i j j k k k l l m m p p p p p o o s q r s t u r u t u u x v x y x w w y y z A z A A B B C C D E D E E F G H G H I I J I K J L K L N L M M N O O O P R Q Q Q T R T S S S U U U V W X X Z X Y Y Y 0+0+0+` ..` . .....#.#.#.@.#.@.@.$.$.%.%.&.*.&.*.=.=.=.-.-.a+;.a+a+>.>.>.b+'.).!.!.c+c+{.d+d+^.^./.(._.3+<.<.[.}.|.1.2.2.3.4.5.5.4+7.7.8.9.0.0.a.e+c.d.d.e.e.f.f+f+h.i.j.j.k.g+m.h+h+h+o.i+j+q.q.q.r.k+l+l+u.u.v.v.w.z.y.z.A.B.E.C.D.F.F.G.[+[+[+I.:+:+K.L.L.L._+P.N.P.O.(+R.S.S./+/+/+U.V.^+^+X.Y.Y.Z.`.]+]+{+{+{+++@+m+n+n+n+%+~+&+o+=+=+=+>+;+>+p+,+,+q+q+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.s.m.j.b.2.}.t+}.}.}.[.[.[.[.8.8.8.1+<.<.[.|.0.h.h.a.|.[.[.[.[.[.[.<.<.<.<.<.3+<.<.<.<.3+3+3+3+3+3+3+[.7.f.g.7.<.:._._._._._.(.(.(.(.(.(.(.(.(.(././.(.(.:.5.c.f.u+n.n.n.n.n.m.m.m.m.m.m.m.", +"v+7+w+w+v+v+7+v+v+v+v+v+v+7+7+7+v+v+v+7+v+v+7+7+6+7+. 6+. . + . + @ @ @ @ # @ @ # # $ $ $ & % & & & * & = = - - ; - > > > ; ; > > , , ' ' ) ! ! ) ~ ~ ] ] ] ] { ^ { { / / / ( ( : _ : : _ _ < < < < } | | } | 1 1 2 2 3 4 4 3 8+4 8+5 5 8 8 8 6 7 7 7 7 9 0 0 0 0 b b b 9+c 9+c c d d d e e f g g g h i h i i j j k k k l l n n n n p p p q o s q r t r t r t t v u v w x x x w w y z z B z A A B B C D D D D E F G G G H J I H J J K K K M L L M M O N O O Q Q P Q R R R T T S U S U U W W W Y X Y X Y Z Z 0+0+ .` .` ...+.#.+.#.#.#.@.@.$.$.%.%.=.&.&.=.*.=.=.-.;.;.a+;.>.a+,.,.b+'.).!.~.~.{.].].d+^.^./._.:.3+3+[.[.}.1.1.1.2.3.4.5.4+4+7.7.8.9.0.a.b.c.c.c.d.e.f.g.f+f+h.i.j.k.l.g+n.o.n.h+p.i+j+j+q.q.k+t.t.l+l+w.u.w.y.x.y.z.A.C.C.D.D.F.F.H.H.[+I.<+:+:+K.K.L.M.N.N.N.P.(+R.R.R.T.T./+U.V.W.W.^+X.Y.Z.`. + +.+.+{+++@+#+$+%+$+n+*+&+~+o+-+o+>+>+>+;+p+,+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.s.m.j.b.3.}.t+}.}.}.[.[.[.[.8.8.8.[.[.<.[.|.0.h.i.c.4+5.4.5.4.5.5.4.4.3.4.3.4.4.3.4.3.4.3.3.3.2.3.3.4.0.f.f.7.[.:._._._._._.(.(.(.(.(.(.(.(.(.(.(.(.(.(.:.5.c.f.u+m.n.n.n.n.m.m.m.m.m.m.m.", +"x+y+x+x+y+y+y+x+x+x+x+x+x+y+y+y+x+x+x+y+y+y+w+w+v+w+7+v+v+7+6+7+7+6+. 6+6++ . + + @ @ @ @ # # # $ $ & % * * * * = * - - ; - ; ; ; > > > , , ) ) ) ! ! ! ~ ! ~ ~ { ] ^ ^ ^ ^ ^ / / : ( _ : _ _ [ [ [ < } | | | } | | 1 2 3 4 4 4 4 4 8+8+6 6 8 8 8 8 8 7 7 9 9 a 0 a a a b 9+c 9+d d d d d e e g f h i h h h j i k k l l l l m n n n p p o o o q q s r r t t t t u u v x x x w w w y y z A A A A B B C C D E E E F F F G H I J I I I K K K L L M M M N N O O P R Q Q R R R T S S V U U U V X X X X Y Y Y 0+0+0+0+` ` .. .....+.+.+.#.@.@.@.$.$.$.%.&.*.*.*.*.*.=.-.;.;.;.a+a+a+>.,.,.,.b+'.!.c+c+c+].].d+^././.(.:.:.3+<.}.}.|.1.1.2.3.5.5.6.6.7.8.8.0.0.a.a.e+d.c.d.e.f.f.f+h.h.i.j.k.l.g+m.h+h+h+o.j+i+j+q.r.s.k+l+t.l+v.v.v.x.y.y.z.B.C.E.E.D.F.G.H.H.[+I.J.<+K.K.K.M.M._+N.P.P.Q.(+R.S.S.T./+U.V.W.^+^+Y.Z.Z.`. +]+.+{+{+++@+#+m+n+n+%+&+*+*+o+=+=+-+>+;+;+p+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.z+m.u+e+1.}.t+t+}.}.[.[.[.[.8.8.8.[.[.[.[.1.9.h.j.f+f.e.f.e.f.e.e.f.d.e.d.d.e.d.e.d.d.d.c.e.c.d.c.c.d.e.g.f.7.[.:.A+_._._._.(.(.(.(.(.(.(.(.(.(.(.(.(.(.:.5.d.g.j.m.n.n.n.n.m.m.m.m.m.m.m.", +"B+B+B+B+B+B+B+B+B+B+B+C+C+C+C+C+x+x+x+x+y+y+y+w+w+w+w+w+v+v+v+7+7+6+6+. . . . . + + @ @ # # $ $ $ $ % % & & * * = = = = - - ; ; > , , , , ' ' ) ) ! ! ~ ~ ! ] ] { { ^ ^ ^ / ^ / ( : : _ _ _ [ [ [ < } } | | | | | | 2 3 3 4 4 8+4 4 8+5 6 6 8 6 7 8 8 7 9 0 9 a 0 b a a 9+9+c 9+d d d d d e e g f h i h h h j i k k k l l l m n n p p p o o q s q r r r t t t t v u v x x x w w y y y z A A A A B B C C D E E E F F F H H I J I I I K K K M L M M M O O O P P R Q Q R R R T S S V U U U V X X Y X Z Y Y 0+Z 0+0+` ` . . ...+.+.+.#.@.@.@.$.$.$.%.&.*.*.*.*.*.=.-.-.;.;.a+a+a+>.>.,.,.b+'.!.c+~.c+].].d+^././.(.:.:.3+[.}.}.|.1.1.2.3.5.5.6.6.7.8.8.9.0.a.a.c.d.c.e.f.f.f.f+h.h.j.j.k.l.g+n.h+h+o.o.j+i+j+q.r.s.k+l+t.l+v.v.v.y.y.y.z.A.C.C.E.D.F.G.H.[+I.I.<+<+:+K.L.M.M.N.N.P.O.Q.R.R.S.S.T./+U.V.W.^+X.X.Y.Z.`. +]+.+.+++++@+#+m+n+n+n+*+*+*+o+=+=+>+>+;+;+,+,+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.F.D+q.j.a.8.8.8.8.8.8.8.8.8.8.8.8.<.[.[.[.|.9.h.E+i.i.i.i.i.j.j.j.i.i.i.h.i.i.i.h.h.F+h.h.h.f+f+f+f+f+g.g.f.7.<.:._._._.(._.(.(.(.(.(./.(.(./.(././.(.(.:.6.d.g.j.n.n.n.n.n.m.m.m.m.m.m.m.", +"G+G+G+G+G+G+G+G+H+H+H+H+H+I+I+I+I+B+B+B+B+B+C+C+C+x+x+y+y+w+w+w+w+w+v+v+7+7+6+6+. . . . + @ @ # # $ $ $ $ % % & & * * = = = - - ; ; > > , , , ' ' ) ) ! ! ~ ~ ~ ] ] { { ^ ^ / / / ( ( : : _ _ [ [ [ < < } } | 1 1 1 1 2 2 3 4 4 8+8+4 8+5 5 6 8 8 7 7 7 7 9 0 0 a a b b b 9+9+c c d d e e e f f g g h i i i i j j k l l m m l m n p p o o o q q s s r r r t u u u v v v x w y y y y z A z B B B B C D D E E F F E G G H H H I J I J K K L L M N N N N O O P Q Q R R Q R T S S U U V V V W W X X Y Z Z Z Z 0+0+` . ...........#.#.@.@.$.$.$.%.%.&.&.&.*.=.*.=.-.-.;.;.a+>.>.a+>.,.b+b+'.).!.~.c+{.].d+d+^./.(._._.3+3+<.[.[.|.|.2.2.3.4.6.4+4+7.8.9.0.a.b.b.e+c.d.e.f.g.g.f+h.i.j.k.l.l.g+m.h+o.o.p.i+i+j+r.s.r.s.t.l+u.v.w.w.x.y.z.A.B.B.E.E.D.F.H.G.[+I.J.J.:+K.:+L.M._+_+P.O.O.O.(+R.T.S./+U.V.V.W.X.X.Y.Z.`.`.]+.+]+{+++@+@+m+m+$+%+%+&+*+*+~+o+-+-+>+p+p+,+'+'+q+)+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.P.F.J+j+j.a.8.7.7.8.7.7.7.7.7.7.K+7.<.1+[.[.}.4+c.d.e.g.i.j.l.m.}+m.m.g+g+g+g+g+g+L+g+j.i.h.f.e+c.b.e+e+b.e+0.4.3+:._.(.(.(.(.(.(.(./.(./././././././././.:.5.c.g.k.n.n.n.n.n.m.m.m.m.m.m.m.", +"M+N+M+M+M+N+N+M+N+N+N+N+N+O+O+O+O+G+G+G+G+H+H+I+B+I+B+B+B+C+x+x+x+y+w+y+y+v+w+v+v+7+6+6+6+. . . + + # # $ $ $ % % % & * = * * * = = - ; ; > > , > ' ' ) ! ) ! ! ~ ! ~ { ] { { ^ ^ / / / ( ( : _ _ _ _ < < < < } | | | | 1 2 2 4 3 4 4 4 8+8+6 5 8 8 8 8 8 7 7 9 9 0 a a a b b b 9+c c d d d d e f f h h h h h i i j j k k l l l m m n n p q o o o q s s t r t t t t u x v x x w w w y y z z A A A B B C C D E E E F F F G I H I I I J J K K L L M M M N N O P P Q Q Q Q R R T S S U U U V V W W X Y Y Y Y Z Z 0+` ` . . . ...+.+.#.#.@.@.@.@.$.%.%.&.&.*.*.*.=.=.-.-.;.a+a+a+a+>.>.,.b+'.).!.~.~.{.].].d+^././.:.:.:.3+<.[.}.1.1.1.2.3.4.6.6.4+7.8.8.9.a.a.b.e+c.c.d.f.f.g.f+h.h.j.k.k.l.g+n.n.h+o.p.i+i+j+r.r.s.k+t.t.u.v.v.w.x.y.y.A.B.C.E.E.D.F.G.H.[+I.I.<+:+:+K.L.M.M._+P.P.O.Q.(+R.S.T./+U.U.V.W.^+X.Y.Z.Z.`. +]+.+{+++++@+$+$+n+n+%+&+*+~+o+=+=+-+>+;+p+,+'+'+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.P+k+j+j.a.7.7.7.7.7.7.7.7.7.7.7.7.<.<.<.<.[.1.2.4.4.a.h.j.h+q.s.s.r.q.r.q.q.q.q.q.i+n.i.Q+a.3.|.1.1.|.1.}.|.[.:._.(.(.(.(.(.(.(.(././././.(././././././.:.4.c.g.u+m.n.n.n.n.m.m.m.m.m.m.m.", +"R+S+T+T+R+S+S+R+R+R+R+S+S+M+M+N+M+N+N+N+N+O+O+G+I+H+I+I+I+I+C+B+C+y+y+x+x+w+y+w+w+v+7+7+7+6+6+6+. . @ @ # # # $ $ $ % & * * & & * * = - - ; , > ; , , ) ) ' ) ) ! ) ! ] ~ ] ] { { ^ ^ ^ / / _ : : : : [ [ < [ < } } } } 1 1 1 3 2 3 4 3 4 8+5 8+6 6 6 6 6 8 8 9 7 0 0 0 a a a a b 9+9+c c c c e e e g g g g g h h i i j j k l l l l m m n o p o p q q q r s r r t r t v u v v x x x y w z y z z z A A B B C D D E E E E F H H H I H I I J K K K L L N M M N O P P P Q P Q Q R T S S S S U V V W W X X X Y Y Y Z 0+0+` ` ` ` ......+.+.#.#.#.#.@.$.$.&.%.&.*.&.*.*.=.=.-.;.;.a+;.a+a+>.,.b+'.!.!.!.c+{.{.].d+^.^._.3+_.3+<.[.[.|.|.|.1.2.3.5.5.6.4+7.7.8.0.0.b.e+e+e+c.e.e.f.g.f+f+i.j.j.k.g+m.m.n.h+p.i+p.i+q.r.s.k+l+k+l+u.u.w.w.x.x.z.B.B.E.C.E.D.G.G.H.[+I.J.<+:+:+K.L.M.M.N.N.O.Q.Q.(+S.S.T./+/+U.V.W.^+X.Y.Y.Z.`.]+]+.+{+{+++m+$+$+$+%+%+*+~+o+o+=+=+-+>+;+p+'+,+'+)+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.U+}+j.a.2.}.[.[.[.[.1+[.1+[.<.[.[.<.<.<.<.<.[.<.[.|.9.h.k.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.8.<.:.:.:.:.:.:.:._._._.(.(.(.(.(.(.(.(./././././././.^./././._.5.d.g.j.m.n.n.n.n.m.m.m.m.m.m.m.", +"V+V+W+W+V+V+T+V+V+V+V+T+T+S+S+M+S+M+M+M+M+N+N+O+H+G+I+H+H+H+B+I+B+x+x+x+x+y+x+y+w+w+v+v+6+. 7+6+6+. + + @ # # # % # & % & & * * & * * = - - > > > > , ' ' ' ' ! ~ ! ~ ~ ] ~ { ] { ^ { ^ ^ / : : : : : _ [ [ [ } < } } } 2 2 2 2 2 2 4 3 4 8+8+8+5 8 8 8 8 6 8 7 9 0 0 0 b b b b b c c 9+c c c e d e f g g g g g i h i j j l m m m m n n n p p o p s s s s s t t t t t u u v v w w w w w z y z z z A A B B C C E E E E E F G I I I I I I I K K K L L M M M N O P O P Q P Q Q R R S S S S U V U W W X X X Y Y Y Z 0+0+` ` ` ` +.+.+...+.#.#.#.#.@.@.%.&.%.&.=.&.=.=.=.=.-.;.;.a+;.a+a+>.>.b+).!.!.!.c+c+{.d+d+^.^.(.:.:.3+[.}.[.}.1.1.2.3.4.5.5.6.4+7.7.8.9.0.e+e+e+e+c.e.e.f.g.f+f+h.j.j.l.m.n.m.n.h+p.i+p.i+j+r.s.t.t.t.l+u.u.w.w.x.x.y.B.B.D.C.D.D.H.H.[+I.I.J.<+K.K.L.L.M.M.N.N.Q.(+(+(+S.S.T./+/+U.V.W.^+Y.Y.Y.`.`.]+]+{+{+{+++m+$+$+$+%+%+~+o+=+=+=+=+-+>+;+,+q+'+q+)+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.j.a.1.}.[.[.[.[.<.<.<.[.<.<.<.<.<.<.<.<.3+3+3+}.9.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+E+g.7.<._._._._.(._.X+_._.(.(./.(.(.(./.(././././././././.^.^.^.^.:.5.d.f.j.n.n.n.n.n.m.m.m.m.m.m.m.", +"W+W+Y+Z+W+W+V+W+V+V+T+T+T+S+S+M+S+M+M+M+N+N+O+O+H+G+I+H+H+H+B+B+B+x+x+x+x+y+y+y+w+w+v+v+7+6+7+6+6+. + + # # # # $ # % & & & & & & * = = - - > > ; , , ' ' ' ' ) ! ) ! ~ ] ~ ] { { ^ { ^ ^ / : : : : : [ [ [ [ < < } } } 1 1 1 2 3 3 4 3 4 8+8+8+6 6 6 6 6 6 8 7 7 0 0 0 a a a a 9+9+9+c c c c e d e g g g g g g h i i j j k m m m l m m n o p o p q q q r s r r t r t v v v v x x x w w z y z z z A A C B C D D E E E E G H H H I H I I J K K K L L N N N N O P P P Q P Q Q R T S S S S U V V W W X X X Y Y Y 0+0+0+ .` ` ` ......+.+.#.#.#.#.$.$.$.&.%.&.*.&.*.*.=.=.-.a+;.a+;.a+a+,.,.b+'.!.!.!.{.{.{.].d+^.^._.:._.3+<.[.}.|.|.|.1.2.3.6.5.6.4+7.7.9.0.a.b.e+e+e+d.e.e.f.g.f+f+i.k.k.k.g+m.n.n.h+p.i+p.i+q.s.s.k+t.k+u.v.u.w.w.y.x.z.B.B.D.C.E.F.G.G.H.[+I.J.:+:+:+K.L.M._+P.N.O.Q.Q.(+S.S.T./+/+U.W.W.^+X.Y.Y.Z. +]+]+.+{+{+@+$+$+$+$+%+%+*+~+o+o+=+=+>+>+;+p+'+,+'+r+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.i.b.2.[.[.1+[.[.<.<.<.[.<.<.<.<.<.<.<.3+3+3+<.}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.7.<._._._._.(.(.(.(.`+(.(.(.(.(.(.(./././././././././././././.:.4.c.g.k.m.n.n.n.n.m.m.m.m.m.m.m.", +"T+R+T+T+R+R+R+T+T+T+R+R+R+M+M+N+M+N+N+N+O+O+G+G+I+H+B+I+I+I+C+C+C+y+y+y+y+w+w+w+v+v+7+7+7+6+6+. . + @ @ $ # # $ % $ & * * * & & * = - - ; ; > > > ' ' ) ) ' ) ) ! ! ! ] ~ ] { ^ { ^ ^ ^ / ( _ _ : : : < < < < < } } } | 1 2 1 3 2 4 4 3 8+8+5 8+8 8 6 6 6 8 8 9 9 0 a 0 a a a b b c 9+d c c d e e e h g h h g h h j i j k k l l l m m n n q p o o q s q t s r r t t t x u v x x x x y w z z z z z A A B C C E D E F E F F I H H I H J I K K L L L L M M M N P P Q P Q P Q R R S S S S S V V W W W Y X X Y Y Y Z ` 0+..` ` ` ..+...#.+.#.#.#.@.@.%.$.&.&.&.=.&.=.*.-.-.-.>.;.a+;.a+>.>.b+b+'.!.!.~.].].{.].d+^./.:.:._.3+[.[.|.1.|.|.1.3.4.4+5.6.4+7.8.0.a.0.b.e+e+c.e.e.e.f.f+f+h.j.j.j.k.m.n.h+n.h+p.i+i+j+r.r.s.k+t.t.v.u.u.w.w.x.y.A.B.B.E.E.D.G.G.G.H.[+J.<+K.:+:+K.L._+N.N.N.O.Q.(+R.S.S.T./+U.V.^+W.^+X.Y.Z.`.]+]+]+.+{+++#+m+$+$+$+&+&+*+~+o+=+-+-+;+>+;+p+'+'+q+s+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.U+m.j.b.|.[.[.1+<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+3+}.9.h.k.p.t.l+l+t.k+k+k+k+k+k+k+r.n.i.g.8.<._._._._.(.(.(.(.5.5.5.4.4.5.5.5.4.4.4.4.4.4.4.4.4.4.4.3.4.6.e.n.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"S+M+R+R+S+M+M+S+S+S+M+M+M+N+N+N+N+N+N+O+O+G+G+H+I+H+I+I+I+B+C+C+C+y+y+x+y+w+w+w+v+v+7+7+7+6+6+. . + @ @ # # # $ % $ & & * * & & * = = - - ; > > > , ' ' ) ' ) ) ! ! ! ] ~ ] { ^ ^ ^ ^ ^ / ( : _ : : : [ < [ < < } } } | 1 2 1 3 2 4 4 3 8+8+5 8+6 8 6 6 6 8 8 7 9 0 a a a a a b b c 9+d c c d e e e h g g g g h h j i j k k l l l m m n n q p o o q s q t s r r t t t x u v x w w x y w z z z z z A A B C C E D E F E F F I H H J H J I K K L L L L M M M N P P Q P Q P Q R R S S S S S V V W W X Y X X Y Y Y Z ` 0+..` ` ` ..+...#.+.#.#.#.@.@.%.$.&.&.&.*.&.*.*.=.-.-.>.;.a+;.a+>.>.,.b+'.!.!.~.].].{.].d+^./.:.:._.3+[.[.|.|.|.|.1.3.4.4+5.6.4+7.8.0.a.0.b.e+e+c.e.e.e.f.f+f+h.j.j.j.k.m.n.h+n.h+p.i+i+j+r.r.s.k+t.t.v.u.u.w.w.x.y.A.B.B.E.E.D.G.G.G.H.[+J.<+K.:+:+K.L._+N.N.N.O.Q.(+R.S.S.T./+U.V.^+W.^+X.Y.Z.`.]+]+]+.+{+++#+m+$+$+$+&+&+*+~+o+=+-+-+;+>+;+p+'+'+q+s+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.j.a.1.[. @<.<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+3+}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.7.3+_._._.(.(.(.(.(.5.5.5.4.4.4.4.5.4.4.4.4.4..@4.4.4.4.4.3.4.6.e.n.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"N+O+N+N+O+O+O+N+O+O+O+O+O+H+H+H+H+H+H+H+H+H+I+I+C+B+C+C+C+x+y+x+x+w+w+w+w+7+v+7+7+7+7+6+6++ . + + @ # @ $ $ % % & % * * * & * = = - - ; ; ; > , > ' ) ) ! ) ) ) ~ ! ~ { ] { ^ { { / / / ( ( _ [ : : _ < < < < } | } | | 2 2 2 3 3 3 4 4 8+5 5 5 8 7 6 6 8 8 7 9 9 a b 0 a b b b 9+c c c c d d f e f g h g g h h i i j k l k l m l m n n p q o o o s s s r r r r u t u v v v w x x w w y z A z z A A B B D D E E E G E F G H I H I H J J J L K M L L N M N N Q Q P P Q Q Q T T T U U U S W W V X W Z Y Y Z Y Z Z .0+ .` ` ...#...+.#.#.#.#.$.$.$.%.&.*.&.*.*.*.=.=.;.-.a+;.a+a+a+,.>.b+'.).~.!.~.{.{.].d+^.^./._.:.:.<.}.[.}.1.|.1.2.3.4.4+6.4+7.7.8.9.a.a.e+c.e+c.d.f.f.g.h.f+h.i.k.k.l.m.n.n.h+o.i+i+i+j+r.s.k+t.t.t.u.u.v.x.x.x.y.z.C.C.E.E.D.F.G.H.[+[+J.<+K.K.K.L.L._+_+N.P.Q.(+(+S.S.T./+/+U.V.W.W.X.Y.Z.Z.`. +]+.+{+{+++@+m+n+n+n+&+*+*+~+=+=+>+-+;+>+p+,+'+'+q+r+)+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.i.a.1.[.[.<.<.<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.f.7.<._._._.(.(.X+(.(.5.5.5.4.4.4.4.5.4.4.4.4.4.4.4.4.4.4.4.3.4.6.e.n.+@x.H.n.n.n.n.m.m.m.m.m.m.m.", +"G+H+G+G+H+H+H+G+H+H+H+H+H+9+!._._._._._._._._._.:.:.:.:.:.:.3+(.$.f 6+7+7+6+7+6+6+. & Y [.}.}.}.}.}.|.}.|.1.1.1.1.1.1.1.1.^.V } - ; ; ; > > ' ' ' ) ! 9+%.<.5.5.6.6.6.4+6.6.6.4+4+7.6.{.C [ _ _ _ _ [ } } } @@#@$@%@&@*@3 3 3 4 3 3 8+4 5 6 6 6 7 8 6 =@-@;@>@,@0 b a a b 9+B 5.e.f.f.e.<.` g f f f h i g h h i i j k l n $.2.i.i.i.i.a.O o p q q s r s t L <.g.g+g+g+m.g+m.m.m.m.m.n.n.n.b.;.C A B B C C E D D '@)@!@~@{@]@J H I I K J K L L L L M N N N ^@/@(@_@:@R Q R R S S V S S U V X W X X Y X X 0+Z Z 0+` ` .` . .+.+.+.+.@.#.#.@.@.%.$.%.*.&.&.*.=.*.=.-.-.;.a+;.a+a+>.>.,.b+'.!.~.~.c+].{.].^.^./.(.:.:.:.[.[.}.|.2.|.2.3.4.5.6.6.4+8.8.9.0.0.a.e+d.c.d.e.e.f.f+f+h.i.j.j.k.g+n.h+n.h+o.j+j+j+q.q.s.k+l+l+l+v.u.v.x.y.y.z.A.C.E.E.D.F.F.H.H.I.I.<+:+:+K.K.M.M.N.N.N.P.Q.(+R.R.T.T.U./+V.W.W.^+X.Z.Y.`. + +.+.+++{+@+#+$+%+$+n+*+&+~+o+-+o+-+>+>+;+p+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.r.<@j.a.1.[.1+<.<.<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+[.8.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.8.3+_.(.(.(.(.[@(.(.4.4.4./././././././.^.^.^.^.^.^.^.^.^.^.^.(.4.c.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"B+C+B+B+C+C+C+B+B+B+C+C+y r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+I.f 6+. . . + @ A.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+p+2.~ > > , , ) ) ) 4 n.s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+Q.E [ [ [ < | | }@|@1@1@1@1@2@3@4 3 4 4 4 5 8+6 8 8 6 8 4@5@1@1@1@1@6@7@8@b a 9+K p+!+!+!+!+!+!+!+`.-.g g i h h h i j j k l b+]+!+!+!+!+!+!+!+;+U o s q r t B t.r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+`.).B C D D D D 9@0@1@1@1@1@a@b@c@J J L K K M M L M M O d@e@1@1@1@1@f@g@h@R T T U U S U U W W W Y Y Y X Y Z Z 0+0+ . . .` ...#.#.+.#.#.#.@.@.$.$.%.&.=.&.&.=.*.=.-.-.;.a+a+;.>.>.>.,.b+'.).~.c+c+{.d+].d+/./.(._.3+3+3+}.}.|.1.1.1.2.3.5.5.4+4+7.7.9.0.0.a.b.c.c.d.e.e.f.g.h.f+i.j.j.k.l.g+h+o.h+o.p.i+q.q.q.r.k+t.t.u.u.w.v.w.y.x.y.A.B.E.C.D.D.G.G.[+[+[+I.:+K.K.L.L.L.M.P.P.P.O.(+R.S.R./+/+/+U.V.^+^+X.Y.Y.Z.`.]+]+{+{+{+++@+#+n+n+n+%+~+&+o+=+=+=+>+;+>+p+,+,+q+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.j.a.1.[.<.<.<.<.<.<.<.<.<.<.<.3+<.3+3+3+3+3+3+}.8.f+u+p.t.l+l+t.k+k+k+k+k+k+k+r.i@i.g.8.3+_._.(.(.[@(.(.(.4.4.4./././././././.^.^./.^.^.^.^.^.^.^.^.X+4.d.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"y+w+y+y+w+w+w+y+y+y+y+y+u.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+>+x @ @ @ # d !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+B.{ ' ' ) ! ~ 5 V.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+'+V < } } 1 j@k@1@1@1@1@1@1@1@l@4 8+8+8+6 5 8 7 7 8 m@n@1@1@1@1@1@1@1@o@9+b c l.!+!+!+!+!+!+!+!+!+!+|.h i i i i j k k l 5.!+!+!+!+!+!+!+!+!+!+m.q r s t E V.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+r+}.D E E E p@q@1@1@1@1@1@1@1@r@s@K L L L N M M N N t@u@1@1@1@1@1@1@1@v@T S S U U U V V X X X Z Y Y Y Z 0+0+` ` .. ... ...+.#.@.#.@.@.@.$.$.%.%.&.*.*.*.*.-.=.-.;.;.a+a+a+a+,.,.,.b+'.).!.~.{.{.].d+d+^./.(._.:.3+<.<.[.|.1.2.2.2.3.4.6.6.7.7.8.8.0.a.a.b.e+d.d.e.f.f.g.f+h.h.j.k.k.l.g+m.h+o.o.p.i+j+q.r.r.s.t.l+l+u.v.w.w.x.z.y.z.B.C.D.E.F.F.G.H.I.I.I.J.:+:+L.M.M.M._+P.P.O.Q.R.S.S.S.U.U.U.V.W.^+X.Y.Z.Z.`. +]+.+++++++@+#+m+%+%+%+&+*+*+=+-+-+-+;+;+;+,+'+'+)+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+*+*+*+&+&+%+%+%+%+n+n+n+$+$+$+$+m+m+m+m+#+#+#+#+@+@+@+++++++++{+{+{+.+.+.+.+]+]+]+ + + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.s.m.j.a.1.[.<.<.<.<.<.<.<.<.<.<.<.3+<.3+3+3+3+3+3+}.7.f+j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.4+3+_._.(.(.(.(.(.(.4.4.4./././././././.^.^././.^.^.^.^.^.^.^.X+4.c.p.w.H.n.n.n.n.m.m.m.m.m.m.m.", +"6+7+7+7+7+6+6+6+6+6+6+6+O.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+&+_ $ % % u !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+5.! ~ ~ ~ ~ A.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+o+i 1 1 1 2 w@x@1@1@1@1@1@1@1@y@6 6 8 8 7 7 7 7 z@x@1@1@1@1@1@1@1@A@9+c c d u.!+!+!+!+!+!+!+!+!+!+r+U j j k k l m m 0+s+!+!+!+!+!+!+!+!+!+!+y.r t t u B.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+,+..E F F G B@C@1@1@1@1@1@1@1@D@L M M N M N O O E@F@1@1@1@1@1@1@1@G@H@U V V U V W W X Y Y Z Y Z Z 0+` ` . ... ...+.+.#.#.@.@.$.@.$.%.%.&.&.*.*.*.*.=.-.-.;.;.a+>.a+a+>.,.,.b+'.).!.~.c+c+].d+d+^./.(.(.:.3+3+<.[.}.}.1.2.2.3.4.5.6.4+7.8.9.9.0.a.b.e+c.d.d.e.g.g.f+h.i.i.j.l.l.g+m.n.h+o.p.i+j+j+q.r.r.k+t.l+l+u.v.v.x.y.z.z.A.B.C.D.D.F.G.H.H.[+J.J.<+:+K.K.M._+_+N.P.O.O.(+R.S.T.T./+U.V.W.^+X.X.Y.Z.`. +]+.+.+{+@+@+#+m+$+n+n+&+*+~+~+o+=+=+>+;+p+p+,+'+'+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+*+*+*+&+&+%+%+%+%+n+n+n+$+$+$+$+m+m+m+m+#+#+#+#+@+@+@+++++++++{+{+{+.+.+.+.+]+]+]+ + + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.r.g+j.b.1.1+1+<.<.<.<.<.<.<.3+<.<.3+3+3+3+3+3+3+3+}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+s.h+i.g.7.3+_.(._.(.(.(.(.(.4.4.4./././././././.^.^.^./.^.^.^.^.^.^.^.(.3.c.p.x.G.n.n.n.n.m.m.m.m.m.m.m.", +"6+. 6+6+. . . 6+6+6+. . O.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+1.% & & u !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+,+5 ! ~ ] B !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+d.| | 2 2 2 I@6@1@1@1@1@1@1@1@J@5 6 8 6 7 7 K@L@1@1@1@1@1@1@1@M@N@c c c d l+!+!+!+!+!+!+!+!+!+!+!+T.k j j k l l l S.!+!+!+!+!+!+!+!+!+!+!+y.s t t Y !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+A.E E E F G O@P@1@1@1@1@1@1@1@Q@M M M M M N R@S@1@1@1@1@1@1@1@T@U@T U U U U V W V W X Y Y Y Z Z 0+0+` ` . . .......+.+.#.@.@.@.@.$.$.%.%.*.*.*.*.*.=.-.;.-.a+a+a+a+>.,.,.,.b+'.).!.~.c+].].].^.^./.(.:.:.:.<.[.[.|.1.1.2.3.3.4.5.6.4+8.8.8.9.0.a.b.c.c.d.e.f.f.g.h.h.h.i.k.k.l.g+m.n.h+p.i+i+i+q.r.q.s.t.t.l+u.v.u.x.y.y.z.z.A.B.E.D.D.G.G.G.H.I.I.J.:+:+K.L.M.M._+P.P.P.Q.(+S.S.S.T.U.U.V.^+^+^+X.Z.Z.`.]+]+]+.+@+++@+#+m+n+n+%+*+*+~+~+=+=+-+;+;+;+p+'+'+q+r+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+*+*+*+&+&+%+%+%+%+n+n+n+$+$+$+$+m+m+m+m+#+#+#+#+@+@+@+++++++++{+{+{+.+.+.+.+]+]+]+ + + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.r.m.j.b.|.<.<.<.<.<.3+<.<.3+V@3+3+3+3+3+3+:.:.3+3+[.9.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.n.i.g.8.3+(.(.(././././.(.4.4.4./././././././.^.^./.^.^.^.^.^.^.^.^.(.4.c.p.w.G.n.n.n.n.m.m.m.m.m.m.m.", +"@ # @ @ # # # @ @ @ @ @ Q.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+W.* = = v !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!++.] { ^ 9.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+.+1 2 3 4 3 3 W@X@1@1@1@1@1@1@Y@Z@8 7 7 9 `@ #1@1@1@1@1@1@1@.#+#9+d d c e u.!+!+!+!+!+!+!+!+!+!+!+!+&.l k k k l $.!+!+!+!+!+!+!+!+!+!+!+!+z.r t r e.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+>+G F F G G I @###1@1@1@1@1@1@1@$#L M N N %#@1@1@1@1@1@1@*#=#S S S S U U W V W X Y Y X Z Y 0+Z 0+ .` ` ` .. .+.+.+.#.@.@.#.@.$.$.%.%.&.&.&.&.=.=.=.;.-.;.;.;.a+a+,.>.b+b+'.!.!.~.c+{.].].d+/./.(._._.:.3+[.}.}.1.1.2.3.5.5.5.6.4+7.8.8.0.0.a.b.e+e+c.f.f.f.g.f+f+h.j.j.k.l.g+m.n.h+p.i+p.i+j+r.s.s.k+k+l+u.v.v.w.y.x.y.A.A.B.C.E.F.F.G.G.H.[+J.J.<+<+K.L.M._+_+N.N.O.O.(+R.S.T.T./+U.V.W.W.^+X.Y.Y.`. + +]+.+{+++@+#+m+$+$+%+&+&+*+o+o+=+-+>+>+p+p+,+,+'+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O.N.s.m.i.0.|.<.<.<.<.<.3+<.<.V@V@3+3+3+3+3+3+:.:.3+:.[.8.f+j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.7.3+(.(.(././././.(.4.4.4./././././././.^.^.-#^./.^.^.^.^.^.^.(.5.c.p.w.H.n.n.n.n.m.m.m.m.m.m.m.", +"& & & & & & & & & & % % Q.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+s+) ; ; w !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+3.^ / ( v.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+7 4 4 8+8+8+8+;#1@1@1@1@1@1@1@6@>#0 0 ,#'#1@1@1@1@1@1@1@)#!#d d e e e f u.!+!+!+!+!+!+s+!+!+!+!+!+J.l m m m n J.!+!+!+!+!+r+!+!+!+!+!+!+z.t u u w.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+W H H I I I J ~#Y@1@1@1@1@1@1@{#]#O O ^#/#1@1@1@1@1@1@1@(#_#U U U V V W W X X Y Y Y Z Z 0+0+` ` ... .....+.+.#.#.@.@.@.$.$.%.%.&.&.*.*.*.=.=.-.-.;.a+a+a+a+>.>.,.,.b+).).!.~.c+{.].d+^.^./.(._.:.3+3+<.[.}.|.1.1.3.4.5.6.6.4+7.8.9.0.0.a.b.e+c.d.d.e.f.g.f+h.i.i.j.k.l.g+m.n.h+o.p.i+i+j+q.r.s.k+t.t.l+u.v.w.x.y.y.z.A.B.C.E.D.F.G.G.H.[+I.J.<+:+:+K.M.M._+N.P.P.O.(+(+S.S.T./+U.V.W.^+^+X.Y.Z.Z.`.]+]+.+{+++++#+m+$+n+n+%+&+*+~+o+=+=+-+>+;+p+,+'+'+q+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O.N.D.k+i+i.9.4+4+4+:#4+4+4+6.4+6.:#4+4+4+6.6.6.6.6.6.7.g.o.r.B.K.M.M.M.L.L.L.L.L.L.L.:+B.q.o.g.4+5.4.<#4.4.4.3.4.4.4.4./././././././.^.^.^.^.^.^.^.^.^.^.^._.4.c.p.[#G.[+[+[+[+[+[+[+H.H.H.H.", +"= = = = = - - - - - - = (+!+!+!+!+!+m.- - - - - ; - ; ; ; ; 0 Q.!+!+!+!+!+!+< , , z !+!+!+!+!+!+B ! ~ ~ ~ ] ] ] { ] { _ *.!+!+!+!+!+!+g.( ( : <+!+!+!+!+!+'+K < } } } | | | 1 1 1 l _+!+!+!+!+!+!+e 8+8+5 5 6 6 8 }#1@1@1@1@1@1@1@|#1#2#.#1@1@1@1@1@1@1@3#4#e d e f f g g v.!+!+!+!+!+]+E p+!+!+!+!+!+S m n p V !+!+!+!+!+;+H @+!+!+!+!+!+z.u v v A.!+!+!+!+!+s+{.z A A A B A C B D D S P.!+!+!+!+!+!+0+I I I J J K J 5#1@1@1@1@1@1@1@##6#7#8#1@1@1@1@1@1@1@9#0#U U U U W W X X Y Y Y Y Z 0+0+` ` . . . . .+.+.#.#.@.@.@.@.$.%.%.&.%.*.*.*.*.*.-.-.;.-.a+>.a+a+a+,.>.,.b+).!.~.c+c+{.{.].^./.(.(._._.:.<.[.[.}.|.1.1.2.4.5.6.4+4+7.7.8.0.a.b.b.e+e+c.e.f.f.g.f+h.h.j.k.k.k.g+m.n.n.h+p.i+j+j+q.q.r.k+t.t.l+u.v.w.x.y.y.z.A.B.C.E.E.F.G.H.H.[+I.I.<+:+K.K.L._+_+N.P.P.O.Q.R.S.S.S./+U.V.W.^+^+^+Y.Z.`.`.]+]+]+{+++@+@+m+$+n+n+n+&+*+~+o+=+=+=+>+;+p+,+'+'+'+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O.N.D.s.j+i.9.:#:#6.6.:#6.6.6.6.6.6.6.6.6.6.6.6.5.a#a#7.f+p.r.A.:+M.M.M.L.L.L.L.L.L.L.:+b#q.o.f+4+4.4.4.4.4.c#3..@3.3.3././././.^.-#/.^.^.^.^.^.d+^.d+d+d+^.(.4.c.i+w.G.[+[+[+[+[+[+[+H.H.H.H.", +"- ; - - ; > > ; ; ; ; ; (+!+!+!+!+!+n.> , , > > , > ' , , , ' ^.!+!+!+!+!+!+| ) ) B !+!+!+!+!+!+C ~ { ] { ^ ^ ^ / ^ / / / $+!+!+!+!+!+f+: _ [ <+!+!+!+!+!+J.} } 1 | | 1 | 1 1 2 2 4 ].!+!+!+!+!+!+e 5 6 8 6 8 8 8 8 d#1@1@1@1@1@1@1@e#f#1@1@1@1@1@1@1@g#h#d e e f g h g i v.!+!+!+!+!+W.k n.!+!+!+!+!+v.n p p v.!+!+!+!+!+o.r X.!+!+!+!+!+A.v x x A.!+!+!+!+!+X.A A A B A B B C C D E E [.!+!+!+!+!+!+0+I I I J K L K L i#1@1@1@1@1@1@1@a@8#1@1@1@1@1@1@1@j#k#V U U V V W W X X Z Y Y Y 0+` 0+ .` .. . .....+.+.@.#.$.@.@.@.%.&.%.&.&.*.*.*.=.=.-.-.a+;.a+a+a+>.>.,.,.b+).).~.~.c+{.].].d+^.(.(._.3+:.3+<.[.[.|.2.2.2.4.5.6.4+7.7.8.8.9.0.b.b.e+c.c.d.e.f.f.h.i.h.i.j.k.k.l.m.n.h+h+o.p.i+q.r.r.r.s.t.l+t.u.v.w.x.y.z.y.A.B.C.D.E.D.F.G.[+[+J.I.J.<+K.K.L.M._+N.P.O.P.Q.(+S.S.S.T.U.V.V.W.X.^+X.Y.Z.`. +]+]+.+{+++@+#+$+$+n+n+%+*+~+o+o+=+-+-+p+p+,+,+q+'+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O._+D.t.j+h.9.4+4+6.6.6.6.4+6.6.6.6.6.a#6.6.6.6.6.6.5.7.f+p.q.B.K.M.M.M.L.L.L.L.L.L.L.:+A.l#o.g.4+4.4.4.4.c#c#3.4.3.3.3.^./.^./.m#^./.^.^.n#^.^.^.^.d+d+d+^.(.4.c.o#w.G.[+[+[+[+[+[+[+H.H.H.H.", +"' ' ' ' ' ' ' ' ' ' ' ) R.!+!+!+!+!+h+) ! ! ! ! ! ! ~ ~ ~ ~ ~ /.!+!+!+!+!+!+3 ] { D !+!+!+!+!+!+F / / / / ( ( ( : : : _ _ .+!+!+!+!+!+h.< } } :+!+!+!+!+!+A.1 2 2 2 3 3 4 4 8+8+8+8+{.!+!+!+!+!+!+i 7 7 7 7 9 9 0 0 p#q#1@1@1@1@1@1@1@1@1@1@1@1@1@1@x@r#g g h h i i i i j w.!+!+!+!+!+^+m M s+!+!+!+!+q+I q K q+!+!+!+!+r+O u X.!+!+!+!+!+A.w y y B.!+!+!+!+!+(+B B C C D D E E F F F F (.!+!+!+!+!+!+ .J K K L L M N N s#t#1@1@1@1@1@1@1@1@1@1@1@1@1@1@u#v#V V W W X X Y Y Z Z Z Z 0+` ` . .........+.#.#.@.@.$.$.$.$.%.&.&.*.*.=.=.=.=.-.;.;.a+a+>.>.>.>.,.b+b+'.).!.~.c+c+].d+d+^./.(.(._.:.3+<.[.}.}.|.1.2.3.4.5.6.4+4+7.8.9.0.a.b.b.e+c.d.d.f.g.g.f+h.i.i.j.l.l.g+m.n.h+o.o.i+j+j+q.r.s.s.t.l+l+u.v.w.w.x.z.z.A.B.C.E.D.D.G.H.H.[+I.J.J.<+K.K.L.M._+_+N.O.O.Q.(+R.S.T.T.U.V.V.W.^+X.X.Z.`.`. +]+.+.+{+@+@+#+m+$+n+%+&+*+~+~+o+=+-+>+;+p+p+,+'+q+q+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.s.m.i.0.|.<.<.3+3+<.3+3+3+3+3+3+3+:.:.w#w#:.:.:.:.<.7.f+j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.f.4+3+(.(.(./././././.3.3.3.^.^.^.^.^.^.^.n#n#n#d+d+d+d+d+d+d+d+(.4.c.p.w.H.!+!+!+!+!+!+!+!+!+!+!+", +") ! ) ) ! ! ! ) ) ) ) ) R.!+!+!+!+!+o.! ! ! ! ~ ] ~ ] ~ ~ ] { /.!+!+!+!+!+!+4 { { D !+!+!+!+!+!+F ( : ( : _ _ _ _ : _ [ [ .+!+!+!+!+!+h.} } | :+!+!+!+!+!+A.2 2 4 3 3 4 3 4 4 8+8+5 ].!+!+!+!+!+!+h 8 9 9 9 9 0 0 0 0 8@.#1@1@1@1@1@1@1@1@1@1@1@1@x#y#f g g g g h i j i j w.!+!+!+!+!+W.l m A.!+!+!+!+!+j.o g+!+!+!+!+!+B.r u X.!+!+!+!+!+A.x w w B.!+!+!+!+!+(+B B B D C D D D D E E F (.!+!+!+!+!+!+` J J K K M M M L M z#A#1@1@1@1@1@1@1@1@1@1@1@1@{#B#S V V V V X W Y X Y Y Z Z Z 0+` .` . .......#.+.@.#.@.#.$.$.$.%.&.*.&.*.&.*.=.=.-.-.a+a+a+;.a+>.>.,.b+'.).!.~.~.{.{.].d+^.^./.(.:._.3+[.<.[.}.|.|.1.3.5.5.6.4+7.8.8.8.0.0.a.b.c.e+c.d.e.f.g.f+f+i.j.j.j.l.g+m.n.n.h+o.p.i+j+q.r.s.s.k+k+u.v.u.v.w.y.y.z.B.B.E.C.E.F.F.F.H.[+I.I.<+<+<+:+M.L.M._+P.P.O.Q.(+R.R.T.T./+/+V.^+W.^+Y.Y.Y.Z.`. +]+.+{+{+++@+m+$+n+n+%+&+&+*+=+=+=+-+;+>+p+'+'+'+)+)+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.0.|.<.<.3+3+<.3+3+3+3+3+3+3+:.:.:.:.:.:.:.:.<.7.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+F+f.7.:.(.(.[@/././././.3.3.4.^./.^.^.^.^.^.d+^.^.d+d+C#^.d+d+d+d+(.3.c.o#w.G.!+!+!+!+!+!+!+!+!+!+!+", +"{ ^ { { ^ ^ ^ { { { { { S.!+!+!+!+!+p.{ { { { { ^ ^ / ^ ^ ^ / _.!+!+!+!+!+!+6 ( ( G !+!+!+!+!+!+H _ [ _ < < < } } < | | a q+!+!+!+!+!+f+1 1 3 K.!+!+!+!+!+B.4 4 8+8+8+6 5 5 6 6 6 8 ].!+!+!+!+!+!+j 0 a a 0 a a a b b 9+!#D#1@1@1@1@1@1@1@1@1@1@f@E#g g h h i i j k l k l w.!+!+!+!+!+^+n p .!+!+!+!+!+=+K =+!+!+!+!+!+ .u v X.!+!+!+!+!+B.y z z C.!+!+!+!+!+(+D C D E D D E E F F G G _.!+!+!+!+!+!+..K L L L M N M N N P F#*#1@1@1@1@1@1@1@1@1@1@Y@G#U V W X W X Y X X Y Y Z 0+0+` ` . . .....+.+.+.@.#.#.@.$.$.%.%.%.&.*.*.*.*.=.=.-.-.;.;.;.;.>.>.>.b+b+'.).!.!.~.{.{.d+d+^.^./.(._._.<.<.<.}.}.|.|.1.2.3.6.6.6.7.8.8.9.0.0.a.b.e+e+d.d.e.e.f.f+f+h.i.k.k.k.l.m.n.n.h+o.p.p.i+j+q.r.k+t.k+t.l+v.w.w.x.x.z.A.B.C.C.D.D.F.G.G.H.[+[+<+<+:+:+K.L.M.M.N.N.O.Q.(+R.R.R.T.U./+U.V.^+^+^+Y.Z.Z.`. + +]+.+{+++@+#+m+$+$+%+&+&+*+~+o+=+-+-+>+p+p+'+'+q+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.H#j.0.|.<.<.3+3+3+3+3+3+3+:.3+3+:.:.:.3+:.:.:.:.<.8.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.n.i.g.7.3+_._.(.(.X+(.(.(.4.4.4.(.(.[@/.^././././.^./.^.-#/.^./.^./.(.4.c.p.w.G.!+!+!+!+!+!+!+!+!+!+!+", +"/ ( / / ( ( ( / / / / / S.!+!+!+!+!+p./ ( ( ( ( : ( : ( ( ( : <.!+!+!+!+!+!+7 _ _ I !+!+!+!+!+!+0.b+b+b+'.'.'.'.'.'.).].:+!+!+!+!+!+!+5.3 3 8+K.!+!+!+!+!+B.5 5 6 6 6 8 8 8 7 7 7 9 ^.!+!+!+!+!+!+l a 9+9+b 9+9+9+c c c e I#J#1@1@1@1@1@1@1@1@1@K#j i i j j k k k l m l n x.!+!+!+!+!+^+p o o O.!+!+!+!+!+X.!+!+!+!+!+N.v x w X.!+!+!+!+!+C.z A z C.!+!+!+!+!+R.E D D F E F F G H H H H :.!+!+!+!+!+!++.L L M M O O O O P Q Q L#M#1@1@1@1@1@1@1@1@1@N#V V W X Y X X Z Y Z Z 0+0+ .` ` ` ..+...#.+.@.#.#.@.@.@.$.%.%.*.&.&.&.=.=.=.=.-.-.;.;.;.a+a+>.,.,.b+).).!.~.c+c+{.d+d+/.^./.(._.:.3+3+[.[.}.1.|.1.2.3.4.5.4+7.7.8.9.0.a.b.b.e+e+c.d.f.e.f.g.f+h.i.j.j.l.g+g+m.n.h+o.p.p.i+j+q.q.s.k+t.l+l+u.u.w.y.x.y.z.B.C.E.E.E.G.F.G.[+[+[+I.J.:+:+L.L.L.M.N.N.N.O.(+R.S.S.S.T./+U.V.W.W.X.Y.Y.Y.`. + +]+.+{+{+++@+m+$+$+n+%+*+&+*+o+o+=+>+;+>+;+,+,+q+)+r+)+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.U+H#i.0.}.3+3+3+3+3+:.3+O#3+:.:.:.:.:.:.:._._._._.<.7.g.j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.9.3.|.1.|.|.1.|.1.}.a.0.0.|.}.P#|.}.|.[.|.}.}.}.[.}.[.[.}.[.}.}.4+d.p.w.H.!+!+!+!+!+!+!+!+!+!+!+", +": _ : : _ _ _ _ _ _ _ _ S.!+!+!+!+!+i+_ [ [ [ [ < [ < [ [ [ 1 J.!+!+!+!+!+!+8 } } J !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+..8+8+6 L.!+!+!+!+!+C.8 7 7 7 7 9 9 9 0 0 0 a /.!+!+!+!+!+!+n 9+c c c d d e e e e f g Q#1@1@1@1@1@1@1@1@R#S#k k k k l l m m n n n p x.!+!+!+!+!+^+q s s ~.!+!+!+!+!+!+!+!+!+!+!+{.x w y Y.!+!+!+!+!+C.A B B C.!+!+!+!+!+R.F F F G G H H H I I I J 3+!+!+!+!+!+!+#.M N N O Q P P P Q R R R T#1@1@1@1@1@1@1@1@U#V#W X X Y Z Y Z 0+0+0+` ` ` .. . ...+.#.+.@.#.$.@.@.$.$.%.%.&.&.=.*.*.=.-.-.-.;.;.;.a+a+a+>.>.b+'.'.).!.~.c+{.{.].d+^./.(.(._.:.3+<.<.[.}.|.1.2.2.3.4.5.6.4+7.8.8.0.0.a.b.e+e+c.d.e.e.g.g.f+h.i.j.j.k.l.g+n.n.h+o.p.p.i+j+q.q.s.s.k+t.l+u.u.v.w.x.z.z.A.B.C.E.D.D.F.H.H.[+I.I.J.<+<+K.L.M.M._+N.P.P.O.(+R.S.T.T./+/+U.V.W.^+X.Y.Z.Z.`. +]+.+{+{+++@+#+m+$+n+%+&+&+~+~+o+=+-+>+;+p+p+,+'+'+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+h.a.|.3+3+3+3+3+:.3+:.w#:.:.:.:.:.:.:._._._._.<.4+f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.f+f.e+c.e+c.e+b.c.e+e+l.l.g+b.e+b.b.b.b.b.a.b.b.a.b.a.b.a.a.b.0.b.e+e.p.w.G.!+!+!+!+!+!+!+!+!+!+!+", +"< < < < < < < < < < < } T.!+!+!+!+!+*+O.O.O.O.O.O.O.O.O.O.O.@+!+!+!+!+!+!+~+2 2 2 M !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+n+c 8 7 7 L.!+!+!+!+!+E.9 0 0 a a a b b b b b 9+_.!+!+!+!+!+!+q e e e e f f g g g h h W#X#1@1@1@1@1@1@1@1@1@Y#m m m m n n p p o o o q y.!+!+!+!+!+X.t t u x .+!+!+!+!+!+!+!+!+!+`.z y z z Y.!+!+!+!+!+C.C D D E.!+!+!+!+!+S.G H H I I J J J J K K L 3+!+!+!+!+!+!+@.O P P Q R R R R T T S Z#`#1@1@1@1@1@1@1@1@1@ $.$Z Z Z 0+0+` ` . .........+.+.#.#.@.@.$.$.$.%.%.&.&.*.*.=.=.=.=.-.;.;.a+a+>.>.>.>.,.,.b+b+).!.~.c+c+{.].d+d+^./.(._.:.3+3+<.[.}.}.|.1.2.3.4.5.6.4+4+7.8.9.9.0.b.b.e+c.d.d.e.f.g.g.h.i.i.j.k.l.l.g+n.n.o.o.p.i+j+j+q.r.s.s.t.l+l+u.v.w.w.x.y.z.A.B.C.E.D.D.F.G.H.[+I.J.J.<+:+K.K.M._+_+N.P.O.O.Q.R.S.T.T./+U.V.V.W.^+X.Y.Z.`.`. +]+.+.+++@+@+#+m+$+n+%+&+*+~+~+o+=+-+-+;+p+p+,+'+q+q+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.a.}.3+3+3+3+3+3+3+3+3+:.:.:.:.:.:.:.:.:.:._.<.7.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.h.h.f+f+f+f+g.g.f+f+f+o.i+p.g.g.g.g.g.g.+$f.f.f.f.f.f.f.e.f.e.e.e.e.e.i+w.G.!+!+!+!+!+!+!+!+!+!+!+", +"1 1 1 1 1 1 1 1 1 1 1 1 T.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+u.8+8+8+O !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+).9 9 0 0 M.!+!+!+!+!+D.b b b 9+9+9+c c c d d d :.!+!+!+!+!+!+s g g h h h i i i i i @$#$1@1@1@1@1@1@1@1@1@1@1@$$p p o o q q q q q s s z.!+!+!+!+!+X.u u v v 3.!+!+!+!+!+!+!+!+!+5.A A B B Y.!+!+!+!+!+E.E F F E.!+!+!+!+!+S.I J J J J K K L L M M N [.!+!+!+!+!+!+%.Q R R R R T T S S U 0#%$1@1@1@1@1@1@1@1@1@1@1@&$0+0+` ` . .........+.+.#.#.@.@.$.$.$.%.%.&.&.*.*.*.=.=.=.-.-.;.;.a+>.>.>.>.,.,.b+b+'.).!.~.c+c+].d+d+^./.(.(._.:.3+3+<.[.}.|.1.2.2.3.4.5.6.4+4+7.9.9.0.a.b.b.e+c.d.d.e.g.g.f+h.i.i.j.k.l.l.g+n.h+o.o.p.i+j+j+q.r.s.k+t.l+l+u.v.w.w.x.y.z.A.B.C.E.D.D.F.G.H.[+I.J.J.<+:+K.K.L._+_+N.P.O.O.Q.(+R.T.T./+U.V.V.W.^+X.Y.Z.`.`. +]+.+.+{+@+@+#+m+$+n+%+%+&+~+~+o+=+-+-+>+;+p+,+'+q+q+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.*$z+m.i.0.}.3+3+3+3+<.3+3+:.3+3+3+3+_.:._.:.:.:.:.:.[.7.g.j.p.t.l+l+t.k+k+k+k+k+k+k+r.p.m.l.l.l.k.l.k.j.j.j.k.j.l+l+t.j.i.j.i.i.j.i.i.i.i.i.i.i.h.h.h.h.h.h.h.f+t.A.H.!+!+!+!+!+!+!+!+!+!+!+", +"3 4 3 3 4 4 4 3 3 3 3 3 /+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L 8+8+5 P !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+8.0 0 0 0 a M.!+!+!+!+!+D.9+9+c c c d c c c d d e :.!+!+!+!+!+!+s g h h h h i i i j =$-$1@1@1@1@1@1@1@1@1@1@1@1@Y@;$p p o o q q s r s t z.!+!+!+!+!+X.u v v w D ~+!+!+!+!+!+!+!+&+F z A A C Y.!+!+!+!+!+E.D F E D.!+!+!+!+!+S.I I I K J K K L L L L M [.!+!+!+!+!+!+$.P Q Q R T S T S S >$,$1@1@1@1@1@1@1@1@1@1@1@1@1@'$0+` .` ` . . .....+.#.#.#.#.$.$.$.%.%.&.&.&.*.&.*.*.-.=.;.-.;.;.a+>.a+>.>.,.b+'.).!.!.~.{.{.{.d+^.^./.(._._.3+3+[.<.[.}.|.|.2.3.5.5.5.4+4+7.7.8.9.0.a.e+e+c.d.e.f.f.f.g.f+f+h.k.j.k.l.g+m.n.n.h+p.i+i+j+q.q.r.s.k+k+t.l+u.v.w.y.y.y.z.A.C.E.C.E.F.G.H.[+I.[+J.J.<+:+K.L.L.M.N.N.P.P.O.Q.S.R.S.T.U.U.V.W.W.^+X.Z.Y.Z.`.]+]+]+.+++++@+#+m+$+$+n+%+&+*+~+o+o+-+-+>+>+p+,+'+q+q+)+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+h.9.|.3+3+3+3+3+:.:.:.:.:.:.:.:.:._._._._.:.:.[.7.g.j.)$t.l+l+t.k+k+k+k+k+k+k+s.r.j+j+j+i+i+i+i+p.p.i+p.p.H.G.[+o.o.o.o.o.h+o.n.h+h+n.h+n.h+n.m.n.m.n.m.m.F.G.[+!+!+!+!+!+!+!+!+!+!+!+", +"5 5 8+5 6 6 6 5 5 5 5 5 /+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+e+7 8 8 8 Q !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+O.` b b b 9+9+c _+!+!+!+!+!+D.d d e e e f f f f g g h 3+!+!+!+!+!+!+t j k k k k k k k !$~$1@1@1@1@1@1@1@1@1@1@1@1@1@1@f@{$s s r r r t t t u A.!+!+!+!+!+X.x x w y w i.!+!+!+!+!+!+!+h.B B C C E Z.!+!+!+!+!+D.G H G D.!+!+!+!+!+S.K K K M L L L M M N N O }.!+!+!+!+!+!+&.R T T S U U S U ]$^$1@1@1@1@1@1@1@1@1@1@1@1@1@1@Y@/$ ... ...+.+.+.#.#.#.@.@.@.$.%.&.%.*.&.*.&.*.=.=.=.-.;.;.a+;.a+a+,.,.,.b+'.).!.!.~.c+{.{.d+d+^.(.(._._.:.3+<.[.[.|.|.|.1.2.3.4.5.4+4+7.8.8.9.0.0.a.b.c.c.c.e.f.g.f+h.f+h.i.j.j.l.l.g+m.n.h+o.p.p.j+q.q.q.r.s.k+t.l+u.u.v.w.x.x.z.A.A.C.C.D.F.F.F.G.[+I.I.J.<+:+:+K.M.L.M._+N.P.P.(+(+R.R.T.T./+/+V.W.^+X.X.Y.Y.`.`. + +.+++{+++#+#+m+$+$+n+%+&+*+~+o+o+=+-+;+>+;+,+,+'+)+r+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.0.}.3+3+:.:.3+:.:.:.:.:.:.:.:.:.A+A+_._.:.:.<.7.f+u+o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"7 8 8 7 7 7 7 7 7 7 7 7 U.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+q+7.a 0 0 0 0 T !+!+!+!+!+!+[.0+` 0+` ` ` d+!+!+!+!+!+!+t.c d c c d e e f _+!+!+!+!+!+_+g g g h h h i i i j j j 7.!+!+!+!+!+!+x m m m n n n n ($_$1@1@1@1@1@1@1@:$<$1@1@1@1@1@1@1@P@[$u u v v x v x w A.!+!+!+!+!+Y.z z A A A O '+!+!+!+!+!+'+R E E E F F Z.!+!+!+!+!+D.I I J F.!+!+!+!+!+ +M M M N N O O P P Q Q Q e+!+!+!+!+!+!+-.U U U V V V W }$|$1@1@1@1@1@1@1@1$2$1@1@1@1@1@1@1@{#3$+.#.#.@.@.@.@.$.$.%.%.&.*.*.*.*.=.=.-.-.;.;.a+a+a+a+>.>.,.,.,.'.'.).!.~.c+{.{.].d+^.^.(.(._.:.3+<.<.[.}.|.1.1.2.3.3.4.5.6.4+7.8.9.0.a.a.b.e+e+c.d.e.e.e.g.f+h.i.j.j.k.l.g+g+m.n.h+o.p.i+j+q.q.r.s.k+k+k+l+u.v.v.w.x.y.z.A.A.B.E.E.D.F.G.G.H.[+I.J.<+<+:+K.L.M.M._+N.P.O.Q.Q.(+S.S.T./+U.V.W.W.^+X.Y.Z.Z.`. +]+.+{+{+++@+#+m+$+n+n+%+&+*+~+o+=+=+-+>+;+;+,+,+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.m.i.0.}.3+3+:.:.3+:.:.:.:.:.:.:.4$:.:.:._._.A+_.<.7.g.j.o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"9 0 9 9 0 0 0 9 9 9 9 9 U.!+!+!+!+!+>+]+]+]+ + +]+]+]+]+]+]+]+Z.L.d.C 9+9+9+9+9+9+V !+!+!+!+!+!+U 9+c c d d d d i.!+!+!+!+!+!+*.e f f g f f g M.!+!+!+!+!+r+3.K I I H I J J I J J +.m+!+!+!+!+!+!+y p p p p p p 5$6$1@1@1@1@1@1@1@7$8$9$0$1@1@1@1@1@1@1@X#a$v x x w y w y B.!+!+!+!+!+Y.A B B B B C u.!+!+!+!+!+l+E F F G G H Z.!+!+!+!+!+F.J K K F.!+!+!+!+!+!+g+=.&.&.*.*.*.=.*.=.=.d+@+!+!+!+!+!+!+;.V V V W W X b$c$1@1@1@1@1@1@1@d$e$` f$1@1@1@1@1@1@1@u#g$@.#.$.@.$.$.%.%.*.&.*.*.=.=.=.-.-.;.;.a+a+a+>.a+>.>.,.b+b+).!.~.c+{.c+].d+^.d+/.(._._.:.3+<.<.[.}.}.|.1.2.2.4.4.5.4+7.4+8.9.0.0.a.e+e+e+c.d.e.e.f.g.g.f+i.j.j.k.l.g+m.n.n.o.o.p.p.i+j+q.r.s.k+k+t.l+u.u.v.w.w.x.z.z.A.C.C.D.F.F.F.G.H.[+[+J.J.<+:+L.L.L.M._+_+N.O.O.Q.(+S.S./+/+/+U.V.W.W.X.X.Y.Z. + + +]+.+{+{+@+@+#+$+$+n+%+&+&+~+~+o+o+-+>+>+;+p+,+'+q+q+)+)+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.<@i.9.}.3+3+:.3+3+:.:.:.:.:.:.:._.4$4$4$_._.A+_.3+4+g.j.p.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"b 9+b b 9+9+9+b b b b b U.!+!+!+!+!+h.b b b b b 9+b 9+b 9+9+d 9+9+c c c c d c c c V !+!+!+!+!+!+F d f e g g g f l V.!+!+!+!+!+%+w h h h h h i B.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+s+r o q q o o o 0$1@1@1@1@1@1@1@X#h$u t i$j$1@1@1@1@1@1@1@k$l$w w y z y z C.!+!+!+!+!+P.B B C D C D .s+!+!+!+s+ .F G G H H J /+!+!+!+!+!+F.K M L A.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+$.V W W X Y Z m$1@1@1@1@1@1@1@u#n$ ...o$p$1@1@1@1@1@1@1@q$r$@.%.$.%.%.&.&.=.*.*.*.-.-.-.;.;.a+a+a+>.a+>.>.b+b+).'.).~.{.{.{.].].d+^././.(._.:.3+3+<.}.[.}.|.1.2.3.4.4.4+6.6.7.8.8.9.0.b.a.b.c.c.c.d.e.f.f.f+h.h.i.k.l.l.g+g+m.n.h+h+p.p.i+i+j+q.r.s.k+l+l+l+u.v.v.w.x.y.y.z.A.B.E.E.F.G.G.G.H.I.J.I.J.<+K.L.M._+M.N.N.P.O.O.Q.(+R.T.T.U.U.U.V.^+^+^+X.Z.`. +]+]+]+.+++++++@+m+$+n+n+&+&+*+*+~+o+=+=+-+;+;+p+,+'+q+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.0.}.3+3+:.3+3+:.:._.:.:.:.:._.4$4$4$_._._._.3+4+g.j.o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"d e d d e e e d d d d d V.!+!+!+!+!+d+d d d d d e d e d d d f e e f f e e f f f f Y !+!+!+!+!+-+l g i h i i i i i P '+!+!+!+!+!+D.j j j k k l e.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+Z.q s r r r r s$1@1@1@1@1@1@1@P@t$v x x w u$v$1@1@1@1@1@1@1@w$x$A B B A B C.!+!+!+!+!+s.D E E F E E G <+!+!+!+<+H I I I I J K x.!+!+!+!+!+G.M N M g.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+*+X X Y Y Y Z y$1@1@1@1@1@1@1@{#z$ ...+.+.A$B$1@1@1@1@1@1@1@C$D$*.&.*.*.*.*.-.=.-.-.a+a+a+>.a+>.>.>.b+,.b+'.!.!.c+~.c+{.d+d+d+^././.(._.:.:.3+<.}.[.}.1.1.2.3.4.5.6.4+4+8.8.8.9.0.a.a.b.c.c.c.e.e.f.f.g.f+h.i.k.k.l.g+m.n.h+h+h+o.p.i+j+j+q.r.r.s.k+t.l+v.w.v.w.x.y.y.z.A.B.C.E.E.D.G.H.[+[+I.I.<+:+:+:+K.M._+_+P.P.O.O.Q.R.R.S.S.T.U.U.V.V.^+^+Y.Y.Z.Z. +]+.+.+.+{+++#+#+m+$+%+%+%+&+~+*+~+=+=+-+>+;+;+p+,+'+'+q+s+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+j.0.[.:.:.:.:.3+:.:.:.:.:.4$:._._._.:._.`+_._.V@E$g.j.o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"g h g g h h h g g g g g V.!+!+!+!+;+u g g g g g i h i h h h i h h i i h h i h h i 0+!+!+!+!+!+r.j j k j l l l l l l 6.!+!+!+!+!+!+<.m m m m p R s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+d.t t u u u F$1@1@1@1@1@1@1@f@G$w w y y z z H$I$1@1@1@1@1@1@1@J$K$D D D E E.!+!+!+!+!+a+F F G H H H J ).!+!+!+).J J K K L L N d+!+!+!+!+!+H.O P P %.)+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+x.Y Z Z Z 0+/$Y@1@1@1@1@1@1@Y@L$#.#.#.$.@.@.M$N$1@1@1@1@1@1@1@O$P$*.=.=.-.-.a+;.a+a+>.>.>.,.,.b+b+'.!.!.~.~.{.{.d+].d+^.(.(.(._.:.:.3+<.[.[.}.|.2.1.2.4.4.5.6.6.4+7.9.8.0.0.a.a.b.e+c.c.e.e.f.f+f+h.h.i.j.k.l.g+g+n.h+o.o.p.p.i+i+j+q.s.r.s.k+t.l+u.v.v.x.y.y.y.z.A.B.C.E.E.D.F.G.G.[+J.J.J.<+:+K.L.L.M.M.N.P.O.O.O.R.R.S.T.T./+U.U.W.W.X.^+X.Y.`.`. +]+.+{+++@+++@+#+$+$+n+%+*+~+*+~+=+=+=+-+>+;+;+,+'+'+q+)+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.9.|+3+3+3+3+3+3+w#3+3+w#3+w#:.:.:.:._.4$_.4$ @7.g.j.o.t.l+l+t.L.L.L.L.L.L.L.L.L.L.L.K.K.K.K.K.:+:+:+:+:+:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+[+[+[+[+[+[+[+H.H.H.H.", +"i i i i i i i i i i i i W.!+!+!+!+9.j j j j j j j j j k k k k k k k k k l l l l l .!+!+!+!+=+G l m m m m m n n n n p :+!+!+!+!+!+p+P o o o o o r.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+++E x x x w Q$f@1@1@1@1@1@1@Y@R$z z A A A A A B S$w$1@1@1@1@1@1@1@T$p@E E F E.!+!+!+!+F.H I I I I I J J K q.=+r.L M M M M M N N O J.!+!+!+!+H.Q Q Q R s.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+o+-.0+` ` .U$V$1@1@1@1@1@1@1@W$@.@.@.@.$.$.%.%.X$Y$1@1@1@1@1@1@1@Z$`$;.;.a+a+a+a+>.>.,.,.b+'.).!.~.~.c+{.].].d+^././.(._.:.:.3+<.[.[.}.|.1.1.2.3.4.5.6.6.4+7.8.8.9.0.a.a.b.e+c.c.d.e.f.f.g.f+h.h.i.j.k.k.l.g+m.n.h+h+o.p.i+i+j+r.r.s.k+t.t.l+u.v.v.w.x.y.y.z.A.B.C.E.E.D.F.G.G.[+I.I.J.<+:+:+K.L.M.M._+N.P.P.O.Q.(+S.S.T./+U.U.V.W.^+^+X.Y.Z.Z.`. +]+.+{+++++@+#+m+$+n+n+%+&+*+*+o+=+=+-+>+;+;+p+,+'+'+q+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.e+6.5.3.4.3.3.4.2.4.2.4.3.3.3.2.3.3.2.3.2.3.3.a.f+j.o.t.l+l+t.L.L.L.L.L.L.L.L.L.L.L.K.K.K.K.K.:+:+:+:+:+:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+[+[+[+[+[+[+[+H.H.H.H.", +"l k l l k k k l l l l l W.!+!+!+k+n m m m m m m m m m m m m n n n n n n n n p p p #.!+!+!+-+$.p p o o o o p o o q q q B /+!+!+!+!+!+S.v r r r r y <+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+n+` w y y y %.%1@1@1@1@1@1@Y@+%B B C C C D D D E E @%q@1@1@1@1@1@1@1@#%H H I D.!+!+!+Q.Q J K K K L L M M M M M N N N O O P P P Q Q Z U.!+!+!+[+T S S S W J.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+-+<. . . ...$%%%1@1@1@1@1@1@1@&%$.$.%.%.&.&.&.*.*.*.*%=%1@1@1@1@1@1@1@-%a+>.>.>.,.,.b+'.'.).!.~.c+{.].].d+^././.(._.:.:.3+<.[.[.}.|.1.1.2.3.4.4.5.6.4+7.8.8.9.0.a.a.b.e+c.c.d.e.f.f.g.f+h.h.i.j.k.k.l.g+m.m.n.h+o.p.i+i+j+q.r.r.s.k+t.t.l+u.v.v.w.x.y.y.z.A.B.C.E.E.F.G.G.H.[+I.I.J.<+:+:+K.L.M.M._+N.P.P.O.Q.(+R.S.T./+U.U.V.W.^+^+X.Y.Z.Z.`. +]+]+.+++++@+#+m+$+n+n+%+&+*+*+~+o+=+=+>+;+;+p+,+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+j.h.f+e.+$f.f.f.e.f.e.e.e.e.f.d.f.d.e.e.d.f.d.e.g.h.j.o.t.l+l+t.L.L.L.L.L.L.L.L.L.L.L.K.K.K.K.K.:+:+:+:+:+:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+[+[+[+[+[+[+[+H.H.H.H.", +"n p n n p p p n n n n n ^+!+.+_.n p p p p p p p p n p n n n p p o o o o o o o o o @.!+r+C.P q s s s s s s r r r r r r r w h.~+!+!+!+;+,.u u u v u y 8.n+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+'+v.P z z z z A B ;%>%{#1@1@1@,%'%D D D D D E E F F G F G )%!%~%1@1@1@{%]%I J I K F.!+*+i.P L L L L L N M M O O O O O P P P P P Q Q T T R W h+o+!+I.S U U V V W g.n+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+)+<+). .....+.+.+.^%/%(%1@1@1@_%:%%.&.%.*.&.*.*.*.*.=.=.-.<%[%u#1@1@1@}%|%1%>.,.,.b+).).).!.c+c+{.{.{.d+^.d+/.(._._.:.3+<.<.[.}.|.|.|.2.3.3.4.5.6.4+7.7.8.9.9.0.0.a.b.e+e+c.e.e.f.f.g.f+f+h.i.j.j.k.l.g+m.n.n.h+o.p.i+j+j+q.r.s.k+k+t.l+u.u.v.w.x.x.y.z.A.A.B.C.E.D.F.F.G.H.[+[+I.J.<+<+:+K.L.M._+_+N.N.O.Q.Q.(+R.S./+/+U.U.W.W.W.X.X.Y.Y.Z. + +]+]+{+{+++@+#+m+$+n+%+&+&+&+*+o+o+o+=+>+>+;+p+,+,+'+q+)+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.*$r.m.k.k.j.k.j.j.j.j.j.i.j.j.i.j.j.j.j.j.j.F+i.h.i.i.h.i.j.o.t.l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"q s q q s s s q q q q q $.U s s q q q q q q q q s q s q q q s q s r r s s r q q q F %.E r t s r r r u t u u u u v u v v v u z .~.$.C u v v x w x w w A ..{.(._._._.(._.(._._._._.:.(.a+I A B C B A B D D B C 2%3%4%5%D F F E G F F G G H H H G H I H 6%7%8%9%0%J J L K L >.>.N L M M M M N N P O N P P P P P Q Q Q R Q R T S S T S S W ].].U W V X X W X Y c+6.a.0.0.a.a.a.a.a.a.b.b.e+e+1.*.....+.+.+.#.#.#.@.$.a%b%c%d%&.&.&.*.&.=.*.*.-.=.-.-.-.a+;.;.e%f%g%h%i%b+b+b+'.).!.c+c+c+{.d+d+d+^.^.(.(.(.:.:.3+3+[.[.|.}.|.1.3.3.3.4.5.6.4+4+7.8.9.9.a.a.a.e+a.b.e+d.c.d.g.g.f+g.f+i.h.i.j.l.g+g+g+h+h+o.h+o.p.j+q.r.q.k+k+t.l+u.l+u.v.w.w.y.y.z.A.B.B.C.E.D.F.G.G.H.[+I.J.I.<+:+K.:+L.M._+N.P.N.O.O.R.R.R.S.T./+U.V.W.V.^+^+^+Y.Y.Z.Z. +.+.+{+.+++@+m+m+m+$+%+&+&+*+*+*+~+=+=+=+>+p+,+p+,+q+q+q+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.t.p.o.h+h+h+n.h+h+j%h+m.h+n.h+n.n.n.m.n.n.m.m.m.n.<@g+m.m.j+t.l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+<+<+<+<+<+<+<+J.J.J.J.J.J.J.J.J.I.I.I.I.I.I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"r t r r t t t r r r r r r t t t r r r r r r r r t t u t t t u t t u u t t u t t t t t u u v u u u u x v x x x x w x w w w w w w w w w w w w y z y z z A A z z A B A A B A A A B B C B C C C D E D D E F F E E E E F F F H H G I H H I I J J J I J K J J K K K L L M N M N N M N N O O O O P P R Q Q R R Q R R T T T S S S U V V U U V V W X W Y X Z Z Y Z Y Z Z ` 0+0+ .` . . . . .....#.+.+.#.#.@.@.@.@.$.$.$.&.&.&.&.*.=.=.*.=.=.-.-.-.a+;.a+a+a+>.a+>.>.b+b+b+'.!.!.!.~.~.c+].].].d+/.(./._._.3+:.3+<.<.[.[.|.|.2.1.2.3.5.6.6.6.4+7.8.8.9.0.a.a.e+e+c.d.c.d.e.f.f.g.h.h.i.i.j.k.k.l.g+m.h+h+h+p.p.i+i+j+q.r.s.k+k+l+l+u.v.w.v.w.x.y.y.A.A.B.C.E.E.D.F.G.H.[+[+I.J.<+:+:+K.L.M.M._+N.P.O.Q.Q.(+R.T.T.T./+U.V.W.^+X.^+Y.Y.Z.`.`. +]+.+++++@+@+#+m+n+n+n+%+*+~+~+o+o+=+=+>+>+;+p+'+q+'+q+r+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.x.w.u.u.v.D+k%l+l+l+t.l+t.t.t.t.l+k+t.k+k+k+s.k+s.k+r.r.s.k+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+<+<+<+<+<+<+<+J.J.J.J.J.J.J.J.J.I.I.I.I.I.I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"u v u u v v v u u u u u u x x x v v v v v v v v x v x v x x w x x w w x x w w w w w w w w y w w w w y w z z z z z y A A A z z A A A A A A A B B A C C C C B C C D C D E D D E E E F E E E E G G F G G H H H H H I I I I J J I K J J L K L M M L N N M M M M N N N P P O Q Q P Q Q R Q Q Q R R T T T U U S U U U U U V V V W X X X X Y Y Y Z Y 0+Z 0+` 0+ .` ` ... . .......+.+.#.#.#.@.$.@.@.@.$.$.%.%.&.&.&.*.=.=.*.=.=.;.;.-.a+;.>.a+a+>.a+>.>.,.b+b+'.).~.c+~.~.{.{.].].d+^.(./.(._.:.3+:.<.<.}.[.}.1.1.1.2.4.4.6.5.6.6.7.8.8.8.9.0.a.a.b.e+c.c.e.e.f.g.g.f+h.h.i.i.k.k.l.l.g+m.n.h+h+o.i+i+i+q.q.r.r.s.k+t.l+u.u.w.w.x.y.z.y.z.A.B.C.D.E.D.F.G.G.H.[+I.J.<+<+:+:+K.L.M.M._+N.P.P.O.Q.R.S.S.S.T.U.V.U.W.^+X.Y.Z.`.Z. + +]+.+.+{+++++#+#+$+$+n+n+&+&+*+*+o+=+-+-+>+;+;+,+,+'+'+)+r+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.z.z.y.y.y.x.x.x.x.x.w.w.w.w.w.w.w.v.v.v.v.u.u.u.u.u.l+l+l+l+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+<+<+<+<+<+<+<+J.J.J.J.J.J.J.J.J.I.I.I.I.I.I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"x w x x w w w x x x x x x w w w x x w w w w w w y w y w w w y y y z z y y z y y y z z z z A z z z z A z A A A B B A B B C B B B B B C C C C D E D E E E E D D D F E E F F F F F G H G G H H I I H H H I J I I J J J J K L L L M L L M L M N N M O O N O O O P P P Q Q P R R Q R R T T T T S S U S S V V U V V V W W W X X X Y Y Y Y Y Z Z ` 0+` ` . .` . . ...+...+.#.#.#.#.#.#.@.@.@.%.$.%.%.%.&.&.&.&.*.*.*.-.-.-.-.;.a+a+;.a+a+>.>.>.,.,.b+'.).~.!.~.c+{.].{.].^.^.^./.(._.:._.:.3+[.[.[.|.|.1.1.1.3.3.4.5.6.6.7.7.7.8.0.a.0.a.a.b.e+e+c.d.e.e.g.g.f+h.h.i.j.j.k.l.m.m.h+n.n.h+o.p.p.i+q.q.q.s.s.k+k+t.l+u.v.w.w.y.y.z.A.B.B.C.C.E.D.G.F.G.H.[+[+I.J.<+:+K.K.L.L.M._+N.N.P.O.Q.(+R.R.T./+/+/+U.W.^+W.^+X.Z.Z.`. + +]+]+.+++{+++@+#+$+$+n+%+&+&+~+~+o+o+-+>+;+;+;+p+,+'+'+q+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.z.z.y.y.y.x.x.x.x.x.w.w.w.w.w.w.w.v.v.v.v.u.u.u.u.u.l+l+l+l+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"z A z z A A A z z z z z z A A A z z z z z z A A B A B A A A B A A B C B B C B B B B B C C D C C C C E D E D D E E D E E E D D E E E E E F F G G F H H H H G H H I H H I H H I I I J I J J J K L K K L M M L L L L L M M N O N O N O P O Q Q Q P Q Q P Q Q Q R R R S S T U U S S S U U U U V V W W W X Y X X X X Y Y Y Z Z Z ` ` ` ` ` ` ` . .....+.+.+.#.#.#.#.@.#.#.$.@.$.$.$.%.%.&.&.*.&.&.*.*.=.=.=.-.-.;.;.a+a+;.a+a+,.,.>.b+b+'.'.).!.).!.~.{.].{.].d+^./.^./.:._._.3+3+<.[.<.[.}.1.1.2.4.3.4.5.4.6.6.7.7.8.8.0.0.0.a.e+c.e+c.c.d.e.e.f.g.f+f+i.i.j.k.k.l.g+g+m.n.o.o.i+p.p.i+j+q.q.r.k+k+k+l+l+u.u.v.w.x.y.z.z.B.B.C.E.D.D.F.F.G.H.I.[+I.J.<+<+:+K.L.M._+_+N.N.P.O.Q.Q.(+R.S.T./+/+V.W.W.W.^+Y.Z.Y.Z.`.]+]+.+{+{+++++@+m+#+m+$+n+&+&+*+*+~+o+=+=+-+>+;+p+,+'+,+'+q+r+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.z.z.y.y.y.x.x.x.x.x.w.w.w.w.w.w.w.v.v.v.v.u.u.u.u.u.l+l+l+l+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"C D C C D D D C C C C C C D D D C C C C C C C C D C D C C C D C C D E D D E D D D D D E E F E E E E G F G G G G G F G H H G G G G G G G H H I I H J J J J I J J K J J K J K K K K L K L L L M N M M N O O N N N N O O O P Q P Q P Q R Q T T T R T T T T T T S S S V V U W W V V V W W W W X X Y Y Y Z 0+Z Z Z Z 0+0+0+` ` ` .... .........+.+.#.#.@.@.@.$.@.$.$.%.$.$.&.%.&.&.&.*.*.*.=.-.=.=.-.-.;.;.;.;.a+a+>.>.,.>.,.b+).).'.!.!.c+c+c+].{.].d+d+/./.(.(._.:.:.3+<.<.[.[.}.}.1.1.2.3.4.5.4.6.6.7.4+7.9.9.9.9.a.a.e+b.e+c.e.e.e.f.g.g.g.f+h.i.i.j.l.l.g+m.m.n.h+h+o.o.i+i+q.j+q.r.s.s.k+t.u.l+u.w.w.w.w.x.y.z.B.C.B.E.D.F.F.G.G.H.H.[+I.<+J.<+:+K.K.L.M._+N.P.P.O.Q.(+(+R.S.T.T./+U.V.V.^+X.X.X.Y.`. +`. +]+{+{+++@+@+m+m+m+n+n+%+%+&+~+~+o+o+=+-+>+>+;+p+,+'+q+)+q+)+r+!+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.O.O.O.O.O.O.P.P.P.P.P.P.P.P.P.N.N.N.N.N.N.N._+_+_+_+_+_+_+_+M.M.M.M.M.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"E F E E F F F E E E E E E G G G F F F F F F F F G F G F F F G F F G G F F H G G G G G G G H G G H H I H I I I J J I J J J I J J J J J J J J L L K L L L L K L L M L M N M M M N N O N N N O P P O O O Q Q P P Q Q Q Q R T T R T T T S T S S U S U V U U V V V V W X X W X X X X X Z Y Y Z Z Z 0+0+0+` ` 0+` ` ` . . .......#.#.+.+.+.#.#.@.@.$.@.%.%.$.&.%.%.%.*.&.&.=.*.*.=.=.=.-.-.-.;.;.;.;.a+a+a+>.>.,.,.b+'.).'.).!.c+{.c+].{.d+d+d+/././.(.(.:.:.3+3+<.[.[.}.|.|.1.1.2.3.4.4.5.6.7.7.4+8.8.0.9.0.b.b.b.b.c.c.e.d.e.f.f+f+f+h.i.i.i.j.k.l.g+g+n.n.h+p.o.p.i+i+j+j+r.r.k+s.k+t.l+l+u.v.x.w.x.z.z.z.A.A.B.C.D.F.D.G.H.[+[+I.I.J.J.<+:+L.K.L.M._+_+N.P.O.Q.(+(+R.S.T.T./+U.V.V.W.^+X.X.Z.`.`.`.`.]+.+.+.+{+@+#+m+$+m+n+n+%+&+&+*+~+~+=+=+>+-+>+;+,+p+,+'+)+r+s+!+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.O.O.O.O.O.O.P.P.P.P.P.P.P.P.P.N.N.N.N.N.N.N._+_+_+_+_+_+_+_+M.M.M.M.M.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"G H G G H H H G G G G G G I I I H H H H H H H H I H I H H H J I I J J I I J I I I I I I I J I I J J K J K K K L L K L L L K L L L L L M M M N N M N N N N M N N O N O P O O O P P Q P Q Q Q R R Q Q Q T T R R T T T T S U U S V U U V U V V W V W X W W X X X X Y Z Z Y Z Z Z Z Z ` 0+0+` ` ` .. . ..... .......+.+.+.#.#.#.$.$.@.@.@.$.$.%.%.&.%.*.*.&.=.*.*.*.=.=.=.-.-.-.;.;.;.a+a+a+>.a+>.>.,.b+b+'.'.).!.!.{.c+{.].{.^.d+d+(.^._./.(.3+:.:.3+3+[.[.[.}.1.1.1.2.4.3.4.5.5.6.7.4+8.8.9.9.9.b.a.b.b.c.d.c.c.d.g.f.g.g.h.h.i.i.i.j.k.l.l.m.n.n.h+h+p.o.p.j+i+j+q.r.r.s.t.t.l+l+l+u.v.v.w.x.z.z.z.B.B.C.E.E.D.F.H.H.H.[+I.J.J.<+<+:+:+K.L._+M._+N.P.P.O.Q.(+S.T.S.T./+U.U.V.W.^+^+X.Y.Z.Z. +]+]+]+]+{+++++++@+m+$+n+%+n+&+&+*+~+~+o+=+=+>+>+p+;+p+,+q+'+q+)+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.O.O.O.O.O.O.P.P.P.P.P.P.P.P.P.N.N.N.N.N.N.N._+_+_+_+_+_+_+_+M.M.M.M.M.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"J K J J K K K J J J J J J K K K J J J K K K K K L K L K K K L K K M M L L M L L L L L M M N M M M M N M N N N N N M O O O N N N O O O O O O Q Q P Q Q R R Q Q Q R Q Q R Q R R R R S T T T T U U S S U V V U U U U U V V W X W X W X Y X Y Z Z Y Z Z Y Y Z Z Z 0+0+` .` . . . . ... . .......#.+.+.@.@.#.@.@.@.@.@.@.$.$.$.&.&.%.&.&.*.*.=.*.=.*.-.-.=.;.-.-.;.a+a+a+>.a+a+a+>.>.,.,.,.'.'.).).!.~.~.c+c+{.].].^.^.^././._._._.3+:.<.3+<.}.[.}.|.|.2.1.2.3.5.5.5.6.4+4+7.8.8.8.0.0.a.a.e+e+e+d.c.e.e.f.g.f.g.f+i.h.j.j.k.k.l.g+g+m.n.h+h+o.p.p.i+i+q.q.r.s.s.k+t.t.t.l+v.v.w.w.x.y.y.z.A.B.E.E.E.D.D.F.G.G.H.[+J.J.J.:+K.K.L.M.M.M.M._+N.O.P.O.Q.(+R.S.S.T.U.V.U.V.W.^+^+X.Y.Z.Z.`. +]+]+{+++++++++#+m+m+$+n+%+&+*+~+*+o+o+=+-+-+>+;+;+,+,+q+'+q+)+s+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"M M M M M M M M M M M M M M M M M M M M M M M N N N N N N N N N N N N N O O O O O O O O O P P P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R R R T T T T T S S S S S U U U U U U U U U V V V V V W W W W X X X X Y Y Y Y Y Y Y Y Z Z Z Z 0+0+0+` ` ` ` . . . . . . .......+.+.+.#.#.#.@.@.@.@.@.@.@.$.$.$.%.%.%.&.&.&.*.*.*.*.*.*.=.=.-.-.-.;.;.;.a+a+a+a+a+a+>.>.,.,.,.b+'.'.).!.~.~.~.c+{.{.].].d+d+^./././.(._.:.:.:.3+<.[.[.[.}.|.1.1.1.2.3.4.5.6.6.6.4+7.8.8.8.9.0.a.a.b.b.e+c.c.d.e.e.f.f.g.f+h.h.i.i.j.k.k.l.g+m.m.n.h+h+o.p.i+i+j+j+q.r.r.s.k+t.t.l+u.u.v.v.w.x.y.y.z.A.B.C.C.E.E.D.F.G.G.H.[+I.I.J.<+<+:+:+K.L.M.M._+N.P.P.O.Q.(+R.S.S.T.T./+U.U.V.W.^+^+X.Y.Z.Z.`. +]+]+.+{+++++@+#+m+$+n+n+%+%+&+*+*+~+o+=+=+-+>+;+;+p+,+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"P Q P P Q Q Q P P P P P P Q Q Q P P P P P P P P Q P Q P P P Q P P Q Q P P Q P Q Q Q Q Q Q R Q Q R R T R T T T T S T S S S T S S S S S S S S U U S U V V V U U U W V V W V W W W W Y X X X X Y Y X X Y Z Z Y Z Z Z Z 0+0+` ` ` .` ` .` . ... ...........+.+.+.+.@.@.#.@.@.#.@.@.$.@.$.$.$.%.&.%.&.*.*.&.&.&.*.*.*.=.=.=.-.;.;.;.;.;.;.;.a+a+>.a+,.,.>.b+b+b+'.).).!.!.~.~.c+{.{.{.].d+/.^.^./.(.(._._.:.:.3+<.[.[.[.}.|.1.1.1.2.3.4.4.5.5.6.4+4+7.8.8.9.9.a.a.a.b.e+e+e+c.d.e.f.e.f.g.h.h.f+i.i.k.j.k.g+l.g+m.n.n.o.o.o.p.i+j+j+q.q.r.r.s.k+k+t.l+v.u.v.w.w.x.x.y.z.A.C.C.E.C.E.D.F.F.G.H.I.[+I.<+J.<+<+:+K.L.M._+_+P.P.O.Q.Q.Q.(+R.R.S./+/+/+U.V.W.W.^+X.Z.Z.Y.Z.`. + +]+.+{+{+++@+#+m+n+n+n+%+&+*+~+~+o+o+-+>+>+;+>+p+p+,+'+'+q+)+)+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"R T R R T T T R R R R R R T T T R R R R R R R R T R T R R R T T T S S T T S T T T T T T T S T T S S U S U U U U V U V V V U V V V V V V V V W X W X X X X W W W Y X X Y X Y Y Y Y 0+Z Z Z Z 0+0+0+0+0+` ` 0+` ` ` ` . .......+.....+...+.#.#.+.#.#.#.#.#.@.@.@.@.%.%.$.%.%.$.%.%.&.%.&.&.&.*.=.*.=.-.-.=.=.=.-.-.-.;.;.;.a+>.>.>.>.>.>.>.b+b+'.b+!.).'.!.~.~.c+{.c+{.d+d+d+d+^.^./.(.(._._.:.3+3+3+<.[.[.[.}.|.1.1.1.3.3.5.4.5.6.6.7.4+7.8.8.9.9.0.a.a.b.b.c.c.c.d.e.e.e.f.g.g.h.h.h.i.j.k.k.g+l.m.m.m.h+h+h+o.p.p.j+j+j+j+r.s.s.s.k+t.t.l+l+u.v.w.x.x.x.z.z.A.B.B.C.E.F.D.F.F.G.H.H.[+I.J.<+J.<+K.K.K.L.M._+_+P.O.P.Q.(+R.R.S.S.T.T./+U.W.V.V.W.^+X.X.Y.Z. + + +]+.+.+{+++@+@+#+m+m+$+n+&+&+&+*+~+o+=+=+-+-+;+p+,+,+,+q+q+q+)+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"S U S S U U U S S S S S S U U U S S S U U U U U V U V U U U V U U V W V V W V V V V V V V W V V V V W W X X X X X W X X X X X X X X X Y Y Y Z Z Y 0+0+0+0+Z Z Z 0+Z 0+` 0+0+0+0+0+ .` ` ` ` .... . ...+.+.........+.+.+.#.#.+.@.#.#.@.@.$.%.$.$.%.%.$.$.%.%.%.%.%.&.*.&.*.*.*.*.*.-.=.=.=.-.-.;.-.-.;.a+;.;.a+a+a+a+>.>.>.,.'.'.'.'.'.).).~.~.c+~.{.].{.d+].].d+/.^./.(.(.(._.:.:.:.3+<.[.[.[.}.}.|.1.1.2.3.3.3.5.6.6.6.6.7.8.7.9.8.0.9.0.b.a.b.b.e+d.c.d.d.f.g.f.g.f+f+h.h.i.i.k.k.l.g+m.m.m.h+h+o.o.o.i+i+i+j+q.q.s.s.s.k+t.l+l+l+u.v.v.w.w.x.y.z.B.A.A.C.C.E.D.D.F.G.[+H.[+[+I.J.J.<+:+K.L.K.L._+_+_+N.P.O.O.(+R.(+S.T./+/+U.U.V.V.W.^+Y.X.X.Y.Z.`.`. +]+{+{+{+++@+@+#+m+$+$+n+%+%+&+*+o+o+o+=+-+>+;+;+p+p+'+q+)+)+)+s+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"V W V V W W W V V V V V V W W W V V V W W W W W X W X W W W X W W X Y X X Y X X X X X X X Z Y Y Y Y Z Y Z Z Z Z 0+Z 0+0+0+Z Z Z Z Z Z 0+0+0+` ` 0+ . . . .` ` ... . ... . .......+.........#.#.+.+.#.@.@.#.#.@.@.@.@.@.$.%.$.%.$.$.%.%.&.&.&.&.*.*.&.*.*.*.*.*.*.-.-.=.-.-.-.-.-.a+;.;.;.a+a+>.a+a+,.b+,.,.b+b+b+b+'.).).!.c+c+c+c+c+{.].d+d+^.d+/.(./._.(.(._.3+:.3+<.<.<.[.}.}.}.|.1.2.2.2.2.3.4.5.5.6.4+4+4+8.9.8.9.9.a.b.a.e+b.c.e+c.e.d.e.e.f.f+g.g.f+i.i.i.i.k.k.l.l.l.g+n.n.h+h+p.p.p.j+i+q.j+q.s.r.s.s.t.t.l+l+u.v.w.w.w.x.y.z.z.z.A.B.C.E.D.D.D.G.G.G.H.[+I.I.J.J.:+:+:+K.L.M.M.M.N.N.P.Q.O.Q.Q.(+R.S.T./+/+V.V.W.W.^+^+^+X.Y.Z.`.`. +]+]+]+.+{+++#+#+#+m+$+n+n+%+%+&+*+*+~+o+=+-+>+>+;+;+,+'+'+'+'+)+r+s+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % % % % % % % & & & & & & & & & & & & * * * * * * * * * * = * = = = = = = = = = = = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) #.H - - - - - - - - - D L - - - - - 9 #.6 - - - - - - - - - 8 X #.#.#.#.X 0 - - - - - - - [ #.#.#.#.#.#.#.#.y - - - - - - - - - - J #.} - - - - - - - - - - - d #.e - - - - - - - - - - - - - u #.| - - - - - - - - - - - - - K #.#.#.#.#.#.#.' - - - - - - - - W #.#.#.#.#.` g - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.!+g.! - - - M !+I - - - - - - - - - .+-+@+@+@+@+-+#+; - - - - - - d n+n+n+,+!+&+n+n+0.- - - - - - - - - h )+!+f.- - - - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+^+^+^+^+^+^+] - - - - - - - - ++)+.+.+.+{+)+!+t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.r+!+I.4 - - M !+I - - - - - - - - ] !+3+- - - - U 3+) - - - - - - - - - - i+!+6 - - - - - - - - - - - - B.Z.h.s+o - - - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+> - - - - - - - - - - - - - - ++U.- - - - %.!+V - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.{+,.r+.+o - M !+I - - - - - - - - ' r+H.[.[.[.[.^.A - - - - - - - - - - - i+!+6 - - - - - - - - - - - P !+U 3 -+<+; - - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+/.^.^.B - - - - - - - - - - - ++^+[ [ [ [ _.!+U - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- G *+p+Y L !+I - - - - - - - - - 5..+n+n+n+n+-+q+[ - - - - - - - - - - i+!+6 - - - - - - - - - - ] Z.J.; - (.!+ .- - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+:+<+<+*.- - - - - - - - - - - ++!+!+!+!+!+!+=+f - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- - e /+!+y.!+I - - - - - - - - - 0 ( - - - - %.!+g - - - - - - - - - - i+!+6 - - - - - - - - - - ^.!+'+-+-+p+!+#+_ - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+> - - - - - - - - - - - - - - ++`.o L %+o+U ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- - - _ v.!+!+I - - - - - - - - O !+}.#.#.#.#.l.!+0 - - - - - - - - - - i+!+6 - - - - - - - - - 8 >+y.#.#.#.#.8.!+7.- - - - - - - - +.!+j.#.#.#.#.#.^ - - - - - - - a.!+<.#.#.#.#.Y - - - - - - - - [+!+@.#.#.#.#.#.^ - - - - - - - - ++U.- - g ]+o+O - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- - - - > 1.!+I - - - - - - - - 1 Q.)+!+!+!+!+,+w., - - - - - - - - - - i+!+6 - - - - - - - - - h+p+0 - - - - , Q.q+h - - - - - - - +.!+!+!+!+!+!+!+6 - - - - - - - a.!+!+!+!+!+!+$+- - - - - - - - [+!+!+!+!+!+!+!+6 - - - - - - - - ++U.- - - 8 T.!+3+> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z z z z z z z z z A A A A A B B B B B B B C C C C C D D D D D D D E E E E E F F F F F F F G G G G G H H H H H H H ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z z z z z z z z z A A A A A B B B B B B B C C C C C D D D D D D D E E E E E F F F F F F F G G G G G H H H H H H H ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z z z z z z z z z A A A A A B B B B B B B C C C C C D D D D D D D E E E E E F F F F F F F G G G G G H H H H H H H ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "}; diff --git a/unconfigured.sh b/unconfigured.sh new file mode 100755 index 0000000..34cb9ee --- /dev/null +++ b/unconfigured.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +trap "err_reboot" ERR + +parse_cmdline() { + root= + proxdebug=0 + for par in $(cat /proc/cmdline); do + case $par in + root=*) + root=${par#root=} + ;; + proxdebug) + proxdebug=1 + ;; + esac + done; +} + +debugsh() { + getty 38400 tty1 -i -n -l /bin/bash +} + +real_reboot() { + + trap - ERR + + /etc/init.d/networking stop + + # stop udev (release file handles) + /etc/init.d/udev stop + + echo -n "Deactivating swap..." + swap=$(grep /dev /proc/swaps); + if [ -n "$swap" ]; then + set $swap + swapoff $1 + fi + echo "done." + + umount -l -n /etc/network/run + + umount -l -n /dev/shm + umount -l -n /dev/.static/dev + umount -l -n /dev + + umount -l -n /target >/dev/null 2>&1 + umount -l -n /tmp + umount -l -n /var/tmp + umount -l -n /var/log + umount -l -n /var/run + umount -l -n /var/lib/xkb + + umount -l -n /proc + umount -l -n /sys + + exit 0 +} + +err_reboot() { + + echo "\nInstallation aborted - unable to continue (type exit or CTRL-D to reboot)" + debugsh + real_reboot +} + +echo "Starting Proxmox installation" + +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin + +mount -n -t proc proc /proc +mount -n -t tmpfs tmpfs /tmp +mount -n -t tmpfs tmpfs /var/tmp +mount -n -t tmpfs tmpfs /var/log +mount -n -t tmpfs tmpfs /var/run +mount -n -t tmpfs tmpfs /var/lib/xkb +mount -n -t sysfs sysfs /sys + +parse_cmdline + +# always load most common input drivers +modprobe -q psmouse || /bin/true +modprobe -q sermouse || /bin/true +modprobe -q usbhid || /bin/true + +# load device mapper - used by lilo +modprobe -q dm_mod || /bin/true + +echo "Installing additional hardware drivers" +export RUNLEVEL=S +export PREVLEVEL=N +/etc/init.d/udev start + +# used by if up down scripts +mount -t tmpfs none /dev/shm +mkdir /dev/shm/network +mount -t tmpfs tmpfs /etc/network/run + +# set the hostname +hostname proxmox + +#check system time +/usr/bin/checktime + +# try to get ip config with dhcp +echo -n "Detecting network settings... " +/etc/init.d/networking start >/dev/tty2 2>&1 +echo "done" + +xinit -- -dpi 96 >/dev/tty2 2>&1 + +if [ $proxdebug -ne 0 ]; then + echo "Debugging mode (type exit or CTRL-D to reboot)" + debugsh +fi + +echo "Installation done, rebooting... " +#mdadm -S /dev/md0 >/dev/tty2 2>&1 +real_reboot + +# never reached +exit 0 diff --git a/xinitrc b/xinitrc new file mode 100644 index 0000000..9d39c01 --- /dev/null +++ b/xinitrc @@ -0,0 +1,4 @@ +/usr/bin/xrdb -load /.Xdefaults +/usr/bin/X11/xsetroot -solid grey +openbox & +/usr/bin/proxinstall diff --git a/xorg.conf.fbdev b/xorg.conf.fbdev new file mode 100644 index 0000000..8de7826 --- /dev/null +++ b/xorg.conf.fbdev @@ -0,0 +1,213 @@ +Section "ServerLayout" + Identifier "Default Layout" + Screen "Screen0" + InputDevice "Keyboard0" + InputDevice "USB Mouse" "CorePointer" +EndSection + +Section "ServerFlags" + Option "AllowMouseOpenFail" "true" +EndSection + +Section "Module" + Load "bitmap" + Load "dbe" + Load "ddc" + Load "dri" + Load "freetype" + Load "glx" + Load "int10" + Load "record" + Load "type1" + Load "vbe" + Load "extmod" + SubSection "extmod" + Option "omit xfree86-dga" + EndSubSection +EndSection + +Section "InputDevice" + Identifier "Keyboard0" + Driver "kbd" + Option "CoreKeyboard" + Option "XkbRules" "xorg" + Option "XkbModel" "pc105" + Option "XkbLayout" "us" +EndSection + +Section "InputDevice" + Identifier "Serial Mouse" + Driver "mouse" + Option "Protocol" "Microsoft" + Option "Device" "/dev/ttyS0" + Option "Emulate3Buttons" "true" + Option "Emulate3Timeout" "70" + Option "SendCoreEvents" "true" +EndSection + +Section "InputDevice" + Identifier "PS/2 Mouse" + Driver "mouse" + Option "Protocol" "auto" + Option "ZAxisMapping" "4 5" + Option "Device" "/dev/psaux" + Option "Emulate3Buttons" "true" + Option "Emulate3Timeout" "70" + Option "SendCoreEvents" "true" +EndSection + +Section "InputDevice" + Identifier "USB Mouse" + Driver "mouse" + Option "Device" "/dev/input/mice" + Option "SendCoreEvents" "true" + Option "Protocol" "auto" + Option "ZAxisMapping" "4 5" + Option "Buttons" "5" +EndSection + +Section "Device" + Identifier "Card0" + Driver "fbdev" +EndSection + +Section "Screen" + Identifier "Screen0" + Device "Card0" + Monitor "Monitor0" + + DefaultDepth 16 + SubSection "Display" + Depth 16 + Modes "1280x1024" "1152x864" "1024x768" "800x600" "640x480" + EndSubSection +EndSection + +Section "DRI" + Mode 0666 +EndSection + +Section "Monitor" + Identifier "Monitor0" + Option "DPMS" "true" + HorizSync 28.0 - 96.0 # Warning: This may fry old Monitors + VertRefresh 50.0 - 75.0 # Very conservative. May flicker. + # Default modes from + # "VESA and Industry Standards and Guide for Computer Display Monitor + # Timing", version 1.0, revision 0.8, adopted September 17, 1998. + # $XFree86: xc/programs/Xserver/hw/xfree86/etc/vesamodes,v 1.4 1999/11/18 16:52:17 tsi Exp $ + # 640x350 @ 85Hz (VESA) hsync: 37.9kHz + ModeLine "640x350" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync + # 640x400 @ 85Hz (VESA) hsync: 37.9kHz + ModeLine "640x400" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync + # 720x400 @ 85Hz (VESA) hsync: 37.9kHz + ModeLine "720x400" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync + # 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz + ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync + # 640x480 @ 72Hz (VESA) hsync: 37.9kHz + ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync + # 640x480 @ 75Hz (VESA) hsync: 37.5kHz + ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync + # 640x480 @ 85Hz (VESA) hsync: 43.3kHz + ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync + # 800x600 @ 56Hz (VESA) hsync: 35.2kHz + ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync + # 800x600 @ 60Hz (VESA) hsync: 37.9kHz + ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync + # 800x600 @ 72Hz (VESA) hsync: 48.1kHz + ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync + # 800x600 @ 75Hz (VESA) hsync: 46.9kHz + ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync + # 800x600 @ 85Hz (VESA) hsync: 53.7kHz + ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync + # 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz + ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace + # 1024x768 @ 60Hz (VESA) hsync: 48.4kHz + ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync + # 1024x768 @ 70Hz (VESA) hsync: 56.5kHz + ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync + # 1024x768 @ 75Hz (VESA) hsync: 60.0kHz + ModeLine "1024x768" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync + # 1024x768 @ 85Hz (VESA) hsync: 68.7kHz + ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync + # 1152x864 @ 75Hz (VESA) hsync: 67.5kHz + ModeLine "1152x864" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync + # 1280x960 @ 60Hz (VESA) hsync: 60.0kHz + ModeLine "1280x960" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync + # 1280x960 @ 85Hz (VESA) hsync: 85.9kHz + ModeLine "1280x960" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync + # 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz + ModeLine "1280x1024" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync + # 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz + ModeLine "1280x1024" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync + # 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz + ModeLine "1280x1024" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync + # 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz + ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz + ModeLine "1600x1200" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz + ModeLine "1600x1200" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz + ModeLine "1600x1200" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz + ModeLine "1600x1200" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz + ModeLine "1792x1344" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync + # 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz + ModeLine "1792x1344" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync + # 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz + ModeLine "1856x1392" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync + # 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz + ModeLine "1856x1392" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync + # 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz + ModeLine "1920x1440" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync + # 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz + ModeLine "1920x1440" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync + # Additional modelines + ModeLine "1800x1440" 230 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync + ModeLine "1800x1440" 250 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync + # Extended modelines with GTF timings + # 640x480 @ 100.00 Hz (GTF) hsync: 50.90 kHz; pclk: 43.16 MHz + ModeLine "640x480" 43.16 640 680 744 848 480 481 484 509 -HSync +Vsync + # 768x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 34.96 MHz + ModeLine "768x576" 34.96 768 792 872 976 576 577 580 597 -HSync +Vsync + # 768x576 @ 72.00 Hz (GTF) hsync: 43.27 kHz; pclk: 42.93 MHz + ModeLine "768x576" 42.93 768 800 880 992 576 577 580 601 -HSync +Vsync + # 768x576 @ 75.00 Hz (GTF) hsync: 45.15 kHz; pclk: 45.51 MHz + ModeLine "768x576" 45.51 768 808 888 1008 576 577 580 602 -HSync +Vsync + # 768x576 @ 85.00 Hz (GTF) hsync: 51.42 kHz; pclk: 51.84 MHz + ModeLine "768x576" 51.84 768 808 888 1008 576 577 580 605 -HSync +Vsync + # 768x576 @ 100.00 Hz (GTF) hsync: 61.10 kHz; pclk: 62.57 MHz + ModeLine "768x576" 62.57 768 816 896 1024 576 577 580 611 -HSync +Vsync + # 800x600 @ 100.00 Hz (GTF) hsync: 63.60 kHz; pclk: 68.18 MHz + ModeLine "800x600" 68.18 800 848 936 1072 600 601 604 636 -HSync +Vsync + # 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz + ModeLine "1024x768" 113.31 1024 1096 1208 1392 768 769 772 814 -HSync +Vsync + # 1152x864 @ 60.00 Hz (GTF) hsync: 53.70 kHz; pclk: 81.62 MHz + ModeLine "1152x864" 81.62 1152 1216 1336 1520 864 865 868 895 -HSync +Vsync + # 1152x864 @ 85.00 Hz (GTF) hsync: 77.10 kHz; pclk: 119.65 MHz + ModeLine "1152x864" 119.65 1152 1224 1352 1552 864 865 868 907 -HSync +Vsync + # 1152x864 @ 100.00 Hz (GTF) hsync: 91.50 kHz; pclk: 143.47 MHz + ModeLine "1152x864" 143.47 1152 1232 1360 1568 864 865 868 915 -HSync +Vsync + # 1280x960 @ 72.00 Hz (GTF) hsync: 72.07 kHz; pclk: 124.54 MHz + ModeLine "1280x960" 124.54 1280 1368 1504 1728 960 961 964 1001 -HSync +Vsync + # 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz + ModeLine "1280x960" 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync + # 1280x960 @ 100.00 Hz (GTF) hsync: 101.70 kHz; pclk: 178.99 MHz + ModeLine "1280x960" 178.99 1280 1376 1520 1760 960 961 964 1017 -HSync +Vsync + # 1280x1024 @ 100.00 Hz (GTF) hsync: 108.50 kHz; pclk: 190.96 MHz + ModeLine "1280x1024" 190.96 1280 1376 1520 1760 1024 1025 1028 1085 -HSync +Vsync + # 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz + ModeLine "1400x1050" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync + # 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz + ModeLine "1400x1050" 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync + # 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz + ModeLine "1400x1050" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync + # 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz + ModeLine "1400x1050" 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync + # 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz + ModeLine "1400x1050" 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync + # 1600x1200 @ 100.00 Hz (GTF) hsync: 127.10 kHz; pclk: 280.64 MHz + ModeLine "1600x1200" 280.64 1600 1728 1904 2208 1200 1201 1204 1271 -HSync +Vsync +EndSection -- 2.39.2