From 34dda314cbb920ab85ce908c5f326d9a1491d070 Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Thu, 6 Nov 2014 13:56:23 +0100 Subject: Add b2qt-flashing-wizard Change-Id: I2aec410a9c27b3d1f8df88b983e55cd3d890bdf2 Reviewed-by: Rainer Keller --- src/b2qt-flashing-wizard/.gitignore | 5 + src/b2qt-flashing-wizard/B2Qt_QtC_icon@2x.png | Bin 0 -> 2739 bytes src/b2qt-flashing-wizard/README | 24 + src/b2qt-flashing-wizard/actor.cpp | 29 + src/b2qt-flashing-wizard/actor.h | 41 + src/b2qt-flashing-wizard/b2qt-flashing-wizard.pro | 33 + src/b2qt-flashing-wizard/b2qt-flashing-wizard.qrc | 18 + src/b2qt-flashing-wizard/background.png | Bin 0 -> 92958 bytes src/b2qt-flashing-wizard/commit_page.cpp | 171 + src/b2qt-flashing-wizard/commit_page.h | 47 + src/b2qt-flashing-wizard/common.cpp | 78 + src/b2qt-flashing-wizard/common.h | 21 + .../data/apalis-imx6-eLinux.progress | 7065 ++++++++++ .../data/beaglebone-4.2-eAndroid.progress | 35 + .../data/beaglebone-eLinux.progress | 7836 +++++++++++ .../data/iMX6-4.2-eAndroid.progress | 73 + src/b2qt-flashing-wizard/data/iMX6-eLinux.progress | 7383 +++++++++++ .../data/imx6qsabresd-eLinux.progress | 7298 ++++++++++ .../data/nexus7-4.4-eAndroid-adb.progress | 719 + .../data/nexus7-4.4-eAndroid-fastboot.progress | 719 + .../data/nexus7v2-4.4-eAndroid-adb.progress | 719 + .../data/nexus7v2-4.4-eAndroid-fastboot.progress | 719 + .../data/raspberrypi-eLinux.progress | 13218 +++++++++++++++++++ src/b2qt-flashing-wizard/device_page.cpp | 269 + src/b2qt-flashing-wizard/device_page.h | 63 + src/b2qt-flashing-wizard/disk_page.cpp | 246 + src/b2qt-flashing-wizard/disk_page.h | 68 + src/b2qt-flashing-wizard/elevator.cpp | 48 + src/b2qt-flashing-wizard/elevator.h | 22 + src/b2qt-flashing-wizard/finish_page.cpp | 33 + src/b2qt-flashing-wizard/finish_page.h | 34 + src/b2qt-flashing-wizard/introduction_page.cpp | 33 + src/b2qt-flashing-wizard/introduction_page.h | 35 + src/b2qt-flashing-wizard/logo.png | Bin 0 -> 2589 bytes src/b2qt-flashing-wizard/main.cpp | 38 + src/b2qt-flashing-wizard/mainwindow.cpp | 64 + src/b2qt-flashing-wizard/mainwindow.h | 35 + src/b2qt-flashing-wizard/platform_page.cpp | 180 + src/b2qt-flashing-wizard/platform_page.h | 52 + src/b2qt-flashing-wizard/progress_page.cpp | 120 + src/b2qt-flashing-wizard/progress_page.h | 55 + src/b2qt-flashing-wizard/progressor/main.cpp | 96 + src/b2qt-flashing-wizard/progressor/progressor.pro | 3 + src/b2qt-flashing-wizard/scriptwriter.cpp | 228 + src/b2qt-flashing-wizard/scriptwriter.h | 56 + src/b2qt-flashing-wizard/watermark.png | Bin 0 -> 79148 bytes 46 files changed, 48029 insertions(+) create mode 100644 src/b2qt-flashing-wizard/.gitignore create mode 100644 src/b2qt-flashing-wizard/B2Qt_QtC_icon@2x.png create mode 100644 src/b2qt-flashing-wizard/README create mode 100644 src/b2qt-flashing-wizard/actor.cpp create mode 100644 src/b2qt-flashing-wizard/actor.h create mode 100644 src/b2qt-flashing-wizard/b2qt-flashing-wizard.pro create mode 100644 src/b2qt-flashing-wizard/b2qt-flashing-wizard.qrc create mode 100644 src/b2qt-flashing-wizard/background.png create mode 100644 src/b2qt-flashing-wizard/commit_page.cpp create mode 100644 src/b2qt-flashing-wizard/commit_page.h create mode 100644 src/b2qt-flashing-wizard/common.cpp create mode 100644 src/b2qt-flashing-wizard/common.h create mode 100644 src/b2qt-flashing-wizard/data/apalis-imx6-eLinux.progress create mode 100644 src/b2qt-flashing-wizard/data/beaglebone-4.2-eAndroid.progress create mode 100644 src/b2qt-flashing-wizard/data/beaglebone-eLinux.progress create mode 100644 src/b2qt-flashing-wizard/data/iMX6-4.2-eAndroid.progress create mode 100644 src/b2qt-flashing-wizard/data/iMX6-eLinux.progress create mode 100644 src/b2qt-flashing-wizard/data/imx6qsabresd-eLinux.progress create mode 100644 src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-adb.progress create mode 100644 src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-fastboot.progress create mode 100644 src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-adb.progress create mode 100644 src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-fastboot.progress create mode 100644 src/b2qt-flashing-wizard/data/raspberrypi-eLinux.progress create mode 100644 src/b2qt-flashing-wizard/device_page.cpp create mode 100644 src/b2qt-flashing-wizard/device_page.h create mode 100644 src/b2qt-flashing-wizard/disk_page.cpp create mode 100644 src/b2qt-flashing-wizard/disk_page.h create mode 100644 src/b2qt-flashing-wizard/elevator.cpp create mode 100644 src/b2qt-flashing-wizard/elevator.h create mode 100644 src/b2qt-flashing-wizard/finish_page.cpp create mode 100644 src/b2qt-flashing-wizard/finish_page.h create mode 100644 src/b2qt-flashing-wizard/introduction_page.cpp create mode 100644 src/b2qt-flashing-wizard/introduction_page.h create mode 100644 src/b2qt-flashing-wizard/logo.png create mode 100644 src/b2qt-flashing-wizard/main.cpp create mode 100644 src/b2qt-flashing-wizard/mainwindow.cpp create mode 100644 src/b2qt-flashing-wizard/mainwindow.h create mode 100644 src/b2qt-flashing-wizard/platform_page.cpp create mode 100644 src/b2qt-flashing-wizard/platform_page.h create mode 100644 src/b2qt-flashing-wizard/progress_page.cpp create mode 100644 src/b2qt-flashing-wizard/progress_page.h create mode 100644 src/b2qt-flashing-wizard/progressor/main.cpp create mode 100644 src/b2qt-flashing-wizard/progressor/progressor.pro create mode 100644 src/b2qt-flashing-wizard/scriptwriter.cpp create mode 100644 src/b2qt-flashing-wizard/scriptwriter.h create mode 100644 src/b2qt-flashing-wizard/watermark.png diff --git a/src/b2qt-flashing-wizard/.gitignore b/src/b2qt-flashing-wizard/.gitignore new file mode 100644 index 0000000..9f9ec21 --- /dev/null +++ b/src/b2qt-flashing-wizard/.gitignore @@ -0,0 +1,5 @@ +*.o +Makefile +b2qt-wand +qrc_*.cpp +moc_*.cpp diff --git a/src/b2qt-flashing-wizard/B2Qt_QtC_icon@2x.png b/src/b2qt-flashing-wizard/B2Qt_QtC_icon@2x.png new file mode 100644 index 0000000..d407a1f Binary files /dev/null and b/src/b2qt-flashing-wizard/B2Qt_QtC_icon@2x.png differ diff --git a/src/b2qt-flashing-wizard/README b/src/b2qt-flashing-wizard/README new file mode 100644 index 0000000..a04bc96 --- /dev/null +++ b/src/b2qt-flashing-wizard/README @@ -0,0 +1,24 @@ +If you want to use this tool outside of the SDK installation directory +you have to set SDKDIR environment variable. + +How to get root permission: + +sudo -A /bin/askpass-tool + +Sudo will ask when starting scripts + +sudo -E ./b2qt-flashing-wizard + +-E is needed to keep the X vars + +Variables needed: + +#!/bin/bash +export HOME=/home/rkeller +export XDG_SESSION_COOKIE=0dbc1b47e88f5cfa62c5818b00000237-1381472004.761811-1314725543 +./b2qt-flashing-wizard + +GUI stuff: + +kdesu +gsu diff --git a/src/b2qt-flashing-wizard/actor.cpp b/src/b2qt-flashing-wizard/actor.cpp new file mode 100644 index 0000000..1cd76bf --- /dev/null +++ b/src/b2qt-flashing-wizard/actor.cpp @@ -0,0 +1,29 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "actor.h" + +Actor::Actor(QObject *parent) + : QObject(parent) +{ +} + +Actor::~Actor() +{ +} diff --git a/src/b2qt-flashing-wizard/actor.h b/src/b2qt-flashing-wizard/actor.h new file mode 100644 index 0000000..e21ca7e --- /dev/null +++ b/src/b2qt-flashing-wizard/actor.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef ACTOR_H +#define ACTOR_H + +#include + +class Actor : public QObject +{ + Q_OBJECT + +public: + Actor(QObject *parent); + virtual ~Actor(); + virtual bool ready(QString &) const = 0; + virtual void start() = 0; + +signals: + void progress(unsigned int percent, unsigned int nextProgress, unsigned int milliseconds); + void finished(); + void details(const QByteArray &); +}; + +#endif // ACTOR_H diff --git a/src/b2qt-flashing-wizard/b2qt-flashing-wizard.pro b/src/b2qt-flashing-wizard/b2qt-flashing-wizard.pro new file mode 100644 index 0000000..9efff8f --- /dev/null +++ b/src/b2qt-flashing-wizard/b2qt-flashing-wizard.pro @@ -0,0 +1,33 @@ +QT += widgets +CONFIG += c++11 + +SOURCES += \ + actor.cpp \ + commit_page.cpp \ + common.cpp \ + device_page.cpp \ + disk_page.cpp \ + elevator.cpp \ + finish_page.cpp \ + introduction_page.cpp \ + main.cpp \ + mainwindow.cpp \ + platform_page.cpp \ + progress_page.cpp \ + scriptwriter.cpp \ + +HEADERS += \ + actor.h \ + commit_page.h \ + common.h \ + device_page.h \ + disk_page.h \ + elevator.h \ + finish_page.h \ + introduction_page.h \ + mainwindow.h \ + platform_page.h \ + progress_page.h \ + scriptwriter.h \ + +RESOURCES += b2qt-flashing-wizard.qrc diff --git a/src/b2qt-flashing-wizard/b2qt-flashing-wizard.qrc b/src/b2qt-flashing-wizard/b2qt-flashing-wizard.qrc new file mode 100644 index 0000000..dceb227 --- /dev/null +++ b/src/b2qt-flashing-wizard/b2qt-flashing-wizard.qrc @@ -0,0 +1,18 @@ + + + logo.png + background.png + watermark.png + data/apalis-imx6-eLinux.progress + data/beaglebone-4.2-eAndroid.progress + data/beaglebone-eLinux.progress + data/iMX6-4.2-eAndroid.progress + data/iMX6-eLinux.progress + data/imx6qsabresd-eLinux.progress + data/nexus7-4.4-eAndroid-adb.progress + data/nexus7-4.4-eAndroid-fastboot.progress + data/nexus7v2-4.4-eAndroid-adb.progress + data/nexus7v2-4.4-eAndroid-fastboot.progress + data/raspberrypi-eLinux.progress + + diff --git a/src/b2qt-flashing-wizard/background.png b/src/b2qt-flashing-wizard/background.png new file mode 100644 index 0000000..330b301 Binary files /dev/null and b/src/b2qt-flashing-wizard/background.png differ diff --git a/src/b2qt-flashing-wizard/commit_page.cpp b/src/b2qt-flashing-wizard/commit_page.cpp new file mode 100644 index 0000000..f152262 --- /dev/null +++ b/src/b2qt-flashing-wizard/commit_page.cpp @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "commit_page.h" +#include "scriptwriter.h" +#include "progress_page.h" +#include "mainwindow.h" +#include +#include +#include + +extern QString G_platform; +extern QString G_version; +extern QString G_os; +extern QString G_device; +extern QString G_board; +extern QString G_SDKDIR; +extern QString G_mode; +QLabel *createErrorLabel(QWidget *parent); + +CommitPage::CommitPage(QWidget *parent) + : QWizardPage(parent) + , mText(new QLabel(this)) + , mActor(0) + , mError(createErrorLabel(this)) + , mLayout(new QVBoxLayout(this)) + , mComplete(false) +{ + setButtonText(QWizard::CommitButton, "Write"); + setCommitPage(true); + setTitle("Confirm action"); + setSubTitle("Confirm the action to be done"); + mLayout->addWidget(mText); + mLayout->addSpacerItem(new QSpacerItem(40,40,QSizePolicy::Minimum, QSizePolicy::Expanding)); + mLayout->addWidget(mError); + setLayout(mLayout); +} + +CommitPage::~CommitPage() +{ +} + +bool CommitPage::isComplete() const +{ + if (!mComplete) + return false; + + QString error; + bool result = mActor->ready(error); + if (result) + mError->clear(); + else + mError->setText(error); + + return result; +} + +void CommitPage::initializePage() +{ + qDebug() << "platform:" << G_platform << "version:" << G_version << "os:" << G_os + << "device:" << G_device << "board:" << G_board << "mode:" << G_mode; + QString text("Write %1-%2 (%3) to device %4."); + mText->setText(text.arg(G_platform, G_os, G_version, G_device)); + mComplete = true; + + qDebug() << "os:" << G_os << "platform:" << G_platform << "device:" << G_device; + + if (G_platform == "generic-4.2" && G_os == "eAndroid" && G_board == "iMX6") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/" + G_board + "/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/iMX6-4.2-eAndroid.progress"); + mActor = i; + } else if (G_platform == "iMX6" && G_os == "eLinux") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/iMX6-eLinux.progress"); + mActor = i; + } else if (G_platform == "beaglebone" && G_os == "eLinux") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setProgressFile("/tmp/foo"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/beaglebone-eLinux.progress"); + mActor = i; + } else if (G_platform == "generic-4.4" && G_os == "eAndroid" && G_board == "beaglebone") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/" + G_board + "/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/beaglebone-4.2-eAndroid.progress"); + mActor = i; + } else if (G_platform == "generic-4.4" && G_os == "eAndroid" && G_board == "nexus7v2") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/" + G_board + "/deploy.sh"); + if (G_mode == "fastboot") { + i->setProgressFile(":data/nexus7v2-4.4-eAndroid-fastboot.progress"); + i->setAdditionalArgs(QStringList() << "-fastboot"); + } else + i->setProgressFile(":data/nexus7v2-4.4-eAndroid-adb.progress"); + mActor = i; + } else if (G_platform == "generic-4.4" && G_os == "eAndroid" && G_board == "nexus7") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/" + G_board + "/deploy.sh"); + if (G_mode == "fastboot") { + i->setAdditionalArgs(QStringList() << "-fastboot"); + i->setProgressFile(":data/nexus7-4.4-eAndroid-fastboot.progress"); + } else + i->setProgressFile(":data/nexus7-4.4-eAndroid-adb.progress"); + mActor = i; + } else if (G_platform == "generic-4.2" && G_os == "eAndroid" && G_board == "nexus7") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/" + G_board + "/deploy.sh"); + if (G_mode == "fastboot") + i->setAdditionalArgs(QStringList() << "-fastboot"); + mActor = i; + } else if (G_platform == "raspberrypi" && G_os == "eLinux") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/raspberrypi-eLinux.progress"); + mActor = i; + } else if (G_platform == "imx6qsabresd" && G_os == "eLinux") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/imx6qsabresd-eLinux.progress"); + mActor = i; + } else if (G_platform == "apalis-imx6" && G_os == "eLinux") { + ScriptWriter *i = new ScriptWriter(this); + i->setScriptFile(G_SDKDIR + G_version + "/" + G_platform + "-" + G_os + "/images/deploy.sh"); + i->setAdditionalArgs(QStringList() << G_device << "--verbose"); + i->setEnvironment("VERBOSE","1"); + i->setProgressFile(":data/apalis-imx6-eLinux.progress"); + mActor = i; + } else { + mError->setText("Unsupported platform combination"); + mComplete = false; + } +} + +bool CommitPage::validatePage() +{ + ProgressPage *p = qobject_cast(wizard()->page(MainWindow::Page_Progress)); + Q_ASSERT(p); + + p->setActor(mActor); + return true; +} diff --git a/src/b2qt-flashing-wizard/commit_page.h b/src/b2qt-flashing-wizard/commit_page.h new file mode 100644 index 0000000..e934152 --- /dev/null +++ b/src/b2qt-flashing-wizard/commit_page.h @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef COMMIT_PAGE_H +#define COMMIT_PAGE_H + +#include +class QLabel; +class Actor; +class QLabel; +class QVBoxLayout; + +class CommitPage : public QWizardPage +{ + Q_OBJECT +public: + CommitPage(QWidget *parent = 0); + virtual ~CommitPage(); + void initializePage(); + bool validatePage(); + bool isComplete() const; + +private: + QLabel *mText; + Actor *mActor; + QLabel *mError; + QVBoxLayout *mLayout; + bool mComplete; +}; + +#endif // COMMIT_PAGE_H diff --git a/src/b2qt-flashing-wizard/common.cpp b/src/b2qt-flashing-wizard/common.cpp new file mode 100644 index 0000000..bd95a3c --- /dev/null +++ b/src/b2qt-flashing-wizard/common.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include +#include +#include +#include + +QByteArray readAll(const QString &fileName) +{ + QByteArray rc; + QFile file(fileName); + if (!file.open(QFile::ReadOnly)) { + qWarning() << "Could not open file:" << fileName; + return rc; + } + + rc = file.readAll(); + file.close(); + return rc; +} + + +static QList > getMounts() +{ + QList > rc; + + QByteArray ba = readAll("/proc/mounts"); + foreach (const QString &line, ba.split('\n')) { + if (line.isEmpty()) + continue; + + QStringList token = line.split(' '); + if (token.size() < 2) { + qWarning() << "Error parsing mounts:" << line; + continue; + } + rc.append(qMakePair(token[0], token[1])); + } + return rc; +} + +bool checkForDeviceMounted(const QString &device, QString &mountPoint, QString &partition) +{ + QList > mounts = getMounts(); + if (mounts.isEmpty()) { + qWarning() << "No mounts found"; + return false; + } + + foreach (const auto &item, mounts) { + if (item.first.startsWith(device)) { + mountPoint = item.second; + partition = item.first; + return true; + } + } + mountPoint.clear(); + partition.clear(); + return false; +} + diff --git a/src/b2qt-flashing-wizard/common.h b/src/b2qt-flashing-wizard/common.h new file mode 100644 index 0000000..1884532 --- /dev/null +++ b/src/b2qt-flashing-wizard/common.h @@ -0,0 +1,21 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +QByteArray readAll(const QString &fileName); +bool checkForDeviceMounted(const QString &device, QString &mountPoint, QString &partition); diff --git a/src/b2qt-flashing-wizard/data/apalis-imx6-eLinux.progress b/src/b2qt-flashing-wizard/data/apalis-imx6-eLinux.progress new file mode 100644 index 0000000..a0a81ba --- /dev/null +++ b/src/b2qt-flashing-wizard/data/apalis-imx6-eLinux.progress @@ -0,0 +1,7065 @@ +-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 +-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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +15 +15 +-15 +-15 +-15 +-15 +15 +-15 +-15 +-15 +-15 +-15 +15 +15 +15 +-15 +-15 +-16 +-16 +16 +16 +16 +-16 +-16 +16 +-16 +-16 +-16 +-16 +-16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +-17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +-18 +-99 +-99 +99 +-204336 diff --git a/src/b2qt-flashing-wizard/data/beaglebone-4.2-eAndroid.progress b/src/b2qt-flashing-wizard/data/beaglebone-4.2-eAndroid.progress new file mode 100644 index 0000000..da08ff2 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/beaglebone-4.2-eAndroid.progress @@ -0,0 +1,35 @@ +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +0 +-0 +0 +-0 +-6 +-6 +-6 +-56 +-56 +57 +-57 +57 +-57 +-62 +-94 +-95 +96 +-96 +96 +-96 +-96 +-99 +-100 +100 +-40425 diff --git a/src/b2qt-flashing-wizard/data/beaglebone-eLinux.progress b/src/b2qt-flashing-wizard/data/beaglebone-eLinux.progress new file mode 100644 index 0000000..935d374 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/beaglebone-eLinux.progress @@ -0,0 +1,7836 @@ +-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 +-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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +15 +15 +-15 +-15 +-15 +-15 +15 +-15 +-15 +-15 +-15 +-15 +15 +15 +15 +15 +-15 +-15 +-16 +-16 +-16 +16 +-16 +-16 +-16 +-16 +-16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +-17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +-18 +-99 +-99 +99 +-205170 diff --git a/src/b2qt-flashing-wizard/data/iMX6-4.2-eAndroid.progress b/src/b2qt-flashing-wizard/data/iMX6-4.2-eAndroid.progress new file mode 100644 index 0000000..b6f6af4 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/iMX6-4.2-eAndroid.progress @@ -0,0 +1,73 @@ +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +0 +-0 +0 +-0 +1 +1 +-1 +-1 +1 +9 +9 +9 +-9 +10 +-10 +10 +-10 +-15 +-15 +-62 +-63 +64 +-64 +64 +-64 +-68 +-93 +-94 +94 +-94 +94 +-94 +-94 +-94 +-94 +-94 +-94 +-94 +94 +94 +94 +94 +-94 +-94 +-94 +-94 +-94 +94 +-94 +95 +95 +95 +95 +95 +95 +-95 +-95 +-95 +-95 +-99 +-100 +100 +-49411 diff --git a/src/b2qt-flashing-wizard/data/iMX6-eLinux.progress b/src/b2qt-flashing-wizard/data/iMX6-eLinux.progress new file mode 100644 index 0000000..007c009 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/iMX6-eLinux.progress @@ -0,0 +1,7383 @@ +-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 +-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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +15 +15 +-15 +-15 +-15 +-15 +15 +-15 +-15 +-15 +-15 +-15 +15 +15 +15 +15 +15 +15 +15 +-15 +-15 +-16 +-16 +-16 +16 +-16 +-16 +-16 +-16 +-16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +-17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +-18 +-99 +-100 +100 +-200603 diff --git a/src/b2qt-flashing-wizard/data/imx6qsabresd-eLinux.progress b/src/b2qt-flashing-wizard/data/imx6qsabresd-eLinux.progress new file mode 100644 index 0000000..0ca9b17 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/imx6qsabresd-eLinux.progress @@ -0,0 +1,7298 @@ +-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 +-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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +15 +15 +-15 +-15 +-15 +-15 +15 +-15 +-15 +-15 +-15 +-15 +15 +15 +15 +15 +15 +15 +-15 +-15 +-16 +-16 +16 +16 +16 +-16 +-17 +17 +-17 +-17 +-17 +-17 +-17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +-17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +-18 +-99 +-100 +100 +-204341 diff --git a/src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-adb.progress b/src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-adb.progress new file mode 100644 index 0000000..632b860 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-adb.progress @@ -0,0 +1,719 @@ +-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 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +0 +-0 +-0 +-0 +-0 +0 +-0 +-0 +0 +-0 +0 +1 +1 +1 +1 +-1 +1 +-1 +1 +1 +1 +1 +1 +-1 +1 +-1 +1 +1 +1 +-1 +-7 +7 +-7 +-7 +-8 +-8 +-8 +-8 +8 +-8 +-8 +-9 +-11 +-11 +46 +46 +-46 +46 +-46 +-46 +-47 +-47 +-47 +47 +-47 +-47 +-47 +-47 +-50 +-50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +99 +99 +-99 +99 +-99 +-99 +99 +-99 +-235078 diff --git a/src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-fastboot.progress b/src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-fastboot.progress new file mode 100644 index 0000000..e25be3c --- /dev/null +++ b/src/b2qt-flashing-wizard/data/nexus7-4.4-eAndroid-fastboot.progress @@ -0,0 +1,719 @@ +-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 +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 +0 +0 +0 +-0 +0 +-0 +0 +0 +0 +-0 +-6 +6 +-6 +-6 +-7 +-7 +-7 +-7 +7 +-7 +-7 +-8 +-10 +-10 +46 +46 +-46 +46 +-46 +-46 +-47 +-47 +-47 +47 +-47 +-47 +-47 +-47 +-49 +-49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-51 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-52 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +99 +99 +-99 +99 +-99 +-99 +99 +-99 +-232579 diff --git a/src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-adb.progress b/src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-adb.progress new file mode 100644 index 0000000..a29320f --- /dev/null +++ b/src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-adb.progress @@ -0,0 +1,719 @@ +-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 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +-0 +0 +-0 +-0 +-0 +-0 +0 +-0 +-0 +0 +-0 +0 +3 +3 +3 +3 +-3 +3 +-3 +3 +4 +4 +4 +4 +-4 +4 +-4 +4 +4 +4 +-4 +-14 +14 +-14 +-14 +-14 +-14 +-14 +-14 +14 +-14 +-14 +-16 +-20 +-20 +51 +51 +-51 +51 +-51 +-51 +-53 +-53 +-53 +53 +-53 +-53 +-53 +-53 +-57 +-57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +-65 +99 +99 +-99 +99 +-99 +-99 +99 +-99 +-144806 diff --git a/src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-fastboot.progress b/src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-fastboot.progress new file mode 100644 index 0000000..f704e03 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/nexus7v2-4.4-eAndroid-fastboot.progress @@ -0,0 +1,719 @@ +-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 +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 +0 +0 +0 +-0 +0 +-0 +0 +0 +0 +-0 +-9 +9 +-9 +-9 +-9 +-9 +-9 +-9 +9 +-9 +-9 +-11 +-15 +-15 +48 +48 +-48 +48 +-48 +-48 +-49 +-49 +-49 +49 +-49 +-49 +-49 +-49 +-53 +-53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +99 +99 +-99 +99 +-99 +-99 +99 +-99 +-159684 diff --git a/src/b2qt-flashing-wizard/data/raspberrypi-eLinux.progress b/src/b2qt-flashing-wizard/data/raspberrypi-eLinux.progress new file mode 100644 index 0000000..7bf3401 --- /dev/null +++ b/src/b2qt-flashing-wizard/data/raspberrypi-eLinux.progress @@ -0,0 +1,13218 @@ +-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 +-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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +13 +13 +-13 +-13 +-13 +-13 +13 +-13 +-13 +-13 +-13 +-13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +-13 +-13 +-15 +-15 +-15 +15 +-15 +-15 +-15 +-15 +-15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +-16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +-16 +-99 +-100 +100 +-227971 diff --git a/src/b2qt-flashing-wizard/device_page.cpp b/src/b2qt-flashing-wizard/device_page.cpp new file mode 100644 index 0000000..313ccce --- /dev/null +++ b/src/b2qt-flashing-wizard/device_page.cpp @@ -0,0 +1,269 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "device_page.h" +#include "common.h" +#include "mainwindow.h" // for Page_ enum +#include +#include +#include +#include +#include +#include +#include +#include + +extern QString G_SDKDIR; +extern QString G_device; +extern QString G_board; +extern QString G_mode; + +QLabel *createErrorLabel(QWidget *parent); + +DevicePage::DevicePage(QWidget *parent) + : QWizardPage(parent) + , mListWidget(new QListWidget(this)) + , mError(createErrorLabel(this)) + , mLayout(new QVBoxLayout(this)) +{ + setTitle("Device selection"); + setSubTitle("Select a device to be used"); + mLayout->addWidget(mListWidget); + mLayout->addSpacerItem(new QSpacerItem(40,40,QSizePolicy::Minimum, QSizePolicy::Expanding)); + mLayout->addWidget(mError); + setLayout(mLayout); + connect(mListWidget, &QListWidget::itemClicked, this, &DevicePage::itemSelected); + + QTimer *timer = new QTimer(this); + timer->setInterval(1000); + connect(timer, &QTimer::timeout, this, &DevicePage::updateDeviceList); + timer->start(); +} + +DevicePage::~DevicePage() +{ +} + +QList DevicePage::list() const +{ + QList diList; + + QProcess process; + process.start(G_SDKDIR + "/Tools/b2qt/adb", QStringList() << "devices" << "-l"); + process.waitForFinished(); + + QList lines = process.readAll().split('\n'); + foreach (const QByteArray &ba, lines) { + if (ba.startsWith("List of")) + continue; + if (ba.isEmpty()) + continue; + if (ba.startsWith("192.168.56.101:")) + continue; + QList token = ba.simplified().split(' '); + + if (token.size() == 6){ + DeviceInfo d; + + if (token[5].startsWith("device:")) { + QString deviceName = token[5].mid(7); + if (deviceName == "grouper") + d.name = "Nexus7"; + else if (deviceName == "flo") + d.name = "Nexus7v2"; + else + d.name = deviceName; + } + d.serial = token[0]; + d.mode = "adb"; + if (token[1] == "device") + d.state = "ready"; + else + d.state = "not ready"; + diList.append(d); + } else if (token.size() == 3) { + DeviceInfo d; + d.serial = token[0]; + d.mode = "adb"; + d.name = "Unknown device"; + if (token[1] == "offline") + d.state = "not ready"; + else { + qDebug() << "Unknown state:" << token[1]; + continue; + } + diList.append(d); + } else { + qDebug() << "Invalid token count:" << token.size() << token; + continue; + } + + } + + process.start(G_SDKDIR + "/Tools/b2qt/fastboot", QStringList("devices") << "-l"); + process.waitForFinished(); + lines = process.readAll().split('\n'); + foreach (const QByteArray &ba, lines) { + if (ba.isEmpty()) + continue; + + QList token = ba.simplified().split(' '); + + if (token.size() != 3) { + qDebug() << "Invalid token count:" << token; + continue; + } + + + DeviceInfo d; + d.serial = token[0]; + + QProcess p2; + p2.start(G_SDKDIR + "/Tools/b2qt/fastboot", QStringList() << "-s" << d.serial << "getvar" << "product"); + if (!p2.waitForFinished()) { + qDebug() << "Could not get product type"; + d.name = "Unknown"; + } + + QString productString = p2.readAllStandardError().split('\n')[0].simplified(); + if (productString.startsWith("product: ")) { + QString productName = productString.mid(9); + if (productName == "grouper") + d.name = "Nexus7"; + else if (productName == "flo") + d.name = "Nexus7v2"; + else + d.name = "Unknown"; + } else + d.name = "Unknown"; + + d.mode = "fastboot"; + d.state = "ready"; + diList.append(d); + } + + return diList; +} + +bool DevicePage::isComplete() const +{ + int index = mListWidget->currentRow(); + if (index < 0 || index >= mListItems.size()) { + return false; + } + + return true; +} + +void DevicePage::itemSelected() +{ + emit completeChanged(); +} + +void DevicePage::updateDeviceList() +{ + if (wizard()->currentPage() != this) + return; + + QList diList = list(); + + QStringList currentDevices; + + foreach (const DeviceInfo &di, diList) + currentDevices += di.serial; + + QMutableMapIterator iter(mListItems); + while (iter.hasNext()) { + iter.next(); + if (!currentDevices.contains(iter.key())) { + mDeviceInfo.remove(iter.key()); + delete iter.value(); + iter.remove(); + } + } + + foreach (const DeviceInfo &di, diList) { + QString text = "

%1

Serial number%2
Mode%3
State%4
"; + text = text.arg(di.name, di.serial, di.mode, di.state); + + mDeviceInfo[di.serial] = di; + if (mListItems.contains(di.serial)) { + // update existing item + QListWidgetItem *item = mListItems.value(di.serial); + QLabel *label = qobject_cast(mListWidget->itemWidget(item)); + label->setText(text); + } else { + // new item + QListWidgetItem *item = new QListWidgetItem(); + item->setData(Qt::UserRole, di.serial); + QLabel *label = new QLabel; + label->setText(text); + mListWidget->addItem(item); + mListWidget->setItemWidget(item, label); + item->setSizeHint(label->size()); + mListItems.insert(di.serial, item); + } + } + + if (mListWidget->count() == 0) + mError->setText("No suitable device found"); + else + mError->setText(""); + + emit completeChanged(); +} + + +void DevicePage::initializePage() +{ + mError->clear(); + updateDeviceList(); +} + +bool DevicePage::validatePage() +{ + QListWidgetItem *item = mListWidget->currentItem(); + if (!item) { + return false; + } + + QString serial = item->data(Qt::UserRole).toString(); + if (serial.isEmpty()) { + return false; + } + + if (!mDeviceInfo.contains(serial)) { + return false; + } + + DeviceInfo deviceInfo = mDeviceInfo[serial]; + if (deviceInfo.state != "ready") { + return false; + } + + G_device = deviceInfo.serial; + G_board = deviceInfo.name.toLower(); + G_mode = deviceInfo.mode; + return true; +} + +int DevicePage::nextId() const +{ + return MainWindow::Page_Commit; +} diff --git a/src/b2qt-flashing-wizard/device_page.h b/src/b2qt-flashing-wizard/device_page.h new file mode 100644 index 0000000..d0f26a2 --- /dev/null +++ b/src/b2qt-flashing-wizard/device_page.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef DEVICE_PAGE_H +#define DEVICE_PAGE_H + +#include +#include +class QListWidget; +class QLabel; +class QVBoxLayout; +class QListWidgetItem; + +class DevicePage : public QWizardPage +{ + Q_OBJECT +public: + DevicePage(QWidget *parent = 0); + virtual ~DevicePage(); + bool isComplete() const; + void initializePage(); + bool validatePage(); + int nextId() const; + +private slots: + void itemSelected(); + void updateDeviceList(); + +private: + struct DeviceInfo + { + QString name; + QString serial; + QString mode; + QString state; + }; + QList list() const; + +private: + QListWidget *mListWidget; + QMap mListItems; + QMap mDeviceInfo; + QLabel *mError; + QVBoxLayout *mLayout; +}; + +#endif // DEVICE_PAGE_H diff --git a/src/b2qt-flashing-wizard/disk_page.cpp b/src/b2qt-flashing-wizard/disk_page.cpp new file mode 100644 index 0000000..c96e347 --- /dev/null +++ b/src/b2qt-flashing-wizard/disk_page.cpp @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "disk_page.h" +#include "common.h" +#include "elevator.h" +#include "mainwindow.h" // for Page_ enum +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern QString G_device; +QLabel *createErrorLabel(QWidget *parent); + +DiskPage::DiskPage(QWidget *parent) + : QWizardPage(parent) + , mListWidget(new QListWidget(this)) + , mError(createErrorLabel(this)) + , mLayout(new QVBoxLayout(this)) +{ + setTitle("Disk selection"); + setSubTitle("Select a disk to be used"); + mLayout->addWidget(mListWidget); + mLayout->addSpacerItem(new QSpacerItem(40,40,QSizePolicy::Minimum, QSizePolicy::Expanding)); + mLayout->addWidget(mError); + setLayout(mLayout); + connect(mListWidget, &QListWidget::itemClicked, this, &DiskPage::itemSelected); + + QTimer *timer = new QTimer(this); + timer->setInterval(1000); + connect(timer, &QTimer::timeout, this, &DiskPage::updateDeviceList); + timer->start(); + + // Remember devices already present at startup + foreach (const DiskInfo &di, list()) { + if (!di.removable) + mHiddenDevices += di.path; + } +} + +DiskPage::~DiskPage() +{ +} + +QList DiskPage::list() const +{ + QList diList; + + QDir sys("/sys/block"); + + foreach (const QString &i, sys.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + DiskInfo di; + + if (readAll(sys.absoluteFilePath(i) + "/removable").trimmed() == "1") + di.removable = true; + else + di.removable = false; + + di.logicalBlockSize = readAll(sys.absoluteFilePath(i) + "/queue/logical_block_size").trimmed().toULong(); + di.blocks = readAll(sys.absoluteFilePath(i) + "/size").trimmed().toULong(); + di.name = i; + di.path = "/dev/" + i; + + checkForDeviceMounted(di.path, di.mountPoint, di.mountPartition); + + diList.append(di); + } + + return diList; +} + +bool DiskPage::isComplete() const +{ + QListWidgetItem *item = mListWidget->currentItem(); + if (!item) + return false; + + QString path = item->data(Qt::UserRole).toString(); + if (path.isEmpty()) + return false; + if (!mListItems.contains(path)) + return false; + + return true; +} + +void DiskPage::itemSelected() +{ + emit completeChanged(); +} + +void DiskPage::updateDeviceList() +{ + if (wizard()->currentPage() != this) + return; + + QList diList = list(); + + QSet currentDevices; + + { // filter devices by name, size etc. + QMutableListIterator iter(diList); + + while (iter.hasNext()) { + iter.next(); + const DiskInfo &di = iter.value(); + + if (di.logicalBlockSize == 0 || di.blocks == 0 || di.name.startsWith("ram")) { + iter.remove(); + continue; + } + currentDevices += di.path; + } + } + + { // Update hidden devices list if a device was removed + QMutableSetIterator iter(mHiddenDevices); + + while (iter.hasNext()) { + iter.next(); + if (!currentDevices.contains(iter.value())) + iter.remove(); + } + } + currentDevices.subtract(mHiddenDevices); + + // Remove devices from map and UI + QMutableMapIterator iter(mListItems); + while (iter.hasNext()) { + iter.next(); + if (!currentDevices.contains(iter.key())) { + mDiskInfo.remove(iter.key()); + delete iter.value(); + iter.remove(); + } + } + + foreach (const DiskInfo &di, diList) { + if (!currentDevices.contains(di.path)) + continue; + + QString text = "

%1

Size%2
Removable%3
Mounted%4
"; + double size = di.logicalBlockSize * di.blocks; + QString sizeText; + + if (size < 1000) { + sizeText = QString::number(size) + QLatin1String(" B"); + } else if (size < 1000000) { + sizeText = QString::number(size / 1000) + QLatin1String(" KB"); + } else if (size < 1000000000) { + sizeText = QString::number(size / 1000000) + QLatin1String(" MB"); + } else { + sizeText = QString::number(qRound(size / 1000 / 1000 / 1000)) + QLatin1String(" GB"); + } + + text = text.arg(di.name, sizeText, di.removable?QLatin1String("yes"):QLatin1String("no"), di.mountPoint.isEmpty()?"no":di.mountPoint); + + mDiskInfo[di.path] = di; + if (mListItems.contains(di.path)) { + // update existing item + QListWidgetItem *item = mListItems.value(di.path); + QLabel *label = qobject_cast(mListWidget->itemWidget(item)); + label->setText(text); + } else { + // new item + QListWidgetItem *item = new QListWidgetItem(); + item->setData(Qt::UserRole, di.path); + QLabel *label = new QLabel; + label->setText(text); + mListWidget->addItem(item); + mListWidget->setItemWidget(item, label); + item->setSizeHint(label->size()); + mListItems.insert(di.path, item); + } + } + + if (mListWidget->count() == 0) + mError->setText("No suitable disk device found. Insert device now."); + else + mError->setText(""); + + emit completeChanged(); +} + +void DiskPage::initializePage() +{ + mError->clear(); + updateDeviceList(); +} + +bool DiskPage::validatePage() +{ + QListWidgetItem *item = mListWidget->currentItem(); + if (!item) + return false; + QString path = item->data(Qt::UserRole).toString(); + if (path.isEmpty()) + return false; + + DiskInfo di = mDiskInfo[path]; + + if (!di.mountPoint.isEmpty()) { + // Ask the user before unmount + if (QMessageBox::Ok != QMessageBox::warning(this, "Unmount action", "The disk you selected is mounted at " + di.mountPoint + ". It will be unmounted now.", QMessageBox::Ok | QMessageBox::Cancel)) + return false; + + QStringList args = elevate(); + args << "umount" << di.mountPoint; + + int rc = QProcess::execute(args.takeFirst(), args); + if (rc != 0) { + QMessageBox::critical(this, "Unmount failed", "Could not umount the disk."); + return false; + } + } + + G_device = path; + return true; +} + +int DiskPage::nextId() const +{ + return MainWindow::Page_Commit; +} diff --git a/src/b2qt-flashing-wizard/disk_page.h b/src/b2qt-flashing-wizard/disk_page.h new file mode 100644 index 0000000..abc0ba5 --- /dev/null +++ b/src/b2qt-flashing-wizard/disk_page.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef DISK_PAGE_H +#define DISK_PAGE_H + +#include +#include +#include +class QListWidget; +class QLabel; +class QVBoxLayout; +class QListWidgetItem; + +class DiskPage : public QWizardPage +{ + Q_OBJECT +public: + DiskPage(QWidget *parent = 0); + virtual ~DiskPage(); + bool isComplete() const; + void initializePage(); + bool validatePage(); + int nextId() const; + +private slots: + void itemSelected(); + void updateDeviceList(); + +private: + struct DiskInfo + { + QString path; + bool removable; + QString name; + quint64 logicalBlockSize; + quint64 blocks; + QString mountPoint; + QString mountPartition; + }; + QList list() const; + +private: + QListWidget *mListWidget; + QMap mListItems; + QMap mDiskInfo; + QLabel *mError; + QVBoxLayout *mLayout; + QSet mHiddenDevices; +}; + +#endif // DISK_PAGE_H diff --git a/src/b2qt-flashing-wizard/elevator.cpp b/src/b2qt-flashing-wizard/elevator.cpp new file mode 100644 index 0000000..f4e087a --- /dev/null +++ b/src/b2qt-flashing-wizard/elevator.cpp @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "elevator.h" + +#include +#include +#include + +QStringList elevate() +{ + QStringList rc; + + int trySudo = QProcess::execute("sudo", QStringList() << "-n" << "echo" << "foo"); + if (trySudo == 0) { + qDebug() << "Sudo seems to work"; + rc << "sudo" << "--"; + return rc; + } + + if (QFile::exists("/usr/bin/kdesu")) { + rc << "/usr/bin/kdesu" << "-u" << "root" << "-t" << "--noignorebutton" << "--"; // @ARGS + } else if (QFile::exists("/usr/bin/gksu")) { + rc << "/usr/bin/gksu" << "-m" << "message" << "-u" << "root" << "--"; // @ARGS +// } else if (!QFile::exists("/usr/lib/ssh/x11-ssh-askpass")) { +// // SUDO_ASKPASS = @askpass-tool; +// qDebug() << "askpass"; +// rc << "sudo" << "-A" << "--"; // @ARGS + } + return rc; +} + diff --git a/src/b2qt-flashing-wizard/elevator.h b/src/b2qt-flashing-wizard/elevator.h new file mode 100644 index 0000000..903acc6 --- /dev/null +++ b/src/b2qt-flashing-wizard/elevator.h @@ -0,0 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include + +QStringList elevate(); diff --git a/src/b2qt-flashing-wizard/finish_page.cpp b/src/b2qt-flashing-wizard/finish_page.cpp new file mode 100644 index 0000000..854f21b --- /dev/null +++ b/src/b2qt-flashing-wizard/finish_page.cpp @@ -0,0 +1,33 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "finish_page.h" +#include + +FinishPage::FinishPage(QWidget *parent) + : QWizardPage(parent) +{ + setCommitPage(true); + setTitle("Finish"); + new QLabel("Setting up a Boot to Qt device completed.", this); +} + +FinishPage::~FinishPage() +{ +} diff --git a/src/b2qt-flashing-wizard/finish_page.h b/src/b2qt-flashing-wizard/finish_page.h new file mode 100644 index 0000000..a333e7c --- /dev/null +++ b/src/b2qt-flashing-wizard/finish_page.h @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef FINISH_PAGE_H +#define FINISH_PAGE_H + +#include + +class FinishPage : public QWizardPage +{ + Q_OBJECT + +public: + FinishPage(QWidget *parent = 0); + virtual ~FinishPage(); +}; + +#endif // FINISH_PAGE_H diff --git a/src/b2qt-flashing-wizard/introduction_page.cpp b/src/b2qt-flashing-wizard/introduction_page.cpp new file mode 100644 index 0000000..1417fe7 --- /dev/null +++ b/src/b2qt-flashing-wizard/introduction_page.cpp @@ -0,0 +1,33 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "introduction_page.h" +#include + +IntroductionPage::IntroductionPage(QWidget *parent) + : QWizardPage(parent) +{ + setTitle("Introduction"); +// setSubTitle(" "); + new QLabel("This wizard helps you setting up a Boot to Qt device", this); +} + +IntroductionPage::~IntroductionPage() +{ +} diff --git a/src/b2qt-flashing-wizard/introduction_page.h b/src/b2qt-flashing-wizard/introduction_page.h new file mode 100644 index 0000000..43575d6 --- /dev/null +++ b/src/b2qt-flashing-wizard/introduction_page.h @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef INTRODUCTION_PAGE_H +#define INTRODUCTION_PAGE_H + +#include + +class IntroductionPage : public QWizardPage +{ + Q_OBJECT + +public: + IntroductionPage(QWidget *parent = 0); + virtual ~IntroductionPage(); +// void initializePage(); +}; + +#endif // INTRODUCTION_PAGE_H diff --git a/src/b2qt-flashing-wizard/logo.png b/src/b2qt-flashing-wizard/logo.png new file mode 100644 index 0000000..1dfa8dc Binary files /dev/null and b/src/b2qt-flashing-wizard/logo.png differ diff --git a/src/b2qt-flashing-wizard/main.cpp b/src/b2qt-flashing-wizard/main.cpp new file mode 100644 index 0000000..0321e3e --- /dev/null +++ b/src/b2qt-flashing-wizard/main.cpp @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "mainwindow.h" +#include +//#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); +// qDebug() << QStyleFactory::keys(); + QStyle *style = QStyleFactory::create("Fusion"); + if (style) + app.setStyle(style); + app.setWindowIcon(QIcon(":logo.png")); + MainWindow mw; + mw.show(); + return app.exec(); +} diff --git a/src/b2qt-flashing-wizard/mainwindow.cpp b/src/b2qt-flashing-wizard/mainwindow.cpp new file mode 100644 index 0000000..fe66ed0 --- /dev/null +++ b/src/b2qt-flashing-wizard/mainwindow.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "mainwindow.h" +#include "introduction_page.h" +#include "platform_page.h" +#include "disk_page.h" +#include "device_page.h" +#include "commit_page.h" +#include "progress_page.h" +#include "finish_page.h" +#include +#include + +QString G_platform; // generic-4.4 / iMX6 +QString G_version; // Boot2Qt version +QString G_os; // eAndroid / eLinux +QString G_device; // serial number or SD Card +QString G_board; // nexus7v2,nexus7, etc... +QString G_SDKDIR; // install directory +QString G_mode; // adb or fastboot + +MainWindow::MainWindow() + : QWizard() +{ + setPixmap(QWizard::LogoPixmap, QPixmap(":logo.png")); + setPixmap(QWizard::BackgroundPixmap, QPixmap(":background.png")); + setPixmap(QWizard::WatermarkPixmap, QPixmap(":watermark.png")); + G_SDKDIR = qgetenv("SDKDIR"); + if (G_SDKDIR.isEmpty()) + G_SDKDIR = QDir::currentPath(); + if (!G_SDKDIR.endsWith('/')) + G_SDKDIR.append('/'); + + setWizardStyle(QWizard::ModernStyle); + setPage(Page_Intro, new IntroductionPage); + setPage(Page_Platform, new PlatformPage); + setPage(Page_Disk, new DiskPage); + setPage(Page_Device, new DevicePage); + setPage(Page_Commit, new CommitPage); + setPage(Page_Progress, new ProgressPage); + setPage(Page_Finish, new FinishPage); +} + +MainWindow::~MainWindow() +{ +} + diff --git a/src/b2qt-flashing-wizard/mainwindow.h b/src/b2qt-flashing-wizard/mainwindow.h new file mode 100644 index 0000000..517520e --- /dev/null +++ b/src/b2qt-flashing-wizard/mainwindow.h @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +class MainWindow : public QWizard +{ + Q_OBJECT + +public: + enum {Page_Intro, Page_Platform, Page_Disk, Page_Device, Page_Commit, Page_Progress, Page_Finish}; + MainWindow(); + virtual ~MainWindow(); +}; + +#endif // MAINWINDOW_H diff --git a/src/b2qt-flashing-wizard/platform_page.cpp b/src/b2qt-flashing-wizard/platform_page.cpp new file mode 100644 index 0000000..3adf9b9 --- /dev/null +++ b/src/b2qt-flashing-wizard/platform_page.cpp @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "platform_page.h" +#include +#include +#include +#include +#include +#include +#include "mainwindow.h" // Page_ enum + +extern QString G_platform; +extern QString G_version; +extern QString G_os; +extern QString G_device; +extern QString G_board; +extern QString G_SDKDIR; + +QLabel *createErrorLabel(QWidget *parent) +{ + QLabel *label = new QLabel(parent); + label->setAlignment(Qt::AlignHCenter); + label->setWordWrap(true); + + QFont f = label->font(); + f.setBold(true); + label->setFont(f); + + QPalette p = label->palette(); + p.setColor(QPalette::WindowText, Qt::red); + label->setPalette(p); + + return label; +} + +PlatformPage::PlatformPage(QWidget *parent) + : QWizardPage(parent) + , mError(createErrorLabel(this)) + , mLayout(new QVBoxLayout(this)) +{ + setTitle("Platform"); + setSubTitle("Select a platform to create a disk for"); + mLayout->addSpacerItem(new QSpacerItem(40,40,QSizePolicy::Minimum, QSizePolicy::Expanding)); + mLayout->addWidget(mError); + setLayout(mLayout); +} + +PlatformPage::~PlatformPage() +{ +} + +bool PlatformPage::isComplete() const +{ + QStringList data = buttonData(); + if (data.isEmpty()) + return false; + + if (data[0] == "nexus7") { + mError->setText("The selected platform is currently not supported."); + return false; + } + if (data[0] == "iMX6" && data[1] == "eAndroid") { + mError->setText("The selected platform is currently not supported."); + return false; + } + + return !data.isEmpty(); +} + +void PlatformPage::itemSelected() +{ + mError->clear(); + emit completeChanged(); +} + +void PlatformPage::initializePage() +{ + mError->clear(); + + qDeleteAll(mButtons); + mButtons.clear(); + mButtonData.clear(); + + QDir dir(G_SDKDIR); + foreach (const QString i, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + if (!i.startsWith("Boot2Qt-")) + continue; + + QDir dir2(dir.absoluteFilePath(i)); + foreach (const QString j, dir2.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + if (j.startsWith("emulator-")) + continue; + QStringList token = j.split('-'); + QString os = token.takeLast(); + QString name = token.join("-"); + + if (os == "eAndroid" && name.startsWith("generic-")) { + QString version = token[1]; + QDir dir3(dir2.absoluteFilePath(j) + "/images"); + foreach (const QString k, dir3.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + if (k == "common") + continue; + + if (!QFile::exists(dir3.absoluteFilePath(k) + "/deploy.sh")) + continue; + + QRadioButton *button = new QRadioButton; + button->setText(k + "-" + version + "-" + os + " (" + i + ")"); + mLayout->insertWidget(0, button); + connect(button, &QRadioButton::toggled, this, &PlatformPage::itemSelected); + mButtons.append(button); + mButtonData.insert(button, QStringList() << name << os << i << k); + } + + } else if (os == "eAndroid" || os == "eLinux") { + QRadioButton *button = new QRadioButton; + button->setText(j + " (" + i + ")"); + mLayout->insertWidget(0, button); + connect(button, &QRadioButton::toggled, this, &PlatformPage::itemSelected); + mButtons.append(button); + mButtonData.insert(button, QStringList() << name << os << i << name); + } + } + } + if (mButtons.isEmpty()) { + mError->setText("No suitable platform found.\nMake sure you have installed at least one hardware platform."); + } +} + +QStringList PlatformPage::buttonData() const +{ + QStringList data; + + foreach (QRadioButton *button, mButtons) { + if (button->isChecked()) { + data = mButtonData[button]; + break; + } + } + + return data; +} + +bool PlatformPage::validatePage() +{ + QStringList data = buttonData(); + + G_platform = data[0]; + G_os = data[1]; + G_version = data[2]; + G_board = data[3]; + + qDebug() << "Selected:" << G_platform << G_os << G_version << G_board; + return true; +} + +int PlatformPage::nextId() const +{ + if (G_board.startsWith("nexus7")) + return MainWindow::Page_Device; + else + return MainWindow::Page_Disk; +} diff --git a/src/b2qt-flashing-wizard/platform_page.h b/src/b2qt-flashing-wizard/platform_page.h new file mode 100644 index 0000000..215023a --- /dev/null +++ b/src/b2qt-flashing-wizard/platform_page.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef PLATFORM_PAGE_H +#define PLATFORM_PAGE_H + +#include +#include +class QRadioButton; +class QLabel; +class QVBoxLayout; + +class PlatformPage : public QWizardPage +{ + Q_OBJECT +public: + PlatformPage(QWidget *parent = 0); + virtual ~PlatformPage(); + bool isComplete() const; + void initializePage(); + bool validatePage(); + int nextId() const; + +private slots: + void itemSelected(); + +private: + QStringList buttonData() const; + + QList mButtons; + QMap mButtonData; + QLabel *mError; + QVBoxLayout *mLayout; +}; + +#endif // PLATFORM_PAGE_H diff --git a/src/b2qt-flashing-wizard/progress_page.cpp b/src/b2qt-flashing-wizard/progress_page.cpp new file mode 100644 index 0000000..de23942 --- /dev/null +++ b/src/b2qt-flashing-wizard/progress_page.cpp @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "progress_page.h" +#include "actor.h" +#include +#include +#include +#include +#include +#include + +ProgressPage::ProgressPage(QWidget *parent) + : QWizardPage(parent) + , mProgress(new QProgressBar(this)) + , mActor(0) + , mFinished(false) + , mTextEdit(new QTextEdit(this)) + , mNextProgress(0) + , mTimer(new QTimer(this)) +{ + setTitle("Disk creation"); + setSubTitle("Progress of writing the disk"); + setLayout(new QVBoxLayout(this)); + layout()->addWidget(mProgress); + mProgress->setMaximum(0); + mProgress->setMinimum(0); + QPushButton *button = new QPushButton(this); + button->setText("Show details"); + layout()->addWidget(button); + layout()->addWidget(mTextEdit); + QPushButton *copy = new QPushButton(this); + copy->setText("Copy to clipboard"); + layout()->addWidget(copy); + + connect(mTimer, &QTimer::timeout, this, &ProgressPage::progressTimeout); +} + +ProgressPage::~ProgressPage() +{ +} + +bool ProgressPage::isComplete() const +{ + return mFinished; +} + +void ProgressPage::initializePage() +{ + qDebug() << Q_FUNC_INFO; + Q_ASSERT(mActor); + mActor->start(); +} + +void ProgressPage::progressTimeout() +{ + int value = mProgress->value(); + ++value; + if (value > mNextProgress) + value = mNextProgress; + + mProgress->setValue(value); +} + +void ProgressPage::progress(unsigned int progress, unsigned int nextProgress, unsigned int milliseconds) +{ + if (nextProgress < progress) + qFatal("Error"); + + mNextProgress = nextProgress; + mProgress->setMaximum(100); + + if (milliseconds && nextProgress != progress) { + mTimer->setInterval(milliseconds / (nextProgress-progress)); + mTimer->start(); + } else + mTimer->stop(); + + qDebug() << "progress" << progress; + mProgress->setValue(progress); +} + +void ProgressPage::finished() +{ + qDebug() << Q_FUNC_INFO; + mFinished = true; + emit completeChanged(); + wizard()->next(); // progress to next page automatically +} + +void ProgressPage::setActor(Actor *actor) +{ + Q_ASSERT(actor); + mActor = actor; + connect(actor, &Actor::progress, this, &ProgressPage::progress); + connect(actor, &Actor::finished, this, &ProgressPage::finished); + connect(actor, &Actor::details, this, &ProgressPage::addDetails); +} + +void ProgressPage::addDetails(QByteArray newData) +{ + newData.replace(0x08 /* backspace */, ' '); + mTextEdit->append(QString::fromLocal8Bit(newData)); +} diff --git a/src/b2qt-flashing-wizard/progress_page.h b/src/b2qt-flashing-wizard/progress_page.h new file mode 100644 index 0000000..6f62a72 --- /dev/null +++ b/src/b2qt-flashing-wizard/progress_page.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef PROGRESS_PAGE_H +#define PROGRESS_PAGE_H + +#include +class QProgressBar; +class Actor; +class QTextEdit; + +class ProgressPage : public QWizardPage +{ + Q_OBJECT +public: + ProgressPage(QWidget *parent = 0); + virtual ~ProgressPage(); + bool isComplete() const; + void initializePage(); + void setActor(Actor *actor); + +public slots: + void progress(unsigned int, unsigned int, unsigned int); + void finished(); + void addDetails(QByteArray newData); + +private slots: + void progressTimeout(); + +private: + QProgressBar* mProgress; + Actor *mActor; + bool mFinished; + QTextEdit *mTextEdit; + int mNextProgress; + QTimer *mTimer; +}; + +#endif // PROGRESS_PAGE_H diff --git a/src/b2qt-flashing-wizard/progressor/main.cpp b/src/b2qt-flashing-wizard/progressor/main.cpp new file mode 100644 index 0000000..757f2b4 --- /dev/null +++ b/src/b2qt-flashing-wizard/progressor/main.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + QStringList args = app.arguments(); + + args.removeFirst(); + if (args.size() == 0) { + qDebug() << "Usage: Program to excute"; + return 1; + } + + QList timings; + QElapsedTimer timer; + QProcess p; + p.setProcessChannelMode(QProcess::MergedChannels); + QSocketNotifier notifier(0, QSocketNotifier::Read); + QFile standardInput; + if (!standardInput.open(0, QFile::ReadOnly)) + qFatal("open"); + QObject::connect(¬ifier, &QSocketNotifier::activated, [&p, &standardInput](){ p.write(standardInput.readAll());}); + + QObject::connect(&p, (void (QProcess::*)(int, QProcess::ExitStatus))&QProcess::finished, [&timings, &timer](int exitCode, QProcess::ExitStatus exitStatus) { + timings += -timer.elapsed(); + if (exitStatus != QProcess::NormalExit || exitCode != 0) { + qDebug() << "Something went wrong"; + qApp->exit(1); + return; + } + + qDebug() << "Doing calculations"; + double factor = 100.0/abs(timings.last()); + + for (int i = 0; i < timings.size(); ++i) { + qint32 value = timings[i]; + qint32 output = value * factor; + QString text; + if (i == timings.size()-1) + fprintf(stdout, "%d\n", value); + else { + if (output == 0 && value < 0) + fprintf(stdout, "-0\n"); + else + fprintf(stdout, "%d\n", output); + } + } + qApp->exit(0); + }); + + QObject::connect(&p, &QProcess::readyRead, [&p, &timer, &timings]() { + while (p.canReadLine()) { + QByteArray line = p.readLine(); + line.chop(1); + qDebug() << line; + + if (line.startsWith("+")) + timings += -timer.elapsed(); + else + timings += timer.elapsed(); + } + }); + + p.start("/bin/sh", QStringList() << "-x" << args); + timer.start(); + if (!p.waitForStarted()) + qFatal("Failed to start"); + + return app.exec(); +} + diff --git a/src/b2qt-flashing-wizard/progressor/progressor.pro b/src/b2qt-flashing-wizard/progressor/progressor.pro new file mode 100644 index 0000000..22c1cba --- /dev/null +++ b/src/b2qt-flashing-wizard/progressor/progressor.pro @@ -0,0 +1,3 @@ +SOURCES += main.cpp +CONFIG += c++11 +QT -= gui diff --git a/src/b2qt-flashing-wizard/scriptwriter.cpp b/src/b2qt-flashing-wizard/scriptwriter.cpp new file mode 100644 index 0000000..59996ed --- /dev/null +++ b/src/b2qt-flashing-wizard/scriptwriter.cpp @@ -0,0 +1,228 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#include "scriptwriter.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "elevator.h" +#include "common.h" + +ScriptWriter::ScriptWriter(QObject *parent) + : Actor(parent) + , mElapsed(new QElapsedTimer) + , mDebug(false) +{ + mProcess.setProcessChannelMode(QProcess::MergedChannels); + mDebug = qEnvironmentVariableIsSet("DEBUG"); +} + +ScriptWriter::~ScriptWriter() +{ + delete mElapsed; +} + +void ScriptWriter::setScriptFile(const QString &fileName) +{ + mScriptName = fileName; +} + +bool ScriptWriter::ready(QString &error) const +{ + if (mScriptName.isEmpty()) { + error = "File name is empty"; + return false; + } + + QFileInfo file(mScriptName); + if (!file.exists()) { + error = "File does not exist: " + mScriptName; + return false; + } + if (!file.isFile()) { + error = "File " + mScriptName + " is not a file"; + return false; + } + if (!file.isReadable()) { + error = "File is not readable"; + return false; + } + if (!file.isExecutable()) { + error = "File is not executable"; + return false; + } + if (file.size() == 0) { + error = "File is empty"; + return false; + } + + return true; +} + +void ScriptWriter::start() +{ + connect(&mProcess, &QProcess::readyReadStandardOutput, this, &ScriptWriter::readOutput); + connect(&mProcess, (void (QProcess::*)(QProcess::ProcessError))&QProcess::error, this, &ScriptWriter::processError); + connect(&mProcess, (void (QProcess::*)(int, QProcess::ExitStatus))&QProcess::finished, this, &ScriptWriter::processFinished); + + // Due to some random convenience output in the deploy scripts "set -x" has to be used to synchronize + QStringList args = elevate() << "/bin/sh" << "-x" << mScriptName << mAdditionalArgs; + qDebug() << "Executing" << args; + +/* QProcessEnvironment pe ; + QString var = qgetenv("XDG_SESSION_COOKIE"); + pe.insert("XDG_SESSION_COOKIE", var); + var = qgetenv("HOME"); + pe.insert("HOME", var); + mProcess.setProcessEnvironment(pe); + */ + mProcess.setProcessEnvironment(QProcessEnvironment::systemEnvironment()); + + mProcess.start(args.takeFirst(), args); + if (!mProcess.waitForStarted()) + qFatal("Failed to start script"); + mElapsed->start(); + mProcess.write("y\n"); +} + +void ScriptWriter::readOutput() +{ + QByteArray ba = mProcess.readAllStandardOutput(); + QList baList = ba.split('\n'); + + static unsigned int currentProgress = 0; + unsigned int nextProgress = 0; + unsigned int milliseconds = 0; + + unsigned int whole = 0; + if (!mTimings.isEmpty()) + whole = mTimings.last().second; + + foreach (const QByteArray &line, baList) { + if (line.startsWith("+")) { + // Command line + while (!mTimings.isEmpty() && !mTimings.first().first) + mTimings.removeFirst(); + + // Should not happen + if (mTimings.isEmpty()) + break; + + currentProgress = mTimings.takeFirst().second; + } else { + // Output line + if (!mTimings.isEmpty() && !mTimings.first().first) + currentProgress = mTimings.takeFirst().second; + } + } + + if (!mTimings.isEmpty()) { + nextProgress = mTimings.first().second; + milliseconds = mTimings.last().second / 100 * (nextProgress - currentProgress); + } else { + nextProgress = currentProgress; + } + + double slowness = ((double)currentProgress / mElapsed->elapsed()) * (whole/100.0); +// if (slowness == 0) + slowness = 1; + + if (mDebug) { + qDebug() << ba; + qDebug() << "slowness:" << slowness << "currentProgress:" << currentProgress << "elapsed:" << mElapsed->elapsed() << "milliseconds:" << milliseconds << "nextProgress:" << nextProgress << "whole:" << whole << "stack:" << mTimings.size(); + } + + if (currentProgress > 100) + currentProgress = 100; + if (nextProgress > 100) + nextProgress = 100; + + if (currentProgress || nextProgress) + emit progress(currentProgress, nextProgress, milliseconds/slowness); + + emit details(ba); +} + +void ScriptWriter::processFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + if (exitStatus != QProcess::NormalExit) { + qWarning("process crashed"); + return; + } + + if (exitCode != 0) { + qWarning("process failed"); + return; + } + emit finished(); +} + +void ScriptWriter::processError(QProcess::ProcessError error) +{ + qWarning() << "processError" << error; +} + +void ScriptWriter::setEnvironment(const QString &key, const QString &value) +{ + QProcessEnvironment env = mProcess.processEnvironment(); + env.insert(key, value); + mProcess.setProcessEnvironment(env); +} + +void ScriptWriter::setProgressFile(const QString &fileName) +{ + mTimings.clear(); + + QFile f(fileName); + if (!f.open(QFile::ReadOnly)) { + qWarning() << "Could not open progress file"; + return; + } + + bool ok; + + while (!f.atEnd()) { + QByteArray line = f.readLine().simplified(); + + int i = line.toInt(&ok); + if (!ok) { + qWarning() << "Could not parse progress file:" << line; + mTimings.clear(); + return; + } + if (i < 0) + mTimings += qMakePair(true, -i); + else if (i == 0) + mTimings += qMakePair(line.startsWith('-'), 0); + else + mTimings += qMakePair(false, i); + } + + qDebug() << "steps" << mTimings.size(); +} + +void ScriptWriter::setAdditionalArgs(const QStringList &args) +{ + mAdditionalArgs = args; +} diff --git a/src/b2qt-flashing-wizard/scriptwriter.h b/src/b2qt-flashing-wizard/scriptwriter.h new file mode 100644 index 0000000..f820805 --- /dev/null +++ b/src/b2qt-flashing-wizard/scriptwriter.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://qt.digia.com/ +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://qt.digia.com/ +** +****************************************************************************/ + +#ifndef SCRIPTWRITER_H +#define SCRIPTWRITER_H + +#include "actor.h" +#include +class QElapsedTimer; + +class ScriptWriter : public Actor +{ + Q_OBJECT + +public: + ScriptWriter(QObject *parent); + virtual ~ScriptWriter(); + void setScriptFile(const QString &fileName); + void setProgressFile(const QString &fileName); + bool ready(QString &) const; + void start(); + void setEnvironment(const QString &key, const QString &value); + void setAdditionalArgs(const QStringList &); + +private slots: + void readOutput(); + void processFinished(int, QProcess::ExitStatus); + void processError(QProcess::ProcessError); + +private: + QList > mTimings; + QString mScriptName; + QProcess mProcess; + qint32 mLastProgress; + QElapsedTimer *mElapsed; + QStringList mAdditionalArgs; + bool mDebug; +}; + +#endif // SCRIPTWRITER_H diff --git a/src/b2qt-flashing-wizard/watermark.png b/src/b2qt-flashing-wizard/watermark.png new file mode 100644 index 0000000..3ad314a Binary files /dev/null and b/src/b2qt-flashing-wizard/watermark.png differ -- cgit v1.2.3