diff options
author | Gunnar Sletta <gunnar.sletta@nokia.com> | 2011-09-13 08:54:45 +0200 |
---|---|---|
committer | Gunnar Sletta <gunnar.sletta@nokia.com> | 2011-09-13 08:54:45 +0200 |
commit | b62bd0584a7872b6917917009b707785b3abd077 (patch) | |
tree | 9981f274712c098cabbff0c4667672a3934e5393 /tests/auto/gui/image | |
parent | 5e10745dca1d10025404a9f268f03ae697fb10cc (diff) | |
parent | 97baad65f65783d2b5ff938f6217aec9434f2e5f (diff) |
Merge branch 'refactor'
Conflicts:
mkspecs/qws/linux-lsb-g++/qmake.conf
src/gui/image/qpixmap_mac.cpp
src/gui/painting/qpaintengine_x11.cpp
src/gui/painting/qtessellator.cpp
src/gui/text/qfontengine_qws.cpp
src/gui/text/qfontengine_x11.cpp
src/gui/widgets/qlinecontrol.cpp
src/opengl/qgl.h
src/opengl/qgl_x11egl.cpp
src/plugins/plugins.pro
Change-Id: If52dcd55cd55f2983a756c2f843967702b60a310
Diffstat (limited to 'tests/auto/gui/image')
257 files changed, 17260 insertions, 0 deletions
diff --git a/tests/auto/gui/image/image.pro b/tests/auto/gui/image/image.pro new file mode 100644 index 0000000000..fe089f5e75 --- /dev/null +++ b/tests/auto/gui/image/image.pro @@ -0,0 +1,18 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qimagereader \ + qicoimageformat \ + qpixmap \ + qpixmapcache \ + qimage \ + qpixmapfilter \ + qimageiohandler \ + qimagewriter \ + qmovie \ + qvolatileimage \ + qicon \ + qpicture \ + +!contains(QT_CONFIG, private_tests): SUBDIRS -= \ + qpixmapcache \ + diff --git a/tests/auto/gui/image/qicoimageformat/.gitignore b/tests/auto/gui/image/qicoimageformat/.gitignore new file mode 100644 index 0000000000..9f673c5635 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/.gitignore @@ -0,0 +1 @@ +tst_qicoimageformat diff --git a/tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.ico b/tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.ico Binary files differnew file mode 100644 index 0000000000..96087612fb --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICO b/tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICO Binary files differnew file mode 100644 index 0000000000..e9551d6390 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICO diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.ico Binary files differnew file mode 100644 index 0000000000..3368d3634a --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/App.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/App.ico Binary files differnew file mode 100644 index 0000000000..03b80a68f8 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/App.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.ico Binary files differnew file mode 100644 index 0000000000..8da119efdd --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/Qt.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/Qt.ico Binary files differnew file mode 100644 index 0000000000..fef1dee146 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/Qt.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.ico Binary files differnew file mode 100644 index 0000000000..d05782cce9 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICO b/tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICO Binary files differnew file mode 100644 index 0000000000..5563beec8c --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICO diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.ico Binary files differnew file mode 100644 index 0000000000..7a8ab39f56 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.ico Binary files differnew file mode 100644 index 0000000000..c2b48f8d99 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.ico Binary files differnew file mode 100644 index 0000000000..e78a15c42b --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.ico Binary files differnew file mode 100644 index 0000000000..893ceb254c --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.ico diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.ico Binary files differnew file mode 100644 index 0000000000..3e02a53e58 --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.ico diff --git a/tests/auto/gui/image/qicoimageformat/qicoimageformat.pro b/tests/auto/gui/image/qicoimageformat/qicoimageformat.pro new file mode 100644 index 0000000000..c150c9af9f --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/qicoimageformat.pro @@ -0,0 +1,28 @@ +load(qttest_p4) +SOURCES+= tst_qicoimageformat.cpp + +wince*: { + DEFINES += SRCDIR=\\\".\\\" + addFiles.files = icons + addFiles.path = . + CONFIG(debug, debug|release):{ + addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qico4d.dll + } else { + addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qico4.dll + } + addPlugins.path = imageformats + DEPLOYMENT += addFiles addPlugins +} else:symbian { + addFiles.files = icons + addFiles.path = . + DEPLOYMENT += addFiles + qt_not_deployed { + addPlugins.files = qico.dll + addPlugins.path = imageformats + DEPLOYMENT += addPlugins + } + TARGET.UID3 = 0xE0340004 + DEFINES += SYMBIAN_SRCDIR_UID=$$lower($$replace(TARGET.UID3,"0x","")) +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} diff --git a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp new file mode 100644 index 0000000000..3aace12fdb --- /dev/null +++ b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp @@ -0,0 +1,338 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <QtTest/QtTest> +#include <QtGui> +#include <QtCore> + +#if defined(Q_OS_SYMBIAN) +# define STRINGIFY(x) #x +# define TOSTRING(x) STRINGIFY(x) +# define SRCDIR "C:/Private/" TOSTRING(SYMBIAN_SRCDIR_UID) "/" +#endif + +class tst_QIcoImageFormat : public QObject +{ + Q_OBJECT + +public: + tst_QIcoImageFormat(); + virtual ~tst_QIcoImageFormat(); + + +public slots: + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); +private slots: + void format(); + void canRead_data(); + void canRead(); + void SequentialFile_data(); + void SequentialFile(); + void imageCount_data(); + void imageCount(); + void jumpToNextImage_data(); + void jumpToNextImage(); + void loopCount_data(); + void loopCount(); + void nextImageDelay_data(); + void nextImageDelay(); + void pngCompression_data(); + void pngCompression(); + +private: + QString m_IconPath; +}; + + +tst_QIcoImageFormat::tst_QIcoImageFormat() +{ + m_IconPath = QLatin1String(SRCDIR) + "/icons"; + qDebug() << m_IconPath; +} + +tst_QIcoImageFormat::~tst_QIcoImageFormat() +{ + +} + +void tst_QIcoImageFormat::init() +{ + +} + +void tst_QIcoImageFormat::cleanup() +{ + +} + +void tst_QIcoImageFormat::initTestCase() +{ + +} + +void tst_QIcoImageFormat::cleanupTestCase() +{ + +} + +void tst_QIcoImageFormat::format() +{ + QImageReader reader(m_IconPath + "/valid/35FLOPPY.ICO", "ico"); + QByteArray fmt = reader.format(); + QCOMPARE(const_cast<const char*>(fmt.data()), "ico" ); +} + +void tst_QIcoImageFormat::canRead_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("isValid"); + + QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 1; + QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 1; + QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1; + QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 1; + QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 1; + QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 1; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 1; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 1; + QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0; + QTest::newRow("103x16px, 24BPP") << "valid/trolltechlogo_tiny.ico" << 1; + QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 1; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 1; +} + +void tst_QIcoImageFormat::canRead() +{ + QFETCH(QString, fileName); + QFETCH(int, isValid); + + QImageReader reader(m_IconPath + "/" + fileName); + QCOMPARE(reader.canRead(), (isValid == 0 ? false : true)); +} + +class QSequentialFile : public QFile +{ +public: + QSequentialFile(const QString &name) : QFile(name) {} + + virtual ~QSequentialFile() {} + + virtual bool isSequential() const { + return true; + } + +}; + +void tst_QIcoImageFormat::SequentialFile_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("isValid"); + + QTest::newRow("floppy (16,32 pixels - 16 colors)") << "valid/35FLOPPY.ICO" << 1; + + QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0; + + +} + +void tst_QIcoImageFormat::SequentialFile() +{ + QFETCH(QString, fileName); + QFETCH(int, isValid); + + QSequentialFile *file = new QSequentialFile(m_IconPath + "/" + fileName); + QVERIFY(file); + QVERIFY(file->open(QFile::ReadOnly)); + QImageReader reader(file); + + // Perform the check twice. If canRead() does not restore the sequential device back to its original state, + // it will fail on the second try. + QCOMPARE(reader.canRead(), (isValid == 0 ? false : true)); + QCOMPARE(reader.canRead(), (isValid == 0 ? false : true)); + file->close(); +} + + +void tst_QIcoImageFormat::imageCount_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("count"); + + QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2; + QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6; + QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1; + QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9; + QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3; + QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3; + QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0; + QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4; + +} + +void tst_QIcoImageFormat::imageCount() +{ + QFETCH(QString, fileName); + QFETCH(int, count); + + QImageReader reader(m_IconPath + "/" + fileName); + QCOMPARE(reader.imageCount(), count); + +} + +void tst_QIcoImageFormat::jumpToNextImage_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("count"); + + QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2; + QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6; + QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1; + QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9; + QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3; + QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3; + QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4; +} + +void tst_QIcoImageFormat::jumpToNextImage() +{ + QFETCH(QString, fileName); + QFETCH(int, count); + + QImageReader reader(m_IconPath + "/" + fileName); + bool bJumped = reader.jumpToImage(0); + while (bJumped) { + count--; + bJumped = reader.jumpToNextImage(); + } + QCOMPARE(count, 0); +} + +void tst_QIcoImageFormat::loopCount_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("count"); + + QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 0; + QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0; +} + +void tst_QIcoImageFormat::loopCount() +{ + QFETCH(QString, fileName); + QFETCH(int, count); + + QImageReader reader(m_IconPath + "/" + fileName); + QCOMPARE(reader.loopCount(), count); +} + +void tst_QIcoImageFormat::nextImageDelay_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("count"); + + QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2; + QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6; + QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1; + QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9; + QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3; + QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3; + QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3; + QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << -1; + QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4; +} + +void tst_QIcoImageFormat::nextImageDelay() +{ + QFETCH(QString, fileName); + QFETCH(int, count); + + QImageReader reader(m_IconPath + "/" + fileName); + if (count == -1) { + QCOMPARE(reader.nextImageDelay(), 0); + } else { + int i; + for (i = 0; i < count; i++) { + QVERIFY(reader.jumpToImage(i)); + QCOMPARE(reader.nextImageDelay(), 0); + } + } +} + +void tst_QIcoImageFormat::pngCompression_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("index"); + QTest::addColumn<int>("width"); + QTest::addColumn<int>("height"); + + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4 << 256 << 256; +} + +void tst_QIcoImageFormat::pngCompression() +{ + QFETCH(QString, fileName); + QFETCH(int, index); + QFETCH(int, width); + QFETCH(int, height); + + QImageReader reader(m_IconPath + "/" + fileName); + + QImage image; + reader.jumpToImage(index); + reader.read(&image); + + QCOMPARE(image.width(), width); + QCOMPARE(image.height(), height); +} + +QTEST_MAIN(tst_QIcoImageFormat) +#include "tst_qicoimageformat.moc" + diff --git a/tests/auto/gui/image/qicon/.gitignore b/tests/auto/gui/image/qicon/.gitignore new file mode 100644 index 0000000000..c101ef9d28 --- /dev/null +++ b/tests/auto/gui/image/qicon/.gitignore @@ -0,0 +1 @@ +tst_qicon diff --git a/tests/auto/gui/image/qicon/heart.svg b/tests/auto/gui/image/qicon/heart.svg new file mode 100644 index 0000000000..8c982cd93c --- /dev/null +++ b/tests/auto/gui/image/qicon/heart.svg @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --><svg viewBox="100 200 550 500" height="841.88976pt" id="svg1" inkscape:version="0.40+cvs" sodipodi:docbase="C:\Documents and Settings\Jon Phillips\My Documents\projects\clipart-project\submissions" sodipodi:docname="heart-left-highlight.svg" sodipodi:version="0.32" width="595.27559pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"> +<metadata> +<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> +<cc:Work rdf:about=""> +<dc:title>Heart Left-Highlight</dc:title> +<dc:description>This is a normal valentines day heart.</dc:description> +<dc:subject> +<rdf:Bag> +<rdf:li>holiday</rdf:li> +<rdf:li>valentines</rdf:li> +<rdf:li></rdf:li> +<rdf:li>valentine</rdf:li> +<rdf:li>hash(0x8a091c0)</rdf:li> +<rdf:li>hash(0x8a0916c)</rdf:li> +<rdf:li>signs_and_symbols</rdf:li> +<rdf:li>hash(0x8a091f0)</rdf:li> +<rdf:li>day</rdf:li> +</rdf:Bag> +</dc:subject> +<dc:publisher> +<cc:Agent rdf:about="http://www.openclipart.org"> +<dc:title>Jon Phillips</dc:title> +</cc:Agent> +</dc:publisher> +<dc:creator> +<cc:Agent> +<dc:title>Jon Phillips</dc:title> +</cc:Agent> +</dc:creator> +<dc:rights> +<cc:Agent> +<dc:title>Jon Phillips</dc:title> +</cc:Agent> +</dc:rights> +<dc:date></dc:date> +<dc:format>image/svg+xml</dc:format> +<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> +<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/> +<dc:language>en</dc:language> +</cc:Work> +<cc:License rdf:about="http://web.resource.org/cc/PublicDomain"> +<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/> +<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/> +<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/> +</cc:License> +</rdf:RDF> +</metadata> +<defs id="defs3"/> +<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="549.40674" inkscape:cy="596.00159" inkscape:document-units="px" inkscape:guide-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="615" inkscape:window-width="866" inkscape:window-x="88" inkscape:window-y="116" inkscape:zoom="0.35000000" pagecolor="#ffffff" showguides="true"/> +<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> +<path d="M 263.41570,235.14588 C 197.17570,235.14588 143.41575,288.90587 143.41575,355.14588 C 143.41575,489.90139 279.34890,525.23318 371.97820,658.45392 C 459.55244,526.05056 600.54070,485.59932 600.54070,355.14588 C 600.54070,288.90588 546.78080,235.14587 480.54070,235.14588 C 432.49280,235.14588 391.13910,263.51631 371.97820,304.33338 C 352.81740,263.51630 311.46370,235.14587 263.41570,235.14588 z " id="path7" sodipodi:nodetypes="ccccccc" style="fill:#e60000;fill-opacity:1.0000000;stroke:#000000;stroke-width:18.700001;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"/> +<path d="M 265.00000,253.59375 C 207.04033,253.59375 160.00000,300.63407 160.00000,358.59375 C 160.00000,476.50415 278.91857,507.43251 359.96875,624.00000 C 366.52868,614.08205 220.00000,478.47309 220.00000,378.59375 C 220.00000,320.63407 267.04033,273.59375 325.00000,273.59375 C 325.50453,273.59375 325.99718,273.64912 326.50000,273.65625 C 309.22436,261.07286 288.00557,253.59374 265.00000,253.59375 z " id="path220" sodipodi:nodetypes="ccccccc" style="fill:#e6e6e6;fill-opacity:0.64556962;stroke:none;stroke-width:18.700001;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"/> +</g> +</svg> diff --git a/tests/auto/gui/image/qicon/heart.svgz b/tests/auto/gui/image/qicon/heart.svgz Binary files differnew file mode 100644 index 0000000000..0f0913ffa7 --- /dev/null +++ b/tests/auto/gui/image/qicon/heart.svgz diff --git a/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png Binary files differnew file mode 100644 index 0000000000..18b7c6781e --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png diff --git a/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png Binary files differnew file mode 100644 index 0000000000..d676ffd463 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png diff --git a/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png Binary files differnew file mode 100644 index 0000000000..85daef3b0b --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png diff --git a/tests/auto/gui/image/qicon/icons/testtheme/index.theme b/tests/auto/gui/image/qicon/icons/testtheme/index.theme new file mode 100644 index 0000000000..e18736ab43 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/testtheme/index.theme @@ -0,0 +1,492 @@ +[Icon Theme] +_Name=Test +_Comment=Test Theme +Inherits=crystalsvg, themeparent +Example=x-directory-normal + +# KDE Specific Stuff +DisplayDepth=32 +LinkOverlay=link_overlay +LockOverlay=lock_overlay +ZipOverlay=zip_overlay +DesktopDefault=48 +DesktopSizes=16,22,32,48,64,72,96,128 +ToolbarDefault=22 +ToolbarSizes=16,22,32,48 +MainToolbarDefault=22 +MainToolbarSizes=16,22,32,48 +SmallDefault=16 +SmallSizes=16 +PanelDefault=32 +PanelSizes=16,22,32,48,64,72,96,128 + +# Directory list +Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/mimetypes,22x22/places,22x22/status,24x24/actions,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/mimetypes,24x24/places,24x24/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/mimetypes,64x64/places,64x64/status,72x72/actions,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/mimetypes,72x72/places,72x72/status,96x96/actions,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/mimetypes,96x96/places,96x96/status,128x128/actions,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/mimetypes,128x128/places,128x128/status,scalable/actions,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/mimetypes,scalable/places,scalable/status + +[16x16/actions] +Size=16 +Context=Actions +Type=Fixed + +[16x16/apps] +Size=16 +Context=Applications +Type=Fixed + +[16x16/categories] +Size=16 +Context=Categories +Type=Fixed + +[16x16/devices] +Size=16 +Context=Devices +Type=Fixed + +[16x16/emblems] +Size=16 +Context=Emblems +Type=Fixed + +[16x16/emotes] +Size=16 +Context=Emotes +Type=Fixed + +[16x16/mimetypes] +Size=16 +Context=MimeTypes +Type=Fixed + +[16x16/places] +Size=16 +Context=Places +Type=Fixed + +[16x16/status] +Size=16 +Context=Status +Type=Fixed + +[22x22/actions] +Size=22 +Context=Actions +Type=Fixed + +[22x22/apps] +Size=22 +Context=Applications +Type=Fixed + +[22x22/categories] +Size=22 +Context=Categories +Type=Fixed + +[22x22/devices] +Size=22 +Context=Devices +Type=Fixed + +[22x22/emblems] +Size=22 +Context=Emblems +Type=Fixed + +[22x22/emotes] +Size=22 +Context=Emotes +Type=Fixed + +[22x22/mimetypes] +Size=22 +Context=MimeTypes +Type=Fixed + +[22x22/places] +Size=22 +Context=Places +Type=Fixed + +[22x22/status] +Size=22 +Context=Status +Type=Fixed + +[24x24/actions] +Size=24 +Context=Actions +Type=Fixed + +[24x24/apps] +Size=24 +Context=Applications +Type=Fixed + +[24x24/categories] +Size=24 +Context=Categories +Type=Fixed + +[24x24/devices] +Size=24 +Context=Devices +Type=Fixed + +[24x24/emblems] +Size=24 +Context=Emblems +Type=Fixed + +[24x24/emotes] +Size=24 +Context=Emotes +Type=Fixed + +[24x24/mimetypes] +Size=24 +Context=MimeTypes +Type=Fixed + +[24x24/places] +Size=24 +Context=Places +Type=Fixed + +[24x24/status] +Size=24 +Context=Status +Type=Fixed + +[32x32/actions] +Size=32 +Context=Actions +Type=Fixed + +[32x32/apps] +Size=32 +Context=Applications +Type=Fixed + +[32x32/categories] +Size=32 +Context=Categories +Type=Fixed + +[32x32/devices] +Size=32 +Context=Devices +Type=Fixed + +[32x32/emblems] +Size=32 +Context=Emblems +Type=Fixed + +[32x32/emotes] +Size=32 +Context=Emotes +Type=Fixed + +[32x32/mimetypes] +Size=32 +Context=MimeTypes +Type=Fixed + +[32x32/places] +Size=32 +Context=Places +Type=Fixed + +[32x32/status] +Size=32 +Context=Status +Type=Fixed + +[48x48/actions] +Size=48 +Context=Actions +Type=Fixed + +[48x48/apps] +Size=48 +Context=Applications +Type=Fixed + +[48x48/categories] +Size=48 +Context=Categories +Type=Fixed + +[48x48/devices] +Size=48 +Context=Devices +Type=Fixed + +[48x48/emblems] +Size=48 +Context=Emblems +Type=Fixed + +[48x48/emotes] +Size=48 +Context=Emotes +Type=Fixed + +[48x48/mimetypes] +Size=48 +Context=MimeTypes +Type=Fixed + +[48x48/places] +Size=48 +Context=Places +Type=Fixed + +[48x48/status] +Size=48 +Context=Status +Type=Fixed + +[64x64/actions] +Size=64 +Context=Actions +Type=Fixed + +[64x64/apps] +Size=64 +Context=Applications +Type=Fixed + +[64x64/categories] +Size=64 +Context=Categories +Type=Fixed + +[64x64/devices] +Size=64 +Context=Devices +Type=Fixed + +[64x64/emblems] +Size=64 +Context=Emblems +Type=Fixed + +[64x64/emotes] +Size=64 +Context=Emotes +Type=Fixed + +[64x64/mimetypes] +Size=64 +Context=MimeTypes +Type=Fixed + +[64x64/places] +Size=64 +Context=Places +Type=Fixed + +[64x64/status] +Size=64 +Context=Status +Type=Fixed + +[72x72/actions] +Size=72 +Context=Actions +Type=Fixed + +[72x72/apps] +Size=72 +Context=Applications +Type=Fixed + +[72x72/categories] +Size=72 +Context=Categories +Type=Fixed + +[72x72/devices] +Size=72 +Context=Devices +Type=Fixed + +[72x72/emblems] +Size=72 +Context=Emblems +Type=Fixed + +[72x72/emotes] +Size=72 +Context=Emotes +Type=Fixed + +[72x72/mimetypes] +Size=72 +Context=MimeTypes +Type=Fixed + +[72x72/places] +Size=72 +Context=Places +Type=Fixed + +[72x72/status] +Size=72 +Context=Status +Type=Fixed + +[96x96/actions] +Size=96 +Context=Actions +Type=Fixed + +[96x96/apps] +Size=96 +Context=Applications +Type=Fixed + +[96x96/categories] +Size=96 +Context=Categories +Type=Fixed + +[96x96/devices] +Size=96 +Context=Devices +Type=Fixed + +[96x96/emblems] +Size=96 +Context=Emblems +Type=Fixed + +[96x96/emotes] +Size=96 +Context=Emotes +Type=Fixed + +[96x96/mimetypes] +Size=96 +Context=MimeTypes +Type=Fixed + +[96x96/places] +Size=96 +Context=Places +Type=Fixed + +[96x96/status] +Size=96 +Context=Status +Type=Fixed + +[128x128/actions] +Size=128 +Context=Actions +Type=Fixed + +[128x128/apps] +Size=128 +Context=Applications +Type=Fixed + +[128x128/categories] +Size=128 +Context=Categories +Type=Fixed + +[128x128/devices] +Size=128 +Context=Devices +Type=Fixed + +[128x128/emblems] +Size=128 +Context=Emblems +Type=Fixed + +[128x128/emotes] +Size=128 +Context=Emotes +Type=Fixed + +[128x128/mimetypes] +Size=128 +Context=MimeTypes +Type=Fixed + +[128x128/places] +Size=128 +Context=Places +Type=Fixed + +[128x128/status] +Size=128 +Context=Status +Type=Fixed + +[scalable/actions] +Size=48 +Context=Actions +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/apps] +Size=48 +Context=Applications +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/categories] +Size=48 +Context=Categories +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/devices] +Size=48 +Context=Devices +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/emblems] +Size=48 +Context=Emblems +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/emotes] +Size=48 +Context=Emotes +Type=Scalable +Minsize=32 +MaxSize=256 + +[scalable/mimetypes] +Size=48 +Context=MimeTypes +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/places] +Size=48 +Context=Places +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/status] +Size=48 +Context=Status +Type=Scalable +MinSize=32 +MaxSize=256 diff --git a/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg b/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg new file mode 100644 index 0000000000..4cb14f82f0 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg @@ -0,0 +1,425 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + inkscape:export-ydpi="90.000000" + inkscape:export-xdpi="90.000000" + inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png" + width="48px" + height="48px" + id="svg11300" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions" + sodipodi:docname="appointment-new.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs3"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 24 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="48 : 24 : 1" + inkscape:persp3d-origin="24 : 16 : 1" + id="perspective59" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5204"> + <stop + style="stop-color:#c4a000;stop-opacity:1;" + offset="0" + id="stop5206" /> + <stop + style="stop-color:#c4a000;stop-opacity:0;" + offset="1" + id="stop5208" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5196"> + <stop + style="stop-color:#c4a000;stop-opacity:1;" + offset="0" + id="stop5198" /> + <stop + style="stop-color:#c4a000;stop-opacity:0;" + offset="1" + id="stop5200" /> + </linearGradient> + <linearGradient + id="linearGradient12512"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop12513" /> + <stop + style="stop-color:#fff520;stop-opacity:0.89108908;" + offset="0.50000000" + id="stop12517" /> + <stop + style="stop-color:#fff300;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop12514" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient12512" + id="radialGradient278" + gradientUnits="userSpaceOnUse" + cx="55.000000" + cy="125.00000" + fx="55.000000" + fy="125.00000" + r="14.375000" /> + <linearGradient + id="linearGradient10653"> + <stop + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop10655" /> + <stop + style="stop-color:#9193af;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop10657" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop42176" /> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop42178" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + style="stop-color:#fffffd;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2147" /> + <stop + style="stop-color:#cbcbc9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2149" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + id="stop37937" + offset="0.0000000" + style="stop-color:#9497b3;stop-opacity:1.0000000;" /> + <stop + id="stop37939" + offset="1.0000000" + style="stop-color:#4c4059;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2152"> + <stop + id="stop2154" + offset="0.0000000" + style="stop-color:#9aa29a;stop-opacity:1.0000000;" /> + <stop + id="stop2156" + offset="1.0000000" + style="stop-color:#b5beb5;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3816"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3818" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3820" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient3822" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2152" + id="linearGradient4307" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)" + x1="8.9156475" + y1="37.197018" + x2="9.8855033" + y2="52.090678" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient4309" + gradientUnits="userSpaceOnUse" + cx="11.329200" + cy="10.583970" + fx="11.329200" + fy="10.583970" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient4311" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient4313" + gradientUnits="userSpaceOnUse" + x1="6.3422160" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5196" + id="radialGradient5202" + cx="23.375" + cy="10.972863" + fx="23.375" + fy="10.972863" + r="3.3478092" + gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5204" + id="linearGradient5210" + x1="19.667364" + y1="4.2570662" + x2="20.329933" + y2="5.2845874" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5212" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + </defs> + <sodipodi:namedview + stroke="#c4a000" + fill="#babdb6" + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="0.25490196" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="11.313708" + inkscape:cx="13.2248" + inkscape:cy="25.106052" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:showpageshadow="false" + inkscape:window-width="833" + inkscape:window-height="772" + inkscape:window-x="305" + inkscape:window-y="76" /> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <dc:source>http://jimmac.musichall.cz</dc:source> + <cc:license + rdf:resource="http://creativecommons.org/licenses/publicdomain/" /> + <dc:title>New Appointment</dc:title> + <dc:subject> + <rdf:Bag> + <rdf:li>appointment</rdf:li> + <rdf:li>new</rdf:li> + <rdf:li>meeting</rdf:li> + <rdf:li>rvsp</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/publicdomain/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4318" + style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" /> + <path + sodipodi:nodetypes="cccc" + id="path14341" + d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z " + style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="cccc" + id="path18921" + d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z " + style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" /> + <path + transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path27786" + style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path35549" + style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path4120" + sodipodi:cx="23.375" + sodipodi:cy="11.875" + sodipodi:rx="8.5" + sodipodi:ry="8.5" + d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z" + transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)" + sodipodi:start="3.8052902" + sodipodi:end="4.7074114" /> + <path + transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)" + d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z" + sodipodi:ry="1.21875" + sodipodi:rx="1.21875" + sodipodi:cy="17.28125" + sodipodi:cx="15.1875" + id="path34778" + style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="arc" /> + <path + id="path35559" + d="M 22.176614,20.718014 L 13.155702,13.140282" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + id="path35561" + d="M 19.408614,29.776506 L 22.368655,25.283228" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:nodetypes="cc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35563" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35565" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35567" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35569" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path10651" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block" + id="path12511" + sodipodi:cx="55" + sodipodi:cy="125" + sodipodi:rx="14.375" + sodipodi:ry="14.375" + d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z" + transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)" + inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png" + inkscape:export-xdpi="33.852203" + inkscape:export-ydpi="33.852203" /> + </g> +</svg> diff --git a/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png Binary files differnew file mode 100644 index 0000000000..2098cfdf36 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png diff --git a/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png Binary files differnew file mode 100644 index 0000000000..18b7c6781e --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png diff --git a/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png Binary files differnew file mode 100644 index 0000000000..fad446cd92 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png diff --git a/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png Binary files differnew file mode 100644 index 0000000000..d676ffd463 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png diff --git a/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png Binary files differnew file mode 100644 index 0000000000..420139d307 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png diff --git a/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png Binary files differnew file mode 100644 index 0000000000..85daef3b0b --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png diff --git a/tests/auto/gui/image/qicon/icons/themeparent/index.theme b/tests/auto/gui/image/qicon/icons/themeparent/index.theme new file mode 100644 index 0000000000..e536a0bf2f --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/index.theme @@ -0,0 +1,492 @@ +[Icon Theme] +_Name=Test +_Comment=Test Theme +Inherits=gnome,crystalsvg +Example=x-directory-normal + +# KDE Specific Stuff +DisplayDepth=32 +LinkOverlay=link_overlay +LockOverlay=lock_overlay +ZipOverlay=zip_overlay +DesktopDefault=48 +DesktopSizes=16,22,32,48,64,72,96,128 +ToolbarDefault=22 +ToolbarSizes=16,22,32,48 +MainToolbarDefault=22 +MainToolbarSizes=16,22,32,48 +SmallDefault=16 +SmallSizes=16 +PanelDefault=32 +PanelSizes=16,22,32,48,64,72,96,128 + +# Directory list +Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/mimetypes,22x22/places,22x22/status,24x24/actions,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/mimetypes,24x24/places,24x24/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/mimetypes,64x64/places,64x64/status,72x72/actions,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/mimetypes,72x72/places,72x72/status,96x96/actions,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/mimetypes,96x96/places,96x96/status,128x128/actions,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/mimetypes,128x128/places,128x128/status,scalable/actions,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/mimetypes,scalable/places,scalable/status + +[16x16/actions] +Size=16 +Context=Actions +Type=Fixed + +[16x16/apps] +Size=16 +Context=Applications +Type=Fixed + +[16x16/categories] +Size=16 +Context=Categories +Type=Fixed + +[16x16/devices] +Size=16 +Context=Devices +Type=Fixed + +[16x16/emblems] +Size=16 +Context=Emblems +Type=Fixed + +[16x16/emotes] +Size=16 +Context=Emotes +Type=Fixed + +[16x16/mimetypes] +Size=16 +Context=MimeTypes +Type=Fixed + +[16x16/places] +Size=16 +Context=Places +Type=Fixed + +[16x16/status] +Size=16 +Context=Status +Type=Fixed + +[22x22/actions] +Size=22 +Context=Actions +Type=Fixed + +[22x22/apps] +Size=22 +Context=Applications +Type=Fixed + +[22x22/categories] +Size=22 +Context=Categories +Type=Fixed + +[22x22/devices] +Size=22 +Context=Devices +Type=Fixed + +[22x22/emblems] +Size=22 +Context=Emblems +Type=Fixed + +[22x22/emotes] +Size=22 +Context=Emotes +Type=Fixed + +[22x22/mimetypes] +Size=22 +Context=MimeTypes +Type=Fixed + +[22x22/places] +Size=22 +Context=Places +Type=Fixed + +[22x22/status] +Size=22 +Context=Status +Type=Fixed + +[24x24/actions] +Size=24 +Context=Actions +Type=Fixed + +[24x24/apps] +Size=24 +Context=Applications +Type=Fixed + +[24x24/categories] +Size=24 +Context=Categories +Type=Fixed + +[24x24/devices] +Size=24 +Context=Devices +Type=Fixed + +[24x24/emblems] +Size=24 +Context=Emblems +Type=Fixed + +[24x24/emotes] +Size=24 +Context=Emotes +Type=Fixed + +[24x24/mimetypes] +Size=24 +Context=MimeTypes +Type=Fixed + +[24x24/places] +Size=24 +Context=Places +Type=Fixed + +[24x24/status] +Size=24 +Context=Status +Type=Fixed + +[32x32/actions] +Size=32 +Context=Actions +Type=Fixed + +[32x32/apps] +Size=32 +Context=Applications +Type=Fixed + +[32x32/categories] +Size=32 +Context=Categories +Type=Fixed + +[32x32/devices] +Size=32 +Context=Devices +Type=Fixed + +[32x32/emblems] +Size=32 +Context=Emblems +Type=Fixed + +[32x32/emotes] +Size=32 +Context=Emotes +Type=Fixed + +[32x32/mimetypes] +Size=32 +Context=MimeTypes +Type=Fixed + +[32x32/places] +Size=32 +Context=Places +Type=Fixed + +[32x32/status] +Size=32 +Context=Status +Type=Fixed + +[48x48/actions] +Size=48 +Context=Actions +Type=Fixed + +[48x48/apps] +Size=48 +Context=Applications +Type=Fixed + +[48x48/categories] +Size=48 +Context=Categories +Type=Fixed + +[48x48/devices] +Size=48 +Context=Devices +Type=Fixed + +[48x48/emblems] +Size=48 +Context=Emblems +Type=Fixed + +[48x48/emotes] +Size=48 +Context=Emotes +Type=Fixed + +[48x48/mimetypes] +Size=48 +Context=MimeTypes +Type=Fixed + +[48x48/places] +Size=48 +Context=Places +Type=Fixed + +[48x48/status] +Size=48 +Context=Status +Type=Fixed + +[64x64/actions] +Size=64 +Context=Actions +Type=Fixed + +[64x64/apps] +Size=64 +Context=Applications +Type=Fixed + +[64x64/categories] +Size=64 +Context=Categories +Type=Fixed + +[64x64/devices] +Size=64 +Context=Devices +Type=Fixed + +[64x64/emblems] +Size=64 +Context=Emblems +Type=Fixed + +[64x64/emotes] +Size=64 +Context=Emotes +Type=Fixed + +[64x64/mimetypes] +Size=64 +Context=MimeTypes +Type=Fixed + +[64x64/places] +Size=64 +Context=Places +Type=Fixed + +[64x64/status] +Size=64 +Context=Status +Type=Fixed + +[72x72/actions] +Size=72 +Context=Actions +Type=Fixed + +[72x72/apps] +Size=72 +Context=Applications +Type=Fixed + +[72x72/categories] +Size=72 +Context=Categories +Type=Fixed + +[72x72/devices] +Size=72 +Context=Devices +Type=Fixed + +[72x72/emblems] +Size=72 +Context=Emblems +Type=Fixed + +[72x72/emotes] +Size=72 +Context=Emotes +Type=Fixed + +[72x72/mimetypes] +Size=72 +Context=MimeTypes +Type=Fixed + +[72x72/places] +Size=72 +Context=Places +Type=Fixed + +[72x72/status] +Size=72 +Context=Status +Type=Fixed + +[96x96/actions] +Size=96 +Context=Actions +Type=Fixed + +[96x96/apps] +Size=96 +Context=Applications +Type=Fixed + +[96x96/categories] +Size=96 +Context=Categories +Type=Fixed + +[96x96/devices] +Size=96 +Context=Devices +Type=Fixed + +[96x96/emblems] +Size=96 +Context=Emblems +Type=Fixed + +[96x96/emotes] +Size=96 +Context=Emotes +Type=Fixed + +[96x96/mimetypes] +Size=96 +Context=MimeTypes +Type=Fixed + +[96x96/places] +Size=96 +Context=Places +Type=Fixed + +[96x96/status] +Size=96 +Context=Status +Type=Fixed + +[128x128/actions] +Size=128 +Context=Actions +Type=Fixed + +[128x128/apps] +Size=128 +Context=Applications +Type=Fixed + +[128x128/categories] +Size=128 +Context=Categories +Type=Fixed + +[128x128/devices] +Size=128 +Context=Devices +Type=Fixed + +[128x128/emblems] +Size=128 +Context=Emblems +Type=Fixed + +[128x128/emotes] +Size=128 +Context=Emotes +Type=Fixed + +[128x128/mimetypes] +Size=128 +Context=MimeTypes +Type=Fixed + +[128x128/places] +Size=128 +Context=Places +Type=Fixed + +[128x128/status] +Size=128 +Context=Status +Type=Fixed + +[scalable/actions] +Size=48 +Context=Actions +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/apps] +Size=48 +Context=Applications +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/categories] +Size=48 +Context=Categories +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/devices] +Size=48 +Context=Devices +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/emblems] +Size=48 +Context=Emblems +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/emotes] +Size=48 +Context=Emotes +Type=Scalable +Minsize=32 +MaxSize=256 + +[scalable/mimetypes] +Size=48 +Context=MimeTypes +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/places] +Size=48 +Context=Places +Type=Scalable +MinSize=32 +MaxSize=256 + +[scalable/status] +Size=48 +Context=Status +Type=Scalable +MinSize=32 +MaxSize=256 diff --git a/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg new file mode 100644 index 0000000000..600a82c1b0 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg @@ -0,0 +1,389 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg1256" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions" + sodipodi:docname="address-book-new.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs3"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 24 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="48 : 24 : 1" + inkscape:persp3d-origin="24 : 16 : 1" + id="perspective58" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5060"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop5062" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5064" /> + </linearGradient> + <linearGradient + id="linearGradient5048"> + <stop + style="stop-color:black;stop-opacity:0;" + offset="0" + id="stop5050" /> + <stop + id="stop5056" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5052" /> + </linearGradient> + <linearGradient + id="linearGradient12512"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop12513" /> + <stop + style="stop-color:#fff520;stop-opacity:0.89108908;" + offset="0.50000000" + id="stop12517" /> + <stop + style="stop-color:#fff300;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop12514" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient12512" + id="radialGradient278" + gradientUnits="userSpaceOnUse" + cx="55.000000" + cy="125.00000" + fx="55.000000" + fy="125.00000" + r="14.375000" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2116"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2118" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2120" /> + </linearGradient> + <linearGradient + id="linearGradient2094"> + <stop + style="stop-color:#d6e3f0;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2096" /> + <stop + style="stop-color:#95b1cf;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2098" /> + </linearGradient> + <linearGradient + id="linearGradient2803"> + <stop + id="stop2805" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop2807" + offset="1.0000000" + style="stop-color:#cbcbcb;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2795"> + <stop + id="stop2797" + offset="0.0000000" + style="stop-color:#000000;stop-opacity:0.068627454;" /> + <stop + id="stop2799" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="4.9530048" + x2="41.219128" + y1="4.9530050" + x1="35.433035" + gradientTransform="matrix(0.254000,0.000000,1.822151e-16,3.759813,0.788629,0.148567)" + id="linearGradient2801" + xlink:href="#linearGradient2795" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="84.287079" + x2="10.219901" + y1="93.338043" + x1="10.496115" + gradientTransform="matrix(2.262742,0.000000,0.000000,0.441942,1.000000,-0.875000)" + id="linearGradient2813" + xlink:href="#linearGradient2803" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2094" + id="linearGradient2100" + gradientTransform="matrix(0.957750,0.000000,0.000000,1.027989,1.000000,-0.571911)" + x1="6.5871811" + y1="22.132999" + x2="14.511404" + y2="22.132999" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2116" + id="linearGradient2112" + gradientTransform="matrix(1.025428,0.000000,0.000000,0.957303,0.000000,-0.806758)" + x1="73.361984" + y1="26.652197" + x2="-2.7582901" + y2="21.270376" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5013" + gradientUnits="userSpaceOnUse" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5048" + id="linearGradient5016" + gradientUnits="userSpaceOnUse" + x1="302.85715" + y1="366.64789" + x2="302.85715" + y2="609.50507" + gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5020" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5048" + id="linearGradient5027" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" + x1="302.85715" + y1="366.64789" + x2="302.85715" + y2="609.50507" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5029" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5031" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="0.27843137" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1" + inkscape:cx="-111.52422" + inkscape:cy="10.167608" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="872" + inkscape:window-height="688" + inkscape:window-x="562" + inkscape:window-y="160" + fill="#ef2929" + stroke="#cc0000" + inkscape:showpageshadow="false" /> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Addess Book - New</dc:title> + <dc:date /> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <dc:source>http://jimmac.musichall.cz</dc:source> + <dc:subject> + <rdf:Bag> + <rdf:li>address</rdf:li> + <rdf:li>contact</rdf:li> + <rdf:li>book</rdf:li> + </rdf:Bag> + </dc:subject> + <cc:license + rdf:resource="http://creativecommons.org/licenses/publicdomain/" /> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/publicdomain/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + style="opacity:1;color:#000000;fill:#edd400;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 33.096456,4.6520202 L 40.521077,4.6520202 C 41.228184,4.6520202 41.758513,4.8287969 41.93529,5.71268 L 42.819174,12.606972 C 42.907562,13.667632 42.443523,14.021185 41.493349,14.021185 L 32.919679,14.021185 L 33.096456,4.6520202 z " + id="path21630" + sodipodi:nodetypes="ccccccc" /> + <path + sodipodi:nodetypes="ccccccc" + id="path21632" + d="M 34.10295,5.638875 L 40.463507,5.638875 C 40.771656,5.638875 40.940266,5.669037 40.986054,5.960473 L 41.777489,12.344449 C 41.847258,12.775421 41.959897,13.019804 41.637211,13.034341 L 33.963412,13.034341 L 34.10295,5.638875 z " + style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="ccccccc" + id="path21634" + d="M 35.596456,12.40202 L 43.021077,12.40202 C 43.728184,12.40202 44.258513,12.578797 44.43529,13.46268 L 45.319174,20.356972 C 45.407562,21.417632 44.943523,21.771185 43.993349,21.771185 L 35.419679,21.771185 L 35.596456,12.40202 z " + style="opacity:1;color:#000000;fill:#9db029;fill-opacity:1;fill-rule:evenodd;stroke:#727e0a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 36.60295,13.388875 L 42.963507,13.388875 C 43.271656,13.388875 43.440266,13.419037 43.486054,13.710473 L 44.277489,20.094449 C 44.347258,20.525421 44.459897,20.769804 44.137211,20.784341 L 36.463412,20.784341 L 36.60295,13.388875 z " + id="path21636" + sodipodi:nodetypes="ccccccc" /> + <path + style="opacity:1;color:#000000;fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:#cc0000;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 36.06451,20.776498 L 44.50992,20.776498 C 45.314245,20.776498 45.917487,20.995896 46.118569,22.092882 L 47.123975,30.649381 C 47.224515,31.965765 46.696677,32.40456 45.615866,32.40456 L 35.863428,32.40456 L 36.06451,20.776498 z " + id="path21638" + sodipodi:nodetypes="ccccccc" /> + <path + sodipodi:nodetypes="ccccccc" + id="path21640" + d="M 37.209384,21.763574 L 44.444435,21.763574 C 44.79495,21.763574 44.986742,21.801928 45.038825,22.172513 L 45.939072,30.290267 C 46.018433,30.838284 46.146559,31.149038 45.779508,31.167522 L 37.050661,31.167522 L 37.209384,21.763574 z " + style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <g + id="g5022" + transform="matrix(2.165152e-2,0,0,4.307902e-2,43.08625,34.04509)"> + <rect + y="-150.69685" + x="-1559.2523" + height="478.35718" + width="1339.6335" + id="rect4173" + style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="cccc" + id="path5058" + d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " + style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " + id="path5018" + sodipodi:nodetypes="cccc" /> + </g> + <path + style="color:#000000;fill:#5b6b94;fill-opacity:1;fill-rule:nonzero;stroke:#364878;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 6.3643222,5.5185897 C 6.4551049,3.6036003 7.3719758,2.5542814 9.0788784,2.549044 L 38.405776,2.4590577 C 38.652361,2.4583011 38.974317,2.6592071 38.999012,2.9089888 L 42.257491,35.867228 L 40.942189,35.923862 L 41.571429,42.369516 C 41.632441,42.994499 41.390059,43.52882 40.5,43.533035 L 9.7893046,43.678474 C 7.25676,43.690468 4.6538454,41.59976 4.7759337,39.024403 L 6.3643222,5.5185897 z " + id="rect1408" + sodipodi:nodetypes="csssccsssss" /> + <path + id="path2489" + d="M 40.125,34.875 L 10.9375,35 C 9.3809819,35.177868 8.125,36.39612 8.125,38 C 8.125,39.60388 9.3809819,40.822132 10.9375,41 L 40.125,41.125 L 40.125,41.0625 C 38.469378,40.984348 37.125,39.674851 37.125,38 C 37.125,36.325149 38.469378,35.015652 40.125,34.9375 L 40.125,34.875 z " + style="color:#000000;fill:url(#linearGradient2813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="ccccccssc" + id="path2784" + d="M 9.6875,2.8125 C 7.9805897,2.8125 7.050103,3.8215062 6.96875,5.6738658 L 5.3125,37.825772 C 5.22054,40.904199 7.1393732,42.654485 9.125,43.15625 C 4.875,41.525579 5.4375,34.164455 10.75,34.195222 L 41.648286,34.195222 L 38.335786,3.2432432 C 38.310025,3.0025304 37.987878,2.8125 37.742036,2.8125 L 9.6875,2.8125 z " + style="color:#000000;fill:url(#linearGradient2100);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <rect + y="3.968539" + x="9.7886267" + height="29.604792" + width="2" + id="rect2793" + style="opacity:0.48044691;color:#000000;fill:url(#linearGradient2801);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.60818715;visibility:visible;display:inline;overflow:visible" + transform="matrix(1.000000,0.000000,-3.582731e-2,0.999358,0.000000,0.000000)" /> + <path + style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2112);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:20;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 9.8751008,3.3336831 C 8.1912014,3.3336831 7.5384236,4.0658459 7.4581673,5.887831 L 6.1592633,35.777198 C 7.0925916,34.170451 8.5988591,33.594437 11.011665,33.594437 L 40.963081,33.594437 L 38.137179,3.7573631 C 38.114727,3.5203092 37.793961,3.3336831 37.551434,3.3336831 L 9.8751008,3.3336831 z " + id="path2104" + sodipodi:nodetypes="cccscssc" /> + <path + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:120.00000477%;writing-mode:lr-tb;text-anchor:start;fill:#ad7fa8;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + d="M 21.12553,18.381288 C 21.050283,19.50227 21.269376,20.384155 21.782812,21.026947 C 22.296751,21.661909 23.039741,21.979388 24.011788,21.979387 C 24.97597,21.979388 25.754005,21.65799 26.345892,21.01519 C 26.945589,20.372398 27.282799,19.49443 27.357529,18.381288 C 27.431173,17.283839 27.207372,16.413709 26.686123,15.770905 C 26.165371,15.120279 25.426826,14.794959 24.470482,14.79495 C 23.521952,14.794959 22.743917,15.11636 22.136378,15.759145 C 21.536656,16.401952 21.199707,17.275998 21.12553,18.381288 M 27.29793,21.897075 C 26.787062,22.500679 26.216183,22.947501 25.58529,23.237544 C 24.962734,23.519747 24.247754,23.66085 23.44035,23.660849 C 22.092032,23.66085 21.027197,23.174832 20.245835,22.202797 C 19.472826,21.222925 19.138938,19.949092 19.244172,18.381288 C 19.349395,16.813498 19.858197,15.539665 20.770584,14.559781 C 21.682954,13.579917 22.809375,13.089981 24.149854,13.089969 C 24.957257,13.089981 25.656689,13.238924 26.24815,13.536791 C 26.840107,13.826846 27.347352,14.269749 27.76988,14.865501 L 27.873267,13.325141 L 29.554732,13.325141 L 28.973868,21.979387 C 30.129917,21.806931 31.058551,21.285637 31.759769,20.415508 C 32.469312,19.537544 32.870659,18.404812 32.963808,17.017304 C 33.020082,16.178542 32.947536,15.390722 32.746168,14.653848 C 32.552597,13.916994 32.226018,13.235002 31.766435,12.607873 C 31.020085,11.580979 30.077151,10.79708 28.937625,10.256176 C 27.806428,9.707462 26.551007,9.433097 25.171361,9.433081 C 24.207151,9.433097 23.27347,9.56244 22.370314,9.821111 C 21.467662,10.071974 20.623234,10.448244 19.837027,10.949925 C 18.552629,11.749517 17.517932,12.79994 16.732929,14.101199 C 15.956279,15.394643 15.517185,16.797819 15.415642,18.310738 C 15.331983,19.557142 15.476998,20.725151 15.85069,21.814765 C 16.232213,22.904387 16.822316,23.864664 17.621,24.695594 C 18.389368,25.51085 19.300238,26.130129 20.353615,26.553435 C 21.406448,26.984578 22.54823,27.20015 23.778962,27.200153 C 24.790178,27.20015 25.793384,27.027692 26.788584,26.682781 C 27.791068,26.345701 28.72125,25.859684 29.579139,25.224728 L 30.549801,26.529919 C 29.518874,27.2903 28.409917,27.870384 27.222932,28.270174 C 26.043227,28.677799 24.857618,28.881612 23.666104,28.881616 C 22.215881,28.881612 20.865341,28.622926 19.614483,28.105557 C 18.36308,27.596019 17.268571,26.851316 16.330955,25.871444 C 15.393328,24.89157 14.705054,23.758838 14.266133,22.47324 C 13.827731,21.179813 13.658252,19.792311 13.757696,18.310738 C 13.853452,16.88405 14.211263,15.523986 14.831129,14.230542 C 15.450993,12.937121 16.287663,11.800469 17.34115,10.820582 C 18.419191,9.825045 19.638236,9.0646655 20.998287,8.5394366 C 22.358842,8.0064001 23.779908,7.7398759 25.261489,7.7398585 C 26.923341,7.7398759 28.440813,8.080872 29.813913,8.7628469 C 31.194815,9.444854 32.325282,10.41297 33.205316,11.667193 C 33.741656,12.435425 34.132443,13.270279 34.377679,14.171752 C 34.630708,15.073243 34.724877,16.006082 34.660187,16.970271 C 34.521787,19.031929 33.789414,20.658519 32.463064,21.850041 C 31.136671,23.04157 29.374449,23.66085 27.17639,23.707883 L 27.29793,21.897075" + id="text21625" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block" + id="path12511" + sodipodi:cx="55" + sodipodi:cy="125" + sodipodi:rx="14.375" + sodipodi:ry="14.375" + d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z" + transform="matrix(0.611127,0.000000,0.000000,0.611127,-24.94992,-67.63529)" + inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png" + inkscape:export-xdpi="33.852203" + inkscape:export-ydpi="33.852203" /> + </g> +</svg> diff --git a/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg new file mode 100644 index 0000000000..4cb14f82f0 --- /dev/null +++ b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg @@ -0,0 +1,425 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + inkscape:export-ydpi="90.000000" + inkscape:export-xdpi="90.000000" + inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png" + width="48px" + height="48px" + id="svg11300" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions" + sodipodi:docname="appointment-new.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs3"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 24 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="48 : 24 : 1" + inkscape:persp3d-origin="24 : 16 : 1" + id="perspective59" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5204"> + <stop + style="stop-color:#c4a000;stop-opacity:1;" + offset="0" + id="stop5206" /> + <stop + style="stop-color:#c4a000;stop-opacity:0;" + offset="1" + id="stop5208" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5196"> + <stop + style="stop-color:#c4a000;stop-opacity:1;" + offset="0" + id="stop5198" /> + <stop + style="stop-color:#c4a000;stop-opacity:0;" + offset="1" + id="stop5200" /> + </linearGradient> + <linearGradient + id="linearGradient12512"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop12513" /> + <stop + style="stop-color:#fff520;stop-opacity:0.89108908;" + offset="0.50000000" + id="stop12517" /> + <stop + style="stop-color:#fff300;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop12514" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient12512" + id="radialGradient278" + gradientUnits="userSpaceOnUse" + cx="55.000000" + cy="125.00000" + fx="55.000000" + fy="125.00000" + r="14.375000" /> + <linearGradient + id="linearGradient10653"> + <stop + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop10655" /> + <stop + style="stop-color:#9193af;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop10657" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop42176" /> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop42178" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + style="stop-color:#fffffd;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2147" /> + <stop + style="stop-color:#cbcbc9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2149" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + id="stop37937" + offset="0.0000000" + style="stop-color:#9497b3;stop-opacity:1.0000000;" /> + <stop + id="stop37939" + offset="1.0000000" + style="stop-color:#4c4059;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2152"> + <stop + id="stop2154" + offset="0.0000000" + style="stop-color:#9aa29a;stop-opacity:1.0000000;" /> + <stop + id="stop2156" + offset="1.0000000" + style="stop-color:#b5beb5;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3816"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3818" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3820" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient3822" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2152" + id="linearGradient4307" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)" + x1="8.9156475" + y1="37.197018" + x2="9.8855033" + y2="52.090678" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient4309" + gradientUnits="userSpaceOnUse" + cx="11.329200" + cy="10.583970" + fx="11.329200" + fy="10.583970" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient4311" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient4313" + gradientUnits="userSpaceOnUse" + x1="6.3422160" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5196" + id="radialGradient5202" + cx="23.375" + cy="10.972863" + fx="23.375" + fy="10.972863" + r="3.3478092" + gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5204" + id="linearGradient5210" + x1="19.667364" + y1="4.2570662" + x2="20.329933" + y2="5.2845874" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5212" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + </defs> + <sodipodi:namedview + stroke="#c4a000" + fill="#babdb6" + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="0.25490196" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="11.313708" + inkscape:cx="13.2248" + inkscape:cy="25.106052" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:showpageshadow="false" + inkscape:window-width="833" + inkscape:window-height="772" + inkscape:window-x="305" + inkscape:window-y="76" /> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <dc:source>http://jimmac.musichall.cz</dc:source> + <cc:license + rdf:resource="http://creativecommons.org/licenses/publicdomain/" /> + <dc:title>New Appointment</dc:title> + <dc:subject> + <rdf:Bag> + <rdf:li>appointment</rdf:li> + <rdf:li>new</rdf:li> + <rdf:li>meeting</rdf:li> + <rdf:li>rvsp</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/publicdomain/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4318" + style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" /> + <path + sodipodi:nodetypes="cccc" + id="path14341" + d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z " + style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="cccc" + id="path18921" + d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z " + style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" /> + <path + transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path27786" + style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path35549" + style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path4120" + sodipodi:cx="23.375" + sodipodi:cy="11.875" + sodipodi:rx="8.5" + sodipodi:ry="8.5" + d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z" + transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)" + sodipodi:start="3.8052902" + sodipodi:end="4.7074114" /> + <path + transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)" + d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z" + sodipodi:ry="1.21875" + sodipodi:rx="1.21875" + sodipodi:cy="17.28125" + sodipodi:cx="15.1875" + id="path34778" + style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="arc" /> + <path + id="path35559" + d="M 22.176614,20.718014 L 13.155702,13.140282" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + id="path35561" + d="M 19.408614,29.776506 L 22.368655,25.283228" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:nodetypes="cc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35563" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35565" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35567" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)" + d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z" + sodipodi:ry="0.61871845" + sodipodi:rx="0.61871845" + sodipodi:cy="7.6932044" + sodipodi:cx="16.705399" + id="path35569" + style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path10651" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block" + id="path12511" + sodipodi:cx="55" + sodipodi:cy="125" + sodipodi:rx="14.375" + sodipodi:ry="14.375" + d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z" + transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)" + inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png" + inkscape:export-xdpi="33.852203" + inkscape:export-ydpi="33.852203" /> + </g> +</svg> diff --git a/tests/auto/gui/image/qicon/image.png b/tests/auto/gui/image/qicon/image.png Binary files differnew file mode 100644 index 0000000000..8d703640c1 --- /dev/null +++ b/tests/auto/gui/image/qicon/image.png diff --git a/tests/auto/gui/image/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro new file mode 100644 index 0000000000..5ce4fd4c2f --- /dev/null +++ b/tests/auto/gui/image/qicon/qicon.pro @@ -0,0 +1,32 @@ +load(qttest_p4) + +QT += widgets +SOURCES += tst_qicon.cpp +RESOURCES = tst_qicon.qrc + +wince* { + QT += xml svg + addFiles.files += $$_PRO_FILE_PWD_/*.png + addFiles.files += $$_PRO_FILE_PWD_/*.svg + addFiles.files += $$_PRO_FILE_PWD_/*.svgz + addFiles.files += $$_PRO_FILE_PWD_/tst_qicon.cpp + addFiles.path = . + DEPLOYMENT += addFiles + + DEPLOYMENT_PLUGIN += qsvg + DEFINES += SRCDIR=\\\".\\\" +} else:symbian { + QT += xml svg + addFiles.files = *.png tst_qicon.cpp *.svg *.svgz + addFiles.path = . + DEPLOYMENT += addFiles + qt_not_deployed { + plugins.files = qsvgicon.dll + plugins.path = iconengines + DEPLOYMENT += plugins + } +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} + +CONFIG += insignificant_test # QTBUG-21402 diff --git a/tests/auto/gui/image/qicon/rect.png b/tests/auto/gui/image/qicon/rect.png Binary files differnew file mode 100644 index 0000000000..b5d3ecbddf --- /dev/null +++ b/tests/auto/gui/image/qicon/rect.png diff --git a/tests/auto/gui/image/qicon/rect.svg b/tests/auto/gui/image/qicon/rect.svg new file mode 100644 index 0000000000..8eb24727be --- /dev/null +++ b/tests/auto/gui/image/qicon/rect.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="40px" + height="5px" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="test.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + inkscape:window-height="1005" + inkscape:window-width="1280" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + showgrid="false" + inkscape:zoom="13.6" + inkscape:cx="20" + inkscape:cy="2.5" + inkscape:window-x="-4" + inkscape:window-y="-4" + inkscape:current-layer="svg2" /> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 2.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="40 : 2.5 : 1" + inkscape:persp3d-origin="20 : 1.6666667 : 1" + id="perspective9" /> + </defs> + <g + id="layer1"> + <rect + width="40px" + height="5px" + x="0px" + y="0px" + id="rect2393" + style="fill:#ff0000" /> + </g> + <rect + style="fill:#000000" + id="rect2382" + width="2" + height="2" + x="19" + y="1.5" /> +</svg> diff --git a/tests/auto/gui/image/qicon/trash.svg b/tests/auto/gui/image/qicon/trash.svg new file mode 100644 index 0000000000..c44e4c75a2 --- /dev/null +++ b/tests/auto/gui/image/qicon/trash.svg @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 10, SVG Export Plug-In . SVG Version: 3.0.0 Build 76) --><svg enable-background="new 0 0 347 348" height="348" i:pageBounds="0 792 612 0" i:rulerOrigin="0 0" i:viewOrigin="131 567" overflow="visible" space="preserve" viewBox="-20 -20 387 388" width="347" xmlns="http://www.w3.org/2000/svg" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:xlink="http://www.w3.org/1999/xlink"> +<metadata> +<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> +<cc:Work rdf:about=""> +<dc:title>Keep Tidy Inside</dc:title> +<dc:description></dc:description> +<dc:subject> +<rdf:Bag> +<rdf:li></rdf:li> +<rdf:li>symbol</rdf:li> +<rdf:li>bin</rdf:li> +<rdf:li>signs_and_symbols</rdf:li> +<rdf:li>clean</rdf:li> +<rdf:li>rubish</rdf:li> +<rdf:li>trash</rdf:li> +<rdf:li>inside</rdf:li> +<rdf:li>garbage</rdf:li> +<rdf:li>sign</rdf:li> +</rdf:Bag> +</dc:subject> +<dc:publisher> +<cc:Agent rdf:about="http://www.openclipart.org"> +<dc:title>Martin Owens</dc:title> +</cc:Agent> +</dc:publisher> +<dc:creator> +<cc:Agent> +<dc:title>Martin Owens</dc:title> +</cc:Agent> +</dc:creator> +<dc:rights> +<cc:Agent> +<dc:title>Martin Owens</dc:title> +</cc:Agent> +</dc:rights> +<dc:date></dc:date> +<dc:format>image/svg+xml</dc:format> +<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> +<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/> +<dc:language>en</dc:language> +</cc:Work> +<cc:License rdf:about="http://web.resource.org/cc/PublicDomain"> +<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/> +<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/> +<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/> +</cc:License> +</rdf:RDF> +</metadata> +<g i:dimmedPercent="50" i:knockout="Off" i:layer="yes" i:rgbTrio="#4F008000FFFF" id="Layer_1"> +<path d="M347,174c0,96.098-77.679,174-173.5,174C77.679,348,0,270.098,0,174 C0,77.902,77.679,0,173.5,0C269.321,0,347,77.902,347,174z" fill="#10A040" i:knockout="Off"/> +<path d="M238,53c0,13.807-11.864,25-26.5,25S185,66.807,185,53s11.864-25,26.5-25 S238,39.193,238,53z" fill="#FFFFFF" i:knockout="Off"/> +<path d="M66,175c1.055,6.355,19.333,126.417,19.333,126.417h68.333 c0,0,14.105-122.524,14.333-126.417c6.224-0.622,6.667-13-2-13c-12.164,0-89.205-0.059-98,0S61.167,174.487,66,175z" fill="#FFFFFF" i:knockout="Off"/> +<path d="M78,141c17.292-5.325,24.179-23.532,27-31c14.513,6.596,40.333,12.265,59,8 c3.683,19.419-28.043,19.31-23,37C132.577,145.705,89.404,167.292,78,141z" fill="#FFFFFF" i:knockout="Off"/> +<path d="M103,82l139-1c-0.6,3.421,33.633,57.497,29,67c-4.089,0.418-67,5-67,5 c6.109-9.379-13-43-13-43L103,82z" fill="#FFFFFF" i:knockout="Off"/> +<path d="M270,156l-66-3c0,0-23.565,143.355-24,145s1.855,2.536,3,1s51-82,51-82 s19.754,80.701,20,82s3.721,1.209,4,0S270,156,270,156z" fill="#FFFFFF" i:knockout="Off"/> +</g> +</svg> diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp new file mode 100644 index 0000000000..4c430f9435 --- /dev/null +++ b/tests/auto/gui/image/qicon/tst_qicon.cpp @@ -0,0 +1,781 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <QImageReader> +#include <qicon.h> + +#if defined(Q_OS_SYMBIAN) +#define SRCDIR "." +#endif +#include <qiconengine.h> + +Q_DECLARE_METATYPE(QSize) + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QIcon : public QObject +{ + Q_OBJECT +public: + tst_QIcon(); + +private slots: + void init(); + void cleanup(); + + void actualSize_data(); // test with 1 pixmap + void actualSize(); + void actualSize2_data(); // test with 2 pixmaps with different aspect ratio + void actualSize2(); + void svgActualSize(); + void isNull(); + void swap(); + void bestMatch(); + void cacheKey(); + void detach(); + void svg(); + void addFile(); + void availableSizes(); + void name(); + void streamAvailableSizes_data(); + void streamAvailableSizes(); + void fromTheme(); + + void task184901_badCache(); + void task223279_inconsistentAddFile(); + void task239461_custom_iconengine_crash(); + +private: + bool haveImageFormat(QByteArray const&); + + QString oldCurrentDir; + + const static QIcon staticIcon; +}; + +// Creating an icon statically should not cause a crash. +// But we do not officially support this. See QTBUG-8666 +const QIcon tst_QIcon::staticIcon = QIcon::fromTheme("edit-find"); + +void tst_QIcon::init() +{ + QString srcdir(QLatin1String(SRCDIR)); + if (!srcdir.isEmpty()) { + oldCurrentDir = QDir::current().absolutePath(); + QDir::setCurrent(srcdir); + } +} + +void tst_QIcon::cleanup() +{ + if (!oldCurrentDir.isEmpty()) { + QDir::setCurrent(oldCurrentDir); + } +} + +bool tst_QIcon::haveImageFormat(QByteArray const& desiredFormat) +{ + return QImageReader::supportedImageFormats().contains(desiredFormat); +} + +tst_QIcon::tst_QIcon() +{ +} + +void tst_QIcon::actualSize_data() +{ + QTest::addColumn<QString>("source"); + QTest::addColumn<QSize>("argument"); + QTest::addColumn<QSize>("result"); + + // square image + QTest::newRow("resource0") << ":/image.png" << QSize(128, 128) << QSize(128, 128); + QTest::newRow("resource1") << ":/image.png" << QSize( 64, 64) << QSize( 64, 64); + QTest::newRow("resource2") << ":/image.png" << QSize( 32, 64) << QSize( 32, 32); + QTest::newRow("resource3") << ":/image.png" << QSize( 16, 64) << QSize( 16, 16); + QTest::newRow("resource4") << ":/image.png" << QSize( 16, 128) << QSize( 16, 16); + QTest::newRow("resource5") << ":/image.png" << QSize( 128, 16) << QSize( 16, 16); + QTest::newRow("resource6") << ":/image.png" << QSize( 150, 150) << QSize( 128, 128); + // rect image + QTest::newRow("resource7") << ":/rect.png" << QSize( 20, 40) << QSize( 20, 40); + QTest::newRow("resource8") << ":/rect.png" << QSize( 10, 20) << QSize( 10, 20); + QTest::newRow("resource9") << ":/rect.png" << QSize( 15, 50) << QSize( 15, 30); + QTest::newRow("resource10") << ":/rect.png" << QSize( 25, 50) << QSize( 20, 40); + + const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/"); + QTest::newRow("external0") << prefix + "image.png" << QSize(128, 128) << QSize(128, 128); + QTest::newRow("external1") << prefix + "image.png" << QSize( 64, 64) << QSize( 64, 64); + QTest::newRow("external2") << prefix + "image.png" << QSize( 32, 64) << QSize( 32, 32); + QTest::newRow("external3") << prefix + "image.png" << QSize( 16, 64) << QSize( 16, 16); + QTest::newRow("external4") << prefix + "image.png" << QSize( 16, 128) << QSize( 16, 16); + QTest::newRow("external5") << prefix + "image.png" << QSize( 128, 16) << QSize( 16, 16); + QTest::newRow("external6") << prefix + "image.png" << QSize( 150, 150) << QSize( 128, 128); + // rect image + QTest::newRow("external7") << ":/rect.png" << QSize( 20, 40) << QSize( 20, 40); + QTest::newRow("external8") << ":/rect.png" << QSize( 10, 20) << QSize( 10, 20); + QTest::newRow("external9") << ":/rect.png" << QSize( 15, 50) << QSize( 15, 30); + QTest::newRow("external10") << ":/rect.png" << QSize( 25, 50) << QSize( 20, 40); +} + +void tst_QIcon::actualSize() +{ + QFETCH(QString, source); + QFETCH(QSize, argument); + QFETCH(QSize, result); + + { + QPixmap pixmap(source); + QIcon icon(pixmap); + QCOMPARE(icon.actualSize(argument), result); + QCOMPARE(icon.pixmap(argument).size(), result); + } + + { + QIcon icon(source); + QCOMPARE(icon.actualSize(argument), result); + QCOMPARE(icon.pixmap(argument).size(), result); + } +} + +void tst_QIcon::actualSize2_data() +{ + QTest::addColumn<QSize>("argument"); + QTest::addColumn<QSize>("result"); + + // two images - 128x128 and 20x40. Let the games begin + QTest::newRow("trivial1") << QSize( 128, 128) << QSize( 128, 128); + QTest::newRow("trivial2") << QSize( 20, 40) << QSize( 20, 40); + + // QIcon chooses the one with the smallest area to choose the pixmap + QTest::newRow("best1") << QSize( 100, 100) << QSize( 100, 100); + QTest::newRow("best2") << QSize( 20, 20) << QSize( 10, 20); + QTest::newRow("best3") << QSize( 15, 30) << QSize( 15, 30); + QTest::newRow("best4") << QSize( 5, 5) << QSize( 2, 5); + QTest::newRow("best5") << QSize( 10, 15) << QSize( 7, 15); +} + +void tst_QIcon::actualSize2() +{ + QIcon icon; + const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/"); + + icon.addPixmap(QPixmap(prefix + "image.png")); + icon.addPixmap(QPixmap(prefix + "rect.png")); + + QFETCH(QSize, argument); + QFETCH(QSize, result); + + QCOMPARE(icon.actualSize(argument), result); + QCOMPARE(icon.pixmap(argument).size(), result); +} + +void tst_QIcon::svgActualSize() +{ + if (!haveImageFormat("svg")) { + QSKIP("SVG support is not available", SkipAll); + } + + const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/"); + QIcon icon(prefix + "rect.svg"); + QCOMPARE(icon.actualSize(QSize(16, 16)), QSize(16, 2)); + QCOMPARE(icon.pixmap(QSize(16, 16)).size(), QSize(16, 2)); + + QPixmap p(16, 16); + p.fill(Qt::cyan); + icon.addPixmap(p); + + QCOMPARE(icon.actualSize(QSize(16, 16)), QSize(16, 16)); + QCOMPARE(icon.pixmap(QSize(16, 16)).size(), QSize(16, 16)); + + QCOMPARE(icon.actualSize(QSize(16, 14)), QSize(16, 2)); + QCOMPARE(icon.pixmap(QSize(16, 14)).size(), QSize(16, 2)); +} + +void tst_QIcon::isNull() { + // test default constructor + QIcon defaultConstructor; + QVERIFY(defaultConstructor.isNull()); + + // test copy constructor + QVERIFY(QIcon(defaultConstructor).isNull()); + + // test pixmap constructor + QPixmap nullPixmap; + QVERIFY(QIcon(nullPixmap).isNull()); + + // test string constructor with empty string + QIcon iconEmptyString = QIcon(QString()); + QVERIFY(iconEmptyString.isNull()); + QVERIFY(!iconEmptyString.actualSize(QSize(32, 32)).isValid());; + + // test string constructor with non-existing file + QIcon iconNoFile = QIcon("imagedoesnotexist"); + QVERIFY(!iconNoFile.isNull()); + QVERIFY(!iconNoFile.actualSize(QSize(32, 32)).isValid()); + + // test string constructor with non-existing file with suffix + QIcon iconNoFileSuffix = QIcon("imagedoesnotexist.png"); + QVERIFY(!iconNoFileSuffix.isNull()); + QVERIFY(!iconNoFileSuffix.actualSize(QSize(32, 32)).isValid()); + + const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/"); + // test string constructor with existing file but unsupported format + QIcon iconUnsupportedFormat = QIcon(prefix + "tst_qicon.cpp"); + QVERIFY(!iconUnsupportedFormat.isNull()); + QVERIFY(!iconUnsupportedFormat.actualSize(QSize(32, 32)).isValid()); + + // test string constructor with existing file and supported format + QIcon iconSupportedFormat = QIcon(prefix + "image.png"); + QVERIFY(!iconSupportedFormat.isNull()); + QVERIFY(iconSupportedFormat.actualSize(QSize(32, 32)).isValid()); +} + +void tst_QIcon::swap() +{ + QPixmap p1(1, 1), p2(2, 2); + p1.fill(Qt::black); + p2.fill(Qt::black); + + QIcon i1(p1), i2(p2); + const qint64 i1k = i1.cacheKey(); + const qint64 i2k = i2.cacheKey(); + QVERIFY(i1k != i2k); + i1.swap(i2); + QCOMPARE(i1.cacheKey(), i2k); + QCOMPARE(i2.cacheKey(), i1k); +} + +void tst_QIcon::bestMatch() +{ + QPixmap p1(1, 1); + QPixmap p2(2, 2); + QPixmap p3(3, 3); + QPixmap p4(4, 4); + QPixmap p5(5, 5); + QPixmap p6(6, 6); + QPixmap p7(7, 7); + QPixmap p8(8, 8); + + p1.fill(Qt::black); + p2.fill(Qt::black); + p3.fill(Qt::black); + p4.fill(Qt::black); + p5.fill(Qt::black); + p6.fill(Qt::black); + p7.fill(Qt::black); + p8.fill(Qt::black); + + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < 2; ++j) { + QIcon::State state = (j == 0) ? QIcon::On : QIcon::Off; + QIcon::State oppositeState = (state == QIcon::On) ? QIcon::Off + : QIcon::On; + QIcon::Mode mode; + QIcon::Mode oppositeMode; + + QIcon icon; + + switch (i) { + case 0: + default: + mode = QIcon::Normal; + oppositeMode = QIcon::Active; + break; + case 1: + mode = QIcon::Active; + oppositeMode = QIcon::Normal; + break; + case 2: + mode = QIcon::Disabled; + oppositeMode = QIcon::Selected; + break; + case 3: + mode = QIcon::Selected; + oppositeMode = QIcon::Disabled; + } + + /* + The test mirrors the code in + QPixmapIconEngine::bestMatch(), to make sure that + nobody breaks QPixmapIconEngine by mistake. Before + you change this test or the code that it tests, + please talk to the maintainer if possible. + */ + if (mode == QIcon::Disabled || mode == QIcon::Selected) { + icon.addPixmap(p1, oppositeMode, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p1.size()); + + icon.addPixmap(p2, oppositeMode, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p2.size()); + + icon.addPixmap(p3, QIcon::Active, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p3.size()); + + icon.addPixmap(p4, QIcon::Normal, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p4.size()); + + icon.addPixmap(p5, mode, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p5.size()); + + icon.addPixmap(p6, QIcon::Active, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p6.size()); + + icon.addPixmap(p7, QIcon::Normal, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p7.size()); + + icon.addPixmap(p8, mode, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p8.size()); + } else { + icon.addPixmap(p1, QIcon::Selected, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p1.size()); + + icon.addPixmap(p2, QIcon::Disabled, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p2.size()); + + icon.addPixmap(p3, QIcon::Selected, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p3.size()); + + icon.addPixmap(p4, QIcon::Disabled, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p4.size()); + + icon.addPixmap(p5, oppositeMode, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p5.size()); + + icon.addPixmap(p6, mode, oppositeState); + QVERIFY(icon.pixmap(100, mode, state).size() == p6.size()); + + icon.addPixmap(p7, oppositeMode, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p7.size()); + + icon.addPixmap(p8, mode, state); + QVERIFY(icon.pixmap(100, mode, state).size() == p8.size()); + } + } + } +} + +void tst_QIcon::cacheKey() +{ + QIcon icon1("image.png"); + qint64 icon1_key = icon1.cacheKey(); + QIcon icon2 = icon1; + + QVERIFY(icon2.cacheKey() == icon1.cacheKey()); + icon2.detach(); + QVERIFY(icon2.cacheKey() != icon1.cacheKey()); + QVERIFY(icon1.cacheKey() == icon1_key); +} + +void tst_QIcon::detach() +{ + QImage img(32, 32, QImage::Format_ARGB32_Premultiplied); + img.fill(0xffff0000); + QIcon icon1(QPixmap::fromImage(img)); + QIcon icon2 = icon1; + icon2.addFile("image.png", QSize(64, 64)); + + QImage img1 = icon1.pixmap(64, 64).toImage(); + QImage img2 = icon2.pixmap(64, 64).toImage(); + QVERIFY(img1 != img2); + + img1 = icon1.pixmap(32, 32).toImage(); + img2 = icon2.pixmap(32, 32).toImage(); + QVERIFY(img1 == img2); +} + +void tst_QIcon::svg() +{ + if (!haveImageFormat("svg")) { + QSKIP("SVG support is not available", SkipAll); + } + QIcon icon1("heart.svg"); + + QVERIFY(!icon1.pixmap(32).isNull()); + QImage img1 = icon1.pixmap(32).toImage(); + QVERIFY(!icon1.pixmap(32, QIcon::Disabled).isNull()); + QImage img2 = icon1.pixmap(32, QIcon::Disabled).toImage(); + + icon1.addFile("trash.svg", QSize(), QIcon::Disabled); + QVERIFY(!icon1.pixmap(32, QIcon::Disabled).isNull()); + QImage img3 = icon1.pixmap(32, QIcon::Disabled).toImage(); + QVERIFY(img3 != img2); + QVERIFY(img3 != img1); + + QPixmap pm("image.png"); + icon1.addPixmap(pm, QIcon::Normal, QIcon::On); + QVERIFY(!icon1.pixmap(128, QIcon::Normal, QIcon::On).isNull()); + QImage img4 = icon1.pixmap(128, QIcon::Normal, QIcon::On).toImage(); + QVERIFY(img4 != img3); + QVERIFY(img4 != img2); + QVERIFY(img4 != img1); + + QIcon icon2; + icon2.addFile("heart.svg"); + QVERIFY(icon2.pixmap(57).toImage() == icon1.pixmap(57).toImage()); + + QIcon icon3("trash.svg"); + icon3.addFile("heart.svg"); + QVERIFY(icon3.pixmap(57).toImage() == icon1.pixmap(57).toImage()); + + QIcon icon4("heart.svg"); + icon4.addFile("image.png", QSize(), QIcon::Active); + QVERIFY(!icon4.pixmap(32).isNull()); + QVERIFY(!icon4.pixmap(32, QIcon::Active).isNull()); + QVERIFY(icon4.pixmap(32).toImage() == img1); + QIcon pmIcon(pm); + QVERIFY(icon4.pixmap(pm.size(), QIcon::Active).toImage() == pmIcon.pixmap(pm.size(), QIcon::Active).toImage()); + +#ifndef QT_NO_COMPRESS + QIcon icon5("heart.svgz"); + QVERIFY(!icon5.pixmap(32).isNull()); +#endif +} + +void tst_QIcon::addFile() +{ + QIcon icon; + icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")); + icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-32.png")); + icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-128.png")); + icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-16.png"), QSize(), QIcon::Selected); + icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-32.png"), QSize(), QIcon::Selected); + icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-128.png"), QSize(), QIcon::Selected); + +#ifndef Q_OS_WINCE + QVERIFY(icon.pixmap(16, QIcon::Normal).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")).toImage()); + QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-32.png")).toImage()); + QVERIFY(icon.pixmap(128, QIcon::Normal).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-128.png")).toImage()); + QVERIFY(icon.pixmap(16, QIcon::Selected).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-16.png")).toImage()); + QVERIFY(icon.pixmap(32, QIcon::Selected).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-32.png")).toImage()); + QVERIFY(icon.pixmap(128, QIcon::Selected).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-128.png")).toImage()); +#else + // WinCE only includes the 16x16 images for size reasons + QVERIFY(icon.pixmap(16, QIcon::Normal).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")).toImage()); + QVERIFY(icon.pixmap(16, QIcon::Selected).toImage() == + QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-16.png")).toImage()); +#endif +} + +static bool sizeLess(const QSize &a, const QSize &b) +{ + return a.width() < b.width(); +} + +void tst_QIcon::availableSizes() +{ + { + QIcon icon; + icon.addFile("image.png", QSize(32,32)); + icon.addFile("image.png", QSize(64,64)); + icon.addFile("image.png", QSize(128,128)); + icon.addFile("image.png", QSize(256,256), QIcon::Disabled); + icon.addFile("image.png", QSize(16,16), QIcon::Normal, QIcon::On); + + QList<QSize> availableSizes = icon.availableSizes(); + QCOMPARE(availableSizes.size(), 3); + qSort(availableSizes.begin(), availableSizes.end(), sizeLess); + QCOMPARE(availableSizes.at(0), QSize(32,32)); + QCOMPARE(availableSizes.at(1), QSize(64,64)); + QCOMPARE(availableSizes.at(2), QSize(128,128)); + + availableSizes = icon.availableSizes(QIcon::Disabled); + QCOMPARE(availableSizes.size(), 1); + QCOMPARE(availableSizes.at(0), QSize(256,256)); + + availableSizes = icon.availableSizes(QIcon::Normal, QIcon::On); + QCOMPARE(availableSizes.size(), 1); + QCOMPARE(availableSizes.at(0), QSize(16,16)); + } + + if (haveImageFormat("svg")) { + // checks that there are no availableSizes for scalable images. + QIcon icon("heart.svg"); + QList<QSize> availableSizes = icon.availableSizes(); + QVERIFY(availableSizes.isEmpty()); + } + + if (haveImageFormat("svg")) { + // even if an a scalable image contain added pixmaps, + // availableSizes still should be empty. + QIcon icon("heart.svg"); + icon.addFile("image.png", QSize(32,32)); + QList<QSize> availableSizes = icon.availableSizes(); + QVERIFY(availableSizes.isEmpty()); + } + + { + // we try to load an icon from resources + QIcon icon(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")); + QList<QSize> availableSizes = icon.availableSizes(); + QCOMPARE(availableSizes.size(), 1); + QCOMPARE(availableSizes.at(0), QSize(16, 16)); + } + + { + // load an icon from binary data. + QPixmap pix; + QFile file(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")); + QVERIFY(file.open(QIODevice::ReadOnly)); + uchar *data = file.map(0, file.size()); + QVERIFY(data != 0); + pix.loadFromData(data, file.size()); + QIcon icon(pix); + + QList<QSize> availableSizes = icon.availableSizes(); + QCOMPARE(availableSizes.size(), 1); + QCOMPARE(availableSizes.at(0), QSize(16,16)); + } + + { + // there shouldn't be available sizes for invalid images! + QVERIFY(QIcon(QLatin1String("")).availableSizes().isEmpty()); + QVERIFY(QIcon(QLatin1String("non-existing.png")).availableSizes().isEmpty()); + } +} + +void tst_QIcon::name() +{ + { + // No name if icon does not come from a theme + QIcon icon(":/image.png"); + QString name = icon.name(); + QVERIFY(name.isEmpty()); + } + + { + // Getting the name of an icon coming from a theme should work + QString searchPath = QLatin1String(":/icons"); + QIcon::setThemeSearchPaths(QStringList() << searchPath); + QString themeName("testtheme"); + QIcon::setThemeName(themeName); + + QIcon icon = QIcon::fromTheme("appointment-new"); + QString name = icon.name(); + QCOMPARE(name, QLatin1String("appointment-new")); + } +} + +void tst_QIcon::streamAvailableSizes_data() +{ + QTest::addColumn<QIcon>("icon"); + + QIcon icon; + icon.addFile(":/image.png", QSize(32,32)); + QTest::newRow( "32x32" ) << icon; + icon.addFile(":/image.png", QSize(64,64)); + QTest::newRow( "64x64" ) << icon; + icon.addFile(":/image.png", QSize(128,128)); + QTest::newRow( "128x128" ) << icon; + icon.addFile(":/image.png", QSize(256,256)); + QTest::newRow( "256x256" ) << icon; +} + +void tst_QIcon::streamAvailableSizes() +{ + QFETCH(QIcon, icon); + + QByteArray ba; + // write to QByteArray + { + QBuffer buffer(&ba); + buffer.open(QIODevice::WriteOnly); + QDataStream stream(&buffer); + stream << icon; + } + + // read from QByteArray + { + QBuffer buffer(&ba); + buffer.open(QIODevice::ReadOnly); + QDataStream stream(&buffer); + QIcon i; + stream >> i; + QCOMPARE(i.isNull(), icon.isNull()); + QCOMPARE(i.availableSizes(), icon.availableSizes()); + } +} + + +static inline bool operator<(const QSize &lhs, const QSize &rhs) +{ + if (lhs.width() < rhs.width()) + return true; + else if (lhs.width() == lhs.width()) + return lhs.height() < lhs.height(); + return false; +} + +void tst_QIcon::task184901_badCache() +{ + QPixmap pm("image.png"); + QIcon icon(pm); + + //the disabled icon must have an effect (grayed) + QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() != icon.pixmap(32, QIcon::Disabled).toImage()); + + icon.addPixmap(pm, QIcon::Disabled); + //the disabled icon must now be the same as the normal one. + QVERIFY( icon.pixmap(32, QIcon::Normal).toImage() == icon.pixmap(32, QIcon::Disabled).toImage() ); +} + +void tst_QIcon::fromTheme() +{ + QString searchPath = QLatin1String(":/icons"); + QIcon::setThemeSearchPaths(QStringList() << searchPath); + QVERIFY(QIcon::themeSearchPaths().size() == 1); + QCOMPARE(searchPath, QIcon::themeSearchPaths()[0]); + + QString themeName("testtheme"); + QIcon::setThemeName(themeName); + QCOMPARE(QIcon::themeName(), themeName); + + // Test normal icon + QIcon appointmentIcon = QIcon::fromTheme("appointment-new"); + QVERIFY(!appointmentIcon.isNull()); + QVERIFY(!appointmentIcon.availableSizes(QIcon::Normal, QIcon::Off).isEmpty()); + QVERIFY(appointmentIcon.availableSizes().contains(QSize(16, 16))); + QVERIFY(appointmentIcon.availableSizes().contains(QSize(32, 32))); + QVERIFY(appointmentIcon.availableSizes().contains(QSize(22, 22))); + + // Test icon from parent theme + QIcon abIcon = QIcon::fromTheme("address-book-new"); + QVERIFY(!abIcon.isNull()); + QVERIFY(QIcon::hasThemeIcon("address-book-new")); + QVERIFY(!abIcon.availableSizes().isEmpty()); + + // Test non existing icon + QIcon noIcon = QIcon::fromTheme("broken-icon"); + QVERIFY(noIcon.isNull()); + QVERIFY(!QIcon::hasThemeIcon("broken-icon")); + + // Test non existing icon with fallback + noIcon = QIcon::fromTheme("broken-icon", abIcon); + QVERIFY(noIcon.cacheKey() == abIcon.cacheKey()); + + // Test svg-only icon + noIcon = QIcon::fromTheme("svg-icon", abIcon); + QVERIFY(!noIcon.availableSizes().isEmpty()); + + QByteArray ba; + // write to QByteArray + { + QBuffer buffer(&ba); + buffer.open(QIODevice::WriteOnly); + QDataStream stream(&buffer); + stream << abIcon; + } + + // read from QByteArray + { + QBuffer buffer(&ba); + buffer.open(QIODevice::ReadOnly); + QDataStream stream(&buffer); + QIcon i; + stream >> i; + QCOMPARE(i.isNull(), abIcon.isNull()); + QCOMPARE(i.availableSizes(), abIcon.availableSizes()); + } + + // Make sure setting the theme name clears the state + QIcon::setThemeName(""); + abIcon = QIcon::fromTheme("address-book-new"); + QVERIFY(abIcon.isNull()); +} + + +void tst_QIcon::task223279_inconsistentAddFile() +{ + QIcon icon1; + icon1.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")); + icon1.addFile(QLatin1String("IconThatDoesntExist"), QSize(32, 32)); + QPixmap pm1 = icon1.pixmap(32, 32); + + QIcon icon2; + icon2.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")); + icon2.addFile(QLatin1String("IconThatDoesntExist")); + QPixmap pm2 = icon1.pixmap(32, 32); + + QCOMPARE(pm1.isNull(), false); + QCOMPARE(pm1.size(), QSize(16,16)); + QCOMPARE(pm1.isNull(), pm2.isNull()); + QCOMPARE(pm1.size(), pm2.size()); +} + + +// During detach, v2 engines are cloned, while v1 engines are only +// passed on, so v1 engines need to be referenced counted. This test +// verifies that the engine is destroyed once and only once. + +class IconEngine : public QIconEngine +{ +public: + ~IconEngine() { destructorCalled++; } + virtual void paint(QPainter *, const QRect &, QIcon::Mode, QIcon::State) { } + static int destructorCalled; +}; +int IconEngine::destructorCalled = 0; + +void tst_QIcon::task239461_custom_iconengine_crash() +{ + QIconEngine *engine = new IconEngine(); + { + QIcon icon(engine); + QIcon icon2 = icon; + + QPixmap pixmap(32, 32); + icon.addPixmap(pixmap); + } + QCOMPARE(IconEngine::destructorCalled, 1); +} + + +QTEST_MAIN(tst_QIcon) +#include "tst_qicon.moc" diff --git a/tests/auto/gui/image/qicon/tst_qicon.qrc b/tests/auto/gui/image/qicon/tst_qicon.qrc new file mode 100644 index 0000000000..7925a33c84 --- /dev/null +++ b/tests/auto/gui/image/qicon/tst_qicon.qrc @@ -0,0 +1,20 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource prefix="/"> +<file>image.png</file> +<file>rect.png</file> +<file>./icons/testtheme/16x16/actions/appointment-new.png</file> +<file>./icons/testtheme/22x22/actions/appointment-new.png</file> +<file>./icons/testtheme/32x32/actions/appointment-new.png</file> +<file>./icons/testtheme/index.theme</file> +<file>./icons/testtheme/scalable/actions/svg-only.svg</file> +<file>./icons/themeparent/16x16/actions/address-book-new.png</file> +<file>./icons/themeparent/16x16/actions/appointment-new.png</file> +<file>./icons/themeparent/22x22/actions/address-book-new.png</file> +<file>./icons/themeparent/22x22/actions/appointment-new.png</file> +<file>./icons/themeparent/32x32/actions/address-book-new.png</file> +<file>./icons/themeparent/32x32/actions/appointment-new.png</file> +<file>./icons/themeparent/index.theme</file> +<file>./icons/themeparent/scalable/actions/address-book-new.svg</file> +<file>./icons/themeparent/scalable/actions/appointment-new.svg</file> +</qresource> +</RCC> diff --git a/tests/auto/gui/image/qimage/.gitignore b/tests/auto/gui/image/qimage/.gitignore new file mode 100644 index 0000000000..d8afbffa72 --- /dev/null +++ b/tests/auto/gui/image/qimage/.gitignore @@ -0,0 +1 @@ +tst_qimage diff --git a/tests/auto/gui/image/qimage/images/image.bmp b/tests/auto/gui/image/qimage/images/image.bmp Binary files differnew file mode 100644 index 0000000000..39640e43e9 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.bmp diff --git a/tests/auto/gui/image/qimage/images/image.gif b/tests/auto/gui/image/qimage/images/image.gif Binary files differnew file mode 100644 index 0000000000..2c5a7f87e9 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.gif diff --git a/tests/auto/gui/image/qimage/images/image.ico b/tests/auto/gui/image/qimage/images/image.ico Binary files differnew file mode 100644 index 0000000000..7312d20f87 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.ico diff --git a/tests/auto/gui/image/qimage/images/image.jpg b/tests/auto/gui/image/qimage/images/image.jpg Binary files differnew file mode 100644 index 0000000000..7611322b1b --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.jpg diff --git a/tests/auto/gui/image/qimage/images/image.pbm b/tests/auto/gui/image/qimage/images/image.pbm new file mode 100644 index 0000000000..67e5efa3e9 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.pbm @@ -0,0 +1,8 @@ +P1 +16 6 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 diff --git a/tests/auto/gui/image/qimage/images/image.pgm b/tests/auto/gui/image/qimage/images/image.pgm new file mode 100644 index 0000000000..443bf40964 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.pgm @@ -0,0 +1,10 @@ +P2 +24 7 +15 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 +0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 +0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 +0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 +0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/tests/auto/gui/image/qimage/images/image.png b/tests/auto/gui/image/qimage/images/image.png Binary files differnew file mode 100644 index 0000000000..7d4890a7ff --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.png diff --git a/tests/auto/gui/image/qimage/images/image.ppm b/tests/auto/gui/image/qimage/images/image.ppm new file mode 100644 index 0000000000..2a5640e189 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.ppm @@ -0,0 +1,7 @@ +P3 +4 4 +15 + 0 0 0 0 0 0 0 0 0 15 0 15 + 0 0 0 0 15 7 0 0 0 0 0 0 + 0 0 0 0 0 0 0 15 7 0 0 0 +15 0 15 0 0 0 0 0 0 0 0 0
\ No newline at end of file diff --git a/tests/auto/gui/image/qimage/images/image.tif b/tests/auto/gui/image/qimage/images/image.tif Binary files differnew file mode 100644 index 0000000000..ee0637cf25 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.tif diff --git a/tests/auto/gui/image/qimage/images/image.xbm b/tests/auto/gui/image/qimage/images/image.xbm new file mode 100644 index 0000000000..d0e0fcf2c1 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.xbm @@ -0,0 +1,5 @@ +#define Cloverleaf_width 9 +#define Cloverleaf_height 9 +static unsigned char Cloverleaf_bits[] = { + 0xc6, 0x00, 0x29, 0x01, 0x29, 0x01, 0xfe, 0x00, 0x28, 0x00, 0xfe, 0x00, + 0x29, 0x01, 0x29, 0x01, 0xc6, 0x00, }; diff --git a/tests/auto/gui/image/qimage/images/image.xpm b/tests/auto/gui/image/qimage/images/image.xpm new file mode 100644 index 0000000000..264ba401e6 --- /dev/null +++ b/tests/auto/gui/image/qimage/images/image.xpm @@ -0,0 +1,261 @@ +/* XPM */ +static char * foo_xpm[] = { +"256 256 2 1", +" c None", +". c #E22626", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................", +"................................................................................................................................................................................................................................................................"}; diff --git a/tests/auto/gui/image/qimage/qimage.pro b/tests/auto/gui/image/qimage/qimage.pro new file mode 100644 index 0000000000..b517bc1237 --- /dev/null +++ b/tests/auto/gui/image/qimage/qimage.pro @@ -0,0 +1,23 @@ +load(qttest_p4) +SOURCES += tst_qimage.cpp + +QT += core-private gui-private + +wince*: { + addImages.files = images/* + addImages.path = images + DEPLOYMENT += addImages + DEFINES += SRCDIR=\\\".\\\" +} else:symbian { + TARGET.EPOCHEAPSIZE = 0x200000 0x800000 + addImages.files = images/* + addImages.path = images + DEPLOYMENT += addImages + qt_not_deployed { + imagePlugins.files = qjpeg.dll qgif.dll qmng.dll qtiff.dll qico.dll + imagePlugins.path = imageformats + DEPLOYMENT += imagePlugins + } +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp new file mode 100644 index 0000000000..dce2957ae4 --- /dev/null +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -0,0 +1,2014 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> + +#include <qimage.h> +#include <qimagereader.h> +#include <qlist.h> +#include <qmatrix.h> +#include <stdio.h> + +#include <qpainter.h> +#include <private/qdrawhelper_p.h> + + +//TESTED_CLASS= +//TESTED_FILES= +#if defined(Q_OS_SYMBIAN) +# define SRCDIR "" +#endif + +Q_DECLARE_METATYPE(QImage::Format) +Q_DECLARE_METATYPE(Qt::GlobalColor) + +class tst_QImage : public QObject +{ + Q_OBJECT + +public: + tst_QImage(); + +private slots: + void swap(); + void create(); + void createInvalidXPM(); + void createFromUChar(); + void formatHandlersInput_data(); + void formatHandlersInput(); + + void setAlphaChannel_data(); + void setAlphaChannel(); + + void alphaChannel(); + + void convertToFormat_data(); + void convertToFormat(); + + void convertToFormatRgb888ToRGB32(); + + void createAlphaMask_data(); + void createAlphaMask(); +#ifndef QT_NO_IMAGE_HEURISTIC_MASK + void createHeuristicMask(); +#endif + + void dotsPerMeterZero(); + + void convertToFormatPreserveDotsPrMeter(); +#ifndef QT_NO_IMAGE_TEXT + void convertToFormatPreserveText(); +#endif + + void rotate_data(); + void rotate(); + + void copy(); + + void setPixel_data(); + void setPixel(); + + void setColorCount(); + void setColor(); + + void rasterClipping(); + + void pointOverloads(); + void destructor(); + void cacheKey(); + + void smoothScale(); + void smoothScale2(); + void smoothScale3(); + + void smoothScaleBig(); + void smoothScaleAlpha(); + + void transformed_data(); + void transformed(); + void transformed2(); + + void scaled(); + + void paintEngine(); + void setAlphaChannelWhilePainting(); + + void smoothScaledSubImage(); + + void nullSize_data(); + void nullSize(); + + void premultipliedAlphaConsistency(); + + void compareIndexed(); + + void fillColor_data(); + void fillColor(); + + void fillColorWithAlpha(); + + void rgbSwapped_data(); + void rgbSwapped(); + + void deepCopyWhenPaintingActive(); + void scaled_QTBUG19157(); +}; + +tst_QImage::tst_QImage() + +{ +} + +void tst_QImage::swap() +{ + QImage i1( 16, 16, QImage::Format_RGB32 ), i2( 32, 32, QImage::Format_RGB32 ); + i1.fill( Qt::white ); + i2.fill( Qt::black ); + const qint64 i1k = i1.cacheKey(); + const qint64 i2k = i2.cacheKey(); + i1.swap(i2); + QCOMPARE(i1.cacheKey(), i2k); + QCOMPARE(i1.size(), QSize(32,32)); + QCOMPARE(i2.cacheKey(), i1k); + QCOMPARE(i2.size(), QSize(16,16)); +} + +// Test if QImage (or any functions called from QImage) throws an +// exception when creating an extremely large image. +// QImage::create() should return "false" in this case. +void tst_QImage::create() +{ + bool cr = true; +#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) + QT_TRY { +#endif + //QImage image(7000000, 7000000, 8, 256, QImage::IgnoreEndian); + QImage image(7000000, 7000000, QImage::Format_Indexed8); + image.setColorCount(256); + cr = !image.isNull(); +#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) + } QT_CATCH (...) { + } +#endif + QVERIFY( !cr ); +} + +void tst_QImage::createInvalidXPM() +{ + QTest::ignoreMessage(QtWarningMsg, "QImage::QImage(), XPM is not supported"); + const char *xpm[] = {""}; + QImage invalidXPM(xpm); + QVERIFY(invalidXPM.isNull()); +} + +void tst_QImage::createFromUChar() +{ + uchar data[] = { +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + 0xFF, +#endif + 1,1,1, 0xFF, 2,2,2, 0xFF, 3,3,3, 0xFF, 4,4,4, +#if Q_BYTE_ORDER != Q_BIG_ENDIAN + 0xFF, +#endif + }; + + // When the data is const, nothing you do to the image will change the source data. + QImage i1((const uchar*)data, 2, 2, 8, QImage::Format_RGB32); + QCOMPARE(i1.pixel(0,0), 0xFF010101U); + QCOMPARE(i1.pixel(1,0), 0xFF020202U); + QCOMPARE(i1.pixel(0,1), 0xFF030303U); + QCOMPARE(i1.pixel(1,1), 0xFF040404U); + { + QImage i(i1); + i.setPixel(0,0,5); + } + QCOMPARE(i1.pixel(0,0), 0xFF010101U); + QCOMPARE(*(QRgb*)data, 0xFF010101U); + *((QRgb*)i1.bits()) = 7U; + QCOMPARE(i1.pixel(0,0), 7U); + QCOMPARE(*(QRgb*)data, 0xFF010101U); + + // Changing copies should not change the original image or data. + { + QImage i(i1); + i.setPixel(0,0,5); + QCOMPARE(*(QRgb*)data, 0xFF010101U); + i1.setPixel(0,0,9); + QCOMPARE(i1.pixel(0,0), 0xFF000009U); + QCOMPARE(i.pixel(0,0), 0xFF000005U); + } + QCOMPARE(i1.pixel(0,0), 0xFF000009U); + + // When the data is non-const, nothing you do to copies of the image will change the source data, + // but changing the image (here via bits()) will change the source data. + QImage i2((uchar*)data, 2, 2, 8, QImage::Format_RGB32); + QCOMPARE(i2.pixel(0,0), 0xFF010101U); + QCOMPARE(i2.pixel(1,0), 0xFF020202U); + QCOMPARE(i2.pixel(0,1), 0xFF030303U); + QCOMPARE(i2.pixel(1,1), 0xFF040404U); + { + QImage i(i2); + i.setPixel(0,0,5); + } + QCOMPARE(i2.pixel(0,0), 0xFF010101U); + QCOMPARE(*(QRgb*)data, 0xFF010101U); + *((QRgb*)i2.bits()) = 7U; + QCOMPARE(i2.pixel(0,0), 7U); + QCOMPARE(*(QRgb*)data, 7U); + + // Changing the data will change the image in either case. + QImage i3((uchar*)data, 2, 2, 8, QImage::Format_RGB32); + QImage i4((const uchar*)data, 2, 2, 8, QImage::Format_RGB32); + *(QRgb*)data = 6U; + QCOMPARE(i3.pixel(0,0), 6U); + QCOMPARE(i4.pixel(0,0), 6U); +} + +void tst_QImage::formatHandlersInput_data() +{ + QTest::addColumn<QString>("testFormat"); + QTest::addColumn<QString>("testFile"); + #ifdef Q_OS_SYMBIAN + const QString prefix = QLatin1String(SRCDIR) + "images/"; + #else + const QString prefix = QLatin1String(SRCDIR) + "/images/"; + #endif + + // add a new line here when a file is added + QTest::newRow("ICO") << "ICO" << prefix + "image.ico"; + QTest::newRow("PNG") << "PNG" << prefix + "image.png"; + QTest::newRow("GIF") << "GIF" << prefix + "image.gif"; + QTest::newRow("BMP") << "BMP" << prefix + "image.bmp"; + QTest::newRow("JPEG") << "JPEG" << prefix + "image.jpg"; + QTest::newRow("PBM") << "PBM" << prefix + "image.pbm"; + QTest::newRow("PGM") << "PGM" << prefix + "image.pgm"; + QTest::newRow("PPM") << "PPM" << prefix + "image.ppm"; + QTest::newRow("XBM") << "XBM" << prefix + "image.xbm"; + QTest::newRow("XPM") << "XPM" << prefix + "image.xpm"; +#if defined QTEST_HAVE_TIFF + QTest::newRow("TIFF") << "TIFF" << prefix + "image.tif"; +#endif +} + +void tst_QImage::formatHandlersInput() +{ + QFETCH(QString, testFormat); + QFETCH(QString, testFile); + QList<QByteArray> formats = QImageReader::supportedImageFormats(); + // qDebug("Image input formats : %s", formats.join(" | ").latin1()); + + bool formatSupported = false; + for (QList<QByteArray>::Iterator it = formats.begin(); it != formats.end(); ++it) { + if (*it == testFormat.toLower()) { + formatSupported = true; + break; + } + } + if (formatSupported) { +// qDebug(QImage::imageFormat(testFile)); + QCOMPARE(testFormat.toLatin1().toLower(), QImageReader::imageFormat(testFile)); + } else { + QString msg = "Format not supported : "; + QSKIP(QString(msg + testFormat).toLatin1(), SkipSingle); + } +} + +void tst_QImage::setAlphaChannel_data() +{ + QTest::addColumn<int>("red"); + QTest::addColumn<int>("green"); + QTest::addColumn<int>("blue"); + QTest::addColumn<int>("alpha"); + QTest::addColumn<bool>("gray"); + + QTest::newRow("red at 0%, gray") << 255 << 0 << 0 << 0 << true; + QTest::newRow("red at 25%, gray") << 255 << 0 << 0 << 63 << true; + QTest::newRow("red at 50%, gray") << 255 << 0 << 0 << 127 << true; + QTest::newRow("red at 100%, gray") << 255 << 0 << 0 << 191 << true; + QTest::newRow("red at 0%, 32bit") << 255 << 0 << 0 << 0 << false; + QTest::newRow("red at 25%, 32bit") << 255 << 0 << 0 << 63 << false; + QTest::newRow("red at 50%, 32bit") << 255 << 0 << 0 << 127 << false; + QTest::newRow("red at 100%, 32bit") << 255 << 0 << 0 << 191 << false; + + QTest::newRow("green at 0%, gray") << 0 << 255 << 0 << 0 << true; + QTest::newRow("green at 25%, gray") << 0 << 255 << 0 << 63 << true; + QTest::newRow("green at 50%, gray") << 0 << 255 << 0 << 127 << true; + QTest::newRow("green at 100%, gray") << 0 << 255 << 0 << 191 << true; + QTest::newRow("green at 0%, 32bit") << 0 << 255 << 0 << 0 << false; + QTest::newRow("green at 25%, 32bit") << 0 << 255 << 0 << 63 << false; + QTest::newRow("green at 50%, 32bit") << 0 << 255 << 0 << 127 << false; + QTest::newRow("green at 100%, 32bit") << 0 << 255 << 0 << 191 << false; + + QTest::newRow("blue at 0%, gray") << 0 << 0 << 255 << 0 << true; + QTest::newRow("blue at 25%, gray") << 0 << 0 << 255 << 63 << true; + QTest::newRow("blue at 50%, gray") << 0 << 0 << 255 << 127 << true; + QTest::newRow("blue at 100%, gray") << 0 << 0 << 255 << 191 << true; + QTest::newRow("blue at 0%, 32bit") << 0 << 0 << 255 << 0 << false; + QTest::newRow("blue at 25%, 32bit") << 0 << 0 << 255 << 63 << false; + QTest::newRow("blue at 50%, 32bit") << 0 << 0 << 255 << 127 << false; + QTest::newRow("blue at 100%, 32bit") << 0 << 0 << 255 << 191 << false; +} + +void tst_QImage::setAlphaChannel() +{ + QFETCH(int, red); + QFETCH(int, green); + QFETCH(int, blue); + QFETCH(int, alpha); + QFETCH(bool, gray); + + int width = 100; + int height = 100; + + QImage image(width, height, QImage::Format_RGB32); + image.fill(qRgb(red, green, blue)); + + // Create the alpha channel + QImage alphaChannel; + if (gray) { + alphaChannel = QImage(width, height, QImage::Format_Indexed8); + alphaChannel.setColorCount(256); + for (int i=0; i<256; ++i) + alphaChannel.setColor(i, qRgb(i, i, i)); + alphaChannel.fill(alpha); + } else { + alphaChannel = QImage(width, height, QImage::Format_ARGB32); + alphaChannel.fill(qRgb(alpha, alpha, alpha)); + } + + image.setAlphaChannel(alphaChannel); + image = image.convertToFormat(QImage::Format_ARGB32); + QVERIFY(image.format() == QImage::Format_ARGB32); + + // alpha of 0 becomes black at a=0 due to premultiplication + QRgb pixel = alpha == 0 ? 0 : qRgba(red, green, blue, alpha); + bool allPixelsOK = true; + for (int y=0; y<height; ++y) { + for (int x=0; x<width; ++x) { + allPixelsOK &= image.pixel(x, y) == pixel; + } + } + QVERIFY(allPixelsOK); + + QImage outAlpha = image.alphaChannel(); + QCOMPARE(outAlpha.size(), image.size()); + + bool allAlphaOk = true; + for (int y=0; y<height; ++y) { + for (int x=0; x<width; ++x) { + allAlphaOk &= outAlpha.pixelIndex(x, y) == alpha; + } + } + QVERIFY(allAlphaOk); + +} + +void tst_QImage::alphaChannel() +{ + QImage img(10, 10, QImage::Format_Mono); + img.setColor(0, Qt::transparent); + img.setColor(1, Qt::black); + img.fill(0); + + QPainter p(&img); + p.fillRect(2, 2, 6, 6, Qt::black); + p.end(); + + QCOMPARE(img.alphaChannel(), img.convertToFormat(QImage::Format_ARGB32).alphaChannel()); +} + +void tst_QImage::convertToFormat_data() +{ + QTest::addColumn<int>("inFormat"); + QTest::addColumn<uint>("inPixel"); + QTest::addColumn<int>("resFormat"); + QTest::addColumn<uint>("resPixel"); + + QTest::newRow("red rgb32 -> argb32") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green rgb32 -> argb32") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue rgb32 -> argb32") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + + QTest::newRow("red rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_RGB16) << 0xffff0000; + QTest::newRow("green rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_RGB16) << 0xff00ff00; + QTest::newRow("blue rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_RGB16) << 0xff0000ff; + QTest::newRow("funky rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xfff0c080 + << int(QImage::Format_RGB16) << 0xfff7c384; + + QTest::newRow("red rgb32 -> argb32_pm") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_ARGB32_Premultiplied) << 0xffff0000; + QTest::newRow("green rgb32 -> argb32_pm") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_ARGB32_Premultiplied) <<0xff00ff00; + QTest::newRow("blue rgb32 -> argb32_pm") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_ARGB32_Premultiplied) << 0xff0000ff; + + QTest::newRow("semired argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u; + QTest::newRow("semigreen argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u; + QTest::newRow("semiblue argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu; + QTest::newRow("semiwhite argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7fffffffu + << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu; + QTest::newRow("semiblack argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7f000000u + << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u; + + QTest::newRow("semired pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_ARGB32) << 0x7fff0000u; + QTest::newRow("semigreen pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_ARGB32) << 0x7f00ff00u; + QTest::newRow("semiblue pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_ARGB32) << 0x7f0000ffu; + QTest::newRow("semiwhite pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_ARGB32) << 0x7fffffffu; + QTest::newRow("semiblack pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_ARGB32) << 0x7f000000u; + + QTest::newRow("semired pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_RGB32) << 0xffff0000u; + QTest::newRow("semigreen pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_RGB32) << 0xff00ff00u; + QTest::newRow("semiblue pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_RGB32) << 0xff0000ffu; + QTest::newRow("semiwhite pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_RGB32) << 0xffffffffu; + QTest::newRow("semiblack pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_RGB32) << 0xff000000u; + + QTest::newRow("semired argb32 -> rgb32") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_RGB32) << 0xffff0000u; + QTest::newRow("semigreen argb32 -> rgb32") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_RGB32) << 0xff00ff00u; + QTest::newRow("semiblue argb32 -> rgb32") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_RGB32) << 0xff0000ffu; + QTest::newRow("semiwhite argb -> rgb32") << int(QImage::Format_ARGB32) << 0x7fffffffu + << int(QImage::Format_RGB32) << 0xffffffffu; + QTest::newRow("semiblack argb -> rgb32") << int(QImage::Format_ARGB32) << 0x7f000000u + << int(QImage::Format_RGB32) << 0xff000000u; + + QTest::newRow("black mono -> rgb32") << int(QImage::Format_Mono) << 0x00000000u + << int(QImage::Format_RGB32) << 0xff000000u; + + QTest::newRow("white mono -> rgb32") << int(QImage::Format_Mono) << 0x00000001u + << int(QImage::Format_RGB32) << 0xffffffffu; + QTest::newRow("red rgb16 -> argb32") << int(QImage::Format_RGB16) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green rgb16 -> argb32") << int(QImage::Format_RGB16) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue rgb16 -> argb32") << int(QImage::Format_RGB16) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + QTest::newRow("red rgb16 -> rgb16") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_RGB16) << 0xffff0000; + QTest::newRow("green rgb16 -> rgb16") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_RGB16) << 0xff00ff00; + QTest::newRow("blue rgb16 -> rgb16") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_RGB16) << 0xff0000ff; + QTest::newRow("semired argb32 -> rgb16") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_RGB16) << 0xffff0000; + QTest::newRow("semigreen argb32 -> rgb16") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_RGB16) << 0xff00ff00; + QTest::newRow("semiblue argb32 -> rgb16") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_RGB16) << 0xff0000ff; + QTest::newRow("semired pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_RGB16) << 0xffff0000u; + + QTest::newRow("semigreen pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_RGB16) << 0xff00ff00u; + QTest::newRow("semiblue pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_RGB16) << 0xff0000ffu; + QTest::newRow("semiwhite pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_RGB16) << 0xffffffffu; + QTest::newRow("semiblack pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_RGB16) << 0xff000000u; + + QTest::newRow("mono -> mono lsb") << int(QImage::Format_Mono) << 1u + << int(QImage::Format_MonoLSB) << 0xffffffffu; + QTest::newRow("mono lsb -> mono") << int(QImage::Format_MonoLSB) << 1u + << int(QImage::Format_Mono) << 0xffffffffu; + + QTest::newRow("red rgb32 -> rgb666") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_RGB666) << 0xffff0000; + QTest::newRow("green rgb32 -> rgb666") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_RGB666) << 0xff00ff00; + QTest::newRow("blue rgb32 -> rgb666") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_RGB666) << 0xff0000ff; + + QTest::newRow("red rgb16 -> rgb666") << int(QImage::Format_RGB16) << 0xffff0000 + << int(QImage::Format_RGB666) << 0xffff0000; + QTest::newRow("green rgb16 -> rgb666") << int(QImage::Format_RGB16) << 0xff00ff00 + << int(QImage::Format_RGB666) << 0xff00ff00; + QTest::newRow("blue rgb16 -> rgb666") << int(QImage::Format_RGB16) << 0xff0000ff + << int(QImage::Format_RGB666) << 0xff0000ff; + + QTest::newRow("red rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_RGB555) << 0xffff0000; + QTest::newRow("green rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_RGB555) << 0xff00ff00; + QTest::newRow("blue rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_RGB555) << 0xff0000ff; + QTest::newRow("funky rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xfff0c080 + << int(QImage::Format_RGB555) << 0xfff7c684; + + QTest::newRow("red rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xffff0000 + << int(QImage::Format_RGB555) << 0xffff0000; + QTest::newRow("green rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xff00ff00 + << int(QImage::Format_RGB555) << 0xff00ff00; + QTest::newRow("blue rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xff0000ff + << int(QImage::Format_RGB555) << 0xff0000ff; + QTest::newRow("funky rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xfff0c080 + << int(QImage::Format_RGB555) << 0xfff7c684; + + QTest::newRow("red rgb32 -> argb8565") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_ARGB8565_Premultiplied) << 0xffff0000; + QTest::newRow("green rgb32 -> argb8565") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_ARGB8565_Premultiplied) << 0xff00ff00; + QTest::newRow("blue rgb32 -> argb8565") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_ARGB8565_Premultiplied) << 0xff0000ff; + + QTest::newRow("red rgb16 -> argb8565") << int(QImage::Format_RGB16) << 0xffff0000 + << int(QImage::Format_ARGB8565_Premultiplied) << 0xffff0000; + QTest::newRow("green rgb16 -> argb8565") << int(QImage::Format_RGB16) << 0xff00ff00 + << int(QImage::Format_ARGB8565_Premultiplied) << 0xff00ff00; + QTest::newRow("blue rgb16 -> argb8565") << int(QImage::Format_RGB16) << 0xff0000ff + << int(QImage::Format_ARGB8565_Premultiplied) << 0xff0000ff; + + QTest::newRow("red argb8565 -> argb32") << int(QImage::Format_ARGB8565_Premultiplied) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green argb8565 -> argb32") << int(QImage::Format_ARGB8565_Premultiplied) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue argb8565 -> argb32") << int(QImage::Format_ARGB8565_Premultiplied) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + + QTest::newRow("semired argb32 -> argb8565") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f7b0000u; + QTest::newRow("semigreen argb32 -> argb8565") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f007d00u; + QTest::newRow("semiblue argb32 -> argb8565") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f00007bu; + + QTest::newRow("semired pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f7b0000u; + QTest::newRow("semigreen pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f007d00u; + QTest::newRow("semiblue pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f00007bu; + QTest::newRow("semiwhite pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f7b7d7bu; + QTest::newRow("semiblack pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f000000u; + + QTest::newRow("red rgb666 -> argb32") << int(QImage::Format_RGB666) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green rgb666 -> argb32") << int(QImage::Format_RGB666) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue rgb666 -> argb32") << int(QImage::Format_RGB666) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + + QTest::newRow("semired argb32 -> rgb666") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_RGB666) << 0xffff0000; + QTest::newRow("semigreen argb32 -> rgb666") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_RGB666) << 0xff00ff00; + QTest::newRow("semiblue argb32 -> rgb666") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_RGB666) << 0xff0000ff; + + QTest::newRow("semired pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_RGB666) << 0xffff0000u; + QTest::newRow("semigreen pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_RGB666) << 0xff00ff00u; + QTest::newRow("semiblue pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_RGB666) << 0xff0000ffu; + QTest::newRow("semiwhite pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_RGB666) << 0xffffffffu; + QTest::newRow("semiblack pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_RGB666) << 0xff000000u; + + QTest::newRow("red rgb15 -> argb32") << int(QImage::Format_RGB555) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green rgb15 -> argb32") << int(QImage::Format_RGB555) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue rgb15 -> argb32") << int(QImage::Format_RGB555) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + + QTest::newRow("semired argb32 -> rgb15") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_RGB555) << 0xffff0000; + QTest::newRow("semigreen argb32 -> rgb15") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_RGB555) << 0xff00ff00; + QTest::newRow("semiblue argb32 -> rgb15") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_RGB555) << 0xff0000ff; + + QTest::newRow("semired pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_RGB555) << 0xffff0000u; + QTest::newRow("semigreen pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_RGB555) << 0xff00ff00u; + QTest::newRow("semiblue pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_RGB555) << 0xff0000ffu; + QTest::newRow("semiwhite pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_RGB555) << 0xffffffffu; + QTest::newRow("semiblack pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_RGB555) << 0xff000000u; + + + QTest::newRow("red rgb32 -> argb8555") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_ARGB8555_Premultiplied) << 0xffff0000; + QTest::newRow("green rgb32 -> argb8555") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_ARGB8555_Premultiplied) << 0xff00ff00; + QTest::newRow("blue rgb32 -> argb8555") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_ARGB8555_Premultiplied) << 0xff0000ff; + + QTest::newRow("red rgb16 -> argb8555") << int(QImage::Format_RGB16) << 0xffff0000 + << int(QImage::Format_ARGB8555_Premultiplied) << 0xffff0000; + QTest::newRow("green rgb16 -> argb8555") << int(QImage::Format_RGB16) << 0xff00ff00 + << int(QImage::Format_ARGB8555_Premultiplied) << 0xff00ff00; + QTest::newRow("blue rgb16 -> argb8555") << int(QImage::Format_RGB16) << 0xff0000ff + << int(QImage::Format_ARGB8555_Premultiplied) << 0xff0000ff; + + QTest::newRow("red argb8555 -> argb32") << int(QImage::Format_ARGB8555_Premultiplied) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green argb8555 -> argb32") << int(QImage::Format_ARGB8555_Premultiplied) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue argb8555 -> argb32") << int(QImage::Format_ARGB8555_Premultiplied) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + + QTest::newRow("semired argb32 -> argb8555") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f7b0000u; + QTest::newRow("semigreen argb32 -> argb8555") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f007b00u; + QTest::newRow("semiblue argb32 -> argb8555") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f00007bu; + + QTest::newRow("semired pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f7b0000u; + QTest::newRow("semigreen pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f007b00u; + QTest::newRow("semiblue pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f00007bu; + QTest::newRow("semiwhite pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f7b7b7bu; + QTest::newRow("semiblack pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f000000u; + + QTest::newRow("red rgb32 -> rgb888") << int(QImage::Format_RGB32) << 0xffff0000 + << int(QImage::Format_RGB888) << 0xffff0000; + QTest::newRow("green rgb32 -> rgb888") << int(QImage::Format_RGB32) << 0xff00ff00 + << int(QImage::Format_RGB888) << 0xff00ff00; + QTest::newRow("blue rgb32 -> rgb888") << int(QImage::Format_RGB32) << 0xff0000ff + << int(QImage::Format_RGB888) << 0xff0000ff; + + QTest::newRow("red rgb16 -> rgb888") << int(QImage::Format_RGB16) << 0xffff0000 + << int(QImage::Format_RGB888) << 0xffff0000; + QTest::newRow("green rgb16 -> rgb888") << int(QImage::Format_RGB16) << 0xff00ff00 + << int(QImage::Format_RGB888) << 0xff00ff00; + QTest::newRow("blue rgb16 -> rgb888") << int(QImage::Format_RGB16) << 0xff0000ff + << int(QImage::Format_RGB888) << 0xff0000ff; + + QTest::newRow("red rgb888 -> argb32") << int(QImage::Format_RGB888) << 0xffff0000 + << int(QImage::Format_ARGB32) << 0xffff0000; + QTest::newRow("green rgb888 -> argb32") << int(QImage::Format_RGB888) << 0xff00ff00 + << int(QImage::Format_ARGB32) << 0xff00ff00; + QTest::newRow("blue rgb888 -> argb32") << int(QImage::Format_RGB888) << 0xff0000ff + << int(QImage::Format_ARGB32) << 0xff0000ff; + + QTest::newRow("semired argb32 -> rgb888") << int(QImage::Format_ARGB32) << 0x7fff0000u + << int(QImage::Format_RGB888) << 0xffff0000; + QTest::newRow("semigreen argb32 -> rgb888") << int(QImage::Format_ARGB32) << 0x7f00ff00u + << int(QImage::Format_RGB888) << 0xff00ff00; + QTest::newRow("semiblue argb32 -> rgb888") << int(QImage::Format_ARGB32) << 0x7f0000ffu + << int(QImage::Format_RGB888) << 0xff0000ff; + + QTest::newRow("semired pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u + << int(QImage::Format_RGB888) << 0xffff0000u; + QTest::newRow("semigreen pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u + << int(QImage::Format_RGB888) << 0xff00ff00u; + QTest::newRow("semiblue pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu + << int(QImage::Format_RGB888) << 0xff0000ffu; + QTest::newRow("semiwhite pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu + << int(QImage::Format_RGB888) << 0xffffffffu; + QTest::newRow("semiblack pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u + << int(QImage::Format_RGB888) << 0xff000000u; +} + + +void tst_QImage::convertToFormat() +{ + QFETCH(int, inFormat); + QFETCH(uint, inPixel); + QFETCH(int, resFormat); + QFETCH(uint, resPixel); + + QImage src(32, 32, QImage::Format(inFormat)); + + if (inFormat == QImage::Format_Mono) { + src.setColor(0, qRgba(0,0,0,0xff)); + src.setColor(1, qRgba(255,255,255,0xff)); + } + + for (int y=0; y<src.height(); ++y) + for (int x=0; x<src.width(); ++x) + src.setPixel(x, y, inPixel); + + QImage result = src.convertToFormat(QImage::Format(resFormat)); + + QCOMPARE(src.width(), result.width()); + QCOMPARE(src.height(), result.height()); + + bool same = true; + for (int y=0; y<result.height(); ++y) { + for (int x=0; x<result.width(); ++x) { + QRgb pixel = result.pixel(x, y); + same &= (pixel == resPixel); + if (!same) { + printf("expect=%08x, result=%08x\n", resPixel, pixel); + y = 100000; + break; + } + + } + } + QVERIFY(same); + + // repeat tests converting from an image with nonstandard stride + + int dp = (src.depth() < 8 || result.depth() < 8) ? 8 : 1; + QImage src2(src.bits() + (dp*src.depth())/8, + src.width() - dp*2, + src.height(), src.bytesPerLine(), + src.format()); + if (src.depth() < 8) + src2.setColorTable(src.colorTable()); + + const QImage result2 = src2.convertToFormat(QImage::Format(resFormat)); + + QCOMPARE(src2.width(), result2.width()); + QCOMPARE(src2.height(), result2.height()); + + QImage expected2(result.bits() + (dp*result.depth())/8, + result.width() - dp*2, + result.height(), result.bytesPerLine(), + result.format()); + if (result.depth() < 8) + expected2.setColorTable(result.colorTable()); + + result2.save("result2.xpm", "XPM"); + expected2.save("expected2.xpm", "XPM"); + + QCOMPARE(result2, expected2); + QFile::remove(QLatin1String("result2.xpm")); + QFile::remove(QLatin1String("expected2.xpm")); +} + +void tst_QImage::convertToFormatRgb888ToRGB32() +{ + // 545 so width % 4 != 0. This ensure there is padding at the end of the scanlines + const int height = 545; + const int width = 545; + QImage source(width, height, QImage::Format_RGB888); + for (int y = 0; y < height; ++y) { + uchar *srcPixels = source.scanLine(y); + for (int x = 0; x < width * 3; ++x) + srcPixels[x] = x; + } + + QImage rgb32Image = source.convertToFormat(QImage::Format_RGB888); + QCOMPARE(rgb32Image.format(), QImage::Format_RGB888); + for (int x = 0; x < width; ++x) { + for (int y = 0; y < height; ++y) + QCOMPARE(rgb32Image.pixel(x, y), source.pixel(x, y)); + } +} + +void tst_QImage::createAlphaMask_data() +{ + QTest::addColumn<int>("x"); + QTest::addColumn<int>("y"); + QTest::addColumn<int>("alpha1"); + QTest::addColumn<int>("alpha2"); + + int alphas[] = { 0, 127, 255 }; + + for (unsigned a1 = 0; a1 < sizeof(alphas) / sizeof(int); ++a1) { + for (unsigned a2 = 0; a2 < sizeof(alphas) / sizeof(int); ++a2) { + if (a1 == a2) + continue; + for (int x=10; x<18; x+=3) { + for (int y=100; y<108; y+=3) { + QTest::newRow(qPrintable(QString::fromLatin1("x=%1, y=%2, a1=%3, a2=%4").arg(x).arg(y).arg(alphas[a1]).arg(alphas[a2]))) + << x << y << alphas[a1] << alphas[a2]; + } + } + } + } +} + +void tst_QImage::createAlphaMask() +{ + QFETCH(int, x); + QFETCH(int, y); + QFETCH(int, alpha1); + QFETCH(int, alpha2); + + QSize size(255, 255); + int pixelsInLines = size.width() + size.height() - 1; + int pixelsOutofLines = size.width() * size.height() - pixelsInLines; + + // Generate an white image with two lines, horizontal at y and vertical at x. + // Lines have alpha of alpha2, rest has alpha of alpha1 + QImage image(size, QImage::Format_ARGB32); + for (int cy=0; cy<image.height(); ++cy) { + for (int cx=0; cx<image.width(); ++cx) { + int alpha = (y == cy || x == cx) ? alpha2 : alpha1; + image.setPixel(cx, cy, qRgba(255, 255, 255, alpha)); + } + } + + QImage mask = image.createAlphaMask(Qt::OrderedAlphaDither); + + // Sanity check... + QCOMPARE(mask.width(), image.width()); + QCOMPARE(mask.height(), image.height()); + + // Sum up the number of pixels set for both lines and other area + int sumAlpha1 = 0; + int sumAlpha2 = 0; + for (int cy=0; cy<image.height(); ++cy) { + for (int cx=0; cx<image.width(); ++cx) { + int *alpha = (y == cy || x == cx) ? &sumAlpha2 : &sumAlpha1; + *alpha += mask.pixelIndex(cx, cy); + } + } + + // Compare the set bits to whats expected for that alpha. + const int threshold = 5; + QVERIFY(qAbs(sumAlpha1 * 255 / pixelsOutofLines - alpha1) < threshold); + QVERIFY(qAbs(sumAlpha2 * 255 / pixelsInLines - alpha2) < threshold); +} + +void tst_QImage::dotsPerMeterZero() +{ + QImage img(100, 100, QImage::Format_RGB32); + QVERIFY(!img.isNull()); + + int defaultDpmX = img.dotsPerMeterX(); + int defaultDpmY = img.dotsPerMeterY(); + QVERIFY(defaultDpmX != 0); + QVERIFY(defaultDpmY != 0); + + img.setDotsPerMeterX(0); + img.setDotsPerMeterY(0); + + QCOMPARE(img.dotsPerMeterX(), defaultDpmX); + QCOMPARE(img.dotsPerMeterY(), defaultDpmY); +} + +void tst_QImage::rotate_data() +{ + QTest::addColumn<QImage::Format>("format"); + QTest::addColumn<int>("degrees"); + + QVector<int> degrees; + degrees << 0 << 90 << 180 << 270; + + foreach (int d, degrees) { + QString title = QString("%1 %2").arg(d); + QTest::newRow(qPrintable(title.arg("Format_RGB32"))) + << QImage::Format_RGB32 << d; + QTest::newRow(qPrintable(title.arg("Format_ARGB32"))) + << QImage::Format_ARGB32 << d; + QTest::newRow(qPrintable(title.arg("Format_ARGB32_Premultiplied"))) + << QImage::Format_ARGB32_Premultiplied << d; + QTest::newRow(qPrintable(title.arg("Format_RGB16"))) + << QImage::Format_RGB16 << d; + QTest::newRow(qPrintable(title.arg("Format_ARGB8565_Premultiplied"))) + << QImage::Format_ARGB8565_Premultiplied << d; + QTest::newRow(qPrintable(title.arg("Format_RGB666"))) + << QImage::Format_RGB666 << d; + QTest::newRow(qPrintable(title.arg("Format_RGB555"))) + << QImage::Format_RGB555 << d; + QTest::newRow(qPrintable(title.arg("Format_ARGB8555_Premultiplied"))) + << QImage::Format_ARGB8555_Premultiplied << d; + QTest::newRow(qPrintable(title.arg("Format_RGB888"))) + << QImage::Format_RGB888 << d; + QTest::newRow(qPrintable(title.arg("Format_Indexed8"))) + << QImage::Format_Indexed8 << d; + } +} + +void tst_QImage::rotate() +{ + QFETCH(QImage::Format, format); + QFETCH(int, degrees); + + // test if rotate90 is lossless + int w = 54; + int h = 13; + QImage original(w, h, format); + original.fill(qRgb(255,255,255)); + + if (format == QImage::Format_Indexed8) { + original.setColorCount(256); + for (int i = 0; i < 255; ++i) + original.setColor(i, qRgb(0, i, i)); + } + + if (original.colorTable().isEmpty()) { + for (int x = 0; x < w; ++x) { + original.setPixel(x,0, qRgb(x,0,128)); + original.setPixel(x,h - 1, qRgb(0,255 - x,128)); + } + for (int y = 0; y < h; ++y) { + original.setPixel(0, y, qRgb(y,0,255)); + original.setPixel(w - 1, y, qRgb(0,255 - y,255)); + } + } else { + const int n = original.colorTable().size(); + for (int x = 0; x < w; ++x) { + original.setPixel(x, 0, x % n); + original.setPixel(x, h - 1, n - (x % n) - 1); + } + for (int y = 0; y < h; ++y) { + original.setPixel(0, y, y % n); + original.setPixel(w - 1, y, n - (y % n) - 1); + } + } + + // original.save("rotated90_original.png", "png"); + + // Initialize the matrix manually (do not use rotate) to avoid rounding errors + QMatrix matRotate90; + matRotate90.rotate(degrees); + QImage dest = original; + // And rotate it 4 times, then the image should be identical to the original + for (int i = 0; i < 4 ; ++i) { + dest = dest.transformed(matRotate90); + } + + // Make sure they are similar in format before we compare them. + dest = dest.convertToFormat(format); + + // dest.save("rotated90_result.png","png"); + QCOMPARE(original, dest); + + // Test with QMatrix::rotate 90 also, since we trust that now + matRotate90.rotate(degrees); + dest = original; + // And rotate it 4 times, then the image should be identical to the original + for (int i = 0; i < 4 ; ++i) { + dest = dest.transformed(matRotate90); + } + + // Make sure they are similar in format before we compare them. + dest = dest.convertToFormat(format); + + QCOMPARE(original, dest); +} + +void tst_QImage::copy() +{ + // Task 99250 + { + QImage img(16,16,QImage::Format_ARGB32); + img.copy(QRect(1000,1,1,1)); + } +} + +void tst_QImage::setPixel_data() +{ + QTest::addColumn<int>("format"); + QTest::addColumn<uint>("value"); + QTest::addColumn<uint>("expected"); + + QTest::newRow("ARGB32 red") << int(QImage::Format_ARGB32) + << 0xffff0000 << 0xffff0000; + QTest::newRow("ARGB32 green") << int(QImage::Format_ARGB32) + << 0xff00ff00 << 0xff00ff00; + QTest::newRow("ARGB32 blue") << int(QImage::Format_ARGB32) + << 0xff0000ff << 0xff0000ff; + QTest::newRow("RGB16 red") << int(QImage::Format_RGB16) + << 0xffff0000 << 0xf800u; + QTest::newRow("RGB16 green") << int(QImage::Format_RGB16) + << 0xff00ff00 << 0x07e0u; + QTest::newRow("RGB16 blue") << int(QImage::Format_RGB16) + << 0xff0000ff << 0x001fu; + QTest::newRow("ARGB8565_Premultiplied red") << int(QImage::Format_ARGB8565_Premultiplied) + << 0xffff0000 << 0xffff0000; + QTest::newRow("ARGB8565_Premultiplied green") << int(QImage::Format_ARGB8565_Premultiplied) + << 0xff00ff00 << 0xff00ff00; + QTest::newRow("ARGB8565_Premultiplied blue") << int(QImage::Format_ARGB8565_Premultiplied) + << 0xff0000ff << 0xff0000ff; + QTest::newRow("RGB666 red") << int(QImage::Format_RGB666) + << 0xffff0000 << 0xffff0000; + QTest::newRow("RGB666 green") << int(QImage::Format_RGB666) + << 0xff00ff00 << 0xff00ff00;; + QTest::newRow("RGB666 blue") << int(QImage::Format_RGB666) + << 0xff0000ff << 0xff0000ff; + QTest::newRow("RGB555 red") << int(QImage::Format_RGB555) + << 0xffff0000 << 0x7c00u; + QTest::newRow("RGB555 green") << int(QImage::Format_RGB555) + << 0xff00ff00 << 0x03e0u; + QTest::newRow("RGB555 blue") << int(QImage::Format_RGB555) + << 0xff0000ff << 0x001fu; + QTest::newRow("ARGB8555_Premultiplied red") << int(QImage::Format_ARGB8555_Premultiplied) + << 0xffff0000 << 0xffff0000; + QTest::newRow("ARGB8555_Premultiplied green") << int(QImage::Format_ARGB8555_Premultiplied) + << 0xff00ff00 << 0xff00ff00; + QTest::newRow("ARGB8555_Premultiplied blue") << int(QImage::Format_ARGB8555_Premultiplied) + << 0xff0000ff << 0xff0000ff; + QTest::newRow("RGB888 red") << int(QImage::Format_RGB888) + << 0xffff0000 << 0xffff0000; + QTest::newRow("RGB888 green") << int(QImage::Format_RGB888) + << 0xff00ff00 << 0xff00ff00; + QTest::newRow("RGB888 blue") << int(QImage::Format_RGB888) + << 0xff0000ff << 0xff0000ff; +} + +void tst_QImage::setPixel() +{ + QFETCH(int, format); + QFETCH(uint, value); + QFETCH(uint, expected); + + const int w = 13; + const int h = 15; + + QImage img(w, h, QImage::Format(format)); + + // fill image + for (int y = 0; y < h; ++y) + for (int x = 0; x < w; ++x) + img.setPixel(x, y, value); + + // check pixel values + switch (format) { + case int(QImage::Format_RGB32): + case int(QImage::Format_ARGB32): + case int(QImage::Format_ARGB32_Premultiplied): + { + for (int y = 0; y < h; ++y) { + const quint32 *row = (const quint32*)(img.scanLine(y)); + for (int x = 0; x < w; ++x) { + quint32 result = row[x]; + if (result != expected) + printf("[x,y]: %d,%d, expected=%08x, result=%08x\n", + x, y, expected, result); + QCOMPARE(uint(result), expected); + } + } + break; + } + case int(QImage::Format_RGB555): + case int(QImage::Format_RGB16): + { + for (int y = 0; y < h; ++y) { + const quint16 *row = (const quint16*)(img.scanLine(y)); + for (int x = 0; x < w; ++x) { + quint16 result = row[x]; + if (result != expected) + printf("[x,y]: %d,%d, expected=%04x, result=%04x\n", + x, y, expected, result); + QCOMPARE(uint(result), expected); + } + } + break; + } + case int(QImage::Format_RGB666): + { + for (int y = 0; y < h; ++y) { + const qrgb666 *row = (const qrgb666*)(img.scanLine(y)); + for (int x = 0; x < w; ++x) { + quint32 result = row[x]; + if (result != expected) + printf("[x,y]: %d,%d, expected=%04x, result=%04x\n", + x, y, expected, result); + QCOMPARE(result, expected); + } + } + break; + } + case int(QImage::Format_ARGB8565_Premultiplied): + { + for (int y = 0; y < h; ++y) { + const qargb8565 *row = (const qargb8565*)(img.scanLine(y)); + for (int x = 0; x < w; ++x) { + quint32 result = row[x]; + if (result != expected) + printf("[x,y]: %d,%d, expected=%04x, result=%04x\n", + x, y, expected, result); + QCOMPARE(result, expected); + } + } + break; + } + case int(QImage::Format_ARGB8555_Premultiplied): + { + for (int y = 0; y < h; ++y) { + const qargb8555 *row = (const qargb8555*)(img.scanLine(y)); + for (int x = 0; x < w; ++x) { + quint32 result = row[x]; + if (result != expected) + printf("[x,y]: %d,%d, expected=%04x, result=%04x\n", + x, y, expected, result); + QCOMPARE(result, expected); + } + } + break; + } + case int(QImage::Format_RGB888): + { + for (int y = 0; y < h; ++y) { + const qrgb888 *row = (const qrgb888*)(img.scanLine(y)); + for (int x = 0; x < w; ++x) { + qrgb888 result = row[x]; + if (result != expected) + printf("[x,y]: %d,%d, expected=%04x, result=%04x\n", + x, y, expected, quint32(result)); + QCOMPARE(uint(result), expected); + } + } + break; + } + default: + qFatal("Test not implemented for format %d", format); + } +} + +void tst_QImage::convertToFormatPreserveDotsPrMeter() +{ + QImage img(100, 100, QImage::Format_ARGB32_Premultiplied); + + int dpmx = 123; + int dpmy = 234; + img.setDotsPerMeterX(dpmx); + img.setDotsPerMeterY(dpmy); + img.fill(0x12345678); + + img = img.convertToFormat(QImage::Format_RGB32); + + QCOMPARE(img.dotsPerMeterX(), dpmx); + QCOMPARE(img.dotsPerMeterY(), dpmy); +} + +#ifndef QT_NO_IMAGE_TEXT +void tst_QImage::convertToFormatPreserveText() +{ + QImage img(100, 100, QImage::Format_ARGB32_Premultiplied); + + img.setText("foo", "bar"); + img.setText("foo2", "bar2"); + img.fill(0x12345678); + + QStringList listResult; + listResult << "foo" << "foo2"; + QString result = "foo: bar\n\nfoo2: bar2"; + + QImage imgResult1 = img.convertToFormat(QImage::Format_RGB32); + QCOMPARE(imgResult1.text(), result); + QCOMPARE(imgResult1.textKeys(), listResult); + + QVector<QRgb> colorTable(4); + for (int i = 0; i < 4; ++i) + colorTable[i] = QRgb(42); + QImage imgResult2 = img.convertToFormat(QImage::Format_MonoLSB, + colorTable); + QCOMPARE(imgResult2.text(), result); + QCOMPARE(imgResult2.textKeys(), listResult); +} +#endif // QT_NO_IMAGE_TEXT + +void tst_QImage::setColorCount() +{ + QImage img(0, 0, QImage::Format_Indexed8); + QTest::ignoreMessage(QtWarningMsg, "QImage::setColorCount: null image"); + img.setColorCount(256); + QCOMPARE(img.colorCount(), 0); +} + +void tst_QImage::setColor() +{ + QImage img(0, 0, QImage::Format_Indexed8); + img.setColor(0, qRgba(18, 219, 108, 128)); + QCOMPARE(img.colorCount(), 0); + + QImage img2(1, 1, QImage::Format_Indexed8); + img2.setColor(0, qRgba(18, 219, 108, 128)); + QCOMPARE(img2.colorCount(), 1); +} + +/* Just some sanity checking that we don't draw outside the buffer of + * the image. Hopefully this will create crashes or at least some + * random test fails when broken. + */ +void tst_QImage::rasterClipping() +{ + QImage image(10, 10, QImage::Format_RGB32); + image.fill(0xffffffff); + + QPainter p(&image); + + p.drawLine(-1000, 5, 5, 5); + p.drawLine(-1000, 5, 1000, 5); + p.drawLine(5, 5, 1000, 5); + + p.drawLine(5, -1000, 5, 5); + p.drawLine(5, -1000, 5, 1000); + p.drawLine(5, 5, 5, 1000); + + p.setBrush(Qt::red); + + p.drawEllipse(3, 3, 4, 4); + p.drawEllipse(-100, -100, 210, 210); + + p.drawEllipse(-1000, 0, 2010, 2010); + p.drawEllipse(0, -1000, 2010, 2010); + p.drawEllipse(-2010, -1000, 2010, 2010); + p.drawEllipse(-1000, -2010, 2010, 2010); + QVERIFY(true); +} + +// Tests the new QPoint overloads in QImage in Qt 4.2 +void tst_QImage::pointOverloads() +{ + QImage image(100, 100, QImage::Format_RGB32); + image.fill(0xff00ff00); + + // IsValid + QVERIFY(image.valid(QPoint(0, 0))); + QVERIFY(image.valid(QPoint(99, 0))); + QVERIFY(image.valid(QPoint(0, 99))); + QVERIFY(image.valid(QPoint(99, 99))); + + QVERIFY(!image.valid(QPoint(50, -1))); // outside on the top + QVERIFY(!image.valid(QPoint(50, 100))); // outside on the bottom + QVERIFY(!image.valid(QPoint(-1, 50))); // outside on the left + QVERIFY(!image.valid(QPoint(100, 50))); // outside on the right + + // Test the pixel setter + image.setPixel(QPoint(10, 10), 0xff0000ff); + QCOMPARE(image.pixel(10, 10), 0xff0000ff); + + // pixel getter + QCOMPARE(image.pixel(QPoint(10, 10)), 0xff0000ff); + + // pixelIndex() + QImage indexed = image.convertToFormat(QImage::Format_Indexed8); + QCOMPARE(indexed.pixelIndex(10, 10), indexed.pixelIndex(QPoint(10, 10))); +} + +void tst_QImage::destructor() +{ + QPolygon poly(6); + poly.setPoint(0,-1455, 1435); + + QImage image(100, 100, QImage::Format_RGB32); + QPainter ptPix(&image); + ptPix.setPen(Qt::black); + ptPix.setBrush(Qt::black); + ptPix.drawPolygon(poly, Qt::WindingFill); + ptPix.end(); + +} + + +/* XPM */ +static const char *monoPixmap[] = { +/* width height ncolors chars_per_pixel */ +"4 4 2 1", +"x c #000000", +". c #ffffff", +/* pixels */ +"xxxx", +"x..x", +"x..x", +"xxxx" +}; + + +#ifndef QT_NO_IMAGE_HEURISTIC_MASK +void tst_QImage::createHeuristicMask() +{ + QImage img(monoPixmap); + img = img.convertToFormat(QImage::Format_MonoLSB); + QImage mask = img.createHeuristicMask(); + QImage newMask = mask.convertToFormat(QImage::Format_ARGB32_Premultiplied); + + // line 2 + QVERIFY(newMask.pixel(0,1) != newMask.pixel(1,1)); + QVERIFY(newMask.pixel(1,1) == newMask.pixel(2,1)); + QVERIFY(newMask.pixel(2,1) != newMask.pixel(3,1)); + + // line 3 + QVERIFY(newMask.pixel(0,2) != newMask.pixel(1,2)); + QVERIFY(newMask.pixel(1,2) == newMask.pixel(2,2)); + QVERIFY(newMask.pixel(2,2) != newMask.pixel(3,2)); +} +#endif + +void tst_QImage::cacheKey() +{ + QImage image1(2, 2, QImage::Format_RGB32); + qint64 image1_key = image1.cacheKey(); + QImage image2 = image1; + + QVERIFY(image2.cacheKey() == image1.cacheKey()); + image2.detach(); + QVERIFY(image2.cacheKey() != image1.cacheKey()); + QVERIFY(image1.cacheKey() == image1_key); +} + +void tst_QImage::smoothScale() +{ + unsigned int data[2] = { qRgba(0, 0, 0, 0), qRgba(128, 128, 128, 128) }; + + QImage imgX((unsigned char *)data, 2, 1, QImage::Format_ARGB32_Premultiplied); + QImage imgY((unsigned char *)data, 1, 2, QImage::Format_ARGB32_Premultiplied); + + QImage scaledX = imgX.scaled(QSize(4, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + QImage scaledY = imgY.scaled(QSize(1, 4), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + uint *scaled[2] = { + (unsigned int *)scaledX.bits(), + (unsigned int *)scaledY.bits() + }; + + int expected[4] = { 0, 32, 96, 128 }; + for (int image = 0; image < 2; ++image) { + for (int index = 0; index < 4; ++index) { + for (int component = 0; component < 4; ++component) { + int pixel = scaled[image][index]; + int val = (pixel >> (component * 8)) & 0xff; + + QCOMPARE(val, expected[index]); + } + } + } +} + +// test area sampling +void tst_QImage::smoothScale2() +{ + int sizes[] = { 2, 4, 8, 10, 16, 20, 32, 40, 64, 100, 101, 128, 0 }; + QImage::Format formats[] = { QImage::Format_ARGB32, QImage::Format_RGB32, QImage::Format_Invalid }; + for (int i = 0; sizes[i] != 0; ++i) { + for (int j = 0; formats[j] != QImage::Format_Invalid; ++j) { + int size = sizes[i]; + + QRgb expected = formats[j] == QImage::Format_ARGB32 ? qRgba(63, 127, 255, 255) : qRgb(63, 127, 255); + + QImage img(size, size, formats[j]); + img.fill(expected); + + // scale x down, y down + QImage scaled = img.scaled(QSize(1, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + QRgb pixel = scaled.pixel(0, 0); + QCOMPARE(qAlpha(pixel), qAlpha(expected)); + QCOMPARE(qRed(pixel), qRed(expected)); + QCOMPARE(qGreen(pixel), qGreen(expected)); + QCOMPARE(qBlue(pixel), qBlue(expected)); + + // scale x down, y up + scaled = img.scaled(QSize(1, size * 2), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + for (int y = 0; y < scaled.height(); ++y) { + pixel = scaled.pixel(0, y); + QCOMPARE(qAlpha(pixel), qAlpha(expected)); + QCOMPARE(qRed(pixel), qRed(expected)); + QCOMPARE(qGreen(pixel), qGreen(expected)); + QCOMPARE(qBlue(pixel), qBlue(expected)); + } + + // scale x up, y down + scaled = img.scaled(QSize(size * 2, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + for (int x = 0; x < scaled.width(); ++x) { + pixel = scaled.pixel(x, 0); + QCOMPARE(qAlpha(pixel), qAlpha(expected)); + QCOMPARE(qRed(pixel), qRed(expected)); + QCOMPARE(qGreen(pixel), qGreen(expected)); + QCOMPARE(qBlue(pixel), qBlue(expected)); + } + + // scale x up, y up + scaled = img.scaled(QSize(size * 2, size * 2), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + for (int y = 0; y < scaled.height(); ++y) { + for (int x = 0; x < scaled.width(); ++x) { + pixel = scaled.pixel(x, y); + QCOMPARE(qAlpha(pixel), qAlpha(expected)); + QCOMPARE(qRed(pixel), qRed(expected)); + QCOMPARE(qGreen(pixel), qGreen(expected)); + QCOMPARE(qBlue(pixel), qBlue(expected)); + } + } + } + } +} + +static inline int rand8() +{ + return int(256. * (qrand() / (RAND_MAX + 1.0))); +} + +// compares img.scale against the bilinear filtering used by QPainter +void tst_QImage::smoothScale3() +{ + QImage img(128, 128, QImage::Format_RGB32); + for (int y = 0; y < img.height(); ++y) { + for (int x = 0; x < img.width(); ++x) { + const int red = rand8(); + const int green = rand8(); + const int blue = rand8(); + const int alpha = 255; + + img.setPixel(x, y, qRgba(red, green, blue, alpha)); + } + } + + qreal scales[2] = { .5, 2 }; + + for (int i = 0; i < 2; ++i) { + QImage a = img.scaled(img.size() * scales[i], Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + QImage b(a.size(), a.format()); + b.fill(0x0); + + QPainter p(&b); + p.setRenderHint(QPainter::SmoothPixmapTransform); + p.scale(scales[i], scales[i]); + p.drawImage(0, 0, img); + p.end(); + int err = 0; + + for (int y = 0; y < a.height(); ++y) { + for (int x = 0; x < a.width(); ++x) { + QRgb ca = a.pixel(x, y); + QRgb cb = b.pixel(x, y); + + // tolerate a little bit of rounding errors + bool r = true; + r &= qAbs(qRed(ca) - qRed(cb)) <= 18; + r &= qAbs(qGreen(ca) - qGreen(cb)) <= 18; + r &= qAbs(qBlue(ca) - qBlue(cb)) <= 18; + if (!r) + err++; + } + } + QCOMPARE(err, 0); + } +} + +void tst_QImage::smoothScaleBig() +{ +#if defined(Q_OS_WINCE) + int bigValue = 2000; +#elif defined(Q_OS_SYMBIAN) + int bigValue = 2000; +#else + int bigValue = 200000; +#endif + QImage tall(4, bigValue, QImage::Format_ARGB32); + tall.fill(0x0); + + QImage wide(bigValue, 4, QImage::Format_ARGB32); + wide.fill(0x0); + + QImage tallScaled = tall.scaled(4, tall.height() / 4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + QImage wideScaled = wide.scaled(wide.width() / 4, 4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + QCOMPARE(tallScaled.pixel(0, 0), QRgb(0x0)); + QCOMPARE(wideScaled.pixel(0, 0), QRgb(0x0)); +} + +void tst_QImage::smoothScaleAlpha() +{ + QImage src(128, 128, QImage::Format_ARGB32_Premultiplied); + src.fill(0x0); + + QPainter srcPainter(&src); + srcPainter.setPen(Qt::NoPen); + srcPainter.setBrush(Qt::white); + srcPainter.drawEllipse(QRect(QPoint(), src.size())); + srcPainter.end(); + + QImage dst(32, 32, QImage::Format_ARGB32_Premultiplied); + dst.fill(0xffffffff); + QImage expected = dst; + + QPainter dstPainter(&dst); + dstPainter.drawImage(0, 0, src.scaled(dst.size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + dstPainter.end(); + + QCOMPARE(dst, expected); +} + +static int count(const QImage &img, int x, int y, int dx, int dy, QRgb pixel) +{ + int i = 0; + while (x >= 0 && x < img.width() && y >= 0 && y < img.height()) { + i += (img.pixel(x, y) == pixel); + x += dx; + y += dy; + } + return i; +} + +const int transformed_image_width = 128; +const int transformed_image_height = 128; + +void tst_QImage::transformed_data() +{ + QTest::addColumn<QTransform>("transform"); + + { + QTransform transform; + transform.translate(10.4, 10.4); + QTest::newRow("Translate") << transform; + } + { + QTransform transform; + transform.scale(1.5, 1.5); + QTest::newRow("Scale") << transform; + } + { + QTransform transform; + transform.rotate(30); + QTest::newRow("Rotate 30") << transform; + } + { + QTransform transform; + transform.rotate(90); + QTest::newRow("Rotate 90") << transform; + } + { + QTransform transform; + transform.rotate(180); + QTest::newRow("Rotate 180") << transform; + } + { + QTransform transform; + transform.rotate(270); + QTest::newRow("Rotate 270") << transform; + } + { + QTransform transform; + transform.translate(transformed_image_width/2, transformed_image_height/2); + transform.rotate(155, Qt::XAxis); + transform.translate(-transformed_image_width/2, -transformed_image_height/2); + QTest::newRow("Perspective 1") << transform; + } + { + QTransform transform; + transform.rotate(155, Qt::XAxis); + transform.translate(-transformed_image_width/2, -transformed_image_height/2); + QTest::newRow("Perspective 2") << transform; + } +} + +void tst_QImage::transformed() +{ + QFETCH(QTransform, transform); + + QImage img(transformed_image_width, transformed_image_height, QImage::Format_ARGB32_Premultiplied); + QPainter p(&img); + p.fillRect(0, 0, img.width(), img.height(), Qt::red); + p.drawRect(0, 0, img.width()-1, img.height()-1); + p.end(); + + QImage transformed = img.transformed(transform, Qt::SmoothTransformation); + + // all borders should have touched pixels + + QVERIFY(count(transformed, 0, 0, 1, 0, 0x0) < transformed.width()); + QVERIFY(count(transformed, 0, 0, 0, 1, 0x0) < transformed.height()); + + QVERIFY(count(transformed, 0, img.height() - 1, 1, 0, 0x0) < transformed.width()); + QVERIFY(count(transformed, img.width() - 1, 0, 0, 1, 0x0) < transformed.height()); + + QImage transformedPadded(transformed.width() + 2, transformed.height() + 2, img.format()); + transformedPadded.fill(0x0); + + p.begin(&transformedPadded); + p.setRenderHint(QPainter::SmoothPixmapTransform); + p.setRenderHint(QPainter::Antialiasing); + p.setTransform(transformed.trueMatrix(transform, img.width(), img.height()) * QTransform().translate(1, 1)); + p.drawImage(0, 0, img); + p.end(); + + // no borders should have touched pixels since we have a one-pixel padding + + QCOMPARE(count(transformedPadded, 0, 0, 1, 0, 0x0), transformedPadded.width()); + QCOMPARE(count(transformedPadded, 0, 0, 0, 1, 0x0), transformedPadded.height()); + + QCOMPARE(count(transformedPadded, 0, transformedPadded.height() - 1, 1, 0, 0x0), transformedPadded.width()); + QCOMPARE(count(transformedPadded, transformedPadded.width() - 1, 0, 0, 1, 0x0), transformedPadded.height()); +} + +void tst_QImage::transformed2() +{ + QImage img(3, 3, QImage::Format_Mono); + QPainter p(&img); + p.fillRect(0, 0, 3, 3, Qt::white); + p.fillRect(0, 0, 3, 3, Qt::Dense4Pattern); + p.end(); + + QTransform transform; + transform.scale(3, 3); + + QImage expected(9, 9, QImage::Format_Mono); + p.begin(&expected); + p.fillRect(0, 0, 9, 9, Qt::white); + p.setBrush(Qt::black); + p.setPen(Qt::NoPen); + p.drawRect(3, 0, 3, 3); + p.drawRect(0, 3, 3, 3); + p.drawRect(6, 3, 3, 3); + p.drawRect(3, 6, 3, 3); + p.end(); + + { + QImage actual = img.transformed(transform); + + QCOMPARE(actual.format(), expected.format()); + QCOMPARE(actual.size(), expected.size()); + QCOMPARE(actual, expected); + } + + { + transform.rotate(-90); + QImage actual = img.transformed(transform); + + QCOMPARE(actual.convertToFormat(QImage::Format_ARGB32_Premultiplied), + expected.convertToFormat(QImage::Format_ARGB32_Premultiplied)); + } +} + +void tst_QImage::scaled() +{ + QImage img(102, 3, QImage::Format_Mono); + QPainter p(&img); + p.fillRect(0, 0, img.width(), img.height(), Qt::white); + p.end(); + + QImage scaled = img.scaled(1994, 10); + + QImage expected(1994, 10, QImage::Format_Mono); + p.begin(&expected); + p.fillRect(0, 0, expected.width(), expected.height(), Qt::white); + p.end(); + + QCOMPARE(scaled, expected); +} + +void tst_QImage::paintEngine() +{ + QImage img; + + QPaintEngine *engine; + { + QImage temp(100, 100, QImage::Format_RGB32); + temp.fill(0xff000000); + + QPainter p(&temp); + p.fillRect(80,80,10,10,Qt::blue); + p.end(); + + img = temp; + + engine = temp.paintEngine(); + } + + { + QPainter p(&img); + + p.fillRect(80,10,10,10,Qt::yellow); + p.end(); + } + + QImage expected(100, 100, QImage::Format_RGB32); + expected.fill(0xff000000); + + QPainter p(&expected); + p.fillRect(80,80,10,10,Qt::blue); + p.fillRect(80,10,10,10,Qt::yellow); + p.end(); + + QCOMPARE(engine, img.paintEngine()); + QCOMPARE(img, expected); +} + +void tst_QImage::setAlphaChannelWhilePainting() +{ + QImage image(100, 100, QImage::Format_ARGB32); + image.fill(Qt::black); + QPainter p(&image); + + image.setAlphaChannel(image.createMaskFromColor(QColor(Qt::black).rgb(), Qt::MaskInColor)); +} + + +// See task 240047 for details +void tst_QImage::smoothScaledSubImage() +{ + QImage original(128, 128, QImage::Format_RGB32); + QPainter p(&original); + p.fillRect(0, 0, 64, 128, Qt::black); + p.fillRect(64, 0, 64, 128, Qt::white); + p.end(); + + QImage subimage(((const QImage &) original).bits(), 32, 32, original.bytesPerLine(), QImage::Format_RGB32); // only in the black part of the source... + + QImage scaled = subimage.scaled(8, 8, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + for (int y=0; y<scaled.height(); ++y) + for (int x=0; x<scaled.width(); ++x) + QCOMPARE(scaled.pixel(x, y), 0xff000000); +} + +void tst_QImage::nullSize_data() +{ + QTest::addColumn<QImage>("image"); + QTest::newRow("null image") << QImage(); + QTest::newRow("zero-size image") << QImage(0, 0, QImage::Format_RGB32); +} + +void tst_QImage::nullSize() +{ + QFETCH(QImage, image); + QCOMPARE(image.isNull(), true); + QCOMPARE(image.width(), image.size().width()); + QCOMPARE(image.height(), image.size().height()); +} + +void tst_QImage::premultipliedAlphaConsistency() +{ + QImage img(256, 1, QImage::Format_ARGB32); + for (int x = 0; x < 256; ++x) + img.setPixel(x, 0, (x << 24) | 0xffffff); + + QImage converted = img.convertToFormat(QImage::Format_ARGB8565_Premultiplied); + QImage pm32 = converted.convertToFormat(QImage::Format_ARGB32_Premultiplied); + + for (int i = 0; i < pm32.width(); ++i) { + QRgb pixel = pm32.pixel(i, 0); + QVERIFY(qRed(pixel) <= qAlpha(pixel)); + QVERIFY(qGreen(pixel) <= qAlpha(pixel)); + QVERIFY(qBlue(pixel) <= qAlpha(pixel)); + } +} + +void tst_QImage::compareIndexed() +{ + QImage img(256, 1, QImage::Format_Indexed8); + + QVector<QRgb> colorTable(256); + for (int i = 0; i < 256; ++i) + colorTable[i] = qRgb(i, i, i); + img.setColorTable(colorTable); + + for (int i = 0; i < 256; ++i) { + img.setPixel(i, 0, i); + } + + QImage imgInverted(256, 1, QImage::Format_Indexed8); + QVector<QRgb> invertedColorTable(256); + for (int i = 0; i < 256; ++i) + invertedColorTable[255-i] = qRgb(i, i, i); + imgInverted.setColorTable(invertedColorTable); + + for (int i = 0; i < 256; ++i) { + imgInverted.setPixel(i, 0, (255-i)); + } + + QCOMPARE(img, imgInverted); +} + +void tst_QImage::fillColor_data() +{ + QTest::addColumn<QImage::Format>("format"); + QTest::addColumn<Qt::GlobalColor>("color"); + QTest::addColumn<uint>("pixelValue"); + + QTest::newRow("Mono, color0") << QImage::Format_Mono << Qt::color0 << 0u; + QTest::newRow("Mono, color1") << QImage::Format_Mono << Qt::color1 << 1u; + + QTest::newRow("MonoLSB, color0") << QImage::Format_MonoLSB << Qt::color0 << 0u; + QTest::newRow("MonoLSB, color1") << QImage::Format_MonoLSB << Qt::color1 << 1u; + + const char *names[] = { + "Indexed8", + "RGB32", + "ARGB32", + "ARGB32pm", + "RGB16", + "ARGB8565pm", + "RGB666", + "ARGB6666pm", + "RGB555", + "ARGB8555pm", + "RGB888", + "RGB444", + "ARGB4444pm", + 0 + }; + + QImage::Format formats[] = { + QImage::Format_Indexed8, + QImage::Format_RGB32, + QImage::Format_ARGB32, + QImage::Format_ARGB32_Premultiplied, + QImage::Format_RGB16, + QImage::Format_ARGB8565_Premultiplied, + QImage::Format_RGB666, + QImage::Format_ARGB6666_Premultiplied, + QImage::Format_RGB555, + QImage::Format_ARGB8555_Premultiplied, + QImage::Format_RGB888, + QImage::Format_RGB444, + QImage::Format_ARGB4444_Premultiplied + }; + + for (int i=0; names[i] != 0; ++i) { + QByteArray name; + name.append(names[i]).append(", "); + + QTest::newRow(QByteArray(name).append("black").constData()) << formats[i] << Qt::black << 0xff000000; + QTest::newRow(QByteArray(name).append("white").constData()) << formats[i] << Qt::white << 0xffffffff; + QTest::newRow(QByteArray(name).append("red").constData()) << formats[i] << Qt::red << 0xffff0000; + QTest::newRow(QByteArray(name).append("green").constData()) << formats[i] << Qt::green << 0xff00ff00; + QTest::newRow(QByteArray(name).append("blue").constData()) << formats[i] << Qt::blue << 0xff0000ff; + } + + QTest::newRow("RGB16, transparent") << QImage::Format_RGB16 << Qt::transparent << 0xff000000; + QTest::newRow("RGB32, transparent") << QImage::Format_RGB32 << Qt::transparent << 0xff000000; + QTest::newRow("ARGB32, transparent") << QImage::Format_ARGB32 << Qt::transparent << 0x00000000u; + QTest::newRow("ARGB32pm, transparent") << QImage::Format_ARGB32_Premultiplied << Qt::transparent << 0x00000000u; +} + +void tst_QImage::fillColor() +{ + QFETCH(QImage::Format, format); + QFETCH(Qt::GlobalColor, color); + QFETCH(uint, pixelValue); + + QImage image(1, 1, format); + + if (image.depth() == 8) { + QVector<QRgb> table; + table << 0xff000000; + table << 0xffffffff; + table << 0xffff0000; + table << 0xff00ff00; + table << 0xff0000ff; + image.setColorTable(table); + } + + image.fill(color); + if (image.depth() == 1) { + QCOMPARE(image.pixelIndex(0, 0), (int) pixelValue); + } else { + QCOMPARE(image.pixel(0, 0), pixelValue); + } + + image.fill(QColor(color)); + if (image.depth() == 1) { + QCOMPARE(image.pixelIndex(0, 0), (int) pixelValue); + } else { + QCOMPARE(image.pixel(0, 0), pixelValue); + } +} + +void tst_QImage::fillColorWithAlpha() +{ + QImage argb32(1, 1, QImage::Format_ARGB32); + argb32.fill(QColor(255, 0, 0, 127)); + QCOMPARE(argb32.pixel(0, 0), qRgba(255, 0, 0, 127)); + + QImage argb32pm(1, 1, QImage::Format_ARGB32_Premultiplied); + argb32pm.fill(QColor(255, 0, 0, 127)); + QCOMPARE(argb32pm.pixel(0, 0), 0x7f7f0000u); +} + +void tst_QImage::rgbSwapped_data() +{ + QTest::addColumn<QImage::Format>("format"); + + QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; + QTest::newRow("Format_RGB32") << QImage::Format_RGB32; + QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32; + QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("Format_RGB16") << QImage::Format_RGB16; + QTest::newRow("Format_ARGB8565_Premultiplied") << QImage::Format_ARGB8565_Premultiplied; + QTest::newRow("Format_ARGB6666_Premultiplied") << QImage::Format_ARGB6666_Premultiplied; + QTest::newRow("Format_ARGB4444_Premultiplied") << QImage::Format_ARGB4444_Premultiplied; + QTest::newRow("Format_RGB666") << QImage::Format_RGB666; + QTest::newRow("Format_RGB555") << QImage::Format_RGB555; + QTest::newRow("Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8555_Premultiplied; + QTest::newRow("Format_RGB888") << QImage::Format_RGB888; + QTest::newRow("Format_RGB444") << QImage::Format_RGB444; +} + +void tst_QImage::rgbSwapped() +{ + QFETCH(QImage::Format, format); + + QImage image(100, 1, format); + image.fill(0); + + QVector<QColor> testColor(image.width()); + + for (int i = 0; i < image.width(); ++i) + testColor[i] = QColor(i, 10 + i, 20 + i * 2, 30 + i); + + if (format != QImage::Format_Indexed8) { + QPainter p(&image); + p.setCompositionMode(QPainter::CompositionMode_Source); + for (int i = 0; i < image.width(); ++i) + p.fillRect(QRect(i, 0, 1, 1), testColor[i].rgb()); + } else { + image.setColorCount(image.width()); + for (int i = 0; i < image.width(); ++i) { + image.setColor(0, testColor[i].rgba()); + image.setPixel(i, 0, i); + } + } + + QImage imageSwapped = image.rgbSwapped(); + + for (int i = 0; i < image.width(); ++i) { + QColor referenceColor = QColor(image.pixel(i, 0)); + QColor swappedColor = QColor(imageSwapped.pixel(i, 0)); + + QCOMPARE(swappedColor.alpha(), referenceColor.alpha()); + QCOMPARE(swappedColor.red(), referenceColor.blue()); + QCOMPARE(swappedColor.green(), referenceColor.green()); + QCOMPARE(swappedColor.blue(), referenceColor.red()); + } + + QImage imageSwappedTwice = imageSwapped.rgbSwapped(); + + QCOMPARE(image, imageSwappedTwice); + + QCOMPARE(memcmp(image.constBits(), imageSwappedTwice.constBits(), image.byteCount()), 0); +} + +void tst_QImage::deepCopyWhenPaintingActive() +{ + QImage image(64, 64, QImage::Format_ARGB32_Premultiplied); + image.fill(0); + + QPainter painter(&image); + QImage copy = image; + + painter.setBrush(Qt::black); + painter.drawEllipse(image.rect()); + + QVERIFY(copy != image); +} + +void tst_QImage::scaled_QTBUG19157() +{ + QImage foo(5000, 1, QImage::Format_RGB32); + foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio); + QVERIFY(!foo.isNull()); +} + +QTEST_MAIN(tst_QImage) +#include "tst_qimage.moc" diff --git a/tests/auto/gui/image/qimageiohandler/.gitignore b/tests/auto/gui/image/qimageiohandler/.gitignore new file mode 100644 index 0000000000..6ea7bdb667 --- /dev/null +++ b/tests/auto/gui/image/qimageiohandler/.gitignore @@ -0,0 +1 @@ +tst_qimageiohandler diff --git a/tests/auto/gui/image/qimageiohandler/qimageiohandler.pro b/tests/auto/gui/image/qimageiohandler/qimageiohandler.pro new file mode 100644 index 0000000000..46e5cfb2cf --- /dev/null +++ b/tests/auto/gui/image/qimageiohandler/qimageiohandler.pro @@ -0,0 +1,9 @@ +############################################################ +# Project file for autotest for file qimageiohandler.h +############################################################ + +load(qttest_p4) + +SOURCES += tst_qimageiohandler.cpp + + diff --git a/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp b/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp new file mode 100644 index 0000000000..dd132302f8 --- /dev/null +++ b/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> + +#include <qcoreapplication.h> +#include <qdebug.h> +#include <qimageiohandler.h> +#include <qfile.h> + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QImageIOHandler : public QObject +{ +Q_OBJECT + +public: + tst_QImageIOHandler(); + virtual ~tst_QImageIOHandler(); + +private slots: + void getSetCheck(); +}; + +class MyImageIOHandler : public QImageIOHandler +{ +public: + MyImageIOHandler() : QImageIOHandler() { } + bool canRead() const { return true; } + bool read(QImage *) { return true; } +}; + +tst_QImageIOHandler::tst_QImageIOHandler() +{ +} + +tst_QImageIOHandler::~tst_QImageIOHandler() +{ +} + +// Testing get/set functions +void tst_QImageIOHandler::getSetCheck() +{ + MyImageIOHandler obj1; + // QIODevice * QImageIOHandler::device() + // void QImageIOHandler::setDevice(QIODevice *) + QFile *var1 = new QFile; + obj1.setDevice(var1); + QCOMPARE(obj1.device(), (QIODevice *)var1); + obj1.setDevice((QIODevice *)0); + QCOMPARE(obj1.device(), (QIODevice *)0); + delete var1; +} + +QTEST_MAIN(tst_QImageIOHandler) +#include "tst_qimageiohandler.moc" diff --git a/tests/auto/gui/image/qimagereader/.gitignore b/tests/auto/gui/image/qimagereader/.gitignore new file mode 100644 index 0000000000..fdf03f239d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/.gitignore @@ -0,0 +1,2 @@ +tst_qimagereader +junk diff --git a/tests/auto/gui/image/qimagereader/baseline/35floppy.png b/tests/auto/gui/image/qimagereader/baseline/35floppy.png Binary files differnew file mode 100644 index 0000000000..56b9b44c47 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/baseline/35floppy.png diff --git a/tests/auto/gui/image/qimagereader/baseline/connect.png b/tests/auto/gui/image/qimagereader/baseline/connect.png Binary files differnew file mode 100644 index 0000000000..9544bb9c76 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/baseline/connect.png diff --git a/tests/auto/gui/image/qimagereader/baseline/kde_favicon.png b/tests/auto/gui/image/qimagereader/baseline/kde_favicon.png Binary files differnew file mode 100644 index 0000000000..e19287b49d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/baseline/kde_favicon.png diff --git a/tests/auto/gui/image/qimagereader/baseline/semitransparent.png b/tests/auto/gui/image/qimagereader/baseline/semitransparent.png Binary files differnew file mode 100644 index 0000000000..a3ad780699 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/baseline/semitransparent.png diff --git a/tests/auto/gui/image/qimagereader/images/16bpp.bmp b/tests/auto/gui/image/qimagereader/images/16bpp.bmp Binary files differnew file mode 100644 index 0000000000..74ce63edd4 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/16bpp.bmp diff --git a/tests/auto/gui/image/qimagereader/images/4bpp-rle.bmp b/tests/auto/gui/image/qimagereader/images/4bpp-rle.bmp Binary files differnew file mode 100644 index 0000000000..ae71e678fd --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/4bpp-rle.bmp diff --git a/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpg b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpg Binary files differnew file mode 100644 index 0000000000..b8aa9ea609 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpg diff --git a/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.png b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.png Binary files differnew file mode 100644 index 0000000000..a24db1b13f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.png diff --git a/tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpg b/tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpg Binary files differnew file mode 100644 index 0000000000..8771224cb5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpg diff --git a/tests/auto/gui/image/qimagereader/images/away.png b/tests/auto/gui/image/qimagereader/images/away.png Binary files differnew file mode 100644 index 0000000000..0e21a37883 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/away.png diff --git a/tests/auto/gui/image/qimagereader/images/ball.mng b/tests/auto/gui/image/qimagereader/images/ball.mng Binary files differnew file mode 100644 index 0000000000..81544780fd --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/ball.mng diff --git a/tests/auto/gui/image/qimagereader/images/bat1.gif b/tests/auto/gui/image/qimagereader/images/bat1.gif Binary files differnew file mode 100644 index 0000000000..cb6f4f7a8e --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/bat1.gif diff --git a/tests/auto/gui/image/qimagereader/images/bat2.gif b/tests/auto/gui/image/qimagereader/images/bat2.gif Binary files differnew file mode 100644 index 0000000000..fbbda4ef76 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/bat2.gif diff --git a/tests/auto/gui/image/qimagereader/images/beavis.jpg b/tests/auto/gui/image/qimagereader/images/beavis.jpg Binary files differnew file mode 100644 index 0000000000..d55504779b --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/beavis.jpg diff --git a/tests/auto/gui/image/qimagereader/images/black.png b/tests/auto/gui/image/qimagereader/images/black.png Binary files differnew file mode 100644 index 0000000000..6c94085ed5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/black.png diff --git a/tests/auto/gui/image/qimagereader/images/black.xpm b/tests/auto/gui/image/qimagereader/images/black.xpm new file mode 100644 index 0000000000..d7925bf211 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/black.xpm @@ -0,0 +1,65 @@ +/* XPM */ +static char * ddd_xpm[] = { +/* $Id: ddd.xpm,v 1.5 1999/08/19 11:30:07 andreas Exp $ + * DDD Logo. Copyright (C) 1997 TU Braunschweig, Germany. + * For details on DDD, see `http://www.gnu.org/software/ddd/'. + * width height ncolors chars_per_pixel */ +" 48 48 8 1", +/* Colors */ +" c None m None g None g4 None s Background ", +". c black m black g black g4 black s Legs ", +"X c grey m white g grey g4 grey s Body ", +"- c grey m white g grey g4 grey s Border ", +"o c #000040 m black g grey25 g4 grey25 s Handle1 ", +"O c blue4 m black g grey25 g4 grey25 s Handle2 ", +"+ c white m white g white g4 white s Light ", +"* c DarkGreen m black g grey25 g4 grey25 s Eye ", +/* Pixels */ +" . . ", +" . .. ", +" . . ", +" .. . ", +" .. .. .. ", +" .. . . . ", +" . . . . .. ", +" . .X. . ", +" . *.X.* .. ", +" .. .. .XXX. .. ... ", +" . .X...XXX...X. . ", +" .. ..XXX.XXX.XXX. .. ", +" .....XXXX...XXXX. . ", +" .. ..XXXXXXXXX.. .. ", +" ...XXXXXXX..... ", +" ......... ", +" .XXXXXXX. ", +" .....XXX..... ", +" .XXXXXoOOOOOOX. ... ", +" .. ..XXXoOOO-----OOO..... ", +" .........XXoO-----..----O .. ", +" .. ..X..oO--.........--O .. ", +" . ..XXXoO--..++.......--O .. ", +" .. .XXXXO-XXX+++XXXXXXXXX-O . ", +" .. .....oO-XX+++XXXXXXXXXXX-O .. ", +" .. .XXXoO--XX++XXXXXXXXXXXX-O .. ", +" .. ..XXXoO-..+++............-O .. ", +" . .. .XXoO--..++.............-OO .. ", +" . ... ...oO--..................-O ", +".. . .XXoO-XXXXXXXXXXXXXXXXXXX-O ", +" .. .XXoO-XXXXXXXXXXXXXXXXXXX-O ", +" .. .XoO-XXXXXXXXXXXXXXXXXXX-O. ", +" . ...oO-.................-O .. ", +" . .XXoO-.................-O .. ", +" . ..XoO-.................-O .. ", +" . ...oO-XXXXXXXXXXXXXXX-OOO . ", +" .. .XoOO-XXXXXXXXXXXXX-OOOOO . ", +" .. ..XoOO---.......---OOOOOO . ", +" .. ....oOO---...----OOOOOOOO ", +" . .XX..oOO-----OOOOOOOOOOO ", +" . .....OOOOOOOOooOOOOOOOOO ", +" . .XXooooooOo oOOOOOOOOO ", +" . .XXX. ooOOOOOOO ", +" .. ... ooOOOOOO ", +" . ooOOOOOO ", +" ooOOOOOO ", +" ooOOOOOO ", +" ooOOOOOO "}; diff --git a/tests/auto/gui/image/qimagereader/images/colorful.bmp b/tests/auto/gui/image/qimagereader/images/colorful.bmp Binary files differnew file mode 100644 index 0000000000..8ea6f4acd7 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/colorful.bmp diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm b/tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm new file mode 100644 index 0000000000..f8d80edbbc --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static const char *marble_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 240 240 223 2", +/* colors */ +".. c #959595", +".# c #c5c5c5", +".a c #adadad", +".b c #dedede", +".c c #b7b7b7", +".d c #d2d2d2", +".e c #bebebe", +".f c #c9c9c9", +".g c #b8b8b8", +".h c #d6d6d6", +".i c #9e9e9e", +".j c #eaeaea", +".k c #b2b2b2", +".l c #cecece", +".m c #a5a5a5", +".n c #e4e4e4", +".o c #c4c4c4", +".p c #d9d9d9", +".q c #b1b1b1", +/* pixels */ +"aYbla9aN.N#x", diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-data.tif b/tests/auto/gui/image/qimagereader/images/corrupt-data.tif Binary files differnew file mode 100644 index 0000000000..d63c688b27 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt-data.tif diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm b/tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm new file mode 100644 index 0000000000..3a736ff262 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm @@ -0,0 +1,11 @@ +/* XPM */ +static const char *marble_xpm[] = { +/* width height num_colors chars_per_pixel */ +"2 2 2 -2", +/* colors */ +"a c #adadad", +"b c #dedede", +/* pixels */ +"ab", +"ba" +}; diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm b/tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm new file mode 100644 index 0000000000..21031ee604 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm @@ -0,0 +1,7 @@ +/* XPM */ +static char * test_xpm[] = { +"256 256 1 1", +" c grey", +" ", +" ", +" "}; diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.bmp b/tests/auto/gui/image/qimagereader/images/corrupt.bmp Binary files differnew file mode 100644 index 0000000000..824190bdeb --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.bmp diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.gif b/tests/auto/gui/image/qimagereader/images/corrupt.gif Binary files differnew file mode 100644 index 0000000000..07259454c9 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.gif diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.jpg b/tests/auto/gui/image/qimagereader/images/corrupt.jpg Binary files differnew file mode 100644 index 0000000000..1959662922 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.jpg diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.mng b/tests/auto/gui/image/qimagereader/images/corrupt.mng Binary files differnew file mode 100644 index 0000000000..17fd43a5ca --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.mng diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.png b/tests/auto/gui/image/qimagereader/images/corrupt.png Binary files differnew file mode 100644 index 0000000000..9d8911c64e --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.png diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.svg b/tests/auto/gui/image/qimagereader/images/corrupt.svg new file mode 100644 index 0000000000..8747df008f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.svg @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="40px" + height="5px" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="test.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + inkscape:window-height="1005" +
\ No newline at end of file diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.svgz b/tests/auto/gui/image/qimagereader/images/corrupt.svgz Binary files differnew file mode 100644 index 0000000000..67fdceee0b --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.svgz diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.xbm b/tests/auto/gui/image/qimagereader/images/corrupt.xbm new file mode 100644 index 0000000000..8510634e6d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/corrupt.xbm @@ -0,0 +1,5 @@ +#define noname_width 271 +#define noname_height 273 +static char noname_bits[] = { + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f}; diff --git a/tests/auto/gui/image/qimagereader/images/crash-signed-char.bmp b/tests/auto/gui/image/qimagereader/images/crash-signed-char.bmp Binary files differnew file mode 100644 index 0000000000..b35cda6c35 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/crash-signed-char.bmp diff --git a/tests/auto/gui/image/qimagereader/images/earth.gif b/tests/auto/gui/image/qimagereader/images/earth.gif Binary files differnew file mode 100644 index 0000000000..2c229eb110 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/earth.gif diff --git a/tests/auto/gui/image/qimagereader/images/endless-anim.gif b/tests/auto/gui/image/qimagereader/images/endless-anim.gif Binary files differnew file mode 100644 index 0000000000..00df8da786 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/endless-anim.gif diff --git a/tests/auto/gui/image/qimagereader/images/fire.mng b/tests/auto/gui/image/qimagereader/images/fire.mng Binary files differnew file mode 100644 index 0000000000..c6695c8369 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/fire.mng diff --git a/tests/auto/gui/image/qimagereader/images/font.bmp b/tests/auto/gui/image/qimagereader/images/font.bmp Binary files differnew file mode 100644 index 0000000000..28b8c66924 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/font.bmp diff --git a/tests/auto/gui/image/qimagereader/images/four-frames.gif b/tests/auto/gui/image/qimagereader/images/four-frames.gif Binary files differnew file mode 100644 index 0000000000..6aff2e0af2 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/four-frames.gif diff --git a/tests/auto/gui/image/qimagereader/images/gnus.xbm b/tests/auto/gui/image/qimagereader/images/gnus.xbm new file mode 100644 index 0000000000..58d1ac845a --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/gnus.xbm @@ -0,0 +1,622 @@ +#define noname_width 271 +#define noname_height 273 +static char noname_bits[] = { + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x49,0xe0,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x97,0xaa,0x8a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x57,0x2a,0x41,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0x52,0x16,0xfe,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x49,0x05, + 0xf9,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0x95,0xaa,0x58,0xf4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xa5,0x54,0x26,0xe1,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x54,0x49,0x49,0xe4,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0xa5, + 0x2a,0xd1,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xaf,0x52,0x95,0x54,0xc4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab, + 0x24,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x57,0x29,0xa9,0x92,0x11,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x57,0xd5,0xfa,0xff,0xff,0xab,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x4a,0x55,0x2a,0x41,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x29,0xe5,0xff,0xff,0x95,0xa4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xa4, + 0x24,0xa5,0x14,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0xa5,0xd4,0xff, + 0x3f,0x52,0xa9,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x29,0x55,0x55,0x55,0x41,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xa9,0x54,0xea,0xff,0xdf,0x2a,0x55,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x4a,0x49,0x12,0x7e,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0x55,0xa5,0x92,0xff,0x23,0xa5,0x4a,0xd6,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xa4,0x94,0xaa,0x42, + 0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0x2a,0xa9,0xff,0xad,0x92,0x24, + 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a, + 0x95,0x52,0x52,0x29,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x52,0x49,0x55, + 0xfe,0x91,0x54,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0x49,0x29,0x55,0x25,0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff, + 0x4f,0x95,0xaa,0x92,0x7e,0x55,0x55,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0x50,0x95,0xaa,0x24,0x7e,0xff,0xff, + 0xff,0xff,0xff,0xff,0x57,0x2a,0x95,0x54,0x79,0x95,0x92,0x92,0x94,0xfc,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb9,0x62,0x29,0x49, + 0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x49,0x49,0x95,0xba,0xa4,0x54, + 0xaa,0x52,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf, + 0x1a,0xf8,0xa7,0xaa,0x22,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x52, + 0x2a,0x75,0x55,0xa5,0x24,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xbf,0x5a,0xfd,0x57,0x92,0x94,0x7e,0xff,0xff,0xff,0xff,0xff, + 0xff,0x4a,0x4a,0x55,0x49,0x89,0x92,0x94,0xaa,0x94,0xf4,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xfc,0x2f,0x55,0x05,0x7c,0xff, + 0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0x4a,0x55,0x2a,0x55,0x55,0x55,0x55,0xe5, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x4e,0xfd,0x5f, + 0x29,0xa5,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0xa4,0x54,0x52,0x4a,0x55,0xa9, + 0xa4,0x24,0xa5,0x94,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x2f,0x1d,0xfe,0x3f,0x95,0x04,0x7c,0xff,0xfd,0xff,0xff,0xff,0x3f,0x49,0xa5, + 0x54,0xa9,0xa4,0x92,0x4a,0x49,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xaf,0x44,0xfe,0x5f,0xa9,0x52,0x7d,0xff,0xe5,0xff,0xff, + 0xff,0x5f,0x55,0x92,0x2a,0x95,0x52,0x4a,0x52,0xaa,0x52,0x4a,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x16,0xff,0xbf,0x4a,0x05,0x7c, + 0xff,0xd9,0xff,0xff,0xff,0x5f,0x95,0x42,0xa5,0x52,0x95,0xaa,0xaa,0xaa,0x94, + 0x54,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x43,0xfe, + 0xbf,0x54,0x52,0x7d,0x7f,0x25,0xff,0xff,0xff,0xa7,0xa4,0x28,0x92,0x54,0x4a, + 0xa5,0x4a,0x92,0xaa,0x4a,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xab,0x12,0xfe,0x7f,0xa5,0x02,0x7c,0x7f,0x55,0xfd,0xff,0xff,0x95,0x2a, + 0x82,0x54,0xa5,0x54,0x2a,0xa9,0x2a,0xa5,0x52,0xf5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x27,0x4b,0xff,0xff,0x4a,0x29,0x7d,0xff,0x92,0xfe, + 0xff,0xff,0x55,0x92,0x20,0xa8,0x94,0x2a,0xa5,0x94,0x52,0x29,0xa9,0xf4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x01,0xff,0x7f,0x52,0x42, + 0x7c,0xff,0x25,0xf9,0xff,0x7f,0xaa,0x02,0x8a,0x40,0x29,0x49,0x09,0x41,0x4a, + 0x55,0x25,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57, + 0xff,0xff,0x95,0x12,0x7d,0xff,0xa9,0xfa,0xff,0x7f,0x25,0xa9,0x20,0x2a,0xa5, + 0xaa,0x42,0x92,0x54,0x92,0x54,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xaf,0x83,0xff,0xff,0xa9,0x42,0x7e,0xff,0xaa,0xf4,0xff,0xaf,0x54, + 0x01,0x82,0x80,0xaa,0x54,0x14,0x08,0xa2,0xaa,0x4a,0xd2,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xef,0xcf,0xd7,0xff,0xff,0x52,0x12,0x7f,0xff,0x4a, + 0xea,0xff,0x57,0x92,0xaa,0x28,0x24,0x29,0x25,0x81,0x82,0x08,0x49,0x52,0x55, + 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xef,0xe7,0xff,0xff,0x2a, + 0x05,0x7e,0xff,0x55,0xd5,0xff,0xa5,0x2a,0x00,0x8e,0x10,0x4a,0x89,0x24,0x28, + 0xa0,0xaa,0x2a,0x49,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xe7,0xff, + 0xef,0xff,0xff,0xa5,0x50,0x7e,0xff,0x25,0xe5,0xff,0x2a,0xa5,0x52,0x7f,0x85, + 0x54,0x35,0x08,0x82,0x0a,0x55,0x95,0xaa,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff, + 0xff,0xff,0xd7,0xff,0xff,0xff,0x7f,0x52,0x85,0x7e,0xff,0xab,0x94,0x1e,0x55, + 0x2a,0xc8,0xff,0x10,0x90,0x92,0xa0,0x08,0x20,0x24,0x52,0x25,0xfd,0xff,0xff, + 0xff,0xef,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0x94,0x10,0x7e,0xff, + 0x93,0xaa,0x6a,0x49,0x49,0xf2,0xff,0x85,0x52,0x09,0x0a,0xa2,0x4a,0x92,0x29, + 0xa9,0xf2,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0x7f, + 0x55,0x25,0x7f,0xff,0x55,0x49,0x49,0x95,0x0a,0xf9,0xff,0x17,0x48,0x26,0x50, + 0x08,0x00,0xa9,0x4a,0x95,0xfa,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xf2, + 0xff,0xff,0xff,0xff,0x92,0x80,0x7e,0xff,0xa7,0x54,0xaa,0xa4,0x52,0xfc,0xff, + 0xaf,0x42,0x89,0xfa,0xbf,0x54,0x20,0xa9,0xa4,0xd4,0xff,0xff,0xff,0xcb,0xff, + 0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0x54,0x29,0x7f,0xff,0x4b,0xa5,0x92, + 0x2a,0x01,0xff,0xff,0x1f,0xa8,0x22,0xff,0xff,0x01,0xa5,0x2a,0x55,0xa9,0xff, + 0xff,0xff,0xd4,0xff,0xff,0xff,0x7f,0xfa,0xff,0xff,0xff,0x7f,0xa5,0x04,0x7f, + 0xff,0x57,0x2a,0x55,0xa9,0x54,0xfe,0xff,0x3f,0x05,0x89,0xff,0xff,0x5f,0x48, + 0x92,0x2a,0x95,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,0xff, + 0x7f,0x2a,0x91,0x7f,0xff,0xa9,0x54,0x4a,0x52,0x02,0xff,0xff,0xff,0x50,0xd1, + 0xff,0xff,0x1f,0x81,0xaa,0xa4,0x52,0xfe,0xff,0x3f,0xe9,0xff,0xff,0xff,0x7f, + 0x1d,0xff,0xff,0xff,0xff,0x54,0x41,0x7f,0xff,0x93,0x92,0x52,0x95,0xc8,0xff, + 0xff,0xff,0x8b,0xc4,0xff,0xff,0x7f,0x24,0xa5,0x2a,0x49,0xf9,0xff,0x7f,0xd5, + 0xff,0xff,0xff,0xbf,0x4a,0xff,0xff,0xff,0xff,0x4a,0x14,0x7f,0xff,0x28,0xa5, + 0x94,0x2a,0xa0,0xff,0xff,0x7f,0x22,0xf0,0xff,0xff,0x7f,0x12,0x94,0xa4,0xaa, + 0xea,0xff,0xaf,0xea,0xff,0xff,0xff,0x5f,0x8e,0xff,0xff,0xff,0x7f,0xa9,0x40, + 0x7f,0xff,0x48,0x55,0x55,0x12,0xca,0xff,0xff,0xff,0x0a,0xf5,0xff,0xff,0xff, + 0x80,0x52,0x95,0x54,0xaa,0xfe,0x55,0xc4,0xff,0xff,0xff,0x5f,0xa5,0xff,0xff, + 0xff,0xff,0x94,0x14,0x7f,0xff,0x52,0x2a,0xa9,0x4a,0xe1,0xff,0xff,0xbf,0x24, + 0xf0,0xff,0xff,0xff,0x0b,0x28,0xa9,0x92,0x24,0x55,0x49,0xe5,0xd7,0xff,0xff, + 0xa7,0x8a,0xff,0xff,0xff,0x7f,0xa5,0xc0,0x7f,0xff,0x50,0x49,0x95,0x04,0xf8, + 0xff,0xff,0x5f,0x1f,0xfd,0xff,0xff,0xff,0x47,0x45,0x55,0xaa,0xaa,0x4a,0xaa, + 0xea,0xaf,0xff,0xff,0x2b,0xc3,0xff,0xff,0xff,0x7f,0x55,0x94,0x7f,0x7f,0x4a, + 0x55,0x52,0x51,0xfe,0xff,0xff,0x5f,0x4e,0xf8,0xff,0xff,0xff,0x1f,0x50,0x92, + 0x52,0x49,0xa9,0x92,0xe4,0xd3,0xff,0xff,0x4b,0xd5,0xff,0xff,0xff,0xff,0x94, + 0xc0,0x7f,0x3f,0xa0,0xa4,0xaa,0x04,0xfe,0xff,0xff,0xa7,0x1d,0xfd,0xff,0xff, + 0xff,0x9f,0x84,0xaa,0x4a,0xaa,0x24,0x55,0xf2,0x2b,0xff,0x7f,0xa9,0xc1,0xff, + 0xff,0xff,0x7f,0x4a,0x95,0x7f,0xbf,0x2a,0x95,0x24,0x50,0xff,0xff,0xff,0x97, + 0x5e,0xfe,0xff,0xff,0xff,0x3f,0x92,0x24,0x95,0x92,0xaa,0xa4,0xf2,0xcb,0xff, + 0x5f,0xd5,0xe5,0xff,0xff,0xff,0xff,0x52,0x80,0x7f,0x3f,0xa0,0x52,0x15,0x85, + 0xff,0xff,0xff,0xd7,0x38,0xfe,0xff,0xff,0xff,0xff,0x20,0xaa,0x52,0x55,0x55, + 0x55,0xf9,0x29,0xfd,0xab,0xa4,0xf0,0xff,0xff,0xff,0x7f,0x29,0xa9,0x7f,0xff, + 0x42,0x25,0x49,0xe8,0xff,0xff,0xff,0x69,0x7a,0xff,0xff,0xff,0xff,0xff,0x82, + 0x52,0xaa,0x24,0x89,0x4a,0xf8,0x55,0x2a,0x49,0x95,0xf5,0xff,0xff,0xff,0xbf, + 0x2a,0xc4,0x7f,0x7f,0x90,0x54,0x15,0xe2,0xff,0xff,0xff,0x25,0xbc,0xff,0xff, + 0xff,0xff,0xff,0x29,0x48,0x49,0xaa,0xaa,0xa4,0xfa,0x95,0x92,0x54,0x52,0xf0, + 0xff,0xff,0xff,0xbf,0x4a,0xd1,0x7f,0xff,0x05,0xaa,0x40,0xf8,0xff,0xff,0x7f, + 0xaa,0xfc,0xff,0xff,0xff,0xff,0xff,0x43,0xa9,0xaa,0x4a,0x52,0xa9,0xf8,0xa4, + 0xaa,0x52,0x95,0xfc,0xff,0xff,0xff,0x7f,0x52,0xc0,0x7f,0xff,0xa1,0x00,0x24, + 0xfa,0xff,0xff,0xff,0x0a,0xfe,0xff,0xff,0xff,0xff,0xff,0x17,0x92,0x24,0xa5, + 0x2a,0x55,0xfe,0xaa,0xa4,0x2a,0x29,0xf9,0xff,0xff,0xff,0xbf,0x2a,0xea,0x7f, + 0xff,0x05,0x92,0x90,0xfc,0xff,0xff,0xbf,0xa4,0xff,0xff,0xff,0xff,0xff,0xff, + 0x4f,0xa0,0xaa,0x54,0x49,0x25,0x7c,0x49,0x95,0xa4,0x12,0xfc,0xff,0xff,0xff, + 0x7f,0x8a,0xe0,0x7f,0xff,0xa3,0x04,0x05,0xfe,0xff,0xff,0xbf,0x06,0xff,0xff, + 0xff,0xff,0xff,0xff,0x1f,0x49,0x95,0x52,0xaa,0x12,0x7f,0x55,0x52,0x55,0x0a, + 0xfd,0xff,0xff,0xff,0x3f,0x29,0xe8,0x7f,0xff,0x0f,0x50,0x50,0xff,0xff,0xff, + 0x5f,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x04,0xa9,0x4a,0x25,0x45,0x3e, + 0xa9,0x2a,0xa9,0xa2,0xfc,0xff,0xff,0xff,0x7f,0x55,0xe1,0x7f,0xff,0x27,0x05, + 0xc4,0xff,0xff,0xff,0x9f,0x91,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x41,0x4a, + 0x29,0xa9,0x12,0x5e,0x95,0x94,0x4a,0x0a,0xfe,0xff,0xff,0xff,0xbf,0x12,0xf4, + 0x7f,0xff,0x8f,0x50,0xf1,0xff,0xff,0xff,0xa7,0xc2,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x14,0x92,0xaa,0x4a,0xa2,0xbf,0xa4,0x52,0x95,0x22,0xff,0xff,0xff, + 0xff,0x3f,0x45,0xf2,0x7f,0xff,0x3f,0x04,0xf4,0xff,0xff,0xff,0xd7,0xe8,0xff, + 0xff,0xff,0xff,0x5f,0xff,0xff,0x83,0xa8,0x94,0x54,0x09,0x2f,0x55,0x4a,0x52, + 0x49,0xff,0xff,0xff,0xff,0x5f,0x99,0xf0,0x7f,0xff,0x7f,0x51,0xfc,0xff,0xff, + 0xff,0x6b,0xf1,0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x2b,0x2a,0xa9,0x12,0x20, + 0x5f,0xa9,0xaa,0x54,0x00,0xff,0xff,0xff,0xff,0x5f,0x15,0xf2,0x7f,0xff,0xff, + 0x8f,0xff,0xff,0xff,0xff,0x2b,0xfc,0xff,0xff,0xff,0xff,0x2f,0xfd,0xff,0x87, + 0xa0,0x4a,0xaa,0x8a,0x9f,0x4a,0x52,0x15,0xa9,0xff,0xff,0xff,0xff,0x5f,0x8a, + 0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xf8,0xff,0xff,0xff,0xff, + 0x57,0xf2,0xff,0x2f,0x82,0x52,0x05,0xd0,0x2f,0x95,0x4a,0x49,0x84,0xff,0xff, + 0xff,0xff,0xbf,0x24,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xfd, + 0xff,0xff,0xff,0xff,0x4b,0xd5,0xff,0x9f,0x28,0x54,0x48,0xc5,0xbf,0x52,0x55, + 0x0a,0xe1,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfa,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x1a,0xfe,0xff,0xff,0xff,0xff,0x57,0xa9,0xff,0x3f,0x82,0x00,0x21, + 0xf0,0x5f,0x2a,0x49,0x21,0xc4,0xff,0xff,0xff,0xff,0xaf,0x1a,0xfd,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0x3f,0x85,0xff,0xff,0xff,0xff,0xff,0x29,0xa5,0xff, + 0xff,0x24,0x52,0x88,0xfc,0xbf,0x92,0x2a,0x09,0xf1,0xff,0xff,0xff,0xff,0x9f, + 0x4c,0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x15,0xff,0xff,0xff,0x7f, + 0xff,0xa5,0x4a,0xff,0xff,0x90,0x08,0x01,0xfe,0x3f,0x55,0x52,0x24,0xf4,0xff, + 0xff,0xff,0xff,0xaf,0x02,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xc6, + 0xff,0xff,0xff,0xbf,0xfe,0x95,0x54,0xff,0xff,0x05,0x42,0xa8,0xfe,0xbf,0xa4, + 0x2a,0x41,0xf9,0xff,0xff,0xff,0xff,0x5f,0x55,0xfc,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0x4f,0xd0,0xff,0xff,0xff,0xbf,0x7c,0xaa,0x92,0xfc,0xff,0x53,0x08, + 0x01,0xff,0x1f,0x4a,0x01,0x04,0xfc,0xff,0xff,0xff,0xff,0x27,0x05,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xc5,0xff,0xff,0xff,0x4f,0xbf,0x52,0xaa, + 0xfe,0xff,0x07,0x42,0xea,0xff,0xbf,0x50,0x54,0x51,0xff,0xff,0xff,0xff,0xff, + 0x97,0x56,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xf0,0xff,0xff,0xff, + 0x2f,0x7f,0xa5,0x54,0xfd,0xff,0x3f,0x09,0xe0,0xff,0x1f,0x02,0x01,0x04,0xff, + 0xff,0xff,0xff,0xff,0xaf,0x02,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x4b, + 0xf5,0xff,0xff,0xff,0xab,0x9f,0x94,0x92,0xfc,0xff,0xff,0x40,0xfd,0xff,0x9f, + 0x48,0x48,0xa1,0xff,0xff,0xff,0xff,0xff,0xa7,0x56,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0x6b,0xf8,0xff,0xff,0xff,0xa4,0x5f,0xa9,0x2a,0xfd,0xff,0xff, + 0xff,0xff,0xff,0x3f,0x22,0x21,0xc4,0xff,0xff,0xff,0xff,0xff,0x2f,0x03,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xfa,0xff,0xff,0x7f,0xd5,0x2f,0xa5, + 0xa4,0xfa,0xff,0xff,0xff,0xff,0xff,0xbf,0x08,0x08,0xf9,0xff,0xff,0xff,0xff, + 0xff,0x97,0x4a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xfc,0xff,0xff, + 0x7f,0x69,0xac,0x2a,0x55,0xf9,0xff,0xff,0xff,0xff,0xff,0x7f,0xa2,0x22,0xf8, + 0xff,0xff,0xff,0xff,0xff,0x53,0x21,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0x15,0xfe,0xff,0xff,0x9f,0x2a,0x95,0x94,0x92,0xf4,0xff,0xff,0xff,0xff,0xff, + 0xff,0x08,0x88,0xfe,0xff,0xff,0xff,0xff,0xff,0x57,0x8b,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xa9,0xfe,0xff,0xff,0x5f,0x52,0xbc,0x52,0x55,0xf5,0xff, + 0xff,0xff,0xff,0xff,0xff,0x21,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xa1, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x0d,0xff,0xff,0xff,0x57,0x15,0x3f, + 0x55,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xc8,0xff,0xff,0xff,0xff, + 0xff,0xff,0xd7,0x89,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xbf,0xd6,0xff,0xff, + 0xff,0x4b,0x45,0x3f,0x49,0xaa,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf9, + 0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0x3f,0x81,0xff,0xff,0xff,0x29,0x11,0x5f,0x28,0x55,0xf5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xc8,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0x5f,0xd6,0xff,0xff,0x7f,0xaa,0xc2,0x0f,0x55,0x49,0xea, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5, + 0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x9f,0xe1,0xff,0xff,0xbf,0x4a,0xd1, + 0x5f,0x48,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe9,0xe0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x27,0xf4,0xff, + 0xff,0xbf,0x94,0xc4,0x07,0x91,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xea,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xaf,0xf1,0xff,0xff,0x9f,0x52,0xe0,0x4b,0x44,0x52,0xe9,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0xe0,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xab,0x2a,0xf5,0x0f,0x51,0xa5, + 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x69,0xe5,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x55,0xf8,0xff,0xff,0x95,0x14, + 0xf0,0x5f,0x84,0x54,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0x75,0xf0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x13,0xfd, + 0xff,0xff,0xa5,0x42,0xf9,0x7f,0x91,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xfa,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0x54,0xfe,0xff,0x7f,0x52,0x12,0xfa,0xff,0x20,0xa5,0xe4,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x34,0xf8,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xaf,0xaa,0x48,0xfc,0xff,0x0b, + 0x29,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xb5,0xf8,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x52,0xff,0xff,0x2f,0x49, + 0x02,0xfe,0xff,0x43,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x3f,0x3a,0xfa,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x4a, + 0xff,0xff,0xa5,0x2a,0xa9,0xff,0xff,0x17,0x25,0xe9,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9a,0xfc,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0x2a,0xff,0x7f,0x95,0x54,0x80,0xff,0xff,0x07,0xa9,0xea,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1d,0xfc, + 0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xa9,0xfe,0x7f,0xa9,0x12,0xe5,0xff,0xff, + 0x5f,0x4a,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x5f,0xad,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x95,0xea,0x97,0x54, + 0x4a,0xf0,0xff,0xff,0x1f,0xa8,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x5f,0x0e,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f, + 0x52,0x55,0xa9,0x92,0x02,0xfd,0xff,0xff,0x5f,0x53,0xf5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x5e,0xfe,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xbf,0x2a,0x49,0x4a,0x55,0x49,0xfc,0xff,0xff,0x3f,0x94,0xf8, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x0f, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,0xa5,0xaa,0x92,0xa4,0x20,0xff,0xff, + 0xff,0xbf,0xa4,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x5f,0x57,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x52,0x52,0xaa, + 0x2a,0x0a,0xff,0xff,0xff,0x7f,0x54,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xa7,0x94,0x4a,0x55,0x4a,0xa0,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0x2f,0x55,0xa9,0x92,0x12,0xe9,0xff,0xff,0xff,0x7f,0x24, + 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf, + 0x87,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0xa5,0x4a,0xaa,0x44,0xf4,0xff, + 0xff,0xff,0xff,0x55,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0xab,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xab,0x94,0xa4, + 0x92,0x12,0xf9,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0x83,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0x47,0xa9,0x2a,0x55,0x40,0xfc,0xff,0xff,0xff,0xff,0x25,0xf5,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xd7,0x97,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0x33,0x55,0xa9,0x24,0x15,0xfe,0xff,0xff,0xff,0xff, + 0x95,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff, + 0x93,0xc3,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x25,0xa5,0x2a,0x40,0xff, + 0xff,0xff,0xff,0xff,0xa9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xff, + 0xff,0xff,0xff,0xff,0xe7,0xd5,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4b,0x92, + 0x54,0x92,0xd4,0xff,0xff,0xff,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xd5,0xc1,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0x97,0xaa,0x4a,0x05,0xe2,0xff,0xff,0xff,0xff,0xff,0x25,0xf1,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xff,0xff,0xff,0xff,0xd5,0xea,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x55,0x25,0xa1,0xf0,0xff,0xff,0xff,0xff, + 0xff,0x95,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xfa,0xff,0xff,0xff, + 0xff,0xea,0xe0,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xa7,0x24,0x59,0x04,0xfa, + 0xff,0xff,0xff,0xff,0xff,0xa9,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2, + 0xfd,0xff,0xff,0xff,0xff,0xc9,0xe9,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f, + 0x52,0x05,0xa1,0xfc,0xff,0xff,0xff,0xff,0xff,0xa5,0xfa,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x70,0xf9,0xff,0xff,0xff,0xff,0x74,0xe2,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0x47,0x95,0x92,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xf8, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xe2,0xfa,0xff,0xff,0xff,0xff,0x72,0xe8, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x97,0xaa,0x20,0xd0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb8,0xfc,0xff,0xff, + 0xff,0xff,0xea,0xe2,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x07,0x04,0x82,0xc2, + 0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x71,0xfd,0xff,0xff,0xff,0x7f,0x2a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0x4f,0x91,0x28,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xff, + 0xff,0xff,0xff,0x1f,0x54,0xfe,0xff,0xff,0xff,0x7f,0x75,0xf2,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0x27,0x44,0x82,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x29, + 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xb8,0xfc,0xff,0xff,0xff,0xbf,0x14, + 0xf1,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x0f,0x11,0x20,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x9a,0xfe,0xff, + 0xff,0xff,0x7f,0x5a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x40,0x85, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x4f,0x2d,0xfd,0xff,0xff,0xff,0x9f,0x12,0xf9,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0x3f,0x14,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfe,0xff,0xff, + 0xff,0xff,0xff,0xff,0x07,0xa6,0xfe,0xff,0xff,0xff,0x5f,0x4d,0xfa,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x4b,0xfe,0xff,0xff,0xff,0xbf, + 0x2c,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x57,0xff, + 0xff,0xff,0xff,0x5f,0x0a,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xd5,0xa9,0xff,0xff,0xff,0xff,0xaf,0x5a,0xfc,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa3,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x81,0x95,0xff,0xff,0xff,0xff,0x9f,0x06,0xfd,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xa5,0xff,0xff,0xff,0xff, + 0x2f,0x95,0xfc,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xea, + 0xff,0xff,0xff,0xff,0xaf,0x26,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xf5,0xf4,0xff,0xff,0xff,0xff,0xaf,0x86,0xfe,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0x70,0xe5,0xff,0xff,0xff,0xff,0x4f,0x2e,0xfe, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xb2,0xfa,0xff,0xff,0xff, + 0xff,0x57,0x83,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x78, + 0xf2,0xff,0xff,0xff,0xff,0xa7,0x22,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x5f,0x5d,0xfd,0xff,0xff,0xff,0xff,0x97,0x87,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x3c,0xfd,0xff,0xff,0xff,0xff,0x53,0xa3, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xac,0xfe,0xff,0xff, + 0xff,0xff,0x57,0x95,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0x9e,0xfe,0xff,0xff,0xff,0xff,0x97,0x81,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x57,0xfe,0xff,0xff,0xff,0xff,0xa9,0xa5,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xaf,0xff,0xff,0xff,0xff,0xff,0x4b, + 0x89,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x93,0xff,0xff, + 0xff,0xff,0xff,0x95,0xa2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x83,0xab,0xff,0xff,0xff,0xff,0xff,0xd3,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff, + 0xff,0xff,0xff,0xff,0xe9,0xa5,0xff,0xff,0xff,0xff,0xff,0xa5,0xe1,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xd5,0xff,0xff,0xff,0xff,0xff, + 0xd5,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xff, + 0xff,0xff,0xff,0xff,0x14,0xc1,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff, + 0xff,0xe0,0xe4,0xff,0xff,0xff,0xff,0xff,0x65,0xe8,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf, + 0xff,0xff,0xff,0xff,0x3f,0x72,0xe9,0xff,0xff,0xff,0xff,0xff,0x6a,0xe1,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xbf,0xb8,0xfa,0xff,0xff,0xff,0xff, + 0xff,0x52,0xea,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0x1f,0x7a,0xf5, + 0xff,0xff,0xff,0xff,0x7f,0x2a,0xe0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff, + 0xff,0x8f,0x58,0xfa,0xff,0xff,0xff,0xff,0x7f,0x25,0xf5,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xb5,0xff,0xff,0xdf,0xff,0x57,0x5e,0xfd,0xff,0xff,0xff,0xff,0xff,0x34,0xe0, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xca,0xff,0xff,0x8f,0xff,0x07,0xac,0xfc,0xff,0xff,0xff, + 0xff,0x7f,0x2a,0xf5,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd4,0xff,0xff,0x57,0xff,0x2b,0x2d, + 0xfd,0xff,0xff,0xff,0xff,0xff,0xb2,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2,0xff,0xff, + 0x07,0xff,0x43,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x2a,0xf8,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x3f,0xc5,0xff,0xff,0x2b,0xfe,0x08,0xab,0xfe,0xff,0xff,0xff,0xff,0x7f,0xaa, + 0xf2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x83,0x36,0x20,0x55,0xff,0xff,0xff, + 0xff,0xff,0x3f,0x15,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xc2,0xff,0xff,0x48,0x4a,0x85, + 0x49,0xff,0xff,0xff,0xff,0xff,0x7f,0x59,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xf5,0xff, + 0x7f,0x10,0x29,0x50,0xa5,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xf9,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x97,0xe4,0xff,0x7f,0x05,0x95,0x42,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x35,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xab,0xea,0xff,0xbf,0xa0,0x24,0xa8,0xd4,0xff,0xff, + 0xff,0xff,0xff,0x7f,0x19,0xf9,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xe5,0xff,0x3f,0x92,0xaa, + 0x50,0xe9,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xe2, + 0xff,0x9f,0xa0,0xaa,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xf9,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x95,0xf8,0xff,0x5f,0x4a,0x92,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff, + 0xbf,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xf2,0xff,0x1f,0x20,0x49,0xa5,0xfa,0xff, + 0xff,0xff,0xff,0xff,0x5f,0x1a,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xf8,0xff,0x47,0xa9, + 0x2a,0x29,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0x0a,0xfc,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49, + 0xf2,0xff,0x17,0x92,0xaa,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xac,0xfe, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x9f,0x2a,0xf8,0xff,0x43,0xa8,0x24,0x25,0xff,0xff,0xff,0xff,0xff, + 0xff,0xaf,0x0a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xfa,0xff,0x91,0x54,0xaa,0x52,0xff, + 0xff,0xff,0xff,0xff,0xff,0x2f,0x4d,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x45,0xfc,0xff,0x03, + 0x92,0x52,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x06,0xfc,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf, + 0x12,0xfe,0xff,0x50,0xaa,0x2a,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xa5, + 0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x44,0xff,0xff,0x0a,0x25,0xa5,0xa4,0xff,0xff,0xff,0xff, + 0xff,0xff,0x97,0x06,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x15,0xff,0xff,0x40,0xa9,0x92,0xea, + 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa1,0xff,0x7f, + 0x92,0x4a,0xaa,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x06,0xfc,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x95,0x8a,0xff,0x3f,0x84,0x54,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0x2f, + 0x25,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x52,0xe0,0xff,0xbf,0x50,0xa9,0x4a,0xf2,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x8e,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa9,0xea,0xff,0x3f,0x24,0x95,0x54, + 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x23,0xfe,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x4a,0xf0,0xff, + 0x9f,0x50,0x69,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x8b,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xa5,0xf4,0xff,0x0f,0x2d,0x75,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff, + 0xaf,0x03,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x9f,0x14,0xfa,0xff,0x2f,0xa8,0xfa,0x25,0xfd,0xff,0xff, + 0xff,0xff,0xff,0xff,0x97,0xd7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xfc,0xff,0x0f,0x4d,0xfd, + 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x83,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x12,0xfc, + 0xff,0x27,0x92,0xfe,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xd7,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x97,0x0a,0xff,0xff,0x83,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xef,0xc7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xab,0x24,0xff,0xff,0x2b,0xaa,0xfe,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0x05,0x95, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x82, + 0xff,0xff,0x51,0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xa9,0xe8,0xff,0xff,0x85,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xc1,0xff,0xff,0x90,0xd5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x4d,0xe8,0xff,0xff,0xa5, + 0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x51, + 0xf2,0xff,0x7f,0x40,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x3f,0x95,0xf8,0xff,0x7f,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x15,0xfa,0xff,0x3f,0xa4,0xf4,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xfc,0xff,0x7f, + 0x71,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f, + 0x15,0xfe,0xff,0x3f,0x94,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x0a,0xff,0xff,0x1f,0x79,0xf2,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xff,0xff,0x5f,0x8c,0xfa,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x82,0xff,0xff, + 0x1f,0x5c,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xa4,0x92,0xff,0xff,0xbf,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x9a,0xc4,0xff,0xff,0x0f,0x2e,0xfd,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xf0,0xff,0xff,0xaf,0xa7,0xfe, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0xe4,0xff, + 0xff,0x0f,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xbf,0x54,0xf2,0xff,0xff,0x9f,0x4b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x9f,0x92,0xf8,0xff,0xff,0xc7,0xab,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x15,0xfe,0xff,0xff,0x97,0xd7, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0x94,0xfc, + 0xff,0xff,0xc7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x2f,0x05,0xfe,0xff,0xff,0xcf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0xff,0xff,0xff,0xd3,0xeb,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x05,0xff,0xff,0xff,0xe3, + 0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xc2, + 0xff,0xff,0xff,0xeb,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x95,0xc8,0xff,0xff,0xff,0xf3,0xfa,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xd2,0xff,0xff,0xff,0xff,0xf5,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0xe0,0xff,0xff,0xff, + 0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49, + 0xf8,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x9f,0x2a,0xf5,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x4a,0xf8,0xff,0xff,0xff,0xff,0xfc,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x14,0xfd,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97, + 0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xab,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x52,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x85,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x54,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x4a,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xe0,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xe4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x5f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xbf,0x12,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x54,0xfa,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x0a,0xfc, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x53,0x45,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x97,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x82, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x4a,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xe8,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24, + 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,0xf9,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xfe,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f, + 0x49,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x2f,0x95,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x01,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x57,0x81,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x97,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe0,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0xf4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x57,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x2b,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xfc,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfc, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x49,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x89, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xe9,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0x9f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f}; diff --git a/tests/auto/gui/image/qimagereader/images/grayscale-ref.tif b/tests/auto/gui/image/qimagereader/images/grayscale-ref.tif Binary files differnew file mode 100644 index 0000000000..960531ea86 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/grayscale-ref.tif diff --git a/tests/auto/gui/image/qimagereader/images/grayscale.tif b/tests/auto/gui/image/qimagereader/images/grayscale.tif Binary files differnew file mode 100644 index 0000000000..5f4e11429d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/grayscale.tif diff --git a/tests/auto/gui/image/qimagereader/images/image.pbm b/tests/auto/gui/image/qimagereader/images/image.pbm new file mode 100644 index 0000000000..67e5efa3e9 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/image.pbm @@ -0,0 +1,8 @@ +P1 +16 6 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 diff --git a/tests/auto/gui/image/qimagereader/images/image.pgm b/tests/auto/gui/image/qimagereader/images/image.pgm new file mode 100644 index 0000000000..443bf40964 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/image.pgm @@ -0,0 +1,10 @@ +P2 +24 7 +15 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 +0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 +0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 +0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 +0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/tests/auto/gui/image/qimagereader/images/image.png b/tests/auto/gui/image/qimagereader/images/image.png Binary files differnew file mode 100644 index 0000000000..7d4890a7ff --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/image.png diff --git a/tests/auto/gui/image/qimagereader/images/image.ppm b/tests/auto/gui/image/qimagereader/images/image.ppm new file mode 100644 index 0000000000..2a5640e189 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/image.ppm @@ -0,0 +1,7 @@ +P3 +4 4 +15 + 0 0 0 0 0 0 0 0 0 15 0 15 + 0 0 0 0 15 7 0 0 0 0 0 0 + 0 0 0 0 0 0 0 15 7 0 0 0 +15 0 15 0 0 0 0 0 0 0 0 0
\ No newline at end of file diff --git a/tests/auto/gui/image/qimagereader/images/image_100dpi.tif b/tests/auto/gui/image/qimagereader/images/image_100dpi.tif Binary files differnew file mode 100644 index 0000000000..fcf3cd89aa --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/image_100dpi.tif diff --git a/tests/auto/gui/image/qimagereader/images/kollada-noext b/tests/auto/gui/image/qimagereader/images/kollada-noext Binary files differnew file mode 100644 index 0000000000..2abd4bb763 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/kollada-noext diff --git a/tests/auto/gui/image/qimagereader/images/kollada.png b/tests/auto/gui/image/qimagereader/images/kollada.png Binary files differnew file mode 100644 index 0000000000..2abd4bb763 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/kollada.png diff --git a/tests/auto/gui/image/qimagereader/images/marble.xpm b/tests/auto/gui/image/qimagereader/images/marble.xpm new file mode 100644 index 0000000000..1c08049624 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/marble.xpm @@ -0,0 +1,470 @@ +/* XPM */ +static const char *marble_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 240 240 223 2", +/* colors */ +".. c #959595", +".# c #c5c5c5", +".a c #adadad", +".b c #dedede", +".c c #b7b7b7", +".d c #d2d2d2", +".e c #bebebe", +".f c #c9c9c9", +".g c #b8b8b8", +".h c #d6d6d6", +".i c #9e9e9e", +".j c #eaeaea", +".k c #b2b2b2", +".l c #cecece", +".m c #a5a5a5", +".n c #e4e4e4", +".o c #c4c4c4", +".p c #d9d9d9", +".q c #b1b1b1", +".r c #d8d8d8", +".s c #e0e0e0", +".t c #d6d6d6", +".u c #b6b6b6", +".v c #bfbfbf", +".w c #cbcbcb", +".x c #a5a5a5", +".y c #d1d1d1", +".z c #cdcdcd", +".A c #aaaaaa", +".B c #9a9a9a", +".C c #dedede", +".D c #aeaeae", +".E c #e6e6e6", +".F c #d3d3d3", +".G c #c8c8c8", +".H c #bababa", +".I c #c4c4c4", +".J c #cccccc", +".K c #bcbcbc", +".L c #f0f0f0", +".M c #b5b5b5", +".N c #e3e3e3", +".O c #c2c2c2", +".P c #adadad", +".Q c #c9c9c9", +".R c #e1e1e1", +".S c #a2a2a2", +".T c #d1d1d1", +".U c #bebebe", +".V c #dbdbdb", +".W c #dbdbdb", +".X c #c8c8c8", +".Y c #b9b9b9", +".Z c #a8a8a8", +".0 c #d3d3d3", +".1 c #9f9f9f", +".2 c #c1c1c1", +".3 c #ebebeb", +".4 c #b4b4b4", +".5 c #d9d9d9", +".6 c #cecece", +".7 c #e8e8e8", +".8 c #d6d6d6", +".9 c #c5c5c5", +"#. c #b0b0b0", +"## c #dadada", +"#a c #c5c5c5", +"#b c #d1d1d1", +"#c c #afafaf", +"#d c #b1b1b1", +"#e c #cbcbcb", +"#f c #c1c1c1", +"#g c #eeeeee", +"#h c #9b9b9b", +"#i c #c6c6c6", +"#j c #c0c0c0", +"#k c #cbcbcb", +"#l c #bdbdbd", +"#m c #a1a1a1", +"#n c #b7b7b7", +"#o c #a7a7a7", +"#p c #e6e6e6", +"#q c #c9c9c9", +"#r c #bbbbbb", +"#s c #e2e2e2", +"#t c #b8b8b8", +"#u c #cdcdcd", +"#v c #d3d3d3", +"#w c #cfcfcf", +"#x c #e0e0e0", +"#y c #d5d5d5", +"#z c #bdbdbd", +"#A c #cecece", +"#B c #c0c0c0", +"#C c #b7b7b7", +"#D c #e5e5e5", +"#E c #c4c4c4", +"#F c #e3e3e3", +"#G c #d3d3d3", +"#H c #dddddd", +"#I c #dddddd", +"#J c #acacac", +"#K c #a3a3a3", +"#L c #eaeaea", +"#M c #e1e1e1", +"#N c #b9b9b9", +"#O c #d5d5d5", +"#P c #bababa", +"#Q c #d7d7d7", +"#R c #b5b5b5", +"#S c #d1d1d1", +"#T c #c6c6c6", +"#U c #dcdcdc", +"#V c #b4b4b4", +"#W c #c6c6c6", +"#X c #a8a8a8", +"#Y c #a0a0a0", +"#Z c #cbcbcb", +"#0 c #bfbfbf", +"#1 c #cbcbcb", +"#2 c #a4a4a4", +"#3 c #c0c0c0", +"#4 c #bbbbbb", +"#5 c #9c9c9c", +"#6 c #a2a2a2", +"#7 c #dcdcdc", +"#8 c #c3c3c3", +"#9 c #9d9d9d", +"a. c #aaaaaa", +"a# c #d5d5d5", +"aa c #eeeeee", +"ab c #b6b6b6", +"ac c #b0b0b0", +"ad c #b3b3b3", +"ae c #c9c9c9", +"af c #e9e9e9", +"ag c #bdbdbd", +"ah c #a0a0a0", +"ai c #b0b0b0", +"aj c #e8e8e8", +"ak c #cacaca", +"al c #c3c3c3", +"am c #dbdbdb", +"an c #d0d0d0", +"ao c #d8d8d8", +"ap c #c7c7c7", +"aq c #dcdcdc", +"ar c #c7c7c7", +"as c #f0f0f0", +"at c #a3a3a3", +"au c #bfbfbf", +"av c #d9d9d9", +"aw c #dfdfdf", +"ax c #d3d3d3", +"ay c #c0c0c0", +"az c #cacaca", +"aA c #b3b3b3", +"aB c #cfcfcf", +"aC c #dadada", +"aD c #b2b2b2", +"aE c #e2e2e2", +"aF c #d7d7d7", +"aG c #c4c4c4", +"aH c #b8b8b8", +"aI c #cdcdcd", +"aJ c #a6a6a6", +"aK c #d2d2d2", +"aL c #cecece", +"aM c #acacac", +"aN c #dfdfdf", +"aO c #d5d5d5", +"aP c #c9c9c9", +"aQ c #bcbcbc", +"aR c #c6c6c6", +"aS c #cdcdcd", +"aT c #bebebe", +"aU c #f2f2f2", +"aV c #b6b6b6", +"aW c #e4e4e4", +"aX c #c3c3c3", +"aY c #e2e2e2", +"aZ c #d2d2d2", +"a0 c #dddddd", +"a1 c #dcdcdc", +"a2 c #ececec", +"a3 c #eaeaea", +"a4 c #cccccc", +"a5 c #c7c7c7", +"a6 c #c2c2c2", +"a7 c #cccccc", +"a8 c #a8a8a8", +"a9 c #e7e7e7", +"b. c #e4e4e4", +"b# c #d9d9d9", +"ba c #bababa", +"bb c #cfcfcf", +"bc c #d4d4d4", +"bd c #d0d0d0", +"be c #aeaeae", +"bf c #e1e1e1", +"bg c #d7d7d7", +"bh c #cfcfcf", +"bi c #b8b8b8", +"bj c #e6e6e6", +"bk c #c5c5c5", +"bl c #e4e4e4", +"bm c #d4d4d4", +"bn c #dfdfdf", +"bo c #dedede", +"bp c #ececec", +"bq c #bababa", +"br c #bcbcbc", +"bs c #b0b0b0", +"bt c #cccccc", +"bu c #a6a6a6", +"bv c #c1c1c1", +"bw c #bcbcbc", +"bx c #ababab", +"by c #d7d7d7", +"bz c #b7b7b7", +"bA c #b2b2b2", +"bB c #b4b4b4", +"bC c #bfbfbf", +/* pixels */ +"aYbla9a9a9.7#D.N#L#La9.7a9#D#D.7#D#D#DaY#x#xa0ama0ama0am#xbnbnbnaYaYaYaYaY#DaYaYaYbn#x#x#xaY.N#Da9a9a9a9a9a9a9a9a9.7a9a9a9#Da9#D#L#L#L#L#L#La2#La2a2a2a2a2a2#ga2#ga2#ga2a2#ga2a2#L#L#L#Lafa9a9a9bl#Dbl#Da9a9a9#L#L#Laf#L#Laf#L#L#L#L#L#L#L#L#L#La2#La2a2a2#La2#L#L#Laf#L#Laf#L#Laf#L#Laf#L#Laf#Laf#Laf#Laf#Laf#L#D#DblblaYaYaCa0.t.Fb#bnbnaCbnblblblblblaYaY.RaYblblblblblblblbla9a9a9a9a9a9#pa9a9#pa9#pa9#pa9#pa9#pa9a9bl#D#D#D#pa9#pafa9a9a9a9#L#Lafa9a9a9#D#D#pbl#U.V.Vb#.8am#xbn#IaYbl.N.N#x", +"am#I#Da9a9a9bj#D#La9.7#D#Da9#D#D#p#DaYaY#xbna0amamamb#a0a0a0a0bnawaYaYaYaYaYaYaY#xbnaY.R#xaYaY.Nafa9afa9afa9afa9.7a9.7a9bja9bja9#Lafa2afa2af#L#L.3#La2#La2bpa2#La2#ga2a2#ga2a2#g#L#Laf#L#La9afa9bl#Dbl#Da9afa9#L#Laf#L#Laf#L#Laf#L#L#L#L#L#L#L.7a2#La2a2#La2#La2#Laf#L#Laf#Laf#Lafajaf#L#Laf#L#L#Lafajafajafajaf.na9#s#Daw#xbnaCb#bg.Vbnbn.RaYaY#Mbl#pblaYblaYaYaYblblbl#D#Dbl#D#paf#pafa9#pa9afbla9#pa9#pa9#pa9#pa9#p#D#p#Da9#D#pa9#pa9#Da9#Da9af#L#La9.7#D#s#D#MaYbnaCb#aOb#aC#x#UaYaY#M#DaYbf", +"aOambn.sa9bja9.7a9.7a9#Da9bj#D#D#D#DaYaY#x#xa0amaFaFbgb#aF.Va0.VaYaYaYaYaYaYaYaYbn#xaY#xaY.N#D#Da9a9a9a9a9a9a9a9a9bja9#Da9#Da9#D#L#L#L#L#L#La2#La2afa2a2a2a2#ga2#g#La2bpa2bpa2#L#L#L#L#Lafa9a9#p#DaY#D#Da9a9.7a9af#Laf#L#Laf#Laf#L.7#L#L.7#L#L#L#La2a2a2#La2#L.3#Laf#Laf#Lajaf#Laja9#Lajaf#Lajafaja9#La9#La9#La9a9a9blaYaYaYawa0b#b#.paYaYblaY.Rbla9#pblblaYblaYa9#p#D#pa9#pa9#pa9a9a9#pa9a9#pa9bl#pa9#pa9#pa9#pa9#pa9a9#D#Dbla9a9a9a9a9#pa9a9a9#L#Lafa9a9#D#D#Da9awbn.pb#bgamaCbn#xaw#D#D#D.N#x", +"amamaC#x#D#s.7.7a9#Da9#D#D#D.N.N#xaYaYaY#xbna0a0aOaFb#aOb#bg.Vambna0bnaCa0aYaYaY#U.RaYaYaY#Dbl#Da9a9#La9af.7afa9.7a9.7a9bja9bja9#L#L.3#L.3#Laf#Lafa2#L#La2#La2bpa2a2#ga2#ga2a2#g#L#L#L#Lafa9afa9.Nblbl#Da9a9afa9#Laf#L#Laf#Laf#L#L#L#L#L#L#L.7#L#La2#L#La2aja2#Laj#Lafaj#Laf#L#Laf#Lafafajafaf#Lafaj#Lafajafaj#Laja9.n#D#MaY.R#xbga0bnbn.RaYbl#Ua9#pa9#D#Dbl#D#Dbl#Dbl#Dbla9#Da9a9#pafa9af#pa9#p#pa9#pa9#pa9#pa9#pa9#p#D#pa9#Da9a9af#pafa9af.7a9#Laf#L.7a9#s#D#saYaY#Ua0aObgao#x#IaYbl#D#s#D.sbf", +"amaOama0.N.Na9a9bja9#Dbj#D#D#DaY.N#x#x#x#xbnaCa0#H.Vbgb#b#aFbgambnbn#Ubnbnbnbnbn#xaYawaYbl#Da9#Da9a9a9a9a9a9a9a9a9bja9#Da9#sa9#D#Laf#L#L#L#La2a2a2afa2#La2#ga2a2#g#L#g#La2bpa2#L#L#L#Laf#La9a9#pbl#Dbl#Da9a9.7a9#Lajaf#Lajaf#Lajafafajafafajafaf.j#L.3a2#Laf#La2af#Laf#Laf#Laf#L.n#L.n#La9#L#Lafa9afa9aja9#La9af.7afa9#Dbl#IaYawa0a0#UbnaYblblaY#pa9#pa9#D#D#D#Dafa9afa9af#pa9#pa9afa9#pa9a9a9a9#pa9#pa9#p#pa9#pa9#pa9a9#D#Dbla9a9a9a9a9a9.7a9.7af#Laja9a9#D#D#saYawbnaCb#aobn#x.Nbl#s#D#D#D.N.N", +".CamaOao.WaY#D.7#s#Da9#D#D.NaY.N#x#I#xbn#xaY#x#U#xa0a0a0bgamb#ambga0ama0am#xa0a0.RaYaY#Dbl#Dbl#Da9a9a9a9afa9afa9.7a9#D.7#Dbja9.7af#La2#La2af#L#La2a2a2a2a2#L#g#L#ga2a2#ga2#ga2#g#L#L#L#Lafa9a9a9#Dawbl#Da9a9a9.7af#Laf#Laf#L#Laf#L#Laf#L#Laf#L#Laf#L.j#La2afajaf#Lafajaf.Eafaj#Laf#Laf#Lafaja9aj#Lajaf#Laf#Lafajafajaf.n#DblaYaYaCbn#xbnaYaYaY.Rbla9#p#Da9a9.7#La9a9a9a9a9afa9afa9a9afa9afa9afa9#p#pa9#pa9a9#pa9#pa9#p#D#pa9#Da9afafafaf.7a9a9.7#L#Lafa9.n#D#s#D#D#x#Ua0aCaC#x.saY.s#D.7a9.Ebj.N", +"#xa0.8a#.8.Cbf.N#D#D.N.NaY.N.saY#x#xaY#IaYaYaYaYaYaY#x#x#xa0aCam.Vb#bg#yb#.Va0bnaYaYblaY#Da9#D#Da9afa9af.7a9a9a9.7a9bja9#s#Da9.7ajaf#Laf#L#La2#L.3#La2#La2a2#ga2a2bpa2#L#g#La2bp#L#L#Laf#La9af#paYbl#D#Da9a9a9a9#L#L#Laf#Laf#L#Lafafafafaf#Lafaf#La2#La2afajaf#Lajaf.7af#Lafa9aja9aja9#L.n#Lafafa9#L.n#L.n#La9#Laf#La9a9#Mbl#xaY#x#IaYawaYaYaYaYblbl#pa9a9.7#L.7afaf#Laf#Lafa9afa9a9a9a9a9a9a9a9a9#pa9#pa9#pa9#pa9#pa9a9#D#D#Da9af#Lafa9a9a9.7af#Laja9a9#D#D#D#M.N#I#xaCa0#UaY#D.NaY#D.n.7bj#Dbj", +"#x#xa0#vbcaq#xbf#D#D.Nbl.s.NaYbf#x#x#xaYaYaYaYaYaY#M.NaY#x#x.Ca0b#bgb#bgbg.V.p.VawaYblbl#Dbl#Dafa9a9a9a9afa9afa9.7a9#Da9#D#s#Da9af#La2#La2#Laf#La2#La2#La2bpa2bpa2#ga2#ga2#ga2a2#L#L#L#Lafa9a9a9aYaYbl#Da9afa9a9ajaf#Lajaf#Lajafafaj#Lafajafafajafa2#La2#Laf#Lafa9#Lafaja9aj#Laf#Lafajaf#Laf.7afaj#Laf#Lafajaf.Eafajaf.n#Dbl#MaY#IaY#xaY.RaY.RaY#FaYa9a9a9#L#L#Lafa9afafa9#Laf#L#La9afa9afa9afa9#pa9#pa9#pa9#pa9#pa9#p#D#p#Da9a9afa9a9.7a9#L.7.7.naf#La9.n#D#s.N.N#x#UaCbnaY#s#DaY#sa9.7b..7#DaW", +".7aw#x.CaoaB.y.5#s.N#I.Ca0a0ama0#x.N.NaY.NaY#D#Dbl#DblaYawaY#U.CbgbmaBaSaZbma0a0blaYaY#Dbla9a9#Da9af.7afa9a9a9a9bl#D#D#D#D.N#D#D.7a9a9a9a9a9#La9afafafafafaf#Lafa2#La2#L#L#L#La2a2a2af#La9a9#D#DawaY#sbla9b..7#La9a9a9a9.7a9a9a9afa9af.nafafafafafajafajafajafajafaja9a9bl#MaY#s#Da9#Da9#sa9.na9.7af.Eaf.7af#Lafafa9a9bl#M.NaY#Ibn#UaYaYaw#Da9a9.n#p#pa9a9.7.7.7.7a9.7a9.7a9a9#Lafafaf#Lafa9a9a9#pa9a9#pa9#pa9a9a9a9afa9.7af.7.7.7afa9a9a9a9a9a9#L.na9.na9.na9.n#Maw.Nawaw.N#D#D.E.7bj.7#Dbjb.#D", +".7#D.s#x.5.y#va#.NaYbf.Ca0ao#xbn.s.N.N#D#D#Da9#Dbl#Dbl#DaYaYaYbn.p.taBan#uaZ.FbgbnawaYawbl#D#D#D#D#Dbl#D#D#D#D#D#Dblblawbl.N#D#Da9a9a9.7af.7a9a9afafafajafaf#L#L#La2a2a2a2a2#La2#La2af#La9#D#D#DaYaY#D#D#Da9a9.7a9a9.7a9a9a9.7a9#Lafafafaf#Lafafaja9af#pafa9af#pajaf.na9#s#DblaYa9a9.na9a9a9#Da9aj#Lafaj#La9aja9ajaf.nbl#DaYaw#xa0#x.b#xaY#D#D#p#p#p.na9a9a9#L.7a9a9a9a9a9.7a9#Lafafafafafafa9af#p.na9#pa9a9a9afa9af.7a9#L.7#L#La9a9.7a9a9.7.na9a9a9.na9.na9.na9#D#MaYaw.N#s#D.n.7.7.n.7.E#D#D.7", +".7a9aY#xaCam#v#vaCaqa0aqama0#UaY.NaY#D#D#D#D#D#Da9#D#D#Dbl.NaY#Ibnambm#SaZa#a#b#aCa0a0#x#x#xaYbl#D#Da9#Dbl#Dbl#DblaYaYaYaYbl#D#Da9a9a9afa9afafafafafafafafaf#Laf#L#L#Laf#Laf#Laf.j#L#L.n.7a9#s#Daw#x#M#Da9#Daj.7a9.na9.7.na9a9.naf#Lafajafafajafafafajafajafafaf#pa9bl#Mbl#Daw#D.n#Da9#D.na9.na9a9af.7afafajaf#Lafa9a9#sblaY#x#IbnbnaYaYawbla9a9#p#pbl#pa9#D.7.7a9.7a9.7a9a9#L#Lafaf#Lafafa9a9a9a9#pa9.n#pa9a9a9afa9a9#L#Laf.7afa9a9a9a9.7a9a9a9.naf.na9.na9.na9#M.Nawaw#D#s#D#Daj.7aj.7#D.7b.a9", +"a9#saY.s.Ca0aF#v#v.5#vaF.8a0#x#D#D.N#D#Da9bja9.7a9a9bl#D#DaYaY.N.R#Uama#aFaOaFaFb#b#b#a0aCa0#I#xaYblaYblbl#DblaYaw.R#IaYawaY#D#Da9a9a9a9a9a9a9a9a9#p.na9af#La9.7af#Laf#Lafajaf#L#L.3#La9#D#D.NaYaYaYbl#D#D.7a9.7a9.7a9a9a9.7a9.7a9a9a9a9.na9#pa9.n#pa9#pa9#p.na9#sbl#s#Dbl#DblaYa9a9a9.Ea9a9bja9a9.na9#sa9#Da9#Da9.nblbl#D#M#x#x#U#x#UaYaY#Da9#sa9#p.na9a9.7a9a9#La9a9#La9#L#L#L#Lafafa9#La9afa9#pa9#pa9a9a9a9.7#Laf#L#L#L.7#L.7.7a9.7.na9a9.na9.7.n#D#D#s#D#M#D#Mbl.s#D.s#Da9#D.7.na9a9.n.7#D.7", +".N.N.NaY#Uaqamaoa#aB.0a#ambn#xbl#D#D#D#D#Da9.7a9a9.7a9#D#D.s.NaYaY.RaCamamaF.5b#amaob#amama0a0a0#IaYawaYaYaYaYaYbnbnbnaYaYaYbl#D.na9a9.7afa9a9a9a9af#paf.na9afa9.n.7#La9.7a9#L#Laf#La9a9#D#D.N.NaYaY#Dbl.n#D.7af.7a9.na9.na9a9.na9.na9a9#pa9.na9a9a9.na9.na9a9a9aY#MaYbl#sbl#s#D.n#Da9#Da9#sa9.n#Da9a9.7a9.na9.na9a9#DawaY#x#x#xbnbnaYawaYbla9a9a9a9#pa9#Da9a9.7a9.7af#L#L#La9#Laf#Laja9.7a9.7a9a9.n#pa9a9.7#Da9a9#L#La9#Laf.7afa9a9a9.7a9a9bja9#sa9#D#M#D#M#D#sbl#saY#saY#s#D#s.7a9.E.7#D#D#D#D", +"#I.N#I#xamaCamaFaB.Gaz#u.8am#xaY#D#D#D.7a9bja9.7.7a9.7a9#D#D#D.N#Ubna0aCama0amao.Va0amaCama0aC.Cbnbnbnbn#x#Ubn#Uam#Ua0awaYaYaw#D#pa9a9#pa9a9a9#p.na9a9a9a9a9.7a9.7a9af.7afa9a9a9aj#La9.E#D#D#saYaY#Mbl#Dbja9.7.7a9a9a9.7a9#sa9#D#p#D#pbl#sbla9#D#sblbl#Dblbl#sblawaY.N#MaYbl#Dbla9.Ea9.na9.7a9a9#D#s#D#s#D#D#D#D#D#MaYbl.Naw#x#Ibn#I.R#xaY#Da9#Da9a9a9a9.na9a9a9.7a9a9#La9#La9a9#L#Laf#La9a9#Dbj#pa9a9a9#Da9.7.7afafa9.7a9.7#L.7a9.7a9a9#sa9.na9#D#D#D#s#D.sbl#Dawbl#saY#sbj#Da9#s#D.Nbl.saY.s.N", +".Cbf.C.Cam.5aoa#.la5.G.waZ#va0.C#D#D#D.7a9a9#L#La9#L.7.7.7#D#D#D#x#x#x#x#x#xa0bnam.Va0.Va0a0#xbnaY#x#Ia0a0aCa0aCa0ambnbnaYawblbl#Dbl#M#Dblbl#D#Mbl#pa9a9#Da9a9.7a9.7a9.7a9.7a9a9#La9.n#D#D.NaY.NaYaY#D#Da9#Daja9.7a9a9a9a9.7a9.n#D#M#D#sbl#sblbl#D#M#D#M#D#M#D#M#x#xawaY#Dawa9#Ma9#Da9#Da9#sa9#s#D#D#D#D#D#s#D#sbla9blaw#x#x#xa0#UbnaYawaYbl#D.na9a9a9a9a9#Da9#pa9#La9#L#La9.7af#L#L#L.7#L.7.7.na9a9#D#s.7#D.7.7afa9#La9af.7a9.7.na9.na9a9a9#Da9#s#Dawblaw#D.sbl#sbl.s#D#D#s#D#saY.Naw#xaYbf#x#x", +"aqaoamavam.8a##v.5#Saza7.w#u#vam#Da9#D.7a9.7a9a9.7#L.7#La9bj#D#D.Cbn#xbnaYaY#x#x.pb#.Vamaobnbn#xbnbn#xbn#xbn#xa0a0b#aCa0aw.R.Nblaw#Dbl#Dbl#Dblbl#pa9#Ma9a9.nbja9a9a9#La9a9a9.7a9.na9#D#D#DaY.N.NaYaYbl#D#sa9a9#La9.Ea9.7a9a9#Da9#M#Dbl#Mbl#sbl#s#Mbl#sbl#D#MaY#sa0#I.NaYaYblbl#Da9a9.na9.Ea9a9a9#D#D#s#D#s#D#D#D#Dbl#saY#x#xaC.Ca0#x.R#xaY#D#Da9a9a9a9a9a9#p.na9a9a9a9#La9#La9a9#L#L#L.7#La9.7.7a9a9a9#Da9.7af.7a9afa9.7a9.7#L.7a9a9bja9#s.7.na9#sbl.s.saYaw#saY#saY#saY#s#D#s#D#xaY#x.W.C.C.Waq", +"amaFaOaFaOaFama0aY#x.8.0#u#uan#uam#xaY#Da9a9.7a9#Laf#L#La9#D#D.sbl#D#sbl#xaYaw#x.Rbn#Ub#.Va0b#b##Ubnbnbnbna0#xbnbnaYaYaYbnbn#UbnaYaYblaYblawblawa9.n#p#pa9#pafafa9a9a9.na9a9a9a9bl#Dbl#Dbl#sblblawaY#D#Da9.7.7#Laf#Laf.n.7#D.7#D.NaYawaY#xbn#Ua0#U#Ubn#UbnaC#UaY#xawaY#M#D.na9ajaY.N#Dbla9a9.na9.nbl#DblaYaYaw#x#MblaYawbn#Ibna0.b#U.RawaY#Mblbl.na9a9a9a9a9afa9#Dbj#D#D#D#D#D.7#Lafa9afa9.7#Da9#sa9a9a9#Da9.7.7afa9a9a9a9#D#s#D#D#Daw.N.NaY.NaY#D#sbl#saY#saY.N.na9#D#s#DaY.N.N#I#x.CamaoaFbya#", +"bgb#amam.5aCa0.C#M#xa0aFaZ#uaB.0aO#xaY#Dafa9a9a9#L#L.7af.7#D#D#D#D#DaY#D.N.N#xaY.Cbna0a0b#aFb#aF.Vbnbna0#Ubnbn#x#U#x.R#xawaYbn#x.R#I.Raw.RaY#x.R#p#p#pbl.na9a9a9a9a9a9#Da9#s#D#M#Dblbl#sblbl#DblaY#Dbla9#Da9af.7ajaf#L.7a9.n#Da9#M#DaYaYaYaYbnaCbn.paCa0bgaoaC#UaC#I#xaY#MaYblbl#Mbl#M#D.na9a9.n#D#M#D#M#DaY#DaY#M#pawaY#Ibn.Ca0aYbnaY.RaYblbl#Da9a9.na9afa9a9af#D#D#D#D#D#Da9#Daf#L.7a9.7#Da9#D#pa9.na9a9b.a9.7.7a9.7a9bja9#D#D#D#D#DaY#Daw#Daw#D#D#M.N#saY.saY#sbl#sbl.Naw.Nawbna0aCa0.8a#aF.5", +"amamaCa0a0#x#xaYblaY#Ia0bc#u#ua#amam#x#D#Da9.7a9#Laf#La9a9.7#D#Dbl#D#D#MaYaYboaYbna0a0aoamb#aOb#b#am.Va0bnbn#Ubnbn#xaYaY.R#xawaYbn#UbnaCbn#Ubn#U.RawaYblaYblawbl#D#D#D#Dbl#Dbl#Dbl#Dblbl#Dblbl#DaYaw#D#Da9bj.7#La9#Lafa9a9bja9bj#D#MblawaYaw.R#Ubn.V.8#vaB#S#waOaoa0aC#x#x.N#I.NaY.NaY#D#D#D.n#Dbl#sbl#Dbl#saYaYblawaYaYbnbnaCbn#U.baYawaY#M#Dbla9.na9a9.na9.na9#s#D#s#D#s#D#D#D.na9a9a9a9#D#D#D#pa9a9#Da9#D#L.7a9.na9#D.n#D#D#D.saY.saY.NaY.saY#sbl#s#Daw#DaY.NaY.NaY.saY.NaY#x.Wa0a0a0aOam.8a#", +"#x#x#x#xaYaY.N.N.7#D#x#xb#aZ.ya#amaObn#Da9#Da9bj#L#L#D.7#Da9.7a9a9.nbl#D#DaYaY.NaC#xa0.Vamb#aFaF#vaFbga0a0bn#xaY#Ubn#U#xaYaYaYaYbn#xa0a0a0a0aCa0bn#Ubn.baYaYaYaYbl#D#M#Dbl#D#Dbl#Dbl#s#D#D#D#D#MaY#Dbl#D#Da9.7a9ajafaj.7a9a9#sa9a9#M#DaYaYaY.b#xbgb##vaBa7.Q.z#S.5aO.8aoao.Ca0.W#x#I.Naw.NawaY#DawaYblawaYaYawaYawaYaY#U.C#U.Ca0aY#x.RaY#xblbl#D#Dbla9a9a9a9a9a9#D#D#D.NaY.N#s#Da9a9#sa9a9#M#Dbl.na9a9a9a9bja9.7a9a9a9.7#D#D#D#saY#DaY#Daw#DaY.N#M#D#s#Dbl.s.N#M.Naw.N#xaY#x#I#x#Ua0a0aCamama0am", +"aYaYbl.s#D#D#D#Da9#D#s.N.CaOa#aF.5ao#x#Dbl#Da9#Da9a9.7a9.7a9a9.7a9a9a9#Dbl.NblaY#x#xbna0a0amaFaFbmaFaFamaCbn#U#xbnbnbnaY.b#x.R#xaYbn#xbnaCa0bna0#Ubn#Ubnbn#I#xaY.NblaYaYawaYaw#Dbl#Dbl#D#M#Dbl#DaYaY#Dbl.na9.7a9#La9#La9a9bja9#D#MaYblawaY.R#x#U#S#SaB#uaz#u#vaO.8aOaOaOaOaOaOaO.Caoa0.W.C#I#x#I#x#I#x#x#I#x.NaY#x#Ubn#UbnaCbnaC#I.R#IaYawbl.sbl#M#D#Ma9#D.n#Dbl#D#D#s#D#D#D#D#D#Ma9bl#D#D#DblaYa9#p#sa9#D.n.7.7.na9#s#D#s#D.NaY.saY.saY.NaY.saY#s#D#p.s#saYaY.N#IaYaYaw#x#IaY#I#x#x#I#x#x#x#x#x", +"#D#D#D.7.7.7.7.7.7a9a9#DaY.CaO.y.5.5bnaY#D#D#D#D#D#Da9bja9a9.7a9a9a9#Da9#sbl.N#MaYaY#xawbna0aCb#aOaFbgb#b#a0a0bn#Ibnaw#xaYaYaYaY#Ubn#IaYaYaYaYbnbn.R#xaw#x.R#Ibnaw#IaY.sbl.Nbl.N#D#M#Dbl#D#M#DblawaY#M#D#D#s.7a9aj#L.na9.n#D#s#D#DaY#IbnaY#UbnaCaB#SaB#u#uaBaO.5amaoam.8.5aO.y#1#1#u.yaOamamaoamamamaC.C.C#xbn#x#Ua0aC.CaCa0#Ia0.R#x#UaYaYblaY.N#D#p#D#sbl#Dbl#D#s#D#D#D#D#s#D#Da9#p#MblblawaYaY#Ma9bl#sa9bja9.7#Da9a9.7a9#Daw#DaY.saY#Daw#DaY#D#M#D#sbl.N#saY.saY#xbo.N.N.s.N.Naw.N#D#D#D#Da9#D", +"a9.7.7af#Lajbp#L.7#L#La9#DaYa0#va#a0a0.Cbl#D#D#Dbj#D#Da9.7a9#L#L.na9a9a9a9#D#D#Dbl#DaYaY#xaYbna0b#aFb#b#aob#aoambnbnbnbn#U#x.R#xaY.RaY.R#IaYaYawblblaYblaYaYaYawbn#I#x#UaYawbl#Daw.N#D#D.NaY.NawaY#xbl#D#D#Da9.Eafaf#La9#D#D#D#D#I#x#xaCa0aCaoaO.FaO#v#u#u#uaFbgaC.Caoa0ao.5aB.z.U.Oaz.y.y#vbm.y#v#v.5amaoamao.8amaoa0aoa0#Ua0#x#U#xbnaw.N.saY#sbl#Dbl#Dbl#D#M#D#D#D#D#D#D#D#D#D.nbl#Dbl#xaYaYaY#pbla9bl#D#s.7.7.na9#Da9#s#D.NaY.NaY.Naw.Naw.Naw#D#M#D#D#Maw.Naw#x#IaYaY#s#Da9.nbj.7.7b..7.7bp#L", +"#L.7#L#Lbpbp#Lbp.7#L#L.n#D.N.C.5a#amaCaoaY#D#D.N#Da9#Da9#La9#Lafafa9a9#Da9bl#Dbl.n#D.nblawaY#x.Ra0.Vbgamb#amaFaF#Ubn#U#xbnbnaYaYawaYawaYaYblaYaY.bblaYblblblaYaYaYaYaY#I#x#I#x#I.NaYaY.sbl.sbl.NaYaw.N#M#D#sa9.7a9a9.na9.n#D#s#D#xaCa0aoaob##SaBaOaF#S#uaB#v.5aoa0aCamaoao.8#v#v#3ar.wanazaz#3#C#3aX.w.yaOam.8amaCambga0aoa0aCbn#U#x#IaYaw.NaY.NaYaY#sbl#sbl#D#M#D#D#D#D#s#D#D#DblblaY#MaY#IaYawbl.nbl.n#D#Da9#D#Da9.Ea9#D#D#Daw#D#saY.Naw.NaY.N#M#D#s#D.saYawaY#I.N.N#sa9a9.7af#L.E#L#Laj#L#L#g", +"#L#L#L#L#La2bpa2#L.j.7.7#D.Nbf#IaFaBa7an.5a0#Daf#D.7#D.7a9a9#L#L#D#Da9#D#M#D#Dbl#Dbl#Dbl#Dbl#sblaw.RbnaCb#aOaFa#bg.VambnaCbnaw#x.RaYaYaY.baYawbl#pbl.n#Da9a9#D.7#s#D#D#D#D#D#MaYaw#IawaY#x.N#I#x#IaYaY#D#Da9.na9aja9.n#D.N.N#x.CaCb##vaB#uaBaB#v#SaOaOaOaObg.8am.W.WaCaCamaOaB#u#a#faz#Sa#aBaBaz#u#u#uaz.w.wa7#u#uaB.yao.5aC.C#Ia0.pa0aCbnawaY.sbl#saYaYaY#DaYaY#D#s#D#D#D#D#D#D#s#D#sblaY#x#I#x#D#D#D#Da9.n#D#sa9#D#D#D#s#D#D#D#sbl#s#D#saY.saY#MblaY.C.W#I.N#s#Da9#sa9.7.na9.7#L#L#L#L#L#L#L#L", +"bpaj#Lbp#Lbp#Lbpa2#L#L.7#D.Nbfbf.Va#an#uaB.8bn#D#Da9#Da9.7a9ajafa9bl#Dbl#D#D#M#D#D#Dbl#D#Dbl.NblaYawbnamb#aFbm#Sb#.Vaobn#xbnaYaY.baY#MaYblaYblaY#pbl#p.n#Da9.n#D#D#D#s#D#s#D#D#saY.s#x.s#I#x#Ibn.W#I#xaw.N#s#D#D#D#D.NaY#I#x.WaCaCaCaF#SaB#v#SaOaOaOb#aOb#bgamao#x#I.CaCao.8#u.w.OaG.G#SaBaBbmaB#v#v#va#aB#u.G.Galbk#Taz.w#v#v.5bg.5bga0ao.C#IaYaY#Dbl#DawaY#D#M.NaY#D#s#D#D#s#D#D#MaYblaY#I#x#x#M#s#D#s#D#D#D#D#Dbj#s#D#D#D#s#D#D#s#D#Daw#Daw.N#M#s#x#I.Cbf.s#D#D.n.7a9.7a9.7.E.7#L.7#L.7#L#L#L", +"#Lbp#L#g#La2bpa2a2#g#La9bj#D.Nbf.RaCaOaZ.yaFa0aY#D#D#s#Da9a9a9a9#D#Da9#Dbl#D#Dbl#D#M#D#D#M#Dbl#saY#xbnaCa0aOaF#Sb#bg.VbnaCbnaY#xaYaYaY.baYblaYbl#Ma9#p#Da9a9#D.7#D#sbl#Da9#Da9#D#D#D#saY.N#I#I#Iaoao.W#xaY.Naw.N#I#I#U.WaCaoamaobnaCaO#vaF#vaOaFbgambgambg.5.8amav.WaC.CaoaF#uaza6.OazaZaB#vaF#vaFaFam.5aF#v#SaB.G.O#3bv.G.GaPaP.w#u#vaFama0.C.C#IawaYawaY.NaYaYaY#MaYaYaYblaYawblaYaw.NaY#I#x#I#D.N#M#D#D#s#D#s#D#s#D#D#s#D#Dbl#s#p#saY#s.Naw.Nblaw#I#xaY.N.N#sa9.7a9.Ea9.Ea9#L#L#L#L#L#L#L#L#L", +"#La2bp#L#Lbp#Lbp#L#L#L.7#Dbj#D.NaYbna0aoa##vam.C#D#D#D#D.7#D.7a9a9#D#Dbl#D#Dbl#Dbl#Dbl#Dbl#D#DaYaYaYawbna0b#aO.Fbgb#ama0bnbn#IaY.bblawblaYaY#MaYa9#p#sa9a9#Da9#Da9a9a9a9a9.na9a9#s#D#D.saY.NaY#x.C.C.C.W#I#x#I.WaF.8a0a0a0a0aCa0aCaCb##vaFaO#vbgaob#aoaoamaoaCam.W.Caoa0.8#v#ubkab#aan#vaZ#vaFa#aoaobga0aoamamaOa#aBaZ#u.w.w.G#3#3#a.w.y.yaOb#aCbnbn#I#xbn#UaYawbfaYbfaw#x.s#xaY.NawaYbl#x#Ibn#I#Daw#D.s#D#s#D#D#D#D#D#D#D#D#s#D#D#Dbl#saY#saY.saYaw#xaw.N#s#D#D.7.n.7a9.7a9.7#La9aj.7#L.E#L.7#L", +"bp#L#L#g#L#g#La2#g#L#L#L.7#D#DbjawaYaCamaoa#.8aF.N.s#D#D#D.n#Da9#sbl#D#D#M#D#D#M#D#M#D#Dbl#sbl#saYaY#x#UbnaCb#b#bgb#bga0aCbn#x.RaYaYaYaYawblaYbl#p.n#pa9a9.nbja9.7a9.7#sa9#D.7.na9a9#D#D#D#saY.s#x#I#I#x.C.Wa0aoaoama0.W.C.Wa0#Ibn.paO#S#v#v#S#Sbgaoaoa0aoa0avaCaqaoavao.8#v.w#T.Y#3an#va#aOamaOa0bnaoambgamaoam.pa0bgb#aoaFaO.ybk#T.GaXaz.waBbyaCa0a0bnaCa0#Ibn#I#x#x#x#x#x#xaC#x#I#x#I#x#I.C#IaY#saY#saY#D#M#D#s#D#M#D#M#D#D#D.n#M#D.s#DawaYaw#x#IaYaw#sa9.7.n.7#L.7aj.7#L#L#L#L#L#L#L#L#L#L#L", +"#L#g#L#g#g#gbp#L#L#L#L.7af.7.7.7#D.N#xaob#.8a#a##DaY#D#D#D#Da9bjbl#D#Dbl#Dbl#D#DaY#DaY#D#M#DaYaYaYawaY#x#Ibna0aCbgb#bg.VaCbn#U#xaw.Raw#FaYblaYbl#D#p#Da9#Da9a9#Dafaj#Laf#Lajaf.7a9#Da9#sa9#D.Nbl.NaY.NaYaY#I.C.Wamaoaoaobga0aoa0aCam#vaBa##SaBaBaobgaoaoaC.Waqaoav.8ao.5aOaBazaX#4alaza##vaOam.5aC.Wa0.Wa0aob#.8bnaCaCaCaC.W.WaC.y.yaB#ubkbkaX.Oazae#vaO.5ao.pbga0a0a0#Ua0aCa0ao.CaCaCa0#IaCa0#IaYaw#D.sbl#s.N#s#Dbl#D#s#D#D#sbl#D#D#saYaw.saw.NaC#xaw#D#sa9.n.7a9aja9#La9aja9#L#L#L#L#L#L#L#L#L", +"#Lbp#ga2bpa2#L#g#L#L#L#L#L#L#LafbjaYaY#xama0.5aO.N.NaY.s#D#D#Da9#Dbl#s#Dbl#Dbl#D#M#D#M#DaYblaw#D#MaY#I.R#U#x#U#Ub#b#bga0aCa0#x.R.Raw.RaYawaYblaw#p.n#pa9.na9#Da9aja9af.Eaf#Lafajafaja9#Da9#s#Daw#D#s#D#s.NaY.NaY#U#Ua0.paobgb#bgaO#vaB#u#u.y#ua5aObgaoamaoamaoavam.8.8#v#v#u.w.GaTbw.G.0#vaFaoamaoa0aoama0aqamaoamaCaqaC.W.W#I#Iaxbgaobg#va7.Oau.U#3#3a5#uaB#vaFaoaoa0amaCamaob#aoamaoaoa0aC#Ibn.sawaY.sbl#saY#s#D#s#DaY#saY#D#D#s#p#s#DawaY#Iaw.C#I.N.naf.Ea9.7aj#L#Laj#L#L#Laj#L#L#L#L#L#L#L#L", +"a2#L#g#g#g#gbp#L#L#L#L#L.7#L.7#L.N.N.s#x#xao.5b#.NaY.N#D#D#D#D#D#M#D#Dbl#D#D#sbl#D#Dbl#Dbl.sblaY.NaY#x#I#x#U#UaC.Vbgb#bgaCaC#U#I.R#x.baY.RaYblaYa9#pa9#Da9#Da9bjaf#Laf#Laf#L#La9#La9a9a9.7#Da9#D#sa9a9a9#D.NaY.Na9#paY#Ua0aoaO.yaBaBazazan#u.Gbk.daOaO.8aoavao.8.8.8bd.yaL#uazaX#0#4#TaZaOaO.5aoa0.Camaoamaoamambcby.8.C.C.W.W.W#U.rbgaO#S.yaB#uaP#3.U#3arbk#u#vaFbgbgaob#aob#bgamaOaoaoaoaC#U#IawaY.sbl.s#D#Daw#DaY#s.N#M#D#s#D#s#D#M.NawaY.s#xaC.C#Ma9aj#L.7.naf#Laf#Lafaj#Laf#L#L#L#L#L#L#L#L", +"#g#g#Lbp#Lbp#Lbpa2a2#L#L#L#L.7#L#D.N.NaYbo.C.C.W.Vbn.N#Dbjbj.E.7#D#D#D#D#s#D#D#D#D#s#D#s#D#D#D#sawawaYaw#x#U#xaCa0aCa0aC.Vamb#a0aYaw.RaY#M#p#M#pajafaj#pa9a9#Mbl.na9a9a9a9a9a9afajafaja9#D#s#D#Dbl#D#s#D#s#D.n#Dbl#saYaYaw#x#IaCaOaB#1a5.w.wbkaV.Qbt.ybcbc.8bcbcaBaB#u#uaz.waP#T.O#zbw.6aF#vaOaFambga0amamaOaoaOaoaCa0.WaC.W.C#I.WaCaoaOaoaOaobg#v#v#S#1.Q#3agaV#1aB.8aOamaoaCbg#v.8aoa0aC#x#U#Iawaw#D.s#D#s#D#s.N#saY#s#Daw#D#Mbl#saYaw#x#I#xaC#D#sbj#D#D.7#s.7.7.E#L.7#Laf#L#La2a2a2#ga2#g#g#g", +"#gasbp#g#Lbp#Lbp#L#g#L#L#L.7af.7#D.NaYbf#x#x#x#xaCbn#I.N#Dbja9.7#D#D#D#D#D#D#D#D#D#D#D#D#D#s#D#DblawaYawbn#I.WbnaCa0.pa0aoa0aoam#UbnaYaYaYblblbl#paf#p.n#pa9bl#Da9a9a9aja9af.na9.7af.7a9a9a9#D#sa9#M#D#D#D#D#D#D#D#D#M.NaY#x#x#xa0am#vaB.z#u#Ebi#nbCaX.Q.y.y.QaXbka5#u#u.w.wbkaP.O#4#4.wa##v.5a#aoamambg.5aO.5a#aoamaC.WaC.W.W#IaCaC.WaCaoaoaoao.8bg.8#v#v#u#uaPagagaXbka5aBaBaB.y.z#S.8bgaoamaC#x#IaYaw#D#sbj#D.sbl.sbl.N#saY.s#D#MaYawaY#U#x#Ibj#s#Db.#Db.#Dbj.na9#La9aj.7#L#La2#ga2a2#g#gas#g", +"#ga2#ga2#g#g.7bpa2a2#L#L#L#L.7#L#D#D.N#M.N#I#x#xa0a0#x.s.N.N#D#D#D#s#D#D#D#D#D#s#D#s#D#D#s#D#D#M#D#MblawaYaw#x#I#Ubn#Ua0.pa0.pa0aCbn#Ubnaw.Rawbl.n#p#p#pa9a9bl#Dafa9a9#pa9a9a9afajafaja9.7#D.n#D#Dbl#D#s#D.n#D#s#D#D#DaY#saYaw.N#UbnaCaOaO#vaBbkbq#Rbqag#3.U#zaVau#Tazazbkbkbv#3#E#0ab.2#uaOaF#vaFaOaOaFaObyaO.8aCaCaC.C.W.W#I.W.WaCaC.WaC.WaCaCaCaCaoao.8.8#v#vbbbbap#3.U.U.U#4a5#E#1#SaFaOaOaFaC.W#x#IaY.s#D#saY.s#xawawaY.saY.sbl.NaY.s#x#x#Ia9.7.E.7.E.7.n.7a9#L.E#L.7#L#L.7#L#L#L#L#ga2bpbp", +"#g#g#L#gbp#g#Lbp#L#g#L#L#L#Laf.7#Da9#D#DaY.N.N.sbn#Ua0.C#x.N#s#D#D#D#D#D#s#D#D#Da9a9.na9a9a9a9#Dawbl#saYawaY#U#x#U#x#Ubn#Ibna0aCa0a0#UbnbnbnaY.Rbl.n#D#p.n#pa9bla9af.nafa9afa9a9#Laf#La9a9a9bja9a9a9.na9a9.7a9.7a9a9#s#D#DaY.Naw#xaw#xaCamaoaOaB.v.O.Obqadbx.abzbi.U#3#T#3bvagag#3#4#caT.w#vaF.y#v.5#vaOa#ao.5.5aC.CaC#I#I#I#Ibo#I#Iaw#Iawaw#I#U#7.W#IaC.WaCav.W.8#v#v.y.w.G#T#3.Oag.O.w#uaB.ya#aoamaC#x#I#x.N.s#xaw#I#x#Ibfaw.Nbl.s.Naw.NaY.saY.E.7af.Eaf.7#L.E.7aj.7#La9aj#Lafajafaja2#L#ga2#g", +"#ga2#ga2#Lbp#Lbpa2a2#L#L#L#L.7#La9.7a9#D#D#DaY.NaY#xa0#U.CaYbl#D#D#D#D#D#D#D#D#Da9a9#Da9#sa9.na9#D#M#Dbl#saYawaYawaYaYawbn#Ibn#IbnaC#xbn#Ibna0bnblblbl#Dblbla9a9.na9a9a9a9.na9a9af#L#L.na9bja9#D.na9a9a9.n.7.n.7.Ea9.7a9#s#D#D#D#sblaw#IaCaobg.d.O#ia5.G#zadadadabadaVaVbq#3#3bvbqaba8.YbkaBaO#uaFaOaFao.5aoaqaC#I#I#Iaw#I.s.sawbobo.sbo.sbobo.s#M#M.s#7aw#Iaw#I#U#IaCao.8aO#v#u.Q#3biag#3aXazaZ#vaOam.C#x#I#IaY#I#x#I#I#x#I#xaw.Naw#D#s#D#s#Da9#Laj#L#Laj#Laj#L#La9#L.E#L#L.7#Laf#Laf.7#L#L#L#L", +"a2a2#L#g#L#L#L#La2bp#L#L#L#L#L#L#L.7#La9.7#Da9#D#DaYbnama0#xaY#s#D#D#s#D#D#D#D#Daj#Lafajaf#La9a9.na9#M#D#MaY#MaYbl#MawaYaYaYaw#x.RaY.b#xbnbn#Ibnaw#xawbl#D#Ma9#pafa9afa9afa9afa9aj#Laf.7a9.n#Da9ajafa9aja9#L.7#Laf#L.E#L.7.Ea9#sblawaw#xaCaCaO.8aBazbka5.Gbk.U#3biad.a.a.DaVaVaV.M#d.S.Yaz#u.0.y#vaF.8a0.W.C#I.C#Iaw.Naw.s.s.s#s#s#s#s#s#s#s#s#s#s#s#s#M#s#s#s#s.n.n#M.raC#OaO#w#u#E.vbkazbkbkbk.w.yaOamaC.C.C#I#I#I#x#I#x#I#x#Ibf.s.N#s#D.7a9.E#L.E#L.E#L#L#L#L.7aj.7af#L#L#L#Laf.nafaj#L#L#Lbp", +"#gaa#ga2#L#L#L#Lbpa2#L#L#L.7#L.7#Laf#L#L#La9.7#D#saY#xa0ama0aYaY#D#D#D#D#Da9#D#Daf.7aja9#L.n#Laj#p.n#p#Dbl#s#DaY#sbl#D#MawaYaYaY#Mblbl.baYawbnbnaYaYaYaYbl#D#pa9a9a9a9a9a9a9a9a9afafaja9a9bja9#Dafafajaf#L.Eaf.Ea2#Lafaja9a9#s#D#sawaw#IaC.WaoaoaO#uae#1#u#uaz#u.O.Ubi.D#d.D#J.D.abu#6.Y.G.w.yaZ.8aoam.W#xaw#I.saw.saw.s.s#s#sbj.Eb.#sb.b.#sb..E#s#s#s#s.s#s.E#s#s#s#s.r#U#IaCaCbd#1#SaOao.ya5bkaza5.waOamaoaC#x.WaC.W#I#x#I#x#I.Naw#D#D#s.7#L.7#Laj#L#Laj#Laj#Laja9#L.E.7.n.7.Ea9a9a9a9a9.7#Laf", +"a2#g#L#g#L#L.7#La2#g#L#L#L#L#L#L#La2#Laf#Lbja9a9#DaY.C.VaFa0#xaw#D#D#D#D#D#D#D#Dajafaf#Laf#Lafaf#p.nbl.n#Dbl#M#D#Ma9#M#DaYaw#Dawbl#MaY#Mbn.RaYawbn#xaw#x#Mbla9.naf#paja9af.nafa9aja9#La9a9a9#s#Daja9#La9#Laf.7#L#Laj.n#L.7.n.7#s#Daw#x#I.CaC.8.8#v#v#v#vaO.z#1.z.Gbk.O#zbibBbBad.x#5#9.YaPaz.y.0bgaoam#Iaw.N#s#Dawaw.s#s#D#s#s#s.E.7.E.7.E.E.E.Eb..Eb..E.E.E.E.E.s.saw#IaC.WaC#Oam.d#vao.8aFaO.8.G#3.OaB.8amaCaCaC.Wa0#I#I#I#I#x.s.N#s#D.na9.n#Laj#L#Laj#Laj#Laj.7#L.7af#L#Laf#Lafa9a9.na9a9.7.7", +"#L#L#L#L#L#L#L#L#La2bpa2#ga2bp#L#L#L#L#L.7a9.7.7.NaY#xbnao.VaF.V#xaY#Ma9.na9a9#D#La9aja9aja9aj.7.na9.na9.na9.na9#p#s#p#D.na9a9.n#p.nbla9#sbl#saYaYaYaYaYaYaYaYaY#pa9#p#pa9#pa9.nafafaja9#D#D.N.N.nafajafaja9ajafajaf.7.na9#D.n#D#Dawaw#I.W#IaCaCaobdaO#v#v.y.y.y#u.QaX.9#TbC#r#r.aatatbB.2aX.GanaC.W#Ibobf.sbf#I#s#s#s#sb.b.bj#s.7.E.E.E.7.Ea9.Eaj#Lajajajajajaj.s#s#I.s.s#I.s.WaCaCaCaCa0.W.W.W#v#vbtbkbk#uaB.0aObgaoaoamaC.C.W.n.na9.E.7.E.7#Lbjb..Ea9aj#L#La2a2.jbpaj#L.E.7bjajaf#La9#Laf#Laf", +"#L#L#L#L#L#L#L#L#L#ga2a2bpa2a2a2#L#L#L#L#L.7#L.7#DaY#Ibnb#b#aOb##xaY#D#Da9.n.7#Dafajaf#Laf#Lafafa9aja9a9.na9.na9.na9.na9#p.na9a9afa9.n#p#D#M#DblaYawaYaw#xaw#xaY#p.na9a9a9a9#p#pafaf#pa9#D#s.N#sa9a9#La9#Laf#Laf.7aja9.n.7.n#Da9.saYaw#x#I#x.W.WaCao.8.8aObc#v.y#v#ubkbvbvaXbvbC.k.Dai.UaXbv.Ga7aOaoaNboaWbo.s.Nb.#sb.#D#s#sbjb.b.a9b.a9.E.7.Ebjajaja2aj#Laj.naj#D#s.sbo#I.sbo.saCaCaC#I#I#I.W#xavaoaO.y.z#1bkbkaBaBaO.5aoaoav.Wa9#s#L.E#L#L.7.E.7#D.7.E#L#L#Laja2bpa2#L#L#L#L.7af.7afajafaj#L#L", +"a2#La2#ga2#ga2#ga2#L#ga2a2#g#L#g#L#L#L.7af.7a9.7#Daw#x#xam#SaZa#aC#xaYa9a9a9#Da9aja9#L.n#L.n#Lajafa9.naf.na9a9.na9a9.na9.na9a9.n.na9a9.na9#D#D#saY#x.R#xaYbn#x#xblblbl#Mblbl#Dbl.n#p.nbl#D#D.N.N.naf.nafaja9#L.n#L#La9.7.n#D#s#saYaw#I#I#I#U#Ia0.Wao.8aObc.8.y.y#u#ubk#3bCapbkag.kbqaX.Q.Qbka5#u#v#vamava1bob..E.na9b..E#s.7.E.E.7.E.7.E.7.E.7.naj#L.jaja2ajajaj.n#D.s#I.s#I.saY#I#U#x#I#x#x#Ibo#x#I.CaoaO#v.y#1bkbk#u#vbcam.C#I#sa9.n.7.E#L.E.7#s#s.7.n#Lajbpa2bp.jbp.j#Laj#L#Lajafajaf#La2afa2", +"#ga2#ga2a2a2#g#La2#ga2#g#L#ga2a2#L#L#L#L.7.7#La9#D#D#xaCaF.0aZana0#xaYbla9.na9#D#Laf#Laf#Laf#La9af#L.na9af.nafa9ajaf#Laf#Lajaf#Lafajaf#L#D.n#D#DawaYaY#IaY#I#x#IaYawaYaYaYawaYawbl#Mbl#D#sbl.s#Da9.na9.7afajaf#Laf.Ea9.Ea9#sa9#s.N#I#x#I#x#Ia0#I.Wao.8.8aObc.ybba5bkaXaX#3bvag#n.c.#bt#baLbcbdaBaB.y#vam.Wbfb..7#s#s#s.7.E.E.E.7#s.E.E.7.n.7.E.7aj#g.ja2.jaja2#L.E.n#s.s.s#I.s.s#x#I#I#x.s#I.Nbo#x#I#I.CaoaoamaObkaz.Q.z#v.8.Wbf.N#s.N#s#D.sa9.E#D#D.E.7#L#Laj#Laj#g#L#g#L#gbp#L#L#L#L#L#La2bpa2", +"a2bpa2bpa2bpa2a2#g#La2bpa2a2bpa2#L#L#La9#L.7a9.E.7aYaY.Cam#vaZaZaobn#xbla9a9a9#s#L.n#L.n#L.n#Lajaf#Laf.na9a9ajaf#L#Laj#Laf#L#Laj#L#L#Laj.7a9.7a9#D#Dbl.NaYaY#xaY#xaY#x#U#xbn#IbnblaY#MaY.NaY#s#D.na9aja9af.7af.E#Laja9a9b.#D#s#Daw#x#I#I#x#I.Wbn.Wa0aoao.5.8.y.QazaX#3.O#3aVai#n#8aLax#O.W.Wao.8#1aB.y.5.Ca1bo.sbo#D#sb.#D.E.7aj.7.E#D.E.7.E.7.7.ja2.j#gbp.jaj.j.7#s#s#s#s.N.s#Iawaw#D.saw.N.s.s#D.s#x.W.WaoaC.8.0.y#v#v#v.d.8ao#I#Ibf.s#Db.bj.7#Dbj#L#Laj#L#L#La2aj#gaj#ga2asasa2a2a2a2#La2a2#g", +"#ga2a2a2#ga2a2#ga2a2#ga2a2#L#ga2#L#L#L#La9.7.7a9.7.N.s#xamaF#va#.5am#x.N#D.na9.7af#Laf#Laf#Lafa9#L.n#La9.naf#Laf#Lajaf#L#Laj#Lafa2ajaf#Laf.7.7.na9.n#D.nbl#D#DawaYawaY#U#x#U#x#UaYaw.Nblaw#D#D#sa9.na9.nafajaf#Lafaj.7.na9#sa9#saY#I#I#xaC#xao.CaCavaoao#v.yaI.Qae.O#zaV.Dah#Xag#b#O.r#7#7#7.W#QaObdaB.y#vaoaqbo#Ibobf.N.Ebj.E.7.E.E.7.E.7.E.7.Ebp.j#g#g.ja2#L.j.E.7#s.nb.#s#D.saw.Naw.s#D.s#s.N.s.sbo#I.C.Wam.8bgbgamao.C.8axbcaxaoaobo.N#s#Db.#s.7.E#L#L#L#Laj#L#g#La2#gas.jasbp.j#L#g.j#g#L#g", +"a2asa2asa2aa#ga2#g#L#g#Lbpa2#L#L#L#L#L.7.7.n.7.7a9.saYaY.Wa0amam.5am#IaYbla9a9a9aja9aja9aja9ajaf#Laf#L.na9#L.n#Lajaf#L.jafa2a2.ja2a2#Laj#Laja9#L#Laf#Lafa9.n#D#DaY#xaYaYaYawaY#U#xbnawaY.Naw#D#sa9.na9af.na9.na9.Ea9.na9.E#D#s#D#I#x#I#x.WaCaoaoao.8.8.8.y#1#1.Q#T#3bq.D#m#haibkavao#7aE.sbo.W.W.s.Wbd.GazaBbc.8##avbobfbobjbjb..7.7.E.7.E.7.E.7#g.j#g.j#g.jaja2.Eaj.n#D.nb.#sb.#D#s#s#D#s#D#s#s.s.N.N#I#x.Wam.WaC#x#I#xaCa0av.8.8.8ao.W#Ibo#s#s#Dbj.7#Lajaj#L#Laj#gaj#g#gasasaU#g#g#ga2bp#ga2#g", +"a2a2#ga2a2#ga2a2a2#ga2aja2bp.ja2#L.7#L#L.7a9.7a9bj.N.N.N#xa0a0aCaF.5bnaY#D.na9.7af#Laf#Laf#Laf#L.n#L.na9.naf#Laf#Laja2#La2aja2#La2aja2#Laf#L.E#L#Lajafaj#La9#L.nblblbl#MblaYaYawbn#U#x#xaw.N.s#D.nafa9.na9a9a9.na9aj.7#sa9#sa9#s#x#I#x.Wbnavamaoao.8aObd.ybt#ubbag.O#3bA.iaJ#3bbav.h#7b.b.boa1#IaE#I#QaB#uaPaz.Gbcbcavavbobfb.bj.E.7.E.7.7.E.7#L.j#g#g#gaj#g.jajaf.E.n#s#s#D.E#D#s#s#D.s#Db.aW#sbf.Nbo.C.Wav.Cam#Mblaw#x#Iaoaqaoaqavavaoav.s.Nb.#D#s.7.E#L#Laj#g#Lbpa2asas.jaUaU#ga2bpa2#g.jbpa2", +"#ga2#g#g#ga2#g#ga2#g#g#ga2#g#Lbpa2#L#L#L#L#La9.Ea9a9#saY#I.C.Wam#x#U#x#IaY.N#D#Daj#Laj.7.7a9.7.7a9#Laf#L#L#L.n#Lafafafajafaf#Laj#L#L#Laj#Laf#Laf.jaf#Laf#Laja9#Da9.na9#Da9.n#D#DawaYawawaYaY#MaY.7.n.7.n.7.Ea9.7ajaf.Ea9#s#D#D#D#Ibn#UaCaoao.8#vao.d.d.y.z.y#1bbagaX#3aAbx.caLav#7#I.s#7b.#sb.b..sbo#Iav#QaOaKbtau.GaZaFaq#Ibf.s.7.n#L.E#L.7aja3.Ebp.jbpbpajbpa3#s#D#s#s#s#s#D#sa9.n#D#s#D#s#D#s#x#Iaw#I.N#s#s#D#saY#saYaY#I#I#I#I#U.W#IaC.8ao.C#sa9#L.7.n#L#L#L.ja2.j#gasasas.jas#g.jas#gas#gas", +"a2#ga2#ga2#g#ga2#ga2a2bp#ga2bp#Lbpa2#L#Laja9.7#La9#D#D.N#x#x.C.CbnbnbnaYaY#D#D#D#L#La9aja9.7.E#D.nafajaf.Eafafaj#Lajaf#Lafajafaf#Lafajaf#L#Laj#L#La2afaj#La9a9.na9bja9.na9#D.na9awblaYawaYawaYawa9.na9.Ea9a9.na9ajaj#L.n#D#s#s.N#U#Ibn.WamaO.8#v#OaObdbd.yaLbb.Q#8.v#3aV.abCbd.8#7#7.sb..sb..sbj#s.s.s#I.Cav.8.8#u#uaB.ybcao.Wbf#D#s#D.7.E.7.Ea3ajbpajbpajbp#L.E#s#D#s#D#s#D#s#D.n.7#s#D#s#D.s.N#x#I.NaY.s.N#s#D#s#D#M.N.s#I#x#I#x#I#x#IaCbd.8ao#s#D#s#L.7aj#L#L.j#gas#g#g.j#gas.jas#gas#g.j#g#g", +"#g#La2#ga2#ga2bpa2bpa2#L#L#L#g#La2aj#L#L.7.7a9.7.n#D#saY.s.N#x#I#x#xawaY#Ibl.N.Naf.E#La9.7#sa9#D.n#Laf#Laf#La9afaf#Lajaf#Lafaj#Laj#L#L#Lajaf#Laf.j#Laf#Laf#La9a9a9a9.n#Da9.na9#D#D#s.N#s#D#s.N#s#D.Ea9a9.Ea9.7.na9.na9#s#D.s.N#x#Ibnbn.Waobg.8.8.d.d#vbd#v.z#1bb.QaX#3aA.kaXbcao#7.s.sb.b.b.b.#s#s#D.s.N.s#x.CavaFam#v.y#u.ybyby#Ibf.s.Nb..7.E#L.7.E#L.7.E.7.E.7#s#s#D#s#D#s#D#s#D#s#D#s#D.s.N.s#x#IaYbo.s#D#saW.n.7#s#D#s.N.s.s#I#I#I.CaCax#vaO.saw#s#D.n#Lafaja2a2.j#gas#g#g#g#g#g.j#g#gas#g.j", +"#ga2#ga2#g#L#ga2#ga2#g#L#g#L#L#L#g#L#L#L#L.n#L.7#D#D#D#DaYaY.N.NawaY#xaY#x.NaY#Ma9.7a9.Ea9#D#Da9a9af.7af.Eafaj#Lajafafafaj#Lafaf#Lafaj#Laf#Laj#La2af.j#Laf#La9.7a9.7a9.7a9#Da9a9#s#Dbl.saY#saY#s#D#s#D.na9.Ea9.7a9.n#D#s.N.s#xbobna0aCa0am.8aOaO.8#vbd#vbd.yaL#1.Qbk.Obi#R#8#v.rbo.saE#sb.#sbjb..7.E.n.E#s.s#I#xbo.Wavbc.y#u.yanaoaq.Cbo.N#D.E.7.E.7#L.E.7.E.7#s#D#s#D#s#D#s#D#D#s#s#s.N#s.Naw.N#x#xaw.N#s#D#sbj.n.7.E#DaE#saYboaCaCaoaoaoao#Oao#Iawaw#s#D.n.7a9aj#g#L#g.j#ga2#g.jas#gas.j#gasas", +"a2bp.jbpa2#ga2bpa2bpa2#L#Lbp#L#L#La2#L.7#L.7a9.7#s#D#D#D#D#s.NaYaYaY.s#x.s#xaYaY#D#s#D#D#D#s#D#sa9ajaf#Laf#La9af#Lajaf#Lafajafaj#L#Lafaj#L#L#L#L#L.jafa2#Laja9a9.na9a9.na9.na9#s#D#D#s#D#s#D#s#D#sa9#sa9#Da9.n#D#s#D#D.saY#xaY#IamaCamaobgaObcbdaOax#vbd#v#v.yaL#1.Qa5#3#R.vbc.W#7#s.sb.b.bjb.bj.E.7.Ea9bj#s#Daw#s.Nbo.C.8#van#ubc#v.8a0bf.s#D#sbj.7bj.7#D.7#sbjawaY#saY#s#D#s#Daw#DaY.saY.NaY.saY.saY.N.s#D#s#D.Ea9#s#s.N.sboawao.8.d.daoaC#I#x.sawbo#M#D#Daj.7#L#L.jbpa2bpa2#g#g#g.j#gas#gas#g", +"#ga2#ga2#g#L#g.ja2#g.jbpa2aj#Lbpaj#L#Laj#Laf.7af#D#D#s#D#D#D#D#D.N.saYaY#xaY#x#IaY.N#D#D#s#D#Da9#L.na9.na9ajafajaf#Lafajaf#Laf#Lafaj#L#Lajaf#L#La2a2a2#Laf#La9a9.7a9.7#Da9bja9a9.7#sa9#D#s#D#s#D#s#D#D#s#D#s#D#sa9#s.NawaY#I.C.WaF.8b#ao.8bg#vbd.8#vbd#vbd#v.d#v#1#1.wagbi#8ao#O.saE.sb.#sb.#s.Eaf.Ea9.E.n#D#s#Db.#s.N#Iaqambca#aB.y#vaO#I.Cbf#I#s#Db.#Db.#Dbj#saYawaw#D.saY#M.N#M.N#saY.s#x.s#x.s#x.s.N#s#Db.#D#Db..N.s.N#Ibo.W.CaoaxaoaxaCaC#I#x#I#I#Iaw#s#D.n#Laj#L#Lbp#L#L#L.j#ga2#g.ja2.j#g", +"#L#g#L#g.j#ga2bp#g#L#g#L#Lbp#L#L#La2.7#L.7.Ea9.EaY#D#D#s#D#s#D#saYbl.NawaY#UbnbnawaYawbl#D#p.na9afa9.n#La9#La9#Lajaf#Lafajafajaf#L#Laf#L#L#La2.ja2#La2#L#Laf.7a9a9a9a9.na9.na9a9.7a9#s#D.n#D#s#D#s.N#sbj#D#D#s#DblaYaw#x#I.CaCamaOaF.8.8aO#vbdaO#v.d#vaO.8aObd#v.zaBa5.O#r.Q#O.Wbo.s.sb.aEbjb.bjb.a9.E.7.n#s#D#s#D#D.s.N#Ibf.W.C#v#va#aOaF.8aoam.s#D#s#D#s#D#s.saYawaYaYawblaYaw#DaYaYaYbl.N#x#xaY.saY.N#s.N#saWawaY#I#x#I#x#IaC.C.WamaCaC.W#I#I#I#x#I#I#I.s#sa9.E#L.E#Laja2bpa2a2.j#ga2#ga2#ga2", +"aj#g.ja2#g#L#ga2#ga2#ga2bpa2#L#L#Lajaf.Eaf.7a9.7aY#s#D#D#D#Da9a9.saY.saYbn#x#xa0#I#x.NaY#M#Da9.na9aja9a9.nafajafafafajaf#Laf#Lafaj#Lajafaja2#L#La2.3#L.jaf#L.na9.7.n.7a9bja9#D.n.7#sa9.n#D#s#D#s#D#s#D#D#s#D#s#DawaY#Ibn#Ia0aoa0#v#vaOaFaObd#vax.ybc.d.8.8.8.8bd.y#1a5aX.v#1ao.W#7.saE.s#sb.#Db.#s.7.E#D#s#D#sa9#s#D#s#D#s#D.s.saFaFamaO.y#v#v.5#I#Iawbf.s#x.s#xawaYawaYblaw#DblaY#Mbl#saYaw#x#I#x.Naw.N#sbj#s#D#I.WaC.WaC.Wamao.8aoao.W#IaY.NaY.N.N.s#D.saw#s#D.n.Ea9aj#Laj#Laj#ga2#gas.j#g.j#g", +"a2#ga2#ga2aj#L#L.ja2a2aj#L.E#Laj#pa9a9#pa9.n#pa9#M#Dbl#Dbl#MaYaYaYawaYaYawaY#UaYa0.p.VbnaYawa9#La9a9ajaf#L#Lafaj#L#L#Laj#Laj#L#Laf#L#L#L#L#La2#La2a2#La2#La2#L#L#L#L#L.Ea9.7#s#D#La9.E#D.na9.na9.n#s#D#saw.Naw#xaw#I#x#I#U.CaCaoao.VaoaoaO.8aO.8#Oaoaxao.haC#Oao.daO#uagbibk#vav.W#I#s.E.Eaj.Ea3aj.n#L.E.7.nb.#s.N.saY.N#I.N#IaY#I#I.C.8#v.yaBaPaBa#aFa#.5aqaqaN#xbfbf.N.NaY.Naw.NaYaY.Naw.NbfaYawaYaYaw#x#I#xa1#U#I#U#I#x#I.N.s#D#s#D#Dbj#sbj.E.7.Ea9.7.7#L.7.7.7.7.E.7#L.7#Lbpa2.jas#g#gas#gas", +"a2.ja2#L.j#L#La2a2#g#L#Laf#L.7#La9#pa9a9#pa9#pa9bl#Dbl#sbl.NblawblaYblaY#xaYaY#Ubna0b##UbnaY.n.7#s#Da9.na9.n#Laf#Lajaf#Laf#Lafaj#Lajafaj#L#L#L.j#L.j#La2af#La9a9#L.7#L#La9.7a9#Da9.Ea9.n.7.n.7#s.na9#M#Daw#x.s#xawbn#I#U.CaCaCaCaobgaCaoaOaOax#vao.hao.W.W.Wav.haoax.y#E#zagapbc.Wbo.s#s.E.Ea3.E.7aja9.Ea9b.a9.EaY.Naw.Naw.Naw.N#I#x#Ia0amaF.yaBa7#u.ya#aoaqavaq#x.C#x#I.Naw.NaYaw#x#I#I#x.s#xboaYaY#I#x#I#x#IbfblaYbl.NaY#D.N.N#Dbj#sbj.Ebj.7bja9#L.E#Laj#Laj#L.E#L#L.7aj#La3ajas#g.jas.j#g.j#g", +"a2#gas.ja2#L#Laja2#Laj#L#L#La9.7.na9a9#Da9#Da9a9#s#D#D#s#D#s#D#Dbl#sbl#D#M#DaYaYaY#Ubga0bnaY#s#D#s#Da9a9.na9ajafaj#Laj#Laj#L#Laf#L#L#Laf#L.j#L#La2a2#La2#Lafa9a9ajafaja9a9#s#D#s#Da9.n#D#sbl#s#D#M#s#D#Maw.N#I#I#I#I#x#I#IaC.CaC.paCaCaoao#O.8ao.h.W.W.W.W.W.W.W#I#Q#v.w.Obiagbk.W.r#I#sb..E.E.Eaja9.E.n.7.n#D.saY.saY.Naw.NaY.Naw.N.s#xaCaq.8aF#Sa7a7#u.yaFam.5ao.Ca0.C#x#x#x#Ibn.R#x#x#xaY#xaY#Ibn#UaC.W#xbf.sbl#s#D#sa9.Ea9.7.E.7.7#L#L#Laj#Laj#L#L#L#L#L#L#Lbpajbp#Lbpbp#Lbp#g#gas#g#gas#gas", +"a2.ja2#La2aja2#L#L#Laf#L.Ea9aja9a9a9a9.na9a9.na9#D.n#Da9#Da9a9.na9a9#sa9#D#D#D#saY#xaCa0#U#x.N#s#D#D.na9a9.n#La9#L.n#Laf#Laf#Lajafaj#Laj#Laf#L#Lafajafafaj#L.Ea9#La9a9.n#D#D#D#D#D#s.Nbl#D#s.N#M#D#M#D.saYawaw#IaY#I#U#I#x#IaC.WaC.CaC#IaCavao.W.Wav.W.Wbo#I.W.Wbo.W#Q.y.w.Uau#3bd.8bo.s#s#sbjb.a9.E.n.7b.#sbj#s.Naw.Naw.NaY.saY#s#s#D#I#x#Ia0aoaFa#aBaBaBa##va#aoa0aoa0aoa0aC.Ca0#xaCbn#I#xaw#xa0aCa0#x.Caw.N.Na9a9a9a9.7a9.Ebj#L#Laj#L.E#L.7#L#L#Laj#L#Laj#Lajbp#L#Lbpajbpaj#Las.j#g.jas#g.j#g", +"a2a2a2.ja2#Laf#Lajaf#Laja9a9.7a9a9.na9a9a9a9a9a9.7a9.7.n.7.7a9.7.7#L.7a9#s#D#D#D#D#Mbnbn#x#xaY.N.s#D#D#sa9a9#Laj#L#L#Laj#Laj#L#L#Laf#Lafaj#Laj#La2a2afajafafa9a9a9.na9#Da9#s#D#D#MaYblawaYawaYbl.s.Naw#D.saYawawawaw.s#I#I.C.W.W#U#I#I#x.WaC.W.W.W#I#Ibo#xbo#I#Ibo.Wavbc.y#u.G#3.Qbc.Wbfaw.s#sbj.n.7.n.7#s#D.s#D.saY.NaY.N#M.NaYb.#D#s#Daw#Ia0#UaFaOamam.5.8.yaB.8aO.5ao.5amam.8amaCa0a0#x.C#I#Iaoam#I#xaY#D.N#Da9.7.7.7a9.7.7.7aj#L#L#L#L#Lajbp#Lbp#L#Laj#L#L#L#Lajbpaj#L#Lbp#L.j#gas#gas#gas#g", +"a2a2.j#La2#L#L#Laf#Lafa9a9a9#D#D.7#Laf#L#Lajafaj.7aj#L#L#L#Laj.7aj#Laj#Lbj.7.7b.a9#D#D#xaCa0.W.NaYaw#D#Da9.na9af#Lafajaf#Laf#Lafaj#Laj#L#L#Laf#L.3ajaf#La9aj.7a9a9a9a9a9bl#DblaY#DaY.NawaYblawaY.NaYaw.sbl#s#Maw.N.saw#x#I#I#I.C#I#x#I#I.W#Ibo#Ibo.Wbf#Ibo#Ibfbo#Ibo.W.8#Qbc.ybkbv.Q.8#I.s.s#s#sb..nbj#s.N#sbj#saY.Naw.saY.NaY.s#D#s.Nbo.N#I#I#xaCamao.Ca0b#aobyaOaF#v#vaB.y.ya#aOaF.5aCa0aC.CaCbn#xaY#D#D#D.7#D#Laj#L#Laj#L.7#L#Laj#L#Lajbp#Laj#L#gaja2bpa2bp#g.jas#gas#gas.j#gas#g#g#g.j#g.j#g", +"a2.ja2#L.j#Lajafajafa9a9a9#Da9.n#L#L.7#L#L#L.7#Laf#L#L#Laf#Laf#L#L#L#Laj#Laj.7.7#L.n#DaY#x.W.C.C.s.NaY#s#D#Da9#s#Laj#L#Laj#Laj#Laf#Laf#Lajafaj#Laja2afajafafa9.na9#pa9#M#Dbl#DaYaYaYawaY#xaYaYaYaw.Naw#D#sbl#s#M#s#saY.s.s#x#I#I#Iawawawbo.N.s#I.s.s.sbo.N.s.s#I#I#x#Ia1.Wao#vaLbkap.yaobo.N.N.s.7#s#sbj#s#D.sbjaY.saY.Nbl.saY.N.s.N.s.N.N#I#x.sbfbf.C.WaCaqamaq.5aoa##v.0#u#u#ua##vaOaFama0#x#xaYaY#D#Da9.7#L.Eaf#Lafaj#Lbpbp#Lbpa2bp.jbpa2#L#ga2aj#g#L.jbp.j#L#g#g.j#g.j#gas#g.j#g.jas#gas#gas", +"a2#L.ja2a2#L#L#Lafafa9.na9a9a9#D.7#L#Laj.7#L#L#L#L#Laj#L#Laj#Lajbpaj#Lbp#L.7.7bj#L.7#DaY#xa0.C.WaYaw.N#D#D#D#sa9aj#L.Eafajaf#Laf#Laj#Laj#L#L#L#L.3#L#Laf.7#La9a9a9a9#p#Dblbl.NblawaYaYaYaYawaYawaY.NaY.sbl#sa9.n#D#D#saw.s#I#I#xaw#x.saY.s.s.N.s.N.s.Naw#D.s.N.sbn#I#Iboa1#b.d.8#Tap.Qbcbo#D#sbo.nb.#D#s.Nb.#D.s.Naw.Naw.NaY.Naw.Nbf.s.N.sbfaY.N.saY.sbf.C.Waqavbga#a#a#.yaZ.0anaBbm#vaOaobn#I#xblaY#Ma9a9af#La2#L#L#Lbp#Lbpaj#L#g.ja2bpa2aj#gaja2#g#L#g#L#g#L#g.j#gas#gas#g.j#gas#gas.j#g#g.j#g", +"as.j#g#La2aj#Laja9ajaf#L#L.n#Laf#Laj#L#L#La2#ga2#ga2a2a2#ga2a2#g#L#Lbpaj#Laj#Laj#D.s#DblaY.VaObm.C#IaYaw#D#s#D#Dbl#Ma9a9af.7aj#Lajaf#Laf#Lajafaj#Lajafaj#Laj#L#Lajafa9a9.7#sa9#DaYaYaYaYaY#xaY#x.N#s#D#s#D#s#Db..n#sbj.n#D.sbfbo.s.s.N.s.N.s.s.N#s#D#s#D.s.N#Ibf.s#Ibo#I.Wav.8bcbta5.U#3aB.5.W.N#x#I#x.saY.s.N.N.s#D#Ma9b..E.7.nbfaw.NaY#xaY#Ibf#D#s.N.N#x.Waqavb#ambga#aO.0.y.yaoaCa0#x#xaY.N#D.Ebj.7.7.7.7.7.7#ga2#ga2#ga2#g#ga2#ga2aj#g#g#L#g#g#L.jbp#Lajbp#L#g.jas.jas#gas.j#ga2#ga2#g.jas#g", +".ja2#Laj#L#L.7.7af#Lafajaf#Laf#Lbpa2#La2#L#L#Lbp.ja2#g#ga2#ga2#g#L#L#L#L#L#L#L#L.7#D.NaYaYaobmaZamaCbn#x.NaY.N.N#Mbla9.nafajaf.7a9#Laj#Lajaf#L#Laf#L#L#Laf#Lafaja9af.7.n#Da9bja9#xawaYaYawaYaYaw#Dbl#s#D#D#s.7.n.7b..nbj#sbj.s.saw.s#D#saw#D.s#D#s#s.s.N.sbfawbf#Ibf.sbo#Iav.8bc#uaz#3bi.G#vaq.W#I#x#I#x#x#x.s#DaY#s#D#s#D#s#Db.aY.saY.N#I#I#x#x#I#x#I.C.WaqamamaFaObm#vaBaZ#va#bna0#xaYaw#D#D#Dbj.7.7.7.7.7.7.7#g.ja2#g.j#ga2bpa2a2a2#g#La2#L#g.j#g#gajbpbp#Lbp.j#gas#g#g.j#gas#g.j#g.ja2a2#ga2", +"#L#L#L#L#L.na9.n#Lafajaf#L#L.ja2#L#Lbp#Laj#g#L#L#gbp.j#L#gaj#ga2aj#g#Lbpajbp#Laj.7#D#sblaYb#aOa7b#amaoa0aC#x.baYbl#Mbla9#D#L.na9aj#Laf#L#Laj#Laj#Lajafaj#L#Laj#Lafajaf.7a9a9#Da9#Dblblblblblblbl#D#s#D#D.n.7.E.7.E.7.7.E#s#s#D.s.N.s#Db.#D#s#D#sbj#s#D#s.N.sbfboaYbo#Ibf.Wavbcbc.wa5au.M#3.w#v.5#Ibn#I#IaY.s.N.N#saY#s#D.s#D.s.NawaYawaY#I.C#Ibn.Wa0amamao.5.8.5#uanaB.ya#aoama0awaYaY.NaY#D#D#D#L#L#Lbp#L#L#L#Laj#gbpa2bpa2.j#g.j#L.j#L.jbp#g#Las#ga2#ga2aj#L#L#g.j#g.j#ga2#g.ja2#ga2#g#Laj#Laj", +"#D.na9#sa9#Da9#Daj#L#L#Lajaf#L#L#g.ja2#g#g#g.j#ga2a2#g#ga2#ga2bp#ga2#ga2#ga2#g#g#Lb.a9aY#UambmaZaO.t#SaFb#a0a0#UblaY#s#D.na9.7.n.7aj#Lajaf#Laf#Laf#L#Lafaj#Laf#L#Laf.7af.7.n.7#D#M#D#D#D#D#D#D#s#D#Da9#sa9.Ea9aj.7.E.E.7.7b.#sbj.s#s#D#s.N#saW#s.N#s.Nb..N.Nbo.N#xbo#x#I.Wav.8.yaz#T#3#z#z.O#uaF.CaC.C#x#I.Naw#D.sbl.saY.s.Nbo#Ibn#U#x#Ua0#Ua0aCb#am.8a##va#aBan#u#u.0aFama0#xaY.NaY#D#s#D.7.7.7#Lbpaj#Lbpajbp#Lbp#L#L#L#Lbp#L#L#L#L#Lbp#L#Lajbpas.ja2.j#ga2bp#Laja2#L#La2aja2#L#L#L#Laj#L#Laj#L", +"a9a9a9a9a9.na9a9#Lafajaf#L#La2a2aj#g#ga2#L#g#L#g.j#g#g.j#g#g.j#ga2#gaj#ga2#ga2#g#L#L#L#s#xb#aOa#.t#SaZaBbmbga0bnawaYblbl#Da9.n.7#Laf#L#Laj#Laj#L#Lajaf#L#L#Laj#Lajafajaf#La9a9a9#D#D.na9a9.na9a9a9.na9.7a9.E#L.Eafaj.7.E.7.nbj#s#Db.#Dbj#sbj#sbj#sbj#D#s.N.s.N#x.W#xbo#xavambcbb.O.O#a#a.Oba#3aBamaoa0.W#x.s.N#saY#saY#I#x#I#x#IaCa0aoamaob#aoamaF#v#vaB.0aB.0#ua#a#.5ao#xaY.Nbl#sbl#Da9.7.n.7.7aj#L#L#L#L#La2#Laj#Laj#L#g#L#L#Laj#Laj#L#L#Lbp#L.j#g#L#L#Laj.7#L#Laj#Laj#Laj#Laj.7aja9#La9aja9a9", +"#Da9#s#L.n#L#L#Laj#L#L#g#L.jbpa2#ga2#g.j#gas#gas#g#g#g#g.j#g#gas.j#g#g#g#g.jas#g#gaj#L#D#xaOaZan.FbmaBaZbmaFb##UaYblawaY#s#Da9.7.n#Laj#Laf#Lafajaf#L#Lajafajaf#L.3#Laf#La9aj.7a9#Ma9a9#Da9#Da9#Da9#D#La9aj.7aj#L.E#Laj.7.Ebj.nb.#s#D#sbj#s.N#s#D.s#D#sbj.N.sbf.s.C.Wa0.Wam.8.ybb#a.O.GaPaz.M#C.faOaoaq.W#xaw#D.s#D#I.N#I#xaCamaoaFaO#vaO#S.y#S#v#v#S#va#aOaFaOaFamaoa0#xaY#D#sa9#D#Da9.7.7#L#L#La2#L#g#L#g#Lajbp#L#Lbp#Laj#Laj#L#Laf#L#Laj#Lajbp#L#Laj#L.n.7a9#sa9.n.7.nbj.nbj.na9a9a9.na9#Da9a9", +".7#L#L#L#L#Laja2#L.jbp.j#L#g#L.j#g#g#gasas.jas#g.jas.jasasas.jas#gas.jasas#gas#gasbp#L.7awam.yan.Fbm.TaZaBaFam.R#IaYawbl.N#s#D#D#Lajaf#Laj#L#L#L#Lajaf#L#L#L#Laj#L.jafajafafafaja9#Da9a9a9a9a9.n#Lajaf.E#L#Laj.7.j#Laj#L.E.7.E#D#saW#D#sbj#sbj#Db.#DaE#D.sbf#IbfaCaq.Waoao#v.y.wbkaz.w.waz#3biau#uaOamao#xboaw.N.s#x#I#xaCambgbg#uaBa7#ua7an#ubh#vaFaOama0aCa0a0a0bn#UaY#sa9af#L#sa9.7a9aj#Lbpaj#g#L.j#gaj#g#L#Laj#Laj#L#L#Lbp#L.E#L.E#L#L#L.7#L.n.7a9#D#D.N.s.Na9#s#Da9#sa9#D.n#D#D#s#D#D#s#D.7", +"aj.7aj#gaj#gas.ja2bpa2#L#gaja2bpas.jas#gas#g.jasasasasas.jasaU.j#gas#gas#gas#gas#g.ja2#LaYa0.0aZ.Fa#aBaZa#aFbn#UaYaY.N#MaY#D#D#Daj#L#Laf#Lafajafajaf#L#Lajafaj#L.3#La2af#L.Eaf.7a9a9.n.7a9.n.7a9af#Laf#Lafaj#L#L.j#g.E#L.E.7#s.Ebj#s#sbj#D.s#Db..N#s#D.s.sbf.s#Iaqa0ao.C.8#vbbaPbk#u.w.Q.w.wau#N.Q.yavam#I#x.sawaY#I#IaCaoaoaO#vaz.Gaz.GazaS#uanaoaCa0.Wa0.CaC.CawaY#Da9a9#La9aja9a9.7aj#L#L#Lbpaja2bpa2bpa2#Laj#L#L#L#L#Laj#Laj#La9#L.7.7.E.7.E#D#D.N.s.N.s.N#x.7.7.n.7a9#sa9#D#s#D#D#D#D.7#D#D", +"#g#g.j#g#g#g.j#g#g.j#g.j#g#g#g.j#g#gas#gas#gas#g.jasasasas#gasasas#gas.jas#g.jas#g#g#ga2a9.C#SbhaFbgamam.8amaCa0aYaYaY#Da9.E#Laja9#Laj#Laj#L#L#L#L#Lajaf#L#Laf#Laja2ajaf#Lafa9a9.na9a9a9a9.7a9a9af.n#Lajaf.7#L.E#Lbpaj#g.n.7#s.N.s#DaY.saY.Naw#x.saYbo#x#x#I#x#I.8amaob##v#u.G.2bkaz#ubbaP.w.G.2.u.Oa#aoav#Ibfboawbo#xaoamaBan.Gba#a#ua#ao.5#Qaq.W#x#x#x#I#x#xaY#xawaYbl#D#M#Da9a9a9a9a9.7a9a9a9#L#Lajaf#Lajaf#La9.n#D#saY.NaYaY.N#sbl#D#MaY#M#D#D.n#Da9#D#D#D.n#Laj#L#L.E#Laj#L.7aj#Laj#Laj#Laj", +"#g.j#gas.j#gas.j#ga2a2#ga2.jas#gas.j#g.jas#g.jas#g#g.j#gas#gas#g.jas#gas#gasas#g#g#La2.j.7bnaF#ub#b#amb#ama0bn.CaY#M.N#sa9.na9#Lajaf#Laf#Lafajafaj#Laf#Laj#Laj#La2afafaj#L#La9.7a9.7a9.7a9a9a9.7afafafa9#L.n#L.7ajaja2.j.7.E#D.N#Daw.Naw.N#I#x#x#I#x#I#x#IaC.CaC.5bg.8aO.0.w#T.2.G#u.ybbbb#u.GaX.e#z#SaoaC.s.W.W#I#Iaoam#v#u.G#TarazbmaoamavaN.C#x#xawaY#x#IaY.saY#Daw#D#Da9a9a9#sa9.na9a9.na9.na9a9a9#sa9#Da9#sa9a9a9#D#Mbl.NawblblaY#MaYaYaYaw#D#D#s#D#D.n#D#D.n#La9ajaf#Laf#Laj#L#L#L#L#L#L#L", +"#g#g#g#gas#g#g#ga2.j#g.j#gas#g.j#g#gasas#g.jas#g.jas#gas.jas#gasas#gas#gas#g#gasa2aj#g#La9aYa0bmbgambgama0.C#x#xawaY.N#Da9.7#L#Laf#Laj#Laj#Laf#L#Lafaj#Laf#Laf#Laja2#Lafaf#L.na9.na9a9a9.Ea9a9.7ajafajaf#L.7#L.7bp.Ebp.Eaj.7#s.Naw.Naw.Naw#x#I.N#I#x#I.C.Wa0aoamao.5ao#vaBazal#3aB#vaF.y.yaB#u.wa6#z.w.8.C.Wam.CaoamaO#v#uaz.G.GaBaFama0#xawbfa1aY.NaY.NaYaY.NaY.N#D#D#D#Da9a9a9a9.7#D.n#D.7a9a9#D#s#D#D#D#s#D#Da9.na9a9#D#Daw.N#D#s#D#D#D#s#D#D.7.7.7.7.E.7.7.7#L#Laj#L#Laj#L#L#Laj#Lajbpaj#Lbp", +"as.jas.j#g.jas.ja2#ga2as#g.j#gas.j#g#g.jas#g#gas#g.j#g#gas#gas#gas.j#gas.jasas.j#ga2#gaj#LaY#Uamb#ama0a0aCbn#Ibn.Nblaw#Da9aja9aj#Laj#L#Laf#L#Lafaj#L#Laj#L#Laj#L.3aj.3#L#L#La9.7a9a9.7a9a9.7a9a9afa9#La9aj#L.n#L.E.7aj#L.E#D.sbfaw#M.NaY.s#x#IaY.C.W.C.W.Caqaqao.5aoaF#v#uaz#T.o#vaO.8.8bcbcaB#ualbaa5#vaoa0avaoaF#vbm#uaz#u#uaZa0am#x#M.N.N.N.N#D.Naw.N#s#D#D#D#D#sa9#Da9.n#L#L.na9a9.7a9a9.7#s#D#D#Da9#Da9#D#s#Laf.7a9.n#Da9a9#L.7#L.7aj.7#L#Laj#Laj#L#L#Laj#L.j#L#La2#La2#La2ajbp#Lbpa2#L#ga2", +"#g#g#g#gas#g#gas.j#g.j#g#gas#ga2#gas.j#g#g.jas.j#gas#g.jas#gas#gas#gas#gas#gas#gaa.j#g#L#LbjaY#Ua0aCa0a0#xbn#xawbl.N#D#Da9.7#L#Laf#Lafaj#Laj#L#Laf#Laf#Lafajaf#L#La2#Lajaf#La9a9.n.7a9a9a9a9a9#Lafafajafaf.7#L.7#L.7#Laja9#saY#IaY.saY.saY#I#x.s.C#xaC#x.Caoaqamao.8a##v#u.Ga5azaOaOaoao.8#v.ya5ba#z.w#vao.Wam#vaB#uaB#uaZa#aF.5#xawaYbla9.E#D#sa9#sa9#D.7.7a9#s.7a9.7.7#L#L#L#L#L#Lajaf#L#Lajafa9.7.na9a9.7a9a9.7aj#L.7#L.E#Lajafajaf#Laf#Lajaf#L#L#L#Laj#L#L#L#La2aj#gaj#gaj#g#La2.jbp.jbp.jbp", +"as.jas#g.jas.j#ga2as#gas.j#g.j#g.j#gas#ga2#g#gas#g.jas#gas#gas.j#gas#gas#gas#gas#g#ga2bp#L.na9bla0bnbn#UaYawaYaYaYbl#Da9.n.7afaj#Laj#L#L#L#Lafaj#Laj#Laj#L#L#L#L.ja2a2a2af#L.n.7a9a9a9a9.7.n.7a9afaf#Lafaj.7af.E#Laj#L.Ea9aw#x#IaY.saY.NawbfaY#x#I#x#I.C#I.C.Wa0.8am#v.0#u.G.w#uaO#v.8#Q.8bdbb.Q.K#z#u#vaFaoaBa7a7#u#SaFaoamaCbnaYaY#Da9aja9a9bj.7a9.7a9.Ea9.7.7af.7#L#Laj#L#La2ajafaf#L#Lafafafaj#Laf#Lajaf#L#La9#L#Laj#La2a2a2#ga2.j#g.ja2a2#gaj#gaj#g#La2bp.j#g.j#ga2#ga2#g#g#g.j#g#g#ga2a2#g", +"#g#g#g.jas#g#gas.j#g.jas#gas#ga2as.j#g.j#g.jas#ga2#g#g.jas#gasasas.jas#g.jas#g.jasaa#g#Lbp.7afajbn.RaYaYaYaYaYaYbl.N#D#D.7#L#L#Laf#Lafaj#L#L#L#Laf#Laf#L#La2#L.3#La2#L#L#Lafa9a9.n.7a9.7a9a9a9.7afaf#Laf#La9aj.7.7.7aja9#saw#x#I.N#saY#I.NaY.s#I#x#I#x#I#xaC.CaoamaO.yaB.waz#uaZ.8bc.8.8#Q.y.Q.w#4#4.wa##vaB.Qaz#vaFama0#x#x.N.s.N#D#sa9.7a9.E#D.E#L.7aj.7#Laja9aj.7#L#L#La2.ja2af#Lajafajafaj#Lafafajaf#Lafajaf#L#L#La2a2.j#ga2.jas#gas#g.jas#gasa2#g.j#g.j#g#g#g#g#g.j#g.jas.ja2#gas.ja2.j#g#g", +"as.jas#g#gas.j#ga2as#g#gas.j#g.j#g#g#ga2a2#g#g.j#g.jas#gas.jas#g#gas#gasas#gasasa2#g.jbp#LajafafaYbnaYaYblaYaY#MaY#D#sa9a9.7#L#L#Laj#L#La2afa2#L#L#Laja2#Laf#L#La2.j#L.3aj#La9.7a9a9a9a9.n.7a9a9afaj#La9aj#L.7#L#D.na9#s.naw#x#Ibl.Naw.Naw.NaY#xawaYaw#x#I#xaC#I.8aO.yan.w.G.w#vb#by.8.8bc.ybb.Qay.Y.G#u#1a5.GaBamamaobn.s#Da9.7aY#Da9.7a9.7.7#Da9aj.7af.7af.7#L.7afaj#La2a2a2.j#Laf#Laf#Laf#Laf#La2#La2#La2a2a2.7.j#La2#gaa.jasas#gas.jasasas.j#g.j#gas#gas#gas.jas.j#gas#g#gas#ga2.j#ga2#ga2a2", +"a2#ga2.jas#gasas#gas.j#g#g#gas#g.ja2a2a2.ja2a2#ga2#ga2.jas#gas#gas#gas.j#gas#gas#g.j#ga2bp#L#Laj#L.naY.R#xaYaY#D#Dbl#D.7#saf.7.n#L#L#L#L#Laj#L#Laja9#La9aj#L#L#La2a2a2.j#L#Lajafa9#sa9.7a9a9a9.E#Lafafajafa9.na9aj.na9#s#D.N#IaY#s.sbl.s#D#s#D#s.N#I#x.W.Cavam.5.8aF.0azal#T.w.0.8#v.8byaKbbaIaP#aba#N.O.GazaB.5#xaw.N.NaY#D#D#s.7.n.7#L#La9.7a9#L.7af.E#L.E#L#L#L#L#La2#La2bpa2#L#Laj#La2#L#Laja2aja2#ga2.jbpa2as#gas#gas#gas#g.j#g.j#g#g.j#gas#ga2.j#g.j#g.j#g#ga2#g#ga2.j#ga2a2#g#ga2#g.j#g#g", +"#g.j#g#g#g.j#gas.j#g#gas.j#g.j#ga2a2#ga2#g.ja2a2#g.jas#g#gas#gasas.j#gas#gas.j#gasasas#g.j#g#Lbp#La9#Dbl.RaYaY#D#D#Da9#D.7a9.7#L#L#Lbp#L#Lbp#L#L#L#L#L#g#La2a2#Las.ja2a2#Laf#L.7a9.7.na9a9.7a9a9af#L#La9#Lafaja9.na9.n#D.s.s#x#I.Nbl.s#D#M#DaY.saY#I#xaC.Caqao.5bgaO#uaz.G.G#u.y#x.W.8#v#v.y.0.ybabaay.f#uaB.8a0bfaYaY.N.N#D#D#Da9.7.7af.7.7af.E.7aj.7#La9#L.n#L#L.jaf#L#gaja2#L#La2#Lafaj#La2#L#g#g#L#g#L#ga2#g#gas#gas.jas#gasasas#gas#gas#g#g.j#g#gas#ga2as#g#ga2#g#L#gbpa2bp.j#L#gajbpa2bpa2", +"a2a2#g.jas#gas#g#gas.j#g#gas#g#g.ja2a2.ja2a2a2.jas#gas#gas#g.jas#gasas#gas#gasas#g#g#ga2#g#L#La2#La9a9#DaYbl#Dbl#Da9#Da9a9.7#L#La2#g.j#g#ga2#ga2.j#ga2.j#g#g#g#ga2a2#g#La2aj#L#L.n#Da9a9.na9a9.7#Lajafajaf.7a9.naf.na9aE.N#I#Ibn.saY.Naw.NaY.saY#x#I#x.Wa0ao.5.8aoaO#u.G.Gaz#ua##IaCaCaobg#va7azaH#zaz#uaFam#x#xaw.N.N#D#D.n#D.7.E#L#L#Laj#L#L#Laf.7#L#L.E#L#L#L#L#La2#La2#L#gaja2#L#La2#L#L#La2a2#g.j#ga2#g#L.jas#g.jas#gas#gas#g#g.j#gas.j#g.j#ga2.jas.j#g.j#g.j#ga2.j#ga2#g#L#g#gaja2bp.j#L#g", +"a2#g.jas#g#g.jas.j#gasa2#g.j#g.ja2a2#ga2#La2a2#g.jas#gas.jas#gas#gas#gas#gas#gasas.j#ga2#gaj#Lbp.j#La9a9#D#Dbl#Dbl#D.7a9.7.7af.7a2a2a2a2a2a2.ja2bpaj#Lbp#Lbpa2#L.j#g#La2#L.7#L.7a9a9a9.7a9.7a9.n#Lafaf.7afafaja9.na9.n#D#s#I#x#IaY.sawaY.saYaw.N#I#x#I.C.W.5av.5bgaOaB.G.O.G.y.5aO.8bgaFaB.Gau#N#zaz.0aFa0#x.NaY.N.N#D.n#D.7.7a9#L#La9#L.7#L.7#L.E#L#L#L#Laf.7#L#La2#L.jbpa2#La2#La2#Lajafa2#L.j#L#g#L#gaja2#g#g#gasasas#gasasas.jasasas#gas#gasa2.j#g#gas#gas#g#ga2bpa2bpaja2aj#ga2#L#g#La2bpa2", +"a2#ga2#g.jas#g#g#gas.j#ga2a2as#ga2aja2.j#g.j#La2#g#g.j#gas#g.j#g.jas#g.jas#g.jas#gas#ga2#g#La2#L#L#g#La2a9a9#D#D#Da9#Da9.7a9#L.7a2.j#g.ja2aja2#L#L#g#ga2.j#L.j#g#La2#Laj#L#La9.7.na9.na9a9a9a9a9#L#Lajafaja9a9.naf.n#s#s.N#I#x#U#I#x#x#I#x#I#x#I#x#I#x.Wamao.5.8ao#v#u.Garaz#ua#.y.0#u#u#aau#3alaza#b##I#xaw#D#sa9#s.7a9.7a9aj#L#La2aj#L#Laf#La2#L#La9aj.7#L#Laja2#L#g#La2#L#g#Laj#L#La2#L#La2#L#ga2#ga2#g#g#L#gas#g#gas#gasasasas#g#g.jasas.j#g#gas#g.j#g.j#ga2.jbpa2bpa2bpa2bp.jbp.jbp.jbp.jbp", +".j#g.ja2#g.j#ga2.j#ga2.j#g.j#g.ja2#ga2a2a2a2a2#g.j#gas#g.j#gas#gas#gasas#gas#gasa2.j#gaj#g#Lbp#La2#La2#L#La9#Dblbl#Da9bja9#L.7#L#L#Laf#L#L#Laf#Laj#L#L.7#L#L#L#L#L#L#L#L#La9#L.7a9#Da9a9.7a9.Ea9#Lafaf#Lafa9.na9.na9.E#D#s#x#I#I#I#I#x#I#x#I#x#I#x#I#x.WaC.5.8.8.5aBa5#a#TaPaPbk.U#3al#3#T.G.w.0aFaC#x#x.N#D#Dbj#Dbj.7.7aj#L#L#La2#L#La2#La2aj#L.7#L#L#L#L#Laf#Lbp.j#La2bpa2aja2#La2af#L#Laja2#L#g.jbpa2bpa2#g.j#gas.jasas.j#gas#gasasas#g#gas#ga2.jas#ga2#g.j#g#L#gaja2aj#gaja2bpa2#L#L#L#g#La2", +"a2#ga2#ga2a2#g.j#ga2#ga2a2#g#g#g.j#L.j#L.j#La2a2#gas.j#gas#g.jas#g.j#g.j#g.j#gas.j#ga2a2#gaj#L#L.ja2#g.j#g#L#Dbl#Da9a9a9.7a9.7a9a9a9a9a9a9#sa9#Da9a9.na9a9a9#Laf#Laj#L.7a9.E.7a9.n.7.n#Da9a9a9a9#Lajaf.Eaf.na9.naf#Ma9.s.s#I#x#I#x#I#x#I#x#I#x#I#x#I.CaCaq.8am#vaO#u.G.Uay#3#3bv.M#C.O#u.y.5am.C#UaYaYaw.N#D.7.7.7.7aj.7#L#Laj#ga2#ga2a2.ja2a2a2ajaf.7#L.7aj.7#La2a2bpa2aja2bpa2#L#Laja2#La2#L#ga2bpa2.j#g#ga2#gas#gas#gasasas.jas#g.j#gas.j#g.j#ga2a2.ja2a2#gas.j#L#g#L#g#L#gaj#Laj#L.j#La2aj#g", +"#g.j#g.j#g.ja2a2#ga2.j#g.j#g.j#ga2a2a2a2#g.ja2#g.j#gas.j#gas#gas#gas#gas#gas#g#ga2#g.j#L#g#La2bp#La2#gas#g#La9bl#D#Da9bja9.7.n.7a9b.#D#s#D#D#D#s#p.nbl#p.na9a9a9#L.7#L#L#La9.7.7a9#Da9.na9.n.7a9#Laf#Laf#Lafa9.na9.n.E#s.N.s#x#U#I#x#x#I#x#x#I#x#I#xaC.Wa0.8.8.8.yaB#T#4beaM.Y#T.fa7#uaOa0bf.s.N#Mbl#s#D#D.s#DaW.E#L#L#Laj#L#g#ga2a2.ja2a2a2aja2.7#Laj#Laf#L#L#L#L#ga2#L#g#La2#L#La2#L#L#L#La2aj#ga2#g#g#ga2#ga2as#gas#gas#g#gas#gasas.j#g#gas#g#g.ja2#g#g.ja2.j#L#g#L.jbp.j#La2aj#L#Lbpaj#g#L#g", +"a2a2a2#La2a2.j#ga2.ja2a2a2a2#ga2#ga2#ga2a2a2#ga2asaa#ga2#ga2#L.j#La2#L#Lajafa2#L.ja2#ga2#La2#L#L#L#Laf#Laj#L#L#La9bl#Da9blaYaYaYblbl#DaYaYawaYaYblblblblblblbla9#Da9#D#sa9#Da9#D.na9.7a9.7a9a9.n#Laf.Eaf.Eaf.naf.na9#M#D#saY.saw.N#s#s#D#s#s#D#s.C#I#I.C#Iao.5#v#u.OaVadbi#3#1aBbdaO.W.C#IaYbf.N#D#s.7#L#L#Laj#L#Lbp#Lbpbpa2bpa2.j#g#g#Lbp#Lbp#L#L#L.7.7.E#L.7#La2a2a2.ja2#ga2.ja2#L.3a2a2#g#g#g#L#ga2#ga2#g#ga2#ga2#ga2.j#ga2#g#gas#gas#g.jas.ja2#g#L.j#L#g#g#L.ja2a2#L#L#L.7#L#L#L#La2#L#Laj#L", +"a2a2.j#L.j#La2a2a2a2a2a2#ga2a2a2.ja2a2.ja2#ga2a2asa2asa2.j#L#g#La2#L.jaf.3#L#La2aa#ga2a2#L#Laj#Lafaj#L#L#Lbpaj#La9#D#p#Dbl#DaYaYbl#DblaYaw#xaYaYbl#Dbl#Dbl#Dbl#Da9#sa9#D.7#D.7#D.7a9a9a9a9a9.7a9.n#Laf#Laf#La9a9.n#s#D#M#DawaY#I#s#D#s#s#D#s#D#sbf#Ibf#I#Ia0bc.y.G#zad#4aXbk#v.8bgao.C#x.N#x.N.s.7bj#L.7aj#Lbp#Lajbp.j#L#gaj#g#L#gbpa2bp#L#La2#L#L#L#Laf#La9#L#L.j#ga2#ga2a2a2a2a2#La2aj#L#g#L#ga2#g#ga2#ga2#ga2#g#ga2#g#ga2bpa2as.j#g#g.j#ga2#g#L#Laj#Laj#Laj#L#gaja2ajafaj#L.Eafaj#L#Lajaf#L#L", +"a2#La2a2a2.j#ga2.j#L.j#ga2a2#ga2#ga2#ga2#ga2a2asa2.jasa2#ga2#La2#La2#L#L#Laf.j#L.j#L.jafaj#Laf#Lafafaf.7#L#L#Lbpa9#pa9#D#Dbl.sbl#D#MblaYaYaYaYawbl#D#M#Dbl#D#Mblbja9bja9#D.n#Da9.na9.7a9.7a9.na9#Laf.Eaf.Ea9.n.n#D#M#saYaw#IaY#IaY.s#D#s#D#s#D#s#I#x#I#I.Cao.y#1#T#rbq.G#u.yaOaCamaC#xawaY.s.N.N.7aj#Lbp#Lbpa2#ga2#Lbp#L#g#L#g#L#ga2#gaja2bp#Lbp#Laj.7aj.7aja9#L#L#L#L#L#Laj#L#L#L.j#La2#ga2#g#g#L#ga2#g#g#ga2#g#ga2#g#ga2#g.j#g#gas#g.jasa2.j#gaj#L#Laj#L#Laj#La2a2a2#L#L#La9#Lajaf#Lajaf#Laj#L", +"a2.ja2.ja2a2a2#ga2a2#ga2a2#g.ja2a2a2a2a2a2.ja2a2asas#ga2a2#L.j#La2aja2a2a2#Laf#Lafa2af#Laf#Lafajaf.E#Laj#L#Lbpa2a9.na9#Da9a9#D#Dblbl#DaYaYaYaYaY#Dbl#Dbla9#D#D#Da9#Da9#Da9bja9bja9.7a9a9.na9#Da9#D.na9a9a9a9#D#sbl#saYaw.s#x#I#I.saw.saY.s.Naw.N.s.s#IaCaoao#u.G#z.UaX#uaOaOao.W#x#IaY.N.N.N#D#D#L.7#Laj#La2#ga2#gbpa2bp.jbpa2bp.ja2#g#L#Laj#L#La9.7a9.7a9.7.7a9#L#L#Laj#L#L#La2af#La2#L#L#g#L#ga2#g#ga2#ga2#g#ga2#g#ga2bpa2bpa2#g.ja2#ga2#g.ja2#Laj#Laj#Laj#L#La2.j#Lajafaj#L.E#L#Laf#L#L#Laf#L", +"a2bpa2#La2.j#ga2aja2a2a2.ja2#ga2#g.j#ga2#ga2#ga2a2aa#ga2#ga2bpa2#La2afaja2afa2#Lajafajafajafa9a9af#Laf#L#L#L#Lbpafa9a9a9a9a9#D#D#Dbl#DblawaYaYaY#D#Dbl#D#Dbl#D#Da9b.a9.7a9#Da9#Da9.na9.7#D.na9.na9a9#D.n#D#s#D#M.NawaY#I#x#I#Ia0#IaY#Iaw.Nawbo#x.s#x#I.WaF.yaz#3.a#4a5#v#vaoaC#IaYaY.saYaw#D#sbj#Laj#Lbp#L.j#g.jbpa2aj#g#L#g#L#g#g#L#g#L#g#Lbp#L.na9a9.na9a9.na9#Lajaf#L#L#L#Laj#Lafa2#L#g#L#g#g#L#ga2#g#ga2#ga2#ga2#ga2.j#ga2#g.jas#g.j#g.j#ga2aj#L#Laj#L#Laj#Laj#La2#L#Laf.7af#Laj#Lajafaj#L#L", +"a2.ja2.j#L#ga2a2a2#ga2#ga2#ga2a2a2a2a2a2a2a2.ja2as.jasa2.j#La2#La2#La2a2#La2afajafafafafaf#pa9.n#Laf#L#L#L#L#g#Lafa9a9a9a9a9a9a9a9#DblaY#DaYawaY#D#M#D#D#M#Da9#Da9#Da9bja9.7#s.7a9.7a9.na9a9.7#D#s#D#s#D#Dbl#s.N#M.Naw#I#I#IaC.W#I#xbo#xbo.N#IaYbo.W.Wa0#vaz.Y#.aVapaOaO#O#I#I#xawbl.N#D#D.7a9.E#L#L#L#gaj#g#g#ga2bp#gbpa2bp.j#La2#g.j#L#La2#Lbpa9.7#D#D#s#Da9#D#L#L#L#L#L#L#L#L#L#La2#L.j#Lbpa2#ga2#g#g#L#ga2#g#g#ga2#gbp#g#L#g#g#g#ga2a2#g.ja2aj#Laj#L#Laj#Laja2#Lajafaj#Laj.7aj#Laf#L#L#Laf#L", +"a2#La2#ga2.ja2#ga2.ja2a2a2a2#g.j#ga2#g.j#ga2#ga2#gaa#ga2#ga2aja2#L.j#La2#L.jafaf.3ajaf.n#p.n#pa9afajaf#L.7#L#L#L#L#La9a9#D.7a9#Da9a9bl#DblaYaYaY#D#D#D#D#D#D#D#Da9bja9a9.7#Da9#Da9a9a9#Da9#sa9a9#D#D#D#D#s#D#saYaw#I#x#IaC#x.WaC#I#I#x#I#x#I#I#xa1ao#Q.8.w#4.P.4#u#Sao.WaCa0bobfbl#s#D.na9#L.7#L#Lajbpa2a2#g.jasbpa2#L#g#g#L#gbp#ga2#g#Lajbp#Laja9a9#M#Dbl#D.na9.7a9.7a9.Ea9a9.7af.jaf#La2#L#L#g.j#ga2#ga2#g#L#ga2#ga2bpa2a2.j#g.j#g.j#g.ja2#g.j#Laj#Laj#L#Laj#L#Lajaf#L#Laf.7af#Laj#Lajafaj#Laj", +"a2.j#L.j#La2#L.ja2a2#ga2#g.ja2a2a2a2a2a2a2a2a2a2asa2asa2a2a2bpa2af#La2afa2#L#Lajaf#pafafa9#p.n#p.7af#L#L#Laj#Lbpaf#La9.7a9a9bja9a9#D#Dbl#DaYaYaY#D#D#D#Da9#Da9#D#sa9a9bja9a9bja9.Ea9.7a9.Ea9a9a9#s#D#s#D#Dbl.s#Daw#x#IaC.WaCaCao.Wav#Ia1#I.Ca1#I.Cav.8aO.G#dbs#BaLaB.8aC#I.WaYbf#sbl#Da9a9.n#L.E#L#L.jbp.j#gasasa2bp.j#L#ga2bpa2#g#L#g#L#g#L#L#La9#Da9bl#s#p#Da9.7a9.E.7a9.7.7.n#Laf#L#L#gaj#L#g#ga2#g#gbp.j#ga2#g#ga2#g.jbp#gbpas#ga2#ga2#g.ja2.E#Laj#L#Laja2#Laja2aj#Laj#L.E#L.Eafajaf#L#Laf#L", +"#L#L#L#L#La2bpa2#Laj#L#La2bpa2bp.L.L.jasaa#ga2#gaja2a2a2a2#La2#La2a2#L.j#La2afa2.3aj#p#Mbl#D#D.7ajaf#Laj#L#Lbp#Laj#Laf.n.7a9a9.7#pa9#p.NaYaYbl#Dbl#D#Da9#Da9.7a9a9a9a9afa9.7a9.7#Dbl#Dbl#D#D#D#D#xaYaYawaYaYaY#Ubn#I#I#I.Wao#v#vaC#I#x.W#Ibo.C.WavaoaZ.o.Yab#3.QaOaoaC.W#I#x.s.Nbl#sa9a9aj#La9#L#L#g#L#ga2#g#L.j#g#g#g#ga2bp#ga2.ja2#L#Laf#La9.7bl#DblblaYaYaYaYaj#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La2#ga2a2a2#g#La2#La2#g#La2a2#L#L.ja2.ja2.j#L#Laj#L#L#Laj#Laj#Laj.3#Lafajaf#Lajafa9.na9a9.na9.na9", +"#L#Laj#L#Laj#La2bp#L#gaj#L#L#Lajaa.jaaaaa2#ga2bp.3#L#L#La2#L.j#La2a2a2#La2#La2#L.3af#pblbl#Da9a9afaja2#La2#La2#L#Laf#L.7a9a9bja9a9#p#DblaYaw.Nbl#Dbl#Dbl#D#D.7a9a9afa9a9a9a9aj.7bl#D#D#sbl#Dbl#MaYawaY#xaY#xawaY#x#U#x#I.Cao.8aBaxav.W.C.Waoao.8aO#vaPay#daVbk.0#OaoaC.W#x#I.N.N#Dbl.na9a9#L.7aj#g.j#ga2bpa2#g#gasas#g.j#g#ga2#g#La2.ja2#Laja9a9a9a9bl#DaYawaYaY#La9.Eaf#L#Laj#L#L#Laj#L#L#L#L#Lbpa2#L#g#La2#g#L#gaja2#ga2#ga2#La2a2a2#La2a2.3#L.jaf.jaf.j#L.3#Laj.3aja2#Laj.3#Laja9af.n#L#Laf#L", +"a9ajafaf#L#L#L#L#L#L#L#L#L#L#L#Laa#ga2#g.j#gbp#La2#L.ja2#La2#La2a2#La2a2a2#L.j#L.jaf.n#pbl#sa9.Eaf#Lafaj#Laj#L#Lajaf#La9a9bja9a9#Ma9bl#DaYaYbl#DaYbl#Dbl#Da9a9a9a9#p.naf.7a9.7a9.n#Da9#D#D#s#D#DaYblaY#MaY#MaYaY#MaYaw#I#IaC.8aObgaoaoao.8ambc#v#uar.M#d#4.G.y.8bgaoaC#x#I.N.N#s#pa9a9.7ajaf#L#La2bpa2.j#g#gaj#g#g#gas#ga2#g#L#La2a2#Laf#Laf#La9a9a9a9#D#Dbl.Nbl.E#L.7#L.7af.7#La9#L.7#L#L#L#L#La2#ga2#ga2#g#La2#L#ga2#L#g#L#Laj#L#Laj#Laj#Laj#Laf#L#La2afaj#Lajaf#Lajaf#Laj#Laja9afajaf#Lajafaj", +"afaf#Lafajafajafajaf.Eaf#Laj#L#L#La2#L#L#gbpa2bp#La2#L.3#L.jafa2#La2a2#La2a2#L.3afaf#p#Mbla9a9.7afajaf#L#L#L#g#L#La9aja9a9#Da9.7#pbl#DaYaYaYbl#DaYblaY#Dbl#D#D#Dafa9afa9a9a9.7.7.7#Da9bja9#D#D#s#D#D#saYbl.NblaY#M#D.saw#I.WaOaB#vaO#v.8aOaO#v.y#3ad.Z#.#T#vav.haoaC#x#IaY.s#D#D.n#Dajaf.7#Laj#L#ga2#g#gbpa2#ga2a2as#ga2#ga2bp#La2a2a2a2a2#L#L#La9afa9#M#DblawaY#L.7af.E#Laj#L#L#Lajaf#L#L#L#L#Lbpa2#L#g#La2#gaja2#L#ga2#g#La2a2aj#L#L#L#L#Laf#L#Laj#Laj#L#Laf#Laj#L.7aj#L.Eaf.7.na9#D.n#Da9#Da9", +"a9.na9a9a9a9#pa9a9a9a9a9a9a9a9.nafaj#L#L#L#Lbp#La2aja2#La2#La2a2#La2a2a2a2a2#La2aj#p#pbla9a9#Lajaf#Lafajafaj#L#Lajaf#La9.7.nbj#Da9blaYaY#x.N#DblaYblaY#DaY#Dbl#Da9a9a9a9.7a9.7.7a9.7.E.7.7.7.7a9#D#D#D#D#s#D#s#D.sbl#s.s#xaoaO#S.yaBaB#u#u#ubk#E#.ab#4#3.G.y.8bo#U#I#x.s.N#D#s#Da9#L.7aj#L#La2bp.jbpa2#La2#g#L#g.jas#g#ga2#Laja2#L.j#La2af#L#L#La9.7a9bj#Daw.Nbl.E#L.7#La9#L.7#L.7#L.7#L#L#L#L#La2#ga2a2#ga2#L#g#La2bpa2#La2bp#L#Laf#L#Lafaj.7ajaf#Laf#L#Laj#Laja9.na9.7afa9.Ea9a9a9a9a9a9.na9a9", +"a9a9a9a9a9a9a9.n#paf#paf#p.n#p#pbl#D.na9a9#L#L#L#La2#La2#La2#La2a2a2a2#La2#La2afa9#p#M#pa9.nafa2afajaf#L#Lbp#L#L#Laf#La9a9#Da9a9#D#DaY#x#xaYaY#DblaYblaY#Dbl#Dblafa9afa9#Da9.7a9#L.7a9#Laf.7.n.7a9a9#s#D#D#D#D#D#s#D.s#x#I.8#Saz#u#u#uaZ.w.GbiaV#4.U#3ara5#vao.W#x#IaYaw#D#sa9a9#L.n#Laf#L#gaj#L#ga2#g.ja2#g.j#gas#gas#gaja2bp#La2a2a2a2#L#Laf#L#L#La9a9#Dbl.NaY.7#L.n#L.E#L#Lafaj#L#L#L#L#L#L#Lbpa2#L#g#L#ga2#ga2#ga2a2#gaja2#L#L#L#Laj.7#La9#L#L#Lajafaj#Laf#L.n.7a9.Ea9.Ea9.n#D#s#D#s#D#D#s#D", +"a9.n#pa9.n#pa9#pa9.n#p.n#p#p#p.nblblbla9.na9#Laf#Lafa2aj.3#L.j#La2#La2#La2aja2#La9.nblbl#pa9#L.j#Laf#Laja2#La2aj#L#Laja9a9.7#D#s#p#DaY#x#x#xaY#DblblaYaYbl.Nbl#D#Dbl#D#Da9#Dbj#D.7#L.7#L.7af.7#L.7.na9a9.na9a9.n.NaYbobfaoaFaBazaz.w#uaP#3#4ad#4ap.O.O.O.w#S.8.5#Uaw#x.saY#s#D.n.7#L#Laja2aj#gas#L#gbp#gbpa2bpa2#gas.j#g#g#L#La2#La2#La2#L#L#L#L.7#L.7.7.E#D#s#D.na9#L.7af#L.7#L.7#La9#L#L#L#L#La2#ga2a2#ga2#L#g#La2bpa2#ga2#ga2.7a9.7#La9.7.7a9ajaf#L#Laf.7.na9#D.Ea9.7a9.7a9b.#D#D#D#D#D#D#D#D", +".n#pa9#paf#p.n#p.n#p#p#p#p#p.n#p.b.R#Mbl#p.nafajafaja2#La2#L.3#La2a2aja2#L.3#L.ja9#pbl#Mbl.nafa2afajaf#La2#Lbp#L#Laf#La9.n#D#s#DblaYaY#xbn#xaY#DblaYblaYblaY#Dbla9bla9#D#D#D#Dbja9#La9#La9.7.7a9.7a9.7.7.7.E.7#D.N.sbf.Wam.y#uaz.Oar.Gal.Mbxadalbkbkbkbkbka7.yaF#I#IaY#s#Da9#s#Daj#Laj#L#g#L#g#g#gaja2a2a2#ga2#gas#gas#ga2#g#gaja2a2a2af#Laf#La9#Lajaf.7a9#D#s#Da9.Ea9.E#L.E#Laj#L#L#L#L#L#L#L#L#L#g#L#g#La2#ga2#ga2#ga2#L#g#La2#L#L#L.7#Laf#La9#L.E.7.7.Ea9.n.7.n.7a9.7.n.7.na9#D#D#s#D#s#D#s#D", +"#Lafaj#L.7#L#L#Lafafajafaja9#pa9aYawaYaYawblblblafafaf#Laf#L#L#L.jaaafa2#L#Lafaf.n#F#M#pa9afaj.7#Lbp#Lbpbpaj#L.Eaf#Laj#D#D.N#D.N.naYaYbna0a0bnaY#DblaY#x#xaYaYblbl#D#Da9a9.7#L#L.7.7.7.7.7.7.E.7#Dbj#D.s.N.N#DboaY#MaY.W.8aZal#P#PaT#P#.a.ad.ObkaX.G.O#Taz#SaoaC#x#x#I.N.s#D.E.7af.7#L.E#L.Eaf#Laj#g#gbp.jbpa2aj#ga2#g#L#ga2#ga2#L#L#L#L#L#L#L#L.7#L.7a9.E#Da9#D.Ea9.7a9.7a9#La9#L.7aj#L#L#L#L#L#L#L#L#L#Lbpa2#L#L#g#L#ga2a2#ga2bpa2#La2#L#Laj#L#Laf#Laj#L.7#L.7af.7.E#L.7#L.7#L#sa9.7a9.7#L.7#L", +".E.7.7#La9aj.7#Lafajafafafa9a9.nblbl#MaYblbl#Dblafajafaj#L.E#L#Laaa2a2aja2afajaf#p#p#pa9.naf.7#L#gaj#Lajbp.7#L.7ajafa9#D#D.NaY#xblaY#x#xama0a0aY#p#Dbl#xbnaYblaY#Dbl#Da9a9.7af.7.7.7.7.7.7.7.7.7#D#s#D.N.N.N.N.N#IaY.N#Iamanay.P.PaDaD#..M.O.G#u#u.w.GaP#u.ybgaCaC#x#IaY.N#s.7a9.7aja9#La9#L.E#L#L#ga2a2#ga2#ga2#g#L#ga2#ga2#g#g.7#L.7#L.7#L.7.7af#L#L#La9#Db.#Da9.7a9.Eaf.7a9.7#L#L#L#L#L#L#L#L#L#L#L#L#La2#L#L#ga2a2#g#L#g#La2#ga2#g#L#ga2#La2#L.7#L.7a9aja9#L.E#La9aja9#L.n#L.na9aj#Laja9aj.7", +"#L#Lafaj#L#Laf#Lajafaf.Eaf#sa9a9a9a9#pbl.nbl.n#p.nafa9#Laf.7#L#L#L.ja2#La2af#L.n#p#Mbla9a9aja9#Laj#Lbp#L#L#L.7.7#D#D#saYaw.N#xbf#MaYaw#xbna0a0aYblaYaY#xbn#xaYaYbl#D#D#Da9#D.7#L.7.7.7.7.7.7.7bj#s.7#D#s#D.N.sbfa0#UaoaO.yan.2.g#m.AbA#4ar#u.0#u#S#vaBaB#uaB#v.5aoamaC#x#IaY.N.na9.7.E#L.7af#L#La2#g#L#g#L#gbp#ga2#ga2#g#g#ga2#g#L#L#L#L#L#L#L#L#L.E#L.7.7a9#Da9.Ea9.7a9.7.7#L#L#L.7#L#L#L#L#L#L#L#L#L#L#Lbpa2#La2bpa2a2#ga2#ga2#L#ga2a2a2#g#La2#Laj#L#L#L#L#L#La9#L.7#L.7aj.7#La9.7#La9.7#La9#L", +"#L#L.7#L.7#L.7#Lafaf#Laf#La9a9.na9#Da9.n#Da9#D#Dafaf#Lafaja9aj#La2a2af#Laf#Laja9#p#D#p.na9.7aj#L#L#L#L#Laj.7.7b.#D#saY.NaYbf#x#x#DaYaYaY#xbna0#xaYaYaY#xaYaYaYaY#Dblbl#D#Da9.7.7a9.7.7.7.7.7a9.7af.7#D.N.s.N#x#IaF.8amaF.0#uaybe#.ba#aaz#ua##vaOaOaO#v#v.y#uaBa#b#bga0a0awaYbl#D.Ea9a9a9.E.7a9.7#Laj#L#gaja2a2a2#ga2#g#ga2#ga2#g#L#L#L#L#L#L#L#L#L#L#L#La9.Ea9.7.7.n.7.n#La9.n.7af#L#L#L#L#L#L#L#L#L#L#L#La2bp#La2#ga2#g#La2bpa2#ga2#L#g#L#ga2#g#L#L#Laf.7#L.7#L#L#Laj#L#L#Laf#L.7#L.E#L.n#L.E#L", +"#L#Laj#L#L#Laj#L#L#Laj#L.7.7a9.7a9a9a9#Da9a9.na9.naf.Eaf#L.7#La9ajaf#Lajaf#La9a9#M#pbla9a9#L#L.7aj#Laj#Lbjbj#sbjaY.N.Naw.N.Nawbf#DblaYaYaY#xbn.CbnaYaYaYaY#xaYa0bl#D#D#Da9#D.7#L.7#La9#La9#L.7.7a9#sblaYaYbnaCa0.5amaFaB#u#a#4abarazaBa#aO.5ao.5aoaoamaOaB#u#uaZaCa0bn#xaYaY#Dbla9a9.na9a9a9#La9#La2a2#L#g#g#L#g#g#ga2#ga2#g#ga2#ga2a2#ga2a2#La2#L#L#Laf.7.7.7a9a9.7a9.7.7.7#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#g#La2bpa2#ga2a2bpa2#ga2a2#g#La2#L#L.7#Laj#L#Laj.7af.7#La9#L.7ajaf.7#L#L#L.7af#L", +"#L.7af.7#La9#L.7a2#L#L.7#L.n.7.na9a9.na9a9a9a9a9afaf#Laf#Laf.E#Lafajafaf#La9.na9#D#p#sa9.n.7aj#L.7#L.7a9.Ea9#Da9.NawaY.N.NaY.N.N#D#D#D#MaY#x#xa0ama0#xbnaYaYbn.CaYaYaY#D#D#D#D#Da9a9a9a9.7#Da9#s#D.NaY#x.Ca0amamaFaB.f.Oau#aazan#v#vaFam.5aCav.CavaoaoamaOaB#uan.Ca0#xawaY.s#D#s#Dbja9bja9.7a9a9a2#La2#La2a2a2a2#ga2#ga2#g#ga2#ga2#ga2a2#ga2#ga2#L#L#L.7a9.7a9.7.Ea9.Ea9.7af.7af#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La2a2#ga2#ga2#L#ga2#g#La2bpa2a2bp#L#L#L#L.7#L.7af#L#L#L#Laj#L#L#L#Laj#L#La9aj.7#L", +"#L#L#L#Laj#L#L#Lajaf#Laja9.7.7a9.7a9a9a9a9.na9a9aja9#Laja9#L.7#Laf#Lafaja9a9#D#D.nblbla9b.#L.7.E.7.n.7.n#D#D#s#D#D#D#D#s#D#D.n#D#D#D#s#Dblawa0.Cama0a0aYaY#xa0amblaY#D.N#D#Dbj#Dbj#D#D#D#D#D#D#D.N#x#x#xbg#vbmaBbk#a#Ea7a7aZ#va#amb#ao.C.W.Cbf#IaqaoaoaoaO#SaZ#ubn#I#xaY.Na9a9.7a9a9a9a9a9a9a9a9#Lajaf#L#L#L#La2a2#g#g#ga2#ga2#ga2a2#ga2a2#ga2a2#L#L#L#L.7.Ea9.7a9.7a9#La9#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#g#L#g#La2bpa2#g#La2#ga2#ga2#ga2#L#L#Lajaf#L#L#L.E#L.7#L.7#L.7#L.7af.7aj.7af.7#L", +".E.7.n#L.7#L.7af#L#L#L.7aj.7a9.Ea9a9a9.7a9a9.7a9afafafafaja9aj.7afaja9#La9a9#s#D#p#M#D#s#D.n.E.7a9.na9#D#sa9#D#D#D#s#D#D#Da9a9.n.N#D#D#Dbl#xa0ama0ambnaYaYbnama0aYaYaY.N#D#D#Dbj#D#D#D#D#s#D#Daw.C#I.Caobm.G#faG.yaBbh.l.taFb#.5a0a0aoa0#xbo#xboaqavaoamaC#Sa7an#I#x.N.s#Dbjaj#L.n#Da9#sa9a9a9a9#Laf#L#Laf#Laf#L#ga2#ga2#ga2#g#g#ga2#ga2#ga2a2#g#L#L#La9.7a9.7.7.7.n.7.7.7#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La2#ga2a2#ga2#ga2a2#g#L#g#La2bpa2#L#L#L#L.7#L.7#L#Lafaj#L#Lafaj#L#L#L#La9#L.7aj#L", +"#L#L#L#Lajafaj#Laf#Lafaf#Lafajaf#L.jafajaf#Laja9aj#Laj#L#L#L#Laj.7.7.E#Laj#L.7.7bl.NawaY.NaY.N.s#s#D#sa9bj.Ea9.Ea9.na9.n#D#s#D#Da9.n#D#D.saY.s#x.R.Rbn#x#x#xaY.NbnaYblbl.na9.7.7#D.N.N.N.Nbfbfbfavama#aSaG#z.G.0aoa0aC#xaCbn.Wbn#I#xaY#I#x#x#I#x#Ia0avao#v.0aBa7#IaYa9.7.E.7#D#Da9a9a9a9.7a9.7afa2a2a2a2a2#g#ga2#ga2#g#ga2#g#ga2#ga2#g#ga2#g#ga2a2#g#L#L#L.7a9.7.na9a9afaj#La2a2#L#Laf#L#L#La2#L#L#La2#La2#La2#La2#L#L#L#L#L#L#La2a2a2a2#g#ga2#g#La2#La2#Lajafa2.7#L.7af.7#L.7afaj#L#Lajafafaf#L", +"#Lafajaf#L#Laf#Lajafaj#L#Laf#Laf#Laf#Lafajaf#Da9.7a9.7.7af.Eaf.7.na9a9a9.7.7.n.7awaYawaYaw.s.N#D#Da9#D.na9.7a9.7.n.7.7.7#D#D.7.7#Da9#s#D.N#x.N#x#Ua0a0bna0bn#IaYb#am#xaY.N.N.N.Nbj#D.N#I#xaqaoa0a0a#a7#fa6az.0.5bnaCbnbn#x#x#x#xaYboaYbfaw.NaY#I#x#Iao.8.5#v#u.T#I.N#sbja9bj.7bj#sa9.Ea9a9.7a9a9#L.ja2a2.j#ga2#g.j#ga2#g#ga2#ga2#g#ga2#g#ga2#g#g#ga2#L#L#La9aja9a9af.7af#L#L#L#gafa2#La2afa2#La2.3#La2#La2#La2#La2#La2a2a2a2a2#La2a2#L#g#La2bpa2bpa2#ga2#L#La2#L#L#L#L#Laj#L#L#La2a2afafaj#Lajaf", +"#L#L#L#L#L#Laj.7af#Laf#Lajaf.Eafajaf#Lafa9a9.n#D#D.n#Da9#s#D#D#D#D#s#D#s#D#D#D#sbl#s#D.s#D#s#D#s.7aj.7#L.7aj.7#L.7af.Ea9#L.7a9.7.na9#D#D#D.NaY#xa0.Vaoamama0ambna#b#amambn#x.C.Cawbf#xa0amamaF#v#vaBazaSa7a#aq.W#x#x.s#xaw#xaw#x.N.NaY#xaY#x#I.N#I#xavam.8.yana7#U#x#D.7b..7a9#Da9a9a9a9.7a9af.7a2#La2#L#ga2#g#g#ga2#ga2#g#ga2#ga2#g#ga2#g#ga2#ga2#L#L#L#L.7a9.7a9a9a9#La2#La2a2#L#Lafa2#La2#La2#L#L#La2#La2#La2#La2#L#L#L#La2#La2a2a2a2#g#ga2#g#La2bpa2a2#Laj#L#L#L#L.7#L.7#L.7af#L#Laf#Laf#L#L", +".7#L#Laj#L#La9#La9a9a9a9a9a9a9a9af#L#D.n#D.7#D.7#D#D.N.s.N.N.N.sbl.NblaYblaYawaY#M#D#Ma9#D.nbj.7#L#L#Laj#L#Laj#Laj#L#L#L.7a9.E.7a9a9a9#DaY.s.N#xaCb#a#aFa#amamam#vaFamam#xa0#xam.CaCamamaObma7aza7aZbm.tam.C.Cbfaw#xaYaY.NaY.NaY#DaY.s#xawbfaY#x#x#Iaqao.8aZ#ua7ao#xaw#Da9b..7#Da9#s.7a9af.7a9a9a2#La2#La2#ga2#ga2#g#g#ga2#g#ga2#g#ga2#ga2#ga2#ga2#g#L#L.E#L.7afa9afa9#Laf#L#ga2#La2#La2#La2#La2af#La2#La2#La2#La2#La2a2a2#La2#La2a2#La2#La2bp#g#L#ga2a2#g#La2#L#L#L#L#L#L#Lafaj#Lafaj#Laf#Laf#L", +"a9a9a9a9a9a9a9.n.7a9.n.7a9a9.n#D.na9#s#D#D#D#D#D#D#D.sblaY#saY#DaY#MaY#saYblaY#D#D#s#D.7.n.7bj.E#L#Laj#La2#La2#L#L#L#L#L.n.7a9.7a9.E#D#D.NaY.N#Iamam#v.0a#aFa#a#bmbgamaCbna0aoa0amaF#vaBa7a7.l.TaFb#b#amam#x.Nbj#x.N.s.NaY.NaY.N.N.NaY#x.N#IaY#I#x#Iaoaq.8.ybhazb#bn.N.N.7a9#D#s.7a9a9a9.7a9#La9#Lajaf#L#L#Lbp#L#ga2#ga2#ga2#g#ga2#g#ga2#g#ga2#ga2#L#L#L#L.7a9.Ea9a9a9a2#L#La2#g#La2#La2#La2#La2#La2#La2#La2#La2#La2#L#La2#La2#La2a2a2#ga2#g#ga2#ga2bpa2a2#L#L#L#L#L#L#L#L.E#L.7a9a9a9a9a9a9.7a9", +".7a9a9a9.n.7a9a9#s#Da9#Da9#D#D#D.7#D#D#DaY.Naw.Naw.NaY.NaY.NaY#s#D#D#D#D#s#D#s#D.na9a9.n.7.7.7#L#g.ja2#g.j#g.j#g.j.3aj#L.7aja9.Ea9a9a9#D.N.s#x#x.Cb#aF.yaZa#a##Sa##SaFamamaOa#aZazazaza7a7bmaFaFa0a0a0bn#IaYaY.Naw.NaYaY.N.N.Naw.NaY.Naw#x.N#x.N#x#I.Cao.5.ya7az.5aoaY.s#D.E#D#Da9.na9.7.na9a9a9#Laf#L#L#L#L#Lbpa2#g#ga2#g#ga2#ga2#ga2#g#ga2#g#ga2#g#L#L#Laf.7#La9afa9#L#L#La2a2#La2#La2#La2#La2#La2#L#L#L#La2#La2#La2#La2#La2#La2a2#L#g#L#g#L#g#La2a2bpa2#g.j#L#L#L#L.7af#L#L#La9.7a9a9.Ea9a9a9", +"a9a9a9a9a9a9.na9#D#D#s#D#s#D#s#D#D#D.saY.s#xaY#x#D#M#D.nbl.nbl#Da9.Ea9.7a9.7a9.7#Laj#Laj#Laj#Laj#gas#gas#g#gas#ga2#L#La2af.7#L.7a9#s#D#D.NaYaYboa0a0aOa#a#a#aBbh.GaPa7az#uaS#TalbaaGa7aZaFaoambnaCa0#x#I#D#DaYaw.N.N.s.N.N#D.N.N.N.N#I.NaY.saY#I.N#I.C.8.5.ya7azaOb##x.N#Da9a9#sa9a9#D.na9.7a9.7a9a9.7#L#L.7bp#L#ga2#g#ga2#g#ga2#g#ga2#ga2#ga2#ga2#L#L#L#L.7a9.7.na9.7a2af#L#ga2#La2#La2#La2#La2#La2#L.3#La2#La2a2#La2#La2#La2#La2a2a2a2a2#g#ga2#ga2bp.ja2bpa2#L#Laj#L#Laj.7#L.7.na9a9.7a9a9.7a9", +"afa9afa9.na9a9a9#s#D#D#D#D#D#D#D.saY.NaY.Naw.NaY.n#Da9a9a9a9a9#Daj.7#L#Laj#Laj#Laj#L#L#Laj.7bp.7as.jas.jas.jas.ja2.ja2#L#Laja9aja9a9#D#D.Naw.N#x#xa0am#va#a#bmaB#l#0.2.2.2#0ab.4arazaZa#aFa0.W.C#x#x.NaYaYaYblbl.N.N.N.Nbj#Dbj.NaY.NaY.N.NaY.NaY.NaY.Waqao.0#ua7aBaO.Waw#D.na9#Da9.na9a9a9a9a9af.7afa9.7#L.7.7bpa2#g#ga2#ga2#g#ga2#ga2#g#ga2#g#ga2#g#L#L#L.7.Eafa9afa9#L#L#La2#g#La2#La2#La2#La2#La2#L#L#L#La2#La2a2#La2#La2#La2a2#La2#L#g#L#g#L#g#La2#Lbpa2#La2#La9#L.7#Laf#L#La9.7.na9a9a9.na9", +"#D#Ma9#Da9bl#M#DaYaYawaYblawaYaYaYawaYaYbl#D#D#s.7af.E#L.7aj.7#L#Lajbp#Lbp#L#L#L#ga2.j#g#g.j#g.j#g#g#g#g#g#g#g#g#ga2a2aj.7a9.7.7a9.na9#M#DaY.Nawbn#UaoaF#v.8am#va6a6ba#V.Z#oab.I.TbmaFaoam.C.C#I#x.s.N.N#D#D#D#DaY#DaYbl.NaY.N.s#D#M#D#D#s#D#D#s#Daw#x.CaC.5bc.yaBaZ#vam.Nbj#Db.#D#D.7a9.7#D#D.Na9a9.7a9#L#L#L#La2a2a2#ga2#ga2a2#L#L#L#L#L#L#L#L#Laf#L.na9a9#D#Da9a9a9a9#L#L#L#La2#La2#L#L#L#L#La2#La2a2a2a2#L#La2#La2#La2#La2#La2a2a2a2a2a2a2a2#L#L#L#L#L#L#L#L#L#L#L#L#L.7a9.7af#La9.7a9bja9#D", +"bl#D#D#M#D#Dbl#D#MaYbl.saY.NblawaYaYaY#M#D#s#D#D.7#L.7#L#L#L#Laj#g#L#gaja2aj#gajas.jas#gas#g.j#gas.jas.jas.jas.ja2.j#L#Laf.E#D#Daja9a9#DaY.s#x#IaCamama##uazaz.G#.a..Z#Valarak#aaZ#Sa#ama0#U.C.CaYaY.NawaY#D#D#DaYaY.sbl.N.s.N.Na9a9a9a9#D#D#D#D#s.N.N#I.CaobybcbhaB#vaF.WaY.s.Nbl.s#D.na9#D#DaYafa9a9a9#L#L#L#L#ga2#ga2#gaaa2as#L#L#L#L#L#L#L#L#L#L#La9a9#D.7#D.na9#D#L#L#L#L#L#L#L#L#La2a2a2a2#L#La2#L#L#La2#La2#La2#La2#La2#La2a2#La2#La2#La2#L#L#L#L#L#L#L#L#Laj#L#Laja9.7.Eafaja9a9#sa9#D#D", +"#D#M#Dbl#D#M#DblaY.NaYbl.NawaYaYaY#M#D#D#D#D.7afaja9#Lajbp#Lbpbp#Lajbp#Lbpbpa2bp#g#g#g.j#g#gas#g.j#g#g#g#g#g#g#ga2a2aj.7a9#Da9#Da9a9#s#D.s#x#I.Ca0aO#uazal.Y.A.1a.aHaGaz.Ta#bma##SaFaFbgama0.C#x.s.NaY.N.N#s#D#Dblbl#Dbl#D#D#D#D#Da9#D#D.7.E.7a9#D.saY#x.Wa0.8.5#S#uaB#S.5.C#x#x.NaYbl#Da9#D#D.Na9a9.7a9#L#L#L#La2asa2aaa2#ga2a2#L#L#L#L#L#L#L#La2af#L#La9.7a9#Da9a9.7#La9#L#L#L#L.3#La2#L#L#La2#Lafa2#La2a2#La2#La2#La2#La2#La2a2a2a2a2a2a2a2a2#L#L#L#L#L#L#L#L#La2.7#L#L.7af.7a9a9a9bja9#D#D#D", +"aYaYaYawaYaYaY.saY#M.NawblaY#Daw#Dbl#D#s#D#La9.7#L#L#L#L#L#L#Lbpa2bpa2aj#ga2bpa2as.j#gas.j#g.j#g#gbp.j#L#gaja2bp.j#Laf#L.7#s.N#sbjb..N#Ibf.Waq.8#vaz#zaHbs.m.B.BauaSa#aFaFbgama0ambga#aFamam.W.CaYaY.NawaY#D#D#D#sbl#D#D#D#D.Nb.a9a9.n.7#La9.7b.#Da9.s.Nbo.C.Cava#aZaBaBaOaOb#ao#x#IaY#D.n#Da9#Da9a9a9#L#L#L#L#La2a2#ga2#ga2#ga2bpa2#ga2a2#ga2a2#La2af#L.7a9a9.7a9a9#D#L#L#L#L#Laf#L#L#La2a2a2#La2#La2#La2#La2#La2#La2#La2#La2#La2#La2#La2#La2#L#L#L#L#L#L#L#L#L#L#Laf#L#La9.7.7a9.7a9#D#D#s#D#D", +"aYboaY#x#x#I#x#x#I#xaYawaY.NaYaY#D#M#Da9.7.7aj#L#L.E#L#Lbp#L#L#Lajbp#Lbp#Lajbpaj#gas#g#gas#gas.j#L#Lbp#Laj#gbp#L#Laj.7a9.7#Dbj.N.N.sbo.Caq.8#v#u#3adbe.A#Y#9.PbranaBb#amamaYaYaYa0am#vbmaOb#.C#x.s.N.NaY.N#Da9#D#pa9.na9#Da9.7a9.7a9.7a9.7.7.7.7a9#D#D.N.N#xbo.Cb#aOaF#vbma##vbmamam#xbl#D#D#D#Da9a9.7#Laf#L#L#L#g#La2bpa2#L#ga2a2bp#Lbp#L#Lbpa2#L#L#La9a9.7a9.7a9af.7af.7#L#L#La2#La2a2#L#La2a2#La2#La2#La2#L#La2#La2#La2#La2#La2a2a2a2a2a2a2a2#L#L#L#L#L#L#Laj#Laj#L.7aja9#L.na9#D#s#D#D#D.N.N", +"#x#x#x#I#x#x#IbnaYaY#IaYaY#MaY#M#D#D#Da9.7#L#L#L#L#L#L#L#Lbp.E#Lbpa2bp.j#L#g#L#g.j#gas.j#g.j#g#g#Lbpajbp#Lbp#Laj#L#Laj.7.n.N.N.sbf.C.Caoa#.w.ObB.u#.#oa8aMabalanaBa#a#a0#xaYaYaY.Wamb##Sa#b#a0.C#xaY.NaY.s#D#D#D.nbla9a9#D.n.7a9#L#L#L#Laj#L#L.7.E.7b.a9.s.N.N.s.Camam.8aF#vaZ#uaFb##xaYaY#D#D#sa9a9a9.7#L#L#L#La2a2#ga2#ga2a2#g#L#L#L#L#L#L#L#L#La2af.7a9a9.7a9a9a9#D#L#L#L#L#La2#La2#La2#La2a2a2a2a2#La2#L.3#L#La2#La2#La2#La2a2#La2#La2#La2#L#L#L#L#L#L#L.7#L#Laf#L#L#L.7a9.7bja9#D#s#D.N.saY", +".CaC.Ca0.Ca0#x.CawaYaY.Nbl.N#D#D#Da9.E.7aj#Lbp#L#L.7#Laj#L#Lbp#Lajbpaj#Lbpaj#Lbp#gas.j#gas#gas.jbpaj.7#Lajbp#Lbp#La9a9#D.N.s.N#x.WaqaO#ubk#zaHbA#Pbsbeab#a#ua#ambm.Fa0bn#xaY.N.s.Nbnb#bmaBa#aC.Caw.NaY.NaY#D#D#D#pa9a9a9a9.7a9#Laj.7#L#L#L#L#L#Lbja9bjbj#D.7.N.Nbo.C.Ca0a##vana7an#Sa0aYawbl#D#Da9a9.7af#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Laf#La9.n.7#Da9.7afa9#L.7a2#L#g#La2#La2#La2#L#L#La2a2#La2#La2#La2#La2#La2#La2#La2a2a2a2a2a2a2#L#L#L#L#L#Laj#Lafaj#L#L.Eaf.7#La9#s#D#DaY.NawaY#x", +".C#xa0#x.W#x#x#x#DaY#Dbl.sblaY.Na9#D#L.7#L#L#Laj#Laj#L#Lbp#L.7#Lbpa2#L#g#L#g#L#g.j#gas#g#g.j#g.jbp.7#La3#La3aj.7.7aj.7#s.N.N#Ibf.8aF.y#3ad.A.MaT.P#V#P#Tan.5.C#Ia0b#bga0#xbf#xbf.N#xa0bm.T#Sao#x#x.NaY#s.N#D#D#D#p.nafa9.na9#L.7#L#L#L#Lbpaja3#L.Ebj.E.7#sbj#sbjbf.s#xavama#aBana7aZbgbnaY#D#D.7.na9a9.7#L#L#L#L#L#L#L#Lbp#L#L#L#L#L#L#L#L#L#L#La2a2#L.7a9a9a9.7a9a9a9#L#L#L#g#La2#La2#La2#La2a2#La2#La2#La2#La2#La2#La2#La2#La2a2#La2#La2#La2a2#L#L#L#L#L.7#L.7afaj#L#L#L.7a9#LaY.Naw.Naw#x#x#I", +"aY.saY.NaY#DaY.N.na9.na9a9a9a9aja9a9a9a9.7a9.7a9#Laf#L#Laj#L#gaj#Lajbpaj#Lajbpaj#Lafaj#L#L.7.Ea3#L.Ebj#D.s.N#Db..7.7.N.N.WamamaOakaybs#Y.maDbaaHaga7#SamamaC.C.CaYamb#aFb##xaY#D.n.Nawa0#vaZaZa##xaw.N#Daf.na9#s#Da9a9a9.7af#Laf#La2#g#g#L#Lbp#L#L#L#L#L#L.7.7.7.7bj.N.Caoam#vaZaz.fanama0aY#Ma9aY#D#Da9a9.7.7#D#L#La2#La2#L#L#La2a2a2a2a2a2a2a2.7afa9a9#D.7#D.7af#L#L#L#La2#ga2a2a2a2a2#ga2#ga2a2a2a2a2a2a2a2a2#La2#La2#L#L#L#La2#La2#La2a2a2#La2#L#Lafa9a9a9bja9#D#D#DaY.s.N#x#Ibn#x#x#x#x#U#x", +"aY.Naw#D#D#s#D#Da9a9a9a9a9afa9a9a9a9.Ea9a9.na9a9afajaf#La2#L#L#Lbp.7bp.7bp.7bp.7a2a2#Laj.7.E.7.E#L.E#D.s.N.Nbjbj.N.s.N#xa0aO#u#E#V#2....#KaD.YaGa7bmaFaFaoama0.CbnaCb#aOama0.N#D#Dbl#xa0bmaB#ua##x#xaY#sa9.7a9.7#D#D.7a9a9aj#L#L.j#La2bpa2#Lbp.E#Laj#L.E#L.7b.#Db.#D.s#xa0.8a##v.6azbhaOam#xaYbl#Dbl#Da9#Da9.7.7#La2#La2a2a2a2#La2a2a2a2a2a2#La2#L#L#L#D.7a9#Da9#L.3afa2#La2bpa2bp#g#L#g#La2#L#g#La2#La2#La2#La2a2#La2#La2a2a2#La2a2a2aja2#L#La2#Lafaj#La9.E#Da9#s#D#Daw.NaY#IaYaYaYawaYawaYaYaY", +"a9a9a9a9.na9a9.na9.na9.na9.na9a9a9.7a9a9.7a9.7a9#L#L#L#L#Laj#L#Laj#Laj#Laj#Laj#L.jbp#L#L.E#L.Ea3.n#D.Nbf.Cbo.Caobf.CamaOaBaz#EaraQ#.#o.Abzay.Gana#aFaFaOamam.C.Wbna0a0b#ama0#I.N#D#M#x.CaoaZbhaBa0#IaY#Da9#s.7a9#sa9#Da9a9#Laf#L#L#ga2#g#L#Lbpbp#L#L#L#L#L.7.7.7.7#D.NaY.Cambga#a7.6#ua#b#aoa0#xbl#D#Da9.7a9#Laf#L#La2#La2a2a2a2#L#L#L#L#La2#La2.7afa9a9#D.7#D.7afaf#L#La2#L#L#ga2a2#ga2#ga2#ga2a2a2a2a2a2a2a2a2#La2#La2#L#La2#L#L#Laf#L#Lafajaf#L#Lafa9a9a9#Db.#D#DaY#DaY.N.N.N.s#D.N#D.N#D#s#D", +"aj.7aj.7.7.7.7.7#Da9#Da9a9a9a9.7a9#Da9#s#D#D.n#Da9a9.na9.7.7bj.7bp#L#L#L#L#L#L#Laj#Laj.E.Ebjb..N#MawaCaoaoama0.Cb##va7#a.Oaz#uaZaZanaz#e.6anaZaFaBaOaF.5amama0a0#xaCa0ama0a0#xaYbl.NaY#xa0#vaZ.lama0#x#Mbl#D.7#D#Dbja9.Ea9af#L#La2#L#La2bp.j#Lbp#Laj#Lbpaj.7bj.7#s#D.s#x.Wa0amamanaB.0a##va#bgamaYaY#Da9a9a9#L#L#L#Laf#L#L#L.7#La2a2#La2#L#La2#L#L#L.7a9.7a9#Da9#L.3#La2#L#L#La2bpa2#g#La2bpa2bpa2#La2#La2#La2#La2#La2#La2a2#La2.3#L#La2#Laf#L#Lafaja9a9.7#s#D#D#Da9.s.N.s.Naw#Dbj.7b..7b..7bjbj", +"#L#Laf#Lajafaj#Laf.7.7.7.7.7a9.Ea9bja9#D.7a9bja9a9.7a9.7a9.7.Ebjaj#Laj.7.E.E.7.E.7.E#D.s#xbo.C.WaCamb#a#.y.0.yaB.Gazazazbhbma#aFaFa#a#aZaBa#.5.5#SaFambgama0amam#x#xbna0a0aCa0#xaYawaY#Ia0aO.lbh#vb#bnaY#s#D#s#D#Da9#Da9.7ajaf#Laja2bp#g#L#Lbp#Lajbp#L#L#Lbj.7.7#Da9#DaY#x.CaCam.5a#aOa#a##va#a##xawaY#Da9.7#L#L.7af.7#La9#Laf#L.7af#Laf#L#Laf#Laf.7a9.7a9a9#D#Daf#L#La2#L#L#L#La2a2a2#ga2a2#ga2a2a2a2a2a2a2a2a2#La2#La2#L#L#L#L#Laf#Lafa9a9a9a9a9a9a9bj#D#D#D#D#D#D#Da9#Da9#D#s#L.7#L.7#L.E#L#L", +"#Laj#Laj#L#L#L#L.7.n#La9aja9#L.7a9#s.7#Da9#Da9bj.n#Da9.7.E#Dbj#D#D#D#Da9#Da9#Da9.N#I#x.Wam.8.5#va#aBaP.G#a.U#4.Uaza7aZa#aFaFbmb#a#b#aFa#.8ama0ama0a0a0a0a0aC.Ca0#I#x#xa0b#a0a0a0aYaY.N.N#Iambm.lbmaFaobnaYaY#Dbj#D#s.7a9a9af#L#L#La2aj#ga2bp#Lbp#L#L#Lbp#L.7.E.7#D#D#D.saY#x.C.CaC.5am#v.5a#.0#va0bn#x.N#D#D.7.7a9.7a9.7a9.7.7a9#L#L#L.7af.7#L.7#L#L.7a9a9bja9#Da2afa2#La2#L#L#L#L#g#L#g#L#g#La2#La2#La2#La2#La2a2#L#L#La2afa2af#L#L#L.7a9.Ea9.7.n.7#Da9#s#D#D.N.N.sbj#sbjb..7bj#Laj#Laj#L#L.7#L", +"bjbj.7bj.7.E.7.7.7.7a9.7a9.7a9.7#D#D#D#D#s#D#D#D#D#D#D#D#D.N.s.N.sbfbobf#Ibf#xboa0.8.5#v.yan.w.G#TabaMa8#cabalaZa#aFa#b#b#a0b#b#ama0aoa0a0#x#x.CawaYaY#Ubn#xaYaY#x#x#x.Rbna0a0amaYaY#D#DaY#UaF#GaZ#S.V#UaY.s#Dbj#s#Da9.n.7#La2af#L#La2#g#gajbp#L#Lbp#L#L#L.7bj.7a9#s#Dbl.N#x#x#x#x.C.Cam#va#a#.0aF.8a0#x#x#D#D#Da9#D.7#Da9a9.7.7#Laf#L#L#L#Laf#Laf.7a9a9.7a9#D#Daf#La2#La2#L#L#L#ga2#ga2a2#ga2bpa2a2a2a2a2a2a2a2#Lafa2#L#L#L#L#Laf#La9a9#La9a9a9a9#D.7#D#D#D#D#D.s.Nbja9.7.7a9.E#L.7.7.7.7aj.7aj", +".7a9b..7.7bjbj#D.Eaf.7#L.7af.E#L#D#D#D#D#D#D#s#D#D#s#Dbj#D.s.N.N.C#x.C.C.C.W.C.Wby#vaBaz#T#4aH#..ga8bsbr.2al#TaZaFaFb#b#ama0a0a0.Cama0#xaY#x#x#xaYbl.NaYaYaYblaYbf#x#x#xbna0a0aobn#xaw#D.sa0.t#SbmbmaOa0#U.N#D#D#D#D#Da9a9#Laf#L#L#La2#L#g#L#Lbpa2ajbp#Laj.7.7.7#Dbl#DaY.N.N#Ibf.Naw.Cao.5.5a#a##va#ama0bf#D.N.N.7#Da9#D.7a9.7a9#L.7#La9#La9#L.7#L#La9.7a9bja9#Da2af#La2#L#L#L#L#g#La2bpa2bpa2#La2a2#La2#La2#La2#L#L#Laf#L.3#Laf.7a9af.7a9a9.7a9.7#D.n#D#D#D#D#Dbjbj#Dbj#s.7.E#La9.n.7.na9.7a9.7", +"#Laj#Lafajafaj#La9#D#s#D#D#D#DaYaYaYawaYaY.NaY.N.C.C#x#IaYaY#M.namav.8.5#v.0.w.G#aau#4#4#z#3.Ga7#Z#0aM.gaTayaZa0a0a0a0#xbn#x#U#xawblawaY#D#M#D#D#D#Da9#D#sblaY#Mbl#Mblbl#DaYaYaYa0#IaY.N.NaY#Ua0.t.tbm.Fam#x.Nb.#Da9a9.7af#L#La2aj#L#L#L#L#Laj#L.7#L#L#L.7#L.7af.7.7a9.7.n#D#D.NawaYaY#x.CaCamao.0a#aB.0.taFb#.VaY#Da9a9af.7#D.N#Laf#L#L#L#L#Lafa9a9a9a9a9.7.7.7a2#La2a2a2a2a2a2a2a2a2a2a2a2a2a2#g#L#ga2a2#ga2a2a2a2a2a2#L#Laf.7#pa9a9a9#Dbj#D.N.na9a9a9b.#D#D#D#D#s#D#D#D#s#D#D.n.7#L#L#Laj#L.7", +"aja2afaj#L.7.7#L#sa9#D#D#s#D#D.N#D#D#D.N.N.N.N#DaY.N#x#xaCamb#aF#SaZanaz.Galba.4.O#aaz#uaB.0aBan#Tbz.mab.2az.5#xa0bnaYaYaYaYaYaY#DaY.NaYbl#D#D#D#D.n#D#Dbl#Dbl.Na9bl#Dbl#DawaYaYbnaYaY#D.s.N#xaCbm.Fbm.tb#aC.N.Nbl.na9a9aj#L#L#L.7#L.7#L.E#L.7#L#L#L#L#L#L#Laj#La9aj.7.7.7#D.N#D#Dbl.N#xbn.Ca0ama##va##v#vbm#vaF#x#x#Da9a9#D#D#D#L#La9#L.7af.7#L#pa9afa9.7#D#La9#La2a2#La2#La2#La2#La2#La2#La2#La2#ga2a2bpa2bpa2a2a2a2a2a2#La9afa9.na9a9#D#D#Dbja9.nbj#D#D.NaY.saY.Nbl.sblaYaY.Na9.7#Laj.7.7#L.7", +"#Laj#L#Laja9.E.7#La9.Ea9#D#D#s#Db.#D#D.Nbo.Caqaq.bbnbga#aZaS.G#q#t.HaQauaGar#a#a#vaOaF.5b#.8#vaB.2.A.1aDaka#amaYaYaYaYaYaYaY#D#D#D#D#s#D#D#D#D#D.7.7a9#D#D#D#Dbla9a9.n#D#D#D#Dblaw#xaw.N#DaYaYbnb#aF.taOb#.C#I.Na9a9.7a9a9#L.7#L#L#L#L#Laf#L#L#L.n#L#L#L#L#L#L#L#La9a9.7a9.Ebj#D#D#D.s.N#x#x.W.Ca0amamaFa##vbmaBb#bnaY#D#D#Da9bjaf#L#L#Laf#L#L#La9a9a9a9a9a9.7.7a2af#L#L#L#L#L#L#L#La2#La2#L#L#L#L#L#L#L#L#L#L#La2#L#Laf#La9.7a9a9afa9a9bj#s#D.Nbl.NblaY.NaY#xaYawaYawaYbl.sbl#M.7.E#L.7#L.Ea3.E", +".7.7.E.7.Ebj.7.7.n.7a9.7#s.N.N#DaY.N#x.Cam.5a#aZaF#SaZa7arala6ay#W#W#kbhbmaFa#.5#x#x.CaCaoamaOaB#P#obsba#uam.C.NaYaYaY#D#D#D#D#Da9#Da9#D.7#Da9a9#La9.7.7a9bl#s#Da9a9a9bla9bl#D#DaY.NaYawaYaY#IaYa0aCb#.Va0a0#U.N#D#Da9.7a9.7aj#L#L#L#Laj.7#L#L#L#L#L#L#L#L#L#L.7#L#L.E#La9.7.7.7#D#D#DaY.s#x.C.C#x#Ia0aCama#a#aZa#.8a0#xaY#Da9af.7#Da9#D.7#Da9#Dafa9afa9.7a9#La9#L#L.3#L.3#L.3#L.3#Laf#L#L#L.3#L#L#L#L#L#L#L#L#L#L#L#L#La9.7a9a9a9#D.na9bl#DaY#s#x#x#x#Ia0#I#x#xawaYblaw.NaYaYaY.7#D.7.Ebja3.7.7", +"#Db.#D#D#s.N.s.NaY.Naw.N.NaYbo#xa0b#a#bmaS#aa6.Kbaba#a.faZaFb#amb#b#ama0.C#xbf#xbobf.NaY#xao#v#u.q.qaGanamaYaY#DaY#sbl#Da9.7#L.7.7.E.7a9.E#L.7.E#L#L#La9.nbjbl#Da9a9.7a9.7#D#D#DblaY#xaYaY#IaYaY#xbna0bnbna0aCbn#sbl#Da9.7af.7a9#L#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La9.7af.7a9aj.7#D#D.N.Nbo#x.Nbl#Ia0am.5aO.0aB.0b#.CaYbla9a9a9.7a9.7a9.7a9a9a9#pa9a9a9bj.7.7#L#L#L#L#L#L#L#L#L#L#Laf#L#L#L#L#L#L#L#L#L.7#La9#Lafa9bja9#D#D#D#Dbl#DaYaYaYaYaY.C#xama0.CaC.C.C#x#xboaYaY.NaY.N#s.N#D.N.s.NaEaW", +".N.N.s.N.Nbf#xbfaCa0a0a0a0amam.8aZbhazaGau#j.e.e.6ana#.5ambn#xaY#I#x#xbo.N.N#saW#x#Ibfaw#x.5aZ.G.q.KaBam#xaY.s#D.7#Da9.7.E#L#L#L#Laf#L#L#L#L#L#L#Laj#L#L.7#Da9#Da9.7a9#D#D#Da9#D#DawaY#IbnaYaY.Naw#xbnbnbna0bna0aY#D#D#Da9.7#L.7#L#L#L#La9#L#L#L#L#L#L#L#L#L#L#Laj#L#L#L.n.7.7.7#La9.E.7#D.N.N.N#saY.N#x.Wa0.5aF.0aZ#v.5a0aY#Da9.7#Da9bja9#D.7#Dafa9afa9.7a9#La9#La9#La9#La9#La9#La9#L.7a9af.7af.7#L.7.7#L.7af.7.7a9.7#D#D#D#D.N.saYaY#x#I#xbnbnaOaoaoamaCa0a0bn#Ibn#x#x#x#x#I#x#xaYboaY.N#xbf#x", +"#x#xa0.CaCa0aoa0aFa##v#vaZ#uaZaZarazazanbmaF.5a0.C#x#x.N#D#D#D#D#D#D.Nblbj#D.N.sbf#x#I.CbgaBaz.2baazaF#x.n.7#Dbla9.7.7#L#L#Lajbp#L#L.E#La9#L.7#L#Lbp#L#L.7#L#D.E#L#L.E.7.7.7.7#Dbj.N#xbna0#I.N#DaYawbna0bnbn.V#U#D#D#D#D#D.7a9.7#Laja9#Laj#L#L#L#L#L#L#L#L#L#L#L#La2#L#L#L#Laf.7#L#L#La9.7#s.N.N.7#D.N.N#x.CaCaq#vaZaBa#aF#xaYbl#D#D#D#D#D#D#D#Da9a9a9a9a9a9.7.7#L#La9.7a9a9#L#L#La9a9a9.7a9.7#L.7af.7af.7a9.7.7#D#D#D#D#D.N.NaY#x#x.Ca0b#ambgamaOb#aCa0.C#I#xaYa0a0#xbn#x#xbna0aCa0a0a0ao.CaCaq", +"aoa0aoaO.5.8aFaO#u#uaSazaG#3araza#a#amam.C#x.s.Nafaf#La9bjaWbfbf.N.NaY#xawaYaYaY#x.C#xaCamaB#aaT.GaF.C#D#La9#L#D.7#Laj#L#Lbpbp#Lajaf#L#La2#L.j#Lbp#L#Lbpa9.7#Da9.7#La9#La9.7a9.7#Dbl#xaCbn#xaY.s#D.N#Ubnbnbnbna0bl#D#D.7a9.7#L.7a9#L#L#L#L#L#L#L#L#L#L.7#L#L#L#L#L#Laj#L.7#L#L.7a2.7#L.7.7#D.N.Nbj#D.s.N.N#I.Ca0aFaZaBaZ#vam#xaY.7#Da9#D.7#Da9#Dafa9afa9.7a9.7a9#L#Lafa9#La9#L#La9af.7a9a9a9afa9a9#L.7.7a9#L.7af#D#D#D.N.N.NaY.s#xama0.8aF#Sa##va0a0a0#xbnaYaYawbn.WbnaCbnaCa0aCaFb#aO.5aOaF.8aF", +"aZ.ya#amaoaFaB.Taka6aGaraBaFa0#xbnaYaYaw#D#Da9#D#L.Eaf.7a9aj.7.7aja9.n.7#D#D.sbfaw.N.Wam#v.w.Ga7.C#IaY#D#s.7.n#Laja2#L#ga2#ga2#g#L#Lajafaj#L#L#Laj#L#L.na9a9.na9a9a9.na9a9#L.Ea9a9#saYaY#x.C#x#xaYbn#x#U#x#xa0aCbn#D.7#L.7a9a9#paj#L#L#L#L#L#L#L#L#L#L#L#g#L#L#L#L#L#L#L#L#L#L#Laj#Laf.Ea9.7.7a9#Da9#D#D#DaY.NawaY.pa#.0.0a#ambn.N.N#D#D#D#D#D.7a9af#L#L.7#L#L#L#L#L#La9a9.7a9#Da9a9#Da9bja9bj#D#D#D#D#D#D#D#D#D#s#D.saY#xbn.8aFaZaBaZa#aFama0aqaC#x.N#MaY#x.Ca0aFb#b#amamb#.5aFaoaOaFaOa#bmaZ.y", +"aZa#aOa##v#vaB.T#4#z#a#uaFa0aC#xaYawaYbl#Da9#Da9.7a9.7#L.7a9.7a9af.Ea9.7#s.N.N.N#D#Ia0.8a#bkaraZ#IaY.s#D#Da9.7#Lbpa2bpa2#g.j#ga2ajaf#L#L#Laja2#Laf.7#L.7a9.7#Da9afa9a9a9a9.7a9#La9#Dbl#x#x#I#x#xawaY#U#xbn#Ia0.CbgaYa9#L#L#Lafa9#Laj#Lbp#Lbp#Lbp#Lbp#L#ga2#g#La2#L#L#Laj#Lbpaj#L#L.7#La9.7.7a9.7.E#D#D#D#D.saY.N#Ua0#va##S.0aOamaY.N#D#D#Da9#D#Dafa9a9af#L#L#L.7af#Laf#La9#Da9.7a9a9.7#D#D#D#D#Da9bja9a9#D#D#s#D.N.N#x.Ca0aoaF#vaZbmbmaOa0.W.C#x.C#xbl.NawaY.CamaCamaCamamambgamb#.5aOa##Sa#.yaZ", +"#vaFaO#v.ybmaZazbaauazb#a0#x#xaYaYaY#D#sa9#D.E.7aj#L.7aja9aj#L.7aja9.n.7#D#D.sbfaY.WaCam#u#3a7aFaYaY#D#D.n.7ajafaj#gaj#g#L#g#Laj#L#Lajaf#Laf#Laj#L#L#La9a9#Da9a9.na9a9.7.n.7.7a9.na9aY#x#x#x#x#xaYaY#x.R#IbnbnaC.t.VaYa9.7aj#L#L#Lbp#L#Laj#La2#L.j#La2#g#g#g#gajbp#Lbp#L#L#L#Lbp#L#L#L.7a9.7.7.7a9#D#s#D#DaY.NaYaYa0ama#a#.yb#a0.N.N#D#Dbj#D#Da9a9a9.7a9bja9.7.7a9a9a9#D.7#D#D#D#D#Da9#Da9#D#D#Da9a9.n#D#DblaYaY.8b#.8aOaFaOaFaOb#bgama0#x#x#x.N#U#x#I#x#x#xaoama0bna0bnaoam.5amaOaFaFaF#va##vaZ", +"aOaOaF#va#a#az#faS#ubmb#a0#xaY#Dbl.n#Da9a9.7#L#L#L#L#L#L#L#Laj#L#L.Ea9a9#s.N.N.s#x.Wb##v#Ebk#va0aw#D#D#Da9#L#L#Lbpa2#L#ga2#ga2#g#Laf#L#L#Laj#Laf#L.7#L.n.7#D.na9a9a9a9a9a9.7a9#La9#sbl.NaY#xaYaYblaYaw#x#x#x.C.C.Fb#bnbl#Da9.E#L#Laj#L#Lbp#Lbp#Lbp#Lbp#L#g#L#g#L#Laj#Lbp#Lbp#L#L.7#L.n#L#L.7af.7#Da9#D#D#D.NaY.saY#Ibn.5a#a#aFambf#x.NaY#D#D#D#Da9a9a9.7a9.7.7#L#D.nbj#D#D#D#D.Na9b.bl#Daw#xaYaYaYaYaY#Ia0a0aoam#uanaBa##vb#bgb#bnbnaYaYaYaYblaw#x#x#x#Ua0.Wa0a0.W.C.Wama0ambg.5aFaFa##va#a##va#", +"b#ao#vbmaB#uaz.Gb#b#ama0#xaw.N#D#Da9a9a9.E#L#Laj#L#Laj#L#L#L#L#L.Ea9.n#D#D.N.N#x#Iao.5#u.Oazam.C#Dbl#sa9ajaf#La2.jbp.j#L#gajbpaj#Laj#Lajaf#L#Laj#L.n#La9a9a9a9#D.na9a9.Ea9.n.7a9a9#DaYaw#x.sbl#D#sblaYbl#I#x#Ua0b#bgb#bn#D#D.7#Lbj.7.7.7.7.E.7.7#L.j#La2#g#L#La2bp#L#Laj#L#Laj#L#L#L#L.7af.7.7.7a9.7#D#D#s.Nbl.NaYaY.CaCby#va#.8#xbfaY.N.s#D#Dbj#D#D#D#D#D#D#D#D#D#D#D#D.Naw.NaY#D.NaYaw#x#xa0aoamamaFaF#v.0bbanaBaZ#vaFb#am#x#xaYaYaYaY#IaY#D#D#x#x.Ca0avamama0.C#x.Ca0aoamaFa##uaZaBaZ.y#S.0.y", +".8aOa##Sazar#ua#a0am#x#x#x.N#D.7.na9#L#L#Laj#Lbp#L#Lbp#L#Laj#Laj#La9.7.n#D.sbo#x.Wao#v.f#f.ya0bf#M#D#Da9a9#L.ja2#La2bp.j#L#ga2a2#Laf#Laf#Laj#Laf#L.7aj#Da9b.bl#Da9.na9a9a9a9.7.n#D#MaYbfaYaY#Da9#D#D#Daw.NaY#x#Ib#b#bg.VaYbl#s#L.Ebj.7b..7.7.7.7#Lbp#Lbp#L.jbp#L#L#Lbp#Lbp#Lbp#L.7aj#La9.7a9#L.7a9#s#D#D#DaY.Naw.N.s.CamamaOa#a#.W#xbf#xaY#D#D#Da9#Da9#Da9bj#Dbj#D.N.Naw.N#x#xbfaYaw#x.Ca0a0aFbma#aBaZbbaZ#uaZ.0bgb#a0am#x#x#xaYblaY#MaYaY#Dbl#DaY#xaCamamaoaqaC.C.Wamao.5a#a#.yaSazaZ#uaZ.yaOaF", +".5aF#Sbhaza7aFa0a0bn#xaw.N#D.7.7af#L#L#L#La2#L.j#g#Lajbp#Lbp#Lbpaja9.n#D#s.N#I#I.WaF#uarazaF.W.Nbl#D.n#Laj#La2a2aj#g#L#g#L.jbpaj#Laj#L#Lajaf#Laj.7afa9.na9#D#D#Ma9#p#s#D#sa9.na9#DblawaYaw#Da9a9#D#D#saY.Naw#x#xaCb#.VaC.V#xaY#Dbj.nbja9bj#s.7.7aja2#L.j#Lbp#La2ajbp#L#L#L#L#L#L#L#L#L.Ea9.7.7a9#D.7#D#D#D#DaY.N.N.N#I.CaoaFa#aB.C#x#xbf#x.N.NaY#Dbl#D#D#D.N#D.NaY.saYaY.C.W.C.W.Caqa0.8a#aZaBan#u#uan#Sa#b#ama0bnaY#xaYaY.NaY.N#s#DaY#DblaY#Dbl#I#xam.8.5aOam.Cama0aoaFbmaBbha7#a#ea7an.y.yaF.8", +"bc.y.wara7b#a0aoaYaYaYbl#Da9.7.7#Laja2#L#g.j#g#ga2bpa2bp.jbpaj#Laf.Ea9#s#D#I#I.C.WaOaz#EaZb#.C.N#sbla9afafaj#L.j#L#g#L.jbpa2bpa2#Lafajaf#L#L#Laf.E.7.n#Da9#D#sbl.n#D#M#s#D#s#D#s#DawaY.NaY#Da9.n#D#D#D#DaY.NaY#I.CaCam.Vb##U#xawa9bj.7b..7bj.7bj#Laj#Lbp#La2#L#Lbp#L#Lbpaj#Lbpaj.7#L.7af.7a9.7.Ea9#D#D#s#D.N.saYb..Nbf.Wa0aF.0#ua0.W.C#Ibfaw.NaY#saY.N.N.N.N.N.N.N#xaY#I#x.W#x.C.Wam.8aZ.waz#ubha#aFaFb#ambn.bblawaY#MaY.N.s.N.N#D#D#D#DaY.saY#I#xaCam.8aFbyaoaCaoamama#a7azararaya6.G.Gaz#u#v.8", +".J.far.laobn#xaY#D#sa9#D.7a9aj#L#L#L#L#L#Lbp#Laj#g.j#ga2#L#L#Lbp.na9.7#s.N#I.Caobh#EaBaCbn.s#IaY#Ma9.n.7#L#L#L#Laj#Laj#L#Laj#L#L#L#L#L.7aja9.Ea9bl#M#D#M#DblaYblaYawaYaYawaY.NaYawaY#Mbl#D#D#D#Da9.n#D#s.Nbl.saY#x.RaY.N#xa0aFbm#IaYaY.N#s.7.E#L#L#La2#L#L#Lajbp#L#La2#L#L#L.7#La9a9a9.7#L.7.7.7#Da9#D#D#DaY.N.NaYaY#Ia0.5.8a#an.0.5bn#xbl.N#x.C#Dbl.sblaY#I#x.W.R#Ibna0aOa##vaZazararaz#ua#aFaO#x#I#x#Ibn#x#xaYaYaY#DblaY#Dbl#Dbl.NblaY.NaY#x#xaoaobnaY#xaCa#.0aOaOaOaFaFaFaFaF.l.Ta7bh.G.G#q#e", +"araza7aFam#xaYawa9#Da9a9a9#L#L#L#L#Lbp.j#L#La2#Las#ga2#gbp#Laj#L.7.7.n#D#M#xaCaFbk#iaOaC#xblaY.Na9a9a9afaja9aj#L#L#Laf#Laf#Laf#Lajafaja9#L.7a9.Ebl.n#D#M#DawaYawbn#Ubn#I#x#I#xawaYawaYaY#D#s#D#D#D.n#D#DaY.s#x.N#U#IawaY#xbna0aF#x.W#xaw.N#D.7b.afajaf#L#Lbp#L#La2#L#L.E#L.7a9.7a9a9.na9.7a9.7.7#D#s#D#D#D.Nbl.Naw.N#x.CamaF.0.y.yaF.CaYaw#x.Caq#Ibn#x#x#x#xbna0aoamaF#vana7.wazaZan#uaZaOamamamaY.RaYaYawaYaYaYaYblaY#D#Dbl#DaY#DblaY.N#xaY#I#xbnbnawaYbnam#va#ama0a0aoamamaoam.taFbmaZ.6ar.2#4", +".faBb#a0aY#xbl#Da9a9#D.E.7#L#L#L#g#ga2#g#g#g#g#g#g#g#ga2#L#L#L#L.n.7a9a9.N#Iam.8#f.Gb#bn#UaYaw.Na9.na9.7af#Laf#Lajafaj#Laj#Laj#Laf#Laf#L.na9a9#D#Mbl#M#DawaYaw#x#I#U#x#U#Ibn#I.NawblaY#s#D#D.N.sa9#s#D#M.NaY.s#xawaY#D.s#D.Nbnama0a0aC#x#xbl.NaY#La9#L.E#L#L#L#Laj#L#L#La9.7aja9a9a9a9#D.n.7a9.7#s#D#D.Naw.N.NaY#Dbl#I#xaC.5#va#aBaFa0aC.C.Caoa#ama0a0ambgaF#va##uan.w.wan.wanaZ#vaFb#ama0a0#x#xaYbfaY#xaY.Nbl.Nbl#D#D#Dbl#D#D#D#DaY#saY.N#x#x#xaYaYaYaY#Ia0bg.5bn#xbn#xbna0a0amaCb#ao.t#SaZar#a", +"aFama0aY#xaY#Da9#D#Da9a9#L#L#L#g#ga2#gbpa2bpa2bpa2#ga2#gbpajbp#L#Da9.7#saYaY.W.5#EaraFa0#U.NblaYa9a9a9ajaf.E#La2#L#L#L#Laf#Lafaj#Lafaja9#D.n#D#D#s#DblawaY#I#x#Ibnbn#I#U#x#IaY.N.Rawbl#D#D#D.s.N#D#D.saY.saY#I#x.N#s#s.7bj.N#xa0aob#amaoa0#I#xaY#D.na9.7a9bpaj#L#L#L#La9.Ea9#D#D#D#D#D#D#D#Dbj#DaY.Nbl.N.N#x#xbfaw.NaY#xama0aOa#aBa#bgama0.5a#.0aFaOaF#SaZan#ua7bhazaBbhaBa#aFb#b#aCbnbn#x#xaYaw.Nblaw#D#Dbl#D#D#s#D#p#Da9#D#D#Dbl#DaY#x#xaw#x#xaY.NaY#x#x.C.C.CawaYaw#xaw#x#Ibn#x#Ua0a0amaFbmbm", +"bn#xaYaYaY#Ma9af.7.n#L#L.7#L#ga2bp#ga2#g#ga2#ga2#ga2#L#L#L#L.7.7#s#D#s#D.N#xamaoaS.OaBam#xaYaw.N.na9a9#Laf#L#La2ajafaj#L#Laj#Lafaf.na9a9a9bl#D#Mbl#saYaw#x.b#x#x#U#Ibn#I#xawaY.saYaYbl#D#D#D.N#D#M#sblaw.N#I#x#I#D#sbj#Db..N.N.Camamb#am.pa0a0bn#D#Da9.7.7aj#Lbp#L#La9.7a9a9#s#D#MaY#D#Dbl.saY.N.N.N.s#x#xbf#I#x.NaY#I.CaCamam#vaBbm#SaF#va#a#aB#ubh#uanaBaBbmaZ.FaFb#b#a0aCbn#I#x.RaYawaYawaY.N#D#D#D#D#D#D#D#Da9#Da9#Da9#Da9a9.saYaw.Naw.N#xaY.N#x#xaY#xaC#xaYblaYaYaYaYaYaY#xaYblaY#Ua0a0.Vbn", +".NaY#D#Da9a9a9#La9.7.7#L#L#g#L#ga2bpa2bpa2bp#gbp#g#Lbpaj#L.7.Ebjbj#D#Dbl.s#xaoa##TalaBam#x.NaY#Da9a9a9af#L#L#L#L#L#Lafaj#Laf#Lajafa9a9#p.n#D#M.NblaYaYawaY#x#I#x#Ibn#U#Ibn#I.NaYawaY#sbl#saY.s.N#sbl#s.NawaY#I#x#I.N#D#s#D.N#Ibnaoa0#Ia0a0b#aoamaw.N#Da9.7#L#L#L.7.n#L.7#s#DaW#DaYaYaY#I.NaY.N.N#I#x#xbf#x.C.C.C#x#I.Ca0amama#a#a7azaza7aZaB#uan#uan.laZ#SbmaFaF.V#Ubn#UaYaYawaYaYawaY.NaY.N#D.N.n#Da9#D.n#D.7a9#Da9bj.nbja9#s#DblaY#D#x#xaYaY#x#M.N#x#I#x#x#xaY#Dbl#DaYaYaY#xaw#x#IaYaYaY.baYaY", +"#D#D#Da9a9#Lafaj#L#L#Laj#Lbp#ga2#g#ga2#g#ga2#ga2#g#L#Lbp.7.7.7#D#D#s#D.saY.C.8aB#4#zaZa0#xaYaw#Da9.na9#L#L#Laja2#Laj#L#Lafaj#L#L#p.n#pa9blblaYaYawawaYaY#I#x#x#Ibn#Ibn#I#x#U#x#IaYblaYaY.Nbl.saY#s#Daw#Dawbf#I#x#I#x.s.N.s#xa0aC.C.Ca0.CaCa0ambg#x.N.s#D.7aj.7aja9.7a9#sa9#D.s.NaYawaYaYaY.NaYaYbf#x.C#x.W.C.Caqavaqa0ao.5#va##vaS#W#aazazanbm#SaFaFa#aFaOaFbgb#aCbnbnaw#x#x.N.N#sbl#D#s.N.N.N.N.7.7.7.7.7.7a9.7.7.7a9.7a9.7.7.7aY#DawaY.NbfaY#x.NaY#x#x.C.WaY#D#M#DaY.NaY#x#x#x#x#x#xaYaY#Da9#D", +"a9.7.7.7afaj#Laf#L#L#L#La2#La2#gbpa2bp#g#L#g#L#g#Lbp#L#L.7.7.7bj.s#D.NaY.Nao#v.QaD#za#am#xaY.N#D#pa9a9ajaf#Laf#L#Lafa2#La2#Lafaja9#p.na9#MblawblawaYaY#I#x#I#x#x#Ubn#Ibnaw#x#IaYaYawaY#M.saY.N.s#D#M#D.s.Naw#x#I.W#x#I.s#x.W#Ua0.Cava0.W.Ca0a0a0#I#IaY#D.7#L#L#La9.E#D#D#D.N#D.sbnbn#x#x#x#x#I#x.C#x.W.Caqamavam.C.5.5aFbya#.y.0.Gakar#e.TaBaFaF.5aFaOamb#a0aoambn#Ua0.C.Ca1bfbf.Nbl.N#D.N.N.N.Na9aj.7af#Laf#L.Eaf#L#L#L.7.n.7.n#DaYblbfaYaY#x#x.s#xbo#x.C#x.Na9#D#DaY.N#x#IaY#xama0bn#x#D#D.7#L", +"#Laj#L#L.7#L#L#Laj#L#Lbp#g#g#g#La2a2a2a2#ga2#L#L#L#L#L#L.7a9.7a9#Da9.s#Iama##u#.bA.faFaYawaYaYbfa9a9afa9#L#L#Lajafajafafajaf#Lafafafa9a9bl#Dbl#s.RawaYaY.R#U.R#Ubn#Ubn#Ibn#U#x#x#M#D#D#Daw#D#s#DaYaw#s.n#D.s#I.Caoaoam.8.5aO##am#va#byaFbcaqav.CaFaOaFaC#x.N.saW.N#D.N.s.N#I#xbn#U#xaw.R#x#xbna0#U.Vamb#b#aFa#bmaBaZ#vaZ#v.0aB.yaFaO.5bgamamamaobn#U.C#Ua0aCbnbnawaY#MaYblaY.saY.7.n.7.na9.E.7.7#La9#Laj.7#L.7af#Lafaja9a9a9#Da9.Nbl.Naw#x.s#xaY#x#xbn#x.baYaY#Da9.na9#DaY#x#x#x#IaYaY#sbla9.na9", +".7af.7#Lajaf.7#L#Lbp.j#L#g#L#g#ga2#ga2#g#La2#L#Laj#L#L.7a9.7.n.7#sbl.NaYaoa#azbAa6a7am.RaYaYaY#xafa9a9af#Laf#L#L#Lafaj#Laf#Lafajafaja9.n#D#M#DaYaw.R.RaY.baY#UaY#Ubn#UaYbn#x#I#x#M#D#M#D.s#D#s#D.s#Dbl#s#s#MbfavaCbgaCaoaC.5ao.5#vaOaOam.8.8amavb#b#aoaC#xaw.N.N#s.s.NaYaw#xbnbnaCa0a0a0amamaoaFaFaFa#.yan#u.G.6aBaBbmaO.5b#.5b#amaoa0a0amaCa0a0aY#xbn#Ibn#Ibn#IblawaYaY#M.Nbl.N.n.7a9.7a9.7afa9.7aj.7#L#L#L#L.7#Laf#La9a9#D.7#D#s#DaYaY.NaY#x#xbn#x#x#U#xaYawaYa9a9a9bl.NaY#x#x#xaYaYbl#Da9.7a9", +"#L#L#L#L.7#L#L#L#La2#L#L#ga2#g#L#ga2a2a2#ga2#L#L#L.7#Laf.E.7.7#DawaY#I.CaoaBazbaaSa#.VbnawaYaY.N#pa9afa9a9#Laja9af#Lafafajaf#Lafa9#pa9blblbl#MaYaYaYaw.R#x#UaYbnaw#x.R#I.R#I#x#xaYaw.NaYaw.N.N.s#D.s.saw#I.CaoaoaO.F#vaOaO.8#vbc#va#aO#vaO.5.8aCaFaO#SaOaOao#I#x#MaYawbnbnaCa0b#a##va#a##vaZaZ#uazazbh.Galay.2alaFaOaFamaCa0aC.C#I#x#x#I#x#xaY#IaY#I#x#I#x#x#I#xbl#D#M#D#D#s#D#D.n.7.n.7.n.7.7.Eaf#L#L#L.7aj#L#Lajaf#La9.7a9a9.7bl#DaY.NaYaY#x#xaCa0#x#xbnawaY#D#Da9#D#DawaY#x#I#xaYaY#D#Da9a9a9", +".7#L.Eaf#L#Laj#L#L#L#g#L#g#L#g#g.ja2a2#ga2bp#L#L#Laf#L.7.7a9.7#Dblaw#x.W.5az#aalaZb#a0bnaYaY#DaY#p#Da9afa9a9#L#Laja9aja9#La9aja9.na9#sbl.n.NblaYaw.R#xawbnaY#U#U#x.R#Ibn#I#x#I#xawaYaY.saY.s.N.N.s.saw.W.Waobc.yaBaB#u#S.y.y#va#aB#u.Qaz.waBaZ.yaZaB.0aBaB#vaO.5bn.Vb#am#Sa#aB#u.wbhazazbh.waz.GarazaSaz#a#a#a#ea0a0#Ubn#x#I#x#xaY#MaYblblawbl.NblaYaYaY#U#IaYaY#D#M#D#s#D#D.n#D.7a9.7a9.7a9.7a9#L#L.7af#L.7af.7af#L#L.na9a9bja9#D#D#DawaYbfaw#xbna0#x#UaYaYaYbl.n#Dbl#DaY.N#xaY#xaYaY#D#Da9a9.7", +"#L#L#L#L.7#L#L#L#g#ga2#g#g#ga2bpa2#ga2a2#ga2#L#L.7#Laja9#La9#sa9.NaYaY.Wambk#zaraFamambnaYblaYbl#Dbla9a9.7a9.7a9a9.7a9a9.na9a9a9#Da9bl#DblawaY.N.RaYbnbnbn#Ubnbn#I#U#x#x#x#I#x#Ibl.Naw.NaYbf#I#x.s#x.WamaO.y#uazal.U#z.U#T.G.GaP#Tal#z.U#3al.Ualal#T.G#T.G#e.w.wa7#ua7a7aS.G#e#TaS.w.wanaz.wazaS#vaOa##va#aFaFam#UaY#xaYaY.NaY.s#D#D#D#s#D#D#D#s#D#saY.saY.NaY#sbl#D#M#D#D#Dbj#D.n#L.E#L.E#L#L#L.E#L#Laj#L#L#L#L#Laf#La9.7#Da9#D#D#DblbfaY.N#xaY.C#I#x#xaYaYaY#Dbl#D#D#Dblaw.NaYaYaYaY#D#pa9#La9", +"#L#L.7aj#L#L#L#L#g#L#gbpa2bpa2#ga2asa2#g#La2#L#L#L#L#La9.7.7#D#sbl.N#Ia0#vaz#z#eam.Va0bnaYaYaYaY#Dbl#D#Da9a9.7.7a9a9a9.7#Da9#sa9bl#sbl.sbl.NblawaYbn#Ubn#Ibn.C#Ubn#x#U#x#I#x#IbfaYaw.NaY.N.saYboaYaCam.y#u#aau#4aH.4#..4aHbrbw#0.2bw.2aT.2ay.YaH#4#zal.o#T#Tal.U#aar.G.Ga4aPa4a4.ya#aZ.ya#a#a#aOa0bnaCbnaCbn#I#xblaYaY.s#D#sa9#Da9.na9a9a9.na9a9#D#D#D#D#s#D#s#D#D#s#D#D.n.7.E.7.n.7#La9#La9.E#Laf#La9#L.7#L.7afaj#L#La9a9.n#D.7bl#D#DaY.NaY#x#xbn#x.R#xaYaYaY#DaY#Dbl#D#D#DaYaYaYaYaY#D#Da9a9a9", +"#L#Laf#L#L#L#L#La2#ga2#g#ga2#g#La2a2#ga2#ga2#L#L#L.E#L.7.n.7a9#D#D#I#xaoby.w#zaSa0aCa0bn#x.Rblblbl#D#D#D#D.7a9.Ea9.7a9a9.n.7a9a9#sbl#DblaYaw#x#x#xa0#xa0a0a0aCa0#I#U#x#I#x#I#xawaY#x#I.Nawbf#x#IaCbgaBaza6aT#P.uaybaay#3#aar.Gazaz.Gazaz.Gar#aa6.w#u#uaBaZaB#uazazazaS.0#S.0aFa#am.5aoa0am.Wam.C#I#x#x#I#x#I#xaw.N.N#s.N.N#Dbj#s#D#D.7.7.7#D#s.7a9.Ea9a9a9a9a9a9#s#p.na9bj#Dbjbj#Lajafaj#L#L#Laf.E#L#L#L#Laj#L#Laf#Laf.7a9bja9#D#D#DawaY#x.s#xaY#x#x#x#IaYaYawaYbl#D#D#DblaY#s#DaYaYaw#D#Daf.7af", +"#L.7#L#L#L#L#L#L#L#gbpa2bp#g#L#La2#ga2a2#g#L#L#L#L#L.7a9#L.7#D#saY#x.C.8#va7albh.Ca0a0bnaY.RblblaY#Dbla9#Da9.7.7a9a9a9a9a9#D.n#Dbl#Dblaw#DaY#x#IbnbnaCa0#Ua0aCa0.CaC#x#I#x#I#Ibf#x#I#x#I#x#Ibo.C.paOa7#aay.K.K.K#Ear.faZa7#uaBaB#vbmaBaZa7an.TaZaOaF.FaFaOb#b##SaZ#va#aOama0.W#xavam.C.W.C#xaw#x#x#Ibfbf#xbf.N.N.saYaY#D.N.E#D.7a9#D#s.7#s#D#D#sa9.7a9.7.E.7.Ea9#s#D#s#D#s#D.Ea9.Eaf.E#Lajafaj#L.7#L.n.7#La9#L.E#Laf#L.na9#D.7a9#Dbl.NaY.NaY#x#x#x#U#x.RaYaYaYaY.N#xbl#D#D#D#DblaYaYaYbl#Da9a9.7", +"#L.3a2a2a2a2asa2#ga2a2#ga2a2#ga2#ga2#ga2a2#ga2#L#L#Laj#L#L.7b..7#x#I#x#xaC#uar#e#Sa0.CaYaY#DaYaYa9#p#pa9a9a9a9a9#s#D#sbj#D#D#D#D#saYaY.Naw#x#x.Ca0aoa0a0aCbn#Ibnaw#U#U.CaCamaCaCaw#Mbn#UbnaCbgaoaZanaral.2alaPan.y.0.yaB.0a#a#a#.8aF#v.0#u.0#v.5aCam.8amaOamaoam.F.tbg#x.C.C#xaY.NaY.saY.Nawbf.N.N.N#D.s#D.N#D.Nbl#sbl#s#D#D#D.7.Ea9.7a9.7a9.7.7a9#s#D#D#Da9#D#D.na9.na9.na9a9.na9a9a9.naf#Lafaf.E#L.7#L#L#L#L#Lafaj#L#L#La9.na9bl#MblaYaY.baYaYbl#Dbl#DaYawaYaY#M#D#DaY#Dbl#D#DaYblbl#D#p#Dafa9", +"afa2#La2a2#gaa#ga2a2bpa2#L#g#L#ga2a2#g#L#g#La2#g#L#L#Lbpaj#D.7bjaY.N.N#Iao#u#aayaFa0bnaYaYblaYaY#pa9a9blbl#D#M#D#Da9#Da9#Da9#s#Dbl#D#MaY#x#x#x.Wama0a0aCa0a0amao#Uaobg.8am.8amama0bgb#.8aFa#.0aZ#ua7#uaS#uanaBa#.8aFaOamaOamaCamb#ao.5a#.0#vaF.5a0a0aC.Ca0.Wa0am#ybgaC#xbf#I.NawaY.NaY.saY.NaYaw#D.s.N.N.N.s.N.sbl#sbl#D#D#D.n#D.7a9.7.n.7.n.7.n#D#D#s#D#s#Da9#Daja9a9.nafa9aja9aja9aja9af#L.n#L.7af.Eaf.E#L.7#Laf#Lafaf#La9.7a9blblblawaYaY.baY#Mbl#DaYaYaYaYaY.NaY#Dbl#s#Dbl#D#MaYa9bl#D#Da9a9", +"afaf#La2a2a2#ga2#ga2a2#ga2a2#ga2bpa2a2#ga2#ga2#g#L#g#L#L#Lbj.Ebjaw#D.s#xaoana6abaOam#xaYaY#DaY.N#pa9#p#sbl#Dbl#D.n#D.na9.na9a9a9#sbl#DaY#I#x.Wbnb#bgb#amamao.8aFamaO.yaZ#u#u#S#vaZan.yaZaZ.6aSa4aBaZbma#aF.5ama0aCa0.CaCa0a0a0.Wbna0a0aoam.5aoa0#I#x#xbn#I#x#x#x.p.Vbn#x#I.NaYbl.N.NaY.N.NaY.N.NaYaY#DawblaY#DaYblaYblawaY.s#D#D.na9a9a9a9a9a9a9a9#D#D#Da9a9bja9a9.nafa9.Ea9a9.na9.na9.n#Lajaf#L.n#L.7#L#L#Laj#Lajaf#L#Laja9a9a9blblblaYaYaYaYaYbl#D#MblaYaYaYaYbl#saY#D#D#D.NaYblaYbl#D#p#Dafa9", +"afajaf#La2a2a2a2a2#g#L#g#L#g#La2#ga2bpa2#La2bpa2aj#Lbp#Lajbj.7#s#D#Daw.C#v.GaTaD#vb#a0bnawaYaYaYaYblaYaYaYawaYaw#D#D#D#D#D#D#s#Dbl#saYaw#xa0a0a0bgamaOamaOa#a#a#.yan#u.G.Gaz.w.w#u#uan#uan.w.6.GaFaOaFaoaobn#I#x#I#x#I#x#x#I#xaY#x#I#xbn.CaC.Ca0#x#x#IaY#xawaYaw.R.bbnawblaYaw#DaY.saY.Naw.N#M.N#D#s#DaY.N.saY.NawaYaw#Dbl#DaYaY#D#s#D#s#D#s#Db.a9#D#s#D#s#D.n#Daf#L.na9aja9aja9afa9aja9afaf.7af.7#La9aj.7a9#L.7afaj#Laf#La9a9a9.na9blblaYawaYaYblbl#Dbl.saYaYawblaY#D#Dbl#DblblaYblbl#Dbl#Da9a9", +"a9a9#L#L#L#L.jbpa2a2aja2#ga2#ga2#L#ga2#ga2#ga2#L#g#L#L#L#Lbj#s#D#saw#Iaq.y#3aH#Pa#bga0#UaYaY#xaYaYawaYaYaY#x.N#x.Naw.Naw.N.NaY.s#DblawbnaCamb#bgaFbma##S.0aB#u.yaz.w.waz.w#u.0a##SaFbma##Sa##Sa#amamaoa0#x#IaYawaYblawaYawaY#M.NaYaYawaY#I#x#x#U#x#x#xawaYaY#D#MaY#x.b#x#UaYaY#Daw#DaY#D#D#D#D#Dbl#Dbl#sblblbl#MaY.RaYaYawaY.s.Nbl#Dbl#D#Dbl#Dbl#D#s#D#D#D.7#D#Dajaf#La9.na9a9.na9.na9a9.n#Lajaf.E#L.7#La9aj.7#Lafaf#Laf#La9.Ea9a9#p.nblblaYaYaY#Dblbl.NblaYaYaY.Nbl#D#D#D#DaY#DaYblblbla9#Dafa9", +"a9afa9ajafbpa2#L#ga2bpa2#L#g#La2bpa2a2bpa2#L#ga2#L#Lbp.7aj.7#Db.bl#x.Waobb.2a6ak#vb#a0#x.RaY#xaYaYaY.R#x#x#x#I#xawaYaYaYaY#xaw#xaYaw.Ca0b#aF#vaZaZana7.waz.G.Ga7#uaBaB.0a#aFamambnbnaCa0a0aCa0a0aoa0#IaYaw.Nbl.NaY#MaYbl#DblaY#DawaY.Nblbl#xbn.Ca0#I#xaY.N#Mbl#DawaY#Ibn#Ubn#I#x#D#D#D#D#D#D#s#D#D#saY#Dbl.s#DaYblaYaYawaYaYaYblbl.nbl.nbl.nbl.n#D#D#D#s#D#D#s#D#Lafaja9#paja9aja9af.naf.naf#Laf.7aja9aj.7#Laf.7afajaf#Laja9a9a9afa9#Dbl#sbl.Nblbl#sblaYaYaYaYaY#DaYaY#Dbl#DaYblaY#MaY#Dbl#Da9a9", +"a9a9afa9#L#L#La2#ga2#La2#ga2a2#ga2#ga2a2#ga2a2bp#L.j#L#L.7#sbj#saY#Iaq.y.waXaraS#vb#a0#UaYaYawaYaYaYbn#x#U.Cbn.Caqaqavaqavaqaqaq#Ia0ao.5#vana7bh.Ga6al#aarbkaz#uaOamam.Cao#x#IaY#I#x#I#x#I#x#xawbn#xaw#D#D#D.sbfaY.N.saY.saY#D#D.Naw.N#saY.s.Cava0am.C#IaYaY#D#M.N#x.bbnaCa0a0#x#s#D#s#D#Da9#Da9blblbl#Mblblbl#MaYawblaYaYawaY.saYaYaYaYblblblbl#s#D#D#D#D#s#D#Daja9af.nafa9.na9.na9a9.na9#Lajaf.7af.7#L.n#L.E#Laf#L#Laf#La9a9.7a9a9a9a9#D#D#M#Dbl#Dblaw#DaYawaYaY#saYbl.Naw#DaYawblaYblbla9a9af", +"afa9.7a9#L#L#L#L#La2#g#La2bpa2bpa2#L#g#L#g#L#ga2#Lbp#Laj.7bj.s#D.Waoao.waX#aazaSaFa0#xaYaYaYaYaYaYaY#xa0a0.Caoa0.8.8.5ao.5amaoamaCaoam#v#ubh.G#eayaTay.Gaza7aBa#aoaC.CaC.CaYaY#Mbf#x#xaY#xawaYaY.NaYaw#D#s.N#xaNaw.Nbl.Nbl.N.N#s#x.NaY#D.NaY#xaqa0aoa0#x.NaY#MaY#x#xbnbn.Vamaoam#D#D#D#s#D#sbja9.N#M.Nbl.N#M.NblblaY.RawaYaYaYaYblawblaYawaYawaY#D#s#D#M#D#D#D#Daf#L#La9a9.naf#La9af.n#L.nafafa9aj.7aj.7#L.7#L.Eafaj#Laf#La9a9a9aja9a9.na9bl#D#D#DblblaYaYaYaYaYaY#DaY#DaYblbl#DaYaYbl#sbl#Da9a9", +".7a9a9.7a9a9.7a9#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Lafa9a9#D#sbl.s.Waoan.G#Ea7aBaZ#vaFama0aCamamamb#.Va0aC.VaO.0#uaSaSazazan.Gak#a.Iay.Iar.Xar.Gazaz#uaB.yaO.5aoa0#Iaw.NaY.saY.N.N#D#s#D.N.N.N.N.s.NaY.NaY.NaY.saYa9bl#sbl#sbl.nbl#D#s#DawaY.saYawaY#x#U.CaC#xbf.N.s#I#x#Ia0aoamambf#I.N#D#DaYaY#Dbl#D#Dbl#D#Dbl#D#M#Dbl#Daw#D#M#DaYaYawaYblblaY#D.na9a9.na9.najaf.nafajaj#L#L#Laj#L.E#L.n#L.E#Lajaf#Laja9aja9.7a9#Lafafaj#L#Lajafa9a9a9bja9#D#D#sblaY#MaYaYaYaYaYaYaYawaYaYaY#xaY#UaYaYbl#Dafa9#L", +"a9bja9a9.7a9a9.7#L#L#L#L#L#L#L#L.E#L#L#L#L#L#L.7aj#L#sa9#saY.saYbo.5.w.GazaB#San.l#vbgama0#xama0ama0a0bgaFbmanazak#aar#eazaz#aa6.e.e.XaraSazbhan#S#v#vaFaoa0aC.Cawaw.Naw.Naw.Naw#Da9#s#D.s.N.s.N.NaY.s.Naw.NaY.Nbl#saYblbl#Dbl#D#D#DaY#D.NaY.N#x#Ibna0a0a0.C#I#x#x#I#xaCamaFaOamaYaYaYaY.N.Nawbl#s#Dbl#D#sbl#D#Dbl#Daw#Dbl#Dbl#D#Mblblblaw#Dawbl.na9.na9.na9a9.naf.n#L.7aj#Laj#Laja9aj.7aja9aj.7#L.Eaf.7#L.7af.7afaj#L#Laf#Laf#La9.7a9a9b.a9#D#DaYblaYaYblaYaYaw.RaYbnaY#U#xbnbna0aYaYaYbl#Da9a9", +"a9a9a9a9a9a9a9a9#L#L#L#L#L#Laf#Laf#Laf#L#Laf#Lafa9a9a9#D#D.Naw.N#x.8.w#e.lbma#az#uaZaFa0aC#x#x#x#x.WamamaF.y#ealayaG.G#eanaS#e#a.I#a.X.JanaZ#Sa#aOambga0.W#x#x.saY#saY.NaY.NaY.N#D#D#DaY.NaYaY#xawaYaYaYaYaY.saY#Dbl.N#M.Nawbl#D#M#D#MaYawaY#x#xbnaCam.8.5amamaCa0a0aob#aOaObm#v#x#I#x#xaY.N.NaY#Dbl#Dbl#D#Dbl#D#Dbl#Dbl#Dbl.sbl.N#Daw.NblaYblaYa9.n#p#sbl#Ma9bl.na9.na9.7.E.7.7.na9.na9a9.Ea9.n.7aja9.na9.Ea9.7af.7af#Laf#L#Lafa9a9a9#Da9#D#D#DblaYblaYawaYaY.R#xawaYaYaYbn.Cbn#xaYaYaY#D#D#D#D", +"a9a9a9a9a9.7a9a9a9a9a9#Laf#L#L#La9.7.na9a9a9a9a9a9a9#s#D#s#D.Nbl#I#v.G.G#uaF#van#uaZ.8a0bnbnawbnavam.5#van#ealbra6#a#e.wana7#e#e.fakaz.TaBa#a#aFa0aoa0.Wbn.s#M.N#saY.sbl.saY.saY#s.Naw.Naw.N#I.N#x#I#x#x#IaYaY#IaYawaYawaYaY#xawaYaYaY.NaY#x#x#Iamb#aFa#a#aOamamamaob#b#aF#Sbmbmaoa0#x#xawbl#D#D#Dbl#D#sbl#Dbl#sbl#D#D#sbl#D#D#D#Mbl#DawblaY#saY#Mbl#Dbl#M#D#M#M#Da9#sa9.n#D#D#sa9.Ea9b..na9.7a9.na9.n.7.7a9.7a9aj#Lafaj#Lafaj#La9.Ea9.7#D.E#D#DblaY#MaYaYaYaYaYaY.R#x.R#xbn#U#xbnbnaYaYbl#Dbl#D", +"a9a9a9a9afa9afa9af.nafaf#Lafa9a9afa9a9a9a9.na9.n#D#D#D#D#D#Daw.N#I.y.GazaZb#aOa#anaBa#aoa0aCbna0a0.5.8an.G.2.K#P#q#e.6anan.wazakazbha7aZaFam.8am#xaC.C#I#IaY#D#saY#saY.NaY.NaY.NblaYblaYaY#I#x#x#x#x#I#x#x#x#xaYaYbn#xbn#U#x.baY#x.s#x#x#I.Ca0.CbgaF#vbma#a#aOambgamb#aoaFaFaOaF#va0#x#I#x.Na9#D#s#Dbl#D#Dbl#D#Dbl#Dbl#D#Dbl#Dbl#DaYblaY#Dawbl#DaYaY#MaYawaYawaY.nbl#p#sa9#sa9#D#s#D#Da9#D.n#D.na9.na9a9.n#Da9#D#Lajaf#Laf#Laf#La9a9a9#Da9#Da9#DaYblaYaYblaYawbnawaYaYaYaYbn.Cbna0.Cbn#xaYaY#Da9", +"#pa9a9a9a9a9a9a9a9a9a9a9a9a9a9.na9a9a9a9a9a9#Da9#D#s#D#s#DaY.NaYaCaZ.6az.0aOaF#van#uan#vamamamamaOa#analba.g#P#P#a#Tan.y#uaZaza7an.laZa#bgama0.C#U.C#U#I.N#s#s#D#s.Naw.N#M.NaY.saYaw.Naw#x#x#x#U#x.baYbnaw#xawaY#Ubn#U#x#Ubn#xbn#xbn#Ia0a0a0aCa0b#.t.tbma#aFaFb#amamamam.Vb#b#.V#Sbga0#x#xbl#D#Dbl#Dbl#Dbl#s#Dbl#D#M#D#Dbl#sbl#Dblaw#DawblaY#DaYawaYaYaY#Ibn#Ibn#Mbl#s#D#D#Db.#D#sa9#s#s#s#D#s#D.n#D.na9#D#D#s#Dafafaf#L#Laf#L#La9a9.7.nbja9bj#DblawblaYaYaYaYaYaYaY#x.R#x#xbnbnbnawaYaYbl#Da9a9", +"a9a9#pa9#pa9#pa9a9a9a9a9a9a9#pa9a9.n#p.nbl.n#pa9#D#D#D#D#D.Nawbfbn#vazaS#SaF.8#vaZ.6aBa##va##v.0a7.faG#PaD#V.Kay.XazanaB.0#vbm#SbmaZ#vamama0aC#xa0.W#x#x#I.N#D#s.N#M.NaY.NaY.saYaYaYaYaYawbn#x#x#x#xbn#Ibn#x#x#xbn#xa0bna0bnaCbn#xa0#x#xbn.Ca0am.V.Vb#aOaFb#bgamaC.C.CaCa0a0aCa0a#aFbgbnaY.N#D.7#D#M#D#Dbl#Dbl#D#D#Dbl#D#Dbl#D#D#M.NblaY#DawblaYaY#Ibn#Ibn#Ubn#IaYawaYawaYawaY.s#D#s#Da9#sa9#s#D#sa9#Dbl#s#D#D#Daj#L#Lafaj#Lafaja9a9a9#Da9#D#Da9blaYblaYawaY.R#xaY#M.RaYawbna0#IaYbl#Da9a9afafa2", +"#pafa9afa9a9a9a9#pa9#pa9afa9a9a9#p#p#D#pbl#p.na9#D#D#D#DaY.NaY#Ia0#v.Gaz.0#vaF#vanaz.w#u.0#u.waP#A.f.Xa6.Ia6akaSanaZa#aFaoaFaOaF#SaFaFama0aC#x#x.Wa0.W#Ibf.N#sbj#M.N.saY#s.NaY.NaYaYaw#xaY#x#I#x.R#x#x#x#xaYbnaY.Cbnbn#xbn#x#xbn#x#I#xbn#xa0.Ca0.pb#b#aFb#aFb#.V.C.C#x.CaCa0#xa0.FaFaOa0aYbl#D#sbl#D#Dbl#Dbl#s#Dbl#D#M#Dbl#D#M.Nbl#DaYblawaY.saY#UaYbn#x#U#x#Ubnaw.Rawblaw.NawaY#s#s#s#s#D#s#D#sbl#Mbl.n#Dblbl#Dafaj#Laf#Laf#L#La9.7a9.7#s.7#DbjblaYblaYaYaYaYaYblaY#xaY#x#xbnaYbla9#p#p.naf#La2", +"#L#La9a9a9afa9af.j#L#La2af#La9a9#sa9#s#D#DaYaYblawaYaY#I#xbn.Ca0#Ubg.laz#uaBanaBa6#a.Xa6#aak#ebh#Sbm.Fa#aFb#amaoa0aCa0aoa0amb#.8b#aoa0aCa0#xaC#x#I#xaY.N#M#D#D#s#D#sa9.7a9.7.n.7#D#D#D#s#DaYaYaY#sbl#Mbl#Dbl#D#Dawbl.Naw.NaYaYawaYaYaYaw#DaYbl#DaY.RaYaYbnbna0a0#Ubnbn#x#x#x#I#xa0bgaBb#a0.s.s#L.NaY.N.saY.N.NaYbl.NblaY#I#x#x#x#Mbl#MaYaY#x.b#x#xbn.Wambgamamam#Ua0bnaCa0a0amaoaw#x#x#x#I#Iaw#Mblbl#sblbl#D#D#Da9#pa9a9a9a9#Laf.na9a9a9a9#paf#pa9a9#MaYaY#x#xbnaw.RaYbna0a0a0aY#D#pa9a9#La9#L#L", +"#L.7#Laf.7a9.7a9#Laf#Laf#La9.7#Da9a9blbl.Nbl#DaY#xaYaY#xaCa0amam.t#uazar#e#T#a#zacbaayaraS#uaZa#aFaFaFb#amaoama0a0a0aCa0a0ama0amaoa0a0a0aC#xaC#xbn#I.saY.s#D#sa9a9#sa9a9.Ea9.7a9#D#s#DaY#D#D#s.Nbl#D#D#D#D#Dbl#DaY#DaY#Dblbl#DaY#D#Dbl#DaYbl.NaY.baYaYaYa0#Ia0a0#x#UaY#x#U#x#xaYbnam.FaOa0#x.s.7aY.saY.NaY.NaY.sblawaY.N#x#Ibn#xaYawaY#xawbnaY#U#x#IaCa0aCbg.paobn#U#Ua0aCaCaCb#aCaC.C.Wa0.C.baYawawaYblaw#D.s.Nbla9#p.nafa9ajafa9#pa9#pafa9a9a9#pa9blaYaY.b#xaYaYawa0#xa0a0#UaYbla9a9a9a9#L.7#L", +"#Laf#La9.7af.7af#L#Laja9.7a9a9bj#D#D#D#MaY.NaYaY#MaY#Ua0amam.5.5aSal#PabbrayaTaTaGara7aZaZaZbm#vb#amamaCa0#x.C#x#I#x#x.CaC.CaC.5b#aob#aCamaC#xbn#I#xaY.s#D#sa9#s#Da9.Ea9.7a9.Ea9#D#D#D#D#s#D#D#D#Dbl#D#M#Dbl#sbl#DaYblaY.saY#DaY#MaY.Nbl.sbl#D#DaYaY.baYaYbn.CbnbnaYaYbn#x#x#x#xaYbnam#Sama0.N#s.NaY.Naw.Naw.NaY.NblaYaw#x#x#x#IaYaYawbl#x#I#xa0#Ia0aC.pbgb#bgb#.pa0.V.pb#.Vb#bgbm.taOaFaFao#U#x.bbn#IaYaYaY.NaYbl#Dbl#Da9a9a9a9a9a9a9a9a9a9.na9a9a9bl#DblaY#x#xaY.R#xaCama0#x#xbl#s#Daf.7af.7#L", +"#L#L.7a9.7a9a9.7af#La9a9a9#D#D#D#D#MaYaY.N#x#I#x#xaY#x#xamaO.0bbaT#PaD#VaTaRar#eaBaZbmaFaFamb#ama0aCama0.C.C#x#I#xaY#I#x#x.W.CaCaOaFaob#aoamaC.C#I.b.NaY#s#Da9.7.n.7a9.7.n.7a9.7#D#D#D#D#D#D#D#D#D#M#D#Dbl#D#Dbl#D#D#sbl#Dbl#D#D#D#D#Dbl#D#Dbl#DaYaYaYbn#x#x#x#IaYbnaY#IaY#xaY#IaYbna0aBbmao#x.NaY.saY.NaY.NaY.saYaw.NaY#x#I#x#xaw#x.N#I.C.CavaCaFaOa#aBa##vbm#Sbm.taFbmbmaZaBbh#kbhbhaZ#Sa#b#a0aCa0a0#U#xaYaw.Nbl#Mbl.n#D.n.7a9a9.na9a9#sa9#Da9a9a9.n#D#D#xaY#xawaYbnama0ambnaYblbl#Da9#Da9#L.7", +"a9a9a9afa9#La9a9.na9a9bj.n#D#D#saY.NaY#x#x#x#x#x#Ubnambga#.0#u#uaH#4#aazanaBaZbm#SaFaOb#bgamamama0.C.C.W.C#Ibf#xbf#I#x#x.C.Cao.8a#aOaOamaoa0.Wa0aY#xaw.N#D#s.7a9.7.n.7a9.7#L.7aj#D#D#s#D#D#D#s#D#D#Dbl#D#Dbl#D#Dbl#D#D#Dbl#D#Dbl#D#Dbl#D#D#D#DblaY.NaYawaY#xbn#xaYaYaYbn#x#x#x#x#U#xamaBaBaBa0.Caw#xaY#IaY#xaY#x#x#x#Ibn#xa0.Wa0.CaoamamaCamao.5azaz.G.Gar#e.G#a#eaz#ear#e#a.X#a#jaGak.faSaZ#vb#ambga0a0a0#I#x#xaw#xblaY#Da9#Da9#D#D#Da9#Da9#Da9.na9a9#D#DblaY#x.Rbna0.Cama0#x#xbl#Dbla9#D.7.7a9", +"a9.7a9.7a9.na9.7a9.7#s#D#D#D#D.N#x#x#x#I#x#x.Ca0amaOa#.yanaBan#u.6aBa#amb#a0b#amamb#amamamaoa0aoa0aCambn.C.C#x#Ia0.C.CaCamao.5aO#vaFaOb#aoa0a0.WaYaw.NaY#s#D.7.n.7a9.7.n.7a9.7a9#D#D#D#D#D#D#D#Dbl#D#Dbl#D#Dbl#D#D#Dbl#D#D#D#D#Dbl#D#D#D#Dbl#D#D#sbl#D.NaYaYaY#xaYaYaY#xaYaYaY#xaYa0a0bmaz#uaOam.C.W.C.C.C.C.W#x.W#xamamamaoam.5aoaF#v.y.0#uaB.wal.2ayal.2aya6aTa6alaR.2ayayaT#P#t.K.e.X.GaSaZaBaFb#amaoa0a0bna0aYaYawblbl#sa9bj.n.7#D.7a9bja9#Dafa9afa9bl.Naw.N#U.CaCaFaoamama0aYaY#D#D#Da9#L.7", +"a9a9.na9.7a9a9a9a9#D#D.N#s#DaY.saY#x.C.Ca0aoamao.0aZaBaZaB.0aBa#amb#a0aCaC.pa0a0aob#ama0am.C.Ca0.5b#amaCam.W.C.CaCa0ao.5amaOaF#vaF.8amamama0aqa0aYaw.Naw#D#Da9.7.n.7a9.7.7af.E#L#Da9#Da9#Da9#Da9#Da9#Da9#Da9#Da9a9a9afa9afa9afa9a9a9a9a9a9a9a9a9bl#D#Dbl.N.NaYaYaY.RawbnaY#x#I#xawa0b##Sazbha##vamaqao.Cavamao.5ao.5.8.8aF#v.0.yaZaB.waza7az.G.G#aararar.X#a.Xar#eazazaralalalayayaya6.Ial.XaSaS#va#aFaO.5aC.CaC#xbnaY.N#M#D#D#D.7a9.7.Ea9.7.7.Eaf#La9#D#D.N.NaYbnbnamamb#aoama0aYawblaY#D#D#D.7", +".7a9.7a9a9a9.Ea9bja9#s.NaYaw.NaYa0.Wa0aCamamao.5a7az.waZa#aFaFaFamamaC#xbn#xam.5amamamaoama0aoa0aOaFaoambgamaCam.8aFaOaFaOaFaF#vaFaFaOb#aoamaCamawaY.Naw#D#D.Ea9.7a9.7.n.7.7a9.7#D#D#D#D#D#D#D#D#D#Dbl#D#Mbl#D#Ma9a9a9a9a9a9a9a9.na9a9.na9a9.na9#D#D#D#DblaY.saYaYaYaY#xaY#xaY#xaYbnaObmazaZ#Sa#.8.8.8.5am.8.5.8a##va#.ybbbb.w#uazarar#a#eazaSaz#ua7aZaZaZaZ.Tbm#SbmbmaZan#uaSaz#aalaR.2.IaGaraSaZaBa#aFaoama0aC.R#IawaYbl#D#D#Da9.7.7a9.7.7a9.7af#L.na9#D#s.N.NaYaCamaoaFamama0aYaYaY#D#D#Dbj#D", +".N.N.N.N#D#D#D#DawaY.Nbf#xaqaqavamamaF#v.0#u.w#e#va#b#.5amamamaF#I#x#x#x#Ia0#x#x#x#I#x#xa0ao.5amamaoaFa#a#aBaZaZ.TaBaZ#SaFaFaF.5ao.5aoam.C.W#x#xaYaY.saY.N#s#D#Dajafaja9a9a9.7a9#Da9bja9#D.7#Da9#Dbl#Dbl#D#Dbl#D#Da9.7a9.7a9a9bja9#Da9#D#D#Dbl.Nbl#Dbl#D#D#Dbl.NaYaYaYaYaYawaYaY.Nbfa0b#bmaBana#bma#bm#u.6#T.oaR.Gararal#aalalal#Taraz.6#uan.0.0b#.8b#aob#aoambgamam.8aoamaO.8aFaBbhaz.Gar.X.X#abhazan.TaZbmbma#aCa0#xaYbfaY#s#D.s.N#D#D#sa9.7.7#s.7.7.7a9a9#D.7#DaYam.5aOa#amambf.N.N#s#D.NaYbf", +"aYaYaY.saY#s#D#D#D.s#x.Wao.8aq.5.yaB#uanaBan#uanaFaOamaob#aoamaobn#x#U.Ca0.C.C.Wbna0a0aoaF.5#va#.ya#.yaBaZaBbh#u#SaBaZaOa#.8aFbg.5aoamaobn.Cbn#x.sbl.NaY#D#Da9#Daf#L#La9.7a9a9.7#D#D#D#D#D#D#D#Dbl#Dbl#DaY#DaY#D#Da9a9.7a9#D.7a9a9a9a9#Dbl#D#D#D#D#D#D#D#D#D#D#DaYaYaYaYaYaYaYaY.N#x#xbgaFaZ#ua#bgaF#vanaz#ealalazazaz.Garaz#q#ebhananaZaZa#a#a#aCama0a0aoa0ama0aqaoamamaFaoam.8a##SaZ#uana7aSbhaBaZaZbmaOaFaOaFb#ambnbn#IaY.NaY#D#D#D#D.7.7b..7#D#Da9.7#s#D.n#D#MaY#Iama#aFaoa0#x.saY#D#Dbl.N#x", +".Nbo.N.N#xbf#xbf#x#Ia0a0aOa#aBaz.GaP.wan.ya#a#a#aCamambgama0a0a0.Wa0.C#xa0a0a0amamaoaFama#a#.0#vaSazbh#uanaBanaZa#aOaFaO.5aOaqamaoama0.C.C#Ibn#IaYaYaw#D#s#D.E.7#Laf#La9a9.7a9a9.7a9.7a9.7a9.7a9#D#D#D#D#Dbl#D#Da9.7#Da9.7a9.7#Da9.na9a9#D#Dbl#Dbl#Dbl#Dbl#D#D#p#D#D#D#D#D#D#D#D.N#DaYa0b##SaBaZamamaF#v.0#u.6.wan#u#uaSananaZaBa##vaFaFaoamamama0a0aCa0bna0#xaCa0a0.Cao.CaoamaoaF.5aOaFaFa#aFaFaF.5aoamaFamaFaob#bga0aobnbn#x#x#M#Dbl#s#Da9.7a9.s#D#D#D.N#DaY.N#Daw#xa0aoaF.5b##IaYaY#DawaYaw#x", +".N.N#Ibf#x.W.C.W.5#v.yaZ.G#z.Kba.o#e.w.0a#a##va#amamaOaFaOaFbgamama0amaoam.8.5.5a#aFaFa#aBan#ubh#a.Xar.Gbh#uaZaBaO.5aoamamaC.C.Wa0a0.W.C#I#x#x#xaY#saY#D#D.7af.7af#L#La9a9.7#D.7#Da9.7a9.7a9bja9a9a9a9a9a9a9a9afa9.7a9.7#L.7a9afa9a9a9a9a9#Da9#D#Dbl#D#D#D#p#D#D#D#D#Dbl#Dbl#Dbl.s.NaY#xa0a#aB.0amamamaFa#a#a#a#aBaZaZaZ#va#.0a#b#b#bgamambn.Cbn.Wa0.C.C.C.Wa0.C.C.C.Wa0.Ca0.Ca0aoamama0a0bn#Ubn.Wa0.Ca0.W.C#U#xb#.Vb#b#a0ama0a0aYaY#D#D#D#s#D#saYaY.s.NaYaw.NawaYaY#Ia0amamaOam.C#x#xaYaw#x#x.C", +".C.W.Caqaq.5.5.5anaP.o.Ya8#obs.g#TaS.wan.0#va##v.0bm.0a#.0a#a#.yamaoaFamaOa#aOa##va##S.0aZ#uaSaz#aaG#a.Gaz#uan#u#vaOam.8aCaq.W.C.C.Wa0#x#x#x#IaYawbl#D#sa9a9#L#Lajaf#L.na9a9.7a9.7a9#D.7#Da9.7a9a9a9af.7afa9.7a9.7af#L#Laf#La9.7afafa9.na9a9bl#Da9.na9a9a9a9a9afa9.na9a9.7a9a9a9.N#D.N#M#xaOaZaBamaOam.8am.8a#.5a##va#aoaFaFamamaoa0a0bnaC#x#x#x#x#I#xaY#xaY#xaY#I#x#x#x#I#x#I#xa0bn#I#xawbl.Nbl.Naw.NaY.NaY#xaYaCa0ao.Vbgb#b#b#awbnaYaYblblaYbl.NawblaY.NaYaYaYawaY#x#Ia0bga#aOamaC.C#xa0.Wa0am", +"aoaFa#aOa##v.y.ya4.2#4.4a8aDaTaRanananaZaBaFaFaF#v.0#v.0#v.0#v.0amb#aob#amam.5aFamaOaFa##v.0.yaZaz.wanazaz.w.w.waO#vao.5aoamaCam.Wa0#x#xaw#xaYaY#D#M#Da9a9.E#L#L#L#Laf.7a9.7#Da9.7a9#L#L#L#L.7#L#L#L#L#L#L#L#La2#La2#L#L#L#L#L#Lafajafafa9a9a9afa9a9a9a9a9afa9a9a9.7a9.7a9a9.7a9.N#D#D#DaYam#SaZaF.5aFamamamamaoaFamamb#amamaoa0a0bnaC#x#x#xaY#IaYaYaYaYaYaYaYaY#xaY#IaYaYaYaYaY.s#xaY#D#D#D.7.n#D#D#D#M#D.N.saY#xa0a0amamambgambnbn#UaY#x#xaY.saY#x.NaYaw#x#I#x#x#I#xa0a0aF#vaZ.5a#amaCa0am#v.5", +"an#uan#uan#ua7#uaz#a.Gaz.GaSaZaZ#vbybca#.5aoamb#.5b#amb#amb#amb#aCama0amamaob#amaCa0a0aoaFaFa#byaOby#v.yaZaB#u#ua##v#S#v.5ao.5aoa0#I#xaY#x#IaYaw#Dbla9#s#L#L#La9#Laf#La9#La9.7a9#L#L.7af.7af#Laf#L#L#L#L#L#L#L#Laf#Lafa2af#L.3#Lafafafafa9afa9a9#Laf#Laf#L#Laf#L#L#L#L#L#L#L#L#L.s#D#s.7#DaCa##ua#.0.5.5amama0a0amaoamaCamaCa0#xbn#x#x#x#xawbfaY.N.N.N.s.N.N.s.Nbl.Nbl.NaY.NaY.Nbl#D#D#s.7.7#D.7a9.n#p#Dbl#DblaY#x#x#xbnbnama0am.Vama0b#aCa0#x#xbn#I#x#x#xbnbn#x.Ca0a0aCam#van.wan#vbyaF#va#.yan", +"alal.Ga7bhaZaZaZa##Sa#aFb#ao.5.8aFaFamama0amamaobn#Ubn#Ua0#Ibn#Ua0a0a0aCa0amamao#x#xaCa0aoamao.5avam.8.8#v.yaB#u#SaBaB#u#S#vaO.8amaCbn#x#I#xawaYbl#sa9a9#La9.7ajafaj#La9#L.7#Da9.7#Laf#L#L#L#L.7a2#ga2a2a2a2a2a2#La2#L#La2#L#L#La2af#Laf.na9a9a9af#Laf#La9af.7af#L#L#L#L#Laj#L#L#D#D.7#s#D.CaBbhbb.y.0aOama0aoa0ama0ama0bnbn#xaYaCbnbn#x#xaYaY.Naw.NaY.NaY.NaY.NaY#DaY#M#Dbl#M#D#Da9.7a9#Dbjb..7afa9.na9bl#DaY.N#Ibf.W#xaC.Ca0amamb#b#a0ama0ama0#xbn#x#U#x#U.C#UamaCama0ao.0.w.6.wan.yan.yan.waP", +"#q.6a#aF.5aCa0a0bnbna0aCa0amb#am#U.Vbnbn#xa0.C#x#x.NaY.NaY.N.N.N#D#s.NaY.NawaY.N#M.s.N#x.C.Wamaq#UaCaCb#bgaOa##vbg#v#v#u.w#uaZ.yaO.5aoama0.RaYaw#D#D.7.n#Laj#L#L#L#La2#La2#La2#g#Laf#L#L#L#La2#La2#L#La2#La2#L#La2af#L.3#Laf#Lafajaf#La2#La2#La2#L#L#Laf#La2#L#L#L#La2#L#Laf#L#La2#La9#D#x#xaoaO.Xbha#ama0#x#x.CaC.Ca0aC.C#x#IbnaYaYawaYaYaYaYaY.N#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D.7.E.7.7.7af.7.7aj#L#L.7.E.N.N.NaY.N.N.N.NaY.NaYbl#IaYbna0aoaFaOamaoamamamaFaF.5b#aOa#a#aZ#u#a.2.waP.w.w.waZan#u", +".GanaB.5a0a0#xaCbn#Ibna0a0a0amam.Va0bnbn#x#x#I.C.NaY.Naw.N#s#D#D#D#D#s#D#D#D#saY#D#DaY.saY#x.W.Cbn#Ua0aCaoamaOaFaob##v#uaB.y#vaOa#aO.5bga0#U#x.R#D#D.n.7.7#Lbp#L#La2#L#g#L#g#La2#L#L#Lafa2a2#La2#L#La2#La2#La2#Lafa2#L#La2#La2#Laf#L#Laf#Laf#L#L#Laf#L#La2#La2#La2af#Lafa2#L.3#L.j#La9#DaY#xa0#v#aa7a#b#a0bn#x.C#x#x#x#x#xbn#x#x#IaYaYaYaYaYawaY#D#D#D#D#D#D#D#D#Da9#D#D#Dbj#Da9a9#La9af.E.7a9#Laf#Laf.7a9#D.N.N.saY.Nbl#DaY#D.NaYaYaY#xa0b#.5aFbga#aFaFbma#.ybm#vaZ#SaBan.G#q.2.w#u.6#uan.y.0.0", +".6#u.0b#a0#x#xa0bnbn#x#xbn#Ibn#x.RawaY#x#I#x#xbfaYaw.N#D#D.7.7.7a9#D#Da9#Da9#D#Da9a9#D#D.N.N#x#x#I#x#Ia0ao.8am.8aCa0bg#v#vaOb#aoaFaOaFama0a0#Ubn#s#D#Da9.E#L#Lajbpa2#ga2a2aja2#gafa2#La2#La2#La2#Laf#La2#L#Laf#La2#Laf#Laf#Laf#L#Laf#L#Laf#La2afa2#La2af#La2#L.3#La2a2#L#L#L#L#La2#La9#s.N#xa0bg.Xana#aFamam.C#xbn#xbn#x#x#x#xbnaYaYaYawaYaYaYaY#Da9#Da9#Da9#Da9.7#D.7a9.7a9a9.7.7.7.7.7a9#L.7.n#L#Laja9a9#D.saY#D.N#D#D#D#D.saY#DaYaYa0a0amb#aFbm#SbmaBaB#ubha7aB#u#uazaz#Tal#q#uanaB.0a#.0a##u", +"azaBa#aobn#x#x#x#x#x#Ibn#xaY#xaYaYaYaYaY.NaY.NaY#D#D#D#D#D.7a9.7#sa9a9bja9.7#D.Ea9bj.n#D#D.NaY.N#MaYaY#Ia0aoaoam#IaCa0ao.5ao.CaCbg.5b#aoa0aC#xa0aYaY#s.7a9#Lbp#La2bpa2#L#g#L#ga2#Laf#L#La2#La2#La2#La2#La2#La2#Lafa2#Laf#L#L#L.3aj#L#La2ajaf#L#La2#L#La2#La2#La2#La2#La2a2a2afa2#La2#L#DblaY#IamazaSaBaFama0#x.C#xaY#xaY#x#U#x#xaYaYaYaYaYaYaY#D#D#D#Dbj#D#Dbj#Da9a9a9.7a9a9bja9.7afa9aja9.7af.7#Lafa9a9#D#D#D#D#D#D#D#D#D#D#D.NaY#I#xbnaoamam.5a#bma#aZaZaZaZ#uaZanaz#q#TaR.o#q#uaB.0a#.0#uaZ#u", +"an#vb#a0#x#x#xaYaYblaYaYaYaYaYaYaYaYaYblaY.N.N.sbl#D#Da9#D.7a9#L#D.7#sa9.7a9.7#Da9a9#Da9a9#s#D.Naw#Daw#xaCa0.C#x#U#xaCaoaCa0#Ibna0a0aoa0aCa0a0#UaY#M#D#Da9.7#L.7a2a2#ga2a2#ga2#g#La2#La2#La2#La2#La2#La2#Laf#L#Laf#Lafaj#Laf#L#Lafa2af#L#La2#Lafa2#Laf#La2#La2#La2#La2#L#La2#L#La2#Laj#Dbl.NaY#UaZ.TaBaFam.C.C#xaYaYaYaYaYaY#x#xawaYaYaYaYaY#Dbl#D.Ea9a9.7a9a9.7#D.7#Da9bja9.7a9a9.n.7a9a9a9.na9a9a9a9.na9a9a9#D#D#D#D#D.7#D#D#DaY#x#x#xbna0aCamaFaOa#bma#bmaBaZaZaB.6.Gal.o#e.GazanaBaZ#u#u#uan", +"#vaFama0awbnaYaYaY.NaY#D#DaY#D#M#Dbl#s#D#D#s#D#D#Dbl#D.n#Daf.E.7a9a9.7a9a9a9a9a9.7a9.7a9.7a9a9a9#D.n#D.N#x#I#I.W.C#I.Caoam#U#xaw#Ia0#I#x#x#I#x#IaYaY#Dblbja9a9#L#La2bpa2bpa2#La2#Laf#Laf#La2#La2af#L#La2#La2afa2#Laf#L#Lafaj#Laf#L#L#La2#Laf#La2#L#La2#La2#La2#L#La2#La2#L#La2#L#L#Lafa9#sblaY#xb#bm#SaFambn#xaYaYaYaYaYaYaYaYaYaYaYaYawaYaY#Dbl.7a9bja9.7a9bja9#L#L#La9.7a9a9.7a9.7a9a9.7a9.7a9a9a9a9a9a9a9a9a9#D#Da9#D#Da9#Da9.N.NaYaY#x#x#xaYa0ama0am.5aF.5a##vaZan#TaR.Gazana7.wan#uaZan#uaZ", +"b#a0#xaYaYaYaY#x#DaY#D#D#M#Da9a9#D#D#D#D#Da9#D#p#Da9#D.7a9.7#L#La9a9a9.7#L#L.7a9.na9a9.7af#L#L#L#La9.7#s.N#I#x#x.C.CaCa0.W.W#xawaYawaYawaY.NaYaYaYawaY#sbl.7#D.7#L.ja2#ga2#ga2#g#La2#La2#Laf#L#L#La2af#L#L#L#Laf#Lajaf#Laf#Laf#Lajafaf#Laf#L#La2#Laf#Lafa2#La2#La2#L#L#L.3#Laf#La2#L#La9a9#D#MaY.b#yaFbgam#x.N#saYaYaYaYaYaYaYaYaYaYaYaYaYaY#Dbla9.7#L#L.7#L#L#L.7af#La9#La9#La9afafafafa9a9a9a9a9.na9a9a9.n#pa9.n.7a9.7a9.7a9.7#D#D#D#s#DblaYblaY#x#xaCa0aCa0amaOaZ#u#q.G.6#uaBana7azaZaZaZaZa#", +"a0a0a0aYblaYaY#xaYaY#Dbl#Da9a9af.7.7#Da9a9a9a9a9a9a9.n#Da9.7#L#L#La9.7af#L#Lafa9.7a9#L#Lajafa2aj#L.7.n#D.N#xbo#I#x.Waq.8aoa0#I.Nawbl#sbl#DaY#saYawaYaYbl#D#Da9a9#L#Lbpa2#L#g#La2#Laf#Laf#La2#L.3#Laf#L#Lafaf#Laf#Laf#L#Laf#L#Lafaf#L#Laf#Laf#Lafa2#La2#L#La2#Laf#L#L.3#L#L#L#L#L#L#L#L.na9a9blblbn#Hbga0#xaYaYa9blaYblaYblaYblaYaYawaYaYaYaYbl#Da9a9a9a9a9a9a9a9#L#L#L.7a9.7a9a9#La9a9a9a9af.nafa9#pa9#pa9#pa9a9#Da9#D.7#Da9bja9a9.7a9a9a9#D#Dbl#D#saYaY#x.Cbn.WaF#San.Ga4aZa#a#aZ#uanaZaBa#bma#", +"bnaYaYawaYaY#M.N#D#D#D#D#D#D#Da9a9#D.nbja9.7a9.7a9.7.7a9#La9a9a9.7a9#L#L.7af.7a9#Laf#Lafa9.7a9a9#L.7#La9a9#DaY#Ua0#UaCa0#I#x#I#I.N#s#D#D#sa9#D#Da9#D#s#D#Daw#DaYajaf#L#L#Laf#L#La2a2a2#La2#La2#L#La2a2a2a2bpaj#Lajaf#Lajaf#Lajafaja9ajafajaf#L#Lafafafafa2#L#L#La2#L#L#L.3#L.3#L#La2#L#Lafa9.na9aYbnb#b#am.C.NaWa9bj#D#Dbj#D.N.NaYaY#DawaY#DaY#D#D.7a9.7a9.7a9a9#Laf#Laf#Laf#L#Lafafaf#La9#D#D#D#L#Lafajaf#Laf#L#L#L#L#L#L.7.7.7a9a9.7a9#D#D#D#DaYaY.N#x#Ia0.Ca0aF#vaF#vaOb#aob#aoaFaBaZ.0a#.5am", +"#U#x.RaYaYaYbl#D#D#D#D#s#D#Da9#D#D.7#Da9.7a9bja9.7a9af.7a9a9.7a9af.7a9af#L#L#La9a2afaj#L#La9.7a9aj#L#La9.nblaYaY#Ia0aC.W#x#I.N.s#D#s#D.n#D#D#D#sa9a9a9#Dbl#D#D.Na9a9a9a9a9#La9#L#Laf#Laf#Laf#Laf#Laj#L.7aj#L#L.7afajafaf#Laf#Laf#Laf#L#Laf#L#Lafafafaf#Lafa2#L#L#L#La2af#L#L#L#La2a2af#L#La9bja9.Rawa0.8a0.C.Nbj#Da9a9#Da9#D#DaY#DaYbl.Nblaw#Dbl#D.7a9a9.7a9a9bjaf#Lajaf#L#Laf#Lafafafa9a9#Da9#D#Laf#Laf#L#L#Lafaj#L#L.7#L.7af.7#La9a9.7#D#D#D#D#D.NaY#x#x.C.CaoaFaFaOaOamamamamaCaF#v#v.0#vb#am", +"bnbnawaYaYaY#Dbl.n#D#D#Da9bja9bj.n#D.7a9#D.7a9a9a9.7a9a9#La9a9a9#L#L#L#L#Laf#L#La2a2a2af#La9a9a9#L#Laf.7a9#D#IaY#UbnaC#xaY.N.saY.s#D#Db.#D.n#D.7a9a9#Da9#D#D#D#Da9bja9#Da9#Da9#Da9a9a9a9a9a9a9a9#Laf#L#Lafafajaf#La9#Lajaf#Lajaf.7#Laf#L#Lajaf#Lajafaf.3#L#L#L#Laf#Laf#La2a2#La2#La2#La2af.Ea9.naY#xaCamam#x.Nbj#s.7#D#D#D#Dbj#D#Dbl#Dbl.Nbl#Dbla9a9a9a9a9a9a9a9afafafafajafafajafaf.na9a9a9#D#D#Lajaf#L#Lafa2#L#Laf#L#L#La9.7a9a9.7a9a9#Da9#D#D#D#MaY#x#x.CaCa0aFaOaFamaFaCa0a0bnaCb#aOaFaOama0", +"#IaYaYaYawaYaw#D#D#D#s#D#sa9#sa9.7a9a9a9.7a9#L.7#La9af.7a9a9.Ea9afaj#Laf#L#La2#La2a2a2#La2#La9#L#L#Laja9a9blaYaY#I#U#xaw.Naw#D#Da9#sa9#sa9.7a9.7ajaf.Ea9a9.7a9#D#D#D#D#Dbj#D#D#Da9#D#D#D#sbl#D#sa9a9a9a9a9#Da9#Dafajafaf.Eaf.7afajaf#Lajafaf#Lafafafajaf#Laf#L#L#Laf#L#L#Lafa2#La2a2af#L#La9a9a9aw#x.Vaoa0#x.Nbja9#D#D.7#D#D#D#Dbl#DaY#DblaYaY.Na9a9a9a9a9.7a9a9#La9afa9afa9af#pafa9#pa9a9a9.7a9#Laf#Laf#L#L#L#Laf#L#Laf.7a9#D.7a9.7a9.7#D#Dbj#Dbl.NaY#x#I.Ca0aqbgaFamaoambn.Cbn#U#xbna0aCama0a0", +"aYaY#IaYbl.N.N#D#s#D#D#D#D#D#Da9a9a9.7a9a9a9a9#Laf#L#Laf#L#Laf#L#Lafa2a2a2a2a2a2a2a2a2a2a2#L#Lafa2#L#La9a9#DaY#Ubn#I#xaYaw#D#s.sa9bj.n#Da9.Ea9.7#L.7#L#L.7a9.7#L#Da9#Da9#Da9#Da9#Dbl#Dbl#D#Dbl#Dbl#s#D.na9#s#D#Ma9a9.n#Laf#Lajaf#Laf#Laf#L#Lafajafafafaf#Laf#L#L#La2#L.3#L#L#Lafa2a2#L#Lafa9.na9#Dawa0bga0#x.N#s#Da9#D#D#D#D#D#D.Nbl#DaYaYaYawaYa9.na9#La9afa9afa9a9a9a9a9a9a9a9a9#pa9a9a9a9a9a9#L#Lafaj#L.3#La2afafa2af#La9a9a9afa9.7a9#D#D#D#D#DaY.N#x#xa0a0aoaFbgama0a0a0aCa0aYaY.baYbnbnaC#x", +"aYaYblbl#D#Da9.7a9a9a9a9.na9a9.7ajafaj#L#L#La2#L#L#L#L#Lafaj#Lafa2a2#L.j#La2#La2a2a2a2#La2af#L#L#L#L#L#La9#MaYaY#Ibn#MaY#D.s#D#s.7.na9.Ea9.7aj#La2aj#L#Laj#L#L.7.7a9.7.7a9.7a9.7#M#Dbl#MblblaYbl.sbl#Dbl#D#Dbl#Daf.Ea9af.Eafa9af#Lafaj#L#Laf#Lafafafafafaf#Laj#L#Laf#L#La2afa2#La2#L.3#L#L.7#Da9#DaYaCama0#Ibla9#Dbj#D#Da9#D#D.N#MaY#DblawaYaYaY#pa9a9a9#pa9a9a9afa9afa9#p.na9a9#Mbla9a9a9#La9.7afaj#Laf#L#Laf#Laf#Laf.7afa9afa9a9.7a9#D.7#D#D#D#Dblaw#x#x.WamamaOb#aOa0aC.Cbn.C#U.RaYaY.b#xbna0", +"aYaY#D#D#D#s.7.7a9.7a9.7a9a9.7a9#Laf#Laf#Laf#Lafa2a2a2a2#La2a2aja2a2.3a2a2a2a2a2aaaaa2a2a2a2a2#La2#L#La9a9#DaY#I.RaYaw#D#M#D#s#D.n.7a9.n#L.7af#La2a2a2#La2#L#L#La9a9.7a9a9.7a9a9a9#pa9a9a9.n#pblaYaY#IaY#IaYaw#x.na9af#Laf#Laj#Laf#La9afajaf#L#Lafafafaj#Laf#L#Lafa2#L.3#L#L#L#La2a2#L#Laf.na9.n#D.NbnaCaobn#D#s#D.n#D#D#D.N.NaY#DaY#Dbl.NaYaYaw#D#pa9#p.n#pa9#pa9a9.n#pa9#pa9#pa9#D#pa9afafajaf#Laf#L#Laf#L#Laj.3af.3afafa9a9a9.7a9.7a9#D#D#D#D.NaY.N#xa0ama0aob#ama0a0a0bn#Ibna0#x.bbnaY#Uamam", +"#MaY#s#D#D.7#La9#L.7.na9a9.7a9a9#L#L#L#La2#La2#La2a2a2aja2#La2afa2aja2#La2a2a2a2#gaaa2a2a2a2a2a2a2#L#La9a9blaYaYaY#MaY#M.N#D.n#D.na9.n.7#L.E#L#L.ja2a2a2#g#L#L#L#Lajaf#Lajaf#L#La9a9#pa9#pbla9.naYawaYaYaY.RaYaY.na9.na9aj.7af.n#Lafaj#Laf#Lajafafajafafaf#L#L#L#Laf#L#La2afa2af#L#La2af#L.7a9a9.7aw#xaCa0#IaYa9#D#D#D#D#D.NaY.saY#Dbl#DaYaYaYaY.na9#pa9a9#p.na9af#p#pa9a9a9#pa9#Dbl#Da9.na9#L#Laf#L#Lafajaf#Lafafafafafafafa9a9afa9a9bja9bj#D#D#D#DaY#x.Wa0av.5.pamaCa0#Ua0#x#xa0bnaYaw.R.Cb#am", +"amam#xbla9a9a9a9a9a9.7a9.7afa2#Laf#Laf#La2#La2#La2a2a2a2a2a2a2a2#Laf#Laf#La2#L.3a2a2a2a2asa2#La2#gafa9blaYawaYaYawbn#IaYawaw#D#Da9.Ea9#Lafaf#L#L#L#La2a2a2a2a2a2a2a2#La2af#L#Lafajaf#L.na9bja9#D#p#pbl#M#x#Ia0bn#I.NaY#D#Da9a9.7af.Eafa9aja9#Lafa9a9a9a9#Lafa9afajafafafaf#Lafafa2.ja2afajaf#L.na2a9aY.Cbgam#x#Ma9.n#Lajafa9.N.N#pa9bl.N#MaYaYaY#p#pa9#pa9#pa9#p#pa9#p.n#p#p.n#pa9#pa9a9#paf#pa9a9.n#pafafafafafafafa9afa9afa9a9.na9a9a9a9a9#D#D.n#paYaYa0amb#amb#a0a0a0.Ca0#I#xaw#xaY#x#xaCa0aC", +"ama0#xbla9.na9a9bja9#Da9a9ajaf#La2aj#Lafa2#La2#La2a2#La2#La2#La2af#Lafa2#Laf#L#La2a2a2asa2a2a2a2a2#La9blaYaYaYawaYaY#xawaY.N#s#Daja9#Lafajaf#Laf#L.j#La2#La2#La2#La2#La2#L#L#L#L#L#Laf.7a9#D.n#Da9.nblblaYaY#xaC#x#IaY.s#D#sa9.na9a9a9a9a9a9a9a9a9afa9afa9a9#La9afafaj#Lafaf#Lafa2#La2#Lafafaj#La2.naw.CamaC#xaY#D#D#La9a9#sbl.Na9#M#DblaYaYaY#xbla9#p#pa9#pa9#pa9#pa9#p#pa9#p#p#pa9.n#pa9a9a9af#pafa9afa9a9afa9#La9af.7afa9afafa9afa9a9.na9#Dbl#p#pblbn#U.5bg.5a0aoa0a0#Ua0#xbnaYaYaY#U#xbn#xa0", +"amaCaYaYaw#Dbl#sa9#D.7a9.7af#L#Lafaf#L#La2#La2#La2a2a2a2a2a2a2a2#L#L#Lafaja2#L.3a2a2a2#La2a2a2a2#ga9#D#MaYaY#UaY#xaw#Ibl.Naw#D#Dafafaja9#L#Laf#La2#La2a2a2a2a2a2a2.jafa2#Laf#Laf#Laf#La9a9.7#Da9a9a9#sblawaY#x#x#IaY.NaY#D#D#D#D#sbl#s#D#sa9a9.na9.na9a9.nafa9afafafafafafafajafa2#L.3#L#Laja9#Daj#DaY.Ca0aoa0aY#D#Ma9.na9#D#DaYblblblaYaYaYaYaYbl#pa9#pa9#pa9#pa9#p#Ma9bl#p#D#pa9a9#pa9#pa9#pa9#pa9#pa9#paf#pa9afa9afa9afa9afa9a9a9a9a9a9a9#Da9bla9awaYa0a0ama0b#a0a0a0#x#U#x#xaw#xaw#xbn#I#xa0", +"b#b#aCaYaYbl#Dblbja9#D.na9#Lajaf#L#L#Lafa2#La2#La2a2#La2#La2#La2afafaj#L#Laf#L#La2#La2a2a2a2#La2#La9blaYbnbn.R#IaY#U#xaYaw.N#D#s#L.Eaf#Lafaj#L#L#La2#La2#La2#La2afa2a2a2#L#L#L#Lafajaf.7.n#Da9b.afa9a9a9#DaY#I#x.NaY#saY#s#D#s#DaYaYaYblaY#DaY#Dbla9a9a9a9a9a9a9.na9a9.na9a9a9a9#La2aj#Lafa9a9a9af#Mawa0aCa0a0bn.NaYbl#D#M#DaY.NaYaYaYawaYaYawaYbl.na9#pa9#pa9#pblbla9#p#pa9#p.na9#pa9.n#pafa9af.naf#pajafafafafa9a9a9afa9af.7afaf.nafa9a9af#D#DblblaYaY#xaCa0.Ca0aobnaCbn#xawaYaY.RaYaYaY#xbn#x", +"a0bnbnbnaYaYbl#D.n#D#sa9a9#Laf#L#L.3#L#L#La2#Lafa2a2a2a2a2a2a2a2#L#Lafaf#L#La2#L#La2#L#L#La2#L#Laf.nblaY.bbn#U#x#Ubn#Ibl.NaYa9.7a9afaja9#Lafaf#La2a2aja2a2a2a2a2a2a2a2a2af#Laf#L#L#L#La9a9.7#Da9#Laja9#D#D.NaYaY#s#D#D#DaY.NaY.saY.saY.NblaY#DaY#sbl#sbla9#Da9#Da9a9.na9a9afa9ajafaf#Lafa9a9#D#sa9blaY#Ua0aob#aC#xaYaw#D#DblaY#IaYawaYaYaYaYaYaYbl#pbla9#pa9#pa9bl#M#p#D#p#M#p#pa9#pa9#pa9a9#pa9#p#pa9#p#pafafaf.nafa9a9#La9afafa9afa9a9afa9#Da9bl.NaYawbn#x#x#x#Ubna0#xbnaY#xaYawaYaw#xawaY#x#U", +"#Ubn#Uam#UaYaYbl#Da9bja9a9#L#Laf#L#Laf#Laf#La2#La2a2#La2#La2#La2af#L#L#L#Laf#La2af#L#La2#L#La2#Lafa9bl.Ra0.pa0bn#U#xawaY#M.N#s.7.na9#Lafaj#L#Lafa2a2a2a2#La2#La2a2a2a2a2#L#L#L#Laf#Laf.7a9#D.7#Dafaf#L.na9#Daw.N.n#D#D#s#Daw#DaYaYaYaYawaYaYawbla9bla9bla9.n#D#Ma9a9a9#Da9#sa9#p#Laf#La9.7.n#D#D#DaYawa0a0aob#amaCa0aYaYaY#DaY#xaYaYaYaYaYbl#Dbl#p#pa9#pa9#pa9#p#pbl#p#pa9#pa9bl#p.na9a9#pa9#pa9af#pafa9af.na9afa9a9aja9a9afa9#Laf.7afa9.7afbl#D#D#DaYaYaY#xaY#xa0bnbn#U.RawaY.baYaYblaY.R#IaYaY", +".Rbnb#a0a0#xaYbl#s#D#sa9.Eaf#L#La2#Laj#La2a2#L#La2a2a2a2a2a2a2a2#La2afa2afa2#Laf.7af#La9a9#Lafa9a9a9.R.Ra0.V#UbnaYaYaY#D#D#D#D.7afajaf.Eafaf#L#La2#La2#La2a2a2a2a2a2#La2#L.3.7#Lafaj#La9a9.n#Da9#Laj.7a9.7#D.N.Na9.n#D#DaY.NaY.sbl#Mblbl#Dbl#Dbl#D#Dbl#s#Dbl#Dbla9#Da9.nbla9a9#Dajaf.na9#D#D#D#sblawaY#x#Ub#b#aO.5a0aCaYaYawaY#x#xaYaYaY.sblbl.na9#pa9#pa9#pa9#pblbla9#M#p#Dblbl.n#p#p.na9#p.n#p.na9#pa9#pa9af#pa9afa9a9af#Laf#Lafafa9afa9a9#Da9bl#D#M.NaY.Naw#x#UbnbnaYaYaY#xaYbl#MblaYaYaYaY#I", +"#Fbn.Vaoa0bnaYblbja9#Da9a9#Lajaf#Laf#Laf#L#L.3#La2a2#La2#La2#La2af#L#L#L#Lafaj#La9#L#La9a9#L#Lafa9blaw.R#Ua0bnbn#IaYaw#D#s#Da9#s#La9#Laf#L#L#L#La2a2a2.j#L#La2#La2a2a2a2#L#Laf#L#Laf#Laf.7#D.7#s#L#L#La9.7#D.sbf.n#Da9#Daw#DaY.N#pbl#M#D#p.n#pa9#sbl#D#D#Dbl#D#D.na9#Dbl.n#Da9a9af#La9.7a9#s#DaYaY#x.baYbnaoamaFaFaoa0#IbnaYaY.R#x#xaYaYbl#Da9#pa9#pa9#pa9#pbla9#M#pa9#pa9#p#Mbl#pa9a9a9#pa9a9#pa9#paf.naf#pafafa9a9a9afa9af.7afa9#L#La9a9af#D#D#D#DaY#D#DaY.NaYbnbn#U#x.baYaYaw#paY#D#MaY#IaYaY", +"blaw#xa0ambn#xaYawblbl#D#pa9afafa2a2a2a2a2a2#La2#L#La2#La2#La2#La2a2a2afa2#La9a9a9a9a9#D#D#D#D#D#pbl#paY.Rbn#I#x#pa9a9a9a9.7.7a9afajaf.n#Laf#L#L#L#L#La2a2a2#ga2a2bpa2#L#L#L#L.7af#Laf.7a9a9a9#Da9a9#sa9#D#D#D.Na9a9a9#sbl#D#Ma9bl#Dblbl#Dblblbla9a9a9afa9a9a9a9a9a9afa9a9a9a9.nafa9a9.na9a9#D.naY.RaYbna0a0b#aobgb#bg.Va0aCaY#D#Mbl#Mbl#Dblbl#Dbl#Dbl#Dbl#Dblbla9#pbla9#p#pa9#p#p#p#p#p#pa9#pa9#p#p#p#pa9a9afa9aja9afaf#Lafaf#La9afa9#Lafa9a9af#sa9#Dbl#DaYbl.N#UbnbnbnaYaY#IaYaY#MaY#xaYaYaYaY", +"aYaYbn.Ca0a0#I#xaYaYblbl.naf#Lafaja2#La2#La2a2a2#La2#La2#La2#La2a2a2#L#L#L#L#L#Lafa9af#D#p#Dbl#D#F.nblblaYaYaYaYa9.n.7a9a9.7a9.7afafaf#L#L#L#L#La2#ga2#ga2bpa2#L#ga2a2#L#L#L#L#L#Laj#Laf.7a9bja9.7#D.7#D#D#D.Naw#D#M#D#p#D#p#D#Dbl#sbl#Dblbl#Dbla9.na9.naf#paja9afa9.na9a9afa9a9afajafa9a9a9blblaYawaY#Ua0aC.5am.V.Vb#ama0aYaY#xblaY#DaYbl#M#Dbl#Dbla9bla9bla9bl#D#p.n#pbla9bl#p#p.na9#p.na9#p.na9bl.na9afa9a9a9a9afa9#La9af.7afa9a9#Laf#Lafa9a9a9a9a9#D#DaY#saYbnbn#U#x#UaYaYaYaYaYaYawaYaYaY#x", +"aY#xbna0a0a0a0bnaYaY#Mbla9a9a9af#L#Laf#L#L#L#Lafa2#La2#La2#La2a2#La2afa2af#L.7#La9a9#D#D#D#D#DaY#pblbl#MaYaYbl.Na9a9a9.7a9#L.Eaf.naf#Laf#L#L#L#La2a2bpa2#ga2#ga2a2#L#L#L#L.7a9a9a9a9afa9a9#D#D#sa9.nbl#DaYblaYaYbl#D#D#D#M#Dbl#sblbl#Dbl#sbl#D#Ma9a9a9a9a9a9a9a9a9a9a9a9.na9a9a9.n#pa9a9#D#sbl#saYaY.RaY#xa0a0aCa0#Ua0aCbnaYaYawbl#sbl#M#Dblbl#D#pa9a9a9a9a9a9a9#p#p#D#p.n#pa9.n#p#p#pbl#pa9a9#p#pa9#p#pa9a9afa9af#Lafaf#Lafaf#La9a9afa9af#La9afa9a9bl#D#p#DaY#DbnaCbnbnaYaY#IaYaYaw#xaYaYbn#I.R", +".Raw#xa0aC.Ca0a0.baYaYblbla9a9af#Laf#L#La2afa2#L#La2#Lafa2#La2a2a2a2a2#L#L#Laf#L#D#p#Dbl#DblaYaY#pblblbl#Dbl#D#Dafa9af#L#La9#L.7afaf#Lajaf#L#L#L#L#ga2a2#La2bpa2#L#L#Laf#La9.7#Da9a9a9#D#Dbl#DaYblblaYaYaYawaYaY#xawaYaYaYaYaYaYaYaYaYaYaY.NblaYa9a9#pa9a9#pa9#p.n#Da9a9a9#Da9#D#pa9bl.na9blaYblblaYaY#IaYbnbna0#Ua0b#b#a0aYaYblblbl.Nblbl#Dbl#Da9a9afa9afa9afa9#Ma9#pa9#pbl#pbl#p#p#pa9#pa9#pa9a9bl#p.na9a9a9a9#La9af.7afa9#La9afa9a9af.7afafafa9a9a9#D#D#DblaYbnbn#Ibn#IaY.RawaYaYaYaYaYaY#x#x", +"bnbnbnbna0a0a0amaYaYaYaY#D.na9a9afa9afa9#L#L#Laf#L#L#La2#La2#L#La2#L#Laf#L#L#Laf#D#Dbl#DblaYaYaYa9.nblbl#D#D#Dblafaf#L#L#L#L#L#L.naf#Laf#L#L#L#L#ga2bpa2#ga2a2#gaf.3af.7afa9a9.n#D#Dbl#sblbl.NaYaYaYaYawaY#x#xaYaYaYaYaYawaYawaYaYawaYawaYblaYblblbl#Dbl#M#Dblbl#Dbl#D#Dbl#s#Dbl.n#pa9blawblawaYaw.RaY.RaY#U#xbn#UbnaCaOama0aYbl#Dbl#Mbl.Nblbl#Da9.na9a9a9a9a9a9a9#pbl#pa9#pa9#p#p#p#M#p#p.n#pa9.n#pa9#pa9a9afa9#Lafa9afa9#Lafafa9afafa9af#La9#La9af#Dbl#Daw.NawbnbnbnbnaYaY#xaYbn.baY.RaY#xbnbn", +"ama0bna0#Uambgb#aY.RawaYbl#Da9a9a9.7a9.7a9af.7#L#La2af#Laf#L#L#La2a2#La2#Laf#L.7#pblblaYaYblaYaYblblbl#Da9a9a9.7afajaf#L.3#L#L#L#Lafaf#L#L#L#L#L#L#ga2a2bpa2bpa2#La9#Lafa9af#D#D#Dbl#DaYaYaw#xaYaYawaYaY#xbnbnaYawaYaYaYaYbnaYaYaY.RaY.RaY.baYawbl#Mblblblbl#Mblbl#D#D#M#Dbl#D#D#pbl#MblblaYaYaY.RaYaYawbnaYbnawaYaYa0aO.Fa0#x.R#Dbl.Nbl#Mbl#sbla9a9a9a9afafafaf#p#p.na9bl.nbl#p.n#p#pa9#pa9a9#p#pbl#pa9a9a9a9a9#La9afa9a9afa9#Laf#La9afa9af#Lafa9a9#D#Dbl#DblaYbna0#Ubn#I.RawaYawaYaYaY#UbnaCbn", +".Va0bna0.V.Vb#.5bn#xaYaYaY#Da9a9a9#La9#La9#L#Laf#L#L#La2#La2afa2#La2#Laf#La9a9a9blaY#MaYaYaYaYaYbl#Dbl#Dafa9#L#Lafa2a2a2a2a2#L#Lafaj#Laf#L#L#L#La2a2bpa2#ga2a2#gafafafa9a9a9bl#pbl#DblaYaYaYaY#xaY.Rbnbn#Ua0a0a0aYaYaYaYaYaYaY#U.R.b.R.R#U.Rbn.RaYaYawblaYblaYbl.N#MaY#DaYblaYbl#sblblblawblaYaYawbnaY.RaYaw.RaY#IbnaCb#aOb#.Vbn#DblblawaYblbl#Da9a9a9a9.7a9.7a9#D#pbl#p#p#pa9#p#p#p#pbla9#pa9a9#pa9.n#pa9.na9a9afafa9a9afa9#Laf.7af#La9afa9#Lafa9a9a9bl#s#DaY#sbnbnbnbnaYaY#x.Rbnbnbnbnbn#xa0a0", +"a0.Vbn.bbna0b#b##UbnaYaY#D#Ma9a9.Ea9a9a9.7a9.7#Lafa2a2#La2af#L#La2a2#L#L#Laf.7.7blblaYblaYaYaYaY#DaYa9a9a9#La2#La2a2#La2#L#ga2#Lafafafa2#L#L#L#L#L#ga2#g#La2bpa2afafa9af#p#Da9#D#DaY#D#DaYaYaY#x.RaYaYbnbna0a0a0aYaYaY.RaY#UaYaYaYaYaYaYaYaYaYaYawblaYaYaYblaYblaYbl.NblaY#s.Nblblbl#MblaYawaYaY.Raw.RawaY.b#x.baY#xa0aob#bga0bnbl#sblaYaYbl#sbla9.n.7a9.n.7a9a9#pa9#pa9#p#D#pbl#p#p.na9#p.na9#p.n#pbl#pa9a9a9af.7a9afa9.na9a9afaf#Lafa9afa9af#La9.nbl#D#D#DblaYbnbn#UaYaYaYawaY.RaY.Rawbnbna0a0", +"aYaYaYaYaYaY.N#xaYaYawbnaYaYaYaYbl#Dafa9afa9.7#L#L#L#L#L#L#L#L#L.3a2afafa9#D#DaY.R.R#x.RaYawaYaYa9.7a9#L#L#Lafa2a2a2a2a2#g#L#L#Lafafajafafa2#L#L#L#L.7#L#L#L#L#L#L#L#Laf.7#La9a9a9.7a9#D#D#D#D#Dblbl#IaY#xaY#xaYaYaYaYawaYaYaYaYaYawaYaYawaYaYaw#Fbl#M#FblaYaYaY.R.R.R.R.R.R.R.RawaYaYaYaYaYaYawaYbl.NaYaYaYbn#Ibn.baY#Ua0aOb#.Vbg#HaY.bbla9a9.na9a9a9a9.7a9a9.Ea9#p.na9a9.n#pa9#pbl#p#pa9#p#pa9#p#pa9#pa9#pa9a9#pa9.na9afafaf#L#Laf#L#L#L#L#Lafa9a9a9#pblbl.Nbl#x.R#xaY.R#x#xaYaw.RaYaYaYaYaY#D", +"aYblaYaYaY#IaY.NblawaYaYaYaYaYaY#Dbla9a9a9a9a9#L#L#L#L#L#L#L#L#L#Laf#Lafa9#Dbl.N.R.Raw.RaYaYaYaY.7#Da9.7af#La2#La2#ga2#ga2#L#L#Lafafafaf#L#L#L#L.7#L#L#L#L.7#L.7a2a2#L#Laf#La9bja9#D.7#D#D#D#D#D#D#DaYaYaYaYaY#xaYaYaYaYaYaYaYaw#xaY#xaYaYawaYaYbl#FblaY#MaYblaw.R.b.R#MaY#FaY#FaYaYaYblaY#MaYaYblawaY.RawaYawaYbnaY#Ibnao#SaBaF.p#H#U.RaY#Ma9#Da9a9.7a9a9a9a9a9a9a9a9#pa9#pa9.na9#pa9a9#pa9#pa9#p#D#p#s#pa9a9afa9af#pafafafafaf#L#L#Lafaj#Lafaja9#pa9a9#Dbl#DblaY#UaYaYaw#x#xbnaYblaw.RaYaY#Dbl", +"blaYblaYaY#D.NaY#pblblaY.RaYaYaYbl#Dbl#Da9a9.7a9#L#L#L#L#L#Laf#Laf.nafa9#D#DaYaYbn.RbnaYaY.R#xaYa9.7a9#L#L#La2#La2a2#g#L#L#L#L.7afajafaf#Laf#L#L#L#L#L#L#L#L#L#La2#La2a2#L#L#L#L#L#La9.7#Da9bj#DblblaYaYaYaYaYaYbl#Dbl#D#Dbl#Dblbl#Mbl#MaYblaY#Mbl.nbl#pa9aYblaYblaYaYaY.RawaYaY#M#F#M#Fbl#F#F#M#p#p#p#MblaYaYaY#UbnbnaCam#SaBbm#H.p.p.RaYaYbla9.na9a9.na9a9a9a9a9#pa9a9#pa9#pa9#pbla9#pa9#pa9#pa9#p#p#pa9#pa9#pa9#pa9a9afafafaf.3afajafafafafafa9.n#pa9#p#Dbl.N.RbnaY.RaYbnaY#x.b.RaYaYblbl#Dbl", +"#DblblaY#Dbl#D#Dbl#DawaYaYawaYaYaYaYbl#Dbl#D#Da9#Da9#Da9#Da9.7a9a9#p#Dbl#DaYaYaw.R.RaYbnaYaY#xaY#D#Da9.7#L#L#L#La2#ga2#L#L#L.7afafafafafaj#L#L#L#L#L#L#La2#L#L#La2a2a2#La2#L.7#La9#L.7a9.7#D#D#D.N#Dbl.sbl#D#Dbl#D#D#D#Dbl#D#D#Da9#D#D#Da9#D.n#D#pa9#pa9a9blblblblaYblblblblblbl#p#Fbl#p#pbl#pbl#p#M#pblbl#Faw#FbnbnaCamaCaF#SaZ#Hb#bgbnaw.Raw#Da9a9a9a9a9a9.na9afa9a9#p.na9a9#p.na9#pa9#pa9#pa9#M#p#D#p.na9a9a9af#pajafafafafaf#Lafa9afa9a9afaf#paf#p.n#Dbl#DblbnaYbn#Ubn#x#U#xbn.baYblaY#DaY#D", +"blblaY#DaY#D#D#Dbl#Dbl#DblaYaYaYaYaYaYaY#M#Dbla9#D#D#D#D#D#D#D#Dbl#Dbl#DaYaYaYaYbn.R#U.RaY.R#xaY.7a9.7#Laf#La2#La2a2#L#L#L#La9.7afafafaf#Laf#L#La2#g#L#g#L#ga2a2a2a2#La2a2#La2#L#L#Laf.7a9a9#Da9#DblaYaYbl.Nbl#Da9a9a9a9a9a9a9a9.na9.na9a9.na9a9ajafa9.na9a9.na9blblbl#Dblblblbl#M#p#p#p#p#p.n#p#p#p#p#M#pblbl#MbnbnbnaCa0aF#SaZ.V.V.VbgbnaYaYaYbl#D#D#D#D#D#Dbla9#p.na9#pa9#pa9#pbla9#pa9#pa9#pa9#pa9#pa9#pa9af#pa9#pafafaf#Lafa9a9a9a9a9afa9a9afafa9#p#Dbl#saY#x.bbn#xbn#I#xbnbnbnbnawbl#Dblbl", +"a9#pa9bl#M#Dbl#Da9a9#D#D#D#D#D.Nbn#U.RaYaYaY#D#Dbl#D#Dbl#D#Dbl#DaYblaYaYaYawaYaYaY.RaYbn#xaw#xaY.7a9#D#L.7a2#Laf#L#Laf#La9a9#Da9afafajaf#L#L#L#Lbpa2a2a2#ga2a2bpa2a2a2a2a2a2#La2.3#L#L#La9.7a9.7bl.NaYaY#D#pa9#pa9a9a9afafa9a9a9afafafajafafafafafajaf#La9a9a9bj.na9#D.n#Da9#s#D#p#p#p#p.n#pbl#p#p.n#pa9bl#Mblbl#UaY#U#x#Ub#aB.l.V.V.V.VaCbnaY.R#D#Mblbl#Mblblbla9#pa9#pafa9a9#pa9#p#pa9#pa9#pa9#pbl.n#D#pa9#pa9afafafafafafafafafa9#p.na9a9a9a9afafafa9#p#DaYaY.Rbn#x#Ubnbn#xaCa0aCbnaYaYblbla9", +"#pa9#p#Dbl#Da9#Da9afa9bla9bl#DblaYaYbnaYaYaYaYaYblaYblaYblaYaYblaYaYaYaYaYaYaYaY.Rbn.R#xaY.RaYaYa9.7a9#Laf#L#L#Lafaf#Lafa9a9a9.nafafafaf#Laf#L#Laa#ga2#ga2a2#ga2aaasa2a2#La2a2#L#L#L.3#La9.7a9#DaYblaYblbla9a9ajaf#Laf#L#Lafajaf#Lafafaf#Laf#L#La2#L#L#L#L#L.7.7a9a9a9a9a9.na9a9.na9a9a9a9a9a9.na9a9.n#D#D#D#D#D#MblawawbnaC.F.t.Fb#.Vb#.Vbnaw#xaYaYaYaY.NaY#D#Da9#pa9a9#p.n#pa9.nbla9#pa9#pa9#pa9#p#p#pa9.na9afafafafafafafafafa9a9afa9af#pafafafafa9#p#Dblblaw#xbn#Ubn#x#IbnaCb#aCbnawaY#D.na9", +"#pa9#pa9a9#Dbla9a9a9af#D#Da9#D#D#xbn#xbnaYaYblaYaYaYaYaYaYaYaYaYbnaYaYaYaYaYaYaY.R.R.RbnaYaYaYaY#D.7#Da9#La2#Lafajafafa9a9a9a9#Dafafafaf#La2#L#La2a2#ga2a2#gaaa2asaaa2a2a2a2a2a2a2#L#L#La9a9.7a9#D.saY#D.n#pafaf#Lafaj#L#Laf#L#Laf#L#L#L#L#Lafaja2a2a2a2#L.E#L#La9a9a9.7a9a9a9a9a9.7a9.na9a9a9a9.E#L.7.7#D#s#D#s#Fblbl#M#xbnbg.t.F.t.V.V.VaCa0aY#DaYaYaYaY.Nblbl.na9#p.na9a9#pa9#p#pa9#pa9#pa9#pa9#p#D#pa9#p#pa9afafafaf#Lafafa9af#pa9#pa9afa9afafaf#pa9a9#D#DaYbnbn#xbn#Ua0bna0bg.Va0aYblbl#pa9" +}; diff --git a/tests/auto/gui/image/qimagereader/images/namedcolors.xpm b/tests/auto/gui/image/qimagereader/images/namedcolors.xpm new file mode 100644 index 0000000000..f6485d510e --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/namedcolors.xpm @@ -0,0 +1,18 @@ +/* XPM */ +static char *xman[] = { +/* width height ncolors chars_per_pixel */ +"8 8 3 1", +/* colors */ +"e g4 black c pale turquoise 4", +"f m white c light golden rod yellow g4 grey", +"g g white c lemon chiffon m black", +/* pixels */ +"eeeeeeee", +"ffffffff", +"gggggggg", +"gggggggg", +"gggggggg", +"gggggggg", +"gggggggg", +"gggggggg" +}; diff --git a/tests/auto/gui/image/qimagereader/images/negativeheight.bmp b/tests/auto/gui/image/qimagereader/images/negativeheight.bmp Binary files differnew file mode 100644 index 0000000000..875887acef --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/negativeheight.bmp diff --git a/tests/auto/gui/image/qimagereader/images/noclearcode.bmp b/tests/auto/gui/image/qimagereader/images/noclearcode.bmp Binary files differnew file mode 100644 index 0000000000..1a5ca9c9bd --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/noclearcode.bmp diff --git a/tests/auto/gui/image/qimagereader/images/noclearcode.gif b/tests/auto/gui/image/qimagereader/images/noclearcode.gif Binary files differnew file mode 100644 index 0000000000..27784d61b2 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/noclearcode.gif diff --git a/tests/auto/gui/image/qimagereader/images/nontransparent.xpm b/tests/auto/gui/image/qimagereader/images/nontransparent.xpm new file mode 100644 index 0000000000..00c21ef7d7 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/nontransparent.xpm @@ -0,0 +1,788 @@ +/* XPM */ +static char *dummy[]={ +"8 8 777 2", +"#R c #000000", +"fn c #000001", +".e c #000069", +".f c #00006d", +".g c #00006e", +"#d c #0042b4", +"aJ c #010101", +"g0 c #010102", +"dr c #010202", +"gd c #010203", +"#J c #0157bb", +"e. c #020202", +"du c #020304", +"fR c #030303", +"jJ c #040404", +"hf c #040608", +"fE c #040609", +"cO c #04070a", +"k# c #050505", +"gC c #050709", +"ka c #060606", +"br c #06080a", +"dY c #06090d", +"hI c #070707", +"in c #07090b", +"cL c #070a0e", +"cd c #070b0f", +"e0 c #080808", +"gZ c #080b0e", +"eu c #080b0f", +"dz c #080c10", +"hD c #090909", +"fq c #090d11", +"cH c #090e13", +"jB c #0a0a0a", +"#U c #0a0d0f", +"a4 c #0a0d10", +"g3 c #0a0d11", +"fu c #0a0f14", +"cj c #0a1016", +"kb c #0b0b0b", +"#n c #0b0d0f", +"a1 c #0b0e10", +"g8 c #0b0f13", +"f4 c #0b0f14", +"hE c #0c0c0c", +"bf c #0c0f12", +".X c #0c28a0", +"bT c #0d0d0d", +"ax c #0d1014", +"hr c #0d1217", +"dH c #0d141b", +"jy c #0e0e0e", +"aW c #0e1115", +"eH c #0e141b", +"bE c #0f0f0f", +"ar c #0f1317", +"g5 c #0f1419", +"hg c #0f151a", +"fh c #0f151c", +"dJ c #0f171f", +"gI c #101010", +".z c #101094", +"h. c #10161b", +"gm c #10161c", +"eL c #10171f", +"hK c #111111", +"at c #11161b", +"fC c #111820", +"dA c #111922", +"aj c #1163c4", +"bJ c #121212", +"#Z c #12161a", +"ba c #12171c", +"ho c #12181e", +"jK c #131313", +"iq c #13191d", +"cA c #131e2a", +"c7 c #141414", +"dR c #141e29", +"jr c #151515", +"aA c #151a1f", +"hq c #151c23", +"fl c #151e28", +"eV c #151e29", +"d4 c #161616", +"hw c #161e25", +"jk c #171717", +"bs c #171d23", +"g9 c #171f27", +"eC c #17212b", +"b9 c #172432", +"d5 c #181818", +"as c #181e24", +"bn c #181f25", +"bS c #191919", +"gr c #19232d", +"ed c #1a1a1a", +".d c #1a1a6e", +"gB c #1a242e", +"eK c #1a2531", +"dQ c #1a2633", +"hL c #1b1b1b", +"g1 c #1b242d", +"g# c #1b252f", +"eJ c #1b2734", +"d1 c #1b2937", +"bW c #1c1c1c", +"gW c #1c262f", +"ci c #1c2b3b", +"cs c #1c2c3c", +"e# c #1d1d1d", +"#3 c #1d232a", +"f8 c #1d2833", +"fI c #1d2936", +"eO c #1d2a38", +"cw c #1d2e3f", +"jR c #1e1e1e", +"a2 c #1e262e", +"eP c #1e2b39", +"dE c #1e2d3d", +"cF c #1e2f41", +"aO c #1e6ec9", +"c4 c #1f1f1f", +"gx c #1f2a36", +"c# c #1f3043", +"j2 c #202020", +"bk c #202931", +"ht c #202c36", +"eF c #202f3e", +"b7 c #203245", +"cB c #203246", +"hG c #212121", +"aE c #212932", +"bp c #212a32", +"hl c #212d38", +"cc c #213347", +".M c #214eb7", +"hF c #222222", +"#7 c #222a32", +"fw c #223040", +"eU c #223141", +"jC c #232323", +"bb c #232c35", +"ga c #23303d", +"cv c #23364a", +"cn c #23364b", +"jl c #242424", +"gj c #243240", +"cm c #24374c", +"c. c #24384d", +"bF c #252525", +"be c #252f39", +"gt c #253341", +"dU c #253649", +".Y c #256cc9", +"jG c #262626", +"h8 c #26333d", +"hb c #263440", +"gs c #263443", +"cr c #263b51", +"cW c #272727", +"aC c #27313b", +"a9 c #27313c", +"fk c #273748", +"eR c #27384b", +"cq c #273d55", +"jV c #282828", +"#5 c #28313b", +"b0 c #2877ce", +"gL c #292929", +"#Y c #29323c", +"hu c #293744", +"fK c #293a4d", +"jP c #2a2a2a", +"#w c #2a323b", +"bg c #2a3540", +"dF c #2a3f55", +"jn c #2b2b2b", +"a6 c #2b3641", +"jY c #2c2c2c", +"h5 c #2c3b47", +"hp c #2c3c4a", +"gp c #2c3c4d", +"cx c #2c445e", +"bU c #2d2d2d", +"h# c #2d3e4c", +"dS c #2d435b", +"e5 c #2e2e2e", +"cG c #2e4762", +"jF c #2f2f2f", +"aG c #2f3b48", +"gU c #2f3f4e", +"ck c #2f4966", +"j0 c #303030", +"a0 c #303d4a", +"he c #304251", +"cQ c #307ace", +"e4 c #313131", +"ew c #31465d", +"dW c #314862", +"ce c #314b68", +"jm c #323232", +"bm c #323f4d", +"k. c #333333", +"e3 c #343434", +"hi c #344757", +"eT c #344b64", +"b8 c #34506f", +"dj c #347fd1", +"bX c #353535", +"f9 c #35485c", +"ac c #363636", +"#V c #36434f", +"fv c #364c64", +"dV c #36506d", +"c2 c #373737", +"ev c #37506a", +"bI c #383838", +"bw c #384655", +"h4 c #384b5a", +"hk c #384c5d", +"ea c #393939", +"bh c #394857", +"gX c #394d5f", +"#e c #3981d2", +"e6 c #3a3a3a", +"eS c #3a546f", +"em c #3a81d2", +"#F c #3b3b3b", +"eQ c #3b5571", +"dT c #3b5776", +"cI c #3b5c7f", +"gJ c #3c3c3c", +"hX c #3c5060", +"fi c #3c546f", +"gG c #3d3d3d", +"jv c #3e3e3e", +"az c #3e4e5e", +"fL c #3e5772", +"bK c #3f3f3f", +"gD c #3f576f", +"fJ c #3f5874", +"d2 c #3f86d5", +"jx c #404040", +"#8 c #404e5d", +"bv c #405161", +"cf c #406389", +"jL c #414141", +"iG c #415561", +"im c #415663", +"gz c #415971", +"et c #415d7c", +"cz c #41658c", +"f# c #418ad7", +"jT c #424242", +"gy c #425b74", +"fs c #425d7a", +"#K c #4288d4", +"jQ c #434343", +"eX c #438cda", +"j8 c #444444", +".L c #44449a", +"eZ c #454545", +"#s c #455362", +"fx c #45617f", +"cK c #456b94", +"aP c #458cd5", +"ab c #464646", +".n c #46469f", +"aH c #46586a", +"gV c #465f74", +"d0 c #46678c", +"c9 c #474747", +"aF c #47596c", +"a3 c #475a6d", +"ex c #476687", +"jU c #484848", +"by c #485b6e", +"gq c #48627d", +"dI c #486b91", +"cC c #48709b", +"js c #494949", +"#2 c #495a6b", +"ih c #49606f", +"hm c #49637a", +"gk c #49647f", +"j7 c #4a4a4a", +"dt c #4a6e94", +"ak c #4a8dd7", +"b1 c #4a90db", +"c1 c #4b4b4b", +"bx c #4b5f72", +"fr c #4b698a", +"dG c #4b6e95", +"co c #4b75a2", +"fW c #4b91db", +"bD c #4c4c4c", +"hc c #4c687f", +"j6 c #4d4d4d", +"#Q c #4d5f71", +"ik c #4d6676", +"hH c #4e4e4e", +"#0 c #4e5f72", +"aD c #4e6277", +"b. c #4e6377", +"gN c #4e91dc", +"c0 c #4f4f4f", +"bj c #4f6378", +"dZ c #4f759e", +"cD c #4f7aa9", +"hN c #4f8dcd", +"kd c #505050", +"#S c #506275", +"#6 c #506376", +"ge c #506e8c", +"af c #515151", +"b# c #51667b", +"dk c #5195df", +"cT c #525252", +".c c #525280", +"bq c #52677d", +"iH c #526b79", +"fj c #527397", +"eW c #52769d", +"dy c #527aa5", +"hJ c #535353", +"#x c #536476", +"eG c #53789f", +"jM c #545454", +"#r c #546577", +"bz c #546a80", +"dM c #547ca8", +"fP c #5499e2", +"jp c #555555", +"iK c #556f7e", +"bM c #565656", +"fB c #56799f", +"dC c #567fab", +"gE c #569be2", +"cU c #575757", +"h7 c #57748b", +"gc c #577797", +"fN c #577ba1", +"dx c #5780ad", +"cg c #5787bb", +"i4 c #585858", +"iF c #587483", +"hy c #587792", +"g2 c #587893", +"fy c #587ca3", +"eA c #587ea7", +"jW c #595959", +"bu c #597087", +"ia c #5984b2", +"ae c #5a5a5a", +"#t c #5a6c7f", +"bd c #5a7189", +"ij c #5a7789", +"eI c #5a81ab", +"bR c #5b5b5b", +"ch c #5b8dc3", +"en c #5b9be1", +"ke c #5c5c5c", +"cP c #5c8fc5", +"j5 c #5d5d5d", +"iN c #5d7fa0", +"gl c #5d80a3", +"fp c #5d83ac", +"cl c #5d8fc6", +"b2 c #5d9de6", +"c8 c #5e5e5e", +"hh c #5e7f9c", +"hn c #5e809d", +"i3 c #5f5f5f", +"#1 c #5f758c", +"a8 c #5f7890", +"g7 c #5f819e", +"cJ c #5f93cc", +"jz c #606060", +"ct c #6094cd", +"bO c #616161", +"eN c #618cb9", +"jH c #626262", +"iW c #627c8d", +"hd c #6285a3", +"ey c #628dbb", +"dO c #6290c4", +"ca c #6297d1", +"jI c #636363", +"eM c #638fbd", +"jN c #646464", +"fH c #648db9", +"eE c #648fbe", +"cb c #649ad5", +"hA c #64a8e2", +"jw c #656565", +"#k c #65798f", +"fF c #658eba", +"fA c #658fbb", +"fa c #65a4e7", +"b3 c #65a6e8", +"jX c #666666", +"hW c #6688a3", +"gh c #668cb2", +"aI c #6696cb", +"dN c #6697cc", +"bA c #6699ce", +"cu c #669edb", +"#C c #676767", +"f3 c #678db4", +"dl c #67a6eb", +"kc c #686868", +"cS c #696969", +"dK c #699bd2", +"cN c #69a2e0", +"cy c #69a3e1", +"fX c #69a6e8", +"jD c #6a6a6a", +"av c #6a84a1", +"ds c #6a9cd3", +"dL c #6a9cd4", +"jt c #6b6b6b", +"fo c #6b97c6", +"cE c #6ba5e4", +"jS c #6c6c6c", +"aV c #6c88a4", +"ir c #6c8ea4", +"il c #6c8fa5", +"eD c #6c9bce", +"dB c #6c9ed7", +"dq c #6c9fd8", +"cM c #6ca7e7", +"cp c #6ca8e8", +"eo c #6cabed", +"i2 c #6d6d6d", +"#T c #6d869f", +"#W c #6d87a0", +"gY c #6d94b5", +"aa c #6d9bcb", +"eB c #6d9dd0", +"dw c #6da0d9", +"dD c #6da1da", +"b4 c #6dacee", +"h9 c #6dafe2", +"i6 c #6e6e6e", +"bt c #6e8aa7", +"fM c #6e9bcb", +"dP c #6ea3dc", +"b5 c #6eabee", +"jd c #707070", +"ix c #7088a2", +"hx c #7098ba", +"f7 c #7099c3", +"dv c #70a5df", +"b6 c #70adef", +"iy c #70aff1", +"dm c #70aff2", +"jE c #717171", +"#m c #7188a0", +"#u c #7189a1", +"aY c #718eac", +"gO c #71aced", +"jq c #727272", +"gb c #729cc6", +"hO c #72afee", +"ib c #72afef", +"e7 c #737373", +"#y c #738ba4", +"#A c #739eca", +".j c #747474", +"#9 c #748fab", +"hs c #749ec1", +"f6 c #749fca", +".i c #757575", +"#q c #758da6", +"a5 c #7593b1", +"bo c #7594b2", +"ii c #759bb3", +"fb c #75b3f4", +"ep c #75b4f3", +"is c #75b8e2", +"ag c #767676", +"fz c #76a6da", +"ez c #76a9e0", +"dX c #76adeb", +".h c #777777", +".m c #777794", +"iX c #77a6b3", +"dn c #77b1f4", +"gK c #787878", +"#4 c #7894b0", +"fG c #78a9dd", +"j# c #797979", +"bV c #7a7a7a", +"do c #7ab4f4", +"jA c #7b7b7b", +"io c #7ba3bc", +"dp c #7bb5f5", +".k c #7c7c7c", +"bc c #7c9cbd", +"gi c #7caad8", +"aQ c #7cb0e7", +"fY c #7cb8f9", +"iM c #7cbee2", +"j1 c #7d7d7d", +"aX c #7d9ebf", +"fm c #7db0e7", +"j4 c #7e7e7e", +".8 c #7ea5ce", +"#D c #7f7f7f", +"hv c #7facd3", +"gn c #7faedd", +"eb c #808080", +"er c #80bdf9", +"j3 c #818181", +"hz c #81afd6", +"gu c #81b0e0", +"eq c #81bbf9", +"fc c #81bbfc", +"#b c #828282", +"iE c #82aac0", +"i5 c #838383", +"ha c #83b1d9", +"es c #83bcf9", +"ad c #848484", +"go c #84b5e6", +".v c #858585", +"#p c #85a0bc", +"bN c #868686", +"hZ c #86b3d6", +"fD c #86bcf6", +"fO c #86bcf7", +"gP c #86c1ff", +"di c #878787", +"ft c #87bdf8", +"bH c #888888", +"iT c #88cfe2", +"jZ c #898989", +"#z c #89a5c3", +"g. c #89bbee", +"fg c #89c0fc", +"fd c #89c2fd", +"hP c #89c3ff", +"jb c #8a8a8a", +"#o c #8aa6c4", +"jc c #8b8b8b", +".S c #8baccf", +"iI c #8bb6ce", +"al c #8bb9e8", +"hj c #8bbde7", +"gw c #8bbef2", +"ff c #8bc3ff", +"fe c #8bc4ff", +"fZ c #8bc6ff", +"ec c #8c8c8c", +"gv c #8cbff3", +"jO c #8d8d8d", +"a# c #8dadce", +"ic c #8dc7ff", +"#H c #8e8e8e", +"a. c #8eaed0", +"#L c #8ebae8", +"hY c #8ebee3", +"g4 c #8ec1ec", +"iO c #8ecbff", +"ju c #8f8f8f", +"bi c #8fb5da", +"h6 c #8fc0e5", +"f5 c #8fc4f9", +"jf c #909090", +"bl c #90b6dc", +"i1 c #90dfe2", +"bC c #919191", +"aB c #91b5dc", +"aZ c #91b7dd", +"hV c #91c2e8", +"gf c #91c6fc", +"gg c #91c7fd", +"f0 c #91c8ff", +"i7 c #929292", +"gA c #92c8fe", +"iz c #92ccff", +"iU c #939393", +"a7 c #93b9e0", +"f2 c #93c9ff", +"gQ c #93ccff", +"e8 c #949494", +".y c #9494b0", +"h1 c #94c6ec", +"f1 c #94caff", +"j9 c #959595", +"#X c #95b7da", +"cX c #969696", +"ay c #96bbe3", +"#f c #96bde8", +"aR c #96c3ee", +"gR c #96cfff", +".J c #979797", +"hQ c #97cfff", +"fT c #989898", +"#j c #98b6d7", +"#l c #98b7d8", +"iJ c #98c7e1", +"g6 c #98cffd", +"jj c #999999", +"aS c #99c4ee", +"h3 c #99ccf4", +"gS c #99d0ff", +".l c #9a9a9a", +".b c #9a9aa4", +"aw c #9ac1ea", +"gT c #9ad1ff", +"dg c #9b9b9b", +".N c #9bbee8", +"aq c #9bc1eb", +"am c #9bc4ee", +"eg c #9c9c9c", +"au c #9cc3ed", +"ao c #9cc5ee", +"c5 c #9d9d9d", +"aT c #9dc7ef", +"hU c #9dd2fb", +"hR c #9dd3ff", +"dh c #9e9e9e", +"#v c #9ebee0", +".Z c #9ec3e8", +"#M c #9ec3ed", +"#N c #9ec5ed", +"ap c #9ec5ef", +"aU c #9ec7f0", +"h2 c #9ed4fd", +"id c #9ed6ff", +"df c #9f9f9f", +"an c #9fc5ee", +"h0 c #9fd5fe", +"aM c #a0a0a0", +"hT c #a0d6ff", +"jh c #a1a1a1", +"hS c #a1d7ff", +"ji c #a2a2a2", +"#P c #a2c7ed", +"i8 c #a3a3a3", +"#O c #a3c8ed", +"iA c #a3daff", +"j. c #a4a4a4", +"je c #a5a5a5", +"#g c #a5c8ed", +"ip c #a5dafb", +"iv c #a6a6a6", +".F c #a6bed4", +"de c #a7a7a7", +"#h c #a7c9ed", +"if c #a7ddff", +"ie c #a7deff", +"eh c #a8a8a8", +"#i c #a8caee", +"iL c #a8dbf8", +"ig c #a8deff", +"iP c #a8e0ff", +"iY c #a8e2e6", +"hC c #a9a9a9", +".0 c #a9caed", +"#B c #aaaaaa", +"fU c #ababab", +".5 c #abc9e9", +"iB c #abe3ff", +"e2 c #acacac", +".6 c #accaea", +"jo c #adadad", +".1 c #adcbed", +".7 c #adccec", +"iD c #ade2ff", +"iC c #ade3ff", +"fS c #aeaeae", +".4 c #aecded", +"db c #afafaf", +".A c #afbbe7", +".2 c #afccee", +".3 c #afceee", +"d6 c #b0b0b0", +"iQ c #b0e9ff", +"bG c #b1b1b1", +"jg c #b2b2b2", +"#E c #b3b3b3", +".O c #b3d1ed", +"gF c #b4b4b4", +"cY c #b5b5b5", +"iR c #b5ebff", +"hM c #b6b6b6", +"iS c #b6ecff", +"d9 c #b7b7b7", +".U c #b8b8b8", +".u c #b9b9b9", +"dd c #bababa", +".P c #bad4ee", +"bL c #bbbbbb", +".Q c #bbd4ef", +".R c #bbd5f0", +"e9 c #bcbcbc", +"c3 c #bdbdbd", +"f. c #bebebe", +"d8 c #bfbfbf", +".o c #bfc2e8", +"iZ c #bffdff", +"iw c #c0c0c0", +"iV c #c1c1c1", +"i0 c #c1feff", +"ei c #c2c2c2", +"ej c #c3c3c3", +"#a c #c4c4c4", +"el c #c5c5c5", +"d7 c #c6c6c6", +".r c #c6cbda", +"ek c #c7c7c7", +"aN c #c8c8c8", +"#G c #c9c9c9", +"aL c #cacaca", +"ai c #cbcbcb", +".B c #cbddf2", +"bZ c #cccccc", +".C c #cce0f3", +"dc c #cdcdcd", +"ah c #cecece", +"da c #cfcfcf", +".E c #cfe1f3", +".D c #cfe1f4", +"#I c #d0d0d0", +"cV c #d1d1d1", +"fQ c #d2d2d2", +"bB c #d3d3d3", +"#c c #d4d4d4", +"d# c #d5d5d5", +"aK c #d6d6d6", +"cZ c #d7d7d7", +"c6 c #d8d8d8", +"gH c #d9d9d9", +".W c #dadada", +"gM c #dbdbdb", +"bQ c #dcdcdc", +"e1 c #dddddd", +"cR c #dedede", +"d. c #dfdfdf", +"bP c #e0e0e0", +"i# c #e1e1e1", +"bY c #e2e2e2", +".K c #e3e3e3", +"ee c #e4e4e4", +"d3 c #e5e5e5", +"ef c #e6e6e6", +".p c #e6e9f6", +"fV c #e7e7e7", +"eY c #e8e8e8", +".a c #e9e9e9", +".q c #e9edf8", +".V c #eaeaea", +"## c #ebebeb", +"Qt c #ececec", +".w c #ededed", +".x c #eeeeee", +"#. c #efefef", +".# c #f0f0f0", +".9 c #f1f1f1", +".I c #f2f2f2", +".T c #f3f3f3", +"ja c #f4f4f4", +"i9 c #f5f5f5", +"hB c #f6f6f6", +".H c #f7f7f7", +".G c #f8f8f8", +"i. c #f9f9f9", +"kg c #fafafa", +"kf c #fbfbfb", +".t c #fcfcfc", +".s c #fdfdfd", +"it c #fefefe", +"iu c #ffffff", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt"}; diff --git a/tests/auto/gui/image/qimagereader/images/qt-gif-anim.gif b/tests/auto/gui/image/qimagereader/images/qt-gif-anim.gif Binary files differnew file mode 100644 index 0000000000..8bca4a8354 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt-gif-anim.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gif b/tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gif Binary files differnew file mode 100644 index 0000000000..b6a854067d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt.gif b/tests/auto/gui/image/qimagereader/images/qt.gif Binary files differnew file mode 100644 index 0000000000..e0a5a80b13 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt1.gif b/tests/auto/gui/image/qimagereader/images/qt1.gif Binary files differnew file mode 100644 index 0000000000..0ce910cee0 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt1.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt2.gif b/tests/auto/gui/image/qimagereader/images/qt2.gif Binary files differnew file mode 100644 index 0000000000..993a315d0f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt2.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt3.gif b/tests/auto/gui/image/qimagereader/images/qt3.gif Binary files differnew file mode 100644 index 0000000000..7391678a99 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt3.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt4.gif b/tests/auto/gui/image/qimagereader/images/qt4.gif Binary files differnew file mode 100644 index 0000000000..41109a9c3f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt4.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt5.gif b/tests/auto/gui/image/qimagereader/images/qt5.gif Binary files differnew file mode 100644 index 0000000000..5a3fb54ff5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt5.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt6.gif b/tests/auto/gui/image/qimagereader/images/qt6.gif Binary files differnew file mode 100644 index 0000000000..f22e7c980a --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt6.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt7.gif b/tests/auto/gui/image/qimagereader/images/qt7.gif Binary files differnew file mode 100644 index 0000000000..a315671417 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt7.gif diff --git a/tests/auto/gui/image/qimagereader/images/qt8.gif b/tests/auto/gui/image/qimagereader/images/qt8.gif Binary files differnew file mode 100644 index 0000000000..2a7d09e859 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qt8.gif diff --git a/tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpg b/tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpg Binary files differnew file mode 100644 index 0000000000..605e8a85da --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpg diff --git a/tests/auto/gui/image/qimagereader/images/rect.svg b/tests/auto/gui/image/qimagereader/images/rect.svg new file mode 100644 index 0000000000..c56549a69a --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rect.svg @@ -0,0 +1,462 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="128" + height="128" + viewBox="0 0 105.427 137.439" + id="Livello_1" + xml:space="preserve" + style="overflow:visible"><defs + id="defs2727"><linearGradient + x1="26.294399" + y1="11.6704" + x2="71.901901" + y2="133.0273" + id="linearGradient3352" + xlink:href="#XMLID_34_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="36.838902" + y1="7.7075" + x2="82.446297" + y2="129.0645" + id="linearGradient3354" + xlink:href="#XMLID_34_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="33.882301" + y1="23.583" + x2="39.972198" + y2="23.583" + id="XMLID_34_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2672" + style="stop-color:#ff5d5d;stop-opacity:1" + offset="0" /> + <stop + id="stop2674" + style="stop-color:#e20800;stop-opacity:1" + offset="1" /> + </linearGradient><linearGradient + x1="33.882301" + y1="23.583" + x2="39.972198" + y2="23.583" + id="linearGradient3368" + xlink:href="#XMLID_34_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="54.356899" + y1="1.124" + x2="99.964401" + y2="122.481" + id="linearGradient3370" + xlink:href="#XMLID_34_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="15.8457" + y1="15.5972" + x2="61.453098" + y2="136.9541" + id="linearGradient3376" + xlink:href="#XMLID_34_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="43.438" + y1="5.2275" + x2="89.045403" + y2="126.5845" + id="linearGradient3382" + xlink:href="#XMLID_34_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="8.1176996" + y1="14.9019" + x2="70.759598" + y2="117.2331" + id="linearGradient3792" + xlink:href="#XMLID_30_" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.9991,-4.18e-2,4.18e-2,0.9991,-2.4309,1.195)" /><linearGradient + x1="10.5708" + y1="10.1548" + x2="73.2117" + y2="112.4844" + id="linearGradient3794" + xlink:href="#XMLID_30_" + gradientUnits="userSpaceOnUse" /><linearGradient + x1="6.2178001" + y1="72.223602" + x2="79.360802" + y2="72.223602" + id="XMLID_26_" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,2.1512354)"> + <stop + id="stop2578" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2580" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient><filter + id="filter5869"><feGaussianBlur + id="feGaussianBlur5871" + stdDeviation="1.2254964" + inkscape:collect="always" /></filter><filter + id="filter5873"><feGaussianBlur + id="feGaussianBlur5875" + stdDeviation="1.3615922" + inkscape:collect="always" /></filter><filter + id="filter2854"><feGaussianBlur + id="feGaussianBlur2856" + stdDeviation="0.8944793" + inkscape:collect="always" /></filter></defs> +<filter + id="AI_Sfocatura_1"> + <feGaussianBlur + id="feGaussianBlur2545" + stdDeviation="1" /> +</filter> +<g + transform="translate(-3.2052027,3.2058836)" + id="g2547"> + <g + transform="matrix(0.9982563,0,0,0.9982563,-1.5492234e-2,0.2232388)" + id="g2549"> + <g + id="g2551"> + <linearGradient + x1="6.2178001" + y1="68.029297" + x2="79.360802" + y2="68.029297" + id="XMLID_24_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2554" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2556" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 9.542,121.224 C 7.713,121.224 6.217,119.728 6.217,117.9 L 6.217,18.16 C 6.217,16.331 7.713,14.835 9.542,14.835 L 76.036,14.835 C 77.864,14.835 79.36,16.331 79.36,18.16 L 79.36,117.9 C 79.36,119.728 77.864,121.224 76.036,121.224 L 9.542,121.224 z" + id="path2558" + style="fill:url(#XMLID_24_)" /> + </g> + <g + id="g2560"> + <linearGradient + x1="10.5718" + y1="15.3989" + x2="73.212097" + y2="117.7277" + id="XMLID_25_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2563" + style="stop-color:#77b753;stop-opacity:1" + offset="0" /> + <stop + id="stop2565" + style="stop-color:#00892c;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 11.204,18.159 C 10.29,18.159 9.542,18.907 9.542,19.821 L 9.542,116.237 C 9.542,117.151 10.29,117.899 11.204,117.899 L 74.375,117.899 C 75.289,117.899 76.037,117.151 76.037,116.237 L 76.037,19.821 C 76.037,18.907 75.289,18.159 74.375,18.159 L 11.204,18.159 z" + id="path2567" + style="fill:url(#XMLID_25_)" /> + </g> + </g> + <g + transform="matrix(0.9982563,0,0,0.9982563,1.05825,0.2232388)" + id="g2569"> + <path + d="M 11.639,126.468 C 9.811,126.468 8.314,124.972 8.314,123.143 L 8.314,23.403 C 8.314,21.574 9.811,20.078 11.639,20.078 L 78.134,20.078 C 79.962,20.078 81.458,21.574 81.458,23.403 L 81.458,123.143 C 81.458,124.972 79.962,126.468 78.134,126.468 L 23.696022,126.468 L 11.639,126.468 z" + transform="matrix(1.041449,0,0,1,-4.451967,3.1512354)" + id="path2575" + style="opacity:0.6;filter:url(#filter2854)" /><path + d="M 9.542,127.56924 C 7.714,127.56924 6.218,126.07324 6.218,124.24624 L 6.218,24.505236 C 6.218,22.677236 7.714,21.181236 9.542,21.181236 L 76.037,21.181236 C 77.865,21.181236 79.361,22.677236 79.361,24.505236 L 79.361,124.24624 C 79.361,126.07324 77.865,127.56924 76.037,127.56924 L 9.542,127.56924 z" + id="path2582" + style="fill:url(#XMLID_26_)" /> + <g + transform="translate(0,2.1512354)" + id="g2584"> + <g + transform="matrix(1.0276326,0,0,1,-2.2508995,0)" + id="g2586" + style="opacity:0.5;filter:url(#AI_Sfocatura_1)"> + <path + d="M 11.639,123.321 C 9.811,123.321 8.314,121.824 8.314,119.997 L 81.458,119.997 C 81.458,121.824 79.962,123.321 78.134,123.321 L 11.639,123.321 z" + id="path2588" /> + </g> + <linearGradient + x1="6.2178001" + y1="69.078102" + x2="79.360802" + y2="69.078102" + id="XMLID_27_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2591" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2593" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 9.542,122.272 C 7.714,122.272 6.218,120.776 6.218,118.947 L 6.218,19.207 C 6.218,17.378 7.714,15.882 9.542,15.882 L 76.037,15.882 C 77.865,15.882 79.361,17.378 79.361,19.207 L 79.361,118.947 C 79.361,120.776 77.865,122.272 76.037,122.272 L 9.542,122.272 z" + id="path2595" + style="fill:url(#XMLID_27_)" /> + </g> + <g + transform="translate(0,3.2268531)" + id="g2597"> + <g + transform="matrix(1.0368435,0,0,1,-3.0011994,-1.0756177)" + id="g2599" + style="opacity:0.5;filter:url(#AI_Sfocatura_1)"> + <path + d="M 11.639,120.175 C 9.811,120.175 8.314,118.679 8.314,116.85 L 81.458,116.85 C 81.458,118.679 79.962,120.175 78.134,120.175 L 11.639,120.175 z" + id="path2601" /> + </g> + <linearGradient + x1="6.2178001" + y1="65.931602" + x2="79.360802" + y2="65.931602" + id="XMLID_28_" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-1.0756177)"> + <stop + id="stop2604" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2606" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 9.542,118.05038 C 7.714,118.05038 6.218,116.55438 6.218,114.72638 L 6.218,14.986382 C 6.218,13.157382 7.714,11.661382 9.542,11.661382 L 76.037,11.661382 C 77.865,11.661382 79.361,13.157382 79.361,14.986382 L 79.361,114.72638 C 79.361,116.55438 77.865,118.05038 76.037,118.05038 L 9.542,118.05038 z" + id="path2608" + style="fill:url(#XMLID_28_)" /> + </g> + <g + transform="translate(0,1.8317954)" + id="g2610"> + <g + transform="matrix(1.0184218,0,0,1.0158314,-1.4821779,-1.8527316)" + id="g2612" + style="opacity:0.5;filter:url(#AI_Sfocatura_1)"> + <path + d="M 10.639,117.029 C 8.811,117.029 7.314,115.532 7.314,113.704 L 7.314,13.964 C 7.314,12.135 8.811,10.639 10.639,10.639 L 77.134,10.639 C 78.962,10.639 80.458,12.135 80.458,13.964 L 80.458,113.704 C 80.458,115.532 78.962,117.029 77.134,117.029 L 10.639,117.029 z" + id="path2614" /> + </g> + <linearGradient + x1="6.2178001" + y1="62.785599" + x2="79.360802" + y2="62.785599" + id="XMLID_29_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2617" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2619" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 9.542,115.98 C 7.714,115.98 6.218,114.483 6.218,112.656 L 6.218,12.916 C 6.218,11.087 7.714,9.591 9.542,9.591 L 76.037,9.591 C 77.865,9.591 79.361,11.087 79.361,12.916 L 79.361,112.657 C 79.361,114.484 77.865,115.981 76.037,115.981 L 9.542,115.981 L 9.542,115.98 z" + id="path2621" + style="fill:url(#XMLID_29_)" /> + <linearGradient + x1="10.5708" + y1="10.1548" + x2="73.2117" + y2="112.4844" + id="XMLID_30_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2624" + style="stop-color:#73bdf2;stop-opacity:1" + offset="0" /> + <stop + id="stop2626" + style="stop-color:#3592ee;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 11.204,12.916 C 10.289,12.916 9.541,13.664 9.541,14.578 L 9.541,110.994 C 9.541,111.909 10.289,112.657 11.204,112.657 L 74.373,112.657 C 75.288,112.657 76.036,111.909 76.036,110.994 L 76.036,14.578 C 76.036,13.664 75.288,12.916 74.373,12.916 L 11.204,12.916 L 11.204,12.916 z" + id="path2628" + style="fill:url(#linearGradient3794)" /> + </g> + </g> + <g + transform="matrix(0.9961334,-6.5068755e-2,6.5068755e-2,0.9961334,-5.7493275,-6.3015051)" + id="g2630"> + <g + transform="matrix(1.0311837,0,0,1.0154411,-2.8218065,-1.9088007)" + id="g2632" + style="opacity:0.6;filter:url(#filter5869)"> + <path + d="M 10.744,123.615 C 8.917,123.691 7.36,122.259 7.283,120.432 L 3.118,20.779 C 3.042,18.952 4.474,17.395 6.301,17.319 L 72.737,14.542 C 74.563,14.465 76.121,15.898 76.198,17.725 L 80.363,117.377 C 80.439,119.204 79.007,120.761 77.181,120.839 L 10.744,123.615 z" + id="path2634" /> + </g> + <g + id="g2636"> + + <linearGradient + x1="3.7607" + y1="67.532204" + x2="76.909698" + y2="67.532204" + id="XMLID_31_" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.9991,-4.18e-2,4.18e-2,0.9991,-2.4309,1.195)"> + <stop + id="stop2639" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2641" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 9.695,121.518 C 7.868,121.595 6.311,120.163 6.234,118.335 L 2.069,18.682 C 1.993,16.855 3.425,15.298 5.252,15.222 L 71.688,12.444 C 73.514,12.368 75.072,13.8 75.149,15.627 L 79.314,115.28 C 79.391,117.106 77.959,118.663 76.131,118.741 L 9.695,121.518 z" + id="path2643" + style="fill:url(#XMLID_31_)" /> + </g> + <path + d="M 7.051,18.474 C 6.138,18.513 5.422,19.291 5.46,20.204 L 9.486,116.535 C 9.525,117.448 10.303,118.164 11.217,118.126 L 74.331,115.489 C 75.244,115.451 75.96,114.672 75.922,113.759 L 71.897,17.427 C 71.859,16.513 71.08,15.797 70.167,15.836 L 7.051,18.474 z" + id="path2652" + style="fill:url(#linearGradient3792);fill-opacity:1" /> + <path + d="M 9.5625,22.375 C 10.84375,52.927083 12.125,83.479167 13.40625,114.03125 C 32.885417,113.21875 52.364583,112.40625 71.84375,111.59375 C 70.5625,81.041667 69.28125,50.489583 68,19.9375 C 48.520833,20.75 29.041667,21.5625 9.5625,22.375 z" + id="path4189" + style="opacity:0.6;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:1.00000001, 1.00000001;stroke-dashoffset:0;stroke-opacity:1" /></g> + <g + transform="matrix(0.9982563,0,0,0.9982563,10.72193,-5.1454722)" + id="g2654"> + <g + transform="translate(-4.2156998e-8,1.0756177)" + id="g2656" + style="opacity:0.6;filter:url(#filter5873)"> + <path + d="M 10.854785,112.52047 C 9.0174891,112.09656 7.8676311,110.2731 8.2990859,108.46891 L 31.839177,9.9940152 C 32.271664,8.1888112 34.127539,7.0580233 35.964835,7.481942 L 102.78149,22.901224 C 104.61776,23.325142 105.76865,25.149615 105.33616,26.954819 L 81.79607,125.42768 C 81.364615,127.23289 79.507708,128.36368 77.671444,127.93976 L 10.854785,112.52047 z" + id="path2658" /> + </g> + <g + id="g2660"> + + <linearGradient + x1="16.688499" + y1="-8.9546003" + x2="94.108398" + y2="105.6356" + id="XMLID_33_" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.9735,0.2287,-0.2287,0.9735,14.4454,7.996)"> + <stop + id="stop2663" + style="stop-color:#ffffff;stop-opacity:1" + offset="0" /> + <stop + id="stop2665" + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 12.707,111.688 C 10.927,111.271 9.813,109.472 10.231,107.692 L 33.037,10.593 C 33.455,8.813 35.254,7.698 37.034,8.116 L 101.767,23.32 C 103.546,23.738 104.661,25.537 104.243,27.317 L 81.436,124.415 C 81.019,126.195 79.219,127.31 77.44,126.892 L 12.707,111.688 z" + id="path2667" + style="fill:url(#XMLID_33_)" /> + </g> + <path + d="M 33.925,25.17 L 35.435,25.3 C 35.369,25.76 35.413,26.134 35.567,26.422 C 35.721,26.71 35.941,26.887 36.226,26.954 C 36.538,27.027 36.832,26.947 37.114,26.715 C 37.396,26.483 37.594,26.116 37.712,25.615 C 37.821,25.149 37.805,24.759 37.661,24.445 C 37.517,24.132 37.298,23.939 37.004,23.87 C 36.811,23.825 36.571,23.817 36.281,23.846 L 36.797,22.386 C 37.187,22.487 37.522,22.455 37.801,22.292 C 38.076,22.127 38.26,21.847 38.353,21.451 C 38.431,21.12 38.41,20.843 38.291,20.618 C 38.172,20.392 37.984,20.25 37.729,20.19 C 37.473,20.13 37.226,20.187 36.987,20.358 C 36.749,20.531 36.562,20.825 36.427,21.24 L 35.104,20.624 C 35.455,19.78 35.886,19.208 36.401,18.909 C 36.915,18.61 37.492,18.536 38.131,18.686 C 38.85,18.855 39.36,19.244 39.663,19.853 C 39.967,20.462 40.045,21.076 39.9,21.695 C 39.802,22.113 39.618,22.468 39.35,22.758 C 39.081,23.049 38.726,23.276 38.287,23.439 C 38.699,23.661 38.996,24.004 39.18,24.471 C 39.362,24.937 39.383,25.471 39.242,26.073 C 39.036,26.949 38.604,27.613 37.948,28.064 C 37.29,28.515 36.601,28.655 35.88,28.486 C 35.189,28.323 34.661,27.944 34.297,27.347 C 33.931,26.751 33.808,26.025 33.925,25.17 z" + id="path2676" + style="fill:url(#linearGradient3368);fill-opacity:1" /> + <linearGradient + x1="26.294399" + y1="11.6704" + x2="71.901901" + y2="133.0273" + id="XMLID_35_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2679" + style="stop-color:#ff8080;stop-opacity:1" + offset="0" /> + <stop + id="stop2681" + style="stop-color:#e20800;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 32.977,38.964 C 33.619,37.58 34.903,36.55 35.811,35.945 C 36.752,35.319 37.49,34.55 37.729,33.53 C 38.094,31.979 36.471,30.257 34.621,31.997 C 33.74,29.616 31.507,30.433 31.143,31.984 C 30.903,33.003 31.223,34.019 31.786,35 C 32.329,35.946 33.021,37.439 32.977,38.964 z" + id="path2683" + style="fill:url(#linearGradient3352);fill-opacity:1" /> + <path + d="M 80.223,109.559 L 78.711,109.43 C 78.779,108.969 78.734,108.595 78.58,108.308 C 78.426,108.02 78.205,107.842 77.922,107.776 C 77.61,107.703 77.315,107.782 77.033,108.014 C 76.751,108.246 76.553,108.614 76.433,109.114 C 76.324,109.581 76.341,109.97 76.484,110.284 C 76.629,110.598 76.849,110.79 77.142,110.859 C 77.335,110.904 77.576,110.913 77.865,110.883 L 77.349,112.343 C 76.958,112.242 76.624,112.274 76.345,112.439 C 76.07,112.603 75.886,112.883 75.792,113.279 C 75.714,113.609 75.735,113.887 75.854,114.112 C 75.973,114.339 76.161,114.481 76.416,114.541 C 76.672,114.602 76.918,114.545 77.156,114.372 C 77.394,114.2 77.582,113.906 77.717,113.49 L 79.039,114.106 C 78.689,114.95 78.258,115.521 77.742,115.82 C 77.228,116.119 76.652,116.193 76.013,116.043 C 75.294,115.874 74.783,115.486 74.48,114.876 C 74.175,114.268 74.097,113.653 74.244,113.034 C 74.342,112.616 74.525,112.262 74.795,111.971 C 75.063,111.681 75.418,111.453 75.857,111.289 C 75.445,111.069 75.146,110.725 74.964,110.259 C 74.78,109.793 74.761,109.259 74.902,108.657 C 75.109,107.78 75.541,107.117 76.197,106.666 C 76.855,106.216 77.543,106.075 78.265,106.244 C 78.956,106.406 79.484,106.786 79.849,107.382 C 80.217,107.978 80.34,108.704 80.223,109.559 z" + id="path2694" + style="fill:#e20800;fill-opacity:1" /><path + d="M 81.063,95.83 C 80.422,97.214 79.138,98.244 78.23,98.85 C 77.29,99.477 76.55,100.246 76.311,101.264 C 75.947,102.815 77.57,104.536 79.419,102.797 C 80.301,105.178 82.533,104.361 82.898,102.811 C 83.138,101.791 82.819,100.776 82.255,99.795 C 81.711,98.849 81.021,97.355 81.063,95.83 z" + id="path2701" + style="fill:url(#linearGradient3382);fill-opacity:1" /> + <linearGradient + x1="54.356899" + y1="1.124" + x2="99.964401" + y2="122.481" + id="XMLID_39_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2704" + style="stop-color:#ff8080;stop-opacity:1" + offset="0" /> + <stop + id="stop2706" + style="stop-color:#e20800;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 63.174,42.222 C 64.361,39.656 66.742,37.748 68.427,36.625 C 70.171,35.463 71.54,34.04 71.985,32.15 C 72.66,29.274 69.651,26.081 66.22,29.307 C 64.585,24.892 60.448,26.406 59.772,29.281 C 59.329,31.172 59.921,33.055 60.965,34.873 C 61.97,36.628 63.253,39.396 63.174,42.222 z" + id="path2708" + style="fill:url(#linearGradient3370);fill-opacity:1" /> + <linearGradient + x1="36.838902" + y1="7.7075" + x2="82.446297" + y2="129.0645" + id="XMLID_40_" + xlink:href="#XMLID_39_" + gradientUnits="userSpaceOnUse"> + <stop + id="stop2711" + style="stop-color:#ff8080;stop-opacity:1" + offset="0" /> + <stop + id="stop2713" + style="stop-color:#e20800;stop-opacity:1" + offset="1" /> + </linearGradient> + <path + d="M 55.486,74.959 C 56.672,72.393 59.054,70.485 60.737,69.362 C 62.481,68.2 63.851,66.777 64.296,64.886 C 64.97,62.01 61.962,58.818 58.532,62.043 C 56.897,57.628 52.759,59.142 52.082,62.018 C 51.638,63.908 52.23,65.792 53.275,67.609 C 54.281,69.364 55.565,72.132 55.486,74.959 z" + id="path2715" + style="fill:url(#linearGradient3354);fill-opacity:1" /> + <path + d="M 51.37,92.488 C 50.182,95.054 47.801,96.961 46.117,98.084 C 44.373,99.246 43.004,100.67 42.559,102.561 C 41.884,105.436 44.893,108.627 48.323,105.404 C 49.958,109.82 54.096,108.304 54.772,105.428 C 55.217,103.538 54.623,101.655 53.579,99.836 C 52.573,98.082 51.291,95.314 51.37,92.488 z" + id="path2724" + style="fill:url(#linearGradient3376);fill-opacity:1" /> + </g> +</g> +</svg>
\ No newline at end of file diff --git a/tests/auto/gui/image/qimagereader/images/rect.svgz b/tests/auto/gui/image/qimagereader/images/rect.svgz Binary files differnew file mode 100644 index 0000000000..c2e193b989 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rect.svgz diff --git a/tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tif Binary files differnew file mode 100644 index 0000000000..78868b0d48 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tif diff --git a/tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tif Binary files differnew file mode 100644 index 0000000000..107eab74e7 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tif diff --git a/tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tif Binary files differnew file mode 100644 index 0000000000..c314bae4c0 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tif diff --git a/tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tif Binary files differnew file mode 100644 index 0000000000..4f820f6649 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tif diff --git a/tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tif Binary files differnew file mode 100644 index 0000000000..ddeec38fbc --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tif diff --git a/tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tif Binary files differnew file mode 100644 index 0000000000..50a3024246 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tif diff --git a/tests/auto/gui/image/qimagereader/images/runners.ppm b/tests/auto/gui/image/qimagereader/images/runners.ppm Binary files differnew file mode 100644 index 0000000000..fda1c97073 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/runners.ppm diff --git a/tests/auto/gui/image/qimagereader/images/teapot.ppm b/tests/auto/gui/image/qimagereader/images/teapot.ppm new file mode 100644 index 0000000000..b8ab85f3a5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/teapot.ppm @@ -0,0 +1,31 @@ +P6 +256 256 +255 +\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[7 eOLjQLmSMoTMnSMlRMhPL_9 \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀnSMtVMzYN~[N~[N\N\O€\O€]O€]O€]O€]O€\O€\O}[NyYNtVM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-wXN}[N€]O„^O†_O†`O‡`Oˆ`Oˆ`OˆaO‰aO‰aO‰aO‰aO‰aO‰aOˆaOˆ`O†_Oƒ^O\N\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaMLyYN…_O‰aP‹bPcPŽcPŽdPŽdPdPdPdPdPdPdPdPeP‘eP’eP’eP‘ePdPcP…_OpUM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN…_OdP“fP•gQ–hQ˜hQ˜iQ™iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœjQœjQœjQ›jQœjQ™iQ“fP‡`O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJiQL‹bP—hQkQ¡mR¤nR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦pR¨pS©qSªqS«rS¬rS«rS©qS¤oRœjQ€]O\KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀfOLrUMcPŸlR©qS¯tS²uTµwT·xT¸xT¹yTºyT»zT»zU¼zU¼zU¼zU»zUºyT¸xT¶wT¯tS¡mR‰aOhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àa0 cNLqUM€\O”fQ¦pS²wVºzV¿|VÂ}VÄVÆVÇ€VÉ‚WÌ…[Õeæ w÷³‹êª…Ĉg§qT“fQ{ZNYIK9\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀO1{G#‘JkRMqUMtVN–iS¨v\·€d¹bµzZ±vU°uT®sSªqS¤nRœjQ’eP„^OrUMHh>!T4\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-V5wE"~I#†M%U+¥e7²l:°g2®b*a(`(©^(¥])¡^-›]1ŠS,qC$`9 R3G-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@)J/i>!pA"tD"wF$yH&xH&tE$wE#yG%}M+ƒT4S5mE*Z7!K/B*;'\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‰aO¦oR½{UÇ€VÏ…X<(F-a: e<!h>!j@#k@$h>"d<!c=$hD-fF2[<)K0@);'5$Ë‚VÇ€V¿|U_LKYIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À…_O·xTÉ‚Wó«€ûµ‹Ö’k¼|X×>µf-¨^(¡Z'šW&–T&œN>)F-J/b; g>#nD(jB&c<!b=%jH2_A/I0!<(8&5$”J¥Y’S%8&;'?)E,<:HA=HE?IJAISFJYIKXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À£nRÁ}UܘqÊŠe±vU²e,™V&¥V†C
€@|>y<u:r9o7l6 +j5 +h4 +g3 +5$D,K/b; h>"wM1tK.e="a<#cA,U8&E-<(9&.!a0 b1 c1 + ++3#@)46G<:HMCIXHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀU*´vT¿~X¸{YÃk+›W&‰N$|>u:p8k5 +f3 +a0 _/ ]. [- I¡\*ª_(‘LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c<!a=%Y7"N1F,;'NCJNCJNDJODJODJODJh>!a: X/K% +g3 +a0 Z- \/T*Q(ŠHµm8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d<!yF#O+€N,rC#qB"pB#k?"a: Z7 6ODJPDJPEJQEJQEJREJREJREJRFJSFJSFJSFJSFJe<!X/ +^/ V+Q(L&I$r9 TlRMnSM46G47G47G46G46G46G46G46G36G36G25G25G15G04G/4F.3F + +X&pUMuWMwXNxXN<:H<:H<:H<:H<;H<;H<;H<;H=;H=;H=;H=;H>;H>;H?<H@<HA=HC>HG@ILBIREJ[JKcNLjQL§pR±uTºzUÃ~VÈWË‚XÖŽcäsÒŽe¼{V²vT¨pSžkR•gQŒbP†_O‚^O]O€\O€\O€\O€\O€]O]O]O]O]O]O]O]O]O]O]O€\O€\O~\N}[N|ZNxXN•T%H$ +›W&rVMvWNyYNzYN|ZN}[N}[N><H?<H?<H?<H?<H?<H@<H@<H@<HA=HA=HB=HC>HE?IG@IIAIKBIODJSFJWHK—hQŸlR§pR°b(¾i*Én+Ù|7Û|6Ïr,Íq+Êp-Ãl+»g)±b(®sS§pS lRšiQ•gQePcPŠaPˆaO‡`O‡`O†_O†_O…_O…_O…_O…_O…_O…_O…_O„_O„^O„^Oƒ^Oƒ^O‚]O]O€\O~[N{ZN•T% + + +@%<-$G?@…pfdNLuWM\NdNL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀTFJvWN‰aP./01„E}[N]O…_Oˆ`O‰aP‹bPŒbPcPcPŽcPdPdPdPeP‘eP’eP’eP“fP“fQ”fQ•gQ•gQ–gQ–hQ—hQ˜hQ™iQšiQ›jQœjQkQkRžlRŸlRžY&¤\'¨^'µ^½bÀcÃeÇi ÄgÀc½b¼a¹`µ^´]¯X¢[' Z'žY&¢mR¡mR¡mR lRŸlRŸlRžkRkQœkQœjQ›jQšjQšiQ™iQ™iQ˜iQ˜hQ—hQ—hQ—hQ–gQ–gQ•gQ•gQ•gQ”fQ”fQ“fQ“fP’eP‘ePdPcP‰aP—O + B\À\À\À\À\À\À\À\À\À\À%7!!C*F#P){dYœze»p€\OgPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ`LKvWNŠaPm6 + +$5 ¬`(¶e)£nRœjQƒ^OJAI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXIK^KKdNLhPLuWM‚]OŒbP”fQeP
m6 +†`OŽcP“fQ—hQ˜hQ™iQšiQšjQ›jQ›jQ›jQœjQœjQœjQœkQkQkQkRžkRžkRžkRžlRŸlRŸlRŸlR lR lR lR¡mR¡mR¡mR¡mRºg)³c(²c(±b(V¿cÂeÅi!Åi!Àd¼bº`¹`·_·_¶^¢Q§]'ª_(`(¹f)£nR£nR£nR£nR£nR£nR£nR¢nR¢nR¢nR¢nR¢nR¢nR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR¢mR¢mR£nR¢mR¢mR¡mR mRkR—hQˆGa0 ŠbP mRœjQ“fQ‰aP}[NrUMmSM…L$\À\À\À\À\À\À\À\À B B
#C, 8&H.Z7 §pR›jQ{ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJ[JK`LKdNLhQLqUM{ZN…_OŽcP–gQ—hQ +‹bP‘eP–hQšiQ›jQœjQkQkQkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlR lR lR lR mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢nR£nRÀj*ºg)·e)¶d)Âd°XÅgÅhÂe¿c½b½b¾bªU`(®a(¯a(³c(¾i*¤oR¤oR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¥oR¥oR¤nR¡mR›jQŽQ%Z- œjQ£nRŸlR—hQŽdP…_OuWMpTMnSMkRLa: \À\À\À\À\À\À\À B B&D2
@*S6#G@IPDJ˜hQmSM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ]KKbMLeOLiQLlRMvWN\OˆaO‘eP—hQœjQ•gQ +!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀREJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N]O„^O†`O‰aO‹bPdP•gQ™iQœkQ lR¤nR§pSªrSsS¯tT²uT´vT¶wT·xT¹yT¹yTºyTºyT¹yT¶xT´vT¬rS¢nR—hQ¿|U¿|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ}UÀ}UÁ}UÁ}UÁ}UÁ}UÂ}UÂ~UÃ~UÃ~VÃ~VÄVÅ€WÆX®a(ŸlRªrS´vT¸yT¼zU¾|UÁ~VÃXÆ‚[Ɇ_΋dÓ‘jÔ“mÔ“nБlÊŒhĆd½_¶{[°vWªsU¦pS¢nRžkRšiQ˜hQ•gQ“fQ‘ePdPŒbP‰aO†_Oƒ^O€\O|ZNxXNsVMpTMnTMmSMjQL€C B)D&/F-3F47G6%>"Y7 kA$YIK]KK^KKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N‚]O„_O‡`OŠaPŒbPŽcPeP“fP—hQ›jQžlR¢nR¥oS©qT¬sT¯uU²vU´wV¶xV¸yV¹yUºzU»zU¼{U½{U¾{U¾|U¿|U¿|U¿|U¿|U¾{U½{U¼{U¼zU»zTºyT¹yT¸xTµwT³vT´vT´vT´vT´wT´wTµwT·xT¹yTºzT¼zU½{U¾{U¿|UÀ|UÂ}UÄVÅ€WÇ‚YÉ„\͈_ÑŒdÙ”láuç£|쩂ſtî‡ëª…æ¦ÞŸ{Õ—sËŽl†d¹^³yZuW¨qU¤oSŸlRžkRœjQšiQ˜hQ–gQ”fQ‘ePdPcPŠaP‡`O„^O]O}[NyYNuWMpTMoTMmSMkRLgPL&D#.E,3F46G;'<(D"iB(VGJ]KK`LK[JKB>H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N€\O‚^O…_Oˆ`OŠaPŒcPdP‘eP“fQ•gQ—hQ™iQkR mS¤oT¨rU¬tW°wY´zZ¸}\»]¾€^À^Á‚^‚^Â\Á€ZÁYÁXÁ~WÁ~WÂ~VÂ~VÂ~VÃ~VÃ~UÃ~UÄ~UÄ~UÄUÄUÅVÅVÅVÅVÆVÆ€VÆ€VÇ€WÇWÈ‚XɃZË…[͇^ЊaÓdØ’iÜ—nâtè£zî©ó¯‡ø´û¸‘üº“û¹“÷¶ñ±Œé©…à¡~Ö˜vËmÇf»€`´z[®vX©rU¥pT£oS¢nS lRžkRœkRšjQ˜iQ–hQ”fQ’ePdPcP‹bPˆ`O…_O‚]O~[NzYNvWNpTMoTMnSMkRMhQLo7,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_OˆaO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRžlR mS£oU§rW¬vZ²{]¹€a¿…fÅŠjËnГqÓ•sÕ–sÕ–rÕ–qÕ”oÓ’mÑjÏgÍŠcˈaɆ^È„\Ç‚[ÆYÅ€XÅ€WÅWÅWÅVÅVÅWÅ€WÆ€WÇXÈ‚YɃ[Ê…\͇_ÏŠaÒeÕ‘hÙ•mÝ™qávä¡zç¤}ê§€ë©ƒëª„é¨ƒå¥€ß |Ù›wÓ•rÌmƉh¿„c¸~^²yZ®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRœkR›jQ™iQ—hQ•gQ“fPePŽcP‹bPˆaO…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?<HA*E$ i@$ZIKaMLbML[JK;:H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀWHJ]KKbMLeOLhPLjRLlSMnTMpTMrUMuWMxXN{ZN~\N]O„^O†`O‰aO‹bPŽcPdP’eP”fQ–gQ˜hQšiQœkRžlS mT£oU¦rWªuZ¯y]´~aºƒfŠlË’sÔšzÜ¡€ã§†è«‰ë®‹í¯Œí®‹ë¬ˆè¨„ã£~ßžyÚ™tÖ•oÒjÎŒfˈbÈ…_ƃ\ÅZÄ€YÃXÂWÂ~WÂ~WÂ~WÃXÀXÄ€YÅZƃ\Ç…^Ɇ`ˈbÌŠdÍ‹fÎgÎŽiÎŽjÎŽjÍŽjËŒiljgÆd¿ƒaº^¸}]¶|\´{[²yZ°xY®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRkR›jQ™iQ—hQ•gQ“fP‘ePŽdPŒbP‰aO†_Oƒ^O€\O|ZNxXNtVMpTMnSMmSMjQLgPL99G?<HG-E&b;!YIK`MLdOM`LKNCJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀŸlRºyTÄ~UÊ‚XʃYÄXº{WtUšW'¢[(—hQ lRcP€\OhQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRLmSMoTMqUMrVMvWNyYN|ZN\N‚]O„_O‡`O‰aPŒbPŽcPdP’fP”gQ–hQ˜iQšjRœkRžlS¡nT¤pU§sW«vZ°z]µb»„gŠlÉ‘sИyØžÞ¤…ã©Šèì±ï³‘ﳑëŠç©…⣀ݞzؘtÒ“nÎiɉdÆ…`Â]Á€[¿~Y¾}X½|W½|V¼{V¼{V¼{V¼{V¼{V¼|W¼|W½}X½}Y½~Z½~Z¼~Z»}[º}[º}[º~\º~\º~]º~]¹~]¸~]·}]¶|\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS mRŸlRkR›jQšiQ˜hQ–gQ“fQ‘ePdPŒcPŠaP‡`O„^O]O}[NyYNuWNpTMnTMmSMkRLhPL|H$D>IQ2P+XHK_LLfQOcNLXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À©qSºyTÃ~VΈ`遲ޜv¾€]ªqS–LŽG|>g3 +S)?*%.—hQ—hQ‘eP‡`OuWM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽdP‘eP“fP•gQ—hQ˜iQšjRœkRŸlS¡nT¤pV§sX«vZ°z^¶b¼…gËmÊ’sјzØŸ€Þ¤…ã©Šèê¯ë°ê¯Žè¬‹å¨‡à¤‚Ûž|Ö™wÑ“qÌŽlljgÃ…bÀ‚_½\»}Zº{X¹zW¸yV·yU·xU·xU·xT·xT·xU·xU·xU·yV·yV·yW¸zW¸{X¹{Y¹|Zº}[º}[º}\º~\¹~]¹~]¸}]·|\µ{\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS¡mRŸlRkRœjQšiQ˜hQ–gQ”fQ’ePdPcPŠbP‡`O…_O‚]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h>!]KKfQOgQN_LKD>I\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À™iQ°tS¸yT¼{UÂYÎŒeïˆô´Õ—u¶|\ Z'™LˆD
|> + +
&3#.$-% .% .& /&!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&(+"(!' +%' %$#" ! !$
diff --git a/tests/auto/gui/image/qimagereader/images/test.ppm b/tests/auto/gui/image/qimagereader/images/test.ppm new file mode 100644 index 0000000000..05d627c0cb --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/test.ppm @@ -0,0 +1,2 @@ +P6 10 10 1023 +¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
\ No newline at end of file diff --git a/tests/auto/gui/image/qimagereader/images/test.xpm b/tests/auto/gui/image/qimagereader/images/test.xpm new file mode 100644 index 0000000000..5fcf075b7f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/test.xpm @@ -0,0 +1,260 @@ +/* XPM */ +static char * test_xpm[] = { +"256 256 1 1", +" c grey", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/tests/auto/gui/image/qimagereader/images/test32bfv4.bmp b/tests/auto/gui/image/qimagereader/images/test32bfv4.bmp Binary files differnew file mode 100644 index 0000000000..37060373ed --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/test32bfv4.bmp diff --git a/tests/auto/gui/image/qimagereader/images/test32v5.bmp b/tests/auto/gui/image/qimagereader/images/test32v5.bmp Binary files differnew file mode 100644 index 0000000000..8ad3cfa60d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/test32v5.bmp diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiff Binary files differnew file mode 100644 index 0000000000..3fcb8a9aca --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiff Binary files differnew file mode 100644 index 0000000000..6f3e9d5297 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiff Binary files differnew file mode 100644 index 0000000000..aab9cf2596 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiff Binary files differnew file mode 100644 index 0000000000..aad96ffc6c --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiff Binary files differnew file mode 100644 index 0000000000..05d23dcb86 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiff Binary files differnew file mode 100644 index 0000000000..9ffe7fcaa4 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiff Binary files differnew file mode 100644 index 0000000000..eeeb01937e --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiff Binary files differnew file mode 100644 index 0000000000..87cf2fd774 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiff Binary files differnew file mode 100644 index 0000000000..3b589b2232 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiff Binary files differnew file mode 100644 index 0000000000..9a662239db --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiff Binary files differnew file mode 100644 index 0000000000..eed242388c --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiff Binary files differnew file mode 100644 index 0000000000..055480e0ca --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiff Binary files differnew file mode 100644 index 0000000000..b4d0974ec8 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiff Binary files differnew file mode 100644 index 0000000000..3b1e02af56 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiff Binary files differnew file mode 100644 index 0000000000..b752c745c3 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiff Binary files differnew file mode 100644 index 0000000000..e228d05659 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiff Binary files differnew file mode 100644 index 0000000000..7507e526a5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiff Binary files differnew file mode 100644 index 0000000000..8ff9db80f5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiff Binary files differnew file mode 100644 index 0000000000..321ea3ebf5 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiff Binary files differnew file mode 100644 index 0000000000..2756a82fbb --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiff Binary files differnew file mode 100644 index 0000000000..ae9af0999d --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiff Binary files differnew file mode 100644 index 0000000000..a2f432526b --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiff Binary files differnew file mode 100644 index 0000000000..f35bfc4c9c --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiff Binary files differnew file mode 100644 index 0000000000..70e5478065 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiff Binary files differnew file mode 100644 index 0000000000..b2635fe14f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiff Binary files differnew file mode 100644 index 0000000000..1fb0cd9df6 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiff diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiff Binary files differnew file mode 100644 index 0000000000..666b1b4c55 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiff diff --git a/tests/auto/gui/image/qimagereader/images/transparent.xpm b/tests/auto/gui/image/qimagereader/images/transparent.xpm new file mode 100644 index 0000000000..5ddcf0b00e --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/transparent.xpm @@ -0,0 +1,788 @@ +/* XPM */ +static char *dummy[]={ +"8 8 777 2", +"#R c none", +"fn c #000001", +".e c #000069", +".f c #00006d", +".g c #00006e", +"#d c #0042b4", +"aJ c #010101", +"g0 c #010102", +"dr c #010202", +"gd c #010203", +"#J c #0157bb", +"e. c #020202", +"du c #020304", +"fR c #030303", +"jJ c #040404", +"hf c #040608", +"fE c #040609", +"cO c #04070a", +"k# c #050505", +"gC c #050709", +"ka c #060606", +"br c #06080a", +"dY c #06090d", +"hI c #070707", +"in c #07090b", +"cL c #070a0e", +"cd c #070b0f", +"e0 c #080808", +"gZ c #080b0e", +"eu c #080b0f", +"dz c #080c10", +"hD c #090909", +"fq c #090d11", +"cH c #090e13", +"jB c #0a0a0a", +"#U c #0a0d0f", +"a4 c #0a0d10", +"g3 c #0a0d11", +"fu c #0a0f14", +"cj c #0a1016", +"kb c #0b0b0b", +"#n c #0b0d0f", +"a1 c #0b0e10", +"g8 c #0b0f13", +"f4 c #0b0f14", +"hE c #0c0c0c", +"bf c #0c0f12", +".X c #0c28a0", +"bT c #0d0d0d", +"ax c #0d1014", +"hr c #0d1217", +"dH c #0d141b", +"jy c #0e0e0e", +"aW c #0e1115", +"eH c #0e141b", +"bE c #0f0f0f", +"ar c #0f1317", +"g5 c #0f1419", +"hg c #0f151a", +"fh c #0f151c", +"dJ c #0f171f", +"gI c #101010", +".z c #101094", +"h. c #10161b", +"gm c #10161c", +"eL c #10171f", +"hK c #111111", +"at c #11161b", +"fC c #111820", +"dA c #111922", +"aj c #1163c4", +"bJ c #121212", +"#Z c #12161a", +"ba c #12171c", +"ho c #12181e", +"jK c #131313", +"iq c #13191d", +"cA c #131e2a", +"c7 c #141414", +"dR c #141e29", +"jr c #151515", +"aA c #151a1f", +"hq c #151c23", +"fl c #151e28", +"eV c #151e29", +"d4 c #161616", +"hw c #161e25", +"jk c #171717", +"bs c #171d23", +"g9 c #171f27", +"eC c #17212b", +"b9 c #172432", +"d5 c #181818", +"as c #181e24", +"bn c #181f25", +"bS c #191919", +"gr c #19232d", +"ed c #1a1a1a", +".d c #1a1a6e", +"gB c #1a242e", +"eK c #1a2531", +"dQ c #1a2633", +"hL c #1b1b1b", +"g1 c #1b242d", +"g# c #1b252f", +"eJ c #1b2734", +"d1 c #1b2937", +"bW c #1c1c1c", +"gW c #1c262f", +"ci c #1c2b3b", +"cs c #1c2c3c", +"e# c #1d1d1d", +"#3 c #1d232a", +"f8 c #1d2833", +"fI c #1d2936", +"eO c #1d2a38", +"cw c #1d2e3f", +"jR c #1e1e1e", +"a2 c #1e262e", +"eP c #1e2b39", +"dE c #1e2d3d", +"cF c #1e2f41", +"aO c #1e6ec9", +"c4 c #1f1f1f", +"gx c #1f2a36", +"c# c #1f3043", +"j2 c #202020", +"bk c #202931", +"ht c #202c36", +"eF c #202f3e", +"b7 c #203245", +"cB c #203246", +"hG c #212121", +"aE c #212932", +"bp c #212a32", +"hl c #212d38", +"cc c #213347", +".M c #214eb7", +"hF c #222222", +"#7 c #222a32", +"fw c #223040", +"eU c #223141", +"jC c #232323", +"bb c #232c35", +"ga c #23303d", +"cv c #23364a", +"cn c #23364b", +"jl c #242424", +"gj c #243240", +"cm c #24374c", +"c. c #24384d", +"bF c #252525", +"be c #252f39", +"gt c #253341", +"dU c #253649", +".Y c #256cc9", +"jG c #262626", +"h8 c #26333d", +"hb c #263440", +"gs c #263443", +"cr c #263b51", +"cW c #272727", +"aC c #27313b", +"a9 c #27313c", +"fk c #273748", +"eR c #27384b", +"cq c #273d55", +"jV c #282828", +"#5 c #28313b", +"b0 c #2877ce", +"gL c #292929", +"#Y c #29323c", +"hu c #293744", +"fK c #293a4d", +"jP c #2a2a2a", +"#w c #2a323b", +"bg c #2a3540", +"dF c #2a3f55", +"jn c #2b2b2b", +"a6 c #2b3641", +"jY c #2c2c2c", +"h5 c #2c3b47", +"hp c #2c3c4a", +"gp c #2c3c4d", +"cx c #2c445e", +"bU c #2d2d2d", +"h# c #2d3e4c", +"dS c #2d435b", +"e5 c #2e2e2e", +"cG c #2e4762", +"jF c #2f2f2f", +"aG c #2f3b48", +"gU c #2f3f4e", +"ck c #2f4966", +"j0 c #303030", +"a0 c #303d4a", +"he c #304251", +"cQ c #307ace", +"e4 c #313131", +"ew c #31465d", +"dW c #314862", +"ce c #314b68", +"jm c #323232", +"bm c #323f4d", +"k. c #333333", +"e3 c #343434", +"hi c #344757", +"eT c #344b64", +"b8 c #34506f", +"dj c #347fd1", +"bX c #353535", +"f9 c #35485c", +"ac c #363636", +"#V c #36434f", +"fv c #364c64", +"dV c #36506d", +"c2 c #373737", +"ev c #37506a", +"bI c #383838", +"bw c #384655", +"h4 c #384b5a", +"hk c #384c5d", +"ea c #393939", +"bh c #394857", +"gX c #394d5f", +"#e c #3981d2", +"e6 c #3a3a3a", +"eS c #3a546f", +"em c #3a81d2", +"#F c #3b3b3b", +"eQ c #3b5571", +"dT c #3b5776", +"cI c #3b5c7f", +"gJ c #3c3c3c", +"hX c #3c5060", +"fi c #3c546f", +"gG c #3d3d3d", +"jv c #3e3e3e", +"az c #3e4e5e", +"fL c #3e5772", +"bK c #3f3f3f", +"gD c #3f576f", +"fJ c #3f5874", +"d2 c #3f86d5", +"jx c #404040", +"#8 c #404e5d", +"bv c #405161", +"cf c #406389", +"jL c #414141", +"iG c #415561", +"im c #415663", +"gz c #415971", +"et c #415d7c", +"cz c #41658c", +"f# c #418ad7", +"jT c #424242", +"gy c #425b74", +"fs c #425d7a", +"#K c #4288d4", +"jQ c #434343", +"eX c #438cda", +"j8 c #444444", +".L c #44449a", +"eZ c #454545", +"#s c #455362", +"fx c #45617f", +"cK c #456b94", +"aP c #458cd5", +"ab c #464646", +".n c #46469f", +"aH c #46586a", +"gV c #465f74", +"d0 c #46678c", +"c9 c #474747", +"aF c #47596c", +"a3 c #475a6d", +"ex c #476687", +"jU c #484848", +"by c #485b6e", +"gq c #48627d", +"dI c #486b91", +"cC c #48709b", +"js c #494949", +"#2 c #495a6b", +"ih c #49606f", +"hm c #49637a", +"gk c #49647f", +"j7 c #4a4a4a", +"dt c #4a6e94", +"ak c #4a8dd7", +"b1 c #4a90db", +"c1 c #4b4b4b", +"bx c #4b5f72", +"fr c #4b698a", +"dG c #4b6e95", +"co c #4b75a2", +"fW c #4b91db", +"bD c #4c4c4c", +"hc c #4c687f", +"j6 c #4d4d4d", +"#Q c #4d5f71", +"ik c #4d6676", +"hH c #4e4e4e", +"#0 c #4e5f72", +"aD c #4e6277", +"b. c #4e6377", +"gN c #4e91dc", +"c0 c #4f4f4f", +"bj c #4f6378", +"dZ c #4f759e", +"cD c #4f7aa9", +"hN c #4f8dcd", +"kd c #505050", +"#S c #506275", +"#6 c #506376", +"ge c #506e8c", +"af c #515151", +"b# c #51667b", +"dk c #5195df", +"cT c #525252", +".c c #525280", +"bq c #52677d", +"iH c #526b79", +"fj c #527397", +"eW c #52769d", +"dy c #527aa5", +"hJ c #535353", +"#x c #536476", +"eG c #53789f", +"jM c #545454", +"#r c #546577", +"bz c #546a80", +"dM c #547ca8", +"fP c #5499e2", +"jp c #555555", +"iK c #556f7e", +"bM c #565656", +"fB c #56799f", +"dC c #567fab", +"gE c #569be2", +"cU c #575757", +"h7 c #57748b", +"gc c #577797", +"fN c #577ba1", +"dx c #5780ad", +"cg c #5787bb", +"i4 c #585858", +"iF c #587483", +"hy c #587792", +"g2 c #587893", +"fy c #587ca3", +"eA c #587ea7", +"jW c #595959", +"bu c #597087", +"ia c #5984b2", +"ae c #5a5a5a", +"#t c #5a6c7f", +"bd c #5a7189", +"ij c #5a7789", +"eI c #5a81ab", +"bR c #5b5b5b", +"ch c #5b8dc3", +"en c #5b9be1", +"ke c #5c5c5c", +"cP c #5c8fc5", +"j5 c #5d5d5d", +"iN c #5d7fa0", +"gl c #5d80a3", +"fp c #5d83ac", +"cl c #5d8fc6", +"b2 c #5d9de6", +"c8 c #5e5e5e", +"hh c #5e7f9c", +"hn c #5e809d", +"i3 c #5f5f5f", +"#1 c #5f758c", +"a8 c #5f7890", +"g7 c #5f819e", +"cJ c #5f93cc", +"jz c #606060", +"ct c #6094cd", +"bO c #616161", +"eN c #618cb9", +"jH c #626262", +"iW c #627c8d", +"hd c #6285a3", +"ey c #628dbb", +"dO c #6290c4", +"ca c #6297d1", +"jI c #636363", +"eM c #638fbd", +"jN c #646464", +"fH c #648db9", +"eE c #648fbe", +"cb c #649ad5", +"hA c #64a8e2", +"jw c #656565", +"#k c #65798f", +"fF c #658eba", +"fA c #658fbb", +"fa c #65a4e7", +"b3 c #65a6e8", +"jX c #666666", +"hW c #6688a3", +"gh c #668cb2", +"aI c #6696cb", +"dN c #6697cc", +"bA c #6699ce", +"cu c #669edb", +"#C c #676767", +"f3 c #678db4", +"dl c #67a6eb", +"kc c #686868", +"cS c #696969", +"dK c #699bd2", +"cN c #69a2e0", +"cy c #69a3e1", +"fX c #69a6e8", +"jD c #6a6a6a", +"av c #6a84a1", +"ds c #6a9cd3", +"dL c #6a9cd4", +"jt c #6b6b6b", +"fo c #6b97c6", +"cE c #6ba5e4", +"jS c #6c6c6c", +"aV c #6c88a4", +"ir c #6c8ea4", +"il c #6c8fa5", +"eD c #6c9bce", +"dB c #6c9ed7", +"dq c #6c9fd8", +"cM c #6ca7e7", +"cp c #6ca8e8", +"eo c #6cabed", +"i2 c #6d6d6d", +"#T c #6d869f", +"#W c #6d87a0", +"gY c #6d94b5", +"aa c #6d9bcb", +"eB c #6d9dd0", +"dw c #6da0d9", +"dD c #6da1da", +"b4 c #6dacee", +"h9 c #6dafe2", +"i6 c #6e6e6e", +"bt c #6e8aa7", +"fM c #6e9bcb", +"dP c #6ea3dc", +"b5 c #6eabee", +"jd c #707070", +"ix c #7088a2", +"hx c #7098ba", +"f7 c #7099c3", +"dv c #70a5df", +"b6 c #70adef", +"iy c #70aff1", +"dm c #70aff2", +"jE c #717171", +"#m c #7188a0", +"#u c #7189a1", +"aY c #718eac", +"gO c #71aced", +"jq c #727272", +"gb c #729cc6", +"hO c #72afee", +"ib c #72afef", +"e7 c #737373", +"#y c #738ba4", +"#A c #739eca", +".j c #747474", +"#9 c #748fab", +"hs c #749ec1", +"f6 c #749fca", +".i c #757575", +"#q c #758da6", +"a5 c #7593b1", +"bo c #7594b2", +"ii c #759bb3", +"fb c #75b3f4", +"ep c #75b4f3", +"is c #75b8e2", +"ag c #767676", +"fz c #76a6da", +"ez c #76a9e0", +"dX c #76adeb", +".h c #777777", +".m c #777794", +"iX c #77a6b3", +"dn c #77b1f4", +"gK c #787878", +"#4 c #7894b0", +"fG c #78a9dd", +"j# c #797979", +"bV c #7a7a7a", +"do c #7ab4f4", +"jA c #7b7b7b", +"io c #7ba3bc", +"dp c #7bb5f5", +".k c #7c7c7c", +"bc c #7c9cbd", +"gi c #7caad8", +"aQ c #7cb0e7", +"fY c #7cb8f9", +"iM c #7cbee2", +"j1 c #7d7d7d", +"aX c #7d9ebf", +"fm c #7db0e7", +"j4 c #7e7e7e", +".8 c #7ea5ce", +"#D c #7f7f7f", +"hv c #7facd3", +"gn c #7faedd", +"eb c #808080", +"er c #80bdf9", +"j3 c #818181", +"hz c #81afd6", +"gu c #81b0e0", +"eq c #81bbf9", +"fc c #81bbfc", +"#b c #828282", +"iE c #82aac0", +"i5 c #838383", +"ha c #83b1d9", +"es c #83bcf9", +"ad c #848484", +"go c #84b5e6", +".v c #858585", +"#p c #85a0bc", +"bN c #868686", +"hZ c #86b3d6", +"fD c #86bcf6", +"fO c #86bcf7", +"gP c #86c1ff", +"di c #878787", +"ft c #87bdf8", +"bH c #888888", +"iT c #88cfe2", +"jZ c #898989", +"#z c #89a5c3", +"g. c #89bbee", +"fg c #89c0fc", +"fd c #89c2fd", +"hP c #89c3ff", +"jb c #8a8a8a", +"#o c #8aa6c4", +"jc c #8b8b8b", +".S c #8baccf", +"iI c #8bb6ce", +"al c #8bb9e8", +"hj c #8bbde7", +"gw c #8bbef2", +"ff c #8bc3ff", +"fe c #8bc4ff", +"fZ c #8bc6ff", +"ec c #8c8c8c", +"gv c #8cbff3", +"jO c #8d8d8d", +"a# c #8dadce", +"ic c #8dc7ff", +"#H c #8e8e8e", +"a. c #8eaed0", +"#L c #8ebae8", +"hY c #8ebee3", +"g4 c #8ec1ec", +"iO c #8ecbff", +"ju c #8f8f8f", +"bi c #8fb5da", +"h6 c #8fc0e5", +"f5 c #8fc4f9", +"jf c #909090", +"bl c #90b6dc", +"i1 c #90dfe2", +"bC c #919191", +"aB c #91b5dc", +"aZ c #91b7dd", +"hV c #91c2e8", +"gf c #91c6fc", +"gg c #91c7fd", +"f0 c #91c8ff", +"i7 c #929292", +"gA c #92c8fe", +"iz c #92ccff", +"iU c #939393", +"a7 c #93b9e0", +"f2 c #93c9ff", +"gQ c #93ccff", +"e8 c #949494", +".y c #9494b0", +"h1 c #94c6ec", +"f1 c #94caff", +"j9 c #959595", +"#X c #95b7da", +"cX c #969696", +"ay c #96bbe3", +"#f c #96bde8", +"aR c #96c3ee", +"gR c #96cfff", +".J c #979797", +"hQ c #97cfff", +"fT c #989898", +"#j c #98b6d7", +"#l c #98b7d8", +"iJ c #98c7e1", +"g6 c #98cffd", +"jj c #999999", +"aS c #99c4ee", +"h3 c #99ccf4", +"gS c #99d0ff", +".l c #9a9a9a", +".b c #9a9aa4", +"aw c #9ac1ea", +"gT c #9ad1ff", +"dg c #9b9b9b", +".N c #9bbee8", +"aq c #9bc1eb", +"am c #9bc4ee", +"eg c #9c9c9c", +"au c #9cc3ed", +"ao c #9cc5ee", +"c5 c #9d9d9d", +"aT c #9dc7ef", +"hU c #9dd2fb", +"hR c #9dd3ff", +"dh c #9e9e9e", +"#v c #9ebee0", +".Z c #9ec3e8", +"#M c #9ec3ed", +"#N c #9ec5ed", +"ap c #9ec5ef", +"aU c #9ec7f0", +"h2 c #9ed4fd", +"id c #9ed6ff", +"df c #9f9f9f", +"an c #9fc5ee", +"h0 c #9fd5fe", +"aM c #a0a0a0", +"hT c #a0d6ff", +"jh c #a1a1a1", +"hS c #a1d7ff", +"ji c #a2a2a2", +"#P c #a2c7ed", +"i8 c #a3a3a3", +"#O c #a3c8ed", +"iA c #a3daff", +"j. c #a4a4a4", +"je c #a5a5a5", +"#g c #a5c8ed", +"ip c #a5dafb", +"iv c #a6a6a6", +".F c #a6bed4", +"de c #a7a7a7", +"#h c #a7c9ed", +"if c #a7ddff", +"ie c #a7deff", +"eh c #a8a8a8", +"#i c #a8caee", +"iL c #a8dbf8", +"ig c #a8deff", +"iP c #a8e0ff", +"iY c #a8e2e6", +"hC c #a9a9a9", +".0 c #a9caed", +"#B c #aaaaaa", +"fU c #ababab", +".5 c #abc9e9", +"iB c #abe3ff", +"e2 c #acacac", +".6 c #accaea", +"jo c #adadad", +".1 c #adcbed", +".7 c #adccec", +"iD c #ade2ff", +"iC c #ade3ff", +"fS c #aeaeae", +".4 c #aecded", +"db c #afafaf", +".A c #afbbe7", +".2 c #afccee", +".3 c #afceee", +"d6 c #b0b0b0", +"iQ c #b0e9ff", +"bG c #b1b1b1", +"jg c #b2b2b2", +"#E c #b3b3b3", +".O c #b3d1ed", +"gF c #b4b4b4", +"cY c #b5b5b5", +"iR c #b5ebff", +"hM c #b6b6b6", +"iS c #b6ecff", +"d9 c #b7b7b7", +".U c #b8b8b8", +".u c #b9b9b9", +"dd c #bababa", +".P c #bad4ee", +"bL c #bbbbbb", +".Q c #bbd4ef", +".R c #bbd5f0", +"e9 c #bcbcbc", +"c3 c #bdbdbd", +"f. c #bebebe", +"d8 c #bfbfbf", +".o c #bfc2e8", +"iZ c #bffdff", +"iw c #c0c0c0", +"iV c #c1c1c1", +"i0 c #c1feff", +"ei c #c2c2c2", +"ej c #c3c3c3", +"#a c #c4c4c4", +"el c #c5c5c5", +"d7 c #c6c6c6", +".r c #c6cbda", +"ek c #c7c7c7", +"aN c #c8c8c8", +"#G c #c9c9c9", +"aL c #cacaca", +"ai c #cbcbcb", +".B c #cbddf2", +"bZ c #cccccc", +".C c #cce0f3", +"dc c #cdcdcd", +"ah c #cecece", +"da c #cfcfcf", +".E c #cfe1f3", +".D c #cfe1f4", +"#I c #d0d0d0", +"cV c #d1d1d1", +"fQ c #d2d2d2", +"bB c #d3d3d3", +"#c c #d4d4d4", +"d# c #d5d5d5", +"aK c #d6d6d6", +"cZ c #d7d7d7", +"c6 c #d8d8d8", +"gH c #d9d9d9", +".W c #dadada", +"gM c #dbdbdb", +"bQ c #dcdcdc", +"e1 c #dddddd", +"cR c #dedede", +"d. c #dfdfdf", +"bP c #e0e0e0", +"i# c #e1e1e1", +"bY c #e2e2e2", +".K c #e3e3e3", +"ee c #e4e4e4", +"d3 c #e5e5e5", +"ef c #e6e6e6", +".p c #e6e9f6", +"fV c #e7e7e7", +"eY c #e8e8e8", +".a c #e9e9e9", +".q c #e9edf8", +".V c #eaeaea", +"## c #ebebeb", +"Qt c #ececec", +".w c #ededed", +".x c #eeeeee", +"#. c #efefef", +".# c #f0f0f0", +".9 c #f1f1f1", +".I c #f2f2f2", +".T c #f3f3f3", +"ja c #f4f4f4", +"i9 c #f5f5f5", +"hB c #f6f6f6", +".H c #f7f7f7", +".G c #f8f8f8", +"i. c #f9f9f9", +"kg c #fafafa", +"kf c #fbfbfb", +".t c #fcfcfc", +".s c #fdfdfd", +"it c #fefefe", +"iu c #ffffff", +"#RQtQtQtQtQtQt#R", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt", +"#RQtQtQtQtQtQt#R"}; diff --git a/tests/auto/gui/image/qimagereader/images/trolltech.gif b/tests/auto/gui/image/qimagereader/images/trolltech.gif Binary files differnew file mode 100644 index 0000000000..f674369efc --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/trolltech.gif diff --git a/tests/auto/gui/image/qimagereader/images/tst7.bmp b/tests/auto/gui/image/qimagereader/images/tst7.bmp Binary files differnew file mode 100644 index 0000000000..6d3ac9241c --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tst7.bmp diff --git a/tests/auto/gui/image/qimagereader/images/tst7.png b/tests/auto/gui/image/qimagereader/images/tst7.png Binary files differnew file mode 100644 index 0000000000..96efae4e79 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/tst7.png diff --git a/tests/auto/gui/image/qimagereader/images/txts.png b/tests/auto/gui/image/qimagereader/images/txts.png Binary files differnew file mode 100755 index 0000000000..99be1eb4f9 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/txts.png diff --git a/tests/auto/gui/image/qimagereader/qimagereader.pro b/tests/auto/gui/image/qimagereader/qimagereader.pro new file mode 100644 index 0000000000..43d587ea48 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/qimagereader.pro @@ -0,0 +1,36 @@ +load(qttest_p4) +SOURCES += tst_qimagereader.cpp +MOC_DIR=tmp +QT += widgets widgets-private core-private gui-private network +RESOURCES += qimagereader.qrc +!symbian:DEFINES += SRCDIR=\\\"$$PWD\\\" + +win32-msvc:QMAKE_CXXFLAGS -= -Zm200 +win32-msvc:QMAKE_CXXFLAGS += -Zm800 +win32-msvc.net:QMAKE_CXXFLAGS -= -Zm300 +win32-msvc.net:QMAKE_CXXFLAGS += -Zm1100 + +wince*: { + images.files = images + images.path = . + + imagePlugins.files = $$QT_BUILD_TREE/plugins/imageformats/*.dll + imagePlugins.path = imageformats + + DEPLOYMENT += images imagePlugins + DEFINES += SRCDIR=\\\".\\\" +} + +symbian: { + images.files = images + images.path = . + + DEPLOYMENT += images + + qt_not_deployed { + imagePlugins.files = qjpeg.dll qgif.dll qmng.dll + imagePlugins.path = imageformats + + DEPLOYMENT += imagePlugins + } +} diff --git a/tests/auto/gui/image/qimagereader/qimagereader.qrc b/tests/auto/gui/image/qimagereader/qimagereader.qrc new file mode 100644 index 0000000000..2c70652389 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/qimagereader.qrc @@ -0,0 +1,71 @@ +<RCC> + <qresource prefix="/"> + <file>images/16bpp.bmp</file> + <file>images/4bpp-rle.bmp</file> + <file>images/YCbCr_cmyk.jpg</file> + <file>images/YCbCr_cmyk.png</file> + <file>images/YCbCr_rgb.jpg</file> + <file>images/away.png</file> + <file>images/ball.mng</file> + <file>images/bat1.gif</file> + <file>images/bat2.gif</file> + <file>images/beavis.jpg</file> + <file>images/black.png</file> + <file>images/black.xpm</file> + <file>images/colorful.bmp</file> + <file>images/corrupt-colors.xpm</file> + <file>images/corrupt-pixels.xpm</file> + <file>images/corrupt.bmp</file> + <file>images/corrupt.gif</file> + <file>images/corrupt.jpg</file> + <file>images/corrupt.mng</file> + <file>images/corrupt.png</file> + <file>images/corrupt.xbm</file> + <file>images/crash-signed-char.bmp</file> + <file>images/earth.gif</file> + <file>images/fire.mng</file> + <file>images/font.bmp</file> + <file>images/gnus.xbm</file> + <file>images/image.pbm</file> + <file>images/image.pgm</file> + <file>images/image.png</file> + <file>images/image.ppm</file> + <file>images/image_100dpi.tif</file> + <file>images/kollada.png</file> + <file>images/marble.xpm</file> + <file>images/namedcolors.xpm</file> + <file>images/negativeheight.bmp</file> + <file>images/noclearcode.bmp</file> + <file>images/noclearcode.gif</file> + <file>images/nontransparent.xpm</file> + <file>images/runners.ppm</file> + <file>images/teapot.ppm</file> + <file>images/test.ppm</file> + <file>images/test.xpm</file> + <file>images/test32bfv4.bmp</file> + <file>images/test32v5.bmp</file> + <file>images/tst7.bmp</file> + <file>images/tst7.png</file> + <file>images/transparent.xpm</file> + <file>images/trolltech.gif</file> + <file>images/qt.gif</file> + <file>images/qt1.gif</file> + <file>images/qt2.gif</file> + <file>images/qt3.gif</file> + <file>images/qt4.gif</file> + <file>images/qt5.gif</file> + <file>images/qt6.gif</file> + <file>images/qt7.gif</file> + <file>images/qt8.gif</file> + <file>images/endless-anim.gif</file> + <file>images/four-frames.gif</file> + <file>images/qt-gif-anim.gif</file> + <file>images/qt-gif-noanim.gif</file> + <file>images/rect.svg</file> + <file>images/rect.svgz</file> + <file>images/corrupt.svg</file> + <file>images/corrupt.svgz</file> + <file>images/qtbug13653-no_eoi.jpg</file> + <file>images/txts.png</file> + </qresource> +</RCC> diff --git a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp new file mode 100644 index 0000000000..ffedc69a7f --- /dev/null +++ b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp @@ -0,0 +1,2026 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> + +#include <QBuffer> +#include <QDebug> +#include <QFile> +#include <QImage> +#include <QImageReader> +#include <QImageWriter> +#include <QLabel> +#include <QPixmap> +#include <QSet> +#include <QTcpSocket> +#include <QTcpServer> +#include <QTimer> + +#include "../../../platformquirks.h" + +#if defined(Q_OS_SYMBIAN) +# define SRCDIR "." +#endif + +typedef QMap<QString, QString> QStringMap; +typedef QList<int> QIntList; +Q_DECLARE_METATYPE(QImage) +Q_DECLARE_METATYPE(QRect) +Q_DECLARE_METATYPE(QSize) +Q_DECLARE_METATYPE(QColor) +Q_DECLARE_METATYPE(QStringMap) +Q_DECLARE_METATYPE(QIntList) +Q_DECLARE_METATYPE(QIODevice *) +Q_DECLARE_METATYPE(QImage::Format) + +//TESTED_FILES= + +class tst_QImageReader : public QObject +{ + Q_OBJECT + +public: + tst_QImageReader(); + virtual ~tst_QImageReader(); + +public slots: + void init(); + void cleanup(); + +private slots: + void getSetCheck(); + void readImage_data(); + void readImage(); + void jpegRgbCmyk(); + + void setScaledSize_data(); + void setScaledSize(); + + void setClipRect_data(); + void setClipRect(); + + void setScaledClipRect_data(); + void setScaledClipRect(); + + void imageFormat_data(); + void imageFormat(); + + void blackXPM(); + void transparentXPM(); + void multiWordNamedColorXPM(); + + void supportedFormats(); + + void readFromDevice_data(); + void readFromDevice(); + + void readFromFileAfterJunk_data(); + void readFromFileAfterJunk(); + + void devicePosition_data(); + void devicePosition(); + + void setBackgroundColor_data(); + void setBackgroundColor(); + + void supportsAnimation_data(); + void supportsAnimation(); + + void readFromResources_data(); + void readFromResources(); + + void dotsPerMeter_data(); + void dotsPerMeter(); + + void physicalDpi_data(); + void physicalDpi(); + + void sizeBeforeRead_data(); + void sizeBeforeRead(); + + void sizeBeforeFormat_data(); + void sizeBeforeFormat(); + + void imageFormatBeforeRead_data(); + void imageFormatBeforeRead(); + + void gifHandlerBugs(); + void animatedGif(); + void gifImageCount(); + void gifLoopCount(); + + void readCorruptImage_data(); + void readCorruptImage(); + void readCorruptBmp(); + + void supportsOption_data(); + void supportsOption(); + + void tiffCompression_data(); + void tiffCompression(); + void tiffEndianness(); + + void tiffOrientation_data(); + void tiffOrientation(); + + void tiffGrayscale(); + + void autoDetectImageFormat(); + void fileNameProbing(); + + void pixelCompareWithBaseline_data(); + void pixelCompareWithBaseline(); + + void task255627_setNullScaledSize_data(); + void task255627_setNullScaledSize(); + + void testIgnoresFormatAndExtension_data(); + void testIgnoresFormatAndExtension(); + + void saveFormat_data(); + void saveFormat(); + + void readText_data(); + void readText(); + + void preserveTexts_data(); + void preserveTexts(); +}; + +static const QLatin1String prefix(SRCDIR "/images/"); + +// helper to skip an autotest when the given image format is not supported +#define SKIP_IF_UNSUPPORTED(format) do { \ + if (!QByteArray(format).isEmpty() && !QImageReader::supportedImageFormats().contains(format)) \ + QSKIP("\"" + QByteArray(format) + "\" images are not supported", SkipSingle); \ +} while (0) + +// Testing get/set functions +void tst_QImageReader::getSetCheck() +{ + QImageReader obj1; + // QIODevice * QImageReader::device() + // void QImageReader::setDevice(QIODevice *) + QFile *var1 = new QFile; + obj1.setDevice(var1); + + //A bit strange but that's the only way to compile under windows. + QCOMPARE((QIODevice *) var1, obj1.device()); + obj1.setDevice((QIODevice *)0); + QCOMPARE((QIODevice *) 0, + obj1.device()); + delete var1; +} + +tst_QImageReader::tst_QImageReader() +{ +} + +tst_QImageReader::~tst_QImageReader() +{ + +} + +void tst_QImageReader::init() +{ +} + +void tst_QImageReader::cleanup() +{ +} + +void tst_QImageReader::readImage_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<bool>("success"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("empty") << QString() << false << QByteArray(); + QTest::newRow("BMP: colorful") << QString("colorful.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: font") << QString("font.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: 4bpp RLE") << QString("4bpp-rle.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: 4bpp uncompressed") << QString("tst7.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: 16bpp") << QString("16bpp.bmp") << true << QByteArray("bmp"); + QTest::newRow("BMP: negative height") << QString("negativeheight.bmp") << true << QByteArray("bmp"); + QTest::newRow("XPM: marble") << QString("marble.xpm") << true << QByteArray("xpm"); + QTest::newRow("PNG: kollada") << QString("kollada.png") << true << QByteArray("png"); + QTest::newRow("PPM: teapot") << QString("teapot.ppm") << true << QByteArray("ppm"); + QTest::newRow("PPM: runners") << QString("runners.ppm") << true << QByteArray("ppm"); + QTest::newRow("PPM: test") << QString("test.ppm") << true << QByteArray("ppm"); + QTest::newRow("XBM: gnus") << QString("gnus.xbm") << true << QByteArray("xbm"); + + QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg"); + QTest::newRow("JPEG: qtbug13653") << QString("qtbug13653-no_eoi.jpg") << true << QByteArray("jpeg"); + + QTest::newRow("GIF: earth") << QString("earth.gif") << true << QByteArray("gif"); + QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true << QByteArray("gif"); + + QTest::newRow("MNG: ball") << QString("ball.mng") << true << QByteArray("mng"); + QTest::newRow("MNG: fire") << QString("fire.mng") << true << QByteArray("mng"); + + QTest::newRow("SVG: rect") << QString("rect.svg") << true << QByteArray("svg"); + QTest::newRow("SVGZ: rect") << QString("rect.svgz") << true << QByteArray("svgz"); +} + +void tst_QImageReader::readImage() +{ + QFETCH(QString, fileName); + QFETCH(bool, success); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + for (int i = 0; i < 2; ++i) { + QImageReader io(prefix + fileName, i ? QByteArray() : format); + if (success) { + if (!io.supportsAnimation()) + QVERIFY(io.imageCount() > 0); + } else { + QCOMPARE(io.imageCount(), -1); + } + QImage image = io.read(); + if (!success) { + QVERIFY(image.isNull()); + return; + } + + QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData()); + + // No format + QImageReader io2(prefix + fileName); + QVERIFY2(!io2.read().isNull(), io.errorString().toLatin1().constData()); + + // No extension, no format + QImageReader io3(prefix + fileName.left(fileName.lastIndexOf(QLatin1Char('.')))); + QVERIFY2(!io3.read().isNull(), io.errorString().toLatin1().constData()); + + // Read into \a image2 + QImage image2; + QImageReader image2Reader(prefix + fileName, i ? QByteArray() : format); + QCOMPARE(image2Reader.format(), format); + QVERIFY(image2Reader.read(&image2)); + if (image2Reader.canRead()) { + if (i) + QVERIFY(!image2Reader.format().isEmpty()); + else + QCOMPARE(image2Reader.format(), format); + } else { + if (i) + QVERIFY(image2Reader.format().isEmpty()); + else + QVERIFY(!image2Reader.format().isEmpty()); + } + QCOMPARE(image, image2); + do { + QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData()); + } while (!(image = io.read()).isNull()); + } +} + +void tst_QImageReader::jpegRgbCmyk() +{ + QImage image1(prefix + QLatin1String("YCbCr_cmyk.jpg")); + QImage image2(prefix + QLatin1String("YCbCr_cmyk.png")); + + if (PlatformQuirks::isImageLoaderImprecise()) { + // first, do some obvious tests + QCOMPARE(image1.height(), image2.height()); + QCOMPARE(image1.width(), image2.width()); + QCOMPARE(image1.format(), image2.format()); + QCOMPARE(image1.format(), QImage::Format_RGB32); + + // compare all the pixels with a slack of 3. This ignores rounding errors in libjpeg/libpng + for (int h = 0; h < image1.height(); ++h) { + const uchar *s1 = image1.constScanLine(h); + const uchar *s2 = image2.constScanLine(h); + for (int w = 0; w < image1.width() * 4; ++w) { + if (*s1 != *s2) { + QVERIFY2(qAbs(*s1 - *s2) <= 3, qPrintable(QString("images differ in line %1, col %2 (image1: %3, image2: %4)").arg(h).arg(w).arg(*s1, 0, 16).arg(*s2, 0, 16))); + } + s1++; + s2++; + } + } + } else { + QCOMPARE(image1, image2); + } +} + +void tst_QImageReader::setScaledSize_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QSize>("newSize"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("BMP: colorful") << "colorful" << QSize(200, 200) << QByteArray("bmp"); + QTest::newRow("BMP: font") << "font" << QSize(200, 200) << QByteArray("bmp"); + QTest::newRow("XPM: marble") << "marble" << QSize(200, 200) << QByteArray("xpm"); + QTest::newRow("PNG: kollada") << "kollada" << QSize(200, 200) << QByteArray("png"); + QTest::newRow("PPM: teapot") << "teapot" << QSize(200, 200) << QByteArray("ppm"); + QTest::newRow("PPM: runners") << "runners.ppm" << QSize(400, 400) << QByteArray("ppm"); + QTest::newRow("PPM: test") << "test.ppm" << QSize(10, 10) << QByteArray("ppm"); + QTest::newRow("XBM: gnus") << "gnus" << QSize(200, 200) << QByteArray("xbm"); + + QTest::newRow("JPEG: beavis A") << "beavis" << QSize(200, 200) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis B") << "beavis" << QSize(175, 175) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis C") << "beavis" << QSize(100, 100) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis D") << "beavis" << QSize(100, 200) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis E") << "beavis" << QSize(200, 100) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis F") << "beavis" << QSize(87, 87) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis G") << "beavis" << QSize(50, 45) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis H") << "beavis" << QSize(43, 43) << QByteArray("jpeg"); + QTest::newRow("JPEG: beavis I") << "beavis" << QSize(25, 25) << QByteArray("jpeg"); + + QTest::newRow("GIF: earth") << "earth" << QSize(200, 200) << QByteArray("gif"); + QTest::newRow("GIF: trolltech") << "trolltech" << QSize(200, 200) << QByteArray("gif"); + + QTest::newRow("MNG: ball") << "ball" << QSize(200, 200) << QByteArray("mng"); + QTest::newRow("MNG: fire") << "fire" << QSize(200, 200) << QByteArray("mng"); + + QTest::newRow("SVG: rect") << "rect" << QSize(200, 200) << QByteArray("svg"); + QTest::newRow("SVGZ: rect") << "rect" << QSize(200, 200) << QByteArray("svgz"); +} + +void tst_QImageReader::setScaledSize() +{ + QFETCH(QString, fileName); + QFETCH(QSize, newSize); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImageReader reader(prefix + fileName); + reader.setScaledSize(newSize); + QImage image = reader.read(); + QVERIFY(!image.isNull()); + + QCOMPARE(image.size(), newSize); +} + +void tst_QImageReader::task255627_setNullScaledSize_data() +{ + setScaledSize_data(); +} + +void tst_QImageReader::task255627_setNullScaledSize() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImageReader reader(prefix + fileName); + + // set a null size + reader.setScaledSize(QSize(0, 0)); + reader.setQuality(0); + QImage image = reader.read(); + QVERIFY(image.isNull()); + QCOMPARE(image.size(), QSize(0, 0)); +} + +void tst_QImageReader::setClipRect_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QRect>("newRect"); + QTest::addColumn<QByteArray>("format"); + QTest::newRow("BMP: colorful") << "colorful" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: test32bfv4") << "test32bfv4" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: test32v5") << "test32v5" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: font") << "font" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: 4bpp uncompressed") << "tst7.bmp" << QRect(0, 0, 31, 31) << QByteArray("bmp"); + QTest::newRow("XPM: marble") << "marble" << QRect(0, 0, 50, 50) << QByteArray("xpm"); + QTest::newRow("PNG: kollada") << "kollada" << QRect(0, 0, 50, 50) << QByteArray("png"); + QTest::newRow("PPM: teapot") << "teapot" << QRect(0, 0, 50, 50) << QByteArray("ppm"); + QTest::newRow("PPM: runners") << "runners.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); + QTest::newRow("PPM: test") << "test.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); + QTest::newRow("XBM: gnus") << "gnus" << QRect(0, 0, 50, 50) << QByteArray("xbm"); + + QTest::newRow("JPEG: beavis") << "beavis" << QRect(0, 0, 50, 50) << QByteArray("jpeg"); + + QTest::newRow("GIF: earth") << "earth" << QRect(0, 0, 50, 50) << QByteArray("gif"); + QTest::newRow("GIF: trolltech") << "trolltech" << QRect(0, 0, 50, 50) << QByteArray("gif"); + + QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng"); + QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng"); + + QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg"); + QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz"); +} + +void tst_QImageReader::setClipRect() +{ + QFETCH(QString, fileName); + QFETCH(QRect, newRect); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImageReader reader(prefix + fileName); + reader.setClipRect(newRect); + QImage image = reader.read(); + QVERIFY(!image.isNull()); + QCOMPARE(image.rect(), newRect); + + QImageReader originalReader(prefix + fileName); + QImage originalImage = originalReader.read(); + QCOMPARE(originalImage.copy(newRect), image); +} + +void tst_QImageReader::setScaledClipRect_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QRect>("newRect"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("BMP: colorful") << "colorful" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: test32bfv4") << "test32bfv4" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: test32v5") << "test32v5" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("BMP: font") << "font" << QRect(0, 0, 50, 50) << QByteArray("bmp"); + QTest::newRow("XPM: marble") << "marble" << QRect(0, 0, 50, 50) << QByteArray("xpm"); + QTest::newRow("PNG: kollada") << "kollada" << QRect(0, 0, 50, 50) << QByteArray("png"); + QTest::newRow("PPM: teapot") << "teapot" << QRect(0, 0, 50, 50) << QByteArray("ppm"); + QTest::newRow("PPM: runners") << "runners.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); + QTest::newRow("PPM: test") << "test.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); + QTest::newRow("XBM: gnus") << "gnus" << QRect(0, 0, 50, 50) << QByteArray("xbm"); + + QTest::newRow("JPEG: beavis") << "beavis" << QRect(0, 0, 50, 50) << QByteArray("jpeg"); + + QTest::newRow("GIF: earth") << "earth" << QRect(0, 0, 50, 50) << QByteArray("gif"); + QTest::newRow("GIF: trolltech") << "trolltech" << QRect(0, 0, 50, 50) << QByteArray("gif"); + + QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng"); + QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng"); + + QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg"); + QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz"); +} + +void tst_QImageReader::setScaledClipRect() +{ + QFETCH(QString, fileName); + QFETCH(QRect, newRect); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImageReader reader(prefix + fileName); + reader.setScaledSize(QSize(300, 300)); + reader.setScaledClipRect(newRect); + QImage image = reader.read(); + QVERIFY(!image.isNull()); + QCOMPARE(image.rect(), newRect); + + QImageReader originalReader(prefix + fileName); + originalReader.setScaledSize(QSize(300, 300)); + QImage originalImage = originalReader.read(); + QCOMPARE(originalImage.copy(newRect), image); +} + +void tst_QImageReader::imageFormat_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + QTest::addColumn<QImage::Format>("imageFormat"); + + QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm") << QImage::Format_Mono; + QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm") << QImage::Format_Indexed8; + QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm") << QImage::Format_RGB32; + QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm") << QImage::Format_RGB32; + QTest::newRow("ppm-3") << QString("runners.ppm") << QByteArray("ppm") << QImage::Format_RGB32; + QTest::newRow("ppm-4") << QString("test.ppm") << QByteArray("ppm") << QImage::Format_RGB32; + + QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg") << QImage::Format_Indexed8; + QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg") << QImage::Format_RGB32; + QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg") << QImage::Format_RGB32; + + QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif") << QImage::Format_Invalid; + QTest::newRow("gif-2") << QString("trolltech.gif") << QByteArray("gif") << QImage::Format_Invalid; + + QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm") << QImage::Format_MonoLSB; + QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm") << QImage::Format_Indexed8; + QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp") << QImage::Format_Indexed8; + QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp") << QImage::Format_Indexed8; + QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp") << QImage::Format_RGB32; + QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp") << QImage::Format_RGB32; + QTest::newRow("png") << QString("kollada.png") << QByteArray("png") << QImage::Format_ARGB32; + QTest::newRow("png-2") << QString("YCbCr_cmyk.png") << QByteArray("png") << QImage::Format_RGB32; + QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng") << QImage::Format_Invalid; + QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng") << QImage::Format_Invalid; + QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz") << QImage::Format_ARGB32_Premultiplied; +} + +void tst_QImageReader::imageFormat() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + QFETCH(QImage::Format, imageFormat); + + SKIP_IF_UNSUPPORTED(format); + + QCOMPARE(QImageReader::imageFormat(prefix + fileName), format); + QImageReader reader(prefix + fileName); + QCOMPARE(reader.imageFormat(), imageFormat); +} + +void tst_QImageReader::blackXPM() +{ + QImage image(prefix + QLatin1String("black.xpm")); + QImage image2(prefix + QLatin1String("black.png")); + QCOMPARE(image.pixel(25, 25), qRgb(190, 190, 190)); + QCOMPARE(image.pixel(25, 25), image2.pixel(25, 25)); +} + +void tst_QImageReader::transparentXPM() +{ + QImage image(prefix + QLatin1String("nontransparent.xpm")); + QImage image2(prefix + QLatin1String("transparent.xpm")); + QCOMPARE(image.format(), QImage::Format_RGB32); + QCOMPARE(image2.format(), QImage::Format_ARGB32); +} + +void tst_QImageReader::multiWordNamedColorXPM() +{ + QImage image(prefix + QLatin1String("namedcolors.xpm")); + QCOMPARE(image.pixel(0, 0), qRgb(102, 139, 139)); // pale turquoise 4 + QCOMPARE(image.pixel(0, 1), qRgb(250, 250, 210)); // light golden rod yellow + QCOMPARE(image.pixel(0, 2), qRgb(255, 250, 205)); // lemon chiffon +} + +void tst_QImageReader::supportedFormats() +{ + QList<QByteArray> formats = QImageReader::supportedImageFormats(); + QList<QByteArray> sortedFormats = formats; + qSort(sortedFormats); + + // check that the list is sorted + QCOMPARE(formats, sortedFormats); + + QSet<QByteArray> formatSet; + foreach (QByteArray format, formats) + formatSet << format; + + // check that the list does not contain duplicates + QCOMPARE(formatSet.size(), formats.size()); +} + +void tst_QImageReader::setBackgroundColor_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QColor>("color"); + + QTest::newRow("BMP: colorful") << QString("colorful.bmp") << QColor(Qt::white); + QTest::newRow("BMP: font") << QString("font.bmp") << QColor(Qt::black); + QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << QColor(Qt::red); + QTest::newRow("XPM: marble") << QString("marble.xpm") << QColor(Qt::darkRed); + QTest::newRow("PNG: kollada") << QString("kollada.png") << QColor(Qt::green); + QTest::newRow("PPM: teapot") << QString("teapot.ppm") << QColor(Qt::darkGreen); + QTest::newRow("PPM: runners") << QString("runners.ppm") << QColor(Qt::red); + QTest::newRow("PPM: test") << QString("test.ppm") << QColor(Qt::white); + QTest::newRow("XBM: gnus") << QString("gnus.xbm") << QColor(Qt::blue); + + QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << QColor(Qt::darkBlue); + + QTest::newRow("GIF: earth") << QString("earth.gif") << QColor(Qt::cyan); + QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << QColor(Qt::magenta); + + QTest::newRow("MNG: ball") << QString("ball.mng") << QColor(Qt::yellow); + QTest::newRow("MNG: fire") << QString("fire.mng") << QColor(Qt::gray); + + QTest::newRow("SVG: rect") << QString("rect.svg") << QColor(Qt::darkGreen); + QTest::newRow("SVGZ: rect") << QString("rect.svgz") << QColor(Qt::darkGreen); +} + +void tst_QImageReader::setBackgroundColor() +{ + QFETCH(QString, fileName); + QFETCH(QColor, color); + QImageReader io("images/" + fileName); + io.setBackgroundColor(color); + if (io.backgroundColor().isValid()) + QCOMPARE(io.backgroundColor(), color); +} + +void tst_QImageReader::supportsAnimation_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<bool>("success"); + + QTest::newRow("BMP: colorful") << QString("colorful.bmp") << false; + QTest::newRow("BMP: font") << QString("font.bmp") << false; + QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << false; + QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << false;; + QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << false; + QTest::newRow("XPM: marble") << QString("marble.xpm") << false; + QTest::newRow("PNG: kollada") << QString("kollada.png") << false; + QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false; + QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false; + QTest::newRow("PPM: runners") << QString("runners.ppm") << false; + QTest::newRow("XBM: gnus") << QString("gnus.xbm") << false; + + QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << false; + + QTest::newRow("GIF: earth") << QString("earth.gif") << true; + QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true; + + QTest::newRow("MNG: ball") << QString("ball.mng") << true; + QTest::newRow("MNG: fire") << QString("fire.mng") << true; + + QTest::newRow("SVG: rect") << QString("rect.svg") << false; + QTest::newRow("SVGZ: rect") << QString("rect.svgz") << false; +} + +void tst_QImageReader::supportsAnimation() +{ + QFETCH(QString, fileName); + QFETCH(bool, success); + QImageReader io(prefix + fileName); + QCOMPARE(io.supportsAnimation(), success); +} + +void tst_QImageReader::sizeBeforeRead_data() +{ + imageFormat_data(); +} + +void tst_QImageReader::sizeBeforeRead() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImageReader reader(prefix + fileName); + QVERIFY(reader.canRead()); + if (format == "mng") { + QCOMPARE(reader.size(), QSize()); + return; + } + + QSize size = reader.size(); + QVERIFY(reader.canRead()); + QImage image = reader.read(); + QVERIFY(!image.isNull()); + QCOMPARE(size, image.size()); +} + +void tst_QImageReader::sizeBeforeFormat_data() +{ + imageFormat_data(); +} + +void tst_QImageReader::sizeBeforeFormat() +{ + QFETCH(QString, fileName); + + QByteArray formatA, formatB; + + { + QImageReader reader(prefix + fileName); + formatA = reader.format(); + } + + { + QImageReader reader(prefix + fileName); + QSize size = reader.size(); + formatB = reader.format(); + } + + QCOMPARE(formatA, formatB); +} + +void tst_QImageReader::imageFormatBeforeRead_data() +{ + imageFormat_data(); +} + +void tst_QImageReader::imageFormatBeforeRead() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + QFETCH(QImage::Format, imageFormat); + + SKIP_IF_UNSUPPORTED(format); + + QImageReader reader(fileName); + if (reader.supportsOption(QImageIOHandler::ImageFormat)) { + QImage::Format fileFormat = reader.imageFormat(); + QCOMPARE(fileFormat, imageFormat); + QSize size = reader.size(); + QImage image(size, fileFormat); + QVERIFY(reader.read(&image)); + QCOMPARE(image.format(), fileFormat); + } +} + +void tst_QImageReader::gifHandlerBugs() +{ + SKIP_IF_UNSUPPORTED("gif"); + + { + QImageReader io(prefix + "trolltech.gif"); + QVERIFY(io.loopCount() != 1); + int count=0; + for (; io.canRead(); io.read(), ++count) ; + QVERIFY(count == 34); + } + + // Task 95166 + { + QImageReader io1(prefix + "bat1.gif"); + QImageReader io2(prefix + "bat2.gif"); + QVERIFY(io1.canRead()); + QVERIFY(io2.canRead()); + QImage im1 = io1.read(); + QImage im2 = io2.read(); + QVERIFY(!im1.isNull()); + QVERIFY(!im2.isNull()); + QCOMPARE(im1, im2); + } + + // Task 9994 + { + QImageReader io1(prefix + "noclearcode.gif"); + QImageReader io2(prefix + "noclearcode.bmp"); + QVERIFY(io1.canRead()); QVERIFY(io2.canRead()); + QImage im1 = io1.read(); QImage im2 = io2.read(); + QVERIFY(!im1.isNull()); QVERIFY(!im2.isNull()); + QCOMPARE(im1.convertToFormat(QImage::Format_ARGB32), im2.convertToFormat(QImage::Format_ARGB32)); + } + + // Check the undocumented feature. + { + QImageReader io(prefix + "endless-anim.gif"); + QVERIFY(io.canRead()); + QCOMPARE(io.loopCount(), -1); + } +} + +void tst_QImageReader::animatedGif() +{ + SKIP_IF_UNSUPPORTED("gif"); + + QImageReader io(":images/qt.gif"); + QImage image = io.read(); + QVERIFY(!image.isNull()); + int i = 0; + while(!image.isNull()){ + QString frameName = QString(":images/qt%1.gif").arg(++i); + QCOMPARE(image, QImage(frameName)); + image = io.read(); + } +} + +// http://bugreports.qt.nokia.com/browse/QTBUG-6696 +// Check the count of images in various call orders... +void tst_QImageReader::gifImageCount() +{ + SKIP_IF_UNSUPPORTED("gif"); + + // just read every frame... and see how much we got.. + { + QImageReader io(":images/four-frames.gif"); + + QVERIFY(io.canRead()); + QImage blackFrame = io.read(); + + QVERIFY(io.canRead()); + QImage whiteFrame = io.read(); + + QVERIFY(io.canRead()); + QImage greenFrame = io.read(); + + QVERIFY(io.imageCount() == 4); + + QVERIFY(io.canRead()); + QImage blueFrame = io.read(); + + QVERIFY(!io.canRead()); + QImage emptyFrame = io.read(); + + QVERIFY(!io.canRead()); + QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0)); + QCOMPARE(blackFrame.size(), QSize(64,64)); + + QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff)); + QCOMPARE(whiteFrame.size(), QSize(64,64)); + + QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0)); + QCOMPARE(greenFrame.size(), QSize(64,64)); + + QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff)); + QCOMPARE(blueFrame.size(), QSize(64,64)); + QVERIFY(emptyFrame.isNull()); + } + + // Read and get the size + { + QImageReader io(":images/four-frames.gif"); + + QVERIFY(io.canRead()); + QCOMPARE(io.size(), QSize(64,64)); + + QVERIFY(io.canRead()); + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QVERIFY(io.canRead()); + QImage blackFrame = io.read(); + + QVERIFY(io.canRead()); + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QVERIFY(io.canRead()); + QImage whiteFrame = io.read(); + + QVERIFY(io.canRead()); + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QVERIFY(io.canRead()); + QImage greenFrame = io.read(); + + QVERIFY(io.canRead()); + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QVERIFY(io.canRead()); + QImage blueFrame = io.read(); + + QVERIFY(!io.canRead()); + QCOMPARE(io.size(), QSize()); + QCOMPARE(io.size(), QSize()); + QVERIFY(!io.canRead()); + QImage emptyFrame = io.read(); + + QVERIFY(!io.canRead()); + QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0)); + QCOMPARE(blackFrame.size(), QSize(64,64)); + + QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff)); + QCOMPARE(whiteFrame.size(), QSize(64,64)); + + QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0)); + QCOMPARE(greenFrame.size(), QSize(64,64)); + + QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff)); + QCOMPARE(blueFrame.size(), QSize(64,64)); + QVERIFY(emptyFrame.isNull()); + } + + // Do a Size query as substitute for canRead + { + QImageReader io(":images/four-frames.gif"); + + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QImage blackFrame = io.read(); + + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QImage whiteFrame = io.read(); + + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QImage greenFrame = io.read(); + + QCOMPARE(io.size(), QSize(64,64)); + QCOMPARE(io.size(), QSize(64,64)); + QImage blueFrame = io.read(); + + QCOMPARE(io.size(), QSize()); + QVERIFY(!io.canRead()); + QImage emptyFrame = io.read(); + + QVERIFY(!io.canRead()); + QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0)); + QCOMPARE(blackFrame.size(), QSize(64,64)); + + QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff)); + QCOMPARE(whiteFrame.size(), QSize(64,64)); + + QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0)); + QCOMPARE(greenFrame.size(), QSize(64,64)); + + QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff)); + QCOMPARE(blueFrame.size(), QSize(64,64)); + QVERIFY(emptyFrame.isNull()); + } + { + QImageReader io(":images/trolltech.gif"); + QVERIFY(io.imageCount() == 34); + QVERIFY(io.size() == QSize(128,64)); + } +} + +void tst_QImageReader::gifLoopCount() +{ + SKIP_IF_UNSUPPORTED("gif"); + + { + QImageReader io(":images/qt-gif-anim.gif"); + QCOMPARE(io.loopCount(), -1); // infinite loop + } + { + QImageReader io(":images/qt-gif-noanim.gif"); + QCOMPARE(io.loopCount(), 0); // no loop + } +} + +class Server : public QObject +{ + Q_OBJECT +public: + Server(const QByteArray &data) :serverSocket(0) + { + connect(&server, SIGNAL(newConnection()), this, SLOT(acceptNewConnection())); + server.listen(); + this->data = data; + } + +public slots: + void runTest() + { + connect(&clientSocket, SIGNAL(connected()), this, SLOT(connected())); + clientSocket.connectToHost(QHostAddress::LocalHost, server.serverPort()); + } + +public: + inline QTcpSocket *socket() const { return serverSocket; } + +signals: + void ready(); + +private slots: + void acceptNewConnection() + { + serverSocket = server.nextPendingConnection(); + connect(serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), + this, SLOT(remoteHostClosed())); + } + + void connected() + { + clientSocket.write(data); + clientSocket.disconnectFromHost(); + } + + void remoteHostClosed() + { + emit ready(); + } + +private: + QTcpServer server; + QTcpSocket clientSocket; + QTcpSocket *serverSocket; + QByteArray data; +}; + +void tst_QImageReader::readFromDevice_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm"); + QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm"); + QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm"); + QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm"); + QTest::newRow("ppm-3") << QString("teapot.ppm") << QByteArray("ppm"); + QTest::newRow("ppm-4") << QString("runners.ppm") << QByteArray("ppm"); + + QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-4") << QString("qtbug13653-no_eoi.jpg") << QByteArray("jpeg"); + + QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif"); + QTest::newRow("gif-2") << QString("trolltech.gif") << QByteArray("gif"); + + QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm"); + QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm"); + QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp"); + QTest::newRow("png") << QString("kollada.png") << QByteArray("png"); + + QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng"); + QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng"); + + QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg"); + QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz"); +} + +void tst_QImageReader::readFromDevice() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImage expectedImage(prefix + fileName, format); + + QFile file(prefix + fileName); + QVERIFY(file.open(QFile::ReadOnly)); + QByteArray imageData = file.readAll(); + QVERIFY(!imageData.isEmpty()); + { + QBuffer buffer; + buffer.setData(imageData); + QVERIFY(buffer.open(QBuffer::ReadOnly)); + + QImageReader reader(&buffer); + QVERIFY(reader.canRead()); + QImage imageReaderImage = reader.read(); + + QCOMPARE(imageReaderImage, expectedImage); + + buffer.seek(0); + + QImage image1; + QVERIFY(image1.loadFromData((const uchar *)buffer.data().data(), + buffer.data().size(), format.data())); + QCOMPARE(image1, expectedImage); + + QByteArray throughBase64 = QByteArray::fromBase64(imageData.toBase64()); + QVERIFY(image1.loadFromData((const uchar *)throughBase64.data(), + throughBase64.size(), format.data())); + QCOMPARE(image1, expectedImage); + } + +#if defined (Q_OS_SYMBIAN) && defined (__WINS__) + //the emulator hangs in socket write (this is a test bug, it assumes the TCP stack can accept a whole image to its buffers) + if(imageData.size() > 16384) + QSKIP("image larger than socket buffer (test needs to be rewritten)", SkipSingle); +#endif + Server server(imageData); + QEventLoop loop; + connect(&server, SIGNAL(ready()), &loop, SLOT(quit())); + QTimer::singleShot(0, &server, SLOT(runTest())); + QTimer::singleShot(5000, &loop, SLOT(quit())); + loop.exec(); + + QImageReader reader(server.socket(), format == "xbm" ? "xbm" : ""); + if (format == "xbm") + QVERIFY(!reader.canRead()); + else + QVERIFY(reader.canRead()); + QImage imageReaderImage = reader.read(); + QCOMPARE(imageReaderImage, expectedImage); +} + +void tst_QImageReader::readFromFileAfterJunk_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm"); + QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm"); + QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm"); + QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm"); + QTest::newRow("ppm-3") << QString("teapot.ppm") << QByteArray("ppm"); + QTest::newRow("ppm-4") << QString("runners.ppm") << QByteArray("ppm"); + + QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg"); + + QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm"); + QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm"); + QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp"); + QTest::newRow("png") << QString("kollada.png") << QByteArray("png"); + QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg"); + QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz"); +} + +void tst_QImageReader::readFromFileAfterJunk() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QFile::remove("junk"); + QFile junkFile("junk"); + QVERIFY(junkFile.open(QFile::WriteOnly)); + + QFile imageFile(prefix + fileName); + QVERIFY(imageFile.open(QFile::ReadOnly)); + QByteArray imageData = imageFile.readAll(); + QVERIFY(!imageData.isNull()); + + int iterations = 3; + if (format == "ppm" || format == "pbm" || format == "pgm" || format == "svg" || format == "svgz") + iterations = 1; + + if (format == "mng" || !QImageWriter::supportedImageFormats().contains(format)) { + for (int i = 0; i < iterations; ++i) { + junkFile.write("deadbeef", 9); + QCOMPARE(junkFile.write(imageData), qint64(imageData.size())); + } + } else { + for (int i = 0; i < iterations; ++i) { + QImageWriter writer(&junkFile, format); + junkFile.write("deadbeef", 9); + QVERIFY(writer.write(QImage(prefix + fileName))); + } + } + junkFile.close(); + junkFile.open(QFile::ReadOnly); + + for (int i = 0; i < iterations; ++i) { + QByteArray ole = junkFile.read(9); + junkFile.ungetChar(ole[ole.size() - 1]); + char c; + junkFile.getChar(&c); + QImageReader reader(&junkFile); + QVERIFY(reader.canRead()); + QVERIFY(!reader.read().isNull()); + } +} + +void tst_QImageReader::devicePosition_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm"); + QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm"); + QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm"); + + QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg"); + QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg"); + + QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif"); + + QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm"); + QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm"); + QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp"); + QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp"); + QTest::newRow("png") << QString("kollada.png") << QByteArray("png"); + QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg"); + QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz"); +} + +void tst_QImageReader::devicePosition() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImage expected(prefix + fileName); + QVERIFY(!expected.isNull()); + + QFile imageFile(prefix + fileName); + QVERIFY(imageFile.open(QFile::ReadOnly)); + QByteArray imageData = imageFile.readAll(); + QVERIFY(!imageData.isNull()); + int imageDataSize = imageData.size(); + + const char *preStr = "prebeef\n"; + int preLen = qstrlen(preStr); + imageData.prepend(preStr); + if (format != "svg" && format != "svgz") // Doesn't handle trailing data + imageData.append("\npostbeef"); + QBuffer buf(&imageData); + buf.open(QIODevice::ReadOnly); + buf.seek(preLen); + QImageReader reader(&buf, format); + QCOMPARE(expected, reader.read()); + if (format != "ppm" && + format != "pgm" && + format != "pbm" && + format != "gif") // Known not to work + QCOMPARE(buf.pos(), qint64(preLen+imageDataSize)); +} + + +void tst_QImageReader::readFromResources_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + QTest::addColumn<QSize>("size"); + QTest::addColumn<QString>("message"); + + QTest::newRow("corrupt.bmp") << QString("corrupt.bmp") + << QByteArray("bmp") << QSize(0, 0) + << QString(""); + QTest::newRow("negativeheight.bmp") << QString("negativeheight.bmp") + << QByteArray("bmp") << QSize(127, 64) + << QString(""); + QTest::newRow("font.bmp") << QString("font.bmp") + << QByteArray("bmp") << QSize(240, 8) + << QString(""); + QTest::newRow("noclearcode.bmp") << QString("noclearcode.bmp") + << QByteArray("bmp") << QSize(29, 18) + << QString(""); + QTest::newRow("colorful.bmp") << QString("colorful.bmp") + << QByteArray("bmp") << QSize(320, 200) + << QString(""); + QTest::newRow("16bpp.bmp") << QString("16bpp.bmp") + << QByteArray("bmp") << QSize(320, 240) + << QString(""); + QTest::newRow("crash-signed-char.bmp") << QString("crash-signed-char.bmp") + << QByteArray("bmp") << QSize(360, 280) + << QString(""); + QTest::newRow("4bpp-rle.bmp") << QString("4bpp-rle.bmp") + << QByteArray("bmp") << QSize(640, 480) + << QString(""); + QTest::newRow("test32bfv4.bmp") << QString("test32bfv4.bmp") + << QByteArray("bmp") << QSize(373, 156) + << QString(""); + QTest::newRow("test32v5.bmp") << QString("test32v5.bmp") + << QByteArray("bmp") << QSize(373, 156) + << QString(""); + QTest::newRow("corrupt.gif") << QString("corrupt.gif") + << QByteArray("gif") << QSize(0, 0) + << QString(""); + QTest::newRow("trolltech.gif") << QString("trolltech.gif") + << QByteArray("gif") << QSize(128, 64) + << QString(""); + QTest::newRow("noclearcode.gif") << QString("noclearcode.gif") + << QByteArray("gif") << QSize(29, 18) + << QString(""); + QTest::newRow("earth.gif") << QString("earth.gif") + << QByteArray("gif") << QSize(320, 200) + << QString(""); + QTest::newRow("bat1.gif") << QString("bat1.gif") + << QByteArray("gif") << QSize(32, 32) + << QString(""); + QTest::newRow("bat2.gif") << QString("bat2.gif") + << QByteArray("gif") << QSize(32, 32) + << QString(""); + QTest::newRow("corrupt.jpg") << QString("corrupt.jpg") + << QByteArray("jpg") << QSize(0, 0) + << QString("JPEG datastream contains no image"); + QTest::newRow("beavis.jpg") << QString("beavis.jpg") + << QByteArray("jpg") << QSize(350, 350) + << QString(""); + QTest::newRow("YCbCr_cmyk.jpg") << QString("YCbCr_cmyk.jpg") + << QByteArray("jpg") << QSize(75, 50) + << QString(""); + QTest::newRow("YCbCr_rgb.jpg") << QString("YCbCr_rgb.jpg") + << QByteArray("jpg") << QSize(75, 50) + << QString(""); + QTest::newRow("qtbug13653-no_eoi.jpg") << QString("qtbug13653-no_eoi.jpg") + << QByteArray("jpg") << QSize(240, 180) + << QString(""); + QTest::newRow("corrupt.mng") << QString("corrupt.mng") + << QByteArray("mng") << QSize(0, 0) + << QString("MNG error 901: Application signalled I/O error; chunk IHDR; subcode 0:0"); + QTest::newRow("fire.mng") << QString("fire.mng") + << QByteArray("mng") << QSize(30, 60) + << QString(""); + QTest::newRow("ball.mng") << QString("ball.mng") + << QByteArray("mng") << QSize(32, 32) + << QString(""); + QTest::newRow("rect.svg") << QString("rect.svg") + << QByteArray("svg") << QSize(105, 137) + << QString(""); + QTest::newRow("rect.svgz") << QString("rect.svgz") + << QByteArray("svgz") << QSize(105, 137) + << QString(""); + QTest::newRow("corrupt.svg") << QString("corrupt.svg") + << QByteArray("svg") << QSize(0, 0) + << QString(""); + QTest::newRow("corrupt.svgz") << QString("corrupt.svgz") + << QByteArray("svgz") << QSize(0, 0) + << QString(""); + QTest::newRow("image.pbm") << QString("image.pbm") + << QByteArray("pbm") << QSize(16, 6) + << QString(""); + QTest::newRow("image.pgm") << QString("image.pgm") + << QByteArray("pgm") << QSize(24, 7) + << QString(""); + QTest::newRow("corrupt.png") << QString("corrupt.png") + << QByteArray("png") << QSize(0, 0) + << QString(""); + QTest::newRow("away.png") << QString("away.png") + << QByteArray("png") << QSize(16, 16) + << QString(""); + QTest::newRow("image.png") << QString("image.png") + << QByteArray("png") << QSize(22, 22) + << QString(""); + QTest::newRow("kollada.png") << QString("kollada.png") + << QByteArray("png") << QSize(436, 160) + << QString(""); + QTest::newRow("black.png") << QString("black.png") + << QByteArray("png") << QSize(48, 48) + << QString(""); + QTest::newRow("YCbCr_cmyk.png") << QString("YCbCr_cmyk.png") + << QByteArray("png") << QSize(75, 50) + << QString(""); + QTest::newRow("teapot.ppm") << QString("teapot.ppm") + << QByteArray("ppm") << QSize(256, 256) + << QString(""); + QTest::newRow("image.ppm") << QString("image.ppm") + << QByteArray("ppm") << QSize(4, 4) + << QString(""); + QTest::newRow("runners.ppm") << QString("runners.ppm") + << QByteArray("ppm") << QSize(400, 400) + << QString(""); + QTest::newRow("test.ppm") << QString("test.ppm") + << QByteArray("ppm") << QSize(10, 10) + << QString(""); + QTest::newRow("gnus.xbm") << QString("gnus.xbm") + << QByteArray("xbm") << QSize(271, 273) + << QString(""); + QTest::newRow("corrupt-colors.xpm") << QString("corrupt-colors.xpm") + << QByteArray("xpm") << QSize(0, 0) + << QString("QImage: XPM color specification is missing: bla9an.n#x"); + QTest::newRow("corrupt-pixels.xpm") << QString("corrupt-pixels.xpm") + << QByteArray("xpm") << QSize(0, 0) + << QString("QImage: XPM pixels missing on image line 3"); + QTest::newRow("corrupt-pixel-count.xpm") << QString("corrupt-pixel-count.xpm") + << QByteArray("xpm") << QSize(0, 0) + << QString(""); + QTest::newRow("marble.xpm") << QString("marble.xpm") + << QByteArray("xpm") << QSize(240, 240) + << QString(""); + QTest::newRow("test.xpm") << QString("test.xpm") + << QByteArray("xpm") << QSize(256, 256) + << QString(""); + QTest::newRow("black.xpm") << QString("black.xpm") + << QByteArray("xpm") << QSize(48, 48) + << QString(""); + QTest::newRow("namedcolors.xpm") << QString("namedcolors.xpm") + << QByteArray("xpm") << QSize(8, 8) + << QString(""); + QTest::newRow("nontransparent.xpm") << QString("nontransparent.xpm") + << QByteArray("xpm") << QSize(8, 8) + << QString(""); + QTest::newRow("transparent.xpm") << QString("transparent.xpm") + << QByteArray("xpm") << QSize(8, 8) + << QString(""); +} + +void tst_QImageReader::readFromResources() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + QFETCH(QSize, size); + QFETCH(QString, message); + + SKIP_IF_UNSUPPORTED(format); + + for (int i = 0; i < 2; ++i) { + QString file = i ? (":/images/" + fileName) : (prefix + fileName); + { + // suppress warnings if we expect them + if (!message.isEmpty()) { + for (int j = 0; j < 5; ++j) + QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); + } + + // 1) full filename, no format + QImageReader reader(file); + QImage image = reader.read(); + if (size.isNull()) + QVERIFY(image.isNull()); + else + QVERIFY(!image.isNull()); + QCOMPARE(image.size(), size); + } + { + // 2) full filename, with format + QImageReader reader(file, format); + QImage image = reader.read(); + if (size.isNull()) + QVERIFY(image.isNull()); + else + QVERIFY(!image.isNull()); + QCOMPARE(image.size(), size); + } + { + // 3) full filename, with uppercase format + QImageReader reader(file, format.toUpper()); + QImage image = reader.read(); + if (size.isNull()) + QVERIFY(image.isNull()); + else + QVERIFY(!image.isNull()); + QCOMPARE(image.size(), size); + } + { + // 4) chopped filename, with format + QImageReader reader(file.left(file.lastIndexOf(QLatin1Char('.'))), format); + QImage image = reader.read(); + if (size.isNull()) + QVERIFY(image.isNull()); + else + QVERIFY(!image.isNull()); + QCOMPARE(image.size(), size); + } + { + // 5) chopped filename, with uppercase format + QImageReader reader(file.left(file.lastIndexOf(QLatin1Char('.'))), format.toUpper()); + QImage image = reader.read(); + if (size.isNull()) + QVERIFY(image.isNull()); + else + QVERIFY(!image.isNull()); + QCOMPARE(image.size(), size); + } + } + + // Check that the results are identical + if (!message.isEmpty()) { + QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); + QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); + } + QCOMPARE(QImageReader(prefix + fileName).read(), QImageReader(":/images/" + fileName).read()); +} + +void tst_QImageReader::readCorruptImage_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<bool>("shouldFail"); + QTest::addColumn<QString>("message"); + QTest::addColumn<QByteArray>("format"); + QTest::newRow("corrupt jpeg") << QString("corrupt.jpg") << true + << QString("JPEG datastream contains no image") + << QByteArray("jpeg"); + QTest::newRow("corrupt gif") << QString("corrupt.gif") << true << QString("") << QByteArray("gif"); + QTest::newRow("corrupt mng") << QString("corrupt.mng") << true + << QString("MNG error 901: Application signalled I/O error; chunk IHDR; subcode 0:0") + << QByteArray("mng"); + QTest::newRow("corrupt png") << QString("corrupt.png") << true << QString("") << QByteArray("png"); + QTest::newRow("corrupt bmp") << QString("corrupt.bmp") << true << QString("") << QByteArray("bmp"); + QTest::newRow("corrupt xpm (colors)") << QString("corrupt-colors.xpm") << true + << QString("QImage: XPM color specification is missing: bla9an.n#x") + << QByteArray("xpm"); + QTest::newRow("corrupt xpm (pixels)") << QString("corrupt-pixels.xpm") << true + << QString("QImage: XPM pixels missing on image line 3") + << QByteArray("xpm"); + QTest::newRow("corrupt xbm") << QString("corrupt.xbm") << false << QString("") << QByteArray("xbm"); + QTest::newRow("corrupt tiff") << QString("corrupt-data.tif") << true << QString("") << QByteArray("tiff"); + QTest::newRow("corrupt svg") << QString("corrupt.svg") << true << QString("") << QByteArray("svg"); + QTest::newRow("corrupt svgz") << QString("corrupt.svgz") << true << QString("") << QByteArray("svgz"); +} + +void tst_QImageReader::readCorruptImage() +{ + QFETCH(QString, fileName); + QFETCH(bool, shouldFail); + QFETCH(QString, message); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + if (!message.isEmpty()) + QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); + QImageReader reader(prefix + fileName); + QVERIFY(reader.canRead()); + QCOMPARE(reader.read().isNull(), shouldFail); +} + +void tst_QImageReader::readCorruptBmp() +{ + QCOMPARE(QImage(prefix + "tst7.bmp").convertToFormat(QImage::Format_ARGB32_Premultiplied), QImage(prefix + "tst7.png").convertToFormat(QImage::Format_ARGB32_Premultiplied)); +} + +void tst_QImageReader::supportsOption_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QIntList>("options"); + + QTest::newRow("png") << QString("black.png") + << (QIntList() << QImageIOHandler::Gamma + << QImageIOHandler::Description + << QImageIOHandler::Quality + << QImageIOHandler::Size); +} + +void tst_QImageReader::supportsOption() +{ + QFETCH(QString, fileName); + QFETCH(QIntList, options); + + QSet<QImageIOHandler::ImageOption> allOptions; + allOptions << QImageIOHandler::Size + << QImageIOHandler::ClipRect + << QImageIOHandler::Description + << QImageIOHandler::ScaledClipRect + << QImageIOHandler::ScaledSize + << QImageIOHandler::CompressionRatio + << QImageIOHandler::Gamma + << QImageIOHandler::Quality + << QImageIOHandler::Name + << QImageIOHandler::SubType + << QImageIOHandler::IncrementalReading + << QImageIOHandler::Endianness + << QImageIOHandler::Animation + << QImageIOHandler::BackgroundColor; + + QImageReader reader(prefix + fileName); + for (int i = 0; i < options.size(); ++i) { + QVERIFY(reader.supportsOption(QImageIOHandler::ImageOption(options.at(i)))); + allOptions.remove(QImageIOHandler::ImageOption(options.at(i))); + } + + foreach (QImageIOHandler::ImageOption option, allOptions) + QVERIFY(!reader.supportsOption(option)); +} + +void tst_QImageReader::tiffCompression_data() +{ + QTest::addColumn<QString>("uncompressedFile"); + QTest::addColumn<QString>("compressedFile"); + + QTest::newRow("TIFF: adobedeflate") << "rgba_nocompression_littleendian.tif" + << "rgba_adobedeflate_littleendian.tif"; + QTest::newRow("TIFF: lzw") << "rgba_nocompression_littleendian.tif" + << "rgba_lzw_littleendian.tif"; + QTest::newRow("TIFF: packbits") << "rgba_nocompression_littleendian.tif" + << "rgba_packbits_littleendian.tif"; + QTest::newRow("TIFF: zipdeflate") << "rgba_nocompression_littleendian.tif" + << "rgba_zipdeflate_littleendian.tif"; +} + +void tst_QImageReader::tiffCompression() +{ + QFETCH(QString, uncompressedFile); + QFETCH(QString, compressedFile); + + SKIP_IF_UNSUPPORTED("tiff"); + + QImage uncompressedImage(prefix + uncompressedFile); + QImage compressedImage(prefix + compressedFile); + + QCOMPARE(uncompressedImage, compressedImage); +} + +void tst_QImageReader::tiffEndianness() +{ + SKIP_IF_UNSUPPORTED("tiff"); + + QImage littleEndian(prefix + "rgba_nocompression_littleendian.tif"); + QImage bigEndian(prefix + "rgba_nocompression_bigendian.tif"); + + QCOMPARE(littleEndian, bigEndian); +} + +void tst_QImageReader::tiffOrientation_data() +{ + QTest::addColumn<QString>("expected"); + QTest::addColumn<QString>("oriented"); + QTest::newRow("Indexed TIFF, orientation1") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_1.tiff"; + QTest::newRow("Indexed TIFF, orientation2") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_2.tiff"; + QTest::newRow("Indexed TIFF, orientation3") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_3.tiff"; + QTest::newRow("Indexed TIFF, orientation4") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_4.tiff"; + QTest::newRow("Indexed TIFF, orientation5") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_5.tiff"; + QTest::newRow("Indexed TIFF, orientation6") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_6.tiff"; + QTest::newRow("Indexed TIFF, orientation7") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_7.tiff"; + QTest::newRow("Indexed TIFF, orientation8") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_8.tiff"; + + QTest::newRow("Mono TIFF, orientation1") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_1.tiff"; + QTest::newRow("Mono TIFF, orientation2") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_2.tiff"; + QTest::newRow("Mono TIFF, orientation3") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_3.tiff"; + QTest::newRow("Mono TIFF, orientation4") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_4.tiff"; + QTest::newRow("Mono TIFF, orientation5") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_5.tiff"; + QTest::newRow("Mono TIFF, orientation6") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_6.tiff"; + QTest::newRow("Mono TIFF, orientation7") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_7.tiff"; + QTest::newRow("Mono TIFF, orientation8") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_8.tiff"; + + QTest::newRow("RGB TIFF, orientation1") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_1.tiff"; + QTest::newRow("RGB TIFF, orientation2") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_2.tiff"; + QTest::newRow("RGB TIFF, orientation3") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_3.tiff"; + QTest::newRow("RGB TIFF, orientation4") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_4.tiff"; + QTest::newRow("RGB TIFF, orientation5") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_5.tiff"; + QTest::newRow("RGB TIFF, orientation6") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_6.tiff"; + QTest::newRow("RGB TIFF, orientation7") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_7.tiff"; + QTest::newRow("RGB TIFF, orientation8") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_8.tiff"; +} + +void tst_QImageReader::tiffOrientation() +{ + QFETCH(QString, expected); + QFETCH(QString, oriented); + + SKIP_IF_UNSUPPORTED("tiff"); + + QImage expectedImage(prefix + expected); + QImage orientedImage(prefix + oriented); + QCOMPARE(expectedImage, orientedImage); +} + +void tst_QImageReader::tiffGrayscale() +{ + SKIP_IF_UNSUPPORTED("tiff"); + + QImage actualImage(prefix + "grayscale.tif"); + QImage expectedImage(prefix + "grayscale-ref.tif"); + + QCOMPARE(expectedImage, actualImage.convertToFormat(expectedImage.format())); +} + +void tst_QImageReader::dotsPerMeter_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("expectedDotsPerMeterX"); + QTest::addColumn<int>("expectedDotsPerMeterY"); + QTest::addColumn<QByteArray>("format"); + QTest::newRow("TIFF: 72 dpi") << ("rgba_nocompression_littleendian.tif") << qRound(72 * (100 / 2.54)) << qRound(72 * (100 / 2.54)) << QByteArray("tiff"); + QTest::newRow("TIFF: 100 dpi") << ("image_100dpi.tif") << qRound(100 * (100 / 2.54)) << qRound(100 * (100 / 2.54)) << QByteArray("tiff"); +} + +void tst_QImageReader::dotsPerMeter() +{ + QFETCH(QString, fileName); + QFETCH(int, expectedDotsPerMeterX); + QFETCH(int, expectedDotsPerMeterY); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImage image(prefix + fileName); + + QCOMPARE(image.dotsPerMeterX(), expectedDotsPerMeterX); + QCOMPARE(image.dotsPerMeterY(), expectedDotsPerMeterY); +} + +void tst_QImageReader::physicalDpi_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("expectedPhysicalDpiX"); + QTest::addColumn<int>("expectedPhysicalDpiY"); + QTest::addColumn<QByteArray>("format"); + QTest::newRow("TIFF: 72 dpi") << "rgba_nocompression_littleendian.tif" << 72 << 72 << QByteArray("tiff"); + QTest::newRow("TIFF: 100 dpi") << "image_100dpi.tif" << 100 << 100 << QByteArray("tiff"); +} + +void tst_QImageReader::physicalDpi() +{ + QFETCH(QString, fileName); + QFETCH(int, expectedPhysicalDpiX); + QFETCH(int, expectedPhysicalDpiY); + QFETCH(QByteArray, format); + + SKIP_IF_UNSUPPORTED(format); + + QImage image(prefix + fileName); + + QCOMPARE(image.physicalDpiX(), expectedPhysicalDpiX); + QCOMPARE(image.physicalDpiY(), expectedPhysicalDpiY); +} + +void tst_QImageReader::autoDetectImageFormat() +{ + // Assume PNG is supported :-) + { + // Disables file name extension probing + QImageReader reader(prefix + "kollada"); + reader.setAutoDetectImageFormat(false); + QVERIFY(!reader.canRead()); + QVERIFY(reader.read().isNull()); + reader.setAutoDetectImageFormat(true); + QVERIFY(reader.canRead()); + QVERIFY(!reader.read().isNull()); + } + { + // Disables detection based on suffix + QImageReader reader(prefix + "kollada.png"); + reader.setAutoDetectImageFormat(false); + QVERIFY(!reader.canRead()); + QVERIFY(reader.read().isNull()); + reader.setAutoDetectImageFormat(true); + QVERIFY(reader.canRead()); + QVERIFY(!reader.read().isNull()); + } + { + // Disables detection based on content + QImageReader reader(prefix + "kollada-noext"); + reader.setAutoDetectImageFormat(false); + QVERIFY(!reader.canRead()); + QVERIFY(reader.read().isNull()); + reader.setAutoDetectImageFormat(true); + QVERIFY(reader.canRead()); + QVERIFY(!reader.read().isNull()); + } + + if (QImageReader::supportedImageFormats().contains("jpeg")) { + QImageReader io(prefix + "YCbCr_rgb.jpg"); + io.setAutoDetectImageFormat(false); + // This should fail since no format string is given + QImage image; + QVERIFY(!io.read(&image)); + } + if (QImageReader::supportedImageFormats().contains("jpeg")) { + QImageReader io(prefix + "YCbCr_rgb.jpg", "jpg"); + io.setAutoDetectImageFormat(false); + QImage image; + QVERIFY(io.read(&image)); + } + { + QImageReader io(prefix + "tst7.png"); + io.setAutoDetectImageFormat(false); + // This should fail since no format string is given + QImage image; + QVERIFY(!io.read(&image)); + } + { + QImageReader io(prefix + "tst7.png", "png"); + io.setAutoDetectImageFormat(false); + QImage image; + QVERIFY(io.read(&image)); + } +} + +void tst_QImageReader::fileNameProbing() +{ + QString name("doesnotexist.png"); + QImageReader r; + r.setFileName(name); // non-existing / non-readable file + QCOMPARE(r.fileName(), name); + + r.size(); + QCOMPARE(r.fileName(), name); + r.read(); + QCOMPARE(r.fileName(), name); +} + +void tst_QImageReader::pixelCompareWithBaseline_data() +{ + QTest::addColumn<QString>("fileName"); + + QTest::newRow("floppy (16px,32px - 16 colors)") << "35floppy.ico"; + QTest::newRow("semitransparent") << "semitransparent.ico"; + QTest::newRow("slightlybrokenBMPHeader") << "kde_favicon.ico"; + QTest::newRow("sightlybrokenIconHeader") << "connect.ico"; +} + +void tst_QImageReader::pixelCompareWithBaseline() +{ + QFETCH(QString, fileName); + + static int enteredCount = 0; // Used for better error diagnostics if something fails. We + static int loadFailCount = 0; // don't know if the reason load() fails is that the plugin + // does not exist or because of a bug in the plugin. But if at + // least one file succeeded we know that the plugin was built. + // The other failures are then real failures. + QImage icoImg; + const QString inputFileName(QString::fromAscii("images/%1").arg(fileName)); + QFileInfo fi(inputFileName); + + ++enteredCount; + // might fail if the plugin does not exist, which is ok. + if (icoImg.load(inputFileName)) { + icoImg = icoImg.convertToFormat(QImage::Format_ARGB32_Premultiplied); + const QString baselineFileName(QString::fromAscii("baseline/%1.png").arg(fi.baseName())); +#if 0 + icoImg.save(baselineFileName); +#else + QImage baseImg; + QVERIFY(baseImg.load(baselineFileName)); + baseImg = baseImg.convertToFormat(QImage::Format_ARGB32_Premultiplied); + QCOMPARE(int(baseImg.format()), int(icoImg.format())); + QCOMPARE(baseImg, icoImg); +#endif + } else { + ++loadFailCount; + if (enteredCount != loadFailCount) { + QFAIL("Plugin is built, but some did not load properly"); + } else { + qWarning("loading failed, check if ico plugin is built"); + } + } +} + + +void tst_QImageReader::testIgnoresFormatAndExtension_data() +{ + QTest::addColumn<QString>("name"); + QTest::addColumn<QString>("extension"); + QTest::addColumn<QString>("expected"); + + QTest::newRow("black.png") << "black" << "png" << "png"; + QTest::newRow("black.xpm") << "black" << "xpm" << "xpm"; + QTest::newRow("colorful.bmp") << "colorful" << "bmp" << "bmp"; + QTest::newRow("image.ppm") << "image" << "ppm" << "ppm"; + QTest::newRow("image.pbm") << "image" << "pbm" << "pbm"; + QTest::newRow("image.pgm") << "image" << "pgm" << "pgm"; + + QTest::newRow("bat1.gif") << "bat1" << "gif" << "gif"; + + QTest::newRow("beavis.jpg") << "beavis" << "jpg" << "jpeg"; + + QTest::newRow("fire.mng") << "fire" << "mng" << "mng"; + + QTest::newRow("image_100dpi.tif") << "image_100dpi" << "tif" << "tiff"; + + QTest::newRow("rect.svg") << "rect" << "svg" << "svg"; + QTest::newRow("rect.svgz") << "rect" << "svgz" << "svgz"; +} + + +void tst_QImageReader::testIgnoresFormatAndExtension() +{ + QFETCH(QString, name); + QFETCH(QString, extension); + QFETCH(QString, expected); + + SKIP_IF_UNSUPPORTED(expected.toLatin1()); + + QList<QByteArray> formats = QImageReader::supportedImageFormats(); + QString fileNameBase = prefix + name + "."; + + foreach (const QByteArray &f, formats) { + if (f == extension) + continue; + QFile tmp(QDir::tempPath() + "/" + name + "_" + expected + "." + f); + + QVERIFY(QFile::copy(fileNameBase + extension, QFileInfo(tmp).absoluteFilePath())); + + QString format; + QImage image; + { + // image reader needs to be scoped for the remove() to work.. + QImageReader r; + r.setFileName(QFileInfo(tmp).absoluteFilePath()); + r.setDecideFormatFromContent(true); + format = r.format(); + r.read(&image); + } + + tmp.remove(); + + QVERIFY(!image.isNull()); + QCOMPARE(format, expected); + } +} + + +void tst_QImageReader::saveFormat_data() +{ + QTest::addColumn<QImage::Format>("format"); + + QTest::newRow("Format_Mono") << QImage::Format_Mono; + QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB; + QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; + QTest::newRow("Format_RGB32") << QImage::Format_RGB32; + QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32; + QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("Format_RGB16") << QImage::Format_RGB16; + QTest::newRow("Format_ARGB8565_Premultiplied") << QImage::Format_ARGB8565_Premultiplied; + QTest::newRow("Format_RGB666") << QImage::Format_RGB666; + QTest::newRow("Format_ARGB6666_Premultiplied") << QImage::Format_ARGB6666_Premultiplied; + QTest::newRow("Format_RGB555") << QImage::Format_RGB555; + QTest::newRow("Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8555_Premultiplied; + QTest::newRow("Format_RGB888") << QImage::Format_RGB888; + QTest::newRow("Format_RGB444") << QImage::Format_RGB444; + QTest::newRow("Format_ARGB4444_Premultiplied") << QImage::Format_ARGB4444_Premultiplied; +} + +void tst_QImageReader::saveFormat() +{ + QFETCH(QImage::Format, format); + + QImage orig(":/images/kollada.png"); + + QImage converted = orig.convertToFormat(format); + QBuffer buf; + buf.open(QIODevice::WriteOnly); + QVERIFY(converted.save(&buf, "png")); + buf.close(); + QImage stored = QImage::fromData(buf.buffer(), "png"); + + stored = stored.convertToFormat(QImage::Format_ARGB32); + converted = converted.convertToFormat(QImage::Format_ARGB32); + QCOMPARE(stored, converted); +} + + +void tst_QImageReader::readText_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QString>("key"); + QTest::addColumn<QString>("text"); + + QTest::newRow("png, tEXt before img") << "txts.png" << "Title" << "PNG"; + QTest::newRow("png, zTXt before img") << "txts.png" << "Comment" << "Some compressed text."; + QTest::newRow("png, tEXt after img") << "txts.png" << "Disclaimer" << "For testing only."; + QTest::newRow("png, zTXt after img") << "txts.png" << "Description" << "Rendered by Persistence of Vision (tm) Ray Tracer"; +} + + +void tst_QImageReader::readText() +{ + QFETCH(QString, fileName); + QFETCH(QString, key); + QFETCH(QString, text); + + QImage img(prefix + fileName); + QVERIFY(img.textKeys().contains(key)); + QCOMPARE(img.text(key), text); +} + + +void tst_QImageReader::preserveTexts_data() +{ + QTest::addColumn<QString>("text"); + + QTest::newRow("Simple") << "simpletext"; + QTest::newRow("Whitespace") << " A text with whitespace "; + QTest::newRow("Newline") << "A text\nwith newlines\n"; + QTest::newRow("Double newlines") << "A text\n\nwith double newlines\n\n"; + QTest::newRow("Long") << QString("A rather long text, at least after many repetitions. ").repeated(100); + QString latin1set; + int c; + for(c = 0x20; c <= 0x7e; c++) + latin1set.append(QLatin1Char(c)); + for(c = 0xa0; c <= 0xff; c++) + latin1set.append(QLatin1Char(c)); + QTest::newRow("All Latin1 chars") << latin1set; + +#if 0 + // Depends on iTXt support in libpng + QTest::newRow("Multibyte string") << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240"); +#endif +} + + +void tst_QImageReader::preserveTexts() +{ + QFETCH(QString, text); + QString key("testkey"); + QString key2("testkey2"); + QString text2("Some other text."); + QString key3("testkey3"); + QString text3("Some more other text."); + + QImage img(":/images/kollada.png"); + img.setText(key, text); + img.setText(key2, text2); + QBuffer buf; + buf.open(QIODevice::WriteOnly); + QVERIFY(img.save(&buf, "png")); + buf.close(); + QImage stored = QImage::fromData(buf.buffer(), "png"); + QCOMPARE(stored.text(key), text); + QCOMPARE(stored.text(key2), text2); + + QImage img2(":/images/kollada.png"); + img2.setText(key3, text3); + QBuffer buf2; + QImageWriter w(&buf2, "png"); + w.setText(key, text); + w.setText(key2, text2); + QVERIFY(w.write(img2)); + buf2.close(); + QImageReader r(&buf2, "png"); + QCOMPARE(r.text(key), text.simplified()); + QCOMPARE(r.text(key2), text2.simplified()); + QCOMPARE(r.text(key3), text3.simplified()); +} + + +QTEST_MAIN(tst_QImageReader) +#include "tst_qimagereader.moc" diff --git a/tests/auto/gui/image/qimagewriter/.gitignore b/tests/auto/gui/image/qimagewriter/.gitignore new file mode 100644 index 0000000000..9355bcd1bf --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/.gitignore @@ -0,0 +1 @@ +tst_qimagewriter diff --git a/tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpg b/tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpg Binary files differnew file mode 100644 index 0000000000..b8aa9ea609 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpg diff --git a/tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpg b/tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpg Binary files differnew file mode 100644 index 0000000000..8771224cb5 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpg diff --git a/tests/auto/gui/image/qimagewriter/images/beavis.jpg b/tests/auto/gui/image/qimagewriter/images/beavis.jpg Binary files differnew file mode 100644 index 0000000000..d55504779b --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/beavis.jpg diff --git a/tests/auto/gui/image/qimagewriter/images/colorful.bmp b/tests/auto/gui/image/qimagewriter/images/colorful.bmp Binary files differnew file mode 100644 index 0000000000..8ea6f4acd7 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/colorful.bmp diff --git a/tests/auto/gui/image/qimagewriter/images/earth.gif b/tests/auto/gui/image/qimagewriter/images/earth.gif Binary files differnew file mode 100644 index 0000000000..2c229eb110 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/earth.gif diff --git a/tests/auto/gui/image/qimagewriter/images/font.bmp b/tests/auto/gui/image/qimagewriter/images/font.bmp Binary files differnew file mode 100644 index 0000000000..28b8c66924 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/font.bmp diff --git a/tests/auto/gui/image/qimagewriter/images/gnus.xbm b/tests/auto/gui/image/qimagewriter/images/gnus.xbm new file mode 100644 index 0000000000..58d1ac845a --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/gnus.xbm @@ -0,0 +1,622 @@ +#define noname_width 271 +#define noname_height 273 +static char noname_bits[] = { + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x49,0xe0,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x97,0xaa,0x8a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x57,0x2a,0x41,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0x52,0x16,0xfe,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x49,0x05, + 0xf9,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0x95,0xaa,0x58,0xf4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xa5,0x54,0x26,0xe1,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x54,0x49,0x49,0xe4,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0xa5, + 0x2a,0xd1,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xaf,0x52,0x95,0x54,0xc4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab, + 0x24,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x57,0x29,0xa9,0x92,0x11,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x57,0xd5,0xfa,0xff,0xff,0xab,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x4a,0x55,0x2a,0x41,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x29,0xe5,0xff,0xff,0x95,0xa4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xa4, + 0x24,0xa5,0x14,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0xa5,0xd4,0xff, + 0x3f,0x52,0xa9,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x29,0x55,0x55,0x55,0x41,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xa9,0x54,0xea,0xff,0xdf,0x2a,0x55,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x4a,0x49,0x12,0x7e,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0x55,0xa5,0x92,0xff,0x23,0xa5,0x4a,0xd6,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xa4,0x94,0xaa,0x42, + 0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0x2a,0xa9,0xff,0xad,0x92,0x24, + 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a, + 0x95,0x52,0x52,0x29,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x52,0x49,0x55, + 0xfe,0x91,0x54,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0x49,0x29,0x55,0x25,0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff, + 0x4f,0x95,0xaa,0x92,0x7e,0x55,0x55,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0x50,0x95,0xaa,0x24,0x7e,0xff,0xff, + 0xff,0xff,0xff,0xff,0x57,0x2a,0x95,0x54,0x79,0x95,0x92,0x92,0x94,0xfc,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb9,0x62,0x29,0x49, + 0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x49,0x49,0x95,0xba,0xa4,0x54, + 0xaa,0x52,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf, + 0x1a,0xf8,0xa7,0xaa,0x22,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x52, + 0x2a,0x75,0x55,0xa5,0x24,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xbf,0x5a,0xfd,0x57,0x92,0x94,0x7e,0xff,0xff,0xff,0xff,0xff, + 0xff,0x4a,0x4a,0x55,0x49,0x89,0x92,0x94,0xaa,0x94,0xf4,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xfc,0x2f,0x55,0x05,0x7c,0xff, + 0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0x4a,0x55,0x2a,0x55,0x55,0x55,0x55,0xe5, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x4e,0xfd,0x5f, + 0x29,0xa5,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0xa4,0x54,0x52,0x4a,0x55,0xa9, + 0xa4,0x24,0xa5,0x94,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x2f,0x1d,0xfe,0x3f,0x95,0x04,0x7c,0xff,0xfd,0xff,0xff,0xff,0x3f,0x49,0xa5, + 0x54,0xa9,0xa4,0x92,0x4a,0x49,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xaf,0x44,0xfe,0x5f,0xa9,0x52,0x7d,0xff,0xe5,0xff,0xff, + 0xff,0x5f,0x55,0x92,0x2a,0x95,0x52,0x4a,0x52,0xaa,0x52,0x4a,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x16,0xff,0xbf,0x4a,0x05,0x7c, + 0xff,0xd9,0xff,0xff,0xff,0x5f,0x95,0x42,0xa5,0x52,0x95,0xaa,0xaa,0xaa,0x94, + 0x54,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x43,0xfe, + 0xbf,0x54,0x52,0x7d,0x7f,0x25,0xff,0xff,0xff,0xa7,0xa4,0x28,0x92,0x54,0x4a, + 0xa5,0x4a,0x92,0xaa,0x4a,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xab,0x12,0xfe,0x7f,0xa5,0x02,0x7c,0x7f,0x55,0xfd,0xff,0xff,0x95,0x2a, + 0x82,0x54,0xa5,0x54,0x2a,0xa9,0x2a,0xa5,0x52,0xf5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x27,0x4b,0xff,0xff,0x4a,0x29,0x7d,0xff,0x92,0xfe, + 0xff,0xff,0x55,0x92,0x20,0xa8,0x94,0x2a,0xa5,0x94,0x52,0x29,0xa9,0xf4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x01,0xff,0x7f,0x52,0x42, + 0x7c,0xff,0x25,0xf9,0xff,0x7f,0xaa,0x02,0x8a,0x40,0x29,0x49,0x09,0x41,0x4a, + 0x55,0x25,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57, + 0xff,0xff,0x95,0x12,0x7d,0xff,0xa9,0xfa,0xff,0x7f,0x25,0xa9,0x20,0x2a,0xa5, + 0xaa,0x42,0x92,0x54,0x92,0x54,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xaf,0x83,0xff,0xff,0xa9,0x42,0x7e,0xff,0xaa,0xf4,0xff,0xaf,0x54, + 0x01,0x82,0x80,0xaa,0x54,0x14,0x08,0xa2,0xaa,0x4a,0xd2,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xef,0xcf,0xd7,0xff,0xff,0x52,0x12,0x7f,0xff,0x4a, + 0xea,0xff,0x57,0x92,0xaa,0x28,0x24,0x29,0x25,0x81,0x82,0x08,0x49,0x52,0x55, + 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xef,0xe7,0xff,0xff,0x2a, + 0x05,0x7e,0xff,0x55,0xd5,0xff,0xa5,0x2a,0x00,0x8e,0x10,0x4a,0x89,0x24,0x28, + 0xa0,0xaa,0x2a,0x49,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xe7,0xff, + 0xef,0xff,0xff,0xa5,0x50,0x7e,0xff,0x25,0xe5,0xff,0x2a,0xa5,0x52,0x7f,0x85, + 0x54,0x35,0x08,0x82,0x0a,0x55,0x95,0xaa,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff, + 0xff,0xff,0xd7,0xff,0xff,0xff,0x7f,0x52,0x85,0x7e,0xff,0xab,0x94,0x1e,0x55, + 0x2a,0xc8,0xff,0x10,0x90,0x92,0xa0,0x08,0x20,0x24,0x52,0x25,0xfd,0xff,0xff, + 0xff,0xef,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0x94,0x10,0x7e,0xff, + 0x93,0xaa,0x6a,0x49,0x49,0xf2,0xff,0x85,0x52,0x09,0x0a,0xa2,0x4a,0x92,0x29, + 0xa9,0xf2,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0x7f, + 0x55,0x25,0x7f,0xff,0x55,0x49,0x49,0x95,0x0a,0xf9,0xff,0x17,0x48,0x26,0x50, + 0x08,0x00,0xa9,0x4a,0x95,0xfa,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xf2, + 0xff,0xff,0xff,0xff,0x92,0x80,0x7e,0xff,0xa7,0x54,0xaa,0xa4,0x52,0xfc,0xff, + 0xaf,0x42,0x89,0xfa,0xbf,0x54,0x20,0xa9,0xa4,0xd4,0xff,0xff,0xff,0xcb,0xff, + 0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0x54,0x29,0x7f,0xff,0x4b,0xa5,0x92, + 0x2a,0x01,0xff,0xff,0x1f,0xa8,0x22,0xff,0xff,0x01,0xa5,0x2a,0x55,0xa9,0xff, + 0xff,0xff,0xd4,0xff,0xff,0xff,0x7f,0xfa,0xff,0xff,0xff,0x7f,0xa5,0x04,0x7f, + 0xff,0x57,0x2a,0x55,0xa9,0x54,0xfe,0xff,0x3f,0x05,0x89,0xff,0xff,0x5f,0x48, + 0x92,0x2a,0x95,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,0xff, + 0x7f,0x2a,0x91,0x7f,0xff,0xa9,0x54,0x4a,0x52,0x02,0xff,0xff,0xff,0x50,0xd1, + 0xff,0xff,0x1f,0x81,0xaa,0xa4,0x52,0xfe,0xff,0x3f,0xe9,0xff,0xff,0xff,0x7f, + 0x1d,0xff,0xff,0xff,0xff,0x54,0x41,0x7f,0xff,0x93,0x92,0x52,0x95,0xc8,0xff, + 0xff,0xff,0x8b,0xc4,0xff,0xff,0x7f,0x24,0xa5,0x2a,0x49,0xf9,0xff,0x7f,0xd5, + 0xff,0xff,0xff,0xbf,0x4a,0xff,0xff,0xff,0xff,0x4a,0x14,0x7f,0xff,0x28,0xa5, + 0x94,0x2a,0xa0,0xff,0xff,0x7f,0x22,0xf0,0xff,0xff,0x7f,0x12,0x94,0xa4,0xaa, + 0xea,0xff,0xaf,0xea,0xff,0xff,0xff,0x5f,0x8e,0xff,0xff,0xff,0x7f,0xa9,0x40, + 0x7f,0xff,0x48,0x55,0x55,0x12,0xca,0xff,0xff,0xff,0x0a,0xf5,0xff,0xff,0xff, + 0x80,0x52,0x95,0x54,0xaa,0xfe,0x55,0xc4,0xff,0xff,0xff,0x5f,0xa5,0xff,0xff, + 0xff,0xff,0x94,0x14,0x7f,0xff,0x52,0x2a,0xa9,0x4a,0xe1,0xff,0xff,0xbf,0x24, + 0xf0,0xff,0xff,0xff,0x0b,0x28,0xa9,0x92,0x24,0x55,0x49,0xe5,0xd7,0xff,0xff, + 0xa7,0x8a,0xff,0xff,0xff,0x7f,0xa5,0xc0,0x7f,0xff,0x50,0x49,0x95,0x04,0xf8, + 0xff,0xff,0x5f,0x1f,0xfd,0xff,0xff,0xff,0x47,0x45,0x55,0xaa,0xaa,0x4a,0xaa, + 0xea,0xaf,0xff,0xff,0x2b,0xc3,0xff,0xff,0xff,0x7f,0x55,0x94,0x7f,0x7f,0x4a, + 0x55,0x52,0x51,0xfe,0xff,0xff,0x5f,0x4e,0xf8,0xff,0xff,0xff,0x1f,0x50,0x92, + 0x52,0x49,0xa9,0x92,0xe4,0xd3,0xff,0xff,0x4b,0xd5,0xff,0xff,0xff,0xff,0x94, + 0xc0,0x7f,0x3f,0xa0,0xa4,0xaa,0x04,0xfe,0xff,0xff,0xa7,0x1d,0xfd,0xff,0xff, + 0xff,0x9f,0x84,0xaa,0x4a,0xaa,0x24,0x55,0xf2,0x2b,0xff,0x7f,0xa9,0xc1,0xff, + 0xff,0xff,0x7f,0x4a,0x95,0x7f,0xbf,0x2a,0x95,0x24,0x50,0xff,0xff,0xff,0x97, + 0x5e,0xfe,0xff,0xff,0xff,0x3f,0x92,0x24,0x95,0x92,0xaa,0xa4,0xf2,0xcb,0xff, + 0x5f,0xd5,0xe5,0xff,0xff,0xff,0xff,0x52,0x80,0x7f,0x3f,0xa0,0x52,0x15,0x85, + 0xff,0xff,0xff,0xd7,0x38,0xfe,0xff,0xff,0xff,0xff,0x20,0xaa,0x52,0x55,0x55, + 0x55,0xf9,0x29,0xfd,0xab,0xa4,0xf0,0xff,0xff,0xff,0x7f,0x29,0xa9,0x7f,0xff, + 0x42,0x25,0x49,0xe8,0xff,0xff,0xff,0x69,0x7a,0xff,0xff,0xff,0xff,0xff,0x82, + 0x52,0xaa,0x24,0x89,0x4a,0xf8,0x55,0x2a,0x49,0x95,0xf5,0xff,0xff,0xff,0xbf, + 0x2a,0xc4,0x7f,0x7f,0x90,0x54,0x15,0xe2,0xff,0xff,0xff,0x25,0xbc,0xff,0xff, + 0xff,0xff,0xff,0x29,0x48,0x49,0xaa,0xaa,0xa4,0xfa,0x95,0x92,0x54,0x52,0xf0, + 0xff,0xff,0xff,0xbf,0x4a,0xd1,0x7f,0xff,0x05,0xaa,0x40,0xf8,0xff,0xff,0x7f, + 0xaa,0xfc,0xff,0xff,0xff,0xff,0xff,0x43,0xa9,0xaa,0x4a,0x52,0xa9,0xf8,0xa4, + 0xaa,0x52,0x95,0xfc,0xff,0xff,0xff,0x7f,0x52,0xc0,0x7f,0xff,0xa1,0x00,0x24, + 0xfa,0xff,0xff,0xff,0x0a,0xfe,0xff,0xff,0xff,0xff,0xff,0x17,0x92,0x24,0xa5, + 0x2a,0x55,0xfe,0xaa,0xa4,0x2a,0x29,0xf9,0xff,0xff,0xff,0xbf,0x2a,0xea,0x7f, + 0xff,0x05,0x92,0x90,0xfc,0xff,0xff,0xbf,0xa4,0xff,0xff,0xff,0xff,0xff,0xff, + 0x4f,0xa0,0xaa,0x54,0x49,0x25,0x7c,0x49,0x95,0xa4,0x12,0xfc,0xff,0xff,0xff, + 0x7f,0x8a,0xe0,0x7f,0xff,0xa3,0x04,0x05,0xfe,0xff,0xff,0xbf,0x06,0xff,0xff, + 0xff,0xff,0xff,0xff,0x1f,0x49,0x95,0x52,0xaa,0x12,0x7f,0x55,0x52,0x55,0x0a, + 0xfd,0xff,0xff,0xff,0x3f,0x29,0xe8,0x7f,0xff,0x0f,0x50,0x50,0xff,0xff,0xff, + 0x5f,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x04,0xa9,0x4a,0x25,0x45,0x3e, + 0xa9,0x2a,0xa9,0xa2,0xfc,0xff,0xff,0xff,0x7f,0x55,0xe1,0x7f,0xff,0x27,0x05, + 0xc4,0xff,0xff,0xff,0x9f,0x91,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x41,0x4a, + 0x29,0xa9,0x12,0x5e,0x95,0x94,0x4a,0x0a,0xfe,0xff,0xff,0xff,0xbf,0x12,0xf4, + 0x7f,0xff,0x8f,0x50,0xf1,0xff,0xff,0xff,0xa7,0xc2,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x14,0x92,0xaa,0x4a,0xa2,0xbf,0xa4,0x52,0x95,0x22,0xff,0xff,0xff, + 0xff,0x3f,0x45,0xf2,0x7f,0xff,0x3f,0x04,0xf4,0xff,0xff,0xff,0xd7,0xe8,0xff, + 0xff,0xff,0xff,0x5f,0xff,0xff,0x83,0xa8,0x94,0x54,0x09,0x2f,0x55,0x4a,0x52, + 0x49,0xff,0xff,0xff,0xff,0x5f,0x99,0xf0,0x7f,0xff,0x7f,0x51,0xfc,0xff,0xff, + 0xff,0x6b,0xf1,0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x2b,0x2a,0xa9,0x12,0x20, + 0x5f,0xa9,0xaa,0x54,0x00,0xff,0xff,0xff,0xff,0x5f,0x15,0xf2,0x7f,0xff,0xff, + 0x8f,0xff,0xff,0xff,0xff,0x2b,0xfc,0xff,0xff,0xff,0xff,0x2f,0xfd,0xff,0x87, + 0xa0,0x4a,0xaa,0x8a,0x9f,0x4a,0x52,0x15,0xa9,0xff,0xff,0xff,0xff,0x5f,0x8a, + 0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xf8,0xff,0xff,0xff,0xff, + 0x57,0xf2,0xff,0x2f,0x82,0x52,0x05,0xd0,0x2f,0x95,0x4a,0x49,0x84,0xff,0xff, + 0xff,0xff,0xbf,0x24,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xfd, + 0xff,0xff,0xff,0xff,0x4b,0xd5,0xff,0x9f,0x28,0x54,0x48,0xc5,0xbf,0x52,0x55, + 0x0a,0xe1,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfa,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x1a,0xfe,0xff,0xff,0xff,0xff,0x57,0xa9,0xff,0x3f,0x82,0x00,0x21, + 0xf0,0x5f,0x2a,0x49,0x21,0xc4,0xff,0xff,0xff,0xff,0xaf,0x1a,0xfd,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0x3f,0x85,0xff,0xff,0xff,0xff,0xff,0x29,0xa5,0xff, + 0xff,0x24,0x52,0x88,0xfc,0xbf,0x92,0x2a,0x09,0xf1,0xff,0xff,0xff,0xff,0x9f, + 0x4c,0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x15,0xff,0xff,0xff,0x7f, + 0xff,0xa5,0x4a,0xff,0xff,0x90,0x08,0x01,0xfe,0x3f,0x55,0x52,0x24,0xf4,0xff, + 0xff,0xff,0xff,0xaf,0x02,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xc6, + 0xff,0xff,0xff,0xbf,0xfe,0x95,0x54,0xff,0xff,0x05,0x42,0xa8,0xfe,0xbf,0xa4, + 0x2a,0x41,0xf9,0xff,0xff,0xff,0xff,0x5f,0x55,0xfc,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0x4f,0xd0,0xff,0xff,0xff,0xbf,0x7c,0xaa,0x92,0xfc,0xff,0x53,0x08, + 0x01,0xff,0x1f,0x4a,0x01,0x04,0xfc,0xff,0xff,0xff,0xff,0x27,0x05,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xc5,0xff,0xff,0xff,0x4f,0xbf,0x52,0xaa, + 0xfe,0xff,0x07,0x42,0xea,0xff,0xbf,0x50,0x54,0x51,0xff,0xff,0xff,0xff,0xff, + 0x97,0x56,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xf0,0xff,0xff,0xff, + 0x2f,0x7f,0xa5,0x54,0xfd,0xff,0x3f,0x09,0xe0,0xff,0x1f,0x02,0x01,0x04,0xff, + 0xff,0xff,0xff,0xff,0xaf,0x02,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x4b, + 0xf5,0xff,0xff,0xff,0xab,0x9f,0x94,0x92,0xfc,0xff,0xff,0x40,0xfd,0xff,0x9f, + 0x48,0x48,0xa1,0xff,0xff,0xff,0xff,0xff,0xa7,0x56,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0x6b,0xf8,0xff,0xff,0xff,0xa4,0x5f,0xa9,0x2a,0xfd,0xff,0xff, + 0xff,0xff,0xff,0x3f,0x22,0x21,0xc4,0xff,0xff,0xff,0xff,0xff,0x2f,0x03,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xfa,0xff,0xff,0x7f,0xd5,0x2f,0xa5, + 0xa4,0xfa,0xff,0xff,0xff,0xff,0xff,0xbf,0x08,0x08,0xf9,0xff,0xff,0xff,0xff, + 0xff,0x97,0x4a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xfc,0xff,0xff, + 0x7f,0x69,0xac,0x2a,0x55,0xf9,0xff,0xff,0xff,0xff,0xff,0x7f,0xa2,0x22,0xf8, + 0xff,0xff,0xff,0xff,0xff,0x53,0x21,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0x15,0xfe,0xff,0xff,0x9f,0x2a,0x95,0x94,0x92,0xf4,0xff,0xff,0xff,0xff,0xff, + 0xff,0x08,0x88,0xfe,0xff,0xff,0xff,0xff,0xff,0x57,0x8b,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xa9,0xfe,0xff,0xff,0x5f,0x52,0xbc,0x52,0x55,0xf5,0xff, + 0xff,0xff,0xff,0xff,0xff,0x21,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xa1, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x0d,0xff,0xff,0xff,0x57,0x15,0x3f, + 0x55,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xc8,0xff,0xff,0xff,0xff, + 0xff,0xff,0xd7,0x89,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xbf,0xd6,0xff,0xff, + 0xff,0x4b,0x45,0x3f,0x49,0xaa,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf9, + 0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0x3f,0x81,0xff,0xff,0xff,0x29,0x11,0x5f,0x28,0x55,0xf5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xc8,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0x5f,0xd6,0xff,0xff,0x7f,0xaa,0xc2,0x0f,0x55,0x49,0xea, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5, + 0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x9f,0xe1,0xff,0xff,0xbf,0x4a,0xd1, + 0x5f,0x48,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe9,0xe0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x27,0xf4,0xff, + 0xff,0xbf,0x94,0xc4,0x07,0x91,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xea,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xaf,0xf1,0xff,0xff,0x9f,0x52,0xe0,0x4b,0x44,0x52,0xe9,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0xe0,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xab,0x2a,0xf5,0x0f,0x51,0xa5, + 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x69,0xe5,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x55,0xf8,0xff,0xff,0x95,0x14, + 0xf0,0x5f,0x84,0x54,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0x75,0xf0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x13,0xfd, + 0xff,0xff,0xa5,0x42,0xf9,0x7f,0x91,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xfa,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0x54,0xfe,0xff,0x7f,0x52,0x12,0xfa,0xff,0x20,0xa5,0xe4,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x34,0xf8,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xaf,0xaa,0x48,0xfc,0xff,0x0b, + 0x29,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xb5,0xf8,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x52,0xff,0xff,0x2f,0x49, + 0x02,0xfe,0xff,0x43,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x3f,0x3a,0xfa,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x4a, + 0xff,0xff,0xa5,0x2a,0xa9,0xff,0xff,0x17,0x25,0xe9,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9a,0xfc,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0x2a,0xff,0x7f,0x95,0x54,0x80,0xff,0xff,0x07,0xa9,0xea,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1d,0xfc, + 0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xa9,0xfe,0x7f,0xa9,0x12,0xe5,0xff,0xff, + 0x5f,0x4a,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x5f,0xad,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x95,0xea,0x97,0x54, + 0x4a,0xf0,0xff,0xff,0x1f,0xa8,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x5f,0x0e,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f, + 0x52,0x55,0xa9,0x92,0x02,0xfd,0xff,0xff,0x5f,0x53,0xf5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x5e,0xfe,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xbf,0x2a,0x49,0x4a,0x55,0x49,0xfc,0xff,0xff,0x3f,0x94,0xf8, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x0f, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,0xa5,0xaa,0x92,0xa4,0x20,0xff,0xff, + 0xff,0xbf,0xa4,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x5f,0x57,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x52,0x52,0xaa, + 0x2a,0x0a,0xff,0xff,0xff,0x7f,0x54,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xa7,0x94,0x4a,0x55,0x4a,0xa0,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0x2f,0x55,0xa9,0x92,0x12,0xe9,0xff,0xff,0xff,0x7f,0x24, + 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf, + 0x87,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0xa5,0x4a,0xaa,0x44,0xf4,0xff, + 0xff,0xff,0xff,0x55,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0xab,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xab,0x94,0xa4, + 0x92,0x12,0xf9,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0x83,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0x47,0xa9,0x2a,0x55,0x40,0xfc,0xff,0xff,0xff,0xff,0x25,0xf5,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xd7,0x97,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0x33,0x55,0xa9,0x24,0x15,0xfe,0xff,0xff,0xff,0xff, + 0x95,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff, + 0x93,0xc3,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x25,0xa5,0x2a,0x40,0xff, + 0xff,0xff,0xff,0xff,0xa9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xff, + 0xff,0xff,0xff,0xff,0xe7,0xd5,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4b,0x92, + 0x54,0x92,0xd4,0xff,0xff,0xff,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xd5,0xc1,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0x97,0xaa,0x4a,0x05,0xe2,0xff,0xff,0xff,0xff,0xff,0x25,0xf1,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xff,0xff,0xff,0xff,0xd5,0xea,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x55,0x25,0xa1,0xf0,0xff,0xff,0xff,0xff, + 0xff,0x95,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xfa,0xff,0xff,0xff, + 0xff,0xea,0xe0,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xa7,0x24,0x59,0x04,0xfa, + 0xff,0xff,0xff,0xff,0xff,0xa9,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2, + 0xfd,0xff,0xff,0xff,0xff,0xc9,0xe9,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f, + 0x52,0x05,0xa1,0xfc,0xff,0xff,0xff,0xff,0xff,0xa5,0xfa,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x70,0xf9,0xff,0xff,0xff,0xff,0x74,0xe2,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0x47,0x95,0x92,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xf8, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xe2,0xfa,0xff,0xff,0xff,0xff,0x72,0xe8, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x97,0xaa,0x20,0xd0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb8,0xfc,0xff,0xff, + 0xff,0xff,0xea,0xe2,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x07,0x04,0x82,0xc2, + 0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x71,0xfd,0xff,0xff,0xff,0x7f,0x2a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0x4f,0x91,0x28,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xff, + 0xff,0xff,0xff,0x1f,0x54,0xfe,0xff,0xff,0xff,0x7f,0x75,0xf2,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0x27,0x44,0x82,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x29, + 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xb8,0xfc,0xff,0xff,0xff,0xbf,0x14, + 0xf1,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x0f,0x11,0x20,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x9a,0xfe,0xff, + 0xff,0xff,0x7f,0x5a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x40,0x85, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x4f,0x2d,0xfd,0xff,0xff,0xff,0x9f,0x12,0xf9,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0x3f,0x14,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfe,0xff,0xff, + 0xff,0xff,0xff,0xff,0x07,0xa6,0xfe,0xff,0xff,0xff,0x5f,0x4d,0xfa,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x4b,0xfe,0xff,0xff,0xff,0xbf, + 0x2c,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x57,0xff, + 0xff,0xff,0xff,0x5f,0x0a,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xd5,0xa9,0xff,0xff,0xff,0xff,0xaf,0x5a,0xfc,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa3,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x81,0x95,0xff,0xff,0xff,0xff,0x9f,0x06,0xfd,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xa5,0xff,0xff,0xff,0xff, + 0x2f,0x95,0xfc,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xea, + 0xff,0xff,0xff,0xff,0xaf,0x26,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xf5,0xf4,0xff,0xff,0xff,0xff,0xaf,0x86,0xfe,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0x70,0xe5,0xff,0xff,0xff,0xff,0x4f,0x2e,0xfe, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xb2,0xfa,0xff,0xff,0xff, + 0xff,0x57,0x83,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x78, + 0xf2,0xff,0xff,0xff,0xff,0xa7,0x22,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x5f,0x5d,0xfd,0xff,0xff,0xff,0xff,0x97,0x87,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x3c,0xfd,0xff,0xff,0xff,0xff,0x53,0xa3, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xac,0xfe,0xff,0xff, + 0xff,0xff,0x57,0x95,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0x9e,0xfe,0xff,0xff,0xff,0xff,0x97,0x81,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x57,0xfe,0xff,0xff,0xff,0xff,0xa9,0xa5,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xaf,0xff,0xff,0xff,0xff,0xff,0x4b, + 0x89,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x93,0xff,0xff, + 0xff,0xff,0xff,0x95,0xa2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x83,0xab,0xff,0xff,0xff,0xff,0xff,0xd3,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff, + 0xff,0xff,0xff,0xff,0xe9,0xa5,0xff,0xff,0xff,0xff,0xff,0xa5,0xe1,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xd5,0xff,0xff,0xff,0xff,0xff, + 0xd5,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xff, + 0xff,0xff,0xff,0xff,0x14,0xc1,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff, + 0xff,0xe0,0xe4,0xff,0xff,0xff,0xff,0xff,0x65,0xe8,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf, + 0xff,0xff,0xff,0xff,0x3f,0x72,0xe9,0xff,0xff,0xff,0xff,0xff,0x6a,0xe1,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xbf,0xb8,0xfa,0xff,0xff,0xff,0xff, + 0xff,0x52,0xea,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0x1f,0x7a,0xf5, + 0xff,0xff,0xff,0xff,0x7f,0x2a,0xe0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff, + 0xff,0x8f,0x58,0xfa,0xff,0xff,0xff,0xff,0x7f,0x25,0xf5,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xb5,0xff,0xff,0xdf,0xff,0x57,0x5e,0xfd,0xff,0xff,0xff,0xff,0xff,0x34,0xe0, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xca,0xff,0xff,0x8f,0xff,0x07,0xac,0xfc,0xff,0xff,0xff, + 0xff,0x7f,0x2a,0xf5,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd4,0xff,0xff,0x57,0xff,0x2b,0x2d, + 0xfd,0xff,0xff,0xff,0xff,0xff,0xb2,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2,0xff,0xff, + 0x07,0xff,0x43,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x2a,0xf8,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x3f,0xc5,0xff,0xff,0x2b,0xfe,0x08,0xab,0xfe,0xff,0xff,0xff,0xff,0x7f,0xaa, + 0xf2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x83,0x36,0x20,0x55,0xff,0xff,0xff, + 0xff,0xff,0x3f,0x15,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xc2,0xff,0xff,0x48,0x4a,0x85, + 0x49,0xff,0xff,0xff,0xff,0xff,0x7f,0x59,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xf5,0xff, + 0x7f,0x10,0x29,0x50,0xa5,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xf9,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x97,0xe4,0xff,0x7f,0x05,0x95,0x42,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x35,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xab,0xea,0xff,0xbf,0xa0,0x24,0xa8,0xd4,0xff,0xff, + 0xff,0xff,0xff,0x7f,0x19,0xf9,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xe5,0xff,0x3f,0x92,0xaa, + 0x50,0xe9,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xe2, + 0xff,0x9f,0xa0,0xaa,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xf9,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x95,0xf8,0xff,0x5f,0x4a,0x92,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff, + 0xbf,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xf2,0xff,0x1f,0x20,0x49,0xa5,0xfa,0xff, + 0xff,0xff,0xff,0xff,0x5f,0x1a,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xf8,0xff,0x47,0xa9, + 0x2a,0x29,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0x0a,0xfc,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49, + 0xf2,0xff,0x17,0x92,0xaa,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xac,0xfe, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x9f,0x2a,0xf8,0xff,0x43,0xa8,0x24,0x25,0xff,0xff,0xff,0xff,0xff, + 0xff,0xaf,0x0a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xfa,0xff,0x91,0x54,0xaa,0x52,0xff, + 0xff,0xff,0xff,0xff,0xff,0x2f,0x4d,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x45,0xfc,0xff,0x03, + 0x92,0x52,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x06,0xfc,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf, + 0x12,0xfe,0xff,0x50,0xaa,0x2a,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xa5, + 0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x44,0xff,0xff,0x0a,0x25,0xa5,0xa4,0xff,0xff,0xff,0xff, + 0xff,0xff,0x97,0x06,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x15,0xff,0xff,0x40,0xa9,0x92,0xea, + 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa1,0xff,0x7f, + 0x92,0x4a,0xaa,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x06,0xfc,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x95,0x8a,0xff,0x3f,0x84,0x54,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0x2f, + 0x25,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x52,0xe0,0xff,0xbf,0x50,0xa9,0x4a,0xf2,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x8e,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa9,0xea,0xff,0x3f,0x24,0x95,0x54, + 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x23,0xfe,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x4a,0xf0,0xff, + 0x9f,0x50,0x69,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x8b,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xa5,0xf4,0xff,0x0f,0x2d,0x75,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff, + 0xaf,0x03,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x9f,0x14,0xfa,0xff,0x2f,0xa8,0xfa,0x25,0xfd,0xff,0xff, + 0xff,0xff,0xff,0xff,0x97,0xd7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xfc,0xff,0x0f,0x4d,0xfd, + 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x83,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x12,0xfc, + 0xff,0x27,0x92,0xfe,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xd7,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x97,0x0a,0xff,0xff,0x83,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xef,0xc7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xab,0x24,0xff,0xff,0x2b,0xaa,0xfe,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0x05,0x95, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x82, + 0xff,0xff,0x51,0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xa9,0xe8,0xff,0xff,0x85,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xc1,0xff,0xff,0x90,0xd5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x4d,0xe8,0xff,0xff,0xa5, + 0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x51, + 0xf2,0xff,0x7f,0x40,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x3f,0x95,0xf8,0xff,0x7f,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x15,0xfa,0xff,0x3f,0xa4,0xf4,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xfc,0xff,0x7f, + 0x71,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f, + 0x15,0xfe,0xff,0x3f,0x94,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xa7,0x0a,0xff,0xff,0x1f,0x79,0xf2,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xff,0xff,0x5f,0x8c,0xfa,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x82,0xff,0xff, + 0x1f,0x5c,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xa4,0x92,0xff,0xff,0xbf,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x9a,0xc4,0xff,0xff,0x0f,0x2e,0xfd,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xf0,0xff,0xff,0xaf,0xa7,0xfe, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0xe4,0xff, + 0xff,0x0f,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xbf,0x54,0xf2,0xff,0xff,0x9f,0x4b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x9f,0x92,0xf8,0xff,0xff,0xc7,0xab,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x15,0xfe,0xff,0xff,0x97,0xd7, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0x94,0xfc, + 0xff,0xff,0xc7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x2f,0x05,0xfe,0xff,0xff,0xcf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0xff,0xff,0xff,0xd3,0xeb,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x05,0xff,0xff,0xff,0xe3, + 0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xc2, + 0xff,0xff,0xff,0xeb,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x95,0xc8,0xff,0xff,0xff,0xf3,0xfa,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xd2,0xff,0xff,0xff,0xff,0xf5,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0xe0,0xff,0xff,0xff, + 0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49, + 0xf8,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x9f,0x2a,0xf5,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x4a,0xf8,0xff,0xff,0xff,0xff,0xfc,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x14,0xfd,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97, + 0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xab,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x52,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x85,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x54,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x4a,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xe0,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xe4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x5f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xbf,0x12,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x54,0xfa,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x0a,0xfc, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x53,0x45,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x97,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x82, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x4a,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xe8,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24, + 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,0xf9,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xfe,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f, + 0x49,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x2f,0x95,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x01,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x57,0x81,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x97,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe0,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0xf4,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x57,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x2b,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xfc,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfc, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x49,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x89, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xe9,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff, + 0xff,0xff,0xff,0x9f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, + 0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff, + 0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, + 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f}; diff --git a/tests/auto/gui/image/qimagewriter/images/kollada.png b/tests/auto/gui/image/qimagewriter/images/kollada.png Binary files differnew file mode 100644 index 0000000000..2abd4bb763 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/kollada.png diff --git a/tests/auto/gui/image/qimagewriter/images/marble.xpm b/tests/auto/gui/image/qimagewriter/images/marble.xpm new file mode 100644 index 0000000000..e59830bbe9 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/marble.xpm @@ -0,0 +1,329 @@ +/* XPM */ +static char *dummy[]={ +"240 240 86 2", +"#t c #959595", +"#r c #9a9a9a", +"#l c #9b9b9b", +"#e c #9c9c9c", +"#f c #9d9d9d", +"#n c #9e9e9e", +"#q c #9f9f9f", +"#j c #a0a0a0", +"#k c #a1a1a1", +"## c #a2a2a2", +"#g c #a3a3a3", +"#s c #a4a4a4", +"#d c #a5a5a5", +"#b c #a6a6a6", +"#p c #a7a7a7", +".8 c #a8a8a8", +"#o c #aaaaaa", +".5 c #ababab", +"#a c #acacac", +".6 c #adadad", +".9 c #aeaeae", +".7 c #afafaf", +"#i c #b0b0b0", +"#. c #b1b1b1", +"#h c #b2b2b2", +".4 c #b3b3b3", +"#c c #b4b4b4", +".3 c #b5b5b5", +".U c #b6b6b6", +".O c #b7b7b7", +".1 c #b8b8b8", +".V c #b9b9b9", +".2 c #bababa", +".W c #bbbbbb", +".X c #bcbcbc", +".Z c #bdbdbd", +".L c #bebebe", +".Y c #bfbfbf", +".N c #c0c0c0", +".R c #c1c1c1", +".M c #c2c2c2", +".P c #c3c3c3", +".S c #c4c4c4", +".Q c #c5c5c5", +".T c #c6c6c6", +".H c #c7c7c7", +".E c #c8c8c8", +".K c #c9c9c9", +".F c #cacaca", +".I c #cbcbcb", +".J c #cccccc", +".B c #cdcdcd", +".G c #cecece", +".z c #cfcfcf", +".D c #d0d0d0", +".A c #d1d1d1", +".C c #d2d2d2", +".o c #d3d3d3", +".y c #d4d4d4", +".v c #d5d5d5", +".n c #d6d6d6", +".u c #d7d7d7", +".w c #d8d8d8", +".p c #d9d9d9", +".m c #dadada", +".h c #dbdbdb", +".s c #dcdcdc", +".g c #dddddd", +".x c #dedede", +".i c #dfdfdf", +".f c #e0e0e0", +".q c #e1e1e1", +"Qt c #e2e2e2", +".d c #e3e3e3", +".# c #e4e4e4", +".c c #e5e5e5", +".r c #e6e6e6", +".a c #e7e7e7", +".b c #e8e8e8", +".l c #e9e9e9", +".e c #eaeaea", +".t c #ebebeb", +".j c #ececec", +".k c #eeeeee", +".0 c #f0f0f0", +"#m c #f2f2f2", +"Qt.#.a.a.a.b.c.d.e.e.a.b.a.c.c.b.c.c.cQt.f.f.g.h.g.h.g.h.f.i.i.iQtQtQtQtQt.cQtQtQt.i.f.f.fQt.d.c.a.a.a.a.a.a.a.a.a.b.a.a.a.c.a.c.e.e.e.e.e.e.j.e.j.j.j.j.j.j.k.j.k.j.k.j.j.k.j.j.e.e.e.e.l.a.a.a.#.c.#.c.a.a.a.e.e.e.l.e.e.l.e.e.e.e.e.e.e.e.e.e.j.e.j.j.j.e.j.e.e.e.l.e.e.l.e.e.l.e.e.l.e.e.l.e.l.e.l.e.l.e.l.e.c.c.#.#QtQt.m.g.n.o.p.i.i.m.i.#.#.#.#.#QtQt.qQt.#.#.#.#.#.#.#.#.a.a.a.a.a.a.r.a.a.r.a.r.a.r.a.r.a.r.a.a.#.c.c.c.r.a.r.l.a.a.a.a.e.e.l.a.a.a.c.c.r.#.s.h.h.p.n.h.f.i.gQt.#.d.d.f", +".h.g.c.a.a.a.r.c.e.a.b.c.c.a.c.c.r.cQtQt.f.i.g.h.h.h.p.g.g.g.g.i.iQtQtQtQtQtQtQt.f.iQt.q.fQtQt.d.l.a.l.a.l.a.l.a.b.a.b.a.r.a.r.a.e.l.j.l.j.l.e.e.t.e.j.e.j.j.j.e.j.k.j.j.k.j.j.k.e.e.l.e.e.a.l.a.#.c.#.c.a.l.a.e.e.l.e.e.l.e.e.l.e.e.e.e.e.e.e.b.j.e.j.j.e.j.e.j.e.l.e.e.l.e.l.e.l.b.l.e.e.l.e.e.e.l.b.l.b.l.b.l.#.aQt.c.i.f.i.m.p.u.h.i.i.qQtQt.q.#.r.#Qt.#QtQtQt.#.#.#.c.c.#.c.r.l.r.l.a.r.a.l.#.a.r.a.r.a.r.a.r.a.r.c.r.c.a.c.r.a.r.a.c.a.c.a.l.e.e.a.b.cQt.c.qQt.i.m.p.v.p.m.f.sQtQt.q.cQt.q", +".v.h.i.f.a.r.a.b.a.b.a.c.a.r.c.c.c.cQtQt.f.f.g.h.u.u.u.p.u.h.g.hQtQtQtQtQtQtQtQt.i.fQt.fQt.d.c.c.a.a.a.a.a.a.a.a.a.r.a.c.a.c.a.c.e.e.e.e.e.e.j.e.j.l.j.j.j.j.k.j.k.e.j.j.j.j.j.e.e.e.e.e.l.a.a.r.cQt.c.c.a.a.b.a.l.e.l.e.e.l.e.l.e.b.e.e.b.e.e.e.e.j.j.j.e.j.e.t.e.l.e.l.e.b.l.e.b.a.e.b.l.e.b.l.b.a.e.a.e.a.e.a.a.a.#QtQtQt.i.g.p.p.pQtQt.#Qt.q.#.a.r.#.#Qt.#Qt.a.r.c.r.a.r.a.r.a.a.a.r.a.a.r.a.#.r.a.r.a.r.a.r.a.r.a.a.c.c.#.a.a.a.a.a.r.a.a.a.e.e.l.a.a.c.c.c.a.i.i.p.p.u.h.m.i.f.i.c.c.c.d.f", +".h.h.m.f.cQt.b.b.a.c.a.c.c.c.d.d.fQtQtQt.f.i.g.g.v.u.p.v.p.u.h.h.i.g.i.m.gQtQtQt.s.qQtQtQt.c.#.c.a.a.e.a.l.b.l.a.b.a.b.a.r.a.r.a.e.e.t.e.t.e.l.e.l.j.e.e.j.e.j.j.j.j.k.j.k.j.j.k.e.e.e.e.l.a.l.a.d.#.#.c.a.a.l.a.e.l.e.e.l.e.l.e.e.e.e.e.e.e.b.e.e.j.e.e.j.b.j.e.b.e.l.b.e.l.e.e.l.e.l.l.b.l.l.e.l.b.e.l.b.l.b.e.b.a.#.c.qQt.q.f.u.g.i.i.qQt.#.s.a.r.a.c.c.#.c.c.#.c.#.c.#.a.c.a.a.r.l.a.l.r.a.r.r.a.r.a.r.a.r.a.r.a.r.c.r.a.c.a.a.l.r.l.a.l.b.a.e.l.e.b.aQt.cQtQtQt.s.g.v.u.w.f.gQt.#.cQt.c.f.q", +".h.v.h.g.d.d.a.a.r.a.c.r.c.c.cQt.d.f.f.f.f.i.m.g.g.h.u.p.p.u.u.h.i.i.s.i.i.i.i.i.fQt.iQt.#.c.a.c.a.a.a.a.a.a.a.a.a.r.a.c.aQt.a.c.e.l.e.e.e.e.j.j.j.l.j.e.j.k.j.j.k.e.k.e.j.j.j.e.e.e.e.l.e.a.a.r.#.c.#.c.a.a.b.a.e.b.l.e.b.l.e.b.l.l.b.l.l.b.l.l.e.e.t.j.e.l.e.j.l.e.l.e.l.e.l.e.#.e.#.e.a.e.e.l.a.l.a.b.a.e.a.l.b.l.a.c.#.gQt.i.g.g.s.iQt.#.#Qt.r.a.r.a.c.c.c.c.l.a.l.a.l.r.a.r.a.l.a.r.a.a.a.a.r.a.r.a.r.r.a.r.a.r.a.a.c.c.#.a.a.a.a.a.a.b.a.b.l.e.b.a.a.c.cQtQt.i.i.m.p.w.i.f.d.#Qt.c.c.c.d.d", +".x.h.v.w.hQt.c.bQt.c.a.c.c.dQt.d.f.g.f.i.fQt.f.s.f.g.g.g.u.h.p.h.u.g.h.g.h.f.g.g.qQtQt.c.#.c.#.c.a.a.a.a.l.a.l.a.b.a.c.b.c.r.a.b.l.e.j.e.j.l.e.e.j.j.j.j.j.e.k.e.k.j.j.k.j.k.j.k.e.e.e.e.l.a.a.a.c.i.#.c.a.a.a.b.l.e.l.e.l.e.e.l.e.e.l.e.e.l.e.e.l.e.e.e.j.l.b.l.e.l.b.l.r.l.b.e.l.e.l.e.l.b.a.b.e.b.l.e.l.e.l.b.l.b.l.#.c.#QtQt.m.i.f.iQtQtQt.q.#.a.r.c.a.a.b.e.a.a.a.a.a.l.a.l.a.a.l.a.l.a.l.a.r.r.a.r.a.a.r.a.r.a.r.c.r.a.c.a.l.l.l.l.b.a.a.b.e.e.l.a.#.cQt.c.c.f.s.g.m.m.f.fQt.f.c.b.a.r.r.d", +".f.g.n.v.n.x.q.d.c.c.d.dQt.d.fQt.f.fQt.gQtQtQtQtQtQt.f.f.f.g.m.h.h.p.u.v.p.h.g.iQtQt.#Qt.c.a.c.c.a.l.a.l.b.a.a.a.b.a.r.aQt.c.a.b.b.l.e.l.e.e.j.e.t.e.j.e.j.j.k.j.j.j.j.e.k.e.j.j.e.e.e.l.e.a.l.rQt.#.c.c.a.a.a.a.e.e.e.l.e.l.e.e.l.l.l.l.l.e.l.l.e.j.e.j.l.b.l.e.b.l.b.l.e.l.a.b.a.b.a.e.#.e.l.l.a.e.#.e.#.e.a.e.l.e.a.a.q.#.fQt.f.gQt.iQtQtQtQt.#.#.r.a.a.b.e.b.l.l.e.l.e.l.a.l.a.a.a.a.a.a.a.a.a.r.a.r.a.r.a.r.a.r.a.a.c.c.c.a.l.e.l.a.a.a.b.l.e.b.a.a.c.c.c.q.d.g.f.m.g.sQt.c.dQt.c.#.b.r.c.r", +".f.f.g.o.y.s.f.q.c.c.d.#.f.dQt.q.f.f.fQtQtQtQtQtQt.q.dQt.f.f.x.g.p.u.p.u.u.h.p.h.iQt.#.#.c.#.c.l.a.a.a.a.l.a.l.a.b.a.c.a.cQt.c.a.l.e.j.e.j.e.l.e.j.e.j.e.j.j.j.j.j.k.j.k.j.k.j.j.e.e.e.e.l.a.a.aQtQt.#.c.a.l.a.a.b.l.e.b.l.e.b.l.l.b.e.l.b.l.l.b.l.j.e.j.e.l.e.l.a.e.l.b.a.b.e.l.e.l.b.l.e.l.b.l.b.e.l.e.l.b.l.r.l.b.l.#.c.#.qQt.gQt.fQt.qQt.qQt.dQt.a.a.a.e.e.e.l.a.l.l.a.e.l.e.e.a.l.a.l.a.l.a.r.a.r.a.r.a.r.a.r.a.r.c.r.c.a.a.l.a.a.b.a.e.b.b.#.l.e.a.#.cQt.d.d.f.s.m.iQtQt.cQtQt.a.b.#.b.c.#", +".b.i.f.x.w.z.A.pQt.d.g.x.g.g.h.g.f.d.dQt.dQt.c.c.#.c.#Qt.iQt.s.x.u.y.z.B.C.y.g.g.#QtQt.c.#.a.a.c.a.l.b.l.a.a.a.a.#.c.c.c.c.d.c.c.b.a.a.a.a.a.e.a.l.l.l.l.l.l.e.l.j.e.j.e.e.e.e.j.j.j.l.e.a.a.c.c.iQtQt.#.a.#.b.e.a.a.a.a.b.a.a.a.l.a.l.#.l.l.l.l.l.b.l.b.l.b.l.b.l.b.a.a.#.qQtQt.c.a.c.aQt.a.#.a.b.l.r.l.b.l.e.l.l.a.a.#.q.dQt.g.i.sQtQt.i.c.a.a.#.r.r.a.a.b.b.b.b.a.b.a.b.a.a.e.l.l.l.e.l.a.a.a.r.a.a.r.a.r.a.a.a.a.l.a.b.l.b.b.b.l.a.a.a.a.a.a.e.#.a.#.a.#.a.#.q.i.d.i.i.d.c.c.r.b.r.b.c.r.#.c", +".b.c.f.f.p.A.o.v.dQt.q.x.g.w.f.i.f.d.d.c.c.c.a.c.#.c.#.cQtQtQt.i.p.n.z.D.B.C.o.u.i.iQt.i.#.c.c.c.c.c.#.c.c.c.c.c.c.#.#.i.#.d.c.c.a.a.a.b.l.b.a.a.l.l.l.b.l.l.e.e.e.j.j.j.j.j.e.j.e.j.l.e.a.c.c.cQtQt.c.c.c.a.a.b.a.a.b.a.a.a.b.a.e.l.l.l.l.e.l.l.b.a.l.r.l.a.l.r.b.l.#.aQt.c.#Qt.a.a.#.a.a.a.c.a.b.e.l.b.e.a.b.a.b.l.#.#.cQt.i.f.g.f.x.fQt.c.c.r.r.r.#.a.a.a.e.b.a.a.a.a.a.b.a.e.l.l.l.l.l.l.a.l.r.#.a.r.a.a.a.l.a.l.b.a.e.b.e.e.a.a.b.a.a.b.#.a.a.a.#.a.#.a.#.a.c.qQt.i.dQt.c.#.b.b.#.b.r.c.c.b", +".b.aQt.f.m.h.o.o.m.s.g.s.h.g.sQt.dQt.c.c.c.c.c.c.a.c.c.c.#.dQt.g.i.h.y.A.C.v.v.p.m.g.g.f.f.fQt.#.c.c.a.c.#.c.#.c.#QtQtQtQt.#.c.c.a.a.a.l.a.l.l.l.l.l.l.l.l.l.e.l.e.e.e.l.e.l.e.l.e.e.e.#.b.aQt.c.i.f.q.c.a.c.b.b.a.#.a.b.#.a.a.#.l.e.l.b.l.l.b.l.l.l.b.l.b.l.l.l.r.a.#.q.#.c.i.c.#.c.a.c.#.a.#.a.a.l.b.l.l.b.l.e.l.a.aQt.#Qt.f.g.i.iQtQt.i.#.a.a.r.r.#.r.a.c.b.b.a.b.a.b.a.a.e.e.l.l.e.l.l.a.a.a.a.r.a.#.r.a.a.a.l.a.a.e.e.l.b.l.a.a.a.a.b.a.a.a.#.l.#.a.#.a.#.a.q.d.i.i.cQt.c.c.b.b.b.b.c.b.#.a", +".aQtQt.f.x.g.u.o.o.p.o.u.n.g.f.c.c.d.c.c.a.r.a.b.a.a.#.c.cQtQt.d.q.s.h.v.u.v.u.u.p.p.p.g.m.g.g.fQt.#Qt.#.#.c.#Qt.i.q.gQt.iQt.c.c.a.a.a.a.a.a.a.a.a.r.#.a.l.e.a.b.l.e.l.e.l.b.l.e.e.t.e.a.c.c.dQtQtQt.#.c.c.b.a.b.a.b.a.a.a.b.a.b.a.a.a.a.#.a.r.a.#.r.a.r.a.r.#.aQt.#Qt.c.#.c.#Qt.a.a.a.r.a.a.r.a.a.#.aQt.a.c.a.c.a.#.#.#.c.q.f.f.s.f.sQtQt.c.aQt.a.r.#.a.a.b.a.a.e.a.a.e.a.e.e.e.e.l.l.a.e.a.l.a.r.a.r.a.a.a.a.b.e.l.e.e.e.b.e.b.b.a.b.#.a.a.#.a.b.#.c.cQt.c.q.c.q.#.f.c.f.c.a.c.b.#.a.a.#.b.c.b", +".d.d.dQt.s.s.h.w.v.z.o.v.h.i.f.#.c.c.c.c.c.a.b.a.a.b.a.c.c.f.dQtQt.q.m.h.h.u.p.p.h.w.p.h.h.g.g.g.gQt.iQtQtQtQtQt.i.i.iQtQtQt.#.c.#.a.a.b.l.a.a.a.a.l.r.l.#.a.l.a.#.b.e.a.b.a.e.e.l.e.a.a.c.c.d.dQtQt.c.#.#.c.b.l.b.a.#.a.#.a.a.#.a.#.a.a.r.a.#.a.a.a.#.a.#.a.a.aQt.qQt.#Qt.#Qt.c.#.c.a.c.aQt.a.#.c.a.a.b.a.#.a.#.a.a.c.iQt.f.f.f.i.iQt.iQt.#.a.a.a.a.r.a.c.a.a.b.a.b.l.e.e.e.a.e.l.e.b.a.b.a.b.a.a.#.r.a.a.b.c.a.a.e.e.a.e.l.b.l.a.a.a.b.a.a.r.aQt.a.c.q.c.q.cQt.#QtQtQtQtQt.cQt.b.a.r.b.c.c.c.c", +".g.d.g.f.h.m.h.u.z.E.F.B.n.h.fQt.c.c.c.b.a.r.a.b.b.a.b.a.c.c.c.d.s.i.g.m.h.g.h.w.h.g.h.m.h.g.m.x.i.i.i.i.f.s.i.s.h.s.g.iQtQt.i.c.r.a.a.r.a.a.a.r.#.a.a.a.a.a.b.a.b.a.l.b.l.a.a.a.b.e.a.r.c.cQtQtQt.q.#.c.r.a.b.b.a.a.a.b.aQt.a.c.r.c.r.#Qt.#.a.cQt.#.#.c.#.#Qt.#.iQt.d.qQt.#.c.#.a.r.a.#.a.b.a.a.cQt.cQt.c.c.c.c.c.qQt.#.d.i.f.g.i.g.q.fQt.c.a.c.a.a.a.a.#.a.a.a.b.a.a.e.a.e.a.a.e.e.l.e.a.a.c.r.r.a.a.a.c.a.b.b.l.l.a.b.a.b.e.b.a.b.a.aQt.a.#.a.c.c.cQt.c.f.#.c.i.#QtQtQt.r.c.aQt.c.d.#.fQt.f.d", +".x.q.x.x.h.p.w.v.G.H.E.I.C.o.g.x.c.c.c.b.a.a.e.e.a.e.b.b.b.c.c.c.f.f.f.f.f.f.g.i.h.h.g.h.g.g.f.iQt.f.g.g.g.m.g.m.g.h.i.iQt.i.#.#.c.#.q.c.#.#.c.q.#.r.a.a.c.a.a.b.a.b.a.b.a.b.a.a.e.a.#.c.c.dQt.dQtQt.c.c.a.c.b.a.b.a.a.a.a.b.a.#.c.q.cQt.#Qt.#.#.c.q.c.q.c.q.c.q.f.f.iQt.c.i.a.q.a.c.a.c.aQt.aQt.c.c.c.c.cQt.cQt.#.a.#.i.f.f.f.g.s.iQt.iQt.#.c.#.a.a.a.a.a.c.a.r.a.e.a.e.e.a.b.l.e.e.e.b.e.b.b.#.a.a.cQt.b.c.b.b.l.a.e.a.l.b.a.b.#.a.#.a.a.a.c.aQt.c.i.#.i.c.f.#Qt.#.f.c.cQt.cQtQt.d.i.fQt.q.f.f", +".s.w.h.p.h.n.v.o.p.A.F.J.I.B.o.h.c.a.c.b.a.b.a.a.b.e.b.e.a.r.c.c.x.i.f.iQtQt.f.f.p.p.h.h.w.i.i.f.i.i.f.i.f.i.f.g.g.p.m.g.i.q.d.#.i.c.#.c.#.c.#.#.r.a.q.a.a.#.r.a.a.a.e.a.a.a.b.a.#.a.c.c.cQt.d.dQtQt.#.cQt.a.a.e.a.r.a.b.a.a.c.a.q.c.#.q.#Qt.#Qt.q.#Qt.#.c.qQtQt.g.g.dQtQt.#.#.c.a.a.#.a.r.a.a.a.c.cQt.cQt.c.c.c.c.#QtQt.f.f.m.x.g.f.q.fQt.c.c.a.a.a.a.a.a.r.#.a.a.a.a.e.a.e.a.a.e.e.e.b.e.a.b.b.a.a.a.c.a.b.l.b.a.l.a.b.a.b.e.b.a.a.r.aQt.b.#.aQt.#.f.fQt.iQtQtQtQtQtQtQt.cQt.c.fQt.f.h.x.x.h.s", +".h.u.v.u.v.u.h.gQt.f.n.o.B.B.D.B.h.fQt.c.a.a.b.a.e.l.e.e.a.c.c.f.#.cQt.#.fQt.i.f.q.i.s.p.h.g.p.p.s.i.i.i.i.g.f.i.iQtQtQt.i.i.s.iQtQt.#Qt.#.i.#.i.a.#.r.r.a.r.l.l.a.a.a.#.a.a.a.a.#.c.#.c.#Qt.#.#.iQt.c.c.a.b.b.e.l.e.l.#.b.c.b.c.dQt.iQt.f.i.s.g.s.s.i.s.i.m.sQt.f.iQt.q.c.#.a.bQt.d.c.#.a.a.#.a.#.#.c.#QtQt.i.f.q.#Qt.i.i.g.i.g.x.s.q.iQt.q.#.#.#.a.a.a.a.a.l.a.c.r.c.c.c.c.c.b.e.l.a.l.a.b.c.aQt.a.a.a.c.a.b.b.l.a.a.a.a.cQt.c.c.c.i.d.dQt.dQt.cQt.#QtQtQtQt.d.#.a.cQt.cQt.d.d.g.f.x.h.w.u.u.v", +".u.p.h.h.p.m.g.x.q.f.g.u.C.B.z.o.v.fQt.c.l.a.a.a.e.e.b.l.b.c.c.c.c.cQt.c.d.d.fQt.x.i.g.g.p.u.p.u.h.i.i.g.s.i.i.f.s.f.q.f.iQt.i.f.q.g.q.i.qQt.f.q.r.r.r.#.#.a.a.a.a.a.a.c.aQt.c.q.c.#.#Qt.#.#.c.#Qt.c.#.a.c.a.l.b.b.l.e.b.a.#.c.a.q.cQtQtQtQt.i.m.i.p.m.g.u.w.m.s.m.g.fQt.qQt.#.#.q.#.q.c.#.a.a.#.c.q.c.q.cQt.cQt.q.r.iQt.g.i.x.gQt.iQt.qQt.#.#.c.a.a.#.a.l.a.a.l.c.c.c.c.c.c.a.c.l.e.b.a.b.c.a.c.r.a.#.a.a.#.a.b.b.a.b.a.r.a.c.c.c.c.cQt.c.i.c.i.c.c.q.dQtQt.fQtQt.#Qt.#.d.i.d.i.i.g.m.g.n.v.u.p", +".h.h.m.g.g.f.fQt.#Qt.g.g.y.B.B.v.h.h.f.c.c.a.b.a.e.l.e.a.a.b.c.c.#.c.c.qQtQt.xQt.i.g.g.w.h.p.v.p.p.h.h.g.i.i.s.i.i.fQtQt.q.f.iQt.i.s.i.m.i.s.i.s.q.iQt.#Qt.#.i.#.c.c.c.c.#.c.#.c.#.c.#.#.c.#.#.cQt.i.c.c.a.r.b.e.a.e.l.a.a.r.a.r.c.q.#.iQt.i.q.s.i.h.n.o.z.A.z.v.w.g.m.f.f.d.g.dQt.dQt.c.c.c.#.c.#Qt.#.c.#QtQtQt.#.iQtQt.i.i.m.i.s.xQt.iQt.q.c.#.a.#.a.a.#.a.#.aQt.cQt.cQt.c.c.c.#.a.a.a.a.c.c.c.r.a.a.c.a.c.e.b.a.#.a.c.#.c.c.c.fQt.fQt.dQt.fQtQt.#Qt.c.i.cQt.dQt.dQt.fQt.dQt.f.h.g.g.g.v.h.n.v", +".f.f.f.fQtQt.d.d.b.c.f.f.p.C.A.v.h.v.i.c.a.c.a.r.e.e.c.b.c.a.b.a.a.#.#.c.cQtQt.d.m.f.g.h.h.p.u.u.o.u.u.g.g.i.fQt.s.i.s.fQtQtQtQt.i.f.g.g.g.g.m.g.i.s.i.xQtQtQtQt.#.c.q.c.#.c.c.#.c.#Qt.c.c.c.c.qQt.c.#.c.c.a.b.a.b.l.b.b.a.aQt.a.a.q.cQtQtQt.x.f.u.p.o.z.J.K.B.A.p.v.n.w.w.x.g.h.f.g.d.i.d.iQt.c.iQt.#.iQtQt.iQt.iQtQt.s.x.s.x.gQt.f.qQt.f.#.#.c.c.#.a.a.a.a.a.a.c.c.c.dQt.dQt.c.a.aQt.a.a.q.c.#.#.a.a.a.a.r.a.b.a.a.a.b.c.c.cQtQt.cQt.c.i.cQt.d.q.cQt.c.#.f.d.q.d.i.d.fQt.f.g.f.s.g.g.m.h.h.g.h", +"QtQt.#.f.c.c.c.c.a.cQt.d.x.v.v.u.p.w.f.c.#.c.a.c.a.a.b.a.b.a.a.b.a.a.a.c.#.d.#Qt.f.f.i.g.g.h.u.u.y.u.u.h.m.i.s.f.i.i.iQt.x.f.q.fQt.i.f.i.m.g.i.g.s.i.s.i.i.g.fQt.d.#QtQt.iQt.i.c.#.c.#.c.q.c.#.cQtQt.c.#.#.a.b.a.e.a.e.a.a.r.a.c.qQt.#.iQt.q.f.s.A.A.z.B.F.B.o.v.n.v.v.v.v.v.v.v.x.w.g.h.x.g.f.g.f.g.f.f.g.f.dQt.f.s.i.s.i.m.i.m.g.q.gQt.i.#.f.#.q.c.q.a.c.#.c.#.c.cQt.c.c.c.c.c.q.a.#.c.c.c.#Qt.a.rQt.a.c.#.b.b.#.aQt.cQt.c.dQt.fQt.fQt.dQt.fQtQt.c.r.fQtQtQt.d.gQtQt.i.f.gQt.g.f.f.g.f.f.f.f.f", +".c.c.c.b.b.b.b.b.b.a.a.cQt.x.v.A.p.p.iQt.c.c.c.c.c.c.a.r.a.a.b.a.a.a.c.aQt.#.d.qQtQt.f.i.i.g.m.p.v.u.u.p.p.g.g.i.g.i.i.fQtQtQtQt.s.i.gQtQtQtQt.i.i.q.f.i.f.q.g.i.i.gQt.f.#.d.#.d.c.q.c.#.c.q.c.#.iQt.q.c.cQt.b.a.b.e.#.a.#.cQt.c.cQt.g.iQt.s.i.m.z.A.z.B.B.z.v.p.h.w.h.n.p.v.A.I.I.B.A.v.h.h.w.h.h.h.m.x.x.f.i.f.s.g.m.x.m.g.g.g.q.f.sQtQt.#Qt.d.c.r.cQt.#.c.#.cQt.c.c.c.cQt.c.c.a.r.q.#.#.iQtQt.q.a.#Qt.a.r.a.b.c.a.a.b.a.c.i.cQt.fQt.c.i.cQt.c.q.cQt.#.dQtQt.fQt.f.x.d.d.f.d.d.i.d.c.c.c.c.a.c", +".a.b.b.l.e.b.j.e.b.e.e.a.cQt.g.o.v.g.g.x.#.c.c.c.r.c.c.a.b.a.e.e.#.a.a.a.a.c.c.c.#.cQtQt.fQt.i.g.p.u.p.p.w.p.w.h.i.i.i.i.s.f.q.fQt.qQt.q.gQtQt.i.#.#Qt.#QtQtQt.i.i.g.f.sQt.i.#.c.i.d.c.c.dQt.d.iQt.f.#.c.c.c.a.r.l.l.e.a.c.c.c.c.g.f.f.m.g.m.w.v.o.v.o.B.B.B.u.u.m.x.w.g.w.p.z.B.L.M.F.A.A.o.y.A.o.o.p.h.w.h.w.n.h.w.g.w.g.s.g.f.s.f.i.i.d.fQtQt.#.c.#.c.#.c.q.c.c.c.c.c.c.c.c.c.#.#.c.#.fQtQtQt.r.#.a.#.cQt.b.b.#.a.c.aQt.c.dQt.dQt.d.i.d.i.d.i.c.q.c.c.q.i.d.i.f.gQtQtQt.c.a.#.r.b.b.#.b.b.j.e", +".e.b.e.e.j.j.e.j.b.e.e.#.c.d.x.p.v.h.m.wQt.c.c.d.c.a.c.a.e.a.e.l.l.a.a.c.a.#.c.#.#.c.#.#.iQt.f.q.g.h.u.h.p.h.u.u.s.i.s.f.i.iQtQt.iQt.iQtQt.#QtQt.x.#Qt.#.#.#QtQtQtQtQt.g.f.g.f.g.dQtQt.f.#.f.#.dQt.i.d.q.cQt.a.b.a.a.#.a.#.cQt.c.f.m.g.w.w.p.A.z.v.u.A.B.z.o.p.w.g.m.h.w.w.n.o.o.N.H.I.D.F.F.N.O.N.P.I.A.v.h.n.h.m.h.u.g.w.g.m.i.s.f.gQt.i.dQt.dQtQtQt.#Qt.#.c.q.c.c.c.cQt.c.c.c.#.#Qt.qQt.gQt.i.#.#.#.#.c.c.a.c.c.a.r.a.c.c.c.i.cQtQt.d.i.dQt.d.q.cQt.c.fQt.iQt.g.d.dQt.a.a.b.l.e.r.e.e.b.e.e.k", +".e.e.e.e.e.j.j.j.e.e.b.b.c.d.q.g.u.z.J.D.p.g.c.l.c.b.c.b.a.a.e.e.c.c.a.c.q.c.c.#.c.#.c.#.c.#Qt.#.i.q.i.m.p.v.u.v.u.h.h.i.m.i.i.f.qQtQtQt.xQt.i.#.r.#.#.c.a.a.c.bQt.c.c.c.c.c.qQt.i.g.iQt.f.d.g.f.gQtQt.c.c.a.#.a.b.a.#.c.d.d.f.x.m.p.o.z.B.z.z.o.A.v.v.v.v.u.n.h.h.h.m.m.h.v.z.B.Q.R.F.A.v.z.z.F.B.B.B.F.I.I.J.B.B.z.A.w.p.m.x.g.g.p.g.m.i.iQt.f.#QtQtQtQt.cQtQt.cQt.c.c.c.c.c.cQt.cQt.#Qt.f.g.f.c.c.c.c.a.#.cQt.a.c.c.cQt.c.c.cQt.#Qt.cQtQt.fQt.q.#Qt.x.h.g.dQt.c.aQt.a.b.#.a.b.e.e.e.e.e.e.e.e", +".j.b.e.j.e.j.e.j.j.e.e.b.c.d.q.q.h.v.D.B.z.n.i.c.c.a.c.a.b.a.b.l.a.#.c.#.c.c.q.c.c.c.#.c.c.#.d.#Qt.i.i.h.p.u.y.A.p.h.w.i.f.iQtQt.xQt.qQt.#Qt.#Qt.r.#.r.#.c.a.#.c.c.cQt.cQt.c.cQtQt.f.f.f.g.f.g.i.h.g.f.i.dQt.c.c.c.c.dQt.g.f.h.m.m.m.u.A.z.o.A.v.v.v.p.v.p.u.h.w.f.g.x.m.w.n.B.I.M.S.E.A.z.z.y.z.o.o.o.v.z.B.E.E.P.Q.T.F.I.o.o.p.u.p.u.g.w.x.gQtQt.c.#.c.iQt.c.q.dQt.cQt.c.cQt.c.c.qQt.#Qt.g.f.f.qQt.cQt.c.c.c.c.c.rQt.c.c.cQt.c.cQt.c.c.i.c.i.d.qQt.f.g.x.q.f.c.c.#.b.a.b.a.b.r.b.e.b.e.b.e.e.e", +".e.j.e.k.e.j.j.j.j.k.e.a.r.c.d.q.q.m.v.C.A.u.gQt.c.cQt.c.a.a.a.a.c.c.a.c.#.c.c.#.c.q.c.c.q.c.#QtQt.f.i.m.g.v.u.A.p.u.h.i.m.iQt.fQtQtQt.xQt.#Qt.#.q.a.r.c.a.a.c.b.cQt.#.c.a.c.a.c.c.cQtQt.d.g.g.g.w.w.h.fQt.d.i.d.g.g.s.h.m.w.h.w.i.m.v.o.u.o.v.u.u.h.u.h.u.p.n.h.p.h.m.x.w.u.B.F.M.M.F.C.z.o.u.o.u.u.h.p.u.o.A.z.E.M.N.R.E.E.K.K.I.B.o.u.h.g.x.x.g.iQt.iQt.dQtQtQt.qQtQtQt.#Qt.i.#Qt.i.dQt.g.f.g.c.d.q.c.cQt.cQt.cQt.c.cQt.c.c.#Qt.rQtQtQt.d.i.d.#.i.g.fQt.d.dQt.a.b.a.r.a.r.a.e.e.e.e.e.e.e.e.e", +".e.j.j.e.e.j.e.j.e.e.e.b.c.r.c.dQt.i.g.w.v.o.h.x.c.c.c.c.b.c.b.a.a.c.c.#.c.c.#.c.#.c.#.c.#.c.cQtQtQt.i.i.g.p.v.o.u.p.h.g.i.i.gQt.x.#.i.#QtQt.qQt.a.rQt.a.a.c.a.c.a.a.a.a.a.#.a.aQt.c.c.fQt.dQt.f.x.x.x.h.g.f.g.h.u.n.g.g.g.g.m.g.m.m.p.o.u.v.o.u.w.p.w.w.h.w.m.h.h.x.w.g.n.o.B.Q.U.Q.D.o.C.o.u.v.w.w.u.g.w.h.h.v.v.z.C.B.I.I.E.N.N.Q.I.A.A.v.p.m.i.i.g.f.i.sQt.i.qQt.q.i.f.f.fQt.d.iQt.#.f.g.i.g.c.i.c.f.cQt.c.c.c.c.c.c.c.cQt.c.c.c.#QtQtQtQt.fQt.i.f.i.dQt.c.c.b.#.b.a.b.a.b.e.a.b.b.e.r.e.b.e", +".j.e.e.k.e.k.e.j.k.e.e.e.b.c.c.r.iQt.m.h.w.v.n.u.d.f.c.c.c.#.c.aQt.#.c.c.q.c.c.q.c.q.c.c.#Qt.#QtQtQt.f.s.i.m.p.p.u.p.u.g.m.i.f.qQtQtQtQt.i.#Qt.#.r.#.r.a.a.#.r.a.b.a.bQt.a.c.b.#.a.a.c.c.cQtQt.f.f.g.g.f.x.h.g.w.w.h.g.h.x.h.g.g.i.p.v.A.o.o.A.A.u.w.w.g.w.g.p.m.s.w.p.w.n.o.I.T.V.N.D.o.v.v.h.v.g.i.w.h.u.h.w.h.p.g.u.p.w.u.v.A.Q.T.E.P.F.I.z.u.m.g.g.i.m.g.g.i.g.f.f.f.f.f.f.m.f.g.f.g.f.g.x.gQtQtQtQtQt.c.q.cQt.c.q.c.q.c.c.c.#.q.c.f.c.iQt.i.f.gQt.iQt.a.b.#.b.e.b.b.b.e.e.e.e.e.e.e.e.e.e.e", +".e.k.e.k.k.k.j.e.e.e.e.b.l.b.b.b.c.d.f.w.p.n.v.v.cQt.c.c.c.c.a.r.#.c.c.#.c.#.c.cQt.cQt.c.q.cQtQtQt.iQt.f.g.i.g.m.u.p.u.h.m.i.s.f.i.q.i.dQt.#Qt.#.c.r.c.a.c.a.a.c.l.b.e.l.e.b.l.b.a.c.aQt.a.c.d.#.dQt.dQtQt.g.x.h.h.w.w.w.u.g.w.g.m.h.o.z.v.A.z.z.w.u.w.w.m.h.s.w.p.n.w.p.v.z.F.P.W.P.F.v.o.v.h.p.m.h.g.h.g.w.p.n.i.m.m.m.m.h.h.m.A.A.z.B.Q.Q.P.M.F.K.o.v.p.w.p.u.g.g.g.s.g.m.g.w.x.m.m.g.g.m.g.gQt.i.c.f.#Qt.dQt.c.#.cQt.c.cQt.#.c.cQtQt.i.f.i.d.m.f.i.cQt.a.#.b.a.b.a.e.a.b.a.e.e.e.e.e.e.e.e.e", +".e.j.k.j.j.j.e.k.e.e.e.e.e.e.e.l.rQtQt.f.h.g.p.v.d.dQt.f.c.c.c.a.c.#Qt.c.#.c.#.c.q.c.q.cQt.#.i.c.qQt.g.q.s.f.s.s.p.p.u.g.m.g.f.q.q.i.qQt.iQt.#.i.r.#.r.a.#.a.c.a.b.a.l.r.l.e.l.b.l.b.a.c.aQt.c.i.cQt.cQt.dQt.dQt.s.s.g.p.w.u.p.u.v.o.z.B.B.A.B.H.v.u.w.h.w.h.w.p.h.n.n.o.o.B.I.E.L.X.E.o.o.u.w.h.w.g.w.h.g.s.h.w.h.m.s.m.h.h.g.g.o.u.w.u.o.J.M.Y.L.N.N.H.B.z.o.u.w.w.g.h.m.h.w.p.w.h.w.w.g.m.g.i.f.iQt.f.#QtQtQt.cQt.cQtQtQt.c.cQt.rQt.c.iQt.g.i.x.g.d.#.l.r.a.b.b.e.e.b.e.e.e.b.e.e.e.e.e.e.e.e", +".j.e.k.k.k.k.j.e.e.e.e.e.b.e.b.e.d.d.f.f.f.w.p.p.dQt.d.c.c.c.c.c.q.c.c.#.c.cQt.#.c.c.#.c.#.f.#Qt.dQt.f.g.f.s.s.m.h.u.p.u.m.m.s.g.q.f.xQt.qQt.#Qt.a.r.a.c.a.c.a.r.l.e.l.e.l.e.e.a.e.a.a.a.b.c.a.cQt.a.a.a.c.dQt.d.a.rQt.s.g.w.v.A.z.z.F.F.D.B.E.Q.C.v.v.n.w.p.w.n.n.n.D.A.G.B.F.P.Y.W.T.C.v.v.p.w.g.x.h.w.h.w.h.h.y.u.n.x.x.h.h.h.s.w.u.v.A.A.z.B.K.N.L.N.H.Q.B.o.u.u.u.w.p.w.p.u.h.v.w.w.w.m.s.g.iQt.f.#.f.c.c.i.cQtQt.d.q.cQt.cQt.c.q.d.iQt.f.f.m.x.q.a.b.e.b.#.l.e.l.e.l.b.e.l.e.e.e.e.e.e.e.e", +".k.k.e.j.e.j.e.j.j.j.e.e.e.e.b.e.c.d.dQt.x.x.x.h.h.i.d.c.r.r.r.b.c.c.c.cQt.c.c.c.cQt.cQt.c.c.cQt.i.iQt.i.f.s.f.m.g.m.g.m.h.h.p.gQt.i.qQt.q.r.q.r.b.l.b.r.a.a.q.#.#.a.a.a.a.a.a.l.b.l.b.a.cQt.c.c.#.cQt.cQt.c.#.c.#QtQtQt.i.f.g.m.v.z.I.H.I.I.Q.U.K.J.A.y.y.n.y.y.z.z.B.B.F.I.K.T.M.Z.X.G.u.o.v.u.h.u.g.h.h.v.w.v.w.m.g.h.m.h.x.g.h.m.w.v.w.v.w.u.o.o.A.I.K.N.Z.U.I.z.n.v.h.w.m.u.o.n.w.g.m.f.s.g.i.i.c.f.cQt.cQt.dQtQtQt.c.i.c.q.#QtQt.i.f.g.f.m.cQt.r.c.c.bQt.b.b.r.e.b.e.l.e.e.j.j.j.k.j.k.k.k", +".k.0.j.k.e.j.e.j.e.k.e.e.e.b.l.b.c.dQt.q.f.f.f.f.m.i.g.d.c.r.a.b.c.c.c.c.c.c.c.c.c.c.c.c.cQt.c.c.#.iQt.i.i.g.h.i.m.g.p.g.w.g.w.h.s.iQtQtQt.#.#.#.r.l.r.#.r.a.#.c.a.a.a.b.a.l.#.a.b.l.b.a.a.a.cQt.a.q.c.c.c.c.c.c.c.c.q.dQt.f.f.f.g.h.o.z.B.B.S.1.O.Y.P.K.A.A.K.P.Q.H.B.B.I.I.Q.K.M.W.W.I.v.o.p.v.w.h.h.u.p.v.p.v.w.h.m.h.m.h.h.g.m.m.h.m.w.w.w.w.n.u.n.o.o.B.B.K.Z.Z.P.Q.H.z.z.z.A.B.A.n.u.w.h.m.f.gQt.i.cQt.r.c.f.#.f.#.dQtQt.f.c.qQt.iQt.s.f.g.rQt.c.#.c.#.c.r.#.a.e.a.b.b.e.e.j.k.j.j.k.k.0.k", +".k.j.k.j.k.k.b.j.j.j.e.e.e.e.b.e.c.c.d.q.d.g.f.f.g.g.f.f.d.d.c.c.cQt.c.c.c.c.cQt.cQt.c.cQt.c.c.q.c.q.#.iQt.i.f.g.s.i.s.g.p.g.p.g.m.i.s.i.i.q.i.#.#.r.r.r.a.a.#.c.l.a.a.r.a.a.a.l.b.l.b.a.b.c.#.c.c.#.cQt.c.#.cQt.c.c.cQtQtQt.i.d.s.i.m.v.v.o.z.Q.2.3.2.Z.N.L.Z.U.Y.T.F.F.Q.Q.R.N.S.Y.U.R.B.v.u.o.u.v.v.u.v.u.v.n.m.m.m.x.h.h.g.h.h.m.m.h.m.h.m.m.m.m.w.w.n.n.o.o.z.z.H.N.L.L.L.W.H.S.I.A.u.v.v.u.m.h.f.gQt.f.cQtQt.f.f.i.iQt.fQt.f.#.dQt.f.f.f.g.a.b.r.b.r.b.#.b.a.e.r.e.b.e.e.b.e.e.e.e.k.j.j.j", +".k.k.e.k.j.k.e.j.e.k.e.e.e.e.l.b.c.a.c.cQt.d.d.f.i.s.g.x.f.dQt.c.c.c.c.cQt.c.c.c.a.a.#.a.a.a.a.c.i.#QtQt.iQt.s.f.s.f.s.i.g.i.g.m.g.g.s.i.i.iQt.q.#.#.c.r.#.r.a.#.a.l.#.l.a.l.a.a.e.l.e.a.a.a.r.a.a.a.#.a.a.b.a.b.a.aQt.c.cQt.d.i.f.i.f.m.h.w.v.z.Y.M.M.2.4.5.6.O.1.L.N.T.N.R.Z.Z.N.W.7.L.I.o.u.A.o.p.o.v.v.w.p.p.m.x.m.g.g.g.g.x.g.g.i.g.i.i.g.s.s.h.g.m.h.m.p.h.n.o.o.A.I.E.T.N.M.Z.M.I.B.z.A.v.w.h.m.f.g.f.d.f.f.i.g.f.g.q.i.d.#.f.d.i.dQt.fQt.r.b.l.r.l.b.e.r.b.b.b.e.a.b.e.l.b.l.b.j.e.k.j.k", +".k.j.k.j.e.j.e.j.j.j.e.e.e.e.b.e.a.b.a.c.c.cQt.dQt.f.g.s.xQt.#.c.c.c.c.c.c.c.c.c.a.a.c.aQt.a.#.a.c.q.c.#QtQt.iQt.iQtQt.i.i.g.i.g.i.m.f.i.g.i.g.i.#.#.#.c.#.#.a.a.#.a.a.a.a.#.a.a.l.e.e.#.a.r.a.c.#.a.a.a.#.b.#.b.r.a.b.aQt.c.c.cQt.#.i.g.m.w.u.C.M.T.H.E.Z.4.4.4.U.4.U.U.2.N.N.R.2.U.8.V.Q.z.v.B.u.v.u.w.p.w.s.m.g.g.g.i.g.f.f.i.x.x.f.x.f.x.x.f.q.q.f.s.i.g.i.g.s.g.m.w.n.v.o.B.K.N.1.Z.N.P.F.C.o.v.h.x.f.g.gQt.g.f.g.g.f.g.f.i.d.i.cQt.cQt.c.a.e.b.e.e.b.e.b.e.e.a.e.r.e.e.b.e.l.e.l.b.e.e.e.e", +".j.j.e.k.e.e.e.e.j.j.e.e.e.e.e.e.e.b.e.a.b.c.a.c.cQt.i.h.g.fQtQt.c.cQt.c.c.c.c.c.b.e.l.b.l.e.a.a.#.a.q.c.qQt.qQt.#.q.iQtQtQt.i.f.qQt.x.f.i.i.g.i.i.f.i.#.c.q.a.r.l.a.l.a.l.a.l.a.b.e.l.b.a.#.c.a.b.l.a.b.a.e.b.e.l.e.r.e.b.r.aQt.#.i.i.f.m.m.v.n.z.F.Q.H.E.Q.L.N.1.4.6.6.9.U.U.U.3#.##.V.F.B.o.A.o.u.n.g.h.x.g.x.g.i.d.i.f.f.fQtQtQtQtQtQtQtQtQtQtQtQt.qQtQtQtQt.#.#.q.w.m.v.v.z.B.S.Y.Q.F.Q.Q.Q.I.A.v.h.m.x.x.g.g.g.f.g.f.g.f.g.q.f.dQt.c.b.a.r.e.r.e.r.e.e.e.e.b.b.b.l.e.e.e.e.l.#.l.b.e.e.e.j", +".k.k.k.j.e.e.e.e.j.j.e.e.e.b.e.b.e.l.e.e.e.a.b.cQtQt.f.g.h.gQtQt.c.c.c.c.c.a.c.c.l.b.b.a.e.#.e.b.r.#.r.c.#Qt.cQtQt.#.c.q.iQtQtQt.q.#.#.xQt.i.i.iQtQtQtQt.#.c.r.a.a.a.a.a.a.a.a.a.l.l.b.a.a.r.a.c.l.l.b.l.e.r.l.r.j.e.l.b.a.aQt.cQt.i.i.g.m.h.w.w.v.B.K.I.B.B.F.B.M.L.1.9#..9#a.9.6#b##.V.E.I.A.C.n.w.h.h.f.i.g.f.i.f.i.f.fQtQt.r.r.#Qt.#.#Qt.#.rQtQtQtQt.fQt.rQtQtQtQt.w.s.g.m.m.D.I.A.v.w.A.H.Q.F.H.I.v.h.w.m.f.h.m.h.g.f.g.f.g.d.i.c.cQt.b.e.b.e.b.e.e.b.e.b.e.b.a.e.r.b.#.b.r.a.a.a.a.a.b.e.l", +".j.k.e.k.e.e.b.e.j.k.e.e.e.e.e.e.e.j.e.l.e.r.a.a.cQt.x.h.u.g.f.i.c.c.c.c.c.c.c.c.b.l.l.e.l.e.l.l.r.#.#.#.c.#.q.c.q.a.q.cQt.i.c.i.#.qQt.q.i.qQt.i.i.f.i.f.q.#.a.#.l.r.b.a.l.#.l.a.b.a.e.a.a.aQt.c.b.a.e.a.e.l.b.e.e.b.#.e.b.#.bQt.c.i.f.g.x.m.n.n.o.o.o.o.v.B.I.B.E.Q.M.Z.1#c#c.4#d#e#f.V.K.F.A.o.u.w.h.g.i.dQt.c.i.i.fQt.cQtQtQt.r.b.r.b.r.r.r.r.#.r.#.r.r.r.r.r.f.f.i.g.m.h.m.v.h.C.o.w.n.u.v.n.E.N.M.z.n.h.m.m.m.h.g.g.g.g.g.f.f.dQt.c.#.a.#.e.b.e.e.b.e.b.e.b.b.e.b.l.e.e.l.e.l.a.a.#.a.a.b.b", +".e.e.e.e.e.e.e.e.e.j.j.j.k.j.j.e.e.e.e.e.b.a.b.b.dQt.f.i.w.h.u.h.fQt.q.a.#.a.a.c.e.a.b.a.b.a.b.b.#.a.#.a.#.a.#.a.rQt.r.c.#.a.a.#.r.#.#.aQt.#QtQtQtQtQtQtQtQtQtQt.r.a.r.r.a.r.a.#.l.l.b.a.c.c.d.d.#.l.b.l.b.a.b.l.b.l.b.#.a.c.#.c.c.i.i.g.h.g.m.m.w.D.v.o.o.A.A.A.B.K.P.Q.T.Y.W.W.6#g#g#c.R.P.E.D.m.h.g.x.q.f.q.gQtQtQtQt.#.#.rQt.b.r.r.r.b.r.a.r.b.e.b.b.b.b.b.b.fQt.g.f.f.g.f.h.m.m.m.m.g.h.h.h.o.o.J.Q.Q.B.z.o.v.u.w.w.h.m.x.h.#.#.a.r.b.r.b.e.r.#.r.a.b.e.e.j.j.e.j.b.e.r.b.r.b.l.e.a.e.l.e.l", +".e.e.e.e.e.e.e.e.e.k.j.j.j.j.j.j.e.e.e.e.e.b.e.b.cQt.g.i.p.p.v.p.fQt.c.c.a.#.b.c.l.b.l.e.l.e.l.l.a.b.a.a.#.a.#.a.#.a.#.a.r.#.a.a.l.a.#.r.c.q.c.#Qt.iQt.i.f.i.fQt.r.#.a.a.a.a.r.r.l.l.r.a.cQt.dQt.a.a.e.a.e.l.e.l.b.b.a.#.b.#.c.a.fQt.i.f.g.f.h.h.m.w.n.n.v.y.o.A.o.B.Q.R.R.P.R.Y#h.9#i.L.P.R.E.J.v.w.i.x.#.x.f.d.#Qt.#.cQtQt.r.#.#.a.#.a.r.b.r.r.b.b.j.b.e.b.#.b.cQt.f.x.g.f.x.f.m.m.m.g.g.g.h.f.p.w.v.A.B.I.Q.Q.z.z.v.p.w.w.p.h.aQt.e.r.e.e.b.r.b.c.b.r.e.e.e.b.j.j.j.e.e.e.e.b.l.b.l.b.l.b.e.e", +".j.e.j.k.j.k.j.k.j.e.k.j.j.k.e.k.e.e.e.b.l.b.a.b.c.i.f.f.h.A.C.v.m.fQt.a.a.a.c.a.b.a.e.#.e.#.e.b.l.a.#.l.#.a.a.#.a.a.#.a.#.a.a.#.#.a.a.#.a.c.cQtQt.f.q.fQt.i.f.f.#.#.#.q.#.#.c.#.#.r.#.#.c.c.d.d.#.l.#.l.b.a.e.#.e.e.a.b.#.cQtQtQt.i.g.g.g.s.g.g.h.w.n.v.y.n.A.A.B.B.Q.N.Y.H.Q.Z#h.2.P.K.K.Q.H.B.o.o.h.p.s.x.#.r.#.a.#.rQt.b.r.r.b.r.b.r.b.r.b.#.b.e.e.b.j.b.b.b.#.c.f.g.f.g.fQt.g.s.f.g.f.f.g.x.f.g.x.w.v.o.A.I.Q.Q.B.o.y.h.x.gQt.a.#.b.r.e.r.bQtQt.b.#.e.b.j.j.j.e.j.e.e.b.e.e.b.l.b.l.e.j.l.j", +".k.j.k.j.j.j.k.e.j.k.j.k.e.k.j.j.e.e.e.e.b.b.e.a.c.c.f.m.u.o.C.D.g.fQt.#.a.#.a.c.e.l.e.l.e.l.e.a.l.e.#.a.l.#.l.a.b.l.e.l.e.b.l.e.l.b.l.e.c.#.c.c.iQtQt.gQt.g.f.gQt.iQtQtQt.iQt.i.#.q.#.cQt.#.f.c.a.#.a.b.l.b.l.e.l.r.a.r.aQt.aQt.d.g.f.g.f.g.g.g.h.w.n.n.v.y.A.z.H.Q.P.P.N.R.Z.O.O.Q.J.A.G.y.D.z.z.A.o.h.h.q.#.bQtQtQt.b.r.r.r.bQt.r.r.b.#.b.r.b.b.k.e.j.e.b.j.e.r.#Qt.f.f.g.f.f.f.g.g.f.f.g.d.x.f.g.g.x.w.w.h.v.Q.F.K.B.o.n.h.q.dQt.dQt.c.f.a.r.c.c.r.b.e.e.b.e.b.k.e.k.e.k.j.e.e.e.e.e.e.j.j.j", +".j.j.j.j.j.j.j.j.k.e.j.j.j.j.j.j.e.e.e.a.e.b.a.r.bQtQt.x.h.o.C.C.w.i.f.#.a.a.aQt.e.#.e.#.e.#.e.b.l.e.l.#.a.a.b.l.e.e.b.e.l.e.e.b.e.e.e.b.b.a.b.a.c.c.#.dQtQt.fQt.fQt.f.s.f.i.g.i.#Qt.qQt.dQtQt.c.#.a.b.a.l.b.l.r.e.b.a.a.#.cQt.c.i.f.g.g.f.g.h.i.h.g.w.w.p.n.A.K.F.P.N.M.N.U#i.O.P.G.o.v.h.h.w.n.I.z.A.p.x.s.x.f.x.cQt.#.c.r.b.b.b.r.c.r.b.r.b.b.e.j.e.k.j.e.b.e.bQtQtQtQt.d.f.g.i.i.c.f.i.d.f.f.c.f.f.h.h.w.m.n.o.A.o.o.o.C.n.w.g.g.q.f.c.#.r.b.c.r.e.e.b.e.e.e.j.b.k.b.k.j.0.0.j.j.j.j.e.j.j.k", +".k.j.j.j.k.j.j.k.j.j.k.j.j.e.k.j.e.e.e.e.a.b.b.a.b.d.f.f.h.u.o.v.p.h.f.d.c.#.a.b.l.e.l.e.l.e.l.a.e.#.e.a.#.l.e.l.e.b.l.e.e.b.e.l.j.b.l.e.l.b.b.#.a.#.c.#.#.c.c.iQt.iQt.s.f.s.f.sQt.i.d.#.i.c.cQt.a.#.a.#.l.b.l.e.l.b.b.#.aQt.aQtQt.g.g.f.m.f.w.x.m.p.w.w.o.A.B.K.K.M.Z.U.9#j.8.Z.A.v.w.s.s.s.h.u.v.D.z.A.o.w.s.x.g.x.q.d.r.r.r.b.r.r.b.r.b.r.b.r.j.e.k.k.e.j.e.e.r.bQt.#.#Qt.c.f.i.d.i.f.c.fQt.d.f.f.x.g.x.h.h.n.u.u.h.w.x.n.o.y.o.w.w.x.dQt.c.#Qt.b.r.e.e.e.e.b.e.k.e.j.k.0.e.0.j.e.e.k.e.k.e.k", +".j.0.j.0.j.k.k.j.k.e.k.e.j.j.e.e.e.e.e.b.b.#.b.b.a.fQtQt.h.g.h.h.p.h.gQt.#.a.a.a.b.a.b.a.b.a.b.l.e.l.e.#.a.e.#.e.b.l.e.e.l.j.j.e.j.j.e.b.e.b.a.e.e.l.e.l.a.#.c.cQt.fQtQtQt.iQt.s.f.i.iQt.d.i.cQt.a.#.a.l.#.a.#.a.r.a.#.a.r.cQt.c.g.f.g.f.h.m.w.w.w.n.n.n.A.I.I.K.T.N.2.9#k#l#i.Q.p.w.sQt.f.x.h.h.f.h.D.E.F.z.y.n.m.p.x.q.x.r.r.#.b.b.r.b.r.b.r.b.k.e.k.e.k.e.b.j.r.b.#.c.#.#Qt.#.cQtQt.cQt.cQtQt.f.d.d.g.f.h.h.h.m.f.g.f.m.g.p.n.n.n.w.h.g.xQtQt.c.r.b.e.b.b.e.e.b.k.b.k.k.0.0#m.k.k.k.j.j.k.j.k", +".j.j.k.j.j.k.j.j.j.k.j.b.j.j.e.j.e.b.e.e.b.a.b.a.r.d.d.d.f.g.g.m.u.p.iQt.c.#.a.b.l.e.l.e.l.e.l.e.#.e.#.a.#.l.e.l.e.b.j.e.j.b.j.e.j.b.j.e.l.e.r.e.e.b.l.b.e.a.e.#.#.#.#.q.#QtQt.i.i.s.f.f.i.d.f.c.#.l.a.#.a.a.a.#.a.b.bQt.aQt.aQt.f.g.f.h.i.p.h.w.w.n.v.D.A.J.B.z.Z.M.N#h#n#b.N.z.p.n.s.#.#.x.s.gQt.g.u.z.B.K.F.E.y.y.p.p.x.q.#.r.r.b.r.b.b.r.b.e.e.k.k.k.b.k.e.b.l.r.#QtQt.c.r.cQtQt.c.f.c.#.#Qt.q.d.x.x.h.p.x.h.q.#.i.f.g.w.s.w.s.p.p.w.p.f.d.#.cQt.b.r.e.e.b.k.e.j.j.0.0.e#m#m.k.j.j.j.k.e.j.j", +".k.j.k.k.k.j.k.k.j.k.k.k.j.k.e.j.j.e.e.e.e.e.a.r.a.aQtQt.g.x.h.h.f.s.f.gQt.d.c.c.b.e.b.b.b.a.b.b.a.e.l.e.e.e.#.e.l.l.l.b.l.l.e.b.e.e.e.b.e.l.e.l.e.l.e.l.e.b.a.c.a.#.a.c.a.#.c.c.iQt.i.iQtQt.qQt.b.#.b.#.b.r.a.b.b.l.r.aQt.c.c.c.g.i.s.m.w.w.n.o.w.C.C.A.B.A.I.z.Z.P.N.4.5.O.G.p.s.g.f.s.#Qt.#.#.f.x.g.p.u.v.C.J.Y.E.C.u.s.g.q.f.b.#.e.r.e.b.b.e.r.j.e.j.j.b.j.eQt.cQtQtQtQt.cQt.a.#.cQt.cQt.cQt.f.g.i.g.dQtQt.cQtQtQtQtQt.g.g.g.g.s.h.g.m.n.w.xQt.a.e.b.#.e.e.e.e.j.e.k.0.0.0.e.0.k.e.0.k.0.k.0", +".j.k.j.k.j.k.k.j.k.j.j.j.k.j.j.e.j.j.e.e.b.a.b.e.a.c.c.d.f.f.x.x.i.i.iQtQt.c.c.c.e.e.a.b.a.b.r.c.#.l.b.l.r.l.l.b.e.b.l.e.l.b.l.l.e.l.b.l.e.e.b.e.e.j.l.b.e.a.a.#.a.r.a.#.a.c.#.a.i.#Qt.iQt.iQt.i.a.#.a.r.a.a.#.a.b.b.e.#.cQtQt.d.s.g.i.h.h.v.n.o.v.v.D.D.A.G.z.K.P.Y.N.U.6.Y.D.n.s.s.f.#.f.#.f.rQt.f.f.g.x.p.n.n.B.B.z.A.y.w.h.q.cQt.c.b.r.b.r.e.b.j.b.j.b.j.e.rQt.cQt.cQt.cQt.c.#.bQt.cQt.c.f.d.f.g.dQt.f.dQt.cQt.c.q.d.f.g.f.g.f.g.f.g.m.D.n.wQt.cQt.e.b.b.e.e.e.k.0.k.k.e.k.0.e.0.k.0.k.e.k.k", +".k.e.j.k.j.k.j.j.j.j.j.e.e.e.k.e.j.b.e.e.b.b.a.b.#.cQtQt.f.d.f.g.f.f.iQt.g.#.d.d.l.r.e.a.bQt.a.c.#.e.l.e.l.e.a.l.l.e.b.l.e.l.b.e.b.e.e.e.b.l.e.l.e.e.l.e.l.e.a.a.a.a.#.c.a.#.a.c.cQt.dQt.cQt.dQt.c.r.a.a.r.a.b.#.a.#.aQt.c.f.d.f.g.i.i.h.w.u.n.n.C.C.o.D.o.B.I.z.K.P.N.4#h.P.y.w.s.f.f.#.#.#.#QtQt.c.f.d.f.f.x.p.u.h.o.A.B.A.u.u.g.q.f.d.#.b.r.e.b.r.e.b.r.b.r.bQtQt.cQt.cQt.cQt.cQt.cQt.c.f.d.f.f.gQt.x.f.cQt.#.#.bQt.cQt.d.f.f.g.g.g.x.m.o.o.v.f.iQt.c.#.e.l.b.j.j.e.k.0.k.k.k.k.k.e.k.k.0.k.e", +".k.j.k.j.k.e.k.j.k.j.k.e.k.e.e.e.k.e.e.e.e.#.e.b.c.c.c.cQtQt.d.d.iQt.fQt.f.dQt.q.a.b.a.r.a.c.c.a.a.l.b.l.r.l.b.e.b.l.l.l.b.e.l.l.e.l.b.e.l.e.b.e.j.l.e.e.l.e.a.b.a.b.a.b.a.c.a.aQt.c.#.fQtQtQtQt.cQt.c.#.a.r.a.b.a.#.cQt.d.f.f.x.i.g.m.g.h.n.v.v.n.o.D.o.D.A.G.I.K.Q.M.1.3.P.o.w.x.fQtQt.#Qt.r.#.b.r.#.rQt.f.g.f.x.h.p.y.A.B.A.D.w.s.x.x.d.c.r.b.r.b.e.r.b.r.bQt.cQt.cQt.cQt.c.cQtQtQt.dQt.d.i.d.f.f.i.dQt.cQt.r.#.b.r.cQtQtQt.x.m.m.w.w.w.w.v.w.g.i.iQt.c.#.b.a.b.k.e.k.e.k.j.k.e.0.k.0.e.k.0.0", +".j.j.e.j.j.k.j.j.j.j.j.e.e.j.e.e.e.j.e.b.e.b.a.bQt.c.c.c.cQt.dQtQtQt.f.f.f.fQtQt.cQt.c.c.cQt.cQt.a.b.l.e.l.e.a.l.e.b.l.e.l.b.l.b.e.e.l.b.e.e.e.e.e.e.l.j.e.b.a.a.#.a.a.#.a.#.aQt.c.cQt.cQt.cQt.cQt.aQt.a.c.a.#.cQt.c.c.fQt.fQt.g.h.m.h.w.u.v.y.D.v.o.o.D.o.o.A.G.I.K.H.N.3.Y.y.h.sQt.f.#.#.r.#.r.r.b.r.a.rQt.c.iQt.d.x.x.n.o.D.B.y.o.n.g.q.f.cQt.r.b.r.b.c.bQt.r.iQtQtQtQt.cQt.c.i.cQt.fQt.dQt.fQt.fQt.d.f.cQt.c.r.aQtQt.d.f.x.i.w.n.C.C.w.m.g.f.f.i.x.q.c.c.b.b.e.e.e.j.j.j.j.k.k.k.e.k.0.k.0.k", +".k.j.k.j.k.e.k.e.j.k.e.j.j.b.e.j.b.e.e.b.e.l.b.l.c.cQt.c.c.c.c.c.d.fQtQt.fQt.f.gQt.d.c.cQt.c.c.a.e.#.a.#.a.b.l.b.l.e.l.b.l.e.l.e.l.b.e.e.b.l.e.e.j.j.j.e.l.e.a.a.b.a.b.c.a.r.a.a.bQt.a.cQt.cQt.cQt.c.cQt.cQt.cQt.aQt.d.iQt.g.x.h.u.n.p.w.n.u.o.D.n.o.D.o.D.o.C.o.I.I.I.Z.1.P.w.v.fQt.f.#Qt.#Qt.r.l.r.a.r.#.cQt.c.#Qt.d.g.s.h.y.v.z.A.o.v.g.x.q.gQt.c.#.c.#.c.rQtQt.i.i.c.fQt.q.d.q.dQtQt.f.f.f.f.f.f.f.dQt.c.#.c.c.#.d.f.d.g.x.h.x.w.o.w.o.m.m.g.f.g.g.g.iQt.c.#.e.b.e.e.j.e.e.e.e.k.j.k.e.j.e.k", +".e.k.e.k.e.k.j.j.k.e.k.e.e.j.e.e.e.j.b.e.b.r.a.rQt.c.cQt.cQt.cQtQt.#.d.iQt.s.i.i.iQt.i.#.c.r.#.a.l.a.#.e.a.e.a.e.b.l.e.l.b.l.b.l.e.e.l.e.e.e.j.e.j.e.j.e.e.l.b.a.a.a.a.#.a.#.a.a.b.aQt.c.#.cQt.cQt.dQt.r.c.cQt.c.#Qt.i.f.g.x.m.h.v.u.n.n.v.o.D.v.o.C.o.v.n.v.D.o.B.z.H.M.W.K.v.h.x.f.f.#Qt.r.#.r.#.a.r.b.#Qt.cQt.c.c.f.d.g.q.h.x.o.o.v.v.u.n.w.h.f.cQt.cQt.cQt.fQt.iQtQt.i.#Qt.i.cQtQtQt.#.d.f.fQt.fQt.dQt.dQt.#.iQt.g.f.g.f.g.m.x.h.h.m.m.h.g.g.g.f.g.g.g.fQt.a.r.e.r.e.b.j.j.j.j.e.k.j.k.j.k.j", +".b.k.e.j.k.e.k.j.k.j.k.j.j.j.e.e.e.b.l.r.l.b.a.bQtQt.c.c.c.c.a.a.fQt.fQt.i.f.f.g.g.f.dQt.q.c.a.#.a.b.a.a.#.l.b.l.l.l.b.l.e.l.e.l.b.e.b.l.b.j.e.e.j.t.e.e.l.e.#.a.b.#.b.a.r.a.c.#.bQt.a.#.cQt.cQt.cQt.c.cQt.cQt.c.iQt.g.i.g.g.w.g.o.o.v.u.v.D.o.o.A.y.C.n.n.n.n.D.A.I.H.P.Y.I.w.h.s.fQt.fQt.#.c.#Qt.b.r.cQt.cQt.aQt.cQt.cQt.c.f.f.u.u.h.v.A.o.o.p.g.g.i.q.f.f.f.f.iQt.iQt.#.i.c.#Qt.q.#QtQt.i.f.g.f.d.i.dQt.rQt.c.g.h.m.h.m.h.h.w.n.w.w.h.gQt.dQt.d.d.f.c.f.iQt.c.#.r.a.b.e.b.e.b.k.j.k.0.e.k.e.k", +".j.k.j.k.j.b.e.e.e.j.j.b.e.r.e.b.r.a.a.r.a.#.r.a.q.c.#.c.#.qQtQtQt.iQtQt.iQt.sQt.g.p.h.iQt.i.a.e.a.a.b.l.e.e.l.b.e.e.e.b.e.b.e.e.l.e.e.e.e.e.j.e.j.j.e.j.e.j.e.e.e.e.e.r.a.bQt.c.e.a.r.c.#.a.#.a.#Qt.cQt.i.d.i.f.i.g.f.g.s.x.m.w.w.h.w.w.v.n.v.n.v.w.o.w.n.m.v.w.C.v.B.Z.1.Q.o.p.h.gQt.r.r.b.r.e.b.#.e.r.b.#.#Qt.d.fQt.d.g.d.gQt.g.g.x.n.o.A.z.K.z.v.u.v.p.s.s.i.f.q.q.d.dQt.d.i.dQtQt.d.i.d.qQt.iQtQt.i.f.g.f.s.s.g.s.g.f.g.d.f.cQt.c.c.rQt.r.r.b.r.a.b.b.e.b.b.b.b.r.b.e.b.e.j.j.e.0.k.k.0.k.0", +".j.e.j.e.e.e.e.j.j.k.e.e.l.e.b.e.a.r.a.a.r.a.r.a.#.c.#Qt.#.d.#.i.#Qt.#Qt.fQtQt.s.i.g.p.s.iQt.#.bQt.c.a.#.a.#.e.l.e.b.l.e.l.e.l.b.e.b.l.b.e.e.e.e.e.e.e.j.l.e.a.a.e.b.e.e.a.b.a.c.a.r.a.#.b.#.bQt.#.a.q.c.i.f.f.f.i.i.g.s.x.m.m.m.w.u.m.w.v.v.o.o.w.n.w.h.h.h.p.n.w.o.A.S.Z.Z.H.y.h.x.fQt.r.r.e.r.b.b.a.r.a.#.a.rQt.d.i.d.i.d.i.d.g.f.g.g.h.u.A.z.J.B.A.v.w.s.p.s.f.x.f.g.d.i.dQt.i.f.g.g.f.f.f.xQtQt.g.f.g.f.g.q.#Qt.#.dQt.c.d.d.c.rQt.r.r.r.b.r.a.e.r.e.b.e.b.e.r.e.e.b.b.e.e.b.0.k.e.0.e.k.e.k", +".j.k.0.e.j.e.e.b.j.e.b.e.e.e.a.b.#.a.a.c.a.c.a.aQt.c.cQt.cQt.c.c.#Qt.#.c.q.cQtQtQt.s.u.g.iQtQt.cQt.c.a.a.#.a.b.l.b.e.b.e.b.e.e.l.e.e.e.l.e.e.e.e.j.j.e.j.e.l.a.a.b.l.b.a.aQt.cQt.c.a.#.cQt.#Qt.c.qQt.c.q.i.d.g.g.g.g.f.g.g.m.x.m.p.m.m.w.w.v.n.w.n.h.h.h.h.h.h.h.g.u.o.I.M.1.Z.Q.h.w.gQt.#.r.r.r.b.a.r.#.b.#.c.fQt.fQt.d.i.dQt.d.i.d.f.f.m.s.n.u.A.J.J.B.A.u.h.p.w.x.g.x.f.f.f.g.i.q.f.f.fQt.fQt.g.i.s.m.h.f.q.f.#Qt.cQt.a.r.a.b.r.b.b.e.e.e.b.e.b.e.e.e.e.e.e.e.j.b.j.e.j.j.e.j.k.k.0.k.k.0.k.0", +".j.e.j.e.j.b.j.e.e.e.l.e.r.a.b.a.a.a.a.#.a.a.#.a.c.#.c.a.c.a.a.#.a.aQt.a.c.c.cQtQt.f.m.g.s.f.dQt.c.c.#.a.a.#.e.a.e.#.e.l.e.l.e.b.l.b.e.b.e.l.e.e.l.b.l.l.b.e.r.a.e.a.a.#.c.c.c.c.cQt.d.#.cQt.d.q.c.q.c.fQt.i.i.gQt.g.s.g.f.g.m.h.m.x.m.g.m.p.w.h.h.p.h.h.x.g.h.h.x.h.u.A.I.L.Y.N.D.n.x.fQtQt.r.#.a.r.#.b.#Qt.rQt.d.i.d.i.dQt.fQtQtQt.c.g.f.g.g.w.u.v.z.z.z.v.o.v.w.g.w.g.w.g.m.x.g.f.m.i.g.f.i.f.g.m.g.f.x.i.d.d.a.a.a.a.b.a.r.r.e.e.b.e.r.e.b.e.e.e.b.e.e.b.e.b.j.e.e.j.b.j.b.e.0.e.k.e.0.k.e.k", +".j.j.j.e.j.e.l.e.b.l.e.b.a.a.b.a.a.#.a.a.a.a.a.a.b.a.b.#.b.b.a.b.b.e.b.aQt.c.c.c.c.q.i.i.f.fQt.d.f.c.cQt.a.a.e.b.e.e.e.b.e.b.e.e.e.l.e.l.b.e.b.e.j.j.l.b.l.l.a.a.a.#.a.c.aQt.c.c.qQt.#.iQt.iQt.#.f.d.i.c.fQt.i.i.i.i.f.g.g.x.h.h.s.g.g.f.h.m.h.h.h.g.g.x.f.x.g.g.x.h.p.y.A.B.E.N.K.y.h.q.i.fQt.r.#.b.#.bQt.c.f.c.fQt.dQt.d.q.dQt.#.cQt.c.i.g.g.s.u.v.h.h.p.n.A.z.n.v.p.w.p.h.h.n.h.m.g.g.f.x.g.g.w.h.g.fQt.c.d.c.a.b.b.b.a.b.b.b.b.e.e.e.e.e.b.j.e.j.e.e.b.e.e.e.e.b.j.b.e.e.j.e.e.k.0.k.0.k.0.k", +".j.j.e.e.j.e.e.e.l.e.l.a.a.a.c.c.b.e.l.e.e.b.l.b.b.b.e.e.e.e.b.b.b.e.b.e.r.b.b.#.a.c.c.f.m.g.h.dQt.i.c.c.a.#.a.l.e.l.b.l.e.l.e.l.b.e.b.e.e.e.l.e.t.b.l.e.a.b.b.a.a.a.a.a.#.c.#Qt.cQt.d.iQt.#.iQt.dQt.i.f.#Qt.q.i.d.f.i.f.g.g.g.x.g.f.g.g.h.g.x.g.x.h.q.g.x.g.q.x.g.x.h.n.u.y.A.Q.R.K.n.g.f.fQtQt.#.#.rQt.dQt.rQtQt.d.i.fQt.dQt.f.cQt.d.x.d.g.g.f.m.h.w.x.g.p.w.u.v.u.o.o.z.A.A.v.v.u.p.m.g.m.x.m.i.fQt.c.c.c.b.c.e.b.e.e.b.e.b.e.e.b.e.e.b.j.e.b.e.k.b.j.j.j.j.k.e.0.k.0.k.0.e.k.0.k.k.k.e.k.e.k", +".j.e.j.e.e.e.b.l.b.l.a.a.a.c.a.#.e.e.b.e.e.e.b.e.l.e.e.e.l.e.l.e.e.e.e.b.e.b.b.b.e.#.cQt.f.h.x.x.f.dQtQt.c.c.aQt.e.b.e.e.b.e.b.e.l.e.l.e.b.l.b.e.b.j.l.b.l.l.a.#.a.r.a.q.c.#.cQtQtQt.iQt.fQtQtQt.i.d.i.cQt.#Qt.qQtQtQt.f.f.f.g.g.g.i.i.i.x.d.f.g.f.f.f.x.d.f.f.g.g.f.g.s.h.w.o.G.Q.H.A.w.x.d.d.f.bQtQt.rQt.c.f.rQt.fQt.d.#.fQt.d.f.d.f.d.d.g.f.f.q.q.x.h.m.s.h.s.p.w.v.o.o.B.B.B.v.o.v.u.h.g.f.fQtQt.c.c.a.b.e.r.l.e.l.b.e.j.j.e.j.j.j.e.j.j.e.k.j.b.k.e.e.j.e.e.k.k.e.k.e.k.0.k.e.k.e.0.k.0.k.0", +".j.e.e.j.j.e.e.e.l.l.a.#.a.a.a.c.b.e.e.b.b.e.e.e.e.e.b.e.e.b.e.b.j.b.e.j.e.b.b.r.e.b.cQt.f.g.x.hQt.i.d.c.c.cQt.a.b.e.r.l.b.l.e.l.e.b.e.b.e.e.e.e.t.e.e.l.b.e.a.a.a.a.r.c.#.#.d.#.iQtQtQtQt.iQt.iQt.dQt.f.#Qt.a.#.c.cQt.i.f.g.g.f.i.f.fQt.f.f.d.f.d.f.d.i.c.f.d.f.i.g.g.x.s.A.C.n.T.H.K.y.x.cQt.x.#.#.cQt.d.#.c.f.d.i.d.i.dQt.d.i.d.q.f.d.f.qQt.d.fQt.f.q.x.h.s.p.u.v.v.v.A.C.o.D.z.y.o.v.w.i.g.f.#Qt.q.a.a.l.e.j.e.e.e.j.e.j.b.e.k.e.j.j.j.b.k.b.j.k.e.k.e.k.e.k.e.k.0.k.0.k.e.k.0.k.0.e.k.k.e.k", +".0.e.k.e.j.b.e.b.a.b.l.e.e.#.e.l.e.b.e.e.e.j.k.j.k.j.j.j.k.j.j.k.e.e.j.b.e.b.e.b.c.f.c.#Qt.h.v.y.x.gQt.i.cQt.c.c.#.q.a.a.l.b.b.e.b.l.e.l.e.b.l.b.e.b.l.b.e.b.e.e.b.l.a.a.bQt.a.cQtQtQtQtQt.fQt.f.dQt.cQt.cQt.c.#.#Qt.r.#.c.f.q.x.f.f.d.f.d.f.f.dQt.cQt.c.f.d.g.q.f.g.x.g.h.p.n.y.J.H.L.N.z.p.h.d.f.g.f.fQt.f.d.d.f.c.q.a.#.r.b.#.q.i.dQt.fQt.g.q.cQt.d.d.f.h.s.p.p.h.u.v.v.o.A.A.w.m.g.f.fQt.d.c.r.r.b.b.b.b.b.b.k.j.k.j.k.j.k.k.j.k.j.b.k.k.e.k.k.e.e.j.e.b.j.e.k.e.0.e.0.k.0.e.k.j.k.j.k.e.0.k", +".e.j.e.b.e.e.b.b.l.e.l.b.l.e.l.e.j.j.e.j.e.e.e.j.e.j.k.k.j.k.j.k.e.e.e.e.e.e.e.e.b.c.dQtQt.w.y.C.h.m.i.f.dQt.d.d.q.#.a.#.l.b.l.b.a.e.b.e.b.l.e.e.l.e.e.e.l.e.l.b.a.l.b.#.c.a.r.a.f.iQtQt.iQtQt.i.c.#Qt.c.cQt.b.#.b.#.#.rQt.r.f.f.i.f.cQt.i.c.f.cQtQt.f.d.f.q.i.q.g.q.f.x.g.p.n.y.B.F.N.1.E.o.s.h.g.f.g.f.f.f.f.cQtQt.cQt.cQt.c.#Qt.fQt.d.g.g.f.f.g.f.g.x.h.s.h.h.u.v.y.o.z.C.o.v.i.g.fQt.i.c.c.c.r.b.b.b.b.b.b.b.k.e.j.k.e.k.j.j.j.j.j.k.e.j.e.k.e.k.k.b.j.j.e.j.e.k.0.k.k.e.k.0.k.e.k.e.j.j.k.j", +".e.e.e.e.e.#.a.#.e.l.b.l.e.e.e.j.e.e.j.e.b.k.e.e.k.j.e.e.k.b.k.j.b.k.e.j.b.j.e.b.b.cQt.#Qt.p.v.J.p.h.w.g.m.f.xQt.#.q.#.a.c.e.#.a.b.e.l.e.e.b.e.b.e.b.l.b.e.e.b.e.l.b.l.b.a.a.c.a.c.#.#.#.#.#.#.#.cQt.c.c.#.b.r.b.r.b.b.rQtQt.c.f.d.f.c.#.cQt.cQt.rQt.cQt.d.f.q.xQt.x.g.q.h.p.y.y.I.H.Y.3.N.I.o.p.g.i.g.gQt.f.d.dQtQtQt.c.f.c.f.d.iQt.iQt.g.x.g.i.h.g.h.h.w.p.n.p.B.D.z.A.v.w.h.g.iQtQt.dQt.c.c.c.e.e.e.j.e.e.e.e.b.k.j.j.j.j.e.k.e.e.e.e.e.j.k.e.0.k.j.k.j.b.e.e.k.e.k.e.k.j.k.e.j.k.j.k.e.b.e.b", +".c.#.aQt.a.c.a.c.b.e.e.e.b.l.e.e.k.e.j.k.k.k.e.k.j.j.k.k.j.k.j.j.k.j.k.j.k.j.k.k.e.#.aQt.s.h.y.C.v.n.A.u.p.g.g.s.#QtQt.c.#.a.b.#.b.b.e.b.l.e.l.e.l.e.e.l.b.e.l.e.e.l.b.l.b.#.b.c.q.c.c.c.c.c.cQt.c.c.aQt.a.r.a.b.b.r.r.b.b.#Qt.r.fQt.cQt.dQt.#Qt.dQt.d.#.d.d.x.d.f.x.f.g.h.p.n.A.F.T.N.Z.Z.M.B.u.x.m.x.f.g.d.i.c.f.#.fQt.f.d.x.g.i.s.f.s.g.s.g.m.p.h.n.v.o.v.z.D.B.B.o.u.h.g.fQt.dQt.cQt.c.b.b.b.e.j.b.e.j.b.j.e.j.e.e.e.e.j.e.e.e.e.e.j.e.e.b.j.0.e.j.e.k.j.j.e.b.j.e.e.j.b.j.e.e.e.e.b.e.e.b.e", +".a.a.a.a.a.#.a.a.e.l.b.l.e.e.j.j.b.k.k.j.e.k.e.k.e.k.k.e.k.k.e.k.j.k.b.k.j.k.j.k.e.e.eQt.f.p.v.v.n.A.C.z.y.u.g.i.iQt.#.#.c.a.#.b.e.l.e.e.b.e.b.e.e.b.l.e.e.e.b.e.b.l.b.l.e.a.a.a.c.c.#.a.a.#.a.a.a.#.a.b.a.r.e.r.l.b.b.r.b.#.rQt.c.#.c.rQt.rQt.rQt.r.cQt.d.f.d.f.h.f.x.f.p.h.y.z.M.M.Q.Q.M.2.N.z.h.w.g.h.f.f.dQtQtQtQt.g.f.g.f.g.m.g.w.h.w.p.w.h.u.o.o.z.o.z.o.B.v.v.p.w.fQt.d.#Qt.#.c.a.b.#.b.b.b.e.e.e.e.e.j.e.b.e.b.e.k.e.e.e.b.e.b.e.e.e.j.e.e.k.e.e.e.b.b.e.e.b.e.b.e.b.e.b.b.b.a.e.a.b.a.a", +".c.aQt.e.#.e.e.e.b.e.e.k.e.e.j.j.k.j.k.e.k.0.k.0.k.k.k.k.e.k.k.0.e.k.k.k.k.e.0.k.k.b.e.c.f.v.C.D.o.y.z.C.y.u.p.sQt.#.iQtQt.c.a.b.#.e.b.e.l.e.l.b.l.e.e.b.l.b.l.e.t.e.l.e.a.b.b.a.q.a.a.c.a.c.a.c.a.c.e.a.b.b.b.e.r.e.b.b.r.r.#.#Qt.cQt.rQt.dQt.c.f.cQt.r.d.f.q.f.x.h.g.h.h.n.A.z.Q.M.E.K.F.3.O.K.v.w.s.h.f.i.c.f.c.g.d.g.f.m.h.w.u.v.o.v.A.A.A.o.o.A.o.v.v.u.v.u.h.w.g.fQt.cQt.a.c.c.a.b.b.e.e.e.j.e.k.e.k.e.b.j.e.e.j.e.b.e.b.e.e.l.e.e.b.e.b.j.e.e.b.e.#.b.aQt.a.#.b.#.r.#.r.#.a.a.a.#.a.c.a.a", +".b.e.e.e.e.e.b.j.e.e.j.e.e.k.e.e.k.k.k.0.0.e.0.k.e.0.e.0.0.0.e.0.k.0.e.0.0.k.0.k.0.j.e.b.i.h.A.D.o.y.A.C.z.u.h.q.gQt.i.#.dQt.c.c.e.b.l.e.b.e.e.e.e.b.l.e.e.e.e.b.e.e.l.b.l.l.l.b.a.c.a.a.a.a.a.#.e.b.l.r.e.e.b.b.e.e.b.e.r.b.r.cQt.#.cQt.rQt.r.c.#.cQt.c.f.q.g.q.m.s.h.w.w.o.A.I.Q.F.I.I.F.N.1.Y.B.v.h.w.f.x.i.d.f.f.g.f.m.h.u.u.B.z.J.B.J.D.B.z.o.u.v.h.g.m.g.g.g.i.sQtQt.a.l.eQt.a.b.a.b.e.j.b.k.e.e.k.b.k.e.e.b.e.b.e.e.e.j.e.r.e.r.e.e.e.b.e.#.b.a.c.c.d.f.d.aQt.c.aQt.a.c.#.c.cQt.c.cQt.c.b", +".b.b.b.k.b.k.0.e.j.j.j.e.k.b.j.j.0.e.0.k.0.k.e.0.0.0.0.0.e.0#m.e.k.0.k.0.k.0.k.0.k.e.j.eQt.g.o.C.o.v.z.C.v.u.i.sQtQt.d.qQt.c.c.c.b.e.e.l.e.l.b.l.b.l.e.e.b.l.b.e.t.e.j.l.e.r.l.b.a.a.#.b.a.#.b.a.l.e.l.e.l.b.e.e.e.k.r.e.r.bQt.r.rQtQt.r.c.f.c.#.dQt.c.f.f.q.f.g.s.g.w.x.n.o.z.K.Q.B.I.K.I.I.Y.V.K.A.p.h.g.f.f.iQt.g.g.m.w.w.v.o.F.E.F.E.F.B.B.D.w.m.g.h.g.x.m.x.iQt.c.a.a.e.a.b.a.a.b.b.e.e.e.j.b.j.j.j.j.j.e.b.e.e.e.e.e.b.e.b.e.a.e.b.b.r.b.r.c.c.d.f.d.f.d.f.b.b.#.b.aQt.a.cQt.c.c.c.c.b.c.c", +".k.k.e.k.k.k.e.k.k.e.k.e.k.k.k.e.k.k.0.k.0.k.0.k.e.0.0.0.0.k.0.0.0.k.0.e.0.k.e.0.k.k.k.j.a.x.A.z.u.u.h.h.n.h.m.gQtQtQt.c.a.r.e.b.a.e.b.e.b.e.e.e.e.e.b.l.e.e.l.e.b.j.b.l.e.l.a.a.#.a.a.a.a.b.a.a.l.#.e.b.l.b.e.r.e.j.b.k.#.bQt.d.f.cQt.fQt.d.i.f.fQt.x.f.f.g.f.g.n.h.w.p.o.B.E.R.Q.F.B.z.K.I.E.R.U.M.v.w.p.g.q.x.i.x.f.w.h.z.D.E.2.Q.B.v.w.p.u.s.h.f.f.f.g.f.fQt.f.iQt.#.c.q.c.a.a.a.a.a.b.a.a.a.e.e.b.l.e.b.l.e.a.#.cQtQt.dQtQt.dQt.#.c.qQt.q.c.c.#.c.a.c.c.c.#.e.b.e.e.r.e.b.e.b.b.e.b.e.b.e.b", +".k.e.k.0.e.k.0.e.k.j.j.k.j.e.0.k.0.e.k.e.0.k.e.0.k.k.e.k.0.k.0.k.e.0.k.0.k.0.0.k.k.e.j.e.b.i.u.B.p.p.h.p.h.g.i.xQt.q.dQt.a.#.a.e.b.l.e.l.e.l.b.l.b.e.l.e.b.e.b.e.j.l.l.b.e.e.a.b.a.b.a.b.a.a.a.b.l.l.l.a.e.#.e.b.b.b.j.e.b.r.c.d.c.i.d.i.d.g.f.f.g.f.g.f.g.m.x.m.p.u.n.v.o.I.T.R.E.B.A.z.z.B.E.P.L.Z.A.w.m.f.h.h.g.g.w.h.o.B.E.T.H.F.y.w.h.p.i.x.f.f.iQt.f.gQt.fQt.c.i.c.c.a.a.aQt.a.#.a.a.#.a.#.a.a.aQt.a.c.aQt.a.a.a.c.q.#.d.i.#.#Qt.qQtQtQt.i.c.cQt.c.c.#.c.c.#.e.a.b.l.e.l.e.b.e.e.e.e.e.e.e", +".k.k.k.k.0.k.k.k.j.e.k.e.k.0.k.e.k.k.0.0.k.e.0.k.e.0.k.0.e.0.k.0.0.k.0.k.0.k.k.0.j.b.k.e.aQt.g.y.u.h.u.h.g.x.f.f.iQt.d.c.a.b.e.e.l.e.b.e.b.e.l.e.e.l.b.e.l.e.l.e.b.j.e.l.l.e.#.a.#.a.a.a.r.a.a.b.b.l.b.l.e.b.e.b.j.r.j.r.b.bQt.d.i.d.i.d.i.f.g.d.g.f.g.x.h.g.w.h.w.p.w.o.z.F.P.N.z.o.u.A.A.z.B.I.M.Z.I.n.x.h.h.x.w.h.v.o.B.F.E.E.z.u.h.g.f.i.q.sQt.dQt.dQtQt.dQt.d.c.c.c.c.a.a.a.a.b.c.#.c.b.a.a.cQt.c.c.cQt.c.c.a.#.a.a.c.c.i.d.cQt.c.c.cQt.c.c.b.b.b.b.r.b.b.b.e.e.b.e.e.b.e.e.e.b.e.b.j.b.e.j", +".0.e.0.e.k.e.0.e.j.k.j.0.k.e.k.0.e.k.k.e.0.k.k.0.k.e.k.k.0.k.0.k.0.e.k.0.e.0.0.e.k.j.k.b.eQt.s.h.p.h.g.g.m.i.g.i.d.#.i.c.a.b.a.b.e.b.e.e.l.e.e.l.b.e.e.b.e.e.b.e.t.b.t.e.e.e.a.b.a.a.b.a.a.b.a.a.l.a.e.a.b.e.#.e.r.b.b.e.r.c.f.q.i.q.dQt.f.f.gQt.x.h.x.h.x.s.s.w.p.w.u.o.B.F.T.S.o.v.n.n.y.y.z.B.P.2.H.o.w.g.p.w.u.o.y.B.F.B.B.C.g.h.f.q.d.d.d.d.c.d.i.dQt.c.c.c.cQt.a.c.a.#.e.e.#.a.a.b.a.a.bQt.c.c.c.a.c.a.cQt.e.l.b.a.#.c.a.a.e.b.e.b.b.b.e.e.b.e.b.e.e.e.b.e.e.e.e.j.e.j.e.j.b.j.e.j.j.e.k.j", +".k.k.k.k.0.k.k.0.e.k.e.k.k.0.k.j.k.0.e.k.k.e.0.e.k.0.k.e.0.k.0.k.0.k.0.k.0.k.0.k.k.e.k.e.e.rQt.s.g.m.g.g.f.i.f.i.#.d.c.c.a.b.e.e.l.e.l.b.e.b.e.e.l.e.l.e.l.b.l.e.e.j.e.b.l.e.a.a.#.b.a.a.a.a.a.e.l.l.b.l.l.b.e.b.e.b.e.b.aQtQt.gQt.fQt.fQt.g.f.f.x.f.m.f.x.w.s.h.w.n.v.o.B.E.H.F.v.v.w.w.n.o.A.H.2.Z.I.o.w.h.h.o.z.B.z.B.C.v.u.p.f.iQt.#.a.r.cQt.aQt.a.c.b.b.aQt.b.a.b.b.e.e.e.e.e.e.b.l.e.e.b.l.a.b.#.a.a.b.a.a.b.b.e.b.e.r.e.b.l.b.l.e.l.e.b.l.e.e.e.e.b.e.e.e.e.j.b.k.b.k.b.k.e.j.e.j.e.j.e.j", +".0.e.0.k.e.0.e.k.j.0.k.0.e.k.e.k.e.k.0.k.j.k.k.0.k.e.0.k.0.k.0.e.k.0.k.0.k.0.k.0.k.k.j.j.e.#.a.#.g.i.i.sQt.iQtQtQt.#.c.a.#.b.l.b.e.b.e.e.e.e.l.b.e.b.e.b.e.e.e.e.e.j.j.j.l.e.#.b.a.a.a.a.b.#.b.a.l.l.e.l.b.b.l.r.e.b.e.r.a.i.f.gQt.fQt.d.i.qQt.f.g.f.g.x.g.x.h.g.n.h.o.o.B.E.I.B.v.o.n.u.n.D.z.K.X.Z.B.o.u.w.z.J.J.B.A.u.w.h.m.iQtQt.c.a.b.a.a.r.b.a.b.a.r.a.b.b.l.b.e.e.b.e.e.j.b.l.l.e.e.l.l.l.b.e.l.e.b.l.e.e.a.e.e.b.e.j.j.j.k.j.e.k.e.j.j.k.b.k.b.k.e.j.j.e.k.e.k.j.k.j.k.k.k.e.k.k.k.j.j.k", +".k.k.k.e.0.k.k.0.e.k.e.0.k.0.k.j.0.e.k.e.k.e.0.k.j.k.k.e.0.k.0.0.0.e.0.k.e.0.k.e.0.k.k.e.j.b.l.b.i.qQtQtQtQtQtQt.#.d.c.c.b.e.e.e.l.e.l.b.e.e.e.e.l.e.l.e.e.j.e.t.e.j.e.e.e.l.a.a.#.b.a.b.a.a.a.b.l.l.e.l.e.a.b.b.b.b.b.aQt.i.f.g.dQtQt.g.dQt.f.g.f.g.f.g.f.m.x.w.h.v.A.z.I.F.B.C.n.y.n.n.u.A.K.I.W.W.I.v.o.z.K.F.o.u.h.g.f.f.d.f.d.cQt.a.b.a.r.c.r.e.b.b.b.e.b.a.b.b.e.e.e.j.e.j.l.e.b.l.b.l.b.e.l.l.b.l.e.l.b.l.e.e.e.j.j.e.k.j.e.0.k.0.k.e.0.k.0.j.k.e.k.e.k.k.k.k.k.e.k.e.0.e.j.k.0.e.j.e.k.k", +".0.e.0.k.k.0.e.k.j.0.k.k.0.e.k.e.k.k.k.j.j.k.k.e.k.e.0.k.0.e.0.k.k.0.k.0.0.k.0.0.j.k.e.j.e.b.l.lQt.iQtQt.#QtQt.qQt.cQt.a.a.b.e.e.e.b.e.e.j.l.j.e.e.e.b.j.e.l.e.e.j.e.e.t.b.e.a.b.a.a.a.a.#.b.a.a.l.b.e.a.b.e.b.e.c.#.aQt.#.i.f.g.#.d.i.d.i.dQt.f.iQt.i.f.g.f.m.g.n.v.A.D.I.E.I.o.p.u.n.n.y.A.z.K.N.V.E.B.I.H.E.z.h.h.w.i.f.c.a.bQt.c.a.b.a.b.b.c.a.b.b.l.b.l.b.e.b.l.b.e.j.j.j.e.e.l.e.l.e.l.e.l.e.j.e.j.e.j.j.j.b.e.e.j.k.k.e.0.0.k.0.e.0.0.0.e.k.e.k.0.k.0.k.0.e.0.e.k.0.k.k.0.k.j.e.k.j.k.j.j", +".j.k.j.e.0.k.0.0.k.0.e.k.k.k.0.k.e.j.j.j.e.j.j.k.j.k.j.e.0.k.0.k.0.k.0.e.k.0.k.0.k.e.k.j.j.e.e.b.e.#Qt.q.fQtQt.c.c.#.c.bQt.l.b.#.e.e.e.e.e.b.e.e.b.a.e.a.b.e.e.e.j.j.j.e.e.e.b.l.aQt.a.b.a.a.a.r.e.l.l.b.l.a.#.a.b.#.aQt.c.d.gQtQt.f.#.f.cQt.cQt.d.g.f.h.x.p.h.p.n.u.o.F.P.T.I.o.n.o.n.u.C.z.B.K.Q.2.V.M.E.F.z.p.f.i.d.dQt.c.cQt.b.#.b.e.e.a.b.a.e.b.l.r.e.r.e.e.e.e.e.j.e.j.j.j.e.e.b.e.j.e.e.b.j.b.j.k.j.e.j.j.0.k.0.k.0.k.0.k.e.k.e.k.k.e.k.0.k.j.e.k.e.k.e.k.k.j.k.k.j.e.k.j.j.k.k.j.k.e.k.k", +".k.e.k.k.k.e.k.0.e.k.k.0.e.k.e.k.j.j.k.j.k.e.j.j.k.e.0.k.k.0.k.0.0.e.k.0.k.0.e.k.0.0.0.k.e.k.e.j.e.a.c.#.qQtQt.c.c.c.a.c.b.a.b.e.e.e.j.e.e.j.e.e.e.e.e.k.e.j.j.e.0.e.j.j.e.l.e.b.a.b.#.a.a.b.a.a.l.e.e.a.e.l.b.a.#.a.#.c.f.f.f.g.d.#.f.c.q.cQt.fQt.g.f.m.x.s.w.p.u.v.B.F.E.E.B.A.f.h.n.o.o.A.o.A.2.2.N.K.B.z.n.g.qQtQt.d.d.c.c.c.a.b.b.l.b.b.l.r.b.b.b.e.a.e.#.e.e.e.l.e.k.b.j.e.e.j.e.l.b.e.j.e.k.k.e.k.e.k.j.k.k.0.k.0.e.0.k.0.0.0.k.0.k.0.k.k.e.k.k.0.k.j.0.k.k.j.k.e.k.j.j.j.e.e.k.b.j.j.j.j", +".j.j.k.e.0.k.0.k.k.0.e.k.k.0.k.k.e.j.j.e.j.j.j.e.0.k.0.k.0.k.e.0.k.0.0.k.0.k.0.0.k.k.k.j.k.e.e.j.e.a.a.cQt.#.c.#.c.a.c.a.a.b.e.e.j.k.e.k.k.j.k.j.e.k.j.e.k.k.k.k.j.j.k.e.j.b.e.e.#.c.a.a.#.a.a.b.e.b.l.b.l.b.a.#.l.#.aQt.d.g.g.i.fQt.d.i.dQt.fQt.f.g.f.h.g.w.p.n.w.v.B.E.E.F.B.v.g.m.m.w.u.o.J.F.1.Z.F.B.u.h.f.f.i.d.d.c.c.#.c.b.r.e.e.e.b.e.e.e.l.b.e.e.r.e.e.e.e.e.j.e.j.e.k.b.j.e.e.j.e.e.e.j.j.k.e.k.j.k.e.e.0.k.e.0.k.0.k.0.k.k.e.k.0.e.k.e.k.j.e.0.e.k.e.k.e.k.j.e.k.j.k.e.k.k.b.j.j.e.e.k", +".j.k.e.0.k.k.e.0.e.k.0.j.k.e.k.e.j.j.k.j.e.j.j.k.e.0.k.0.e.0.k.0.k.0.k.0.k.0.k.0.0.e.k.j.k.b.e.j.e.e.a.a.c.c.#.c.#.c.b.a.b.b.l.b.j.j.j.j.j.j.e.j.j.b.e.j.e.j.j.e.e.k.e.j.e.b.e.b.a.a.a.b.a.b.a.#.e.l.l.b.l.l.b.a.#.a.#.cQt.g.f.gQt.f.iQt.fQt.i.d.g.f.g.x.h.p.p.p.u.v.z.E.M.E.A.p.v.n.u.u.z.E.Y.V.Z.F.o.u.g.f.dQt.d.d.c.#.c.b.b.a.e.e.a.e.b.e.b.e.r.e.e.e.e.l.b.e.e.j.e.e.j.j.e.j.e.j.e.b.l.j.e.e.e.k.e.k.b.j.k.k.k.0.0.0.k.0.0.0.e.0.0.0.k.0.k.0.j.e.k.k.0.k.0.k.k.j.j.j.j.b.j.b.k.j.e.k.e.j.j.j", +".j.k.j.k.e.0.k.k.k.0.e.k.j.j.0.k.j.b.j.e.k.e.e.j.k.k.e.k.0.k.e.k.e.0.k.e.0.k.e.0.k.0.k.j.k.e.j.e.e.k.e.j.a.a.c.c.c.a.c.a.b.a.e.b.j.e.k.e.j.b.j.e.e.k.k.j.e.e.e.k.e.j.e.b.e.e.a.b.#.a.#.a.a.a.a.a.e.e.b.l.b.a.a.#.l.#QtQt.d.g.f.s.g.f.f.g.f.g.f.g.f.g.f.h.h.w.p.n.w.o.B.E.H.F.B.v.A.o.B.B.Q.Y.N.P.F.v.p.g.f.i.cQt.aQt.b.a.b.a.b.e.e.j.b.e.e.l.e.j.e.e.a.b.b.e.e.b.j.e.k.e.j.e.k.e.b.e.e.j.e.e.j.e.k.j.k.j.k.k.e.k.0.k.k.0.k.0.0.0.0.k.k.e.0.0.e.k.k.0.k.e.k.e.k.j.e.j.j.j.j.j.j.j.e.j.e.j.e.j.e.j", +".e.k.e.j.k.e.k.j.e.k.j.e.k.e.k.e.j.k.j.j.j.j.j.k.e.k.0.k.e.k.0.k.0.k.0.0.k.0.k.0.j.e.k.b.k.e.j.e.j.e.j.e.e.a.c.#.#.c.a.r.a.e.b.e.e.e.l.e.e.e.l.e.b.e.e.b.e.e.e.e.e.e.e.e.e.a.e.b.a.c.a.a.b.a.r.a.e.l.l.e.l.a.#.a.#.a.r.cQt.f.g.g.g.g.f.g.f.g.f.g.f.g.f.h.m.p.n.n.p.z.H.Q.T.K.K.Q.L.N.P.N.T.E.I.o.u.m.f.f.d.c.c.r.c.r.b.b.b.e.e.e.j.e.e.j.e.j.b.e.b.e.e.e.e.e.l.e.j.e.e.j.j.j.b.j.e.j.l.e.e.b.j.e.k.e.j.j.j.j.k.e.k.0.e.0.0.e.k.0.k.0.0.0.k.k.0.k.j.e.0.k.j.k.e.k.e.k.b.j.b.k.b.j.j.j.e.e.e.k.e.j", +".j.k.j.k.j.j.k.e.k.j.k.j.j.k.k.k.e.e.e.e.e.e.j.j.k.0.e.k.0.k.e.0.k.e.k.e.k.e.k.0.e.k.j.j.k.b.e.e.e.j.k.e.k.e.c.#.c.a.a.a.b.a.b.a.a.a.a.a.aQt.a.c.a.a.#.a.a.a.e.l.e.b.e.b.a.r.b.a.#.b.#.c.a.a.a.a.e.b.l.r.l.#.a.#.l.q.a.f.f.g.f.g.f.g.f.g.f.g.f.g.f.g.x.m.s.n.h.o.v.B.E.L.N.N.N.R.3.O.M.B.A.p.h.x.sQtQt.i.d.c.b.b.b.b.b.b.e.e.b.k.j.k.j.j.e.j.j.j.b.l.b.e.b.b.b.e.j.j.j.j.b.j.j.j.e.e.b.j.e.j.e.k.j.j.j.e.k.k.j.k.0.k.0.k.0.0.0.e.0.k.e.k.0.e.k.e.k.j.j.e.j.j.k.0.e.e.k.e.k.e.k.b.e.b.e.e.e.j.b.k", +".k.e.k.e.k.e.j.j.k.j.e.k.e.k.e.k.j.j.j.j.k.e.j.k.e.k.0.e.k.0.k.0.k.0.k.0.k.0.k.k.j.k.e.e.k.e.j.j.e.j.k.0.k.e.a.#.c.c.a.r.a.b.#.b.a.#.cQt.c.c.cQt.r.#.#.r.#.a.a.a.e.b.e.e.e.a.b.b.a.c.a.#.a.#.b.a.e.l.e.l.e.l.a.#.a.#.rQt.d.f.f.s.g.f.f.g.f.f.g.f.g.f.m.h.g.n.n.n.A.z.T.W.9#a.V.T.K.J.B.v.g.q.f.d.q.#Qt.c.c.f.c.#.r.e.e.e.b.e.k.k.j.j.e.j.j.j.b.j.b.e.b.e.l.e.e.e.e.k.j.e.k.e.j.e.e.j.e.e.e.e.j.b.k.j.k.k.k.j.k.j.0.k.0.k.0.k.k.0.k.0.0.e.k.k.0.k.k.e.j.k.k.e.j.e.e.k.e.e.j.e.e.j.b.e.e.j.b.k.e.k", +".j.j.j.e.j.j.e.k.j.e.j.j.j.j.k.j.k.j.k.j.j.j.k.j.0.k.k.j.k.j.e.e.e.j.e.e.b.l.j.e.e.j.k.j.e.j.e.e.e.e.l.e.b.e.e.e.a.#.c.a.#QtQtQt.#.#.cQtQt.iQtQt.#.#.#.#.#.#.#.a.c.a.cQt.a.c.a.c.#.a.b.a.b.a.a.#.e.l.r.l.r.l.#.l.#.a.q.cQtQt.f.i.dQtQt.cQtQt.cQt.x.g.g.x.g.w.p.o.B.M.U.4.1.N.I.z.D.v.h.x.gQt.q.d.cQt.b.e.e.e.b.e.e.j.e.j.j.j.j.j.e.k.k.e.j.e.j.e.e.e.b.b.r.e.b.e.j.j.j.e.j.k.j.e.j.e.t.j.j.k.k.k.e.k.j.k.j.k.k.j.k.j.k.j.e.k.j.k.k.0.k.0.k.e.0.e.j.k.e.e.e.k.k.e.e.j.j.e.e.e.b.e.e.e.e.j.e.e.b.e", +".j.j.e.e.e.e.j.j.j.j.j.j.k.j.j.j.e.j.j.e.j.k.j.j.0.j.0.j.e.e.k.e.j.e.e.l.t.e.e.j.k.k.j.j.e.e.b.e.l.b.e.e.e.j.b.e.a.c.r.c.#.cQtQt.#.c.#Qt.i.fQtQt.#.c.#.c.#.c.#.c.aQt.a.c.b.c.b.c.b.a.a.a.a.a.b.a.#.e.l.e.l.e.a.a.#Qt.c.q.c.iQt.gQt.cQtQt.cQt.cQt.q.g.q.g.g.g.y.A.E.Z.4.W.P.Q.o.n.u.w.x.f.d.f.d.f.b.r.e.b.b.e.j.e.b.j.e.e.k.b.k.e.k.j.j.j.e.e.j.e.e.e.e.l.e.a.e.e.e.k.j.k.j.j.j.j.j.e.j.b.e.k.e.k.j.k.k.j.k.j.k.j.k.k.j.k.k.j.j.j.0.e.k.k.e.k.j.k.e.e.b.e.b.e.b.e.k.b.j.b.l.b.e.r.l.b.e.e.b.l.e.e", +".j.e.j.j.j.e.k.j.e.e.e.k.j.j.k.j.k.j.k.j.k.j.j.0.j.e.0.j.k.j.e.j.e.j.e.e.e.l.e.e.e.e.e.l.b.e.l.e.l.l.l.b.e.e.e.j.a.r.a.c.c.#.f.#.c.q.#QtQtQtQt.i.#.c.q.c.#.c.q.#.r.a.r.a.c.#.c.a.#.a.b.a.b.a.#.a.e.l.r.l.r.a.#.#.c.qQtQt.i.gQt.gQt.f.cQt.cQt.cQt.g.f.g.g.x.w.A.I.T.W.2.E.B.A.v.m.h.m.f.iQt.f.d.d.b.b.e.j.e.j.j.k.j.e.j.e.k.e.k.e.k.j.k.b.j.j.e.j.e.b.b.b.b.b.a.e.e.e.e.e.e.b.e.e.e.e.e.j.k.j.k.k.e.k.j.k.k.k.j.k.k.j.k.k.j.k.e.k.k.0.k.e.0.j.e.k.b.e.e.b.e.e.b.e.j.j.j.e.e.e.a.e.b.l.e.b.l.e.b.e", +".j.e.j.e.j.j.j.k.j.j.k.j.j.k.e.j.j.j.j.j.j.e.j.j.0.0.k.j.j.e.e.e.j.b.j.j.j.e.l.e.l.j.l.e.l.e.l.b.l.r.e.b.e.e.j.j.a.#.a.c.a.a.c.c.#.#.cQtQtQtQtQt.c.#.c.#.a.c.c.c.a.c.a.c.a.r.a.r.a.b.a.a.#.a.c.a.c.#.a.a.a.a.cQt.#QtQt.i.f.f.g.g.f.i.fQt.f.d.i.d.f.f.g.m.w.w.B.E.Z.L.P.B.v.v.w.h.f.gQt.d.d.d.c.c.e.b.e.b.e.j.k.j.k.j.j.j.e.j.j.j.e.j.k.e.e.b.e.e.a.b.a.b.a.b.b.a.e.e.e.b.e.e.e.j.l.e.j.e.e.k.e.k.j.k.k.j.k.j.k.k.j.k.k.j.j.j.j.j.k.e.j.k.j.k.e.j.e.b.e.b.e.b.e.e.j.e.e.b.l.b.e.r.e.e.l.e.e.e.l.e", +".j.j.j.e.j.e.k.j.b.j.j.j.e.j.k.j.k.e.k.j.k.j.k.j.j.k.k.j.k.j.j.j.e.j.l.b.j.l.j.e.b.l.b.l.b.l.a.a.l.e.l.e.e.e.e.j.l.a.a.a.a.a.c.c.c.#.c.#.iQtQtQt.c.c.#.c.c.#.c.c.a.#.a.b.a.c.a.c.a.#.a.b.c.#.a.#.a.a.c.#.cQt.c.q.d.iQt.g.f.g.g.g.gQt.g.i.d.i.x.f.f.f.g.h.u.A.F.N.6.W.H.o.o.w.m.gQtQt.fQt.i.cQt.r.e.b.e.j.e.e.k.e.j.j.b.k.e.k.e.k.k.e.k.e.k.e.j.e.#.a.a.#.a.a.#.a.e.b.l.e.e.e.e.b.e.l.j.e.k.e.k.k.e.k.j.k.k.j.k.j.k.j.k.j.e.k.j.k.e.0.k.e.k.e.k.j.b.e.e.b.e.e.b.e.b.e.j.e.e.l.b.l.e.b.e.b.l.b.e.e", +".j.e.j.e.e.k.j.j.j.k.j.k.j.k.j.j.j.j.j.j.j.j.e.j.0.e.0.j.e.e.j.e.j.e.j.j.e.j.l.b.l.l.l.l.l.r.a.#.e.l.e.e.e.e.k.e.l.a.a.a.a.a.a.a.a.c.#Qt.cQt.iQt.c.q.c.c.q.c.a.c.a.c.a.r.a.bQt.b.a.b.a.#.a.a.b.cQt.cQt.c.c.#Qt.d.q.d.i.g.g.g.m.h.g.f.x.f.x.d.gQt.x.h.h.g.o.F.V#i.U.H.v.v.v.g.g.f.i.#.d.c.c.b.a.r.e.e.e.k.b.k.k.k.j.j.k.j.j.j.e.e.j.k.e.e.e.j.e.j.a.b.c.cQt.c.a.c.e.e.e.e.e.e.e.e.e.e.j.e.e.e.j.j.k.j.k.k.e.k.j.k.k.k.j.k.j.k.e.k.k.k.k.j.j.k.e.j.b.e.b.e.e.b.e.b.j.e.b.l.b.e.b.b.b.e.l.e.e.e.l.e", +".j.e.j.k.j.e.j.k.j.e.j.j.j.j.k.e.k.j.k.e.k.j.k.j.k.k.k.j.k.j.b.j.e.e.e.j.e.e.l.l.t.b.l.#.r.#.r.a.l.b.l.e.b.e.e.e.e.e.a.a.c.b.a.c.a.a.#.c.#QtQtQt.c.c.c.c.c.c.c.c.a.r.a.a.b.c.a.c.a.a.a.c.aQt.a.a.c.c.c.cQt.cQtQt.i.g.f.g.m.f.h.m.g.g.f.g.f.g.g.f.s.w.u.n.I.W.6#c.B.A.w.h.m.g.x.q.#Qt.c.#.a.e.b.e.e.b.j.j.j.k.e.0.j.j.e.k.k.e.k.j.k.j.k.e.b.j.e.b.a.a.q.c.#.c.#.a.b.a.b.a.r.a.a.b.l.e.l.e.j.e.e.k.e.k.j.k.j.k.e.k.j.k.j.j.j.j.e.k.e.k.e.k.e.j.k.e.e.b.e.b.e.e.b.e.e.b.l.e.e.l.b.l.e.b.e.b.l.b.e.b", +".j.e.e.e.e.j.e.e.j.j.k.j.k.e.j.j.j.j.j.j.j.j.j.j.0.j.0.j.j.j.j.j.l.e.j.l.j.e.e.b.l.r.l.l.a.r.#.r.b.l.e.e.e.b.e.j.l.e.a.b.a.a.r.a.a.c.c.#.cQtQtQt.c.c.c.c.a.c.a.cQt.a.a.r.a.a.r.a.r.a.b.a.r.a.a.aQt.cQt.c.c.#.f.c.i.f.g.m.h.m.m.w.h.p.g.s.g.x.s.g.x.p.n.v.E#.#i.N.G.z.n.m.g.hQt.qQt.#.c.a.a.#.e.r.e.e.e.j.e.k.0.0.j.j.e.e.k.j.j.j.k.e.k.e.k.e.e.e.a.c.a.#Qt.r.c.a.b.a.r.b.a.b.b.#.e.l.e.e.k.b.e.k.k.j.k.k.j.e.k.j.k.k.j.k.e.j.k.j.0.k.j.k.j.k.e.j.r.e.b.e.e.b.j.e.b.j.b.e.b.e.r.e.r.l.b.l.e.e.l.e", +".e.e.e.e.e.j.j.j.e.b.e.e.j.j.j.j.0.0.e.0.k.k.j.k.b.j.j.j.j.e.j.e.j.j.e.e.e.j.l.j.t.b.r.q.#.c.c.b.b.l.e.b.e.e.j.e.b.e.l.#.b.a.a.b.r.a.r.dQtQt.#.c.#.c.c.a.c.a.b.a.a.a.a.l.a.b.a.b.c.#.c.#.c.c.c.c.fQtQt.iQtQtQt.s.i.g.g.g.h.w.o.o.m.g.f.h.g.x.x.h.p.w.C.S.V.U.N.K.v.w.m.h.g.f.f.d.#Qt.a.a.b.e.a.e.e.k.e.k.j.k.e.e.k.k.k.k.j.j.k.j.e.j.e.e.l.e.a.b.#.c.#.#QtQtQtQt.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.j.k.j.j.j.k.e.j.e.j.k.e.j.j.e.e.e.j.e.j.e.e.e.b.e.e.e.b.e.b.e.b.t.e.l.b.l.e.b.l.a.#.a.a.#.a.#.a", +".e.e.b.e.e.b.e.j.j.e.k.b.e.e.e.b.k.e.k.k.j.k.j.j.t.e.e.e.j.e.e.e.j.j.j.e.j.e.j.e.t.l.r.#.#.c.a.a.l.b.j.e.j.e.j.e.e.l.e.b.a.a.r.a.a.r.c.#Qt.i.d.#.c.#.c.#.c.c.b.a.a.l.a.a.a.a.b.b.#.c.cQt.#.c.#.qQt.iQt.fQt.f.iQt.f.s.f.g.x.w.n.z.o.p.h.x.h.w.w.n.v.o.K.N#..U.Q.o.v.w.m.h.f.g.d.d.c.#.#.a.a.e.b.b.k.e.k.j.j.j.k.k.0.0.k.e.k.k.j.k.e.j.e.j.e.b.a.a.a.a.#.cQt.iQtQt.e.a.r.l.e.e.b.e.e.e.b.e.e.e.e.e.j.j.e.k.e.j.k.e.k.b.j.k.j.k.j.e.j.j.j.e.j.j.t.e.e.l.e.l.e.e.t.e.b.t.b.j.e.b.t.e.b.a.l.#.e.e.l.e", +".a.b.l.l.e.e.e.e.e.e.e.e.e.e.e.e.k.k.j.k.e.k.j.e.j.e.e.j.e.j.e.j.j.e.j.j.j.e.e.e.e.l.#.r.#Qt.a.r.l.e.l.b.e.b.e.e.b.l.e.a.a.r.a.a.q.a.#.cQtQt.#.cQt.#.c.#.c.a.a.a.a.r.#.l.b.a.b.a.#.c.a.c.cQt.c.cQt.#Qt.qQt.qQtQt.qQt.i.g.g.m.n.v.u.w.w.w.n.h.y.o.B.H.3#..W.E.A.n.u.w.m.f.g.d.dQt.r.a.a.b.b.l.e.e.j.j.j.e.k.k.b.k.k.k.0.k.j.k.e.e.j.j.e.l.e.l.e.a.a.a.a.c.c.#.d.#.r.e.b.e.b.l.b.e.a.e.b.e.e.e.e.e.j.k.j.k.j.k.e.j.e.k.j.e.k.e.e.b.e.e.b.e.b.e.b.e.l.e.e.j.l.b.e.b.l.e.b.l.e.b.e.b.a.l.b.l.e.b.l.b", +".l.l.e.l.b.l.b.l.b.l.r.l.e.b.e.e.e.j.e.e.k.j.j.j.e.j.e.t.e.e.l.j.e.j.j.e.j.j.e.t.l.l.r.q.#.a.a.b.l.b.l.e.e.e.k.e.e.a.b.a.a.c.a.b.r.#.cQtQtQt.#.cQt.#Qt.c.#.c.c.c.l.a.l.a.a.a.b.b.b.c.a.r.a.c.cQt.c.cQtQt.#.d.#Qt.q.c.f.i.g.h.v.z.o.v.o.n.v.v.o.A.N.4.8#i.T.o.p.n.w.m.f.gQt.f.c.c.#.c.b.l.b.e.b.e.k.j.k.k.j.j.k.j.j.0.k.j.k.j.j.e.j.j.j.j.j.e.e.e.a.l.a.q.c.#.iQt.e.b.l.r.e.b.e.e.e.b.l.e.e.e.e.e.j.j.e.k.e.j.k.b.j.e.k.j.k.e.j.j.b.e.e.e.e.e.l.e.e.b.e.b.e.e.l.e.b.e.b.b.e.r.l.b.#.a.c.#.c.a.c.a", +".a.#.a.a.a.a.r.a.a.a.a.a.a.a.a.#.l.b.e.e.e.e.j.e.j.b.j.e.j.e.j.j.e.j.j.j.j.j.e.j.b.r.r.#.a.a.e.b.l.e.l.b.l.b.e.e.b.l.e.a.b.#.r.c.a.#QtQt.f.d.c.#Qt.#Qt.cQt.c.#.c.a.a.a.a.b.a.b.b.a.b.r.b.b.b.b.a.c.c.c.cQt.cQt.c.f.#Qt.f.f.w.v.A.A.z.z.B.B.B.Q.S#i.U.W.N.E.A.n.x.s.g.f.f.d.cQt.c.a.e.b.b.e.e.j.j.e.j.j.e.j.k.e.k.e.0.k.k.j.e.b.j.e.e.e.j.l.e.e.e.a.b.a.r.c.i.d.#.r.e.b.e.a.e.b.e.b.e.b.e.e.e.e.e.j.k.j.j.k.j.e.k.e.j.j.j.e.j.j.e.e.l.e.e.l.b.b.b.l.e.l.e.e.b.e.b.a.#.a.b.l.a.r.a.a.a.a.a.a.#.a.a", +".a.a.a.a.a.a.a.#.r.l.r.l.r.#.r.r.#.c.#.a.a.e.e.e.e.j.e.j.e.j.e.j.j.j.j.e.j.e.j.l.a.r.q.r.a.#.l.j.l.b.l.e.e.j.e.e.e.l.e.a.a.c.a.a.c.cQt.f.fQtQt.c.#Qt.#Qt.c.#.c.#.l.a.l.a.c.a.b.a.e.b.a.e.l.b.#.b.a.aQt.c.c.c.c.cQt.c.f.f.g.n.A.F.B.B.B.C.I.E.1.U.W.L.N.H.H.o.w.h.f.gQt.i.cQt.a.a.e.#.e.l.e.k.b.e.k.j.k.e.j.k.e.k.0.k.0.k.b.j.j.e.j.j.j.j.e.e.l.e.e.e.a.a.c.#.dQt.b.e.#.e.r.e.e.l.b.e.e.e.e.e.e.e.j.j.e.k.e.k.j.k.j.k.j.j.k.b.j.e.e.e.e.b.b.e.a.e.e.e.b.l.b.e.l.e.#.b.a.r.a.r.a.#.cQt.cQt.c.cQt.c", +".a.#.r.a.#.r.a.r.a.#.r.#.r.r.r.#.#.#.#.a.#.a.e.l.e.l.j.b.t.e.e.e.j.e.j.e.j.b.j.e.a.#.#.#.r.a.e.e.e.l.e.b.j.e.j.b.e.e.b.a.a.b.cQt.r.cQt.f.f.fQt.c.#.#QtQt.#.d.#.c.c.#.c.c.a.c.r.c.b.e.b.e.b.l.b.e.b.#.a.a.#.a.a.#.dQt.x.q.w.u.z.F.F.I.B.K.N.W.4.W.H.M.M.M.I.A.n.p.s.i.f.fQtQt.c.#.b.e.e.b.j.b.k.0.e.k.j.k.j.j.j.j.k.0.e.k.k.e.e.j.e.j.e.j.e.e.e.e.b.e.b.b.r.cQt.c.#.a.e.b.l.e.b.e.b.e.a.e.e.e.e.e.j.k.j.j.k.j.e.k.e.j.j.j.k.j.k.j.b.a.b.e.a.b.b.a.b.l.e.e.l.b.#.a.c.r.a.b.a.b.a.#.c.c.c.c.c.c.c.c", +".#.r.a.r.l.r.#.r.#.r.r.r.r.r.#.r.x.q.q.#.r.#.l.b.l.b.j.e.j.e.t.e.j.j.b.j.e.t.e.e.a.r.#.q.#.#.l.j.l.b.l.e.j.e.j.e.e.l.e.a.#.cQt.c.#QtQt.f.i.fQt.c.#Qt.#Qt.#Qt.c.#.a.#.a.c.c.c.c.r.a.e.a.e.a.b.b.a.b.a.b.b.b.r.b.c.d.f.q.h.h.A.B.F.M.H.E.P.3.5.4.P.Q.Q.Q.Q.Q.J.A.u.g.gQtQt.c.aQt.c.b.e.b.e.k.e.k.k.k.b.j.j.j.k.j.k.0.k.0.k.j.k.k.b.j.j.j.l.e.l.e.a.e.b.l.b.a.cQt.c.a.r.a.r.e.r.e.b.e.e.e.e.e.e.e.e.e.k.e.k.e.j.k.j.k.j.k.j.e.k.e.j.e.e.e.b.e.l.e.a.e.r.b.b.r.a.#.b.#.b.a.b.#.b.#.a.c.cQt.cQt.cQt.c", +".e.l.b.e.b.e.e.e.l.l.b.l.b.a.r.aQt.iQtQt.i.#.#.#.l.l.l.e.l.e.e.e.e.k.l.j.e.e.l.l.#.d.q.r.a.l.b.b.e.j.e.j.j.b.e.r.l.e.b.c.c.d.c.d.#QtQt.i.g.g.iQt.c.#Qt.f.fQtQt.#.#.c.c.a.a.b.e.e.b.b.b.b.b.b.r.b.c.r.c.f.d.d.c.xQt.qQt.h.n.C.P.2.2.L.2#i#o.4.M.Q.P.E.M.T.F.A.w.m.f.f.g.d.f.c.r.b.l.b.e.r.e.r.l.e.b.k.k.j.e.j.j.b.k.j.k.e.k.j.k.j.e.e.e.e.e.e.e.e.b.e.b.a.r.c.a.c.r.a.b.a.b.a.e.a.e.b.b.e.e.e.e.e.e.e.e.e.e.j.j.e.e.k.e.k.j.j.k.j.j.j.e.j.e.e.b.e.e.l.e.b.e.b.e.b.l.b.r.e.b.e.b.eQt.a.b.a.b.e.b.e", +".r.b.b.e.a.b.b.e.l.b.l.l.l.a.a.#.#.#.qQt.#.#.c.#.l.b.l.b.e.r.e.e.k.j.j.b.j.l.b.l.r.r.r.a.#.l.b.e.k.b.e.b.j.b.e.b.b.l.a.c.c.dQt.f.#Qt.f.f.h.g.gQt.r.c.#.f.iQt.#Qt.c.#.c.a.a.b.l.b.b.b.b.b.b.b.b.b.cQt.c.d.d.d.d.d.gQt.d.g.h.D.N.6.6#h#h#i.3.M.E.B.B.I.E.K.B.A.u.m.m.f.gQt.dQt.b.a.b.b.a.e.a.e.r.e.e.k.j.j.k.j.k.j.k.e.k.j.k.j.k.k.b.e.b.e.b.e.b.b.l.e.e.e.a.c.#.c.a.b.a.r.l.b.a.b.e.e.e.e.e.e.e.e.e.e.e.e.e.j.e.e.k.j.j.k.e.k.e.j.k.j.k.e.k.j.e.j.e.b.e.b.a.b.a.e.r.e.a.b.a.e.#.e.#.a.b.e.b.a.b.b", +".e.e.l.b.e.e.l.e.b.l.l.r.lQt.a.a.a.a.r.#.#.#.#.r.#.l.a.e.l.b.e.e.e.e.j.e.j.l.e.#.r.q.#.a.a.b.a.e.b.e.j.e.e.e.b.b.c.cQtQt.i.d.f.q.qQt.i.f.i.g.gQt.#QtQt.f.i.fQtQt.#.c.c.c.a.c.b.e.b.b.b.b.b.b.b.rQt.b.cQt.c.d.f.q.g.s.w.v.A.D.R.1#k#o#h.W.H.B.o.B.A.o.z.z.B.z.o.p.w.h.m.f.gQt.d.#.a.b.r.e.b.l.e.e.j.k.e.k.e.k.j.k.j.k.j.k.k.k.j.k.e.e.e.e.e.e.e.e.e.r.e.b.b.a.c.a.r.a.b.a.b.b.e.e.e.b.e.e.e.e.e.e.e.e.e.e.e.j.j.e.j.j.j.j.k.j.k.j.e.k.j.j.j.k.e.j.e.b.e.e.e.e.e.e.a.e.b.e.b.b.b.e.a.b.e.a.b.e.a.e", +".e.e.b.e.b.e.b.e.l.l.e.l.e.a.a.#.a.c.a.#.c.a.c.c.l.l.e.l.b.a.b.e.j.j.l.e.l.e.b.a.r.c.r.#.a.b.b.e.e.e.e.e.b.b.b.#.cQtQt.dQt.q.f.f.cQtQtQt.f.i.g.fQtQtQt.fQtQtQtQt.c.#.#.c.c.a.b.b.a.b.b.b.b.b.a.b.l.b.c.d.f.d.f.g.u.n.h.u.o.B.N.9#i.2.Q.F.B.v.o.v.v.v.o.o.A.B.z.v.p.u.g.g.iQt.#.c.r.a.a.a.r.b.a.b.e.b.e.k.b.j.j.j.k.j.k.k.j.k.j.k.e.e.e.e.e.e.e.e.e.e.e.e.a.r.a.b.b.#.b.#.e.a.#.b.l.e.e.e.e.e.e.e.e.e.e.e.e.j.j.e.j.k.j.k.e.j.j.j.k.j.e.k.e.k.j.k.e.e.e.l.b.e.b.e.e.e.b.e.e.e.l.e.b.e.r.e.#.e.r.e", +".e.e.b.e.e.e.b.e.e.e.b.e.b.b.a.b.a.a.a.c.a.a.#.a.#.l.r.l.e.b.e.a.b.l.e.b.l.e.a.a.q.r.#.a.a.e.e.b.b.e.b.e.r.rQt.rQt.d.d.i.d.d.i.q.c.#QtQtQt.f.i.x.iQtQtQtQt.fQt.g.#.c.c.c.a.c.b.e.b.e.a.e.a.e.b.b.aQt.#QtQt.i.m.g.p.h.u.z.B.Q.W.U.H.F.z.v.v.p.w.p.w.w.h.v.z.B.B.C.m.g.i.fQtQt.c.#.a.a.#.a.a.a.e.a.e.j.j.e.k.k.e.k.k.k.j.k.j.k.k.j.k.j.j.k.j.j.e.j.e.e.e.l.b.b.b.a.a.b.a.b.b.b.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k.e.j.j.j.k.j.j.j.j.k.j.j.k.e.j.e.e.b.e.b.e.e.b.b.l.b.e.a.e.b.b.l.b.e.e.e.b.l.e", +".e.b.l.b.e.a.e.b.j.e.e.b.e.#.b.#.a.a.#.a.a.a.a.a.l.l.e.l.e.l.r.e.l.b.l.l.e.a.#.a.c.rQt.a.#.b.b.e.b.e.b.a.r.a.c.a.d.iQt.d.dQt.d.d.c.c.c.qQt.f.f.g.h.g.f.iQtQt.i.xQtQtQt.c.c.c.c.c.a.a.a.a.b.c.aQt.c.dQt.f.x.g.h.h.u.z.K.M.Y.Q.F.D.o.o.u.h.p.m.p.x.p.w.w.h.v.z.B.D.x.g.f.iQt.f.cQt.c.r.a.r.a.b.a.a.j.e.j.e.j.j.j.j.k.j.k.j.k.k.j.k.j.k.j.j.k.j.k.j.e.e.e.b.a.b.a.b.r.a.r.a.b.l.b.l.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.j.j.k.j.k.j.e.k.j.k.e.j.j.j.j.j.e.e.e.e.b.e.b.l.e.e.e.e.b.e.e.e.e.b.e.e.a.b.b.e", +".e.e.e.e.b.e.e.e.b.l.e.b.a.b.b.a.b.a.a.a.a.#.a.a.b.a.e.b.a.e.b.e.l.e.l.b.a.a.c.c.#.#.#.a.#.e.b.r.b.#.b.#.c.cQt.c.c.c.cQt.c.c.#.c.c.cQt.c.#.i.g.x.h.g.gQtQt.f.g.h.#Qt.c.d.c.c.r.c.r.c.c.c.c.c.c.c.d.f.f.f.u.o.y.z.Q.Q.S.J.J.C.o.v.h.p.w.x.h.x.q.g.s.w.w.w.v.A.C.B.i.g.fQt.d.a.a.b.a.a.a.a.a.a.a.a.e.b.l.e.e.e.e.j.j.k.k.k.j.k.j.k.j.j.k.j.j.k.j.j.e.e.e.e.b.r.a.b.a.b.a.e.a.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k.e.k.e.j.j.j.k.e.j.k.j.k.j.k.j.e.e.e.b.l.e.e.e.r.e.b.e.b.e.b.e.b.l.b.b.b.l.b.e", +".r.b.#.e.b.e.b.l.e.e.e.b.b.b.a.r.a.a.a.b.a.a.b.a.l.l.l.l.b.a.b.b.l.b.a.e.a.aQt.c.r.q.cQt.c.#.r.b.a.#.a.cQt.a.c.c.cQt.c.c.c.a.a.#.d.c.c.c.#.f.g.h.g.h.iQtQt.i.h.gQtQtQt.d.c.c.c.r.c.c.c.cQt.c.c.i.x.g.x.w.y.E.R.S.A.z.z.G.n.u.p.p.g.g.w.g.f.x.f.x.s.p.w.h.m.A.J.D.g.f.d.f.c.r.b.e.#.c.aQt.a.a.a.a.e.l.e.e.l.e.l.e.k.j.k.j.k.j.k.k.k.j.k.j.k.j.j.k.e.e.e.a.b.a.b.b.b.#.b.b.b.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.j.k.j.j.k.j.k.j.j.k.e.k.e.j.j.j.e.e.e.e.b.e.b.e.e.l.b.e.e.l.b.e.e.e.e.a.e.b.b.e", +".e.e.e.e.b.l.b.e.l.e.l.l.e.l.b.l.e.e.l.b.l.e.b.a.b.e.b.e.e.e.e.b.b.b.r.e.b.e.b.b.#.d.iQt.dQt.d.fQt.cQt.a.r.r.a.r.a.#.a.#.cQt.c.c.a.#.c.c.fQt.f.f.q.q.i.f.f.fQt.d.iQt.#.#.#.a.b.b.c.d.d.d.d.q.q.q.p.h.v.B.S.Z.E.o.w.g.m.f.m.i.h.i.g.fQt.g.f.f.g.f.g.g.p.w.o.o.z.J.gQt.a.b.r.b.c.c.a.a.a.a.b.a.b.l.j.j.j.j.j.k.k.j.k.j.k.k.j.k.k.j.k.j.k.k.j.k.k.j.j.k.e.e.e.b.a.b.#.a.a.l.b.e.j.j.e.e.l.e.e.e.j.e.e.e.j.e.j.e.j.e.j.e.e.e.e.e.e.e.j.j.j.j.k.k.j.k.e.j.e.j.e.b.l.j.b.e.b.l.b.e.b.l.b.e.e.b.l.l.l.e", +".e.l.b.l.e.e.l.e.b.l.b.e.e.l.e.l.e.l.e.l.b.l.c.a.b.a.b.b.l.r.l.b.#.a.a.a.b.b.#.b.iQt.iQt.i.f.d.c.c.a.c.#.a.b.a.b.#.b.b.b.c.c.b.b.c.aQt.c.d.f.d.f.s.g.g.i.g.i.gQt.p.h.fQt.d.d.d.d.r.c.d.g.f.s.w.g.g.v.J.R.M.F.o.p.i.m.i.i.f.f.f.fQt.xQt.q.i.dQt.g.f.g.w.n.p.o.B.A.g.dQt.r.a.r.b.rQt.a.r.a.a.b.a.a.e.e.j.j.e.k.j.k.e.k.j.k.k.j.k.j.k.k.j.k.k.j.k.k.k.j.e.e.e.a.b.a.a.l.b.l.e.e.e.k.l.j.e.j.l.j.e.j.t.e.j.e.j.e.j.e.j.e.j.j.j.j.j.e.j.j.e.k.e.j.j.j.j.j.k.j.e.e.j.e.e.e.e.e.b.e.e.e.j.j.l.l.b.e.b.l", +".e.e.e.e.e.e.b.b.l.e.l.e.b.l.r.l.b.l.e.l.a.a.#.c.c.#.c.aQt.c.c.c.cQt.cQt.c.c.cQt.#Qt.c.f.cQt.cQt.b.b.b.e.b.b.b.e.b.l.r.a.e.b.a.b.#.a.c.c.c.dQt.f.g.h.w.h.h.g.h.i.v.p.h.h.i.f.x.x.i.q.f.g.h.h.u.o.o.z.F.B.J.v.s.h.f.f.f.f.i.f.i.f.d.dQt.fQt.f.g.d.g.f.p.h.n.A.D.J.s.f.c.b.#.b.a.c.a.a.a.a.b.a.l.b.j.e.j.e.k.j.k.k.k.j.k.j.k.k.j.k.j.k.k.j.k.k.j.k.j.e.e.e.e.b.a.b.a.a.a.e.j.e.j.j.e.e.l.j.e.j.e.j.e.e.e.j.e.j.e.j.e.j.e.e.e.e.j.e.j.j.j.j.k.k.j.k.e.j.j.j.j.e.b.e.e.e.e.b.e.b.e.b.l.e.e.l.e.l.e.e", +".b.e.e.b.e.e.a.e.a.a.a.a.a.a.a.a.l.e.c.#.c.b.c.b.c.c.d.f.d.d.d.f.#.d.#Qt.#Qt.iQt.q.c.q.a.c.#.r.b.e.e.e.b.e.e.b.e.b.e.e.e.b.a.r.b.a.a.a.cQt.f.d.f.m.p.v.u.v.h.h.h.o.u.h.h.f.g.f.h.x.m.h.h.v.y.J.F.J.C.y.n.h.x.x.q.i.fQtQt.dQt.dQt.cQt.f.f.i.qQt.f.f.g.s.w.n.C.B.J.w.f.i.c.a.#.b.c.aQt.b.a.l.b.a.a.j.e.j.e.j.k.j.k.j.k.k.k.j.k.k.j.k.k.j.k.j.k.j.k.j.k.e.e.r.e.b.l.a.l.a.e.l.e.k.j.e.j.e.j.e.j.e.j.l.e.j.e.j.e.j.e.j.e.j.j.j.e.j.e.j.j.e.j.e.j.j.k.e.k.j.j.k.e.j.e.e.e.e.e.e.e.l.b.e.l.b.e.l.e.l.e", +".a.a.a.a.a.a.a.#.b.a.#.b.a.a.#.c.#.aQt.c.c.c.c.c.c.c.f.#QtQtQt.cQt.qQtQtQt.#Qt.c.cQt.c.b.#.b.r.r.e.e.b.e.j.e.j.e.e.e.e.e.#.b.a.b.a.r.c.c.dQt.d.g.h.h.o.o.v.u.v.v.y.u.h.m.i.g.w.g.h.u.o.z.J.J.G.A.u.p.p.h.h.f.d.r.f.d.f.dQt.dQt.d.d.dQt.f.d.gQt.g.f.g.w.s.n.A.z.F.p.i.d.d.b.a.cQt.b.a.a.a.b.a.e.a.e.b.l.e.e.e.j.e.k.j.k.j.k.j.k.k.j.k.k.j.k.k.j.k.j.e.e.e.e.b.a.r.a.a.a.j.e.e.j.k.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.e.j.e.j.e.j.j.j.k.j.k.k.j.k.j.j.j.j.e.e.e.e.e.e.e.e.r.e.b.a.a.a.a.a.a.b.a", +".b.a.a.a.#.b.a.aQt.c.a.c.a.c.c.c.b.c.c.cQt.d.i.d.i.dQt.dQt.dQtQt.c.c.c.cQt.cQt.c.#.a.a.#.b.b.b.e.k.e.j.k.e.k.e.k.e.t.b.e.b.b.a.r.a.a.a.c.d.f.f.f.x.p.u.A.C.v.v.A.v.A.u.h.h.v.v.C.F.F.F.J.J.y.u.u.g.g.g.i.gQtQt.d.i.dQtQt.d.d.d.i.dQt.d.i.f.d.f.d.f.g.x.w.p.A.J.F.p.wQt.f.c.r.c.c.a.#.a.b.#.a.a.a.e.l.e.e.e.e.e.j.j.k.k.j.k.k.j.k.j.k.j.k.k.j.k.k.j.k.e.e.e.l.b.e.a.l.a.e.e.e.j.j.e.j.e.j.e.j.e.j.e.j.e.e.e.e.j.e.j.e.j.e.j.e.j.e.j.j.e.k.e.k.e.k.e.j.j.j.j.k.e.e.e.e.e.b.l.e.e.e.a.b.a.a.r.a.a.a", +".a.a.a.a.a.a.#.a.c.cQt.cQt.cQt.c.c.c.fQt.f.fQt.f.c.q.c.#.#.#.#.c.a.r.a.b.a.b.a.b.e.b.e.b.e.b.e.b.k.0.k.0.k.k.0.k.j.e.e.j.l.b.e.b.aQt.c.c.dQtQt.x.g.g.v.v.v.v.z.z.E.K.J.F.B.B.T.P.2.S.J.C.u.w.h.i.m.g.f.g.c.cQt.i.d.d.f.d.d.c.d.d.d.d.g.dQt.fQt.g.d.g.x.n.p.A.J.F.v.p.f.d.c.a.aQt.a.a.c.#.a.b.a.b.a.a.b.e.e.b.j.e.k.j.k.k.j.k.k.j.k.k.j.k.j.k.j.k.j.e.e.e.e.b.a.b.#.a.b.j.l.e.k.j.e.j.e.j.e.j.e.j.e.j.e.t.e.j.e.j.j.e.j.e.j.e.j.e.j.j.j.j.j.k.k.j.k.j.j.e.j.j.j.e.e.b.e.e.b.b.e.b.#.a.a.b.a.a.b.a", +".l.a.l.a.#.a.a.aQt.c.c.c.c.c.c.c.fQt.dQt.d.i.dQt.#.c.a.a.a.a.a.c.b.b.e.e.b.e.b.e.b.e.e.e.b.b.j.b.0.e.0.e.0.e.0.e.j.e.j.e.e.b.a.b.a.a.c.c.d.i.d.f.f.g.h.o.v.v.y.z.Z.Y.R.R.R.Y.U#c.H.F.C.v.u.g.h.x.f.f.dQtQtQt.#.#.d.d.d.d.r.c.r.dQt.dQt.d.dQt.dQt.dQt.h.s.w.o.B.J.z.v.h.i.c.#.a.c.a.#.a.a.a.a.a.l.b.l.a.b.e.b.b.j.j.k.k.j.k.j.k.k.j.k.j.k.k.j.k.k.j.k.e.e.e.b.r.l.a.l.a.e.e.e.j.k.e.j.e.j.e.j.e.j.e.j.e.e.e.e.j.e.j.j.e.j.e.j.e.j.j.e.j.e.k.e.k.e.k.e.j.e.j.j.e.j.e.a.e.b.e.l.e.e.a.b.#.a.a.a.#.a", +".c.q.a.c.a.#.q.cQtQt.iQt.#.iQtQtQt.iQtQt.#.c.cQt.b.l.r.e.b.b.b.e.e.b.j.e.j.e.e.e.k.j.e.k.k.e.k.e.k.k.k.k.k.k.k.k.k.j.j.b.b.a.b.b.a.#.a.q.cQt.d.i.i.s.w.u.o.n.h.o.M.M.2#c.8#p.U.S.A.y.u.w.h.x.x.g.f.f.d.d.c.c.c.cQt.cQt.#.dQt.d.f.c.q.c.cQt.c.cQt.c.i.f.x.m.p.y.A.z.C.o.h.d.r.c.#.c.c.b.a.b.c.c.d.a.a.b.a.e.e.e.e.j.j.j.k.j.k.j.j.e.e.e.e.e.e.e.e.e.l.e.#.a.a.c.c.a.a.a.a.e.e.e.e.j.e.j.e.e.e.e.e.j.e.j.j.j.j.e.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.j.e.e.e.e.e.e.e.e.e.e.e.e.e.b.a.b.l.e.a.b.a.r.a.c", +".#.c.c.q.c.c.#.c.qQt.#.fQt.d.#.iQtQtQt.q.cQt.c.c.b.e.b.e.e.e.e.b.k.e.k.b.j.b.k.b.0.e.0.k.0.k.e.k.0.e.0.e.0.e.0.e.j.e.e.e.l.r.c.c.b.a.a.cQt.f.f.g.m.h.h.v.B.F.F.E#i#o.8#c.P.H.F.Q.C.A.v.h.g.s.x.xQtQt.d.iQt.c.c.cQtQt.f.#.d.f.d.d.a.a.a.a.c.c.c.cQt.d.d.g.x.w.u.y.z.z.o.u.hQt.f.d.#.f.c.#.a.c.cQt.l.a.a.a.e.e.e.e.k.j.k.j.k.k.j.0.e.e.e.e.e.e.e.e.e.e.e.a.a.c.b.c.#.a.c.e.e.e.e.e.e.e.e.e.j.j.j.j.e.e.j.e.e.e.j.e.j.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.e.e.e.e.e.e.e.e.e.b.e.e.b.a.b.r.l.b.a.aQt.a.c.c", +".c.q.c.#.c.q.c.#Qt.dQt.#.d.iQtQtQt.q.c.c.c.c.b.l.b.a.e.b.j.e.j.j.e.b.j.e.j.j.j.j.k.k.k.e.k.k.0.k.e.k.k.k.k.k.k.k.j.j.b.b.a.c.a.c.a.aQt.c.f.f.g.x.g.v.B.F.P.V#o#q#o.1.S.F.A.v.y.v.A.u.u.u.h.g.x.f.f.dQt.d.dQt.c.c.#.#.c.#.c.c.c.c.c.a.c.c.b.r.b.a.c.fQt.f.h.g.n.p.A.B.z.A.p.x.f.f.dQt.#.c.a.c.c.d.a.a.b.a.e.e.e.e.j.0.j.k.j.k.j.j.e.e.e.e.e.e.e.e.j.l.e.e.a.b.a.c.a.a.b.e.a.e.e.e.e.t.e.j.e.e.e.j.e.l.j.e.j.j.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.j.j.e.e.e.e.e.e.e.e.e.j.b.e.e.b.l.b.a.a.a.r.a.c.c.c", +"QtQtQt.iQtQtQt.fQt.q.d.i.#Qt.c.i.c.#.cQt.c.e.a.b.e.e.e.e.e.e.e.j.j.j.j.b.k.j.j.j.0.e.k.0.e.k.e.k.k.j.e.e.k.b.j.j.e.e.l.e.bQt.dQt.r.#.d.g.q.h.s.n.o.F.Z.1#i#d#r#r.Y.B.v.u.u.u.h.g.h.u.v.u.h.h.h.xQtQt.d.iQt.c.c.cQt.#.c.c.c.c.d.#.a.a.#.b.e.a.b.#.c.a.f.d.x.x.x.p.v.C.z.z.v.v.p.w.f.gQt.c.#.c.a.c.a.a.a.e.e.e.e.e.j.j.k.j.k.j.k.j.j.j.k.j.j.k.j.j.e.j.l.e.b.a.a.b.a.a.c.e.e.e.e.e.l.e.e.e.j.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.e.e.e.e.e.e.e.e.e.e.l.e.e.a.b.b.a.b.a.c.cQt.c.c", +"Qt.xQt.f.f.g.f.f.g.fQt.iQt.dQtQt.c.q.c.a.b.b.b.e.e.r.e.e.j.e.e.e.b.j.e.j.e.b.j.b.k.0.k.k.0.k.0.e.e.e.j.e.b.k.j.e.e.b.b.a.b.c.r.d.d.f.x.x.s.n.o.B.N.4.9#o#j#f.6.X.D.z.p.h.hQtQtQt.g.h.o.y.v.p.x.f.f.d.dQt.d.c.a.c.r.a.#.a.c.a.b.a.b.a.b.a.b.b.b.b.a.c.c.d.d.f.x.x.p.v.u.o.y.v.o.y.h.h.f.#.c.c.c.c.a.a.b.e.l.e.e.e.k.e.j.j.j.e.k.j.j.j.e.j.e.e.j.j.e.e.e.a.a.b.a.b.a.l.b.l.b.e.e.e.j.e.j.j.e.e.j.j.e.j.e.j.e.j.e.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.j.e.e.e.e.e.e.e.b.e.b.e.b.b.a.e.#.a.cQt.c.c.c.d.d", +".f.f.f.g.f.f.g.iQtQt.gQtQt.qQt.q.c.c.c.a.b.e.e.e.e.e.e.e.e.j.r.e.j.j.j.e.e.k.e.k.e.k.0.e.k.e.k.k.e.j.b.j.e.j.e.b.e.e.b.b.#.d.d.f.q.x.x.w.v.I.M#c.U#i#p.8#a.U.P.D.z.v.v.g.fQtQtQt.h.h.p.A.v.p.g.x.fQt.dQt.f.c.c.c.#.#.a.a.c.#.b.a.e.e.e.e.b.e.e.b.r.b.#.a.f.d.d.f.x.h.h.n.u.o.C.B.u.p.fQtQt.c.cQt.a.a.a.b.e.e.e.e.j.j.k.j.k.j.j.k.e.e.e.e.e.e.e.e.e.j.l.b.a.a.b.a.a.a.c.e.e.e.e.e.j.e.j.e.j.e.j.j.j.j.j.e.j.e.t.e.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.e.e.e.e.e.e.e.b.e.e.l.e.e.e.b.a.b.r.a.cQt.c.d.fQt", +".x.m.x.g.x.g.f.x.iQtQt.d.#.d.c.c.c.a.r.b.b.e.j.e.e.b.e.b.e.e.j.e.b.j.b.e.j.b.e.j.k.0.e.k.0.k.0.e.j.b.b.e.b.j.e.j.e.a.a.c.d.f.d.f.h.s.v.B.Q.Z.1#h.2#i.9.U.Q.B.v.h.y.o.g.i.fQt.d.f.d.i.p.y.z.v.m.x.i.dQt.dQt.c.c.c.r.a.a.a.a.b.a.e.b.b.e.e.e.e.e.e.r.a.r.r.c.b.d.d.x.x.x.g.v.o.D.J.D.A.gQt.i.#.c.c.a.a.b.l.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.l.e.a.#.b.c.a.b.l.a.e.b.j.e.k.e.j.e.j.e.j.e.e.e.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.e.e.e.e.e.e.b.e.l.b.e.e.r.l.b.e.aQt.c.cQt.d.iQt.f", +".x.f.g.f.h.f.f.f.cQt.c.#.f.#Qt.d.a.c.e.b.e.e.e.b.e.b.e.e.j.e.b.e.j.j.e.k.e.k.e.k.e.k.0.k.k.e.k.e.j.b.e.e.e.e.b.b.b.b.bQt.d.d.g.q.n.u.A.N.4#o.3.L.6#c.2.T.D.p.x.g.g.p.u.g.f.q.f.q.d.f.g.y.A.A.w.f.f.dQtQt.d.c.c.c.r.#.l.a.#.a.e.b.e.e.e.e.j.b.e.e.r.r.r.bQt.rQt.r.q.f.f.p.h.v.z.D.J.C.u.iQt.c.c.b.#.a.a.b.e.e.e.e.e.e.e.e.j.e.e.e.e.e.e.e.e.e.e.e.j.j.e.b.a.a.a.b.a.a.a.e.e.e.k.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.j.e.e.e.e.e.b.e.b.l.b.e.e.e.b.a.eQt.d.i.d.i.f.f.g", +"Qt.fQt.dQt.cQt.d.#.a.#.a.a.a.a.b.a.a.a.a.b.a.b.a.e.l.e.e.b.e.k.b.e.b.j.b.e.b.j.b.e.l.b.e.e.b.r.e.e.r.r.c.f.d.c.#.b.b.d.d.h.h.h.v.F.N#i#j#d#h.2.1.Z.J.A.h.h.m.x.xQt.h.p.u.p.fQt.c.#.d.i.g.o.C.C.v.f.i.d.c.l.#.aQt.c.a.a.a.b.l.e.l.e.j.k.k.e.e.j.e.e.e.e.e.e.b.b.b.b.r.d.x.w.h.o.C.F.K.D.h.gQt.q.aQt.c.c.a.a.b.b.c.e.e.j.e.j.e.e.e.j.j.j.j.j.j.j.j.b.l.a.a.c.b.c.b.l.e.e.e.e.j.k.j.j.j.j.j.k.j.k.j.j.j.j.j.j.j.j.j.e.j.e.j.e.e.e.e.j.e.j.e.j.j.j.e.j.e.e.l.a.a.a.r.a.c.c.cQt.f.d.f.g.i.f.f.f.f.s.f", +"Qt.d.i.c.cQt.c.c.a.a.a.a.a.l.a.a.a.a.r.a.a.#.a.a.l.b.l.e.j.e.e.e.j.b.j.b.j.b.j.b.j.j.e.b.b.r.b.r.e.r.c.f.d.d.r.r.d.f.d.f.g.v.B.S#c#s#t#t#g#h.V.S.J.y.u.u.w.h.g.x.i.m.p.v.h.g.d.c.c.#.f.g.y.z.B.v.f.fQtQt.a.b.a.b.c.c.b.a.a.b.e.e.e.e.j.j.j.e.j.r.e.b.e.r.e.b.#.c.#.c.f.f.g.n.v.o.G.F.z.v.h.fQt.#.c.#.c.a.c.a.b.b.e.j.e.j.j.j.j.e.j.j.j.j.j.j.e.j.e.e.e.c.b.a.c.a.e.t.l.j.e.j.j.j.j.k.e.k.e.j.e.k.e.j.e.j.e.j.e.j.j.e.j.e.j.j.j.e.j.j.j.b.j.e.e.j.e.l.b.e.a.r.c.aQt.c.c.i.dQt.gQtQtQt.iQt.iQtQtQt", +".a.a.a.a.#.a.a.#.a.#.a.#.a.#.a.a.a.b.a.a.b.a.b.a.e.e.e.e.e.b.e.e.b.e.b.e.b.e.b.e.e.j.e.e.r.e.r.e.#.c.d.q.x.x.x.w.q.x.h.v.z.F.S.H.X#i#p#o.O.N.E.D.v.u.u.v.h.h.x.h.i.g.g.p.h.g.g.d.c.q.f.x.w.C.z.z.g.gQt.c.aQt.b.aQt.a.c.a.a.e.l.e.e.k.j.k.e.e.j.j.e.e.e.e.e.b.b.b.b.c.dQt.x.h.u.v.J.G.B.v.p.w.g.f.#.c.c.a.b.a.e.l.e.e.j.e.j.j.j.j.e.e.e.e.e.j.e.j.b.l.a.a.c.b.c.b.l.l.e.e.j.e.e.k.j.j.k.j.k.j.k.j.j.j.j.j.j.j.j.j.e.j.e.j.e.e.j.e.e.e.l.e.e.l.b.l.e.e.l.a.a.a.c.#.c.cQt.cQt.d.d.d.f.c.d.c.d.cQt.c", +".b.b.b.b.b.b.b.b.c.a.c.a.a.a.a.b.a.c.aQt.c.c.#.c.a.a.#.a.b.b.r.b.j.e.e.e.e.e.e.e.b.e.b.r.r.r.#.d.q.i.m.w.w.h.g.x.p.o.J.Q.M.F.B.C.C.D.F.I.G.D.C.u.z.v.u.p.h.h.g.g.f.m.g.h.g.g.fQt.#.dQt.f.g.o.C.G.h.g.f.q.#.c.b.c.c.r.a.r.a.l.e.e.j.e.e.j.j.e.e.j.e.b.e.j.b.b.r.bQt.c.f.f.h.g.h.h.D.z.o.v.o.v.u.hQtQt.c.a.a.a.e.e.e.e.l.e.e.e.b.e.j.j.e.j.e.e.j.e.e.e.b.a.b.a.c.a.e.t.e.j.e.e.e.j.j.j.k.e.j.j.j.j.j.e.j.e.j.e.j.e.j.e.j.e.j.j.e.j.t.e.e.j.e.l.e.e.l.b.a.a.bQt.c.c.c.a.f.d.f.d.i.c.r.b.#.b.#.b.r.r", +".e.e.l.e.b.l.b.e.l.b.b.b.b.b.a.r.a.r.a.c.b.a.r.a.a.b.a.b.a.b.r.r.b.e.b.b.r.r.b.r.b.r.c.f.f.x.x.h.m.h.p.v.A.o.A.z.E.F.F.F.z.y.v.u.u.v.v.C.z.v.p.p.A.u.h.u.h.g.h.h.f.f.i.g.g.m.g.fQt.iQt.g.g.v.G.z.o.p.iQtQt.cQt.c.c.a.c.a.b.b.l.e.b.j.j.k.e.e.j.e.b.j.e.e.e.r.b.b.c.a.cQt.f.x.m.h.p.v.v.v.v.o.v.v.f.iQt.c.a.b.e.e.b.l.b.e.a.e.l.e.b.l.e.l.e.e.l.e.l.b.a.b.a.a.c.c.l.e.e.j.e.e.e.e.j.j.j.k.j.j.k.j.j.j.j.j.j.j.j.j.e.j.e.j.e.e.e.e.e.l.e.l.a.a.a.a.a.a.a.r.c.c.c.c.c.c.c.a.c.a.cQt.e.b.e.b.e.r.e.e", +".e.b.e.b.e.e.e.e.b.#.e.a.b.a.e.b.aQt.b.c.a.c.a.r.#.c.a.b.r.c.r.c.c.c.c.a.c.a.c.a.d.g.f.h.h.n.p.o.v.z.K.E.Q.L.W.L.F.J.C.v.u.u.y.p.v.p.u.v.n.h.g.h.g.g.g.g.g.m.x.g.g.f.f.g.p.g.g.gQtQt.d.d.g.h.y.G.y.u.w.iQtQt.c.r.cQt.b.a.a.l.e.e.e.j.b.k.j.j.e.j.e.e.e.j.e.b.r.b.c.c.c.fQt.f.x.x.m.p.h.o.p.v.o.o.g.i.f.d.c.c.b.b.a.b.a.b.a.b.b.a.e.e.e.b.l.b.e.b.e.e.b.a.a.r.a.c.j.l.j.e.j.e.e.e.e.k.e.k.e.k.e.j.e.j.e.j.e.j.e.j.j.e.e.e.j.l.j.l.e.e.e.b.a.r.a.b.#.b.c.aQt.c.c.d.d.f.rQt.r.#.b.r.e.b.e.b.e.e.b.e", +".r.r.b.r.b.r.b.b.b.b.a.b.a.b.a.b.c.c.c.cQt.c.c.c.c.c.c.c.c.d.f.d.f.q.x.q.g.q.f.x.g.n.p.o.A.D.I.E.T.U#a.8.7.U.P.C.v.u.v.p.p.g.p.p.h.g.w.g.g.f.f.x.iQtQt.s.i.fQtQt.f.f.f.q.i.g.g.hQtQt.c.cQt.s.u.o.C.A.h.sQt.f.c.rQt.c.a.#.b.e.j.l.e.e.j.k.k.b.j.e.e.j.e.e.e.b.r.b.aQt.c.#.d.f.f.f.f.x.x.h.o.v.v.o.u.n.g.f.f.c.c.c.a.c.b.c.a.a.b.b.e.l.e.e.e.e.l.e.l.b.a.a.b.a.c.c.l.e.j.e.j.e.e.e.k.j.k.j.j.k.j.j.j.j.j.j.j.j.j.j.e.l.j.e.e.e.e.e.l.e.a.a.e.a.a.a.a.c.b.c.c.c.c.c.f.d.r.a.b.b.a.r.e.b.b.b.b.b.b.b", +".b.a.#.b.b.r.r.c.r.l.b.e.b.l.r.e.c.c.c.c.c.cQt.c.cQt.c.r.c.f.d.d.x.f.x.x.x.h.x.h.u.o.z.F.T.W.1#i.1.8#i.X.R.P.T.C.u.u.p.p.h.g.g.g.x.h.g.fQt.f.f.fQt.#.dQtQtQt.#Qt.q.f.f.f.i.g.g.w.i.f.i.c.f.g.n.A.y.y.v.g.s.d.c.c.c.c.c.a.a.e.l.e.e.e.j.e.k.e.e.j.j.b.j.e.b.b.b.b.c.#.cQt.d.d.g.q.d.i.x.w.p.p.v.v.o.v.h.g.q.c.d.d.b.c.a.c.b.a.b.a.e.b.e.a.e.a.e.b.e.e.a.b.a.r.a.c.j.l.e.j.e.e.e.e.k.e.j.j.j.j.j.e.j.j.e.j.e.j.e.j.e.e.e.l.e.t.e.l.b.a.l.b.a.a.b.a.b.c.#.c.c.c.c.c.r.r.c.rQt.b.r.e.a.#.b.#.a.b.a.b", +".e.b.e.l.b.l.b.e.a.cQt.c.c.c.cQtQtQt.iQtQt.dQt.d.x.x.f.gQtQt.q.#.h.p.n.p.o.o.I.E.Q.Y.W.W.Z.N.E.J.I.Y#a.1.L.N.C.g.g.g.g.f.i.f.s.f.i.#.iQt.c.q.c.c.c.c.a.cQt.#Qt.q.#.q.#.#.cQtQtQt.g.gQt.d.dQt.s.g.n.n.y.o.h.f.d.#.c.a.a.b.l.e.e.j.b.e.e.e.e.e.b.e.b.e.e.e.b.e.b.l.b.b.a.b.#.c.c.d.iQtQt.f.x.m.h.w.o.v.z.o.n.u.p.hQt.c.a.a.l.b.c.d.e.l.e.e.e.e.e.l.a.a.a.a.a.b.b.b.j.e.j.j.j.j.j.j.j.j.j.j.j.j.j.j.k.e.k.j.j.k.j.j.j.j.j.j.e.e.l.b.r.a.a.a.c.r.c.d.#.a.a.a.#.c.c.c.cQt.c.c.cQt.c.c.#.b.e.e.e.b.e.b", +".b.j.l.b.e.b.b.eQt.a.c.cQt.c.c.d.c.c.c.d.d.d.d.cQt.d.f.f.m.h.p.u.A.C.D.F.E.P.2#c.M.Q.F.B.z.o.z.D.T.O#d.U.R.F.p.f.g.iQtQtQtQtQtQt.cQt.dQt.#.c.c.c.c.#.c.c.#.c.#.d.a.#.c.#.c.iQtQt.iQtQt.c.f.d.f.m.y.o.y.n.p.m.d.d.#.#.a.a.b.e.e.e.b.e.b.e.r.e.b.e.e.e.e.e.e.e.b.e.a.b.b.b.b.c.d.c.c.#.d.f.i.x.g.h.v.o.v.o.o.y.o.u.f.f.c.a.a.c.c.c.e.e.a.e.b.l.b.e.r.a.l.a.b.c.e.a.e.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.k.j.j.j.j.j.j.j.j.j.j.j.e.a.l.a.#.a.a.c.c.c.r.a.#.r.c.c.dQt.fQt.d.#.f.#QtQt.d.a.b.e.b.b.b.e.b", +".e.b.e.e.b.a.r.b.e.a.r.a.c.cQt.c.#.c.c.d.x.x.s.s.x.i.u.v.C.B.E.K.1.2.X.Y.S.H.Q.Q.o.v.u.p.p.n.o.z.R#o#q#h.F.v.hQtQtQtQtQtQtQt.c.c.c.cQt.c.c.c.c.c.b.b.a.c.c.c.c.#.a.a.#.c.c.c.c.#.i.f.i.d.cQtQt.i.p.u.n.v.p.x.g.d.a.a.b.a.a.e.b.e.e.e.e.e.l.e.e.e.#.e.e.e.e.e.e.e.e.a.a.b.a.r.r.c.c.c.f.d.f.f.h.x.g.h.h.u.v.o.y.z.p.iQt.c.c.c.a.r.l.e.e.e.l.e.e.e.a.a.a.a.a.a.b.b.j.l.e.e.e.e.e.e.e.e.j.e.j.e.e.e.e.e.e.e.e.e.e.e.j.e.e.l.e.a.b.a.a.l.a.a.rQt.c.d.#.d.#Qt.dQt.fQt.iQt.iQt.#.f.#.q.b.r.e.b.e.r.e.r", +".b.b.r.b.r.r.b.b.#.b.a.bQt.d.d.cQt.d.f.x.h.p.v.C.u.A.C.J.H.P.M.N.T.T.I.z.y.u.v.p.f.f.x.m.w.h.v.z.2#p#i.2.B.h.x.dQtQtQt.c.c.c.c.c.a.c.a.c.b.c.a.a.e.a.b.b.a.#Qt.c.a.a.a.#.a.#.c.cQt.dQt.iQtQt.gQt.g.m.p.h.g.g.s.d.c.c.a.b.a.b.b.e.e.e.e.b.b.e.e.e.e.e.e.e.e.e.e.b.e.e.r.e.a.b.b.b.c.c.cQt.f.f.x.x.f.g.g.m.h.v.v.C.v.n.g.fQt.c.a.l.b.c.a.c.b.c.a.c.l.a.l.a.b.a.e.a.e.e.t.e.t.e.t.e.t.e.l.e.e.e.t.e.e.e.e.e.e.e.e.e.e.e.e.e.a.b.a.a.a.c.#.a.#.cQtQt.f.f.f.g.g.g.f.f.iQt.#.i.dQtQtQt.b.c.b.r.r.e.b.b", +".c.#.c.cQt.d.f.dQt.d.i.d.dQt.x.f.g.p.v.y.B.Q.M.X.2.2.Q.K.C.u.p.h.p.p.h.g.x.f.q.f.x.q.dQt.f.w.o.B#.#..S.D.hQtQt.cQtQt.#.c.a.b.e.b.b.r.b.a.r.e.b.r.e.e.e.a.#.r.#.c.a.a.b.a.b.c.c.c.#Qt.fQtQt.gQtQt.f.i.g.i.i.g.m.iQt.#.c.a.b.l.b.a.e.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.a.b.l.b.a.b.b.c.c.d.d.x.f.d.#.g.g.h.p.v.o.z.o.p.xQt.#.a.a.a.b.a.b.a.b.a.a.a.r.a.a.a.r.b.b.e.e.e.e.e.e.e.e.e.e.e.l.e.e.e.e.e.e.e.e.e.b.e.a.e.l.a.r.a.c.c.c.c.#.cQtQtQtQtQt.x.f.h.g.x.m.x.x.f.f.xQtQt.dQt.dQt.d.c.d.f.dQt.#", +".d.d.f.d.d.q.f.q.m.g.g.g.g.h.h.n.C.z.F.S.Y.N.L.L.G.D.v.p.h.i.fQt.g.f.f.x.d.dQt.#.f.g.q.i.f.p.C.E#..X.z.h.fQt.f.c.b.c.a.b.r.e.e.e.e.l.e.e.e.e.e.e.e.b.e.e.b.c.a.c.a.b.a.c.c.c.a.c.c.iQt.g.iQtQt.d.i.f.i.i.i.g.i.gQt.c.c.c.a.b.e.b.e.e.e.e.a.e.e.e.e.e.e.e.e.e.e.e.b.e.e.e.#.b.b.b.e.a.r.b.c.d.d.dQtQt.d.f.h.g.p.u.o.C.o.p.gQt.c.a.b.c.a.r.a.c.b.c.l.a.l.a.b.a.e.a.e.a.e.a.e.a.e.a.e.a.e.b.a.l.b.l.b.e.b.b.e.b.l.b.b.a.b.c.c.c.c.d.fQtQt.f.g.f.i.i.v.w.w.h.m.g.g.i.g.i.f.f.f.f.g.f.fQt.xQt.d.f.q.f", +".f.f.g.x.m.g.w.g.u.v.o.o.C.B.C.C.H.F.F.D.y.u.p.g.x.f.f.d.c.c.c.c.c.c.d.#.r.c.d.f.q.f.g.x.u.z.F.R.2.F.u.f.#.b.c.#.a.b.b.e.e.e.b.j.e.e.r.e.a.e.b.e.e.j.e.e.b.e.c.r.e.e.r.b.b.b.b.c.r.d.f.i.g.g.d.cQt.i.i.g.i.i.h.s.c.c.c.c.c.b.a.b.e.b.a.e.b.e.e.e.e.e.e.e.e.e.e.e.e.j.e.e.e.e.l.b.e.e.e.a.bQt.d.d.b.c.d.d.f.x.m.s.o.C.z.v.u.fQt.#.c.c.c.c.c.c.c.c.a.a.a.a.a.a.b.b.e.e.a.b.a.a.e.e.e.a.a.a.b.a.b.e.b.l.b.l.b.a.b.b.c.c.c.c.c.d.dQt.f.f.x.g.p.h.u.h.v.p.m.g.x.g.fQt.g.g.f.i.f.f.i.g.m.g.g.g.w.x.m.s", +".w.g.w.v.p.n.u.v.B.B.B.F.S.N.H.F.v.v.h.h.x.f.f.d.l.l.e.a.r.#.q.q.d.dQt.f.iQtQtQt.f.x.f.m.h.z.Q.L.E.u.x.c.e.a.e.c.b.e.b.e.e.j.j.e.b.l.e.e.j.e.e.e.j.e.e.j.a.b.c.a.b.e.a.e.a.b.a.b.c.#.f.m.i.fQt.f.c.d.s.i.i.i.i.g.#.c.c.b.a.b.e.b.a.e.e.e.e.e.e.e.e.e.e.b.e.e.e.e.e.e.b.e.b.e.e.b.j.b.e.b.b.c.d.d.r.c.f.d.d.g.x.g.u.C.z.C.o.h.fQt.b.c.a.c.b.c.a.c.l.a.l.a.b.a.b.a.e.e.l.a.e.a.e.e.a.l.b.a.a.a.l.a.a.e.b.b.a.e.b.l.c.c.c.d.d.dQt.f.f.h.g.n.u.A.v.o.g.g.g.f.iQtQt.i.i.h.i.m.i.m.g.m.u.p.v.p.v.u.n.u", +".C.A.v.h.w.u.z.A.F.M.S.H.z.u.g.f.iQtQt.i.c.c.a.c.e.r.l.b.a.b.b.b.b.a.#.b.c.c.f.q.i.d.h.h.o.I.E.J.x.gQt.cQt.b.#.e.b.j.e.k.j.k.j.k.e.e.b.l.b.e.e.e.b.e.e.#.a.a.#.a.a.a.#.a.a.e.r.a.aQtQtQt.f.x.f.fQt.i.f.s.f.f.g.m.i.c.b.e.b.a.a.r.b.e.e.e.e.e.e.e.e.e.e.e.k.e.e.e.e.e.e.e.e.e.e.e.b.e.l.r.a.b.b.a.c.a.c.c.cQt.d.iQt.p.v.o.o.v.h.i.d.d.c.c.c.c.c.b.a.l.e.e.b.e.e.e.e.e.e.a.a.b.a.c.a.a.c.a.r.a.r.c.c.c.c.c.c.c.c.cQt.c.fQt.f.i.n.u.C.z.C.v.u.h.g.s.m.f.d.qQt.f.x.g.u.p.p.h.h.p.p.u.w.v.u.v.v.y.C.A", +".C.v.v.v.o.o.z.A.W.Z.Q.B.u.g.m.fQt.iQt.#.c.a.c.a.b.a.b.e.b.a.b.a.l.r.a.bQt.d.d.d.c.g.g.n.v.Q.H.C.gQt.f.c.c.a.b.e.j.j.j.j.k.e.k.j.b.l.e.e.e.b.j.e.l.b.e.b.a.b.c.a.l.a.a.a.a.b.a.e.a.c.#.f.f.g.f.f.iQt.s.f.i.g.g.x.uQt.a.e.e.e.l.a.e.b.e.j.e.j.e.j.e.j.e.k.j.k.e.j.e.e.e.b.e.j.b.e.e.b.e.a.b.b.a.b.r.c.c.c.c.fQt.d.s.g.o.v.A.o.v.hQt.d.c.c.c.a.c.c.l.a.a.l.e.e.e.b.l.e.l.e.a.c.a.b.a.a.b.c.c.c.c.c.a.r.a.a.c.cQt.c.d.d.f.x.g.w.u.o.C.y.y.v.g.h.x.f.x.f.#.d.iQt.x.h.m.h.m.h.h.h.u.h.p.p.v.v.A.v.A.C", +".o.u.v.o.A.y.C.F.2.Y.F.p.g.f.fQtQtQt.cQt.a.c.r.b.b.e.b.b.a.b.e.b.b.a.#.b.c.c.f.qQt.h.m.h.B.N.J.uQtQt.c.c.#.b.b.l.b.k.b.k.e.k.e.b.e.e.b.l.e.l.e.b.e.e.e.a.a.c.a.a.#.a.a.b.#.b.b.a.#.aQt.f.f.f.f.fQtQt.f.q.g.i.i.m.n.hQt.a.b.b.e.e.e.j.e.e.b.e.j.e.e.e.j.k.k.k.k.b.j.e.j.e.e.e.e.j.e.e.e.b.a.b.b.b.a.cQt.c.cQt.dQtQt.g.h.v.v.A.p.g.d.d.c.c.r.c.c.a.a.a.b.a.r.a.b.b.a.a.a.c.b.c.c.c.c.c.a.c.a.c.c.c.a.a.#.c.c.#QtQt.n.p.n.v.u.v.u.v.p.u.h.g.f.f.f.d.s.f.g.f.f.f.w.h.g.i.g.i.w.h.p.h.v.u.u.u.o.v.o.C", +".v.v.u.o.v.v.F.R.B.B.y.p.g.fQt.c.#.#.c.a.a.b.e.e.e.e.e.e.e.e.b.e.e.r.a.aQt.d.d.f.f.h.p.o.S.Q.o.g.i.c.c.c.a.e.e.e.j.j.e.k.j.k.j.k.e.l.e.e.e.b.e.l.e.b.e.#.b.c.#.a.a.a.a.a.a.b.a.e.aQt.#.dQt.fQtQt.#Qt.i.f.f.f.x.x.o.p.i.#.c.a.r.e.e.b.e.e.j.e.j.e.j.e.j.e.k.e.k.e.e.b.e.j.e.j.e.e.b.e.#.e.e.b.l.b.c.a.c.c.c.dQt.fQt.g.i.p.v.v.u.h.q.f.dQt.c.c.c.c.a.a.a.b.a.b.b.e.c.#.r.c.c.c.c.d.a.#.#.c.i.fQtQtQtQtQt.g.g.g.w.h.B.D.z.v.o.p.u.p.i.iQtQtQtQt.#.i.f.f.f.s.g.h.g.g.h.x.h.h.g.h.u.p.u.u.v.o.v.v.o.v", +".p.w.o.y.z.B.F.E.p.p.h.g.f.i.d.c.c.a.a.a.r.e.e.b.e.e.b.e.e.e.e.e.r.a.#.c.c.d.d.f.g.w.p.B.M.F.h.x.c.#Qt.a.b.l.e.j.e.j.e.e.k.b.j.b.e.b.e.b.l.e.e.b.e.#.e.a.a.a.a.c.#.a.a.r.a.#.b.a.a.cQt.i.f.f.#.cQt.#Qt.#.g.f.s.g.p.u.p.i.c.c.b.e.r.b.b.b.b.r.b.b.e.e.e.j.k.e.e.j.j.e.e.b.e.e.b.e.e.e.e.b.l.b.b.b.a.b.c.cQt.d.#.dQtQt.x.m.u.o.v.n.f.qQt.d.f.c.c.r.c.c.c.c.c.c.c.c.c.c.c.c.d.i.dQt.c.dQt.i.f.f.g.w.h.h.u.u.o.o.z.D.z.C.o.u.p.h.f.fQtQtQtQt.gQt.c.c.f.f.x.g.p.h.h.g.x.f.x.g.w.h.u.v.B.C.z.C.A.A.o.A", +".n.v.v.A.F.H.B.v.g.h.f.f.f.d.c.b.#.a.e.e.e.b.e.j.e.e.j.e.e.b.e.b.e.a.b.#.c.f.x.f.h.w.o.K.R.A.g.q.q.c.c.a.a.e.e.j.e.j.j.e.e.k.j.j.e.l.e.l.e.b.e.l.e.b.b.c.a.#.#.c.a.#.a.a.a.a.b.#.c.qQt.qQtQt.c.a.c.c.c.i.dQt.f.g.p.p.u.hQt.#Qt.e.r.r.b.#.b.b.b.b.e.j.e.j.e.e.j.e.e.e.j.e.j.e.j.e.b.b.e.a.b.a.e.b.aQt.c.c.cQt.d.i.d.f.x.h.h.v.v.v.h.f.q.fQt.c.c.c.a.c.a.c.a.r.c.r.c.d.d.i.d.f.f.qQt.i.f.x.g.g.u.y.v.z.C.z.C.B.C.o.u.p.g.h.f.f.fQt.#Qt.qQtQt.c.#.cQt.f.m.h.h.w.s.m.x.h.h.w.p.v.v.A.B.F.C.B.C.A.v.u", +".p.u.A.z.F.J.u.g.g.i.f.i.d.c.b.b.l.e.e.e.e.j.e.e.k.e.b.j.e.j.e.j.b.a.#.cQt.d.g.g.h.u.B.H.F.u.h.d.#.c.#.e.b.e.j.j.b.k.e.k.e.e.j.b.e.b.e.e.b.l.e.b.b.l.a.#.a.c.c.q.a.rQt.cQt.a.#.a.c.#.iQt.i.c.a.a.c.cQtQt.d.i.f.f.m.p.h.m.h.fQt.c.r.#.r.a.rQt.b.b.b.j.e.e.e.j.e.j.b.j.e.e.e.e.e.e.e.e.e.r.a.b.b.a.c.b.c.c.c.cQt.d.d.d.g.x.w.u.v.z.x.f.f.q.f.d.dQt.c.#.c.c.c.d.c.dQt.fQtQt.x.h.x.h.x.s.g.n.v.C.z.D.B.B.D.A.v.p.h.g.iQt.fQtQt.dQt.dQt.cQt.c.#Qt.c.#.g.f.h.n.p.v.h.x.h.g.w.u.y.z.z.J.Q.I.J.D.A.A.u.n", +".y.A.I.H.J.p.g.wQtQtQt.#.c.a.b.b.e.b.j.e.k.e.k.k.j.j.j.j.e.j.b.e.l.r.aQt.c.g.g.x.h.v.F.S.C.p.x.dQt.#.a.l.l.b.e.e.e.k.e.e.j.j.j.j.e.l.b.l.e.e.e.l.r.b.#.c.a.cQt.#.#.c.qQt.cQt.cQt.c.iQt.dQt.c.a.#.c.c.c.cQt.dQt.g.x.m.h.h.p.s.f.i.a.r.b.#.b.r.b.r.e.b.e.j.e.j.e.e.j.e.e.j.b.e.j.b.b.e.b.l.b.a.b.r.a.c.cQt.c.d.fQt.#.d.q.h.g.u.o.B.g.h.x.g.q.i.dQtQtQt.d.d.d.d.d.d.d.fQt.g.f.h.f.x.h.h.n.C.I.F.B.z.v.u.u.p.h.i.x.#.iQt.qQt.d.f.d.d.c.c.c.cQt.fQt.g.f.m.h.n.u.u.w.m.w.h.h.v.J.F.H.H.N.M.E.E.F.B.o.n", +".J.K.H.G.w.i.fQt.cQt.a.c.b.a.b.e.e.e.e.e.e.j.e.b.k.e.k.j.e.e.e.j.#.a.bQt.d.g.x.w.z.S.z.m.i.f.gQt.q.a.#.b.e.e.e.e.b.e.b.e.e.b.e.e.e.e.e.b.b.a.r.a.#.q.c.q.c.#Qt.#Qt.iQtQt.iQt.dQt.iQt.q.#.c.c.c.c.a.#.cQt.d.#.fQt.f.qQt.d.f.g.u.y.gQtQt.dQt.b.r.e.e.e.j.e.e.e.b.j.e.e.j.e.e.e.b.e.a.a.a.b.e.b.b.b.c.a.c.c.cQt.d.dQtQt.g.g.p.n.v.D.o.p.i.f.#.d.f.x.c.#.f.#Qt.g.f.h.q.g.i.g.v.v.o.C.F.H.H.F.B.v.u.v.f.g.f.g.i.f.fQtQtQt.c.#Qt.c.#.c.#.d.#Qt.dQt.f.f.w.w.iQt.f.m.v.o.v.v.v.u.u.u.u.u.G.A.J.z.E.E.K.I", +".H.F.J.u.h.fQt.i.a.c.a.a.a.e.e.e.e.e.j.e.e.e.j.e.0.k.j.k.j.e.b.e.b.b.#.c.q.f.m.u.Q.T.v.m.f.#Qt.d.a.a.a.l.b.a.b.e.e.e.l.e.l.e.l.e.b.l.b.a.e.b.a.r.#.#.c.q.c.iQt.i.i.s.i.g.f.g.f.iQt.iQtQt.cQt.c.c.c.#.c.cQt.f.f.d.s.g.iQt.f.i.g.u.f.h.f.i.d.c.b.#.l.b.l.e.e.j.e.e.j.e.e.r.e.b.a.b.a.a.#.a.b.a.b.b.cQt.c.c.c.d.#.d.i.d.f.x.h.u.o.A.A.u.xQt.i.f.x.s.g.i.f.f.f.f.i.g.w.h.u.o.D.J.I.F.C.D.B.C.v.h.h.hQt.qQtQt.iQtQtQtQt.#Qt.c.c.#.cQt.c.#Qt.d.fQt.g.f.i.i.iQt.i.h.o.v.h.g.g.w.h.h.w.h.n.u.y.C.G.H.R.W", +".K.z.p.gQt.f.#.c.a.a.c.r.b.e.e.e.k.k.j.k.k.k.k.k.k.k.k.j.e.e.e.e.#.b.a.a.d.g.h.n.R.E.p.i.sQt.i.d.a.#.a.b.l.e.l.e.b.l.b.e.b.e.b.e.l.e.l.e.#.a.a.c.q.#.q.c.iQt.i.f.g.s.f.s.g.i.g.d.i.#QtQt.c.c.d.f.aQt.c.q.dQt.f.f.iQt.c.f.c.d.i.h.g.g.m.f.f.#.dQt.e.a.e.r.e.e.e.e.b.e.e.e.a.b.b.a.a.a.a.c.#.b.a.bQt.c.c.d.i.d.dQt.c.#.g.f.m.p.o.v.z.u.g.m.x.x.w.v.h.g.g.h.u.u.o.v.B.D.I.I.D.I.D.C.o.u.p.h.g.g.f.fQt.qQt.fQt.d.#.d.#.c.c.c.#.c.c.c.cQtQtQt.d.f.f.fQtQtQtQt.g.g.u.p.i.f.i.f.i.g.g.h.m.p.w.n.A.C.H.Q", +".u.h.gQt.fQt.c.a.c.c.a.a.e.e.e.k.k.j.k.j.j.j.j.j.j.k.j.k.j.b.j.e.c.a.bQtQtQt.h.p.S.H.u.g.s.d.#Qt.a.a.a.b.l.r.e.j.e.e.e.e.l.e.l.b.e.l.b.a.c.#.c.cQt.c.#.iQt.g.f.g.i.i.g.s.f.gQt.d.q.i.#.c.c.c.f.d.c.c.fQt.fQt.g.f.dQtQt.b.r.d.f.g.w.p.h.w.g.g.fQt.c.#.a.b.a.j.b.e.e.e.e.a.r.a.c.c.c.c.c.c.c.c.r.cQt.d.#.d.d.f.f.q.i.dQt.f.h.g.v.v.z.v.u.h.g.p.v.o.u.v.u.A.C.D.B.J.z.F.z.z.z.v.u.p.p.m.i.i.f.fQt.i.d.#.i.c.c.#.c.cQt.c.r.c.a.c.c.c.#.cQt.f.f.i.f.fQt.dQt.f.f.x.x.x.iQt.i.f.i.f.g.i.f.s.g.g.h.u.y.y", +".i.fQtQtQt.q.a.l.b.#.e.e.b.e.k.j.j.k.j.k.k.j.k.j.k.j.e.e.e.e.b.bQt.cQt.c.d.f.h.w.B.M.z.h.fQt.i.d.#.a.a.e.l.e.e.j.b.l.b.e.e.b.e.l.l.#.a.a.a.#.c.q.#QtQt.i.f.x.f.f.s.g.i.g.f.iQt.fQtQt.#.c.c.c.d.c.qQt.#.i.d.g.f.g.cQt.r.c.#.d.d.x.h.h.p.h.p.g.g.i.c.c.a.b.b.b.e.j.e.e.a.b.a.aQt.c.qQt.c.c.#.fQt.d.d.d.f.f.f.q.g.f.dQt.g.x.m.h.h.o.z.y.A.u.o.v.v.z.B.z.B.D.z.z.y.C.o.u.p.p.g.m.i.g.f.qQt.iQt.iQt.d.c.c.c.c.c.c.c.c.a.c.a.c.a.c.a.a.fQt.i.d.i.d.fQt.d.f.fQt.f.m.fQt.#QtQtQtQtQtQt.fQt.#Qt.s.g.g.h.i", +".dQt.c.c.a.a.a.e.a.b.b.e.e.k.e.k.j.j.j.j.j.j.k.j.k.e.j.b.e.b.r.r.r.c.c.#.f.f.w.v.T.P.z.h.f.dQt.c.a.a.a.l.e.e.e.e.e.e.l.b.e.l.e.b.l.a.a.r.#.c.q.d.#QtQt.iQt.f.g.f.g.i.s.g.i.g.dQt.iQtQt.#QtQt.f.dQt.#Qt.d.iQt.g.f.g.d.cQt.c.d.g.i.w.g.g.g.g.p.w.h.i.d.c.a.b.e.e.e.b.#.e.bQt.c.#.cQtQtQt.g.dQt.d.d.g.f.f.q.f.x.x.x.f.g.x.g.h.h.v.v.J.F.F.J.C.z.B.D.B.D.G.C.A.y.u.u.h.s.i.sQtQt.iQtQt.iQt.dQt.d.c.d.#.c.a.c.#.c.b.a.c.a.r.#.r.aQt.c.#Qt.c.f.fQtQt.f.q.d.f.g.f.f.fQt.c.#.cQtQtQt.f.i.f.gQtQtQt.xQtQt", +".c.c.c.a.a.e.l.b.e.e.e.b.e.j.k.j.k.k.j.k.k.j.k.j.k.e.e.j.b.b.b.c.cQt.c.fQt.x.n.z.W.Z.C.g.fQt.i.c.a.#.a.e.e.e.b.j.e.b.e.e.l.b.e.e.r.#.r.a.#.#QtQt.i.iQtQt.g.f.f.g.i.g.i.g.f.s.f.gQt.#QtQt.d.#.fQtQt.c.i.c.i.q.g.f.g.f.f.d.f.f.g.m.x.x.g.x.m.g.h.u.f.d.f.c.b.b.b.b.a.b.aQt.a.c.f.dQt.iQtQtQt.dQtQt.q.f.x.f.h.x.x.s.p.s.g.w.p.o.v.o.B.T.Q.F.F.D.y.A.u.u.v.u.v.u.u.p.m.i.i.i.f.f.d.dQt.#.cQt.d.d.d.d.b.b.b.b.b.b.a.b.b.b.a.b.a.b.b.bQt.c.iQt.d.qQt.f.dQt.f.f.x.hQt.c.q.cQt.dQt.f.f.f.f.f.fQtQt.c.a.c", +".a.b.b.b.l.b.e.l.e.e.e.e.j.e.j.k.j.j.j.k.e.k.e.k.e.j.e.e.b.b.b.r.f.c.dQt.d.w.o.K#h.Z.v.h.fQt.d.c.r.a.a.b.l.e.l.e.e.l.j.e.j.e.l.b.a.r.#.a.q.#.i.#.iQtQt.g.f.g.f.f.s.i.g.i.i.f.gQtQt.iQt.q.fQt.d.f.c.q.c.f.d.i.f.g.h.f.g.f.f.h.s.g.x.p.g.h.x.g.g.g.g.gQt.c.b.e.e.e.a.r.c.c.c.d.c.f.i.i.f.f.f.f.g.f.x.f.h.x.s.h.p.h.x.p.p.u.u.v.A.o.E.F.H.I.A.z.u.u.p.u.v.h.p.g.w.h.i.s.g.x.x.s.q.q.d.#.d.c.d.d.d.d.a.b.b.l.e.l.e.r.l.e.e.e.b.#.b.#.cQt.#.qQtQt.f.f.f.f.x.f.x.f.d.a.c.cQt.d.f.gQt.f.h.g.i.f.c.c.b.e", +".e.b.e.e.b.e.e.e.b.e.e.j.k.k.k.e.j.j.j.j.k.j.e.e.e.e.e.e.b.a.b.a.c.a.f.g.h.v.B#i#h.K.uQt.iQtQt.q.a.a.l.a.e.e.e.b.l.b.l.l.b.l.e.l.l.l.a.a.#.c.#Qt.q.iQtQt.q.s.q.s.i.s.i.g.i.s.f.f.q.c.c.c.i.cQt.cQt.iQt.#.c.f.g.x.w.w.h.n.p.v.m.h.o.v.u.u.y.s.p.x.u.v.u.m.f.d.f.#.d.c.d.f.d.g.f.i.s.f.i.q.f.f.i.g.s.h.h.p.p.u.v.y.z.C.o.C.o.o.z.A.u.v.p.u.h.h.h.w.i.s.x.s.g.m.i.i.iQt.qQt.#Qt.fQt.b.#.b.#.a.r.b.b.e.a.e.b.b.e.b.l.e.l.b.a.a.a.c.a.d.#.d.i.f.f.fQt.f.f.i.f.xQtQt.c.a.#.a.cQt.f.f.f.gQtQtQt.#.a.#.a", +".b.l.b.e.b.l.b.e.e.j.e.e.k.e.k.k.j.k.j.k.e.j.e.e.b.e.e.b.a.b.#.bQt.#.dQt.w.v.F#h.M.J.h.qQtQtQt.f.l.a.a.l.e.l.e.e.e.l.b.e.l.e.l.b.l.b.a.#.c.q.cQt.i.q.qQt.xQt.sQt.s.i.sQt.i.f.g.f.q.c.q.c.f.cQt.c.f.c.#QtQt.q.q.p.m.u.m.w.m.p.w.p.o.v.v.h.n.n.h.p.p.p.w.m.f.i.d.dQt.f.dQt.i.f.i.i.m.g.g.g.h.h.w.u.u.u.v.A.D.B.E.G.z.z.y.v.p.p.p.p.h.w.g.g.h.m.g.gQt.f.i.g.i.g.i.g.#.iQtQt.q.d.#.d.#.b.a.b.a.b.l.a.b.b.b.e.e.e.e.b.e.l.e.a.a.c.b.cQt.cQtQt.dQt.f.f.i.f.f.s.fQt.iQt.a.a.a.#.dQt.f.f.fQtQt.#.c.a.b.a", +".e.e.e.e.b.e.e.e.e.j.e.e.k.j.k.e.k.j.j.j.k.j.e.e.e.b.e.l.r.b.b.c.iQt.g.x.w.z.F.2.B.v.h.i.iQtQt.d.r.a.l.a.a.e.b.a.l.e.l.l.b.l.e.l.a.r.a.#.#.#.qQtQtQt.i.q.f.sQt.i.i.f.q.g.q.g.f.fQt.i.dQt.i.d.d.f.c.f.f.i.g.x.w.w.v.o.o.v.v.n.o.y.o.v.v.o.v.p.n.m.u.v.A.v.v.w.g.f.qQt.i.i.i.m.g.p.v.o.v.v.o.C.C.B.F.F.z.E.P.N.R.P.u.v.u.h.m.g.m.x.g.f.f.g.f.fQt.gQt.g.f.g.f.f.g.f.#.c.q.c.cQt.c.c.#.b.#.b.#.b.b.r.l.e.e.e.b.b.e.e.b.l.e.a.b.a.a.b.#.cQt.dQtQt.f.f.m.g.f.f.i.iQt.c.c.a.c.c.iQt.f.g.fQtQt.c.c.a.a.a", +".b.e.r.l.e.e.b.e.e.e.k.e.k.e.k.k.e.j.j.k.j.j.e.e.e.l.e.b.b.a.b.c.#.i.f.h.p.F.Q.P.C.p.g.iQtQt.cQt.r.c.a.l.a.a.e.e.b.a.b.a.e.a.b.a.#.aQt.#.#.d.#Qt.i.q.f.i.iQt.s.s.f.q.g.i.g.f.g.f.iQtQt.fQt.f.d.d.f.f.i.h.h.w.y.A.z.z.B.A.A.A.o.v.z.B.K.F.I.z.C.A.C.z.o.z.z.o.v.p.i.h.p.h.A.v.z.B.I.z.F.F.z.I.F.E.H.F.B.F.Q.Q.Q.I.g.g.s.i.f.g.f.fQt.qQt.#.#.i.#.d.#QtQtQt.s.gQtQt.c.q.cQt.c.c.#.c.b.a.b.a.b.a.b.a.e.e.b.l.e.b.l.b.l.e.e.#.a.a.r.a.c.c.c.iQt.q.i.f.i.g.f.sQtQtQt.#.#.c.#.cQt.d.fQt.fQtQt.c.c.a.a.b", +".e.e.e.e.b.e.e.e.k.k.j.k.k.k.j.j.j.k.j.j.k.j.e.e.b.e.b.a.e.aQt.a.dQtQt.h.h.Q.Z.H.u.h.h.iQt.#Qt.#.c.#.a.a.b.a.b.a.a.b.a.a.#.a.a.a.c.a.#.c.#.iQt.d.qQt.i.i.i.s.i.i.g.s.f.f.f.g.f.g.#.d.i.dQt.q.g.f.f.f.h.h.v.A.B.F.P.L.Z.L.T.E.E.K.T.P.Z.L.N.P.L.P.P.T.E.T.E.I.I.I.J.B.J.J.B.E.I.T.B.I.I.D.F.I.F.B.o.v.v.o.v.u.u.h.sQt.fQtQt.dQt.f.c.c.cQt.c.c.cQt.cQtQt.fQt.dQtQt.#.c.q.c.c.c.r.c.#.e.r.e.r.e.e.e.r.e.e.b.e.e.e.e.e.l.e.a.b.c.a.c.c.c.#.qQt.d.fQt.x.g.f.fQtQtQt.c.#.c.c.c.#.i.dQtQtQtQt.c.r.a.e.a", +".e.e.b.b.e.e.e.e.k.e.k.j.j.j.j.k.j.0.j.k.e.j.e.e.e.e.e.a.b.b.cQt.#.d.g.g.o.F.Z.I.h.h.g.iQtQtQtQt.c.#.c.c.a.a.b.b.a.a.a.b.c.aQt.a.#Qt.#.f.#.d.#.iQt.i.s.i.g.i.x.s.i.f.s.f.g.f.g.qQt.i.dQt.d.fQt.xQt.m.h.A.B.Q.Y.W.1#c#i#c.1.X.X.Y.R.X.R.L.R.N.V.1.W.Z.P.S.T.T.P.L.Q.H.E.E.J.K.J.J.A.v.C.A.v.v.v.v.g.i.m.i.m.i.g.f.#QtQt.f.cQt.a.c.a.#.a.a.a.#.a.a.c.c.c.cQt.cQt.c.cQt.c.c.#.b.r.b.#.b.e.a.e.a.r.e.l.e.a.e.b.e.b.l.b.e.e.a.a.#.c.b.#.c.cQt.dQt.f.f.i.f.q.fQtQtQt.cQt.c.#.c.c.cQtQtQtQtQt.c.c.a.a.a", +".e.e.l.e.e.e.e.e.j.k.j.k.k.j.k.e.j.j.k.j.k.j.e.e.e.r.e.b.#.b.a.c.c.g.f.w.u.I.Z.B.g.m.g.i.f.q.#.#.#.c.c.c.c.b.a.r.a.b.a.a.#.b.a.aQt.#.c.#Qt.i.f.f.f.g.f.g.g.g.m.g.g.s.f.g.f.g.f.iQt.f.g.d.i.q.f.g.m.u.z.F.M.L.2.U.N.2.N.N.Q.H.E.F.F.E.F.F.E.H.Q.M.I.B.B.z.C.z.B.F.F.F.B.o.A.o.u.v.h.p.w.g.h.h.h.x.g.f.f.g.f.g.f.i.d.dQt.d.d.c.rQt.c.c.b.b.b.cQt.b.a.r.a.a.a.a.a.aQt.r.#.a.r.c.r.r.e.b.l.b.e.e.e.l.r.e.e.e.e.b.e.e.l.e.l.b.a.r.a.c.c.c.iQt.f.f.fQt.f.f.f.gQtQt.iQt.#.c.c.c.#QtQt.cQtQt.i.c.c.l.b.l", +".e.b.e.e.e.e.e.e.e.k.j.j.j.k.e.e.j.k.j.j.k.e.e.e.e.e.b.a.e.b.cQtQt.f.x.n.o.J.P.z.x.g.g.iQt.q.#.#Qt.c.#.a.c.a.b.b.a.a.a.a.a.c.#.c.#.c.#.i.cQt.f.g.i.i.m.g.s.g.m.g.x.m.f.g.f.g.g.q.f.g.f.g.f.g.x.x.p.v.J.Q.N.X.X.X.S.H.K.C.J.B.z.z.o.y.z.C.J.D.A.C.v.u.o.u.v.p.p.A.C.o.v.v.h.g.h.f.p.h.x.h.x.f.i.f.f.g.q.q.f.q.d.d.fQtQt.c.d.r.c.b.a.cQt.bQt.c.cQt.a.b.a.b.r.b.r.aQt.cQt.cQt.c.r.a.r.l.r.e.b.l.b.e.b.e.#.b.e.a.e.r.e.l.e.#.a.c.b.a.c.#.dQt.dQt.f.f.f.s.f.qQtQtQtQt.d.f.#.c.c.c.c.#QtQtQt.#.c.a.a.b", +".e.t.j.j.j.j.0.j.k.j.j.k.j.j.k.j.k.j.k.j.j.k.j.e.e.e.b.e.e.b.#.b.f.g.f.f.m.B.H.I.A.g.xQtQt.cQtQt.a.r.r.a.a.a.a.aQt.cQt.r.c.c.c.cQtQtQt.d.i.f.f.x.g.w.g.g.m.i.g.i.i.s.s.x.m.h.m.m.i.q.i.s.i.m.u.w.C.D.H.P.R.P.K.D.A.o.A.z.o.v.v.v.n.u.o.o.B.o.o.p.m.h.n.h.v.h.w.h.o.n.u.f.x.x.fQt.dQt.fQt.d.i.q.d.d.d.c.f.c.d.c.d.#Qt.#Qt.c.c.c.b.r.a.b.a.b.a.b.b.aQt.c.c.c.a.c.c.#.a.#.a.#.a.a.#.a.a.a.#.l.e.l.l.r.e.b.e.e.e.e.e.l.b.e.e.e.a.#.a.#.q.#QtQt.xQtQt.#.c.#.cQt.iQtQt.q.c.cQt.c.#.c.cQt.#.#.c.r.c.l.a", +".l.j.e.j.j.k.k.k.j.j.j.j.e.k.e.k.j.j.k.e.k.e.j.k.e.e.e.j.b.c.b.rQt.d.d.g.w.B.Q.N.u.g.iQtQt.#QtQt.r.a.a.#.#.c.q.c.c.a.c.a.c.aQt.c.#.c.qQt.f.f.f.h.h.g.g.m.g.g.h.w.s.w.u.n.h.n.h.h.g.u.p.n.u.v.o.C.B.J.B.B.B.D.z.v.n.u.v.h.v.h.m.h.p.w.p.v.o.o.u.p.g.g.m.x.g.h.g.h.v.u.m.f.q.g.d.iQt.dQt.fQt.dQt.i.c.f.d.d.d.f.d.f.#Qt.#.c.c.c.#.c.b.a.b.#.b.#.b.#.c.cQt.cQt.c.a.c.b.a.a.#.l.a.b.a.b.a.b.a.l.e.#.e.b.l.r.l.r.e.b.e.l.e.l.l.e.a.b.a.#.#.#.iQtQt.xQt.q.#.cQtQtQtQtQt.dQt.c.#Qt.c.#.c.qQt.a.#.c.c.a.a", +".l.l.e.j.j.j.k.j.k.j.j.k.j.j.k.j.j.j.j.k.j.k.j.k.e.k.e.e.e.r.r.r.i.c.f.f.w.D.M.U.v.h.fQtQt.cQt.d.r.a.rQt.#.c.#.c.#.c.#.a.#.a.a.aQt.#.cQt.g.f.h.i.p.u.p.h.h.w.n.u.h.v.A.C.B.B.A.o.C.D.A.C.C.G.B.J.z.C.y.v.u.p.h.g.m.g.x.m.g.g.g.h.i.g.g.w.h.p.w.g.g.f.f.i.g.f.f.f.p.h.i.f.g.dQt.#.d.dQt.d.dQt.d.dQtQt.c.i.#Qt.cQt.#Qt.#.iQt.f.c.c.#.a.a.a.a.a.a.a.a.c.c.c.a.a.r.a.a.#.l.a.r.a.a.#.a.#.a.#.e.b.l.e.#.e.b.e.e.e.b.e.b.l.e.e.b.a.a.a.#.#.#QtQtQtQtQt.#.c.q.#QtQtQtQt.#QtQt.c.c.c.dQt.#Qt.#.c.r.c.l.a", +".l.b.l.e.j.j.j.j.j.k.e.k.e.k.e.j.k.j.j.j.e.j.j.j.b.e.j.e.b.r.bQt.c.c.i.x.o.E.L#h.o.p.g.i.iQtQtQtQt.#QtQtQt.iQt.i.c.c.c.c.c.cQt.c.#QtQt.i.f.g.g.g.u.h.v.h.v.v.v.v.A.D.B.E.E.F.I.I.B.B.D.B.D.I.G.E.u.v.u.w.w.i.g.f.g.f.g.f.f.g.fQt.f.g.f.i.x.m.x.g.f.f.gQt.f.iQt.i.q.x.i.i.#Qt.i.cQt.fQt.d.i.d.q.d.cQt.cQt.d.fQt.d.iQt.i.c.#.cQtQt.cQt.cQt.cQt.c.#.a.cQt.cQt.c.#.c.l.e.#.a.b.a.b.a.l.a.b.a.l.l.b.l.b.e.a.b.b.a.e.b.l.b.e.l.e.a.a.a.#.a.#.#Qt.iQtQt.#.#.c.#.fQtQt.i.#Qt.c.c.#.c.#.#Qt.#.#.c.#.c.a.a", +".a.a.e.e.e.e.e.j.j.j.b.j.k.j.k.j.e.k.j.k.j.k.j.e.k.e.e.e.e.rQt.cQt.i.g.s.A.N.1.2.v.u.g.sQtQt.fQtQt.iQtQtQt.f.d.f.d.i.d.i.d.dQt.f.c.#.i.i.m.h.p.u.u.y.v.A.o.z.B.A.F.I.I.F.I.B.o.v.A.u.y.v.A.v.A.v.h.h.w.g.f.gQt.iQt.#.iQt.iQt.q.dQtQt.iQt.g.f.f.s.f.f.f.iQtQt.c.qQt.f.x.f.sQtQt.c.i.cQt.c.c.c.c.c.#.c.#Qt.#.#.#.qQt.qQtQt.iQt.f.d.#.c.#.c.c.#.c.#.cQt.c.c.c.b.c.c.b.l.e.a.#.a.a.#.a.#.a.a.#.e.b.l.r.e.b.e.a.b.b.e.l.l.e.l.e.a.r.a.a.r.#.#.#QtQtQt.c.#.#.d.#QtQtQt.d.#.c.c.c.cQt.cQt.#.#.#.a.c.l.a", +".a.l.a.b.l.j.j.e.k.j.j.j.e.k.e.j.j.j.j.j.j.e.k.j.e.e.j.b.b.b.c.#.#.f.h.w.z.R.M.F.o.p.g.f.qQt.fQtQtQt.q.f.f.f.g.f.iQtQtQtQt.f.i.fQt.i.x.g.p.u.o.C.C.D.J.I.F.E.E.J.B.z.z.o.v.u.h.h.i.i.m.g.g.m.g.g.w.g.gQt.i.d.#.dQt.qQt.#.c.#Qt.c.iQt.d.#.#.f.i.x.g.g.fQt.d.q.#.c.iQt.g.i.s.i.g.f.c.c.c.c.c.cQt.c.cQtQt.c.#.f.cQt.#QtQt.iQtQtQt.#.#.#.#.#.#.#.#.#.c.c.cQt.c.cQt.c.e.l.b.a.r.b.a.b.a.l.#.l.#.l.e.l.b.b.a.b.b.e.l.b.l.b.l.e.b.a.a.a.l.a.c.#Qt.#.d.#.#Qt.#QtQtQtQtQt.cQtQt.c.#.cQt.#Qt.qQt.c.#.c.a.a", +".a.a.l.a.e.e.e.j.k.j.e.j.k.j.j.k.j.k.j.j.k.j.j.j.e.e.e.e.bQt.rQtQt.g.s.A.I.P.H.B.o.p.g.sQtQt.iQtQtQt.i.f.s.x.i.x.s.s.p.s.p.s.s.s.g.g.w.p.o.D.J.z.E.M.P.Q.H.Q.F.B.v.h.h.x.w.f.gQt.g.f.g.f.g.f.f.i.i.f.i.c.c.c.f.qQt.d.fQt.fQt.c.c.d.i.dQtQt.f.x.p.g.h.x.gQtQt.c.q.d.f.x.i.m.g.g.fQt.cQt.c.c.a.c.a.#.#.#.q.#.#.#.qQt.i.#QtQt.iQt.fQtQtQtQt.#.#.#.#Qt.c.c.c.cQt.c.c.b.a.l.#.l.a.#.a.#.a.a.#.a.e.b.l.b.l.b.e.#.e.r.e.l.e.e.l.e.a.a.b.a.a.a.a.c.c.q.c.#.c.#.i.cQt.iQtQtQtQt.#.d.i.cQt.i.#Qt.#.#.a.a.l", +".l.a.b.a.e.e.e.e.e.j.k.e.j.j.j.j.j.e.k.e.k.e.k.j.e.j.e.b.b.r.f.c.h.w.w.I.P.Q.F.B.u.g.fQtQtQtQtQtQtQt.f.g.g.x.w.g.n.n.p.w.p.h.w.h.m.w.h.o.B.z.E.I.N.L.N.E.F.J.z.v.w.m.x.m.xQtQt.q.q.f.fQt.f.iQtQt.dQt.i.cQt.d.f.i.i.d.#.d.#.d.dQt.f.dQt.c.dQt.f.s.g.w.g.f.dQt.qQt.f.f.i.i.h.h.w.h.c.c.cQt.cQt.r.a.d.q.d.#.d.q.d.#.#Qt.q.iQtQtQtQt.#.i.#Qt.iQt.iQt.cQt.c.q.c.c.c.c.l.e.e.a.a.#.l.e.a.l.#.e.#.l.l.a.b.b.b.b.e.b.e.r.l.b.e.l.e.a.a.a.b.a.a.#.a.#.c.c.c.#.#QtQtQtQtQtQt.cQt.cQt.#.#.cQtQt.#Qt.#.c.a.a", +".b.a.a.b.a.a.b.a.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.l.a.a.cQt.#.f.h.w.D.E.S.J.z.C.o.u.h.g.m.h.h.h.p.h.g.m.h.v.o.B.B.B.F.F.D.E.F.Q.S.N.S.H.E.H.E.F.F.B.z.A.v.p.w.g.g.i.dQt.fQt.d.d.cQt.c.d.d.d.d.f.dQt.dQt.dQt.fQt.a.#Qt.#Qt.#.#.#.cQt.c.iQt.fQt.iQt.f.s.x.m.f.q.d.f.g.f.g.g.w.h.h.q.g.d.c.cQtQt.c.#.c.c.#.c.c.#.c.q.c.#.c.i.c.q.cQtQt.iQt.#.#Qt.c.#.a.a.#.a.#.b.l.#.l.b.b.e.e.e.b.e.r.e.#.e.r.e.b.l.e.b.a.b.a.b.a.e.l.l.b.e.e.b.l.a.a.a.r.a.c.cQt.#Qt.qQtQtQtQtQtQtQt.iQtQtQt.fQt.sQtQt.#.c.l.a.e", +".a.r.a.a.b.a.a.b.e.e.e.e.e.e.e.e.r.e.e.e.e.e.e.b.b.eQt.aQtQt.fQt.x.p.I.E.F.z.A.D.G.o.u.h.g.f.h.g.h.g.g.u.u.y.D.F.F.Q.H.I.F.F.Q.M.L.L.E.H.B.F.z.D.A.o.o.u.w.g.m.x.i.i.d.i.d.i.d.i.c.aQt.c.f.d.f.d.dQt.f.d.i.dQt.d.#QtQt.#.#.c.#.c.c.cQt.c.dQt.d.f.g.i.g.g.g.x.g.f.f.g.f.m.h.u.v.hQtQtQtQt.d.d.i.#Qt.c.#.cQt.#.c.c.#.c.i.c.#.c.#.c.q.#.#.#.i.c.i.#.#.a.#.a.#.a.a.#.l.#.e.b.b.e.b.e.b.a.b.b.b.a.b.b.e.r.l.b.e.b.l.b.l.b.e.e.l.e.l.e.a.b.a.a.#.a.c.cQt.#QtQt.#QtQt.i.qQt.iQt.s.f.i.i.gQtQtQt.#.c.a.a", +".a.a.a.a.a.a.a.a.e.e.e.e.e.e.l.e.l.e.l.e.e.l.e.l.a.a.a.c.c.d.i.d.f.n.I.I.G.y.v.F.B.C.u.g.m.f.f.f.f.h.h.h.u.A.I.P.N.S.E.I.D.B.I.Q.S.Q.E.J.D.C.A.v.v.h.u.g.h.f.f.fQtQtQt.dQt.dQt.d.c.c.cQt.dQtQt.f.iQtQtQtQtQt.fQt.c.#.d.q.d.i.#.c.q.c.qQt.iQt.f.f.i.m.h.n.p.h.h.m.g.g.w.p.v.v.y.o.f.g.f.fQt.d.dQt.c.#.c.#.c.c.#.c.c.#.c.#.c.#.f.#.d.c.i.d.#Qt.#Qt.a.#.rQt.#.q.a.#.#.a.#.a.b.r.b.b.#.a.#.a.a.r.a.#.b.b.a.#.a.r.a.b.l.b.l.e.l.e.e.l.a.a.a.c.a.c.c.c.#Qt.#Qt.iQtQt.q.f.iQtQtQt.i.x.i.fQtQtQt.c.c.c.c", +".a.a.a.a.a.b.a.a.a.a.a.e.l.e.e.e.a.b.#.a.a.a.a.a.a.aQt.cQt.c.d.#.g.o.E.E.B.u.o.D.B.C.n.g.i.i.i.i.p.h.p.o.D.I.P.X.M.Q.I.I.D.J.I.I.K.F.F.A.z.v.v.u.g.w.g.h.i.f.q.dQtQt.f.#.fQt.fQtQt.d.i.d.i.d.g.d.f.g.f.f.gQtQt.gQt.iQt.iQtQt.f.iQtQtQt.dQt.f.f.g.h.p.u.v.v.v.h.h.h.w.p.p.u.A.y.y.w.g.f.f.i.#.c.c.c.#.cQt.#.c.#Qt.#.c.cQt.#.c.c.c.q.#.c.i.#QtQtQt.q.#.c.#.q.c.q.q.c.aQt.a.#.c.cQt.a.r.a.#.#.a.b.a.#.a.#.b.b.a.b.a.b.e.l.b.e.l.b.e.a.r.a.b.c.r.c.c.#Qt.qQtQtQtQtQtQt.q.f.q.f.i.s.f.i.iQtQt.#.c.#.c", +".a.a.a.a.l.a.l.a.l.#.l.l.e.l.a.a.l.a.a.a.a.#.a.#.c.c.c.c.c.c.i.d.g.A.E.F.C.p.v.v.D.z.v.w.g.m.i.g.g.p.n.D.E.R.X.2.K.I.G.D.D.I.F.F.F.z.J.C.u.h.n.h.f.m.x.g.gQt.cQtQtQtQt.dQt.dQt.d.#Qt.#QtQt.g.f.f.f.f.g.f.f.f.fQtQt.i.f.i.s.f.xQt.f.f.f.f.g.x.g.x.u.u.o.y.v.v.v.h.u.h.p.w.u.u.v.u.o.g.f.g.f.d.a.cQt.c.#.c.c.#.c.c.#.c.#.c.c.#.c.#.cQt.#Qt.c.i.#.cQtQt.qQt.iQt.iQt.#.#.rQt.aQt.a.cQt.c.c.a.c.#.c.#.a.#.a.a.#.c.a.c.e.b.l.e.l.e.l.e.a.a.a.c.a.c.a.cQt.#QtQt.#Qt.i.i.iQtQtQtQt.i.x.i.g.x.i.fQtQt.c.a", +".r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.a.a.a.a.a.a.c.a.cQt.cQt.cQt.dQt.m.C.G.F.o.v.u.o.D.B.D.o.h.h.h.h.v.v.D.P.2.1.2.2.Q.T.D.A.B.C.F.J.D.G.C.v.u.h.g.x.s.x.s.g.dQtQt.cQt.d.i.d.q.dQt.fQt.i.d.i.f.f.f.s.f.xQt.i.i.f.iQt.s.i.s.f.s.i.f.i.f.i.g.g.g.g.m.g.p.n.n.y.v.u.u.p.h.h.h.h.h.p.p.h.A.u.g.f.f.#.c.c.#.c.#.c.#Qt.c.#.c.q.c.c.#Qt.#.c.#.i.c.i.#Qt.cQt.iQtQtQt.g.i.g.i.q.#Qt.c.c.c.#.cQt.aQtQtQt.cQt.c.#.c.#.a.c.cQt.c.l.l.l.e.e.l.e.e.a.a.b.#.r.a.r.c.#.i.#QtQtQtQtQtQtQt.f.q.f.f.i.i.i.iQtQt.#.c.a.a", +".a.a.r.a.r.a.r.a.a.a.a.a.a.a.r.a.a.#.r.#.#.#.r.a.c.c.c.c.c.d.i.q.i.o.F.B.A.u.n.o.C.G.z.v.o.v.o.o.J.K.S.2#h#c.X.N.E.F.D.z.o.o.y.A.y.C.o.h.h.g.m.f.g.h.f.f.g.d.cQt.d.q.dQt.dQt.fQtQtQtQtQt.i.i.f.f.f.f.i.g.i.f.f.f.i.f.g.i.g.i.m.i.f.g.f.f.i.x.g.h.h.h.p.v.u.p.u.h.m.x.x.m.g.g.m.g.v.u.u.iQt.d.c.b.c.q.c.c.#.c.#.c.c.c.#.c.c.#.c.c.q.d.#Qt.c.i.#QtQt.g.i.g.i.s.i.gQt.iQt.iQt.iQt.f.cQt.c.aQt.aQt.cQt.a.c.#Qt.c.c.c.b.e.e.l.b.e.l.b.a.a.a.c.a.c.c.a.#Qt.#Qt.iQt.q.fQt.q.qQt.i.i.g.gQt.#.c.a.a.l.l.j", +".r.l.a.l.a.a.a.a.r.a.r.a.l.a.a.a.r.r.c.r.#.r.#.a.c.c.c.cQt.dQt.g.g.o.E.F.o.o.u.o.D.F.I.B.o.B.I.K.G.K.E.M.S.M.F.B.D.C.v.u.w.u.v.u.A.u.u.h.g.m.f.f.h.g.h.g.q.dQt.r.q.d.fQtQt.dQt.dQtQt.i.fQt.f.g.f.q.f.f.f.fQt.iQt.x.i.i.f.i.f.f.i.f.g.f.i.f.g.x.g.p.p.p.u.p.u.p.h.x.x.f.x.m.g.f.g.o.u.v.gQt.#.cQt.#.c.c.#.c.#Qt.c.#.c.q.c.#.c.q.d.#.cQt.#.iQt.fQt.sQt.i.f.s.f.s.i.i.q.i.#.i.d.iQtQtQtQtQt.cQt.cQt.#.q.#.#.c.#.#.c.l.b.e.l.e.l.e.e.a.b.a.bQt.b.c.r.#Qt.#QtQtQtQtQt.#Qt.fQt.f.f.iQt.#.a.r.r.#.l.e.j", +".e.e.a.a.a.l.a.l.e.e.e.j.l.e.a.aQt.aQt.c.cQtQt.#.iQtQt.g.f.i.x.g.s.u.G.F.B.z.D.z.M.Q.E.M.Q.F.I.z.A.y.o.v.u.p.h.w.g.m.g.w.g.h.p.n.p.w.g.m.g.f.m.f.g.fQt.d.q.c.cQt.cQt.a.b.a.b.#.b.c.c.cQt.cQtQtQtQt.#.q.#.c.#.c.c.i.#.d.i.dQtQt.iQtQtQt.i.cQt.#.cQt.qQtQt.i.i.g.g.s.i.i.f.f.f.g.f.g.u.z.p.g.f.f.e.dQt.d.fQt.d.dQt.#.d.#Qt.g.f.f.f.q.#.qQtQt.f.x.f.f.i.h.h.u.h.h.h.s.g.i.m.g.g.h.w.i.f.f.f.g.g.i.q.#.#Qt.#.#.c.c.c.a.r.a.a.a.a.e.l.#.a.a.a.a.r.l.r.a.a.qQtQt.f.f.i.i.qQt.i.g.g.gQt.c.r.a.a.e.a.e.e", +".e.b.e.l.b.a.b.a.e.l.e.l.e.a.b.c.a.a.#.#.d.#.cQt.fQtQt.f.m.g.h.h.n.B.F.H.I.T.Q.Z#i.2.N.H.B.B.C.v.u.u.u.p.h.w.h.g.g.g.m.g.g.h.g.h.w.g.g.g.m.f.m.f.i.g.fQt.f.cQt.a.aQt.a.a.r.a.b.a.cQt.cQt.c.cQt.d.#.c.c.c.c.c.#.cQt.cQt.c.#.#.cQt.c.c.#.cQt.#.dQt.xQtQtQt.g.g.g.g.f.sQt.f.s.f.fQt.i.h.o.v.g.f.f.bQt.fQt.dQt.dQt.f.#.iQt.d.f.g.i.fQt.iQt.f.i.iQt.s.f.g.m.g.m.u.p.w.i.s.s.g.m.m.m.p.m.m.x.h.g.x.xQt.i.iQt.#.i.c.f.d.#.a.r.#.l.a.b.l.a.r.a.r.l.a.a.a.r.a.#QtQt.x.fQtQt.i.g.f.g.g.sQt.#.a.a.a.a.e.b.e", +".e.l.e.a.b.l.b.l.e.e.b.a.b.a.a.r.c.c.c.qQt.dQtQt.qQt.s.g.h.h.p.p.B.P.2.U.X.N.L.L.S.H.J.C.C.C.y.o.p.h.h.m.g.f.x.f.g.f.f.x.m.x.m.p.p.w.p.m.h.m.f.i.g.fQt.f.cQt.aQt.c.a.r.a.b.a.r.a.c.c.c.cQt.c.c.c.c.#.c.q.c.#Qt.#.cQt.#Qt.fQt.cQt.qQt.d.#.f.#.c.cQtQt.xQtQt.i.x.i.iQtQt.i.f.f.f.fQt.i.h.A.h.g.dQt.dQt.d.i.d.i.dQt.d.#Qt.i.f.f.f.gQtQt.i.#.f.g.f.g.g.g.m.p.u.p.u.p.p.g.h.p.p.h.p.u.y.n.v.u.u.w.s.f.x.i.gQtQtQt.dQt.#.c.#.c.a.a.a.a.a.a.a.a.a.a.#.a.a.a.#.c.#Qt.f.fQt.q.f.m.h.g.f.f.#Qt.c.l.b.l.b.e", +".e.e.b.a.b.a.a.b.l.e.a.a.a.c.c.c.c.qQtQt.d.f.g.f.fQt.f.f.h.v.o.z.L.2#h#c.L.T.H.I.z.C.y.u.u.h.p.h.g.m.h.g.x.x.f.g.fQt.g.f.f.h.x.m.v.u.w.p.w.h.m.x.g.x.dQtQt.c.a.b.#.b.a.b.#.b.a.b.c.c.c.c.c.c.c.c.c.q.c.c.#.c.c.#.c.cQt.#.c.#.c.c.c.c.c.#.c.c.#.cQtQtQt.i.f.f.f.gQt.iQt.gQt.fQt.gQt.i.g.z.y.w.f.dQt.fQt.dQt.dQt.fQt.i.dQt.f.g.f.f.i.f.d.g.x.x.p.m.u.v.v.z.v.o.y.A.y.n.u.y.y.C.z.z.I.z.z.C.A.v.p.g.m.g.g.s.fQt.i.d.#.q.#.#.c.#.b.a.a.#.a.aQt.a.c.a.a.a.#.c.c.fQt.f.iQt.i.h.g.h.iQt.#.#.c.a.c.a.e.b", +".a.a.a.l.a.e.a.a.#.a.a.r.#.c.cQtQt.dQt.f.f.f.f.f.s.i.h.u.v.o.B.B.1.W.Q.F.D.z.C.y.A.u.v.p.u.h.h.h.g.x.x.h.x.g.q.f.q.g.f.f.x.x.w.n.v.v.v.h.w.g.h.gQt.f.i.d.cQt.b.a.b.#.b.a.b.e.b.b.c.cQt.c.c.cQt.c.c.c.#.c.c.#.c.c.#.c.c.c.#.c.c.#.c.c.#.c.c.c.c.#Qt.dQt.iQt.f.i.fQtQtQt.i.f.f.f.f.s.f.h.z.z.z.g.x.i.fQt.gQt.fQt.f.f.f.g.i.f.g.h.g.x.w.h.h.m.h.w.p.F.F.E.E.H.I.E.Q.I.F.I.H.I.Q.E.Q.N.S.F.K.B.C.o.p.h.u.g.g.g.g.f.f.i.f.#Qt.c.a.c.a.c.c.c.a.c.a.c.a.#.a.a.c.c.#Qt.f.q.i.g.x.h.g.f.f.#.c.#.a.c.b.b.a", +".a.b.a.b.a.#.a.b.a.bQt.c.c.c.c.d.f.f.f.g.f.f.x.g.h.v.v.A.D.z.D.B.G.z.v.h.p.g.p.h.h.p.h.h.h.w.g.w.g.m.h.i.x.x.f.g.g.x.x.m.h.w.p.v.o.u.v.p.w.g.g.hQt.i.dQtQt.c.b.#.b.a.b.#.b.a.b.a.c.c.c.c.c.c.c.c.#.c.c.#.c.c.#.c.c.c.#.c.c.c.c.c.#.c.c.c.c.#.c.cQt.#.c.dQtQtQt.fQtQtQt.fQtQtQt.fQt.g.g.y.F.B.v.h.x.h.x.x.x.x.h.f.h.f.h.h.h.w.h.p.w.u.o.A.o.B.z.I.P.R.N.P.R.N.M.L.M.P.T.R.N.N.L.2.1.X.L.E.E.B.C.z.u.p.h.w.g.g.i.gQtQt.i.#.#Qt.a.r.#.b.c.b.a.r.a.c.l.a.l.a.#.d.i.d.s.x.m.u.w.h.h.gQtQt.c.c.c.a.e.b", +".a.a.#.a.b.a.a.a.a.c.c.dQt.cQt.fQt.f.x.x.g.w.h.w.o.C.z.C.z.o.z.v.h.p.g.m.m.p.g.g.w.p.h.g.h.x.x.g.p.p.h.m.h.h.x.x.m.g.w.p.h.v.u.o.u.n.h.h.h.g.s.gQt.i.d.i.c.c.a.b.#.b.a.b.b.l.r.e.c.a.c.a.c.a.c.a.c.a.c.a.c.a.c.a.a.a.l.a.l.a.l.a.a.a.a.a.a.a.a.a.#.c.c.#.d.dQtQtQt.q.i.iQt.f.g.f.i.g.p.A.F.z.v.o.h.s.w.x.p.h.w.p.w.p.n.n.u.o.o.A.C.z.I.F.J.F.E.E.Q.H.H.H.E.Q.E.H.I.F.F.H.P.P.P.N.N.N.M.S.P.E.B.B.o.v.u.v.p.m.x.m.f.iQt.d.q.c.c.c.b.a.b.r.a.b.b.r.l.e.a.c.c.d.dQt.i.i.h.h.p.w.h.gQt.i.#Qt.c.c.c.b", +".b.a.b.a.a.a.r.a.r.aQt.dQt.i.dQt.g.h.g.m.h.h.w.p.J.F.I.C.v.u.u.u.h.h.m.f.i.f.h.p.h.h.h.w.h.g.w.g.v.u.w.h.u.h.m.h.n.u.v.u.v.u.u.o.u.u.v.p.w.h.m.h.iQt.d.i.c.c.r.a.b.a.b.#.b.b.a.b.c.c.c.c.c.c.c.c.c.c.#.c.q.#.c.q.a.a.a.a.a.a.a.a.#.a.a.#.a.a.#.a.c.c.c.c.#Qt.fQtQtQtQt.fQt.fQt.fQt.i.v.y.F.C.A.v.n.n.n.p.h.n.p.n.v.o.v.A.z.z.I.B.F.H.H.Q.I.F.B.F.B.J.C.C.C.C.A.y.A.y.y.C.D.B.B.F.Q.P.T.R.S.S.H.B.C.z.v.u.w.h.g.m.q.g.iQt.#.c.c.c.a.b.b.a.b.b.a.b.l.e.#.a.cQt.d.dQt.m.h.w.u.h.h.gQtQtQt.c.c.c.r.c", +".d.d.d.d.c.c.c.c.iQt.d.q.f.s.s.p.h.h.u.o.o.B.I.I.o.v.p.p.h.h.h.u.g.f.f.f.g.g.f.f.f.g.f.f.g.w.p.h.h.w.u.v.v.z.C.C.A.z.C.A.u.u.u.p.w.p.w.h.x.h.f.fQtQt.fQt.dQt.c.c.b.l.b.a.a.a.b.a.c.a.r.a.c.b.c.a.c.#.c.#.c.c.#.c.c.a.b.a.b.a.a.r.a.c.a.c.c.c.#.d.#.c.#.c.c.c.#.dQtQtQtQtQt.iQtQt.d.q.g.p.y.z.D.v.y.v.y.B.G.T.S.T.E.H.H.P.Q.P.P.P.T.H.F.G.B.D.o.o.p.n.p.w.p.w.h.u.h.h.n.w.h.v.n.u.z.z.F.E.H.E.E.Q.z.F.D.A.C.y.y.v.m.g.fQt.qQtQt.c.f.d.c.cQt.a.b.bQt.b.b.b.a.a.c.b.cQt.h.p.v.v.h.h.q.d.dQt.c.dQt.q", +"QtQtQt.fQtQt.c.c.c.f.f.h.w.n.s.p.A.z.B.D.z.D.B.D.u.v.h.w.p.w.h.w.i.f.s.x.g.x.x.h.i.g.g.w.u.p.o.v.A.v.A.z.C.z.z.B.A.z.C.v.v.n.u.u.p.w.h.w.i.x.i.f.f.#.dQt.c.c.a.c.l.e.e.a.b.a.a.b.c.c.c.c.c.c.c.c.#.c.#.cQt.cQt.c.c.a.a.b.a.c.b.a.a.a.a.c.#.c.c.c.c.c.c.c.c.c.c.cQtQtQtQtQtQtQtQt.d.f.f.u.u.C.B.v.u.u.o.D.F.I.P.P.F.F.F.E.H.F.K.I.z.D.D.C.C.v.v.v.m.h.g.g.w.g.h.g.s.w.h.h.u.w.h.n.v.A.C.B.D.J.B.z.z.C.C.y.v.u.v.u.p.h.i.i.gQt.dQt.c.c.c.c.b.b.#.b.c.c.a.bQt.c.#.c.qQt.g.h.v.u.w.g.f.fQt.c.c.#.d.f", +".d.x.d.d.f.q.f.q.f.g.g.g.v.v.z.F.E.K.I.D.A.v.v.v.m.h.h.u.h.g.g.g.h.g.x.f.g.g.g.h.h.w.u.h.v.v.o.o.B.F.z.B.D.z.D.C.v.v.u.v.p.v.s.h.w.h.g.x.x.g.i.gQtQt.i.cQt.c.r.b.e.l.e.a.a.b.a.a.b.a.b.a.b.a.b.a.c.c.c.c.c.#.c.c.a.b.c.a.b.a.b.c.a.#.a.a.c.c.#.c.#.c.#.c.#.c.c.r.c.c.c.c.c.c.c.c.d.cQt.g.p.A.z.C.h.h.u.o.o.B.G.I.D.B.B.B.D.D.C.z.v.o.u.u.w.h.h.h.g.g.m.g.i.g.f.m.g.g.x.w.x.w.h.w.u.p.v.u.u.v.u.u.u.p.w.h.u.h.u.w.p.u.g.w.i.i.f.f.q.c.#Qt.c.a.b.a.f.c.c.c.d.cQt.d.c.i.f.g.w.u.p.p.gQtQt.c.iQt.i.f", +".d.d.g.q.f.h.x.h.p.o.A.C.E.Z.X.2.S.I.I.o.v.v.o.v.h.h.v.u.v.u.u.h.h.g.h.w.h.n.p.p.v.u.u.v.z.D.B.z.Q.E.H.E.z.B.C.z.v.p.w.h.h.m.x.h.g.g.h.x.g.f.f.fQtQtQt.c.c.b.l.b.l.e.e.a.a.b.c.b.c.a.b.a.b.a.r.a.a.a.a.a.a.a.a.l.a.b.a.b.e.b.a.l.a.a.a.a.a.c.a.c.c.#.c.c.c.r.c.c.c.c.c.#.c.#.c.#.f.dQt.f.g.v.z.o.h.h.h.u.v.v.v.v.z.C.C.C.o.v.o.v.p.p.u.h.h.i.x.i.h.g.x.x.x.h.g.x.x.x.h.g.x.g.x.g.w.h.h.g.g.i.s.i.h.g.x.g.h.x.s.f.p.h.p.p.g.h.g.gQtQt.c.c.cQt.cQtQtQt.f.dQt.i.d.iQtQt.g.g.h.h.v.h.x.f.fQt.i.f.f.x", +".x.h.x.s.s.p.p.p.D.K.S.V.8#p#i.1.T.B.I.D.o.o.v.o.o.y.o.v.o.v.v.A.h.w.u.h.v.v.v.v.o.v.A.o.C.B.B.F.Q.S.Q.E.F.B.D.B.o.v.h.n.m.s.h.x.x.h.g.f.f.f.gQt.i.#.cQt.a.a.e.e.b.l.e.#.a.a.b.a.b.a.c.b.c.a.b.a.a.a.l.b.l.a.b.a.b.l.e.e.l.e.a.b.l.l.a.#.a.a.#.c.a.#.a.a.a.a.a.l.a.#.a.a.b.a.a.a.d.c.d.q.f.v.C.z.h.v.h.n.h.n.v.p.v.o.v.w.u.u.h.h.w.g.g.i.m.f.f.f.f.g.fQt.fQt.fQt.g.f.f.f.g.f.g.f.g.i.g.f.i.#.d.#.d.i.dQt.dQt.fQt.m.g.w.h.u.p.p.p.i.iQtQt.#.#Qt.#.d.i.#Qt.dQtQtQt.iQt.f.g.g.u.v.v.h.m.x.f.g.h.g.h", +".w.u.v.v.v.o.A.A.J.R.W#c.8#h.L.T.D.D.D.C.z.u.u.u.o.o.o.o.o.o.o.o.h.p.w.p.h.h.p.u.h.v.u.v.o.o.A.C.F.I.D.F.F.I.I.I.v.o.w.p.w.h.m.h.h.g.f.f.i.fQtQt.c.q.c.a.a.r.e.e.e.e.l.b.a.b.c.a.b.a.e.e.e.e.b.e.e.e.e.e.e.e.e.j.e.j.e.e.e.e.e.e.l.b.l.l.a.a.a.l.a.a.a.a.a.l.a.a.a.b.a.b.a.a.b.a.d.c.c.cQt.h.A.C.u.p.u.h.h.h.h.w.u.h.h.p.h.h.w.g.g.i.m.f.f.fQt.gQtQtQtQtQtQtQtQt.fQt.gQtQtQtQtQt.f.fQt.c.c.c.b.#.c.c.c.q.c.d.fQt.f.g.g.h.h.h.u.h.i.i.sQt.f.fQt.fQt.f.dQt.i.f.g.f.f.g.f.g.g.u.o.C.p.v.h.m.g.h.o.p", +".D.B.D.B.D.B.J.B.F.Q.E.F.E.B.C.C.o.u.y.v.p.w.h.p.p.p.h.p.h.p.h.p.m.h.g.h.h.w.p.h.m.g.g.w.u.u.v.u.v.u.o.A.C.z.B.B.v.o.A.o.p.w.p.w.g.g.fQt.f.gQt.i.c.#.aQt.e.e.e.a.e.l.e.a.e.a.b.a.e.e.b.l.b.l.e.l.e.e.e.e.e.e.e.e.l.e.l.j.l.e.t.e.l.l.l.l.a.l.a.a.e.l.e.l.e.e.l.e.e.e.e.e.e.e.e.e.f.cQt.b.c.m.v.B.v.o.p.p.h.h.g.g.h.w.h.m.h.m.g.f.i.f.f.f.f.i.qQt.d.d.d.f.d.d.f.d.#.d.#.dQt.dQt.d.#.c.cQt.b.b.c.b.a.#.r.c.#.c.#Qt.f.f.f.i.i.h.g.h.h.h.g.p.m.g.f.f.i.g.f.f.f.i.i.f.x.g.g.m.h.o.D.I.D.o.u.u.o.v.A.D", +".P.P.E.J.z.C.C.C.v.A.v.u.p.w.p.n.u.u.h.h.g.h.h.w.i.s.i.s.g.g.i.s.g.g.g.m.g.h.h.w.f.f.m.g.w.h.w.p.p.h.n.n.o.A.z.B.A.z.z.B.A.o.v.n.h.m.i.f.g.f.iQt.#Qt.a.a.e.a.b.b.l.b.e.a.e.b.c.a.b.e.l.e.e.e.e.b.j.k.j.j.j.j.j.j.e.j.e.e.j.e.e.e.j.l.e.l.#.a.a.a.l.e.l.e.a.l.b.l.e.e.e.e.e.b.e.e.c.c.bQt.c.x.z.z.z.A.o.v.h.g.w.g.h.g.h.g.i.i.fQt.m.i.i.f.fQtQt.d.i.dQt.dQt.dQt.dQt.cQt.q.c.#.q.c.c.a.b.a.c.r.#.b.l.a.#.a.#.cQt.d.g.q.h.f.m.x.g.h.h.p.p.g.h.g.h.g.f.i.f.s.f.s.x.s.h.m.h.g.w.o.I.G.I.D.A.D.A.D.I.K", +".K.G.v.u.p.m.g.g.i.i.g.m.g.h.p.h.s.h.i.i.f.g.x.f.f.dQt.dQt.d.d.d.cQt.dQt.d.iQt.d.q.f.d.f.x.h.h.s.s.m.m.p.u.v.v.o.u.o.o.B.I.B.C.A.v.p.w.h.g.qQt.i.c.c.b.#.e.b.e.e.e.e.j.e.j.e.j.k.e.l.e.e.e.e.j.e.j.e.e.j.e.j.e.e.j.l.e.t.e.l.e.l.b.l.e.j.e.j.e.j.e.e.e.l.e.j.e.e.e.e.j.e.e.l.e.e.j.e.a.c.f.f.w.v.E.z.v.h.g.f.f.x.m.x.g.m.x.f.g.iQtQt.iQtQtQtQtQt.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.r.b.b.b.l.b.b.b.e.e.b.r.d.d.dQt.d.d.d.dQt.dQt.#.gQt.i.g.w.u.v.h.w.h.h.h.u.u.p.p.v.v.v.C.B.Q.R.I.K.I.I.I.C.D.B", +".E.D.z.p.g.g.f.m.i.g.i.g.g.g.h.h.h.g.i.i.f.f.g.x.dQt.d.i.dQt.c.c.c.cQt.c.c.cQtQt.c.cQt.fQt.f.h.x.i.s.g.m.w.h.v.u.w.p.o.B.z.A.o.v.v.v.p.u.g.s.f.q.c.c.#.b.b.e.j.e.e.j.e.k.e.k.e.j.e.e.e.l.j.j.e.j.e.e.j.e.j.e.j.e.l.j.e.e.j.e.j.e.l.e.e.l.e.l.e.e.e.l.e.e.j.e.j.e.j.l.e.l.j.e.t.e.e.e.a.cQt.f.g.o.Q.J.v.p.g.i.f.x.f.f.f.f.f.i.f.f.gQtQtQtQtQt.iQt.c.c.c.c.c.c.c.c.c.a.c.c.c.r.c.a.a.e.a.l.r.b.a.e.l.e.l.b.a.c.d.d.fQt.d.#.cQt.c.dQtQtQt.f.g.p.p.u.u.v.u.u.y.v.A.y.o.C.A.z.D.E.K.R.I.B.G.B.D.A.o.o", +".G.B.o.p.g.f.f.g.i.i.f.f.i.g.i.f.q.iQt.f.g.f.f.qQt.i.d.c.c.b.b.b.a.c.c.a.c.a.c.c.a.a.c.c.d.d.f.f.g.f.g.g.w.n.h.n.m.g.u.o.o.v.p.w.u.v.u.h.g.g.s.iQt.c.c.a.r.e.e.b.j.j.k.j.j.b.j.k.l.j.e.j.e.j.e.j.e.l.e.j.e.e.l.e.j.e.l.e.l.e.l.e.e.l.e.e.l.e.j.l.j.e.j.l.e.j.e.t.e.j.j.e.e.e.e.e.j.e.aQt.d.f.g.u.E.D.v.u.h.h.x.f.i.f.i.f.f.f.f.iQtQtQt.iQtQtQtQt.c.a.c.a.c.a.c.a.b.c.b.a.b.a.a.b.b.b.b.b.a.e.b.#.e.e.b.a.a.c.fQt.c.d.c.c.c.c.fQt.cQtQt.g.g.h.p.u.y.A.y.z.z.B.z.J.z.B.B.F.F.T.P.K.B.D.z.o.v.o.v.B", +".F.z.v.w.i.f.f.f.f.f.g.i.fQt.fQtQtQtQtQt.dQt.dQt.c.c.c.c.c.b.a.bQt.a.a.r.a.b.c.r.a.r.#.c.c.dQt.d.qQtQt.g.g.w.w.h.g.m.g.w.p.w.x.m.u.p.p.w.g.m.f.gQtQtQt.b.a.e.j.e.j.j.j.e.k.e.k.j.e.l.e.e.j.e.j.e.j.e.j.e.j.e.j.e.l.j.e.l.e.e.e.t.b.e.e.j.b.l.e.e.j.e.e.j.e.j.e.j.e.j.e.j.j.j.l.j.e.j.e.c.#Qt.g.h.F.B.z.u.h.g.f.x.fQt.fQt.f.s.f.fQtQtQtQtQtQtQt.c.c.c.c.r.c.c.r.c.a.a.a.b.a.a.r.a.b.l.a.b.a.b.l.b.e.l.a.a.c.c.c.c.c.c.c.c.c.c.c.dQt.g.f.i.w.h.h.p.v.y.v.C.C.C.C.B.C.D.F.K.T.T.S.K.B.z.o.v.o.B.C.B", +".D.o.p.g.f.f.fQtQt.#QtQtQtQtQtQtQtQtQt.#Qt.d.d.f.#.c.c.a.c.b.a.e.c.bQt.a.b.a.b.c.a.a.c.a.aQt.c.d.i.c.i.f.m.g.x.f.s.f.m.w.m.g.g.i.g.g.w.g.m.g.g.sQt.q.c.c.a.b.e.b.j.j.k.j.j.k.j.k.e.j.e.j.e.j.e.j.e.j.e.j.e.l.e.e.l.e.l.b.e.l.e.e.l.j.l.e.e.j.e.l.j.e.l.e.j.e.j.e.j.e.j.e.e.j.e.e.j.e.b.c.#.dQt.s.C.A.z.u.h.x.x.fQtQtQtQtQtQt.f.f.iQtQtQtQtQt.c.#.c.r.a.a.b.a.a.b.c.b.c.a.r.a.b.a.a.#.b.a.a.a.#.a.a.a.a.#.a.a.a.c.c.c.c.c.b.c.c.cQt.f.f.f.i.g.m.h.u.v.v.y.v.y.z.C.C.z.G.E.P.S.I.E.F.D.z.C.B.B.B.D", +".o.u.h.g.i.iQtQtQt.dQt.c.cQt.c.q.c.#Qt.c.cQt.c.c.c.#.c.#.c.l.r.b.a.a.b.a.a.a.a.a.b.a.b.a.b.a.a.a.c.#.c.d.f.g.g.h.x.g.x.w.h.s.f.i.g.g.g.f.f.g.f.gQtQt.c.#.r.a.a.e.e.j.j.j.j.j.e.j.e.l.e.l.e.j.e.j.l.e.e.j.e.j.l.j.e.l.e.e.l.b.e.l.e.e.e.j.e.l.e.j.e.e.j.e.j.e.j.e.e.j.e.j.e.e.j.e.e.e.l.aQt.#Qt.f.p.y.A.u.h.i.fQtQtQtQtQtQtQtQtQtQtQtQt.iQtQt.c.#.b.a.r.a.b.a.r.a.e.e.e.a.b.a.a.b.a.b.a.a.b.a.b.a.a.a.a.a.a.a.a.a.c.c.a.c.c.a.c.a.d.dQtQt.f.f.fQt.g.h.g.h.p.u.p.v.o.C.D.T.T.E.F.D.J.I.D.B.C.D.B.C", +".p.g.fQtQtQtQt.f.cQt.c.c.q.c.a.a.c.c.c.c.c.a.c.r.c.a.c.b.a.b.e.e.a.a.a.b.e.e.b.a.#.a.a.b.l.e.e.e.e.a.bQt.d.g.f.f.x.x.m.g.h.h.f.iQt.iQt.iQt.dQtQtQt.iQtQt.#.b.c.b.e.e.j.k.j.k.j.k.e.j.e.j.e.l.e.e.e.j.l.e.e.e.e.l.e.b.l.e.l.e.l.e.b.l.l.e.l.e.e.j.e.l.e.l.j.e.j.e.j.e.e.e.t.e.l.e.j.e.e.a.a.c.qQt.x.v.u.u.h.f.dQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.c.#.a.b.e.e.b.e.e.e.b.l.e.a.e.a.e.a.l.l.l.l.a.a.a.a.a.#.a.a.a.#.r.a.#.b.a.b.a.b.a.b.c.c.cQt.c.#Qt.#Qt.f.f.m.g.m.g.h.v.C.B.K.E.G.B.z.D.J.F.C.C.C.C.v", +".g.g.gQt.#QtQt.fQtQt.c.#.c.a.a.l.b.b.c.a.a.a.a.a.a.a.#.c.a.b.e.e.e.a.b.l.e.e.l.a.b.a.e.e.b.l.j.b.e.b.#.c.d.f.x.g.f.h.s.n.w.g.g.d.i.#Qt.#.cQtQtQt.iQtQt.#.c.c.a.a.e.e.j.j.e.k.e.j.e.l.e.l.e.j.e.t.e.l.e.e.l.l.e.l.e.l.e.e.l.e.e.l.l.e.e.l.e.l.e.l.j.e.j.e.e.j.e.l.e.e.t.e.e.e.e.e.e.e.e.#.a.a.#.#.i.g.u.g.fQtQt.a.#Qt.#Qt.#Qt.#QtQt.iQtQtQtQt.#.c.a.a.a.a.a.a.a.a.e.e.e.b.a.b.a.a.e.a.a.a.a.l.#.l.a.r.a.r.a.r.a.a.c.a.c.b.c.a.r.a.a.b.a.a.a.c.c.#.cQtQtQt.f.x.i.h.u.A.D.E.J.C.v.v.C.B.D.C.z.v.y.v", +".iQtQt.iQtQt.q.d.c.c.c.c.c.c.c.a.a.c.#.r.a.b.a.b.a.b.b.a.e.a.a.a.b.a.e.e.b.l.b.a.e.l.e.l.a.b.a.a.e.b.e.a.a.cQt.s.g.s.m.g.g.f.g.g.dQt.c.cQt.a.c.c.a.cQt.c.c.i.cQt.b.l.e.e.e.l.e.e.j.j.j.e.j.e.j.e.e.j.j.j.j.j.b.e.b.l.e.b.l.e.b.l.b.a.b.l.b.l.e.e.l.l.l.l.j.e.e.e.j.e.e.e.t.e.t.e.e.j.e.e.l.a.#.aQt.i.p.p.h.x.d.#.a.r.c.c.r.c.d.dQtQt.c.iQt.cQt.c.c.b.a.b.a.b.a.a.e.l.e.l.e.l.e.e.l.l.l.e.a.c.c.c.e.e.l.b.l.e.l.e.e.e.e.e.e.b.b.b.a.a.b.a.c.c.c.cQtQt.d.f.g.g.x.g.u.o.u.o.v.p.w.p.w.u.z.C.o.v.p.h", +".s.f.qQtQtQt.#.c.c.c.cQt.c.c.a.c.c.b.c.a.b.a.r.a.b.a.l.b.a.a.b.a.l.b.a.l.e.e.e.a.j.l.b.e.e.a.b.a.b.e.e.a.#.#QtQt.g.g.m.h.f.g.d.f.cQt.c.#.c.c.cQt.a.a.a.c.#.c.c.d.a.a.a.a.a.e.a.e.e.l.e.l.e.l.e.l.e.b.e.b.b.e.e.b.l.b.l.l.e.l.e.l.e.l.e.e.l.e.e.l.l.l.l.e.l.j.e.e.e.e.j.l.e.e.e.e.j.j.l.e.e.a.r.a.q.i.g.n.g.x.d.r.c.a.a.c.a.c.cQt.cQt.#.d.#.i.c.#.c.b.a.a.b.a.a.r.l.e.b.l.e.e.l.e.l.l.l.a.a.c.a.c.e.l.e.l.e.e.e.l.b.e.e.b.e.b.l.b.e.a.a.b.c.c.c.c.c.dQt.f.f.x.x.w.u.u.v.v.h.h.h.h.m.u.o.o.o.o.p.h", +".i.i.iQtQtQt.c.#.#.c.c.c.a.r.a.r.#.c.b.a.c.b.a.a.a.b.a.a.e.a.a.a.e.e.e.e.e.l.e.e.j.j.j.l.e.a.a.a.e.e.l.b.a.c.gQt.s.i.m.fQt.d.fQt.f.c.c.#.c.#.c.b.a.a.c.a.c.c.c.c.a.r.a.c.a.c.a.c.a.a.a.a.a.a.a.a.e.l.e.e.l.l.b.l.e.a.e.b.l.e.b.l.b.e.l.e.e.b.l.e.b.l.l.t.e.e.e.e.l.e.l.e.j.j.e.j.e.j.e.j.l.r.a.#Qt.f.m.h.h.f.d.rQt.b.c.c.c.c.r.c.c.#.c.#.d.#.c.#.a.a.a.a.a.a.a.a.l.l.l.l.b.l.l.b.l.l.#.a.a.a.c.c.e.b.l.e.e.l.j.e.e.l.e.e.e.a.b.a.a.b.a.a.c.a.c.c.c.qQt.f.f.x.m.g.u.v.u.h.u.m.g.g.i.m.p.v.u.v.h.g", +".gQtQtQt.iQt.i.c.c.cQt.cQt.aQt.a.b.a.a.a.b.a.e.b.e.a.l.b.a.a.r.a.l.b.e.l.e.e.j.e.j.j.j.e.j.e.a.e.e.e.b.a.a.#QtQt.g.s.f.i.d.i.c.c.aQt.aQt.a.b.a.b.b.l.r.a.a.b.a.c.c.c.c.c.r.c.c.c.a.c.c.cQt.#.cQt.a.a.a.a.a.c.a.c.l.b.l.l.r.l.b.l.b.l.e.b.l.l.e.l.l.l.b.l.e.l.e.e.e.l.e.e.e.l.j.e.j.j.l.e.e.a.a.a.i.f.h.w.g.f.d.r.a.c.c.b.c.c.c.c.#.cQt.c.#QtQt.d.a.a.a.a.a.b.a.a.e.a.l.a.l.a.l.r.l.a.r.a.a.a.b.a.e.l.e.l.e.e.e.e.l.e.e.l.b.a.c.b.a.b.a.b.c.c.r.c.#.dQt.f.g.x.g.s.u.u.h.w.h.i.x.i.s.f.i.g.m.h.g.g", +"QtQt.gQt.#.d.d.cQt.c.c.c.c.c.c.a.a.a.b.a.a.a.a.e.l.e.e.l.e.e.l.e.e.l.j.j.j.j.j.j.j.j.j.j.j.e.e.l.j.e.e.a.a.cQt.s.i.g.fQt.i.cQt.f.a.r.#.c.a.r.a.b.e.b.e.e.b.a.b.e.c.a.c.a.c.a.c.a.c.#.c.#.c.c.#.c.#Qt.c.#.aQt.c.q.a.a.#.e.l.e.b.l.e.l.e.l.e.e.l.b.l.l.l.l.e.l.e.e.e.j.e.t.e.e.e.l.j.j.e.e.l.a.#.a.c.i.g.u.g.f.dQt.c.a.c.c.c.c.c.c.d.#.cQtQtQt.iQt.a.#.a.e.a.l.a.l.a.a.a.a.a.a.a.a.a.r.a.a.a.a.a.a.e.e.l.b.e.t.e.j.l.l.j.l.e.a.a.a.l.a.b.a.c.c.c.c.cQt.d.f.f.g.g.w.u.u.h.g.g.g.m.gQtQt.xQt.i.i.m.f", +"QtQt.#.#.c.c.a.b.a.a.a.a.#.a.a.b.b.l.b.e.e.e.j.e.e.e.e.e.l.b.e.l.j.j.e.e.e.j.e.j.j.j.j.e.j.l.e.e.e.e.e.e.a.qQtQt.g.i.qQt.c.f.cQt.b.#.a.r.a.b.b.e.j.b.e.e.b.e.e.b.b.a.b.b.a.b.a.b.q.c.#.q.#.#Qt.#.f.#.c.#.c.c.#.c.l.r.a.l.r.l.a.l.e.l.b.e.e.l.e.l.l.l.l.l.l.e.b.e.e.l.e.e.j.l.j.e.j.e.t.e.e.b.c.a.cQt.m.h.g.g.#.a.c.r.c.c.a.c.c.d.qQt.c.#.iQtQtQt.r.a.a.a.r.a.a.a.l.a.l.a.r.#.a.a.q.#.a.a.a.e.a.b.l.b.e.l.e.e.l.e.l.e.l.b.l.a.l.a.a.b.a.c.b.c.c.c.c.#.i.f.f.h.h.h.v.p.v.g.m.x.i.x.s.qQtQt.x.f.i.g", +"QtQt.c.c.cQt.b.b.a.b.a.b.a.a.b.a.e.l.e.l.e.l.e.l.j.j.j.j.e.j.j.b.j.j.t.j.j.j.j.j.k.k.j.j.j.j.j.e.j.e.e.a.a.cQt.g.qQt.i.c.q.cQt.c.#.b.a.#.e.b.l.e.j.j.j.e.j.e.e.e.a.a.b.a.a.b.a.a.a.r.a.a.a.#.r.#QtQt.gQt.gQt.i.f.#.a.l.e.l.e.b.e.l.e.a.l.b.l.e.e.l.l.l.b.e.l.e.e.l.j.e.t.e.e.e.e.j.j.e.e.l.#.a.#.c.d.i.m.w.i.cQt.c.#.c.c.c.d.dQt.cQt.c.#.dQtQt.i.c.r.a.r.#.r.a.r.a.a.#.r.a.r.a.r.a.c.r.a.l.l.b.l.e.l.e.e.l.e.e.b.t.l.t.l.l.a.a.a.b.a.b.a.c.c.c.c.dQt.d.f.g.h.g.w.p.h.g.g.g.i.g.i.g.f.x.iQt.s.h.h", +".qQtQt.c.c.b.e.a.e.b.#.a.a.b.a.a.e.e.e.e.j.e.j.e.j.j.j.b.j.e.j.l.j.b.j.e.j.j.j.j.k.k.j.j.j.j.j.j.j.e.e.a.a.#QtQtQt.qQt.q.d.c.#.c.#.a.#.b.e.r.e.e.e.j.j.j.k.e.e.e.e.b.l.e.b.l.e.e.a.a.r.a.r.#.a.#Qt.iQtQtQt.qQtQt.#.a.#.a.b.b.l.#.e.l.b.e.l.e.b.l.l.b.l.l.l.e.e.e.e.l.e.e.j.l.j.l.e.e.j.l.e.b.a.a.b.i.f.m.g.gQt.a.c.c.c.c.c.dQt.fQt.c.#.cQtQtQtQt.#.a.r.a.a.r.#.a.l.r.r.a.a.a.r.a.c.#.c.a.#.a.e.e.l.e.e.l.b.l.e.l.l.l.l.l.l.l.a.a.l.a.a.r.a.r.c.c.c.cQt.f.h.g.p.p.p.h.m.g.s.g.f.f.g.iQt.i.q.x.p.h", +".h.h.f.#.a.a.a.a.a.a.b.a.b.l.j.e.l.e.l.e.j.e.j.e.j.j.j.j.j.j.j.j.e.l.e.l.e.j.e.t.j.j.j.j.0.j.e.j.k.l.a.#Qt.iQtQt.i.i.gQt.i.i.c.c.a.r.a.e.l.l.e.e.e.e.j.j.j.j.j.j.j.j.e.j.l.e.e.l.b.l.e.#.a.r.a.c.r.r.#.q.f.g.g.i.g.dQt.c.c.a.a.b.l.r.l.a.b.a.e.l.a.a.a.a.e.l.a.l.b.l.l.l.l.e.l.l.j.e.j.l.b.l.e.#.j.aQt.x.u.h.f.q.a.#.e.b.l.a.d.d.r.a.#.d.qQtQtQt.r.r.a.r.a.r.a.r.r.a.r.#.r.r.#.r.a.r.a.a.r.l.r.a.a.#.r.l.l.l.l.l.l.l.a.l.a.l.a.a.#.a.a.a.a.a.c.c.#.rQtQt.g.h.p.h.p.g.g.g.x.g.g.f.i.fQt.f.f.m.g.m", +".h.g.f.#.a.#.a.a.r.a.c.a.a.b.l.e.j.b.e.l.j.e.j.e.j.j.e.j.e.j.e.j.l.e.l.j.e.l.e.e.j.j.j.0.j.j.j.j.j.e.a.#QtQtQt.iQtQt.f.iQt.dQt.c.b.a.e.l.b.l.e.l.e.e.e.j.e.j.e.j.e.j.e.j.e.e.e.e.e.e.l.b.a.c.#.c.a.#.#.#QtQt.f.m.f.gQt.f.cQt.a.#.a.a.a.a.a.a.a.a.a.l.a.l.a.a.e.a.l.l.b.e.l.l.e.l.j.e.j.e.l.l.b.e.j.#.i.x.h.m.fQt.c.c.e.a.aQt.#.d.a.q.c.#QtQtQt.f.#.a.r.r.a.r.a.r.a.r.a.r.r.a.r.r.r.a.#.r.a.a.a.l.r.l.a.l.a.a.l.a.e.a.l.b.l.a.l.l.a.l.a.a.#.a.c.#.r.r.#.i.s.p.u.p.g.w.g.g.s.g.f.iQtQtQt.s.f.i.f.g", +".h.mQtQt.i.c.#Qt.a.c.b.a.b.l.e.e.l.l.e.e.j.e.j.e.j.j.j.j.j.j.j.j.e.e.e.l.b.j.e.t.j.j.j.e.j.j.j.j.k.a.c.qQtQt.sQt.f.i.g.#.d.i.c.c.l.l.b.a.e.e.l.e.j.e.j.j.j.j.j.j.j.e.l.j.e.l.e.l.e.l.e.a.a.b.c.a.a.aQt.#.iQt.f.f.gQt.dQt.c.c.c.cQt.#Qt.cQt.a.a.#.a.#.a.a.#.l.a.l.l.l.l.l.l.l.b.l.j.e.t.e.e.b.a.c.b.cQt.x.g.w.gQt.c.q.a.#.a.c.cQt.#.#.#QtQtQtQtQt.#.r.a.r.a.r.a.r.a.r.q.a.#.r.c.r.a.a.r.a.r.a.r.a.r.a.r.a.r.l.r.a.l.a.l.a.l.a.l.a.a.a.a.a.a.a.c.a.#.a.iQt.g.g.h.g.p.g.g.g.f.s.f.f.i.f.i.f.i.g.f.g", +".p.p.mQtQt.#.c.#.r.a.c.#.a.e.b.l.e.e.e.l.j.e.j.e.j.j.e.j.e.j.e.j.l.l.b.e.e.l.e.e.j.e.j.j.j.j.e.j.e.a.#Qt.i.i.q.gQt.s.fQt.i.d.cQt.e.r.l.e.l.b.e.e.e.j.e.j.e.j.e.j.l.j.j.j.e.e.e.e.l.b.l.b.#.c.a.#.l.a.a.a.cQt.g.f.dQtQtQtQt.cQt.cQtQtQt.#Qt.cQt.c.#.a.a.a.a.a.a.a.#.a.a.#.a.a.a.a.e.j.b.e.l.a.a.a.l.q.i.g.m.g.g.i.dQt.#.c.q.cQt.dQtQtQt.iQtQt.iQt.#.#.a.r.a.r.a.r.#.#.a.r.r.a.r.#.a.r.a.#.r.l.a.l.#.l.r.b.l.l.l.l.a.a.a.l.a.l.b.l.l.#.l.a.a.l.c.c.#.#QtQt.f.m.g.x.g.w.i.m.i.f.iQtQt.qQtQtQt.f.i.f", +".g.i.i.iQtQt.#.c.#.cQt.a.a.e.l.e.e.t.e.e.e.j.e.l.j.j.j.j.j.j.j.j.e.e.l.l.e.e.j.e.e.j.e.e.e.j.e.e.l.#.#Qt.x.i.s.f.s.i.g.#.dQt.a.b.a.l.b.a.e.l.l.e.j.j.b.j.j.j.j.j.j.j.j.j.l.e.l.e.e.e.e.a.a.b.c.a.e.b.a.c.c.dQtQtQt.c.c.cQt.dQt.fQt.fQt.d.#Qt.cQtQt.#Qt.#.a.c.a.c.a.a.#.a.a.l.a.b.l.l.e.l.a.a.cQt.a.#Qt.s.g.w.p.m.fQt.i.c.c.#Qt.gQt.iQtQtQtQtQtQt.#.r.#.a.r.a.r.a.#.q.r.c.r.q.r.r.a.r.a.r.a.a.r.a.r.r.a.r.r.l.l.l.#.l.a.a.e.a.l.l.a.l.a.a.l.a.c.a.#.dQt.i.i.f.f.f.s.i.g.f.iQt.fQt.iQt.i.f.iQt.f.s", +".s.i.s.h.sQtQt.#.c.a.r.a.a.e.e.l.e.e.l.e.l.e.j.e.j.j.e.j.e.j.e.j.l.e.e.e.e.l.e.j.l.e.e.j.e.e.j.e.l.a.#.q.g.p.g.i.s.f.iQt.q.dQt.b.#.a.e.l.b.e.e.l.j.j.j.j.e.j.e.j.j.j.j.j.e.e.e.e.l.e.l.b.a.c.b.c.l.l.e.#.a.c.i.d.#.c.cQt.c.i.cQtQtQtQt.iQtQt.i.#.a.#.a.#.a.#.c.q.a.a.a.c.aQt.a.r.e.l.e.a.b.#.c.c.cQt.i.g.g.w.p.h.m.gQtQtQt.cQt.fQtQtQtQtQt.#.c.#.r.r.a.r.a.r.a.r.r.#.r.r.a.r.a.#.r.#.a.a.r.a.r.a.l.r.l.a.l.#.a.l.a.a.b.a.a.l.a.e.l.b.l.a.b.l.#.c.c.cQtQtQt.fQt.f.g.i.i.s.q.iQt.xQtQt.#Qt.q.gQtQt", +".q.i.p.g.g.fQt.#Qt.cQt.a.r.l.e.e.j.e.b.e.j.j.e.e.j.j.j.j.j.j.j.j.e.j.l.j.l.j.e.l.b.l.e.a.a.e.l.a.a.a.q.q.g.h.s.iQtQtQt.c.c.c.c.b.l.b.l.r.l.l.e.e.j.e.j.e.j.j.j.j.j.j.e.j.e.t.b.e.l.b.e.a.a.#.c.a.e.b.b.a.b.c.d.d.a.#.c.cQt.dQt.f.#.q.#.#.c.#.c.#.c.c.#Qt.c.#.c.#.a.c.a.#.#.a.a.c.b.l.#.a.c.c.cQt.#.iQt.f.s.p.p.v.p.g.mQtQt.iQt.f.fQtQtQt.f.#.#.#.a.r.a.r.a.r.a.r.#.#.a.q.r.c.#.#.#.r.r.#.a.r.#.r.#.a.r.a.r.a.l.r.a.l.a.a.l.e.l.e.l.l.a.l.a.a.c.a.#.c.q.dQt.d.i.f.s.i.iQtQtQt.fQt.#.q.#QtQtQtQt.g", +".d.i.h.w.g.iQt.#.r.a.c.a.a.e.b.l.e.l.e.l.e.e.t.e.j.j.e.j.e.j.e.j.l.e.e.e.e.l.b.e.a.e.e.a.a.e.e.l.a.#.i.q.s.g.i.i.gQt.i.cQt.c.aQt.e.a.e.l.e.e.e.e.j.j.j.e.e.e.j.e.j.j.j.j.e.e.l.e.e.l.e.l.b.c.bQt.e.e.e.a.b.c.f.q.#.c.a.c.i.cQt.d.r.#.q.c.r.#.r.aQt.#.c.c.c.#.c.c.#.a.c.#.#.c.a.a.l.e.a.b.aQt.cQtQt.f.xQt.i.w.h.u.u.w.g.g.iQtQt.q.f.fQtQt.#.c.a.r.a.r.a.r.a.r.#.a.q.r.a.r.a.r.q.#.r.a.a.a.r.a.a.r.a.r.l.#.l.r.l.l.a.a.a.l.a.l.b.l.a.e.e.a.a.l.c.c.c.cQt.c.cQt.dQt.i.i.s.f.xQtQt.i.rQt.c.qQt.gQtQt", +".#.i.f.g.h.i.fQt.i.#.#.c.r.a.l.l.j.j.j.j.j.j.e.j.e.e.j.e.j.e.j.e.j.j.j.l.j.e.a.a.a.a.a.c.c.c.c.c.r.#.rQt.q.i.g.f.r.a.a.a.a.b.b.a.l.b.l.#.e.l.e.e.e.e.e.j.j.j.k.j.j.j.j.e.e.e.e.b.l.e.l.b.a.a.a.c.a.aQt.a.c.c.c.d.a.a.aQt.#.c.q.a.#.c.#.#.c.#.#.#.a.a.a.l.a.a.a.a.a.a.l.a.a.a.a.#.l.a.a.#.a.a.c.#Qt.qQt.i.g.g.p.w.u.p.u.h.g.mQt.c.q.#.q.#.c.#.#.c.#.c.#.c.#.c.#.#.a.r.#.a.r.r.a.r.r.r.r.r.r.a.r.a.r.r.r.r.a.a.l.a.b.a.l.l.e.l.l.e.a.l.a.e.l.a.a.lQt.a.c.#.cQt.#.d.s.i.i.iQtQt.gQtQt.qQt.fQtQtQtQt", +"QtQt.i.x.g.g.g.fQtQt.#.#.#.l.e.l.b.j.e.j.e.j.j.j.e.j.e.j.e.j.e.j.j.j.e.e.e.e.e.e.l.a.l.c.r.c.#.c.d.#.#.#QtQtQtQt.a.#.b.a.a.b.a.b.l.l.l.e.e.e.e.e.j.k.j.k.j.j.j.e.k.j.j.e.e.e.e.e.e.b.e.l.b.a.r.a.b.c.b.c.c.c.d.i.c.q.c.r.c.r.c.c.#Qt.#.c.#.#.c.#.a.#.a.#.l.r.b.a.l.a.#.a.a.l.a.a.l.b.l.a.a.a.#.#Qt.iQt.s.g.m.p.h.h.h.p.h.gQtQt.f.#Qt.cQt.#.q.c.#.c.#.a.#.a.#.a.#.c.r.#.r.#.a.#.r.r.#.a.r.#.a.r.#.a.#.#.a.l.a.a.a.a.l.a.e.a.l.b.l.a.a.e.l.e.l.a.a.a.a.a.c.cQtQtQt.i.i.s.f.sQtQtQtQtQtQt.iQtQtQt.f", +"Qt.f.i.g.g.g.g.iQtQt.q.#.a.a.a.l.e.e.l.e.e.e.e.l.j.e.j.e.j.e.j.j.e.j.l.j.l.e.b.e.a.a.c.c.c.c.cQt.r.#.#.qQtQt.#.d.a.a.a.b.a.e.r.l.#.l.e.l.e.e.e.e.j.j.j.j.k.j.k.j.j.e.e.e.e.b.a.a.a.a.l.a.a.c.cQt.a.#.#.cQt.#QtQt.#.c.c.c.q.c.#Qt.#.#.c.#Qt.#.c.q.a.a.a.a.a.a.a.a.a.a.a.a.#.a.a.a.#.r.a.a.cQt.#QtQtQt.qQt.f.g.g.m.g.s.g.m.iQtQt.i.#Qt.#.q.c.#.#.c.r.a.a.a.a.a.a.a.r.r.c.r.#.r.a.#.r.r.r.#.r.a.a.r.r.a.r.r.a.a.l.a.l.e.l.l.e.l.l.e.a.a.l.a.l.e.a.l.a.a.#.c.r.cQt.c.i.m.i.iQtQt.gQtQt.i.fQtQt.i.g.q", +".q.i.f.g.m.x.g.g.xQtQt.#.#.a.a.l.e.l.e.e.j.l.j.e.e.j.e.l.j.e.j.j.j.j.j.e.e.e.l.e.c.r.c.#.c.#QtQt.r.#.#.#.c.#.c.c.l.a.l.e.e.a.e.b.l.l.e.b.l.e.e.e.e.k.j.j.e.j.j.j.e.e.e.l.e.a.b.c.a.a.a.c.c.#.cQt.#.#QtQtQt.iQtQt.f.iQtQtQtQtQtQtQtQtQtQtQt.d.#Qt.a.a.r.a.a.r.a.r.#.c.a.a.a.c.a.c.r.a.#.#.a.#Qt.#.#QtQt.gQt.i.i.g.s.g.p.p.gQtQt.#.#.#.d.#.#.c.#.c.a.a.l.a.l.a.l.a.q.a.r.a.r.#.r.#.r.r.r.a.r.a.r.a.a.#.r.#.a.a.a.a.e.a.l.b.l.a.e.a.l.a.a.l.b.l.l.l.a.a.a.c.c.c.#Qt.i.i.g.i.gQt.q.iQtQtQtQtQtQt.f.f", +".i.i.i.i.g.g.g.hQtQtQtQt.c.#.a.a.l.a.l.a.e.e.e.l.e.e.e.j.e.j.e.e.j.e.e.l.e.e.e.l.c.c.#.c.#QtQtQt.a.#.#.#.c.c.c.#.l.l.e.e.e.e.e.e.#.l.e.l.e.e.e.e.k.j.j.j.k.j.j.k.l.t.l.b.l.a.a.#.c.c.#Qt.#.#.dQtQtQtQt.iQt.f.fQtQtQtQtQt.iQt.iQtQt.iQt.iQt.#Qt.#.#.#.c.#.q.c.#.#.c.#.c.c.#Qt.c.#.#.r.a.#.i.#.iQt.i.qQt.qQt.s.f.i.s.i.m.v.h.gQt.#.c.#.q.#.d.#.#.c.a.#.a.a.a.a.a.a.a.r.#.r.a.r.a.r.r.r.q.r.r.#.r.a.#.r.a.r.a.a.l.a.e.l.a.l.a.e.l.l.a.l.l.a.l.e.a.e.a.l.c.#.c.i.d.i.i.i.i.iQtQt.fQt.i.xQt.qQt.f.i.i", +".h.g.i.g.s.h.u.pQt.q.iQt.#.c.a.a.a.b.a.b.a.l.b.e.e.j.l.e.l.e.e.e.j.j.e.j.e.l.e.b.r.#.#QtQt.#QtQt.#.#.#.c.a.a.a.b.l.b.l.e.t.e.e.e.e.l.l.e.e.e.e.e.e.k.j.j.j.j.j.j.e.a.e.l.a.l.c.c.c.#.cQtQt.i.fQtQt.iQtQt.f.i.iQt.iQtQtQtQt.iQtQtQt.qQt.qQt.xQt.i.#.q.#.#.#.#.q.#.#.c.c.q.c.#.c.c.r.#.q.#.#QtQtQt.qQtQt.i.iQt.i.iQtQt.g.v.o.g.f.q.c.#.d.#.q.#Qt.#.a.a.a.a.l.l.l.l.r.r.#.a.#.#.#.r.#.r.r.a.r.a.a.r.r.#.r.a.a.a.a.a.e.a.l.a.a.l.a.e.l.e.a.l.a.l.e.l.a.a.c.c.#.c.#Qt.i.g.s.i.g.q.iQt.iQtQtQt.s.i.m.i", +".h.g.i.g.h.h.p.p.i.fQtQtQt.c.a.a.a.e.a.e.a.e.e.l.e.e.e.j.e.j.l.j.e.j.e.l.e.a.a.a.#Qt.qQtQtQtQtQt.#.c.#.c.l.a.e.e.l.j.j.j.j.j.e.e.l.b.e.l.e.e.e.e.j.j.j.j.k.j.j.k.l.l.l.a.a.a.#.r.#.c.#QtQtQtQt.fQt.q.i.i.s.g.g.gQtQtQtQtQtQtQt.s.q.x.q.q.s.q.i.qQtQt.i.#Qt.#Qt.#.d.qQt.cQt.#Qt.#Qt.#.#.#.i.#QtQt.i.iQt.qQt.i.qQt.g.i.m.p.v.p.h.i.c.#.#.iQt.#.#.c.a.a.a.a.b.a.b.a.c.r.#.r.r.r.a.r.r.r.r.#.a.r.a.a.r.a.#.r.a.#.a.a.l.l.a.a.l.a.e.l.b.l.e.a.l.a.e.l.a.a.a.#Qt.cQtQt.i.i.i.iQtQt.f.q.i.i.i.i.i.f.g.g", +".g.h.i.x.i.g.p.p.s.iQtQt.c.q.a.a.r.a.a.a.b.a.b.e.l.j.j.e.j.l.e.e.j.j.e.e.e.l.b.b.#.#Qt.#QtQtQtQt.cQt.a.a.a.e.j.e.j.j.e.j.e.k.j.e.l.l.l.j.e.e.e.e.e.k.j.k.e.j.j.j.l.l.a.l.r.c.a.c.cQt.c.cQtQtQt.f.qQtQt.i.i.g.g.gQtQtQt.qQt.sQtQtQtQtQtQtQtQtQtQt.i.#QtQtQt.#Qt.#Qt.#.d.#QtQt.d.#.#.#.q.#Qt.iQtQt.q.i.q.iQt.x.f.xQt.f.g.w.p.u.g.i.#Qt.#QtQt.#Qt.#.a.#.b.a.#.b.a.a.r.a.r.a.r.c.r.#.r.r.#.a.r.#.a.r.#.r.#.r.a.a.a.l.b.a.l.a.#.a.a.l.l.e.l.a.l.a.l.e.a.#.#.c.c.c.#Qt.i.i.sQtQtQt.iQt.qQt.q.i.i.i.g.g", +"QtQtQtQtQtQt.d.fQtQt.i.iQtQtQtQt.#.c.l.a.l.a.b.e.e.e.e.e.e.e.e.e.t.j.l.l.a.c.cQt.q.q.f.qQt.iQtQt.a.b.a.e.e.e.l.j.j.j.j.j.k.e.e.e.l.l.b.l.l.j.e.e.e.e.b.e.e.e.e.e.e.e.e.l.b.e.a.a.a.b.a.c.c.c.c.c.#.#.gQt.fQt.fQtQtQtQt.iQtQtQtQtQt.iQtQt.iQtQt.i.d.#.q.d.#QtQtQt.q.q.q.q.q.q.q.q.iQtQtQtQtQtQt.iQt.#.dQtQtQt.i.g.i.xQt.s.g.v.p.h.u.gQt.x.#.a.a.#.a.a.a.a.b.a.a.r.a.r.#.a.a.#.r.a.r.#.r.r.a.r.r.a.r.r.a.r.a.r.a.a.r.a.#.a.l.l.l.e.e.l.e.e.e.e.e.l.a.a.a.r.#.#.d.#.f.q.fQt.q.f.fQt.i.qQtQtQtQtQt.c", +"Qt.#QtQtQt.gQt.d.#.iQtQtQtQtQtQt.c.#.a.a.a.a.a.e.e.e.e.e.e.e.e.e.e.l.e.l.a.c.#.d.q.q.i.qQtQtQtQt.b.c.a.b.l.e.j.e.j.k.j.k.j.e.e.e.l.l.l.l.e.e.e.e.b.e.e.e.e.b.e.b.j.j.e.e.l.e.a.r.a.c.b.c.c.c.c.c.c.cQtQtQtQtQt.fQtQtQtQtQtQtQt.i.fQt.fQtQt.iQtQt.#.d.#Qt.qQt.#.i.q.x.q.qQt.dQt.dQtQtQt.#Qt.qQtQt.#.iQt.q.iQt.iQt.iQt.g.i.w.A.z.u.p.g.s.qQt.q.a.c.a.a.b.a.a.a.a.a.a.a.a.r.a.r.a.#.a.r.a.a.r.a.r.a.r.c.rQt.r.a.a.l.a.l.r.l.l.l.l.l.e.e.e.l.b.e.l.b.a.r.a.a.c.#.c.#Qt.sQtQt.i.f.f.iQt.#.i.qQtQt.c.#", +".#Qt.#QtQt.c.dQt.r.#.#Qt.qQtQtQt.#.c.#.c.a.a.b.a.e.e.e.e.e.e.l.e.l.#.l.a.c.cQtQt.i.q.iQtQt.q.fQt.a.b.a.e.e.e.j.e.j.j.k.e.e.e.e.b.l.b.l.l.e.l.e.e.e.e.e.e.e.e.e.e.j.e.j.j.e.e.e.e.e.e.a.b.c.a.r.c.#.#QtQtQtQtQtQt.#.c.#.c.c.#.c.#.#.q.#.qQt.#Qt.q.#.#.#.r.aQt.#Qt.#QtQtQt.q.iQtQt.q.d.q.d.#.d.d.q.r.r.r.q.#QtQtQt.s.i.i.m.h.A.z.y.g.p.p.qQtQt.#.a.#.a.a.#.a.a.a.a.a.r.a.a.r.a.r.a.r.#.a.r.a.r.a.r.a.r.r.r.a.r.a.r.a.r.a.a.l.l.l.l.t.l.b.l.l.l.l.l.a.#.r.a.r.c.#.d.q.iQt.qQt.iQt.f.x.qQtQt.#.#.c.#", +".c.#.#Qt.c.#.c.c.#.c.iQtQt.iQtQtQtQt.#.c.#.c.c.a.c.a.c.a.c.a.b.a.a.r.c.#.cQtQt.i.q.qQt.iQtQt.fQt.c.c.a.b.e.e.e.e.j.k.j.e.e.e.b.l.l.l.l.l.b.e.e.e.e.e.e.e.j.e.e.e.j.j.j.e.j.e.b.e.a.e.b.a.b.c.c.c.d.c.#.f.#.c.c.#.c.c.c.c.#.c.c.c.a.c.c.c.a.c.#.c.r.a.r.a.a.#.#.#.#Qt.#.#.#.#.#.#.r.d.#.r.r.#.r.#.r.q.r.#.#.d.i.d.i.i.m.h.m.u.A.C.g.p.u.i.i.q.i.c.a.a.a.a.a.a.#.a.l.a.a.r.#.a.a.r.#.a.r.a.r.a.r.a.q.r.c.r.#.a.a.a.l.r.b.l.l.l.l.l.e.l.a.l.a.a.l.l.r.l.r.#.c.#.c.#.iQt.i.s.i.f.s.f.i.xQt.#Qt.cQt.c", +".#.#Qt.cQt.c.c.c.#.c.#.c.#QtQtQtQtQtQtQt.q.c.#.a.c.c.c.c.c.c.c.c.#.c.#.cQtQtQtQt.i.q.s.qQt.q.fQt.b.a.b.e.l.e.j.e.j.j.e.e.e.e.a.b.l.l.l.l.e.l.e.e.j.k.e.k.e.k.j.j.j.j.e.j.j.e.j.e.e.e.l.b.a.a.c.a.c.#QtQt.#.d.#.c.a.a.a.a.a.a.a.a.#.a.#.a.a.#.a.a.b.l.a.#.a.a.#.a.#.#.#.c.#.#.#.#.q.r.r.r.r.r.#.r.r.r.r.q.r.#.#.q.i.i.i.m.g.u.A.C.h.h.h.u.iQtQtQt.#.c.c.c.c.c.c.#.a.r.#.a.r.a.r.a.r.#.a.r.a.r.a.r.a.r.a.r.a.r.a.l.r.a.r.l.l.l.e.l.a.a.a.a.a.l.a.a.l.l.a.r.c.#QtQt.f.x.i.f.i.g.f.i.i.i.i.i.#.c.#.#", +".a.r.a.#.q.c.#.c.a.a.c.c.c.c.c.d.i.s.qQtQtQt.c.c.#.c.c.#.c.c.#.cQt.#QtQtQt.iQtQtQt.qQt.i.f.i.fQt.b.a.c.e.b.j.e.l.e.e.l.e.a.a.c.a.l.l.b.l.e.e.e.e.j.j.j.j.k.j.j.j.j.j.j.j.j.j.e.j.t.e.e.e.a.b.a.b.#.dQtQt.c.r.a.r.a.a.a.l.l.a.a.a.l.l.l.b.l.l.l.l.l.b.l.e.a.a.a.r.#.a.c.#.c.aQt.c.r.r.r.r.#.r.#.r.r.#.r.a.#.q.#.#.sQt.s.f.s.p.z.G.h.h.h.h.m.iQt.q.c.q.#.#.q.#.#.#.a.r.a.r.l.a.a.r.a.r.r.a.r.a.r.a.r.#.#.c.r.a.r.a.l.l.l.l.l.l.l.l.l.a.r.#.a.a.a.a.l.l.l.a.r.cQtQt.q.i.f.s.i.i.f.m.g.m.iQtQt.#.#.a", +".r.a.r.c.#.c.a.c.a.l.a.#.a.#.c.#QtQt.iQtQtQtQtQt.#Qt.#Qt.#QtQt.#QtQtQtQtQtQtQtQt.q.i.q.fQt.qQtQt.a.b.a.e.l.e.e.e.l.l.e.l.a.a.a.#.l.l.l.l.e.l.e.e.k.k.j.k.j.j.k.j.k.0.j.j.e.j.j.e.e.e.t.e.a.b.a.cQt.#Qt.#.#.a.a.b.l.e.l.e.e.l.b.l.e.l.l.l.e.l.e.e.j.e.e.e.e.e.b.b.a.a.a.a.a.#.a.a.#.a.a.a.a.a.a.#.a.a.#.c.c.c.c.c.q.#.i.i.i.m.o.n.o.p.h.p.h.i.i.fQtQtQtQt.dQt.c.c.a.r.a.a.r.#.r.a.#.#.a.r.a.r.a.r.a.r.r.r.a.#.a.l.l.l.l.l.l.l.l.l.a.a.l.a.l.r.l.l.l.l.a.r.c.#.#.i.f.i.s.i.f.g.i.m.p.m.i.iQt.c.#.a", +".r.a.r.a.a.c.#.a.a.a.l.c.c.a.c.c.f.i.f.iQtQt.#QtQtQtQtQtQtQtQtQt.iQtQtQtQtQtQtQt.q.q.q.iQtQtQtQt.c.b.c.a.e.j.e.l.b.l.l.a.a.a.a.c.l.l.l.l.e.j.e.e.j.j.k.j.j.k.k.j.0.k.j.j.j.j.j.j.j.e.e.e.a.a.b.a.c.fQt.c.#.r.l.l.e.l.b.e.e.l.e.e.l.e.e.e.e.e.l.b.j.j.j.j.e.r.e.e.a.a.a.b.a.a.a.a.a.b.a.#.a.a.a.a.r.e.b.b.cQt.cQt.d.#.#.q.f.i.u.n.o.n.h.h.h.m.gQt.cQtQtQtQt.d.#.#.#.a.r.#.a.a.r.a.r.r.a.r.a.r.a.r.a.r.c.r.a.r.r.a.l.l.l.l.e.l.l.a.l.r.a.r.a.l.a.l.l.l.r.a.a.c.cQt.i.i.f.i.s.g.i.g.u.h.gQt.#.#.r.a"}; diff --git a/tests/auto/gui/image/qimagewriter/images/ship63.pbm b/tests/auto/gui/image/qimagewriter/images/ship63.pbm Binary files differnew file mode 100644 index 0000000000..4da971a2d7 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/ship63.pbm diff --git a/tests/auto/gui/image/qimagewriter/images/teapot.ppm b/tests/auto/gui/image/qimagewriter/images/teapot.ppm new file mode 100644 index 0000000000..b8ab85f3a5 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/teapot.ppm @@ -0,0 +1,31 @@ +P6 +256 256 +255 +\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[7 eOLjQLmSMoTMnSMlRMhPL_9 \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀnSMtVMzYN~[N~[N\N\O€\O€]O€]O€]O€]O€\O€\O}[NyYNtVM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-wXN}[N€]O„^O†_O†`O‡`Oˆ`Oˆ`OˆaO‰aO‰aO‰aO‰aO‰aO‰aOˆaOˆ`O†_Oƒ^O\N\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaMLyYN…_O‰aP‹bPcPŽcPŽdPŽdPdPdPdPdPdPdPdPeP‘eP’eP’eP‘ePdPcP…_OpUM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN…_OdP“fP•gQ–hQ˜hQ˜iQ™iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœjQœjQœjQ›jQœjQ™iQ“fP‡`O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJiQL‹bP—hQkQ¡mR¤nR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦pR¨pS©qSªqS«rS¬rS«rS©qS¤oRœjQ€]O\KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀfOLrUMcPŸlR©qS¯tS²uTµwT·xT¸xT¹yTºyT»zT»zU¼zU¼zU¼zU»zUºyT¸xT¶wT¯tS¡mR‰aOhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àa0 cNLqUM€\O”fQ¦pS²wVºzV¿|VÂ}VÄVÆVÇ€VÉ‚WÌ…[Õeæ w÷³‹êª…Ĉg§qT“fQ{ZNYIK9\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀO1{G#‘JkRMqUMtVN–iS¨v\·€d¹bµzZ±vU°uT®sSªqS¤nRœjQ’eP„^OrUMHh>!T4\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-V5wE"~I#†M%U+¥e7²l:°g2®b*a(`(©^(¥])¡^-›]1ŠS,qC$`9 R3G-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@)J/i>!pA"tD"wF$yH&xH&tE$wE#yG%}M+ƒT4S5mE*Z7!K/B*;'\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‰aO¦oR½{UÇ€VÏ…X<(F-a: e<!h>!j@#k@$h>"d<!c=$hD-fF2[<)K0@);'5$Ë‚VÇ€V¿|U_LKYIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À…_O·xTÉ‚Wó«€ûµ‹Ö’k¼|X×>µf-¨^(¡Z'šW&–T&œN>)F-J/b; g>#nD(jB&c<!b=%jH2_A/I0!<(8&5$”J¥Y’S%8&;'?)E,<:HA=HE?IJAISFJYIKXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À£nRÁ}UܘqÊŠe±vU²e,™V&¥V†C
€@|>y<u:r9o7l6 +j5 +h4 +g3 +5$D,K/b; h>"wM1tK.e="a<#cA,U8&E-<(9&.!a0 b1 c1 + ++3#@)46G<:HMCIXHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀU*´vT¿~X¸{YÃk+›W&‰N$|>u:p8k5 +f3 +a0 _/ ]. [- I¡\*ª_(‘LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c<!a=%Y7"N1F,;'NCJNCJNDJODJODJODJh>!a: X/K% +g3 +a0 Z- \/T*Q(ŠHµm8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d<!yF#O+€N,rC#qB"pB#k?"a: Z7 6ODJPDJPEJQEJQEJREJREJREJRFJSFJSFJSFJSFJe<!X/ +^/ V+Q(L&I$r9 TlRMnSM46G47G47G46G46G46G46G46G36G36G25G25G15G04G/4F.3F + +X&pUMuWMwXNxXN<:H<:H<:H<:H<;H<;H<;H<;H=;H=;H=;H=;H>;H>;H?<H@<HA=HC>HG@ILBIREJ[JKcNLjQL§pR±uTºzUÃ~VÈWË‚XÖŽcäsÒŽe¼{V²vT¨pSžkR•gQŒbP†_O‚^O]O€\O€\O€\O€\O€]O]O]O]O]O]O]O]O]O]O]O€\O€\O~\N}[N|ZNxXN•T%H$ +›W&rVMvWNyYNzYN|ZN}[N}[N><H?<H?<H?<H?<H?<H@<H@<H@<HA=HA=HB=HC>HE?IG@IIAIKBIODJSFJWHK—hQŸlR§pR°b(¾i*Én+Ù|7Û|6Ïr,Íq+Êp-Ãl+»g)±b(®sS§pS lRšiQ•gQePcPŠaPˆaO‡`O‡`O†_O†_O…_O…_O…_O…_O…_O…_O…_O„_O„^O„^Oƒ^Oƒ^O‚]O]O€\O~[N{ZN•T% + + +@%<-$G?@…pfdNLuWM\NdNL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀTFJvWN‰aP./01„E}[N]O…_Oˆ`O‰aP‹bPŒbPcPcPŽcPdPdPdPeP‘eP’eP’eP“fP“fQ”fQ•gQ•gQ–gQ–hQ—hQ˜hQ™iQšiQ›jQœjQkQkRžlRŸlRžY&¤\'¨^'µ^½bÀcÃeÇi ÄgÀc½b¼a¹`µ^´]¯X¢[' Z'žY&¢mR¡mR¡mR lRŸlRŸlRžkRkQœkQœjQ›jQšjQšiQ™iQ™iQ˜iQ˜hQ—hQ—hQ—hQ–gQ–gQ•gQ•gQ•gQ”fQ”fQ“fQ“fP’eP‘ePdPcP‰aP—O + B\À\À\À\À\À\À\À\À\À\À%7!!C*F#P){dYœze»p€\OgPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ`LKvWNŠaPm6 + +$5 ¬`(¶e)£nRœjQƒ^OJAI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXIK^KKdNLhPLuWM‚]OŒbP”fQeP
m6 +†`OŽcP“fQ—hQ˜hQ™iQšiQšjQ›jQ›jQ›jQœjQœjQœjQœkQkQkQkRžkRžkRžkRžlRŸlRŸlRŸlR lR lR lR¡mR¡mR¡mR¡mRºg)³c(²c(±b(V¿cÂeÅi!Åi!Àd¼bº`¹`·_·_¶^¢Q§]'ª_(`(¹f)£nR£nR£nR£nR£nR£nR£nR¢nR¢nR¢nR¢nR¢nR¢nR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR¢mR¢mR£nR¢mR¢mR¡mR mRkR—hQˆGa0 ŠbP mRœjQ“fQ‰aP}[NrUMmSM…L$\À\À\À\À\À\À\À\À B B
#C, 8&H.Z7 §pR›jQ{ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJ[JK`LKdNLhQLqUM{ZN…_OŽcP–gQ—hQ +‹bP‘eP–hQšiQ›jQœjQkQkQkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlR lR lR lR mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢nR£nRÀj*ºg)·e)¶d)Âd°XÅgÅhÂe¿c½b½b¾bªU`(®a(¯a(³c(¾i*¤oR¤oR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¥oR¥oR¤nR¡mR›jQŽQ%Z- œjQ£nRŸlR—hQŽdP…_OuWMpTMnSMkRLa: \À\À\À\À\À\À\À B B&D2
@*S6#G@IPDJ˜hQmSM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ]KKbMLeOLiQLlRMvWN\OˆaO‘eP—hQœjQ•gQ +!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀREJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N]O„^O†`O‰aO‹bPdP•gQ™iQœkQ lR¤nR§pSªrSsS¯tT²uT´vT¶wT·xT¹yT¹yTºyTºyT¹yT¶xT´vT¬rS¢nR—hQ¿|U¿|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ}UÀ}UÁ}UÁ}UÁ}UÁ}UÂ}UÂ~UÃ~UÃ~VÃ~VÄVÅ€WÆX®a(ŸlRªrS´vT¸yT¼zU¾|UÁ~VÃXÆ‚[Ɇ_΋dÓ‘jÔ“mÔ“nБlÊŒhĆd½_¶{[°vWªsU¦pS¢nRžkRšiQ˜hQ•gQ“fQ‘ePdPŒbP‰aO†_Oƒ^O€\O|ZNxXNsVMpTMnTMmSMjQL€C B)D&/F-3F47G6%>"Y7 kA$YIK]KK^KKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N‚]O„_O‡`OŠaPŒbPŽcPeP“fP—hQ›jQžlR¢nR¥oS©qT¬sT¯uU²vU´wV¶xV¸yV¹yUºzU»zU¼{U½{U¾{U¾|U¿|U¿|U¿|U¿|U¾{U½{U¼{U¼zU»zTºyT¹yT¸xTµwT³vT´vT´vT´vT´wT´wTµwT·xT¹yTºzT¼zU½{U¾{U¿|UÀ|UÂ}UÄVÅ€WÇ‚YÉ„\͈_ÑŒdÙ”láuç£|쩂ſtî‡ëª…æ¦ÞŸ{Õ—sËŽl†d¹^³yZuW¨qU¤oSŸlRžkRœjQšiQ˜hQ–gQ”fQ‘ePdPcPŠaP‡`O„^O]O}[NyYNuWMpTMoTMmSMkRLgPL&D#.E,3F46G;'<(D"iB(VGJ]KK`LK[JKB>H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N€\O‚^O…_Oˆ`OŠaPŒcPdP‘eP“fQ•gQ—hQ™iQkR mS¤oT¨rU¬tW°wY´zZ¸}\»]¾€^À^Á‚^‚^Â\Á€ZÁYÁXÁ~WÁ~WÂ~VÂ~VÂ~VÃ~VÃ~UÃ~UÄ~UÄ~UÄUÄUÅVÅVÅVÅVÆVÆ€VÆ€VÇ€WÇWÈ‚XɃZË…[͇^ЊaÓdØ’iÜ—nâtè£zî©ó¯‡ø´û¸‘üº“û¹“÷¶ñ±Œé©…à¡~Ö˜vËmÇf»€`´z[®vX©rU¥pT£oS¢nS lRžkRœkRšjQ˜iQ–hQ”fQ’ePdPcP‹bPˆ`O…_O‚]O~[NzYNvWNpTMoTMnSMkRMhQLo7,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_OˆaO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRžlR mS£oU§rW¬vZ²{]¹€a¿…fÅŠjËnГqÓ•sÕ–sÕ–rÕ–qÕ”oÓ’mÑjÏgÍŠcˈaɆ^È„\Ç‚[ÆYÅ€XÅ€WÅWÅWÅVÅVÅWÅ€WÆ€WÇXÈ‚YɃ[Ê…\͇_ÏŠaÒeÕ‘hÙ•mÝ™qávä¡zç¤}ê§€ë©ƒëª„é¨ƒå¥€ß |Ù›wÓ•rÌmƉh¿„c¸~^²yZ®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRœkR›jQ™iQ—hQ•gQ“fPePŽcP‹bPˆaO…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?<HA*E$ i@$ZIKaMLbML[JK;:H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀWHJ]KKbMLeOLhPLjRLlSMnTMpTMrUMuWMxXN{ZN~\N]O„^O†`O‰aO‹bPŽcPdP’eP”fQ–gQ˜hQšiQœkRžlS mT£oU¦rWªuZ¯y]´~aºƒfŠlË’sÔšzÜ¡€ã§†è«‰ë®‹í¯Œí®‹ë¬ˆè¨„ã£~ßžyÚ™tÖ•oÒjÎŒfˈbÈ…_ƃ\ÅZÄ€YÃXÂWÂ~WÂ~WÂ~WÃXÀXÄ€YÅZƃ\Ç…^Ɇ`ˈbÌŠdÍ‹fÎgÎŽiÎŽjÎŽjÍŽjËŒiljgÆd¿ƒaº^¸}]¶|\´{[²yZ°xY®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRkR›jQ™iQ—hQ•gQ“fP‘ePŽdPŒbP‰aO†_Oƒ^O€\O|ZNxXNtVMpTMnSMmSMjQLgPL99G?<HG-E&b;!YIK`MLdOM`LKNCJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀŸlRºyTÄ~UÊ‚XʃYÄXº{WtUšW'¢[(—hQ lRcP€\OhQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRLmSMoTMqUMrVMvWNyYN|ZN\N‚]O„_O‡`O‰aPŒbPŽcPdP’fP”gQ–hQ˜iQšjRœkRžlS¡nT¤pU§sW«vZ°z]µb»„gŠlÉ‘sИyØžÞ¤…ã©Šèì±ï³‘ﳑëŠç©…⣀ݞzؘtÒ“nÎiɉdÆ…`Â]Á€[¿~Y¾}X½|W½|V¼{V¼{V¼{V¼{V¼{V¼|W¼|W½}X½}Y½~Z½~Z¼~Z»}[º}[º}[º~\º~\º~]º~]¹~]¸~]·}]¶|\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS mRŸlRkR›jQšiQ˜hQ–gQ“fQ‘ePdPŒcPŠaP‡`O„^O]O}[NyYNuWNpTMnTMmSMkRLhPL|H$D>IQ2P+XHK_LLfQOcNLXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À©qSºyTÃ~VΈ`遲ޜv¾€]ªqS–LŽG|>g3 +S)?*%.—hQ—hQ‘eP‡`OuWM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽdP‘eP“fP•gQ—hQ˜iQšjRœkRŸlS¡nT¤pV§sX«vZ°z^¶b¼…gËmÊ’sјzØŸ€Þ¤…ã©Šèê¯ë°ê¯Žè¬‹å¨‡à¤‚Ûž|Ö™wÑ“qÌŽlljgÃ…bÀ‚_½\»}Zº{X¹zW¸yV·yU·xU·xU·xT·xT·xU·xU·xU·yV·yV·yW¸zW¸{X¹{Y¹|Zº}[º}[º}\º~\¹~]¹~]¸}]·|\µ{\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS¡mRŸlRkRœjQšiQ˜hQ–gQ”fQ’ePdPcPŠbP‡`O…_O‚]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h>!]KKfQOgQN_LKD>I\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À™iQ°tS¸yT¼{UÂYÎŒeïˆô´Õ—u¶|\ Z'™LˆD
|> + +
&3#.$-% .% .& /&!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&(+"(!' +%' %$#" ! !$
diff --git a/tests/auto/gui/image/qimagewriter/images/teapot.tiff b/tests/auto/gui/image/qimagewriter/images/teapot.tiff Binary files differnew file mode 100644 index 0000000000..20845c6e32 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/teapot.tiff diff --git a/tests/auto/gui/image/qimagewriter/images/trolltech.gif b/tests/auto/gui/image/qimagewriter/images/trolltech.gif Binary files differnew file mode 100644 index 0000000000..f674369efc --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/images/trolltech.gif diff --git a/tests/auto/gui/image/qimagewriter/qimagewriter.pro b/tests/auto/gui/image/qimagewriter/qimagewriter.pro new file mode 100644 index 0000000000..0fc40d0f0a --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/qimagewriter.pro @@ -0,0 +1,25 @@ +load(qttest_p4) +QT += widgets +SOURCES += tst_qimagewriter.cpp +MOC_DIR=tmp +!contains(QT_CONFIG, no-tiff):DEFINES += QTEST_HAVE_TIFF +win32-msvc:QMAKE_CXXFLAGS -= -Zm200 +win32-msvc:QMAKE_CXXFLAGS += -Zm800 + +wince*: { + addFiles.files = images\\*.* + addFiles.path = images + DEPLOYMENT += addFiles + DEFINES += SRCDIR=\\\".\\\" +} else:symbian { + addFiles.files = images\\*.* + addFiles.path = images + DEPLOYMENT += addFiles + qt_not_deployed { + imagePlugins.files = qjpeg.dll qtiff.dll + imagePlugins.path = imageformats + DEPLOYMENT += imagePlugins + } +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} diff --git a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp new file mode 100644 index 0000000000..b119763723 --- /dev/null +++ b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp @@ -0,0 +1,628 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> + + +#include <QDebug> +#include <QFile> +#include <QImage> +#include <QImageReader> +#include <QImageWriter> +#include <QLabel> +#include <QPainter> +#include <QSet> + +#if defined(Q_OS_SYMBIAN) +# define SRCDIR "" +#endif +typedef QMap<QString, QString> QStringMap; +typedef QList<int> QIntList; +Q_DECLARE_METATYPE(QImage) +Q_DECLARE_METATYPE(QStringMap) +Q_DECLARE_METATYPE(QIntList) +Q_DECLARE_METATYPE(QImageWriter::ImageWriterError) +Q_DECLARE_METATYPE(QIODevice *) +Q_DECLARE_METATYPE(QImage::Format) + +//TESTED_FILES= + +class tst_QImageWriter : public QObject +{ + Q_OBJECT + +public: + tst_QImageWriter(); + virtual ~tst_QImageWriter(); + +public slots: + void init(); + void cleanup(); + +private slots: + void getSetCheck(); + void writeImage_data(); + void writeImage(); + void writeImage2_data(); + void writeImage2(); + void supportedFormats(); + + void readWriteNonDestructive_data(); + void readWriteNonDestructive(); + +#if defined QTEST_HAVE_TIFF + void largeTiff(); +#endif + + void writeToInvalidDevice(); + + void supportsOption_data(); + void supportsOption(); + + void saveWithNoFormat_data(); + void saveWithNoFormat(); + + void resolution_data(); + void resolution(); + + void saveToTemporaryFile(); +}; +#ifdef Q_OS_SYMBIAN +static const QLatin1String prefix(SRCDIR "images/"); +#else +static const QLatin1String prefix(SRCDIR "/images/"); +#endif +static void initializePadding(QImage *image) +{ + int effectiveBytesPerLine = (image->width() * image->depth() + 7) / 8; + int paddingBytes = image->bytesPerLine() - effectiveBytesPerLine; + if (paddingBytes == 0) + return; + for (int y = 0; y < image->height(); ++y) { + qMemSet(image->scanLine(y) + effectiveBytesPerLine, 0, paddingBytes); + } +} + +// Testing get/set functions +void tst_QImageWriter::getSetCheck() +{ + QImageWriter obj1; + // QIODevice * QImageWriter::device() + // void QImageWriter::setDevice(QIODevice *) + QFile *var1 = new QFile; + obj1.setDevice(var1); + + QCOMPARE((QIODevice *) var1, obj1.device()); + // The class should possibly handle a 0-pointer as a device, since + // there is a default contructor, so it's "handling" a 0 device by default. + // For example: QMovie::setDevice(0) works just fine + obj1.setDevice((QIODevice *)0); + QCOMPARE((QIODevice *) 0, obj1.device()); + delete var1; + + // int QImageWriter::quality() + // void QImageWriter::setQuality(int) + obj1.setQuality(0); + QCOMPARE(0, obj1.quality()); + obj1.setQuality(INT_MIN); + QCOMPARE(INT_MIN, obj1.quality()); + obj1.setQuality(INT_MAX); + QCOMPARE(INT_MAX, obj1.quality()); + + // int QImageWriter::compression() + // void QImageWriter::setCompression(int) + obj1.setCompression(0); + QCOMPARE(0, obj1.compression()); + obj1.setCompression(INT_MIN); + QCOMPARE(INT_MIN, obj1.compression()); + obj1.setCompression(INT_MAX); + QCOMPARE(INT_MAX, obj1.compression()); + + // float QImageWriter::gamma() + // void QImageWriter::setGamma(float) + obj1.setGamma(0.0f); + QCOMPARE(0.0f, obj1.gamma()); + obj1.setGamma(1.1f); + QCOMPARE(1.1f, obj1.gamma()); +} + +tst_QImageWriter::tst_QImageWriter() +{ +} + +tst_QImageWriter::~tst_QImageWriter() +{ + QDir dir(prefix); + QStringList filesToDelete = dir.entryList(QStringList() << "gen-*" , QDir::NoDotAndDotDot | QDir::Files); + foreach( QString file, filesToDelete) { + QFile::remove(dir.absoluteFilePath(file)); + } + +} + +void tst_QImageWriter::init() +{ +} + +void tst_QImageWriter::cleanup() +{ +} + +void tst_QImageWriter::writeImage_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<bool>("lossy"); + QTest::addColumn<QByteArray>("format"); + + QTest::newRow("BMP: colorful") << QString("colorful.bmp") << false << QByteArray("bmp"); + QTest::newRow("BMP: font") << QString("font.bmp") << false << QByteArray("bmp"); + QTest::newRow("XPM: marble") << QString("marble.xpm") << false << QByteArray("xpm"); + QTest::newRow("PNG: kollada") << QString("kollada.png") << false << QByteArray("png"); + QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false << QByteArray("ppm"); + QTest::newRow("PBM: ship63") << QString("ship63.pbm") << true << QByteArray("pbm"); + QTest::newRow("XBM: gnus") << QString("gnus.xbm") << false << QByteArray("xbm"); + QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg"); +#if defined QTEST_HAVE_TIFF + QTest::newRow("TIFF: teapot") << QString("teapot.tiff") << false << QByteArray("tiff"); +#endif +} + +void tst_QImageWriter::writeImage() +{ + QFETCH(QString, fileName); + QFETCH(bool, lossy); + QFETCH(QByteArray, format); + + QImage image; + { + QImageReader reader(prefix + fileName); + image = reader.read(); + QVERIFY2(!image.isNull(), qPrintable(reader.errorString())); + } + { + QImageWriter writer(prefix + "gen-" + fileName, format); + QVERIFY(writer.write(image)); + } + + { + // Shouldn't be able to write to read-only file + QFile sourceFile(prefix + "gen-" + fileName); + QFile::Permissions permissions = sourceFile.permissions(); + QVERIFY(sourceFile.setPermissions(QFile::ReadOwner | QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther)); + + QImageWriter writer(prefix + "gen-" + fileName, format); + QVERIFY(!writer.write(image)); + + QVERIFY(sourceFile.setPermissions(permissions)); + } + + QImage image2; + { + QImageReader reader(prefix + "gen-" + fileName); + image2 = reader.read(); + QVERIFY(!image2.isNull()); + } + if (!lossy) { + QCOMPARE(image, image2); + } else { + QCOMPARE(image.format(), image2.format()); + QCOMPARE(image.depth(), image2.depth()); + } +} + +void tst_QImageWriter::writeImage2_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + QTest::addColumn<QImage>("image"); + + const QStringList formats = QStringList() << "bmp" << "xpm" << "png" + << "ppm"; //<< "jpeg"; + QImage image0(70, 70, QImage::Format_ARGB32); + image0.fill(QColor(Qt::red).rgb()); + + QImage::Format imgFormat = QImage::Format_Mono; + while (imgFormat != QImage::NImageFormats) { + QImage image = image0.convertToFormat(imgFormat); + initializePadding(&image); + foreach (const QString format, formats) { + const QString fileName = QString("solidcolor_%1.%2").arg(imgFormat) + .arg(format); + QTest::newRow(fileName.toLatin1()) << fileName + << format.toLatin1() + << image; + } + imgFormat = QImage::Format(int(imgFormat) + 1); + } +} + +#if defined QTEST_HAVE_TIFF +void tst_QImageWriter::largeTiff() +{ +#if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN) + QImage img(4096, 2048, QImage::Format_ARGB32); + + QPainter p(&img); + img.fill(0x0); + p.fillRect(0, 0, 4096, 2048, QBrush(Qt::CrossPattern)); + p.end(); + + QByteArray array; + QBuffer writeBuffer(&array); + writeBuffer.open(QIODevice::WriteOnly); + + QImageWriter writer(&writeBuffer, "tiff"); + QVERIFY(writer.write(img)); + + writeBuffer.close(); + + QBuffer readBuffer(&array); + readBuffer.open(QIODevice::ReadOnly); + + QImageReader reader(&readBuffer, "tiff"); + + QImage img2 = reader.read(); + QVERIFY(!img2.isNull()); + + QCOMPARE(img, img2); +#else + QWARN("not tested on Symbian/WinCE"); +#endif +} +#endif + +/* + Workaround for the equality operator for indexed formats + (which fails if the colortables are different). + + Images must have the same format and size. +*/ +static bool equalImageContents(const QImage &image1, const QImage &image2) +{ + switch (image1.format()) { + case QImage::Format_Mono: + case QImage::Format_Indexed8: + for (int y = 0; y < image1.height(); ++y) + for (int x = 0; x < image1.width(); ++x) + if (image1.pixel(x, y) != image2.pixel(x, y)) + return false; + return true; + default: + return (image1 == image2); + } +} + +void tst_QImageWriter::writeImage2() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + QFETCH(QImage, image); + + //we reduce the scope of writer so that it closes the associated file + // and QFile::remove can actually work + { + QImageWriter writer(fileName, format); + QVERIFY(writer.write(image)); + } + + QImage written; + + //we reduce the scope of reader so that it closes the associated file + // and QFile::remove can actually work + { + QImageReader reader(fileName, format); + QVERIFY(reader.read(&written)); + } + + written = written.convertToFormat(image.format()); + if (!equalImageContents(written, image)) { + qDebug() << "image" << image.format() << image.width() + << image.height() << image.depth() + << hex << image.pixel(0, 0); + qDebug() << "written" << written.format() << written.width() + << written.height() << written.depth() + << hex << written.pixel(0, 0); + } + QVERIFY(equalImageContents(written, image)); + + QVERIFY(QFile::remove(fileName)); +} + +void tst_QImageWriter::supportedFormats() +{ + QList<QByteArray> formats = QImageWriter::supportedImageFormats(); + QList<QByteArray> sortedFormats = formats; + qSort(sortedFormats); + + // check that the list is sorted + QCOMPARE(formats, sortedFormats); + + QSet<QByteArray> formatSet; + foreach (QByteArray format, formats) + formatSet << format; + + // check that the list does not contain duplicates + QCOMPARE(formatSet.size(), formats.size()); +} + +void tst_QImageWriter::readWriteNonDestructive_data() +{ + QTest::addColumn<QImage::Format>("format"); + QTest::addColumn<QImage::Format>("expectedFormat"); + QTest::addColumn<bool>("grayscale"); + QTest::newRow("tiff mono") << QImage::Format_Mono << QImage::Format_Mono << false; + QTest::newRow("tiff indexed") << QImage::Format_Indexed8 << QImage::Format_Indexed8 << false; + QTest::newRow("tiff rgb32") << QImage::Format_ARGB32 << QImage::Format_ARGB32 << false; + QTest::newRow("tiff grayscale") << QImage::Format_Indexed8 << QImage::Format_Indexed8 << true; +} + +void tst_QImageWriter::readWriteNonDestructive() +{ + QFETCH(QImage::Format, format); + QFETCH(QImage::Format, expectedFormat); + QFETCH(bool, grayscale); + QImage image = QImage(prefix + "colorful.bmp").convertToFormat(format); + + if (grayscale) { + QVector<QRgb> colors; + for (int i = 0; i < 256; ++i) + colors << qRgb(i, i, i); + image.setColorTable(colors); + } + + QVERIFY(image.save(prefix + "gen-readWriteNonDestructive.tiff")); + + QImage image2 = QImage(prefix + "gen-readWriteNonDestructive.tiff"); + QImage::Format readFormat = image2.format(); + QCOMPARE(readFormat, expectedFormat); + QCOMPARE(image, image2); +} + +void tst_QImageWriter::writeToInvalidDevice() +{ + QLatin1String fileName("/these/directories/do/not/exist/001.png"); + { + QImageWriter writer(fileName); + QVERIFY(!writer.canWrite()); + QCOMPARE(writer.error(), QImageWriter::DeviceError); + } + { + QImageWriter writer(fileName); + writer.setFormat("png"); + QVERIFY(!writer.canWrite()); + QCOMPARE(writer.error(), QImageWriter::DeviceError); + } + { + QImageWriter writer(fileName); + QImage im(10, 10, QImage::Format_ARGB32); + QVERIFY(!writer.write(im)); + QCOMPARE(writer.error(), QImageWriter::DeviceError); + } + { + QImageWriter writer(fileName); + writer.setFormat("png"); + QImage im(10, 10, QImage::Format_ARGB32); + QVERIFY(!writer.write(im)); + QCOMPARE(writer.error(), QImageWriter::DeviceError); + } +} + +void tst_QImageWriter::supportsOption_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QIntList>("options"); + + QTest::newRow("png") << QString("gen-black.png") + << (QIntList() << QImageIOHandler::Gamma + << QImageIOHandler::Description + << QImageIOHandler::Quality + << QImageIOHandler::Size); +#if defined QTEST_HAVE_TIFF + QTest::newRow("tiff") << QString("gen-black.tiff") + << (QIntList() << QImageIOHandler::Size + << QImageIOHandler::CompressionRatio); +#endif +} + +void tst_QImageWriter::supportsOption() +{ + QFETCH(QString, fileName); + QFETCH(QIntList, options); + + QSet<QImageIOHandler::ImageOption> allOptions; + allOptions << QImageIOHandler::Size + << QImageIOHandler::ClipRect + << QImageIOHandler::Description + << QImageIOHandler::ScaledClipRect + << QImageIOHandler::ScaledSize + << QImageIOHandler::CompressionRatio + << QImageIOHandler::Gamma + << QImageIOHandler::Quality + << QImageIOHandler::Name + << QImageIOHandler::SubType + << QImageIOHandler::IncrementalReading + << QImageIOHandler::Endianness + << QImageIOHandler::Animation + << QImageIOHandler::BackgroundColor; + + QImageWriter writer(prefix + fileName); + for (int i = 0; i < options.size(); ++i) { + QVERIFY(writer.supportsOption(QImageIOHandler::ImageOption(options.at(i)))); + allOptions.remove(QImageIOHandler::ImageOption(options.at(i))); + } + + foreach (QImageIOHandler::ImageOption option, allOptions) + QVERIFY(!writer.supportsOption(option)); +} + +void tst_QImageWriter::saveWithNoFormat_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QByteArray>("format"); + QTest::addColumn<QImageWriter::ImageWriterError>("error"); + + QTest::newRow("garble") << prefix + QString("gen-out.garble") << QByteArray("jpeg") << QImageWriter::UnsupportedFormatError; + QTest::newRow("bmp") << prefix + QString("gen-out.bmp") << QByteArray("bmp") << QImageWriter::ImageWriterError(0); + QTest::newRow("xbm") << prefix + QString("gen-out.xbm") << QByteArray("xbm") << QImageWriter::ImageWriterError(0); + QTest::newRow("xpm") << prefix + QString("gen-out.xpm") << QByteArray("xpm") << QImageWriter::ImageWriterError(0); + QTest::newRow("png") << prefix + QString("gen-out.png") << QByteArray("png") << QImageWriter::ImageWriterError(0); + QTest::newRow("ppm") << prefix + QString("gen-out.ppm") << QByteArray("ppm") << QImageWriter::ImageWriterError(0); + QTest::newRow("pbm") << prefix + QString("gen-out.pbm") << QByteArray("pbm") << QImageWriter::ImageWriterError(0); +#if defined QTEST_HAVE_TIFF + QTest::newRow("tiff") << prefix + QString("gen-out.tiff") << QByteArray("tiff") << QImageWriter::ImageWriterError(0); +#endif +} + +void tst_QImageWriter::saveWithNoFormat() +{ + QFETCH(QString, fileName); + QFETCH(QByteArray, format); + QFETCH(QImageWriter::ImageWriterError, error); + + QImage niceImage(64, 64, QImage::Format_ARGB32); + qMemSet(niceImage.bits(), 0, niceImage.byteCount()); + + QImageWriter writer(fileName /* , 0 - no format! */); + if (error != 0) { + QVERIFY(!writer.write(niceImage)); + QCOMPARE(writer.error(), error); + return; + } + + QVERIFY2(writer.write(niceImage), qPrintable(writer.errorString())); + + QImageReader reader(fileName); + QCOMPARE(reader.format(), format); + + QVERIFY(reader.canRead()); + + QImage outImage = reader.read(); + QVERIFY2(!outImage.isNull(), qPrintable(reader.errorString())); +} + +void tst_QImageWriter::resolution_data() +{ + QTest::addColumn<QString>("filename"); + QTest::addColumn<int>("expectedDotsPerMeterX"); + QTest::addColumn<int>("expectedDotsPerMeterY"); +#if defined QTEST_HAVE_TIFF + QTest::newRow("TIFF: 100 dpi") << ("image_100dpi.tif") << qRound(100 * (100 / 2.54)) << qRound(100 * (100 / 2.54)); + QTest::newRow("TIFF: 50 dpi") << ("image_50dpi.tif") << qRound(50 * (100 / 2.54)) << qRound(50 * (100 / 2.54)); + QTest::newRow("TIFF: 300 dot per meter") << ("image_300dpm.tif") << 300 << 300; +#endif +} + +void tst_QImageWriter::resolution() +{ + QFETCH(QString, filename); + QFETCH(int, expectedDotsPerMeterX); + QFETCH(int, expectedDotsPerMeterY); + + QImage image(prefix + QLatin1String("colorful.bmp")); + image.setDotsPerMeterX(expectedDotsPerMeterX); + image.setDotsPerMeterY(expectedDotsPerMeterY); + const QString generatedFilepath = prefix + "gen-" + filename; + { + QImageWriter writer(generatedFilepath); + QVERIFY(writer.write(image)); + } + QImageReader reader(generatedFilepath); + const QImage generatedImage = reader.read(); + + QCOMPARE(expectedDotsPerMeterX, generatedImage.dotsPerMeterX()); + QCOMPARE(expectedDotsPerMeterY, generatedImage.dotsPerMeterY()); +} + +void tst_QImageWriter::saveToTemporaryFile() +{ + QImage image(prefix + "kollada.png"); + QVERIFY(!image.isNull()); + + { + // 1) Via QImageWriter's API, with a standard temp file name + QTemporaryFile file; + QVERIFY(file.open()); + QImageWriter writer(&file, "PNG"); + if (writer.canWrite()) + QVERIFY(writer.write(image)); + else + qWarning() << file.errorString(); +#if defined(Q_OS_WINCE) + file.reset(); +#endif + QCOMPARE(QImage(writer.fileName()), image); + } + { + // 2) Via QImage's API, with a standard temp file name + QTemporaryFile file; + QVERIFY(file.open()); + QVERIFY(image.save(&file, "PNG")); + file.reset(); + QImage tmp; + QVERIFY(tmp.load(&file, "PNG")); + QCOMPARE(tmp, image); + } + { + // 3) Via QImageWriter's API, with a named temp file + QTemporaryFile file("tempXXXXXX"); + QVERIFY(file.open()); + QImageWriter writer(&file, "PNG"); + QVERIFY(writer.write(image)); +#if defined(Q_OS_WINCE) + file.reset(); +#endif + QCOMPARE(QImage(writer.fileName()), image); + } + { + // 4) Via QImage's API, with a named temp file + QTemporaryFile file("tempXXXXXX"); + QVERIFY(file.open()); + QVERIFY(image.save(&file, "PNG")); + file.reset(); + QImage tmp; + QVERIFY(tmp.load(&file, "PNG")); + QCOMPARE(tmp, image); + } +} + +QTEST_MAIN(tst_QImageWriter) +#include "tst_qimagewriter.moc" diff --git a/tests/auto/gui/image/qmovie/.gitignore b/tests/auto/gui/image/qmovie/.gitignore new file mode 100644 index 0000000000..396e8cbc7d --- /dev/null +++ b/tests/auto/gui/image/qmovie/.gitignore @@ -0,0 +1 @@ +tst_qmovie diff --git a/tests/auto/gui/image/qmovie/animations/comicsecard.gif b/tests/auto/gui/image/qmovie/animations/comicsecard.gif Binary files differnew file mode 100644 index 0000000000..f064de065b --- /dev/null +++ b/tests/auto/gui/image/qmovie/animations/comicsecard.gif diff --git a/tests/auto/gui/image/qmovie/animations/corrupt.gif b/tests/auto/gui/image/qmovie/animations/corrupt.gif Binary files differnew file mode 100644 index 0000000000..c1545eb0ed --- /dev/null +++ b/tests/auto/gui/image/qmovie/animations/corrupt.gif diff --git a/tests/auto/gui/image/qmovie/animations/dutch.mng b/tests/auto/gui/image/qmovie/animations/dutch.mng Binary files differnew file mode 100644 index 0000000000..4917fdee7a --- /dev/null +++ b/tests/auto/gui/image/qmovie/animations/dutch.mng diff --git a/tests/auto/gui/image/qmovie/animations/trolltech.gif b/tests/auto/gui/image/qmovie/animations/trolltech.gif Binary files differnew file mode 100644 index 0000000000..df7eb92703 --- /dev/null +++ b/tests/auto/gui/image/qmovie/animations/trolltech.gif diff --git a/tests/auto/gui/image/qmovie/qmovie.pro b/tests/auto/gui/image/qmovie/qmovie.pro new file mode 100644 index 0000000000..3e085ceeaf --- /dev/null +++ b/tests/auto/gui/image/qmovie/qmovie.pro @@ -0,0 +1,28 @@ +load(qttest_p4) +QT += widgets +SOURCES += tst_qmovie.cpp +MOC_DIR=tmp + +!contains(QT_CONFIG, no-gif):DEFINES += QTEST_HAVE_GIF +!contains(QT_CONFIG, no-jpeg):DEFINES += QTEST_HAVE_JPEG +!contains(QT_CONFIG, no-mng):DEFINES += QTEST_HAVE_MNG + +wince*: { + addFiles.files = animations\\* + addFiles.path = animations + DEPLOYMENT += addFiles +} + +RESOURCES += resources.qrc + +symbian: { + addFiles.files = animations\\* + addFiles.path = animations + DEPLOYMENT += addFiles + + qt_not_deployed { + imagePlugins.files = qjpeg.dll qgif.dll qmng.dll + imagePlugins.path = imageformats + DEPLOYMENT += imagePlugins + } +} diff --git a/tests/auto/gui/image/qmovie/resources.qrc b/tests/auto/gui/image/qmovie/resources.qrc new file mode 100644 index 0000000000..ce459a0e7e --- /dev/null +++ b/tests/auto/gui/image/qmovie/resources.qrc @@ -0,0 +1,5 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>animations/corrupt.gif</file> +</qresource> +</RCC> diff --git a/tests/auto/gui/image/qmovie/tst_qmovie.cpp b/tests/auto/gui/image/qmovie/tst_qmovie.cpp new file mode 100644 index 0000000000..15c7f856b1 --- /dev/null +++ b/tests/auto/gui/image/qmovie/tst_qmovie.cpp @@ -0,0 +1,225 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> + + +#include <QIODevice> +#include <QLabel> +#include <QMovie> + +//TESTED_FILES= + +class tst_QMovie : public QObject +{ + Q_OBJECT + +public: + tst_QMovie(); + virtual ~tst_QMovie(); + +public slots: + void init(); + void cleanup(); + +protected slots: + void exitLoopSlot(); + +private slots: + void getSetCheck(); + void construction(); + void playMovie_data(); + void playMovie(); + void jumpToFrame_data(); + void jumpToFrame(); + void changeMovieFile(); + void infiniteLoop(); +}; + +// Testing get/set functions +void tst_QMovie::getSetCheck() +{ + QMovie obj1; + // QIODevice * QMovie::device() + // void QMovie::setDevice(QIODevice *) + QFile *var1 = new QFile; + obj1.setDevice(var1); + QCOMPARE(obj1.device(), (QIODevice *)var1); + obj1.setDevice((QIODevice *)0); + QCOMPARE(obj1.device(), (QIODevice *)0); + delete var1; + + // CacheMode QMovie::cacheMode() + // void QMovie::setCacheMode(CacheMode) + obj1.setCacheMode(QMovie::CacheMode(QMovie::CacheNone)); + QCOMPARE(QMovie::CacheMode(QMovie::CacheNone), obj1.cacheMode()); + obj1.setCacheMode(QMovie::CacheMode(QMovie::CacheAll)); + QCOMPARE(QMovie::CacheMode(QMovie::CacheAll), obj1.cacheMode()); + + // int QMovie::speed() + // void QMovie::setSpeed(int) + obj1.setSpeed(0); + QCOMPARE(0, obj1.speed()); + obj1.setSpeed(INT_MIN); + QCOMPARE(INT_MIN, obj1.speed()); + obj1.setSpeed(INT_MAX); + QCOMPARE(INT_MAX, obj1.speed()); +} + +tst_QMovie::tst_QMovie() +{ +} + +tst_QMovie::~tst_QMovie() +{ + +} + +void tst_QMovie::init() +{ +} + +void tst_QMovie::cleanup() +{ +} + +void tst_QMovie::exitLoopSlot() +{ + QTestEventLoop::instance().exitLoop(); +} + +void tst_QMovie::construction() +{ + QMovie movie; + QCOMPARE(movie.device(), (QIODevice *)0); + QCOMPARE(movie.fileName(), QString()); + QCOMPARE(movie.state(), QMovie::NotRunning); +} + +void tst_QMovie::playMovie_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("frameCount"); +#if defined(QTEST_HAVE_MNG) && !defined(Q_OS_WINCE) + // Qt/WinCE runs out of memory for this one... + QTest::newRow("home") << QString("animations/dutch.mng") << 10; +#endif +#ifdef QTEST_HAVE_GIF + QTest::newRow("comicsecard") << QString("animations/comicsecard.gif") << 5; + QTest::newRow("trolltech") << QString("animations/trolltech.gif") << 34; +#endif +} + +void tst_QMovie::playMovie() +{ + QFETCH(QString, fileName); + QFETCH(int, frameCount); + + QMovie movie(fileName); + + QCOMPARE(movie.state(), QMovie::NotRunning); + movie.setSpeed(1000); + movie.start(); + QCOMPARE(movie.state(), QMovie::Running); + movie.setPaused(true); + QCOMPARE(movie.state(), QMovie::Paused); + movie.start(); + QCOMPARE(movie.state(), QMovie::Running); + movie.stop(); + QCOMPARE(movie.state(), QMovie::NotRunning); + movie.jumpToFrame(0); + QCOMPARE(movie.state(), QMovie::NotRunning); + movie.start(); + QCOMPARE(movie.state(), QMovie::Running); + + connect(&movie, SIGNAL(finished()), this, SLOT(exitLoopSlot())); + + QLabel label; + label.setMovie(&movie); + label.show(); + + QTestEventLoop::instance().enterLoop(20); + QVERIFY2(!QTestEventLoop::instance().timeout(), + "Timed out while waiting for finished() signal"); + + QCOMPARE(movie.state(), QMovie::NotRunning); + QCOMPARE(movie.frameCount(), frameCount); +} + +void tst_QMovie::jumpToFrame_data() +{ + playMovie_data(); +} + +void tst_QMovie::jumpToFrame() +{ + QFETCH(QString, fileName); + QMovie movie(fileName); + movie.start(); + movie.stop(); + QVERIFY(movie.jumpToFrame(-1) == false); + QVERIFY(movie.currentFrameNumber() == 0); +} + +void tst_QMovie::changeMovieFile() +{ + QMovie movie("animations/comicsecard.gif"); + movie.start(); + movie.stop(); + movie.setFileName("animations/trolltech.gif"); + QVERIFY(movie.currentFrameNumber() == -1); +} + +void tst_QMovie::infiniteLoop() +{ + QLabel label; + label.show(); + QMovie *movie = new QMovie(QLatin1String(":animations/corrupt.gif"), QByteArray(), &label); + label.setMovie(movie); + movie->start(); + + QTestEventLoop::instance().enterLoop(1); + QTestEventLoop::instance().timeout(); +} + +QTEST_MAIN(tst_QMovie) +#include "tst_qmovie.moc" diff --git a/tests/auto/gui/image/qpicture/.gitignore b/tests/auto/gui/image/qpicture/.gitignore new file mode 100644 index 0000000000..0f391ffb80 --- /dev/null +++ b/tests/auto/gui/image/qpicture/.gitignore @@ -0,0 +1 @@ +tst_qpicture diff --git a/tests/auto/gui/image/qpicture/qpicture.pro b/tests/auto/gui/image/qpicture/qpicture.pro new file mode 100644 index 0000000000..eb96b73487 --- /dev/null +++ b/tests/auto/gui/image/qpicture/qpicture.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +QT += widgets +SOURCES += tst_qpicture.cpp + + + diff --git a/tests/auto/gui/image/qpicture/tst_qpicture.cpp b/tests/auto/gui/image/qpicture/tst_qpicture.cpp new file mode 100644 index 0000000000..8661a2b2d0 --- /dev/null +++ b/tests/auto/gui/image/qpicture/tst_qpicture.cpp @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> + +#include <qpicture.h> +#include <qpainter.h> +#include <qimage.h> +#include <qdesktopwidget.h> +#include <qapplication.h> +#include <limits.h> + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QPicture : public QObject +{ + Q_OBJECT + +public: + tst_QPicture(); + +private slots: + void getSetCheck(); + void devType(); + void paintingActive(); + void boundingRect(); + void swap(); + void operator_lt_lt(); + + void save_restore(); + + void boundaryValues_data(); + void boundaryValues(); +}; + +// Testing get/set functions +void tst_QPicture::getSetCheck() +{ + QPictureIO obj1; + // const QPicture & QPictureIO::picture() + // void QPictureIO::setPicture(const QPicture &) + // const char * QPictureIO::format() + // void QPictureIO::setFormat(const char *) + const char var2[] = "PNG"; + obj1.setFormat(var2); + QCOMPARE(var2, obj1.format()); + obj1.setFormat((char *)0); + // The format is stored internally in a QString, so return is always a valid char * + QVERIFY(QString(obj1.format()).isEmpty()); + + // const char * QPictureIO::parameters() + // void QPictureIO::setParameters(const char *) + const char var3[] = "Bogus data"; + obj1.setParameters(var3); + QCOMPARE(var3, obj1.parameters()); + obj1.setParameters((char *)0); + // The format is stored internally in a QString, so return is always a valid char * + QVERIFY(QString(obj1.parameters()).isEmpty()); +} + +tst_QPicture::tst_QPicture() +{ +} + +void tst_QPicture::devType() +{ + QPicture p; + QCOMPARE( p.devType(), (int)QInternal::Picture ); +} + +void tst_QPicture::paintingActive() +{ + // actually implemented in QPainter but QPicture is a good + // example of an external paint device + QPicture p; + QVERIFY( !p.paintingActive() ); + QPainter pt( &p ); + QVERIFY( p.paintingActive() ); + pt.end(); + QVERIFY( !p.paintingActive() ); +} + +void tst_QPicture::boundingRect() +{ + QPicture p1; + // default value + QVERIFY( !p1.boundingRect().isValid() ); + + QRect r1( 20, 30, 5, 15 ); + p1.setBoundingRect( r1 ); + QCOMPARE( p1.boundingRect(), r1 ); + p1.setBoundingRect(QRect()); + + QPainter pt( &p1 ); + pt.drawLine( 10, 20, 110, 80 ); + pt.end(); + + // assignment and copy constructor + QRect r2( 10, 20, 100, 60 ); + QCOMPARE( p1.boundingRect(), r2 ); + QPicture p2( p1 ); + QCOMPARE( p1.boundingRect(), r2 ); + QPicture p3; + p3 = p1; + QCOMPARE( p1.boundingRect(), r2 ); + + { + QPicture p4; + QPainter p(&p4); + p.drawLine(0, 0, 5, 0); + p.drawLine(0, 0, 0, 5); + p.end(); + + QRect r3(0, 0, 5, 5); + QCOMPARE(p4.boundingRect(), r3); + } +} + +void tst_QPicture::swap() +{ + QPicture p1, p2; + QPainter(&p1).drawLine(0, 0, 5, 5); + QPainter(&p2).drawLine(0, 3, 3, 0); + QCOMPARE(p1.boundingRect(), QRect(0,0,5,5)); + QCOMPARE(p2.boundingRect(), QRect(0,0,3,3)); + p1.swap(p2); + QCOMPARE(p1.boundingRect(), QRect(0,0,3,3)); + QCOMPARE(p2.boundingRect(), QRect(0,0,5,5)); +} + +// operator<< and operator>> +void tst_QPicture::operator_lt_lt() +{ + // streaming of null pictures + { + QPicture pic1, pic2; + QByteArray ba( 100, 0 ); + QDataStream str1( &ba, QIODevice::WriteOnly ); + str1 << pic1; + QDataStream str2( &ba, QIODevice::ReadOnly ); + str2 >> pic2; + QVERIFY( pic2.isNull() ); + } + + // picture with a simple line, checking bitwise equality + { + QPicture pic1, pic2; + QPainter p( &pic1 ); + p.drawLine( 10, 20, 30, 40 ); + p.end(); + QByteArray ba( 10 * pic1.size(), 0 ); + QDataStream str1( &ba, QIODevice::WriteOnly ); + str1 << pic1; + QDataStream str2( &ba, QIODevice::ReadOnly ); + str2 >> pic2; + QCOMPARE( pic1.size(), pic2.size() ); + QVERIFY( memcmp( pic1.data(), pic2.data(), pic1.size() ) == 0 ); + } +} + +static QPointF scalePoint(const QPointF &point, QPaintDevice *sourceDevice, QPaintDevice *destDevice) +{ + return QPointF(point.x() * qreal(destDevice->logicalDpiX()) / qreal(sourceDevice->logicalDpiX()), + point.y() * qreal(destDevice->logicalDpiY()) / qreal(sourceDevice->logicalDpiY())); +} + +static QRectF scaleRect(const QRectF &rect, QPaintDevice *sourceDevice, QPaintDevice *destDevice) +{ + return QRectF(rect.left() * qreal(destDevice->logicalDpiX()) / qreal(sourceDevice->logicalDpiX()), + rect.top() * qreal(destDevice->logicalDpiY()) / qreal(sourceDevice->logicalDpiY()), + rect.width() * qreal(destDevice->logicalDpiX()) / qreal(sourceDevice->logicalDpiX()), + rect.height() * qreal(destDevice->logicalDpiY()) / qreal(sourceDevice->logicalDpiY())); +} + +static void paintStuff(QPainter *p) +{ + QPaintDevice *screenDevice = QApplication::desktop(); + p->drawRect(scaleRect(QRectF(100, 100, 100, 100), screenDevice, p->device())); + p->save(); + p->translate(scalePoint(QPointF(10, 10), screenDevice, p->device())); + p->restore(); + p->drawRect(scaleRect(QRectF(100, 100, 100, 100), screenDevice, p->device())); +} + +/* See task: 41469 + Problem is that the state is not properly restored if the basestate of + the painter is different when the picture data was created compared to + the base state of the painter when it is played back. + */ +void tst_QPicture::save_restore() +{ + QPicture pic; + QPainter p; + p.begin(&pic); + paintStuff(&p); + p.end(); + + QPixmap pix1(300, 300); + pix1.fill(Qt::white); + p.begin(&pix1); + p.drawPicture(50, 50, pic); + p.end(); + + QPixmap pix2(300, 300); + pix2.fill(Qt::white); + p.begin(&pix2); + p.translate(50, 50); + paintStuff(&p); + p.end(); + + QVERIFY( pix1.toImage() == pix2.toImage() ); +} + +void tst_QPicture::boundaryValues_data() +{ + QTest::addColumn<int>("x"); + QTest::addColumn<int>("y"); + QTest::newRow("max x") << INT_MAX << 50; + QTest::newRow("max y") << 50 << INT_MAX; + QTest::newRow("max x and y") << INT_MAX << INT_MAX; + + QTest::newRow("min x") << INT_MIN << 50; + QTest::newRow("min y") << 50 << INT_MIN; + QTest::newRow("min x and y") << INT_MIN << INT_MIN; + + QTest::newRow("min x, max y") << INT_MIN << INT_MAX; + QTest::newRow("max x, min y") << INT_MAX << INT_MIN; + +} + +void tst_QPicture::boundaryValues() +{ + QPicture picture; + + QPainter painter; + painter.begin(&picture); + + QFETCH(int, x); + QFETCH(int, y); + painter.drawPoint(QPoint(x, y)); + + painter.end(); + + +} + + +QTEST_MAIN(tst_QPicture) +#include "tst_qpicture.moc" diff --git a/tests/auto/gui/image/qpixmap/.gitignore b/tests/auto/gui/image/qpixmap/.gitignore new file mode 100644 index 0000000000..8d4996f365 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/.gitignore @@ -0,0 +1 @@ +tst_qpixmap diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.png Binary files differnew file mode 100644 index 0000000000..7991e9fb17 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.png diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.png Binary files differnew file mode 100644 index 0000000000..dca6d97dc3 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.png diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.png Binary files differnew file mode 100644 index 0000000000..31e6e1aaa0 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.png diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.png Binary files differnew file mode 100644 index 0000000000..0d48026898 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.ico b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.ico Binary files differnew file mode 100644 index 0000000000..dbb55cd4db --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.ico diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.png Binary files differnew file mode 100644 index 0000000000..f23f39818c --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.png Binary files differnew file mode 100644 index 0000000000..293f1c5942 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.png Binary files differnew file mode 100644 index 0000000000..bfdb1fe035 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.png Binary files differnew file mode 100644 index 0000000000..7dd2d13351 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.ico b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.ico Binary files differnew file mode 100644 index 0000000000..4341a3355e --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.ico diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png Binary files differnew file mode 100644 index 0000000000..e9a995e19e --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png Binary files differnew file mode 100644 index 0000000000..41ef57f94d --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png Binary files differnew file mode 100644 index 0000000000..35d60d138b --- /dev/null +++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png diff --git a/tests/auto/gui/image/qpixmap/images/designer.png b/tests/auto/gui/image/qpixmap/images/designer.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/designer.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..a4a19249c7 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..1506af5a7e --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..8500ab1f5c --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..2145c6124c --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..728ee79153 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..e9d5850db7 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..7c09b17830 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..70a63405e6 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..85abadaf98 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..3e03450c01 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.png Binary files differnew file mode 100644 index 0000000000..315fbe087a --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..d91dc71217 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.png b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.png diff --git a/tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.png b/tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.png diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png Binary files differnew file mode 100644 index 0000000000..55d8247cfc --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gif Binary files differnew file mode 100644 index 0000000000..26a6da33df --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gif diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png Binary files differnew file mode 100644 index 0000000000..28cd2f06d1 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif Binary files differnew file mode 100644 index 0000000000..86a3a2e17d --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gif Binary files differnew file mode 100644 index 0000000000..49ec77b39b --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gif diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png Binary files differnew file mode 100644 index 0000000000..09735a9752 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gif Binary files differnew file mode 100644 index 0000000000..f813c057d2 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gif diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpg b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpg Binary files differnew file mode 100644 index 0000000000..70f39c2154 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpg diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.png Binary files differnew file mode 100644 index 0000000000..bca471d576 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.png diff --git a/tests/auto/gui/image/qpixmap/qpixmap.pro b/tests/auto/gui/image/qpixmap/qpixmap.pro new file mode 100644 index 0000000000..bcd65897d2 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/qpixmap.pro @@ -0,0 +1,35 @@ +load(qttest_p4) + +QT += core-private gui-private widgets widgets-private + +SOURCES += tst_qpixmap.cpp +wince*|symbian: { + + task31722_0.files = convertFromImage/task31722_0/*.png + task31722_0.path = convertFromImage/task31722_0 + + task31722_1.files = convertFromImage/task31722_1/*.png + task31722_1.path = convertFromImage/task31722_1 + + icons.files = convertFromToHICON/* + icons.path = convertFromToHICON + + loadFromData.files = loadFromData/* + loadFromData.path = loadFromData + + DEPLOYMENT += task31722_0 task31722_1 icons loadFromData +} + +wince*: { + DEFINES += SRCDIR=\\\".\\\" + DEPLOYMENT_PLUGIN += qico +} else:symbian { + LIBS += -lfbscli.dll -lbitgdi.dll -lgdi.dll +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" + win32:LIBS += -lgdi32 -luser32 +} + +RESOURCES += qpixmap.qrc + +CONFIG += insignificant_test # QTBUG-21402 diff --git a/tests/auto/gui/image/qpixmap/qpixmap.qrc b/tests/auto/gui/image/qpixmap/qpixmap.qrc new file mode 100644 index 0000000000..99fde61a29 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/qpixmap.qrc @@ -0,0 +1,29 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>images/designer.png</file> + <file>images/dx_0_dy_0_50_50_100_100.png</file> + <file>images/dx_0_dy_0_null.png</file> + <file>images/dx_0_dy_0_x_y_w_h.png</file> + <file>images/dx_0_dy_-10_50_50_100_100.png</file> + <file>images/dx_0_dy_10_50_50_100_100.png</file> + <file>images/dx_0_dy_-10_x_y_w_h.png</file> + <file>images/dx_0_dy_10_x_y_w_h.png</file> + <file>images/dx_0_dy_-128_x_y_w_h.png</file> + <file>images/dx_0_dy_128_x_y_w_h.png</file> + <file>images/dx_0_dy_1_null.png</file> + <file>images/dx_-10_dy_0_50_50_100_100.png</file> + <file>images/dx_10_dy_0_50_50_100_100.png</file> + <file>images/dx_-10_dy_0_x_y_w_h.png</file> + <file>images/dx_10_dy_0_x_y_w_h.png</file> + <file>images/dx_-10_dy_-10_50_50_100_100.png</file> + <file>images/dx_10_dy_10_50_50_100_100.png</file> + <file>images/dx_-10_dy_-10_x_y_w_h.png</file> + <file>images/dx_10_dy_10_x_y_w_h.png</file> + <file>images/dx_-128_dy_0_x_y_w_h.png</file> + <file>images/dx_128_dy_0_x_y_w_h.png</file> + <file>images/dx_128_dy_128_64_64_128_128.png</file> + <file>images/dx_-128_dy_-128_x_y_w_h.png</file> + <file>images/dx_128_dy_128_x_y_w_h.png</file> + <file>images/dx_1_dy_0_null.png</file> +</qresource> +</RCC> diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp new file mode 100644 index 0000000000..38858e5503 --- /dev/null +++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp @@ -0,0 +1,1787 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <qpixmap.h> +#include <qbitmap.h> +#include <qimage.h> +#include <qimagereader.h> +#include <qmatrix.h> +#include <qdesktopwidget.h> +#include <qpaintengine.h> +#include <qtreewidget.h> +#include <qsplashscreen.h> + +#include <qplatformpixmap_qpa.h> +#include <private/qdrawhelper_p.h> + +#include <QSet> + +#ifdef Q_WS_WIN +#include <windows.h> +#endif + +#ifdef Q_WS_QWS +#include <qscreen_qws.h> +#endif + +#ifdef Q_OS_SYMBIAN +#include <e32std.h> +#include <fbs.h> +#include <gdi.h> +#include <bitdev.h> +#if !defined(QT_NO_OPENVG) +#include <QtOpenVG/qvg.h> +#include <QtOpenVG/private/qpixmapdata_vg_p.h> +#endif +#endif + +#ifdef Q_WS_X11 +#include <QX11Info> +#endif + +//TESTED_CLASS= +//TESTED_FILES= +#if defined(Q_OS_SYMBIAN) +# define SRCDIR "" +#endif +Q_DECLARE_METATYPE(QImage::Format) + +class tst_QPixmap : public QObject +{ + Q_OBJECT + +public: + tst_QPixmap(); + virtual ~tst_QPixmap(); + + +public slots: + void init(); + void cleanup(); + +private slots: + void swap(); + + void fromImage_data(); + void fromImage(); + + void fromUninitializedImage_data(); + void fromUninitializedImage(); + + void convertFromImage_data(); + void convertFromImage(); + + void testMetrics(); + + void scroll_data(); + void scroll(); + + void fill_data(); + void fill(); + void fill_transparent(); + + void createMaskFromColor(); + + void mask(); + void bitmapMask(); + void setGetMask_data(); + void setGetMask(); + void cacheKey(); + void drawBitmap(); + void grabWidget(); + void grabWindow(); + void isNull(); + void task_246446(); + + void convertFromImageNoDetach(); + void convertFromImageDetach(); + +#if defined(Q_WS_WIN) + void toWinHBITMAP_data(); + void toWinHBITMAP(); + void fromWinHBITMAP_data(); + void fromWinHBITMAP(); + + void toWinHICON_data(); + void toWinHICON(); + void fromWinHICON_data(); + void fromWinHICON(); +#endif + +#if defined(Q_OS_SYMBIAN) + void fromSymbianCFbsBitmap_data(); + void fromSymbianCFbsBitmap(); + void toSymbianCFbsBitmap_data(); + void toSymbianCFbsBitmap(); +#endif + + void onlyNullPixmapsOutsideGuiThread(); + void refUnref(); + + void copy(); + void depthOfNullObjects(); + + void transformed(); + void transformed2(); + + void fromImage_crash(); + + void fromData(); + void loadFromDataNullValues(); + + void loadFromDataImage_data(); + void loadFromDataImage(); + + void fromImageReader_data(); + void fromImageReader(); + + void fromImageReaderAnimatedGif_data(); + void fromImageReaderAnimatedGif(); + + void preserveDepth(); + void splash_crash(); + + void toImageDeepCopy(); + + void loadAsBitmapOrPixmap(); + +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) + void vgImageReadBack(); +#endif + void scaled_QTBUG19157(); +}; + +static bool lenientCompare(const QPixmap &actual, const QPixmap &expected) +{ + QImage expectedImage = expected.toImage().convertToFormat(QImage::Format_RGB32); + QImage actualImage = actual.toImage().convertToFormat(QImage::Format_RGB32); + + if (expectedImage.size() != actualImage.size()) + return false; + + int size = actual.width() * actual.height(); + + int threshold = 2; +#ifdef Q_WS_X11 + if (QX11Info::appDepth() == 16) + threshold = 10; +#endif + + QRgb *a = (QRgb *)actualImage.bits(); + QRgb *e = (QRgb *)expectedImage.bits(); + for (int i = 0; i < size; ++i) { + QColor ca(a[i]); + QColor ce(e[i]); + + bool result = true; + + if (qAbs(ca.red() - ce.red()) > threshold) + result = false; + if (qAbs(ca.green() - ce.green()) > threshold) + result = false; + if (qAbs(ca.blue() - ce.blue()) > threshold) + result = false; + + if (!result) + return false; + } + + return true; +} + +Q_DECLARE_METATYPE(QImage) +Q_DECLARE_METATYPE(QPixmap) +Q_DECLARE_METATYPE(QMatrix) +Q_DECLARE_METATYPE(QBitmap) + +tst_QPixmap::tst_QPixmap() +{ +} + +tst_QPixmap::~tst_QPixmap() +{ +} + +void tst_QPixmap::init() +{ +} + +void tst_QPixmap::cleanup() +{ +} + +void tst_QPixmap::swap() +{ + QPixmap p1( 16, 16 ), p2( 32, 32 ); + p1.fill( Qt::white ); + p2.fill( Qt::black ); + const qint64 p1k = p1.cacheKey(); + const qint64 p2k = p2.cacheKey(); + p1.swap(p2); + QCOMPARE(p1.cacheKey(), p2k); + QCOMPARE(p1.size(), QSize(32,32)); + QCOMPARE(p2.cacheKey(), p1k); + QCOMPARE(p2.size(), QSize(16,16)); +} + +void tst_QPixmap::fromImage_data() +{ + bool is16bit = false; +#ifdef Q_WS_X11 + if (QX11Info::appDepth() == 16) + is16bit = true; +#endif + + QTest::addColumn<QImage::Format>("format"); + + QTest::newRow("Format_Mono") << QImage::Format_Mono; + QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB; +// QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; + if (!is16bit) + QTest::newRow("Format_RGB32") << QImage::Format_RGB32; + QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32; + QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; + if (!is16bit) + QTest::newRow("Format_RGB16") << QImage::Format_RGB16; +} + +void tst_QPixmap::fromImage() +{ + QFETCH(QImage::Format, format); + + QImage image(37, 16, format); + + if (image.colorCount() == 2) { + image.setColor(0, QColor(Qt::color0).rgba()); + image.setColor(1, QColor(Qt::color1).rgba()); + } + image.fill(0x7f7f7f7f); + + const QPixmap pixmap = QPixmap::fromImage(image); +#ifdef Q_WS_X11 + if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle()) + QSKIP("Requires XRender support", SkipAll); +#endif + const QImage result = pixmap.toImage(); + image = image.convertToFormat(result.format()); + QCOMPARE(result, image); +} + + +void tst_QPixmap::fromUninitializedImage_data() +{ + QTest::addColumn<QImage::Format>("format"); + + QTest::newRow("Format_Mono") << QImage::Format_Mono; + QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB; + QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; + QTest::newRow("Format_RGB32") << QImage::Format_RGB32; + QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32; + QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("Format_RGB16") << QImage::Format_RGB16; +} + +void tst_QPixmap::fromUninitializedImage() +{ + QFETCH(QImage::Format, format); + + QImage image(100, 100, format); + QPixmap pix = QPixmap::fromImage(image); + + // it simply shouldn't crash... + QVERIFY(true); + +} + +void tst_QPixmap::convertFromImage_data() +{ + QTest::addColumn<QImage>("img1"); + QTest::addColumn<QImage>("img2"); +#ifdef Q_OS_SYMBIAN + const QString prefix = QLatin1String(SRCDIR) + "convertFromImage"; +#else + const QString prefix = QLatin1String(SRCDIR) + "/convertFromImage"; +#endif + { + QImage img1; + QImage img2; + QVERIFY(img1.load(prefix + "/task31722_0/img1.png")); + QVERIFY(img2.load(prefix + "/task31722_0/img2.png")); + QVERIFY(img1.load(prefix + "/task31722_0/img1.png")); + QVERIFY(img2.load(prefix + "/task31722_0/img2.png")); + QTest::newRow("Task 31722 0") << img1 << img2; + } + { + QImage img1; + QImage img2; + QVERIFY(img1.load(prefix + "/task31722_1/img1.png")); + QVERIFY(img2.load(prefix + "/task31722_1/img2.png")); + QTest::newRow("Task 31722 1") << img1 << img2; + } +} + +void tst_QPixmap::convertFromImage() +{ + QFETCH(QImage, img1); + QFETCH(QImage, img2); + + QPixmap pix = QPixmap::fromImage(img1); + pix = QPixmap::fromImage(img2); + + QPixmap res = QPixmap::fromImage(img2); + QVERIFY( pixmapsAreEqual(&pix, &res) ); +} + +void tst_QPixmap::scroll_data() +{ + QTest::addColumn<QImage>("input"); + QTest::addColumn<int>("dx"); + QTest::addColumn<int>("dy"); + QTest::addColumn<QRect>("rect"); + QTest::addColumn<QRegion>("exposed"); + QTest::addColumn<bool>("newPix"); + + QImage input(":/images/designer.png"); + + // Noop tests + QTest::newRow("null") << QImage() << 0 << 0 << QRect() << QRegion() << false; + QTest::newRow("dx_0_dy_0_null") << input << 0 << 0 << QRect() << QRegion() << false; + QTest::newRow("dx_1_dy_0_null") << input << 1 << 0 << QRect() << QRegion() << false; + QTest::newRow("dx_0_dy_1_null") << input << 0 << 1 << QRect() << QRegion() << false; + QTest::newRow("dx_0_dy_0_x_y_w_h") << input << 0 << 0 << input.rect() << QRegion() << false; + + QRegion r; + // Scroll whole pixmap + r = QRegion(); r += QRect(0, 0, 128, 10); + QTest::newRow("dx_0_dy_10_x_y_w_h") << input << 0 << 10 << input.rect() << r << true; + r = QRegion(); r += QRect(0, 0, 10, 128); + QTest::newRow("dx_10_dy_0_x_y_w_h") << input << 10 << 0 << input.rect() << r << true; + r = QRegion(); r += QRect(0, 0, 128, 10); r += QRect(0, 10, 10, 118); + QTest::newRow("dx_10_dy_10_x_y_w_h") << input << 10 << 10 << input.rect() << r << true; + r = QRegion(); r += QRect(118, 0, 10, 128); + QTest::newRow("dx_-10_dy_0_x_y_w_h") << input << -10 << 0 << input.rect() << r << true; + r = QRegion(); r += QRect(0, 118, 128, 10); + QTest::newRow("dx_0_dy_-10_x_y_w_h") << input << 0 << -10 << input.rect() << r << true; + r = QRegion(); r += QRect(118, 0, 10, 118); r += QRect(0, 118, 128, 10); + QTest::newRow("dx_-10_dy_-10_x_y_w_h") << input << -10 << -10 << input.rect() << r << true; + + // Scroll part of pixmap + QTest::newRow("dx_0_dy_0_50_50_100_100") << input << 0 << 0 << QRect(50, 50, 100, 100) << QRegion() << false; + r = QRegion(); r += QRect(50, 50, 10, 78); + QTest::newRow("dx_10_dy_0_50_50_100_100") << input << 10 << 0 << QRect(50, 50, 100, 100) << r << true; + r = QRegion(); r += QRect(50, 50, 78, 10); + QTest::newRow("dx_0_dy_10_50_50_100_100") << input << 0 << 10 << QRect(50, 50, 100, 100) << r << true; + r = QRegion(); r += QRect(50, 50, 78, 10); r += QRect(50, 60, 10, 68); + QTest::newRow("dx_10_dy_10_50_50_100_100") << input << 10 << 10 << QRect(50, 50, 100, 100) << r << true; + r = QRegion(); r += QRect(118, 50, 10, 78); + QTest::newRow("dx_-10_dy_0_50_50_100_100") << input << -10 << 0 << QRect(50, 50, 100, 100) << r << true; + r = QRegion(); r += QRect(50, 118, 78, 10); + QTest::newRow("dx_0_dy_-10_50_50_100_100") << input << 0 << -10 << QRect(50, 50, 100, 100) << r << true; + r = QRegion(); r += QRect(118, 50, 10, 68); r += QRect(50, 118, 78, 10); + QTest::newRow("dx_-10_dy_-10_50_50_100_100") << input << -10 << -10 << QRect(50, 50, 100, 100) << r << true; + + // Scroll away the whole pixmap + r = input.rect(); + QTest::newRow("dx_128_dy_0_x_y_w_h") << input << 128 << 0 << input.rect() << r << false; + QTest::newRow("dx_0_dy_128_x_y_w_h") << input << 0 << 128 << input.rect() << r << false; + QTest::newRow("dx_128_dy_128_x_y_w_h") << input << 128 << 128 << input.rect() << r << false; + QTest::newRow("dx_-128_dy_0_x_y_w_h") << input << -128 << 0 << input.rect() << r << false; + QTest::newRow("dx_0_dy_-128_x_y_w_h") << input << 0 << -128 << input.rect() << r << false; + QTest::newRow("dx_-128_dy_-128_x_y_w_h") << input << -128 << -128 << input.rect() << r << false; + + // Scroll away part of the pixmap + r = QRegion(); r += QRect(64, 64, 64, 64); + QTest::newRow("dx_128_dy_128_64_64_128_128") << input << 128 << 128 << QRect(64, 64, 128, 128) << r << false; +} + +void tst_QPixmap::scroll() +{ + QFETCH(QImage, input); + QFETCH(int, dx); + QFETCH(int, dy); + QFETCH(QRect, rect); + QFETCH(QRegion, exposed); + QFETCH(bool, newPix); + + QPixmap pixmap = QPixmap::fromImage(input); + QRegion exp; + qint64 oldKey = pixmap.cacheKey(); + pixmap.scroll(dx, dy, rect, &exp); + if (!newPix) + QCOMPARE(pixmap.cacheKey(), oldKey); + else + QVERIFY(pixmap.cacheKey() != oldKey); + +#if 0 + // Remember to add to resources. + QString fileName = QString("images/%1.png").arg(QTest::currentDataTag()); + pixmap.toImage().save(fileName); +#else + QString fileName = QString(":/images/%1.png").arg(QTest::currentDataTag()); +#endif + QPixmap output(fileName); + QVERIFY(input.isNull() == output.isNull()); + QVERIFY(lenientCompare(pixmap, output)); + QCOMPARE(exp, exposed); +} + +void tst_QPixmap::fill_data() +{ + QTest::addColumn<uint>("pixel"); + QTest::addColumn<bool>("syscolor"); + QTest::addColumn<bool>("bitmap"); + for (int color = Qt::black; color < Qt::darkYellow; ++color) + QTest::newRow(QString("syscolor_%1").arg(color).toLatin1()) + << uint(color) << true << false; + +#ifdef Q_WS_QWS + if (QScreen::instance()->depth() >= 24) { +#elif defined (Q_WS_X11) + QPixmap pm(1, 1); + if (pm.x11PictureHandle()) { +#elif defined (Q_OS_WINCE) + QPixmap pixmap(1,1); + if (QPixmap::grabWidget(QApplication::desktop()).depth() >= 24) { +#else + QPixmap pixmap(1, 1); { +#endif + QTest::newRow("alpha_7f_red") << 0x7fff0000u << false << false; + QTest::newRow("alpha_3f_blue") << 0x3f0000ffu << false << false; + QTest::newRow("alpha_b7_green") << 0xbf00ff00u << false << false; + QTest::newRow("alpha_7f_white") << 0x7fffffffu << false << false; + QTest::newRow("alpha_3f_white") << 0x3fffffffu << false << false; + QTest::newRow("alpha_b7_white") << 0xb7ffffffu << false << false; + QTest::newRow("alpha_7f_black") << 0x7f000000u << false << false; + QTest::newRow("alpha_3f_black") << 0x3f000000u << false << false; + QTest::newRow("alpha_b7_black") << 0xbf000000u << false << false; + } + + QTest::newRow("bitmap_color0") << uint(Qt::color0) << true << true; + QTest::newRow("bitmap_color1") << uint(Qt::color1) << true << true; +} + +void tst_QPixmap::fill() +{ + QFETCH(uint, pixel); + QFETCH(bool, syscolor); + QFETCH(bool, bitmap); + + QColor color; + + if (syscolor) + color = QColor(Qt::GlobalColor(pixel)); + else + color = QColor(qRed(pixel), qGreen(pixel), qBlue(pixel), qAlpha(pixel)); + + QColor compareColor = color; + if (bitmap && syscolor) { + // special case color0 and color1 for bitmaps. + if (pixel == Qt::color0) + compareColor.setRgb(255, 255, 255); + else + compareColor.setRgb(0, 0, 0); + } + + QPixmap pm; + + if (bitmap) + pm = QBitmap(400, 400); + else + pm = QPixmap(400, 400); + +#if defined(Q_WS_X11) + if (!bitmap && pm.handle()->classId() == QPlatformPixmap::X11Class && !pm.x11PictureHandle()) + QSKIP("Requires XRender support", SkipSingle); +#endif + + pm.fill(color); + if (syscolor && !bitmap && pm.depth() < 24) { + QSKIP("Test does not work on displays without true color", SkipSingle); + } + + QImage image = pm.toImage(); + if (bitmap && syscolor) { + int pixelindex = (pixel == Qt::color0) ? 0 : 1; + QCOMPARE(image.pixelIndex(0,0), pixelindex); + } + QImage::Format format = compareColor.alpha() != 255 + ? QImage::Format_ARGB32 + : QImage::Format_RGB32; + image = image.convertToFormat(format); + + + QImage shouldBe(400, 400, format); + shouldBe.fill(compareColor.rgba()); + + QCOMPARE(image, shouldBe); +} + +void tst_QPixmap::fill_transparent() +{ + QPixmap pixmap(10, 10); +#ifdef Q_WS_X11 + if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle()) + QSKIP("Requires XRender support", SkipAll); +#endif + pixmap.fill(Qt::transparent); + QVERIFY(pixmap.hasAlphaChannel()); +} + +void tst_QPixmap::mask() +{ + QPixmap pm(100, 100); + QBitmap bm(100, 100); + + pm.fill(); + bm.fill(); + + QVERIFY(!pm.isNull()); + QVERIFY(!bm.isNull()); + if (!pm.hasAlphaChannel()) { + // This would fail if the default pixmap format is + // argb32_premultiplied. The mask will be all 1's. + // Therefore this is skipped when the alpha channel is present. + QVERIFY(pm.mask().isNull()); + } + + QImage img = bm.toImage(); + QVERIFY(img.format() == QImage::Format_MonoLSB + || img.format() == QImage::Format_Mono); + + pm.setMask(bm); + QVERIFY(!pm.mask().isNull()); + + bm = QBitmap(); + // Invalid format here, since isNull() == true + QVERIFY(bm.toImage().isNull()); + QCOMPARE(bm.toImage().format(), QImage::Format_Invalid); + pm.setMask(bm); + QVERIFY(pm.mask().isNull()); + + bm = QBitmap(100, 100); + bm.fill(); + pm.setMask(bm); + QVERIFY(!pm.mask().isNull()); +} + +void tst_QPixmap::bitmapMask() +{ + QImage image(3, 3, QImage::Format_Mono); + image.setColor(0, Qt::color0); + image.setColor(1, Qt::color1); + image.fill(Qt::color0); + image.setPixel(1, 1, Qt::color1); + image.setPixel(0, 0, Qt::color1); + + QImage image_mask(3, 3, QImage::Format_Mono); + image_mask.setColor(0, Qt::color0); + image_mask.setColor(1, Qt::color1); + image_mask.fill(Qt::color0); + image_mask.setPixel(1, 1, Qt::color1); + image_mask.setPixel(2, 0, Qt::color1); + + QBitmap pm = QBitmap::fromImage(image); + QBitmap pm_mask = QBitmap::fromImage(image_mask); + pm.setMask(pm_mask); + + image = pm.toImage(); + image.setColor(0, Qt::color0); + image.setColor(1, Qt::color1); + image_mask = pm_mask.toImage(); + image_mask.setColor(0, Qt::color0); + image_mask.setColor(1, Qt::color1); + + QVERIFY(!image.pixel(0, 0)); + QVERIFY(!image.pixel(2, 0)); + QVERIFY(image.pixel(1, 1)); +} + +void tst_QPixmap::setGetMask_data() +{ + QTest::addColumn<QPixmap>("pixmap"); + QTest::addColumn<QBitmap>("mask"); + QTest::addColumn<QBitmap>("expected"); + + QPixmap pixmap(10, 10); + QBitmap mask(10, 10); + QPainter p; + + p.begin(&pixmap); + p.fillRect(0, 0, 10, 10, QColor(Qt::black)); + p.end(); + + QTest::newRow("nullmask 0") << QPixmap() << QBitmap() << QBitmap(); + QTest::newRow("nullmask 1") << pixmap << QBitmap() << QBitmap(); + mask.clear(); + QTest::newRow("nullmask 2") << pixmap << mask << mask; + QTest::newRow("nullmask 3") << QPixmap(QBitmap()) << QBitmap() << QBitmap(); + + p.begin(&mask); + p.fillRect(1, 1, 5, 5, QColor(Qt::color1)); + p.end(); + QTest::newRow("simple mask 0") << pixmap << mask << mask; +} + +void tst_QPixmap::setGetMask() +{ + QFETCH(QPixmap, pixmap); + QFETCH(QBitmap, mask); + QFETCH(QBitmap, expected); + + pixmap.setMask(mask); + QBitmap result = pixmap.mask(); + + QImage resultImage = result.toImage(); + QImage expectedImage = expected.toImage(); + QCOMPARE(resultImage.convertToFormat(expectedImage.format()), + expectedImage); +} + +void tst_QPixmap::testMetrics() +{ + QPixmap pixmap(100, 100); + + QCOMPARE(pixmap.width(), 100); + QCOMPARE(pixmap.height(), 100); + QVERIFY(pixmap.depth() >= QPixmap::defaultDepth()); + + QBitmap bitmap(100, 100); + + QCOMPARE(bitmap.width(), 100); + QCOMPARE(bitmap.height(), 100); + QCOMPARE(bitmap.depth(), 1); + + QPixmap null; + + QCOMPARE(null.size().width(), null.width()); + QCOMPARE(null.size().height(), null.height()); +} + +void tst_QPixmap::createMaskFromColor() +{ + QImage image(3, 3, QImage::Format_Indexed8); + image.setColorCount(10); + image.setColor(0, 0xffffffff); + image.setColor(1, 0xff000000); + image.setColor(2, 0xffff0000); + image.setColor(3, 0xff0000ff); + image.fill(0); + image.setPixel(1, 0, 1); + image.setPixel(0, 1, 2); + image.setPixel(1, 1, 3); + + QImage im_mask = image.createMaskFromColor(0xffff0000); + QCOMPARE((uint) im_mask.pixel(0, 1), QColor(Qt::color0).rgba()); + QCOMPARE((uint) im_mask.pixel(0, 1), QColor(Qt::color0).rgba()); + + QPixmap pixmap = QPixmap::fromImage(image); + QBitmap mask = pixmap.createMaskFromColor(Qt::red); + QBitmap inv_mask = pixmap.createMaskFromColor(Qt::red, Qt::MaskOutColor); + QCOMPARE((uint) mask.toImage().pixel(0, 1), QColor(Qt::color0).rgba()); + QCOMPARE((uint) inv_mask.toImage().pixel(0, 1), QColor(Qt::color1).rgba()); +} + + +void tst_QPixmap::cacheKey() +{ + QPixmap pixmap1(1, 1); + QPixmap pixmap2(1, 1); + qint64 pixmap1_key = pixmap1.cacheKey(); + + QVERIFY(pixmap1.cacheKey() != pixmap2.cacheKey()); + + pixmap2 = pixmap1; + QVERIFY(pixmap2.cacheKey() == pixmap1.cacheKey()); + + pixmap2.detach(); + QVERIFY(pixmap2.cacheKey() != pixmap1.cacheKey()); + QVERIFY(pixmap1.cacheKey() == pixmap1_key); +} + +// Test drawing a bitmap on a pixmap. +void tst_QPixmap::drawBitmap() +{ + QBitmap bitmap(10,10); + bitmap.fill(Qt::color1); + + QPixmap pixmap(10,10); + QPainter painter2(&pixmap); + painter2.fillRect(0,0,10,10, QBrush(Qt::green)); + painter2.setPen(Qt::red); + painter2.drawPixmap(0,0,10,10, bitmap); + painter2.end(); + + QPixmap expected(10, 10); + expected.fill(Qt::red); + + QVERIFY(lenientCompare(pixmap, expected)); +} + +void tst_QPixmap::grabWidget() +{ + for (int opaque = 0; opaque < 2; ++opaque) { + QWidget widget; + QImage image(128, 128, opaque ? QImage::Format_RGB32 : QImage::Format_ARGB32_Premultiplied); + for (int row = 0; row < image.height(); ++row) { + QRgb *line = reinterpret_cast<QRgb *>(image.scanLine(row)); + for (int col = 0; col < image.width(); ++col) + line[col] = qRgba(rand() & 255, row, col, opaque ? 255 : 127); + } + + QPalette pal = widget.palette(); + pal.setBrush(QPalette::Window, QBrush(image)); + widget.setPalette(pal); + widget.resize(128, 128); + + QPixmap expected(64, 64); + if (!opaque) + expected.fill(Qt::transparent); + + QPainter p(&expected); + p.translate(-64, -64); + p.drawTiledPixmap(0, 0, 128, 128, pal.brush(QPalette::Window).texture(), 0, 0); + p.end(); + + QPixmap actual = QPixmap::grabWidget(&widget, QRect(64, 64, 64, 64)); + QVERIFY(lenientCompare(actual, expected)); + + actual = QPixmap::grabWidget(&widget, 64, 64); + QVERIFY(lenientCompare(actual, expected)); + + // Make sure a widget that is not yet shown is grabbed correctly. + QTreeWidget widget2; + actual = QPixmap::grabWidget(&widget2); + widget2.show(); + expected = QPixmap::grabWidget(&widget2); + + QVERIFY(lenientCompare(actual, expected)); + } +} + +void tst_QPixmap::grabWindow() +{ +#ifdef Q_WS_QPA + QSKIP("QTBUG-20863 grabWindow is broken on most qpa backends", SkipAll); +#endif +#ifdef Q_OS_WINCE + // We get out of memory, if the desktop itself is too big. + if (QApplication::desktop()->width() <= 480) +#endif + QVERIFY(QPixmap::grabWindow(QApplication::desktop()->winId()).isNull() == false); + QWidget w; + w.resize(640, 480); + w.show(); + QTest::qWait(100); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&w); +#endif + QVERIFY(QPixmap::grabWindow(w.winId()).isNull() == false); + + QWidget child(&w); + child.setGeometry(50, 50, 100, 100); + child.setPalette(Qt::red); + child.setAutoFillBackground(true); + child.show(); + QTest::qWait(100); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&child); +#endif + + QPixmap grabWindowPixmap = QPixmap::grabWindow(child.winId()); + QPixmap grabWidgetPixmap = QPixmap::grabWidget(&child); + lenientCompare(grabWindowPixmap, grabWidgetPixmap); +} + +void tst_QPixmap::isNull() +{ + { + QPixmap pixmap(1,1); + QVERIFY(pixmap.isNull() == false); + } + { + QPixmap pixmap(0,0); + QVERIFY(pixmap.isNull()); + } + + { + QPixmap pixmap(0,1); + QVERIFY(pixmap.isNull()); + } + { + QPixmap pixmap(1,0); + QVERIFY(pixmap.isNull()); + } + { + QPixmap pixmap(-1,-1); + QVERIFY(pixmap.isNull()); + } + { + QPixmap pixmap(-1,5); + QVERIFY(pixmap.isNull()); + } +} + +void tst_QPixmap::convertFromImageNoDetach() +{ + QPixmap randomPixmap(10, 10); + if (randomPixmap.handle()->classId() != QPlatformPixmap::RasterClass) + QSKIP("Test only valid for raster pixmaps", SkipAll); + + //first get the screen format + QImage::Format screenFormat = randomPixmap.toImage().format(); + QVERIFY(screenFormat != QImage::Format_Invalid); + + QImage orig(100,100, screenFormat); + + QPixmap pix = QPixmap::fromImage(orig); + QImage copy = pix.toImage(); + + QVERIFY(copy.format() == screenFormat); + + const QImage constOrig = orig; + const QImage constCopy = copy; + QVERIFY(constOrig.bits() == constCopy.bits()); +} + +void tst_QPixmap::convertFromImageDetach() +{ + QImage img(10,10, QImage::Format_RGB32); + img.fill(0); + QVERIFY(!img.isNull()); + QPixmap p = QPixmap::fromImage(img); + QVERIFY(p.isDetached()); + QPixmap copy = p; + QVERIFY(!copy.isDetached()); + QVERIFY(!p.isDetached()); + img.fill(1); + p = QPixmap::fromImage(img); + QVERIFY(copy.isDetached()); +} + +#if defined(Q_WS_WIN) +void tst_QPixmap::toWinHBITMAP_data() +{ + QTest::addColumn<int>("red"); + QTest::addColumn<int>("green"); + QTest::addColumn<int>("blue"); + + QTest::newRow("red") << 255 << 0 << 0; + QTest::newRow("green") << 0 << 255 << 0; + QTest::newRow("blue") << 0 << 0 << 255; +} + +void tst_QPixmap::toWinHBITMAP() +{ + QFETCH(int, red); + QFETCH(int, green); + QFETCH(int, blue); + + QPixmap pm(100, 100); + pm.fill(QColor(red, green, blue)); + + HBITMAP bitmap = pm.toWinHBITMAP(); + + QVERIFY(bitmap != 0); + + // Verify size + BITMAP bitmap_info; + memset(&bitmap_info, 0, sizeof(BITMAP)); + + int res = GetObject(bitmap, sizeof(BITMAP), &bitmap_info); + QVERIFY(res); + + QCOMPARE(100, (int) bitmap_info.bmWidth); + QCOMPARE(100, (int) bitmap_info.bmHeight); + + HDC display_dc = GetDC(0); + HDC bitmap_dc = CreateCompatibleDC(display_dc); + + HBITMAP null_bitmap = (HBITMAP) SelectObject(bitmap_dc, bitmap); + + COLORREF pixel = GetPixel(bitmap_dc, 0, 0); + QCOMPARE((int)GetRValue(pixel), red); + QCOMPARE((int)GetGValue(pixel), green); + QCOMPARE((int)GetBValue(pixel), blue); + + // Clean up + SelectObject(bitmap_dc, null_bitmap); + DeleteObject(bitmap); + DeleteDC(bitmap_dc); + ReleaseDC(0, display_dc); + +} + +void tst_QPixmap::fromWinHBITMAP_data() +{ + toWinHBITMAP_data(); +} + +void tst_QPixmap::fromWinHBITMAP() +{ + QFETCH(int, red); + QFETCH(int, green); + QFETCH(int, blue); + + HDC display_dc = GetDC(0); + HDC bitmap_dc = CreateCompatibleDC(display_dc); + HBITMAP bitmap = CreateCompatibleBitmap(display_dc, 100, 100); + SelectObject(bitmap_dc, bitmap); + + SelectObject(bitmap_dc, GetStockObject(NULL_PEN)); + HGDIOBJ old_brush = SelectObject(bitmap_dc, CreateSolidBrush(RGB(red, green, blue))); + Rectangle(bitmap_dc, 0, 0, 100, 100); + +#ifdef Q_OS_WINCE //the device context has to be deleted before QPixmap::fromWinHBITMAP() + DeleteDC(bitmap_dc); +#endif + QPixmap pixmap = QPixmap::fromWinHBITMAP(bitmap); + QCOMPARE(pixmap.width(), 100); + QCOMPARE(pixmap.height(), 100); + + QImage image = pixmap.toImage(); + QRgb pixel = image.pixel(0, 0); + QCOMPARE(qRed(pixel), red); + QCOMPARE(qGreen(pixel), green); + QCOMPARE(qBlue(pixel), blue); + + DeleteObject(SelectObject(bitmap_dc, old_brush)); + DeleteObject(SelectObject(bitmap_dc, bitmap)); +#ifndef Q_OS_WINCE + DeleteDC(bitmap_dc); +#endif + ReleaseDC(0, display_dc); +} + +static void compareImages(const QImage &image1, const QImage &image2) +{ + QCOMPARE(image1.width(), image2.width()); + QCOMPARE(image1.height(), image2.height()); + QCOMPARE(image1.format(), image2.format()); + + static const int fuzz = 1; + + for (int y = 0; y < image1.height(); y++) + { + for (int x = 0; x < image2.width(); x++) + { + QRgb p1 = image1.pixel(x, y); + QRgb p2 = image2.pixel(x, y); + + bool pixelMatches = + qAbs(qRed(p1) - qRed(p2)) <= fuzz + && qAbs(qGreen(p1) - qGreen(p2)) <= fuzz + && qAbs(qBlue(p1) - qBlue(p2)) <= fuzz + && qAbs(qAlpha(p1) - qAlpha(p2)) <= fuzz; + + QVERIFY(pixelMatches); + } + } +} + +void tst_QPixmap::toWinHICON_data() +{ + QTest::addColumn<QString>("image"); + QTest::addColumn<int>("width"); + QTest::addColumn<int>("height"); + + const QString prefix = QLatin1String(SRCDIR) + "/convertFromToHICON"; + + QTest::newRow("32bpp_16x16") << prefix + QLatin1String("/icon_32bpp") << 16 << 16; + QTest::newRow("32bpp_32x32") << prefix + QLatin1String("/icon_32bpp") << 32 << 32; + QTest::newRow("32bpp_48x48") << prefix + QLatin1String("/icon_32bpp") << 48 << 48; + QTest::newRow("32bpp_256x256") << prefix + QLatin1String("/icon_32bpp") << 256 << 256; + + QTest::newRow("8bpp_16x16") << prefix + QLatin1String("/icon_8bpp") << 16 << 16; + QTest::newRow("8bpp_32x32") << prefix + QLatin1String("/icon_8bpp") << 32 << 32; + QTest::newRow("8bpp_48x48") << prefix + QLatin1String("/icon_8bpp") << 48 << 48; +} + +void tst_QPixmap::toWinHICON() +{ +#ifdef Q_OS_WINCE + QSKIP("Test shall be enabled for Windows CE shortly.", SkipAll); +#endif + + QFETCH(int, width); + QFETCH(int, height); + QFETCH(QString, image); + + QPixmap empty(width, height); + empty.fill(Qt::transparent); + + HDC display_dc = GetDC(0); + HDC bitmap_dc = CreateCompatibleDC(display_dc); + HBITMAP bitmap = empty.toWinHBITMAP(QPixmap::Alpha); + SelectObject(bitmap_dc, bitmap); + + QImage imageFromFile(image + QString(QLatin1String("_%1x%2.png")).arg(width).arg(height)); + imageFromFile = imageFromFile.convertToFormat(QImage::Format_ARGB32_Premultiplied); + + HICON icon = QPixmap::fromImage(imageFromFile).toWinHICON(); + + DrawIconEx(bitmap_dc, 0, 0, icon, width, height, 0, 0, DI_NORMAL); + + DestroyIcon(icon); + DeleteDC(bitmap_dc); + + QImage imageFromHICON = QPixmap::fromWinHBITMAP(bitmap, QPixmap::Alpha).toImage(); + + ReleaseDC(0, display_dc); + + // fuzzy comparison must be used, as the pixel values change slightly during conversion + // between QImage::Format_ARGB32 and QImage::Format_ARGB32_Premultiplied, or elsewhere + + // QVERIFY(imageFromHICON == imageFromFile); + compareImages(imageFromHICON, imageFromFile); +} + +void tst_QPixmap::fromWinHICON_data() +{ + toWinHICON_data(); +} + +void tst_QPixmap::fromWinHICON() +{ +#ifdef Q_OS_WINCE + QSKIP("Test shall be enabled for Windows CE shortly.", SkipAll); + +#else + QFETCH(int, width); + QFETCH(int, height); + QFETCH(QString, image); + + HICON icon = (HICON)LoadImage(0, (wchar_t*)(image + QLatin1String(".ico")).utf16(), IMAGE_ICON, width, height, LR_LOADFROMFILE); + QImage imageFromHICON = QPixmap::fromWinHICON(icon).toImage(); + DestroyIcon(icon); + + QImage imageFromFile(image + QString(QLatin1String("_%1x%2.png")).arg(width).arg(height)); + imageFromFile = imageFromFile.convertToFormat(QImage::Format_ARGB32_Premultiplied); + + // fuzzy comparison must be used, as the pixel values change slightly during conversion + // between QImage::Format_ARGB32 and QImage::Format_ARGB32_Premultiplied, or elsewhere + + // QVERIFY(imageFromHICON == imageFromFile); + compareImages(imageFromHICON, imageFromFile); +#endif +} + +#endif // Q_WS_WIN + +#if defined(Q_OS_SYMBIAN) +Q_DECLARE_METATYPE(TDisplayMode) + +void tst_QPixmap::fromSymbianCFbsBitmap_data() +{ + QTest::addColumn<TDisplayMode>("format"); + QTest::addColumn<int>("width"); + QTest::addColumn<int>("height"); + QTest::addColumn<QColor>("color"); + + const int smallWidth = 20; + const int smallHeight = 20; + const int largeWidth = 240; + const int largeHeight = 320; + const int notAlignedWidth = 250; + const int notAlignedHeight = 250; + + // Indexed Color Formats - Disabled since images seem to be blank -> no palette? +// QTest::newRow("EGray2 small") << EGray2 << smallWidth << smallHeight << QColor(Qt::black); +// QTest::newRow("EGray2 big") << EGray2 << largeWidth << largeHeight << QColor(Qt::black); +// QTest::newRow("EGray256 small") << EGray256 << smallWidth << smallHeight << QColor(Qt::blue); +// QTest::newRow("EGray256 big") << EGray256 << largeWidth << largeHeight << QColor(Qt::blue); +// QTest::newRow("EColor256 small") << EColor256 << smallWidth << smallHeight << QColor(Qt::red); +// QTest::newRow("EColor256 big") << EColor256 << largeWidth << largeHeight << QColor(Qt::red); + + // Direct Color Formats + QTest::newRow("EColor4K small") << EColor4K << smallWidth << smallHeight << QColor(Qt::red); + QTest::newRow("EColor4K big") << EColor4K << largeWidth << largeHeight << QColor(Qt::red); + QTest::newRow("EColor4K not aligned") << EColor4K << notAlignedWidth << notAlignedHeight << QColor(Qt::red); + QTest::newRow("EColor64K small") << EColor64K << smallWidth << smallHeight << QColor(Qt::green); + QTest::newRow("EColor64K big") << EColor64K << largeWidth << largeHeight << QColor(Qt::green); + QTest::newRow("EColor64K not aligned") << EColor64K << notAlignedWidth << notAlignedHeight << QColor(Qt::green); + QTest::newRow("EColor16M small") << EColor16M << smallWidth << smallHeight << QColor(Qt::yellow); + QTest::newRow("EColor16M big") << EColor16M << largeWidth << largeHeight << QColor(Qt::yellow); + QTest::newRow("EColor16M not aligned") << EColor16M << notAlignedWidth << notAlignedHeight << QColor(Qt::yellow); + QTest::newRow("EColor16MU small") << EColor16MU << smallWidth << smallHeight << QColor(Qt::red); + QTest::newRow("EColor16MU big") << EColor16MU << largeWidth << largeHeight << QColor(Qt::red); + QTest::newRow("EColor16MU not aligned") << EColor16MU << notAlignedWidth << notAlignedHeight << QColor(Qt::red); + QTest::newRow("EColor16MA small opaque") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0); + QTest::newRow("EColor16MA big opaque") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0); + QTest::newRow("EColor16MA not aligned opaque") << EColor16MA << notAlignedWidth << notAlignedHeight << QColor(255, 255, 0); + + // Semi-transparent Colors - Disabled for now, since the QCOMPARE fails, but visually confirmed to work +// QTest::newRow("EColor16MA small semi") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0, 127); +// QTest::newRow("EColor16MA big semi") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0, 127); +// QTest::newRow("EColor16MA small trans") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0, 0); +// QTest::newRow("EColor16MA big trans") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0, 0); + +#if !defined(__SERIES60_31__) + QTest::newRow("EColor16MAP small") << EColor16MAP << smallWidth << smallHeight << QColor(Qt::red); + QTest::newRow("EColor16MAP big") << EColor16MAP << largeWidth << largeHeight << QColor(Qt::red); +#endif +} + +void tst_QPixmap::fromSymbianCFbsBitmap() +{ + QFETCH(TDisplayMode, format); + QFETCH(int, width); + QFETCH(int, height); + QFETCH(QColor, color); + int expectedDepth = TDisplayModeUtils::NumDisplayModeBitsPerPixel(format); + + CFbsBitmap *nativeBitmap = 0; + CFbsBitmapDevice *bitmapDevice = 0; + CBitmapContext *bitmapContext = 0; + + nativeBitmap = new (ELeave) CFbsBitmap(); + TInt err = nativeBitmap->Create(TSize(width, height), format); + CleanupStack::PushL(nativeBitmap); + QVERIFY(err == KErrNone); + bitmapDevice = CFbsBitmapDevice::NewL(nativeBitmap); + CleanupStack::PushL(bitmapDevice); + + err = bitmapDevice->CreateBitmapContext(bitmapContext); + CleanupStack::PushL(bitmapContext); + QVERIFY(err == KErrNone); + TRgb symbianColor = TRgb(color.red(), color.green(), color.blue(), color.alpha()); + bitmapContext->SetBrushColor(symbianColor); + bitmapContext->Clear(); + + __UHEAP_MARK; + { // Test the null case + CFbsBitmap *bitmap = 0; + QPixmap pixmap = QPixmap::fromSymbianCFbsBitmap(bitmap); + QVERIFY(pixmap.isNull()); + } + __UHEAP_MARKEND; + + __UHEAP_MARK; + { // Test the normal case + QPixmap pixmap = QPixmap::fromSymbianCFbsBitmap(nativeBitmap); +// QCOMPARE(pixmap.depth(), expectedDepth); // Depth is not preserved now + QCOMPARE(pixmap.width(), width); + QCOMPARE(pixmap.height(), height); + QImage image = pixmap.toImage(); + + QColor actualColor(image.pixel(1, 1)); + QCOMPARE(actualColor, color); + + QImage shouldBe(pixmap.width(), pixmap.height(), image.format()); + if (image.format() == QImage::Format_RGB16) + shouldBe.fill(qrgb565(color.rgba()).rawValue()); + else + shouldBe.fill(color.rgba()); + QCOMPARE(image, shouldBe); + } + __UHEAP_MARKEND; + + CleanupStack::PopAndDestroy(3); +} + +void tst_QPixmap::toSymbianCFbsBitmap_data() +{ + QTest::addColumn<int>("red"); + QTest::addColumn<int>("green"); + QTest::addColumn<int>("blue"); + + QTest::newRow("red") << 255 << 0 << 0; + QTest::newRow("green") << 0 << 255 << 0; + QTest::newRow("blue") << 0 << 0 << 255; +} + +void tst_QPixmap::toSymbianCFbsBitmap() +{ + QFETCH(int, red); + QFETCH(int, green); + QFETCH(int, blue); + + QPixmap pm(100, 100); + pm.fill(QColor(red, green, blue)); + + CFbsBitmap *bitmap = pm.toSymbianCFbsBitmap(); + + QVERIFY(bitmap != 0); + + // Verify size + QCOMPARE(100, (int) bitmap->SizeInPixels().iWidth); + QCOMPARE(100, (int) bitmap->SizeInPixels().iHeight); + + // Verify pixel color + TRgb pixel; + bitmap->GetPixel(pixel, TPoint(0,0)); + QCOMPARE((int)pixel.Red(), red); + QCOMPARE((int)pixel.Green(), green); + QCOMPARE((int)pixel.Blue(), blue); + + // Clean up + delete bitmap; +} +#endif + +void tst_QPixmap::onlyNullPixmapsOutsideGuiThread() +{ +#ifdef Q_WS_QPA + QSKIP("QTBUG-20864 can't determine if threaded pixmaps are available for qpa", SkipAll); +#endif +#if !defined(Q_WS_WIN) && !defined(Q_WS_MAC) + class Thread : public QThread + { + public: + void run() + { + QTest::ignoreMessage(QtWarningMsg, + "QPixmap: It is not safe to use pixmaps outside the GUI thread"); + QPixmap pixmap; + QVERIFY(pixmap.isNull()); + + QTest::ignoreMessage(QtWarningMsg, + "QPixmap: It is not safe to use pixmaps outside the GUI thread"); + QPixmap pixmap1(100, 100); + QVERIFY(pixmap1.isNull()); + + QTest::ignoreMessage(QtWarningMsg, + "QPixmap: It is not safe to use pixmaps outside the GUI thread"); + QPixmap pixmap2(pixmap1); + QVERIFY(pixmap2.isNull()); + } + }; + Thread thread; +#if defined(Q_OS_SYMBIAN) + thread.setStackSize(0x10000); +#endif + thread.start(); +#if defined(Q_OS_SYMBIAN) + QVERIFY(thread.wait(10000)); +#else + thread.wait(); +#endif + +#endif // !defined(Q_WS_WIN) && !defined(Q_WS_MAC) +} + +void tst_QPixmap::refUnref() +{ + // Simple ref/unref + { + QPixmap p; + } + { + QBitmap b; + } + + // Get a copy of a pixmap that goes out of scope + { + QPixmap b; + { + QPixmap a(10, 10); + a.fill(Qt::color0); + b = a; + } + } + { + QBitmap mask; + { + QBitmap bitmap(10, 10); + bitmap.fill(Qt::color1); + mask = bitmap.mask(); + } + mask.fill(Qt::color0); + } + +} + +void tst_QPixmap::copy() +{ + QPixmap src(32, 32); + { + QPainter p(&src); + p.fillRect(0, 0, 32, 32, Qt::red); + p.fillRect(10, 10, 10, 10, Qt::blue); + } + + QPixmap dest = src.copy(10, 10, 10, 10); + + QPixmap expected(10, 10); + expected.fill(Qt::blue); + QVERIFY(lenientCompare(dest, expected)); + + QPixmap trans; + trans.fill(Qt::transparent); + + QPixmap transCopy = trans.copy(); + QVERIFY(pixmapsAreEqual(&trans, &transCopy)); +} + +void tst_QPixmap::depthOfNullObjects() +{ + QBitmap b1; + QVERIFY(b1.depth() == 0); + QPixmap p4; + QVERIFY(p4.depth() == 0); +} + +void tst_QPixmap::transformed() +{ + QPixmap p1(20, 10); + p1.fill(Qt::red); + { + QPainter p(&p1); + p.drawRect(0, 0, p1.width() - 1, p1.height() - 1); + } + + QPixmap p2(10, 20); + { + QPainter p(&p2); + p.rotate(90); + p.drawPixmap(0, -p1.height(), p1); + } + + QPixmap p3(20, 10); + { + QPainter p(&p3); + p.rotate(180); + p.drawPixmap(-p1.width(), -p1.height(), p1); + } + + QPixmap p4(10, 20); + { + QPainter p(&p4); + p.rotate(270); + p.drawPixmap(-p1.width(), 0, p1); + } + + QPixmap p1_90 = p1.transformed(QTransform().rotate(90)); + QPixmap p1_180 = p1.transformed(QTransform().rotate(180)); + QPixmap p1_270 = p1.transformed(QTransform().rotate(270)); + + QVERIFY(lenientCompare(p1_90, p2)); + QVERIFY(lenientCompare(p1_180, p3)); + QVERIFY(lenientCompare(p1_270, p4)); +} + +void tst_QPixmap::transformed2() +{ + QPixmap pm(3, 3); + pm.fill(Qt::red); + QPainter p(&pm); + p.fillRect(0, 0, 3, 3, QBrush(Qt::Dense4Pattern)); + p.end(); + + QTransform transform; + transform.rotate(-90); + transform.scale(3, 3); + + QPixmap actual = pm.transformed(transform); + + QPixmap expected(9, 9); + expected.fill(Qt::red); + p.begin(&expected); + p.setBrush(Qt::black); + p.setPen(Qt::NoPen); + p.drawRect(3, 0, 3, 3); + p.drawRect(0, 3, 3, 3); + p.drawRect(6, 3, 3, 3); + p.drawRect(3, 6, 3, 3); + p.end(); + + QVERIFY(lenientCompare(actual, expected)); +} + +void tst_QPixmap::fromImage_crash() +{ + QImage *img = new QImage(64, 64, QImage::Format_ARGB32_Premultiplied); + + QPixmap pm = QPixmap::fromImage(*img); + QPainter painter(&pm); + + delete img; +} + +//This is testing QPlatformPixmap::createCompatiblePlatformPixmap - see QTBUG-5977 +void tst_QPixmap::splash_crash() +{ + QPixmap pix; + pix = QPixmap(":/images/designer.png"); + QSplashScreen splash(pix); + splash.show(); + QCoreApplication::processEvents(); + splash.close(); +} + +void tst_QPixmap::fromData() +{ + unsigned char bits[] = { 0xaa, 0x55 }; + + QBitmap bm = QBitmap::fromData(QSize(8, 2), bits); + QImage img = bm.toImage(); + + QSet<QRgb> colors; + for (int y = 0; y < img.height(); ++y) + for (int x = 0; x < img.width(); ++x) + colors << img.pixel(x, y); + + QCOMPARE(colors.size(), 2); + + QCOMPARE(img.pixel(0, 0), QRgb(0xffffffff)); + QCOMPARE(img.pixel(0, 1), QRgb(0xff000000)); +} + +void tst_QPixmap::loadFromDataNullValues() +{ + { + QPixmap pixmap; + pixmap.loadFromData(QByteArray()); + QVERIFY(pixmap.isNull()); + } + { + QPixmap pixmap; + pixmap.loadFromData(0, 123); + QVERIFY(pixmap.isNull()); + } + { + QPixmap pixmap; + const uchar bla[] = "bla"; + pixmap.loadFromData(bla, 0); + QVERIFY(pixmap.isNull()); + } +} + +void tst_QPixmap::loadFromDataImage_data() +{ + QTest::addColumn<QString>("imagePath"); +#ifdef Q_OS_SYMBIAN + const QString prefix = QLatin1String(SRCDIR) + "loadFromData"; +#else + const QString prefix = QLatin1String(SRCDIR) + "/loadFromData"; +#endif + QTest::newRow("designer_argb32.png") << prefix + "/designer_argb32.png"; + // When no extension is provided we try all extensions that has been registered by image providers + QTest::newRow("designer_argb32") << prefix + "/designer_argb32.png"; + QTest::newRow("designer_indexed8_no_alpha.png") << prefix + "/designer_indexed8_no_alpha.png"; + QTest::newRow("designer_indexed8_with_alpha.png") << prefix + "/designer_indexed8_with_alpha.png"; + QTest::newRow("designer_rgb32.png") << prefix + "/designer_rgb32.png"; + QTest::newRow("designer_indexed8_no_alpha.gif") << prefix + "/designer_indexed8_no_alpha.gif"; + QTest::newRow("designer_indexed8_with_alpha.gif") << prefix + "/designer_indexed8_with_alpha.gif"; + QTest::newRow("designer_rgb32.jpg") << prefix + "/designer_rgb32.jpg"; +} + +void tst_QPixmap::loadFromDataImage() +{ + QFETCH(QString, imagePath); + + QImage imageRef(imagePath); + QPixmap pixmapWithCopy = QPixmap::fromImage(imageRef); + + QFile file(imagePath); + file.open(QIODevice::ReadOnly); + QByteArray rawData = file.readAll(); + + QPixmap directLoadingPixmap; + directLoadingPixmap.loadFromData(rawData); + + QVERIFY(pixmapsAreEqual(&pixmapWithCopy, &directLoadingPixmap)); +} + +void tst_QPixmap::fromImageReader_data() +{ + QTest::addColumn<QString>("imagePath"); +#ifdef Q_OS_SYMBIAN + const QString prefix = QLatin1String(SRCDIR) + "loadFromData"; +#else + const QString prefix = QLatin1String(SRCDIR) + "/loadFromData"; +#endif + QTest::newRow("designer_argb32.png") << prefix + "/designer_argb32.png"; + QTest::newRow("designer_indexed8_no_alpha.png") << prefix + "/designer_indexed8_no_alpha.png"; + QTest::newRow("designer_indexed8_with_alpha.png") << prefix + "/designer_indexed8_with_alpha.png"; + QTest::newRow("designer_rgb32.png") << prefix + "/designer_rgb32.png"; + QTest::newRow("designer_indexed8_no_alpha.gif") << prefix + "/designer_indexed8_no_alpha.gif"; + QTest::newRow("designer_indexed8_with_alpha.gif") << prefix + "/designer_indexed8_with_alpha.gif"; + QTest::newRow("designer_rgb32.jpg") << prefix + "/designer_rgb32.jpg"; + QTest::newRow("designer_indexed8_with_alpha_animated") << prefix + "/designer_indexed8_with_alpha_animated.gif"; + QTest::newRow("designer_indexed8_with_alpha_animated") << prefix + "/designer_indexed8_no_alpha_animated.gif"; +} + +void tst_QPixmap::fromImageReader() +{ + QFETCH(QString, imagePath); + + QImage imageRef(imagePath); + QPixmap pixmapWithCopy = QPixmap::fromImage(imageRef); + + QImageReader imageReader(imagePath); + + QPixmap directLoadingPixmap = QPixmap::fromImageReader(&imageReader); + + QVERIFY(pixmapsAreEqual(&pixmapWithCopy, &directLoadingPixmap)); +} + +void tst_QPixmap::fromImageReaderAnimatedGif_data() +{ + QTest::addColumn<QString>("imagePath"); + QTest::newRow("gif with alpha") << QString::fromLatin1("/designer_indexed8_with_alpha_animated.gif"); + QTest::newRow("gif without alpha") << QString::fromLatin1("/designer_indexed8_no_alpha_animated.gif"); +} + +void tst_QPixmap::fromImageReaderAnimatedGif() +{ + QFETCH(QString, imagePath); +#ifdef Q_OS_SYMBIAN + const QString prefix = QLatin1String(SRCDIR) + "loadFromData"; +#else + const QString prefix = QLatin1String(SRCDIR) + "/loadFromData"; +#endif + const QString path = prefix + imagePath; + + QImageReader referenceReader(path); + QImageReader pixmapReader(path); + + QVERIFY(referenceReader.canRead()); + QVERIFY(referenceReader.imageCount() > 1); + + for (int i = 0; i < referenceReader.imageCount(); ++i) { + QImage refImage = referenceReader.read(); + QPixmap refPixmap = QPixmap::fromImage(refImage); + + QPixmap directLoadingPixmap = QPixmap::fromImageReader(&pixmapReader); + QVERIFY(pixmapsAreEqual(&refPixmap, &directLoadingPixmap)); + } +} + +void tst_QPixmap::task_246446() +{ + // This crashed without the bugfix in 246446 + QPixmap pm(10, 10); + pm.fill(Qt::transparent); // force 32-bit depth + QBitmap bm; + pm.setMask(bm); + { + QPixmap pm2(pm); + } + QVERIFY(pm.width() == 10); + QVERIFY(pm.mask().isNull()); +} + +void tst_QPixmap::preserveDepth() +{ + QPixmap target(64, 64); + target.fill(Qt::transparent); + + QPixmap source(64, 64); + source.fill(Qt::white); + + int depth = source.depth(); + + QPainter painter(&target); + painter.setBrush(source); + painter.drawRect(target.rect()); + painter.end(); + + QCOMPARE(depth, source.depth()); +} + +void tst_QPixmap::loadAsBitmapOrPixmap() +{ + QImage tmp(10, 10, QImage::Format_RGB32); + tmp.save("temp_image.png"); + + bool ok; + + // Check that we can load the pixmap as a pixmap and that it then turns into a pixmap + QPixmap pixmap("temp_image.png"); + QVERIFY(!pixmap.isNull()); + QVERIFY(pixmap.depth() > 1); + QVERIFY(!pixmap.isQBitmap()); + + pixmap = QPixmap(); + ok = pixmap.load("temp_image.png"); + QVERIFY(ok); + QVERIFY(!pixmap.isNull()); + QVERIFY(pixmap.depth() > 1); + QVERIFY(!pixmap.isQBitmap()); + + //now we can try to load it without an extension + pixmap = QPixmap(); + ok = pixmap.load("temp_image"); + QVERIFY(ok); + QVERIFY(!pixmap.isNull()); + QVERIFY(pixmap.depth() > 1); + QVERIFY(!pixmap.isQBitmap()); + + // The do the same check for bitmaps.. + QBitmap bitmap("temp_image.png"); + QVERIFY(!bitmap.isNull()); + QVERIFY(bitmap.depth() == 1); + QVERIFY(bitmap.isQBitmap()); + + bitmap = QBitmap(); + ok = bitmap.load("temp_image.png"); + QVERIFY(ok); + QVERIFY(!bitmap.isNull()); + QVERIFY(bitmap.depth() == 1); + QVERIFY(bitmap.isQBitmap()); +} + +void tst_QPixmap::toImageDeepCopy() +{ + QPixmap pixmap(64, 64); + pixmap.fill(Qt::white); + + QPainter painter(&pixmap); + QImage first = pixmap.toImage(); + + painter.setBrush(Qt::black); + painter.drawEllipse(pixmap.rect()); + + QImage second = pixmap.toImage(); + + QVERIFY(first != second); +} + +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) +Q_OPENVG_EXPORT VGImage qPixmapToVGImage(const QPixmap& pixmap); +class FriendlyVGPlatformPixmap : public QVGPlatformPixmap +{ +public: + FriendlyVGPlatformPixmap(PixelType type) : QVGPlatformPixmap(type) { } + bool sourceIsNull() { return source.isNull(); } + friend QPixmap pixmapFromVGImage(VGImage image); +}; +QPixmap pixmapFromVGImage(VGImage image) +{ + if (image != VG_INVALID_HANDLE) { + int w = vgGetParameteri(image, VG_IMAGE_WIDTH); + int h = vgGetParameteri(image, VG_IMAGE_HEIGHT); + FriendlyVGPlatformPixmap *pd = new FriendlyVGPlatformPixmap(QPlatformPixmap::PixmapType); + pd->resize(w, h); + pd->vgImage = image; + pd->recreate = false; + pd->prevSize = QSize(pd->w, pd->h); + return QPixmap(pd); + } + return QPixmap(); +} +class Content : public QWidget +{ +public: + void paintEvent(QPaintEvent *) { + QPainter painter(this); + QColor testPixel(qRgb(200, 150, 100)); + if (pm.isNull()) { // first phase: create a VGImage + painter.beginNativePainting(); + vgimage = vgCreateImage(VG_sARGB_8888_PRE, w, h, VG_IMAGE_QUALITY_FASTER); + QImage img(20, 10, QImage::Format_ARGB32_Premultiplied); + img.fill(qRgb(0, 0, 0)); + QPainter p(&img); + p.fillRect(0, 0, img.width(), img.height(), testPixel); + p.end(); + vgImageSubData(vgimage, img.bits(), img.bytesPerLine(), VG_sARGB_8888_PRE, 0, 0, img.width(), img.height()); + // Now the area 0,0 20x10 (in OpenVG coords) is filled with some color. + painter.endNativePainting(); + } else { // second phase: check if readback works + painter.drawPixmap(0, 0, pm); + // Drawing should not cause readback, this is important for performance; + noreadback_ok = static_cast<FriendlyVGPlatformPixmap *>(pm.handle())->sourceIsNull(); + // However toImage() requires readback. + QImage img = pm.toImage(); + readback_ok = img.width() == pm.width(); + readback_ok &= img.height() == pm.height(); + readback_ok &= !static_cast<FriendlyVGPlatformPixmap *>(pm.handle())->sourceIsNull(); + uint pix = img.pixel(1, 1); + content_ok = qRed(pix) == testPixel.red(); + content_ok &= qGreen(pix) == testPixel.green(); + content_ok &= qBlue(pix) == testPixel.blue(); + pix = img.pixel(img.width() - 1, img.height() - 1); + content_ok &= qRed(pix) == 0; + content_ok &= qGreen(pix) == 0; + content_ok &= qBlue(pix) == 0; + } + } + int w; + int h; + VGImage vgimage; + QPixmap pm; + bool noreadback_ok; + bool readback_ok; + bool content_ok; +}; +void tst_QPixmap::vgImageReadBack() +{ + QPixmap tmp(10, 20); + if (tmp.handle()->classId() == QPlatformPixmap::OpenVGClass) { + Content c; + c.w = 50; + c.h = 60; + c.vgimage = VG_INVALID_HANDLE; + c.noreadback_ok = c.readback_ok = c.content_ok = false; + c.showFullScreen(); + QTest::qWaitForWindowShown(&c); + QVERIFY(c.vgimage != VG_INVALID_HANDLE); + QPixmap pm = pixmapFromVGImage(c.vgimage); + QVERIFY(!pm.isNull()); + QCOMPARE(pm.width(), c.w); + QCOMPARE(pm.height(), c.h); + QVERIFY(qPixmapToVGImage(pm) == c.vgimage); + QVERIFY(static_cast<FriendlyVGPlatformPixmap *>(pm.handle())->sourceIsNull()); + c.pm = pm; + // Make sure the second phase in paintEvent is executed too. + c.hide(); + c.showFullScreen(); + QTest::qWaitForWindowShown(&c); + QVERIFY(c.noreadback_ok); + QVERIFY(c.readback_ok); + QVERIFY(c.content_ok); + } else { + QSKIP("Not using openvg graphicssystem", SkipSingle); + } +} +#endif // Symbian & OpenVG + +void tst_QPixmap::scaled_QTBUG19157() +{ + QPixmap foo(5000, 1); + foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio); + QVERIFY(!foo.isNull()); +} + +QTEST_MAIN(tst_QPixmap) +#include "tst_qpixmap.moc" diff --git a/tests/auto/gui/image/qpixmapcache/.gitignore b/tests/auto/gui/image/qpixmapcache/.gitignore new file mode 100644 index 0000000000..2bc572c2dd --- /dev/null +++ b/tests/auto/gui/image/qpixmapcache/.gitignore @@ -0,0 +1 @@ +tst_qpixmapcache diff --git a/tests/auto/gui/image/qpixmapcache/qpixmapcache.pro b/tests/auto/gui/image/qpixmapcache/qpixmapcache.pro new file mode 100644 index 0000000000..1ffafd6c25 --- /dev/null +++ b/tests/auto/gui/image/qpixmapcache/qpixmapcache.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +QT += gui-private +SOURCES += tst_qpixmapcache.cpp + + + diff --git a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp new file mode 100644 index 0000000000..9f7192dc1c --- /dev/null +++ b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp @@ -0,0 +1,521 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#define Q_TEST_QPIXMAPCACHE + +#include <QtTest/QtTest> + + +#include <qpixmapcache.h> +#include "../../../src/gui/image/qpixmapcache_p.h" + + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QPixmapCache : public QObject +{ + Q_OBJECT + +public: + tst_QPixmapCache(); + virtual ~tst_QPixmapCache(); + + +public slots: + void init(); +private slots: + void cacheLimit(); + void setCacheLimit(); + void find(); + void insert(); + void replace(); + void remove(); + void clear(); + void pixmapKey(); + void noLeak(); +}; + +static QPixmapCache::KeyData* getPrivate(QPixmapCache::Key &key) +{ + return (*reinterpret_cast<QPixmapCache::KeyData**>(&key)); +} + +static QPixmapCache::KeyData** getPrivateRef(QPixmapCache::Key &key) +{ + return (reinterpret_cast<QPixmapCache::KeyData**>(&key)); +} + +static int originalCacheLimit; + +tst_QPixmapCache::tst_QPixmapCache() +{ + originalCacheLimit = QPixmapCache::cacheLimit(); +} + +tst_QPixmapCache::~tst_QPixmapCache() +{ +} + +void tst_QPixmapCache::init() +{ + QPixmapCache::setCacheLimit(originalCacheLimit); + QPixmapCache::clear(); +} + +void tst_QPixmapCache::cacheLimit() +{ + // make sure the default is reasonable; + // it was between 2048 and 10240 last time I looked at it + QVERIFY(originalCacheLimit >= 1024 && originalCacheLimit <= 20480); + + QPixmapCache::setCacheLimit(100); + QCOMPARE(QPixmapCache::cacheLimit(), 100); + + QPixmapCache::setCacheLimit(-50); + QCOMPARE(QPixmapCache::cacheLimit(), -50); +} + +void tst_QPixmapCache::setCacheLimit() +{ + QPixmap *p1 = new QPixmap(2, 3); + QPixmapCache::insert("P1", *p1); + QVERIFY(QPixmapCache::find("P1") != 0); + delete p1; + + QPixmapCache::setCacheLimit(0); + QVERIFY(QPixmapCache::find("P1") == 0); + + p1 = new QPixmap(2, 3); + QPixmapCache::setCacheLimit(1000); + QPixmapCache::insert("P1", *p1); + QVERIFY(QPixmapCache::find("P1") != 0); + + delete p1; + + //The int part of the API + p1 = new QPixmap(2, 3); + QPixmapCache::Key key = QPixmapCache::insert(*p1); + QVERIFY(QPixmapCache::find(key, p1) != 0); + delete p1; + + QPixmapCache::setCacheLimit(0); + QVERIFY(QPixmapCache::find(key, p1) == 0); + + p1 = new QPixmap(2, 3); + QPixmapCache::setCacheLimit(1000); + QPixmapCache::replace(key, *p1); + QVERIFY(QPixmapCache::find(key, p1) == 0); + + delete p1; + + //Let check if keys are released when the pixmap cache is + //full or has been flushed. + QPixmapCache::clear(); + p1 = new QPixmap(2, 3); + key = QPixmapCache::insert(*p1); + QVERIFY(QPixmapCache::find(key, p1) != 0); + p1->detach(); // dectach so that the cache thinks no-one is using it. + QPixmapCache::setCacheLimit(0); + QVERIFY(QPixmapCache::find(key, p1) == 0); + QPixmapCache::setCacheLimit(1000); + key = QPixmapCache::insert(*p1); + QCOMPARE(getPrivate(key)->isValid, true); + QCOMPARE(getPrivate(key)->key, 1); + + delete p1; + + //Let check if removing old entries doesn't let you get + // wrong pixmaps + QPixmapCache::clear(); + QPixmap p2; + p1 = new QPixmap(2, 3); + key = QPixmapCache::insert(*p1); + QVERIFY(QPixmapCache::find(key, &p2) != 0); + //we flush the cache + p1->detach(); + p2.detach(); + QPixmapCache::setCacheLimit(0); + QPixmapCache::setCacheLimit(1000); + QPixmapCache::Key key2 = QPixmapCache::insert(*p1); + QCOMPARE(getPrivate(key2)->key, 1); + QVERIFY(QPixmapCache::find(key, &p2) == 0); + QVERIFY(QPixmapCache::find(key2, &p2) != 0); + QCOMPARE(p2, *p1); + + delete p1; + + //Here we simulate the flushing when the app is idle + QPixmapCache::clear(); + QPixmapCache::setCacheLimit(originalCacheLimit); + p1 = new QPixmap(300, 300); + key = QPixmapCache::insert(*p1); + p1->detach(); + QCOMPARE(getPrivate(key)->key, 1); + key2 = QPixmapCache::insert(*p1); + p1->detach(); + key2 = QPixmapCache::insert(*p1); + p1->detach(); + QPixmapCache::Key key3 = QPixmapCache::insert(*p1); + p1->detach(); + QPixmapCache::flushDetachedPixmaps(); + key2 = QPixmapCache::insert(*p1); + QCOMPARE(getPrivate(key2)->key, 1); + //This old key is not valid anymore after the flush + QCOMPARE(getPrivate(key)->isValid, false); + QVERIFY(QPixmapCache::find(key, &p2) == 0); + delete p1; +} + +void tst_QPixmapCache::find() +{ + QPixmap p1(10, 10); + p1.fill(Qt::red); + QVERIFY(QPixmapCache::insert("P1", p1)); + + QPixmap p2; + QVERIFY(QPixmapCache::find("P1", p2)); + QCOMPARE(p2.width(), 10); + QCOMPARE(p2.height(), 10); + QCOMPARE(p1, p2); + + // obsolete + QPixmap *p3 = QPixmapCache::find("P1"); + QVERIFY(p3); + QCOMPARE(p1, *p3); + + //The int part of the API + QPixmapCache::Key key = QPixmapCache::insert(p1); + + QVERIFY(QPixmapCache::find(key, &p2)); + QCOMPARE(p2.width(), 10); + QCOMPARE(p2.height(), 10); + QCOMPARE(p1, p2); + + QPixmapCache::clear(); + QPixmapCache::setCacheLimit(128); + + QPixmap p4(10,10); + key = QPixmapCache::insert(p4); + p4.detach(); + + QPixmap p5(10,10); + QList<QPixmapCache::Key> keys; + for (int i = 0; i < 4000; ++i) + QPixmapCache::insert(p5); + + //at that time the first key has been erase because no more place in the cache + QVERIFY(QPixmapCache::find(key, &p1) == 0); + QCOMPARE(getPrivate(key)->isValid, false); +} + +void tst_QPixmapCache::insert() +{ + QPixmap p1(10, 10); + p1.fill(Qt::red); + + QPixmap p2(10, 10); + p2.fill(Qt::yellow); + + // Calcuate estimated num of items what fits to cache + int estimatedNum = (1024 * QPixmapCache::cacheLimit()) + / ((p1.width() * p1.height() * p1.depth()) / 8); + + // Mare sure we will put enough items to reach the cache limit + const int numberOfKeys = estimatedNum + 1000; + + // make sure it doesn't explode + for (int i = 0; i < numberOfKeys; ++i) + QPixmapCache::insert("0", p1); + + // ditto + for (int j = 0; j < numberOfKeys; ++j) { + QPixmap p3(10, 10); + QPixmapCache::insert(QString::number(j), p3); + } + + int num = 0; + for (int k = 0; k < numberOfKeys; ++k) { + if (QPixmapCache::find(QString::number(k))) + ++num; + } + + if (QPixmapCache::find("0")) + ++num; + + QVERIFY(num <= estimatedNum); + QPixmap p3; + QPixmapCache::insert("null", p3); + + QPixmap c1(10, 10); + c1.fill(Qt::yellow); + QPixmapCache::insert("custom", c1); + QVERIFY(!c1.isDetached()); + QPixmap c2(10, 10); + c2.fill(Qt::red); + QPixmapCache::insert("custom", c2); + //We have deleted the old pixmap in the cache for the same key + QVERIFY(c1.isDetached()); + + //The int part of the API + // make sure it doesn't explode + QList<QPixmapCache::Key> keys; + for (int i = 0; i < numberOfKeys; ++i) { + QPixmap p3(10,10); + keys.append(QPixmapCache::insert(p3)); + } + + num = 0; + for (int k = 0; k < numberOfKeys; ++k) { + if (QPixmapCache::find(keys.at(k), &p2)) + ++num; + } + + estimatedNum = (1024 * QPixmapCache::cacheLimit()) + / ((p1.width() * p1.height() * p1.depth()) / 8); + QVERIFY(num <= estimatedNum); +} + +void tst_QPixmapCache::replace() +{ + //The int part of the API + QPixmap p1(10, 10); + p1.fill(Qt::red); + + QPixmap p2(10, 10); + p2.fill(Qt::yellow); + + QPixmapCache::Key key = QPixmapCache::insert(p1); + QCOMPARE(getPrivate(key)->isValid, true); + + QPixmap p3; + QVERIFY(QPixmapCache::find(key, &p3) == 1); + + QPixmapCache::replace(key, p2); + + QVERIFY(QPixmapCache::find(key, &p3) == 1); + QCOMPARE(getPrivate(key)->isValid, true); + QCOMPARE(getPrivate(key)->key, 1); + + QCOMPARE(p3.width(), 10); + QCOMPARE(p3.height(), 10); + QCOMPARE(p3, p2); + + //Broken keys + QCOMPARE(QPixmapCache::replace(QPixmapCache::Key(), p2), false); +} + +void tst_QPixmapCache::remove() +{ + QPixmap p1(10, 10); + p1.fill(Qt::red); + + QPixmapCache::insert("red", p1); + p1.fill(Qt::yellow); + + QPixmap p2; + QVERIFY(QPixmapCache::find("red", p2)); + QVERIFY(p1.toImage() != p2.toImage()); + QVERIFY(p1.toImage() == p1.toImage()); // sanity check + + QPixmapCache::remove("red"); + QVERIFY(QPixmapCache::find("red") == 0); + QPixmapCache::remove("red"); + QVERIFY(QPixmapCache::find("red") == 0); + + QPixmapCache::remove("green"); + QVERIFY(QPixmapCache::find("green") == 0); + + //The int part of the API + QPixmapCache::clear(); + p1.fill(Qt::red); + QPixmapCache::Key key = QPixmapCache::insert(p1); + p1.fill(Qt::yellow); + + QVERIFY(QPixmapCache::find(key, &p2)); + QVERIFY(p1.toImage() != p2.toImage()); + QVERIFY(p1.toImage() == p1.toImage()); // sanity check + + QPixmapCache::remove(key); + QVERIFY(QPixmapCache::find(key, &p1) == 0); + + //Broken key + QPixmapCache::remove(QPixmapCache::Key()); + QVERIFY(QPixmapCache::find(QPixmapCache::Key(), &p1) == 0); + + //Test if keys are release + QPixmapCache::clear(); + key = QPixmapCache::insert(p1); + QCOMPARE(getPrivate(key)->key, 1); + QPixmapCache::remove(key); + key = QPixmapCache::insert(p1); + QCOMPARE(getPrivate(key)->key, 1); + + //Test if pixmaps are correctly deleted + QPixmapCache::clear(); + key = QPixmapCache::insert(p1); + QCOMPARE(getPrivate(key)->key, 1); + QVERIFY(QPixmapCache::find(key, &p1) != 0); + QPixmapCache::remove(key); + QCOMPARE(p1.isDetached(), true); + + //We mix both part of the API + QPixmapCache::clear(); + p1.fill(Qt::red); + QPixmapCache::insert("red", p1); + key = QPixmapCache::insert(p1); + QPixmapCache::remove(key); + QVERIFY(QPixmapCache::find(key, &p1) == 0); + QVERIFY(QPixmapCache::find("red") != 0); +} + +void tst_QPixmapCache::clear() +{ + QPixmap p1(10, 10); + p1.fill(Qt::red); + + // Calcuate estimated num of items what fits to cache + int estimatedNum = (1024 * QPixmapCache::cacheLimit()) + / ((p1.width() * p1.height() * p1.depth()) / 8); + + // Mare sure we will put enough items to reach the cache limit + const int numberOfKeys = estimatedNum + 1000; + + for (int i = 0; i < numberOfKeys; ++i) + QVERIFY(QPixmapCache::find("x" + QString::number(i)) == 0); + + for (int j = 0; j < numberOfKeys; ++j) + QPixmapCache::insert(QString::number(j), p1); + + int num = 0; + for (int k = 0; k < numberOfKeys; ++k) { + if (QPixmapCache::find(QString::number(k), p1)) + ++num; + } + QVERIFY(num > 0); + + QPixmapCache::clear(); + + for (int k = 0; k < numberOfKeys; ++k) + QVERIFY(QPixmapCache::find(QString::number(k)) == 0); + + //The int part of the API + QPixmap p2(10, 10); + p2.fill(Qt::red); + + QList<QPixmapCache::Key> keys; + for (int k = 0; k < numberOfKeys; ++k) + keys.append(QPixmapCache::insert(p2)); + + QPixmapCache::clear(); + + for (int k = 0; k < numberOfKeys; ++k) { + QVERIFY(QPixmapCache::find(keys.at(k), &p1) == 0); + QCOMPARE(getPrivate(keys[k])->isValid, false); + } +} + +void tst_QPixmapCache::pixmapKey() +{ + QPixmapCache::Key key; + //Default constructed keys have no d pointer unless + //we use them + QVERIFY(!getPrivate(key)); + //Let's put a d pointer + QPixmapCache::KeyData** keyd = getPrivateRef(key); + *keyd = new QPixmapCache::KeyData; + QCOMPARE(getPrivate(key)->ref, 1); + QPixmapCache::Key key2; + //Let's put a d pointer + QPixmapCache::KeyData** key2d = getPrivateRef(key2); + *key2d = new QPixmapCache::KeyData; + QCOMPARE(getPrivate(key2)->ref, 1); + key = key2; + QCOMPARE(getPrivate(key2)->ref, 2); + QCOMPARE(getPrivate(key)->ref, 2); + QPixmapCache::Key key3; + //Let's put a d pointer + QPixmapCache::KeyData** key3d = getPrivateRef(key3); + *key3d = new QPixmapCache::KeyData; + QPixmapCache::Key key4 = key3; + QCOMPARE(getPrivate(key3)->ref, 2); + QCOMPARE(getPrivate(key4)->ref, 2); + key4 = key; + QCOMPARE(getPrivate(key4)->ref, 3); + QCOMPARE(getPrivate(key3)->ref, 1); + QPixmapCache::Key key5(key3); + QCOMPARE(getPrivate(key3)->ref, 2); + QCOMPARE(getPrivate(key5)->ref, 2); + + //let test default constructed keys + QPixmapCache::Key key6; + QVERIFY(!getPrivate(key6)); + QPixmapCache::Key key7; + QVERIFY(!getPrivate(key7)); + key6 = key7; + QVERIFY(!getPrivate(key6)); + QVERIFY(!getPrivate(key7)); + QPixmapCache::Key key8(key7); + QVERIFY(!getPrivate(key8)); +} + +QT_BEGIN_NAMESPACE +extern int q_QPixmapCache_keyHashSize(); +QT_END_NAMESPACE + +void tst_QPixmapCache::noLeak() +{ + QPixmapCache::Key key; + + int oldSize = q_QPixmapCache_keyHashSize(); + for (int i = 0; i < 100; ++i) { + QPixmap pm(128, 128); + pm.fill(Qt::transparent); + key = QPixmapCache::insert(pm); + QPixmapCache::remove(key); + } + int newSize = q_QPixmapCache_keyHashSize(); + + QCOMPARE(oldSize, newSize); +} + +QTEST_MAIN(tst_QPixmapCache) +#include "tst_qpixmapcache.moc" diff --git a/tests/auto/gui/image/qpixmapfilter/noise.png b/tests/auto/gui/image/qpixmapfilter/noise.png Binary files differnew file mode 100644 index 0000000000..1bebaf528e --- /dev/null +++ b/tests/auto/gui/image/qpixmapfilter/noise.png diff --git a/tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro b/tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro new file mode 100644 index 0000000000..21e10b7ab9 --- /dev/null +++ b/tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro @@ -0,0 +1,13 @@ +load(qttest_p4) + +QT += widgets widgets-private +QT += gui-private + +SOURCES += tst_qpixmapfilter.cpp + +wince*: { + addFiles.files = noise.png + addFiles.path = . + DEPLOYMENT += addFiles +} + diff --git a/tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp new file mode 100644 index 0000000000..5634285ad4 --- /dev/null +++ b/tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp @@ -0,0 +1,450 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <qpixmap.h> +#include <private/qpixmapfilter_p.h> +#include <qpainter.h> + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QPixmapFilter : public QObject +{ + Q_OBJECT + +public: + tst_QPixmapFilter(); + virtual ~tst_QPixmapFilter(); + + +public slots: + void init(); + void cleanup(); + +private slots: + void colorizeSetColor(); + void colorizeSetStrength(); + void colorizeProcess(); + void colorizeDraw(); + void colorizeDrawStrength(); + void colorizeDrawSubRect(); + void colorizeProcessSubRect(); + void convolutionBoundingRectFor(); + void convolutionDrawSubRect(); + void dropShadowBoundingRectFor(); + void blurIndexed8(); + + void testDefaultImplementations(); +}; + +class CustomFilter : public QPixmapFilter +{ +public: + enum { Type = QPixmapFilter::UserFilter + 1 }; + + CustomFilter() : QPixmapFilter((QPixmapFilter::FilterType) Type, 0) { }; + + void draw(QPainter *p, const QPointF &pt, const QPixmap &src, const QRectF &srcRect = QRectF()) const { + p->drawPixmap(QRectF(pt, srcRect.size()), src, srcRect); + } +}; + +tst_QPixmapFilter::tst_QPixmapFilter() +{ +} + +tst_QPixmapFilter::~tst_QPixmapFilter() +{ +} + +void tst_QPixmapFilter::init() +{ +} + +void tst_QPixmapFilter::cleanup() +{ +} + +void tst_QPixmapFilter::testDefaultImplementations() +{ + CustomFilter filter; + QCOMPARE(filter.type(), (QPixmapFilter::FilterType) CustomFilter::Type); + + QCOMPARE(filter.boundingRectFor(QRectF(1, 2, 4, 8)), QRectF(1, 2, 4, 8)); + + QPixmap src(10, 10); + src.fill(Qt::blue); + + QPixmap test(src.size()); + QPainter p(&test); + filter.draw(&p, QPointF(0, 0), src, src.rect()); + p.end(); + + QCOMPARE(test.toImage().pixel(0, 0), 0xff0000ff); +} + +void tst_QPixmapFilter::colorizeSetColor() +{ + QPixmapColorizeFilter filter; + filter.setColor(QColor(50, 100, 200)); + QCOMPARE(filter.color(), QColor(50, 100, 200)); +} + +void tst_QPixmapFilter::colorizeSetStrength() +{ + QPixmapColorizeFilter filter; + QCOMPARE(filter.strength(), qreal(1)); + filter.setStrength(0.5); + QCOMPARE(filter.strength(), qreal(0.5)); + filter.setStrength(0.0); + QCOMPARE(filter.strength(), qreal(0.0)); +} + +void tst_QPixmapFilter::colorizeProcess() +{ + QPixmapColorizeFilter filter; + filter.setColor(QColor(100, 100, 100)); + + QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(0, 0, 50, 50)); + QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(30, 20, 10, 40)); + QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(2.2, 6.3, 11.4, 47.5)); + + QPixmap source("noise.png"); + QImage result(source.size(), QImage::Format_ARGB32_Premultiplied); + result.fill(0); + QPainter p(&result); + filter.draw(&p, QPointF(0, 0), source); + p.end(); + QImage resultImg = result; + for(int y = 0; y < resultImg.height(); y++) + { + for(int x = 0; x < resultImg.width(); x++) + { + QRgb pixel = resultImg.pixel(x,y); + QCOMPARE(qRed(pixel), qGreen(pixel)); + QCOMPARE(qGreen(pixel), qBlue(pixel)); + } + } +} + +void tst_QPixmapFilter::colorizeDraw() +{ + QPixmapColorizeFilter filter; + filter.setColor(QColor(100, 100, 100)); + + QPixmap pixmap("noise.png"); + QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied); + QPainter painter(&result); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.fillRect(result.rect(), QColor(128, 0, 0, 0)); + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + filter.draw(&painter, QPointF(0, 0), pixmap); + painter.end(); + + QImage resultImg = result; + for(int y = 0; y < resultImg.height(); y++) + { + for(int x = 0; x < resultImg.width(); x++) + { + QRgb pixel = resultImg.pixel(x,y); + QCOMPARE(qRed(pixel), qGreen(pixel)); + QCOMPARE(qGreen(pixel), qBlue(pixel)); + } + } +} + +void tst_QPixmapFilter::colorizeDrawStrength() +{ + QPixmapColorizeFilter filter; + filter.setColor(Qt::blue); + filter.setStrength(0.3); + + QImage source(256, 128, QImage::Format_ARGB32); + source.fill(qRgb(255, 0, 0)); + QPixmap pixmap = QPixmap::fromImage(source); + + QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied); + QPainter painter(&result); + painter.setCompositionMode(QPainter::CompositionMode_Source); + filter.draw(&painter, QPointF(0, 0), pixmap); + painter.end(); + + QImage resultImg = result; + for(int y = 0; y < resultImg.height(); y++) + { + for(int x = 0; x < resultImg.width(); x++) + { + QRgb pixel = resultImg.pixel(x,y); + QCOMPARE(qRed(pixel), 206); + QCOMPARE(qGreen(pixel), 26); + QCOMPARE(qBlue(pixel), 75); + } + } +} + +void tst_QPixmapFilter::colorizeDrawSubRect() +{ + QPixmapColorizeFilter filter; + filter.setColor(QColor(255, 255, 255)); + + QPixmap pixmap("noise.png"); + QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied); + QPainter painter(&result); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.fillRect(result.rect(), QColor(128, 0, 0, 255)); + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + filter.draw(&painter, QPointF(16, 16), pixmap, QRectF(16, 16, 16, 16)); + painter.end(); + + QImage resultImg = result; + QImage sourceImg = pixmap.toImage(); + for(int y = 0; y < resultImg.height(); y++) + { + for(int x = 0; x < resultImg.width(); x++) + { + QRgb pixel = resultImg.pixel(x,y); + if(x>=16 && x<32 && y>=16 && y<32) { + QCOMPARE(qRed(pixel), qGreen(pixel)); + QCOMPARE(qGreen(pixel), qBlue(pixel)); + } else { + QCOMPARE(qRed(pixel), 128); + QCOMPARE(qGreen(pixel), 0); + QCOMPARE(qBlue(pixel), 0); + QCOMPARE(qAlpha(pixel), 255); + } + } + } +} + +void tst_QPixmapFilter::colorizeProcessSubRect() +{ + QPixmapColorizeFilter filter; + filter.setColor(QColor(200, 200, 200)); + + QPixmap source("noise.png"); + QImage result(QSize(16, 16), QImage::Format_ARGB32_Premultiplied); + result.fill(0); + QPainter p(&result); + filter.draw(&p, QPointF(0, 0), source, QRectF(16, 16, 16, 16)); + p.end(); + + QImage resultImg = result; + for(int y = 0; y < resultImg.height(); y++) + { + for(int x = 0; x < resultImg.width(); x++) + { + QRgb pixel = resultImg.pixel(x,y); + QCOMPARE(qRed(pixel), qGreen(pixel)); + QCOMPARE(qGreen(pixel), qBlue(pixel)); + } + } +} + +void tst_QPixmapFilter::convolutionBoundingRectFor() +{ + QPixmapConvolutionFilter filter; + QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(0, 0, 50, 50)); + QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(30, 20, 10, 40)); + QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(2.2, 6.3, 11.4, 47.5)); + qreal kernel[] = { + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 + }; + filter.setConvolutionKernel(kernel, 2, 2); + QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(-1, -1, 51, 51)); + QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(29, 19, 11, 41)); + QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(1.2, 5.3, 12.4, 48.5)); + + filter.setConvolutionKernel(kernel, 3, 3); + QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(-1, -1, 52, 52)); + QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(29, 19, 12, 42)); + QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(1.2, 5.3, 13.4, 49.5)); + + filter.setConvolutionKernel(kernel, 4, 4); + QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(-2, -2, 53, 53)); + QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(28, 18, 13, 43)); + QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(0.2, 4.3, 14.4, 50.5)); +} + +void tst_QPixmapFilter::convolutionDrawSubRect() +{ + QPixmapConvolutionFilter filter; + qreal kernel[] = { + 0, 0, 0, + 0, 0, 0, + 0, 0, 1 + }; + filter.setConvolutionKernel(kernel, 3, 3); + + QPixmap pixmap("noise.png"); + QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied); + QPainter painter(&result); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.fillRect(result.rect(), QColor(128, 0, 0, 255)); + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + filter.draw(&painter, QPointF(16, 16), pixmap, QRectF(16, 16, 16, 16)); + painter.end(); + + QImage resultImg = result; + QImage sourceImg = pixmap.toImage(); + for(int y = 0; y < resultImg.height()-1; y++) + { + for(int x = 0; x < resultImg.width()-1; x++) + { + QRgb pixel = resultImg.pixel(x,y); + QRgb srcPixel = sourceImg.pixel(x+1,y+1); + if(x>=15 && x<33 && y>=15 && y<33) { + QCOMPARE(pixel, srcPixel); + } else { + QCOMPARE(qRed(pixel), 128); + QCOMPARE(qGreen(pixel), 0); + QCOMPARE(qBlue(pixel), 0); + QCOMPARE(qAlpha(pixel), 255); + } + } + } + + + kernel[2] = 1; + kernel[8] = 0; + filter.setConvolutionKernel(kernel, 3, 3); + + QPainter painter2(&result); + painter2.setCompositionMode(QPainter::CompositionMode_Source); + painter2.fillRect(result.rect(), QColor(128, 0, 0, 255)); + painter2.setCompositionMode(QPainter::CompositionMode_SourceOver); + filter.draw(&painter2, QPointF(16, 16), pixmap, QRectF(16, 16, 16, 16)); + painter2.end(); + + resultImg = result; + sourceImg = pixmap.toImage(); + for(int y = 1; y < resultImg.height(); y++) + { + for(int x = 0; x < resultImg.width()-1; x++) + { + QRgb pixel = resultImg.pixel(x,y); + QRgb srcPixel = sourceImg.pixel(x+1,y-1); + if(x>=15 && x<33 && y>=15 && y<33) { + QCOMPARE(pixel, srcPixel); + } else { + QCOMPARE(qRed(pixel), 128); + QCOMPARE(qGreen(pixel), 0); + QCOMPARE(qBlue(pixel), 0); + QCOMPARE(qAlpha(pixel), 255); + } + } + } + +} + +void tst_QPixmapFilter::dropShadowBoundingRectFor() +{ + QPixmapDropShadowFilter filter; + filter.setBlurRadius(0); + + QCOMPARE(filter.blurRadius(), 0.); + + const QRectF rect1(0, 0, 50, 50); + const QRectF rect2(30, 20, 10, 40); + const QRectF rect3(2.2, 6.3, 11.4, 47.5); + + filter.setOffset(QPointF(0,0)); + QCOMPARE(filter.boundingRectFor(rect1), rect1); + QCOMPARE(filter.boundingRectFor(rect2), rect2); + QCOMPARE(filter.boundingRectFor(rect3), rect3); + + filter.setOffset(QPointF(1,1)); + QCOMPARE(filter.offset(), QPointF(1, 1)); + QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(0, 0, 1, 1)); + QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(0, 0, 1, 1)); + QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(0, 0, 1, 1)); + + filter.setOffset(QPointF(-1,-1)); + QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-1, -1, 0, 0)); + QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-1, -1, 0, 0)); + QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-1, -1, 0, 0)); + + filter.setBlurRadius(2); + filter.setOffset(QPointF(0,0)); + qreal delta = 2; + QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta, -delta, delta, delta)); + QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta, -delta, delta, delta)); + QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta, -delta, delta, delta)); + + filter.setOffset(QPointF(1,1)); + QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta + 1, -delta + 1, delta + 1, delta + 1)); + QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta + 1, -delta + 1, delta + 1, delta + 1)); + QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta + 1, -delta + 1, delta + 1, delta + 1)); + + filter.setOffset(QPointF(-10,-10)); + QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta - 10, -delta - 10, 0, 0)); + QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta - 10, -delta - 10, 0, 0)); + QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta - 10, -delta - 10, 0, 0)); +} + +QT_BEGIN_NAMESPACE +void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed); +QT_END_NAMESPACE + +void tst_QPixmapFilter::blurIndexed8() +{ + QImage img(16, 32, QImage::Format_Indexed8); + img.setColorCount(256); + for (int i = 0; i < 256; ++i) + img.setColor(i, qRgb(i, i, i)); + + img.fill(255); + + QImage original = img; + qt_blurImage(img, 10, true, false); + QCOMPARE(original.size(), img.size()); + + original = img; + qt_blurImage(img, 10, true, true); + QCOMPARE(original.size(), QSize(img.height(), img.width())); +} + +QTEST_MAIN(tst_QPixmapFilter) +#include "tst_qpixmapfilter.moc" diff --git a/tests/auto/gui/image/qvolatileimage/qvolatileimage.pro b/tests/auto/gui/image/qvolatileimage/qvolatileimage.pro new file mode 100644 index 0000000000..45d80b85f2 --- /dev/null +++ b/tests/auto/gui/image/qvolatileimage/qvolatileimage.pro @@ -0,0 +1,10 @@ +load(qttest_p4) + +QT += gui-private widgets + +SOURCES += tst_qvolatileimage.cpp + +symbian { + TARGET.EPOCHEAPSIZE = 0x200000 0x800000 + LIBS += -lfbscli +} diff --git a/tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp b/tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp new file mode 100644 index 0000000000..bacca66dcd --- /dev/null +++ b/tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp @@ -0,0 +1,403 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <QtGui/qpainter.h> +#include <QtGui/qpaintengine.h> +#include <QtGui/private/qvolatileimage_p.h> +#ifdef Q_OS_SYMBIAN +#include <fbs.h> +#endif + +class tst_QVolatileImage : public QObject +{ + Q_OBJECT + +public: + tst_QVolatileImage() { } + +private slots: + void create(); + void ensureFormat(); + void dataAccess(); + void sharing(); + void paint(); + void fill(); + void copy(); + void bitmap(); +}; + +void tst_QVolatileImage::create() +{ + QVolatileImage nullImg; + QVERIFY(nullImg.isNull()); + + QVolatileImage img(100, 200, QImage::Format_ARGB32); + QVERIFY(!img.isNull()); + QCOMPARE(img.width(), 100); + QCOMPARE(img.height(), 200); + QCOMPARE(img.format(), QImage::Format_ARGB32); + QCOMPARE(img.byteCount(), img.bytesPerLine() * img.height()); + QCOMPARE(img.hasAlphaChannel(), true); + QCOMPARE(img.depth(), 32); + + QImage source(12, 23, QImage::Format_ARGB32_Premultiplied); + img = QVolatileImage(source); + QVERIFY(!img.isNull()); + QCOMPARE(img.width(), 12); + QCOMPARE(img.height(), 23); + QCOMPARE(img.format(), source.format()); + QCOMPARE(img.byteCount(), img.bytesPerLine() * img.height()); + QVERIFY(img.imageRef() == source); + QVERIFY(img.toImage() == source); + QCOMPARE(img.hasAlphaChannel(), true); + QCOMPARE(img.hasAlphaChannel(), img.imageRef().hasAlphaChannel()); + QCOMPARE(img.hasAlphaChannel(), img.toImage().hasAlphaChannel()); + QCOMPARE(img.depth(), 32); + +#ifdef Q_OS_SYMBIAN + CFbsBitmap *bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(100, 50), EColor16MAP) == KErrNone); + QVolatileImage bmpimg(bmp); + QVERIFY(!bmpimg.isNull()); + QCOMPARE(bmpimg.width(), 100); + QCOMPARE(bmpimg.height(), 50); + // Verify that we only did handle duplication, not pixel data copying. + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + delete bmp; + // Check if content is still valid. + QImage copyimg = bmpimg.toImage(); + QCOMPARE(copyimg.format(), QImage::Format_ARGB32_Premultiplied); +#endif +} + +void tst_QVolatileImage::ensureFormat() +{ + QImage source(12, 23, QImage::Format_ARGB32_Premultiplied); + QVolatileImage img(source); + QVERIFY(!img.isNull()); + QVERIFY(img.imageRef() == source); + QVERIFY(img.toImage() == source); + + QVERIFY(img.ensureFormat(QImage::Format_ARGB32_Premultiplied)); // no-op + QVERIFY(img.imageRef() == source); + QVERIFY(img.toImage() == source); + QVERIFY(img.format() == QImage::Format_ARGB32_Premultiplied); + + QVERIFY(img.ensureFormat(QImage::Format_RGB32)); // new data under-the-hood + QVERIFY(img.imageRef() != source); + QVERIFY(img.toImage() != source); + QVERIFY(img.format() == QImage::Format_RGB32); + +#ifdef Q_OS_SYMBIAN + CFbsBitmap *bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(100, 50), EColor16MAP) == KErrNone); + QVolatileImage bmpimg(bmp); + QVERIFY(bmpimg.ensureFormat(QImage::Format_ARGB32_Premultiplied)); // no-op + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + + // A different format should cause data copying. + QVERIFY(bmpimg.ensureFormat(QImage::Format_RGB32)); + QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress()); + const uchar *prevBits = bmpimg.constBits(); + + QVERIFY(bmpimg.ensureFormat(QImage::Format_RGB16)); + QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress()); + QVERIFY(bmpimg.constBits() != prevBits); + prevBits = bmpimg.constBits(); + + QVERIFY(bmpimg.ensureFormat(QImage::Format_MonoLSB)); + QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress()); + QVERIFY(bmpimg.constBits() != prevBits); + + delete bmp; +#endif +} + +void tst_QVolatileImage::dataAccess() +{ + QImage source(12, 23, QImage::Format_ARGB32_Premultiplied); + QVolatileImage img(source); + QVERIFY(!img.isNull()); + img.beginDataAccess(); + QVERIFY(img.constBits()); + QVERIFY(img.imageRef().constBits()); + QVERIFY(img.bits()); + QVERIFY(img.imageRef().bits()); + img.endDataAccess(); + + img = QVolatileImage(12, 23, QImage::Format_ARGB32); + img.beginDataAccess(); + QVERIFY(img.constBits() && img.bits()); + img.endDataAccess(); +} + +void tst_QVolatileImage::sharing() +{ + QVolatileImage img1(100, 100, QImage::Format_ARGB32); + QVolatileImage img2 = img1; + img1.beginDataAccess(); + img2.beginDataAccess(); + QVERIFY(img1.constBits() == img2.constBits()); + img2.endDataAccess(); + img1.endDataAccess(); + img1.imageRef(); // non-const call, should detach + img1.beginDataAccess(); + img2.beginDataAccess(); + QVERIFY(img1.constBits() != img2.constBits()); + img2.endDataAccess(); + img1.endDataAccess(); + + // toImage() should return a copy of the internal QImage. + // imageRef() is a reference to the internal QImage. + QVERIFY(img1.imageRef().constBits() != img1.toImage().constBits()); + +#ifdef Q_OS_SYMBIAN + CFbsBitmap *bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(100, 50), EColor16MAP) == KErrNone); + QVolatileImage bmpimg(bmp); + QVolatileImage bmpimg2; + bmpimg2 = bmpimg; + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + QCOMPARE(bmpimg2.constBits(), (const uchar *) bmp->DataAddress()); + // Now force a detach, which should copy the pixel data under-the-hood. + bmpimg.imageRef(); + QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress()); + QCOMPARE(bmpimg2.constBits(), (const uchar *) bmp->DataAddress()); + delete bmp; +#endif +} + +bool fuzzyCompareImages(const QImage &image1, const QImage &image2, int tolerance) +{ + if (image1.bytesPerLine() != image2.bytesPerLine() + || image1.width() != image2.width() + || image1.height() != image2.height()) { + return false; + } + for (int i = 0; i < image1.height(); i++) { + const uchar *line1 = image1.scanLine(i); + const uchar *line2 = image2.scanLine(i); + int bytes = image1.bytesPerLine(); + for (int j = 0; j < bytes; j++) { + int delta = line1[j] - line2[j]; + if (qAbs(delta) > tolerance) + return false; + } + } + return true; +} + +void tst_QVolatileImage::paint() +{ +#ifdef Q_OS_SYMBIAN + QVolatileImage img(100, 100, QImage::Format_ARGB32); + img.beginDataAccess(); + img.imageRef().fill(QColor(Qt::green).rgba()); + QPainter p(&img.imageRef()); + p.drawRect(10, 10, 50, 50); + p.end(); + img.endDataAccess(); + QImage imgA = img.toImage(); + + // The following assumes that on openvg the pixmapdata is backed by QVolatileImage) + // (and that openvg is in use) + // It should pass with any engine nonetheless. + // See if painting into the underlying QImage succeeds. + QPixmap pm(100, 100); + if (pm.paintEngine()->type() == QPaintEngine::Raster) { + pm.fill(Qt::green); + QPainter pmp(&pm); + pmp.drawRect(10, 10, 50, 50); + pmp.end(); + QImage imgB = pm.toImage(); + QVERIFY(fuzzyCompareImages(imgA, imgB, 0)); + // Exercise the accelerated QVolatileImagePaintEngine::drawPixmap() a bit. + QPixmap targetPm(pm.size()); + targetPm.fill(Qt::black); + pmp.begin(&targetPm); + pmp.drawPixmap(QPointF(0, 0), pm); + pmp.end(); + imgB = targetPm.toImage(); + QVERIFY(fuzzyCompareImages(imgA, imgB, 0)); + // Now the overload taking rects. + targetPm.fill(Qt::black); + pmp.begin(&targetPm); + QRectF rect(QPointF(0, 0), pm.size()); + pmp.drawPixmap(rect, pm, rect); + pmp.end(); + imgB = targetPm.toImage(); + QVERIFY(fuzzyCompareImages(imgA, imgB, 0)); + } else { + QSKIP("Pixmaps not painted via raster, skipping paint test", SkipSingle); + } +#endif +} + +void tst_QVolatileImage::fill() +{ + QVolatileImage img(100, 100, QImage::Format_ARGB32_Premultiplied); + QColor col = QColor(10, 20, 30); + img.fill(col.rgba()); + QVERIFY(img.imageRef().pixel(1, 1) == col.rgba()); + QVERIFY(img.toImage().pixel(1, 1) == col.rgba()); + +#ifdef Q_OS_SYMBIAN + CFbsBitmap *bmp = static_cast<CFbsBitmap *>(img.duplicateNativeImage()); + QVERIFY(bmp); + TRgb pix; + bmp->GetPixel(pix, TPoint(1, 1)); + QCOMPARE(pix.Red(), col.red()); + QCOMPARE(pix.Green(), col.green()); + QCOMPARE(pix.Blue(), col.blue()); + delete bmp; +#endif +} + +void tst_QVolatileImage::copy() +{ + QVolatileImage img(100, 100, QImage::Format_RGB32); + img.beginDataAccess(); + img.imageRef().fill(QColor(Qt::green).rgba()); + QPainter p(&img.imageRef()); + p.drawRect(10, 10, 50, 50); + p.end(); + img.endDataAccess(); + + QVolatileImage img2(100, 100, QImage::Format_RGB32); + img2.copyFrom(&img, QRect()); + QImage imgA = img.toImage(); + QImage imgB = img2.toImage(); + QCOMPARE(imgA.size(), imgB.size()); + QVERIFY(fuzzyCompareImages(imgA, imgB, 0)); + + img2 = QVolatileImage(20, 20, QImage::Format_RGB32); + img2.copyFrom(&img, QRect(5, 5, 20, 20)); + imgA = img.toImage().copy(5, 5, 20, 20); + imgB = img2.toImage(); + QCOMPARE(imgA.size(), imgB.size()); + QVERIFY(fuzzyCompareImages(imgA, imgB, 0)); +} + +void tst_QVolatileImage::bitmap() +{ +#ifdef Q_OS_SYMBIAN + CFbsBitmap *bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(100, 50), EColor64K) == KErrNone); + QVolatileImage bmpimg(bmp); + CFbsBitmap *dupbmp = static_cast<CFbsBitmap *>(bmpimg.duplicateNativeImage()); + QVERIFY(dupbmp); + QVERIFY(dupbmp != bmp); + QCOMPARE(dupbmp->DataAddress(), bmp->DataAddress()); + delete dupbmp; + delete bmp; + bmpimg.beginDataAccess(); + qMemSet(bmpimg.bits(), 0, bmpimg.byteCount()); + qMemSet(bmpimg.bits(), 1, bmpimg.bytesPerLine() * bmpimg.height()); + bmpimg.endDataAccess(); + + // Test bgr->rgb conversion in case of EColor16M. + bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(101, 89), EColor16M) == KErrNone); + bmp->BeginDataAccess(); + TUint32 *addr = bmp->DataAddress(); + uint rgb = QColor(10, 20, 30).rgb(); + qMemCopy(bmp->DataAddress(), &rgb, 3); + bmp->EndDataAccess(); + TRgb symrgb; + bmp->GetPixel(symrgb, TPoint(0, 0)); + QVERIFY(symrgb.Red() == 10 && symrgb.Green() == 20 && symrgb.Blue() == 30); + bmpimg = QVolatileImage(bmp); + QVERIFY(bmpimg.toImage().pixel(0, 0) == rgb); + // check if there really was a conversion + bmp->BeginDataAccess(); + bmpimg.beginDataAccess(); + qMemCopy(&rgb, bmpimg.constBits(), 3); + uint rgb2 = rgb; + qMemCopy(&rgb2, bmp->DataAddress(), 3); + QVERIFY(rgb != rgb2); + bmpimg.endDataAccess(true); + bmp->EndDataAccess(true); + delete bmp; + + bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(101, 89), EGray2) == KErrNone); + bmpimg = QVolatileImage(bmp); // inverts pixels, but should do it in place + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + QCOMPARE(bmpimg.format(), QImage::Format_MonoLSB); + bmpimg.ensureFormat(QImage::Format_ARGB32_Premultiplied); + QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress()); + QCOMPARE(bmpimg.format(), QImage::Format_ARGB32_Premultiplied); + delete bmp; + + // The following two formats must be optimal always. + bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(101, 89), EColor16MAP) == KErrNone); + bmpimg = QVolatileImage(bmp); + QCOMPARE(bmpimg.format(), QImage::Format_ARGB32_Premultiplied); + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + bmpimg.ensureFormat(QImage::Format_ARGB32_Premultiplied); + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + delete bmp; + bmp = new CFbsBitmap; + QVERIFY(bmp->Create(TSize(101, 89), EColor16MU) == KErrNone); + bmpimg = QVolatileImage(bmp); + QCOMPARE(bmpimg.format(), QImage::Format_RGB32); + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + bmpimg.ensureFormat(QImage::Format_RGB32); + QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress()); + delete bmp; + +#else + QSKIP("CFbsBitmap is only available on Symbian, skipping bitmap test", SkipSingle); +#endif +} + +int main(int argc, char *argv[]) +{ + QApplication::setGraphicsSystem("openvg"); + QApplication app(argc, argv); + tst_QVolatileImage tc; + return QTest::qExec(&tc, argc, argv); +} + +#include "tst_qvolatileimage.moc" |